井岡山大學(xué) 單片機(jī)課件內(nèi)容_第1頁(yè)
井岡山大學(xué) 單片機(jī)課件內(nèi)容_第2頁(yè)
井岡山大學(xué) 單片機(jī)課件內(nèi)容_第3頁(yè)
井岡山大學(xué) 單片機(jī)課件內(nèi)容_第4頁(yè)
井岡山大學(xué) 單片機(jī)課件內(nèi)容_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、兩個(gè)例子1.燈閃爍.swf 2.asm8led二、89S51芯片引腳圖(P61) 40個(gè):1.電源引腳 2.I/O引腳 3.晶振引腳 4.控制引腳圖3-2-1 89S51 MCS-51封裝和引腳分配(a)雙列直插式封裝)三、存儲(chǔ)器的組織結(jié)構(gòu)(P 51)1.存儲(chǔ)器配置 圖3-2-1 MCS-51 存儲(chǔ)器地址分配2.內(nèi)部RAM (1)工作寄存器區(qū) (2)位尋址區(qū) (3)一般RAM區(qū)3.特殊功能寄存器 (1)累加器ACC(2)B寄存器 (3)程序狀態(tài)字寄存器PSW 圖3-1-3 8051內(nèi)部RAM結(jié)構(gòu)圖 表3-1-3 PSW中各位的定義位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW

2、.2PSW.1PSW.0位標(biāo)志CYACFORS1RS0OV未用P 表3-1-4 RS1、RS0與寄存器組對(duì)應(yīng)關(guān)系RS1RS0寄存器組地址000組0007H011組080FH102組1017H113組181FH (4)堆棧指針寄存器SP(5)數(shù)據(jù)指針寄存器DPTR4.程序存儲(chǔ)器 程序執(zhí)行流程圖表6-1-2 8031/8051中斷入口地址表 復(fù)位入口地址0000H外部中斷0服務(wù)程序入口地址0003H定時(shí)器T0中斷服務(wù)程序入口地址000BH外部中斷1服務(wù)程序入口地址0013H定時(shí)器T1中斷服務(wù)程序入口地址001BH串行口中斷服務(wù)程序入口地址0023H四、并行I/O口(P200) 1P0口 圖7-2-

3、1 P0口一位的結(jié)構(gòu)P0口有兩種方式:通用I/O口和地址/數(shù)據(jù)總線。(1)通用I/O口的工作過(guò)程 MUX接通B端,V1韯止AP0輸出數(shù)據(jù)時(shí): 上拉電阻BP0輸入數(shù)據(jù)時(shí):分為讀引腳和讀鎖存器兩種方式a.讀引腳操作:先將鎖存器寫1,端口輸入指令:MOV A,P0b.讀鎖存器操作:讀修改寫類指令:ANL P0,A (2)地址/數(shù)據(jù)總線的工作過(guò)程 MUX接通A端,低8位地址和數(shù)據(jù) 表2.7 專用寄存器復(fù)位狀態(tài)(P23)專用寄存器復(fù)位狀態(tài)專用寄存器復(fù)位狀態(tài)ACC00HTCON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0P3FFHSCON00H

4、IP×××00000BSBUF不定IE0××00000BPCON0×××0000BTMOD00H2P1口 有上拉電阻 圖7-2-2 P1口一位的結(jié)構(gòu) 3P2口 高8位地址 圖7-2-3 P2口一位的結(jié)構(gòu)4P3口 第二功能 圖7-2-4 P3口一位的結(jié)構(gòu)表2.1 P3口線的第二功能(P10)口線第二功能信號(hào)第二功能P30RXD串行數(shù)據(jù)輸入P31TXD串行數(shù)據(jù)輸出P32外部中斷0請(qǐng)求輸入P33外部中斷1請(qǐng)求輸入P34T0定時(shí)器/計(jì)數(shù)器0外部輸入P35T1定時(shí)器/計(jì)數(shù)器1外部輸入P36外部RAM寫選通P37外部RAM讀選

5、通五、尋址方式(P30) MCS-51單片機(jī)指令系統(tǒng)提供了7種不同的尋址方式。1立即尋址方式 操作數(shù)是以指令字節(jié)的形式存放在程序存儲(chǔ)器中。 書寫時(shí),在立即數(shù)面前加“#”標(biāo)志。 MOV A,#20HMOV DPTR, # data16。2直接尋址方式 直接尋址是指在指令中直接給出操作對(duì)象的存儲(chǔ)單元地址。直接尋址方式的尋址范圍包括:內(nèi)部RAM低128單元、特殊功能寄存器和一些程序控制指令。(位地址空間)例如:MOV A,3AH。該指令將內(nèi)部RAM中3AH單元的內(nèi)容送給累加器A,若(3AH)=20H,執(zhí)行示意圖如圖3.2。執(zhí)行結(jié)果A=20H。另有(A)=20HMOV A,P0MOV A,80H 圖3

6、.2 “MOV A,3AH”示意圖 3寄存器尋址方式寄存器尋址就是操作對(duì)象放在寄存器中。 寄存器尋址方式的尋址范圍包括:四個(gè)工作寄存器組共32個(gè)通用寄存器、部分特殊功能寄存器。(A, B, DPTR, CY)例如:MOV A,R0。 該指令把寄存器R0的內(nèi)容送到累加器A中,若R0=20H,執(zhí)行過(guò)程如圖3.3。指令執(zhí)行后A=20H。圖3.3 “MOV A,R0”指令示意圖4寄存器間接尋址方式 寄存器間接尋址就是操作對(duì)象的存儲(chǔ)器單元地址存放在寄存器中。用“”和寄存器符號(hào)表示。(R0,R1,DPTR,SP)寄存器間接尋址范圍包括:內(nèi)部RAM低128字節(jié)、外部RAM 64KB、堆棧操作指令。例如:設(shè)寄

