MC145162锁相环程序Word文档格式.docx
- 文档编号:20934135
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:22
- 大小:133.71KB
MC145162锁相环程序Word文档格式.docx
《MC145162锁相环程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《MC145162锁相环程序Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
{
uchari,w,q;
bitd,load,flag;
w=0;
q=0;
i=0;
delay(500);
P1=0xff;
MC145162_Reset(0x92,0x300A8000,16,16);
//不收只发102.4MHz,100KHz*64*16
//0x31904000==>
0011-000110010000-01-0000000000000
//0AUXTxSelectRxSelect-12bit=400-s1s2-14bit=0
//Crystal=4MAUX-s1-s2=0-1-0==>
fR2->
C(Tx=4M/400=10kHz)、fR1->
A(Rx=4M/400/25=400Hz)
LCD_Init();
//LCD_Write_String(0,0,"
SettheFreq!
"
);
//LCD_Write_String(13,1,"
MHz"
if(T)
LCD_Write_String(0,0,"
T"
//发射指示
else
R"
//接收指示
LCD_Write_String(13,1,"
set_pot(0x43);
while
(1)
{
switch(KeyPro())
{
case0xff:
;
break;
case0:
if((w<
4)&
&
!
flag)
{
LCD_Write_Data('
freq[w]=1;
w++;
}
case1:
flag)
freq[w]=2;
}
case2:
flag)
freq[w]=3;
}
case3:
if(!
flag)
set_pot(0x40);
//清除已输入,
for(i=0;
13;
i++)//MHz不要清除,所以不是i<
16
{
LCD_Write_Data('
'
}
set_pot(0x43);
w=0;
q=0;
clear();
case4:
freq[w]=4;
case5:
freq[w]=5;
case6:
freq[w]=6;
case7:
load&
{
LCD_Write_Cmd(0x04);
LCD_Write_Data('
//退格
LCD_Write_Cmd(0x06);
if(w==q)//上一位是小数点,d=1是其标志
d=0;
//清除小数点标志
else//上一位不是小数点
freq[w-1]=0;
w--;
case8:
freq[w]=7;
case9:
freq[w]=8;
case10:
freq[w]=9;
case11:
load)
LCD_Init();
if(T)
LCD_Write_String(0,0,"
else
LCD_Write_String(13,1,"
set_pot(0x43);
w=0;
d=0;
q=0;
flag=0;
P1=0xff;
clear();
case12:
if((d==0)&
(load==0))
q=w;
//记录小数点位置
d=1;
//按了小数点的标志
}
case13:
freq[w]=0;
case14:
T=~T;
//选择发射还是接收
case15:
//LCD_Init();
//确定键
set_pot(0x00);
//第1行的第1列
for(i=0;
16;
i++)
LCD_Write_Data(title_2[i]);
//Loading...
if(i<
5)
DelayMs(80-10*i);
else
DelayMs(200-10*i);
set_pot(0x40);
/*for(i=0;
i++)//第二行清空
LCD_Write_Data('
}*/
load=1;
}
//Tx=f/1024;
if(load)
{
flag=1;
if(d==0)//问题:
没按小数点,总是会超出范围!
!
f=(freq[0]*0.1+freq[1]*0.01+freq[2]*0.001+freq[3]*0.0001)*pow(10,w);
//(10^(w-4))
if(d==1)
f=(freq[0]*0.1+freq[1]*0.01+freq[2]*0.001+freq[3]*0.0001)*pow(10,q);
//f=(freq[0]*1000+freq[1]*100+freq[2]*10+freq[3])*pow(10,q-4);
//(10^(q-4))f是float,但是这里的运算丝毫不涉及小数导致出错
/*
P1=freq[0];
DelayMs(800);
P1=freq[1];
P1=freq[2];
P1=freq[3];
*/
if(f>
150)
{
LCD_Write_String(0,0,"
ErrorFreq<
150M!
LCD_Write_String(3,1,"
Setagain!
f=0;
Tx=0;
P1=0xff;
}
elseif(f<
50)
ErrorFreq>
50M!
}
else
Tx=f*10;
//f*MHz*1000kHz/100kHz
MC145162_Reset(0x92,0x300A8000,Tx,Tx);
if(T)
LCD_Write_String(1,0,"
Transmit..."
else
Receive..."
/*for(i=0;
i++)//test///////////////////////////////////
{
LCD_Write_Char(i,1,disp[freq[i]]);
LCD_Write_Char(5,1,'
q'
if(d==1)
LCD_Write_Char(6,1,disp[q]);
LCD_Write_Char(8,1,'
w'
LCD_Write_Char(9,1,disp[w]);
LCD_Write_Char(11,1,'
d'
LCD_Write_Char(12,1,disp[d]);
DelayMs(800);
}*///test///////////////////////////////////
P1=f;
//指示,测试用,可不用
d=0;
q=0;
load=0;
}
}
}
//config.h***************************************************************************************
#ifndef__config_h__
#define__config_h__
delay.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlongint
#defineDataPortP0
#defineKeyPortP3
sbitCLK=P2^0;
sbitADin=P2^1;
sbitDin=P2^2;
sbitENB=P2^3;
sbitRS=P2^4;
//定义液晶端口
sbitRW=P2^5;
sbitEN=P2^6;
externvoidDelayUs2x(uchart);
externvoidDelayMs(uchart);
externucharKeyScan(void);
externucharKeyPro(void);
externbitLCD_Check_Busy(void);
externvoidLCD_Write_Cmd(ucharcom);
externvoidLCD_Write_Data(ucharData);
externvoidLCD_Clear(void);
externvoidLCD_Write_String(ucharx,uchary,uchar*s);
externvoidLCD_Write_Char(ucharx,uchary,ucharData);
externvoidset_pot(ucharpot);
externvoidLCD_Init(void);
externvoiddelay(uinttime);
externucharkey_scan();
#endif
//mc145162.c**********************************************************************************
/*******************************************************
MC145162可编程的双PLL(锁相环)频率合成器
最高频率可达到60MHz和85MHz。
适合配合MC3361,MC3362,MC2833等调频发射接收模块的使用
适用于全球范围内的CT-1制式的无绳电话。
同样适用于需要60MHz以下的频率其它产品。
MC145162-1是MC145162的高频版本,工作频率高达85MHz。
通过MCU的串行接口,非常方便地操作可编程的接收、发射、参考、辅助参考计数器。
正因为这样,所以它可使用于任何CT-1制式的无绳电话。
本IC的发射环和接收环各有一个独立的相位检测器。
一个共用的参考晶体,驱动两个独立的参考频率计数器,为发射环和接收环提供了独立的参考频率。
如果有需要的话,辅助参考计数器可以让我们为发射环和接收环选择一个额外的参考频率。
*******************************************************/
bitT=1;
//默认发射模式
/*******************************************************************/
voiddelay(uinttime)
uintt;
for(t=0;
t<
time;
t++){}
voidWrite_Ctrl_val(uintCtrl_val)//输入数据为控制字
inti;
ulongshift1;
if(T)
Ctrl_val=Ctrl_val|0x02;
//关接收
Ctrl_val=Ctrl_val|0x04;
//关发射
ENB=0;
CLK=0;
ADin=0;
Din=0;
ENB=1;
shift1=0x80;
//10000000//在编程控制寄存器/参考频率时,MSB为1,输入控制字。
MSB为0,输入参考频率.
for(i=0;
i<
8;
i++)//控制寄存器,是在配置哪些用于不用,怎么用的问题
{
if(Ctrl_val&
shift1)Din=1;
elseDin=0;
CLK=1;
shift1=shift1>
>
1;
voidWrite_Refreq_val(ulongRefreq_val)//输入数据是参考频率
ulongshift2;
//
shift2=0x80000000;
//1000000000000000-0000000000000000
//参考频率,其实是在配置对晶振的分频R且鉴相器如何选择之
32;
i++)
if(Refreq_val&
shift2)
Din=1;
else
shift2=shift2>
}
voidWrite_Counter_Reg(uintTx_Count,uintRx_Count)//发射计数器与接收计数器被选中
ulongshift3;
//
//串行数据传输的时候,ENB脚置低使能
shift3=0x8000;
//1000000000000000
16;
i++)//发射计数器与接收计数器同时输入
{//这里是在配置总的发射或接收计数,类似于145151芯片的总分频数M(M=PN+A)
if(Tx_Count&
shift3)
ADin=1;
if(Rx_Count&
shift3=shift3>
//当编程Tx/Rx通道计数器,ENB脚必须动作,
//以便在上次时钟的上升沿之后提供下降沿来锁存移位数据。
voidWrite_PLL(uintTX,uintRX)
uintTX_temp,RX_temp;
TX_temp=TX/4;
//预分频
RX_temp=RX/4;
Write_Counter_Reg(TX_temp,RX_temp);
voidMC145162_Reset(uintCtrl_val,ulongRefreq_val,uintTx_Count,uintRx_Count)
{//Ctrl_val:
1-0-TestBit-AuxDataSelect-REFout/3/4-TxPDEnable-RxPDEnable-TxPDEnable
//Refreq_val:
发射寄存器与接收寄存器,共32位
Write_Ctrl_val(Ctrl_val);
Write_Refreq_val(Refreq_val);
//Write_Counter_Reg(Tx_Count,Rx_Count);
Write_PLL(Tx_Count,Rx_Count);
//MCU的编程方法有两种格式,由ENB输入引脚所控制。
//在串行数据传输的时候,
//假如使能信号为高,控制寄存器/参考频率编程被选中。
//假如ENB为低时,发射计数器与接收计数器的被选中编程。
//在发射计数器与接收计数器编程期间,ADin和Din脚都能输入数据到发射与接收计数器。
//*******************************************************************************************
//Delay.h***************************************************************************************
#ifndef__delay_h__
#define__delay_h__
/*------------------------------------------------
uS延时函数,含有输入参数uchart,无返回值
uchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
voidDelayUs2x(uchart)
while(--t);
mS延时函数,含有输入参数uchart,无返回值
uchar是定义无符号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MC145162 锁相环 程序