51单片机定时/计数器C语言应用实例
扫描二维码
随时随地手机看文章
/************
设置T0为16位定时器,定时50ms,系统采用12MHz晶振。
************/
#include
voiDMAin()
{
TMOD=0x01;//设定T0的长度和状态:16位定时
TH0=(65536-50000)/256;//50ms定时,计数器的初值高8位
TL0=(65536-50000)%256;//50ms定时,计数器的初值低8位
EA=1;//系统开放中断
ET0=1;//允许T0中断
TR0=1;//启动T0
for(;;);//等待T0中断产生
}
void T0_ISR( ) interrupt 1
{
实现用户功能目标代码
/*恢复计数器初值*/
TH0=(65536-50000)/256; //50ms 定时,计数器的初值高8 位
TL0=(65536-50000)%256; //50ms 定时,计数器的初值低8 位
}
说明:
void:中断子程序返回值类型
T0_ISR( ):T0 子程序名
interrupt:中断子程序标识关键字,不可遗漏或写错
1:定时/计数器中断为1 号中断
例:利用T0 定时器实现P1.0 输出周期为100ms 的方波。系统采用12MHz 晶振。
源程序:
#include
sbit P10=P1^0;
void main( )
{
TMOD=0x01; //设定T0 的长度和状态:16 位定时
TH0=(65536-50000)/256; //50ms 定时,计数器的初值高8 位
TL0=(65536-50000)%256; //50ms 定时,计数器的初值低8 位
EA=1; //系统开放中断
ET0=1; //允许T0 中断
TR0=1; //启动T0
for(;;); // 等待T0 中断产生
}
void T0_ISR( ) interrupt 1
{
P10=~P10; //P1.0 每50ms 取反一次
TH0=(65536-50000)/256; //恢复计数器初值
TL0=(65536-50000)%256; //恢复计数器初值
}