7、存器R1 = 60H,A = 20H,執(zhí)行指令A(yù)DD A, R1。若(60H)=10H,執(zhí)行過(guò)程如圖3.4。執(zhí)行結(jié)果A=30H。圖3.4 “MOV A,R1”指令示意圖5相對(duì)尋址方式 相對(duì)尋址是指以指令中給出的操作數(shù)作為程序轉(zhuǎn)移的偏移量。書寫時(shí),以“rel”表示地址偏移量。目標(biāo)地址表示為:目標(biāo)地址= 轉(zhuǎn)移指令首地址+ 轉(zhuǎn)移指令字節(jié)數(shù)+ rel 目標(biāo)地址=當(dāng)前PC值+ rel例如:JC 3AH。 (JC的指令代碼是40H,見P210)執(zhí)行過(guò)程如圖3.5。圖3.5 “JC 3AH”指令示意圖6變址尋址方式(又稱基址寄存器加變址寄存器間接尋址) 指令提供了以DPTR或PC為基址、以累加器A 為變址,

8、通過(guò)將兩寄存器的內(nèi)容相加形成的16位數(shù)據(jù),作為操作對(duì)象存儲(chǔ)單元的地址。 51系列單片機(jī)的變址尋址只能對(duì)程序存儲(chǔ)器進(jìn)行尋址,而且變址尋址指令只有三條: MOVC A, A + DPTR MOVC A, A + PC JMP A + DPTR例如:MOVC A, A + DPTR。若A=3AH,DPTR=3F30H,那么操作對(duì)象存儲(chǔ)單元的地址為3F6AH,若(3F6AH)=5CH,執(zhí)行過(guò)程如圖3.6。則執(zhí)行結(jié)果為A=5CH。圖3.6 “MOVC A,A+DPTR”指令示意圖7位尋址方式 指令給出的操作數(shù)是內(nèi)部數(shù)據(jù)存儲(chǔ)器中的可尋址位。書寫時(shí),有四種表示方法:直接使用位地址、位名稱表示法、單元地址加位

9、表示法、專用寄存器名稱加位表示法。 51單片機(jī)的位尋址范圍包括:內(nèi)部RAM中的位尋址區(qū)、特殊功能寄存器的可尋址位。 例如:ANL C,21H.5。該指令將進(jìn)位標(biāo)志CY和內(nèi)部RAM的21H單元的第5位進(jìn)行邏輯與運(yùn)算,結(jié)果保存到C中。六、指令系統(tǒng)(P33)1.描述指令的一些符號(hào)的意義: ·R n (n = 07):表示當(dāng)前工作寄存器組R0R7中的某一個(gè)寄存器。 ·R i(i= 01): 可以作間接尋址的寄存器,只能是R0和R1兩個(gè)寄存器,“”是間接尋址標(biāo)識(shí)符。 ·direct: 內(nèi)部RAM的8位地址,可以是內(nèi)部RAM的單元地址(00H7FH)或特殊功能寄存器地址。 &

10、#183;# data:8位立即數(shù),其中“#”是立即數(shù)標(biāo)識(shí)符。 ·# data16:16位立即數(shù)。 ·addr11:11位目的地址。用于ACALL和AJMP指令中,轉(zhuǎn)移范圍為2KB。 ·addr16:16位目的地址。用于LCALL和LJMP指令中,轉(zhuǎn)移范圍為64KB。 ·rel:相對(duì)轉(zhuǎn)移指令中的8位偏移地址,范圍是-128+127。 ·DPTR:數(shù)據(jù)指針,用作16位的地址寄存器。 ·bit:內(nèi)部RAM或特殊功能寄存器中的直接尋址位。 ·rrr:在操作碼中,表示R0R7寄存器的編碼。 ·A:累加器,寫作“A”時(shí),是寄

11、存器尋址;寫作“ACC”時(shí),是直接尋址。 ·B:特殊功能寄存器,用于MUL和DIV指令中。 ·/ :位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反。 ·(存儲(chǔ)單元地址):表示某存儲(chǔ)單元的內(nèi)容。 ·(間址寄存器):由寄存器間接尋址的單元中的內(nèi)容。2.數(shù)據(jù)傳送指令(29條)(1)以累加器A為目的操作數(shù)的指令(4條) MOV A,#data Rn direct Ri(2)以寄存器Rn為目的操作數(shù)的指令(3條) MOV Rn, ,#data direct A(3)以直接地址為目的操作數(shù)的指令(5條) MOV direct, #data Rn direct2 Ri A(4)

12、以間接地址為目的操作數(shù)的指令(3條) MOV Ri, #data direct A(5)十六位數(shù)據(jù)傳送指令(1條) MOV DPTR,#data16(6)查表指令(2條) MOVC A,ADPTR APC(7)累加器A與片外RAM傳送指令(4條) MOVX A,DPTR Ri MOVX DPTR,A MOVX Ri,A(8)棧操作指令(2條) PUSH direct POP direct(9)交換指令(5條) XCH A,Rn direct Ri XCHD A,Ri SWAP A3.算術(shù)運(yùn)算指令(24條)(1)不帶進(jìn)位加法指令(4條) ADD A,Rn direct Ri #data(2)帶進(jìn)

13、位加法指令(4條) ADDC A,Rn direct Ri #data(3)帶借位減法指令(4條) SUBB A,Rn direct Ri #data(4)乘法指令(1條) MUL AB(5)除法指令(1條) DIV AB(6)加1指令(5條) INC A Rn direct Ri DPTR(7)減1指令(4條) DEC A Rn direct Ri (8)十進(jìn)制調(diào)整指令(1條) DA A4.邏輯運(yùn)算指令(24條)(1)邏輯與運(yùn)算指令(6條)ANL A,Rn Ri direct # data ANL direct,A # data (2)邏輯或運(yùn)算指令(6條)ORL A,Rn Ri direc

14、t # data ORL direct,A # data (3)邏輯異或運(yùn)算指令(6條)XRL A,Rn Ri direct # data XRL direct,A # data (4)累加器清0和取反指令(2條) CLR A CPL A(5)循環(huán)移位指令(4條) RR A RRC A RL A RLC A5.程序控制指令(22條)(1)無(wú)條件轉(zhuǎn)移指令(4條) 相對(duì)轉(zhuǎn)移指令 SJMP rel 絕對(duì)轉(zhuǎn)移指令 AJMP addr11 長(zhǎng)轉(zhuǎn)移指令 LJMP addr16 間接轉(zhuǎn)移指令 JMP ADPTR (2)條件轉(zhuǎn)移指令(13條) 累加器判零轉(zhuǎn)移指令 JZ rel JNZ rel 比較轉(zhuǎn)移指令 C

15、JNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE Ri,#data,rel 減1不為0轉(zhuǎn)移指令 DJNZ Rn,rel DJNZ direct,rel 位控制轉(zhuǎn)移指令 JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel (3)子程序調(diào)用和返回指令(4條) 絕對(duì)調(diào)用指令 ACALL addr11 長(zhǎng)調(diào)用指令 LCALL addr16 返回指令 RET RETI(4)空操作指令(1條) NOP6.位操作指令(12條)(1)位傳送指令(2條) MOV C,bit MOV bit,C(

16、2)置位復(fù)位指令(4條) CLR C bit SETB C bit(3)位邏輯運(yùn)算指令(6條) ANL C,bit ANL C, / bit ORL C,bit ORL C, / bit CPL C CPL bit7.偽指令(P54)(1)賦值偽指令EQU 指令格式:<符號(hào)名>EQU <賦值項(xiàng)> 例如:TTY EQU 1000H ;定義標(biāo)號(hào)TTY 值為1000HLOOP EQU TTY ;定義標(biāo)號(hào)LOOP 值為標(biāo)號(hào)TTY 的值(2)定義字節(jié)偽指令DB 指令格式: <標(biāo)號(hào)> DB <表達(dá)式表>功能:把表達(dá)式表中的字節(jié)數(shù)據(jù)存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元

17、中。例如:TAB: DB 32H,33H,34H,35H,36H,37H 表示把字節(jié)數(shù)據(jù)存入由標(biāo)號(hào)TAB開始的連續(xù)存儲(chǔ)單元中。(3)定義字偽指令DW指令格式:<標(biāo)號(hào)> DW <表達(dá)式表>功能:把表達(dá)式表中的16 位數(shù)據(jù)存入由標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元,低地址單元存放高字節(jié),高地址單元存放低字節(jié)。例如:ABC: DW 1234H,100H 表示從ABC 地址開始按順序存入12H,34H,01H,00H。(4)存儲(chǔ)區(qū)定義偽指令DS 指令格式:<標(biāo)號(hào)>DS <表達(dá)式>功能:通知匯編程序,從指定的地址開始,保留指定數(shù)目的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用。例

18、如:ADDR1: DS 20H 指令表示從標(biāo)號(hào)ADDR1代表的地址開始,保留20H個(gè)存儲(chǔ)單元。(5)位定義偽指令BIT 指令格式:<符號(hào)名> BIT <位地址> 功能:給符號(hào)名賦以位地址。 例如:AA BIT 1FH ;用符號(hào)名AA代表位地址1FH。(6)設(shè)置起始地址偽指令ORG 指令格式:<標(biāo)號(hào)>ORG <表達(dá)式>功能:指定目標(biāo)程序或數(shù)據(jù)塊在存儲(chǔ)器中的起始地址,其中,表達(dá)式通常為16 位地址碼。例如:ORG 1000HSTART:MOV A,0HORG 偽指令通知匯編程序,由START開始的程序段,其起始地址為1000H。如果沒有設(shè)置起始地址,

19、則目標(biāo)程序從0000H單元開始存放。(7)匯編結(jié)束偽指令END指令格式:END功能:用于終止源程序的匯編工作。七、程序設(shè)計(jì)舉例(P58)例3.10 雙字節(jié)加法程序設(shè): 被加數(shù)存放在內(nèi)部RAM的30H (高字節(jié))、31H (低字節(jié))單元中,加數(shù)存放在內(nèi)部RAM 的32H、33H 單元中,運(yùn)算結(jié)果存放在30H、31H中,進(jìn)位位存放在位尋址區(qū)的00H位中。分析:由于MCS-51指令系統(tǒng)中只有單字節(jié)加法指令,因此多字節(jié)加法必須從低位字節(jié)開始分字節(jié)相加。其中最低字節(jié)使用ADD指令,其余字節(jié)使用帶進(jìn)位加法指令A(yù)DDC。雙字節(jié)加法程序如下: ORG 0100H ;程序存放在0100H 開始的單元START:

20、 MOV R0, # 31H ;將被加數(shù)低字節(jié)地址送R0MOV R1, # 33H ;將加數(shù)低字節(jié)地址送R1MOV A, R0 ;將被加數(shù)低字節(jié)內(nèi)容送AADD A, R1 ;低字節(jié)數(shù)相加MOV R0,A ;低字節(jié)數(shù)之和存入31H 單元DEC R0 ;R0 指向被加數(shù)高字節(jié)DEC R1 ;R1 指向加數(shù)高字節(jié)MOV A, R0 ;被加數(shù)高字節(jié)送AADDC A,R1 ;高字節(jié)數(shù)相加MOV R0,A ;高字節(jié)數(shù)之和存入30H 單元MOV 00H,C ;進(jìn)位送00H 位保存SJMP ;動(dòng)態(tài)停機(jī)END ;源程序結(jié)束 例3.11 將內(nèi)部RAM 1AH單元中一壓縮BCD數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)。 分析:該題的關(guān)鍵是

21、如何取出壓縮BCD數(shù)的十位數(shù)和個(gè)位數(shù)。實(shí)現(xiàn)轉(zhuǎn)換的程序段如下: MOV A,1AH ;將BCD 數(shù)送累加器ASWAP A ;交換BCD 數(shù)的個(gè)位數(shù)和十位數(shù)ANL A, # 0FH ;取出BCD 數(shù)的十位數(shù)MOV B, # 0AH ;立即數(shù)10 送寄存器BMUL AB ;BCD 數(shù)的十位數(shù)乘以10ANL 1AH, # 0FH ;取出BCD 數(shù)的個(gè)位數(shù)ADD A,1AH ;十位數(shù)×10+個(gè)位數(shù)MOV 40H,A ;轉(zhuǎn)換結(jié)果送40H單元 例3.12 編程實(shí)現(xiàn)下圖的邏輯功能。其中20H、2FH、2AH是位地址。 分析:邏輯電路的功能是P1.0=程序如下: MOV C,20H ;20H 位送CY

22、ANL C,2FH ;CY 邏輯與2FH 位CPL C ;CY 取反ORL C,2AH ;CY 邏輯或2AH 位MOV P1.0,C ;結(jié)果送P1.0例3.13 雙字節(jié)乘法程序設(shè)兩個(gè)乘數(shù)分別放在R0R1和R2R3中,乘積放入R4R5R6R7中。分析:雙字節(jié)乘法實(shí)質(zhì)上是相應(yīng)字節(jié)相乘后對(duì)應(yīng)字節(jié)相加,其計(jì)算過(guò)程如下:雙字節(jié)乘法程序段如下:START:MOV A,R1MOV B,R3MUL AB ;R1× R3MOV R7,AMOV R6,B ;R1× R3存入R6R7中MOV A,R0MOV B,R3MUL AB ;R0× R3ADD A,R6MOV R6,A ;R0&

23、#215; R3低字節(jié)送R6MOV A,B ;R0× R3高字節(jié)送AADDC A,# 0H ;加CYMOV R5,A ;R0× R3存入R5R6中MOV A,R1MOV B,R2MUL AB ;R1× R2ADD A,R6MOV R6,A;R1× R2低字節(jié)累加進(jìn)入R6MOV A,B ;R1× R2高字節(jié)送AADDC A,R5MOV R5,A ;R1× R2累加存入R5R6CLR AADDC A,# 0HMOV R4,A ;(R1× R2)高+ (R0× R3)高產(chǎn)生的進(jìn)位存入R4MOV A,R0MOV B,R2M

24、UL AB ;R0× R2ADD A,R5MOV R5,A ;R0× R2低字節(jié)送R5MOV A,B ;R0× R2高字節(jié)送AADDC A,R4MOV R4,A ;R0× R2存入R4R5 SJMP $ END 例3.14 比較內(nèi)部RAM 30H和31H單元中無(wú)符號(hào)數(shù)的大小,使得30H單元存放大數(shù),31H單元存放小數(shù)。 分析:流程圖如下:程序: ORG 1000H START: CLR CMOV A,30HSUBB A,31HJNC DONE ;若無(wú)借位,即(30H)(31H)時(shí)轉(zhuǎn)DONEMOV A,30HXCH A,31H ;有借位,即(30H)<

25、;(31H),交換(30H)與(31H)MOV 30H,ADONE: SJMP DONE END 例3.15 內(nèi)部RAM BLOCK單元中存儲(chǔ)一個(gè)不帶符號(hào)數(shù),判斷這個(gè)數(shù)的大小,若小于MIN,則令B = 1;若大于等于MAX,則令B=2;否則,令B=3。 分析:流程圖如下: 程序: ORG 1000H START: MOV A,BLOCK ;將BLOCK中內(nèi)容送ACJNE A, # MIN,NEXT1 ;與MIN 比較,無(wú)論是否相等轉(zhuǎn)NEXT1NEXT1: JNC DO1 ;AMIN 轉(zhuǎn)DO1MOV B, # 01H ;A <MIN,則令B= 1SJMP STOP ;轉(zhuǎn)向結(jié)尾DO1: CJ

26、NE A, # MAX,NEXT2 ;與MAX 比較NEXT2: JNC DO2 ;AMAX 轉(zhuǎn)DO2MOV B, # 03H ;MINA <MAX,則令B = 3SJMP STOPDO2: MOV B, # 02H ;AMAX,則令B = 2STOP: SJMP STOP ;動(dòng)態(tài)停機(jī) END例3.16 假定有三個(gè)分支程序段,各分支程序段的功能依次是從內(nèi)部RAM取數(shù),從外部RAM低256 B范圍取數(shù)和從外部RAM 64 KB范圍內(nèi)取數(shù)。R0中存放內(nèi)部RAM地址或外部RAM的低8位地址,R1中存放外部RAM的高8位,R3中存放分支序號(hào)值(0,1,2)。根據(jù)R3的內(nèi)容轉(zhuǎn)入不同的處理程序。 分

27、析:利用散轉(zhuǎn)指令查表轉(zhuǎn)移的方法:在程序中建立一個(gè)轉(zhuǎn)移表JMPTBL,將分支程序入口地址與轉(zhuǎn)移表首地址的差值按順序存放其中。將轉(zhuǎn)移表首地址JMPTBL送DPTR,分支序號(hào)送A。查表就可以得到相應(yīng)分支程序入口地址與轉(zhuǎn)移表首地址之差,然后使用JMP A+ DPTR 將分支程序的入口地址送PC,實(shí)現(xiàn)程序轉(zhuǎn)移。 程序: MOV A,R3 ;取分支號(hào)MOV DPTR, # JMPTBL ;賦轉(zhuǎn)移表首地址MOVC A, A+ DPTR ;查取轉(zhuǎn)移偏移量JMP A + DPTR ;散轉(zhuǎn)JMPTBL:DB MEM0 - JMPTBL ;定義轉(zhuǎn)移偏移量表DB MEM1-JMPTBLDB MEM2 - JMPTBL

