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

📄 cc1020hs.c

📁 高频通讯CC1020,PIC控制,源代码全
💻 C
📖 第 1 页 / 共 2 页
字号:
//===========================================================
#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 + -