单片机中通过中断的方式来调用定时器。
具体的调用方式可以参考通过如下程序:
程序功能:利用定时器进行定时,实现每秒中led闪烁一次
#include
sbit led = P0^0;
unsigned int num;
void main(void)
{
TMOD = 0x00; // 工作方式0
TH0 = (8192 - 5000) / 32; // 12M晶振下定时5ms
TL0 = (8192 - 5000) % 32;
EA = 1; // 开总中断
ET0 = 1; // 开定时器中断
TR0 = 1; // 启动定时器
while(1)
{
if(num == 200) // 定时1秒钟到
{
num = 0; // 计数器清零
led = ~led; // led灯取反,实现1秒闪烁一次
}
}
}
void timer() interrupt 1 // 定时器1工作与方式0
{
TH0 = (8192 - 5000) / 32; // 重装初值
TL0 = (8192 - 5000) % 32;
num++; // 计数器加1
}
count++到30秒触发一个函数就行了
void init_time()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init_time();
while(1);
}
void time_0()interrupt 1 //中断函数放主函数后面就行,不需要声明
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;//假设这个定时为10毫秒,我就不计算了
coint++; //全局变量,别忘了定义
if(coint==3000)//10ms*3000=30s
{
LED=~LED;//这是要执行的动作,以灯亮灭为例;
coint=0;计数器清零,重新开始计数;
}
}