28、MEM0: MOV A, R0 ;從內(nèi)部RAM 讀數(shù)RETMEM1: MOVX A, R0 ;從外部RAM 低256B 讀數(shù)RETMEM2: MOV DPL,R0 ;從外部RAM 64KB讀數(shù)MOV DPH,R1MOVX A, DPTRRET例3.17 編程統(tǒng)計(jì)累加器A中“1”的個(gè)數(shù)。分析:流程圖: 程序:MOV R1, # 0 ;計(jì)數(shù)器R1清0PUSH ACC ;保護(hù)ACCLOOP1: JZ DONE ;若A = 0,程序結(jié)束CLR C ;進(jìn)位位清0RLC A ;累加器A帶進(jìn)位循環(huán)左移一位JNC LOOP1 ;CY = 0,則繼續(xù)循環(huán)INC R1 ;CY = 1,則計(jì)數(shù)器R1加1SJMP L

29、OOP1DONE: POP ACC ;恢復(fù)ACCSJMP END 例3.18 計(jì)算內(nèi)部RAM 40H 單元開始存放的40 個(gè)8 位無(wú)符號(hào)數(shù)之和,將結(jié)果存放在內(nèi)部RAM 7EH (高位)和7FH (低位)單元。 分析:流程圖:程序: MOV 7EH, # 0MOV 7FH, # 0 ;累加和單元清0MOV R6, # 28H ;計(jì)數(shù)器R6 置初值MOV R0, # 40H ;設(shè)置間址指針LOOP: MOV A,7FHADD A, R0 ;累加一個(gè)字節(jié)單元MOV 7FH,ACLR AADDC A,7EH ;加累加時(shí)產(chǎn)生的進(jìn)位MOV 7EH,AINC R0 ;修改間址指針DJNZ R6,LOOP ;

30、計(jì)數(shù)器R6 減1 不為0,則繼續(xù)循環(huán)SJMP 例3.19 從內(nèi)部RAM 30H 單元開始存放了20 個(gè)數(shù),找出其中的最大數(shù)。 分析:求極值問題是一個(gè)比較的過(guò)程。流程圖如下:程序: START: MOV R0, # 30H ;間址指針R0置初值MOV R6, # 13H ;計(jì)數(shù)器R6置初值MOV A, R0 ;讀第一個(gè)數(shù)LOOP: INC R0MOV 20H, R0 ;讀下一個(gè)數(shù)CJNE A,20H,LOOP1 ;兩數(shù)比較LOOP1: JNC LOOP2 ;A中內(nèi)容大則轉(zhuǎn)移,繼續(xù)循環(huán)MOV A, R0 較大數(shù)送入ALOOP2: DJNZ R6,LOOP ;R6 -1不為0,則繼續(xù)循環(huán)SJMP 例

31、3.20 假設(shè)在內(nèi)部RAM 41H4AH和51H5AH單元分別存放10個(gè)無(wú)符號(hào)字節(jié)數(shù),求兩組無(wú)符號(hào)字節(jié)數(shù)據(jù)的最大值之差。解:設(shè)計(jì)一個(gè)子程,實(shí)現(xiàn)從一組字節(jié)數(shù)據(jù)中找出最大值,結(jié)果保存到累加器A中。用R0存放數(shù)據(jù)區(qū)首地址,R7存放數(shù)據(jù)個(gè)數(shù),通過(guò)循環(huán)比較,找出數(shù)據(jù)區(qū)中的最大數(shù)。查找算法的子程序流程如圖所示。程序清單如下:ORG 0100HMAIN:MOV R7,#0AH ;循環(huán)計(jì)數(shù)器R7置初值MOV R0,#41H ;設(shè)置數(shù)據(jù)區(qū)地址指針ACALL MAX;調(diào)用查找子程序MOV 20H,A ;保存最大值MOV R7,#0AH;設(shè)置循環(huán)計(jì)數(shù)器R7MOV R0,#51H;設(shè)置數(shù)據(jù)區(qū)地址指針ACALL MAX

32、;調(diào)用查找子程序CJNE A,20H,NEXT;比較兩數(shù)大小NEXT: JNC RESULTXCH A,20H;交換兩數(shù)CLR CRESULT:SUBB A,20H;計(jì)算兩數(shù)之差SJMP $ORG 0200H;子程序MAX: CLR A;累加器清0LOOP: MOV B,R0CJNE A,B,NEXT;比較兩數(shù)大小NEXT: JNC CONT;若CY=0,則AB,轉(zhuǎn)移MOV A,R0;CY=1,則AB,保存較大數(shù)到累加器ACONT:INC R0;修改數(shù)據(jù)指針R0DJNZ R7,LOOPRETEND八、中斷系統(tǒng)(P80)1中斷系統(tǒng)結(jié)構(gòu)圖4.2 89S51中斷系統(tǒng)結(jié)構(gòu)(1)中斷源 89S51的5個(gè)

33、中斷源分別為:2 個(gè)外部中斷(由INT0、INT1引腳輸入中斷請(qǐng)求信號(hào))、2個(gè)片內(nèi)定時(shí)器/ 計(jì)數(shù)器溢出中斷(T0、T1)、1個(gè)片內(nèi)串行口中斷(TX發(fā)送、RX接收)。(2)中斷請(qǐng)求標(biāo)志寄存器 中斷系統(tǒng)設(shè)置有中斷請(qǐng)求標(biāo)志寄存器,它由定時(shí)器控制寄存器(TCON)和串行口控制寄存器(SCON)的若干位構(gòu)成,如圖所示:圖4.3 中斷標(biāo)志位當(dāng)某一中斷源發(fā)出有效的請(qǐng)求信號(hào)時(shí),相應(yīng)的標(biāo)志位置1,否則為0。(3)中斷允許控制寄存器IE 為了有效地控制中斷過(guò)程,中斷系統(tǒng)設(shè)置有中斷允許控制寄存器IE,它控制著中斷的允許與禁止。IE結(jié)構(gòu)如圖所示。圖4.4 中斷允許控制寄存器IE(4)中斷優(yōu)先級(jí)控制寄存器IP 89S5

34、1有2級(jí)中斷優(yōu)先級(jí),每一個(gè)中斷源都可以軟件設(shè)置為高級(jí)中斷或低級(jí)中斷,由中斷優(yōu)先級(jí)控制寄存器IP控制。IP寄存器結(jié)構(gòu)如圖所示。圖4.5 中斷優(yōu)先級(jí)控制寄存器IP(5)中斷硬件查詢電路 若CPU同時(shí)接收到兩個(gè)不同優(yōu)先級(jí)的中斷時(shí),則先處理高級(jí)中斷。若CPU同時(shí)接收的是多個(gè)同級(jí)中斷時(shí),則通過(guò)內(nèi)部硬件查詢邏輯電路,按查詢順序確定應(yīng)先響應(yīng)哪一個(gè)中斷請(qǐng)求。在同級(jí)中斷中,查詢順序(由高到低)是:外部中斷0、定時(shí)器T0 中斷、外部中斷1、定時(shí)器T1 中斷、串行口中斷。 2.中斷的處理過(guò)程(1)中斷查詢 CPU在每個(gè)機(jī)器周期結(jié)束時(shí)查詢中斷源是否有中斷申請(qǐng),若沒有,則繼續(xù)當(dāng)前任務(wù);若有,則自動(dòng)設(shè)置相應(yīng)中斷請(qǐng)求標(biāo)志位

35、。(2)中斷的響應(yīng)條件 只有同時(shí)滿足以下條件時(shí),才會(huì)響應(yīng)中斷。 ·中斷請(qǐng)求標(biāo)志為1。 ·CPU中斷開放,即EA = 1且相應(yīng)中斷允許位= 1。 ·無(wú)同級(jí)或更高優(yōu)先級(jí)中斷正在被服務(wù)。 ·若現(xiàn)行指令為中斷返回RETI或訪問IE、IP寄存器指令,必須執(zhí)行完該指令和緊接著的下一條指令后才能響應(yīng)中斷。(3)響應(yīng)中斷 ·設(shè)置相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器。 ·保護(hù)現(xiàn)行程序斷點(diǎn)地址。 ·進(jìn)入指定的中斷服務(wù)程序入口地址。 CPU響應(yīng)中斷,首先置位相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器,指示開始處理中斷的優(yōu)先級(jí)別,以阻斷同級(jí)和低級(jí)的中斷,并清零中斷請(qǐng)求源標(biāo)志(指TF

36、1、TF0及邊沿觸發(fā)的外部中斷IE1、IE0)。然后CPU執(zhí)行一個(gè)硬件子程序調(diào)用,把當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧(但沒有自動(dòng)保存PSW及其它寄存器的內(nèi)容),同時(shí)根據(jù)提出申請(qǐng)的中斷源的類別,把相應(yīng)的中斷服務(wù)程序的入口地址裝入PC中。(4)執(zhí)行中斷服務(wù)程序 在中斷服務(wù)程序中不僅要完成相應(yīng)的服務(wù)任務(wù),而且要考慮現(xiàn)場(chǎng)保護(hù)與現(xiàn)場(chǎng)恢復(fù),以便保護(hù)主程序中不應(yīng)破壞的數(shù)據(jù)。(5)中斷返回 在中斷服務(wù)程序的結(jié)尾必須有一條中斷返回指令RETI。 作用:·清除響應(yīng)時(shí)設(shè)置的優(yōu)先級(jí)狀態(tài)觸發(fā)器 ·恢復(fù)主程序斷點(diǎn)地址,即把堆棧的內(nèi)容送給PC(6)中斷請(qǐng)求的撤除 CPU響應(yīng)某中斷請(qǐng)求后,在返回之前必須撤

37、除中斷請(qǐng)求。 例:外部中斷的應(yīng)用 ORG 0000H LJMP MAIN ORG 0013H LJMP SEINT1 MAIN: SETB IT1 SETB EX1 SETB EA ORL P1,#OFFH LOOP:SJMP LOOP SEINT1:MOV A,P1 RETI九、定時(shí)器/計(jì)數(shù)器(P89)89S51單片機(jī)內(nèi)部集成有兩個(gè)16位定時(shí)器/計(jì)數(shù)器T0、T1。1.定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)(1)定時(shí)器的總體結(jié)構(gòu) 圖4.10 89S51單片機(jī)定時(shí)器/計(jì)數(shù)器T0、T1的結(jié)構(gòu)(2)定時(shí)器方式寄存器TMOD 特殊功能寄存器TMOD用于控制定時(shí)器/ 計(jì)數(shù)器的啟動(dòng)方式、計(jì)數(shù)脈沖源的選擇、工作方式

