晶振電路的作用是給單片機(jī)提供工作時(shí)的信號(hào)脈沖即單片機(jī)的工作速度。當(dāng)提供脈沖信號(hào)時(shí)須注意單片機(jī)的工作頻率范圍,為了保持單片機(jī)工作平穩(wěn)其工作頻率要小于24M。
復(fù)位電路,當(dāng)復(fù)位按鍵按下時(shí)電路就會(huì)恢復(fù)到初始狀態(tài)。復(fù)位的方法大致分為三種。一種是當(dāng)電路通電瞬間進(jìn)行復(fù)位;二是在需要復(fù)位時(shí),通過(guò)按鍵保持2個(gè)機(jī)器周期的高電平即可復(fù)位;三是根據(jù)程序或者電路運(yùn)行的需要自動(dòng)地進(jìn)行。
AT89C51單片機(jī)是帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器,是一種低電壓,高性能COMS8位微處理器。
*
AT89C51單片機(jī)基本組成
AT89C51單片機(jī)內(nèi)部有一個(gè)128KB的片內(nèi)數(shù)據(jù)存儲(chǔ)器,還有21個(gè)特殊功能寄存器,4KB片內(nèi)程序存儲(chǔ)器Flash ROM,6KB可尋址片內(nèi)外統(tǒng)一編制的ROM,64KB可尋址片外的RAM,4個(gè)并行的8位I/O接口,一個(gè)全雙工通用異步串行接口UART,兩個(gè)16位的定時(shí)/計(jì)數(shù)器。具有位操作功能的布爾處理機(jī)及位尋址功能的五個(gè)中斷源、兩個(gè)有限及的中斷操控系統(tǒng)以及片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路的8位微處理器。
3.1.1 AT89C51特性
(1) 與MSC-51兼容
(2) 4K字節(jié)可編程閃爍存儲(chǔ)器
(3) 全靜態(tài)工作:0HZ-24HZ
(4) 128*8位內(nèi)部RAM
(5) 壽命:1000寫/擦循環(huán)
(6) 三級(jí)程序存儲(chǔ)器鎖定
(7) 數(shù)據(jù)保留時(shí)間:10年
(8) 5個(gè)中斷源
(9) 片內(nèi)振蕩器和時(shí)鐘電路
(10) 32可編程I/O線
(11) 低功耗的限制和掉電模式
(12) 2個(gè)16位定時(shí)器/計(jì)數(shù)器
3.1.2 引腳說(shuō)明
AT89C51單片機(jī)引腳功能介紹具體為:VCC連接5V電壓引腳,GND連接電源負(fù)極或者接地。
P0做為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,8個(gè)管腳每個(gè)可吸收8TTL門電流,當(dāng)P0引腳寫入1時(shí),該引腳被視為高阻值輸入。在閃存編程時(shí),P0引腳是源碼輸入接口,當(dāng)閃存進(jìn)行校驗(yàn)P0口作為源碼輸出端口。
P1口是一個(gè)8位雙向I/O口,P1口由內(nèi)部提供上拉電阻,P1口緩沖器能接收輸出4TTL門電流,P1口引腳輸入1時(shí),被內(nèi)部上位拉高,此時(shí)P1引腳可用作輸入端口,P1口被外部下拉為低電平時(shí),將輸出電流。P1口可作為閃存編程和校驗(yàn)時(shí)的低八位地址接收。
P2口作為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口其緩沖器可接收、輸出4個(gè)TTL門電流,當(dāng)P2引腳定義為1時(shí),其管腳作為輸入。當(dāng)P2口做為輸入引腳使用時(shí),P2口管腳被外部拉低輸出電流。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址高8位。在給地址1時(shí),利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接受高8位地址信號(hào)和控制信號(hào)。
P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TLL門電流,當(dāng)P3口寫入1后,它們被內(nèi)部上拉為高電平,并用作輸入口,作為輸入口由于外部下拉為低電平,P3口將輸出電流。
RST作為復(fù)位引腳來(lái)說(shuō)只需持續(xù)高電平兩個(gè)機(jī)器周期的時(shí)間即可實(shí)現(xiàn)復(fù)位。/PSEN外部程序存儲(chǔ)器的選通信號(hào)。/EA /VPP當(dāng)/EA保持低電平時(shí),在此期間外部程序存儲(chǔ)。當(dāng)/EA保持高電平時(shí),此期間為內(nèi)部存儲(chǔ)。在閃存編程期間,引腳用于12V編程電源。
XTAL1反向震蕩放大器的輸入及內(nèi)部時(shí)鐘工作電流的輸入。
XTAL2來(lái)自反向振蕩器的輸出。
AT89C51引腳圖如圖3.2所示。

