版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
①51子系列有2個可編程的定時器/計數(shù)器:定時器/計數(shù)器0與定時器/計數(shù)器1,可由程序選擇作為定時器用或作為計數(shù)器用,定時時間或計數(shù)值也可由程序設(shè)定。
②每個定時器/計數(shù)器都具有4種工作方式,可用程序選擇。
③任一定時器/計數(shù)器在定時時間到或計數(shù)值到時,可由程序安排產(chǎn)生中斷請求信號或不產(chǎn)生中斷請求信號。
④52子系列有3個可編程定時器/計數(shù)器,增加了定時器/計數(shù)器2。定時器/計數(shù)器2有3種工作方式,可用程序選擇。定時器/計數(shù)器的主要特性12/6/202312.4.1定時器/計數(shù)器的結(jié)構(gòu)定時器/計數(shù)器0、1的結(jié)構(gòu)框圖12/6/202322.4.1定時器/計數(shù)器0、1的結(jié)構(gòu)定時器/計數(shù)器0、1的結(jié)構(gòu)框圖12/6/202331.16位加法計數(shù)器工作方法:作計數(shù)器用時,加法計數(shù)器對芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計數(shù)。每輸入一個脈沖,加法計數(shù)器增加1。加法計數(shù)溢出時可向CPU發(fā)出中斷請求信號
作定時器用時,加法計數(shù)器對內(nèi)部機器周期脈沖Tcy計數(shù)。定時器/計數(shù)器0、1的結(jié)構(gòu)框圖(P3.5)(P3.4)12/6/202342.工作方式控制寄存器TMOD
TMOD用來選擇定時器/計數(shù)器0、1的工作方式,低4位用于定時器/計數(shù)器0,高4位用于定時器/計數(shù)器1。定時器/計數(shù)器0、1的結(jié)構(gòu)框圖12/6/202352.工作方式控制寄存器TMOD
(1)定時器/計數(shù)器功能選擇位C/T:C/T=1為計數(shù)器方式,C/T=0為定時器方式。
(2)定時器/計數(shù)器工作方式選擇位M1、M0:定時器/計數(shù)器4種工作方式的選擇由M1、M0的值決定。T1T0TMOD89H12/6/20236
(2)定時器/計數(shù)器工作方式選擇位M1、M0:定時器/計數(shù)器4種工作方式的選擇由M1、M0的值決定。12/6/20237
(3)門控制位GATE:如果GATE=1,定時器/計數(shù)器0的工作受芯片引腳INT0(P3.2)控制,定時器/計數(shù)器1的工作受芯片引腳INT1(P3.3)控制;如果GATE=0,定時器/計數(shù)器的工作與INT0、INT1引腳無關(guān)。一般情況下GATE=0。T1T0TMOD89H
例:定時器T1為定時器方式,工作在方式0,非門控方式,定時器T0為計數(shù)器方式,工作在方式1,非門控方式,TMOD的值應(yīng)該設(shè)置為多少?TMOD=00000101B=05H12/6/202383.定時器/計數(shù)器控制寄存器TCON作用:TCON高4位用于控制定時器0、1的運行,低4位用于控制外部中斷,與定時器/計數(shù)器無關(guān)。定時器/計數(shù)器0、1的結(jié)構(gòu)框圖12/6/202393.定時器/計數(shù)器控制寄存器TCON
(1)定時器/計數(shù)器1運行控制位TR1(TCON.6):TR1=1時定時器/計數(shù)器1工作,TR1=0則停止工作。TRl由軟件置1或清零。(2)定時器/計數(shù)器1溢出中斷標(biāo)志TF1(TCON.7)
定時器/計數(shù)器1計數(shù)溢出時由硬件自動置TF1=1,在中斷允許的條件下,便向CPU發(fā)出定時器/計數(shù)器1的中斷請求信號,CPU響應(yīng)后TFl由硬件自動清零。在中斷屏蔽條件下,TF1可作查詢測試用。
D7D6D5D4D3D2D1D0TCON88H12/6/2023103.定時器/計數(shù)器控制寄存器TCON
(3)定時器/計數(shù)器0運行控制位TR0(TCON.4):TR0=1時定時器/計數(shù)器0工作,TR0=0則停止工作。TR0由軟件置1或清零。
(4)定時器/計數(shù)器0溢出中斷標(biāo)志TF0(TCON.5)
定時器/計數(shù)器0計數(shù)溢出時由硬件自動置TF0=1,在中斷允許的條件下,便向CPU發(fā)出定時器/計數(shù)器0的中斷請求信號,CPU響應(yīng)后TF0由硬件自動清零。在中斷屏蔽條件下,TF0可作查詢測試用。
D7D6D5D4D3D2D1D0TCON88H12/6/202311運行控制:是否為門控方式工作方式選擇:方式0~方式3工作狀態(tài)選擇:定時器或計數(shù)器狀態(tài)
定時器/計數(shù)器1工作方式0結(jié)構(gòu)圖
Tcy2.4.2定時器/計數(shù)器的四種工作方式12/6/202312一、定時器/計數(shù)器0、1的工作狀態(tài)選擇(C/T)定時器/計數(shù)器工作狀態(tài)選擇Tcy
1.計數(shù)器工作狀態(tài)(C/T=1)
:計數(shù)脈沖來自相應(yīng)的外部輸入引腳,定時器T0的計數(shù)脈沖來自P3的第四個引腳(P3.4),定時器T1的計數(shù)脈沖來自P3的第五個引腳(P3.5)。當(dāng)定時器/計數(shù)器運行時,引腳上的輸入計數(shù)脈沖由1到0的跳變,可以使對應(yīng)的定時器的加1寄存器對增1。2.4.3定時器/計數(shù)器的四種工作方式12/6/202313定時器/計數(shù)器工作狀態(tài)選擇Tcy2.定時器工作狀態(tài)(C/T=0)
:本質(zhì)上仍是定時器的加1寄存器對進行加1運算。振蕩器產(chǎn)生的內(nèi)部時鐘脈沖經(jīng)12分頻后作為計數(shù)脈沖,所以計數(shù)頻率為振蕩頻率的1/12。當(dāng)采用12MHz的晶體時,計數(shù)頻率為1MHz。由于內(nèi)部時鐘周期是相當(dāng)精確的頻率固定的脈沖,所以通過設(shè)定寄存器對的初值,在定時器方式時,可以獲得相當(dāng)精確的定時。12/6/202314二、定時器/計數(shù)器0、1的運行控制
方法:定時器/計數(shù)器的運行控制(啟動和停止)是由TMOD中的GATE位,TCON中的TRi(i=0或1)位以及從芯片引腳INTi(i=0或1)上引入的外部信號通過上圖的邏輯電路實現(xiàn)的。
定時器/計數(shù)器1運行控制S212/6/202315
原理:(1)當(dāng)定時器1的GATE=0時,定時器1運行控制由TR1的一個條件確定,而TR1可用軟件置位或清零,從而可以利用程序控制定時器的啟動和停止運行。
定時器/計數(shù)器1運行控制二、定時器/計數(shù)器0、1的運行控制12/6/202316二、定時器/計數(shù)器0、1的運行控制
原理:(2)當(dāng)定時器1的GATE=1時,“或”門的輸出電平取決于INT1引腳的信號電平,所以“與”門輸出的電平?jīng)Q定于TR1和INT1兩個條件。
定時器或計數(shù)器運行控制12/6/202317三、定時器/計數(shù)器0、1的4種工作方式12/6/202318三、定時器/計數(shù)器0、1的4種工作方式
設(shè)置條件:M1=0、M0=0
方式0為:13位定時器/計數(shù)器,TH1是高8位加法計數(shù)器,TLl是低5位加法計數(shù)器(只用5位,其高3位未用)。1.工作方式0
定時器/計數(shù)器1工作方式0結(jié)構(gòu)圖
12/6/2023191.工作方式0計數(shù)范圍:1~8192
THl、TLl從初值開始加法計數(shù),直至溢出,所以設(shè)置的初值不同,定時時間或計數(shù)值也不同。注意:加法計數(shù)器TH1溢出后,必須用程序重新對THl、TLl設(shè)置初值,否則下一次TH1、TLl將從0開始加法計數(shù)。初值設(shè)置范圍:0~8191(0~213-1)定時范圍:(1~8192)Tcy例已知振蕩器振蕩頻率fosc為12MHz,要求定時器/計數(shù)器0產(chǎn)生1ms定時,試編寫初始化程序。計數(shù)值:8192-X定時時間:(8192-X)Tcy12/6/202320(2)初始化程序的編寫:在C51中加入<reg51.h>頭文件,然后在主函數(shù)中寫如下語句:TH0=0xE0;定時器/計數(shù)器0寫入初值TL0=0x18;同上TMOD=0x00;T0設(shè)為定時器、工作方式0TR0=1;啟動定時器/計數(shù)器0TH0=E0HTL0=18H解:(1)TH0TL0初值的計算與TMOD方式字的確定:
由于Tcy=1us,故有T=(8192-X)Tcy=(8192-X)×1us=1000us得X=7192=1C18H=00011100
0001
1000BTMOD=00H12/6/2023212.工作方式1設(shè)置條件:M1=0、M0=1方式1為:16位定時器/計數(shù)器,TH1是高8位加法計數(shù)器,TLl是低8位加法計數(shù)器。
定時器/計數(shù)器1工作方式1結(jié)構(gòu)圖
12/6/2023222.工作方式1計數(shù)范圍:1~65536
THl、TLl從初值開始加法計數(shù),直至溢出,所以設(shè)置的初值不同,定時時間或計數(shù)值也不同。注意:加法計數(shù)器TH1溢出后,必須用程序重新對THl、TLl設(shè)置初值,否則下一次TH1、TLl將從0開始加法計數(shù)。初值設(shè)置范圍:0~65535(0~216-1)定時范圍:(1~65536)Tcy例已知振蕩器振蕩頻率fosc為12MHz,要求定時器/計數(shù)器0產(chǎn)生50ms定時,試編寫初始化程序。計數(shù)值:65536-X定時時間:(65536-X)Tcy12/6/202323(2)初始化程序的編寫:
在C51中加入<reg51.h>頭文件,然后在主函數(shù)中寫如下語句:TH0=0x3C;定時器/計數(shù)器0寫入初值TL0=0xB0;同上TMOD=0x01;T0設(shè)為定時器工作方式1TR0=1,啟動定時器/計數(shù)器0TH0=3CHTL0=B0H解:(1)TH0TL0初值的計算與TMOD方式字的確定:
由于Tcy=1us,故有T=(65536-x)Tcy=(65536-x)×1us=50000us得X=15536=3CB0HTMOD=01H12/6/202324解:方波的周期用定時器T1產(chǎn)生,根據(jù)(2n-x)×Tcy=(216-x)×1μs=50ms,所以x=65536-50000=15536=3CB0H即TH1=3CH,TL1=B0H或者通過計算得出TH1=15536/256,TL1=15536%256已知晶振頻率fosc=12MHz,要求定時器1產(chǎn)生100ms的方波信號,定時器1工作于方式1,編寫在P2.0引腳上產(chǎn)生100ms的方波程序。
在T1中設(shè)置初值為15536,在初值的基礎(chǔ)上進行加1計數(shù),每隔50ms計數(shù)溢出1次,CPU響應(yīng)中斷后,在中斷服務(wù)程序中對P2.0引腳信號取反。12/6/202325
#include<reg51.h>#defineuintunsignedintsbitfangbo=P2^0;voiddelay(uintz);//延時子程序voidmain(){
TMOD=0x10;//設(shè)置T1為定時器模式//,工作在方式1TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;//開總中斷ET1=1;//允許T1中斷
TR1=1;// 啟動T1while(1); }voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidtimer1()interrupt3{
TH1=(65536-50000)/256;TL1=(65536-50000)%256;fangbo=~fangbo;
}12/6/2023263.工作方式2
設(shè)置條件:M1=1、M0=0
方式2為:自動重新裝入初值(自動重裝載)的8位定時器/計數(shù)器。TL1作為8位加法計數(shù)器使用,TH1作為初值寄存器用。TH1、TL1的初值都由軟件預(yù)置。
定時器/計數(shù)器1工作方式2結(jié)構(gòu)圖
12/6/2023273.工作方式2計數(shù)范圍:1~256TLl從初值開始加法計數(shù),溢出時:
(1)置位TF1;(2)發(fā)出重裝載信號,將THl中初值自動送入TLl,使TL1從初值開始重新計數(shù)。注意:重新裝入初值后,TH1的內(nèi)容保持不變。初值設(shè)置范圍:0~255(0~28-1)定時范圍:(1~256)Tcy
工作方式2特別適用于定時控制。例已知振蕩器振蕩頻率fosc為12MHz,要求定時器/計數(shù)器0要求每隔200us產(chǎn)生一定時控制信號。計數(shù)值:256-X定時時間:(256-X)Tcy12/6/202328(2)初始化程序:
在C51中加入<reg51.h>頭文件,然后在主函數(shù)中寫如下語句:TL0=0x38;定時器/計數(shù)器0寫入初值TH0=0x38;同上TMOD=0x02;T0設(shè)為定時器工作方式2TR0=1;啟動定時器/計數(shù)器0TH0=38HTL0=38H解:(1)TH0TL0初值的計算與TMOD方式字的確定:
由于Tcy=1us,故有T=(256-x)Tcy=(256-x)×1us=200us得X=56=38HTMOD=02H12/6/2023294.工作方式3
設(shè)置條件:M1=1、M0=1
方式3:工作方式3僅對定時器/計數(shù)器0有意義。TL0、TH0成為兩個獨立的8位加法計數(shù)器。如把定時器/計數(shù)器1設(shè)置為工作方式3,相當(dāng)于TR1=0,即定時器/計數(shù)器1實際將停止工作。
定時器/計數(shù)器0工作方式3結(jié)構(gòu)圖
12/6/2023304.工作方式3
說明:定時器/計數(shù)器0采用工作方式3后,51子系列就具有3個定時器/計數(shù)器,即8位定時器/計數(shù)器TL0,8位定時器TH0和16位定時器/計數(shù)器1(TH1、TL1)。定時器/計數(shù)器1雖然還可以選擇為方式0、方式1或方式2,但由于TR1和TF1被TH0借用,不能產(chǎn)生溢出中斷請求,所以只用作串行口的波特率發(fā)生器。12/6/202331定時器/計數(shù)器0已預(yù)置初值為156,且選定用方式2的計數(shù)器方式,現(xiàn)在T0引腳上輸入周期為1ms脈沖,問:(1)此時定時器/計數(shù)器0的實際用途是什么?(2)在什么情況下,定時器/計數(shù)器0溢出?
解:(1)實際用作定時器,但采用外部時鐘脈沖(2)滿100ms定時器/計數(shù)器0將溢出。
12/6/202332設(shè)計一個秒表,使它從0~59s計數(shù),并使LED數(shù)碼管左邊兩個顯示數(shù)字0~59,假設(shè)晶振頻率fosc=12MHz,定時器/計數(shù)器選用T0。
解:利用51單片機的定時器0,使其50ms中斷一次,中斷20次時,秒加1。初值與中斷服務(wù)程序中,TH0、TL0的值設(shè)置為:TH0=0x3C;定時器/計數(shù)器0寫入初值TL0=0xB0;同上;
模式寄存器的值為:
TMOD=0x01;T0設(shè)為定時器工作方式1
12/6/202333程序如下:
#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharuchartemp,aa,shi,ge;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽極數(shù)碼管碼表voiddisplay(ucharshi,ucharge);//顯示子程序voiddelay(uintz);//延時子程序voidinit();12/6/202334voidmain(){ init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==60) { temp=0; } shi=temp/10; ge=temp%10;
} display(shi,ge); }}12/6/202335voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay(ucharshi,ucharge){
P2=0x01;//送入十位數(shù)碼管位選信號,顯示數(shù)字 P1=table[shi];//送入十位數(shù)碼管的段選信號 delay(5); P2=0x02;//送入個位數(shù)碼管位選信號,顯示數(shù)字 P1=table[ge];//送入個位數(shù)碼管的段選信號 delay(5);
}12/6/202336voidinit(){ temp=0; TMOD=0x01;//設(shè)置T0為定時器模式,工作在方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;EA=1;//開總中斷 ET0=1;//允許T0中斷 TR0=1;// 啟動T0}voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }12/6/2023372.5并行I/O端口8051單片機共有4個8位雙向I/O口,共32口線。每位均有自己的鎖存器(SFR),輸出驅(qū)動器和輸入緩沖器。12/6/202338多路開關(guān)功能:用于控制選通I/O方式還是地址/數(shù)據(jù)輸出方式方式控制:由內(nèi)部控制信號產(chǎn)生數(shù)據(jù)輸出鎖存器,用于數(shù)據(jù)位的鎖存兩個三態(tài)的數(shù)據(jù)輸入緩沖器(BUF1和BUF2)。推拉式I/O驅(qū)動器:由兩只場效應(yīng)管(FET)組成,上面的場效應(yīng)管構(gòu)成上拉電路。2.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1
P0R2D0P0WP0口1位的內(nèi)部結(jié)構(gòu)讀鎖存器讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)10字節(jié)地址80H,位地址80H~87H。12/6/2023392.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1
P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀鎖存器讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)10說明:1、當(dāng)CPU發(fā)出的控制信號為0時,P0口做雙向I/O口,為漏極開路(三態(tài))2、當(dāng)CPU發(fā)出的控制信號為1時,P0口為地址/數(shù)據(jù)復(fù)用總線(用于口擴展)12/6/2023402.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1
P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、
P0作輸入/輸出口的使用(1)P0作輸出口使用來自CPU的“寫入”脈沖加在D鎖存器的C端,內(nèi)部總線上的數(shù)據(jù)寫入D鎖存器,并向端口引腳P0.x輸出。注意:由于輸出電路是漏極開路(因為這時上拉場效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。讀鎖存器12/6/2023412.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1
P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、
P0作輸入/輸出口的使用(1)P0作輸出口使用來自CPU的“寫入”脈沖加在D鎖存器的C端,內(nèi)部總線上的數(shù)據(jù)寫入D鎖存器,并向端口引腳P0.x輸出。注意:由于輸出電路是漏極開路(因為這時上拉場效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。(2)P0作輸入口使用區(qū)分“讀引腳”和“讀鎖存器”?!白x引腳”信號把下方緩沖器打開,引腳上的狀態(tài)經(jīng)緩沖器讀入內(nèi)部總線;
讀鎖存器12/6/2023422.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1
P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、
P0作輸入/輸出口的使用(1)P0作輸出口使用來自CPU的“寫入”脈沖加在D鎖存器的C端,內(nèi)部總線上的數(shù)據(jù)寫入D鎖存器,并向端口引腳P0.x輸出。注意:由于輸出電路是漏極開路(因為這時上拉場效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。(2)P0作輸入口使用區(qū)分“讀引腳”和“讀鎖存器”?!白x引腳”信號把下方緩沖器打開,引腳上的狀態(tài)經(jīng)緩沖器讀入內(nèi)部總線;“讀鎖存器”信號打開上面的緩沖器把鎖存器Q端的狀態(tài)讀入內(nèi)部總線。讀鎖存器12/6/202343執(zhí)行“MOVA,P0”時讀引腳信號有效。說明:執(zhí)行“ANLP0,#0FH”時讀鎖存器信號有效。12/6/2023442.5.2P1端口P1口內(nèi)部結(jié)構(gòu)如下圖所示。輸出部分有內(nèi)部上拉電阻R*約為20K。其他部分與P0端口使用相類似(讀引腳時先寫入1)。寫數(shù)據(jù)讀端口字節(jié)地址90H,位地址90H~97H。12/6/202345P1口只作通用的I/O口使用,在電路結(jié)構(gòu)上與P0口有兩點區(qū)別:(1)因為只傳送數(shù)據(jù),不再需要多路轉(zhuǎn)接開關(guān)MUX。(2)由于P1口用來傳送數(shù)據(jù),因此輸出電路中有上拉電阻,這樣電路的輸出不是三態(tài)的。因此:(1)P1口作為輸出口使用時,外電路無需再接上拉電阻。(2)P1口作為輸入口使用時,應(yīng)先向其鎖存器先寫入“1”,使輸出驅(qū)動電路的FET截止,所以P1口是準(zhǔn)雙向口。12/6/202346字節(jié)地址為A0H,位地址A0H~A7H。
2.5.3P2端口P2口的位結(jié)構(gòu)的電路原理圖說明:1、P2可以作為通用的I/O,也可以作為高8位地址輸出輸出。2、當(dāng)控制信號為1時P2口輸出地址信息,此時單片機完成外部的取指操作或?qū)ν獠繑?shù)據(jù)存儲器16位地址的讀寫操作。3、當(dāng)控制信號為0時,作為普通I/O口使用時用法和P1口類似。1012/6/202347P3口的字節(jié)地址為B0H,位地址為B0H~B7H。P3口的第二功能定義,應(yīng)熟記。表2-5P3口的第二功能定義
口引腳第二功能
P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 INT0*(外部中斷0) P3.3 INT1*(外部中斷1) P3.4 T0(定時器0外部計數(shù)輸入) P3.5 T1(定時器1外部計數(shù)輸入) P3.6 WR*(外部數(shù)據(jù)存儲器寫選通) P3.7 RD*(外部數(shù)據(jù)存儲器讀選通)
2.5.4P3端口12/6/202348圖2-10P2口的位結(jié)構(gòu)的電路原理12/6/202349第二功能信號有輸出和輸入兩類:(1)作通用的I/O輸出,“第二輸出功能”線應(yīng)保持高電平,與非門開通,使鎖存器Q端輸出暢通。作第二功能信號輸出,鎖存器預(yù)先置“1”,使與非門對“第二輸出功能”信號的輸出是暢通的。(2)作第二功能信號輸入,在口線引腳的內(nèi)部增加了一個緩沖器,輸入的信號就從這個緩沖器的輸出端取得。而作為通用I/O輸入,仍取自三態(tài)緩沖器的輸出端。
P3口無論作哪種輸入,鎖存器輸出和“第二輸出功能”線都應(yīng)保持高電平。12/6/202350使用中應(yīng)注意的問題:(1)P0~P3口都是并行I/O口,但P0口和P2口,還可用來構(gòu)建系統(tǒng)的數(shù)據(jù)總線和地址總線,所以在電路中有一個MUX,以進行轉(zhuǎn)換。而P1口和P3口無構(gòu)建系統(tǒng)的數(shù)據(jù)總線和地址總線的功能,因此,無需轉(zhuǎn)接開關(guān)MUX。由于P0口可作為地址/數(shù)據(jù)復(fù)用線使用,需傳送系統(tǒng)的低8位地址和8位數(shù)據(jù),因此MUX的一個輸入端為“地址/數(shù)據(jù)”信號。而P2口僅作為高位地址線使用,不涉及數(shù)據(jù),所以MUX的一個輸入信號為“地址”。2.5.5P0~P3端口功能總結(jié)12/6/202351(2)在4個口中只有P0口是一個真正的雙向口,P1~P3口都是準(zhǔn)雙向口。原因:P0口作數(shù)據(jù)總線使用時,為保證數(shù)據(jù)正確傳送,需解決芯片內(nèi)外的隔離問題,即只有在數(shù)據(jù)傳送時芯片內(nèi)外才接通;不進行數(shù)據(jù)傳送時,芯片內(nèi)外應(yīng)處于隔離狀態(tài)。為此,P0口的輸出緩沖器應(yīng)為三態(tài)門。在P0口中輸出三態(tài)門是由兩只場效應(yīng)管(FET)組成,所以是一個真正的雙向口。而P1~P3口,上拉電阻代替P0口中的場效應(yīng)管,輸出緩沖器不是三態(tài)的-準(zhǔn)雙向口12/6/202352(3)P3口的口線具有第二功能,為系統(tǒng)提供一些控制信號。因此在P3口電路增加了第二功能控制邏輯。這是P3口與其它各口的不同之處。12/6/202353引腳功能分類圖12/6/202354仿真電路如下圖,編寫使P2口所接的流水燈從左到右點亮的程序2.5.58051系列單片機內(nèi)部并行口的應(yīng)用
12/6/202355#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintvoidDelayMS(uintx){ uchari; while(x--) { for(i=120;i>0;i--); }}voidmain(){ P0=0xFE; while(1) { P0=_crol_(P0,1); DelayMS(150); }}12/6/2023562.6串行輸入/輸出接口1.并行通信與串行通信在實際應(yīng)用中,不但計算機與外部設(shè)備之間常常要進行信息交換,而且計算機之間也需要交換信息,所有這些信息的交換均稱為“通信”。通信的基本方式分為并行通信和串行通信兩種。2.6.1基本概念12/6/202357
并行通信是構(gòu)成1組數(shù)據(jù)的各位同時進行傳送,例如8位數(shù)據(jù)或16位數(shù)據(jù)并行傳送。其特點是傳輸速度快,但當(dāng)距離較遠(yuǎn)、位數(shù)又多時導(dǎo)致了通信線路復(fù)雜且成本高。
串行通信是數(shù)據(jù)一位接一位地順序傳送。其特點是通信線路簡單,只要一對傳輸線就可以實現(xiàn)通信(如電話線),從而大大地降低了成本,特別適用于遠(yuǎn)距離通信。缺點是傳送速度慢。12/6/202358通信的兩種基本方式(a)并行通信;(b)串行通信12/6/202359
(1)種類:串行通信可分為異步傳送和同步傳送兩種基本方式。
①異步傳送方式在傳送時,數(shù)據(jù)是以一個字符為單位進行傳送的。它用一個起始位表示字符的開始,用停止位表示字符的結(jié)束。異步傳送的特點是數(shù)據(jù)在線路上的傳送不連續(xù)。異步傳送的字符格式如下頁圖所示。2.串行通信的種類和數(shù)據(jù)傳送方向12/6/202360串行異步傳送的字符格式一個字符由起始位、數(shù)據(jù)位、奇偶校驗位和停止位4個部分組成。起始位為0信號占1位;其后接著的就是數(shù)據(jù)位,它可以是5位、6位、7位或8位,傳送時低位在先、高位在后;再后面的1位為奇偶校驗位,可要也可以不要;最后是停止位,它用信號1來表示字符的結(jié)束,可以是1位、1位半或2位。12/6/202361例如,采用串行異步通信方式傳送ASCII碼字符‘5’,規(guī)定為7位數(shù)據(jù)位,1位偶校驗位,1位停止位,無空閑位。由于‘5’的ASCII碼為35H,其對應(yīng)7位數(shù)據(jù)位為0110101,如按低位在前、高位在后順序排列應(yīng)為1010110。前面加1位起始位,后面配上偶校驗位1位0,最后面加1位停止位1,因此傳送的字符格式為0101011001,其對應(yīng)的波形如下頁圖所示。12/6/202362傳送ASCII碼字符‘5’的波形圖12/6/202363在串行異步傳送中,CPU與外設(shè)之間事先必須約定:
a)字符格式。雙方要事先約定字符的編碼形式、奇偶校驗形式及起始位和停止位的規(guī)定。例如用ASCII碼通信,有效數(shù)據(jù)為7位,加1個奇偶校驗位、1個起始位和1個停止位共10位。當(dāng)然停止位也可大于1位。
b)波特率(Baudrate)。
波特率就是數(shù)據(jù)的傳送速率,即每秒鐘傳送的二進制位數(shù),單位為位/秒。它與字符的傳送速率(字符/秒)之間存在如下關(guān)系:波特率=位/字符×字符/秒=位/秒
要求發(fā)送端與接收端的波特率必須一致。12/6/202364
例:假設(shè)字符傳送的速率為120字符/秒,而每1個字符為10位,那么傳送的波特率為多少?10位/字符×120字符/秒=1200位/秒=1200波特每1位二進制位的傳送時間Td就是波特率的倒數(shù),例如上例中Td=1/1200=0.833ms12/6/202365在異步傳送中,每1個字符都要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了一定的時間。為了提高傳送速度,有時就去掉這些標(biāo)志,而采用同步傳送,即1次傳送1組數(shù)據(jù)。在這1組數(shù)據(jù)的開始處要用同步字符SYN來加以指示,如下頁圖所示。12/6/202366同步傳送示意圖12/6/202367串行通信的數(shù)據(jù)傳送方向有3種形式。
①單工方式如下頁圖(a)所示,A端為發(fā)送站,B端為接收站,數(shù)據(jù)僅能從A站發(fā)至B站。②半雙工方式如下頁圖(b)所示,數(shù)據(jù)既可從A站發(fā)送到B站,也可以由B站發(fā)送到A站。不過在同一時間只能作1個方向的傳送。
③全雙工方式如下頁圖(c)所示,每個站(A、B)既可同時發(fā)送,也可同時接收。
(2)數(shù)據(jù)傳送方向12/6/202368串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式12/6/202369MCS-51單片機內(nèi)部有1個功能很強的全雙工串行口,可同時發(fā)送和接收數(shù)據(jù)。它有4種工作方式,可供不同場合使用。波特率由軟件設(shè)置,通過片內(nèi)的定時/計數(shù)器產(chǎn)生。接收、發(fā)送均可工作在查詢方式或中斷方式,使用十分靈活。2.6.2串行口功能和結(jié)構(gòu)12/6/202370串行口內(nèi)部結(jié)構(gòu)如上圖,兩個物理上獨立的接收和發(fā)送緩沖器,可同時收、發(fā)數(shù)據(jù)。兩個緩沖器共用一個特殊功能寄存器字節(jié)地址:SBUF(99H)。
控制寄存器共兩個:特殊功能寄存器SCON和PCON。12/6/202371(1)串行口數(shù)據(jù)緩沖器SBUFSBUF是兩個在物理上獨立的接收、發(fā)送緩沖器,可同時發(fā)送、接收數(shù)據(jù)。兩個緩沖器只用一個字節(jié)地址99H,可通過指令對SBUF的讀寫來區(qū)別是對接收緩沖器的操作還是對發(fā)送緩沖器的操作。CPU寫SBUF,就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器。串行口對外也有兩條獨立的收發(fā)信號線RXD(P3.0)和TXD(P3.1),因此可以同時發(fā)送、接收數(shù)據(jù),實現(xiàn)全雙工傳送。12/6/202372(2)串行口控制寄存器SCONSCON寄存器用來控制串行口的工作方式與狀態(tài),它可以位尋址。在復(fù)位時所有位被清0,字節(jié)地址為98H。SCON的格式為:12/6/202373SM0、SM1——串行口4種工作方式的選擇位
SM0SM1方式 功能說明
000移位寄存器方式(用于擴展并行I/O口)0118位異步收發(fā),波特率可變(由定時器控制)1029位異步收發(fā),波特率為fosc/64或fosc/321139位異步收發(fā),波特率可變(由定時器控制)12/6/202374SM2——多機通信控制位
用于方式2或方式3中。當(dāng)串行口以方式2或方式3接收時,如果SM2=1,只有當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“1”時,才將接收到的前8位數(shù)據(jù)送入SBUF,并置“1”RI,產(chǎn)生中斷請求;當(dāng)接收到的第9位數(shù)據(jù)(RB8)為“0”時,則將接收到的前8位數(shù)據(jù)丟棄。如果SM2=0,則不論第9位數(shù)據(jù)是“1”還是“0”,都將前8位數(shù)據(jù)送入SBUF中,并置“1”RI,產(chǎn)生中斷請求。在方式1時,如果SM2=1,則只有收到停止位時才會激活RI。在方式0時,SM2必須為0。12/6/202375
REN——允許串行接收位由軟件置“1”或清“0”。
REN=1
允許串行口接收數(shù)據(jù)。
REN=0
禁止串行口接收數(shù)據(jù)。
TB8——發(fā)送的第9位數(shù)據(jù)方式2和3時,TB8是要發(fā)送的第9位數(shù)據(jù),可作為奇偶校驗位使用,也可作為地址幀或數(shù)據(jù)幀的標(biāo)志。=1為地址幀,=0為數(shù)據(jù)幀
RB8——接收到的第9位數(shù)據(jù)方式2和3時,RB8存放接收到的第9位數(shù)據(jù)。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。12/6/202376TI——發(fā)送中斷標(biāo)志位
串行完一幀信息,由硬件置“1”,TI必須由軟件清“0”。RI——接收中斷標(biāo)志位
方式0時,接收完第8位數(shù)據(jù)時,RI由硬件置1。其它工作方式,串行接收到停止位時,該位置“1”。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請中斷,CPU從接收SBUF取走數(shù)據(jù)。該位狀態(tài)也可軟件查詢。RI必須由軟件清“0”。12/6/202377(3)電源控制寄存器PCONPCON單元地址為97H,不能位尋址。其內(nèi)容如下:D7D6D5D4D3D2D1D0
PCON87H最高位SMOD為串行口波特率選擇位,當(dāng)SMOD=1時,方式1、2、3的波特率加倍。12/6/202378串行口有4種工作方式,它是由SCON中的SM0、SM1來定義的,如下所示。SM0、SM1——串行口4種工作方式的選擇位
SM0SM1方式 功能說明
000移位寄存器方式(用于擴展I/O口),波特率為fosc/120118位異步收發(fā),波特率可變(由定時器控制)1029位異步收發(fā),波特率為fosc/64或fosc/321139位異步收發(fā),波特率可變(由定時器控制)12/6/202379同步移位寄存器輸入/輸出方式,常用于外接移位寄存器,以擴展并行I/O口。8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。波特率固定為fosc/12。幀格式如下: 1.方式0圖7-4方式0幀格式12/6/2023801.方式0發(fā)送當(dāng)CPU執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF的指令時,產(chǎn)生一個正脈沖,串行口即把SBUF中的8位數(shù)據(jù)以fosc/12的固定波特率從RXD引腳串行輸出,低位在先,TXD引腳輸出同步移位脈沖,發(fā)送完8位數(shù)據(jù)置“1”中斷標(biāo)志位TI。時序如圖7-5所示。方式0發(fā)送時序12/6/2023812.方式0接收
REN=1,接收數(shù)據(jù),REN=0,禁止接收。REN=1,允許接收。向串口的SCON寫入控制字(置為方式0,并置“1”REN位,同時RI=0)時,產(chǎn)生一個正脈沖,串行口即開始接收數(shù)據(jù)。RXD為數(shù)據(jù)輸入端,TXD為移位脈沖信號輸出端,接收器也以fosc/12的固定波特率采樣RXD引腳的數(shù)據(jù)信息,當(dāng)收到8位數(shù)據(jù)時置“1”RI,一幀數(shù)據(jù)接收完,可進行下一幀數(shù)據(jù)的接受,時序如下:方式0接收時序12/6/202382方式0下,SCON中的TB8、RB8位沒有用到,發(fā)送或接收完8位數(shù)據(jù)由硬件置“1”TI或RI,CPU響應(yīng)中斷。TI或RI須由用戶軟件清“0”,可用如下指令:
CLRTI ;TI位清“0” CLRRI ;RI位清“0”方式0時,SM2位必須為0。12/6/202383例:仿真電路如下圖:12/6/202384#include<reg51.h>sbitclk=P1^0;voiddelay(intN) //延時子程序(晶振12M){inti,j;for(i=0;i<N;i++)for(j=0;j<i;j++);}voidmain(){intxx;while(1){clk=0; clk=1;//發(fā)送移位脈沖 SCON=0x10;//允許串行口接收數(shù)據(jù) while(RI==0) //等待發(fā)送 {;} xx=SBUF; //讀取數(shù)據(jù) RI=0; //清除接收中斷標(biāo)志 P2=xx; delay(200); }}12/6/202385SM0、SM1=01方式1一幀數(shù)據(jù)為10位,1個起始位(0),8個數(shù)據(jù)位,1個停止位(1),先發(fā)送或接收最低位。幀格式如下:方式1波特率=(2SMOD/32)×定時器T1的溢出率SMOD為PCON寄存器的最高位的值(0或1)。2方式1
方式1幀格式12/6/202386(1).方式1發(fā)送數(shù)據(jù)由TXD輸出。一幀信息為10位,1位起始位0,8位數(shù)據(jù)位(先低位)和1位停止位1。當(dāng)執(zhí)行一條數(shù)據(jù)寫發(fā)送緩沖器SBUF的指令,就啟動發(fā)送。圖中TX時鐘的頻率就是發(fā)送的波特率。發(fā)送開始時,內(nèi)部發(fā)送控制信號變?yōu)橛行?。將起始位向TXD輸出,此后,每經(jīng)過一個TX時鐘周期,便產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位。8位數(shù)據(jù)位全部發(fā)送完畢后,置“1”TI。方式1發(fā)送數(shù)據(jù)的時序,如下圖所示。方式1發(fā)送數(shù)據(jù)時的時序12/6/202387(2).方式1接收
數(shù)據(jù)從RXD(P3.0)腳輸入。當(dāng)檢測到起始位的負(fù)跳變時,開始接收數(shù)據(jù)。定時控制信號有兩種:接收移位時鐘(RX時鐘,頻率和波特率相同)和位檢測器采樣脈沖(頻率是RX時鐘的16倍,1位數(shù)據(jù)期間,有16個采樣脈沖),當(dāng)采樣到RXD端從1到0的跳變時就啟動檢測器,接收的值是3次連續(xù)采樣(第7、8、9個脈沖時采樣)進行表決以確認(rèn)是否是真正的起始位(負(fù)跳變)的開始。當(dāng)一幀數(shù)據(jù)接收完,須同時滿足兩個條件,接收才真正有效。⑴RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中的數(shù)據(jù)已被取走,說明“接收SBUF”已空。⑵SM2=0或收到的停止位=1(方式1時,停止位已進入RB8),則收到的數(shù)據(jù)裝入SBUF和RB8(RB8裝入停止位),且置“1”中斷標(biāo)志RI。若這兩個條件不同時滿足,收到的數(shù)據(jù)將丟失。12/6/202388方式1接收數(shù)據(jù)時的時序12/6/2023899位異步通信接口。每幀數(shù)據(jù)均為11位,1位起始位0,8位數(shù)據(jù)位(先低位),1位可程控的第9位數(shù)據(jù)和1位停止位。幀格式如下:3方式2方式2波特率=(2SMOD/64)×fosc
12/6/202390發(fā)送前,先根據(jù)通訊協(xié)議由軟件設(shè)置TB8(例如,雙機通訊時的奇偶校驗位或多機通訊時的地址/數(shù)據(jù)的標(biāo)志位)。方式2發(fā)送數(shù)據(jù)波形如圖所示。(1).方式2發(fā)送方式2、3發(fā)送數(shù)據(jù)時序波形12/6/202391SM0、SM1=10,且REN=1。數(shù)據(jù)由RXD端輸入,接收11位信息。當(dāng)位檢測到RXD從1到0的負(fù)跳變,并判斷起始位有效后,開始收一幀信息。在接收器完第9位數(shù)據(jù)后,需滿足兩個條件,才能將接收到的數(shù)據(jù)送入SBUF。(1)RI=0,意味著接收緩沖器為空。(2)SM2=0或接收到的第9位數(shù)據(jù)位RB8=1時。當(dāng)上述兩個條件滿足時,接收到的數(shù)據(jù)送入SBUF(接收緩沖器),第9位數(shù)據(jù)送入RB8,并置“1”RI。若不滿足兩個條件,接收的信息將被丟棄。方式2接收數(shù)據(jù)的時序如圖所示。
(2).方式2接收
12/6/202392方式2接收數(shù)據(jù)的時序12/6/202393
SM0、SM1=11,串口為方式3。波特率可變的9位異步通訊方式,除波特率外,方式3和方式2相同。方式3的時序見方式2。
方式3波特率=(2SMOD/32)×定時器T1的溢出率4方式312/6/202394要保證主機與所選擇的從機實現(xiàn)可靠地通訊,SCON中的SM2位就是滿足這一條件而設(shè)置的多機通訊控制位。原理:在串行口以方式2(或方式3)接收時,若SM2=1,表示置多機通訊功能位,這時有兩種可能:(1)接收到的第9位數(shù)據(jù)為1時,數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI=1向CPU發(fā)出中斷請求;(2)接收到的第9位數(shù)據(jù)為0時,則不產(chǎn)生中斷標(biāo)志,信息將拋棄。2.6.3多機通訊12/6/202395若SM2=0,則接收的第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。應(yīng)用上述特性,便可實現(xiàn)MCS-51的多機通訊。
設(shè)多機系統(tǒng)中有一主機和3個8031從機,如下圖。主機的RXD與從機的TXD相連,主機TXD與從機的RXD端相連。從機地址分別為00H、01H、02H。
12/6/202396多機通訊工作過程:(1)從機串行口編程為方式2或方式3接收,且置“1”SM2和REN位,使從機只處于多機通訊且接收地址幀的狀態(tài)。(2)主機先將從機地址(即準(zhǔn)備接收數(shù)據(jù)的從機)發(fā)給各從機,主機發(fā)出的地址信息的第9位為1,各從機接收到的第9位信息RB8為1,且由于SM2=1,則置“1”RI,各從機響應(yīng)中斷,執(zhí)行中斷程序。在中斷服務(wù)子程序中,判主機送來的地址是否和本機地址相符合,相符則該從機清“0”SM2位,準(zhǔn)備接收主機的數(shù)據(jù)或命令;若不符,則保持SM2=1狀態(tài)。12/6/202397(3)接著主機發(fā)送數(shù)據(jù)幀,此時各從機串行口接收到的RB8=0,只有地址相符合的從機系統(tǒng)(即已清“0”SM2位的從機)才能激活RI,從而進入中斷,在中斷程序中接收主機的數(shù)據(jù)(或命令);
其它的從機因SM2=1,又RB8=0不激活中斷標(biāo)志RI,不能進入中斷,接收的數(shù)據(jù)丟失。前圖所示的多機系統(tǒng)是主從式,由主機控制多機之間的通訊,從機和從機的通訊只能經(jīng)主機才能實現(xiàn)。12/6/2023982.6.4波特率的制定方法方式0、方式2的波特率是固定的;方式1、方式3波特率由定時器T1的溢出率來確定。(1)波特率的定義波特率的定義?。對于定時器的不同工作方式,波特率的范圍不一。12/6/202399(a)方式0波特率=時鐘頻率fosc×1/12,不受SMOD位的值的影響。若fosc=12MHz,波特率為fosc/12即1Mb/s。(b)方式2波特率=(2SMOD/64)×fosc若fosc=12MHz:SMOD=0波特率=187.5kb/s;
SMOD=1波特率=375kb/s
(c)方式1或方式3時,波特率為:
波特率=(2SMOD/32)×T1的溢出率
12/6/2023100實際設(shè)定波特率時,T1常設(shè)置為方式2定時(自動裝初值)這種方式不僅操作方便,也可避免因軟件重裝初值而帶來的定時誤差。此時:12/6/2023101例: 設(shè)串行接口工作于工作方式3,SMOD=0,f=11.059MHz,定時器/計數(shù)器1工作于定時器方式2(自動重裝載方式),TLl、THl的初值為FDH,試計算波特率。因為定時器/計數(shù)器1的定時時間為:T=(256-253)×12/(11.059×106) 其溢出速率:1/T=11.059×106/[(256-253)×12]=307194.4 所以波特率為:20×307194.4/32=9599.83≈9600(位/秒)12/6/2023102舉例:串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)串行數(shù)據(jù)由RXD發(fā)送給串并轉(zhuǎn)換芯片74164,TXD則用于輸出移位時鐘脈沖,74164將串行輸入的1字節(jié)轉(zhuǎn)換為并行數(shù)據(jù),并將轉(zhuǎn)換的數(shù)據(jù)通過8只LED顯示出來。本例串口工作模式0,即移位寄存器I/O模式。12/6/2023103#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharvoidDelay(uintx){ uchari; while(x--) { for(i=0;i<120;i++); }}voidmain(){ ucharc=0x80; SCON=0x00; TI=1; while(1) { c=_crol_(c,1); SBUF=c; while(TI==0); TI=0; Delay(400); }}12/6/2023104舉例:甲機通過串口控制乙機LED閃爍甲單片機負(fù)責(zé)向外發(fā)送控制命令字符“A”、“B”、“C",或者停止發(fā)送,乙機根據(jù)所接收到的字符完成LED1閃爍、LED2閃爍、雙閃爍、或停止閃爍。12/6/2023105舉例:單片機之間雙向通信甲機向乙機發(fā)送控制命令字符,甲機同時接收乙機發(fā)送的數(shù)字,并顯示在數(shù)碼管上。乙機接收到甲機發(fā)送的信號后,根據(jù)相應(yīng)信號控制LED完成不同閃爍動作。12/6/202310612/6/2023107補充:中斷的基本概念CPU執(zhí)行程序時,由于發(fā)生了某種隨機的事件(外部或內(nèi)部的),引起CPU暫時中斷正在運行的程序,轉(zhuǎn)去執(zhí)行一段特殊的服務(wù)程序(稱為中斷服務(wù)程序或中斷處理程序),以處理該事件,該事件處理完后又返回被中斷的程序繼續(xù)執(zhí)行,這一過程稱為中斷。2.7中斷系統(tǒng)實時測控時,單片機應(yīng)能及時地響應(yīng)和處理單片機外部事件或內(nèi)部事件所提出的中斷請求。12/6/2023108中斷流程圖主程序斷點繼續(xù)執(zhí)行主程序執(zhí)行中斷服務(wù)子程序外設(shè)中斷請求中斷響應(yīng)返回主程序中斷方式優(yōu)點:大大地提高了CPU的工作效率。12/6/2023109中斷源中斷源——引起CPU中斷的事件。例如:外設(shè)——請求輸入輸出數(shù)據(jù),報告故障等事件——掉電、硬件故障、軟件錯誤、非法操作、定時時間到等中斷源分為:外部中斷、內(nèi)部中斷內(nèi)部中斷:CPU內(nèi)部執(zhí)行程序時自身產(chǎn)生的中斷外部中斷:CPU以外的設(shè)備、部件產(chǎn)生的中斷12/6/2023110中斷過程五個步驟:中斷請求中斷判優(yōu)(有時還要進行中斷源識別)中斷響應(yīng)中斷服務(wù)中斷返回12/6/20231111.中斷請求中斷源發(fā)出中斷請求信號,送到CPU。中斷請求信號應(yīng)保持到中斷被處理為止;CPU響應(yīng)中斷后,中斷請求信號應(yīng)及時撤銷。12/6/20231122中斷判優(yōu)多個中斷源產(chǎn)生中斷,CPU首先為誰服務(wù)? ——中斷優(yōu)先級排隊問題。12/6/2023113MCS—51系列單片機處理中斷優(yōu)先權(quán)有三條原則:①正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷,一直到該中斷服務(wù)程序結(jié)束,返回了主程序且執(zhí)行了主程序中的一條指令后,CPU才響應(yīng)新的中斷請求。
②正在進行的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)二級中斷嵌套。③CPU同時接收到幾個中斷請求時,首先響應(yīng)優(yōu)先權(quán)最高的中斷請求。
12/6/20231143.中斷響應(yīng)①CPU正在處理同級或高優(yōu)先級的中斷。②現(xiàn)行的機器周期不是所執(zhí)行指令的最后一個機器周期。③正在執(zhí)行的指令是RETI或訪問IE、IP的指令。CPU在執(zhí)行RETI或訪問IE、IP的指令后,至少需要再執(zhí)行一條其他指令后才會響應(yīng)中斷請求。
MCS-51的CPU在每個機器周期的S5P2期間順序采樣各中斷請求標(biāo)志位,如有置位,且下列三種情況都不存在,那么,在下一周期的S1期間響應(yīng)中斷。否則,采樣的結(jié)果被取消。三種情況是:12/6/2023115①根據(jù)中斷請求源的優(yōu)先級高低,使相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器置1。②保護斷點,即把程序計數(shù)器PC的內(nèi)容推入堆棧保存。③清相應(yīng)的中斷請求標(biāo)志位IE0、IE1、TF0或TF1。CPU響應(yīng)中斷后,由硬件執(zhí)行如下功能:④把被響應(yīng)的中斷服務(wù)程序的入口地址送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序執(zhí)行。
4.中斷服務(wù)
12/6/2023116中斷服務(wù)程序入口地址0003H單元:外部中斷0中斷服務(wù)程序的入口地址000BH單元:定時器/計數(shù)器0溢出中斷服務(wù)程序的入口地址00013H單元:外部中斷1中斷服務(wù)程序的入口地址0001BH單元:定時器/計數(shù)器1溢出中斷服務(wù)程序的入口地址0023H單元:串行口中斷服務(wù)程序的入口地址0002BH單元:定時器/計數(shù)器2溢出中斷服務(wù)程序的入口地址12/6/2023117中斷請求的撤除(1)對于定時器/計數(shù)器0、1的中斷請求及跳變觸發(fā)方式的外部中斷0、1,CPU在響應(yīng)中斷后用硬件清除了相應(yīng)的中斷請求標(biāo)志TF0、TF1、IE0、IE1,即自動撤除了中斷請求。(2)對于串行接口中斷及定時器/計數(shù)器2中斷,CPU響應(yīng)中斷后沒有用硬件清除中斷標(biāo)志位,必須由用戶編制的中斷服務(wù)程序來清除相應(yīng)的中斷標(biāo)志。
CPU響應(yīng)中斷請求后,在中斷返回(執(zhí)行RETI)前,必須撤除請求,否則會錯誤地再一次引起中斷過程。12/6/20231185.中斷返回中斷服務(wù)程序的最后一條指令必須是中斷返回指令RETI。CPU執(zhí)行該指令時,先將相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器清零,然后從堆棧中彈出棧頂?shù)膬蓚€字節(jié)到PC,從而返回到斷點處。12/6/20231192.7.1MCS-51中斷系統(tǒng)功能5個(52子系列為6個)中斷源2個中斷優(yōu)先級,可實現(xiàn)二級中斷嵌套每一個中斷源的優(yōu)先級可用程序設(shè)定12/6/2023120
中斷系統(tǒng)結(jié)構(gòu)示意圖
12/6/20231212.7.2中斷請求源中斷系統(tǒng)結(jié)構(gòu)示意圖
1.外部中斷0、1
外部中斷請求有兩種觸發(fā)方式:電平觸發(fā)及跳變觸發(fā),由TCON的IT0位及IT1位選擇。IT0(IT1)=0:電平觸發(fā)IT0(IT1)=1:跳變觸發(fā)
注意:CPU響應(yīng)中斷后,由硬件自動清除IE0或IE1
12/6/2023122中斷系統(tǒng)結(jié)構(gòu)示意圖
2.定時器/計數(shù)器0、1溢出中斷
定時器/計數(shù)器計數(shù)溢出時,由硬件分別置TF0=1或TF1=1,向CPU申請中斷
注意:CPU響應(yīng)中斷后,由硬件自動清除TF0或TF1
12/6/2023123中斷系統(tǒng)結(jié)構(gòu)示意圖
3.串行接口中斷串行接口發(fā)送了一幀信息,便由硬件置TI=1、向CPU申請中斷。串行接口接收了一幀信息,便由硬件置RI=1,向CPU申請中斷。注意:CPU響應(yīng)中斷后必須用軟件清除TI和RI12/6/20231242.7.3中斷控制中斷系統(tǒng)結(jié)構(gòu)示意圖
中斷屏蔽觸發(fā)器中斷允許觸發(fā)器上述兩個觸發(fā)器由中斷允許寄存器IE來設(shè)置
1.中斷允許控制12/6/2023125中斷允許寄存器IE格式IE的每一位都可由軟件置1或清零。且1:中斷允許,0:中斷屏蔽。(1)CPU中斷允許位EAEA=1時CPU中斷允許,EA=0時CPU屏蔽一切中斷請求。
(2)串行接口中斷允許位ESES=1時允許串行接口中斷,ES=0時禁止串行接口申請中斷。12/6/2023126(3)T/C1中斷允許位ETlET1=1時允許T/C1申請中斷,ET1=0時禁止T/C1中斷。
(4)外部中斷1中斷允許位EX1EX1=1時允許外部中斷1申請中斷,EX1=0時禁止中斷。(5)定時器/計數(shù)器0中斷允許位ET0ET0=1允許定時器/計數(shù)器申請中斷,ET0=0時禁止中斷。(6)外部中斷0中斷允許位EX0EX0=l時允許外部中斷0申請中斷,EX0=0禁止外部中斷0申請中斷。12/6/2023127MCS-51復(fù)位后,IE清0,所有中斷請求被禁止。若使某一個中斷源被允許中斷,除了IE相應(yīng)的位的被置“1”,還必須使EA位=1。例:
EA=1;
ET0=1;12/6/2023128例若允許片內(nèi)2個定時器/計數(shù)器中斷,禁止其它中斷源的中斷請求。編寫設(shè)置IE的相應(yīng)程序段。(1)用位操作指令來編寫如下程序段:
ES=0;禁止串行口中斷 EX1=0;禁止外部中斷1中斷 EX0=0;禁止外部中斷0中斷ET0=1;允許定時器/計數(shù)器T0中斷ET1=1;允許定時器/計數(shù)器T1中斷EA=1;CPU開中斷(2)用字節(jié)操作指令來編寫:IE=0x8AH;12/6/2023129中斷系統(tǒng)結(jié)構(gòu)示意圖
優(yōu)先權(quán)選擇由中斷優(yōu)先級寄存器IP控制工作。
2.中斷優(yōu)先級寄存器IP兩個中斷優(yōu)先級,可實現(xiàn)兩級中斷嵌套。12/6/2023130可歸納為下面兩條基本規(guī)則:(1)低優(yōu)先級可被高優(yōu)先級中斷,反之則不能。(2)同級中斷不會被它的同級中斷源所中斷。若CPU正在執(zhí)行高優(yōu)先級的中斷,則不能被任何中斷源所中斷。12/6/2023131中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H。IP各個位的含義:(1)PS——串行口中斷優(yōu)先級控制位
1:高優(yōu)先級中斷;
0:低優(yōu)先級中斷。(2)PT1——定時器T1中斷優(yōu)先級控制位
1:高優(yōu)先級中斷;
0:低優(yōu)先級中斷。(3)PX1——外部中斷1中斷優(yōu)先級控制位
1:高優(yōu)先級中斷;
0:低優(yōu)先級中斷。12/6/2023132中斷優(yōu)先級寄存器IP,其字節(jié)地址為B8H。(4)PT0——定時器T0中斷優(yōu)先級控制位
1:高優(yōu)先級中斷;
0:低優(yōu)先級中斷。(5)PX0——外部中斷0中斷優(yōu)先級控制位
1:高優(yōu)先級中斷;
0:低優(yōu)先級中斷。12/6/2023133由軟件可改變各中斷源的中斷優(yōu)先級。
MCS-51的中斷系統(tǒng)有兩個不可尋址的“優(yōu)先級激活觸發(fā)器”:一個用來指示某高優(yōu)先級的中斷正在執(zhí)行,所有后來的中斷均被阻止。另一個用來指示某低優(yōu)先級的中斷正在執(zhí)行,所有同級中斷都被阻止,但不阻斷高優(yōu)先級的中斷請求。在同時收到幾個同一優(yōu)先級的中斷請求時,優(yōu)先響應(yīng)哪一個中斷,取決于內(nèi)部的查詢順序。12/6/2023134
中斷源中斷級別
外部中斷0 最高 T0溢出中斷 外部中斷1 T1溢出中斷 串行口中斷 最低查詢順序如下:12/6/2023135
例2
設(shè)置IP寄存器的初始值,使2個外中斷請求為高優(yōu)先級,其它中斷請求為低優(yōu)先級。(1)用位操作指令
PX0=1;2個外中斷為高優(yōu)先級
PX1=1;
PS=0;串口為低優(yōu)先級中斷PT0=0;2個定時器/計數(shù)器低優(yōu)先級中斷
PT1=0(2)用字節(jié)操作指令I(lǐng)P=0x05;
12/6/2023136
一個中斷請求被響應(yīng),需滿足以下必要條件:(1)IE寄存器中的中斷總允許位EA=1。(2)該中斷源發(fā)出中斷請求,即該中斷源對應(yīng)的中斷請求標(biāo)志為“1”。(3)該中斷源的中斷允許位=1,即該中斷沒有被屏蔽。(4)無同級或更高級中斷正在被服務(wù)。2.7.4響應(yīng)中斷請求的條件
12/6/2023137中斷響應(yīng)的主要過程:首先由硬件自動生成一條長調(diào)用指令:
LCALLaddr16接著就由CPU執(zhí)行該指令,將PC的內(nèi)容壓入堆棧以保護斷點,再將中斷入口地址裝入PC。各中斷源服務(wù)程序的入口地址
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省贛州市經(jīng)開區(qū)2025-2026學(xué)年上學(xué)期期末九年級數(shù)學(xué)試卷(無答案)
- 安徽省蕪湖市無為市部分學(xué)校2026屆九年級上學(xué)期1月期末考試英語試卷(含答案含聽力原文無音頻)
- 微積分試卷及答案
- 2026年小學(xué)綜合素質(zhì)沖刺押題卷
- 微課2-3 工業(yè)互聯(lián)網(wǎng)技術(shù)
- 清明節(jié)活動形式策劃方案
- 智能設(shè)備2026年市場分析
- 三菱PLC技術(shù)與應(yīng)用實訓(xùn)教程(FX3U)習(xí)題答案匯 楊輝 模塊1-4 入門篇(中級工)-精英篇(高級技師)
- 分項工程驗收技術(shù)要領(lǐng)
- 中國化工集團曙光橡膠基礎(chǔ)研發(fā)建設(shè)項目(輻射類)環(huán)境影響報告表
- 柴油維修技術(shù)培訓(xùn)課件
- 2026院感知識考試題及答案
- 《紅樓夢》導(dǎo)讀 (教學(xué)課件) -高中語文人教統(tǒng)編版必修下冊
- 室外供熱管道安裝監(jiān)理實施細(xì)則
- 腰背部推拿課件
- 通信管道施工質(zhì)量管理流程解析
- 商場經(jīng)理2025年終工作總結(jié)(二篇)
- 2026年神木職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫含答案
- 化肥產(chǎn)品生產(chǎn)許可證實施細(xì)則(二)(磷肥產(chǎn)品部分)2025
- 2025年CFA二級《投資組合管理》模擬
- 基于杜邦分析法的比亞迪盈利能力分析
評論
0/150
提交評論