找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1837|回复: 6
收起左侧

求解51单片机串口输出问题

[复制链接]
ID:642152 发表于 2019-12-6 21:22 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include "dht11.h"
#include "delay.h"
#include"baojing.h"
float DHT11_temp,DHT11_hum;
char receive()       //读取一个字节
{   
         int i,respond;
         // ST=0;
         char com_data=0,temp;
          for(i=0;i<=7;i++)   
         {
                    respond=1;
                    while((!TRH)&&respond++);
                    delay_us();
                    delay_us();
                    delay_us();
                    if(TRH)
                    {
                              temp=1;
                              respond=3;
                              while((TRH)&&respond++);
                    }
                    else
                              temp=0;
                    com_data<<=1;
                    com_data|=temp;   
          }
          return(com_data);  
}
/****************************************************************************/

/****************************************************************************/
//湿度读取子程序
//温度高8位== TH_data
//温度低8位== TL_data
//湿度高8位== RH_data
//湿度低8位== RL_data
//校验 8位 == CK_data
//调用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void read_TRH()
{ int respond;
char TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,ST,untemp;
          //主机拉低18ms
          TRH=0;
         delay_ms(18);
         TRH=1;
          //DATA总线由上拉电阻拉高 主机延时20us
         delay_us();
         delay_us();
         delay_us();
         delay_us();
          //delay_us();
          //delay_us();delay_us();delay_us();delay_us();
          //主机设为输入 判断从机响应信号
             TRH=1;
          //判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行   
         if(!TRH)   
         {
                  respond=3;
                  //判断DHT11发出 80us 的低电平响应信号是否结束
                   while((!TRH)&& respond++);
                 respond=3;
                 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
                while(TRH && respond++);
               //数据接收状态   
                RH_temp = receive();
                RL_temp = receive();
                TH_temp = receive();
                TL_temp = receive();
                CK_temp = receive();
                TRH=1;ST=1;     
                 //数据校验
                 untemp=(RH_temp+RL_temp+TH_temp+TL_temp);
                 if(untemp==CK_temp)
                 {
//                          RH_ = RH_temp;
//                          RL_data = RL_temp;
//                         TH_data = TH_temp;
//                          TL_data = TL_temp;
//                          CK_data = CK_temp;
                                                DHT11_hum=RH_temp;
                                        //        DHT11_hum=((DHT11_hum)|(RL_temp));
                                                DHT11_temp=RH_temp;
                                        //        DHT11_temp=((DHT11_temp)|(RL_temp))        ;
                }
        }
}
#include <reg52.h>
#include"uart.h"
void Uart_init(void)
{
PCON &=0x7F;
SCON =0x50;
TMOD &=0x0F;
TMOD |=0x20;
TL1=0xFD;
TH1=0xFD;
ET1=0;
TR1=1;

}
void hai_uart_putchar(char i)
{
ES=0;
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}


char putchar(char  c)
{
hai_uart_putchar(c);
return c;
}
          #include "dht11.h"
        #include"delay.h"
        #include"uart.h"
        #include "stdio.h"
        #include  "reg52.h"
        #include "baojing.h"
        extern float DHT11_temp,DHT11_hum;
        

          void main(){
                   read_TRH();
                 Uart_init();
                        
                  while(1){
                  printf("temp is  温度%f \n",DHT11_temp);
                  printf("temp is  湿度 %f \n",DHT11_hum);
                  hwjiance();
                   ywjiance();
                   wdjiance();
                  delay_ms(1000);
                                     }
          }

为什么串口输出不了变化的温度呢  具体代码在压缩包里

用电监控系统.zip

51.74 KB, 下载次数: 12

回复

使用道具 举报

ID:94031 发表于 2019-12-7 10:00 | 显示全部楼层
回复

使用道具 举报

ID:658104 发表于 2019-12-7 12:27 | 显示全部楼层
read_TRH();Uart_init();这两个函数应该放在while(1)循环体里面,而不是外面
回复

使用道具 举报

ID:658104 发表于 2019-12-7 12:27 | 显示全部楼层
read_TRH();Uart_init();这两个函数应该放在while(1)循环体里面,而不是外面
回复

使用道具 举报

ID:658145 发表于 2019-12-7 13:40 | 显示全部楼层

read_TRH();Uart_init();这两个函数应该放在while(1)循环体里面,而不是外面
回复

使用道具 举报

ID:642152 发表于 2019-12-10 16:00 | 显示全部楼层
zaw1234567890 发表于 2019-12-7 12:27
read_TRH();Uart_init();这两个函数应该放在while(1)循环体里面,而不是外面

感谢大佬
回复

使用道具 举报

ID:642152 发表于 2019-12-10 16:00 | 显示全部楼层
liuqingshan943 发表于 2019-12-7 13:40
read_TRH();Uart_init();这两个函数应该放在while(1)循环体里面,而不是外面

懂了  谢谢大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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