这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求助:AT89C51串口通信设置问题

共17条 2/2 1 2 跳转至
菜鸟
2010-05-31 17:37:35     打赏
11楼

我的这个模块主要是根据接收的数据帧来决定是要收数据还是发送数据的。如果收到的一帧数据是一0D开头的,那就说明是计数器在向我发送数据,然后我就将跟在其后的数据接收,并处理,将此数据转换为另外一种数据帧格式存储起来;而如果我收到的数据帧是以03 03 开头的,则说明是电脑,或则说是张上位机需要我返回数据,此时我就需要将刚刚处理好的数据转发出去,其实其功能就像是一个数据格式转换装置...


高工
2010-05-31 18:54:33     打赏
12楼

刚看到,如果你是连续接收,那么无校验肯定是要出错的。因为UART是以一个负脉冲为起始位的,然后采样


高工
2010-05-31 18:55:30     打赏
13楼

还是也用偶检验的吧。把你的代码贴出来看看


菜鸟
2010-05-31 20:55:42     打赏
14楼

这次是用汇编写的,读起来有点累,不过还请耐心的看哈~~~

接收数据代码:
RE_DATA:
     CLR  RI
     MOV  A,SBUF       ;A 中1的个数  ,p=1,奇数,P=0,偶数个
     CLR C
     JNB  P,RE_DATA2
     SETB C
     RE_DATA2:
          JNB RB8,RE_DATA3     ;TB8=1
          JC AA                                ;C=1,接收数据
          AJMP END_RS               ;校验不正确,则返回
          RE_DATA3:                     ;TB8=0
                  JNC AA                     ;C=0接收数据
                  AJMP END_RS       ;校验不正确,则返回
                  AA:                            ;偶校验正确,接收数据只缓冲区
                  NOP
                  MOV  @R1,A           ;接收数据

发送数据代码:
MOV R0,#T_SEND  ;发送数据缓冲区首地址
MOV R1,#T_LENGTH;发送数据长度
SEND:
         MOV  A,@R0        
         CLR C   ;发送设为偶校验
         MOV C,PSW.0  ;A 中1的个数  ,p=1,奇数,P=0,偶数个
         JC SEND3
         CLR TB8
         AJMP SEND5
         SEND3:
               SETB TB8
               SEND5:
                         MOV SBUF,A
                        SEND1: 
                                   JBC TI,SEND2
                                    AJMP SEND1
                                    SEND2:
                                          INC R0
                                          DJNZ R1,SEND
红色部分是我为了实现偶校验而加的生成TB8和RB8的代码...
这时的UART设置的是mode3...


高工
2010-05-31 21:03:55     打赏
15楼
汇编的啊。真的抱歉啦。当年没怎么学过汇编。要是C的,就给你看看

菜鸟
2010-05-31 21:08:16     打赏
16楼
哦,呵呵,没关系的,还是很谢谢你的~~~

菜鸟
2010-06-01 07:57:00     打赏
17楼
我的模块和电脑通信,收发偶校验的数据帧终于调试好了,嘻嘻~~~
接下来还有和那个计数器模块相连的调试...

共17条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
站长统计