中斷系統(tǒng)介紹
為了提高系統(tǒng)效率,AT89C51單片機(jī)設(shè)置了中斷系統(tǒng)。在CPU 與外設(shè)交換信息時(shí),存在著一個(gè)快速的 CPU 與慢速的外設(shè)之間的矛盾。為解決這個(gè)問(wèn)題,發(fā)展了中斷的概念。
當(dāng) CPU 正在處理某項(xiàng)事務(wù)的時(shí)候,如果外界或者內(nèi)部發(fā)生了緊急事件,要求 CPU 暫停正在處理工作而去處理這個(gè)緊急事件,待處理完后,再回到原來(lái)中斷的地方,繼續(xù)執(zhí)行原來(lái)被中斷的程序,這個(gè)過(guò)程稱作中斷。
3.1.4 中斷系統(tǒng)和中斷控制
AT89C51有三個(gè)片內(nèi)定時(shí)器/計(jì)數(shù)器溢出中斷TF0-TF2。/INT0和/INT1外部中斷,一個(gè)TI或RI片內(nèi)串行口中斷,其優(yōu)先級(jí)中斷如下:
/INT0和/INT1:外部中斷0和1,由P3.2端口線引入,低電平或者下降沿引起。
T0:定時(shí)器/計(jì)數(shù)器0中斷。由T0記滿回0引起。
T1:定時(shí)器/計(jì)數(shù)器1中斷。由T1記滿回0引起。
TI/RI:串行口I/O完成一幀字節(jié)發(fā)送/接收引起中斷。
T2:定時(shí)器/計(jì)數(shù)器2中斷,由T2記滿回0引起。
TMOD


TCON:
定時(shí)器/計(jì)數(shù)器和外部中斷兩者合用的一個(gè)可位尋址的特殊功能寄存器。

其中TF1:定時(shí)器/計(jì)數(shù)器1溢出中斷請(qǐng)求標(biāo)志位。當(dāng)定時(shí)器/計(jì)數(shù)器1產(chǎn)生溢出時(shí),由內(nèi)部硬件位置TF1向CPU響應(yīng)中斷,并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí)由硬件內(nèi)部自動(dòng)TF1清零。
TR1:定時(shí)器/計(jì)數(shù)器1啟動(dòng)/停止位。有軟件位置/復(fù)位控制定時(shí)器/計(jì)數(shù)器1的啟動(dòng)或停止計(jì)數(shù)器。
TF0:定時(shí)器/計(jì)數(shù)器0溢出中斷請(qǐng)求標(biāo)志位,當(dāng)定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)產(chǎn)生溢出時(shí)由內(nèi)部硬件置位TF0向CPU相應(yīng)中斷,并專轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí),有硬件內(nèi)部自動(dòng)TF1清零。
TR0:定時(shí)器/計(jì)數(shù)器0啟動(dòng)/停止位,由軟件置位/復(fù)位控制定時(shí)器/計(jì)數(shù)器0的啟動(dòng)或停止。
IE1:外部中斷請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到INT0低電平或者下降沿且IT1=1時(shí),由內(nèi)部硬件置位IE1標(biāo)志位向CPU請(qǐng)求中斷。當(dāng)CPU相應(yīng)中斷并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí),由硬件向內(nèi)部將IE1清零。
IE0:外部中斷請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到INT0低電平或者下降沿且IT1=1時(shí),由內(nèi)部硬件置位IE0標(biāo)志位向CPU請(qǐng)求中斷。當(dāng)CPU相應(yīng)中斷并轉(zhuǎn)向該中斷服務(wù)程序執(zhí)行時(shí),由硬件向內(nèi)部將IE0清零。
IT1:用軟件置位/復(fù)位IT1來(lái)選擇外部中斷INT1是下降沿觸發(fā)還是電平觸發(fā)中斷請(qǐng)求。當(dāng)IT1=1時(shí),則外部中斷INT1為下降沿觸發(fā)中斷請(qǐng)求,即INT1端口由前一個(gè)機(jī)器周期的高電平跳變?yōu)橄乱粋€(gè)機(jī)器周期的低電平,則觸發(fā)中斷請(qǐng)求。當(dāng)IT1復(fù)位清零,則INT1的低電平觸發(fā)中斷請(qǐng)求。
IT0:用軟件置位/復(fù)位IT0選擇外部中斷INT1是下降沿觸發(fā)還是電平觸發(fā)中斷請(qǐng)求。當(dāng)IT1=0,則外部中斷INT1為下降沿觸發(fā)中斷請(qǐng)求,即INT1端口由前一個(gè)機(jī)器周期的高電平跳變?yōu)橄乱粋€(gè)機(jī)器周期的低電平,則觸發(fā)中斷請(qǐng)求。當(dāng)IT0位清零,則INT1的低電平觸發(fā)中斷請(qǐng)求。
3.1.5 中斷允許控制寄存器
EA——中斷允許總控制位
EA=0 中斷總禁止,禁止所有中斷
EA=1 中斷總允許,總允許后中斷的禁止或允許由各中斷源的中斷允許控制位進(jìn)行設(shè)置。
EX0和EX1——外部中斷允許控制位
EX0(EX1)=0 禁止外部中斷
EX0(EX1)=1 允許外部中斷
ET0和ET1——定時(shí)器/計(jì)數(shù)器中斷允許控制位
ET0(ET1)=0 禁止定時(shí)器/計(jì)數(shù)器中斷
ET0(ET1)=0 允許定時(shí)器/計(jì)數(shù)器中斷
ES——串行中斷允許控制位
ES=0 禁止串行中斷
ES=1 允許串行中斷
3.1.6 中斷相應(yīng)過(guò)程
CPU中斷相應(yīng)過(guò)程為,當(dāng)程序執(zhí)行到中斷位置時(shí),停止執(zhí)行主程序去執(zhí)行中斷程序知道執(zhí)行完成再繼續(xù)執(zhí)行主程序。其具體步驟如下:
(1) 保護(hù)斷點(diǎn)
(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;
}