书9500 发表于 2016-4-27 14:47:09

关于STC15W系列单片机“code”的问题

本帖最后由 书9500 于 2016-4-27 19:55 编辑

        调了一下午的STC15W408AS挂接两个SPI设备SSD1306驱动的OLED和NRF24L01的程序,遇到了一个很郁闷的问题。
        OLED正常显示,也就是说SPI没问题,但是NRF24L01死活不好使。
        看了好几遍程序,也没找出原因,只好一点一点的分析,耗费了3个多小时的时间解决这个问题。
        就是死在下面这个程序里,检测NRF的子函数。应该是大家通用的程序。
/**************************************************************************/
//检测24L01是否存在
//返回值:0,成功;1,失败       
u8 NRF24L01_Check(void)
{
        u8 codebuf={0XA5,0XA5,0XA5,0XA5,0XA5};
        u8codebufo={0,0,0,0,0};
        u8 i;
        NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.       
        NRF24L01_Read_Buf(NRF_READ_REG+TX_ADDR,bufo,5); //读出写入的地址
        for(i=0;i<5;i++)        if(bufo!=0XA5)break;
       
        if(i!=5)return 1;//检测24L01错误       
        return 0;               //检测到24L01
}
/**********************************************************************/       
        在每条语句之间插入串口返回,发现NRF和单片机的通信正常,也就是单片机能从config寄存器里面读出0x0E,证明确实SPI没问题。
        后来突然觉得,        
                                u8codebufo={0,0,0,0,0};
        这条语句里的“code”好像有问题,于是code换成了xdata,或者索性不加。惊奇的发现好使了!


       
        仔细想了一下
        code是写在了单片机的flash程序存储器里,xdata写在了扩展RAM里,直接定义的话应该是写在了内部RAM里面。
        然而flash程序存储器应该是只读的,写数据常量是可以的,但是不能定义变量。
       
        唉,写了这么长时间程序了,还没搞明白51的存储器结构。。。

书9500 发表于 2016-4-27 19:55:59

下面的字怎么变斜了。。

小李非刀 发表于 2016-4-29 16:49:39

C51基础。。。。
页: [1]
查看完整版本: 关于STC15W系列单片机“code”的问题