abcfanyuan 发表于 2012-7-21 00:43:46

51中断嵌套诡异的结果求解

程序如下:
#include<stc12c5a60s2.h>
#include<datatype.h>
#define uchar unsigned char
#define uint unsigned int
sbit m=P0^0;
sbit n=P0^1;//m,n控制秒
sbit a=P0^2;
sbit b=P0^3;//a,b控制分钟
sbit x=P0^4;
sbit y=P0^5;//x,y控制小时
sbit zhan=P0^6;                // 控制外部中断开
sbit bo=P0^7;
sbit led=P3^0;
sbitp33=P3^3;          //   按键改数值
sbitp35=P3^5;                // 改数值
sbitp36=P3^6;                  //       该数值
sbit p32=P3^2;                        //                   外部中断触发

int num,k,p,q;
unsigned char pp;
code char shuzi={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay(int ms)
{
int a,b;
for(a=0;a<ms;a++)
for(b=0;b<80;b++);
}
void display(int num1)
{ int s=35;
        int i,j;
        int c,d;
        int w,e;
        i=num1%10;
        j=num1/10;
        c=q%10;
        d=q/10;
        w=p%10;
        e=p/10;
while(s--)
{       
        m=0;
        P1=shuzi;
        delay(2);
        m=1;
        n=0;
        P1=shuzi;
        delay(2);
        n=1;                        //显示秒

          
        a=0;
        P1=shuzi;
        delay(2);
        a=1;
        b=0;
        P1=shuzi;
        delay(2);
        b=1;                  //显示分钟

        x=0;
        P2=shuzi;
        delay(2);
        x=1;
        y=0;
        P2=shuzi;
        delay(2);
        y=1;                //显示小时
       
        }                                                  
          
}
void main()
{       
P1M1=0x00;
P1M0=0xff;
P2M1=0x00;
P2M0=0xff;
P0M1=0x00;
P0M0=0xff;
P3M1=0x00;
P3M0=0xff;
       TMOD=0x01;                       //选择定时器中断的运行方式
   TL0=(65536-46038)%256;//赋定时器的初值
       TH0=(65536-46038)/256;
       EA=1;   //中断总开关
       ET0=1;//定时器的开关
       TR0=1;//开启定时器中断
       PX0=1;
       PT0=0;
          
       while(1)
       {
       display(k);
       }              
        }                       
                                 
                       
                          
                    
                                 
                               
void T0_time() interrupt 1
{
           TH0=(65536-46038)/256;
           TL0=(65536-46038)%256;
           num++;
       if(num==20)
                   {
                                num=0;
                                led=~led;
                                k++;
                                if(k==60)
                                        {
                                                k=0;                       
                                               q++;
                                                if(q==60)
                                                q=0;
                                        }
                           if(q==0&&k==0)
                                       {
                                          p++;
                                          if(p==24)
                                          p=0;
                                       }
                  }
           if(zhan==0)
                {
                        // EA=1;
                       EX0=1;
                       IT0=1;
                //       p32=1;
                //       if(bo==0)break;
                }
                zhan=1;                          
}


void waibu() interrupt 0
   {        
                   bo=1;
   while(1)
   {
                       p33=1;
                 if(p33==0){k+=1;}
                   p35=1;
               if(p35==0){q+=1;}
                  p36=1;
               if(p36==0){p+=1;}
                //        display(k);
               
               if(bo==0)
               for(pp=10;pp>0;pp--);
               if(bo==0)
               {
               IE0=0;
               break;
               }
       }
       EX0=0;
}


要实现的功能是T0计时,然后zhan控制外部中断0的开启,p3^2触发进入外部中断0,bo按键跳出外部中断后继续t0的计数。
但是现在是跳出外部中断后计数器就被清零了,没有继续之前的计数。
弄了一晚上,不知道是怎么回事,求解呀。
希望大家帮忙。

teddeng 发表于 2012-7-21 02:46:15

TL0=(65536-46038)%256这句%什么意思?

CelestialBeing 发表于 2012-7-21 03:17:01

teddeng 发表于 2012-7-21 02:46 static/image/common/back.gif
TL0=(65536-46038)%256这句%什么意思?

%是求余运算符,8bit是256,所以求出来的余数是寄存器低八位所需要的数值。路过帮解释下。

dcqq88 发表于 2012-7-21 08:15:28

是不是你没有把那个数再读回来,或者你应该先让一个常量保存一下,再付给!

abcfanyuan 发表于 2012-7-21 10:03:11

还是无法解决呀

jackson0585 发表于 2012-7-21 15:05:21

CelestialBeing 发表于 2012-7-21 03:17 static/image/common/back.gif
%是求余运算符,8bit是256,所以求出来的余数是寄存器低八位所需要的数值。路过帮解释下。 ...

配置定时器啊

jackson0585 发表于 2012-7-21 22:07:17

眼子王来了。。。

abcfanyuan 发表于 2012-7-22 00:23:49

jackson0585 发表于 2012-7-21 22:07 static/image/common/back.gif
眼子王来了。。。

欢迎撒。发帖可以混积分的撒
页: [1]
查看完整版本: 51中断嵌套诡异的结果求解