实验实现: led灯循环点亮 1 秒, 熄灭 1 秒。 使用单片机内部定时器进行准确延时。
实现代码如下:
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
/****************************************************************
* 函 数 名 : Timer0Init
* 函数功能 : 定时器 0 初始化
*****************************************************************/
void Timer0Init()
{
TMOD|=0X01;//选择为定时器 0 模式, 工作方式 1, 仅用 TR0 打开启动。
TH0=0XFC; //给定时器赋初值, 定时 1ms
TL0=0X18;
ET0=1;//打开定时器 0 中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
Timer0Init(); //定时器 0 初始化
while(1);
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //给定时器赋初值, 定时 1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
Proteus仿真电路图