×
单片机 > 单片机程序设计 > 详情

C51联盟 —— 外部中断+定时器中断

发布时间:2024-05-20 发布时间:
|

/*****************************************************/

void Int0Init(); //开启外部中断INTR0

void Timer1Init(); //定时器中断 5毫秒@12.000MHz

/*****************************************************/

void main()

{

SEG = 0;

Int0Init();

Timer1Init();

while(1);

}

/*****************************************************/

void FlowLED() //流水灯

{

static u8 buff=0;

static u8 shift=0x01;

P2 = ~shift;

if(buff == 0)

{

shift <<= 1;

if(shift == 0x80)

buff = 1;

}

else

{

shift >>= 1;

if(shift == 0x01)

buff = 0;

}

}

/*****************************************************/

void Int0Init() //开启外部中断INTR0

{

IT0=1;

EX0=1;

EA=1;

}

/*****************************************************/

void Int0() interrupt 0 //外部中断0的中断函数

{

_nop_(); //延时消抖

if(KEY==0)

{

LED_Buff = ~LED_Buff;

}

}

/*****************************************************/

void Timer1Init() //定时器 @ 1毫秒 @ 12.000MHz

{

TMOD = 0X10;

TL1 = 0x78; //设置定时初值

TH1 = 0xEC; //设置定时初值

EA=1;

ET1=1;

TF1 = 0; //清除TF1标志

TR1 = 1; //定时器1开始计时

}

/*****************************************************/

void Timer1() interrupt 3 //定时器1中断

{

static u8 count=0;

TL1 = 0x78; //设置定时初值

TH1 = 0xEC; //设置定时初值

count++;

if(count>200 && LED_Buff == 1)

{

count = 0;

FlowLED();

}

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式