38、的選擇。此寄存器只能字節(jié)尋址,復(fù)位時(shí),TMOD=00H。其各位含義如圖所示。圖4.11 TMOD的各位功能(3)定時(shí)器控制寄存器TCON此寄存器復(fù)位時(shí),TCON=00H。其各位含義如圖所示。圖4.12 TCON各位功能2.定時(shí)器/計(jì)數(shù)器T0、T1的工作方式(1)方式0圖4.14 T0方式0原理圖工作原理: ·TL0的低5位進(jìn)位時(shí),TH0加1,TH0最高位進(jìn)位(即溢出)時(shí),設(shè)置TF0=1,申請(qǐng)中斷。若CPU 響應(yīng)中斷,系統(tǒng)自動(dòng)對(duì)TF0復(fù)位。 定時(shí)時(shí)間t與計(jì)數(shù)器的位數(shù)、設(shè)置的計(jì)數(shù)初值、時(shí)鐘頻率有關(guān),計(jì)算公式如下:t=(計(jì)數(shù)最大值-x初值)×機(jī)器周期=(-x初值)×12

39、/fosc其中 x初值:時(shí)間常數(shù);fosc:時(shí)鐘頻率若fosc=12MHz,則方式0的最大定時(shí)時(shí)間T=(-0)×12/ fosc = 8.192 ms例1:若設(shè)置定時(shí)器T1工作在方式0、定時(shí)功能,定時(shí)時(shí)間t=5 ms,啟動(dòng)由TR1控制。寫出初始化程序。分析:方式0:設(shè)置M1、M0=00;定時(shí)功能:設(shè)置C/=0;TR1啟動(dòng):設(shè)置GATE=0;利用計(jì)算公式可設(shè)置TH1=63H,TL1=18H。初始化程序:START: MOV TMOD, # 00H ;設(shè)置T1 方式0,定時(shí)功能MOV TH1, # 63H ;送時(shí)間常數(shù)MOV TL1, # 18HSETB TR1 ;啟動(dòng)T1工作(2)方式

40、1 圖4.15 T0方式1原理圖工作原理: ·T0、T1定時(shí)器/ 計(jì)數(shù)器的方式1相同,為16位計(jì)數(shù)器結(jié)構(gòu)。 ·方式1與方式0基本工作過(guò)程相同。定時(shí)時(shí)間計(jì)算公式:t=(計(jì)數(shù)最大值-x初值)×機(jī)器周期=(-x初值)×12/fosc若fosc=12MHZ,則方式1的最大定時(shí)時(shí)間T=(-0)×12/ fosc = 65.536 ms例2 若設(shè)置定時(shí)器T0 工作在方式1、計(jì)數(shù)功能,計(jì)數(shù)數(shù)目為10 000 次,啟動(dòng)由INT0引腳控制。寫出初始化程序。分析:方式1:設(shè)置M1、M0=01;計(jì)數(shù)功能:設(shè)置C/=1;控制啟動(dòng):設(shè)置GATE=1;利用計(jì)算公式可設(shè)置T

41、H0=0D8H,TL0=0F0H。初始化程序:START: MOV TMOD, # 0DH ;設(shè)置T0方式1,計(jì)數(shù)功能MOV TH0, # 0D8H ;送計(jì)數(shù)初值MOV TL0, # 0F0HSETB TR0 ;置TR0 = 1,T0啟動(dòng)由INT0引腳控制(3)方式2圖4.16 T0方式2原理圖工作原理:·T0、T1 定時(shí)器/ 計(jì)數(shù)器的方式2相同,為可重載時(shí)間常數(shù)的8位計(jì)數(shù)器結(jié)構(gòu)。 ·在方式2下,TL0作為8 位計(jì)數(shù)器,TH0作為重載時(shí)間常數(shù)寄存器,當(dāng)TL0計(jì)滿溢出后,設(shè)置TF0 = 1申請(qǐng)中斷,同時(shí)將TH0中的數(shù)據(jù)自動(dòng)裝載到TL0中重新工作。定時(shí)時(shí)間計(jì)算公式:t=(計(jì)數(shù)最

42、大值-x初值)×機(jī)器周期=(-x初值)×12/fosc若fosc=12MHZ,則方式2的最大定時(shí)時(shí)間T=(-0)×12/ fosc = 0.256 ms(4)方式3圖4.17 T0方式3原理圖工作原理:·定時(shí)器/ 計(jì)數(shù)器T0、T1方式3的工作情況差別很大,T1設(shè)置為方式3時(shí),停止工作;T0設(shè)置為方式3時(shí),分成兩個(gè)獨(dú)立的8位定時(shí)器/ 計(jì)數(shù)器TL0和TH0。 ·TL0既可以作計(jì)數(shù)器使用,也可以作為定時(shí)器使用,定時(shí)/計(jì)數(shù)器T0的各控制位和引腳信號(hào)全歸它使用。其功能和操作與方式0或方式1完全相同。 ·TH0只能作為定時(shí)器使用,它的啟動(dòng)僅由原來(lái)

43、T1的啟動(dòng)位TR1控制,當(dāng)TH0溢出時(shí),置位TF1標(biāo)志申請(qǐng)中斷,中斷服務(wù)程序入口為001BH。十、串行口(P103)1.串行通信的基本概念(1)并行通信與串行通信 計(jì)算機(jī)與外界的信息交換稱為通信?;镜耐ㄐ欧椒ㄓ胁⑿型ㄐ藕痛型ㄐ艃煞N。 ·并行通信是指單位信息(通常為一個(gè)字節(jié))的各位數(shù)據(jù)同時(shí)傳送。它是依靠并行I/ O口實(shí)現(xiàn)的。 ·串行通信是指單位信息的各位一位一位地按順序依次傳送,它是靠串行接口實(shí)現(xiàn)數(shù)據(jù)傳送的。串行通信是以幀為單位傳送。(2)同步通信與異步通信 串行通信有兩種基本通信方式,即同步通信與異步通信。 ·同步通信 是指發(fā)送和接收同步進(jìn)行,可連續(xù)傳送數(shù)據(jù)。

