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

📄 tc9256.c

📁 pll锁向环控制程序
💻 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 + -