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

📄 main.c.bak

📁 mc68hc908jb8的usb代码
💻 BAK
字号:
/******************************************************************
	PROJECT:chipcon DEMO
	PART:master
	RF:	 CC1100 or cc2500 or cc1000(Chipcon) 
  	MCU: PIC16F877A(Microchip)
	Designed : Ben xie(Infortech)
	Date :	2006-1
	Checksum: 
				
******************************************************************/
#include <pic.h>
#include "pic_setting.h"
#include "CCxxx0.h"
#include "cc1000.h"
#include "CCxxx0LIB.C"
#include "cc1000pic.c"

BYTE paTable_CC1100[] = {0xc0, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F };
BYTE paTable_CC2500[] = {0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F };
BYTE txBuffer_CCxx00[] = {2, 1, 1};
BYTE rxBuffer_CCxx00[2];
BYTE dpybuffer[10]={0x11,0xF9,0x23,0x61,0xC9,0x45,0x05,0xF1,0x01,0x41};
//////////////////////////////////////////////////////////////////////
static void interrupt
isr(void)			// Here be interrupt function - the name is
				// unimportant.
{
	if(INTF)
	{		
  		switch (State) 
		{
    	case 2://TX_STATE:
			if(ShiftReg&0x80) DIO=1;
			else 	DIO=0;
      		ShiftReg=ShiftReg<<1;
      		BitCounter++;
        	if(BitCounter==8)
			{
          		BitCounter=0;
          		ShiftReg=TXBuffer[TXBufferIndex++];
				if(TXBufferIndex>sizeof(TXBuffer))
				{
					TXBufferIndex=0;
            		BitCounter = 0;
            		ShiftReg = 0x00;
					flag.TX_End=1;
					RXBufferWriteIndex=0;
					State=IDLE_STATE;
					while(!DCLK) ;
					while(DCLK) ;
					DIO=0;
          		}
        		
      		}

      		break;

    	case 1://RX_STATE:
      	
			if(flag.PreambleEnd)
			{
l_start_rec:
      			ShiftReg=ShiftReg<<1;
      			if(DIO) ShiftReg=ShiftReg|0x01;
				else    ShiftReg=ShiftReg&0xFE;
      			BitCounter++;
      			if(BitCounter==8)
				{
        			BitCounter=0;
            		RXBuffer[RXBufferWriteIndex]=ShiftReg;
            		RXBufferWriteIndex++;
					if(RXBufferWriteIndex>BytesToReceive) 
					{
						flag.RX_OK=1;
						BitCounter=0;
						RXBufferWriteIndex=0;
						State=IDLE_STATE;
						GIE = 0;
       				}
        		}
			}
			else
			{
				flag.PreambleFound=0;
				if(flag.PreambleNextbit)
				{	
					if(DIO) flag.PreambleNextbit=0;
					else  
					{
						flag.PreambleFound=0;		//error
						State=IDLE_STATE;	
					}
				}
				else
				{
					if(!DIO) flag.PreambleNextbit=1;
					else
					{
						flag.PreambleEnd=1;
						BitCounter=0;
						goto l_start_rec;
					}	
				}	
			}
      		break;

    	case 0://IDLE_STATE:
      	
//			flag.RX_OK=0;
			if(flag.PreambleNextbit)
			{	
				if(DIO) 
				{
					flag.PreambleNextbit=0;
					BitCounter++;
					if(BitCounter==24) 
						flag.PreambleFound=1;
				}
				else  
				{
					flag.PreambleNextbit=0;		//error
					BitCounter=0;	
				}
			}
			else
			{	
				if(!DIO) 
				{
					flag.PreambleNextbit=1;
					BitCounter++;
				}
				else  
				{
					flag.PreambleNextbit=0;		//error
					BitCounter=0;	
				}
			}

      		if(flag.PreambleFound)
			{
          		BitCounter=0;
          		ByteCounter=0;
				RXBufferWriteIndex=0;
				flag.PreambleEnd=0;	
          		State = RX_STATE;       
        	}	
			break;
     	default:
      		State=IDLE_STATE;
      		break;
  		}
	INTF=0;  
	}
  	
}
/////////////////////////////////////////////////////////////
//
//initialize PIC16F877A
//
/////////////////////////////////////////////////////////////
void InitPIC16F877A() {
//	TRISA=RACNF;
	TRISB=RBCNF;
	TRISC=RCCNF;
	CMCON=0x07; //COMPARATOR OFF
	ADCON1=0x06; //ADC OFF
	TRISE=0;
	OPTION=0x87;	
	T1CON=0x31;

	PORTC=0X00;	//数码管 On
	Dly1mS(300);
	PORTC=0Xff;	//数码管 Off
}
//=============================================================
//
//=============================================================
void SetupCCxx00(void)
{
	TRISA=RACNF_RF4;
	P_SCLK=0;
	P_CSn=1;
	P_SI=0;
	POWER_UP_RESET_CCxx00();
	if(Current_State=CC1100_State)
	{
		halRfWriteRfSettings_cc1100();
		halSpiWriteBurstReg(CCxxx0_PATABLE, paTable_CC1100, sizeof(paTable_CC1100));
	} 
	else
	{
		halRfWriteRfSettings_cc2500();
		halSpiWriteBurstReg(CCxxx0_PATABLE, paTable_CC2500, sizeof(paTable_CC2500));
	}
	halSpiStrobe(CCxx00_SRX);
}

///////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////
void SetupCC1000(void)
{
	TRISA=RACNF_RF2;
	PCLK=1;
	PDATA=1;
	PALE=1;
	SetupCC1000PD();
	ResetCC1000();
	ConfigureCC1000();
	WakeUpCC1000ToTX(0x81,0x48);
  	TRISB&=~(0x02);     // Set DIO as output
  	while(!CalibrateCC1000());
  	WakeUpCC1000ToRX(0x44,0x60);
  	TRISB|=0x02;        // Set DIO as input
  	while(!CalibrateCC1000());
	SetupCC1000RX(0x44,0x60);
	State=IDLE_STATE;
	INTEDG = 1;		// rising  edge trigger the interrupt
	INTE = 1;		// enable the external interrupt
	PEIE=1;
	GIE = 1;		// Global interrupt enable
}
//=============================================================
//
//=============================================================
void CheckState(void)
{
	Current_key=PORTB|0xc3;	
	switch(Current_key)
	{
		case SW1_KEY:
			Current_State=CC1100_State;
			break;
		case SW2_KEY:
			Current_State=CC1000_State;	
			break;
		default:
			Current_State=CC2500_State;
			break;		 
	}	
	while((PORTB|0xc3)!=0xff) ;
}
//=============================================================
// scan key
//=============================================================
BYTE KeyScan(void)
{
	OPTION=0x07;
	TMR0=0; T0IF=0;
	while(1)
	{
		if(T0IF) goto	l_exit_key;
		Current_key=PORTB|0xc3;
		if(Current_key!=Old_key)
		{
	  	Dly1mS(20);
	  	Current_key=PORTB|0xc3;
	  	if(Current_key!=Old_key)
			{
		  	Old_key=Current_key;
		  	if(Old_key!=0xff)
				{	
		  		Keyflag=1;
				goto	l_exit_key;
  				}
		  	else
       	    	Keyflag=0;			
			}
	   	else
		 	 Keyflag=0;		
		}
		else
			Keyflag=0;
	}
l_exit_key:
	OPTION=0x87;
	return(Keyflag);

	
}


//------------------------------------------------------------
// TX OPTION
//------------------------------------------------------------
//-------------------------------------------------------------
void TxCCxx00()
{
	unsigned char	i;
//	halSpiWriteReg(0x3E,0xC0);	
	halSpiWriteReg(CCxx00_FREND0, 0x10);//POWER=10DBM
	Dly1mS(50);	
	for(i=0;i<4;i++)
	{	
    	halRfSendPacket(txBuffer_CCxx00, sizeof(txBuffer_CCxx00));
		Dly1mS(50);
	}
//	halSpiWriteReg(0x3E,0x7f);	//POWER=0DBM
	halSpiWriteReg(CCxx00_FREND0, 0x11);
	Dly1mS(50);
   	halRfSendPacket(txBuffer_CCxx00, sizeof(txBuffer_CCxx00));

	Dly1mS(100);
	PORTC=0xFF;	
}

//-----------------------------------------------------------
unsigned char RxCCxx00(void)
{	
	unsigned char	length,i;
	length = sizeof(rxBuffer_CCxx00);
    	if (halRfReceivePacket(rxBuffer_CCxx00, length))
	{
		i=rxBuffer_CCxx00[0];	
		PORTC=dpybuffer[i];
		LED2=0;
		LED1=1;
		return 1;
			
	}
	else	return 0;
	
}
void TestingCCxx00(void);
void TestingCC1100(void);
/////////////////////////////////////////////////////////////
//main program
//===========================================================
void main() 
{
	InitPIC16F877A();
	CheckState();
	switch(Current_State)
	{
		case   CC2500_State:
			SetupCCxx00();
			TestingCCxx00();	
			break;
		case   CC1100_State:
			SetupCCxx00();
			TestingCCxx00();
			break;
		case   CC1000_State:
			SetupCC1000();
			TestingCC1000();
			break;
	}	
}	
void TestingCCxx00(void)
{
	while(1)
	{		
		rfstate=halSpiReadStatus(CCxxx0_MARCSTATE);
		if((rfstate& 0x1f)==0x00)
		{
//			LED1=0;
//			LED2=0;
			POWER_UP_RESET_CCxxx0();
			if(Current_State=CC1100_State) halRfWriteRfSettings_cc1100();
			else	halRfWriteRfSettings_cc2500();
			
		}
		KeyScan();
		if(Keyflag)
		{
			txBuffer[1]=0;
			if(Old_key==SW1_KEY)
				txBuffer_CCxx00[1]=1;	
			if(Old_key==SW2_KEY)
				txBuffer_CCxx00[1]=2;
			if(Old_key==SW3_KEY)
				txBuffer_CCxx00[1]=3;
			if(Old_key==SW4_KEY)
				txBuffer_CCxx00[1]=4;
			txBuffer_CCxx00[2]=0x01;
	    	TxCCxxx0();
		}
		else
		{	
			if(RxCCxxx0())
			{
				if(rxBuffer_CCxx00[1]==0x01) 
				{
		
					txBuffer_CCxx00[2]=0x07;
					txBuffer_CCxx00[1]=rxBuffer_CCxx00[0];
					halSpiStrobe(CCxxx0_SIDLE);
					Dly1mS(500);
					TxCCxxx0();	
				}
				else
					if(rxBuffer_CCxx00[1]==0x07) Dly1mS(500);
					
			} 		
		}
	 }
}

//============================================================================
//
//===========================================================================
void TestingCC1000(void)
{
	while(1) 
	{
		
		KeyScan();
		
		if(Keyflag)
		{
			GIE = 0;
			TXBuffer[7]=0;
			if(Old_key==SW1_key)
				TXBuffer[7]=1;	
			if(Old_key==SW2_key)
				TXBuffer[7]=2;
			if(Old_key==SW3_key)
				TXBuffer[7]=3;
			if(Old_key==SW4_key)
				TXBuffer[7]=4;
			LED1=LED_ON;
	    		SetupCC1000TX(0x81,0x48);
			TRISB&=~(0x02);     // Set DIO as output
			INTEDG = 0;		// falling edge trigger the interrupt
			GIE = 1;
			for(i=0;i<3;i++)
			{
				State=TX_STATE;
				Dly1mS(50);
				TXBuffer[6]=1;
				
				ShiftReg=TXBuffer[0];
				BitCounter=0;
				TXBufferIndex=0;
				flag.TX_End=0;
				while(flag.TX_End) ;
				DIO=0;
			}
			GIE = 0;
			Dly1mS(50);
			SetupCC1000RX(0x44,0x60);
			flag.PreambleNextbit=1;
			TRISB|=0x02;        // Set DIO as input
			INTEDG = 1;		// rising  edge trigger the interrupt
			GIE = 1;
		}
		else
		{	
			if(flag.RX_OK)
			{
//				GIE = 0;
				LED2=LED_ON;
				if(RXBuffer[0]==0xCA)
				{
					if(RXBuffer[1]==0x01)
					{
						PORTC=dpybuffer[RXBuffer[2]];
						TXBuffer[6]=0;
						TXBuffer[7]=RXBuffer[2];
						Dly1mS(150);
	    				SetupCC1000TX(0x81,0x48);
						TRISB&=~(0x02);     // Set DIO as output
						INTEDG = 0;		// falling edge trigger the interrupt
						GIE = 1;
						LED2=LED_OFF;
						LED1=LED_ON;
						for(i=0;i<3;i++)
						{
							State=TX_STATE;
							Dly1mS(50);
							ShiftReg=TXBuffer[0];
							BitCounter=0;
							TXBufferIndex=0;
							flag.TX_End=0;
							while(flag.TX_End) ;
							
						}
						GIE = 0;
						Dly1mS(50);
						SetupCC1000RX(0x44,0x60);
						flag.PreambleNextbit=1;
						TRISB|=0x02;        // Set DIO as input
						INTEDG = 1;		// rising  edge trigger the interrupt
						GIE = 1;
					}
					else
						PORTC=dpybuffer[RXBuffer[2]];
				}
				flag.RX_OK=0;
			}		
		}
	}
}

//=================================================================
// END
//=================================================================

⌨️ 快捷键说明

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