一、STC89C52单片机
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
二、代码实现

#include<reg52.h>
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned int counter = 0;
void Timer0_Init() {
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = 0x3C; // 50ms定时初值(12MHz晶振)
TL0 = 0xB0;
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器
}
void main()
{
ENLED = 0;
ADDR3 = 1;
ADDR2 = 2; // 注意:这里的ADDR2被赋值为2是错误的,应为0或1,因为sbit类型只能表示单个位
ADDR1 = 1;
ADDR0 = 0;
Timer0_Init();
LED = 0; // 初始状态,LED关闭
while(1);
}
void Timer0_ISR() interrupt 1 {
TH0 = 0x3C; // 定时器0中断服务程序,重装初值以维持50ms定时
TL0 = 0xB0;
if (++counter >= 20) { // 每50ms增加一次计数器,达到20次即1秒时翻转LED状态
LED = ~LED; // 翻转LED状态,实现LED闪烁
counter = 0; // 重置计数器
}
}
