微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > C51程序求助。。。

C51程序求助。。。

时间:10-02 整理:3721RD 点击:
小弟,做毕业设计,写了一段程序,有错误 ,keil编译出错,希望哪位大神帮我看一下。 不甚感谢!
程序如下:
“#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define ui unsigned int
#define uc unsigned char
sbit aa=P1^3;//启动测温
sbit date=P1^2;//TN9数据接收
sbit huanjing=P1^0;//环境温度按键定义
sbit mubiao=P1^1;//目标温度按键定义
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//数码管形的数组表
uc ge,shi,bai,qian,chewen;//用于显示的变量定义(全局变量)
bit bdata ff,pp;//测温启动的位定义
uc item,msb,lsb,sum,cr,temp,m;//用于记录温度数据的变量定义(全局变量)
ui wendu;//存储温度的变量定义
void delay(ui k)//延时函数
{
uc i,j;
for(i=k;i>0;i--)
    for(j=110;j>0;j--);
}

void xianshi()//显示函数
{
ge=10;
        shi=wendu%10;
bai=wendu%100/10;
qian=wendu/100;
P2=0x08;
P0=tab[qian];
delay(5);
P2=0x04;
P0=tab[bai];
delay(5);
P2=0x02;
P0=tab[shi];
delay(5);
P2=0x01;
P0=tab[ge];
delay(5);
  

}
void ex0() interrupt 0//外部中断读取TN9数据
{
  if(ff!=1)
  { pp=data;  //提取P1^3这个位的数据,TN9数据口
   temp=temp+pp;//把这个位数据存到temp这个变量里
   m++;//用这个变量记录存储的是第几个数据
   if((m!=8)&&(m!=16)&&(m!=24)&&(m!=32)&&(m!=40))//8个位为一组数据(一共5组数据)
   {
    temp=_crol_(temp,1);//(不够8位就把高位向前移一位,够8位就不向前移位了)
   }
   else if(m==8)//第一组数据接收完毕
   {
    item=temp;//把第一组数据存在item(此帧代表环境温度或目标温度)这个变量里
    temp=0;
   }   
   else if(m==16)//第二组数据接收完毕
   {
    msb=temp;//把第二组数据存在msb(高八位数据)这个变量里
    temp=0;
   }   
   else if(m==24)//第三组数据接收完毕
   {
    lsb=temp;//把第三组数据存在lsb(低八位数据)这个变量里
    temp=0;
   }
   else if(m==32)//第四组数据接收完毕
   {
    sum=temp;//把第四组数据存在sum(验证码sun=msb+lsb+item)这个变量里
    temp=0;
   }
   else if(m==40)//第五组数据接收完毕
   {
    cr=temp;//把第五组数据存在cr(结束标志)这个变量里
    temp=0;
    m=0;
    if((cr==0x0d)&&(item==chewen))//检查结束标志和第一组数据是否为所要的环境或目标数据(是就计算出温度值)
    {
     ff=1;//停止测温
     aa=1;//关闭测温
     wendu=msb*256+lsb;//把高八位和低八位拼在一起
                                 wendu=wendu/16-273.15;//温度计算公式(目标温度/环境温度=temp/16-273.15)
    }
    else//不是正确的数据
    {
     aa=0;//启动测温
     
    }
   }
   }
}
void init()//初始化函数
{
delay(500);
EA=1;
IT0=1;
EX0=1;
P1=0xff;
chewen=0x66;
}


void main()
{
init();
while(1)
{
  if(huanjing==0)
  delay(200);
  if(huanjing==0)
  {
   chewen=0x66;//环境温度数据的标志
   aa=0;
   ff=0;
   while(huanjing==0);
  }
  if(mubiao==0)
  delay(200);
  if(mubiao==0)
  {
   chewen=0x4c;//目标温度数据的标志
   aa=0;
   ff=0;
   while(mubiao==0);
  }
  xianshi();
}
}

#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define ui unsigned int
#define uc unsigned char
sbit aa=P1^3;//启动测温
sbit date=P1^2;//TN9数据接收
sbit huanjing=P1^0;//环境温度按键定义
sbit mubiao=P1^1;//目标温度按键定义
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};//数码管形的数组表
uc ge,shi,bai,qian,chewen;//用于显示的变量定义(全局变量)
uc bdata ff,pp;//测温启动的位定义
uc item,msb,lsb,sum,cr,temp,m;//用于记录温度数据的变量定义(全局变量)
ui wendu;//存储温度的变量定义
void delay(ui k)//延时函数
{
uc i,j;
for(i=k;i>0;i--)
    for(j=110;j>0;j--);
}
void xianshi()//显示函数
{
ge=10;
        shi=wendu%10;
bai=wendu%100/10;
qian=wendu/100;
P2=0x08;
P0=tab[qian];
delay(5);
P2=0x04;
P0=tab[bai];
delay(5);
P2=0x02;
P0=tab[shi];
delay(5);
P2=0x01;
P0=tab[ge];
delay(5);
  
}
void ex0() interrupt 0//外部中断读取TN9数据
{
  if(ff!=1)
  {
   pp=date;  //提取P1^3这个位的数据,TN9数据口
   temp=temp+pp;//把这个位数据存到temp这个变量里
   m++;//用这个变量记录存储的是第几个数据
   if((m!=8)&&(m!=16)&&(m!=24)&&(m!=32)&&(m!=40))//8个位为一组数据(一共5组数据)
   {
    temp=_crol_(temp,1);//(不够8位就把高位向前移一位,够8位就不向前移位了)
   }
   else if(m==8)//第一组数据接收完毕
   {
    item=temp;//把第一组数据存在item(此帧代表环境温度或目标温度)这个变量里
    temp=0;
   }   
   else if(m==16)//第二组数据接收完毕
   {
    msb=temp;//把第二组数据存在msb(高八位数据)这个变量里
    temp=0;
   }   
   else if(m==24)//第三组数据接收完毕
   {
    lsb=temp;//把第三组数据存在lsb(低八位数据)这个变量里
    temp=0;
   }
   else if(m==32)//第四组数据接收完毕
   {
    sum=temp;//把第四组数据存在sum(验证码sun=msb+lsb+item)这个变量里
    temp=0;
   }
   else if(m==40)//第五组数据接收完毕
   {
    cr=temp;//把第五组数据存在cr(结束标志)这个变量里
    temp=0;
    m=0;
    if((cr==0x0d)&&(item==chewen))//检查结束标志和第一组数据是否为所要的环境或目标数据(是就计算出温度值)
    {
     ff=1;//停止测温
     aa=1;//关闭测温
     wendu=msb*256+lsb;//把高八位和低八位拼在一起
                                 wendu=wendu/16-273.15;//温度计算公式(目标温度/环境温度=temp/16-273.15)
    }
    else//不是正确的数据
    {
     aa=0;//启动测温
     
    }
   }
   }
}
void init()//初始化函数
{
delay(500);
EA=1;
IT0=1;
EX0=1;
P1=0xff;
chewen=0x66;
}
void main()
{
init();
while(1)
{
  if(huanjing==0)
  delay(200);
  if(huanjing==0)
  {
   chewen=0x66;//环境温度数据的标志
   aa=0;
   ff=0;
   while(huanjing==0);
  }
  if(mubiao==0)
  delay(200);
  if(mubiao==0)
  {
   chewen=0x4c;//目标温度数据的标志
   aa=0;
   ff=0;
   while(mubiao==0);
  }
  xianshi();
}
}

谢谢啦。希望有机会向你多学习

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

网站地图

Top