一文了解MCS-51單片機定時器、計數(shù)器等知識
MCS-51單片機含有2個定時器/計數(shù)器,具有4種工作方式。具有兩種工作模式(計數(shù)器模式和定時器模式)
MCS-51單片機含有1個全雙工串行口,具有4種工作方式。
TMOD->定時器/計數(shù)器方式控制寄存器
TCON->定時器/計數(shù)器控制寄存器
SMOD->串行口波特率系數(shù)選擇位
SCON->串行口控制寄存器
SBUF ->串行口數(shù)據(jù)緩沖器
TH0 ->定時器/計數(shù)器0(高字節(jié))
TL0 ->定時器/計數(shù)器0(低字節(jié))
TH1 ->定時器/計數(shù)器1(高字節(jié))
TL1 ->定時器/計數(shù)器1(低字節(jié))
一、定時器/計數(shù)器
定時器/計數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成
定時器/計數(shù)器T1由特殊功能寄存器TH1、TL1構(gòu)成
特殊功能寄存器TMOD用于控制和確定 定時器/計數(shù)器 T0、T1的工作模式和工作方式。
特殊功能寄存器TCON用于控制T0、T1的啟動和停止計數(shù),同時包含了T0、T1的狀態(tài)。
工作方式控制寄存器TMOD
TMOD用于控制定時器/計數(shù)器的工作模式及工作方式,它的字節(jié)地址為89H。
D7 D6 D5D4|D3 D2 D1D0
GATE C/TM1M0 | GATE C/TM1M0
T1 | T0
8位分為2組,高4位控制T1,低4位控制T0。
GATE:門控制位。若GATE=0,定時器/計數(shù)器的運行不受外部輸入引腳INT0或INT1的控制。
C/T:計數(shù)器模式和定時器模式的選擇位。 C/T=0 為定時器模式。 C/T=1為計數(shù)器模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負跳變)計數(shù)。
M1、M0位:4種工作方式選擇位。
M1 M0 工作方式
0 0 方式0TLX(x=0,1)中低5位與THX的8位構(gòu)成13位計數(shù)器
0 1 方式1TLX與THX構(gòu)成16位計數(shù)器
1 0 方式2常數(shù)自動重裝載的8位計數(shù)器,每當計數(shù)器TLX溢出時,THX中的內(nèi)容裝載到TLX
1 1 方式3僅適用于T0,分成2個8位計數(shù)器,T1停止計數(shù)
定時器/計數(shù)器控制寄存器TCONTCON的字節(jié)地址為88H
D7 D6 D5 D4D3 D2 D1D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
低4位與外部中斷有關(guān),高4位功能如下:
TF1:T1計數(shù)溢出標志位。當T1計數(shù)溢出時,由硬件置1,申請中斷。進入中斷服務(wù)程序后被硬件自動清0
TR1:T1計數(shù)運行控制位。由軟件置1或清0.當GATE位(TMOD第7位)=0,TR1=1時允許T1計數(shù)。當TR1=0時禁止計數(shù)
TF0:T0計數(shù)溢出標志位。當T0計數(shù)溢出時,由硬件置1,申請中斷。進入中斷服務(wù)程序后被硬件自動清0
TR0:T0計數(shù)運行控制位。由軟件置1或清0.當GATE位(TMOD第3位)=0,TR0=1時允許T0計數(shù)。當TR1=0時禁止計數(shù)
二、串行口
串行口有4種工作方式。波特率可用軟件設(shè)置,由片內(nèi)的定時器/計數(shù)器產(chǎn)生。
MCS-51單片機內(nèi)部的串行口有2個物理上獨立的接收、發(fā)送緩沖器SBUF,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,兩個緩沖器共用一個字節(jié)地址(99H).
控制MCS-51單片機串行口的控制寄存器共有兩個:特殊功能寄存器SCON和PCON
串行口控制寄存器SCON(地址98H)
D7 D6 D5 D4 D3 D2 D1D0
SM0SM1SM2RENTB8RB8TI RI
SM0、SM1:串行口4種工作方式的選擇位
SM2:允許方式2和3的多機通訊控制位。 在方式2或3中,如果SM2置為1,則接收到的第9位數(shù)據(jù)(RB8)為0時不激活RI。在方式1時,如果SM2=1,則只有收到有效的停止位時才會激活RI。在方式0時SM2必須清0。
REN:允許串行接收位。由軟件置1或清0.REN=1允許接收,REN=0則禁止接收。
TB8:是工作方式2和3時,要發(fā)送的第9位數(shù)據(jù)。需要時由軟件置1或清0。在多機通訊中用來表示是地址幀還是數(shù)據(jù)幀。TB8=1為地址幀,TB8=0為數(shù)據(jù)幀
RB8:當工作在方式2和3時,為接收到的第9位數(shù)據(jù)。在多機通訊中為地址幀或數(shù)據(jù)幀的標識位。在方式1如果SM2=0,RB8是接收到的停止位。在方式0不使用RB8.
TI:發(fā)送中斷標志位,在方式0串行發(fā)送第8位數(shù)據(jù)結(jié)束時由硬件置1,或在其它方式串行發(fā)送停止位的開始時置1.TI=1時申請中斷,CPU響應(yīng)中斷后,發(fā)送下一幀數(shù)據(jù)。TI必須由軟件清0.
RI:接收中斷標志位。在方式0串行接收到第8位數(shù)據(jù)結(jié)束時,由硬件置1.在其它方式中,串行接收到停止位的中間點時置1.RI=1時申請中斷,要求CPU取走數(shù)據(jù)。但在方式1中,SM2=1時,若未收到有效的停止位,不會對RI置1.RI必須由軟件清0.
特殊功能寄存器PCON(地址87H)
D7 ......D0
SMOD ........
SMOD波特率系數(shù)選擇位。
串行口的工作方式
SM0 SM1 方式 功能說明
0 0 0 移位寄存器方式(用于擴展I/O口)
0 1 1 8位UART,波特率可變(T1溢出率/n)
1 0 2 9位UART,波特率為 Fosc/64 或Fosc/32
1 1 3 9位UART,波特率可變(T1溢出率/n)
方式0:為移位寄存器輸入輸出方式,可外接移位寄存器,以擴展I/O口,也可外接同步輸入輸出的設(shè)備
方式1:方式1的波特率由以下公式確定:
方式1波特率= 2SMOD/32 * 定時器1的溢出率 式中SMOD為PCON寄存器的最高位的值(0或1)
方式1輸出: 數(shù)據(jù)位由TXD端輸出,發(fā)送一幀信息為10位,1起始位,8位數(shù)據(jù)位,和1位停止位。
CPU執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。 當發(fā)送完數(shù)據(jù)位,置“1”中斷標志位TI。
方式1輸入REN=1,SM0=0,SM1=1), 以所選波特率的16倍的速率采集RXD引腳狀態(tài),當采集到RXD端從1到0的跳變時就啟動定時器,接收的值是3次采用中至少兩次相同的值,以保證可靠無 誤。 當檢測到起始位有效時,開始接收一幀其余的信息。一幀信息為10位,1位起始位,8位數(shù)據(jù)位(先低位),1位停止位。當滿足以下2個條件時1)RI=0 (2)收到的停止位=1 或SM2=0時,停止位進入RB8,且置1中斷標志RI.若這2個條件不滿足,信息將丟失。因此中斷標志必須由用戶的中斷服務(wù)程序(或查詢程序)清0。
方式2:
方式2輸出:發(fā)送數(shù)據(jù)由TXD端輸出,發(fā)送一幀信息為11位,1位起始位0,8位數(shù)據(jù)位(先低位),一位可編程為1或 0的第9位數(shù)據(jù),1位停止位。 附加中的第9位數(shù)據(jù)即SCON中的TB8的值,TB8由軟件置1或清0.可以做為多機通訊中的地址或數(shù)據(jù)的標志位,也可以做為數(shù)據(jù)的奇偶檢驗位。
方式2輸入:SM0=1 SM1=0,且REN=1時,允許串行口以方式2接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位信息。1位起始位0,8位數(shù)據(jù)位,1位附加的第9位數(shù)據(jù),1位 停止位1。當接收器采樣到RXD端從1到0的跳變,并判斷起始位有效后,便開始接收一幀信息。 在接收器接收到第9位數(shù)據(jù)后,當RI=0且SM2=0或接收到的第9位數(shù)據(jù)位為1時,接收的數(shù)據(jù)送入SBUF(接收緩沖區(qū)),第9位數(shù)據(jù)送入RB8,并 置"1"RI.若不滿足這2個條件,接收到的信息被丟棄。
方式3:
方式3:除了波特率外,方式3和方式2相同。
三、多機通訊
串行口控制寄存器SCON中的SM2為方式2或方式3的多機通訊控制位,當串行口以方式2或方式3工作時,若SM2程序控制為1,此時只有當串行口的第9 位數(shù)據(jù)RB8=1時才置1中斷標志RI,若接收到的RB8=0,則不產(chǎn)生中斷,信息被丟失。應(yīng)用MCS-51串行口的這個特性,便可實現(xiàn)多機通訊。