单片机与PC的串口通讯问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 13:22:50
现在我用C8051F单片机通过ZNE-100PT组成的虚拟串口与PC机进行通讯,在通讯的过程中,我的上位机采用的是串口调试助手,但是我发现,当使用单片机发数时,调试串口所显示的数据的最高位(即第7位)总是1,低7位基本正常。还有,偶尔出现几个错误的数据。
另外,当我用单片机发从0到7FH这些数据时,当调试助手接收到0x3f时,显示突然变为0x80,不知道是什么原因。
单片机代码如下:
#include "c8051F020.h"
xdata unsigned char a,b,c,i;
void delay(unsigned long num) reentrant
{
while(num--);
}

main()
{
WDTCN=0xde; //关看门狗
WDTCN=0xad;
OSCXCN&=0x8f;
OSCICN|=0x87; //设置单片机内部晶振为16MHz

XBR0|=0x04; //设置P0.0为TXD,P0.1为RXD,P0.0为推挽输出
P0MDOUT=0x01;
XBR2|=0x40;

a=0;
TMOD=0x20; //T1采用方式2,串口采用方式1
CKCON=0x10;
SCON0=0x50;
PCON=0;
TH1=230;
TR1=1;

while(1)
{
SBUF0=a;
while(TI0==0);
TI0=0;
delay(200);
a=a+1;
if(a==0x7f)a=0;
}
}

你的问题应该是单片机串口波特率不对。
当使用F020内部的串口时,不要用F020的内部晶振。内部精振的频率不准,会影响到串口的波特率。
使用22118400或24576000Hz的外部晶振,再用C8051系列的初始化向导编写初始化程序,应该能解决你的问题。