找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机为什么P3.2口接地后不执行中断呢?大神帮个忙

[复制链接]
跳转到指定楼层
楼主
1黑币
郭天祥52单片机
设置 P1口第一个二极管灯的中断。为什么P3.2口接地后不执行中断呢??各位大神能帮下忙吗?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
EA=1;//?????ж?
EX0=1;//?????ж?0
//IT0=1;
TCON=0x01;
wela=1;//11101010
P0=0xea;
wela=0;
while(1)
{
  for(num=0;num<16;num++)
   {
    d1=1;
    dula=1;
    P0=table[num];
    dula=0;
    delay(1000);
   }
}
}
void delay(uint z)
{file:///C:/Users/付/Documents/Tencent%20Files/1256409389/Image/C2C/AF83C490B1F990BA7A0D21EFD2583A7E.png

uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
d1=0;
}


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

使用道具 举报

沙发
ID:469283 发表于 2019-1-16 17:13 | 只看该作者
中断打开没有,端口输入输出设置没有
回复

使用道具 举报

板凳
ID:469255 发表于 2019-1-16 18:34 | 只看该作者
zuolin1234 发表于 2019-1-16 17:13
中断打开没有,端口输入输出设置没有

输入输出设置?
回复

使用道具 举报

地板
ID:104395 发表于 2019-1-16 22:39 | 只看该作者
中断触发方式最好用IT0单个寄存器设置,不要用TCON整体赋值。比如IT0=1,设置边沿触发。
回复

使用道具 举报

5#
ID:404797 发表于 2019-1-16 23:02 | 只看该作者
    你这个程序p32接地后其实中断触发啦,只是你的程序看不出效果,是你的中断程序没编好,看不出效果。将中断程序改为如下就可看出p32接地后产生的中断效果。
void exter0() interrupt 0
{//d1=0;
P0=table[0];delay(1000);
}

回复

使用道具 举报

6#
ID:213173 发表于 2019-1-17 08:47 | 只看该作者
程序没有问题,改这样可以观察清楚。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
        EA=1;//?????ж?
        EX0=1;//?????ж?0
        //IT0=1;
        TCON=0x01;
        wela=1;//11101010
        P0=0xea;
        wela=0;
        while(1)
        {
                for(num=0;num<16;num++)
                {
//                        d1=1;
                        dula=1;
                        P0=table[num];
                        dula=0;
                        delay(1000);
                }
        }
}
void delay(uint z)
{       
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
        d1=~d1;
}
回复

使用道具 举报

7#
ID:469255 发表于 2019-1-17 10:01 | 只看该作者
要接GND
回复

使用道具 举报

8#
ID:404797 发表于 2019-1-17 12:41 | 只看该作者
      仔细看了你的程序,发现其实没问题。我按你的意图用proteus进行仿真,再导入你的程序,发现运行完全符合你的设想,p32接地后二极管灭。为了观看效果更好,我将中断程序改为:void exter0() interrupt 0{d1=0;
P0=table[0];
delay(1000);
      这样当按下按钮时,数码管停止计数并显示0一秒,二极管熄灭一秒。仿真截图如下:
正常运行时:


p32接地即按键按下时:




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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