




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第6章,MCS-51單片機內部資源及編程,主要內容: MCS-51單片機內部各功能模塊(并口、定時器/計數(shù)器、中斷系統(tǒng)、串口)的具體結構、組成原理、工作方式的設置及典型應用,為后續(xù)學習單片機應用系統(tǒng)設計、充分利用單片機內部資源解決工程實際問題奠定基礎。 重點:各部件工作方式的設置及靈活應用。 難點:中斷系統(tǒng)和定時器/計數(shù)器的應用。,本章將學習: 6.1 并行輸入/輸出接口 6.2 定時器/計數(shù)器接口 6.3 串行接口 6.4 中斷系統(tǒng),6.1 并行輸入/輸出接口,6.1.1 MCS-51內部并行I/O口 8051有4個8位并行I/O口,分別命名為P0, P1, P2和P3口。 P0P3端口具有
2、雙向I/O功能,各有一個8位數(shù)據輸出鎖存器(與端口P0P3同名)、一個8位數(shù)據輸出驅動器和一個8位數(shù)據輸入緩沖器,此外還有第二功能。,在訪問外部存儲器時,P0口作地址/數(shù)據總線復用口,是一個真正的雙向口,先輸出外部存儲器的低8位地址,同時輸出地址鎖存信號ALE,故應在外部加鎖存器將此地址鎖存,然后,P0口才作為數(shù)據口使用。 作通用I/O口時,P0口只是一個準雙向口, 由于它是漏極開路輸出,內部沒有上拉電阻,因此作I/O口使用時需外部上拉電阻。,1P0口 P0口為雙向三態(tài)輸入/輸出口, P0口既可作為分時復用地址/數(shù)據口,又可作為通用I/O口,可驅動8個TTL輸入。,2P2口,P2口常用做外部存
3、儲器的高8位地址口。當不用做地址口時,P2口也可作為通用I/O口,這時它也是一個準雙向I/O口。不必外接上拉電阻就可以驅動任何MOS驅動電路,且只能驅動4個TTL輸入。,3P1口 P1口常用做通用I/O口,它也是一個標準的準雙向I/O口,不必外接上拉電阻就可以驅動任何MOS驅動電路,且只能驅動4個TTL輸入。P1口的位結構如右圖所示。,4P3口 P3口是一個準雙向I/O口,可用做通用I/O口。另外還具有第二功能。,6.1.2 MCS-51內部并行I/O口的應用,MCS-51的I/O端口有三種數(shù)據操作方式: (1)輸出數(shù)據方式:使用一條數(shù)據傳送指令。 MOV P0, A ANL P0, #dat
4、a ORL P0, A (2)讀端口數(shù)據方式: CPU讀入并非端口引腳線上的數(shù)據,而是端口鎖存器的內容。 MOV A, P1 MOV 20H, P1 MOV R0, P1 MOV R0, P1,(3)讀端口引腳方式:讀端口引腳方式可以從端口引腳上讀入信息。在這種方式下,CPU首先必須使欲讀端口引腳所對應的鎖存器置1,使輸出場效應管截止,然后才能讀端口引腳。,例:讀P1.0引腳: SETB P1.0 MOV C, P1.0 讀P1引腳上的低4位信號: ORL P1, #0FH MOV A, P1 ANL A, #0FH,在I/O口直接用做輸入/輸出時,CPU既可以把它們看做數(shù)據口,也可以看做狀態(tài)
5、口,這是由用戶決定的。,1I/O口直接用于輸入/輸出,【例6-1】MCS-51單片機的P1口接4個發(fā)光二極管,高4位接4個開關,電路如圖,編程實現(xiàn)用發(fā)光二極管亮和暗反映開關的閉合狀態(tài)。,Proteus仿真,解:匯編程序: org 0 sjmp main org 30h main:mov p1,#0ffh;P1口輸入,燈滅 mov a,p1 anl a,#0f0h;低4位清零 swap a mov p1,a lcall del;延時100ms sjmp main del:mov r7,#200;延時子程序 del1:mov r6,#250 del2:djnz r6,del2 djnz r7,de
6、l1 ret end,C程序: #include void main() for(;) P1=0 xFF; /*P1口輸入,燈滅*/ P1=P14; /*高四位狀態(tài)送低四位*/ delay(100); /*延時100ms*/ void delay (unsigned int x) /*延時函數(shù)*/ unsigned char j; while(x-) for(j=0;j125;j+; ,【例】要求將兩個BCD撥碼開關的數(shù)字和,在LED數(shù)碼管上顯示出來。(用CD4511驅動LED) 解:CD4511是BCD鎖存段碼譯碼共陰LED驅動集成電路,其引腳如右圖所示,各引腳功能如下: A, B, C,
7、D:BCD碼輸入腳(A為最低位,D為最高位); QaQg:段碼輸出腳(共陰),高電平有效, 最大可輸出25mA電流; BI:熄滅,接低電平則QaQg全部輸出低電平; LT:點亮測試,接低電平則QaQg全部輸出高電平; LE:鎖存允許,接高電平鎖存,則輸出不會隨BCD碼 輸入改變。,硬件電路設計:BCD撥碼開關為4位,兩個BCD撥碼開關分別接至P3口的高四位和低四位,由P1口的高四位和低四位通過兩片CD4511分別擴展兩位LED。,十位,個位,ORG 0100H LOOP:MOV P3, #0FFH ; 讀引腳先對其寫1 MOV A, P3; 讀引腳 CPL A ; 取反,取真正的鍵值 MOV
8、20H, A; A中的數(shù)據送20H單元保存 SWAP A ; A中的內容半字節(jié)交換 ANL A, #0FH ; A中得到原高4位的反碼 ANL 20H, #0FH ; 20H單元中得到原低4位的反碼 ADD A, 20H ; A中為原高低4位反碼之和 DA A ; BCD碼調整 MOV P1, A; 輸出到P1口 SJMP LOOP END,Proteus仿真(bcd),軟件設計思想:讀P3口引腳,得到輸入數(shù)據,將數(shù)據分成2個4位BCD碼,求BCD碼和,調整后輸出到P1口,通過CD4511驅動LED顯示。程序如下:,C51編程: #include void main( ) unsigned c
9、har sum; for(;) P3=0 xFF; sum=P3 ,2I/O口擴展,輸入緩沖:為了提高數(shù)據傳輸速率,MCS-51單片機常常需要使I/O口通過外部鎖存器和輸入設備相連。如下圖所示為8051通過74LS373與輸入設備連接的接口圖。通過中斷方式讀取數(shù)據,8051響應該中斷請求后在中斷服務程序中通過下面的指令讀取輸入數(shù)據: MOV DPTR, #07FFFH ; DPTR指向74LS373端口,地址為7FFFH MOVX A, DPTR ; 讀入數(shù)據到A中,輸出鎖存:每個I/O端口帶有8位鎖存器,只有擴展I/O端口時才需要采用外部鎖存器來鎖存數(shù)據。,6.2 定時器/計數(shù)器,計數(shù):計數(shù)
10、是指對外部事件的個數(shù)進行計量。其實質就是對外部輸入脈沖的個數(shù)進行計量。 定時:8051單片機中的定時器和計數(shù)器是一個部件,只不過計數(shù)器記錄的是外界發(fā)生的事件,而定時器則是由單片機內部提供一個非常穩(wěn)定的計數(shù)源進行定時的。這個計數(shù)源是由單片機的晶振經過12分頻后獲得的一個脈沖源。所以定時器計數(shù)脈沖的時間間隔與晶振有關。,定時的實現(xiàn)方法 軟件定時:利用執(zhí)行一個循環(huán)程序進行時間延遲。其特點是定時時間精確,不需外加硬件電路,但占用CPU時間。因此軟件定時的時間不宜過長。 硬件定時:利用硬件電路實現(xiàn)定時。其特點是不占用CPU時間,通過改變電路元器件參數(shù)來調節(jié)定時,但使用不夠靈活方便。對于時間較長的定時,常
11、用硬件電路來實現(xiàn)。 可編程定時器:通過專用的定時器/計數(shù)器芯片實現(xiàn)。其特點是通過對系統(tǒng)時鐘脈沖進行計數(shù)實現(xiàn)定時,定時時間可通過程序設定的方法改變,使用靈活方便。也可實現(xiàn)對外部脈沖的計數(shù)功能。 8051單片機內部集成了2個16位可編程加1定時器/計數(shù)器。,1MCS-51系列中51子系列有2個16位的可編程定時/計數(shù)器T0和T1,52子系列有3個,還有一個定時/計數(shù)器T2。 2T0和T1均有定時器和計數(shù)器2種工作模式。每個定時/計數(shù)器既可以對系統(tǒng)時鐘計數(shù)實現(xiàn)定時,也可以對外部信號計數(shù)實現(xiàn)計數(shù)功能,通過編程設定來實現(xiàn)。 3每個定時/計數(shù)器都有多種工作方式,其中T0有四種工作方式;T1有三種工作方式,
12、T2有三種工作方式。 4它們均是二進制加法計數(shù)器,當計數(shù)器計滿回零時能自動產生溢出中斷請求,使相應的溢出中斷標志置位,表示定時時間已到或計數(shù)已終止,溢出可通過查詢或中斷方式處理。適用于定時控制、延時、外部計數(shù)和檢測等。 計數(shù)器:對引腳T0(P3.4)和T1(P3.5)輸入的外部脈沖信號計數(shù),當輸入脈沖信號從1到0的負跳變時,計數(shù)器就自動加1。計數(shù)的最高頻率一般為振蕩頻率的1/24。 定時器:對系統(tǒng)晶振振蕩脈沖的12分頻輸出進行計數(shù)。,6.2.1 定時/計數(shù)器的主要特性,定時器/計數(shù)器的結構 組成:16位加法計數(shù)器、定時器工作方式控制寄存器TMOD和定時器控制寄存器TCON。 T0: TL0(低
13、8位)和TH0(高8位) T1: TL1(低8位)和TH1(高8位),6.2.2 定時/計數(shù)器T0、T1的結構和工作原理,注意: 1)由于它是加法計數(shù)器,每來一個計數(shù)脈沖,加法器中的內容加1個單位,當由全1加到全0時計滿溢出,因而,如果要計N個單位,則首先應向計數(shù)器置初值為X,且有: 初值X=最大計數(shù)值(滿值)M計數(shù)值N 2)當定時/計數(shù)器工作于計數(shù)方式時,對芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖計數(shù),計數(shù)過程如下:在每一個機器周期的S5P2時刻對T0(P3.4)或T1(P3.5)上信號采樣一次,如果上一個機器周期采樣到高電平,下一個機器周期采樣到低電平,則計數(shù)器在下一個機器周
14、期的S3P2時刻加1計數(shù)一次。因而需要兩個機器周期才能識別一個計數(shù)脈沖,所以外部計數(shù)脈沖的頻率應小于振蕩頻率的1/24。,6.2.3 定時/計數(shù)器的方式和控制寄存器,1. 工作方式寄存器TMOD(89H),定時器/計數(shù)器T0方式控制邏輯結構圖,2. 控制寄存器TCON (88H),TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:T0/T1計數(shù)溢出標志位。硬件自動復位。 =1 :計數(shù)溢出; =0 :計數(shù)未滿。 TR0/TR1:T0/T1啟??刂莆?。 =1 :啟動計數(shù); =0: 停止計數(shù)。 IE0/IE1和IT0/IT1:用于管理外部中斷(后面將會介紹)。,6.2.
15、4 定時/計數(shù)器的工作方式,1工作方式0( M1M0=00 ,13位加1定時器/計數(shù)器) 由TH0的全部8位和TL0的低5位( TL0的高3位未用)構成13位加1計數(shù)器。,定時/計數(shù)器T1工作方式0 等效框圖(T0類同),2工作方式1 ( M1M0=01 ,16位加1定時器/計數(shù)器),定時/計數(shù)器T1工作方式1(T0類同),3工作方式2( M1M0=10,自動重裝計數(shù)初值的8位加1定時器/計數(shù)器) 16位定時器/計數(shù)器被拆成兩個8位寄存器TH0和TL0,初始化時必須裝入相同的定時器/計數(shù)器初值。以TL0作計數(shù)器,而TH0作為預置寄存器。當計數(shù)滿溢出時,TF0置“1”,同時TH0將計數(shù)初值自動裝
16、入TL0。這種工作方式很適合于那些重復計數(shù)的應用場合(如串行數(shù)據通信的波特率發(fā)生器)。,定時/計數(shù)器T1工作方式2 (T0類同),4工作方式3( M1M0=11 ) T0工作于方式3時分為2個獨立的8位計數(shù)器: TL0:8位定時器/計數(shù)器,使用T0原有控制資源TR0和TF0,其功能和操作與方式0或方式1完全相同。 TH0:只能作為8位定時器,借用T1的控制位TR1和TF1,只能對片內機器周期脈沖計數(shù)。,T1在方式3下停止計數(shù) 當T0工作于方式3時,T1只能按不需要中斷的方式2工作(自動重裝初值的8位加1計數(shù)器),一般用作串口可變波特率發(fā)生器。,TL0做8位加1定時器/計數(shù)器,6.2.5 定時/
17、計數(shù)器的初始化編程及應用,1. 定時/計數(shù)器的編程 在使用定時器/計數(shù)器之前必須先通過程序對定時/計數(shù)器的工作方式及工作過程進行設定。 定時器/計數(shù)器初始化的步驟如下:,寫TMOD,設定工作方式,計數(shù)初值送TH、TL,寫IP、IE,設定中斷優(yōu)先級,開中斷,寫TCON ,啟動計數(shù),計數(shù)器初值的計算,方法:用最大計數(shù)量減去需要的計數(shù)次數(shù)。即: TC=MC 其中:TC計數(shù)器需要預置的初值; M計數(shù)器的模值(最大計數(shù)值); 方式0時,M=213;方式1時,M=216;方式2, 3時,M=28; C計數(shù)器計滿回0所需的計數(shù)值,即設計任務要求的計數(shù)值。 例如:流水線上一個包裝是12盒,要求每到12盒就產生
18、一個動作,用單片機的工作方式0來控制,則應當預置的初值為:,TC = M C = 213 12=8180=1FF4H,思考:TH、TL分別送什么?,定時器初值的計算,定時時間的計算公式為: T=(MTC)T0 (或TC=MT/T0 ) 其中:T定時器的定時時間,即設計任務要求的定時時間; T0計數(shù)器計數(shù)脈沖的周期,即單片機系統(tǒng)主頻周期的12倍; M計數(shù)器的模值; TC定時器需要預置的初值。,若設初值TC=0,則定時器定時時間為最大。若設單片機系統(tǒng)主頻為12MHz,則各種工作方式定時器的最大定時時間為: 工作方式0: Tmax=2131s=8.192ms 工作方式1: Tmax=2161s=65
19、.536ms 工作方式2和3:Tmax=281s=0.256ms,2. 定時/計數(shù)器的應用,【例6-2】 設系統(tǒng)時鐘頻率為12MHZ,用定時/計數(shù)器T0編程實現(xiàn)從P1.0輸出周期為500s的方波。,分析:從P1.0輸出周期為500s的方波,只須P1.0每250s取反一次則可。當系統(tǒng)時鐘為12MHZ,定時/計數(shù)器T0工作于方式2(自動重裝初值8位定時/計數(shù)器方式)時,最大的定時時間為256s,滿足250s的定時要求,方式控制字TMOD應設定為00000010B(02H)。 計算初值:TC=MT/T0 =28-250s/1s=06H,則TH0=TL0=06H。,匯編程序: ORG 0000H LJ
20、MP 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; while(1); void time0_int(void) interrupt 1 /中斷服務程序 P1_0=
21、!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; void main() char i; TMOD=0 x02; TH0=0 x06;TL0=0 x06;
22、TR0=1; for(;) if (TF0) TF0=0;P1_0=! P1_0; /查詢計數(shù)溢出 ,思考:若要輸出60ms的方波程序該如何修改?,若輸出60ms方波,則定時時間為30ms,工作方式選擇方式1(16位加1定時器/計數(shù)器方式)。 TC=M-T/ T計數(shù)=216-30ms/1s=65536-30000=8AD0H,匯編程序如下: ORG 0 AJMP START ORG 0BH LJMP TIMER0 ORG 30H START: MOV P1, #0FFH MOV TMOD, #01H MOV TH0, #8AH MOV TL0, #0D0H SETB ET0 SETB EA S
23、ETB TR0 LOOP: AJMP LOOP,TIMER0: PUSH ACC PUSH PSW CPL P1.0 MOV TH0, #8AH MOV TL0, #0D0H POP PSW POP ACC RETI END,重裝計數(shù)初值,啟動下一次定時,C51程序如下: #include sbit flash_led=P10; void main(void) TMOD=0 x01; TH0=0 x8A; TL0=0 xD0; IE=0 x82; TR0=1; while(1); ,void timer0(void) interrupt 1 TH0=0 x8A; TL0=0 xD0; flas
24、h_led= !flash_led; ,【例6-3】 設系統(tǒng)時鐘頻率為12MHZ,用定時/計數(shù)器T0編程實現(xiàn)從P1.0輸出周期為1s的方波。,分析:系統(tǒng)時鐘頻率為12MHz時,定時器/計數(shù)器的最長的定時是方式2(16位加1定時器/計數(shù)器)下的65.536ms,500ms的定時無法直接實現(xiàn),可以結合軟件計數(shù)器來進行設計。 如:用定時/可計數(shù)器T0產生周期性為10ms的定時,然后用一個寄存器R2對10ms計數(shù)50次或用定時/計數(shù)器T1對10ms計數(shù)50次實現(xiàn)。 初值計算: TC=MT/T0 =216-10ms/1s=65536-10000=D8F0H,(1)用寄存器R2作計數(shù)器軟件計數(shù),中斷處理方
25、式。 匯編程序: ORG 0000H LJMP MAIN ORG 000BH LJMP INTT0 ORG 0100H MAIN:MOV TMOD,#01H 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; vo
26、id main() TMOD=0 x01; TH0=0 xD8;TL0=0 xf0; EA=1;ET0=1; i=0; TR0=1; while(1); void time0_int(void) interrupt 1 /中斷服務程序 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ù)器T0定時時間到對T1(P3.5)取反一次,則T1(P3.5)每20ms產生一個計數(shù)脈沖,那么定時500ms只須計數(shù)25次,設定時/計數(shù)器T
27、1工作于方式2,初值X=256-25=231= 11100111B=E7H,TH1=TL1=E7H。因為定時/計數(shù)器T0工作于方式1,定時,則這時方式控制字為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,#0E
28、7H MOV TL1,#0E7H SETB EA SETB ET0 SETB ET1 SETB TR0 SETB TR1 SJMP $ END,C語言程序如下: # 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中斷服務程序 TH0=0 xD8;TL0=0
29、 xf0; P3_5=!P3_5; void time1_int(void) interrupt 3 /T1中斷服務程序 P1_1=! P1_1; ,【例】(計數(shù)器模式應用):設外部有一個計數(shù)源。編制程序,對外部計數(shù)源進行計數(shù)并顯示。,解:將外部計數(shù)源連到定時器/計數(shù)器1的外部引腳T1上,可用LED將計數(shù)的值顯示出來,我們用P1口連接的8個LED來顯示計到的數(shù)據。,proteus仿真 (counter),匯編程序: ORG 0000H AJMP START; 轉入主程序 ORG 0030H START: MOV SP, #60H; 設置堆棧指針 MOV TMOD, #60H; T1作計數(shù)器,工
30、作方式2;自動重裝初值的8位加1計數(shù)器 SETB TR1 ; 啟動T1開始運行 LOOP: MOV A, TL1 ; 讀T1的計數(shù)值送A CPL A MOV P1, A ; 輸出到P1口,驅動LED顯示 AJMP LOOP ; 轉回LOOP END,C51程序: #include void main(void) TMOD=0 x60; TR1=1; while(1) P1= TL1; ,解:P3.4(T0)作為外部中斷的輸入引腳,設定T0工作方式2(自動重裝初值的8位計數(shù)方式),同時計數(shù)初值設為0FFH,這樣,只要P3.4輸入一個負脈沖,計數(shù)器加1,產生溢出中斷請求。 初始化程序: MOV T
31、MOD,#62H MOV TH0,#0FFH MOV TL0,#0FFH MOV IE,#82H SETB TR0,【例】利用定時器T0擴展一個外部中斷。,6.3 串行接口,1. 并行通信和串行通信 通信:單片機與外界進行信息交換。 8051單片機的通信方式有兩種: 并行通信:數(shù)據的各位同時發(fā)送或接收。特點是傳送速度快、效率高,但成本高。適用于短距離傳送數(shù)據。計算機內部的數(shù)據傳送一般均采用并行方式。 串行通信:數(shù)據一位一位順序發(fā)送或接收。特點是傳送速度慢,但成本低。適用于較長距離傳送數(shù)據。計算機與外界的數(shù)據傳送一般均采用串行方式。,6.3.1 通信的基本概念,根據信息傳送的方向,串行通信有如下
32、3種制式: 單工方式(simplex):數(shù)據僅按一個固定方向傳送; 半雙工方式(half duplex) :數(shù)據可實現(xiàn)雙向傳送,但不能同時進行; 全雙工方式(full duplex) :允許雙方同時進行數(shù)據雙向傳送,2. 同步通信和異步通信 串行通信按數(shù)據傳送方式分為: 異步通信方式(asynchronous communication):以字符(或字節(jié))為傳送單位,用起始位和停止位標識每個字符的開始和結束字符,間隔不固定,只需字符傳送時同步。優(yōu)點是不需要傳送同步脈沖,可靠性高,所需設備簡單;缺點是字符幀中因包含有起始位和停止位而降低了有效數(shù)據的傳輸速率。 同步通信方式(synchronous
33、 communication):以一串字符為一個傳送單位,包括同步字符、數(shù)據塊和校驗字符CRC,字符間不加標識位,在一串字符開始用同步字符標識,優(yōu)點是數(shù)據傳輸速率較高,缺點是硬件要求高,通信雙方須嚴格同步。,3. 波特率 波特率:每秒鐘傳送信號的數(shù)量,單位為波特(Baud)。 比特率:每秒鐘傳送二進制數(shù)的信號數(shù)(即二進制數(shù)的位數(shù)),單位是bps(bit per second)或寫成b/s(位/秒)。 在單片機串行通信中,傳送的信號是二進制信號,波特率與比特率數(shù)值上相等。單位采用bps。 波特率(bps)=字符的位數(shù)字符/秒(Bps) 例如,異步串行通信的數(shù)據傳送的速率是120字符/秒,而每個字
34、符規(guī)定包含10位數(shù)字,則傳輸波特率為: 120字符/秒 10位/字符=1200位/秒= 1200bps,1. 功能 MCS-51內部有一個功能強大的可編程全雙工異步串行通信接口SIO(P3.0RxD、P3.1TxD),具有UART(Universal Asynchronous Receiver/Transmitter)的全部功能。 主要功能:既可作UART(通用異步接收/發(fā)送器)用,也可作同步移位寄存器使用,還可用于網絡通信,其幀格式可有8位、10位和11位,并能設置各種波特率。 有四種工作方式分別是方式0、方式1、方式2和方式3。,6.3.2 MCS-51單片機串行口功能與結構,2. 結構
35、MCS-51單片機串行口主要由發(fā)送SBUF、發(fā)送控制器、輸出控制門、接收SBUF、接收控制器、輸入移位寄存器等組成。,SBUF(發(fā)),SBUF(收),發(fā)送控制器 TI,接收控制器 RI,移位寄存器,T1 溢出率,1,A累加器,(門)移位寄存器,RxD (P3.0),TxD (P3.1),去CPU申請中斷,引腳,引腳,CPU內部,2,16,SMOD,“0”,“1”,1到0跳 變檢測,從用戶使用的角度,它由三個特殊功能寄存器組成:特殊功能寄存器SBUF(串行口數(shù)據寄存器),串行口控制寄存器SCON和電源控制寄存器PCON。,3. 串行口控制寄存器SCON ( 98H),工作方式選擇,多機通信 接收
36、 發(fā)送數(shù)據 接收數(shù) 發(fā)送中 接收中 控制位 控制 第9位 據第9位 斷標志 斷標志,4. 電源控制寄存器PCON(87H),SMOD - - - GF1 GF0 PD IDL,SMOD:串行口波特率倍增位 =1:串行口波特率加倍。 =0:串行口波特率不變,系統(tǒng)復位時默認為SMOD=0。,6.3.3 串行口的工作方式,1. 工作方式0( 8位移位寄存器I/O方式) 發(fā)送過程: 當TI=0,執(zhí)行指令MOV SBUF,A,即啟動發(fā)送。 SBUF中的串行數(shù)據由RxD逐位移出(低位在先,高位在后); TxD輸出移位時鐘,頻率=fosc/12; 每送出8位數(shù)據TI自動置1;需要用軟件清零 TI。,接收過程
37、: 當REN=1,且RI=0,SBUF中的串行數(shù)據由RxD逐位移入(低位在先,高位在后); TxD輸出移位時鐘,頻率=fosc/12; 每接收8位數(shù)據RI自動置1,這時可執(zhí)行MOV A,SBUF讀取數(shù)據,需要用軟件清零RI。,接收條件:RI=0,且 REN=1 (允許接收數(shù)據)。 發(fā)送條件:TI=0。,注意:串行口在方式0下的工作并非是一種同步通信方式,經常配合“串入并出”“并入串出”移位寄存器一起使用,以達到擴展一個并行口的目的。 擴展電路如下圖所示。,2. 方式1 (波特率可變的10位異步通信方式 ) 發(fā)送/接收數(shù)據的格式:一幀信息包括1個起始位0,8個數(shù)據位(低位在前)和1個停止位1。
38、發(fā)送過程:當TI=0,執(zhí)行MOV SBUF,A,啟動發(fā)送,發(fā)送電路自動給8位待發(fā)送數(shù)據添加一個起始位和一個停止位,數(shù)據從TxD引腳送出,每送出8位數(shù)據 TI自動置1;需要用軟件清零 TI。 接收過程:當REN=0,接收電路自動采樣RxD上信號,檢測到1到0的跳變時,開始接收數(shù)據,接收端自動去掉一個起始位和一個停止位,當RI=0時接收到的數(shù)據才裝入SBUF 。每接收8位數(shù)據 RI自動置1;這時可執(zhí)行指令MOV A,SBUF,需要用軟件清零 RI 。 發(fā)送/接收數(shù)據頻率波特率= T1溢出率 2SMOD/32 發(fā)送/接收條件:同方式0。,3. 方式2(固定波特率的11位異步接收/發(fā)送方式)和方式3(
39、可變波特率的11位異步接收/發(fā)送方式),發(fā)送/接收過程:類似于方式1,所不同的是它比方式1增加了一位“第9位”數(shù)據(TB8/RB8),通常用于奇偶校驗或多機通信。 發(fā)送/接收條件:同方式0。 通信波特率:方式3和方式2唯一的區(qū)別是波特率機制不同, 方式2的波特率 = fosc 2SMOD/64 方式3的波特率=T1的溢出率 2SMOD/32,奇偶校驗:奇偶校驗是檢驗串行通信雙方傳輸?shù)臄?shù)據正確與否的一個措施,并不能保證通信數(shù)據的傳輸一定正確。即如果奇偶校驗發(fā)生錯誤,表明數(shù)據傳輸一定出錯了;如果奇偶校驗沒有出錯,絕不等于數(shù)據傳輸完全正確。 奇校驗規(guī)定:8位有效數(shù)據連同1位附加位中,二進制“1”的個
40、數(shù)為奇數(shù)。 偶校驗規(guī)定:8位有效數(shù)據連同1位附加位中,二進制“1”的個數(shù)為偶數(shù)。 若約定采用奇校驗,則 發(fā)送:若發(fā)送的8位有效數(shù)據中“1”的個數(shù)為偶數(shù),則要人為在附加位中添加一個“1”一起發(fā)送;若發(fā)送的8位有效數(shù)據中“1”的個數(shù)為奇數(shù),則要人為在附加位中添加一個“0”一起發(fā)送。 接收:若接收到的9位數(shù)據中“1”的個數(shù)為奇數(shù),則表明接收正確,取出8位有效數(shù)據即可;若接收到的9位數(shù)據中“1”的個數(shù)為偶數(shù),則表明接收出錯!應當進行出錯處理。采用偶校驗時,處理方法與奇校驗類似。,1. 初始化編程 寫SCON。根據工作方式確定SM0、SM1位;對于方式2和方式3還要確定SM2位;如果是接收端,則置允許接
41、收位REN為1;如果方式2和方式3發(fā)送數(shù)據,則應將發(fā)送數(shù)據的第9位寫入TB8中。 設置波特率。寫PCON,若波特率可變,則通過對T1編程設置波特率。 寫IP、IE。設置中斷優(yōu)先級,開中斷。,6.3.4 串行口的編程及應用,波特率的計算: 方式0:B=fosc/12。 方式2:波特率由PCON中的選擇位SMOD來決定,可由下式表示: B= fosc 2SMOD/64 方式1和方式3:波特率是可變的,由定時器T1的溢出率控制。波特率為: B=(2SMOD/32)定時器T1溢出率 T1溢出率=T1計數(shù)率/產生溢出所需的周期 = (fosc/12)/(2KTC) 其中:K定時器T1的位數(shù),定時器T1用
42、作波特率發(fā)生器時,通常工作在方式2, 所以T1的溢出所需的周期數(shù)= 28TC。 TC定時器T1的預置初值。 波特率B=(2SMOD /32)fosc/12(28-TC),定時器T1的初值:TC=256-2SMOD fosc/(384 B),下表列出了定時器T1工作于方式2的常用波特率及初值。,TC=256-2SMOD*fosc/(384*B),2. 串行口的應用,通常用于三種情況:利用方式0擴展并行I/O口;利用方式1實現(xiàn)點對點的雙機通信;利用方式2或方式3實現(xiàn)多機通信。,1)利用方式0擴展并行I/O口,【例5-4】用8051單片機的串行口外接串入并出的芯片CD4094擴展并行輸出口控制一組發(fā)
43、光二極管,使發(fā)光二極管從左至右延時輪流顯示。,Proteus仿真(3.8),CD4094是一塊8位的串入并出的芯片,帶有一個控制端STB,當STB=0時,打開串行輸入控制門,在時鐘信號CLK的控制下,數(shù)據從串行輸入端DATA一個時鐘周期一位依次輸入;當STB=1,打開并行輸出控制門,CD4094中的8位數(shù)據并行輸出。,查詢方式:通過查詢TI的狀態(tài),來決定是否發(fā)送下一幀數(shù)據。在串行接收時,通過對RI查詢來確定何時接收下一幀數(shù)據。程序如下: STB BIT P1.0 ORG 0100H START: MOV SCON, #00H; 置串行口工作方式0 MOV A, #01H ; 最低位燈先亮 CL
44、R STB ; 關閉并行輸出 OUT: MOV SBUF, A ; 開始串行輸出 WATI: JNB TI, WAIT; 輸出完否?未完,等待;完了,繼續(xù)執(zhí)行 CLR TI ; 完了,清TI標志,以備下次發(fā)送 SETB STB; 打開并行口輸出 ACALL DELAY; 延時一段時間 RL A ; 循環(huán)左移 CLR STB; 關閉并行輸出 SJMP OUT ; 循環(huán) DELAY: . ; 延時子程序 END,C51編程: #include /*包含特殊功能寄存器庫*/ #include sbit STB=P10; void main( ) unsigned char j=0 x01; /*最低
45、位燈先點亮*/ SCON=0 x00; /*串口工作方式0*/ for(;) STB=0; /*關并行輸出,開串行輸入*/ SBUF=j;/*串口輸出*/ while(!TI); /*等待串口輸出完成*/ TI=0;/*清發(fā)送標志*/ j=_crol_(j,1); /*循環(huán)左移1位*/ STB=1; /*開并行輸出,關串行輸入*/ delay( ); void delay( );/*延時函數(shù)*/ ,中斷方式: ORG 0 SJMP MAIN ORG 0023H;串口中斷入口地址 AJMP SBY ORG 30H MAIN: MOV SCON, #00H;方式0 MOV IE, #90H CLR
46、 P1.0;禁止CD4094并行輸出 MOV A, #01H;第一盞燈亮 MOV SBUF, A;串口輸出 LOOP: SJMP LOOP;等待串口輸出完 SBY:SETB P1.0;點亮發(fā)光二極管 ACALL DELAY;點亮一段時間 CLR TI;清發(fā)送中斷標志 RL A;下一盞燈 CLR P1.0;關并行輸出,燈滅,開串行輸入 NEXT: MOV SBUF, A;串行口輸出 RETI;中斷返回 DELAY: ;延時子程序 END,C51編程: #include /*包含特殊功能寄存器庫*/ #include sbit STB=P10; unsigned char j=0 x01; /*最
47、低位燈先點亮*/ void main( ) SCON=0 x00; /*串口工作方式0*/ IE=0 x90; /*開串口中斷*/ STB=0; /*關并行輸出*/ SBUF=j;/*串口輸出*/ while(1); void sioint(void) interrupt 4/*串口中斷函數(shù)*/ j=_crol_(j,1); /*循環(huán)左移1位*/ STB=1; /*開并行輸出*/ TI=0; /*清發(fā)送標志*/ delay( ); STB=0; SBUF=j; void delay( );/*延時函數(shù)*/ ,CD4014是一塊8位的并入串出的芯片,帶有一個控制端P/S,當P/S=1時,8位并行
48、數(shù)據置入到內部的寄存器;當P/S=0時,在時鐘信號CLK的控制下,內部寄存器的內容按低位在前從QB串行輸出端依次輸出;使用時,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行數(shù)據的置入。,【例6-5】 用8051單片機的串行口外接并入串出的芯片CD4014擴展并行輸入口,輸入一組開關的信息。,串行口方式0數(shù)據的接收,用SCON寄存器中的REN位來控制,采用查詢RI的方式來判斷數(shù)據是否輸入。程序如下: 匯編程序: ORG 0000H LJMP MAIN ORG 0100H MAIN:SETB P1.1 START:
49、JB P1.1,START SETB P1.0 MOV SCON,#10H CLR P1.0 LOOP:JNB RI,LOOP CLR RI MOV A,SBUF ,C語言程序: # include /包含特殊功能寄存器庫 sbit P1_0=P10; sbit P1_1=P11; void main() unsigned 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)點對點的雙機通信,【例6-6】 用匯編語言編程通過串行實現(xiàn)將甲機的片內R
50、AM中30H3FH單元的內容傳送到乙機的片內RAM的40H4FH單元中。,甲、乙兩機都選擇方式1:8位異步通信方式,波特率為1200bps,甲機發(fā)送,乙機接收,因此甲機的串口控制字為40H,乙機的串口控制字為50H。,設SMOD=0,甲、乙兩機的振蕩頻率為12MHZ,由于波特率為1200。定時/計數(shù)器T1選擇為方式2,則初值為: TC=256-2SMOD*fosc/(384*B)=256-12000000/(3841200)230=E6H,甲機發(fā)送子程序: TSTART:MOV TMOD, #20H;設定定時器T1工作方式2 MOV TL1, #0E6H;送初值 MOV TH1, #0E6H
51、MOV PCON, #00H;SMOD=0 MOV SCON, #40H;串口工作方式2,10位異步收發(fā) MOV R0, #30H;R0指向發(fā)送緩沖區(qū)首地址 MOV R7, #10H;共16個待發(fā)送數(shù)據 SETB TR1 LOOP:MOV A, R0;待發(fā)送數(shù)據送A MOV SBUF, A;啟動發(fā)送 WAIT:JNB TI, WAIT;等待發(fā)送完成 CLR TI;清發(fā)送中斷標志 INC R0;R0指向下一個待發(fā)送數(shù)據 DJINZ R7, LOOP;16個數(shù)據發(fā)送完?未完則轉 RET,乙機接收子程序: RSTART:MOV TMOD,#20H MOV TL1,#0E6H MOV TH1,#0E6
52、H MOV PCON,#00H MOV R0,#40H MOV R7,#10H SETB TR1 LOOP:MOV SCON,#50H WAIT:JNB RI,WAIT MOV A,SBUF MOV R0,A INC R0 DJINZ R7,LOOP RET,3)多機通信,(1)硬件連接 單片機構成的多機系統(tǒng)常使串行口工作在方式2和方式3,采用總線型主從式結構(一個是主機,其余的是從機,從機要服從主機的調度、支配)。有時還要對信號進行光電隔離、電平轉換等。在實際的多機應用系統(tǒng)中,常采用RS-485串行標準總線進行數(shù)據傳輸。簡單的硬件連接如下圖所示(圖中沒有畫出RS-485接口)。,通信原理:,
53、將通信雙方分為主機(其SM2=0)和從機(其SM2=1 ); 將通信數(shù)據分為地址幀(以TB8/RB8=1標識)和數(shù)據幀(以TB8/RB8=0標識)。,方式2/3,接收,正常接收數(shù)據,若接收數(shù)據的RB8=1,若接收數(shù)據的RB8=0,接收數(shù)據,丟棄,(2)通信協(xié)議 主機置SM2位0,所有從機的SM2位置1,處于接收地址幀狀態(tài)。 主機先發(fā)送一地址幀,其中,8位是地址,第9位TB8為1表示該幀為地址幀,否則為數(shù)據幀。 所有從機SM2位置1,只有當接收的數(shù)據RB8=1(地址幀)時才接收,否則丟棄,接收地址幀后,都將接收的地址與本機的地址比較,對于地址相符的從機,使自己的SM2位置0(以接收主機隨后發(fā)來的
54、數(shù)據幀),并把本站地址發(fā)回主機作為應答;對于地址不符的從機,仍保持SM2=1,對主機隨后發(fā)來的數(shù)據幀不予理睬。 完成主機和被尋址從機之間的數(shù)據通信,被尋址從機在通信完成后重新使SM2=1監(jiān)聽地址狀態(tài),并退出中斷服務程序,等待下次通信。,(3)應用程序設計 設主機發(fā)送的地址聯(lián)絡信號為:00H,01H,02H,(即從機設備地址),地址FFH為命令各從機復位,即恢復SM2=1。 主機命令編碼為:01H,主機命令從機接收數(shù)據;02H,主機命令從機發(fā)送數(shù)據。其他都按02H對待。 程序分為主機程序和從機程序。約定一次傳遞數(shù)據為16個字節(jié)。 程序清單略。,6.4 中斷系統(tǒng),所謂“中斷”,是指CPU執(zhí)行正常程
55、序時,系統(tǒng)中出現(xiàn)特殊請求,CPU暫時中止當前的程序,轉去處理更緊急的事件(執(zhí)行中斷服務程序),處理完畢(中斷服務完成)后,CPU自動返回原程序的過程。,6.4.1 中斷系統(tǒng)的基本概念,中斷處理過程: 某人看書執(zhí)行某程序(日常事務) 客人拜訪中斷信號INT=0(中斷請求) 暫??磿鴷和?zhí)行當前程序(中斷響應) 書中作記號當前PC入棧(保護斷點) 接待客人執(zhí)行I/O程序(中斷服務) 繼續(xù)看書返回原程序(中斷返回),中斷作用: 采用中斷技術可以提高CPU效率、解決速度矛盾、實現(xiàn)并行工作、分時操作、實時處理、故障處理、應付突發(fā)事件,可使多項任務共享一個資源(CPU)。 中斷與子程序的最主要區(qū)別: 子程
56、序是預先安排好的,中斷是隨機發(fā)生的。 中斷涉及的幾個環(huán)節(jié): 中斷源、中斷申請、中斷優(yōu)先權、中斷允許和屏蔽、中斷響應、保護現(xiàn)場、中斷服務、恢復現(xiàn)場、中斷返回。,1. 中斷源和中斷請求 中斷源是指引起中斷的設備或事件,或發(fā)出中斷請求的源頭。 2. 中斷優(yōu)先權與中斷嵌套 中斷優(yōu)先級(也稱為中斷優(yōu)先權):給每個中斷源指定中斷響應的優(yōu)先級別 當同時有多個中斷請求信號。 響應某中斷時CPU又收到其它中斷請求。,先響應優(yōu)先級別高的中斷請求。,高優(yōu)先級中斷請求信號可中斷低優(yōu)先級中斷服務, 稱為中斷嵌套。,3. 中斷允許與中斷屏蔽,4. 中斷響應與中斷返回,6.4.2 MCS-51的中斷系統(tǒng),MCS-51提供了
57、5個中斷源(52子系列提供6個),2級中斷優(yōu)先級控制,可實現(xiàn)2級中斷服務嵌套??赏ㄟ^程序設置中斷的允許或屏蔽,設置中斷的優(yōu)先級。 1MCS-51的中斷源 1)2個外部中斷源(中斷標志為IE0和IE1 ) 由 ( P3.2 )端口線引入,低電平或下降沿引起。 由 ( P3.3 )端口線引入,低電平或下降沿引起。,CPU識別中斷申請的依據:CPU在每個機器周期的S5P2期間,會自動查詢各個中斷申請標志位,若查到某標志位被置位,將啟動中斷機制。,TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0,TF0/TF1:定時器溢出中斷申請標志位。 TR0/TR1:定時器啟/停控制位。 =0:定時
58、器停止運行;=1:定時器啟動運行。,IE0/IE1:外部中斷申請標志位。 IT0/IT1:外部中斷請求的觸發(fā)方式控制位。 =0:在INT0/INT1端申請中斷的信號低電平有效; =1:在INT0/INT1端申請中斷的信號負跳變有效。,定時器控制寄存器TCON (88H)的低4位用于外部中斷控制,外部中斷請求的撤除,外部中斷請求由硬件自動撤除中斷申請。 當外部中斷為電平觸發(fā)方式時, / 引腳上的低電平須持續(xù)到中斷發(fā)生。若中斷返回前仍未及時撤除低電平,雖然CPU在響應中斷時能由硬件自動復位IE0或IE1,但引腳上的低電平仍會使已經復位的IE0或IE1再次置位,產生重復中斷的錯誤。,電平觸發(fā)型外部中斷請求的撤除必須由外部硬件使INT0(或INT1)上的低電平隨著其中斷被響應而變?yōu)楦唠娖健F渲袛嗾埱蟪烦碾娐啡缦聢D所示。,外來的低電平反相CP端產生上跳沿 D端的“0”輸出到Q端申請中斷,中斷響應后對P1.0送“0”,SD端置“0”令Q端變?yōu)椤?”SD端置“1”,以免下次中斷來時Q端不能變“0”,2)2個定時器中斷(中斷標志為TF0、TF1) T0:定時/計數(shù)器0中斷,由T0回零溢出引起。 T1:定時/計數(shù)器1中斷,由T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年CPMM考前應對技巧全解試題及答案
- HZHY-AI200-B載板技術規(guī)格說明書
- 2024年國際物流的政策環(huán)境分析試題及答案
- 植物的水分吸收機制試題及答案
- 企業(yè)疫情防控培訓課件
- 2024年采購管理師重要概念試題及答案
- 浙教版 2021-2022學年度八年級數(shù)學上冊模擬測試卷
- 傷寒防控課件
- 2025天津現(xiàn)代職業(yè)技術學院輔導員考試題庫
- 2025山東財經大學燕山學院輔導員考試題庫
- 國家義務教育質量監(jiān)測八年級美術樣卷
- 2025年廣東省廣州市海珠區(qū)官洲街雇員招聘5人歷年自考難、易點模擬試卷(共500題附帶答案詳解)
- 滑坡地質災害治理工程資源需求與保障措施
- 2020智能變電站調試規(guī)范
- 中央戲劇學院招聘考試真題2024
- 專題07力、運動和-5年(2020-2024)中考1年模擬物理真題分類匯編(天津專用)(帶答案解析)
- (一模)淄博市及濱州市2024-2025學年度高三模擬考試語文試卷(含答案)
- 2025年云南省中考語文試題解讀及復習備考指導(深度課件)
- 陜西省安康市2024-2025學年高三下學期第二次質量考試(二模)地理試題(含答案)
- 2025年寧波城市職業(yè)技術學院單招職業(yè)技能測試題庫新版
- 人工智能基礎 課件 10.3 制作數(shù)字人
評論
0/150
提交評論