📄 tc9256.c
字号:
#include "reg51x.h"
#include "tab.h"
#include <stdio.h>
#include <intrins.h>
#include "78e65.h"
#define pll_lock_check 0
#define txpll 1
#define RXAdd107MHz 1
sbit PLL_EN= P1^7;
sbit PLL_CLK=P1^6;
sbit PLL_DATA=P1^5;
sbit LED =P1^4;
#if txpll
sbit ch1=P3^5;
sbit ch2=P3^4;
sbit ch3=P3^3;
sbit ch4=P3^7;
//uchar code SETtestCHx[3]={0X7a,0X13,0X5A};// 49.860
uchar code SETCHx[15][3]=
{
{0X45,0X13,0X5A},//49.330
{0X4a,0X13,0X5A},//49.380
{0X4f,0X13,0X5A},//49.430
{0X54,0X13,0X5A},//49.480
{0X59,0X13,0X5A},//49.530
{0X5e,0X13,0X5A},//49.580
{0X63,0X13,0X5A},//49.630
{0X68,0X13,0X5A},//49.680
{0X6d,0X13,0X5A},//49.730
{0X72,0X13,0X5A},//49.780
{0X77,0X13,0X5A},// 49.830
{0X7C,0X13,0X5A},// 49.880
{0X81,0X13,0X5A},//49.930
{0X86,0X13,0X5A},//49.980
{0X8b,0X13,0X5A} //50.030
};
#else
#if RXAdd107MHz //49.880+10.7MHz
sbit ch1=P1^3;
sbit ch2=P1^2;
sbit ch3=P1^1;
sbit ch4=P1^0;
uchar code SETCHx[15][3]=
{
{0X73,0X17,0X5A},//49.33 3863 6003
{0X78,0X17,0X5A},//49.38 3868 6008
{0X7d,0X17,0X5A},//49.43 3873 6013
{0X82,0X17,0X5A},//49.48 3878 6018
{0X87,0X17,0X5A},//49.53 3883 6023
{0X8c,0X17,0X5A},//49.58 3888 6028
{0X91,0X17,0X5A},//49.63 3893 6033
{0X96,0X17,0X5A},//49.68 3898 6038
{0X9b,0X17,0X5A},//49.73 3903 6043
{0Xa0,0X17,0X5A},//49.78 3908 6048
{0Xa5,0X17,0X5A},//49.83 3913 6053
{0Xaa,0X17,0X5A},// 49.88 3918 6058
{0Xaf,0X17,0X5A},//49.93 3923 6063
{0Xb4,0X17,0X5A},//49.98 3928 6068
{0Xb9,0X17,0X5A} //50.03 3933 6073
};
#else //49.880-10.7MHz
sbit ch1=P3^2;
sbit ch2=P3^3;
sbit ch3=P3^4;
sbit ch4=P3^5;
uchar code SETCHx[15][3]=
{
{0X17,0X0F,0X5A},//49.330 3863
{0X1c,0X0F,0X5A},//49.380 3868
{0X21,0X0F,0X5A},//49.430 3873
{0X26,0X0F,0X5A},//49.480 3878
{0X2b,0X0F,0X5A},//49.530 3883
{0X30,0X0F,0X5A},//49.580 3888
{0X35,0X0F,0X5A},//49.630 3893
{0X3a,0X0F,0X5A},//49.680 3898
{0X3f,0X0F,0X5A},//49.730 3903
{0X44,0X0F,0X5A},//49.780 3908
{0X49,0X0F,0X5A},//49.830 3913
{0X4e,0X0F,0X5A},//49.880 3918
{0X53,0X0F,0X5A},//49.930 3923
{0X58,0X0F,0X5A},//49.980 3928
{0X5d,0X0F,0X5A} //50.030 3933
};
#endif
#endif
uchar code poweronD0H[3]={0X0,0X0,0X3F};
uchar code poweronD2H[3]={0X0,0X0,0X0};
uchar code SETD2H[3]={0XA0,0X00,0X00};
/*
uchar code SETCH1[3]={0X0F,0X44,0X5A};//39.080
uchar code SETCH2[3]={0X0F,0X49,0X5A};//39.130
uchar code SETCH3[3]={0X0F,0X4E,0X5A};//39.180
uchar code SETCH4[3]={0X0F,0X53,0X5A};//39.230//*/
void waiting()//Xtal = 12MHZ
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
SendPLLData(uchar *Data1,uchar addr)
{
unsigned char i,j;
unsigned char data2;
PLL_EN=1;
PLL_CLK=1;
PLL_DATA=1;
waiting();
PLL_EN=0; // PLL_EN pull down
for ( i=0; i<8; i++ ) // send first 8bits address
{
PLL_CLK=0;
if ( addr&0x01 )
{
PLL_DATA=1;
}
else
{
PLL_DATA=0;
}
waiting();
PLL_CLK=1;
waiting();
addr >>= 1;
}
//-----------
PLL_EN=1; // PLL_EN pull up
waiting();
for(j=0;j<3;j++)
{
data2= *Data1;
for ( i=0; i<8; i++ ) // send first 8bits address
{
PLL_CLK=0;
if ( data2&0x01 )
{
PLL_DATA=1;
}
else
{
PLL_DATA=0;
}
waiting();
PLL_CLK=1;
waiting();
data2 >>= 1;
}
Data1++;
}
waiting();
PLL_EN=0;
// send end
waiting();
PLL_EN=1;
PLL_DATA=1;
waiting();
}
#if pll_lock_check
ReadPLLData(uchar *Data1,uchar addr)
{
unsigned char i,j;
unsigned char data2;
PLL_EN=1;
PLL_CLK=1;
PLL_DATA=1;
waiting();
PLL_EN=0; // PLL_EN pull down
for ( i=0; i<8; i++ ) // send first 8bits address
{
PLL_CLK=0;
if ( addr&0x01 )
{
PLL_DATA=1;
}
else
{
PLL_DATA=0;
}
waiting();
PLL_CLK=1;
waiting();
addr >>= 1;
}
PLL_EN=1; // PLL_EN pull up
waiting();
for(j=0;j<3;j++)
{
data2=0;
for ( i=0; i<8; i++ ) // send first 8bits address
{
PLL_CLK=0;
waiting();
PLL_CLK=1;
waiting();
if ( PLL_DATA)
{
data2|=0X80;
}
data2 >>= 1;
}
*Data1=data2;
Data1++;
}
waiting();
PLL_EN=0; // send end
waiting();
PLL_EN=1;
PLL_DATA=1;
waiting();
}
#endif
//-----------------------------------------------------------------------------------------
main()
{
uchar j;
bit frcchange_b=0;
#if pll_lock_check
uchar i;
uchar buffer[3]={0,0,0};
#endif
#if w78e65
Initialize78E65();
OSAUX_RAM_EN(1);// EXT ROM EN (Xdata)
#endif
PCON = SMOD;
SCON=UARTMODE1+UARTREN+UARTTI;
TMOD=TIME1MODE2;
TH1=230;
TR1=1;
P1=0XFF;
P3|=0XFC;
SendPLLData(&poweronD0H,0XD0);
SendPLLData(&poweronD2H,0XD2);
SendPLLData(&SETD2H,0XD2);
// SendPLLData(&SETtestCHx[0],0XD0);
SendPLLData(&SETCHx[11][0],0XD0);
LED=1;
j=11;
while(1){
if(!ch1)
{
while(!ch1);
j++;
if ( j==15)
{
j=0;
}
SendPLLData(&SETCHx[j][0],0XD0);
LED=1;
frcchange_b=1;
}
if(!ch2)
{
while (!ch2);
if ( j==0)
{
j=15;
}
j--;
SendPLLData(&SETCHx[j][0],0XD0);
LED=1;
frcchange_b=1;
}
/* if(~ch1)
{
SendPLLData(&SETCH1,0XD0);
LED=1;
frcchange_b=1;
}
else if(~ch2)
{
SendPLLData(&SETCH2,0XD0);
LED=1;
frcchange_b=1;
}
else if(~ch3)
{
SendPLLData(&SETCH3,0XD0);
LED=1;
frcchange_b=1;
}
else if(~ch4)
{
SendPLLData(&SETCH4,0XD0);
LED=1;
frcchange_b=1;
}
*/
#if pll_lock_check
if (frcchange_b)
{
#if debug
printf("\npll=%bx",j);
#endif
SendPLLData(& SETD2H,0XD2);
frcchange_b=0;
}
while(i--);
ReadPLLData(&buffer,0XD3);
if(buffer[0]&0x01)
{
if(buffer[0]&0x02==0X00)
{
if((buffer[0]&0x1c)!=0x1c)
{
LED=0;
#if debug
buffer[0]&=0x1c;
buffer[0]>>=2;//*
switch(buffer[0])
{
case 0:
printf("\nPE<0.55us");
break;
case 1:
printf("\nPE:0.55us->1.65us");
break;
case 2:
printf("\nPE:1.65us->2.75us");
break;
case 3:
printf("\nPE:2.75us->3.85us");
break;
case 4:
printf("\nPE:3.85us->4.95us");
break;
case 5:
printf("\nPE:4.95us->6.05us");
break;
case 6:
printf("\nPE:6.05us->7.15us");
break;
default :
LED=1;
break;
}
#endif
}
}
}
#endif
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -