#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED=P1^2; //定义LED端口
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
Init_Timer0();
while(1);
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00; //重新赋值
TL0=0x00;
LED=~LED; //指示灯反相,可以看到闪烁
}
main函数里面Init_timer0()对定时器初始化了
就是每计数65535时
会进入中断函数
中断函数里面
对led灯进行控制
所以之后只要用while(1)使程序一直运行
定时器就会按照自身的规则
计数——中断——计数——中断运行下去了追问
哦哦,豁然开朗啊,那你说我现在理解的对不对,就是先执行主函数的Init_timer0()定时器初始化子程序,然后TH0与TL0开始累加,当家到65535时马上调用定时中断子程序,然后灯就亮灭同时给TL0,TH0清0,然后while语句实现循环?对吗大神?
追答对
while用来确保程序一直在运行
之后就是定时器的事了
{
TH0=0x00; //重新赋值
TL0=0x00;
LED=~LED; //指示灯反相,可以看到闪烁
}
定时器0每中断一次,就回执行LED=~LED; 一次。就是LED闪烁了。
定时器的初始化在void Init_Timer0(void)函数里完成。
主函数就让它一直在那里循环。。。