用定時(shí)器進(jìn)行計(jì)數(shù)的一個(gè)簡(jiǎn)單例子
/*
注:該程序主要是如何運(yùn)用定時(shí)器進(jìn)行計(jì)數(shù),體現(xiàn)模塊化的子函數(shù),是一個(gè)比較淺顯的程序
*/
#includereg52.h> //頭文件
#define uchar unsigned char //宏定義
#define uint unsigned int
uchar count; //定義全局變量
void display_led() //led顯示子函數(shù)
{
if(count==20) //每隔1S發(fā)生變化(晶振為:12MHZ)
{
count=0; //計(jì)數(shù)清零,以便下次計(jì)數(shù)
P2=~P2; //P2的值取反
P2=P21; //P2的值左移
P2=~P2;
if(P2==0xff) //如果最后一個(gè)LED亮后,
P2=0xfe; //則第一個(gè)LED亮
}
}
void init() //初始化子函數(shù)
{
EA=1; //打開(kāi)總中斷
ET0=1; //打開(kāi)定時(shí)器中斷
TR0=1; //啟動(dòng)定時(shí)器
TMOD=0x01; //T0工作方式1,16位計(jì)數(shù)
TH0=(65536-50000)/256;//設(shè)置定時(shí)器的初始值
TL0=(65536-50000)%256;
P2=0xfe; //給P2口賦初始值
while(1)
{
display_led(); //調(diào)用LED顯示子函數(shù)
}
}
void main() //主函數(shù)
{
init(); //調(diào)用初始化子函數(shù)
}
void delay() interrupt 1 //定時(shí)中斷子函數(shù)
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++; //計(jì)數(shù)變量自加1
}
評(píng)論