一个简单的单片机程序,各位帮忙

lixiqin12345   2007-1-1 17:51 楼主
我在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;
                               
                }
}

回复评论 (11)

速率对吗?

你的配置是9600bps,快了一倍
点赞  2007-1-2 12:00
谢谢 但还是存在问题 不管我发什么数字,高四位显示的始终是0111 低四位显示倒没问题,比如我发 1 ,他显示 01110001 .可发大写字母 A ,却变成了10000001
点赞  2007-1-2 18:15
前两天的收发程序搞定啦?
点赞  2007-1-4 15:23
还没呢 现在试了个最简单的接受程序 发现收到的数据高四位还是有问题
我是在做毕业设计
点赞  2007-1-4 19:47
PC机发送1,是不是发送的1的ASCII码?就是调试助手有可能是发送的'1'字符,而不是0x01。
点赞  2007-1-5 10:25
楼主的程序没问题的,我试了下,是正常的。发送1,显示00110001,发送2显示00110010。
我用的89c51,22.1184M,波特率为9600
点赞  2007-1-5 13:38
我才发现输入 1 ,是以字符'1'发送的呵呵
是不是晶振的问题,我用的是12M,算了下误差超过8%
点赞  2007-1-5 15:28
呵呵,其实有些时候都是所谓的小问题吧
   还是仔细点比较好啊,记得我老师带我毕设的时候,让我最记忆忧心的一句话就是:
    细节论成败!
不过还是恭喜你,终于好用了啊!
点赞  2007-1-5 15:35
我还是比较惦念前两天的那个程序,应该是buffer[]定义的问题,
        谁有条件再试一下吧,好用了给点分,呵呵
点赞  2007-1-5 15:39
你所说的发光二极管,是8段led,还是一个脚对应一个小灯泡?如果是led的话你直接用p2肯定不行,要根据数字编码来显示。如果是一个脚对应一个小灯泡的话,我就没法测试了,我这边有4位八段led显示的调用子程序。我也在调试串口,原来发一个数可以,现在想做个协议,发好多数据,就有问题了,新板子还没有调通呢
点赞  2007-1-7 11:05
应该是晶振的问题吧
我前一阵用C8051F内部晶振0.3%误差都收发不正常
换一个11.0592M的就豁然开朗了
楼主也试试吧
点赞  2007-1-9 09:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复