找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9526|回复: 6
打印 上一主题 下一主题
收起左侧

新手提问,关于STC15F104W中断

[复制链接]
跳转到指定楼层
楼主
ID:72558 发表于 2015-1-20 22:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新手,最近整一个小程序,在STC89C52RC及STC15F104E上都成功运行了,但稍作修改后在15F104W上却不能正常运行;一个按键开关接在3.2上开启INT0,经观察每次按该按键都要执行两次中断,按下一次,松开一次,IT0设置为仅下降沿中断。我在中断程序中设置有延时程序,若在延时期间放开按键则等中断完成后继续一次中断,貌似中断还会储存。查了下手册,没看出所以然,请教大侠们这是怎么回事呢,如何解决,谢谢。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:51269 发表于 2015-1-21 03:19 来自手机 | 只看该作者
加一个上拉电阻试试
回复

使用道具 举报

板凳
ID:67377 发表于 2015-1-21 08:05 | 只看该作者
这个问题是在INT0中断里还发生了高优先中断 解决方法:退出INT0中断子程序时要清一下中断标志位

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:72558 发表于 2015-1-21 21:03 | 只看该作者
xiaoliu 发表于 2015-1-21 03:19
加一个上拉电阻试试

谢谢,加了上拉电阻的
回复

使用道具 举报

5#
ID:72558 发表于 2015-1-21 21:04 | 只看该作者
flash3g 发表于 2015-1-21 08:05
这个问题是在INT0中断里还发生了高优先中断 解决方法:退出INT0中断子程序时要清一下中断标志位

ok,马上试一下,谢谢
回复

使用道具 举报

6#
ID:72558 发表于 2015-1-21 21:13 | 只看该作者
flash3g 发表于 2015-1-21 08:05
这个问题是在INT0中断里还发生了高优先中断 解决方法:退出INT0中断子程序时要清一下中断标志位

哦也,就是这个问题,加个IE0=1就解决了,而且另一个中断也应该加一个,太感谢了。再问下为什么104W会出现这种情况而104E不会出现呢。

评分

参与人数 1黑币 +30 收起 理由
admin + 30 赞一个!

查看全部评分

回复

使用道具 举报

7#
ID:302494 发表于 2018-6-30 15:57 | 只看该作者
我也遇见了相同问题,外部中断程序不能用。
#include <STC15F2K60S2.H>
#define uchar unsigned char

sbit Inductorium = P3^4;         //土壤湿度感应器
sbit WaterPump = P3^0;                 //接水泵控制继电器
sbit LED = P3^5;                        //水泵工作指示灯
uchar temp = 0x00;
uchar cnt = 0;
void main()
{
        WaterPump = 1;
        Inductorium = 1;
        LED = 1;
        TMOD = 0x01;
        TH0 = (65536-10000)/255;
        TL0 = (65536-10000)%255;        //设定内部晶振为12MHz刚好0.01秒

        EX0 = 1;                                        //打开外部中断0
        ET0 = 1;                                        //打开定时器中断0

        IT0 = 0;                                        //外部中断0采用低电平触发
        TR0 = 1;                                        //定时器开始计时
        EA = 1;                                                //中断总开关
        while(1)
        {
                if(temp == 0x00)
                {
                        LED = 1;
                        WaterPump = 1;
                }
                else if(temp == 0xFF)
                {
                        LED = 0;
                        WaterPump = 0;
                }
                else
                {
                }
        }
}

void intautorun() interrupt 1 //定时器中断函数
{
        TH0 = (65536-10000)/255;
        TL0 = (65536-10000)%255;
        cnt ++;
        if(cnt >= 5)
        {
                cnt = 0;
                temp = (temp << 1)|Inductorium;
        }
}
void interrupt_INT0() interrupt 0 //外部中断函数
{
        LED = 0;
        WaterPump = 0;
}
外部中断采用2引脚按键连接GND,也在P3^2引脚上加过上拉电阻试过,还是没用。
在按下外部中断上的按键时LED灯闪了一下,继电器没反应,放开按键时也LED灯也闪了一下。但是不管IT0 = 1还是 IT0 = 0 都一样的情况
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表