找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2877|回复: 2
打印 上一主题 下一主题
收起左侧

求大神帮忙看一下下面的程序...哪错了啊!

[复制链接]
跳转到指定楼层
楼主
ID:47619 发表于 2013-1-3 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^7;         // DS18B20与单片机连接口
sbit R4=P1^6;         //进料口水分测量电路与单片机接口
sbit R9=P1^5;         //出料口水分测量电路与单片机接口

sbit fj1=P0^0;
sbit fj2=P0^3;
sbit fj3=P0^6;
sbit fjr1=P2^0;
sbit fjr2=P2^2;
sbit fjr3=P2^4;        //风机与单片机连接口

sbit jr1=P0^1;
sbit jr2=P0^2;
sbit jr3=P0^4;
sbit jr4=P0^5;
sbit jr5=P0^7;
sbit jr6=P2^7;
sbit fjr4=P2^1;
sbit fjr5=P2^3;
sbit fjr6=P2^5;        //电阻丝与单片机连接口

uint wendu;            //温度值
uint shuifen1;         //进料口水分值
uint shuifen2;         //出料口水分值
uint tem0,tem1;        //计数器T1计数高低位值
/*************************延时程序****************************/
void delay1(int i)
{
  while(i--);
}                  //延时ius

void delay2(unsigned int i)
{
    unsigned int j;
    while(i--)
    {
        for(j = 0; j < 125; j++);
    }
}               //延时ims

void delay3(unsigned int i)

 unsigned int j,k,h;
 while(i--)
  {
    for(j=0;j<20;j++)
     {
       for(k=0;k<200;k++)
        {
          for(h=0;h<250;h++);
         }
      }
   }
}               //延时is

/*************************DS18B20程序****************************/
void init_18b20()     //18b20的复位函数
 {
    DQ=1;            //总线拉高电平
    delay1(10);       //延时10us
    DQ=0;           
    delay1(750);     
    DQ=1;            //释放总线
    _nop_();         //延时一个机器周期
    _nop_();
    delay1(560); 
    DQ=1;            //总线拉高
}

void weite(uchar dat)                    //18b20写函数
{
   uchar i;                              //定义变量
   for(i=0;i<8;i++)
      {
        DQ=0;                            //总线拉低
        DQ=dat﹠0x01;
        delay1(45);
        DQ=1;                            //总线拉高
        dat>>=1;                          //右移一位
       }

uchar read()                             //18b20?梁?
{
  uchar i,dat=0;                         //定义变量
  DQ=1;                                  //总线拉高,读数据条件
  _nop_();                               //延时一个机器周期
  for(i=0;i<8;i++)
     {
         DQ=0;                           //总线拉低
         _nop_();                        //延时一个机器周期
         _nop_();
         _nop_();
         dat>>=1;                         //右移一位
         DQ=1;                           //总线拉高
         _nop_();         //延时,使数据总线稳定,保证数据没有错误
         _nop_();
         if(DQ)                          //判断总线的值是否为1
         dat|=0x80;                      //条件或
         delay1(40);                      //延时40us
         DQ=1;                           //总线拉高
      }
 return dat;                             //返回所读数据

uchar read_tu()                          //读取18b20中温度的函数
{
  uchar a,b;                             //定义变量
  init_18b20();                          //18b20复位
  weite(0xcc);                           //写入0xcc,跳过序列号
  weite(0x44);                           //启动温度转换
  init_18b20();                          //18b20复位
  weite(0xcc);                          
  weite(0xbe);                           //读取温度
  a=read();                              //装低字节
  b=read();                              //装高字节
  b<<=4;                       //b左移四位,前五位为区分温度正负位
  a﹠=0xf0;                              //条件与
  a>>=4;                                 //a右移四位,去温度小数位
  b+=a;                                 //b=a+b,此时b为温度整数值
  returu b;                             //返回所读数据
}

 

/*************************定时器程序****************************/
void timer0() interrupt 1            //T0定时中断
{        
    TR0=0;
    TR1=0;
    TL0=0xB0;                       //重装值,定时50000us
    TH0=0x3C;
    tem0=TL1;                       //读数
    tem1=TH1;
    TL1=0x00;                      //计数器1清零
    TH1=0x00;
 TR0=1;
    TR1=1;        
}

void timer1() interrupt 3         //T1计数中断
{
 TR0=0;
    TR1=0;
    TL0=0xB0;                    //重装值,定时50000us
    TH0=0x3C;
    TL1=0x00;                    //计数器1清零
    TH1=0x00;
 TR0=1;
    TR1=1;  
}

void init_timer()
{
   TMOD=0x51;                  //0101 0001 定时器0在模式1下工作16位定时器,定时方式  定时器1在模式1下工作16位计数器,T1负跳变加1
   TL0=0xB0;                   //定时器0初值 定时50000us
   TH0=0x3C;                
   TL1=0x00;                   //定时器1清零
   TH1=0x00;
   TR0=1;                      //T0开始计时
   TR1=1;                      //T1开始计数
}

uchar read_sf()            //读取水分的函数

   uchar f,shuifen;
   f=tem1*256+tem0;
   f=f*20;
   if(f<6399)
    {
      shuifen=16;
    }
   elseif(f<7038)
    {
      shuifen=6;
     }
   elseif(f<7287)
    {
      shuifen=2;
     }
    else
     {
       shuifen=0;
      }
   return shuifen;
}

uchar read_sf1()        //读取进料口水分的函数
{
  uchar c;
  R4=1;
  R9=0;
  c=read_sf();
  return c;
}

uchar read_sf2()        //读取出料口水分的函数
{
  uchar d;
  R4=0;
  R9=1;
  d=read_sf();
  return d;
}

 


/*************************控制子程序****************************/
void_kongzhi()
{
  if(shuifen1>15)
{
fj1=0;
fj2=0;
fj3=0;
if(wendu<0)
      {
        jr1=0;
        jr2=0;
        jr3=0;
        jr4=0;
        jr5=0;
        jr6=0;
       }
      elseif(wendu<15)
       {
         jr1=0;
         jr3=0;
         jr5=0;
        }

elseif(shuifen1>5)
   {
      fj1=0;
      fj2=0;
 if(wendu<0)
      {
        jr1=0;
        jr2=0;
        jr3=0;
jr4=0;
       }
      elseif(wendu<15)
       {
         jr1=0;
         jr3=0;
        }
}
       else
        {
          fj1=0;
     if(wendu<0)
           {
             jr1=0;
             jr2=0;
}
          elseif(wendu<15)
            {
             jr1=0;
             }
        }
while(shuifen2>1)
{
  int i=1;
  if(i<7)
   {
     fjri=0;
     i++;
    }
  delay3(300);
shuifen2=read_sf2();
}
}


/****************************主程序******************************/
 void main()
{
EA=1;                     //开中断
ET0=1;                    //允许定时器0中断
ET1=1;                    //允许定时器1中断
init_timer();             //定时器、计数器初始化设置
while(1)
{
  wendu=read_tu();        //读取温度值给全局变量
  shuifen1=read_sf1();
  shuifen2=read_sf2();
  kongzhi();
  delay3(600);
 }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:47619 发表于 2013-1-3 15:00 | 只看该作者

急求啊...

哪位大神帮帮忙...

万分感谢啊...

回复

使用道具 举报

板凳
ID:7485 发表于 2013-1-6 09:09 | 只看该作者
你现在遇到了什么问题?什么状况?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表