1. 程式人生 > >定時器中斷實現LED閃爍

定時器中斷實現LED閃爍

#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; } } */