打印

串口数据出错问题(波特率;9600,单片机型号:STC12C5204AD)

[复制链接]
1409|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
awangpeigang|  楼主 | 2013-6-6 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请朋友们根据下面数据帮我分析一下出错的原因:
    我是用串口调试小助手作为上位机,单片机作为下位机,并用P1口显示上位机发来的数据(接了8只发光二极管,电平转换用的是MAX232CPE).         发送一组两位16进制数。
    测试16进制高位。                                      

           串口小助手              P1口                  
  发送        接收      (1是亮,0是灭)                                                      
  10                    80                0010 0000
     20                   a0                0100 0000
     30                    b0               0110 0000
     40                    c0                1000 0000
     50                    d0               1010 0000
     60                   e0                 0110 0000
     70                    f0                  1110 0000
     80                   80                  0000 0000
     90                   90                  0010 0000
     a0                   a0                  0100 0000
     b0                   b0                  0110 0000
     c0                    c0                  1000 0000
     d0                   d0                   1010 0000
     e0                     e0                 1100 0000
     f0                      f0                   1110 0000

    测试16进制低位。
    串口小助手                P1口
  发送        接收      (1是亮,0是灭)
   01                  81                0000 0001
     02                   86                0000 0110
     03                    87               0000 0111
     04                   80                0001 0000
     05                    81               0000 1001
     06                    86               0000 1110
     07                    87                 0000 1111
     08                    88                 0001 0000
     09                   89                  0010 0001
     0a                   8e                  0001 1110
     0b                   8f                  0001 0111
     0c                    88                 0001 1000
     0d                   89                  0001 1001
     0e                    8e                 0001 1110
     0f                      8f                   0001 1111
void uart(void) interrupt 4
{
    unsigned char a,b;
    if(RI)
        {
           a=SBUF;
                            p1=a;//
                RI=0;            
                if(a==0x84)//接收到字头
                    {
                                        b=0x0f;
                       SBUF=b;
                                                   while(TI!=1);
                         TI=0;
                        }
                  else
                    {
                            SBUF=a;
                                                                    while(TI!=1);
                                         TI=0;
                                                                  p2=~p2;
                          }
    }
}




   

相关帖子

沙发
mmuuss586| | 2013-6-6 12:41 | 只看该作者
啥问题啊????

使用特权

评论回复
板凳
wh6ic| | 2013-6-6 13:43 | 只看该作者
中断里面的while语句和紧跟的处理都去掉,怎么能在中断里呆着不出来。
那个变量b有什么用,多此一举。

使用特权

评论回复
地板
zhangmangui| | 2013-6-6 19:05 | 只看该作者
前面的没明白什么意思  什么高位和低位啊   
从你的程序看你的意思是单片机收到0x84  就送回来0x0f
如果收到的不是0x84  就发送的什么送回来什么  
这样测试就可以了啊   
记得在发送数据的串口调试助手中选择HEX  接收到的以hex显示

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