本帖最后由 calor 于 2010-7-12 21:23 编辑
最近在网上买了一块433MHz的无线通信模块,卖家并没有提供芯片资料,只是给了一个简单的模块介绍。
资料上介绍模块是通过标准SPI时序与MCU通讯,遂用自己已有的一块单片机开发板做了个简单实验,可是并没有成功,求各位帮忙找找问题。
用PI口模拟的SPI时序,读取无线通信模块内部寄存器值。烧录程序后,P2口为0xFF,而按照资料上的介绍结果应该是0x03.
程序如下,小弟初学,程序是自己按照时序写的,我觉得可能是程序的问题。大家帮忙找找原因,谢谢了。(P1.0-CS,P1.1-SDI,P1.2-SDO,P1.3-SCLK,U8-unsigned char )
#include <reg52.h>
#include "init.h"
u8 value;
void delay(u8 x);
u8 read_register(u8 reg);
void delay(u8 x)
{
u8 i;
for(i=0;i<x;i++);
}
u8 read_register(u8 reg)
{
u8 i=0;
CS=0;//片选信号拉低
delay(50);//RF启动延迟
SDI=0;//写标志
SCLK=0;
delay(50);
SCLK=1;
delay(50);
for(i=7;i>0;i--)//发送地址
{
SDI=(reg>>i)&0x01;//得到地址最高位
SCLK=0;
delay(50);
SCLK=1;
delay(50);
}
for(i=8;i>0;i--)//读取数据
{
value=value<<1;
value=value|SDO;
SCLK=0;
delay(50);
SCLK=1;
delay(50);
}
CS=1;
SCLK=0;
delay(50);
return(value);
}
void main()
{
CS = 1;
SCLK = 0;
read_register(0x00);
P2=value;
while(1);
}
附上KEIL模拟的时序图与资料提供的操作时序。 |