单片机串口发送数据一直不成功,求教各位帮忙指点
时间:10-02
整理:3721RD
点击:
在下写了一个DHT11温湿度传感器的程序,现在检测和LCD显示已经成功,可是串口发送总是失败串口助手也没法显示。之前自学的串口通信部分也只有半桶水没能完全掌握,这几天几夜想破头都不知到底哪里出了错,现在附上这部分串口的C代码,希望各位看官高手大神能够帮个忙,在这里谢谢各位了!
#include <reg52.h>
#include <intrins.h> //包含_nop_()函数定义的头文件
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,flag_on,flag_time,t0,a;
/************************串口初始化****************/
void chuankou_init()
{
SCON=0X50;
TMOD=0X21;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=0xfd;
TL1=0xfd;
ET0=1;
TR1=1;
SM1=1;
SM0=0;
REN=1;
EA=1;
ES=1;
}
/******************串口通信**********************/
void chuankou()
{
if(flag==1)
{
flag=0;
ES=0;
TI=1;
switch(flag_on)
{
case 0: puts("Start!\n"); TR0=1;break;
case 1: puts("End!\n"); TR0=0;break;
case 2: puts("Error!\n"); break;
}
while(!TI);
TI=0;
ES=1;
}
if(flag_time==1)
{
flag_time=0;
ES=0;
TI=1;
printf("Hum:%d.%d\n",H_temp/100,H_temp%100);
if(((H_temp/100)>h_h)||((H_temp/100)<h_l))
{
printf("Hem waring!\n");
}
printf("Tem:%d.%d\n",T_temp/100,T_temp%100);
if(((T_temp/100)>h_h)||((T_temp/100)<h_l))
{
printf("Tem waring!\n");
}
while(!TI);
TI=0;
ES=1;
}
}
/************主函数****************************/
void main(void)
{
chuankou_init();
while(1)
{
chuankou();
}
}
/***********串口中断***************/
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
if(a==1)
flag_on=0;
else
if(a==2) flag_on=1;
else flag_on=2;
}
#include <reg52.h>
#include <intrins.h> //包含_nop_()函数定义的头文件
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,flag_on,flag_time,t0,a;
/************************串口初始化****************/
void chuankou_init()
{
SCON=0X50;
TMOD=0X21;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
TH1=0xfd;
TL1=0xfd;
ET0=1;
TR1=1;
SM1=1;
SM0=0;
REN=1;
EA=1;
ES=1;
}
/******************串口通信**********************/
void chuankou()
{
if(flag==1)
{
flag=0;
ES=0;
TI=1;
switch(flag_on)
{
case 0: puts("Start!\n"); TR0=1;break;
case 1: puts("End!\n"); TR0=0;break;
case 2: puts("Error!\n"); break;
}
while(!TI);
TI=0;
ES=1;
}
if(flag_time==1)
{
flag_time=0;
ES=0;
TI=1;
printf("Hum:%d.%d\n",H_temp/100,H_temp%100);
if(((H_temp/100)>h_h)||((H_temp/100)<h_l))
{
printf("Hem waring!\n");
}
printf("Tem:%d.%d\n",T_temp/100,T_temp%100);
if(((T_temp/100)>h_h)||((T_temp/100)<h_l))
{
printf("Tem waring!\n");
}
while(!TI);
TI=0;
ES=1;
}
}
/************主函数****************************/
void main(void)
{
chuankou_init();
while(1)
{
chuankou();
}
}
/***********串口中断***************/
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
if(a==1)
flag_on=0;
else
if(a==2) flag_on=1;
else flag_on=2;
}
电脑肯定没问题的,我烧录其他相关串口程序是可以的。倒是程序没有问题吗?
你看看串行通信的中断部分
虚心请教串口中断部分有什么问题呢?