搜索
bottom↓
回复: 0

基于合泰单片机的DHT11的遇到的一些问题

[复制链接]

出0入0汤圆

发表于 2011-4-30 11:07:13 | 显示全部楼层 |阅读模式
最近用合泰单片机做一个DHT11的湿度计,我用示波器看了波形.时序好像也没什么问题,可是就是出不来数.大神们帮帮看看
PC0读数.pb显示.pa位选数码管
#include <HT46RU232.h>

typedef unsigned char U8;
#pragma vector SEND  @ 0x08

int U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

int U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
const unsigned char Tab1[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
const unsigned char Tab[4]={0x01,0x02,0x04,0x08};

int U8comdata,U8FLAG,U8temp;
unsigned char temp[4];
unsigned char temp_cnt;
unsigned char std_RH;
unsigned char scrFLG;
char seter;
char outer;
void Init_time(void)  //定时器初始化函数
{
        _emi=1;   //总中断允许
   
        _et0i=1;   // 定时器中断允许
        _t0m0=0;        //设为定时模式,内部时钟 8M
        _t0m1=1;
        _tmr0h=0xf0;       
        _tmr0l=0xff;
        _t0on=1;
        ;//启动定时器
}


void  COM(void)
      {
         
                int i;
       for(i=0;i<8;i++)          
            {
               
                       U8FLAG=2;
                   while((!_pc0)&&U8FLAG++);
            _delay(35);
                          U8temp=0;
             if(_pc0)U8temp=1;
                    U8FLAG=2;
                 while((_pc0)&&U8FLAG++);
                   //超时则跳出for循环                  
                    if(U8FLAG==1)break;
                   //判断数据位是0还是1         
                     
                // 如果高电平高过预定0高电平值则数据位为 1
                    
                   U8comdata<<=1;
                      U8comdata|=U8temp;
     
             }
          
        }


void read ()

{      
      int c=0;
        _emi=0;
                 
      _pcc=0x00;
       _pc0=0;
      _delay(20000);                   //主机拉低500us
       _pc0=1;
       _delay(40);
          _pcc=0xff;              //主机设为输入(电平由上拉电阻拉高) 在20~40us后判断从机响应信号
          
    while((_pc0==1)&&(c++<100));          //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
       if(!_pc0)         
           {
           U8FLAG=2;
         
           while((!_pc0)&&U8FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束         
           U8FLAG=2;
       
           while((_pc0)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
                _pcc=1;
           COM();                   //数据接收状态       
           U8RH_data_H_temp=U8comdata;
           COM();
           U8RH_data_L_temp=U8comdata;
           COM();
           U8T_data_H_temp=U8comdata;
           COM();
           U8T_data_L_temp=U8comdata;
           COM();
           U8checkdata_temp=U8comdata;
      

          //数据校验
           U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
           if(U8temp==U8checkdata_temp)
          if(1)
           {
                     U8RH_data_H=U8RH_data_H_temp;
                     U8RH_data_L=U8RH_data_L_temp;
                     U8T_data_H=U8T_data_H_temp;
                     U8T_data_L=U8T_data_L_temp;
                     U8checkdata=U8checkdata_temp;                              
           }
           }
        
        
       _emi=1;
        }
       
       
       
       
        void SEND ()
{
       
      
    _tmr0h=0xf0;       
    _tmr0l=0xff;
        temp[0]=U8RH_data_H/10;      //???可以这样赋值吗?u8哪个数是二进制的..
        temp[1]=U8RH_data_H%10;
        temp[2]=U8T_data_H/10;
        temp[3]=U8T_data_H%10;
       if (scrFLG==1)
      {
        _pb=Tab1[temp[temp_cnt]];
        _pa=Tab[temp_cnt];
        temp_cnt=temp_cnt+1;
        if (temp_cnt==4)
                temp_cnt=0;
           
        }
}
       
void main()
{   _pac=0;//I/O输出
    _pbc=0;//I/O输出
    Init_time ();
   
    _pcc=0;
    _delay(50000);
    _delay(50000);
    _delay(50000);
    _delay(50000);
    _delay(50000);
    while (1)
    {
      read ();
       _delay(50000);
        _delay(50000); _delay(50000); _delay(50000);
      
        }
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 15:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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