此帖出自嵌入式系统论坛
最新回复
定时器1作为波特率发生器,是硬件控制的,不会被任何软件处理的中断打断。
需要做延时处理的时候,比较好的方法是“时间片”执行。以下是部分代码,不完善,只是用来描述思想,其余请自行补足。
unsigned char INT0_flag = 0; //INT0有中断产生的标志,全局变量
unsigned char T0_counts = 0; //Timer0的“时间片”执行次数
unsigned char INT0_TRUE = 0; //INT0产生的中断是否有效(经过去抖之后,判断按键是否有效)
interrupt int0(void)
{
INT0_flag = 1; //置位
}
interrupt T0(void) //timer0中断,假设设为了1ms一次
{
if( (0 < INT0_flag) && (10>T0_counts) ) //如果产生了INT0中断,并且没有延时到10mS
{
T0_counts++; //继续延时
}
else if( (0 < INT0_flag) && (10==T0_counts)) //如果产生了INT0中断,并且延时到了10mS
{
if( 1 == pin_int0 ) //延时到了后,发现INT0的pin脚竟然是1-高电平,说明是抖动,那么就认为不是真正有效的中断了
{
INT0_flag = 0; //此次无效,等下次吧
}
else
{
INT0_TRUE = 1; //此次按键有效!
}
}
}
void main(void)
{
//......
while(1)
{
if( 1 == INT0_TRUE ) //如果按键有效,则做一些处理
{
}
}
}
详情
回复
发表于 2008-12-23 22:06
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
| |
|
|
| |
|
|
| |
|
|
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
此帖出自嵌入式系统论坛
| ||
|
||
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
| |
|
|
此帖出自嵌入式系统论坛
| ||
|
||
EEWorld Datasheet 技术支持