基于合泰单片机的DHT11的遇到的一些问题
最近用合泰单片机做一个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={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
const unsigned char Tab={0x01,0x02,0x04,0x08};
int U8comdata,U8FLAG,U8temp;
unsigned char temp;
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;
;//启动定时器
}
voidCOM(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=U8RH_data_H/10; //???可以这样赋值吗?u8哪个数是二进制的..
temp=U8RH_data_H%10;
temp=U8T_data_H/10;
temp=U8T_data_H%10;
if (scrFLG==1)
{
_pb=Tab1];
_pa=Tab;
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);
}
}
页:
[1]