📄 timer_interrupt.c
字号:
/****************************************************************************************
* 定时器中断
* 文 件: timer_interrupt.c
* 编 写 人: Hawking.
* 描 述:将P0口接到并排的led灯上。
该程序帮助理解定时器以及中断的概念
从实验现象知道,定时器中断是从主函数触发到中断子程序再回到主函数断点来回运行的,
一定时间的内部定时器就是多次来回的定时器中断。
* 编写时间: 2013.07.27
* 版 本:1.0
*************************************************************************************/
#include<reg52.h>
#include<intrins.h>
void delay(int z); //声明延时函数
void ledOn(); //声明跑马灯函数
void main()
{
TMOD=0x00; //设置为内部定时器、软件启动、模式0
TL0=0x00; //设置计数值初值低8位
TH0=0x00; //设置计数值初值高8位
EA=1; //打开总中断
ET0=1; //打开定时器中断T0
TR0=1; //启动定时i去T0
while(1) //无穷循环,等待中断,
{
P0=0xff; //从中断服务函数里会跳回这里面的断点再等待中断直到3中断m=600次
delay(200);
P0=0x00;
delay(200);
}
}
/*************************中断服务函数************************************/
void led() interrupt 1 //计时时间到时就进入中断服务函数
{ unsigned int m,n;
TL0=0x00; //重装初值,重新计时。因为要通过中断m次来延时,重装初值是必须的,才能再次计时
TH0=0x00; //
m++; //自增,若未达到条件则跳出中断,回到主函数的断点
if(m==300) //当m增到300也就是中断了300次时运行跑马灯程序,跑马灯结束后,回到主程序,
{ //由于定时器已经溢出,所以不会计时,不会触发中断,后面一直执行主程序
P0=0xfe;
for(n=0;n<50;n++)
{
P0=_crol_(P0,1);
delay(100);
}
}
}
void delay(int z) //延时函数
{
int i,j;
for(i=z;i>0;i--)
for(j=200;j>0;j--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -