?? radio.lst
字號:
C51 COMPILER V6.23a RADIO 08/20/2002 16:54:30 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE RADIO
OBJECT MODULE PLACED IN Radio.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Radio.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /* YuanGao electronic designe co.ldt
2 (c) Copyright 2000,2001, All Rights Reserved */
3
4 #include "global.h"
5 #include "util.h"
6 #include "radio.h"
7 #include "lcd.h"
8 #include "mem9346.h"
9
10
11 /*R3 to R0:*/
12 #define STEP_9KHZ 0x900000
13 #define STEP_25KHZ 0x320000
14
15 #define F50KHZ 25
16 #define F9KHZ 9
17
18 #define AM_531KHZ 531
19 #define AM_1621KHZ 1621
20 #define FM_87P5MHZ 87500
21 #define FM_108MHZ 108000
22
23 #define ADDR_IN1_MODE 0x28
24 #define ADDR_IN2_MODE 0x29
25 #define ADDR_OUT_MODE 0x2a
26
27 #define CTE_ENABLE 1
28
29
30 unsigned long Divisor; /*P0 to P15 */
31 #define AM_DIV_MIN 4 /* DVS SNS = 00 */
32 #define AM_DIV_MAX 4095
33 #define SW_DIV_MIN 272 /* DVS SNS = 01 */
34 #define SW_DIV_MAX 65535
35 #define FM_DIV_MIN 272 /* DVS SNS = 1* */
36 #define FM_DIV_MAX 65535
37
38 #define CPU_4M5HZ 0x00
39 #define CPU_7M2HZ 0x08
40
41
42
43 /*PLL fref:select the refrence frequency:by R0 to R3 */
44 unsigned long PLL_fref = STEP_25KHZ;
45
46
47 unsigned char Band;
48 unsigned char Chanel = 0;
49 unsigned char Crystal;
50
51 unsigned long address;
52
53
54 bit bdata STEREO_FLAG = 0;
55
C51 COMPILER V6.23a RADIO 08/20/2002 16:54:30 PAGE 2
56 #define SET_RADIO_CE RADIO_CE = HIGH
57 #define SET_RADIO_CL RADIO_CL = HIGH
58 #define SET_RADIO_DI RADIO_DI = HIGH
59 #define SET_RADIO_CS_TUN RADIO_CS_TUN = HIGH
60 #define SET_RADIO_FM_ST RADIO_FM_ST = HIGH
61 #define SET_RADIO_MUTE RADIO_MUTE = HIGH
62
63 #define CLEAR_RADIO_CE RADIO_CE = LOW
64 #define CLEAR_RADIO_CL RADIO_CL = LOW
65 #define CLEAR_RADIO_DI RADIO_DI = LOW
66 #define CLEAR_RADIO_CS_TUN RADIO_CS_TUN = LOW
67 #define CLEAR_RADIO_FM_ST RADIO_FM_ST = LOW
68 #define CLEAR_RADIO_MUTE RADIO_MUTE = LOW
69
70
71
72 void Radio_init(void)
73 {
74 1
75 1 address = 0x11A000; /* 0x100000 */
76 1
77 1 SET_RADIO_CL;
78 1 CLEAR_RADIO_CE;
79 1 CLEAR_RADIO_DI;
80 1
81 1 RADIO_write_address(ADDR_IN2_MODE);
82 1 RADIO_output_byte(0x11A180); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
83 1
84 1 Program_Search();
85 1
86 1 RADIO_write_address(ADDR_IN1_MODE);
87 1 RADIO_output_byte(0x360922); /* 0x040000 */
88 1
89 1 }
90
91
92 bit Program_Search(void)
93 {
94 1
95 1 unsigned long VCO;
96 1
97 1 if(Band == AM_IN){
98 2 VCO = (Divisor+ 450)/F9KHZ; /* F9KHZ = 9 */
99 2 }
100 1 else{ /* Band == FM_IN */
101 2 VCO = (Divisor+ 10700)/F50KHZ/2; /* Divisor = 106200(106.2MHz) */
102 2 } /* VCO(DEC=HEX) =0x000922 */
103 1
104 1 if(Band == AM_IN){
105 2 VCO <<= 4;
106 2 VCO = VCO|0x900000; /*0x900000????? jy*/
107 2 } else {
108 2 VCO = PLL_fref|VCO; /* PLL_fref = STEP_25KHZ = 0x320000; */
109 2 }
110 1 RADIO_write_address(ADDR_IN1_MODE);
111 1 RADIO_output_byte(VCO);
112 1
113 1 RADIO_write_address(ADDR_IN1_MODE);
114 1 RADIO_output_byte(VCO | 0x040000);
115 1
116 1 if(!RADIO_TUNER_ON) return 1;
117 1 else return 0;
C51 COMPILER V6.23a RADIO 08/20/2002 16:54:30 PAGE 3
118 1
119 1 }
120
121
122
123 void Radio_Band(void)
124 {
125 1
126 1 if(Band == FM_IN) {
127 2 Band = AM_IN;
128 2 PLL_fref = STEP_9KHZ;
129 2 Divisor = AM_531KHZ;
130 2
131 2 RADIO_write_address(ADDR_IN2_MODE);
132 2 RADIO_output_byte(0x11A010); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
133 2
134 2 }
135 1 else{
136 2
137 2 Band = FM_IN;
138 2 PLL_fref = STEP_25KHZ;
139 2 Divisor = FM_87P5MHZ;
140 2
141 2 RADIO_write_address(ADDR_IN2_MODE);
142 2 RADIO_output_byte(0x11A180); /* (AM/FM).FM = 11A180; (FM/AM).AM = 11A010 */
143 2
144 2 }
145 1
146 1 }
147
148
149 void Radio_Divisor(unsigned char dir)
150 {
151 1
152 1 if(dir){ /* auto search */
153 2 if(Band == AM_IN){
154 3 if(Divisor >= AM_1621KHZ) {
155 4 Divisor = AM_531KHZ;
156 4 }
157 3 else Divisor += F9KHZ;
158 3 }
159 2 else{ /* Band == FM_IN */
160 3 if(Divisor >= FM_108MHZ) {
161 4 Divisor = FM_87P5MHZ;
162 4 }
163 3 else Divisor += F50KHZ*2;
164 3 }
165 2 }
166 1 else{ /* no auto search */
167 2 if(Band == AM_IN){
168 3 if(Divisor <= AM_531KHZ) {
169 4 Divisor = AM_1621KHZ;
170 4 }
171 3 else Divisor -= F9KHZ;
172 3 }
173 2 else{
174 3 if(Divisor <= FM_87P5MHZ) {
175 4 Divisor = FM_108MHZ;
176 4 }
177 3 else Divisor -= F50KHZ*2;
178 3 }
179 2
C51 COMPILER V6.23a RADIO 08/20/2002 16:54:30 PAGE 4
180 2 }
181 1 }
182
183
184 #if 0
void Radio_FM_on(unsigned char FMAM)
{
if(FMAM){ /*BO4*/
address &= 0xFFFF0F;
address |= 0x000080;
}else
address &= ~0x000080;
RADIO_write_address(ADDR_IN2_MODE);
RADIO_output_byte(address);
}
#endif
200
201
202 /***********************************************************************
203 * LC72130 input/output byte command *
204 * *
205 ************************************************************************/
206 void RADIO_write_address(unsigned char RADIO_addr)
207 {
208 1 unsigned char i;
209 1 for(i=0;i<8;i++){
210 2
211 2
212 2 if( RADIO_addr & 0x01)
213 2 SET_RADIO_DI;
214 2 else
215 2 CLEAR_RADIO_DI;
216 2
217 2 CLEAR_RADIO_CL;
218 2 CLEAR_RADIO_CL;
219 2 RADIO_addr >>= 1;
220 2 SET_RADIO_CL;
221 2
222 2 }
223 1
224 1 }
225
226
227 void RADIO_output_byte(unsigned long RADIO_data)
228 {
229 1 unsigned char i;
230 1 SET_RADIO_CE;
231 1
232 1 for(i=0; i<24; i++){
233 2 if( RADIO_data & 0x01)
234 2 SET_RADIO_DI;
235 2 else
236 2 CLEAR_RADIO_DI;
237 2 CLEAR_RADIO_CL;
238 2 CLEAR_RADIO_CL;
239 2 RADIO_data >>= 1;
240 2 SET_RADIO_CL;
241 2 }
C51 COMPILER V6.23a RADIO 08/20/2002 16:54:30 PAGE 5
242 1 CLEAR_RADIO_CE;
243 1
244 1 }
245
246
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 602 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 8
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 + -