定時器中斷實現LED閃爍
阿新 • • 發佈:2019-02-12
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^0;
void Timer0Init()
{
//對TMOD進行賦值,選擇T0/T1
//TMOD 8位 低4位用於T0,高4位用於T1 : GATE C/T(C計數器高位有效,T定時器低位有效) M1M2(工作方式 : 00 01 10 11)
//或運算|防止其他位被影響
TMOD|=0x01;
//計算初值 1ms=1000us的初值 :2的16次方(65535)-1000+1 = 64536 = FC18H (工具)
TH0=0XFC;
TL0=0X18;
//定時器0使能
ET0=1;
//開啟總中斷
EA=1;
//TR0/TR1是T0/T1的執行控制位 TR0置1,T0開始工作,置1則停止工作
TR0=1;
}
/*
void Timer0Init()
{
//對TMOD進行賦值,選擇T0/T1
//TMOD 8位 低4位用於T0,高4位用於T1 : GATE C/T(C計數器高位有效,T定時器低位有效) M1M2(工作方式 : 00 01 10 11)
//或運算|防止其他位被影響
TMOD|=0x10;
//計算初值 1ms=1000us的初值 :2的16次方(65535)-1000+1 = 64536 = FC18H (工具)
TH1=0XFC;
TL1=0X18;
//定時器1使能
ET1=1;
//開啟總中斷
EA=1;
//TR0/TR1是T0/T1的執行控制位 TR0置1,T0開始工作,置1則停止工作
TR1=1;
}
*/
void main()
{
Timer0Init();
while(1);
}
//中斷函式
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC;
TL0=0X18;
i++;
if(i == 1000) //1s
{
i = 0;
//將P2^0置反
led=~led;
}
}
/*
void Timer1() interrupt 3
{
static u16 i;
TH1=0xFC;
TL1=0x18;
i++;
if(1 == 1000) //1s
{
i = 0;
led=~led;
}
} */