📄 save_cc1000_m8.i
字号:
// CodeVisionAVR C Compiler
// (C) 1998-2004 Pavel Haiduc, HP InfoTech S.R.L.
// I/O registers definitions for the ATmega8
#pragma used+
#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4; // 16 bit access
sfrb ADCSRA=6;
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e; // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrw ICR1=0x26; // 16 bit access
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28; // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a; // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c; // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-
// Interrupt vectors definitions
// Needed by the power management functions (sleep.h)
#asm
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x80
.EQU __sm_mask=0x70
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0x60
.EQU __sm_ext_standby=0x70
.EQU __sm_adc_noise_red=0x10
.SET power_ctrl_reg=mcucr
#endif
#endasm
// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.
#pragma used+
#pragma used+
void delay_us(unsigned int n);
void delay_ms(unsigned int n);
#pragma used-
/***********************CC1000.H*******************/
//如果使用不带PA的RF模块,则将PA_ENABLE置零
//#define Debug_CC1000
void ConfigureCC1000( unsigned char Count, unsigned int Configuration[] );
void ConfigureCC1000( unsigned char Count, unsigned int Configuration[] );
void WriteToCC1000Register( unsigned char addr, unsigned char Data );
unsigned char ReadFromCC1000Register( unsigned char addr );
unsigned char ResetCC1000( void );
void CalibrateCC1000( void );
void SetupCC1000RX( void );
void SetupCC1000TX( void );
void SetupCC1000PD( void );
void WakeUpCC1000ToRX( void );
void WakeUpCC1000ToTX( void );
void AverageManualLockCC1000( void );
void AverageFreeRunCC1000( void );
void AverageAutoLockCC1000( void );
void ReadCurrentCalibration( unsigned char *val1, unsigned char *val2 );
void OverrideCurrentCalibration( unsigned char val1,unsigned char val2 );
void StopOverridingCalibration( void );
void ResetFreqSynth( void );
void SetupRFRX(void);
void SetupRFTX(void);
void RestoreCaliValue(unsigned char *Buf);
void SaveCaliValue(unsigned char *buf);
/***************************************************
Copyright(C) Sunrise
All right reserve.
Filename: RF1000.H
CurVer : 1.0
UpDate : 2005-06-10
Author : Kinsey
Company : Sunrise
LastVer : 1.0
EndDate : 2005-06-10
Author : Kinsey
Company : Sunrise
Comments:
This file is header of RF1000.LIB.
The LIB is use AVR CPU.
Use this Lib MUST define the macro constant as below:
#define DIO_DEFINE 1 Can't be changed!
#define DIO_BIT 0
#define DIO_OUTPORT PORTB
#define DIO_INPORT PINB
#define DIO_DDR DDRB
#define DIO_DDRO (DIO_DDR.DIO_BIT = 1)
#define DIO_DDRI (DIO_DDR.DIO_BIT = 0)
#define DIO_IN DIO_INPORT.DIO_BIT
#define DIO_OUT DIO_OUTPORT.DIO_BIT
#define DCLK_IN PINB.1
#define PCLK_OUT PORTB.2
#define PDATA_DEFINE 1 Can't be changed!
#define PDATA_BIT 3
#define PDATA_OUTPORT PORTB
#define PDATA_INPORT PINB
#define PDATA_DDR DDRB
#define PDATA_DDRO (PDATA_DDR.PDATA_BIT = 1)
#define PDATA_DDRI (PDATA_DDR.PDATA_BIT = 0)
#define PDATA_IN PDATA_INPORT.PDATA_BIT
#define PDATA_OUT PDATA_OUTPORT.PDATA_BIT
#define PALE_OUT PORTB.4
All the macro name can't be changed!
***************************************************/
#pragma used+
#pragma used+
unsigned char InitialCC1000( void );
/***********************************************************************
Function: Configure the new data to CC1000 register.
Input : Configure Count;Data buffer Address.
Output : 0:Initial Fail; None zero:Initial Success.
The CC1000 default state is RX.
***********************************************************************/
void SetupCC1000RX( void );
/***********************************************************************
Function: Setup CC1000 to RX mode.
Input : None.
Output : None.
***********************************************************************/
void SetupCC1000TX( void );
/***********************************************************************
Function: Setup CC1000 to TX mode.
Input : None.
Output : None.
***********************************************************************/
void SetupCC1000PD( void );
/***********************************************************************
Function: Setup CC1000 to power down mode.
Input : None.
Output : None.
***********************************************************************/
void WakeUpCC1000ToRX( void );
/***********************************************************************
Function: Wake up CC1000 from power down to RX mode.
Input : None.
Output : None.
***********************************************************************/
void WakeUpCC1000ToTX( void );
/***********************************************************************
Function: Wake up CC1000 from power down to TX mode.
Input : None.
Output : None.
***********************************************************************/
unsigned char *ReceiveOnePacketFromCC1000( unsigned char *ReceivedPacket,unsigned char *err ) ;
/***********************************************************************
Function: Receive one packet from CC1000.
Input : Data buffer pointer.
Output : Data buffer poiter.(If no receive return:NULL)
Note : This function used in an timer interrupt.
Such as in one 20ms timer interrupt,call this function,
and disable this timer,and then enable this timer at the
end of the timer.
***********************************************************************/
unsigned char SendOnePacketToCC1000( unsigned char *SendPacket ) ;
/***********************************************************************
Function: Send one packet to CC1000.
Input : The pointer of data buffer;Command type.
Output : Unsigned char(0:Send failure;1:Send Succeed).
Note : When call this function,disable interrupt until finish.
***********************************************************************/
#pragma used-
#pragma library RF1000.lib
//#include "stdio.h"
// USART Receiver buffer
char rx_buffer[16];
unsigned char Registration_table[13] = {0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x00,'A',0x00,0x00,0x00};
unsigned char cc1000_table[13] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'B',0x00,0x00,0x00};
const unsigned char Registration_Return_table[13] = {0x87,0x65,0x43,0x21,0x12,0x34,0x56,0x78,'a',0x00,0x00,0x00};
const unsigned char get_cc1000_table[13] = {0x87,0x65,0x43,0x21,0x12,0x34,0x56,0x78,'b',0x00,0x00,0x00};
const unsigned char Self_ID[4]={0x87,0x65,0x43,0x21};
//unsigned char compare[] = {0};
unsigned char string[18] = {0};
unsigned char search_counter = 0 ;
unsigned char long_key_counter = 0;
unsigned char key_flag = 0;
unsigned char old_key = 0x03;
unsigned char get_key = 0;
unsigned char Registe_flag = 0;
unsigned char b=0,c=0;
unsigned char rx_wr_index,rx_rd_index,rx_counter;
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
// USART Receiver interrupt service routine
interrupt [12] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & ((1<<4) | (1<<2) | (1<<3)))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == 16) rx_wr_index=0;
if (++rx_counter == 16)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
// Get a character from the USART Receiver buffer
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == 16) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
// Standard Input/Output functions
// CodeVisionAVR C Compiler
// (C) 1998-2006 Pavel Haiduc, HP InfoTech S.R.L.
// Prototypes for standard I/O functions
// CodeVisionAVR C Compiler
// (C) 1998-2002 Pavel Haiduc, HP InfoTech S.R.L.
// Variable length argument list macros
typedef char *va_list;
typedef char *va_list;
typedef char *va_list;
#pragma used+
char getchar(void);
void putchar(char c);
void puts(char *str);
void putsf(char flash *str);
char *gets(char *str,unsigned int len);
void printf(char flash *fmtstr,...);
void sprintf(char *str, char flash *fmtstr,...);
void snprintf(char *str, unsigned int size, char flash *fmtstr,...);
void vprintf (char flash * fmtstr, va_list argptr);
void vsprintf (char *str, char flash * fmtstr, va_list argptr);
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr);
signed char scanf(char flash *fmtstr,...);
signed char sscanf(char *str, char flash *fmtstr,...);
#pragma used-
#pragma library stdio.lib
// Timer 0 overflow interrupt service routine
interrupt [10] void timer0_ovf_isr(void)
{
// Place your code here
if(search_counter==5)
{
search_counter = 0;
DDRD &=0xFC;
get_key = PIND&0x03;
if((get_key!=0x03)&&(cc1000_table[3]==0x00))
{
Registration_table[4]=Self_ID[0];
Registration_table[5]=Self_ID[1];
Registration_table[6]=Self_ID[2];
Registration_table[7]=Self_ID[3];
key_flag = SendOnePacketToCC1000(&Registration_table[0]);
}
else if(get_key!=0x03)
{
sprintf(&cc1000_table[9],"%x%x%x",get_key,b++,c++);
cc1000_table[4]=Self_ID[0];
cc1000_table[5]=Self_ID[1];
cc1000_table[6]=Self_ID[2];
cc1000_table[7]=Self_ID[3];
key_flag = SendOnePacketToCC1000(&cc1000_table[0]);
}
}
search_counter++;
TCNT0=0x00;
}
void bell(unsigned char abc)
{
for( ;abc>0;abc--)
{
DDRD |=0x08;
PORTD.3 = 1;
delay_ms(150);
PORTD.3 =0;
delay_ms(300);
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char i = 0,j = 0;
//unsigned char low = 0;
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=1
PORTB=0x07;
DDRB=0x81;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=1 State5=0 State4=T State3=T State2=T State1=T State0=T
PORTD=0xC0;
DDRD=0xE0;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 0.977 kHz
TCCR0=0x05;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 4800
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Place your code here
#asm("sei")
if(InitialCC1000())
bell(2);
while (1)
{
// Place your code here
#asm("WDR")
while(key_flag==0) ;
key_flag = 0;
bell(1);
while(string!=ReceiveOnePacketFromCC1000(string,0));
bell(1);
delay_ms(1000);
if(string[8] == Registration_Return_table[8])
{
for(i=0;i<4;i++)
{
if(string[i] != Registration_Return_table[i])
break;
}
if(i==4)
{
//for(i=0;i<4;i++)
cc1000_table[0]=string[4];
cc1000_table[1]=string[5];
cc1000_table[2]=string[6];
cc1000_table[3]=string[7];
// sprintf(&cc1000_table[0],"%x%x%x%x",string[4],string[5],string[6],string[7]);
bell(1);
}
}
delay_ms(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -