版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、湖南理工學(xué)院機(jī)械學(xué)院湖南理工學(xué)院機(jī)械學(xué)院?jiǎn)纹瑱C(jī)原理 及應(yīng)用教程第三章第三章 MCS-51單片機(jī)指令系統(tǒng)及編程舉例單片機(jī)指令系統(tǒng)及編程舉例本章重點(diǎn):MCS-51單片機(jī)的尋址方式;MCS-51單片機(jī)的指令集;偽指令;匯編語(yǔ)言簡(jiǎn)單程序設(shè)計(jì); 指令是計(jì)算機(jī)功能的集中體現(xiàn),不同的計(jì)算機(jī)具有不同的指令系統(tǒng),但從格式上看都包含兩大部分:操作碼 操作數(shù)功能描述對(duì)象描述四類操作對(duì)象:特殊功能寄存器操作對(duì)象;片內(nèi)數(shù)據(jù)存儲(chǔ)器操作對(duì)象(工作寄存器、位);片外數(shù)據(jù)存儲(chǔ)器操作對(duì)象;程序存儲(chǔ)器操作對(duì)象;尋址方式:按指令中地址的表現(xiàn)形式獲取不同操作對(duì)象的方式。例如:ADD A,60H;助記指令 或:25H 60H;機(jī)器指令目
2、的操作數(shù)源操作數(shù)指令系統(tǒng)簡(jiǎn)介操作數(shù)51單片機(jī)根據(jù)功能和尋址方式的不同其指令集包含111條指令。2、每條指令在存儲(chǔ)器中占用一定的空間,以字節(jié)為單位,按所占的字節(jié)數(shù)分為:?jiǎn)巫止?jié)(49條)、雙字節(jié)(45條)、三字節(jié)(17條)。3、每條指令在執(zhí)行中要花一定時(shí)間,以機(jī)器周期為單位,按所占的機(jī)器周期數(shù)分為:?jiǎn)螜C(jī)器周期(64條)、雙機(jī)器周期(45條)、4個(gè)機(jī)器周期(2條)。1、按指令的功能分:數(shù)據(jù)傳送類指令:29條;算術(shù)運(yùn)算類:24條邏輯與移位類:24條;控制轉(zhuǎn)移類:17條位操作類:17條;尋址方式1、MCS51共有七種尋址方式:2、指令描述中的符號(hào)注釋Rn:當(dāng)前選用的工作寄存器(n=07),8個(gè)工作寄存器
3、分別用R0R7表示;Ri:當(dāng)前工作寄存器中的可作地址指針的寄存器(i=0,1)即R0,和R1;#data:表示 8 立即數(shù);#data16表示16位的立即數(shù);direct:8位片內(nèi)RAM的直接地址;addr11:11位的目的地址;addr16: 16位的目的地址;rel:相對(duì)地址(128127);:寄存器間接尋址符;/:位操作指令中的取反符. 還有幾個(gè)符號(hào)在后面介紹.立即尋址,直接尋址,寄存器尋址,寄存器間接尋址,變址尋址,相對(duì)尋址和位尋址。尋址的空間: 程序存貯器空間。該尋址方式所表示的操作對(duì)象緊跟在指令后面的存儲(chǔ)單元; 例如:指令 : MOV A , #45H 機(jī)器碼:74 45HPC10
4、00H1001H744545A2.操作對(duì)象表現(xiàn)形式:在數(shù)的前面加一個(gè)#“字號(hào);3.應(yīng)用:一般用于初始化數(shù)據(jù)常數(shù)或地址常數(shù);立即尋址直接尋址1.尋址的空間:片內(nèi)數(shù)據(jù)存貯器空間,SFR寄存器,位地址空間。該尋址方式所表示的操作對(duì)象在指令中占1個(gè)字節(jié)單元;2.表現(xiàn)形式:用直接的地址數(shù)據(jù)表示。注意:所有內(nèi)部數(shù)據(jù)及位地址空間都能直接尋址訪問(wèn),特殊功能寄存器只能直接尋址訪問(wèn),但A、B、DPTR和位累加器Cy以及當(dāng)前工作寄存器也能夠寄存器尋址訪問(wèn)) 。 例如: 指 令: MOV A ,45H 機(jī) 器 碼: E5 45E545PC1000H10012F2FA程序存貯器片內(nèi)RAM45H寄存器尋址:例如:指 令:
5、 MOV A , R3 機(jī)器碼: E BH (11101011)5811101011PC58A程序存貯器片內(nèi)RAM13H (R3)特點(diǎn):該尋址方式所表示的操作對(duì)象與操作碼編在1個(gè)字節(jié)中。表現(xiàn)形式:用寄存器名表示.應(yīng)用:用寄存器來(lái)保存中間結(jié)果.尋址空間: A,B,DPTR,Rn(R0R7) , Cy.指令中的寄存器的內(nèi)容為操作數(shù)。能寄存器尋址的特殊功能寄存器有:A,B,DPTR,Rn(R0R7),位操作中的進(jìn)借位標(biāo)志Cy。這種指令的操作數(shù)一般隱含在操作碼中。 指令中寄存器的內(nèi)容為地址,對(duì)該地址所指定的RAM單元的內(nèi)容進(jìn)行訪問(wèn)??勺鏖g尋址的寄存器有:工作寄存器R0,R1和數(shù)據(jù)指針DPTR。例如:指
6、 令: MOV A , R0 機(jī)器碼: E 6H (11100110)11100110PC5E7878程序存貯器片內(nèi)RAMA00H(R0)5E特點(diǎn):該尋址方式所表示的操作對(duì)象與操作碼編在1個(gè)字節(jié)中。表現(xiàn)形式:用前綴符來(lái)限定R0,R1。應(yīng)用:一般用于對(duì)數(shù)組類型的數(shù)據(jù)進(jìn)行訪問(wèn)。尋址空間:片內(nèi)RAM低128個(gè)單元。寄存器間接尋址變址尋址(基址寄存器+變址寄存器尋址)例如: MOVC A , A+DPTR 機(jī)器碼:9 3H (1001 0011)93H5CH472000+2030H2047HADPHDPL47程序存貯器SFR其中A=47HDPTR=2000H2047H=5CH結(jié)果:A=5CH特點(diǎn): 該
7、指令為一個(gè)字節(jié);表示:加上前綴;應(yīng)用: 一般用于查表操作;尋址空間:程序存貯器空間;注意注意:A中的內(nèi)容為正數(shù)中的內(nèi)容為正數(shù),可查以可查以PC或或DPTR為基址的為基址的256個(gè)字節(jié)個(gè)字節(jié)范圍的任一存貯單元。范圍的任一存貯單元。程序計(jì)數(shù)器程序計(jì)數(shù)器PC或數(shù)據(jù)指針或數(shù)據(jù)指針DPTR作為基址寄存器作為基址寄存器,累加累加器器A的內(nèi)容為變址寄存器的內(nèi)容為變址寄存器,操作數(shù)的有效地址為操作數(shù)的有效地址為: 有效地址有效地址=基址寄存器基址寄存器(PC,DPTR)+變址寄存器尋址變址寄存器尋址(A)5C相對(duì)尋址該尋址方式僅用于相對(duì)轉(zhuǎn)移類指令,與其它尋址方式不同的是尋找的是指令的地址。相對(duì)尋址的有效地址(
8、目的地址) D=PC+指令的字節(jié)數(shù)b+rel。即 rel=D+(PCb)例如: 指 令:JC 18H 機(jī)器碼:40 18H 特點(diǎn):該當(dāng)指令執(zhí)行后PC的內(nèi)容發(fā)生了改變。表示:rel 是位8位有符號(hào)的數(shù)其取值范圍為:128+127。因此,既可以向后轉(zhuǎn)移也可以向前轉(zhuǎn)移。應(yīng)用:實(shí)際編程的源程序中,相對(duì)偏移量用標(biāo)號(hào)表示。+40181001H101AH1000H101AH18H0CyPC1000H1Cy1002H101A1002H位尋址1.位尋址的空間:RAM區(qū)可尋址的128個(gè)位地址(00H7FH),以及特殊功能寄存器中的一些位。2.訪問(wèn)方式:這些位用立即尋址方式訪問(wèn),只有位累加器Cy采用寄存器尋址方式。
9、例如: SETB 3AH SETB P1.0 SETB C 機(jī) 器碼: D2 3A 機(jī)器碼:D2 90 機(jī)器碼: D 3 3.位地址在指令中的四種表示形式:(1)直接位地址表示:80H(2)位名表示:RS0,F(xiàn)0(3)單元地址加位序號(hào)表示:90H.0 (4)特殊功能寄存器名加位號(hào)表示:P1.0 , PSW.3,ACC.6MCS51 指令系統(tǒng)的七種尋址方式小結(jié)尋址方式使用變量 尋址空間立即尋址立即 數(shù) # data程序存貯器直接尋址直接地址 addr8片內(nèi)RAM、 SFR寄存器尋址R0R7,A,B,DPTR,Cy工作寄存器Rn,A,B,DPTR,Cy寄存器間接尋址R0,R1,SP片內(nèi)RAMR0,
10、R1,DPTR片外數(shù)據(jù)存貯器變址尋址A+DPTR,A+PC程序存貯器相對(duì)尋址PC+rel程序存貯器位尋址bit,C片內(nèi)20H2FH,SFR中的位指令系統(tǒng)MCS51單片機(jī),共有111條指令按指令的功能分為以下五類進(jìn)行介紹: (1)、數(shù)據(jù)傳送類指令;(2)、算術(shù)運(yùn)算類指令;(3)、邏輯運(yùn)算類指令;(4)、程序控制類指令;(5)、位(布爾)操作類指令 ;數(shù)據(jù)傳送類指令該類指令實(shí)現(xiàn)片內(nèi)RAM(包括工作寄存器,SFR,A,B)各單元之間的數(shù)據(jù)傳送;片外RAM與累加器A之間的數(shù)據(jù)傳送;程序存貯器與累加器A之間的數(shù)據(jù)傳送。一、通用數(shù)據(jù)傳送指令(16條): 一般格式:MOV 目的, 源1.以累加器為目的操作數(shù)
11、的指令(4條)MOV A , direct ; A (direct)MOV A , Ri ; A (Ri)MOV A , #data ; A data MOV A , Rn ; A Rn直接尋址單元間接尋址單元工作寄存器立即數(shù)A例如:已知 (A)=40H,(R6)=50H,(6FH)=32H,(R0)=18H,(18H)=10H,執(zhí)行下列程序段:MOV A , R6 ; A 50HMOV A , 6FH ; A (6FH)MOV A , R0 ; A (R0)MOV A , #6FH ; A 6FH2.寄存器Rn為目的操作數(shù)的指令(3條)MOVRn ,A ; Rn AMOV Rn , dire
12、ct ; Rn direct MOV Rn , #data ; Rn #data 例如:已知A=3FH,(4EH)=2FH,R1=20H,R3=30H,執(zhí)行行下列程序段:MOV A , #2EH ;A 2EHMOV R1 , A ; R1 A MOV R2 , 4EH ;R2 (4EH)MOV R3 , #6FH ;R3 6FH執(zhí)行后,A=2EH, R1= 2EH, R2= 2FH, R3= 6FH3. 以直接地址為目的操作數(shù)的指令(5條)MOV direct , A ; direct AMOV direct , Rn ; direct RnMOV direct , direct ; dire
13、ct (direct) MOV direct , Ri ; direct (Ri)MOV direct , #data ; direct data注意:以下兩條指令是三字節(jié)指令,第二和第三字節(jié)為8位的地址或8位的立即數(shù)。MOV direct , direct ; direct (direct) MOV direct , #data ; direct data8例如: 已知: (30H)=1FH, (40H)=5FH,執(zhí)行下列指令;MOV 30H , 40H ; 30H (40H)MOV 50H , #40H ; 50H 40H執(zhí)行后,(30H)=5FH,(40H)=5FH,(50)=40H4.
14、間接地址為目的操作數(shù)的指令(3條)MOV Ri , A ; (Ri) A MOV Ri ,direct ; (Ri) (direct)MOV Ri , #dara ; (Ri) data注意:該類指令使用時(shí),應(yīng)先對(duì)Ri 賦地址初值.對(duì)于8051系列單片機(jī),片內(nèi)低128個(gè)單元才可間接尋址去訪問(wèn) .例如:設(shè)片內(nèi)RAM中,(30H)=40H, (40H)=20H,P1口為輸入口,其輸入的數(shù)據(jù)為CAH,執(zhí)行下列程序段:MOV R0 , #30H ; R0 30HMOV A , R0 ; A (30H)MOV R1 , A ; R1 40HMOV B , R1 ; B 20HMOV R1 , P1 ;
15、(R1) CAH程序控制執(zhí)行結(jié)果為: A=40H,R0 =30H ,R1= 40H, B =20H, (40H)= 0CAH5.立即數(shù)送數(shù)據(jù)指針:MOV DPTR , #data16.如: MOV DPTR , #2000H通用數(shù)據(jù)傳送類指令小結(jié):直接尋址單元間接尋址單元工作寄存器立即數(shù)DPTR16位注意:下列指令是不存在的:MOV Rn, Rn; MOV Ri, RnA改錯(cuò)題: 指出下列指令中的錯(cuò)誤,并更正:1.MOV R2 ,R5更正: MOV A ,R5 MOV R2 ,A2.MOV R0 , R4更正: MOV A , R4 MOV R0 , A二、堆棧操作指令(2條)進(jìn)棧操作:PUS
16、H direct ; SP SP+1, (SP) (direct) 出棧操作:POP direct ; (direct) SP , SP SP1注意:堆棧操作指令的操作數(shù)是直接尋址方式,對(duì)累加器進(jìn)行堆棧操作時(shí),用ACC表示。例子如:設(shè)SP=30H,(50H)=80H ,執(zhí)行下列程序段。PUSH 50HPOP 40HSP 30H8050H 31H SP 31H SP 30H31H 808050H40H8050H30H8080三、查表指令MOVC A, A+PC ; PC PC+1, A (A+PC)MOVC A , A+DPTR ; PC PC+1, A (A+DPTR)1 .都屬于單字節(jié)指令。
17、2. 對(duì)程序存儲(chǔ)器空間進(jìn)行訪問(wèn)。3. 一般用于查表操作。首先在程序存貯器的一塊連續(xù)存貯空間中建立數(shù)據(jù)表,表的首地址或PC的內(nèi)容為基址,表的偏移地址即為變址。4. 基址確定后,查表范圍為基址后256個(gè)字節(jié),累加器A中的數(shù)據(jù)為正數(shù)。5. PC的值同指令所處的位置確定,而DPTR的值可以通過(guò)賦值改變。 例如,在程序存貯器中,數(shù)據(jù)表格為: 2000H: 01H 2001H: 23H 2002H: 45H 2003H: 67H;程序如下: 1000H: MOV A , #03H 1002H: MOV DPTR ,#2000H 1005H: MOVC A , A+DPTR結(jié)果為: A=67H,DPTR=2
18、000H.039000012345671000H1001H1002H1003H1004H1005H1006H7420932000H2001H2002H2003H032000ADPTR+123例如,在程序存儲(chǔ)器中,數(shù)據(jù)表格為: 1010H:01 1011H:02 1012H:03程序如下: 1000H: MOV A,#0DH ;A 0DH 1002H: MOVC A,A+PC ;A (0DH+1003H) 該程序運(yùn)行的結(jié)果為:A=01H, PC= 1003H0D830102031000H1001H1002H1003H1010H1011H1012H740DAPC+01H四.累加器與片外數(shù)據(jù)存貯器間
19、的數(shù)據(jù)傳送指令(4條)注意注意:Ri間址只能訪問(wèn)片外RAM的低256個(gè)單元,這時(shí)的地址由P0口輸出,P2口仍可作一般I/O口使用.DPTR間址可訪問(wèn)64KB的空間DPTR中的低8位地址由P0口輸出,高8位地址由P2口輸出.1)、MOVX A , Ri ;A (Ri)2)、MOVX Ri , A ;(Ri) A3)、MOVX A, DPTR ; A (DPTR)4)、MOVX DPTR , A ; (DPTR) A 問(wèn)題:下列兩個(gè)程序段的功能是否相同?為什么?1、MOV R1 , #10H MOV P2, #20H MOVX A , R1 2、MOV DPTR , #2010H MOVX A ,
20、 DPTR問(wèn)題:下列指令正確嗎?MOV A , 2000H MOVX A , 2000H MOVC A , 2000H問(wèn)題:若當(dāng)前工作寄存器使用第一組,下列四組指令的功能相同嗎?1、MOV A , 0AH 2、MOV A , R2 3、MOV R0 ,#0AH MOV A , R0 4、MOV SP , #0AH POP ACC 五.交換指令XCH A , Rn ;A RnXCH A , direct ;A (direct) XCH A , Ri ;A (Ri)例如:已知R0=10H,A=4EH, (10H)=5FH,執(zhí)行指令 : 1.字節(jié)交換指令XCH A , R0.結(jié)果: A=5FH, 1
21、0H=4EHA10H5FH(4EH)4EH(5FH)R010H2、 半字節(jié)交換指令.XCHD A , Ri ;A. 3 0 (Ri). 3 0例如:R0=10H, A=35H,片內(nèi)RAM(10H)=46H;執(zhí)行指令:XCHD , R0程序運(yùn)行結(jié)果為:A=36H,(10H)=45H;可見低4位發(fā)生了交換,高4位不變.0 0 1 1 0 1 0 1A35H0 1 0 0 0 1 1 0 (10H)46H10HR03、SWAP A ;累加器中的高4 位相互交換.算術(shù)運(yùn)算類指令分類:加法,減法,乘法, 除法.加1,減1,二十進(jìn)制調(diào)整。注意:算術(shù)運(yùn)算類指令一般會(huì)影響狀態(tài)標(biāo)志位,數(shù)據(jù)傳送類指令只有以累加器
22、為目的操作數(shù)的影響標(biāo)志,其它都不影響標(biāo)志位。 ADDA,Rn ;A A+Rn ADD A , direct ;A A+(direct) ADD A , Ri ;A A+(Ri) ADD A , #data ;A A+data一加法類指令加法指令(條):2.帶進(jìn)位的加法指令 ADDC A , Rn ;A A+Rn+Cy ADDC A , direct ;A A+(direct)+Cy ADDC A , Ri ;A A+(Ri)+Cy ADDC A , #data ;A A+data +Cy加法類指令對(duì)標(biāo)志位的影響:結(jié)果的第七位向第八位有進(jìn)位時(shí),置位Cy,結(jié)果的第七位和第六位只有一位向高位有進(jìn)位時(shí)
23、,置位OV,結(jié)果的第三位向第四位有進(jìn)位時(shí),置位AC,累加器A中的結(jié)果有奇數(shù)個(gè)1置于位P,否則各位清零。1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0+0 0 1 0 0 0 1 11結(jié)果:Cy= 1, OV = 1, AC =1 ,P = 10 1 0 0 1 1 1 0 1 0 0 1 1 1 1 0 1+ 1 1 1 0 1 1 0 1結(jié)果:Cy = 0 , OV = 0, AC =1, P=0注意:帶進(jìn)位的加法運(yùn)算常用于多字節(jié)的求和。例如:設(shè)A=85H, (R0)=20H, (20H)=9EH;執(zhí)行指令:ADD ,0例如,A =4EH,R0 =20H,(20H) = 9E
24、H, Cy =1 ;執(zhí)行指令:ADDC A , R0 INC A ; A A+ 1 INC direct ;(direct) (direct) + 1 INC Ri ; (Ri) (Ri)+ 1 INC Rn ; Rn Rn+ 1 INC DPTR ; DPTR DPTR+1只有INC A指令影響P標(biāo)志,當(dāng)計(jì)數(shù)到255時(shí)再加1則結(jié)果為0,不影響進(jìn)標(biāo)志Cy,半進(jìn)位標(biāo)志AC,溢出標(biāo)志OV!3. 加1 指令注意:加1 指令常用在循環(huán)程序中作計(jì)數(shù)器使用!4.二十進(jìn)制調(diào)整指令(1條)DA A ;對(duì)壓縮BCD碼加法的結(jié)果自動(dòng)修正.二 . 減法類指令SUBB A , Rn ;A A Rn CySUBB A
25、, direct ;A A (direct) CySUBB A , Ri ;A A (Ri) CySUBB A , #data ;A A data Cy1.帶借位的減法指令(4條).由于沒有不帶借位的減法指令,兩個(gè)單字節(jié)數(shù)相減時(shí),應(yīng)先清Cy,否則會(huì)錯(cuò)誤地將結(jié)果多減一個(gè)1。減法指令可用來(lái)比較兩個(gè)無(wú)符號(hào)數(shù)的大小。2 . 減1指令(4條) :DEC A ; A DEC Rn ; Rn RnDEC direct ; (direct) (direct)DEC Ri ; (Ri) (Ri)減1指令對(duì)標(biāo)志位的影響同加1指令,一個(gè)為00H的數(shù)減1的結(jié)果為FFH(255)。三. 乘法指令(1條)MUL AB ;
26、A B BA功能:該指令將累加器A中的被乘數(shù)與B寄存器中的乘數(shù)相乘,結(jié)果的低8位保存到A,高8位保存到B中。對(duì)標(biāo)志位的影響:總是清Cy標(biāo)志,若乘積小于FFH(255)則清OV,否則OV置1。A中的數(shù)的奇/偶性會(huì)影響P標(biāo)志。例如:A=40H,B=5EH;執(zhí)行指令:MUL AB.結(jié)果為:A=80H,B=17H; OV=1,Cy=0, P=1 0 H5 E H 3 8 01 4 0+ 1 7 8 0 H四. 除法指令DIV AB ; A B的商到A ,余數(shù)到了B功能:將累加器中的8位無(wú)符號(hào)整數(shù)除B寄存器中的8位無(wú)符號(hào)整數(shù).,所得的商的整數(shù)部分存于A中,余數(shù)存于B中。對(duì)標(biāo)志位的影響:總是清Cy為零,若
27、當(dāng)除數(shù)B中的內(nèi)容為零時(shí)置OV=1,否則清OV=0.A中的結(jié)果影響P標(biāo)志。例如,設(shè)A=18H , B=12H;執(zhí)行指令:DIV AB。結(jié)果為: A=01H,B=06H; Cy=0,OV=0,P=1.邏輯運(yùn)算與移位類指令(24條)功能:對(duì)8位數(shù)進(jìn)行邏輯與/或/異或/取反/清零以及循環(huán)移位等運(yùn)算。一. 邏輯與指令(6條) ANL A , Rn ; A ARn ANL A , direct ; direct A (direct)ANL A ,Ri ;A A (Ri) ANL A , #data ;A A data ANL direct , A ; direct (direct) ANL direct
28、, #data ; direct (direct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有讀修改寫特性的指令.應(yīng)用:邏輯與指令常用來(lái)屏蔽某些位.1 0 0 0 1 1 0 10 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 例如:已知 A= 8DH,R0 = 0FH,執(zhí)行ANL A , R0后,結(jié)果 為:A = 0DH;二 . 邏輯或指令(6條)ORL A , Rn ; A A Rn ORL A , direct ; direct A (direct)ORL A ,Ri ;A A (Ri) ORL A , #data ;A A data ORL direc
29、t , A ; direct (direct) ORL direct , #data ; direct (direct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有讀修改寫特性的指令.應(yīng)用: 邏輯或指令常用來(lái)使某些位置1.例如:已知 A= 86H,R0 = 79H,執(zhí)行 ORL A , R0后,結(jié)果 為:A = FFH.1 0 0 0 0 1 1 00 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 三 . 邏輯異或指令(6條)XRL A , Rn ; A A Rn XRL A , direct ; direct A (direct)XRL A ,Ri ;A A
30、 (Ri) XRL A , #data ;A A data XRL direct , A ; direct(direct)XRL direct , #data ; direct (direct) data后兩條指令若是以端口P0P3為目的操作數(shù),則稱之為具有讀修改寫特性的指令應(yīng)用: 邏輯異或指令常用來(lái)把某些位取反。例如:已知 A= 87H,R0 = F9H,執(zhí)行 XRL A , R0后,結(jié)果 為:A = 7EH。1 0 0 0 0 1 1 11 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 四 . 累加器A清零,取反和循環(huán)移位指令(6條)D7 D01).循環(huán)左移指令: RL A;
31、1.累加器清零指令: CLR A ; A 02.累加器取反指令: CPL A ;A A3.循環(huán)移位類指令(4條) D7 D0Cy3 ).帶進(jìn)位的循環(huán)左移指令: RLC A ;D7 D0Cy4).帶進(jìn)位的循環(huán)右移指令: RRC A ;D7 D02).循環(huán)右移指令: RR A控制轉(zhuǎn)移類指令分類:轉(zhuǎn)移指令,子程序調(diào)用指令,返回指令。一. 轉(zhuǎn)移指令 長(zhǎng)轉(zhuǎn)移 LJMP addr16 ; PC addr16絕對(duì)轉(zhuǎn)移 AJMP addr11; PC PC+2, PC. 10PC.0addr11相對(duì)轉(zhuǎn)移 SJMP rel ; PCPC+ 2, PCPC+ rel散轉(zhuǎn)指令JMP A +DPTR; PC A+DP
32、TR1、無(wú)條件轉(zhuǎn)移指令問(wèn)題1: 若執(zhí)行指令: 1803: AJMP 100H, 問(wèn)PC= ? 解: PC+2=1805= 0001 1000 0000 0101中的低11位用100H= 001 0000 0000替代后得PC = 0001 1001 0000 0000 =1900H。(1900H)問(wèn)題2:散轉(zhuǎn)指令的特點(diǎn):問(wèn)題3:如何使用JMP A+DPTR 實(shí)現(xiàn)多分支結(jié)構(gòu)(即散轉(zhuǎn))。Prog : AJMP prog0;轉(zhuǎn)prog0分支程序. AJMP prog1 ; 轉(zhuǎn)prog1分支程序. AJMP prog2 ; 轉(zhuǎn)prog2分支程序. MOV DPTR , #prog RL A JNC N
33、EXT INC DPHNEXT: JMP A+DPTR (1)、動(dòng)態(tài)特性;(2)、區(qū)域特性( 模216 加運(yùn)算 )。首先建立一個(gè)散轉(zhuǎn)表 Prog+2Prog+42、 條件轉(zhuǎn)移指令(10條) 根據(jù)給定的條件進(jìn)行檢測(cè),若條件滿足則轉(zhuǎn)移,否則繼續(xù)往下執(zhí)行。轉(zhuǎn)移范圍在當(dāng)前指令的下一條指令為起始地址的128127之間.1、累加器判零指令(2條)JZ rel ;若A=0,則PCPC+2+rel 轉(zhuǎn)移 .否則,PCPC+2,不轉(zhuǎn)移.往下順序執(zhí)行.JNZ rel ;若A 0,則PCPC+2+rel 轉(zhuǎn)移 .否則,PCPC+2,不轉(zhuǎn)移.往下順序執(zhí)行.2、 判Cy轉(zhuǎn)移指令JC rel ; 若Cy=1,則PCPC+
34、2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.JNC rel ; 若Cy = 0, 則PCPC+2+rel,轉(zhuǎn)移。否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.3、比較轉(zhuǎn)移指令CJNE A , direct , rel ; 若A (direct),則PCPC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移. CJNE A , #data , rel;若A data,則PCPC+3+rel,轉(zhuǎn)移;否則, PC PC +3,不轉(zhuǎn)移.CJNE Ri , #data , rel;若(Ri) data,則PC PC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移.CJNE Rn , #data
35、 , rel;若Rn data,則PCPC+3+rel,轉(zhuǎn)移;否則, PCPC +3,不轉(zhuǎn)移.4.計(jì)數(shù)循環(huán)指令(循環(huán)轉(zhuǎn)移指令2條)DJNZ Rn , rel;若Rn-1 0,則PC PC+2+rel,轉(zhuǎn)移;否則,PCPC+2,不轉(zhuǎn)移.DJNZ direct , rel ;若(direct)-1 0,則PC PC+3+rel,轉(zhuǎn)移;否則,PC PC+3,不轉(zhuǎn)移.二、調(diào)用子程序及返回指令1. 調(diào)用子程序指令1)、長(zhǎng)調(diào)用:LCALL addr16 ;(1) 、保護(hù)斷點(diǎn):PCPC+3, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2) . 產(chǎn)生目的地址( 轉(zhuǎn)移 ) :PCad
36、dr16SPSP+1SPPC70SP+1SPPC1582)、絕對(duì)調(diào)用:ACALL addr11 ;(1).保護(hù)斷點(diǎn):PC PC+2, SPSP+1,(SP)PC70 ;SPSP+1,(SP)PC158 (2). 產(chǎn)生目的地址( 轉(zhuǎn)移 ) :PC addr112 . 返回指令RET ; PC158 (SP) ;PC70 (SP )(2)、中斷子程序返回指令(1)、子程序調(diào)用返回指令RETI ; PC158 (SP) ;PC70(SP )SPSP-1SPPC70SP-1SPPC158注意:RET指令用于子程序返回;RETI指令用于中斷服務(wù)程序返回;兩者都有恢復(fù)斷點(diǎn)的功能 .但RETI指令還有清內(nèi)部
37、優(yōu)先級(jí)狀態(tài)觸發(fā)器的功能,所以兩者不能互換使用!三、空操作指令 NOP ;PC PC+1;這是一條單字節(jié),單機(jī)器周期指令,執(zhí)行時(shí)不作任何操作,只是耗用了一個(gè)機(jī)器周期。位操作對(duì)可位尋址空間的數(shù)據(jù)進(jìn)行操作。為了便于記憶,在匯編語(yǔ)言編程時(shí),位地址一般有以下四種表示方式:1、直接位地址表示方式;如:07H,1FH2、點(diǎn)操作符表示方式;如:20H.7,PSW.13、位名方式;如RS0,C,F04、用戶使用偽指令定義方式; FLAG BIT P3.3位操作類指令(17條)一、位傳送指令(2條)MOV C , bit ; C(bit)MOV bit , C ; bit C例如:已知片內(nèi)RAM(20H)=8AH
38、=10001010B,P1口輸出的數(shù)據(jù)為0110 0110B執(zhí)行下列程序: MOV C , 07H MOV P1.7, C結(jié)果:CY=1,P1.7=1。P1口的其它位不發(fā)生變化。二、置位復(fù)位指令(4條)3)、位邏輯非指令 CPL C CPL bitCLR C ; C0; CLR bit;bit0三、位邏輯運(yùn)算類指令(6條)1)、位邏輯與ANL C , bit ;C Cbit ANL C , /bit ;C C bit2)、位邏輯或 ORL C , bit ;C Cbit ORL C , /bit ;C C bitSETB C ; C1 SETB bit ; bit1位指令應(yīng)用舉例:用位指令實(shí)現(xiàn)
39、組合邏輯電路的功能:1&UVWY算法:Y=(U V) & W 開始取U到CU與C或結(jié)果存CC與W的非與后存于C存結(jié)果到Y(jié)暫停U BIT 20H.0 ;定義符號(hào)地址V BIT 20H.1W BIT 20H.2Y BIT 20H.3MOV C , U ;C UORL C , V ;C U VANL C , /W ;C (U V) & W MOV Y , C ;C Y如圖所示電路,設(shè)U、V、W分別放在20H.0,20H.1,20.2H單元。結(jié)果Y保存到20H.3單元.程序如下:JB bit, rel;若bit=1,則PCPC+3+rel;否則PCPC+3JNB bit, re
40、l;若bit=0,則PCPC+3+rel;否則PCPC+3JBC bit , rel;若bit=1,則 bit0, PCPC+3+rel;否則PCPC+3該類指令常用于測(cè)試端口的某一位端線的狀態(tài). SETB P1.7 JB P1.7 , NEXT MOV P1 ,#0FFH MOV A , P1 NEXT:MOV P2 , 30H四、位條件轉(zhuǎn)移指令1.狀態(tài)位判轉(zhuǎn)類指令2 2. 判Cy轉(zhuǎn)移指令JC rel ; 若Cy=1,則PCPC+2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.JNC rel ; 若Cy=0, 則PCPC+2+rel,轉(zhuǎn)移.否則PCPC+2 不轉(zhuǎn)移,繼續(xù)往下執(zhí)行.小
41、結(jié):(1):不同的存儲(chǔ)空間尋址方式不同,適用的指令不同,要注意區(qū)別。(2):指令是程序設(shè)計(jì)的基礎(chǔ),按功能分類記憶每條指令的功能、操作的對(duì)象和結(jié)果以及對(duì)標(biāo)志位的影響,要求熟記。匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、程序設(shè)計(jì)語(yǔ)言的分類:機(jī)器語(yǔ)言,匯編語(yǔ)言,高級(jí)語(yǔ)言1、機(jī)器語(yǔ)言:表現(xiàn)形式上是二進(jìn)制代碼,用一串二進(jìn)制代碼來(lái)表示一條指令,因此機(jī)器能直接識(shí)別并執(zhí)行.缺點(diǎn)是不便于記憶和交流,容易出錯(cuò).2、匯編語(yǔ)言:是機(jī)器指令系統(tǒng)的符號(hào)表示.不能直接執(zhí)行必須轉(zhuǎn)換成目標(biāo)代碼(匯編). 匯編效率高、能直接對(duì)硬件資源進(jìn)行操作。匯編語(yǔ)言源程序匯編程序目標(biāo)代碼3、高級(jí)語(yǔ)言:類似人類自然語(yǔ)言或數(shù)學(xué)語(yǔ)言,編程效率高,便于交流,但編譯效率
42、低.二、 匯編語(yǔ)言的組成匯編語(yǔ)言語(yǔ)言的程序含有兩種語(yǔ)句:指令性語(yǔ)句,指示性語(yǔ)句。1、指令性語(yǔ)句:每條指令都產(chǎn)生相應(yīng)機(jī)器語(yǔ)言的目標(biāo)代碼,程序的功能靠指令性語(yǔ)句去完成.2、指示性語(yǔ)句:為匯編程序提供匯編過(guò)程的控制信息(匯編控制指令或偽指令)三、 偽指令格式:ORG 16位地址功能:規(guī)定該偽指令后的源程序經(jīng)匯編后的目標(biāo)程序在程序存貯器空間的起始地址.1、ORG(origin匯編起始地址):例如: ORG 2000H START:MOV A , R12、END(匯編結(jié)束偽指令)格式: END | END 標(biāo)號(hào)通知匯編程序不再繼續(xù)往下匯編。如果源程序是一子程序則END后不加標(biāo)號(hào),若是主程序所加標(biāo)號(hào)應(yīng)為主
43、程序的首地址,否則匯編后的目標(biāo)程序從0000H單元開始存放。3、EQU(equate等值)格式: 標(biāo)識(shí)符號(hào) EQU 數(shù)或匯編符號(hào)把數(shù)或匯編符號(hào)賦給標(biāo)識(shí)符,只能賦值一次。例如 : LOOP EQU 10H LP EQU R2MOV R2,#LOOPMOV LP,#10H4、DB(Define Byte定義字節(jié))格式: 標(biāo)號(hào): DB 項(xiàng)或項(xiàng)表把項(xiàng)或項(xiàng)表中的字節(jié)數(shù)據(jù)依次存入到標(biāo)號(hào)開始的存貯單元。5、DW(Define Word字定義)格式: 標(biāo)號(hào): DW 項(xiàng)或項(xiàng)表把項(xiàng)或項(xiàng)表中的字?jǐn)?shù)據(jù)依次存入到了標(biāo)號(hào)開始的存貯單元.按高低原則存貯.例如:WORD: DW 1234H,5678H12H34H56H78H
44、WORDWORD+1WORD+2WORD+3WORD+4 ORG 1000H CON :DB 50H SEG: DB 30H,06H,5B例如:TAB:DB 12, “a”,“abcvy”SEGSEG+1SEG+250HCON30H06H5BH6、DS(Define Store預(yù)留存貯單元)格式 : 標(biāo)號(hào):DS 數(shù)字從標(biāo)號(hào)開始按數(shù)字的值保留相應(yīng)數(shù)量的存貯單元.例如: 指令 SPACE: DS 0AH預(yù)留10個(gè)存貯單元,下條指令從SPACE+10開始存放.7、BIT(位地址符號(hào)指令)格式: 標(biāo)識(shí)符 BIT 位地址功能:將位地址賦給標(biāo)識(shí)符.例如: A1 BIT P1.0 A2 BIT P1.1四、
45、 匯編語(yǔ)言程序設(shè)計(jì) . 分析問(wèn)題,明確任務(wù); .確定解決問(wèn)題的算法; .根據(jù)算法,分配資源,畫出程序流程圖; .根據(jù)流程圖,編寫源程序; .對(duì)源程序匯編、調(diào)試;.全盤符號(hào)化,既增強(qiáng)了程序的可讀性,又便于修改;.程序結(jié)構(gòu)模塊化.每個(gè)模塊一個(gè)入口一個(gè)出口;.在模塊中慎用無(wú)條件轉(zhuǎn)移指令;.循環(huán)程序體內(nèi)要盡可能優(yōu)化;.各模塊使用各自的工作寄存器,注意相互之間的切換;.模塊間的參數(shù)傳遞僅可能用累加器完成;.在中斷服務(wù)程序中做好現(xiàn)場(chǎng)的保護(hù),做到進(jìn)棧的數(shù)據(jù)愈少愈好,盡量避免堆棧溢出;1.方法(步驟):2.好的程序設(shè)計(jì)風(fēng)格:五、幾種基本程序設(shè)計(jì)舉例1、順序程序例1:將一個(gè)字節(jié)的壓縮BCD碼轉(zhuǎn)換成ASCII碼,
46、存入RAM的兩個(gè)單元。解:算法:ASCII碼=BCD碼+30H資源按排:設(shè)BCD碼數(shù)據(jù)存在片內(nèi)RAM的30H單元。轉(zhuǎn)換的結(jié)果高位BCD碼存入到了31H單元,低位存入32H單元。開始取BCD碼轉(zhuǎn)換個(gè)位存結(jié)果取BCD碼轉(zhuǎn)換十位存結(jié)果暫停 MOV A ,30H SWAP A ANL A , #0FH ADD A, #30H MOV 31H , A SJMP $ END例1:將一個(gè)字節(jié)的壓縮BCD碼轉(zhuǎn)換成ASCII碼,存入RAM的兩個(gè)單元.解: ORG 0000h MOV A , 30H ANL A , #0FH ADD A , #30H MOV 32H , A例2:編程將外部數(shù)據(jù)存儲(chǔ)器000EH和0
47、0FH單元的內(nèi)容相交換。分析:外部數(shù)據(jù)存儲(chǔ)器操作數(shù)只能用MOVX指令訪問(wèn)且只能與A之間傳送,因此必須用一個(gè)中間環(huán)節(jié)作暫存,設(shè)用20H。用R0、R1指示兩個(gè)單元的低8位地址,高8位地下由P2指示。程序如下:MOV 20H , AORG 0000HMOV P2 , #0MOV R0 , #0EHMOV R1 , #0FHMOVX A ,R0ENDMOVX A,R1XCH A, 20HMOVX R1,AMOV A, 20HMOVX R0,ASJMP $例3:將內(nèi)部數(shù)據(jù)存儲(chǔ)器的(31H)(30H) 中的16位數(shù)求其補(bǔ)碼后放回原單元。分析: 先判斷數(shù)的正、負(fù),因?yàn)檎龜?shù)的補(bǔ)碼=原碼,而負(fù)數(shù)的補(bǔ)碼=反碼 +
48、 1,因此,算法是低位取反加1,高位取反后再加低位的進(jìn)位Cy,由于INC 指令不影響Cy標(biāo)志,低位加1不能用INC指令。編程如下:2、分支程序設(shè)計(jì)ORG 0000HMOV A , 31HJB ACC.7 ,CPLLSJMP EOFCPLL:MOV A , 30HCPL A ADD A , #1MOV 30H ,AMOV A , 31HXRL A , #7FHADDC A, #0MOV 31H ,AEOF :SJMP EOFEND例4:設(shè)變量以補(bǔ)碼形式存放在片內(nèi)RAMR 30H單元,函數(shù)Y和X有如下關(guān)系: X X0Y= 20H X=0 X+5 X0?(30H)+05(30H)結(jié)束YNYNORG
49、0000HMOV A , 30HJZ NEXT ;判斷是否為零ANL A , #80H ;判斷符號(hào)位JZ EOFMOV A , #05 ;X0,完成X+5ADD A, 30HMOV 30H , ASJMP EOFNEXT: MOV 30H ,#20HEOF: SJMP EOFEND多分支散轉(zhuǎn)程序有一類分支程序根據(jù)不同的輸入條件或不同的運(yùn)算結(jié)果,轉(zhuǎn)向不同的處理程序,稱之為散轉(zhuǎn)程序。這類程序通常用JMP A+DPTR間接指令實(shí)現(xiàn)轉(zhuǎn)移。有如下兩種設(shè)計(jì)方法: 例5:根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序,設(shè)R3的內(nèi)容為0n,處理程序的入口符號(hào)地址分別為PR0、PR1PRn(n128)。 分析:將PR0PRn的地
50、址列在表格中,每一項(xiàng)占兩個(gè)單元 ,PRn在表格中的偏移量分別為2n ,因此將R3乘2即得PRn在一表格中的偏移地址 ,從偏移地址2n 和 2n+1 兩個(gè)單元分別取PRn的高8位地址和低 8 位地址送DPTR寄存器 ,用JMP A+DPTR指令(先清A為零) PRn的入口執(zhí)行。用轉(zhuǎn)移地址表實(shí)現(xiàn)轉(zhuǎn)移; 用轉(zhuǎn)移指令表實(shí)現(xiàn)轉(zhuǎn)移; TAB:DW PR0,PR1,PR2,PRnORG 0000HMOV DPTR ,#TABMOV A , R3ADD A , R3MOV B , AMOVC A , A+DPTRXCH B, AINC AMOVC A, A+DPTRMOV DPL , AMOV DPH ,BC
51、LR AJMP A +DPTRPR0: LJMP EOFPR1: LJMP EOFPRn:EOF:SJMP $END例6:根據(jù)R3的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序設(shè)R3的內(nèi)容為0n,處理程序的入口符號(hào)地址分別為PR0、PR1PRn(n(R1)?內(nèi)循環(huán)結(jié)束?交換標(biāo)志為1?結(jié)束源程序如下:NOMIN: DJNZ R2, LP1 JB F0, LP2 EOF: SJMP EOF END SETB F0NEXT : INC R0 INC R1 ORG 0000H MOV B , #09HLP2: MOV R2,B DEC B CLR F0 MOV R0 , #30H MOV R1 , #31HLP1: MOV A
52、 , R0 CLR C SUBB A ,R1 JC NEXTMOV A,R0 XCH A ,R1XCH A ,R05、 子程序設(shè)計(jì)、什么是子程序:功能獨(dú)立的程序段。、怎么寫一個(gè)子程序:子程序的基本結(jié)構(gòu)。子程序名:保護(hù)現(xiàn)場(chǎng) 子程序體 . . . 恢復(fù)現(xiàn)場(chǎng) RETLCALL ARETRETLCALL B、子程序的嵌套調(diào)用與返回保護(hù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)保護(hù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)傳遞參數(shù)傳遞參數(shù)例:設(shè)計(jì)一個(gè)延時(shí)10ms的子程序,已知單片機(jī)的晶振頻率為6MHz。分析:延時(shí)時(shí)間與兩個(gè)因素有關(guān),一個(gè)是晶振頻率,一個(gè)是循環(huán)次數(shù)。由于晶振頻率為6MHz,一個(gè)機(jī)器周期是2s,用單循環(huán)實(shí)現(xiàn) 1ms的延時(shí),外循環(huán)10次即可達(dá)到10ms
53、的延時(shí)。內(nèi)循環(huán)如何1ms的延時(shí)呢?程序中先用MT代替,再根據(jù)程序執(zhí)行的時(shí)間計(jì)算(機(jī)器周期從附錄指令表中查到)。DL: MOV R2 ,#0AH;外循環(huán)10次DL2: MOV R3 ,#MTDL1: NOP NOP DJNZ R3,DL1 DJNZ R2,DL2 RET機(jī)器周期數(shù)1111222內(nèi)循環(huán)MT次外內(nèi)循環(huán)DL1到 指令DJNZ R3,DL1的計(jì)算: (1+1+2)2 s MT=1000 s MT=125=7DH將7DH代入上面的MT,計(jì)算總的延時(shí)時(shí)間為: (1+2+(1+(1+1+2) 125+2) 10) 2 s =10066 s =10.066msP1.0P1.1 P1.2 P1.3
54、 P1.4 P1.55VK1K2K3K4K5K6一)、獨(dú)立式鍵盤1、獨(dú)立式鍵盤接口電路鍵盤與單片機(jī)的接口程序設(shè)計(jì)2、在系統(tǒng)僅有很少的功能鍵時(shí),使用獨(dú)立鍵盤。3、鍵盤的抖動(dòng)與去抖動(dòng)t1t2軟件去抖動(dòng)與硬件去抖動(dòng):4、軟件設(shè)計(jì) 順序查詢端口相應(yīng)的引腳,分析擊鍵的鍵號(hào),采取相應(yīng)的操作。使用JB或JNB指令實(shí)現(xiàn)查詢。sR0R0+5VQ開始P1.0=1?P1.0=1?0號(hào)鍵處理P1.1=1?延時(shí)P1.2=1?2號(hào)鍵處理P1.3=1?P1.3=1?延時(shí)延時(shí)1號(hào)鍵處理延時(shí)3號(hào)鍵處理P1.1=1?P1.2=1?NNNNNNNN程序如下: JB P1.0 ,NX1 LCALL DELAY JB P1.0 , N
55、X1 LCALL KEY0NX1:JB P1.1 , NX2 LCALL DELAY JB P1.1 , NX2 LCALL KEY1 NX2:JB P1.2 , NX3 LCALL DELAY JB P1.2 , NX3 LCALL KEY2NX3:JB P1.3 , NX4 LCALL DELAY JB P1.3 , NX4 LCALL KEY3NX4:JB P1.4 , NX5 LCALL DELAY JB P1.4 , NX5 LCALL KEY4NX5:JB P1.5 , NX6 LCALL DELAY JB P1.5 , NX6 LCALL KEY5NX6:JB P1.6 , NX
56、7 LCALL DELAY JB P1.6 , NX7 LCALL KEY6NX7: .二 )、矩陣鍵盤1、矩陣鍵盤的工作原理 0 1 2 3 4 5 6 7 8 9 A B C D E FP1.0P1.1P1.2P1.3P1.7P1.6P1.5P1.41)、擊鍵檢查2)、延時(shí)去抖動(dòng)3)、鍵識(shí)別:鍵盤掃描 鍵號(hào)=行首號(hào)+列號(hào) 0 1 2 3 4 5 6 7 8 9 A B C D E FP1.0P1.1P1.2P1.3P1.7P1.6P1.5P1.44)、一次閉合一次處理鍵釋放后讀取鍵值程序框圖:開始延時(shí)有擊鍵?有擊鍵?鍵分析取鍵值鍵釋放?延時(shí)無(wú)擊鍵返回返回鍵值結(jié)束NNNYYY;鍵盤處理子程序
57、: BUFF EQU 7FH ORG 0030HKEY:LCALL CHKEY JZ REOF LCALL DELAY LCALL CHKEY JZ REOF LCALL VAKEYLP0: LCALL DELAY LCALL CHKEY JNZ LP0 SJMP EOF REOF: MOV BUFF,#0FFHEOF: RET擊鍵檢查子程序:CHKEY:MOV P1,#0FH ;初始化P1口低4位為輸入口 ;高4位送0000B MOV A , P1 ;取擊鍵信息到累加器A ORL A , #0F0H CPL A RET延時(shí)子程序:DELAY:MOV R7 , #0AHDL0: MOV R6
58、, #0FAHDL1: NOP NOP DJNZ R6 , DL1 DJNZ R7 , DL0 RET 鍵分析子程序:開始清行、列寄存器送掃描碼P1.0=0?行首號(hào)+列號(hào)碼 A返回行首號(hào)為4P1.1=0?行首號(hào)為8P1.2=0?行首號(hào)為12P1.3=0?P1.7=0?A 0FFH列號(hào)+1掃描字左移初始化掃描字NNNNN鍵盤分析子程序:VAKEY:MOV R2, #OEFH CLR A MOV R3 , A;清行計(jì)數(shù)器 MOV R4 , A;清列計(jì)數(shù)器LOOP: MOV P1 , R2 JB P1.0 , NEX1TAL: MOV A , R3 ADD A , R4 MOV BUFF,ARTN:
59、 RETNEX1: JB P1.1 ,NEX2 MOV R3 ,#04H SJMP TALNEX2: JB P1.2 , NEX3 MOV R3 , #08H SJMP TAL NEX3:JB P1.3 , NXE4 MOV R3 ,#0CH SJMP TALNXE4:JB P1.7 , NEX5 MOV A ,#0FFH SJMP RTNNEX5:MOV A , R2 RL A ORL A , #0FH MOV R2 , A INC R4 SJMP LOOP顯示器接口電路程序設(shè)計(jì)應(yīng)用系統(tǒng)中的兩類信息:狀態(tài)信息、數(shù)據(jù)信息。狀態(tài)信息一般用單一的發(fā)光二極管指示。數(shù)據(jù)顯示可以用LED(七段數(shù)碼顯示器
60、),或LCD(液晶顯示器)1、LED狀態(tài)指示選用LED指示器件時(shí),一般要根據(jù)規(guī)程的要求用不同顏色的LED指示不同的狀態(tài)。常用指示電路8051P1.0P1.1P1.2P1.78*R8051P1.0P1.1P1.2P1.78*R+5V當(dāng)狀態(tài)顯示較多時(shí),可以使用簡(jiǎn)單I/O口擴(kuò)展的方法。如下圖:8051P0DCPEQ0Q7DCPEQ0Q7DCPEQ0Q7G2AG1G2BABCP2.7P2.0P2.1P2.2Y0Y1Y2Y7WR64位狀態(tài)顯示驅(qū)動(dòng)74LS37774LS138+VCC+5V在串行通信一講,介紹了用單片機(jī)串口擴(kuò)展并行I/O口驅(qū)動(dòng)狀態(tài)指示燈(請(qǐng)同學(xué)們復(fù)習(xí))。2、數(shù)據(jù)的顯示(1)、LED顯示器的結(jié)構(gòu)abcdefg圖1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人知識(shí)產(chǎn)權(quán)反擔(dān)保承諾書示例2篇
- 2025版美容院美容課程設(shè)計(jì)與教學(xué)合同4篇
- 醫(yī)療資源分配倫理-第3篇-深度研究
- 二零二五版新能源電池租賃合作協(xié)議3篇
- 二零二五年度模特個(gè)人品牌合作開發(fā)合同4篇
- 人體工程學(xué)在室內(nèi)-深度研究
- 公共文化服務(wù)中弱勢(shì)群體的需求調(diào)查與分析-深度研究
- 二零二五年度新型零售業(yè)態(tài)合作經(jīng)營(yíng)合同文本4篇
- 2025年度個(gè)人二手車買賣價(jià)格談判與調(diào)整合同
- 二零二五版內(nèi)墻涂料產(chǎn)品責(zé)任險(xiǎn)投保合同4篇
- 室上性心動(dòng)過(guò)速-醫(yī)學(xué)課件
- 建設(shè)工程法規(guī)及相關(guān)知識(shí)試題附答案
- 中小學(xué)心理健康教育課程標(biāo)準(zhǔn)
- 四年級(jí)上冊(cè)脫式計(jì)算400題及答案
- 新課標(biāo)人教版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)集體備課教學(xué)案全冊(cè)表格式
- 人教精通版三年級(jí)英語(yǔ)上冊(cè)各單元知識(shí)點(diǎn)匯總
- 人口分布 高一地理下學(xué)期人教版 必修第二冊(cè)
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
- 玩轉(zhuǎn)數(shù)和形課件
- 保定市縣級(jí)地圖PPT可編輯矢量行政區(qū)劃(河北省)
評(píng)論
0/150
提交評(píng)論