今天在调试AS3933,由于发射端硬件还没做好,接收端的用信号发生器来模拟。经过测试发现AS3933读写正常,特意上传给大家参考下。
#define command 3<<6
#define read 1<<14
#define write 0<<14
#define CS P13
#define SCL P14
#define MOSI P15
#define MISO P16
#define wait_cnt1 3
void delay_us(unsigned short cnt)
{
while(cnt--);
}
void as3933_write_dcommand(unsigned char addr)
{
unsigned char tmp=0;
unsigned char i=0;
addr&=0x3f;
tmp=addr|command;
CS=0;
SCL=0;
CS=1;
for(i=0;i<8;i++)
{
if(tmp&(1<<(8-i-1)))
MOSI=1;
else
MOSI=0;
SCL=1;
delay_us(wait_cnt1);
SCL=0;
}
MOSI=0;
delay_us(wait_cnt1);
CS=0;
}
void as3933_write_byte(unsigned char addr, unsigned char dat)
{
unsigned short tmp=0;
unsigned char i=0;
addr&=0x3f;
tmp=(((unsigned short)addr)<<8)|dat|write;
CS=0;
SCL=0;
CS=1;
for(i=0;i<16;i++)
{
if(tmp&((unsigned short)1<<(16-i-1)))
MOSI=1;
else
MOSI=0;
SCL=1;
delay_us(wait_cnt1);
SCL=0;
}
MOSI=0;
delay_us(wait_cnt1);
CS=0;
}
unsigned char as3933_read_byte(unsigned char addr)
{
unsigned short tmp=0;
unsigned char dat=0;
unsigned char i=0;
addr&=0x3f;
tmp=(((unsigned short)addr)<<8)|read;
CS=0;
SCL=0;
CS=1;
for(i=0;i<8;i++)
{
if(tmp&((unsigned short)1<<(16-i-1)))
MOSI=1;
else
MOSI=0;
SCL=1;
delay_us(wait_cnt1);
SCL=0;
}
MOSI=0;
for(i=0;i<8;i++)
{
SCL=1;
delay_us(wait_cnt1);
SCL=0;
if(MISO)
dat|=(1<<(8-i-1));
else
dat&=~(1<<(8-i-1));
}
delay_us(wait_cnt1);
CS=0;
return dat;
}
一周热门 更多>