📄 pll.lst
字号:
C51 COMPILER V7.10 PLL 03/27/2005 22:39:53 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE PLL
OBJECT MODULE PLACED IN PLL.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PLL.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h>
5 #include <absacc.h>
6 #include "mylib.h"
7 #include "intrins.h"
8 #define input0 in0.in0
9 #define input1 in1.in1
10 #define fm 0
11 #define am 1
12 #define up 1
13 #define down 0
14 sbit din=P1^5;
15 sbit clk=P1^6;
16 sbit dou=P3^7;
17 sbit cen=P1^4;
18 extern bit band;
19 union
20 {
21 ulong all;
22 struct
23 {
24 uchar addr :8; //8位输入输出模式选择地址
25 uint frq :16; //16位电台频率数值
26 uchar cankao :4; //4位参考频率选择
27 uchar xs :1; //晶振选择 0:4.5m 1:7.2mhz
28 uchar cte :1; //中频计数控制 1:START 0:REST
29 uchar inp :2; //输入频率范围选择
30 }in0;
31 }in0;
32 union
33 {
34 ulong da;
35 struct
36 {
37 uchar addr :8; //8位输入输出模式选择地址
38 uchar bnc :1; //空输出B01-B04四个输出口,可以控制外围的电路,常用来做波段切换。
39 uchar stmo :1; //立体单声道强制转换 设置为1可以选择单声道输出
40 uchar ifen :1; //中频缓冲输出使能 设置为0选择中频输出同时净音
41 uchar band :1; //波段选择 设置为0选择调频
42 uchar io :2; //两个可以定义的端口,可以做输入也可做输出。再此程序中IO1空,IO2为立体声检测脚
43 uchar ioc :2; //设置IO口的工作模式,为0时设置为输入模式,反之。
44 uchar dz :2; //锁相环死区控制,不是很重要。
45 uchar ul :2; //锁相环控制电压输出驱动模式设01时为直接输出模式(一般采用此种模式)
46 uchar doc :3; //设置输出数据端DO脚的辅助功能设置010时将指示中频测量的完成状况
47 uchar dnc :1; //空数据位,不用。
48 uchar test :3; //测试模式一般全部设置为0
49 uchar ifs :1; //中频计数器控制,一般设置为1,主要设置中频场强(1:40毫伏0:70毫伏)
50 uchar dlc :1; //电荷泵输出,正常状态为0,设置为1时拉低电位。
51 uchar tbc :1; //设置为1时使B01口输出8HZ的基准脉冲,此时B01口将不能作为通用输出口。
52 uchar gt :2; //中频测量时间设置最大64MS最小4MS当GT=00时,前两中等待时间3-4MS后两中等待时间为7-8MS,
-中频信号必须在等待时间结束之前输入!!
53 }in1;
54 }in1;
C51 COMPILER V7.10 PLL 03/27/2005 22:39:53 PAGE 2
55 void iniband()
56 {
57 1 input0.addr=0x14; //输入模式1的地址
58 1 input0.xs =0x00; //选择0为4.5MHZ晶体
59 1 input0.cte =0x00; //锁相环内部使能位设置0复位设置为1开始计数。
60 1 input1.addr=0x94; //输入模式2的地址
61 1 input1.bnc =0x00; //B04本设计未用
62 1 input1.stmo=0x00; //默认为立体声输出
63 1 input1.ifen=0x01; //中频输出缓冲暂时关闭
64 1 input1.io =0x00; //没有用到,但是可以做为立体声单声道信号检测
65 1 input1.ioc =0x00; //将上两个脚全部设置为输出
66 1 input1.dz =0x00; //此设置效果不是很明显可以设置捕捉范围
67 1 input1.ul =0x01; //将锁相环的误差电压直接输出可以设置捕捉灵敏度
68 1 input1.doc =0x00; //将DOUT脚的辅助功能设置为中频计数状态检测
69 1 input1.dnc =0x00; //空的数据位
70 1 input1.test=0x00; //全部设置为0设置为正常状态
71 1 input1.ifs =0x00; //中频输入信号强度控制设置此状态,最大限度的减少误台
72 1 input1.dlc =0x00; //设置电荷泵正常输出
73 1 input1.tbc =0x00; //设置为1时B01将输出8HZ的基准信号但是BO1本收音电路设置为FM/AM转换,应设置为零
74 1 input1.gt =0x01; //将中频测量时间设置为4MS设置太高自动搜索整个频段将会很长
75 1 }
76 void iniband1(bit band)//设置调频调幅的不同部分
77 {
78 1 if(band==fm)
79 1 {
80 2 input0.cankao=0x0c; //FM步进频率50KHZ
81 2 input0.inp=0x01; //输入频率范围10-160MHZ
82 2 input1.band=fm;
83 2 }
84 1 else
85 1 {
86 2 input0.cankao=0x05; //AM步进频率10KHZ
87 2 input0.inp=0x00; //输入频率范围0.5-10MHZ
88 2 input1.band=am;
89 2 }
90 1 }
91
92
93 ulong stepserch(bit direction,uint freq)//单步搜索形参:步进方向,和基频率
94 {
95 1 uchar c;
96 1 uint a; //根据
97 1 c=(input1.band)?0x10:0x01; //根据波段选择步进数据AM每次加0X10 FM每次加0X01,具体原因参照数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -