您的位置:首页 > 其它

51单片机定时器实现LED闪烁

2018-06-10 13:20 786 查看

要启用一个定时器,先要开启定时器,然后产生中断

系统中断:

 

初始化程序应完成如下工作:

对TMOD赋值,以确定T0和T1的工作方式。

计算初值,并将其写入TH0、TL0或TH1、TL1。

中断方式时,则对EA赋值,开放定时器中断。

使TR0或TR1置位,启动定时/计数器定时或计数。

 

#include <reg52.h>
/************ 定时器+中断控制led翻转 ***********/

sbit LED = P0^0;

typedef unsigned int u16;
typedef unsigned char u8;

void timer_init(){
TMOD |= 0x01;  //定时器工作方式1,启用T0定时器, GATE位为0,用TCON的TR0控制T0定时器的启动

//设置定时器的初始计数值
//计算方法
//假设定时器为1ms,一个机器周期为 1/单片机的晶振频率  即: 1/12M = 1us
//而1个机器周期 = 12个时钟周期 所以: n x 机器周期 = 1ms ===> n x 1us = 1ms
//所以n = 1000,也就是经过1000个机器周期,定时器要溢出(从0开始计数)
//所以定时器的初始值为65535 - 1000 + 1 = 64536 ===> 0xFC18
TH0 = 0xFC;
TL0 = 0x18;

EA = 1;  //总中断开关
ET0 = 1; //T0中断

TR0 = 1;//启动T0定时器
}

void trigger_timer0() interrupt 1{
static u16 i = 0;
TH0 = 0xFC;
TL0 = 0x18;
i++;
if( i == 1000 ) { //1秒
i = 0;
LED = ~LED;
}
}

void main(){
timer_init();
while( 1 );
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: