关于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),所以应该不会有程序跑飞的情况吗,但情况是有问题。

如上问题,请各位帮忙分析下,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
优享家
2020-01-24 15:36
xpxp 发表于 2014-5-11 19:34
1T的移植到12T上,楼主这么改下就说解决了,恐怕只有糊弄自己了。根本性的东西都没动! ...

没完全明白,为什么我增加就好了——按理说我的串口中断判断完是否为接受中断,不是的话就跳出,但是程序就死在那里。
如下更改后,发送OK
void SendChar(uchar n)
{
        SBUF = n;
        ES = 0;     //增加
        while (TI==0);//发送数据
        ES = 1;    // 增加
        TI=0;
       
}

但是新的问题是我的接受不行了,SBUF可能接收到乱码,在串口中断中没有接收到东西,我想应该是速度的问题,89太慢了
void SerialHandler(void) interrupt 4 using 3
{

    uchar nCh = 0;
        uchar nTmp = 0;
        SendChar('%');
        Delay(10);
                        EA = 0;
        if(!RI)      //不是接收中断
        {
                TI = 0;
                return;         //退出
        }


    RI = 0;                 //清中断
   
    if(nCmdBusy == DEV_BUSY)         //若忙
    {
        return;                                         //反回
    }
   
        nCh = SBUF;         //读内容         ————————程序这里没有读到数据。

一周热门 更多>