📄 cc1020hs.c
字号:
//===========================================================
#include <pic.h>
#include "pcom.h"
#include "CC1020HS.h"
//===========================================================
void Rxinit(void)
{
b_IsTx = NO;
b_RxGo = NO;
b_PreFound = NO;
b_IdOk = NO;
PreCtr = 0;
Rxbuf1 = 0;
b_UnlockAvg = YES;
GIE = ON;
}
//__CONFIG (XT & WDTDIS & PWRTEN & BORDIS & LVPDIS & DPROT & DEBUGDIS & WP3 & PROTECT);
//===========================================================
void main(void)
{
SysInit();
if(b_Rxonly==YES)
{
Rxinit();
while(1)
{
if (TMR2IF == YES)
{
TMR2IF = NO;
if (FlashCtr!=0)
{
o_pass=LOW;
FlashCtr--;
}
else
{
o_pass=HIGH;
}
}
}
}
else if(b_Txonly==YES)
{
SetupCC1020TX(TXDL, PA_VALUE);
Dly1000(10);
TRISA &= ~MK0;
OPTION = 0B00001111;
while(1)
{
TxCtr = 5;
while(1)
{
BitCtr = 64+1;
Txbuf1 = 0xAA;
Txbuf2 = 0xAA;
Txbuf3 = 0xAA;
Txbuf4 = 0xAA;
Txbuf5 = UI1;
Txbuf6 = UI2;
Txbuf7 = Txdata;
if (TxCtr==5)
{
if(++Txdata >= 10) Txdata=0;
}
if (b_Answer == YES)
{
Txbuf7 = Rxbuf2;
setbit(Txbuf7,7);
b_Answer = NO;
}
else PORTC=0xFF;
Txbuf8 = ~Txbuf7;
o_pass = LOW;
{
b_IsTx = YES;
b_TxGo = YES;
TransCtr = 0;
io_data = LOW;
b_Txtrue = NO;
b_Headov = NO;
INTF = NO;
GIE = ON;
while(b_TxGo==YES);
GIE = OFF;
}
if (--TxCtr != 0) {Dly1000(40);continue;}
break;
}
o_pass = HIGH;
o_pass = HIGH;
Dly1000(250);
Dly1000(250);
Dly1000(250);
Dly1000(250);
}
TRISA |= MK0;
OPTION = 0B01001111;
}
Rxinit();
while(1)
{
if (TMR2IF == YES)
{
TMR2IF = NO;
Readkey();
Keyproc();
if (FlashCtr!=0)
{
o_pass = LOW;
FlashCtr--;
}
else
{
o_pass = HIGH;
}
if (AnsCtr!=0) {if(--AnsCtr==0) b_Answer=YES; }
}
}
}
//===========================================================
//= =
//===========================================================
static void interrupt int_isr(void)
{
INTF = NO;
{
if (b_IsTx == YES)
{
if (b_TxGo == YES)
{
{
asm("rlf _Txbuf8,F");
asm("rlf _Txbuf7,F");
asm("rlf _Txbuf6,F");
asm("rlf _Txbuf5,F");
asm("rlf _Txbuf4,F");
asm("rlf _Txbuf3,F");
asm("rlf _Txbuf2,F");
asm("rlf _Txbuf1,F");
io_data = CARRY;
if (--BitCtr == 0) b_TxGo = NO;
}
}
}
else
{
if (b_RxGo == YES)
{
CARRY = io_data;
asm("rlf _Rxbuf1,F");
if (++BitCtr == 8)
{
BitCtr = 0;
if (b_IdOk == YES)
{
if (b_Checksum == YES)
{
if ((Rxbuf2^Rxbuf1)==0xFF)
{
if (!tstbit(Rxbuf2,7)) {if(AnsCtr==0) AnsCtr=60;}
clrbit(Rxbuf2,7); FlashCtr=25; PORTD=Digit09[Rxbuf2];
}
Rxinit();
}
else {b_Checksum=YES; Rxbuf2=Rxbuf1;}
}
else
{
if (Rxbuf1 == UI2)
{
b_IdOk = YES;
b_Checksum = NO;
}
else
{
Rxinit();
}
}
}
}
else
{
CARRY = io_data;
asm("rlf _Rxbuf1,F");
if (b_PreFound == YES)
{
if (Rxbuf1 == UI1) {b_RxGo=YES; BitCtr=0;}
else if (Rxbuf1!=0x55 && Rxbuf1!=0xAA && PreCtr==0) {PreCtr++;}
if (PreCtr > 0) {PreCtr++;}
if (PreCtr > 10) {b_PreFound=NO; b_UnlockAvg=YES;}
}
else
{
if (Rxbuf1==0x55 || Rxbuf1==0xAA)
{
if (++PreCtr >= 4) {b_PreFound=YES; b_LockAvg=YES; PreCtr=0;}
}
else {PreCtr=0;}
}
}
}
}
}
//===========================================================
//= =
//===========================================================
void Keyproc(void)
{
if (b_Kvalid == YES || b_Answer == YES)
{
b_Kvalid = NO;
GIE = OFF;
SetupCC1020TX(TXDL, PA_VALUE);
Dly1000(50);
TxCtr = 5;
if (b_Answer == NO)
{
if (++Txdata>9) Txdata=0;
}
TRISA &= ~MK0;
OPTION = 0B00001111;
while(1)
{
BitCtr = 64+1;
Txbuf1 = 0xAA;
Txbuf2 = 0xAA;
Txbuf3 = 0xAA;
Txbuf4 = 0xAA;
Txbuf5 = UI1;
Txbuf6 = UI2;
Txbuf7 = Txdata;
if (b_Answer == YES)
{
{
Txbuf7 = Rxbuf2;
}
setbit(Txbuf7,7);
}
else PORTC=0xFF;
Txbuf8 = ~Txbuf7;
o_pass = LOW;
{
b_IsTx = YES;
b_TxGo = YES;
TransCtr = 0;
io_data = LOW;
b_Txtrue = NO;
b_Headov = NO;
INTF = NO;
GIE = ON;
while(b_TxGo==YES);
GIE = OFF;
}
if (--TxCtr != 0) {Dly1000(30);continue;}
break;
}
o_pass = HIGH;
o_pass = HIGH;
TRISA |= MK0;
OPTION = 0B01001111;
b_Answer = NO;
SetupCC1020RX(RXDL, PA_VALUE);
Rxinit();
}
}
//===========================================================
//= =
//===========================================================
void Readkey(void)
{
#asm
movlw 0xF0
andwf _PORTB,W
xorwf _Kbuf,W
xorwf _Kbuf,F ;PORTB&0xF0 -> Kbuf
movwf _Temp1
movf _Temp1,F
#endasm
if (ZERO == NO) {Kctr=0;return;}
if (++Kctr > 5)
{
Kctr = 0;
if (Kbuf == 0xF0)
{
b_Khold = NO;
}
else if (b_Khold == NO)
{
b_Khold = YES;
if (Kbuf == 0x70)
{
b_Kvalid = YES;
//Txdata = 6;
}
else if (Kbuf == 0xB0)
{
b_Kvalid = YES;
//Txdata = 7;
}
else if (Kbuf == 0xD0)
{
b_Kvalid = YES;
//Txdata = 8;
}
else if (Kbuf == 0xE0)
{
b_Kvalid = YES;
//Txdata = 9;
}
}
}
}
//===========================================================
//= =
//===========================================================
void SysInit(void)
{
CLRWDT();
PORTA = 0b00100000;
TRISA = 0b11011111;
PORTB = 0b00100000;
TRISB = 0b11011111;
PORTC = 0b01000000;
TRISC = 0b10010101;
PORTD = 0b11111111;
TRISD = 0b00000000;
PORTE = 0b00000000;
TRISE = 0b00000111;
OPTION = 0B01001111;
TMR1H = 0;
TMR1L = 0;
T1CON = 0B00000001;
CCPR1L = 0;
CCPR1H = 0;
CCP1CON = 0b00000000;
TMR2 = 0;
T2CON = 0b01111101;
PR2 = 124;
ADCON0 = 0b00000000;
ADCON1 = 0b00000111;
PIR1 = 0;
PIE1 = 0;
INTCON = 0B01010000;
b_Mcode=YES;b_NRZ=NO;b_UART=NO;b_Tstbase=NO;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -