作业帮 > 综合 > 作业

主函数中没有调用led可是怎么能实现led灯亮灭呢?我看不懂中断什么的,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 16:23:48
主函数中没有调用led可是怎么能实现led灯亮灭呢?我看不懂中断什么的,
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED=P1^2; //定义LED端口
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01;\x05 //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响\x05\x05
TH0=0x00;\x05 //给定初值,这里使用定时器最大值从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;\x05\x05 //重新赋值
TL0=0x00;
LED=~LED; //指示灯反相,可以看到闪烁
}
就是说
main函数里面Init_timer0()对定时器初始化了
就是每计数65535时
会进入中断函数
中断函数里面
对led灯进行控制
所以之后只要用while(1)使程序一直运行
定时器就会按照自身的规则
计数——中断——计数——中断运行下去了
再问: 哦哦,豁然开朗啊,那你说我现在理解的对不对,就是先执行主函数的Init_timer0()定时器初始化子程序,然后TH0与TL0开始累加,当家到65535时马上调用定时中断子程序,然后灯就亮灭同时给TL0,TH0清0,然后while语句实现循环?对吗大神?
再答: 对 while用来确保程序一直在运行 之后就是定时器的事了