单片机串口乱码的原因

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:55:54
#include "at89x52.h"
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//#define IN0 XBYTE[ 0x7ff8 ]
uint a = 0;
//#define SCAN_CYCLE 300
static uchar idata ad[ 3 ];
sbit st=P3^2;//0\1
sbit oe=P3^1;
sbit eoc=P3^0;
uchar x,ad_0809;

void timer0( ) interrupt 1 //中断
{
TH0 = 0xf8;
TL0 = 0xd7;
a=1;
}

void ad0809 () //A /D转换,结果存ad[ 0 ] , ad[ 1 ]
{
oe=0;//以下三条指令为起动AD0809
st=0;
st=1;
st=0;
delay(1250);
while(!eoc);//等待转换结束
oe=1;//取出读得的数据
x=P2;
oe=0;
}

void delay(uint del)//延时程序
{
uint i;
for(i=0;i<=del;i++);
}

void communicate ( uchar ad[3])//数据传输
{
IE&=0xef;
SBUF = ad[0];
while (TI == 0) ;//发送中断标志位,发送时清零
TI = 0;
SBUF = ad[1];
while (TI == 0) ;
TI = 0;
SBUF = ad[2];
whi

我的博客上有相关的说明,关键是你要搞清楚传送的是ASII码,

你的显示方式可能不对把!应该用数字显示(十六进制),如果用字符显示那就是乱码了啊!

乱码就两个问题,一是显示的问题,你要是用串口助手的话勾选“十六进制显示”,还有就是波特率不对,你再计算一下吧。

上位机串口波特率、起止位数、校验没有设置正确吧?

主要是频率问题。
寻址要保证正确。