晶振電路的作用是給單片機提供工作時的信號脈沖即單片機的工作速度。當(dāng)提供脈沖信號時須注意單片機的工作頻率范圍,為了保持單片機工作平穩(wěn)其工作頻率要小于24M。
復(fù)位電路,當(dāng)復(fù)位按鍵按下時電路就會恢復(fù)到初始狀態(tài)。復(fù)位的方法大致分為三種。一種是當(dāng)電路通電瞬間進行復(fù)位;二是在需要復(fù)位時,通過按鍵保持2個機器周期的高電平即可復(fù)位;三是根據(jù)程序或者電路運行的需要自動地進行。
AT89C51單片機是帶4K字節(jié)閃爍可編程可擦除只讀存儲器,是一種低電壓,高性能COMS8位微處理器。
*
AT89C51單片機基本組成
AT89C51單片機內(nèi)部有一個128KB的片內(nèi)數(shù)據(jù)存儲器,還有21個特殊功能寄存器,4KB片內(nèi)程序存儲器Flash ROM,6KB可尋址片內(nèi)外統(tǒng)一編制的ROM,64KB可尋址片外的RAM,4個并行的8位I/O接口,一個全雙工通用異步串行接口UART,兩個16位的定時/計數(shù)器。具有位操作功能的布爾處理機及位尋址功能的五個中斷源、兩個有限及的中斷操控系統(tǒng)以及片內(nèi)振蕩器和時鐘產(chǎn)生電路的8位微處理器。
3.1.1 AT89C51特性
(1) 與MSC-51兼容
(2) 4K字節(jié)可編程閃爍存儲器
(3) 全靜態(tài)工作:0HZ-24HZ
(4) 128*8位內(nèi)部RAM
(5) 壽命:1000寫/擦循環(huán)
(6) 三級程序存儲器鎖定
(7) 數(shù)據(jù)保留時間:10年
(8) 5個中斷源
(9) 片內(nèi)振蕩器和時鐘電路
(10) 32可編程I/O線
(11) 低功耗的限制和掉電模式
(12) 2個16位定時器/計數(shù)器
3.1.2 引腳說明
AT89C51單片機引腳功能介紹具體為:VCC連接5V電壓引腳,GND連接電源負(fù)極或者接地。
P0做為一個8位漏級開路雙向I/O口,8個管腳每個可吸收8TTL門電流,當(dāng)P0引腳寫入1時,該引腳被視為高阻值輸入。在閃存編程時,P0引腳是源碼輸入接口,當(dāng)閃存進行校驗P0口作為源碼輸出端口。
P1口是一個8位雙向I/O口,P1口由內(nèi)部提供上拉電阻,P1口緩沖器能接收輸出4TTL門電流,P1口引腳輸入1時,被內(nèi)部上位拉高,此時P1引腳可用作輸入端口,P1口被外部下拉為低電平時,將輸出電流。P1口可作為閃存編程和校驗時的低八位地址接收。
P2口作為一個內(nèi)部上拉電阻的8位雙向I/O口其緩沖器可接收、輸出4個TTL門電流,當(dāng)P2引腳定義為1時,其管腳作為輸入。當(dāng)P2口做為輸入引腳使用時,P2口管腳被外部拉低輸出電流。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址高8位。在給地址1時,利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接受高8位地址信號和控制信號。
P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TLL門電流,當(dāng)P3口寫入1后,它們被內(nèi)部上拉為高電平,并用作輸入口,作為輸入口由于外部下拉為低電平,P3口將輸出電流。
RST作為復(fù)位引腳來說只需持續(xù)高電平兩個機器周期的時間即可實現(xiàn)復(fù)位。/PSEN外部程序存儲器的選通信號。/EA /VPP當(dāng)/EA保持低電平時,在此期間外部程序存儲。當(dāng)/EA保持高電平時,此期間為內(nèi)部存儲。在閃存編程期間,引腳用于12V編程電源。
XTAL1反向震蕩放大器的輸入及內(nèi)部時鐘工作電流的輸入。
XTAL2來自反向振蕩器的輸出。
AT89C51引腳圖如圖3.2所示。
中斷系統(tǒng)介紹
為了提高系統(tǒng)效率,AT89C51單片機設(shè)置了中斷系統(tǒng)。在CPU 與外設(shè)交換信息時,存在著一個快速的 CPU 與慢速的外設(shè)之間的矛盾。為解決這個問題,發(fā)展了中斷的概念。
當(dāng) CPU 正在處理某項事務(wù)的時候,如果外界或者內(nèi)部發(fā)生了緊急事件,要求 CPU 暫停正在處理工作而去處理這個緊急事件,待處理完后,再回到原來中斷的地方,繼續(xù)執(zhí)行原來被中斷的程序,這個過程稱作中斷。
3.1.4 中斷系統(tǒng)和中斷控制
AT89C51有三個片內(nèi)定時器/計數(shù)器溢出中斷TF0-TF2。/INT0和/INT1外部中斷,一個TI或RI片內(nèi)串行口中斷,其優(yōu)先級中斷如下:
/INT0和/INT1:外部中斷0和1,由P3.2端口線引入,低電平或者下降沿引起。
T0:定時器/計數(shù)器0中斷。由T0記滿回0引起。
T1:定時器/計數(shù)器1中斷。由T1記滿回0引起。
TI/RI:串行口I/O完成一幀字節(jié)發(fā)送/接收引起中斷。
T2:定時器/計數(shù)器2中斷,由T2記滿回0引起。
TMOD
TCON:
定時器/計數(shù)器和外部中斷兩者合用的一個可位尋址的特殊功能寄存器。
其中TF1:定時器/計數(shù)器1溢出中斷請求標(biāo)志位。當(dāng)定時器/計數(shù)器1產(chǎn)生溢出時,由內(nèi)部硬件位置TF1向CPU響應(yīng)中斷,并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時由硬件內(nèi)部自動TF1清零。
TR1:定時器/計數(shù)器1啟動/停止位。有軟件位置/復(fù)位控制定時器/計數(shù)器1的啟動或停止計數(shù)器。
TF0:定時器/計數(shù)器0溢出中斷請求標(biāo)志位,當(dāng)定時器/計數(shù)器0計數(shù)產(chǎn)生溢出時由內(nèi)部硬件置位TF0向CPU相應(yīng)中斷,并專轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時,有硬件內(nèi)部自動TF1清零。
TR0:定時器/計數(shù)器0啟動/停止位,由軟件置位/復(fù)位控制定時器/計數(shù)器0的啟動或停止。
IE1:外部中斷請求標(biāo)志位。當(dāng)CPU檢測到INT0低電平或者下降沿且IT1=1時,由內(nèi)部硬件置位IE1標(biāo)志位向CPU請求中斷。當(dāng)CPU相應(yīng)中斷并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時,由硬件向內(nèi)部將IE1清零。
IE0:外部中斷請求標(biāo)志位。當(dāng)CPU檢測到INT0低電平或者下降沿且IT1=1時,由內(nèi)部硬件置位IE0標(biāo)志位向CPU請求中斷。當(dāng)CPU相應(yīng)中斷并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時,由硬件向內(nèi)部將IE0清零。
IT1:用軟件置位/復(fù)位IT1來選擇外部中斷INT1是下降沿觸發(fā)還是電平觸發(fā)中斷請求。當(dāng)IT1=1時,則外部中斷INT1為下降沿觸發(fā)中斷請求,即INT1端口由前一個機器周期的高電平跳變?yōu)橄乱粋€機器周期的低電平,則觸發(fā)中斷請求。當(dāng)IT1復(fù)位清零,則INT1的低電平觸發(fā)中斷請求。
IT0:用軟件置位/復(fù)位IT0選擇外部中斷INT1是下降沿觸發(fā)還是電平觸發(fā)中斷請求。當(dāng)IT1=0,則外部中斷INT1為下降沿觸發(fā)中斷請求,即INT1端口由前一個機器周期的高電平跳變?yōu)橄乱粋€機器周期的低電平,則觸發(fā)中斷請求。當(dāng)IT0位清零,則INT1的低電平觸發(fā)中斷請求。
3.1.5 中斷允許控制寄存器
EA——中斷允許總控制位
EA=0 中斷總禁止,禁止所有中斷
EA=1 中斷總允許,總允許后中斷的禁止或允許由各中斷源的中斷允許控制位進行設(shè)置。
EX0和EX1——外部中斷允許控制位
EX0(EX1)=0 禁止外部中斷
EX0(EX1)=1 允許外部中斷
ET0和ET1——定時器/計數(shù)器中斷允許控制位
ET0(ET1)=0 禁止定時器/計數(shù)器中斷
ET0(ET1)=0 允許定時器/計數(shù)器中斷
ES——串行中斷允許控制位
ES=0 禁止串行中斷
ES=1 允許串行中斷
3.1.6 中斷相應(yīng)過程
CPU中斷相應(yīng)過程為,當(dāng)程序執(zhí)行到中斷位置時,停止執(zhí)行主程序去執(zhí)行中斷程序知道執(zhí)行完成再繼續(xù)執(zhí)行主程序。其具體步驟如下:
(1) 保護斷點
(2) 尋找中斷入口
(3) 執(zhí)行中斷處理程序
(4) 中斷返回
中斷初始化
void Interrupt_Init()
{
TMOD = 0x01;
TH0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) / 256;
TL0 = (65536 - CRYSTAL_FREQ / 12 / INTERRUPT_PERIOD_0) % 256;
ET0 = 1;
TR0=1;
EA = 1;
}