我是靠谱客的博主 外向万宝路,最近开发中收集的这篇文章主要介绍关于STC按键INT0外部上拉改内部上拉后上电误触发1次探讨,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、问题

前段时间碰到个问题: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次探讨所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部