概述
一、问题
前段时间碰到个问题:STC8 按键接P32外部中断脚INT0(边沿或下降沿),用外部上拉电阻本来很正常的,后来想改用内部上拉4.1K省个电阻,结果每次上电INT0误触发+1次!理应等同,已验证内部上拉电阻设置成功,已排除其他干扰,百思不得其解!决定必须一查到底!
二、之前代码
void BOOT() //初始化; (STC8G1K08)
{
dl_ms(100); //上电适当延时一下好些;
P1M1=P3M1=P5M1=0x00; //P1P3P5口:均设双向置1(其他上电默认值无需设置);
KEY= 0; //初值: Kc短按次数);
G=R=b=W=0, dl_ms(1000); //开机/复位后: 绿红蓝白灯全亮1s再灭;
G=R=b=W=1, dl_ms(1000); //问题: 以上3行放最后面编译代码少1B;奇怪?
P_SW2 |= 0x80; //访问XSRF先BIT7=1; 统一放前无需归零(有外扩64K扩展RAM时才要);
P3IE=0x08; //输入只留P32(其余全关);
P3PU=0x04; //使能内部上拉电阻;
TMOD= 0x01; //T0:模式01;16位不自动重载(默认12T);按键消抖用的查询方式;
EX0=EX1=EA =1; //开中断;
}
三、解决过程
1、 先暂时软件处理上电按键次数-1次。可以解决。还得追究原因;
2、后试了开中断前后加空操作或足够的延时等办法,均无效;
3、后来,调整段落,发现将第3段代码(最后5行)改到第2段代码(中间3行)的前面后,居然正常了(关键终于用内部上拉或外部上拉都一样正常了)!还是不得其解!2短代码顺序看不出问题!编译后代码还少1B?于是继续研究...理论上: 上拉电阻用外接或内置一样效果才对, 只需注意先设置好后再开中断;
4、最后:最终还是加了1句“IE0=IE1=0”后才全都很正常了,2段代码顺序无影响了,STC INT0口据实际需要,设为双向(无需上拉)或高阻(内部或外部上拉)都正常了;
5、结果:原来用外部中断脚,开中断前,还是得先清除中断标志位才可靠!(据说老鸟都经历过,呵呵!)
四、目前代码
void BOOT() //初始化; (STC8G1K08)
{
dl_ms(100); //上电适当延时一下好些;
P1M1=P3M1=P5M1=0x00; //P1P3P5口:均设双向置1(其他上电默认值无需设置);
KEY= 0; //初值: Kc短按次数);
G=R=b=W=0, dl_ms(1000); //开机/复位后: 绿红蓝白灯全亮1s再灭;
G=R=b=W=1, dl_ms(1000); //问题: 以上3行放最后面编译代码少1B;奇怪?
P_SW2 |= 0x80; //访问XSRF先BIT7=1; 统一放前无需归零(有外扩64K扩展RAM时才要);
P3IE=0x08; //输入只留P32(其余全关);
P3PU=0x04; //使能内部上拉电阻;
TMOD= 0x01; //T0:模式01;16位不自动重载(默认12T);按键消抖用的查询方式;
IE0=IE1=0; //必须加这1句先清0才行!不然上电很可能会误触发1次!!!
EX0=EX1=EA =1; //开中断;
}
最后
以上就是外向万宝路为你收集整理的关于STC按键INT0外部上拉改内部上拉后上电误触发1次探讨的全部内容,希望文章能够帮你解决关于STC按键INT0外部上拉改内部上拉后上电误触发1次探讨所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复