日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]52單片機(jī)的大家都熟悉,可是其中的Timer2很少有人去用,書上和網(wǎng)上鮮有資料,這里轉(zhuǎn)載一篇文章,初步了解一下他的應(yīng)用/***********************************************************程序功能:52系列單片機(jī)定時(shí)器計(jì)

52單片機(jī)的大家都熟悉,可是其中的Timer2很少有人去用,書上和網(wǎng)上鮮有資料,這里轉(zhuǎn)載一篇文章,初步了解一下他的應(yīng)用


/***********************************************************

程序功能:52系列單片機(jī)定時(shí)器計(jì)數(shù)器2使用

程序設(shè)計(jì):燕山大學(xué)魯信瓊

晶振選擇:24MHz,如果晶振不匹配,請修改延時(shí)函數(shù)參數(shù);P2^6口接數(shù)碼管段選控制位;P2^7口接數(shù)碼管位選控制位;P1^7口作為測試指示燈

本實(shí)驗(yàn)注意事項(xiàng):

1.定時(shí)器2的中斷使能為IE^6位,也就是ET2;中斷服務(wù)程序標(biāo)號為5。

2.定時(shí)器2工作在16為自動重裝模式下,不需要在中斷服務(wù)程序中重新賦初值,在程序初始化的時(shí)候我們應(yīng)該給RCAP2L和RCAP2H賦值,TH2和TL2將會在

中斷產(chǎn)生時(shí)自動使TH2=RCAP2H,TL2=RCAP2L。

3.定時(shí)器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)程序中將其清零,為了使定時(shí)盡量準(zhǔn)確,我們常在終端服務(wù)程序中第一步就使TF2=0。

4.使定時(shí)器2產(chǎn)生中斷的有兩個(gè)中斷源,如果EXEN2(定時(shí)器2外部使能標(biāo)志)置1的話,使定時(shí)器2進(jìn)入中斷的有可能是定時(shí)器2計(jì)數(shù)溢出,也可能是捕獲

到T2EX(單片機(jī)P1^1口)有負(fù)跳變,所以需要在中斷服務(wù)程序中判斷EXF2是否為1。



***********************************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineLED_DATAP0

sbitDULA=P2^6;

sbitWELA=P2^7;

sbitLED=P1^7;

uchartimer2_ctr,num;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0};

//0123456789ABCDEF-

//24MHz晶振延時(shí)x毫秒函數(shù)

voiddelay_ms(uintxms)

{

uintx,y;

for(x=xms;x>0;x--)

for(y=248;y>0;y--);

}

//初始化主函數(shù)

voidinit_main()

{

DULA=0;//關(guān)閉數(shù)碼管顯示

WELA=0;

RCAP2H=(0xFFFF-50000)/256;

RCAP2L=(0xFFFF-50000)%256;//24MHz晶振下定時(shí)25ms,自動重裝

TH2=RCAP2H;

TL2=RCAP2L;//定時(shí)器2賦初值

T2CON=0;//配置定時(shí)器2控制寄存器,這里其實(shí)不用配置,T2CON上電默認(rèn)就是0,這里賦值只是為了演示這個(gè)寄存器的配置

T2MOD=0;//配置定時(shí)器2工作模式寄存器,這里其實(shí)不用配置,T2MOD上電默認(rèn)就是0,這里賦值只是為了演示這個(gè)寄存器的配置

IE=0xA0;//10100000開總中斷,開外定時(shí)器2中斷,可按位操作:EA=1;ET2=1;

TR2=1;//啟動定時(shí)器2

}

//數(shù)碼管顯示3位數(shù):0-255

voiddisplay(ucharnum)

{

uchargw,sw,bw;

bw=num/100;

sw=num%100/10;

gw=num%10;

LED_DATA=0XFE;//11111110

WELA=1;

_nop_();_nop_();

WELA=0;

LED_DATA=table[bw];

DULA=1;

_nop_();_nop_();

DULA=0;

delay_ms(3);

LED_DATA=0XFD;//11111101

WELA=1;

_nop_();_nop_();

WELA=0;

LED_DATA=table[sw];

DULA=1;

_nop_();_nop_();

DULA=0;

delay_ms(3);

LED_DATA=0XFB;//11111011

WELA=1;

_nop_();_nop_();

WELA=0;

LED_DATA=table[gw];

DULA=1;

_nop_();_nop_();

DULA=0;

delay_ms(3);

}

voidmain()

{

init_main();

while(1)

{

display(num);

}

}

voidtimer2()interrupt5

{

TF2=0;//!!!注意!!!定時(shí)器2必須由軟件對溢出標(biāo)志位清零,硬件不能清零,這里與定時(shí)器0和定時(shí)器1不同!!!

timer2_ctr++;

if(timer2_ctr>=40)//定時(shí)25ms×40=1000ms即1秒鐘,這里模擬一個(gè)60秒秒表

{

timer2_ctr=0;

LED=~LED;

num++;

if(num>=60)

{

num=0;

}

}

}



大家可以編譯下載試試哦,我試過,可以運(yùn)行,不過是12MHz的晶振。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