为什么我如果在一个定时器上用两个中断控制时间的时候,

2019-03-24 17:19发布

为什么我如果在一个定时器上用两个中断控制时间的时候,在温度高于27和低于27时,流水灯间隔闪烁的时间一样,都是间隔了1秒?

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;            
uint temp;              
uchar  mm;            
sbit dula=P2^6;
sbit wela=P2^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={ 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef};

void delay(uint count)      
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}
void dsreset(void)        
{
  uint i;
  DS=0;
  i=103;
  while(i>0)i--;
  DS=1;
  i=4;
  while(i>0)i--;
}

bit tmpreadbit(void)      
{
   uint i;
   bit dat;
   DS=0;i++;           
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;
   return (dat);
}

uchar tmpread(void)   
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);   
  }
  return(dat);
}

void tmpwritebyte(uchar dat)   
{
  uint i;
  uchar j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)      
    {
      DS=0;
      i++;i++;
      DS=1;
      i=8;while(i>0)i--;
    }
    else
    {
      DS=0;        
      i=8;while(i>0)i--;
      DS=1;
      i++;i++;
    }

  }
}

void tmpchange(void)   
{
  dsreset();
  delay(1);
  tmpwritebyte(0xcc);   
  tmpwritebyte(0x44);   
}

uint tmp()               
{
  float temp;
  uchar  a,b;
   

  dsreset();
  delay(1);
  tmpwritebyte(0xcc);
  tmpwritebyte(0xbe);
   
  
  a=tmpread();
  b=tmpread();
//  temp=b;
//  temp<<=8;              
//  temp=temp|a;
//  tt=temp*0.0625;
//   temp=tt*10+0.5;

   
    temp=((b<<8)|a)*(0.0625*10);
     return temp;
}

void readrom()           
{
  uchar sn1,sn2;
  dsreset();
  delay(1);
  tmpwritebyte(0x33);
  sn1=tmpread();
  sn2=tmpread();
}


void delay10ms(uint z )            
  {
    uchar a,b;
    for(a=10;a>0;a--)
      for(b=60;b>0;b--);
   }

void display(uint temp)            
{
   uchar A1,A2,A2t,A3;
   A1=temp/100;
   A2t=temp%100;
   A2=A2t/10;
   A3=A2t%10;
   dula=0;
   P0=table[A1];         
   dula=1;
   dula=0;

   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(1);

   dula=0;
   P0=table1[A2];         
   dula=1;
   dula=0;

   wela=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(1);

   P0=table[A3];         
   dula=1;
   dula=0;

   P0=0xfb;
   wela=1;
   wela=0;
   delay(1);
}
void xianshi( )
{
        dula=1;
     P0=table[3];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xf7;
     wela=0;
     delay10ms(1);
     dula=1;
     P0=table1[0];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xef;
     wela=0;
     delay10ms(1);
     dula=1;
     P0=table[0];
     dula=0;
     P0=0xff;
     wela=1;
     P0=0xdf;
     wela=0;
     delay10ms(1);   
}
void deal()
{
//  if(mm==20)
//  {
//   
//    mm=0;
    if(temp<270)
     {  
        if(mm==20)
       {
   
         mm=0;
         P1=~P1;
         
         }
        }
     else  
      {
         
        if(mm==60)
        {
   
         mm=0;
         P1=~P1;
         
         }
        }
        
//     else
//      {
//       P1=0xff;}
      }
     


void main()
{  uchar a;
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   TR0=1;
   EA=1;
   ET0=1;
   do
  {
    tmpchange();
    for(a=10;a>0;a--)
      {   
          display(tmp());
        xianshi( );
        deal();
         
      }
                     
  }    while(1);
  }
   
void time0() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   mm++;
   
   
//   if(temp<300)
//  {
//   
//    if(mm==20)
//     {
//       mm=0;
//       P1=~P1}

////          }  
   
   
  }  

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
strong161
1楼-- · 2019-03-25 04:16
没有注释的代码就是天书呀!问题最好写全面一点,否则也难以理解自然大家就不会去帮你想了!
长得帅怪我落
2楼-- · 2019-03-25 07:19
小伙子,这种东西光贴这么多代码是没用的,你要说清楚,你想干什么,是怎么搞得,然后现象是怎么样,想要的是怎么样,然后个人感觉问题是哪里,然后才把你的关键代码贴出来,记住是关键的,你这些延时,显示什么的,有用吗?

一周热门 更多>