最近在做一个项目,用的51单片机,很久没用51单片机了,一用就出问题了,将一个旋转编码开关的函数key_deal()放在大循环里面时,左旋和右旋都能在显示屏上正常显示,按键按一下,显示数字加1,显示正常;但是放在中断里面调用函数时,左旋和右旋加1是正常的,但是按键按一下后,就一直加1,为什么同一个函数在大循环里面执行和在中断里面执行的结果不一样?求高手和遇到过类似问题的人帮忙解答...谢谢..还有一个,用这个void timer0() interrupt 1和这个void Timer0_isr(void) interrupt 1 using 1效果也不一样,这是为什么? |
共3条
1/1 1 跳转至页
关于在定时器中断里面调用函数的问题
![](http://uphotos.eepw.com.cn/1373587499/thumb/avatar.jpg)
只看楼主 1楼
关键词: 定时器 中断 函数
![](http://uphotos.eepw.com.cn/1373587499/thumb/avatar.jpg)
3楼
中断函数
void Timer0_isr(void) interrupt 1
{TH0=(65536-50000)/256; //重新赋值
TL0=(65536-50000)%256;
key_deal();
}
中断调用的代码
void key_deal()
{
unsigned char key;
key=GetKey();
if(key==Key_Left)
{
key_num_one++;
key=Key_off;
if(key_num_one>=10) key_num_one=0;
}
if(key==Key_Right)
{
key_num_one--;
key=Key_off;
if(key_num_one<0) key_num_one=9;
}
if(key==Key_Down)
{
key_num_two++;
key=Key_off;
}
}
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |