⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ia4420fifo(c51).c

📁 IA4420的FIFO操作源代码
💻 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 + -