主函数中没有调用led可是怎么能实现led灯亮灭呢?我看不懂中断什么的,求大神解释下啊,谢谢!

#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用来确保程序一直在运行
之后就是定时器的事了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-06
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00; //重新赋值
TL0=0x00;
LED=~LED; //指示灯反相,可以看到闪烁
}
定时器0每中断一次,就回执行LED=~LED; 一次。就是LED闪烁了。
定时器的初始化在void Init_Timer0(void)函数里完成。
主函数就让它一直在那里循环。。。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网