?? protocol.c
字號:
#include "includes.h"
unsigned char rf_send_period = SHORT_TERM;
#ifdef RF_MCU_DELAY
#define SendByte SendByteA
#else
#define SendByte SendByteB
#endif
void RF_init(void)
{
unsigned char i,j,st;
unsigned short readVal;
LED = 0;
RF_SCK=0;
RF_SDI=0;
do
{
readVal = RFXX_WRT_CMD(0xcc00);
_clr_wdt();
}while(!(readVal&0x01));
#ifdef RF_RATE_4_8_K
RFXX_WRT_CMD(0x8B61);
#else
RFXX_WRT_CMD(0x8B60);
#endif
RFXX_WRT_CMD(0xA640); //434MHz
#ifndef RF_MCU_DELAY
RFXX_WRT_CMD(0xD040); //RATE/2
#endif
//RFXX_WRT_CMD(0xD280); //RATE/2
#ifdef RF_RATE_4_8_K
RFXX_WRT_CMD(0xC847);
#else
#ifdef RF_MCU_DELAY
RFXX_WRT_CMD(0xC891);
#else
RFXX_WRT_CMD(0xC847);
#endif
#endif
#if 0
switch(Rate){//SELECT DATA RATE
case 0: RFXX_WRT_CMD(0xC891);break;//SendCmd(0xC8,0xA3);break;//1.134kbps
case 1: RFXX_WRT_CMD(0xC847);break;//SendCmd(0xC8,0x47);break;//2.4kbps
case 2: RFXX_WRT_CMD(0xC823);break;//SendCmd(0xC8,0x47);break;//4.8kbps
case 3: RFXX_WRT_CMD(0xC811);break;//SendCmd(0xC8,0x23);break;//9.6kbps
case 4: RFXX_WRT_CMD(0xC809);break;//SendCmd(0xC8,0x13);break;//17.2kbps
case 5: RFXX_WRT_CMD(0xC808);break;//SendCmd(0xC8,0x11);break;//19.3kbps
case 6: RFXX_WRT_CMD(0xC804);break;//SendCmd(0xC8,0x08);break;//38.8kbps
case 7: RFXX_WRT_CMD(0xC800);break;//SendCmd(0xC8,0x02);break;//118.4kbps
default: RFXX_WRT_CMD(0xC811);break;//SendCmd(0xC8,0x23);break;//9.6kbps
}
#endif
RFXX_WRT_CMD(RF_TIME_CALIBR);
//_delay(50000);
//_delay(50000);
//_delay(50000);
//_delay(50000);
//RFXX_WRT_CMD(RF_TIME_CLEAR);
//RFXX_WRT_CMD(0xE067); //0xE06b
//RFXX_WRT_CMD(RF_TIME_SET);
LED = 1;
}
void Delay_7i5(unsigned char uS){
while(--uS);
}
unsigned char send8bit(unsigned char aByte)
{
unsigned char i;
RF_SCK=0;
for(i=0;i<8;i++){
if(aByte&0x80){
RF_SDI=1;
}else{
RF_SDI=0;
}
RF_SCK=1;
aByte<<=1;
RF_SCK=0;
}
RF_SDI=0;
return 0;
}
void SendByteA(unsigned char aByte){
unsigned char i,j;
for(i=0;i<8;i++){
if(aByte&0x80){
RF_SDI=1;
}else{
RF_SDI=0;
}
aByte<<=1;
#ifdef RF_RATE_4_8_K
Delay_7i5(69);
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
#else
//NOP();
Delay_7i5(147); //2.4K
#endif
#if 0
switch(Rate){
case 0:Delay_7i5(115);j++; break; //1.2k-shell=20us
case 1:Delay_7i5(55); break; //2.4k-shell=24us
case 2:Delay_7i5(24);j++;j--;j++;j--;j++;break; //4.8k-shell=28us
case 3:Delay_7i5(9);j++;j--; break; //9.6k-shell=32us
case 4:Delay_7i5(2);j++; break; //17.2k-shell=36us
case 5:j++;j--;j++;j--;j++;j++;j--;j++;j--;j++;break;//19.2k-shell=40us
case 6:break;//22.73k
case 7:break;
}
#endif
}
}
void SendByteB(unsigned char aByte){
unsigned char i;
unsigned short n = 0;
for(i=0;i<8;i++)
{
n = 0;
while(RF_IRQ);
{
n++;
if(n > 400)
break;
}
n = 0;
while(!RF_IRQ);
{
n++;
if(n > 400)
break;
}
if(aByte&0x80){
RF_SDI=1;
}else{
RF_SDI=0;
}
aByte<<=1;
}
}
unsigned int RFXX_WRT_CMD(unsigned short aCmd)
{
unsigned char i;
unsigned int temp;
RF_SCK = 0;
RF_CS = 0;
for(i=0;i<16;i++){
RF_SCK = 0;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
if(aCmd&0x8000){
RF_SDI = 1;
}else{
RF_SDI = 0;
}
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
RF_SCK = 1;
aCmd<<=1;
temp<<=1;
if(RF_IRQ){
temp|=0x0001;
}
};
RF_SCK = 0;
RF_CS = 1;
return(temp);
}
void RF_send_frame(void)
{
unsigned char i,j;
unsigned long ad_result = 0;
report_status = battery_voltage;
if(_key_flag == 0)
LED = 0;
RFXX_WRT_CMD(RF_START_SEND_CMD);
P12.1 = 1;
_delay(40);
for(i=0; i< AD_MAX_CHANNEL; i++)
{
ad_result += AD_conv_result[i];
};
//ad_result = ad_result/(RF_SEND_PERIOD - 1);
ad_result = ad_result * 1000 /1414;
j = 0;
j += meter_id>>8;
j += meter_id&0xff;
j += ad_result>>8;
j += ad_result&0xff;
j += report_status;
RF_CS=0;
send8bit(0xC6);
//#ifndef RF_RATE_4_8_K
// RFXX_WRT_CMD(0x8B81);
//#else
SendByte(0xAA);
SendByte(0xAA);
SendByte(0xAA);
SendByte(0x2D);
SendByte(0xD4);
SendByte((unsigned char)(meter_id>>8));
SendByte((unsigned char)(meter_id&0xff));
SendByte((unsigned char)(ad_result>>8));
SendByte((unsigned char)(ad_result&0xff));
SendByte(report_status);
SendByte(j);//send sum
SendByte(0xAA);
RF_CS=1;
RFXX_WRT_CMD(RF_STOP_SEND_CMD);
P12.1 = 0;
memset(AD_conv_result, 0, AD_MAX_CHANNEL * sizeof(unsigned long));
#if 1
if(_key_flag == 0)
if(LED_on_time == 0)
LED = 1;
#endif
}
unsigned char ReadStatus(void)
{
unsigned char i,st;
RF_SCK=0;
RF_CS=0;
send8bit(0xCC);
RF_SDI=0;
for(i=0;i<8;i++){
st<<=1;
RF_SCK=1;
RF_SCK=1;
RF_SCK=1;
RF_SCK=1;
if(RF_IRQ){
st++;
}
RF_SCK=0;
};
RF_CS=1;
return(st);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -