21ic问答首页 - 51串口打印不出来,12M晶振!!哪里出问题了!!求看!
51串口打印不出来,12M晶振!!哪里出问题了!!求看!
娇1112022-04-30
晶振12M,波特率设置的2400,打印就不出来,更别提别的数据了。
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit Temp_data = P3^6;
void DHT11_start();
unsigned char DHT11_rec_byte();
void DHT11_receive();
void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);
void InitUART(void);
unsigned int rec_dat[4];
void main()
{
InitUART();
P1 = 0Xf0;
EA = 1;
while(1)
{
DHT11_delay_ms(150);
DHT11_receive();
printf("Humi:%d.%d\n",rec_dat[0],rec_dat[1]);
printf("Temp:%d.%d C\n",rec_dat[2],rec_dat[3]);
}
}
void DHT11_start()
{
Temp_data =1;
DHT11_delay_us(2);
Temp_data =0;
DHT11_delay_ms(20);
Temp_data =1;
DHT11_delay_us(13);
}
unsigned char DHT11_rec_byte()
{
unsigned char i,dat;
for(i=0;i<8;i++)
{
while(!Temp_data);
DHT11_delay_us(8);
dat<<=1;
if(Temp_data ==1)
{
dat+=1;
}
while(Temp_data);
}
return dat;
}
void DHT11_receive()
{
unsigned int R_H,R_L,T_H,T_L;
unsigned char RH,RL,TH,TL,revise;
DHT11_start();
Temp_data =1;
if(Temp_data == 0)
{
while(Temp_data == 0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
rec_dat[0]=RH;
rec_dat[1]=RL;
rec_dat[2]=TH;
rec_dat[3]=TL;
}
}
void DHT11_delay_us(unsigned char n)
{
while(--n);
}
void DHT11_delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void InitUART(void)
{
SCON=0x50;
REN =1;
TMOD = 0x20;
TH1 = 0xE6; // ??????V1.3???2400???????
TL1 = TH1; // ???????????
PCON = 0x80; // ????????
T1 =1;
TR1 =1;
}
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit Temp_data = P3^6;
void DHT11_start();
unsigned char DHT11_rec_byte();
void DHT11_receive();
void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);
void InitUART(void);
unsigned int rec_dat[4];
void main()
{
InitUART();
P1 = 0Xf0;
EA = 1;
while(1)
{
DHT11_delay_ms(150);
DHT11_receive();
printf("Humi:%d.%d\n",rec_dat[0],rec_dat[1]);
printf("Temp:%d.%d C\n",rec_dat[2],rec_dat[3]);
}
}
void DHT11_start()
{
Temp_data =1;
DHT11_delay_us(2);
Temp_data =0;
DHT11_delay_ms(20);
Temp_data =1;
DHT11_delay_us(13);
}
unsigned char DHT11_rec_byte()
{
unsigned char i,dat;
for(i=0;i<8;i++)
{
while(!Temp_data);
DHT11_delay_us(8);
dat<<=1;
if(Temp_data ==1)
{
dat+=1;
}
while(Temp_data);
}
return dat;
}
void DHT11_receive()
{
unsigned int R_H,R_L,T_H,T_L;
unsigned char RH,RL,TH,TL,revise;
DHT11_start();
Temp_data =1;
if(Temp_data == 0)
{
while(Temp_data == 0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
rec_dat[0]=RH;
rec_dat[1]=RL;
rec_dat[2]=TH;
rec_dat[3]=TL;
}
}
void DHT11_delay_us(unsigned char n)
{
while(--n);
}
void DHT11_delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void InitUART(void)
{
SCON=0x50;
REN =1;
TMOD = 0x20;
TH1 = 0xE6; // ??????V1.3???2400???????
TL1 = TH1; // ???????????
PCON = 0x80; // ????????
T1 =1;
TR1 =1;
}
赞0
97443626dfeb000ebb.png (20.6 KB )
下载附件
2022-5-1 11:29 上传
评论
2022-05-01
赞0
44245626d121186f62.png (51.24 KB )
下载附件
2022-4-30 18:40 上传
你用的8051 特别吗?
评论
2022-04-30
赞0
{
SCON=0x50;
REN =1;
TMOD = 0x20;
TH1 = 0xE6; // ??????V1.3???2400???????
TL1 = TH1; // ???????????
PCON = 0x80; // ????????
T1 =1;
TR1 =1;
}
=====================
这个波特率也对?是2400bps?
评论
2022-04-30
赞0
评论
2022-04-30
赞0
最好使用11.0592M之类的晶振,这样标准波特率可以做到没有误差,12M晶振分频后误差大.
评论
2022-04-30
您需要登录后才可以回复 登录 | 注册