2967|2

28

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

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

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

#include
#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}

////          }  
   
   
  }  

360反馈意见截图1629061310895136.png (226.41 KB, 下载次数: 13)

360反馈意见截图1629061310895136.png
此帖出自51单片机论坛

最新回复

小伙子,这种东西光贴这么多代码是没用的,你要说清楚,你想干什么,是怎么搞得,然后现象是怎么样,想要的是怎么样,然后个人感觉问题是哪里,然后才把你的关键代码贴出来,记住是关键的,你这些延时,显示什么的,有用吗?  详情 回复 发表于 2017-4-5 09:09
点赞 关注
 

回复
举报

2774

帖子

8

TA的资源

版主

沙发
 
没有注释的代码就是天书呀!问题最好写全面一点,否则也难以理解自然大家就不会去帮你想了!
此帖出自51单片机论坛
 
 
 

回复

146

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
小伙子,这种东西光贴这么多代码是没用的,你要说清楚,你想干什么,是怎么搞得,然后现象是怎么样,想要的是怎么样,然后个人感觉问题是哪里,然后才把你的关键代码贴出来,记住是关键的,你这些延时,显示什么的,有用吗?
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表