80C51定时/计数器的应用之中断方式T0实现LED灯闪烁

前言:TF0是51单片机定时器T0的溢出中断标志位。当T0被允许计数后,T0从初值开始按机器周期或者外部引脚输入的脉冲进行加1计数。当计数到T0最高位产生溢出时,置“1”TF0,并向CPU请求中断。当CPU响应该中断时,将由硬件自动清“0”TF0。当然,你也可以用“位操作指令”对TF0进行置“1”或清“0”操作。

本次实验采用定时器中断,用的是第二种 T0
有三个开关,分别是ET0 EA,在初始化时可以设置为1,即默认打开
定时器TF0是定时器溢出时的标志位,当TF0=1时将自动触发中断函数1,执行完后自动硬件TF0清零。
在这里插入图片描述
在这里插入图片描述

贴上代码

void Timer0Init(void)		//50毫秒@12.000MHz
{
	//AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0xB0;		//设置定时初值,设置定时器初值(65536-50000)%256;
	TH0 = 0x3C;		//设置定时初值,设置定时器初值(65536-50000)/256;
	TF0 = 0;		//第一次初始化时清除TF0标志,达到50ms时会TF0=1,表示溢出
	TR0 = 1;		//定时器0开始计时
	
	//cpu在每个机器周期都会查询标志位TF0,所以下面提前打开中断,一旦TF0=1,则会申请中断
	ET0=1; //打开定时器中断T0,看图
	EA=1;  //打开定时器中断T0,看图
}

/**********************************************************
1、中断服务函数一定是一个没有返回值的函数
2、中断服务函数一定是个没有参数的函数
3、中断服务函数函数名后跟关键字 interrupt
4、interrupt n的取值从0~4 分别代表5个中断源 计算公式为 8*n +0003H
   分别为 0 0003H INT0
          1 000BH T0
		  2 0013H INT1
		  3 001BH T1
		  4 0023H ES
5、中断服务函数不能被主程序或其他程序调用
6、n 后面跟 using m (0-3)工作寄存器组
***********************************************************/

void timer0_ISP(void) interrupt 1  //1 000BH T0中断
{
	TR0=0;   //进入中断开始就关定时器
	TL0 = 0xB0;		//设置定时初值,设置定时器初值(65536-50000)%256;
	TH0 = 0x3C;		//设置定时初值,设置定时器初值(65536-50000)/256;
	LED_1=~LED_1;  //LED没进一次中断就改变一次状态,这样就会闪烁
	TR0=1;  //出中断就开定时器,节省一点点时间,避免误差
} 


好好看注释!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值