一、中斷: 52單片機(jī)一共有6個(gè)中斷源: INTO0--外部中斷0,由P3.2端口線引入,低電平或下降沿引起。 INTO1--外部中斷1,有P3.3端口線引入,低電平或下降沿引起。 T0--定時(shí)器/計(jì)數(shù)器0中斷,由T0計(jì)數(shù)器計(jì)滿回零引起。 T1--定時(shí)器/計(jì)數(shù)器1中斷,由T1計(jì)數(shù)器計(jì)滿回零引起。 T2--定時(shí)器/計(jì)數(shù)器2中斷,由T2計(jì)數(shù)器計(jì)滿回零引起。 TI/RI--串口中斷,串行端口完成一幀字符發(fā)送/接收后引起。 52單片機(jī)的中斷級(jí)別
單片機(jī)在使用中斷功能時(shí),通常需要設(shè)置兩個(gè)與中斷有關(guān)的寄存器: ①中斷允許寄存器IE ②中斷優(yōu)先級(jí)寄存器IP 一,中斷允許寄存器 IE
功能: EA-- 全局中斷允許位 EA=1 打開(kāi)全局中斷控制,在此條件下,有各個(gè)中斷控制位確定相應(yīng)中斷的打開(kāi)或關(guān)閉 EA=0 關(guān)閉全部中斷 ET2 定時(shí)器/計(jì)數(shù)器2中斷允許位 ET2=1 打開(kāi)T2中斷 ET2=0 關(guān)閉T2中斷 ES 串行中斷允許位 ET1 定時(shí)器1中斷允許位 EX1 外部中斷1允許位
ET0 定時(shí)器/計(jì)數(shù)器0中斷允許位 EX0 外部中斷允許位 二、定時(shí)器單片機(jī)在使用定時(shí)器/計(jì)數(shù)器功能時(shí),通常需要設(shè)置兩個(gè)與定時(shí)器有關(guān)的寄存器: ①工作方式寄存器TMOD ②控制計(jì)數(shù)器TCON 一,工作方式寄存器TMOD GATE 門控位 GATE=0 定時(shí)器/計(jì)數(shù)器啟動(dòng)與停止僅受TCON寄存器中TRX(X=0,1)來(lái)控制 GATE=1 定時(shí)器/計(jì)數(shù)器啟動(dòng)與停止由TCON寄存器中TRX(X=0,1)和外部中斷引腳(INT0或INT1)上的電平狀態(tài)來(lái)共同控制 C/T 定時(shí)器模式和計(jì)數(shù)器模式選擇位(1為計(jì)數(shù)器模式,0為定時(shí)器模式) M1M0 工作方式選擇位 每個(gè)定時(shí)器有4個(gè)工作方式,他們由M1M0設(shè)定 二,定時(shí)器/計(jì)數(shù)器控制寄存器TCON IF1 定時(shí)器1溢出標(biāo)志位 TR1 定時(shí)器1運(yùn)行控制位 由軟件清零關(guān)閉定時(shí)器1,當(dāng)GATE=1,且INT1為高電平時(shí),TR1置1啟動(dòng)定時(shí)器1;當(dāng)GATE=0時(shí),TR1置1啟動(dòng)定時(shí)器1 IE1 外部中斷1請(qǐng)求標(biāo)志 當(dāng)IT0=1時(shí)為電平觸發(fā)方式,每個(gè)機(jī)器周期的S5P2采樣INT1引腳,若INT1腳為低電平。則置1,否則IE1清0. 當(dāng)IT1=0時(shí),INT1為跳變沿觸發(fā),當(dāng)?shù)谝粋(gè)機(jī)器周期采樣到INT1為低電平時(shí),則IE1置1,便是外部中斷1正向CPU申請(qǐng)中斷,當(dāng)CPU響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序時(shí),該位由硬件清0. IT1 外部中斷1觸發(fā)方式選擇位 IT1=0 為電平觸發(fā)模式,引腳INT1上低電平有效 IT1=1 為跳變沿觸發(fā)模式,引腳INT1上下降沿有效 IE0 同上 IT0 同上 計(jì)算定時(shí)器的初值問(wèn)題 52單片機(jī)內(nèi)部有12倍的分頻,假設(shè)采用的是12MHZ的晶振,那么12個(gè)時(shí)鐘周期為一個(gè)機(jī)器周期,那么此時(shí)機(jī)器周期就是1us。以定時(shí)器1,工作方式1為例。16位的計(jì)數(shù)器 溢出一次需要計(jì)數(shù)2^16-1個(gè)數(shù)=65536。約為65.5ms 如果要定時(shí)50ms的話,(65536-50000)/256 轉(zhuǎn)載到THX (65536-50000)/256 轉(zhuǎn)載到TLX 公式: THX=(65536-50000)/256 LTX =(65536-50000)/256 定時(shí)器的初始化過(guò)程如下 ①對(duì)TMOD賦值,以確定T0和T1的工作方式 ②計(jì)算初值,并將初值寫(xiě)入TH0,TL0,或TH1,TL1 ③中斷方式,則對(duì)IE賦值,開(kāi)放中斷 ④使TR0或TR1置位,啟動(dòng)定時(shí)器/計(jì)數(shù)器定時(shí)或計(jì)數(shù) 程序?qū)嵗?/div> #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { TMOD=0X01; //設(shè)置定時(shí)器工作方式1(M1M0為01) TH0(65536-45872)/256; //裝初值11.0592M晶振時(shí)為50ms數(shù)為45872 HL0=(65536-45872)%6; EA=1; //開(kāi)總中斷 ET0=1; //開(kāi)定時(shí)器0中斷 TR0=1; //啟動(dòng)定時(shí)器0 while(1); //程序停止在這等待中斷發(fā)生 } void T0_time() interrupt 1 { TH0(65536-45872)/256; //裝初值11.0592M晶振時(shí)為50ms數(shù)為45872 HL0=(65536-45872)%6; num++; if(num==20) { num=0; led1=~led1; } } 串行口控制寄存器SCON 串行口控制寄存器SCON如表12.2所示。 表12.2 串行口控制寄存器SCON (1)SM0/FE:當(dāng)PCON寄存器中的SMOD0 = 1時(shí),該位用于幀錯(cuò)誤檢測(cè),當(dāng)檢測(cè)到無(wú)效停止位時(shí),由硬件將該位置"1",該位必須由軟件清零。當(dāng)SMOD0 = 0時(shí),該位和SM1一起用來(lái)設(shè)置串行口通信的方式。 (2)SM1:SM1和SM0一起用來(lái)設(shè)置串行口通信的方式,如表12.3所示。 表12.3 串行口工作方式 SM0 | | | | | | | | | | | | | 8位數(shù)據(jù),10位異 步收發(fā),波特率可變 | (2SMOD / 32) × 定時(shí)器1溢出率 | | | | 9位數(shù)據(jù),11位 異步收發(fā) | | | | | 9位數(shù)據(jù),11位異步 收發(fā),波特率可變 | (2SMOD / 32) × 定時(shí)器1溢出率 |
關(guān)于串行口的4種工作方式和波特率的計(jì)算方法我們?cè)诤竺嬖敿?xì)說(shuō)明。 (3)SM2:允許方式2或方式3多機(jī)通信位。如果SM2 = 1,REN = 1,則從機(jī)只有接收到RB8位為1時(shí)才將中斷請(qǐng)求位RI置1,并向系統(tǒng)申請(qǐng)中斷。如果SM2 = 0,則無(wú)論RB8收到什么數(shù)據(jù)都會(huì)將RI位置1,請(qǐng)求中斷。通過(guò)設(shè)置SM2的值,可以區(qū)分主機(jī)和從機(jī),實(shí)現(xiàn)多機(jī)通信。在方式0時(shí),SM2必須為0,在方式1時(shí),只有收到有效停止位,就將RI置1。 (4)REN:允許串行口接收位。當(dāng)REN = 1時(shí),允許串行口接收數(shù)據(jù);當(dāng)REN = 0時(shí),禁止串行口接收數(shù)據(jù)。 (5)TB8:在方式2和方式3,TB8作為發(fā)送數(shù)據(jù)的第9位,其值由軟件修改。 (6)RB8:在方式2和方式3,RB8保存接收到的第9位數(shù)據(jù)。在方式0,不用RB8。在方式1,如果SM2 = 0,則RB8是接收到的停止位。 (7)TI:發(fā)送完成中斷標(biāo)志位。當(dāng)1幀數(shù)據(jù)發(fā)送完成時(shí),由硬件將該位置位,請(qǐng)求中斷,響應(yīng)中斷后,用軟件清零。 (8)RI:接收完成標(biāo)志位。當(dāng)接收完1幀數(shù)據(jù)時(shí),由硬件將該位置位,請(qǐng)求中斷,響應(yīng)中斷后,用軟件清零。
詳細(xì)信息下載word文檔
|