[51单片机] 请教大家一个C51问题

[复制链接]
2105|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
 楼主| xg3469 发表于 2014-7-22 21:02 | 显示全部楼层
谢谢ayb_ice,在debug窗口看吗?
ZG11211 发表于 2014-7-22 21:04 | 显示全部楼层
本帖最后由 ZG11211 于 2014-7-22 21:07 编辑

xdata的速度有点慢,使用时需要考虑这个因素,避免出现错误。单片机因为内存小,一般最好不要一次接收这么多的数据放到内存里,要充分发挥单片机运行速度快的优势,接收到的数据立即进行处理,处理之后将不需要的数据丢弃,避免长时间占用内存。
 楼主| xg3469 发表于 2014-7-22 22:10 | 显示全部楼层
谢谢ZG11211,我再考虑考虑,总觉得边接收边处理不好办。谢谢热心的朋友!
ddllxxrr 发表于 2014-7-23 05:40 | 显示全部楼层
肯定是XDATA超范围了。楼主可考虑外接EEPROM
 楼主| xg3469 发表于 2014-7-23 07:16 | 显示全部楼层
版主好!版主辛苦了!我看了看编译结果,xdata用了400字节,STC90C58AD内部有4K字节呢。在接收的数据中两个字段是8位数,还有一个7位数,要和其它数累加。我看了只能接收完再处理。
 楼主| xg3469 发表于 2014-7-26 10:41 | 显示全部楼层
再请教各位,使用char xdata siobuf[180] _at_ 0x0000;需要什么条件?我已经用了#include <absacc.h>了,编译时提示_at_前面缺“;”。外部存储器空间我也定义在0x0000-0x7fff了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

595

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部