AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。
AT89S52主要性能:
1、與MCS-51單片機(jī)產(chǎn)品兼容;
2、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器;
3、1000次擦寫周期;
4、全靜態(tài)操作:0Hz-33MHz;
5、三級(jí)加密程序存儲(chǔ)器;
6、32個(gè)可編程I/O口線;
7、三個(gè)16位定時(shí)器/計(jì)數(shù)器;
8、6個(gè)中斷源;
9、全雙工UART串行通道;
10、低功耗空閑和掉電模式;
11、掉電后中斷可喚醒;
12、看門狗定時(shí)器;
13、雙數(shù)據(jù)指針;
14、掉電標(biāo)識(shí)符。
? ? ? ? AT89S52單片機(jī)組成結(jié)構(gòu):
AT89S52引腳結(jié)構(gòu):
AT89S52 具有PDIP、PLCC、TQFP3 種封裝形式以適用于不同的使用場合。各封裝引腳定義如下圖所示。
AT89S52各引腳的功能:
下面簡單介紹AT89S52各引腳的功能,更多信息請查閱Atmel公司的技術(shù)文檔。 VCC:電源。 GND:地。
P0 口:P0 口是一個(gè)8 位漏極開路的雙向I/O 口。作為輸出口,每位能驅(qū)動(dòng)8 個(gè)TTL邏輯電平。對P0 端口寫“1”時(shí),引腳用做高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0 口也被作為低8 位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0 具有內(nèi)部上拉電阻。在Flash編程時(shí),P0 口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。在程序校驗(yàn)時(shí),需要外部上拉電阻。
P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TT
邏輯電平。當(dāng)對P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。當(dāng)作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此 外,P1.0 和P1.2 分別作為定時(shí)器/計(jì)數(shù)器2 的外部計(jì)數(shù)輸入(P1.0/T2)和定時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如表1-1 所示。在Flash編程和校驗(yàn)時(shí),P1口接收低8 位地址字節(jié)。
P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TT邏輯電平。對P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。當(dāng)作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問
表1口部分管腳的第二功能
外部程序存儲(chǔ)器或用16 位地址讀取外部數(shù)據(jù)存儲(chǔ)器(如執(zhí)行MOVX @DPTR)時(shí),P2 口送出高8 位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8 位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在Flash編程和校驗(yàn)時(shí),P2 口也接收高8位地址字節(jié)和一些控制信號(hào)。 P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TT
邏輯電平。對P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。當(dāng)作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3 口也作為AT89S52 特殊功能(第二功能)使用,如表1-2所示。在Flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。
表2 P3口部分管腳的第二功能
RST: 復(fù)位輸入。在晶振工作時(shí),RST腳持續(xù)兩個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位。看門狗計(jì)時(shí)完成后,RST 腳輸出96 個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO 位可以使此功能無效。在DISRTO 默認(rèn)狀態(tài)下,復(fù)位高電平有效。
ALE/PROG:地址鎖存控制信號(hào)(ALE)在訪問外部程序存儲(chǔ)器時(shí),鎖存低8 位地址的輸出脈沖。在Flash編程時(shí),此引腳(PROG)也用做編程輸入脈沖。 在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE 脈沖將會(huì)跳過。如果需要,通過將地址為8EH的SFR的第0 位置“1”,ALE 操作將無效。這一位置“1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時(shí)有效。否則,ALE 將被微弱拉高。這個(gè)ALE 使能標(biāo)志位(地址為8EH的SFR的第0 位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。
PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN 在每個(gè)機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。
EA/VPP:訪問外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H 到FFFFH 的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在Flash編程期間,EA也接收12伏VPP電壓。
XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。 XTAL2:振蕩器反相放大器的輸出端。
AT89S51單片機(jī)看門狗定時(shí)器的使用
T89S51看門狗定時(shí)器由一個(gè)14位定時(shí)器及WDTRST(地址為6AH)寄存器構(gòu)成。開啟看門狗定時(shí)器后,14位定時(shí)器會(huì)自動(dòng)計(jì)數(shù),每16384(214)個(gè)機(jī)器周期溢出一次,并產(chǎn)生一個(gè)高電平復(fù)位信號(hào),使系統(tǒng)復(fù)位。對于12MHZ的時(shí)鐘脈沖每16384us(約0.016s)產(chǎn)生一個(gè)復(fù)位信號(hào)。
如果啟動(dòng)看門狗定時(shí)器,當(dāng)系統(tǒng)超過0.016s沒有動(dòng)作(程序跑飛),看門狗定時(shí)器自動(dòng)復(fù)位,讓系統(tǒng)歸復(fù)于正常運(yùn)作狀態(tài)。為了系統(tǒng)既能正常工作又不會(huì)出現(xiàn)死機(jī)(程序跑飛),在0.016s內(nèi)必須喂狗一次,即對看門狗定時(shí)器進(jìn)行復(fù)位,看門狗的啟動(dòng)和復(fù)位的方法是一樣的。
在匯編語言中啟動(dòng)或復(fù)位看門狗定時(shí)器的命令如下。
MOV 6AH, #1EH
MOV 6AH, #0E1H
若要在C語言中使用看門狗定時(shí)器功能,由于reg51.h中并沒有聲明WDTRST寄存器,所以必須先聲明WDTRST寄存器。
Sfr WDTRST=0xa6;
進(jìn)行聲明以后可以用一下命令啟用或復(fù)位看門狗定時(shí)器。
WDTRST=0x1e;
WDTRST=0xe1;
下面用一個(gè)C語言進(jìn)行說明
#include 《reg51.h》
Sfr WDTRST=0xa6;
Main()
{ ……;
WDTRST=0x1e;
WDTRST=0xe1;
While(1)
{ WDTRST=0x1e;
WDTRST=0xe1;
……;
……; 這部分執(zhí)行時(shí)間必須少于0.016s } }
以上程序中系統(tǒng)在做一個(gè)無限循環(huán)的動(dòng)作,通過看門狗定時(shí)器可以防止程序在執(zhí)行過程中跑飛。因?yàn)橹灰绦蛞慌艹鰓hile()循環(huán),看門狗定時(shí)器溢出以后得不到復(fù)位,所以自動(dòng)復(fù)位系統(tǒng),讓程序從mian()開始重新運(yùn)行。
但是在C語言應(yīng)用看門狗定時(shí)器也特別小心,一定要在看門狗定時(shí)器啟動(dòng)后的0.016s內(nèi)喂一次狗。
注:在匯編語言中每條指令的執(zhí)行時(shí)間都是可以準(zhǔn)確算出來,下面是一個(gè)匯編語言編寫的8路led向左移程序應(yīng)用看門狗定時(shí)器的實(shí)例。
ORG 00H 1 1us
MOV 0A6H,#1EH 2 1us
MOV 0A6H,#0E1H 3 1us
START: MOV A,#0FEH 4 1us
LOOP: MOV P2,A 5 1us
CALL DELAY 6 2us
RL A 7 2us
JMP LOOP 8 2us
DELAY: MOV R7,#200 9 1us
DV: MOV R6,#250 10 1us
DJNZ R6,$ 11 2us
MOV 0A6H,#1EH 2 1us
MOV 0A6H,#0E1H 3 1us
DJNZ R7,DV 12 2us
RET 13 2us
END 14 2us
在程序的每個(gè)行標(biāo)號(hào)后面是12MHZ時(shí)鐘脈沖下的指令執(zhí)行時(shí)間,為了讓系統(tǒng)正常工作且不死機(jī)將看門狗定時(shí)器啟動(dòng)指令放在1和2之間,將看門狗定時(shí)器復(fù)位指令放在11和12之間。
現(xiàn)在一起通過執(zhí)行時(shí)間來計(jì)算看門狗定時(shí)器復(fù)位指令放在那里比較合適。
程序執(zhí)行順序:1 2 3 4 5 6 9 10 11 12 9 10 ……
運(yùn)行時(shí)間: 1us 1 1 1 1 2 1 1 2*250 us (1+250*2+2)*199
程序運(yùn)行到11的時(shí)候用的時(shí)間是2*250+6=506us《16384us
程序運(yùn)行到12的時(shí)候用的時(shí)間是506+(1+250*2+2)*199=10063us》16384us
從比較結(jié)果可以看出,看門狗定時(shí)器的喂狗指令必須放在11和12之間。可以想一下放在12和13之間會(huì)是什么效果。
評論
查看更多