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

📄 send43176.c

📁 无线r01接收c程序,和89c2051的接口
💻 C
字号:

#include <W79E825.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define NOP() _nop_()


sbit FSK=P0^0;
sbit S_SCK=P1^7;
sbit S_SDI=P0^3;
sbit S_nSEL=P1^6;
sbit S_nIRQ=P0^2;
sbit LED1=P0^1;
sbit LED0=P0^6;
sbit KEY=P1^2;
sbit GUN=P1^1;

uchar data	 txbuf[2];
uchar data   guncount;
uchar data   keydelaycnt;
uint  data   time;

//=========================

void delayus( uint us )	
{
	uint i;
	while( us-- )
	{
		i=2;
		while( i-- )
		{
			NOP();
		}
	}
}
//=============================
void rfm02_init( void )
{
	S_nSEL=1;
	S_SDI=1;
	S_SCK=0;
	FSK=0;
	LED0=1;
	LED1=1;
}
//============================

//=========================
void write0( void ) 	//==私有函数==
{
	S_SDI=0;
	S_SCK=0;
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	delayus(20);//
	S_SCK=1;
	NOP();
}
//========================

void write1( void )		//==私有函数==
{
	S_SDI=1;
	S_SCK=0;
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	NOP();
	delayus(20);//
	S_SCK=1;
	NOP();
}
//============================= 
void writefskbyte(uchar dat)
{
	uchar i=8;
	S_nSEL=1;
	while(i--)
	{
		while(!S_nIRQ);
		while(S_nIRQ);		
		if(dat&0x80)
		FSK=1;
		else
		FSK=0;
		dat=dat<<1;	
	}
}
//=========================

void writecmd( uint cmd )
{
	uchar i=16;
	S_SCK=0;
	S_nSEL=0;

	delayus(20);//

	while(i--)
	{
		if(cmd&0x8000)
		write1();
		else
		write0();
		cmd=cmd<<1;
//		delayus(20);//
	}
	S_SCK=0;
	S_nSEL=1;
}
//=========================


//========================

void delayms(uint ms)
{
	uchar i;
	while(ms--)
	{
		i=35;
		while(i--)
		{		
		delayus(1);
		}
	}
}
//=======================
void int1(void) interrupt 2 using 1
{
	NOP();
	time=0;
}
//=======================
void time0(void) interrupt 1 using 1
{
	time++;
}
//=======================

void main(void)
{
	uint chksum=0;
	uchar j;
	guncount=0;
	keydelaycnt=0; 


P0M1   = 0x04;        //#00000100B
P0M2   = 0xfb;        //#11111011B
P1M1   = 0x34;        //#00110100B
P1M2   = 0xcb;        //#11001011B

   GUN=0; 

	for(j=0;j<2;j++)
	{
		txbuf[j]=0x10;
	}

	
	TMOD=0x01;
	TH0=0x00;
	TL0=0x00;

	time=0;

	rfm02_init();
	
	delayus(20);

	writecmd(0xcc00);

	delayus(20);

	writecmd(0x8a61);
//	writecmd(0x9a61);


	

	delayus(20);
//  writecmd(0xa060);           //430.24
//	writecmd(0xa100);           //430.64
//	writecmd(0xa180);           //430.96    
	writecmd(0xa2c0);           //431.76

	delayus(20);

	writecmd(0xd040);

	delayus(20);

	writecmd(0xc823);

	delayus(20);

	writecmd(0xc220);

	delayus(20);

	writecmd(0xc000);

	delayus(20);

//============================
	writecmd(0xcc00);

	delayus(20);

	writecmd(0x8a61);
//	writecmd(0x9a61);


	delayus(20);

//    writecmd(0xa060);           //430.24
//	writecmd(0xa100);           //430.64
//	writecmd(0xa180);           //430.96    
	writecmd(0xa2c0);           //431.76

	delayus(20);

	writecmd(0xd040);

	delayus(20);

	writecmd(0xc823);

	delayus(20);

	writecmd(0xc220);

	delayus(20);

	writecmd(0xc000);
//===========================
	KEY=1;
	TR0=1;
	EA=1;
	ET0=1;
	IT1=1;
	EX1=1;

	while(1)
	{	 
		 if(time==900)
		{
			
		

			LED1=0;              //掉电指示
			TR0=0;
			ET0=0;
			PCON=PCON|0x02;      //掉电状态
			
			LED1=1;
			TR0=1;
			ET0=1;
			time=0;

		}

		 if(!KEY)
		 {	
			LED0=0;
			delayms(5);
			if(!KEY)
			{
	            GUN=1;                 //激光头亮
				writecmd(0xC038);      //启动发射
 
				writefskbyte(0xAA);       //前导码
				writefskbyte(0xAA);       //前导码
				writefskbyte(0xAA);       //前导码
				writefskbyte(0x2D);       //同步码高字节
				writefskbyte(0xD4);       //同步码低字节
				chksum=0;

				for(j=0;j<2;j++)
				{
					writefskbyte(txbuf[j]);
					
				}

				writefskbyte(0xAA);    //多发一个无效字节,确保接收正确
				writecmd(0xC000);

                 
				
				 delayms(5);

			     guncount++;
				if(guncount<16)
				{		
					for(j=0;j<2;j++)
					{
						txbuf[j]+=1;
					}
				}
				else 
				{
				    txbuf[0]=txbuf[1]=0x10;
				    guncount=0;
				}

			
				delayms(130);
				GUN=0;                 //激光头灭 
                                LED0=1;
               while(!KEY);
				

			}

		}
		delayms(10);

	}
}

//===============================


















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -