微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 调试了两天没调试出来的C51程序,怎么破?

调试了两天没调试出来的C51程序,怎么破?

时间:10-02 整理:3721RD 点击:

用keil调试下面程序,个人感觉程序乱执行,从“*************(1)“直接跳到  ” **************(2)“行,实在理解不了,帮忙看一下?我没有手动使P3.3置零。
        #include <reg51.h>
char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
                 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf} ;
sbit k1=P3^2;
sbit k2=P3^3;
char sec100,min,sec,hour;
void delay(int k)
  {
    int m,n;
    for(m=0;m<k;m++)
      {for(n=0;n<120;n++) ; }
}
char buffer[8];
void dsy_handle()
   {
    buffer[7]=hour/10;
    buffer[6]=hour%10;      
    buffer[5]=16;
   
    buffer[4]=min/10;
    buffer[3]=min%10;
   
    buffer[2]=16;
   
    buffer[1]=sec/10;
    buffer[0]=sec%10;
   
   }
char display()
   {
     P2=0x80;
     P0=tab[buffer[0]];
     delay(2);
     
     P2=0x40;
     P0=tab[buffer[1]];
     delay(2);
     
     P2=0x20;
     P0=tab[buffer[2]];
    delay(2);
     P2=0x10;
     P0=tab[buffer[3]];
    delay(2);
     P2=0x08;
     P0=tab[buffer[4]];
      delay(2);                                                                               *************(1)
     P2=0x04;
     P0=tab[buffer[5]];
     delay(2);              
   
     P2=0x02;
     P0=tab[buffer[6]];
     delay(2);
     if(hour>9)
       {
         P2=0x01;
       }
       else
{
         P2=0x00;
}
     P0=tab[buffer[7]];
     delay(2);
  }

void INC_hour()
   {
    hour++;
    if(hour>23)
    {hour=0;}
   }
void INC_min()
   {
    min++;
    if(min>59)
    {min=0;
    INC_hour();
    }  
}
void INC_sec()
   {
    sec++;
    if(sec>59)
    {sec=0;
    INC_min();}   
}
void int0 ()  interrupt 0
  {
    delay(100);
    if(INT0==0)
    {INC_hour();}  
  }
void int1 () interrupt  1
  {
    delay(100);                                                          **************(2)
    if(INT1==0)
    {INC_min(); }
  }
void time0() interrupt   2
  {
    TH0=0xDC;
    TL0=0x00;
    sec100++;
    if(sec100>=100)
      {sec100=0;
      INC_sec();}
}
void init ()
{
   TMOD=0x01;
   TH0=0xDC;
   TL0=0x00;
   TR0=1;
   ET0=1;
   IT0=0;
   EX0=1;
   EX1=1;
   IT1=0;
   EA=1;  
}
void main ()
{
  init ();
  P0=0xff;
  P2=0x00;
  hour=9;
  min=58;
  sec=0;
  sec100=0;
  while (1)
{
  dsy_handle();
  display();
}  
}





interrupt  1 是定时器0溢出中断

interrupt 0  指明是外部中断0;
interrupt 1  指明是定时器中断0;
interrupt 2  指明是外部中断1;
interrupt 3  指明是定时器中断1;
interrupt 4  指明是串行口中断

你进入定时器中断了

肯定是引入中断了,要不然单片机不会跳过程序的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top