版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
計算機基礎知識1-1 計算機發(fā)展與組成1946-1958第一代電子管計算機。磁鼓存儲器,機器語言、匯編語言編程。世界上第一臺數(shù)字計算機ENIAC。1-1-1發(fā)展概況1958-1964第二代晶體管計算機。磁芯作主存儲器,磁盤作外存儲器,開始使用高級語言編程。1964-1971第三代集成電路計算機。使用半導體存儲器,出現(xiàn)多終端計算機和計算機網絡。1971-第四代大規(guī)模集成電路計算機。出現(xiàn)微型計算機、單片微型計算機,外部設備多樣化。1981-第五代人工智能計算機。模擬人的智能和交流方式。1-1-2
計算機發(fā)展趨勢微型化─便攜式、低功耗巨型化─尖端科技領域的信息處理,需要超大容量、高速度智能化─模擬人類大腦思維和交流方式,多種處理能力系列化、標準化─便于各種計算機硬、軟件兼容和升級網絡化─網絡計算機和信息高速公路多機系統(tǒng)─大型設備、生產流水線集中管理(獨立控制、 故障分散、資源共享)1-1-3微型計算機組成結構微型計算機系統(tǒng)硬件微型計算機(主機)微處理器(CPU)軟件外圍設備運算器控制器存儲器(內存)RAMROM外部設備輔助設備輸入設備(鍵盤、掃描儀、語音識別儀…)輸出設備(顯示器、打印機、繪圖儀、…)輔助存儲器(磁帶、磁盤、光盤)輸入/輸出接口(PIO、SIO、CTC、ADC、DAC…)(I/O接口)總線(AB、DB、CB)系統(tǒng)軟件(操作系統(tǒng),編輯、編譯程序,故障診斷,監(jiān)控程序…)應用軟件(科學計算,工業(yè)控制,數(shù)據處理…)程序設計語言(機器語言、匯編語言、高級語言)電源電路時鐘電路單片機簡介單片機即單片機微型計算機,是將計算機主機(CPU、 內存和I/O接口)集成在一小塊硅片上的微型機。單片機開發(fā)系統(tǒng)有單片單板機和仿真器。實現(xiàn)單片機 應用系統(tǒng)的硬、軟件開發(fā)。單片機為工業(yè)測控而設計,又稱微控制器。具有三高優(yōu)勢(集成度高、可靠性高、性價比高)。主要應用于工業(yè)檢測與控制、計算機外設、智能儀器儀表、通訊設備、家用電器等。特別適合于嵌入式微型機應用系統(tǒng)。單片機發(fā)展概況1976-1978初級8位單片機IntelMCS-48系列1978-高檔8位單片機IntelMCS-51系列:-51子系列:8031/8051/8751-52子系列:8032/8052/8752低功耗型80C31高性能型80C252廉價型89C2051/10511983-16位單片機IntelMCS-96系列8098/8096、80C198/80C19632位單片機809602-1單片機的結構特點2-2單片機系統(tǒng)結構性能(一)高可靠性、高抗干擾能力(二)配置靈活(三)豐富的位處理功能(四)功能齊全(五)系統(tǒng)設計簡便一塊芯片集成了CPU、存儲器和I/O接口等功能部件。內部總線為單總線結構,地址、數(shù)據和控制三種信息分時占用內部總線。外部總線用于連接片外擴展存儲器和I/O接口芯片。單片機的芯片引腳為多功能引腳,以節(jié)省芯片引腳。2-3MCS-51單片機硬件結構
硬件配置基本配置:1.
8位CPU2.片內ROM/EPROM、RAM3.片內并行I/O接口4.片內16位定時器/計數(shù)器5.片內中斷處理系統(tǒng)6.片內全雙工串行I/O口MCS-51系列基本產品型號:8051、8031、8751稱為51子系列。不同型號MCS-51單片機CPU處理能力和指令系統(tǒng)完全兼容,只是存儲器和I/O接口的配置有所不同。
2-3-1
MCS-51總體結構MCS-51單片機內部結構2-3-2
MCS-51CPU(一)
CPU內部結構1.算術邏輯運算單元ALU(8位)+、–、×、÷算術運算,與、或、非、異或邏輯運算、循環(huán)移位、位處理。2.寄存器陣列(1)工作寄存器R0~R7
(8位)暫存運算數(shù)據和中間結果。4個工作寄存器區(qū),工作寄存器0區(qū)~3區(qū)。每個區(qū)均含8個寄存器R0~R7。用PSW中的兩位PSW.4和PSW.3來切換工作寄存器區(qū),選用一個工作寄存器區(qū)進行讀寫操作。(3)寄存器B(8位)與A累加器配合執(zhí)行乘、除運算。也可用作通用寄存器。(4)程序狀態(tài)字PSW(8位)存放ALU運算過程的標志狀態(tài)
CyACF0RS1RS0OV—P(5)數(shù)據指針DPTR(16位)存放片外存儲器地址,作為片外存儲器的指針。可分成兩個8位寄存器DPH、DPL使用。(2)累加器Acc(8位)需要ALU處理的數(shù)據和計算結果多數(shù)要經過A累加器。2.寄存器陣列(6)堆棧指針SP(8位)(7)程序計數(shù)器PC(16位)CPU總是按PC的指示讀取程序。PC可自動加1。因此CPU執(zhí)行程序一般是順序方式。當發(fā)生轉移、子程序調用、中斷和復位等操作,PC被強制改寫,程序執(zhí)行順序也發(fā)生改變。復位時,PC=0000H。堆棧是按“先進后出”原則存取數(shù)據的存儲區(qū)。MCS-51堆棧設在片內RAM區(qū)。數(shù)據入棧/出棧時,SP自動加1/減1,其內容始終為棧頂?shù)刂?。復位時SP=07H。MCS-51的寄存器在片內RAM都有映像地址。使用時,既可用寄存器名,也可用對應單元地址。(二)MCS-51時鐘及時序時鐘頻率范圍要求在1.2MHz~12MHz之間。1.內部時鐘方式:內部一個高增益反相放大器與片外石英晶體或陶瓷諧振器構成了一個自激振蕩器。晶體振蕩器的振蕩頻率決定單片機的時鐘頻率。思考題:設應用單片機晶振頻率為12MHz,問機器周期為多少?指令周期分別為多少?機器周期:完成一個基本操作所需要的時間。一個機器周期由12個時鐘周期組成。指令周期:一條指令的執(zhí)行時間。以機器周期為單位:單周期、雙周期和四周期指令。XTAL1
單片機
XTAL22.外部時鐘方式:外部振蕩器輸入時鐘信號。2-3-3
MCS-51單片機引腳1.I/O口線功能4個8位并行I/O接口引腳P0.0~P0.7、P1.0~P1.7
、P2.0~P2.7和
P3.0~P3.72.控制線ALE:地址鎖存允許信號端PSEN:外部程序存儲器讀選通信號端EA/VPP:程序存儲器選擇信號端和編程電源輸入端為多功能引腳,可自動切換用作數(shù)據總線、地址總線、控制總線和或I/O接口外部引腳。2.控制線
RST/VPD:復位信號端和后備電源輸入端。輸入10ms以上高電平脈沖,單片機復位。VPD使用后備電源,可實現(xiàn)掉電保護。 3.電源及時鐘引線工作電源:VCC、VSS、時鐘輸入:XTAL1、XTAL2
。
復位電路: 1)上電復位
2)外部信號復位單片機RSTK+5V200Ω1K30μF2-3-4
MCS-51存儲器配置普林斯頓結構:程序和數(shù)據共用一個存儲器邏輯空間,統(tǒng)一編址。哈佛結構:程序與數(shù)據分為兩個獨立存儲器邏輯空間,分開編址。物理上4個存儲器地址空間:片內/片外程序存儲器空間片內/片外數(shù)據存儲器空間邏輯上3個存儲器地址空間:64KB程序存儲器256B片內數(shù)據存儲器64KB片外數(shù)據存儲器
2-4-4
MCS-51存儲器配置
(一)程序存儲器64KB程序存儲器空間EA不同電平,選擇片內或片外低位存儲單元
(二)數(shù)據存儲器1.64KB片外數(shù)據存儲器空間(與擴展I/O接口共用)2.256B片內數(shù)據存儲器:1)
片內RAM
2)
特殊功能寄存器SFR
特殊存儲單元:復位入口:0000H中斷入口:0003H~0023H(二)數(shù)據存儲器2.
256B片內數(shù)據存儲器1)片內RAM工作寄存器區(qū):字節(jié)地址:00H~1FH位尋址區(qū):字節(jié)地址:20H~2FH位地址為:00H~7FH數(shù)據緩沖區(qū)/堆棧區(qū):字節(jié)地址:00H~7FH一般使用30H~7FH第三章
計算機指令系統(tǒng)3-1
指令格式3-2
指令尋址方式3-3
狀態(tài)標志3-4
MCS-51指令系統(tǒng)一.
匯編語言指令格式[標號:]操作碼操作數(shù)1,操作數(shù)2[;注釋]換行表示一條指令結束。
例:
LOOP:MOVA,#40H;取參數(shù)1.標號:指令的符號地址2.操作碼:指明指令功能。3.操作數(shù):指令操作對象數(shù)據、地址、寄存器名及約定符號。4.注釋行:說明指令在程序中的作用。
操作碼和操作數(shù)是指令主體。MOV__move傳送XCH__exchange交換ANL__andlogic與邏輯運算XRL__exclusiveor異或運算MUL__Multiply乘法RR__rotateright右循環(huán)SJMP__shortjump短跳轉RET__return子程序返回3-1
指令格式二.機器語言指令格式 操作碼[操作數(shù)1][操作數(shù)2] 有單字節(jié)、雙字節(jié)和三字節(jié)指令。匯編語言指令中操作碼和操作數(shù)是指令主體,稱為指令可執(zhí)行部分,指令表中可查出對應指令代碼。舉例:
匯編語言:
機器語言:
MOVA,R0 E8H MOVR6,#32H 7E32H MOV40H,#100H 754064H1110100001111110001100100111010101000000011001003-2指令尋址方式 3-2-1 操作數(shù)類型位(b)─位尋址區(qū)中的一位二進制數(shù)據字節(jié)(B)─8位二進制數(shù)據字(W)─16位雙字節(jié)數(shù)據 3-2-2
尋址方式 一.立即尋址方式 指令中給出實際操作數(shù)據(立即數(shù)),一般用于為寄存器或存儲器賦常數(shù)初值。
舉例:8位立即數(shù):MOVA,#40H ;A?40H16位立即數(shù):MOVDPTR,#2100H;DPTR?2100H二.直接尋址方式指令操作數(shù)是存儲器單元地址,數(shù)據在存儲器單元中。
MOVA,40H ;A?(40H)直接尋址方式對數(shù)據操作時,地址是固定值,而地址所指定的單元內容為變量形式。41H
78H40H
56H56H
例:設存儲器兩個單元的內容如圖所示,執(zhí)行指令MOVA,40H后A=?思考題:直接尋址方式指令和立即尋址方式指令的形式有什么不同?三.寄存器尋址方式
指令操作數(shù)為寄存器名,數(shù)據在寄存器中。
例:
MOVA,R0 ;A?R0
設指令執(zhí)行前A=20H,R0=40H,
執(zhí)行指令后,A=?,R0=?四.寄存器間接尋址方式
指令的操作數(shù)為寄存器名,寄存器中為數(shù)據地址。存放地址的寄存器稱為間址寄存器或數(shù)據指針。例:
MOVA,@R0 ;A?(R0)
設指令執(zhí)行前A=20H,R0=40H,地址為40H存儲器單元內容如圖所示。執(zhí)行指令后,A=?,R0=?,(40H)=?
41H 67H
40H34H34H40H34H40H40H01000000A00100000R001000000R0→五.變址間接尋址方式
數(shù)據在存儲器中,指令給出的寄存器中為數(shù)據的基地址和偏移量。
數(shù)據地址=基地址+偏移量。例:
MOVCA,@A+DPTR ;A?(A+DPTR)設指令執(zhí)行前A=09H,DPTR=2000H,存儲器單元內容如圖所示。執(zhí)行指令后,A=? DPTR=?12H2000H六.位尋址方式
指令給出位地址。一位數(shù)據在存儲器位尋址區(qū)。例:
MOVC,40H ;Cy?(位地址40H)設指令執(zhí)行前Cy=1,位地址40H存儲器單元如圖,執(zhí)行指令后,Cy=?28H0110001029H11010111位尋址區(qū)02008H 89H2009H12H3-4
MCS-51指令系統(tǒng)分析指令功能分類: 數(shù)據傳送、數(shù)據操作、布爾處理、程序控制。 3-4-1
數(shù)據傳送指令 實現(xiàn)寄存器、存儲器之間的數(shù)據傳送。
一.
內部傳送指令: 片內數(shù)據存儲器數(shù)據傳送。二.外部傳送指令: 片外數(shù)據存儲器數(shù)據傳送。 三.交換指令: 片內數(shù)據存儲器數(shù)據傳送。四.堆棧操作指令: 片內數(shù)據存儲器數(shù)據傳送。五.查表指令: 程序存儲器數(shù)據傳送。 (一)內部傳送指令:實現(xiàn)片內數(shù)據存儲器中數(shù)據傳送。
指令格式:MOV
目的操作數(shù),源操作數(shù)
尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間址。 習題1:找出配對指令,實現(xiàn)反向傳送。指令機器碼:11101rrrE8~EF11100101nE5
n1110011iE6、E7
01110100d74d
10101rrrn 1010011in85n1n2 90d1d2MOVA,Rn;A←Rn,Rn=R0~R7MOVA,n;A←(n),
MOVA,@Ri;A←(Ri),Ri=R0、R1MOVA,#d;A←d,
MOVRn,n;Rn←(n) MOV@Ri,n;(Ri)←(n) MOVn1,n2;(n1)←(n2) MOVDPTR,#d1d2;DPTR←d1d2例3-4-1:順序執(zhí)行下列指令序列,求每一步執(zhí)行結果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H習題2:用兩種尋址方式實現(xiàn),將片內RAM60H單元的數(shù)據傳送給累加器A。解:MOVA,#60HMOVR0,#60HMOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0解:MOVA,60H說明:只有指令表中的指令才有對應指令代碼,計算機才能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。1.一條指令中不能同時出現(xiàn)兩個工作寄存器:
非法指令: MOVR1,R2
MOVR2,@R02.間址寄存器只能使用R0、R1。
非法指令:MOVA,@R23.SFR區(qū)只能直接尋址,不能用寄存器間接尋址。
非法指令:MOVR0,#80H
MOVA,@R04.指令表: B:指令字節(jié)數(shù),M:機器周期數(shù)(二)外部傳送指令
實現(xiàn)片外數(shù)據存儲器和A累加器之間的數(shù)據傳送。
指令格式:MOVX
目的操作數(shù),源操作數(shù)尋址方式:片外數(shù)據存儲器用寄存器間址方式。1.DPTR作16位數(shù)據指針,尋址64KB片外RAM空間 MOVXA,@DPTR ;A←(DPTR)
MOVX@DPTR,A ;(DPTR)←A 2.Ri作8位數(shù)據指針,尋址256B片外RAM空間
MOVX A,@Ri ;A←(Ri)
MOVX @Ri,A ;(Ri)←A例3-4-2:
實現(xiàn)片外數(shù)據存儲器數(shù)據傳送(2000H)?(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A習題3:將片外RAM0000H單元的數(shù)據傳送到片內RAM的 60H單元。
;DPTR=2000H ;A=X ;DPTR=2100H ;(2100H)=X片外數(shù)據存儲器不能直接尋址。下列為非法指令:
MOVXA,2000HMOVX2100H,2000H思考題:為什么對DPTR的數(shù)據傳送使用內部傳送指令?(三)交換指令
實現(xiàn)片內RAM區(qū)的數(shù)據雙向傳送。1.字節(jié)交換指令
XCHA,Rn;A?Rn
XCHA,@Ri;A?(Ri)
XCHA,n;A?(n)習題4:將片內RAM60H單元與61H單元的數(shù)據交換。例:設A=29H,執(zhí)行指令XCHA,2AH后,A=? (2AH)=?38H29HXCH60H,61H←對嗎?29H2.半字節(jié)交換指令
XCHDA,@Ri;A0~3
?(Ri)0~3
SWAPA ;A4~7
?A0~3例3-4-3:將片內RAM2AH和2BH單元中的ASCII碼轉換成壓縮式BCD碼存入20H單元。A0000000000H00001000100000001000010108H80H85HMOVA,#0MOVR0,#2AHMOVR1,#2BHXCHDA,@R0SWAPAXCHDA,@R1XCHA,20H0000000000H0000000000H85HR1→R0→習題:交換片內RAM40H單元和41H單元的低半字節(jié)。(四)堆棧操作指令
入棧指令:PUSHn;SP?SP+1,(SP)?(n)
出棧指令:POP n;(n)?(SP),SP?SP-1例:設
A=02,B=56H,執(zhí)行下列指令后,SP=?,A=?,B=?
×
×
×
×
SP→ ×
×
×
×
SP→
02
× × ×
SP→ 56H
02
×
×
×
56H
02HSP→ × × ×SP→ 56H
02
× × ×SP→ 56H
02
×
×
× 56H
SP→
02
×02HA00H02H00H×02H02HSBR:MOVSP,#30H;設棧底
PUSHA PUSHB MOVA,#0 MOV B,#01
…
POP B POPA (五)查表指令
實現(xiàn)從程序存儲器讀取數(shù)據到A累加器,只能使用變址間接尋址方式。
多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。1.DPTR為基址寄存器
MOVC A,@A+DPTR;A?(A+DPTR) 查表范圍為64KB程序存儲器任意空間,稱為遠程查表指令。2.PC為基址寄存器
MOVC A,@A+PC ;A?(A+PC)
常數(shù)表只能在查表指令后256B范圍內。例:查表法求Y=X2。設X(0≤X≤15)在片內RAM的20H單元中,要求將查表求Y,存入片內RAM21H單元。1)
ORG1000H SQU: MOVDPTR,#TAB ;確定表首地址(基地址)
MOVA,20H ;取X(偏移量
MOVCA,@A+DPTR ;查表求Y=X2 MOV21H,A ;保存Y RET ;子程序結束
… ;其它程序段
ORG3000H ;常數(shù)表格首地址TAB: DB00,01,04,09,…,225 ;平方表2)指令地址
源程序
ORG1000H ;程序起始地址 1000H SQU: MOVA,20H ;取X 1002H ADDA,#3 ;修正偏移量 1004H MOVCA,@A+PC
;查表求Y=X2 1005H MOV21H,A ;存結果 1007H RET ;子程序結束 1008H TAB: DB00,01,04 ;平方表 100BH DB09,…,225 思考題:當0≤X≤255時,如何用查表法編程求Y=X2。例:查表法求Y=X2。設X(0≤X≤15)在片內RAM的20H單元中,要求將查表求Y,存入片內RAM21H單元。習題:找出指令錯誤并改正:1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片內RAM:(61H)←(60H) MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片內RAM←片外RAM3-4-2 算術運算指令與數(shù)據傳送指令不同,多數(shù)算術運算指令會影響標志位的狀態(tài),即CPU執(zhí)行算術運算指令后,根據數(shù)據操作情況自動設置標志位的狀態(tài)。3-3狀態(tài)標志
MCS-51的程序狀態(tài)字寄存器
PSW為標志寄存器。其格式如下:
1.標志位(自動設置狀態(tài))1)Cy:進位標志位 保存運算后最高位的進位/借位狀態(tài),當有進位/借位,Cy=1,否則Cy=0。2)AC:輔助進位標志位 保存低半字節(jié)的進位/借位狀態(tài),當D3產生進位/借位,AC=1,否則AC=0。用于十進制調整。3)OV:溢出標志位
OV=Cy7?Cy6,補碼運算產生溢出OV=1,否則OV=0。4)P:奇偶標志位 反映累加器A中數(shù)據的奇偶性。當1的個數(shù)為奇數(shù),P=1,否則P=0。2.用戶選擇位(編程設置狀態(tài))1)F0:用戶自定義標志位。
2)RS1、RS0:
工作寄存器區(qū)選擇位。
復位時,PSW=00HRS1RS0工作寄存器000區(qū)011區(qū)102區(qū)113區(qū)例:復位后,設置使用工作寄存器2區(qū),其余標志位不變。解:MOVPSW,#18H3-4-2算術運算指令
完成片內RAM和A中數(shù)據的加減乘除運算。 一.加減指令 1.加法指令
00111011
+00111011
0111011076H0011 1)不帶進位加法:ADD
A,源操作數(shù)
ADDA,R2;A←A+R2,影響Cy、OV、AC、P例1:A=3BH,PSW=0,執(zhí)行指令ADDA,#3BH求:A=,Cy=,OV=,AC=,P=, PSW=?01000001=41H
10011010
11100011
+
0
1
01111101
2)帶進位加法:ADDCA,源操作數(shù)
ADDCA,R2;A←A+R2+Cy,影響Cy、OV、AC、P7DH1100
例2:A=9AH,R2=E3H,PSW=0,執(zhí)行指令
ADDCA,R2
后求:
A=,Cy=,OV=,AC=,P=, PSW=?10000100=84H帶進位加法指令ADDC用于多字節(jié)運算例:設雙字節(jié)數(shù)X存在片內RAM41H、40H單元,Y存在42H、43H單元,編程求Z=X+Y,并存入片內RAM單元44H、45H、46H。ADDS:MOVA,40H ADDA,42H MOV44H,A MOVA,41H ADDCA,43H MOV45H,A MOVA,#0 ADDCA,#0 MOV46H,A RET;取被加數(shù)低字節(jié);加上加數(shù)低字節(jié);保存和的低字節(jié);取被加數(shù)高字節(jié);加上加數(shù)高字節(jié);保存和的高字節(jié);求高字節(jié)進位;子程序結束;低字節(jié)相加;高字節(jié)相加;計算高字節(jié)進位;子程序結束十進制加法指令:
ADDA,源操作數(shù)
DAA帶進位十進制加法指令:
ADDCA,源操作數(shù)
DAA作業(yè):BCD碼加法編程。 設X、Y為4位壓縮BCD碼,求Z=X+Y。BCD調整指令:
DA A ;對A中加法結果進行調整2.減法指令
SUBBA,源操作數(shù) ;帶借位減法指令
SUBBA,R2 ;A←A-R2-Cy, ;影響Cy、OV、AC、P000000
習題:編程求雙字節(jié)減法。設X、Y存在片內RAM60H起始單元,計算
Z=X-Y。例:A=5AH,R2=5AH,Cy=0,執(zhí)行下列指令
SUBBA,R2求: A=,Cy=,OV=,P=,AC=?3.增量、減量指令
INC
單操作數(shù) 如: INCR2 ;R2←R2+1
DEC
單操作數(shù)如:DECR2 ;R2←R2-1
INCDPTR ;DPTR←DPTR+1
不影響標志位狀態(tài)。
注意:沒有指令DECDPTR 可用指令DECDPL 代替4.乘除指令
MULAB ;BA←A×B,Cy←0, ;當積高字節(jié)B=0,OV←0;B≠0,則OV←1
例:A=96(60H),B=192(C0H),執(zhí)行指令MULAB后,
求:A=,B=,Cy=,OV=,P=?
解:
96×192=18432(4800H)00H48H01012H0CH000
例:A=156(F6H),B=13(0DH),執(zhí)行指令DIVAB后求:A=,B=,Cy=,OV=,P=? 解:
156÷13=18(12H),余數(shù)=12(0CH)。思考題:如何實現(xiàn)多字節(jié)數(shù)據的乘除運算。
DIVAB ;A÷B,A←商,B←余數(shù),Cy←0, ;當除數(shù)B=0,OV←1;B≠0,則OV←0 3-4-2
邏輯運算指令一.單操作數(shù)指令(A累加器為操作數(shù)) 1.A清0指令:CLRA;A←0 2.A取反指令:CPLA;A←/A3.循環(huán)移位指令:1)8位循環(huán)指令:
RLA;A循環(huán)左移一位
RRA;A循環(huán)右移一位2)9位循環(huán)指令:
RLCA;帶Cy循環(huán)左移一位
RRCA;帶Cy循環(huán)右移一位例3-4-7:設
A=11000101,Cy=0,分別執(zhí)行下列單條指令: CPLA 求:A=,Cy=
RLA
RLCA
001110100100010110100010101用9位循環(huán)指令實現(xiàn)多字節(jié)移位
例:編程將寄存器R6R5中的雙字節(jié)數(shù)X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0,設R6=55H,R5=AAH;R6=01010101,R5=10101010,Cy=0;R6=01010101,R5=01010100,Cy=1;R6=10101011,R5=01010100,Cy=0思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。(二)雙操作數(shù)邏輯運算指令(對位邏輯運算):
ANL、ORL、XRL習題1:如何將累加器A中的數(shù)據高4位清0,低位不變?
習題2:如何將寄存器R2中的數(shù)據奇數(shù)位取反,偶數(shù)位不變?例3-5-8
A=01××××××B,×表示隨機狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何?
XRLA,#0C0H ;將累加器A的內容D7、D6取反
ORLA,#03H ;將累加器A的內容D1、D0置1
ANLA,#0E7H ;將累加器A的內容D4、D3清0
解:執(zhí)行上述指令后,A=10×00×11B。
3-4-4
布爾變量操作指令
對片內RAM中位尋址區(qū)操作。位累加器Cy和位地址b。一.位傳送
MOVC,b;Cy?(b)
MOVb,C;(b)?Cy例:將位地址20H的一位數(shù)傳送到位地址30H中:
MOVC,20H MOV30H,C二.位清0、置1、取反:CLR、SETB、CPL: CLRC ;Cy?0, CLR40H ;(位地址40H)?0三.邏輯運算:ANL、ORL:
ANLC,40H;C←C∧(40H)
ANLC,/40H;C←C∧/(40H)例:設Cy=1,(位地址40H)=1,執(zhí)行指令
ANLC,/40H后,
Cy=?,(位地址40H)=?位地址表示法:
位地址40H,位寄存器F0,字節(jié)加位ACC.00習題:設累加器A中數(shù)據為29H,Cy=0,執(zhí)行指令 ORLC,0E3H后,Cy=?1
4-4-1
轉移指令
轉移指令通過改寫PC的當前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉。
按轉移條件分類:1)無條件轉移: 執(zhí)行無條件轉移指令,程序無條件轉移到指定處。2)條件轉移: 指令中給出轉移條件,執(zhí)行指令時,先測試條件,若滿足條件,則程序發(fā)生轉移,否則,仍順序執(zhí)行程序。按轉移方式分類:1)絕對轉移:指令給出轉移目的的絕對地址nn,執(zhí)行指令后,PC?nn。2)相對轉移:指令給出轉移目的與轉移指令的相對偏移量e,執(zhí)行指令后,PC?PC+e。例: 地址 源程序 1000H LJMP2000H 1003H …
…
2000H … ;轉移目的指令例: 地址 源程序 1000HSJMP02
…
1004H …;轉移目的指令
一.無條件轉移指令
1.長轉移指令:
LJMP nn
;PC?nn
指令機器碼:
02nnHnnL
指令轉移范圍:64KB
2.絕對轉移指令:
AJMP
pn ;PC?PC+2 ;PC10~0?pn10~0 ;PC15~11不變指令機器碼:pn10~800001,pn7~0
指令轉移范圍:2KB轉移時要求轉移前后保持PC15~11不變。相對偏移量e的計算式:
e=目的指令地址-(轉移指令地址+指令字節(jié)數(shù)) =目的地址-PC當前值
3.短轉移指令:
SJMP
e ;PC?PC+2,PC?PC+e指令機器碼:80H,e相對偏移量e為8位補碼。
指令轉移范圍:前128~后127字節(jié)
編程時,用標號代替轉移目的地址,轉移指令的操作數(shù)交給匯編程序計算。
LJMPNEXTAJMPNEXT
SJMPNEXT …
NEXT:例1:計算轉移指令的相對偏移量e,并判斷是否超出轉移范圍。
例2:求原地踏步指令的指令代碼
HERE:SJMPHERE
求出指令代碼為:80FEH
相對偏移量=2150H-(2130H+2)=001EH, 只取低8位:e=1EH 指令機器碼:801EH
習題:計算程序中轉移指令的相對偏移量e,并判斷是否超出轉移范圍。
地址 源程序
2130H LOOP: …
…
21B0H SJMPLOOP
指令地址 源程序 2130H SJMPNEXT
…
2150H NEXT:MOVA,R2
4.間接轉移指令(多分支轉移指令) JMP@A+DPTR.;PC?A+DPTR指令機器碼73H,指令轉移范圍64KB。KEY: MOVDPTR,#KTABMOVA,40HADDA,A
JMP@A+DPTRKTAB: AJMPFUNC0
AJMPFUNC1
…FUNC0:…
FUNC1:…
應用:處理功能鍵。要求不同功能鍵執(zhí)行不同程序段。設每個功能鍵對應一個鍵值X(0≤X≤FH)。
設X已存入片內RAM的40H單元中。若X=0,則執(zhí)行程序段FUNC0若X=1,則執(zhí)行程序段FUNC1
…。
二.條件轉移指令1.判零轉移指令 JZe ;PC←PC+2, ;若A=00H,PC←PC+e(轉移), ;若A≠00H,PC不變(不轉移)條件轉移指令形成程序的分支,賦予計算機判斷決策能力
轉移條件:1)標志位的狀態(tài)2)位地址中的狀態(tài)
JNZe ;PC←PC+2,若A≠00H, ;PC←PC+e(轉移) ;若A=00H,PC不變(不轉移)2.判Cy轉移指令 JCe ;Cy=1則轉移,Cy=0不轉移
JNCe ;Cy=0則轉移,Cy=1不轉移3.判位轉移指令
JBb,e ;(b)=1轉移,否則不轉移 JNBb,e ;(b)=0轉移,否則不轉移4.判位清0轉移指令: JBCb,e;(b)=1轉移,且(b)?0,否則不轉移5.比較不相等轉移指令:
CJNE
操作數(shù)1,操作數(shù)2,e
CJNEA,n,e;PC←PC+3 ;若A≠(n),則PC←PC+e ;且當A>(n),Cy=0,當A<(n),Cy=1; ;若A=(n),PC不變,且Cy=0。
相當于兩個操作數(shù)相減,僅影響標志狀態(tài),不保存結果
6.循環(huán)轉移指令:
DJNZ操作數(shù),e
DJNZR2,e;PC←PC+2,R2←R2-1 ;若R2≠0,PC←PC+e, ;若R2=0,PC不變。
例:用于循環(huán)結構程序。設要求程序循環(huán)執(zhí)行100次
MOVR2,#100 ;設循環(huán)計數(shù)器初值LOOP: … ;多次循環(huán)程序段
DJNZR2,LOOP ;循環(huán)控制 … ;循環(huán)結束
習題:當循環(huán)計數(shù)器初值為0,循環(huán)次數(shù)有多少?4-6-3
子程序調用和返回指令
子程序調用和返回指令也使程序發(fā)生轉移。一.長調用指令
LCALLnn;PC?PC+3, ;SP?SP+1,(SP)?PCL,SP?SP+1,(SP)?PCH ;PC?nn nn為子程序起始地址,編程時可用標號代替。 指令機器碼:12nnHnnL
指令調用范圍:64KB子程序調用過程:與轉移指令不同:轉移時,先用堆棧保存當前地址二.絕對調用指令
ACALLpn ;PC?PC+2
;SP?SP+1,(SP)?PCL,SP?SP+1,(SP)?PCH ;PC10~0?pn10~0 ;PC15~11不變
pn為子程序首地址 指令機器碼:pn10~810001,pn7~0
指令調用范圍2KB。三.子程序返回指令
RET
;PCH?(SP),SP?SP-1,PCL?(SP),SP?SP-1
指令機器碼:22H RET指令從堆棧彈出保存的PC地址,實現(xiàn)子程序返回。
20H 92H21H53H
SP→
SP→
SP→
SP→
SP→
PC 2000H
208FH
2092H
2100H
2150H
2153H
2200H
2250H
2251H
2153H
2092H
21FFH
2200H
SP→
SP→
SP→
SP→
SP→
SP→
SP→
SP→ MAIN:MOVSP,#30H;設置棧底
…
LCALLSUB ;調用子程序
…SUB: … ;子程序段
…
RET ;返回主程序例:子程序嵌套
4-1
匯編程序約定匯編語言程序:
用匯編語言編寫的、完成特定功能的指令序列。匯編程序:
能將匯編語言源程序轉換成機器語言目標程序的系統(tǒng)軟件。
匯編語言程序到機器語言程序的轉換過程稱為匯編。1.手工匯編:人工查指令表匯編。用于設計短小程序或調試程序的場合。2.機器匯編:用匯編程序進行匯編。源程序使用機器匯編要考慮匯編程序的約定1)按指令格式和語法規(guī)則編寫程序。常數(shù)的表示: 十進制數(shù):20 十六進制數(shù):87H,0F0H
二進制數(shù):01011001B
字符: ‘H’
字符串: “Hello”。2)使用偽指令提供匯編信息。匯編的主要任務:1)確定程序中每條匯編語言指令的指令機器碼。2)確定每條指令在存儲器中的存放地址。3)提供錯誤信息。 4)提供目標執(zhí)行文件(*.OBJ/*.HEX)和列表文件(*.LST)。一.匯編語言指令類型1.機器指令:指令系統(tǒng)中的全部指令,每條指令有對應的機器代碼。2.偽指令:匯編控制指令,僅提供匯編信息,沒有指令代碼。一.匯編語言指令類型3.宏指令: 宏匯編功能:將需要多次反復執(zhí)行的程序段定義成一個宏指令名(宏定義),編程時,可在程序中使用宏指令名來替代一段程序(宏調用)。宏定義過程:宏指令名MACRO
形式參數(shù)
… ;定義程序段
ENDM宏調用過程:
… 宏指令名實際參數(shù)
… 宏指令名實際參數(shù)二.匯編控制指令(偽指令)
常用偽指令及其功能:1.ORG—起始地址指令:指明程序和數(shù)據塊起始地址。指令地址機器碼 源程序
ORG 2000H 2000H7830 MAIN:MOVR0,#30H2002HE6 MOVA,@R0
… ORG3000H3000H23 DB23H,100,‘A’
3001H643002H 412.
DB—定義字節(jié)型常數(shù)指令。
例:DB12H,100,‘A’
4.EQU—等值。為標號或標識符賦值。
X1 EQU2000H
X2 EQU0FH
…
MAIN: MOVDPTR,#X1
ADDA,#X2
5.END
—結束匯編指令。例:START:…
…END START3.DW—定義字型常數(shù)指令。
例:
DW1234H,5678H4-2
匯編語言程序設計步驟一.確定方案和計算方法二.了解應用系統(tǒng)的硬件配置、性能指標。三.建立系統(tǒng)數(shù)學模型,確定控制算法和操作步驟。四.畫程序流程圖表示程序結構和程序功能五.編制源程序1.合理分配存儲器單元和了解I/O接口地址。2.按功能設計程序,明確各程序之間的相互關系。3.用注釋行說明程序,便于閱讀和修改調試和修改。開始1
YN?
常用程序結構:
直線程序、分支程序、循環(huán)程序、子程序
4-3直線程序直線程序又稱簡單程序,程序走向只有一條路徑。雙字節(jié)變補程序(設數(shù)據在R4R5中):MOV A,R5 ;取低字節(jié)CPL AADD A,#1 ;低字節(jié)變補MOV R5,AMOV A,R4 ;取高字節(jié)CPL AADDCA,#0 ;高字節(jié)變補MOV R4,A例4-3-4壓縮式BCD碼分解成為單字節(jié)BCD碼。MOV R0,#40H ;設指針MOV A,@R0 ;取一個字節(jié)MOV R2,A ;暫存ANL A,#0FH ;清0高半字節(jié)INC R0MOV @R0,A ;保存數(shù)據個位MOV A,R2SWAPA ;十位換到低半字節(jié)ANL A,#0FHINC R0MOV @R0,A ;保存數(shù)據十位十個4-4 分支程序
由條件轉移指令構成程序判斷框部分,形成程序分支結構。
4-4-2 單重分支程序一個判斷決策框,程序有兩條出路。兩種分支結構:條件滿足?N影響條件Y處理段條件滿足?N影響條件Y處理1處理2例求R2中補碼絕對值,正數(shù)不變,負數(shù)變補。
MOVA,R2 JNBACC.7,NEXT;為正數(shù)?
CPLA ;負數(shù)變補
INCA MOVR2,ANEXT:SJMPNEXT;結束行李計價: 當G≤5,M=G×3;
當G>5,M=G×3+(G-5)×(5-3)FRT:MOVA,40H ;取行李重量計價單位G MOVR3,A MOVB,#03H ;M=G×3 MULAB MOVR2,A ;暫存3G MOVA,R3 ;取回G CJNEA,#05H,L1;G≤5? SJMPWETC L1:JC WETC ;是,轉至WETC SUBBA,#05H ;否則M=3G+2(G-5) RLC A ADDA,R2WETC:MOV41H,A ;存結果M RET4-4-3 多重分支程序
一.多次使用條件轉移指令,形成兩個以上判斷框。例求符號函數(shù)Y=SGN(X)+1當X>0SGN(X)=0當X=0-1當X<0X=0?Y取XNY=0Y=+1開始Y=-1X<0?NY保存Y結束圖4-4-4求符號函數(shù)流程圖SYMB:MOVA,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X<0 MOVA,#1 ;X>0,Y=+1 SJMPSTORMINUS:MOVA,#0FFH;X<0,Y=-1STOR:MOV41H,A ;保存Y RET二.按分支號轉移如:分支號=0,程序轉移到ADDR0處;當分支號=1,程序轉移到ADDR1處;…。(1)用地址表法。設分支號已存入A。MTJS:MOVDPTR,#TAB;取表首地址
CLRC ;分支號×2
RLCA MOVR2,A MOVCA,@A+DPTR;取分支地址低位
PUSHACC ;入棧保存
MOVA,R2 INCA MOVCA,@A+DPTR;取分支地址高位
PUSHACC ;入棧保存
RET ;分支地址→PC,轉移TAB:DW ADDR0 ;分支地址表
DW ADDR1
… ADDR0: … ;程序段0…A=?0處理一處理二處理…1n(2)轉移表法。用分支轉移指令JMP@A+DPTR。設R7R6=分支號MTJS:MOVDPTR,#TAB;指向表首地址
MOVA,R7;分支號高字節(jié)×3
MOVB,#03H MULAB ;乘積不超過1字節(jié)
ADDA,DPH MOVDPH,A MOVA,R6;分支號低字節(jié)×3
MOVB,#03H MULAB XCHA,B
ADDA,DPH;DPH←DPH+((R7、R6)×3)高字節(jié)
MOVDPH,A XCHA,B ;A←((R7、R6)×3)低字節(jié)
JMP@A+DPTR;實現(xiàn)多分支轉移TAB:LJMPADDR0;轉移表
LJMPADDR1 … LJMPADDRNADDR0: … ;程序段0…A+DPTR←TAB+R7R6×3DPTR←TABJMP@A+DPTRLJMPROUT0LJMPROUT1LJMPROUTnR6R73×DPLDPHA+4-5
循環(huán)程序
包含多次重復執(zhí)行的程序段,循環(huán)結構使程序緊湊。
4-5-1 循環(huán)程序的構成循環(huán)控制?循環(huán)工作循環(huán)結束循環(huán)初始化YN各個環(huán)節(jié)任務:一.初始化部分循環(huán)準備工作。如:清結果單元、設指針、設循環(huán)控制變量初值等。二.循環(huán)體循環(huán)工作部分:需多次重復處理的工作。循環(huán)控制部分:1.修改指針和循環(huán)控制變量。2.檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。三.結束部分
處理和保存循環(huán)結果。允許0次循環(huán)的循環(huán)結構:在循環(huán)工作之前檢測循環(huán)條件。4-5-2 單重循環(huán)
簡單循環(huán)結構:循環(huán)體中不套循環(huán)。例:求n個單字節(jié)數(shù)據的累加,設數(shù)據串已在43H起始單元,數(shù)據串長度在42H單元,累加和不超過2個字節(jié)。SUM: MOV R0,#42H;設指針
MOV A,@R0 MOV R2,A ;循環(huán)計數(shù)器←n CLR A ;結果單元清0
MOV R3,AADD1:INC R0 ;修改指針
ADD A,@R0;累加
JNCNEXT ;處理進位
INC R3 ;有進位,高字節(jié)加1NEXT: DJNZ R2,ADD1;循環(huán)控制:數(shù)據是否加完?
MOV 40H,A;循環(huán)結束,保存結果
MOV 41H,R3 RET循環(huán)控制方法:計數(shù)控制、特征標志控制。 一.計數(shù)控制:設循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。例:為一串7位ASCII碼數(shù)據的D7位加上奇校驗,設數(shù)據存放在片外RAM的2101H起始單元,數(shù)據長度在2100H單元。
MOVDPTR,#2100H MOVXA,@DPTR MOVR2,ANEXT:INCDPTR MOVXA,@DPTR ORLA,#80H JNBP,PASS MOVX@DPTR,APASS:DJNZR2,NEXTDONE:SJMPDONE二.特征控制:設定循環(huán)結束標志實現(xiàn)循環(huán)控制。例:找正數(shù)表最小值。正數(shù)表存在片外RAM中以LIST為起始單元,用-1作為結束標志。START:MOV DPTR,#LIST ;數(shù)表首地址
MOV B,#127 ;預置最小值NEXT:MOVXA,@DPTR ;取數(shù)
INC DPTR ;修改指針
CJNEA,#-1,NEXT1;是否為數(shù)表結尾?
SJMPDONE ;循環(huán)結束NEXT1:CJNEA,B,NEXT2 ;比較NEXT2:JNC NEXT MOV B,A ;保存較小值
SJMPNEXTDONE:SJMPDONE習題統(tǒng)計一班考試為100分和不及格人數(shù),成績單在41H起始單元。軟件延時程序。
用循環(huán)程序將指令重復多次執(zhí)行,實現(xiàn)軟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年貴州事業(yè)單位聯(lián)考余慶縣招聘74人筆試備考試題及答案解析
- 2026年曲靖市師宗縣事業(yè)單位遴選工作人員(24人)筆試備考題庫及答案解析
- 2026浙江省財務開發(fā)有限責任公司招聘筆試備考試題及答案解析
- 2026重慶飛駛特人力資源管理有限公司外派至AIGC項目招聘考試備考試題及答案解析
- 廣安市廣安區(qū)廣福街道辦事處2026年選用1名片區(qū)紀檢監(jiān)督員筆試模擬試題及答案解析
- 2026年二胡教學揉弦技巧訓練
- 2026河南鄭州中原純化制程實驗室招聘5人考試備考題庫及答案解析
- 2026年環(huán)境監(jiān)測數(shù)據分析培訓
- 2025年教師人事編制考試及答案
- 2025年大理三中事業(yè)單位考試及答案
- GB/T 5578-2024固定式發(fā)電用汽輪機規(guī)范
- 《空氣源熱泵供暖工程技術規(guī)程》
- 河北省唐山市2023-2024學年高一上學期1月期末考試化學試題(含答案解析)
- 附件5:安全爬梯連墻件計算書
- 提高人行道透水磚鋪裝平整度穩(wěn)固性試驗合格率
- 松鋪系數(shù)計算表2
- 江蘇省高等職業(yè)教育實訓基地建設指南
- 中心靜脈導管沖管及封管專家共識解讀
- 白血病醫(yī)學知識培訓
- 護理敏感質量指標實用手冊解讀
- 圓柱彈簧通用作業(yè)指導書
評論
0/150
提交評論