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

📄 rf315mhz.c

📁 与C51相关模块LCD,24CXX,等的源代码程序
💻 C
字号:
/******************************************************
DESIGN FOR RF315MHz USE
Designer: BH Zhang
Date:2006-1-11
Ver:1.0
Modify Mark:NONE
MCU IO="0"	SEND MODOL="1"	REC MODOL="0" 
MCU IO="1"	SEND MODOL="0"	REC MODOL="1" 
IO=1	SEND MODOL NOT WORK.
IO=0	SEND MODOL WORING.
*******************************************************/
#include <at89x51.h>
#include "rf315mhz.h"
#include "timer.h"
#include "serial.h"
//------------------------------------------------------
#define RFADDRESS	0x55		//system address
#define THIS		0x00		//host:0 for this
//------------------------------------------------------
unsigned char RFBuf[RFSENDLEN];	//data buf
unsigned char nCodeLen;			//record length per bit
unsigned char nSendAdd;			//receive address
//------------------------------------------------------
#define SW		3				//stop(wait) len
#define SWMIN	(SW-2)
#define SWMAX	(SW+SW)
#define S0		3				//0bit len
#define S0MIN	(S0-2)
#define S0MAX	(S0+2)
#define S1		9				//1bit len
#define S1MIN	(S1-3)
#define S1MAX	(S1+3)
#define ST		18				//start bit len
#define STMIN	(ST-2)
#define STMAX	(ST+2)
//------------------------------------------------------
#define B0		0				//bit=0
#define B1		1				//bit=1
#define BS		2				//bit=start bit
#define BN		255				//bit=invalid
//------------------------------------------------------
//(min<=bit len<=max)?1:0
#define BitOK(ch,min,max)	((ch>=min)&&(ch<=max))
//------------------------------------------------------
//get a bit
unsigned char GetBit(){
	RFRX=1;
	if(RFRX==1)return BN;
	
	TH0=T1OverFlow;
	nCodeLen=0;
	TR1=1;
	while(RFRX==0){
		if(nCodeLen>SWMAX){
			TR1=0;
			return BN;
		}
	}
	TR1=0;
	if(nCodeLen<SWMIN)return BN;
	
	TH0=T1OverFlow;
	nCodeLen=0;
	TR1=1;
	while(RFRX==1){
		if(nCodeLen>STMAX){
			TR1=0;
			return BN;
		}
	}
	TR1=0;
	if(BitOK(nCodeLen,S0MIN,S0MAX))return B0;
	if(BitOK(nCodeLen,S1MIN,S1MAX))return B1;
	if(BitOK(nCodeLen,STMIN,STMAX))return BS;
	return BN;
}
//------------------------------------------------------
bit RFGetStr(){
	unsigned char i,j,k;

	if(GetBit()==BS){
		for(i=1;i<(RFSENDLEN*8+1);i++){
			j=GetBit();
			if(j==BN)return 0;
			if(j==BS)return 0;
			k>>=1;
			if(j==B1)k|=0x80;
			if(i%8==0)RFBuf[(i/8)-1]=k;
			if(i==8)if(RFBuf[0]!=RFADDRESS)return 0;
			if(i==16)if((RFBuf[1]&0x0f)!=THIS)return 0;
			if(i==(RFSENDLEN*8)){
				k=0;
				for(j=0;j<RFSENDLEN;j++)k+=RFBuf[j];
				if(k)return 0;
				nSendAdd=RFBuf[1]>>4;
				return 1;
			}
		}
	}
	return 0;
}
//------------------------------------------------------

⌨️ 快捷键说明

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