5453|8

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C8051F340串口通讯的问题 [复制链接]

目前正在做一个上下位机通讯的程序,上位机使用的是VC6,下位机采用C8051F340。下位机串口采用中断接收,串口波特率9600,采用串口调试工具做过检测,也用上位机的程序做过测试,在实验中下位机能够接收数据,但经常接收数据不完整,或者是丢失数据,晶振采用11.0592Mhz,下位机通信的部分程序贴出来如下,希望各位相助,头都大了。
void UART0_Init(void)
{
        SCON0|=0x10;                                                            
        CKCON =0x02;//系统时钟24576000  T1时钟=24576000/48=512000,48分频
        TH1=0xF4;//波特率为9600
        TL1=0xF4;                        
        TMOD=0x20;                     
        TR1=1;                 
}

void interrupt_UART0(void) interrupt 4
{
        EA=0;
        if(RI0)
        {
                RI0=0;
                Con=1;
                m_Buf[RecNum++]=SBUF0;
                if(RecNum==8)
                {
                    RecNum=0;
                }
        }
        EA=1;
}

最新回复

我正学习呢,大家一起讨论太好了  详情 回复 发表于 2010-4-23 23:57
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看程序,貌似没啥问题

自己写个协议约定不可以不?

比如在你的数据加头,加长度(为命令+数据长度+校验),加命令,xxxxx(数据) 加校验

底下处理时,根据头来判断数据合法,按长度接受数据。。。。

 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
兄弟,你说的这个是这样子的,我每次发的命令都是固定长度的,经常出现的情况是数据不能完整地收到,比如发个01 02 05 EE EF 39 57 42这样子的数据,可能能接到的是05 EE EF 39 57 42这个样子,我的程序后面要加错误处理的,但问题是这段程序出错的机率也不能太大,发个一两次就出一次问题,这个机率我实在不能忍受。
在电脑上用串口调试软件,设置的波特率格式为"9600,N,8,1",发送的时候就不时出现上面我给你介绍的那种情况,除非每次从上位机只发一个字符,比如"01",等上100ms左右的时间再发"02",这样的接收不会出错,但这样发实在太慢,也不能满足要求。我在VC的程序中试过的,将那个等待时间改为50ms下位机都会接收出错。
麻烦专家和各位高手帮我,谢谢了
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
我这个程序是删节之后用来测试的,wanyeye这位兄弟说的在你的数据加头,加长度,加命令,xxxxx(数据) 加校验

底下处理时,根据头来判断数据合法,按长度接受数据。。。。 ,这些事情我写的正式的程序里面都有,但关键是数据都接收不完整,还没有到处理那个问题的地步,wanyeye说的我已经记下了。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
在实验中下位机能够接收数据,但经常接收数据不完整,或者是丢失数据

介个,如果板子上没有什么干扰的话

你看看你的时钟源,别用什么片内的RC什么的,一定要选片外的晶体

你再看看

CKCON =0x02;//系统时钟24576000  T1时钟=24576000/48=512000,48分频
TH1=0xF4;//波特率为9600

这两个的配置和计算

要是可能的话,尽量选数据手册里给的推荐值
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
可以把波特率改的更高或更低些,看出现的问题是不是跟你在9600时问题一样,首先要明确问题出现在哪里。
按照楼上兄弟所说的选数据手册的推荐值试试。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢专家和楼上的这位兄弟,我的程序问题已经找到了,串口这一段程序没有出问题,问题出在中断优先级上,低优先级的串口中断被高优先级的定时器中断打断了,而我的中断优先级没有设置,导致程序出了问题。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
我也学人留个记号。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
我正学习呢,大家一起讨论太好了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表