关于51单片机程序跑飞的问题

2020-01-23 14:44发布

本帖最后由 优享家 于 2014-5-11 11:03 编辑

我现在的情况是代码之前有朋友用在stc11芯片上已经OK,现在我移植(没改多少)至89就出现了串口通信时会死在哪里的情况
我选用的是89C52,内部ram为512
1、我在keil中设置memory model 为compact,code optimization level为8时
编译出来的程序结果是:
Program Size: data=172.2 xdata=67 code=3343
疑问:
(1)按理说89C52有128的data区和128的idata区以及有256的xdata区,但这里data区只用了172.2而不是256就将其他存储存至xdata区,要知道xdata区的处理速度要小于(i)data区
(2)Program Size: data=172.2的data与idata是怎样分配的
2、我在keil中设置memory model为small,code optimization level为8时
编译出来的结果是
Program Size: data=239.2 xdata=0 code=2980
疑问:
(1)按照如下的情况我的代码应该是没有超过89c52的ram((i)data=256),所以应该不会有程序跑飞的情况吗,但情况是有问题。

如上问题,请各位帮忙分析下,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
davy_000
1楼-- · 2020-01-23 17:17
89c52是12分频,11F是单指令周期,可能是你的时序问题引起的。
jswd0810
2楼-- · 2020-01-23 18:14
 精彩回答 2  元偷偷看……
优享家
3楼-- · 2020-01-23 22:09
问题得到初步解决,在通过串口发送时先关ES串口中断。在发送完成后再开ES串口中断
优享家
4楼-- · 2020-01-24 04:00
davy_000 发表于 2014-5-11 11:24
89c52是12分频,11F是单指令周期,可能是你的时序问题引起的。

正解,11的速度要快于89,在中断那里出现了问题,我先关ES待发送完后开ES,结果就好了,但是为何会有这种情况,我在串口中断中判断是否为接收中断,不是的话就跳出,这样程序就执行不了了吗
优享家
5楼-- · 2020-01-24 09:15
jswd0810 发表于 2014-5-11 12:13
89C52内部ram为256,不是512,在一个如楼上所言,时钟周期不一样,波特率同样的设置就要出问题 ...

波特率设置应该没有问题,内部ram256还没有超,现在的情况应该是串口中断出了问题
oner
6楼-- · 2020-01-24 11:34
1、因为89C52有256字节的内部扩展RAM,就是XDATA,你在用compact模式编译时,默认将变量分配到PDATA中,就是XDATA的低256字节,在这里等于XDATA;
2、设置成small模式编译,变量就存在data区了嘛,所以就没用到XDATA嘛,编译后XDATA=0嘛。很好理解的嘛。
3、STC11是1T单片机呢,你移植到89C52,得保证他之前用STC11是当做12T来用呀,还有晶振大小呀什么的都会影响程序运行的,不保证一致,你得改下程序的细节,包括延时呀中断呀定时呀什么的。
GOD BLESS YOU.

一周热门 更多>