📄 repeater.#2
字号:
//CPU:C8051F330
//FUNCTION: microrepeater programe for select band
/// there are eight key to select frequency
//time 2006-7-4
#include "c8051f330.h"
#include "main.h"
//define bit
sbit PLL_DATA = P0^5;
sbit PLL_CLK = P0^4;
sbit PLL_LE = P0^6;
sbit muxdut = P0^7;
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
int i = 0;
VDM0CN = 0x80;
for (i = 0; i < 350; i++); // Wait 100us for initialization
RSTSRC = 0x04;
}
void PCA_Init()
{
PCA0MD &= ~0x40;
PCA0MD = 0x02;
PCA0CPL2 = 0xff;
}
void Port_IO_Init()
{
// P0.0 - Unassigned, Open-Drain, Digital
// P0.1 - Unassigned, Open-Drain, Digital
// P0.2 - Unassigned, Open-Drain, Digital
// P0.3 - Unassigned, Open-Drain, Digital
// P0.4 - Unassigned, Push-Pull, Digital
// P0.5 - Unassigned, Push-Pull, Digital
// P0.6 - Unassigned, Push-Pull, Digital
// P0.7 - Unassigned, Open-Drain, Digital
// P1.0 - Unassigned, Open-Drain, Digital
// P1.1 - Unassigned, Open-Drain, Digital
// P1.2 - Unassigned, Open-Drain, Digital
// P1.3 - Unassigned, Open-Drain, Digital
// P1.4 - Unassigned, Open-Drain, Digital
// P1.5 - Unassigned, Open-Drain, Digital
// P1.6 - Unassigned, Open-Drain, Digital
// P1.7 - Unassigned, Open-Drain, Digital
P0MDOUT = 0x70;
// P1MDIN = 0x00;
XBR1 = 0xC0;
}
void Oscillator_Init()
{
OSCICN = 0x82;
}
/*
void Timer_Init()
{
TMR2CN = 0x20;
TMR2RLL = 0x00;
TMR2RLH = 0x00;
TMR2L = 0x0f;
TMR2H = 0x00;
}
*/
/*
void Interrupts_Init()
{
IE = 0xA0;
}
*/
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
PCA_Init();
Port_IO_Init();
Oscillator_Init();
// Timer_Init();
//Interrupts_Init();
}
/************************************************************************************/
/*FNCTION:PLL CONTROL */
/************************************************************************************/
//PLL send data
void send_data(unsigned long PLL_REGG)
{
unsigned char i;
for (i=0;i<21;i++)
{
PLL_CLK = 1;
if ((PLL_REGG & 0X100000) ==0)
{
PLL_DATA = 0;
}
else
{
PLL_DATA = 1;
}
PLL_CLK = 0;
PLL_REGG = PLL_REGG << 1;
}
PLL_CLK = 1;
}
//PLL data prepare
void prepare_PLL(unsigned long freqq,unsigned long *AB_REG)
{
unsigned long B;
unsigned int A;
B = freqq / 32;
A = freqq % 32;
A = A << 2;
A= A & 0x7c;
B= B <<7;
B= B & 0xfff80;
*AB_REG= 0x1;
*AB_REG= A + B +*AB_REG;
}
//-----------------------------------------------------------------------------
// Timer2_Init SYSCLK no Interrupt
//-----------------------------------------------------------------------------
//
// Configure Timer2 to auto-reload at interval specified by <counts> (no
// interrupt generated) using SYSCLK as its time base.
//
/*
void t2ISR() interrupt 5
{
TMR2CN &= ~BIT7;
PCA0CPH2 = 0X55;
}
*/
unsigned char chang_high_to_low(unsigned char key_data)
{
unsigned char i,j;
PCA0MD &= ~0x40;
for (i=0;i<8;i++)
{
j = j << 1;
if ((key_data & 0x01) ==0)
{
j &= ~BIT0;
}
else
{
j |= BIT0;
}
key_data = key_data >> 1;
}
PCA0MD |= 0x40;
return(j);
}
void delay(unsigned char i)
{
unsigned char j,k;
for (j=0;j<i;j++)
{
for (k=0;k<i;k++)
{
;
}
PCA0CPH2 = 0X55;
}
}
//main function
void main()
{
unsigned char key_in,key_old = 0xff;
unsigned long freq;
unsigned long PLL_REG[3]={0x0093,0x0200,0x0000};
unsigned long *PLL_point;
unsigned char j,i=0,num_mark=0;
PCA0MD &= ~0x40;
Init_Device();
PLL_point = &PLL_REG;
//TMR2CN |= BIT2;
num_mark = 0;
key_old = 0xff;
for(;;)
{
PCA0MD |= 0x40;
PCA0CPH2 = 0X55;
key_in = ~P1;
key_in = chang_high_to_low(key_in);
freq = FREQ_BASE + key_in;
if (key_in != key_old)
{
PCA0MD &= ~0x40;
i=0xff;
prepare_PLL(freq,(PLL_point+2));
for(j=0;j<3;j++)
{
PLL_LE = 0;
send_data(PLL_REG[j]);
PLL_LE = 1;
PLL_LE = 0;
}
PCA0MD |= 0x40;
num_mark = 0;
key_old = key_in;
PCA0CPH2 = 0X55;
}
delay(100);
// if ( (muxdut == 0) )
if ( (muxdut == 0) &&(num_mark == 0x00) )
{
PCA0MD &= ~0x40;
prepare_PLL(freq,(PLL_point+2));
for(j=0;j<3;j++)
{
PLL_LE = 0;
send_data(PLL_REG[j]);
PLL_LE = 1;
PLL_LE = 0;
}
PCA0MD |= 0x40;
PCA0CPH2 = 0X55;
i = i+1;
}
PCA0CPH2 = 0X55;
delay(255);
if (i >10)
{
num_mark = 0xff;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -