📄 ia4420fifo(c51).c
字号:
;-----------------------------------------------------------------------------
;
; File Name : IA4420FIFO(C51).C
;
; Assembler : AT89C51(Fosc=12MHz)
;
; Purpose : Sample program for IA4420 initialize and Transceiver testing
;
; Copyright (c) 2005 by Grandatech, All Rights Reserved
;
; Prepare By: Find Duan
;
; Support Email: dragonlong@grandatech.com
;
; Notice: Use four lines mode,they are SDO,SDI,NSEL,SCK.
; (NFFS must contact High level)
;
;-----------------------------------------------------------------------------
#include "at89x51.h"
sbit sdi= P3^4;
sbit sck= P3^5;
sbit nsel= P3^6;
sbit sdo= P3^7;
unsigned char workflag;
unsigned char rxdata[16]; //16,接收数据存储器组
unsigned char txdata[16]; //16,发送数据存储器组
bit revframe;
unsigned char spirevbyte();
unsigned int spirevtwobyte();
void spisendbyte(unsigned char x);
void spisendcommand(unsigned int x);
void txregframe();
void fiforxframe();
void ia442xinit();
void delay2nms(unsigned int n);
void main()
{
unsigned char b;
P1=0xff;
P3=0xcf;
txdata[0]=0x2d;
txdata[1]=0xd4;
txdata[2]=0xfa;
txdata[3]=0x01;
txdata[4]=0x55;
ia442xinit();
spirevtwobyte();
spisendcommand(0x8288); //;电源管理
while(1)
{
spisendcommand(0xca83); //;FIFO COMMAND
while(1)
{
sdi=0;
nsel=0;
if(sdo)
{
fiforxframe();
if(!revframe) break;
revframe=0;
b=rxdata[2];
b>>=4;
P1=b|0xf0; //P1.0~P1.3为4个LED,P1.4~P1.7为4个按键
delay2nms(300);
P1=0xff;
delay2nms(200);
break;
}
b=P1;
if(b^0xff)
{
delay2nms(5);
b=P1;
if(b^0xff)
{
txdata[3]=1;
txdata[4]=P1;
delay2nms(10);
txregframe();
break;
}
}
}
}
}
void ia442xinit() //;ia442x初始化
{
spisendcommand(0x80dd); //;配置命令,fd-915M,dd-433M
spisendcommand(0x820c); //;电源管理
spisendcommand(0xa080); //;频率设置
spisendcommand(0xc623); //;波特率设置
spisendcommand(0x9483); //;接收控制
spisendcommand(0xc2ec); //;数据滤波
spisendcommand(0xca81); //;FIFO COMMAND
spisendcommand(0xc4e7); //;AFC COMMAND
spisendcommand(0x9840); //;TXCTRL
spisendcommand(0xffff); //;WAKEUP
spisendcommand(0xc80e); //;间歇工作
spisendcommand(0xc060); //;时钟输出
}
void fiforxframe() //;ia442x接收一帧数据
{
unsigned char i,n;
spirevbyte();
spirevbyte();
rxdata[0]=spirevbyte();
nsel=1;
if(rxdata[0]==0xfa)
{
sdi=0;
nsel=0;
while(!sdo);
spirevbyte();
spirevbyte();
rxdata[1]=spirevbyte();
nsel=1;
n=rxdata[1]&0x0f;
for(i=0;i<n;i++)
{
sdi=0;
nsel=0;
while(!sdo);
spirevbyte();
spirevbyte();
rxdata[i+2]=spirevbyte();
nsel=1;
}
revframe=1;
}
spisendcommand(0xca81);
}
void txregframe() //;ia442x发送一帧数据
{
unsigned char i,n;
unsigned int u;
spisendcommand(0x8228);
n=txdata[3]+4;
for(i=0;i<n;i++)
{
nsel=0;
while(!sdo);
u=0xb8;
u<<=8;
u+=txdata[i];
spisendcommand(u);
}
nsel=0;
while(!sdo);
spisendcommand(0xb8aa);
nsel=0;
while(!sdo);
spisendcommand(0x8288);
spirevtwobyte();
}
void spisendcommand(unsigned int x) //;写指令
{
unsigned char comdata1,comdata2;
unsigned int a;
a=x;
nsel=0;
comdata2=a;
comdata1=a>>8;
spisendbyte(comdata1);
spisendbyte(comdata2);
nsel=1;
}
void spisendbyte(unsigned char x) //;写8位数据
{
unsigned char i,bytedata;
bytedata=x;
for(i=0;i<8;i++)
{
sck=0;
sdi=bytedata&0x80;
bytedata=bytedata<<1;
sck=1;
}
sck=0;
sdi=0;
}
unsigned int spirevtwobyte() //;读状态
{
unsigned int u;
nsel=0;
u=spirevbyte();
u<<=8;
u+=spirevbyte();
nsel=1;
return(u);
}
unsigned char spirevbyte() //;读8位数据
{
unsigned char i,bytedata;
sdi=0;
sck=0;
bytedata=0;
for(i=0;i<8;i++)
{
sck=1;
bytedata=bytedata<<1;
if(sdo) bytedata+=1;
sck=0;
}
return(bytedata);
}
void delay2nms(unsigned int n)
{
unsigned int i,j;
for(j=0;j<n;j++)
{
for(i=0;i<248;i++) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -