历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2018年04月11日 | 单片机外中断使用方面的问题及解决方法

2018-04-11 来源:eefocus

    在长期使用51单片机的过程中,我们发现单片机在工业生产现场等干扰较强的环境工作时,有时确已产生定义为下降沿触发方式的外中断,然而用仪器测量已经送入单片机的INTX引脚时,单片机却不能够正常响应中断。在排除了可能由程序导致的问题之后,再检查CPU的当前状态,发现中断级别、中断允许、中断触发方式也都表明应该响应中断。后经分析及测试,发现是单片机INTX引脚内部端口锁存器被置为零所致。当端口被封锁为零时,从该引脚引入的下降沿表示的中断申请将丢失,中断当然不被响应。由于程序中并未使用可将端口锁存器置为零的指令,且这种情况的产生具有一定的随机性,并非经常发生,所以认为这种现象可能是因电路干扰或噪声造成锁存器误动作导致的。同时我们还认为这种误动作和P3口的内部结构及操作方式有一定关系。

 

    单片机外中断输入端的 P3口是具有第二变异功能的准双向口,其每一位的内部结构如图1所示。当变异功能输出为高电平时,位口是普通I/O口。此时如对I/O口进行写操作,数据由内部总线写入锁存器,经与非门和MOS管两次反相后送出引脚;如对I/O口进行读操作,则必须先将锁存器置为1,使MOS管截止,引脚被片内负载MOS 管(图中标为上拉电阻)上拉为高电平,然后可进行输入操作,当输入为低电平时它能被拉成低电平,引脚信息经两个缓冲器进入内总线;如果使用第二功能(变异功能),输入锁存器同样也必须先被置为1,这时引脚受变异功能输出控制,若需使用变异功能输入,则锁存器和变异输出必须同时置为1,使MOS管截止,变异功能输入随引脚的变化而变化。估计在第二功能时只能用于输入中断的P3.2和P3.3口,内部可能没有变异功能输出线,即使有,也只能上拉为固定的高电平。可见,单片机P3口不管是通用I/O口还是变异功能输入,其锁存器都必须先置为1。单片机复位后所有I/O口的状态都是1,一般在系统的初始化程序中定义过中断优先级,并在开中断之后单片机即可响应中断,此后若关掉相应中断允许位(置为0),则需从引脚进入单片机的中断有效信号(低电平或下降沿)虽然仍可进入并使IE0(或IE1)置为1,但不能引起中断,当然程序可查寻IE了解中断源是否产生了中断申请。

   64.gif?imageView2/2/w/550

    笔者注意到单片机I/O口有两类指令隐含着对I/O口锁存器的写入。

    第一类是读I/O引脚指令,在执行了读I/O引脚指令后,I/O口锁存器状态将变得和引脚相同,如果在中断引脚为低电平期间正巧执行了这种指令,锁存器将变为0态,中断从此将不能进入。

    第二类是读-修改-写锁存器指令,例如SETB PX.Y和JBC PX.Y,LABEL等,这些指令被执行时总是先读入I/O口全部8位数据,作一定修改或判断后再回写到锁存器中。

    在笔者的程序中没有使用第一类指令,第二类指令倒是有,不过,不是对P3.2(或P3.3)进行操作,而是对P3.4和P3.5进行操作(因为系统中使用了P3.4和P3.5作为普通I/O位口)。但是,我们认为有可能在执行这一类指令修改P3.4和P3.5锁存器位时,由于受到较强的干扰而误将 P3.2(或P3.3)写成了0,从而出现上述情况。为了验证这一点,我们去掉了程序中对P3.4和P3.5进行操作的指令,发现中断不能进入的现象基本消失,但在极个别情况下,中断仍不能进入,这种极个别的现象纯粹是随机干扰所致。

    为彻底解决中断不能进入的问题,采用了如下两种措施:

    (1)放弃P3口剩余的位口,不将其作为普通I/O位口用,而用单片机外部扩充的接口取而代之;

    (2)在中断服务程序即将退出之前,往P3.2(或P3.3)口写1,以使P3.2(或P3.3)位的锁存器状态在下一次中断到来之前为1,从而保证不漏掉任何一次中断申请。

    对系统作了以上两点改进后,中断丢失的现象再也没有发生过。

    参 考 文 献
1 孙育才.MCS-51系列单片微型计算机及其应用.南京:东南大学出版社,1987


推荐阅读

史海拾趣

FDI [Future Designs , Inc.]公司的发展小趣事

为了进一步扩大市场份额,FDI公司开始实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,并与当地企业建立了紧密的合作关系。同时,FDI还积极参与国际电子展会和论坛,与全球各地的行业精英交流学习。这些举措不仅提升了FDI的品牌影响力,也为其带来了更多的商业机会。

台湾第一电阻(Firstohm)公司的发展小趣事
电冰箱门密封不严会导致冷气泄漏和能耗增加。如果发现门密封不严,首先应检查密封条是否老化或破损,如果是则应及时更换新的密封条。此外,还应注意检查门铰链是否松动或变形,如果存在问题应及时调整或更换。
Hongfa公司的发展小趣事

宏发公司的发展离不开自主研发和技术创新。1998年,宏发成立了精合公司,开启了自主研发自动化设备设计及制造的征程。此后,公司不断加大在技术研发上的投入,建立了博士后科研工作站和院士专家工作站,形成了从产品研发、模具制造、零件制造到自动化成品装配及在线检测的一体化全产业链。通过技术创新,宏发不仅提升了产品性能和质量,还成功打破了国外技术垄断,实现了高端继电器的自主研发和生产。

中移物联网(Chinamobile)公司的发展小趣事

中移物联网在智能终端产品的创新方面也取得了显著成果。公司设计并生产了物联网专用模组和芯片,打造了智能组网、智能安防、智能家居、智能穿戴等行业终端。这些产品在市场上受到了广泛欢迎,特别是在智能家居和智能穿戴领域,中移物联网的产品凭借其高性能和稳定性,赢得了众多消费者的青睐。

Frolyt Condensers & Elements GmbH公司的发展小趣事

随着业务规模的扩大,Frolyt Condensers & Elements GmbH意识到全球化布局的重要性。2010年,公司制定了全球化战略,首先在亚洲设立了生产基地,以利用当地丰富的资源和低廉的劳动力成本。随后几年间,Frolyt还通过一系列并购活动,收购了多家在特定市场具有影响力的电容器制造商,进一步巩固了其在全球市场的地位。这些并购不仅扩大了Frolyt的产品线,还增强了其技术研发能力和市场服务能力。

成都振芯/国腾(CORPRO)公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,CORPRO始终保持着对创新的追求和投入。近年来,公司不仅加强了在集成电路设计、微波组件开发等领域的研发能力,还积极拓展物联网、大数据等新兴领域的应用场景。这些努力使得CORPRO在行业内获得了广泛认可,并多次荣获各类荣誉奖项。例如,在2022年5月20日,CORPRO入选了四川省拟推荐2022年度国家技术创新示范企业公示名单,这一荣誉再次证明了CORPRO在电子行业的实力和影响力。

总之,成都振芯/国腾(CORPRO)公司的发展历程充满了挑战与机遇。通过不断的努力和创新,CORPRO已经成长为电子行业中一家具有强大实力和广泛影响力的企业。未来,CORPRO将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

问答坊 | AI 解惑

用multisim模拟试验的时候 s9013和3DG6B 这两个型号的三极管用哪个代替?

本帖最后由 dontium 于 2015-1-23 13:37 编辑 如题 还有放大倍数β 大概在100--110左右 …

查看全部问答>

双口RAM的应用场合

1. 通信处理上接口匹配;帧处理,帧封装; 2. 数字信号处理上数据存储等等。 3. 信号分析的数据集中处理等等。 应用很广泛,技巧很多…

查看全部问答>

安森美收购三洋半导体

Panasonic旗下子公司三洋电机(SANYO Electric)计划将半导体事业出售给美国电源管理解决方案供货商安森美半导体(ON Semiconductor),预估出售金额达200亿日圆前后。三洋电机已就出售半导体事业一事和安森美进入最终协商阶段,双方并预计将于7月中旬 ...…

查看全部问答>

LED模组使用方法和注意事项

 1、LED专用开关电源。电源只能防潮,不能防水,所以电源外置时必需做好防水措施。   2、开关电源均根据LED模组特性调节好输出电压,请在使用过程中不得随意旋转电压调节按钮。   3、LED模组均采用低压输入,要求电源安装在LED发光模组1 ...…

查看全部问答>

想咨询一下STR71X的HDLC的问题

                                 想咨询一下STR71X的HDLC的问题,不知技术支持可否告诉我个电话,电话联系方便一些…

查看全部问答>

椭圆滤波器如何设计

听说可以用filter solutions这个软件可以设计,但我设计出来仿真老出错。请高手指教。。…

查看全部问答>

dsp builder 9.1 sp2 破解问题

最近在网上搜了很长时间但是找不到dsp builder 9.1 sp2 的破解、,是不是没有crack啊。急求啊,什么软件都有了, 就差这个软件的crack了,求好心人发一份。…

查看全部问答>

altium designer 如何在焊盘中做长方形钻孔

我做的一个元器件,要椭圆形的焊盘和长方形的孔,但altium designer 中有设置焊盘形状的,却没有设置长方形孔的。 请问如何设置长方形的焊盘孔?…

查看全部问答>

简单的430数码管显示程序,有一些问题,求指点

本来要数码管显示01234567的,但只显示012其余位没有,不知什么原因????? 其中p55和p66是两片74hc595的锁存信号 附程序如下 #include #define uchar unsigned char #define uint  unsigned int   #define WM1  ...…

查看全部问答>