44、同步通信的數(shù)據(jù)幀格式如圖所示。發(fā)送設(shè)備與接收設(shè)備之間不僅連有數(shù)據(jù)線,還連接有同步時(shí)鐘信號(hào)線,由主控設(shè)備發(fā)出同步時(shí)鐘信號(hào),以達(dá)到發(fā)送與接收同步進(jìn)行。同步字符是由用戶約定的字符,放在一幀數(shù)據(jù)的開始和數(shù)據(jù)之間的間隔,起到提示發(fā)送開始和等待的作用。·異步通信 是指發(fā)送與接收沒有用同步時(shí)鐘同步,傳送過(guò)程中數(shù)據(jù)之間有隔。異步通信的數(shù)據(jù)幀格式如圖所示。一幀數(shù)據(jù)一般由一位起始位、若干數(shù)據(jù)位、一位停止位構(gòu)成,傳送中數(shù)據(jù)幀之間的空閑時(shí)間插入停止位。發(fā)送設(shè)備與接收設(shè)備之間沒有同步時(shí)鐘信號(hào)線,只有數(shù)據(jù)信號(hào)線,當(dāng)接收設(shè)備檢測(cè)到數(shù)據(jù)信號(hào)線有起始位到來(lái),才開始接收數(shù)據(jù)。(3)串行通信的傳送方式 ·單工

45、發(fā)送設(shè)備和接受設(shè)備之間連接的信號(hào)線傳送方向是單向的。 ·半雙工 兩設(shè)備之間連接的信號(hào)線傳送方向是雙向的,但兩方向不能同時(shí)進(jìn)行。 ·全雙工 兩設(shè)備之間連接的信號(hào)線傳送方向是雙向的,并且兩方向能同時(shí)進(jìn)行。(4)波特率的概念 每秒傳送數(shù)據(jù)的位數(shù)稱為波特率(Baud Rate),單位為波特,即位/ 秒(b/ s)。波特率的倒數(shù)稱為位傳送時(shí)間,用Td 表示,單位為秒(s)。例如,傳送速率每秒10幀數(shù)據(jù),每一幀數(shù)據(jù)11 位,則傳送波特率為:10 幀/ 秒×11 位/ 幀=110b/ s位傳送時(shí)間 Td=9. 1 ms。2.89S51串行口的結(jié)構(gòu)(1)串行口的總體結(jié)構(gòu) 89S5

46、1串行口是一個(gè)可編程、全雙工的串行口,結(jié)構(gòu)框圖如圖所示。圖4.29 89S51單片機(jī)串行口的結(jié)構(gòu)框圖串行口緩沖器SBUF(99H),在物理上它對(duì)應(yīng)著兩個(gè)獨(dú)立的寄存器,發(fā)送緩沖器和接受緩沖器。執(zhí)行MOV A,SBUF指令就是讀接收緩沖器;執(zhí)行MOV SBUF,A就是寫發(fā)送SBUF。(2)串行口控制寄存器SCON包含串行口工作方式選擇位、接收與發(fā)送控制位、串口狀態(tài)標(biāo)志位。其數(shù)據(jù)格式如下:各位功能如下:·SM0、SM1:串行口工作方式選擇位??稍O(shè)置4種工作方式。表4-5 串行口工作方式選擇·SM2:允許方式2、3多機(jī)通信控制位,其功能見下表。表4-6 多機(jī)通信控制位SM2的意義

47、·REN:串行接收允許位。由軟件設(shè)置1允許接收,設(shè)為0禁止接收。 ·TB8、RB8:在9位異步通信方式下,由于緩沖器只有8位,故用TB8作為發(fā)送的第9位,RB8作為接收的第9位。 ·TI、RI:發(fā)送中斷標(biāo)志與接收中斷標(biāo)志。當(dāng)發(fā)送完一幀數(shù)據(jù)后硬件自動(dòng)置位TI;當(dāng)接收完一幀數(shù)據(jù)后,若數(shù)據(jù)滿足保留條件,硬件自動(dòng)置位RI。若CPU響應(yīng)中斷,系統(tǒng)不會(huì)自動(dòng)復(fù)位TI、RI,必須由軟件清0。(由硬件在方式0接收到第8位結(jié)束時(shí)置位,或在其他方式接收到停止位的中間時(shí)置位) ·復(fù)位后,SCON=00H。(3)電源控制寄存器PCON用來(lái)控制串行口的波特率倍增,以及在CHMOS系

48、列單片機(jī)中實(shí)現(xiàn)電源控制,其格式如下: ·復(fù)位后,PCON寄存器的所有位為0。 ·SMOD:波特率倍增位。當(dāng)SMOD=1時(shí),使串行口波特率加倍。3.串行口方式0(1)方式0的工作過(guò)程數(shù)據(jù)幀格式如下圖,沒有起始位與停止位,只有8位數(shù)據(jù)位,傳送時(shí)低位在前,高位在后。 ·發(fā)送過(guò)程 CPU將數(shù)據(jù)送入發(fā)送緩沖器SBUF后,自動(dòng)啟動(dòng)串行口發(fā)送。 8位數(shù)據(jù)以固定的波特率(fosc / 12),低位在前,從RXD引腳串行輸出,TXD引腳發(fā)送移位時(shí)鐘信號(hào)(頻率為fosc /12),每個(gè)移位時(shí)鐘的有效期間,對(duì)應(yīng)一個(gè)輸出的數(shù)據(jù)位。 8位數(shù)據(jù)發(fā)送完畢,置位TI=1,申請(qǐng)中斷,通知CPU再發(fā)送下一個(gè)數(shù)據(jù)。 ·接收過(guò)程 軟件設(shè)置REN=1時(shí),啟動(dòng)接收過(guò)程。 串行口以fosc /12固定的波特率,從RXD引腳串行輸入數(shù)據(jù)(低位在前),TXD引腳輸出移位時(shí)鐘信號(hào)。 當(dāng)8位數(shù)據(jù)接收完畢

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論