第五章 MCS-51單片機內(nèi)部資源及編程_第1頁
第五章 MCS-51單片機內(nèi)部資源及編程_第2頁
第五章 MCS-51單片機內(nèi)部資源及編程_第3頁
第五章 MCS-51單片機內(nèi)部資源及編程_第4頁
第五章 MCS-51單片機內(nèi)部資源及編程_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、第五章 MCS-51單片機內(nèi)部資源及編程,MCS-51單片機的內(nèi)部資源主要有并行I/O口、定時器/計數(shù)器、串行接口以及中斷系統(tǒng),MCS-51單片機的大部分功能就是通過對這些資源的利用來實現(xiàn)的。下面分別對其介紹,并用匯編語言和C語言分別給出相應(yīng)例子。,5.1 并行輸入/輸出接口,5.1.1 并行口應(yīng)用與編程,【例5-1】 利用單片機的P0口接8個發(fā)光二極管,P1口接8個開關(guān),編程實現(xiàn),當(dāng)開關(guān)動作時,對應(yīng)的發(fā)光二極管亮或滅。 只須把P0口的內(nèi)容讀出后,通過P1口輸出即可。 匯編程序: ORG 0100H MOV P0,#0FFH LOOP: MOV A,P0 MOV P1,A SJMP LOOP,

2、C51語言程序: #include void main(void) unsigned char i; P0=0 xff; for(;) i=P0;P1=i; ,5.2 定時/計數(shù)器接口,5.2.1 定時/計數(shù)器的主要特性,1MCS-51系列中51子系列有兩個16位的可編程定時/計數(shù)器:定時/計數(shù)器T0和定時/計數(shù)器T1,52子系列有三個,還有一個定時/計數(shù)器T2。 2每個定時/計數(shù)器既可以對系統(tǒng)時鐘計數(shù)實現(xiàn)定時,也可以對外部信號計數(shù)實現(xiàn)計數(shù)功能,通過編程設(shè)定來實現(xiàn)。 3每個定時/計數(shù)器都有多種工作方式,其中T0有四種工作方式;T1有三種工作方式,T2有三種工作方式。通過編程可設(shè)定工作于某種方式

3、。 4每一個定時/計數(shù)器定時計數(shù)時間到時產(chǎn)生溢出,使相應(yīng)的溢出位置位,溢出可通過查詢或中斷方式處理。,5.2.1 定時/計數(shù)器T0、T1的結(jié)構(gòu)及工作原理,加法計數(shù)器在使用時注意兩個方面。 第一,由于它是加法計數(shù)器,每來一個計數(shù)脈沖,加法器中的內(nèi)容加1個單位,當(dāng)由全1加到全0時計滿溢出,因而,如果要計N個單位,則首先應(yīng)向計數(shù)器置初值為X,且有: 初值X=最大計數(shù)值(滿值)M計數(shù)值N 在不同的計數(shù)方式下,最大計數(shù)值(滿值)不一樣,一般來說,當(dāng)定時器/計數(shù)器工作于R位計數(shù)方式時,它的最大計數(shù)值(滿值)為2的R次冪。 第二,當(dāng)定時/計數(shù)器工作于計數(shù)方式時,對芯片引腳T0(P3.4)或T1(P3.5)上

4、的輸入脈沖計數(shù),計數(shù)過程如下:在每一個機器周期的S5P2時刻對T0(P3.4)或T1(P3.5)上信號采樣一次,如果上一個機器周期采樣到高電平,下一個機器周期采樣到低電平,則計數(shù)器在下一個機器周期的S3P2時刻加1計數(shù)一次。因而需要兩個機器周期才能識別一個計數(shù)脈沖,所以外部計數(shù)脈沖的頻率應(yīng)小于振蕩頻率的1/24。,5.2.2 定時/計數(shù)器的方式和控制寄存器,一定時/計數(shù)器的方式寄存器TMOD,其中: M1、M0為工作方式選擇位 ,用于對T0的四種工作方式,T1的三種工作方式進行選擇,選擇情況如下,C/T:定時或計數(shù)方式選擇位,當(dāng)C/T=1時工作于計數(shù)方式;當(dāng)C/T=0時工作于定時方式。,GAT

5、E:門控位,用于控制定時/計數(shù)器的啟動是否受外部中斷請求信號的影響。,二定時/計數(shù)器的控制寄存器TCON,其中: TF1:定時/計數(shù)器T1的溢出標(biāo)志位,當(dāng)定時/計數(shù)器T1計滿時,由硬件使它置位,如中斷允許則觸發(fā)T1中斷。進入中斷處理后由內(nèi)部硬件電路自動清除。 TR1:定時/計數(shù)器T1的啟動位,可由軟件置位或清零,當(dāng)TR1=1時啟動;TR1=0時停止。,TF0:定時/計數(shù)器T0的溢出標(biāo)志位,當(dāng)定時/計數(shù)器T0計滿時,由硬件使它置位,如中斷允許則觸發(fā)T0中斷。進入中斷處理后由內(nèi)部硬件電路自動清除。 TR0:定時/計數(shù)器T0的啟動位,可由軟件置位或清零,當(dāng)TR0=1時啟動;TR0=0時停止。,5.2

