📄 tea5767.lst
字号:
C51 COMPILER V7.50 TEA5767 04/09/2008 23:05:37 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEA5767
OBJECT MODULE PLACED IN tea5767.OBJ
COMPILER INVOKED BY: F:\C51\BIN\C51.EXE tea5767.c LARGE OPTIMIZE(7,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg52.h"
2 #include"24c02.h"
3 #include"lcm.h"
4 #define max_freq 108000
5 #define min_freq 87500
6 unsigned char radio_write_data[5]={0xb1,0xa0,0x20,0x11,0x00}; //要写入TEA5767的数据
7 unsigned char radio_write_data1[5]={0x31,0xa0,0x20,0x11,0x00}; //要写入TEA5767的数据
8 unsigned char radio_read_data[5]; //TEA5767读出的状态
9 unsigned int default_pll=0x29c2;//0x29f9; //默认存台的pll,87.8MHz
10 unsigned int pll=0;
11 float frequency=0;
12 void get_frequency(void);
13 extern void sta();
14 extern void wrbyt(unsigned char byt);
15 extern bit iic_testack() ;
16 extern void mack();
17 extern void stop();
18 extern unsigned char rdbyt();
19 extern uchar frq[10];
20 sbit ds_1302=P1^5;
21 void radio_write(void)
22 {
23 1 unsigned char i;
24 1 stop();
25 1 sta();
26 1 wrbyt(0xc0); //TEA5767写地址
27 1 if(!iic_testack())
28 1 {
29 2 for(i=0;i<5;i++)
30 2 {
31 3 wrbyt(radio_write_data1[i]);
32 3 mack();
33 3 }
34 2 }
35 1 stop();
36 1 }
37
38 //读TEA5767状态,并转换成频率
39 void radio_read(void)
40 {
41 1 unsigned char i;
42 1 unsigned char temp_l,temp_h;
43 1 pll=0;
44 1 stop();
45 1
46 1 sta();
47 1 wrbyt(0xc1); //TEA5767读地址
48 1 if(!iic_testack())
49 1 {
50 2 for(i=0;i<5;i++)
51 2 {
52 3 radio_read_data[i]=rdbyt();
53 3 mack();
54 3 }
55 2 }
C51 COMPILER V7.50 TEA5767 04/09/2008 23:05:37 PAGE 2
56 1 stop();
57 1 temp_l=radio_read_data[1];
58 1 temp_h=radio_read_data[0];
59 1 temp_h&=0x3f;
60 1 pll=temp_h*256+temp_l;
61 1 get_frequency();
62 1 }
63
64 //由频率计算PLL
65 void get_pll(void)
66 {
67 1 unsigned char hlsi;
68 1 unsigned int twpll=0;
69 1 hlsi=radio_write_data[2]&0x10;
70 1 if (hlsi)
71 1 pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768); //频率单位:k
72 1 else
73 1 pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768); //频率单位:k
74 1 }
75 //由PLL计算频率
76 void get_frequency(void)
77 {
78 1 unsigned char hlsi;
79 1 unsigned int npll=0;
80 1 npll=pll;
81 1 hlsi=radio_write_data[2]&0x10;
82 1 if (hlsi)
83 1 frequency=(unsigned long)((float)(npll)*(float)8.192-225); //频率单位:KHz
84 1 else
85 1 frequency=(unsigned long)((float)(npll)*(float)8.192+225); //频率单位:KHz
86 1 }
87
88 //手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,不用考虑TEA5767用于搜台的相关位:SM,SUD
89 void search(bit mode)
90 {
91 1 radio_read();
92 1 if(mode)
93 1 {
94 2 frequency+=50;
95 2 if(frequency>max_freq)
96 2 frequency=min_freq;
97 2 }
98 1 else
99 1 {
100 2 frequency-=50;
101 2 if(frequency<min_freq)
102 2 frequency=max_freq;
103 2 }
104 1 EA=0;
105 1 get_pll();
106 1 radio_write_data1[0]=pll/256;
107 1 radio_write_data1[1]=pll%256;
108 1 radio_write_data1[2]=0x20;
109 1 radio_write_data1[3]=0x11;
110 1 radio_write_data1[4]=0x00;
111 1 radio_write();
112 1 lcddigit(frequency/10,60,50);
113 1 EA=1;
114 1 }
115 void set_frq(uchar *frq_m)
116 {
117 1
C51 COMPILER V7.50 TEA5767 04/09/2008 23:05:37 PAGE 3
118 1 EA=0;
119 1 frequency=(float)((*frq_m)*1000+(*(frq_m+1))*100+(*(frq_m+2))*10+(*(frq_m+3)))*100;
120 1 if((frequency<87500)||(frequency>108500))
121 1 {
122 2 EA=1;
123 2 *frq_m=0;
124 2 *(frq_m+1)=0;
125 2 *(frq_m+2)=0;
126 2 *(frq_m+3)=0;
127 2 return;
128 2 }
129 1 get_pll();
130 1 radio_write_data1[0]=pll/256;
131 1 radio_write_data1[1]=pll%256;
132 1 radio_write_data1[2]=0x20;
133 1 radio_write_data1[3]=0x11;
134 1 radio_write_data1[4]=0x00;
135 1 radio_write();
136 1 lcddigit(frequency/10,60,50);
137 1 EA=1;
138 1 }
139 //自动搜台 没做中频判段 会有假台
140 void auto_search(void)
141 {
142 1 char i=0;
143 1 char j=0;
144 1 int k=0;
145 1 int y=0;
146 1 char m=0;
147 1 unsigned char aa[6]={0};
148 1 ds_1302=0;
149 1 radio_write();
150 1 while(frequency<max_freq)
151 1 {
152 2 while((!((radio_read_data[2]<0xc0)&&(radio_read_data[2]>0xbc)&&((radio_read_data[3]>>4)>0x0d)))&&(y<5))
153 2 {
154 3 EA=0;
155 3 y++;
156 3 ds_1302=0;
157 3 radio_read();
158 3 radio_write();
159 3 lcddigit(frequency/10,10,10);
160 3 EA=1;
161 3 for(k=0;k<2500;k++);
162 3
163 3 }
164 2 if(y<5)
165 2 {
166 3 m=0;
167 3 }
168 2 else
169 2 y=0;
170 2 EA=0;
171 2 radio_read();
172 2 frequency+=50;
173 2 get_pll();
174 2 radio_write_data1[0]=pll/256;
175 2 radio_write_data1[1]=pll%256;
176 2 radio_write_data1[2]=0x20;
177 2 radio_write_data1[3]=0x11;
178 2 radio_write_data1[4]=0x00;
179 2 radio_write();
C51 COMPILER V7.50 TEA5767 04/09/2008 23:05:37 PAGE 4
180 2 EA=1;
181 2 }
182 1 }
183
184
185
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1226 ----
CONSTANT SIZE = 6 ----
XDATA SIZE = 23 22
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -