文章目錄
- MCS-51功能單元
-
- 一、定時器&計數器
- 二、并行口&串行口
- 三、中斷系統
MCS-51功能單元
一、定時器&計數器
-
數量:兩個可程式設計的16位的定時器/計數器T0和T1;都是16位加法計數結構;分為高8位和低8位;TH0、TL0,TH1、TL1;
定時器/計數器T0、T1是80C51的中斷源之一,當資料寄存器溢出,則向CPU申請中斷。資料寄存器的複位狀态為0。為使計數值或定時值滿足自己的要求,需預先将資料寄存器指派,稱為初值設定,中斷中也要重新設定初值。
- 定時器和計數器本質:都是計數器,對下降沿進行計數,計數達到溢出後置為标志位或者進入中斷;
-
兩者的差別:
定時器是對内部的機械周期脈沖進行計數,每個脈沖都是一個機械周期;定時時間=機器周期*(2^L-初值) (L=13,16,8)
計數器則是通過外部IO口進行脈沖計數,一個脈沖加一個數;對應IO口:T0-P3.4,T1-P3.5;
計數長度:計數長度=(2^L-初值) (L=13,16,8)
兩者的模式切換通過TMOD控制
- TMOD結構圖:

-
TMOD詳解
GATE:門控位
GATE =1,由中斷引腳INT0(P3.2)、INT1(P3.3)和TCON中的位TR0、TR1共同控制來啟動定時器/計數器
GATE =0,由TR0和TR1置位來啟動定時器/計數器**(一般為0)**
C/!T:模式選擇位:
1時,計數器模式;
0時,定時器模式;
M0 & M1共同控制工作方式:
項目開發一般用01,考試大機率考00;
- 啟動停止與中斷控制寄存器TCON
TFx:定時器或者計數器溢出時置位1,請求中斷,中斷程式進入後自動清零;
TRx:定時器啟動控制位,當其等于1時定時器/計數器啟動;
- 中斷允許控制寄存器:IE
51單片機定時器、序列槽、中斷MCS-51功能單元 ETx:定時器/計數器的中斷允許位
EA:CPU總中斷的允許位
-
定時器/計數器使用:(重點)
工作方式的設定:
僞代碼:
//設定定時器0工作在16位模式 //C語言 TMOD=0x01; //定時器 //彙編 MOV TMOD, #01H;
計數初值的計算+裝載:
僞代碼:
//機械周期1us,設定500us中斷一次為FE0C //C語言 TH0=0xFE; TL0=0x0C; //彙編 MOV TH0, #0FEH ; MOV TL0, #0cH ;
中斷允許位的設定:
僞代碼:
//C EA=1; ET0=1; //assembly SETB EA ;turn on all interrupt SETB ET0 ;turn on 0 interrupt
開啟定時器:
僞代碼:
//c TR0=1; //assembly SETB TR0 ;turn on CLR TR0 ;turn off !
-
使用執行個體:
定時器使用方式(中斷方式):
計數器使用方式(中斷方式):ORG 0000H; AJMP MAIN; ORG 001BH; AJMP IRQ1; MAIN: MOV TMOD, #00H ;工作模式0,高8+低5 MOV TH1, #0FCH MOV TL1, #03H SETB TR1; SETB ET1; SETB EA; AJMP $; IRQ1: MOV TMOD, #00H MOV TH1, #0FCH CPL P1.0 RETI ;中斷傳回一定要加!
查詢方式則是判斷TF溢出标志,變高後進入自定義韓式處理資料,清空标志;ORG 0000H; AJMP MAIN; ORG 001BH; AJMP IRQ1; MAIN: MOV TMOD, #04H ;計數器模式 MOV TH1, #0FCH ;一千個下降沿中斷一次 MOV TL1, #03H SETB TR1; SETB ET1; SETB EA; AJMP $; IRQ1: MOV TMOD, #00H MOV TH1, #0FCH CPL P1.0 RETI ;中斷傳回一定要加!
二、并行口&串行口
并行口:并行傳輸資料(不常用)
占據資源大,錯誤率高,但快
串行口:(重要)
穩定,占據IO口小,準确,稍微慢
- 串行口控制寄存器SCON:
51單片機定時器、序列槽、中斷MCS-51功能單元 SM0和SM1:串行口方式選擇位;
00-移位寄存器方式
01-8位UART,波特率可變
10-9位UART,波特率為fosc/64或fosc/32(PCON決定)
11-9位UART,波特率可變
方式1為常用通信方式;方式2、3為多機通信,方式0為移位寄存器,不常用;
重要标志位: TI:發送完成标志 RI:接收完成标志
-
序列槽波特率與定時器1關聯,公式如下:
波特率=2^SMOD * fosc / [32 * 12(2^K-初值)];(fosc系統主頻)
波特率翻倍寄存器:PCON
隻有最高位(SMOD)有效:為1時波特率翻倍,為0時不翻倍
方式1序列槽通信接收代碼:
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP RX_TI
MAIN:
MOV SCON, #50H
MOV PCON, #00H
MOV TMOD, #02H
MOV TH1, #0FDH
MOV TL1, #0FDH
SETB TR1
SETB EA
SETB ES
RX_TI:
PUSH ACC
MOV TH1, #0FDH
MOV TL1, #0FDH
MOV A, SBUF
;處理
POP ACC
RETI
發送套用代碼:
MOV SBUF, A
JNB TI, $
CLR TI
RET
三、中斷系統
所有中斷控制位:
TCON:
TF1、TF0:定時器溢出标志、請求中斷:
IE1、IE0:外部中斷溢出請求:
IT1、IT0:外部中斷觸發方式選擇-1下降沿觸發、0低電平觸發
SCON:
内部TI、RI觸發接收發送中斷。
所有中斷允許位:
位序号 | EX0 | ET0 | EX1 | ET1 | ES | ET2 | / | EA |
---|---|---|---|---|---|---|---|---|
說明 | 外部中斷0 | 定時/計數0 | 外部中斷1 | 定時/計數1 | 串行口中斷 | 定時2溢出中斷(8052用) | 全局中斷允許位 |
中斷處理跳轉位址:
中斷源 | 矢量單元 |
---|---|
外部中斷0 | 0003H |
定時器0溢出中斷 | 000BH |
外部中斷1 | 0013H |
定時器1溢出中斷 | 001BH |
串行口 | 0023H |
定時器2溢出中斷 | 002BH |
注:進入中斷後一般需要對現場進行保護:
使用PUSH和POP做現場保護
;對A和PSW壓棧保護
PUSH ACC
PUSH PSW
;對A和PSW出棧保護
POP PSW
POP ACC