6、.3 定時/計數(shù)器的工作方式,一方式0,方式1是13位的定時/計數(shù)方式,因而最大計數(shù)值(滿值)為2的13次冪,等于8192。如計數(shù)值為N,則置入的初值X為: X=8192-N 如定時/計數(shù)器T0的計數(shù)值為1000,則初值為7192,轉(zhuǎn)換成二進制數(shù)為1110000011000B,則TH0=11100000B,TL0=00011000B。,二方式1,方式1的結(jié)構(gòu)與方式0結(jié)構(gòu)相同,只是把13位變成16位, 16位的加法計數(shù)器被全部用上。,由于是16位的定時/計數(shù)方式,因而最大計數(shù)值(滿值)為2的16次冪,等于65536。如計數(shù)值為N,則置入的初值X為: X=65536-N 如定時/計數(shù)器T0的計數(shù)值

7、為1000,則初值為65536-1000=64536,轉(zhuǎn)換成二進制數(shù)為1111110000011000B,則TH0=11111100B,TL0=00011000B。,三方式2,方式2下,16位的計數(shù)器只用了8位來計數(shù),用的是TL0(或TL1)的8位來進行計數(shù),而TH0(或TH1)用于保存初值。當(dāng)TL0(或TL1)計滿時則溢出,一方面使TF0(或TF1)置位,另一方面溢出信號又會觸發(fā)圖5.5上的三態(tài)門,使三態(tài)門導(dǎo)通,TH0(或TH1)的值就自動裝入TL0(或TL1)。,由于是8位的定時/計數(shù)方式,因而最大計數(shù)值(滿值)為2的8次冪,等于256。如計數(shù)值為N,則置入的初值X為: X=256-N 如

8、定時/計數(shù)器T0的計數(shù)值為100,則初值為256-100=156,轉(zhuǎn)換成二進制數(shù)為10011100B,則TH0= TL0=10011100B。 注意: 由于方式2計滿后,溢出信號會觸發(fā)三態(tài)門自動地把TH0(或TH1)的值裝入TL0(或TL1)中,因而如果要重新實現(xiàn)N個單位的計數(shù),不用重新置入初值。,四方式3,方式3只有定時/計數(shù)器T0才有,當(dāng)M1M0兩位為11時,定時/計數(shù)器T0工作于方式3,方式3的結(jié)構(gòu)如下圖. 方式3下,定時/計數(shù)器T0被分為兩個部分TL0和TH0,其中,TL0可作為定時/計數(shù)器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;而TH0固定只能作定時器使用,對機

9、器周期進行計數(shù),這時它占用定時/計數(shù)器T1的TR1位、TF1位和T1的中斷資源。,5.2.4 定時/計數(shù)器的初始化編程及應(yīng)用,一定時/計數(shù)器的編程,MCS-51單片機定時/計數(shù)器初始化過程如下: 1根據(jù)要求選擇方式,確定方式控制字,寫入方式控制寄存器TMOD。 2根據(jù)要求計算定時/計數(shù)器的計數(shù)值,再由計數(shù)值求得初值,寫入初值寄存器。 3根據(jù)需要開放定時/計數(shù)器中斷(后面須編寫中斷服務(wù)程序)。 4設(shè)置定時/計數(shù)器控制寄存器TCON的值,啟動定時/計數(shù)器開始工作。 5等待定時/計數(shù)時間到,到則執(zhí)行中斷服務(wù)程序;如用查詢處理則編寫查詢程序判斷溢出標(biāo)志,溢出標(biāo)志等于1,則進行相應(yīng)處理。,二定時/計數(shù)器

10、的應(yīng)用,通常利用定時/計數(shù)器來產(chǎn)生周期性的波形。利用定時/計數(shù)器產(chǎn)生周期性波形的基本思想是:利用定時/計數(shù)器產(chǎn)生周期性的定時,定時時間到則對輸出端進行相應(yīng)的處理。如產(chǎn)生周期性的方波只須定時時間到對輸出端取反一次即可。,【例5-2】 設(shè)系統(tǒng)時鐘頻率為12MHZ,用定時/計數(shù)器T0編程實現(xiàn)從P1.0輸出周期為500s的方波。 分析:從P1.0輸出周期為500s的方波,只須P1.0每250s取反一次則可。當(dāng)系統(tǒng)時鐘為12MHZ,定時/計數(shù)器T0工作于方式2時,最大的定時時間為256s,滿足250s的定時要求,方式控制字應(yīng)設(shè)定為00000010B(02H)。系統(tǒng)時鐘為12MHZ,定時250s,計數(shù)值N

11、為250,初值X=256-250=6,則TH0=TL0=06H。,匯編程序: ORG 0000H LJMP MAIN ORG 000BH ;中斷處理程序 CPL P1.0 RETI ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB EA SETB ET0 SETB TR0 SJMP $ END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; void main() TMOD=0 x02; TH0=0 x06;TL0=0 x06; EA=1;ET0=1; TR0=1; whil

12、e(1); void time0_int(void) interrupt 1 /中斷服務(wù)程序 P1_0=!P1_0; ,(1)采用中斷處理方式的程序:,(2)采用查詢方式處理的程序,匯編程序: ORG 0000H LJMP MAIN ORG 0100H ;主程序 MAIN:MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0 LOOP:JBC TF0,NEXT ;查詢計數(shù)溢出 SJMP LOOP NEXT:CPL P1.0 SJMP LOOP SJMP $ END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10;

13、 void main() char i; TMOD=0 x02; TH0=0 x06;TL0=0 x06; TR0=1; for(;) if (TF0) TF0=0;P1_0=! P1_0; /查詢計數(shù)溢出 ,如果定時時間大于65536s,這時用一個定時/計數(shù)器直接處理不能實現(xiàn),這時可用兩個定時/計數(shù)器共同處理或一個定時/計數(shù)器配合軟件計數(shù)方式處理。,【例5-3】設(shè)系統(tǒng)時鐘頻率為12MHZ,編程實現(xiàn)從P1.1輸出周期為1s的方波。 根據(jù)例5-2的處理過程,這時應(yīng)產(chǎn)生500ms的周期性的定時,定時到則對P1.1取反就可實現(xiàn)。由于定時時間較長,一個定時/計數(shù)器不能直接實現(xiàn),可用定時/計數(shù)器T0產(chǎn)生

14、周期性為10ms的定時,然后用一個寄存器R2對10ms計數(shù)50次或用定時/計數(shù)器T1對10ms計數(shù)50次實現(xiàn)。系統(tǒng)時鐘為12MHZ,定時/計數(shù)器T0定時10ms,計數(shù)值N為10000,只能選方式1,方式控制字為00000001B(01H),初值X: X=65536-10000=55536=1101100011110000B 則TH0=11011000B=D8H,TL0=11110000B=F0H。,(1)用寄存器R2作計數(shù)器軟件計數(shù),中斷處理方式。 匯編程序: ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 ORG 0100H MAIN:MOV TMOD,#0

15、1H MOV TH0,#0D8H MOV TL0,#0F0H MOV R2,#00H SETB EA SETB ET0 SETB TR0 SJMP $ INTT0:MOV TH0,#0D8H,MOV TL0,#0F0H INC R2 CJNE R2,#32H,NEXT CPL P1.1 MOV R2,#00H NEXT:RETI END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_1=P11; char i; void main() TMOD=0 x01; TH0=0 xD8;TL0=0 xf0; EA=1;ET0=1; i=0; TR0=1; while(1);

16、 void time0_int(void) interrupt 1 /中斷服務(wù)程序 TH0=0 xD8;TL0=0 xf0; i+; if (i= =50) P1_1=! P1_1;i=0; ,(2) 用定時/計數(shù)器T1計數(shù)實現(xiàn),定時/計數(shù)器T1工作于計數(shù)方式時,計數(shù)脈沖通過T1(P3.5)輸入,設(shè)定時/計數(shù)器T0定時時間到對T1(P3.5)取反一次,則T1(P3.5)每20ms產(chǎn)生一個計數(shù)脈沖,那么定時500ms只須計數(shù)25次,設(shè)定時/計數(shù)器T1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。因為定時/計數(shù)器T0工作于方式1,定時,則這時方式

17、控制字為01100001B(61H)。定時/計數(shù)器T0和T1都采用中斷方式工作。,匯編程序如下: ORG 0000H LJMP MAIN ORG 000BH MOV TH0,#0D8H MOV TL0,#0F0H CPL P3.5 RETI,ORG 001BH CPL P1.1 RETI,ORG 0100H MAIN:MOV TMOD,#61H MOV TH0,#0D8H MOV TL0,#0F0H MOV R2,#00H MOV TH1,#0E7H MOV TL1,#0E7H SETB EA SETB ET0 SETB ET1 SETB TR0 SETB TR1 SJMP $ END,C語言

18、程序如下: # include /包含特殊功能寄存器庫 sbit P1_1=P11; sbit P3_5=P35; void main(), TMOD=0 x61; TH0=0 xD8;TL0=0 xf0; TH1=0 xE7; TL1=0 xE7; EA=1; ET0=1;ET1=1; TR0=1;TR1=1; while(1); void time0_int(void) interrupt 1 /T0中斷服務(wù)程序 TH0=0 xD8;TL0=0 xf0; P3_5=!P3_5; void time1_int(void) interrupt 3 /T1中斷服務(wù)程序 P1_1=! P1_1;

19、,5.3 串行接口,5.3.1 通訊的基本概念,一并行通信和串行通信,計算機與外界的通信有兩種基本方式:并行通信和串行通信。,根據(jù)信息傳送的方向,串行通信可以分為單工、半雙工和全雙工3種。,二同步通信和異步通信,串行通信按信息的格式又可分為異步通信和同步通信兩種方式。,1串行異步通信方式,串行異步通信方式的特點是數(shù)據(jù)在線路上傳送時是以一個字符(字節(jié))為單位,未傳送時線路處于空閑狀態(tài),空閑線路約定為高電平“1”。傳送一個字符又稱為一幀信息,傳送時每一個字符前加一個低電平的起始位,然后是數(shù)據(jù)位,數(shù)據(jù)位可以是58位,低位在前,高位在后,數(shù)據(jù)位后可以帶一個奇偶校驗位,最后是停止位,停止位用高電平表示,

20、它可以是1位、1位半或2位。格式如圖 .,由于一次只傳送一個字符,因而一次傳送的位數(shù)比較少,對發(fā)送時鐘和接收時鐘的要求相對不高,線路簡單,但傳送速度較慢。,2串行同步通信方式,串行同步通信方式的特點是數(shù)據(jù)在線路上傳送時以字符塊為單位,一次傳送多個字符,傳送時須在前面加上一個或兩個同步字符,后面加上校驗字符,格式如圖:,同步方式時一次連續(xù)傳送多個字符,傳送的位數(shù)多,對發(fā)送時鐘和接收時鐘要求較高,往往用同一個時鐘源控制,控制線路復(fù)雜,傳送速度快。,三波特率,波特率是指串行通信中,單位時間傳送的二進制位數(shù),單位為bps。,在異步通信中,傳輸速度往往又可用每秒傳送多少個字節(jié)來表示(Bps)。它與波特率

21、的關(guān)系為: 波特率(bps)=一個字符的二進制位數(shù)字符/秒(Bps),例如:每秒傳送200個字符,每個字符1位起始位、8個數(shù)據(jù)位、1個校驗位和1個停止位。則波特率為2200bps。,5.3.2 MCS-51單片機串行口功能與結(jié)構(gòu),一功能,MCS-51單片機具有一個全雙工的串行異步通信接口,可以同時發(fā)送、接收數(shù)據(jù),發(fā)送、接收數(shù)據(jù)可通過查詢或中斷方式處理,使用十分靈活,它有四種工作方式,分別是方式0、方式1、方式2和方式3。其中: 方式0,稱為同步移位寄存器方式,一般用于外接移位寄存器芯片擴展I/O接口。 方式1,8位的異步通信方式,通常用于雙機通信。 方式2和方式3,9位的異步通信方式,通常用于

22、多機通信。,二結(jié)構(gòu),MCS-51單片機串行口主要由發(fā)送數(shù)據(jù)寄存器、發(fā)送控制器、輸出控制門、接收數(shù)據(jù)寄存器、接收控制器、輸入移位寄存器等組成,從用戶使用的角度,它由三個特殊功能寄存器組成:發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器合起用一個特殊功能寄存器SBUF(串行口數(shù)據(jù)寄存器),串行口控制寄存器SCON和電源控制寄存器PCON。,三串行口控制寄存器SCON,其中: SM0、SM1:串行口工作方式選擇位。用于選擇四種工作方式,SM2:多機通信控制位。,REN:允許接收控制位。當(dāng)REN=1,則允許接收,當(dāng)REN=0,則禁止接收。,TB8:發(fā)送數(shù)據(jù)的第9位。,RB8:接收數(shù)據(jù)的第9位。,TI:發(fā)送中斷標(biāo)志位。

23、,RI:接收中斷標(biāo)志位。,四電源控制寄存器PCON,當(dāng)SMOD位為1,則串行口方式1、方式2、方式3的波特率加倍。,5.3.3 串行口的工作方式,一方式0,方式0通常用來外接移位寄存器,用作擴展I/O口。方式0工作時波特率固定為:fosc /12。工作時,串行數(shù)據(jù)通過RXD輸入和輸出,同步時鐘通過TXD輸出。發(fā)送和接收數(shù)據(jù)時低位在前,高位在后,長度為8位。,(1)發(fā)送過程,在TI=0時,當(dāng)CPU執(zhí)行一條向SBUF寫數(shù)據(jù)的指令時,如MOV SBUF,A,就啟動發(fā)送過程。經(jīng)過一個機器周期,寫入發(fā)送數(shù)據(jù)寄存器中的數(shù)據(jù)按低位在前,高位在后從RXD依次發(fā)送出去,同步時鐘從TXD送出。8位數(shù)據(jù)(一幀)發(fā)送

24、完畢后,由硬件使發(fā)送中斷標(biāo)志TI置位,向CPU申請中斷。,(2)接收過程,在RI=0的條件下,將REN(SCON.4)置“1”就啟動一次接收過程。串行數(shù)據(jù)通過RXD接收,同步移位脈沖通過TXD輸出。在移位脈沖的控制下,RXD上的串行數(shù)據(jù)依次移入移位寄存器。當(dāng)8位數(shù)據(jù)(一幀)全部移入移位寄存器后,接收控制器發(fā)出“裝載SBUF”信號,將8位數(shù)據(jù)并行送入接收數(shù)據(jù)緩沖器SBUF中,同時,由硬件使接收中斷標(biāo)志RI置位,向CPU申請中斷。,二方式1,方式1為8位異步通信方式,在方式1下,一幀信息為10位:1位起始位(0),8位數(shù)據(jù)位(低位在前)和1位停止位(1)。TXD發(fā)送數(shù)據(jù)端,RXD為接收數(shù)據(jù)端。波特

25、率可變,由定時/計數(shù)器T1的溢出率和電源控制寄存器PCON中的SMOD位決定。 即:波特率=2SMOD(T1的溢出率)/32。,(1)發(fā)送過程,在TI=0時,當(dāng)CPU執(zhí)行一條向SBUF寫數(shù)據(jù)的指令時,如MOV SBUF,A,就啟動了發(fā)送過程。數(shù)據(jù)由TXD引腳送出,發(fā)送時鐘由定時/計數(shù)器T1送來的溢出信號經(jīng)過16分頻或32分頻后得到,,在發(fā)送時鐘的作用下,先通過TXD端送出一個低電平的起始位,然后是8位數(shù)據(jù)(低位在前),其后是一個高電平的停止位,當(dāng)一幀數(shù)據(jù)發(fā)送完畢后,由硬件使發(fā)送中斷標(biāo)志TI置位,向CPU申請中斷,完成一次發(fā)送過程。,(2)接收過程,當(dāng)允許接收控制位REN被置1,接受器就開始工作

26、,由接收器以所選波特率的16倍速率對RXD引腳上的電平進行采樣。當(dāng)采樣到從“1”到“0”的負(fù)跳變時,啟動接收控制器開始接收數(shù)據(jù)。在接收移位脈沖的控制下依次把所接收的數(shù)據(jù)移入移位寄存器,當(dāng)8位數(shù)據(jù)及停止位全部移入后,根據(jù)以下狀態(tài),進行響應(yīng)操作。, 如果RI=0、SM2=0,接收控制器發(fā)出“裝載SBUF”信號,將輸入移位寄存器中的8位數(shù)據(jù)裝入接收數(shù)據(jù)寄存器SBUF,停止位裝入RB8,并置RI=1,向CPU申請中斷。 如果RI=0、SM2=1,那么只有停止位為“1”才發(fā)生上述操作。 RI=0、SM2=1且停止位為“0”,所接收的數(shù)據(jù)不裝入SBUF,數(shù)據(jù)將會丟失。 如果RI=1,則所接收的數(shù)據(jù)在任何情

27、況下都不裝入SBUF,即數(shù)據(jù)丟失。,三方式2和方式3,方式2和方式3時都為9位異步通信接口,接收和發(fā)送一幀信息長度為11位,即1個低電平的起始位,9位數(shù)據(jù)位,1個高電平的停止位。發(fā)送的第9位數(shù)據(jù)放于TB8中,接收的第9位數(shù)據(jù)放于RB8中。TXD為發(fā)送數(shù)據(jù)端,RXD為接收數(shù)據(jù)端。方式2和方式3的區(qū)別在于波特率不一樣,其中方式2的波特率只有兩種:fosc/32或fosc/64,方式3的波特率與方式1的波特率相同,由定時/計數(shù)器T1的溢出率和電源控制寄存器PCON中的SMOD位決定,即: 波特率=2SMOD(T1的溢出率)/32。 在方式1時,也需要對定時/計數(shù)器T1進行初始化。,1發(fā)送過程,方式2

28、和方式3發(fā)送的數(shù)據(jù)為9位,其中發(fā)送的第9位在TB8中,在啟動發(fā)送之前,必須把要發(fā)送的第9位數(shù)據(jù)裝入SCON寄存器中的TB8中。準(zhǔn)備好TB8后,就可以通過向SBUF中寫入發(fā)送的字符數(shù)據(jù)來啟動發(fā)送過程,發(fā)送時前8位數(shù)據(jù)從發(fā)送數(shù)據(jù)寄存器中取得,發(fā)送的第9位從TB8中取得。一幀信息發(fā)送完畢,置TI為1。,2接收過程,方式2和方式3的接收過程與方式1類似,當(dāng)REN位置1時也啟動接收過程,所不同的是接收的第9位數(shù)據(jù)是發(fā)送過來的TB8位,而不是停止位,接收到后存放到SCON中的RB8中,對接收是否有判斷也是用接收的第9位,而不是用停止位。其余情況與方式1相同。,5.3.4 串行口的編程及應(yīng)用,一串行口的初始

29、化編程,1串行口控制寄存器SCON位的確定。,根據(jù)工作方式確定SM0、SM1位;對于方式2和方式3還要確定SM2位;如果是接收端,則置允許接收位REN為1;如果方式2和方式3發(fā)送數(shù)據(jù),則應(yīng)將發(fā)送數(shù)據(jù)的第9位寫入TB8中。,2設(shè)置波特率。,對于方式0,不需要對波特率進行設(shè)置。 對于方式2,設(shè)置波特率僅須對PCON中的SMOD位進行設(shè)置。,對于方式1和方式3,設(shè)置波特率不僅須對PCON中的SMOD位進行設(shè)置,還要對定時/計數(shù)器T1進行設(shè)置,這時定時/計數(shù)器T1一般工作于方式28位可重置方式,初值可由下面公式求得: 由于: 波特率=2SMOD(T1的溢出率)/32 則: T1的溢出率=波特率32/2

