#include <REGX52.H>
#include <INTRINS.H>
typedef unsigned int u16; // 对系统默认数据类型进行重定义
// 定义LED1管脚
sbit LED1 = P2 ^ 0;
/*
定时器中断模式1初始化 1ms 触发
t:0 定时器0,1 定时器1
*/
void timeInterruptModeOneInit(bit t)
{
// 选择为定时器0模式,工作方式1 |为或运算符 等同于 0x00000000 | 0x00000001
if(t==0){
TMOD |= 0X01;
ET0 = 1; // 打开定时器0中断允许
TR0 = 1; // 打开定时器
}else{
TMOD |= 0X10;
ET1 = 1; // 打开定时器1中断允许
TR1 = 1; // 打开定时器
}
// TH0 高8位 TL0 低8位
// 0xFC=1111 1100, 给定时器赋初值,定时1ms 12HMZ的晶振一个机器周期为12*(1/12)us,
// 1ms=1000us,则1111 1111=65535,初始值65535-1000+1=64536=0xFC18=1111 1100 0001 1000 经过1000个计数则触发中断
TH0 = 0XFC;
TL0 = 0X18;
EA=1;//打开总中断
}
void main()
{
timeInterruptModeOneInit(0); // 定时器0中断配置
while (1) {
}
}
void time0() interrupt 1 // 定时器0中断函数
{
static u16 i; // 定义静态变量i
TH0 = 0XFC; // 给定时器赋初值,定时1ms
TL0 = 0X18;
i++;
if (i == 1000) {
i = 0;
LED1 = !LED1;
}
}