我在PC机上用串口调试助手发送 1 到单片机,但显示出来的却是 0xF4,发送2显示出来的是 0xF5,发送3显示出来的还是0xF5,发送4显示出来的又变成了0xF4,而我认为发出1应该显示的是0x01 ,2 就是0x02 (我是把收到的数据赋到P2口用发光二极管显示) 相关程序如下 这个程序应该没问题的吧 望高手指教
#include
#include
unsigned char ch;
void init_serialcomm()
{
SCON=0x50; //serial mode 1,8-bit UART,enable ucvr
TMOD=0X20; //timer 1,mode 2,8-bit reload
PCON=0x80; //SMOD=1
TH1=0xF4; //Baud:4800 fosc=11.0592M
IE=0x90; //Enable Serial Interrupt
TR1=1; // timer 1 run
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI)
{
RI=0;
ch=SBUF;
}
}
main()
{
init_serialcomm(); //初始化串口
while(1)
{
P2=ch;
}
}
谢谢 但还是存在问题 不管我发什么数字,高四位显示的始终是0111 低四位显示倒没问题,比如我发 1 ,他显示 01110001 .可发大写字母 A ,却变成了10000001
还没呢 现在试了个最简单的接受程序 发现收到的数据高四位还是有问题
我是在做毕业设计
PC机发送1,是不是发送的1的ASCII码?就是调试助手有可能是发送的'1'字符,而不是0x01。
楼主的程序没问题的,我试了下,是正常的。发送1,显示00110001,发送2显示00110010。
我用的89c51,22.1184M,波特率为9600
我才发现输入 1 ,是以字符'1'发送的呵呵
是不是晶振的问题,我用的是12M,算了下误差超过8%
呵呵,其实有些时候都是所谓的小问题吧
还是仔细点比较好啊,记得我老师带我毕设的时候,让我最记忆忧心的一句话就是:
细节论成败!
不过还是恭喜你,终于好用了啊!
我还是比较惦念前两天的那个程序,应该是buffer[]定义的问题,
谁有条件再试一下吧,好用了给点分,呵呵
你所说的发光二极管,是8段led,还是一个脚对应一个小灯泡?如果是led的话你直接用p2肯定不行,要根据数字编码来显示。如果是一个脚对应一个小灯泡的话,我就没法测试了,我这边有4位八段led显示的调用子程序。我也在调试串口,原来发一个数可以,现在想做个协议,发好多数据,就有问题了,新板子还没有调通呢
应该是晶振的问题吧
我前一阵用C8051F内部晶振0.3%误差都收发不正常
换一个11.0592M的就豁然开朗了
楼主也试试吧