minhead
驱动牛犊
驱动牛犊
  • 注册日期2003-05-15
  • 最后登录2006-05-28
  • 粉丝0
  • 关注0
  • 积分98分
  • 威望14点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1363回复:0

奇怪的sl811hs的寄存器,各位大侠请进!

楼主#
更多 发布于:2005-08-11 10:06
  奇怪的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读写是分开的啊),并没有其他中断事件会改变它的值,应该一致才对啊!

最新喜欢:

wping1234wping1...
游客

返回顶部