打印

51单片机外部中断问题!

[复制链接]
2904|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangbo19881118|  楼主 | 2013-4-14 18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yangbo19881118 于 2013-4-14 19:04 编辑

板子是郭天翔系列的!问题时进入外部中断后不会退出,P1口的值不会变。用定时器写的时钟没有影响,继续运行!改了几天了,确实想不出问题来了!编译什么的都通过...求大神们提点提点哇!!!!!跪求!

#include"reg52.h"#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uint m,n,miao,miao_1,shi,shi_1,fen,fen_1,z;
void delay1ms(uint);
void shuma(uint,uint,uint,uint,uint,uint);
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                                        0x6d,0x7d,0x07,0x7f,0x6f};
void TO() interrupt 1
{  
         TH0        =(65536-50000)/256;
         TL0        =(65536-50000)%256;
         m++;
}
void INT1_0() interrupt 2
{
        P1=0xfe;
}
void main()
{              
                TMOD=0x01;
                TH0        =(65536-50000)/256;
                TL0        =(65536-50000)%256;
                EA          = 1;
                ET0        = 1;
                EX1        = 1;
                TR0        = 1;
                 IT1         = 1;
                        while(1)         
                        {        
                                if(m==20)        //1秒时间到了                          
                                {
                                        m=0;
                                        miao++;
                                        if(miao>9)
                                        {
                                                miao=0;
                                                miao_1++;
                                                if(miao_1>5)
                                                {
                                                        miao_1=0;
                                                        fen++;
                                                        if(fen>9)
                                                        {
                                                                fen=0;
                                                                fen_1++;
                                                                if(fen_1>5)
                                                                {
                                                                        fen_1=0;
                                                                        shi++;
                                                                        if(shi>9)
                                                                        {
                                                                                shi=0;
                                                                                shi_1++;
                                                                        }
                                                                }
                                                        }        
                                              }
                                      }
                              }
                shuma(miao,miao_1,fen,fen_1,shi,shi_1);        
        }
    }
}      
void shuma(uint a,uint b,uint c,uint d,uint e,uint f)   //数码管显示函数
{         
        dula=1;
        P0        =table[a];
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xdf;
        wela=0;
        delay1ms(5);

        dula=1;
        P0        =table;
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xef;
        wela=0;
        delay1ms(5);

        dula=1;
        P0        =table[c];
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xf7;
        wela=0;
        delay1ms(5);

        dula=1;
        P0        =table[d];
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xfb;
        wela=0;
        delay1ms(5);

        dula=1;
        P0        =table[e];
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xfd;
        wela=0;
        delay1ms(5);

        dula=1;
        P0        =table[f];
        dula=0;
        P0        =0xff;
        wela=1;
        P0        =0xfe;
        wela=0;
        delay1ms(5);
}
void delay1ms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
for(y=60;y>0;y--);
}

相关帖子

沙发
电子学习员| | 2013-4-14 19:29 | 只看该作者
你想让P1口怎么变?进入外部中断后中断后P1=0xfe,此后你还有其他的地方来改变P1吗?

使用特权

评论回复
板凳
yangbo19881118|  楼主 | 2013-4-14 19:44 | 只看该作者
电子学习员 发表于 2013-4-14 19:29
你想让P1口怎么变?进入外部中断后中断后P1=0xfe,此后你还有其他的地方来改变P1吗? ...

P1口控制的是8个流水灯!进入中断后只点亮一个!程序里面我少了一个延时!  
但是之前我加上了这个延时,我一触发外部中断那个灯就亮了,不会灭掉!

使用特权

评论回复
地板
电子学习员| | 2013-4-14 20:08 | 只看该作者
你的中断函数里给点亮了,所以当然不会灭了

使用特权

评论回复
5
yangbo19881118|  楼主 | 2013-4-14 20:18 | 只看该作者
电子学习员 发表于 2013-4-14 20:08
你的中断函数里给点亮了,所以当然不会灭了

那我再主函数开头加一句P1=0xff,执行后也不会灭啊 ?  
中断执行完跳回主函数后P1口的值又变回来了啊 ?

使用特权

评论回复
6
电子学习员| | 2013-4-14 20:33 | 只看该作者
你想让外部中断控制灯的亮灭干嘛要这样设计?你把控制亮灭的逻辑放在中断里,按一下按键灯亮,再按一下灯灭。再说你的思路,你把P1=0XFF放在那里了?

使用特权

评论回复
7
yangbo19881118|  楼主 | 2013-4-14 20:39 | 只看该作者
电子学习员 发表于 2013-4-14 20:08
你的中断函数里给点亮了,所以当然不会灭了

我刚刚又试了下
main()
{
  while(1)
    {
       P1=0xff;   //在这里重新赋值不起作用
       ...;
       ...;
           while(1)
           {
            P1=0xff;  //放在这里就可以了
             ...;
              ...;
              ...;

           }
    }
}
那我又有个疑问了,中断跳出后不是应该从主函数第一条指令开始执行的吗?

使用特权

评论回复
8
电子学习员| | 2013-4-14 20:47 | 只看该作者
函数在哪里被打断了,再返回到打断处继续执行

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
yangbo19881118 + 1 赞一个!
9
yangbo19881118|  楼主 | 2013-4-14 20:50 | 只看该作者
电子学习员 发表于 2013-4-14 20:47
函数在哪里被打断了,再返回到打断处继续执行

谢谢妳的指教!  我才开始接触51,C,没多久!  以后有什么解决不了的问题还得向你请教了啊 !

使用特权

评论回复
10
余寒| | 2013-4-15 20:54 | 只看该作者
打断点不就知道了

使用特权

评论回复
11
moxue10| | 2014-4-12 12:38 | 只看该作者
中断结束后不应该关了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