30、SMOD 而T1工作于方式2的溢出率又可由下式表示: T1的溢出率=fosc/(12(256-初值) 所以: T1的初值=256 - fosc2SMOD /(12波特率32),二串行口的應(yīng)用,通常用于三種情況:利用方式0擴展并行I/O口;利用方式1實現(xiàn)點對點的雙機通信;利用方式2或方式3實現(xiàn)多機通信。,1利用方式0擴展并行I/O口,MCS-51單片機的串行口在方式0時,當(dāng)外接一個串入并出的移位寄存器,就可以擴展并行輸出口,當(dāng)外接一個并入串出的移位寄存器時,就可以擴展并行輸入口。,【例5-4】用8051單片機的串行口外接串入并出的芯片CD4094擴展并行輸出口控制一組發(fā)光二極管,使發(fā)光二極管從左

31、至右延時輪流顯示。,CD4094是一塊8位的串入并出的芯片,帶有一個控制端STB,當(dāng)STB=0時,打開串行輸入控制門,在時鐘信號CLK的控制下,數(shù)據(jù)從串行輸入端DATA一個時鐘周期一位依次輸入;當(dāng)STB=1,打開并行輸出控制門,CD4094中的8位數(shù)據(jù)并行輸出。使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DATA,STB用P1.0控制,8位并行輸出端接8個發(fā)光二極管。如圖所示。,設(shè)串行口采用查詢方式,顯示的延時依靠調(diào)用延時子程序來實現(xiàn)。程序如下: 匯編程序: ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV SCON,#00H

32、 MOV A,#01H CLR P1.0 START:MOV SBUF,A LOOP:JNB TI,LOOP SETB P1.0 ACALL DELAY CLR TI,RL A CLR P1.0 SJMP START DELAY:MOV R7,#05H LOOP2:MOV R6,#0FFH LOOP1:DJNZ R6,LOOP1 DJNZ R7,LOOP2 RET END,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; void main() unsigned char i,j; SCON=0 x00; j=0 x01; for (; ;) P1_0=0

33、; SBUF=j; while (!TI) ; P1_0=1;TI=0; for (i=0;i=254;i+) ; j=j*2; if (j= =0 x00) j=0 x01; ,【例5-5】 用8051單片機的串行口外接并入串出的芯片CD4014擴展并行輸入口,輸入一組開關(guān)的信息。,CD4014是一塊8位的并入串出的芯片,帶有一個控制端P/S,當(dāng)P/S=1時,8位并行數(shù)據(jù)置入到內(nèi)部的寄存器;當(dāng)P/S=0時,在時鐘信號CLK的控制下,內(nèi)部寄存器的內(nèi)容按低位在前從QB串行輸出端依次輸出;使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制

34、,另外,用P1.1控制8并行數(shù)據(jù)的置入。如圖所示。,串行口方式0數(shù)據(jù)的接收,用SCON寄存器中的REN位來控制,采用查詢RI的方式來判斷數(shù)據(jù)是否輸入。程序如下: 匯編程序: ORG 0000H LJMP MAIN ORG 0100H MAIN:SETB P1.1 START:JB P1.1,START SETB P1.0 CLR P1.0 MOV SCON,#10H LOOP:JNB RI,LOOP CLR RI MOV A,SBUF ,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; sbit P1_1=P11; void main() unsigned

35、 char i; P1_1=1; while (P1_1= =1) ; P1_0=1; P1_0=0; SCON=0 x10; while (!RI) ; RI=0; i=SBUF; ,2利用方式1實現(xiàn)點對點的雙機通信,要實現(xiàn)甲與乙兩臺單片機點對點的雙機通信,線路只須將甲機的TXD與乙機的RXD相連,將甲機的RXD與乙機的TXD相連,地線與地線相連。,【例5-6】 用匯編語言編程通過串行實現(xiàn)將甲機的片內(nèi)RAM中30H3FH單元的內(nèi)容傳送到乙機的片內(nèi)RAM的40H4FH單元中。,線路連接如圖,甲、乙兩機都選擇方式1:8位異步通信方式,最高位用作奇偶校驗,波特率為1200bps,甲機發(fā)送,乙機接收

36、,因此甲機的串口控制字為40H,乙機的串口控制字為50H。,由于選擇的是方式1,波特率由定時/計數(shù)器T1的溢出率和電源控制寄存器PCON中的SMOD位決定。則須對定時/計數(shù)器T1初始化。 設(shè)SMOD=0,甲、乙兩機的振蕩頻率為12MHZ,由于波特率為1200。定時/計數(shù)器T1選擇為方式2,則初值為: 初值=256 - fosc2SMOD /(12波特率32) =256-12000000/(12120032)230=E6H 根據(jù)要求定時/計數(shù)器T1的方式控制字為20H。 甲機的發(fā)送程序: TSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV P

37、CON,#00H MOV SCON,#40H MOV R0,#30H MOV R7,#10H SETB TR1 LOOP:MOV A,R0,MOV C,P MOV A.7,C MOV SBUF,A WAIT:JNB TI,WAIT CLR TI INC R0 DJINZ R7,LOOP RET,乙機接收程序: RSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6H MOV PCON,#00H MOV R0,#40H MOV R7,#10H SETB TR11 LOOP:MOV SCON,#50H WAIT:JNB RI,WAIT MOV A,SBUF

38、MOV C,P JC ERROR ANL A,#7FH MOV R0,A INC R0 DJINZ R7,LOOP RET,3多機通信,通過MCS-51單片機串行口能夠?qū)崿F(xiàn)一臺主機與多臺從機進行通信,主機和從機之間能夠相互發(fā)送和接收信息。但從機與從機之間不能相互通信。,MCS-51單片機串行口的方式2和方式3是9位異步通信,發(fā)送信息時,發(fā)送數(shù)據(jù)的第9位由TB8取得,接收信息的第9位放于RB8中,而接收是否有效要受SM2位影響,當(dāng)SM2=0時,無論接收的RB8位是0還是1,接收都有效,RI都置1;當(dāng)SM2=1時,只有接收的RB8位等于1時,接收才有效,RI才置1。利用這個特性便可以實現(xiàn)多機通信。

39、 多機通信時,主機每一次都向從機傳送兩個字節(jié)信息,先傳送從機的地址信息,再傳送數(shù)據(jù)信息,處理時,地址信息的TB8位設(shè)為1,數(shù)據(jù)信息的TB8位設(shè)為0。,多機通信過程如下: (1)所有從機的SM2位開始都置為1,都能夠接收主機送來的地址。 (2)主機發(fā)送一幀地址信息,包含8位的從機地址,TB8置1,表示發(fā)送的為地址幀。,(3)由于所有從機的SM2位都為1,從機都能接收主機發(fā)送來的地址,從機接收到主機送來的地址后與本機的地址相比較,如接收的地址與本機的地址相同,則使SM0位為0,準(zhǔn)備接收主機送來的數(shù)據(jù),如果不同,則不作處理。 (4)主機發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)時TB8置為0,表示為數(shù)據(jù)幀。 (5)對于從機

40、,由于主機發(fā)送的第9位TB8為0,那么只有SM2位為0的從機可以接收主機送來的數(shù)據(jù)。這樣就實現(xiàn)主機從多臺從機選擇一臺從機進行通信了。,【例5-8】要求設(shè)計一個一臺主機,255臺從機的多機通信的系統(tǒng)。 1)硬件線路圖如下圖,2)軟件設(shè)計 通信協(xié)議 通信時,為了處理方便,通信雙方應(yīng)制定相應(yīng)的協(xié)議,在本例中主、從機串行口都設(shè)為方式3,波特率為1200bps,PCON中的SMOD位都取0,設(shè)fosc為12MHZ,根據(jù)例5.7定時/計數(shù)器T1的方式控制字為20H,初值為E6H,主機的SM2位設(shè)為0,從機的SM2開始設(shè)為1,從機地址從00HFEH。另外還制定如下幾條簡單的協(xié)議: 主機發(fā)送的控制命令: 00

41、H:要求從機接收數(shù)據(jù)。(TB8=0) 01H:要求從機發(fā)送數(shù)據(jù)。(TB8=0) FFH:命令所有從機的SM2位置1,準(zhǔn)備接收主機送來的地址。(TB8=1) 從機發(fā)給主機狀態(tài)字格式如圖,其中: ERR=1,表示從機接收到非法命令。 TRDY=1,表示從機發(fā)送準(zhǔn)備就緒。 RRDY=1,表示從機接收準(zhǔn)備就緒。, 主機的通信程序流程,從機采用中斷處理,主程序中對串口初始化,中斷系統(tǒng)初始化。中斷服務(wù)程序中實現(xiàn)信息的接收與發(fā)送,從機中斷服務(wù)程序流程見圖,主程序略。, 主機的通信程序設(shè)計 設(shè)發(fā)送、接收數(shù)據(jù)塊長度為16字節(jié)。這里僅編寫主機發(fā)16個字節(jié)到01號從機的程序和主機從02號從機接收16個字節(jié)的程序。(

42、略), 從機的通信程序設(shè)計 從機接收、發(fā)送數(shù)據(jù)塊長度為16字節(jié),所有的從機的程序相同,只是不同的從機的本機號SLAVE不一樣。 (略),5.4 中斷系統(tǒng),5.4.1 中斷的基本概念,1中斷源及中斷請求,2中斷優(yōu)先權(quán)控制,3中斷允許與中斷屏蔽,4中斷響應(yīng)與中斷返回,5.4.2 MCS-51單片機的中斷系統(tǒng),一中斷源,1外部中斷,和,外部引腳P3.2和P3.3輸入,有兩種觸發(fā)方式:電平觸發(fā)及跳變(邊沿)觸發(fā)。由特殊功能寄存器TCON來管理.,IT0(IT1):外部中斷0(或1)觸發(fā)方式控制位。IT0(或IT1)被設(shè)置為0,則選擇外部中斷為電平觸發(fā)方式;IT0(或IT1)被設(shè)置為1,則選擇外部中斷為

43、邊沿觸發(fā)方式。,IE0(IE1):外部中斷0(或1)的中斷請求標(biāo)志位。,在電平觸發(fā)方式時,CPU在每個機器周期的S5P2采樣P3.2(或P3.3),若P3.2(或P3.3)引腳為高電平,則IE0(IE1)清0,若P3.2(或P3.3)引腳為低電平,則IE0(IE1)置1,向CPU請求中斷;CPU響應(yīng)后能夠由硬件自動將IE0(或IE1)清零。在邊沿觸發(fā)方式時,若第一個機器周期采樣到P3.2(或P3.3)引腳為高電平,第二個機器周期采樣到P3.2(或P3.3)引腳為低電平時,由IT0(或IT1)置1,向CPU請求中斷。,對于電平觸發(fā)方式,只要P3.2(或P3.3)引腳為低電平,IE0(或IE1)就

44、置1,請求中斷,CPU響應(yīng)后不能夠由硬件自動將IE0(或IE1)清零。如果在中斷服務(wù)程序返回時,P3.2(或P3.3)引腳還為低電平,則又會中斷,這樣就會出一次請求,中斷多次的情況。為避免這種情況,只有在中斷服務(wù)程序返回前撤消P3.2(或P3.3)的中斷請求信號,即使P3.2(或P3.3)為高電平。通常通過下圖所示外電路來實現(xiàn) .,外部中斷請求信號通過D觸發(fā)器加到單片機P3.2(或P3.3)引腳上。當(dāng)外部中斷請求信號使D觸發(fā)器的CLK端發(fā)生正跳變時,由于D端接地,Q端輸出0,向單片機發(fā)出中斷請求。CPU響應(yīng)中斷后,利用一根口線P1.0作應(yīng)答線。,并在中斷服務(wù)程序中加以下兩條指令來撤除中斷請求。

45、 ANL P1.0,#0FEH ORL P1.0,#01H,2定時/計數(shù)器T0和T1中斷,當(dāng)定時/計數(shù)器T0(或T1)溢出時,由硬件置TF0(或TF1)為“1”,向CPU發(fā)送中斷請求,當(dāng)CPU響應(yīng)中斷后,將由硬件自動清除TF0(或TF1)。,3串行口中斷,MCS-51的串行口中斷源對應(yīng)兩個中斷標(biāo)志位:串行口發(fā)送中斷標(biāo)志位TI和串行口接收中斷標(biāo)志位RI。無論哪個標(biāo)志位置“1”,都請求串行口中斷,到底是發(fā)送中斷TI還是接收中斷RI,只有在中斷服務(wù)程序中通過指令查詢來判斷。串行口中斷響應(yīng)后,不能由硬件自動清“0”,必須由軟件對TI或RI清“0”。,二中斷允許控制,MCS-51單片機中沒有專門的開中斷

46、和關(guān)中斷指令,對各個中斷源的允許和屏蔽是由內(nèi)部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節(jié)地址為A8H,可以進行位尋址.,EA:中斷允許總控位。EA=0,屏蔽所有的中斷請求;EA=1,開放中斷。,ET2:定時器/計數(shù)器T2的溢出中斷允許位,ES:串行口中斷允許位。,ET1:定時器/計數(shù)器T1的溢出中斷允許位。,EX1:外部中斷 INT1的中斷允許位。,ET0:定時器/計數(shù)器T0的溢出中斷允許位。,EX0:外部中斷 INT0的中斷允許位。,三優(yōu)先權(quán)控制,每個中斷源有兩級控制:高優(yōu)先級和低優(yōu)先級。通過由內(nèi)部的中斷優(yōu)先級寄存器IP來設(shè)置.中斷優(yōu)先級寄存器IP的字節(jié)地址為B8H,可以進

47、行位尋址.,PT2:定時器/計數(shù)器T2的中斷優(yōu)先級控制位,只用于52子系列。 PS:串行口的中斷優(yōu)先級控制位。 PT1:定時器/計數(shù)器T1的中斷優(yōu)先級控制位。,PX1:外部中斷INT1的中斷優(yōu)先級控制位。,PT0:定時器/計數(shù)器T0的中斷優(yōu)先級控制位。,PX0:外部中斷INT0的中斷優(yōu)先級控制位。,如果某位被置“1”,則對應(yīng)的中斷源被設(shè)為高優(yōu)先級;如果某位被清“0”,則對應(yīng)的中斷源被設(shè)為低優(yōu)先級。對于同級中斷源,系統(tǒng)有默認(rèn)的優(yōu)先權(quán)順序,,外部中斷0 定時/計數(shù)器T0中斷 外部中斷1 定時/計數(shù)器T1中斷 串行口中斷 定時/計數(shù)器T2中斷,通過中斷優(yōu)先級寄存器IP改變中斷源的優(yōu)先級順序可以實現(xiàn)兩

48、個方面的功能:改變系統(tǒng)中斷源的優(yōu)先權(quán)順序和實現(xiàn)二級中斷嵌套。,對于中斷優(yōu)先權(quán)和中斷嵌套,MCS-51單片機有以下三條規(guī)定。 (1)正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷,一直到該中斷服務(wù)程序結(jié)束,返回了主程序且執(zhí)行了主程序中的一條指令后,CPU才響應(yīng)新的中斷請求。 (2)正在進行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)兩級中斷嵌套。,(3)CPU同時接收到幾個中斷請求時,首先響應(yīng)優(yōu)先級最高的中斷請求。,四、MCS-51中斷系統(tǒng)的邏輯結(jié)構(gòu),五中斷響應(yīng),1中斷響應(yīng)的條件,(1) 無同級或高級中斷正在處理。 (2) 現(xiàn)行指令執(zhí)行到最后一個機器周期且已結(jié)束。 (3)

49、若現(xiàn)行指令為RETI或訪問IE、IP的指令時,執(zhí)行完該指令且緊隨其后的另一條指令也已執(zhí)行完畢。,2中斷響應(yīng)過程,(1) 根據(jù)中斷請求源的優(yōu)先級高低,對相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置“1”。 (2) 保護斷點,即把程序計數(shù)器PC的內(nèi)容壓入堆棧保存。 (3) 清內(nèi)部硬件可清除的中斷請求標(biāo)志位(IE0、IE1、TF0、TF1)。 (4) 把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。,各中斷服務(wù)程序的入口地址見表,3中斷響應(yīng)時間,所謂中斷響應(yīng)時間是指CPU檢測到中斷請求信號到轉(zhuǎn)入中斷服務(wù)程序入口所需要的機器周期。 MCS-51單片機響應(yīng)中斷的最短時間為3個機器周期。,5.4.4 MCS-51中斷系統(tǒng)的應(yīng)用,【例5-9】某工業(yè)監(jiān)控系統(tǒng),具有溫度、壓力、PH值等多路監(jiān)控功能,中斷源的連接如圖5.26所示。對于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論