使用定时器中断点灯

实验内容:
使用Keil4编写程序利用AT89C52芯片上的定时器0 工作方式2,使连接在P1.0口的小灯实现0.5秒间隔的亮灭翻转,并利用Proteus进行仿真验证。

仿真图
在这里插入图片描述
源代码

#include <reg52.h>
//#include <at89x52.h>	两个头文件二选一

#define uchar unsigned char		//宏定义
#define uint  unsigned int

uint count;
sbit led=P1^0;

/******************************************************
*函数名:timer0_init
*功能:定时器0初始化
*参数:无
*******************************************************/
void timer0_init()
{
        TMOD &= 0xF0;	 //设置为工作方式2
		TMOD |= 0x02;

		TH0 = 256-250;	//设置自动重装载值为6
		TL0 = 256-250;  //计数器从6开始计数
		
        ET0=1;           //开定时器2中断
        TR0=1;           //启动定时器2
}

/******************************************************
*函数名:main
*功能:主程序入口
*参数:无
*******************************************************/
void main()
{
        timer0_init(); //定时器T2初始化
		EA=1;	//开启总中断
        while(1){	//死循环 
          ;
        }                  
}

/******************************************************
*函数名:timer0_ISR
*功能:中断函数入口
*参数:无
*******************************************************/
void timer0_ISR() interrupt 1
{
        count++;        
        if(count==2000)         //250us*2000=500ms=0.5秒中断一次
        {
                count=0;
                led=~led;	//翻转小灯
        }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值