📄 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
/***********初始化M8***********/
void init_m8(void);
void init_m8(void);
/***********蜂鸣器***********/
void bell(unsigned char abc);
/***********注册申请***********/
void Registrion(void);
// 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
unsigned char Registration_table[13] = {0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x00,'A',0x00,0x00,0x00};
unsigned char cc1000_table[13] = {0x12,0x34,0x56,0x78,0x00,0x00,0x00,0x00,'B',0x00,0x00,0x00};
unsigned char cc1000_SetTime_show[13]={0x12,0x34,0x56,0x78,0x00,0x44,0x55,0x55,'C',0x00,10,14,0x00};
unsigned char Registration_Return_table[13] = {0x00,0x44,0x55,0x55,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};
unsigned char Self_ID[4]={0x00,0x44,0x55,0x55};
//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 long_counter =0;
unsigned char old_long_key =0x03;
unsigned char temp_key =0;
unsigned char get_long_key =0;
unsigned char lock_key=0;
unsigned char temp_long_key=0x03;
//unsigned char hour,min,sec;
// Timer 0 overflow interrupt service routine
interrupt [10] void timer0_ovf_isr(void)
{
// Place your code here
DDRD &=0xFC;
get_key = PIND&0x03;
if((get_key!=0x03)&&(lock_key==0))
{
//sprintf(&cc1000_table[9],"%x",get_key);
cc1000_table[4]=Self_ID[0];
cc1000_table[5]=Self_ID[1];
cc1000_table[6]=Self_ID[2];
cc1000_table[7]=Self_ID[3];
cc1000_table[9]=get_key;
cc1000_table[10]=16;
cc1000_table[11]=c++;
key_flag = SendOnePacketToCC1000(cc1000_table);
}
}
// Timer 1 overflow interrupt service routine
interrupt [9] void timer1_ovf_isr(void)
{
// Place your code here
TCNT1H = 0xFE; //setup
TCNT1L = 0x18;
Registrion();
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char i = 0,j = 0;
init_m8();
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(500);
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[i]=string[4+i];
bell(1);
}
}
else if(string[8] == 'C')
{
delay_ms(200);
key_flag = SendOnePacketToCC1000(cc1000_table);
}
delay_ms(300);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -