📄 lc72130.c
字号:
/**********************************************************************
公司名: 广州强智数码科技有限公司
文件名: FM100.c
设计者: 王健强
开始日: 2005-12-20 12:19
完成日: 2006-2-7 11:49
----------------------------------------------------------------------
MCU stc89c51
Crycle 12MHz
Audio input selector PT2314 ; FM PC MP
2CH Audio Processor PT2314 ; Volume & Tone & Loud
LCD Drive HT1621 ;
A/D LM324 ;
Template DS18B20 ;
Remote transmit HT6222
**********************************************************************/
#define X0_Seq 0
#define T0_Seq 1
#define X1_Seq 2
#define T1_Seq 3
#define T2_Seq 5
#include < reg51.h >
#include < intrins.h>
#include "b.h"
/*************************************************************
Data Define
*************************************************************/
#define uchar unsigned char
#define uint unsigned int
#define BYTE unsigned char
#define WORD unsigned int
#define nop _nop_()
#define True 1
#define False 0
#define High 1
#define Low 0
#define ON 1
#define OFF 0
/*************************************************************
P0
*************************************************************/
sbit P_DO72130 = P0^0;
sbit P_CLK72130 = P0^1;
sbit P_DI72130 = P0^2;
sbit P_CE72130 = P0^3;
sbit P_SDA = P0^4;
sbit P_SCK = P0^5;
sbit P_AD_Ctrl = P0^6;
sbit P_LoudLed = P0^7;
/*************************************************************
P2
*************************************************************/
sbit P_RedLed = P2^7;
sbit P_GreenLed = P2^6;
sbit P_BlueLed = P2^5;
/*************************************************************
P1
*************************************************************/
sbit P_18B20 = P1^4;
/*************************************************************
P3
*************************************************************/
sbit P_ADIn = P3^2;
sbit P_Remote = P3^3;
sbit P_Cs1621 = P3^4;
sbit P_Clk1621 = P3^5;
sbit P_Dat1621 = P3^6;
sbit P_Buzz = P3^7;
uchar data Radio_Data_Buf[4] ;
uchar data CTRL_TMP[2] ;
uchar data Radio_Ctrl_Buf[4] ;
BYTE data Lock_Data ;
WORD data IF_Data ;
uint data Fre_Disp_Buf ;
/****************************************************
LC72130的调试体会:
LC72130是一个锁相环,最终会输出一个控制电压来控制FM\VCO
或者AM\VCO的振荡频率,在调试时要特别注意这一点,如果它的
输出电压在程序的控制之下程现0.01V左右的变化,说明程序是
对的,而且分频系数也是对的,所以在此时会随着LC72130输出
电压的变化出现不同的电台,倘若程序的时序是对的,但送分频
系数不在规定的范围,LC72130的输出电压会保留在低电压0V或
者高电压10V,在调试时千万别认为出不来声音就是程序时序部
分有问题,当然首先必须保证硬件没问题.接着保证软件时序没
有出错,然后用软件控制相关扩展口输出看是不是达到预定的
效果,如果达到证明软件时序没问题.
LC72130的调试关键在于晶振,分频系数与参考频率的设置,通
过程序控制相应的IO口电平,以此来检验程序是不是正确.
****************************************************/
/****************************************************
在自动调频时一定要先静音然后再读中频,否则读出的中频值
不正确,我就吃了这个亏,让我浪费了一天的时间,另要注意在
用仿真机调试收音头时干扰过大,只有可怜的一两个台,但用了
单片机之后,收台效果就不错
****************************************************/
/****************************************************
72130操作步骤:
软件选择晶振,晶振分频比,本振分频比,初始化扩展IO
工作原理如下:
先确定本振大小,再读回中频值,如果中频值在误差的范围内,
则证明收到电台,停止改变本振分频值,之后必须判断是否是
立体声,本振大小等于步进值与本振分频值的乘积,也即是
(FM/AM)VCO输出的频率值,
****************************************************/
/******************************************
; Delay
******************************************/
void Delay_10us(void)
{
nop ;
nop ;
nop ;
nop ;
nop ;
nop ;
}
//***************************************
void WByte_72130( BYTE DataTmp )
{
uchar i;
for ( i = 0; i < 8; i++ )
{
P_CLK72130= False;
Delay_10us() ;
P_DI72130 = (bit)(DataTmp&0x01);
Delay_10us() ;
P_CLK72130= True;
Delay_10us() ;
DataTmp >>= 1;
}
}
//***************************************
void Read72130Rou( void )
{
uchar i;
for ( i=0; i<8; i++ )
{
Lock_Data <<= 1;
P_CLK72130= True;
Delay_10us() ;
P_CLK72130= False;
Delay_10us() ;
if ( P_DO72130 )
{
Lock_Data |= 0x01;
}
}
for ( i=0; i<16; i++ )
{
IF_Data <<= 1;
P_CLK72130= True;
Delay_10us() ;
P_CLK72130= False;
Delay_10us() ;
if ( P_DO72130 )
{
IF_Data |= 0x01;
}
}
}
//****************************************
void Radio_Send_Data( uchar Array[] )
{
uchar i;
P_CE72130 = False ;
Delay_10us() ;
WByte_72130(Array[0]) ;
Delay_10us() ;
P_CE72130 = True ;
Delay_10us() ;
for ( i=1; i<4; i++ )
{
WByte_72130(Array[i]) ;
}
Delay_10us() ;
P_CE72130 = False ;
}
/************************************************
i2 i1 - ul c19 c18 c17 c16 c15 c14 c13 c12 c11
c10 c9 c8 c7 c6 c5 c4 c3 c2 c1 c0
************************************************/
void Receive_Data(void)
{
P_CE72130 = False;
Delay_10us() ;
WByte_72130(0x2a) ;
Delay_10us() ;
P_CE72130 = True;
Read72130Rou() ;
F_Locked=OFF ;
if (Lock_Data&0x10)
{
F_Locked=ON ;
}
Delay_10us() ;
P_CE72130 = False;
}
/************************************************/
void Radio_SendData_IN1( void )
{
Radio_Data_Buf[ 0 ] = 0x28 ;
Radio_Data_Buf[ 1 ] = EepFM_Fre[0] ;
Radio_Data_Buf[ 2 ] = EepFM_Fre[1] ;
Radio_Data_Buf[ 3 ] = CTRL_TMP[0] ;
Radio_Send_Data( Radio_Data_Buf );
}
/************************************************/
void Radio_SendData_IN2( void )
{
Radio_Data_Buf[ 0 ] = 0x29 ;
Radio_Data_Buf[ 1 ] = CTRL_TMP[1] ;
Radio_Data_Buf[ 2 ] = B0001_0000 ;
Radio_Data_Buf[ 3 ] = B0001_0000 ; // IFS=1 CT=4MS
Radio_Send_Data( Radio_Data_Buf );
}
/************************************************
; FM频率范围: 87.00MHZ -- 108MHZ
; F=10.7M S =100K = 2*50K
; 10.7M/1S=IF/32MS ==> IF=32MS*10.7M=342400
; 10.7M/1S=IF/4MS ==> IF=4MS*10.7M=42800
/************************************************
; CTRL1_TMP
; R3-2-1-0 XS CTE DVS SNS
; CTRL2_TMP
; BO4-3-2-1 IO2-1 IOC2-1
; CTRL3_TMP
; DZ1 DZ0 UL1 UL0 DOC2-1-0 BO5
; CTRL4_TMP
; TEST2-1-0 IFS DLC TBC CT1 CT0
/************************************************
; /BO3 - "1/0" - "MON/ST" CTRL --- BO3 - "0/1"
; /BO2 - "1/0" - OFF/IF&Mute --- BO2 - "0/1"
; /BO1 - "1/0" - AM/FM --- BO1 - "0/1"
; /IO2 - "1/0" - "ST/MON" IN --- IO2 - "0/1"
************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -