📄 rf315mhz.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 + -