关于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的存储器结构。。。 下面的字怎么变斜了。。 C51基础。。。。
页:
[1]