📄 tea5767.lst
字号:
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE TEA5767
OBJECT MODULE PLACED IN tea5767.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE tea5767.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include "TEA5767.h"
3 #include "global.h"
4
5
6 #define TEA5767_wr 0xC0//10100000
7 #define TEA5767_rd 0xC1//10100001
8
9 #define i2c_5767_SCL_0 P2 &= 0xFD
10 #define i2c_5767_SCL_1 P2 |= 0x02
11 #define i2c_5767_DA_0 P2 &= 0xFE
12 #define i2c_5767_DA_1 P2 |= 0x01
13 sbit i2c_5767_DA_receive = P2^0 ;
14
15
16 void Init_Tea5767(unsigned long freq)
17 {
18 1 //初始化IO端口
19 1
20 1 Set_Freq(freq);
21 1
22 1 }
23
24 unsigned char Write_5767(unsigned char * senddata)
25 {
26 1 unsigned char i;
27 1
28 1 stopInterupt();
29 1
30 1 i2c_5767_start(); //启动条件S(1)
31 1 i2c_5767_write8bit(TEA5767_wr); //TEA5767写地址
32 1
33 1 if(i2c_5767_receive_ack()) //收应答A
34 1 {
35 2 for(i=0;i<5;i++) //发数据
36 2 {
37 3 i2c_5767_write8bit(senddata[i]);
38 3 i2c_5767_receive_ack(); //收应答A
39 3 }
40 2 i2c_5767_stop(); //停止条件P
41 2
42 2 startInterupt();
43 2
44 2 return TRUE;
45 2 }
46 1 else
47 1 {
48 2 i2c_5767_stop();
49 2
50 2 // delay_us(10);
51 2
52 2 startInterupt();
53 2
54 2 return FALSE;
55 2 }
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 2
56 1 }
57
58
59
60 unsigned char Read_5767(unsigned char * receivedata)
61 {
62 1 unsigned char i ;
63 1
64 1 stopInterupt();
65 1
66 1 i2c_5767_start(); //启动条件S(1)
67 1
68 1 i2c_5767_write8bit(TEA5767_rd); //TEA5767写地址
69 1
70 1 if(i2c_5767_receive_ack())
71 1 {
72 2 for(i=0;i<5;i++)
73 2 {
74 3 receivedata[i]=i2c_5767_read8bit(); //读数据
75 3
76 3 i2c_5767_send_ack();
77 3 }
78 2
79 2 i2c_5767_stop(); //停止条件P
80 2
81 2 delay_us(10);
82 2
83 2 startInterupt();
84 2
85 2 return TRUE;
86 2 }
87 1 else
88 1 {
89 2 i2c_5767_stop();
90 2
91 2 startInterupt();
92 2
93 2 // EA=0;
94 2
95 2 return FALSE;
96 2 }
97 1
98 1 }
99
100 void i2c_5767_start()
101 {
102 1 i2c_5767_SCL_0;
103 1 delay_us(10);
104 1 i2c_5767_DA_1;
105 1 delay_us(10);
106 1 i2c_5767_SCL_1;
107 1 delay_us(10);
108 1 i2c_5767_DA_0;
109 1 delay_us(10);
110 1 i2c_5767_SCL_0;
111 1 }
112 void i2c_5767_stop()
113 {
114 1 i2c_5767_SCL_0;
115 1 delay_us(10);
116 1 i2c_5767_DA_0;
117 1 delay_us(10);
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 3
118 1 i2c_5767_SCL_1;
119 1 delay_us(10);
120 1 i2c_5767_DA_1;
121 1 }
122
123 void i2c_5767_write8bit(unsigned char dat)
124 {
125 1 unsigned char i;
126 1 i2c_5767_SCL_0;
127 1 for(i=0;i<8;i++)
128 1 {
129 2 if(dat&0x80)
130 2 i2c_5767_DA_1;
131 2 else
132 2 i2c_5767_DA_0;
133 2 dat<<=1;
134 2 delay_us(10);
135 2 i2c_5767_SCL_1;
136 2 delay_us(10);
137 2 i2c_5767_SCL_0;
138 2 }
139 1 }
140
141 unsigned char i2c_5767_read8bit(void)
142 {
143 1 unsigned char tmp,i;
144 1
145 1 tmp = 0;
146 1
147 1 for (i = 0; i < 8; i++)
148 1 {
149 2 i2c_5767_SCL_0;
150 2 i2c_5767_DA_1;
151 2 delay_us(10);
152 2 i2c_5767_SCL_1;
153 2 delay_us(10);
154 2
155 2 if ( i2c_5767_DA_receive )
156 2 tmp++;
157 2
158 2 i2c_5767_SCL_0;
159 2
160 2 if (i != 7)
161 2 tmp <<=1;
162 2 }
163 1 return tmp;
164 1 }
165
166 unsigned char i2c_5767_receive_ack()
167 {
168 1 unsigned char tmp =0;
169 1 i2c_5767_SCL_0;
170 1 i2c_5767_DA_1;
171 1 delay_us(10);
172 1 i2c_5767_SCL_1;
173 1 while ((i2c_5767_DA_receive)&&(tmp<255))
174 1 {
175 2 tmp++;
176 2 }
177 1 i2c_5767_SCL_0;
178 1
179 1 if (tmp == 255)
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 4
180 1 return FALSE;
181 1 else return TRUE;
182 1 }
183
184
185 void i2c_5767_send_ack(void)
186 {
187 1 i2c_5767_SCL_0;
188 1 i2c_5767_DA_0;
189 1 delay_us(10);
190 1 i2c_5767_SCL_1;
191 1 i2c_5767_DA_0;
192 1 delay_us(10);
193 1 i2c_5767_SCL_0;
194 1 delay_us(10);
195 1 }
196
197
198 //由PLL计算频率
199 unsigned long PLL_2_Freq(unsigned int pll)
200 {
201 1 unsigned long frequency;
202 1 unsigned char hlsi;
203 1 unsigned int npll=pll;
204 1 // npll=pll;
205 1 hlsi=0;//WriteData[2]&0x10;
206 1 if (hlsi)
207 1 frequency=(unsigned long)((float)npll*(float)8.192-225); //频率单位:KHz
208 1 else
209 1 frequency=(unsigned long)((float)npll*(float)8.192+225); //频率单位:KHz
210 1 return (frequency+50);
211 1 }
212 //由频率计算PLL
213 //Freq 0.1M
214 unsigned int Freq_2_PLL(unsigned long Freq) // 955,2d6e
215 {
216 1 unsigned char hlsi;
217 1 unsigned int pll=0;
218 1 hlsi=0;//WriteData[2]&0x10;
219 1 if (hlsi)
220 1 pll=(unsigned int)(((float)Freq+225)*4/32.768); //频率单位:k
221 1 else
222 1 pll=(unsigned int)(((float)Freq-225)*4/32.768); //频率单位:k
223 1 return pll;
224 1 }
225
226 void Search_up(unsigned long freq)
227 {
228 1 unsigned char Data[5];
229 1
230 1 unsigned int pll;
231 1
232 1 pll = Freq_2_PLL(freq);
233 1
234 1 Data[0] = ((pll>>8)&0x003F)|0x40 ;
235 1
236 1 Data[1] = pll&0x00FF;
237 1
238 1 Data[2] = 0xC0; //向上搜索
239 1
240 1 Data[3] = 0x90;
241 1 Data[4] = 0x00;
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 5
242 1
243 1 Write_5767(Data);
244 1
245 1
246 1 }
247 void Search_down(unsigned long freq)
248 {
249 1 unsigned char Data[5];
250 1
251 1 unsigned int pll;
252 1
253 1 pll = Freq_2_PLL(freq);
254 1
255 1 Data[0] = ((pll>>8)&0x003F)|0x40 ;
256 1
257 1 Data[1] = pll&0x00FF;
258 1
259 1 Data[2] = 0x40; //向下搜索
260 1
261 1 Data[3] = 0x90;
262 1 Data[4] = 0x00;
263 1
264 1 Write_5767(Data);
265 1
266 1
267 1 }
268
269 void Set_Freq(unsigned long freq)
270 {
271 1 unsigned char Data[5];
272 1
273 1 unsigned int pll;
274 1
275 1 pll = Freq_2_PLL(freq);
276 1
277 1 Data[0] = (pll>>8)&0x003F ;
278 1
279 1 Data[1] = pll&0x00FF;
280 1
281 1 Data[2] = 0x40;
282 1
283 1 Data[3] = 0x90;
284 1 Data[4] = 0x00;
285 1
286 1 Write_5767(Data);
287 1
288 1 }
289
290 void Set_Mute(unsigned long freq)
291 {
292 1 unsigned char Data[5];
293 1
294 1 unsigned int pll;
295 1
296 1 pll = Freq_2_PLL(freq);
297 1
298 1 Data[0] = ((pll>>8)&0x003F)|0x80 ;
299 1
300 1 Data[1] = pll&0x00FF;
301 1
302 1 Data[2] = 0x40;
303 1
C51 COMPILER V7.07 TEA5767 08/22/2008 23:25:42 PAGE 6
304 1 Data[3] = 0x90;
305 1 Data[4] = 0x00;
306 1
307 1 Write_5767(Data);
308 1
309 1 }
310
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 733 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 43
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -