找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[求助]为什么51单片机中断后一直卡死在中断,不会继续往下执行,也不会返回主程序

[复制链接]
跳转到指定楼层
楼主
ID:95556 发表于 2015-11-13 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit P33=P3^3;
char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};           //共阳数码管,不带小数点
char code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};           //共阳数码管,带小数点
unsigned int num=0,b;

void show(int z);       
void delay(unsigned  char a);

void main(void)
{
    SP=0x60;
        TMOD=0x01;
        IE=0x87;
        TCON=0x05;
        while(1)
        {
                unsigned char i;
            P1=0x7b;                                  //东西方向绿灯亮,南北方向红灯亮
                show(14);               
                for(i=0;i<4;i++)
                {
                    P1=0xbb;
                    show(1);       
                        P1=0xfb;
                    show(1);       
                }
       
                P1=0xde;                                  //东西方向红灯亮,南北方向绿灯亮
            show(12);
                for(i=0;i<4;i++)
                {
                    P1=0xdd;
                    show(1);
                        P1=0xdf;  
                         show(1);
                }
        }
}

void show(int z)                  //用数码管显示的倒计时
{
   int z1,z2;
   TR0=1;
   if(z>1)
   {
           while(z>0)
           {
             if(b==20)        {b=0;z--;}
                   z1=z/10;
               z2=z%10;
                   P0=tab[z1];
                   P2=0xfb;
                   delay(20);
                  
                   P0=tab[z2];
                   P2=0xf7;
                   delay(20);
           }
   }
   else
   {
         while(z>0)
           {
             if(b==10)        {b=0;z--;}
                   P0=tab1[0];
                   P2=0xfb;
                   delay(20);

                   P0=tab[5];
                   P2=0xf7;
                   delay(20);
           }
   }
}


void delay(unsigned  char a)
{
    char k1;
    for(k1=0;k1<=a;k1++);
}

void time0() interrupt 1
{
        TH0=(65536-5*110592/12)/256;
        TL0=(65536-5*110592/12)%256;
        b++;       
}

void int0(void) interrupt 0                         //紧急车辆要通过,主干道、支道均为红灯亮6秒
{
        unsigned char j1;
        j1=P1;
        P1=0xdb;
        show(6);
        P1=j1;
}  

void int1(void) interrupt 2                   //累计8辆车,放行支道
{
        unsigned char i1;
        if(P33==0)
        {
          delay(60);
          if(P33==0){ num++; }
         while(P33==0);       
        }
       
        if(P1==0x7b){                           //主干道放行期间
         if(num>7){
           for(i1=0;i1<4;i1++)
           {
                 P1=0xbb;
                 show(1);
                 P1=0xfb;
                 show(1);
           }
           P1=0xde;                                 //东西方向红灯亮,南北方向绿灯亮
           show(12);
       num=0;
        }
  }
  else {num=0;}
}

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

使用道具 举报

沙发
ID:91114 发表于 2015-11-13 17:05 | 只看该作者
while前加上TH0=(65536-5*110592/12)/256;         TL0=(65536-5*110592/12)%256;
回复

使用道具 举报

板凳
ID:95556 发表于 2015-11-13 22:13 | 只看该作者
aybco 发表于 2015-11-13 17:05
while前加上TH0=(65536-5*110592/12)/256;         TL0=(65536-5*110592/12)%256;

你好,我想问下,在哪个while前面加 重装初值?
回复

使用道具 举报

地板
ID:91114 发表于 2015-11-14 09:38 | 只看该作者
本帖最后由 aybco 于 2015-11-14 09:44 编辑
KiFF 发表于 2015-11-13 22:13
你好,我想问下,在哪个while前面加 重装初值?

主函数的while(1)前,装初值,还有你的TCON=0x05,就没有打开定时0,应该写成TCON = 0x15.TCON 可以位寻址,你可以单独写,这样不容易遗漏,并且没有必要记住TCON的每一位位置。
回复

使用道具 举报

5#
ID:95556 发表于 2015-11-14 14:30 | 只看该作者
aybco 发表于 2015-11-14 09:38
主函数的while(1)前,装初值,还有你的TCON=0x05,就没有打开定时0,应该写成TCON = 0x15.TCON 可以位寻址 ...

按照你说得那样,那是不行,情况就是我按P32,产生外部中断0,数码管就显示06,但是不会倒数,就一直卡在那里,不往下执行
回复

使用道具 举报

6#
ID:95767 发表于 2015-11-14 18:05 | 只看该作者
果然有大神啊
回复

使用道具 举报

7#
ID:95932 发表于 2015-11-26 14:51 | 只看该作者
一楼正解!
回复

使用道具 举报

8#
ID:97281 发表于 2015-11-26 20:46 | 只看该作者
初来乍到  高手如云啊
回复

使用道具 举报

9#
ID:63997 发表于 2015-11-29 18:12 | 只看该作者
中断函数里面放这样的死循环  while(P33==0);       要是条件不满足就卡死了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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