标题: 串口调试软件接收的数据和示波器测的数据不同?求教。 [打印本页]
作者: minikuba 时间: 2017-3-20 16:09
标题: 串口调试软件接收的数据和示波器测的数据不同?求教。
程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar SendAscii_Startflag,receivedata[12];
sfr AUXR=0x8e;
void delay0(unsigned int i)
{
while ((i--)!=1 ); // 延时10*i个机器周期,晶振频率11.05926hz;
}
void Uart_Time1_Init()
{
/*采用波特率加倍*/
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1; //串口中断允许位;
EA=1;
}
void Laser_Configuration()
{
uchar i;
ES=0;
for(i=0;i<SendAscii_Startflag;i++)
{
SBUF=receivedata[i];
while(!TI);
TI=0;
}
ES=1;
SendAscii_Startflag=0;
}
void main()
{
Uart_Time1_Init();
while(1)
{
Key_Scan();
if(SendAscii_Startflag==5)
Laser_Configuration();
}
}
void Uart_ser() interrupt 4 //串口中断;
{
ES=0;
if(RI)
{
RI=0;
receivedata[SendAscii_Startflag]=SBUF;
SendAscii_Startflag++;
}
if(TI)
TI=0;
ES=1;
}
用不同的串口调试软件发送的数据和接收的数据不同;用示波器测得的rxd,txd数据是对的。是以示波器为主吗?谢谢!!
作者: zl2168 时间: 2017-3-20 17:47
本帖最后由 zl2168 于 2017-3-20 17:48 编辑
匹配问题。给你个参考案例,对照检查一下。单片机与PC机虚拟串行通信
先Proteus仿真一下,确认有效。
实验16 与PC机虚拟串行通信.rar
(151.41 KB, 下载次数: 8)
以上摘自张志良编著《80C51单片机实用教程》ISBN978-7-04-044532-9,高教社出版。 书中电路和程序设计有详细说明,程序语句条条有注解。
作者: imxuheng 时间: 2017-3-20 21:18
收发双方的波特率匹配吗
作者: minikuba 时间: 2017-3-21 09:09
是的,都是9600。
作者: minikuba 时间: 2017-3-21 09:26
好的,我试试!谢谢!请问,设置串口通讯初始化的值有没有什么规律,还是说完全凭借经验或者别的什么??
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |