定时器的应用---中断方式---让8个LED灯,左右各4个来回亮
/***************************
中断方式 是主程序专注于其他的事情,
待定时器中断时才执行中断子程序。
*****************************/
#include<reg51.h>
#define LED P1
#define count 50000 // 50000 * 1us = 0.05s 机器周期1us 12MH晶振
#define TH_M1 (65536-count)/256 //TMOD 寄存器 方式 1 , 2^8 = 256 THX跟TLX都是8位 除以256取商赋值高4位
#define TL_M1 (65536-count)%256 //将余数赋值低4位
int Count=0; //计算TO中断次数
main()
{
IE = 0x82; // EA=1, 1000 0010 1000开启总中断 0010 T0中断
TMOD = 0x01; // 方式1
TH0 = TH_M1; // 设置T0计数值高8位,
TL0 = TL_M1; // 低8位
TR0 = 1; // 启动 T0
LED = 0xf0; // 1111 ,0000 右边亮 共阳极
while(1); // 无穷循环
}
void timer0(void)interrupt 1 //定时器Timer0 中断 1
{
TH0 = TH_M1; //设置TO 高4位
TL0 = TH_M1; //低4位
if(++ Count==5) //已经中断5次
{
Count=0; //中断次数归0
LED^=0xff; // LED = LED ^ 0XFF ^ 异或 1111 0000 ^ 1111 1111 = 0000 1111 LED取反
}
}
IE寄存器