打印
[51单片机]

请教大家一个C51问题

[复制链接]
1822|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xg3469|  楼主 | 2014-7-22 16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教网友:
用STC90C58AD的P3串口接收前置机发的数据,连续两帧,帧之间没有间隔。其中一帧的长度为90多字节,另一帧约70字节。我用uchar xdata siobuf[180]接收全部数据,然后把它们分解为uchar xdata buf1[100]和uchar xdata buf2[80],为了验证接收的数据是否正确,我通过P1上的串口把数据发送到串口调试助手上进行显示,到这一步结果都正确。以下就出问题了,我通过类似“变量1=buf1[i];和变量2=buf2[j];”的方法提取buf1和buf2中的有效字段,提取出来的都是buf1中的,这是怎么回事呀,编译时我也用了large模式。请大家帮助分析一下。先谢各位了!

相关帖子

沙发
ayb_ice| | 2014-7-22 17:22 | 只看该作者
这还不简单

在变量窗口看buf1【】,buf2【】,变量1,变量2不就知道了

如果这些值没有问题,建议在关键代码部分禁止中断

使用特权

评论回复
板凳
xg3469|  楼主 | 2014-7-22 20:19 | 只看该作者
先谢谢ayb_ice,我还是没搞明白,需要仿真吗?

使用特权

评论回复
地板
xg3469|  楼主 | 2014-7-22 20:58 | 只看该作者
谢谢ayb_ice,在debug

使用特权

评论回复
5
xg3469|  楼主 | 2014-7-22 21:02 | 只看该作者
谢谢ayb_ice,在debug窗口看吗?

使用特权

评论回复
6
ZG11211| | 2014-7-22 21:04 | 只看该作者
本帖最后由 ZG11211 于 2014-7-22 21:07 编辑

xdata的速度有点慢,使用时需要考虑这个因素,避免出现错误。单片机因为内存小,一般最好不要一次接收这么多的数据放到内存里,要充分发挥单片机运行速度快的优势,接收到的数据立即进行处理,处理之后将不需要的数据丢弃,避免长时间占用内存。

使用特权

评论回复
7
xg3469|  楼主 | 2014-7-22 22:10 | 只看该作者
谢谢ZG11211,我再考虑考虑,总觉得边接收边处理不好办。谢谢热心的朋友!

使用特权

评论回复
8
ddllxxrr| | 2014-7-23 05:40 | 只看该作者
肯定是XDATA超范围了。楼主可考虑外接EEPROM

使用特权

评论回复
9
xg3469|  楼主 | 2014-7-23 07:16 | 只看该作者
版主好!版主辛苦了!我看了看编译结果,xdata用了400字节,STC90C58AD内部有4K字节呢。在接收的数据中两个字段是8位数,还有一个7位数,要和其它数累加。我看了只能接收完再处理。

使用特权

评论回复
10
xg3469|  楼主 | 2014-7-26 10:41 | 只看该作者
再请教各位,使用char xdata siobuf[180] _at_ 0x0000;需要什么条件?我已经用了#include <absacc.h>了,编译时提示_at_前面缺“;”。外部存储器空间我也定义在0x0000-0x7fff了。

使用特权

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

本版积分规则

5

主题

595

帖子

1

粉丝