阅读:1363回复:0
奇怪的sl811hs的寄存器,各位大侠请进!
奇怪的sl811hs的寄存器,各位大侠请进!
main() { .......... //单片机初始化等 SL811_RST = 0; //单片机对sl811芯片复位(复位引脚置低电平) DelayMs(50); SL811_RST = 1; //复位结束 DelayMs(100); DelayMs(3000); tmp = SL811Read(cDATASet); //读取版本信息 if (tmp == 0x20) //判断是否是1。5版本 { MCU_LED = 0x01; DelayMs(5000); } ComSendByte(tmp); SL811Write(0x11,0xFF); //向内部RAM0x11单元写入0xFF if(SL811Read(0x11) == 0xFF) { MCU_LED=0x02; DelayMs(3000); } ComSendByte(SL811Read(0x11));//将刚才写入单元的值送串口发送 ComSendByte(SL811Read(CtrlReg));//串口发送复位后的控制寄存器的值 SL811Write(IntStatus,INT_CLEAR ); //清除中断状态寄存器(0xFF) 。。。 ComSendByte(SL811Read(IntStatus)); //串口发送状态寄存器的值 问题: 1。前面我读取芯片版本信息正确0x20(1。5版本),但是我读取芯片复位后的Ctrg的值为0xEC, 不理解,数据手册上说是复位后这个寄存器的值应该为0啊!(见datasheet page9 5.1) 2.最后的两个语句,这两个语句中间无其他修改IntStatus的语句,之间就是其他的一些调试语句(用“。。。”省略了)。但是串口接受到的为0x40,不知道为什么,我也没有插入或者拔出U盘的操作(目前就是空板子调试MCU对sl811的读写操作),但是IntStatus的值为什么不是前面写入的0xFF呢?(我的读写函数读写其他的单元正常的,就是说读写函数应该没问题的)请各位有经验的大侠帮助啊!看问题可能出在何处? 就第二个问题,yyouking大侠说是读写可能不一样的,但是没有具体解释一下!不管怎么说还是非常感谢他!也希望大家讨论!因为我觉得读写一个寄存器(物理上并不象cDATASet读写是分开的啊),并没有其他中断事件会改变它的值,应该一致才对啊! |
|
最新喜欢:wping1... |