📄 tuner.lst
字号:
213 Name : Set_Channel
214 Purpose :
215 Passed :
216 Returns :
217 Notes :
218 ------------------------------------------------------------------- */
219 void Set_Channel(unsigned char Channel_Number)
220 {
221 1 unsigned char BandSwitch;
222 1 unsigned int Devider;
223 1
224 1 // Puts_UART("Channel Number = ");HexTobyStr(Channel_Number);Puts_UART(byStr);Puts_UART("\r\n");
225 1 switch(TV_Mode)
226 1 {
227 2 case(TV_AIR):
228 2 Devider = NTSC_M_AIRTV[Channel_Number];
229 2 //Puts_UART("TV AIR!\r\n");
230 2 break;
231 2 case(CATV_STD):
232 2 Devider = NTSC_M_CATV[Channel_Number];
233 2 //Puts_UART("CATV!\r\n");
234 2 break;
235 2 default:
236 2 break;
237 2 }
238 1
239 1 if(Devider < PHILIPS_DIV_ML)
240 1 BandSwitch = PHILIPS_LOW_BAND;
241 1 else if(Devider < PHILIPS_DIV_HM)
C51 COMPILER V7.07 TUNER 09/26/2006 08:56:42 PAGE 5
242 1 BandSwitch = PHILIPS_MID_BAND;
243 1 else
244 1 BandSwitch = PHILIPS_HIGH_BAND;
245 1
246 1 TunerError:
247 1 Tuner_Start();
248 1 if(Tuner_Data_In(PHILIPS_TUNER))
249 1 goto TunerError;
250 1 if(Tuner_Data_In(Devider/256))
251 1 goto TunerError;
252 1 if(Tuner_Data_In(Devider%256))
253 1 goto TunerError;
254 1 if(Tuner_Data_In(PHILIPS_CONTROL))
255 1 goto TunerError;
256 1 if(Tuner_Data_In(BandSwitch))
257 1 goto TunerError;
258 1 #if (TUNER == 1)
259 1 if(Tuner_Data_In(0x00)) // 0x80 taylor 2006/02/06
260 1 goto TunerError;
261 1 #endif
262 1 Tuner_Stop();
263 1 //Puts_UART("set channel ok!\r\n");
264 1
265 1 }
266
267 /* -------------------------------------------------------------------
268 Name : Auto_Scan
269 Purpose : scan the channel if exist
270 Passed :
271 Returns :
272 Notes :
273 ------------------------------------------------------------------- */
274
275 void Auto_Scan(void)
276 {
277 1 unsigned char i, ch, lock, locktime, pre_channel;
278 1 unsigned char min_channel, max_channel;
279 1
280 1 pre_channel = Channel;
281 1
282 1 if(TV_Mode == TV_AIR)
283 1 {
284 2 min_channel = CHANNEL_AIR_MIN;
285 2 max_channel = CHANNEL_AIR_MAX; // 69
286 2 }
287 1 else
288 1 {
289 2 min_channel = CHANNEL_MIN;
290 2 max_channel = CHANNEL_MAX; // 125
291 2 }
292 1
293 1 for(i = min_channel; i < max_channel; i++)
294 1 {
295 2 Set_Channel(i);
296 2 ch = I2CReadByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), (ChannelTable_EEPROM_Ad
-dress() + i/8)); // 0x100;0x120
297 2 lock = locktime = 0;
298 2 do
299 2 {
300 3 DelayX10ms(5);
301 3 if((I2CReadByte(SAA7114_ADDR, 0x1F) & 0x01) == 0x01)
302 3 lock++;
C51 COMPILER V7.07 TUNER 09/26/2006 08:56:42 PAGE 6
303 3 locktime++;
304 3 }while((lock < 2) && (locktime < 5));
305 2
306 2 if(lock < 2)
307 2 ch = Set_Bit(ch, i % 8, 0); // store this channel no exist
308 2 else
309 2 ch = Set_Bit(ch, i % 8, 1); // store this channel exist
310 2 #if EEPROM
I2CWriteByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), ChannelTable_EEPROM_Address
-() + i/8, ch);
//Puts_UART("Write to EEPROM_MCU");HexTobyStr(EEPROM_MCU);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Write to EEPROM ChannelTable_EEPROM_Address");HexTobyStr((ChannelTable_EEPROM_Address()/2
-56)*2);Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Write to EEPROM device addr ");HexTobyStr(EEPROM_MCU | (((ChannelTable_EEPROM_Address()+i
-/8)/256)*2));Puts_UART(byStr);Puts_UART("\r\n");
//Puts_UART("Write to EEPROM address");HexTobyStr(ChannelTable_EEPROM_Address()+i/8);Puts_UART(byStr);
-Puts_UART("\r\n");
//Puts_UART("Write to EEPROM value");HexTobyStr(ch);Puts_UART(byStr);Puts_UART("\r\n");
#endif
318 2 }
319 1
320 1 for(i = min_channel; i < max_channel; i++)
321 1 {
322 2 ch = I2CReadByte(EEPROM_MCU | (((ChannelTable_EEPROM_Address() + i/8)/256)*2), ChannelTable_EEPROM_Add
-ress() + ((pre_channel + i)%max_channel)/8);
323 2 if(Get_Bit(ch, i % 8))
324 2 break;
325 2 }
326 1 Channel = (pre_channel + i) % max_channel;
327 1 #if EEPROM
I2CWriteByte(EEPROM_MCU | (((Channel_EEPROM_Address()/256)*2)), Channel_EEPROM_Address(), Channel);
#endif
330 1 Set_Channel(Channel);
331 1 }
332
333 /* -------------------------------------------------------------------
334 Name : Channel_EEPROM_Address
335 Purpose : define the address in EEPROM
336 Passed :
337 Returns :
338 Notes :
339 ------------------------------------------------------------------- */
340 unsigned int Channel_EEPROM_Address(void)
341 {
342 1 //Puts_UART("EE_CHANNEL_AIR+TV_Mode= ");HexTobyStr(EE_CHANNEL_AIR+TV_Mode);Puts_UART(byStr);Puts_UART("\
-r\n");
343 1 return EE_CHANNEL_AIR + TV_Mode; //EE_CHANNEL_AIR = 0x82; TV_Mode = 0x00(AIR)/0x01(CATV)
344 1
345 1 }
346
347 /* -------------------------------------------------------------------
348 Name : ChannelTable_EEPROM_Address
349 Purpose :
350 Passed :
351 Returns :
352 Notes :
353 ------------------------------------------------------------------- */
354 unsigned int ChannelTable_EEPROM_Address(void)
355 {
356 1
357 1 return EE_TV_AIR_CHANNEL_TABLE + TV_Mode * 0x20; // EE_TV_AIR_CHANNEL_TABLE = 0x100
358 1
C51 COMPILER V7.07 TUNER 09/26/2006 08:56:42 PAGE 7
359 1 }
360
361 /* -------------------------------------------------------------------
362 Name : ChannelLockTable_EEPROM_Address
363 Purpose :
364 Passed :
365 Returns :
366 Notes :
367 ------------------------------------------------------------------- */
368 /*
369 unsigned int ChannelLockTable_EEPROM_Address(void)
370 {
371
372 return EE_AIR_CHANNEL_LOCK_TABLE+TV_Mode*0x20;
373
374 }
375 */
376 /* -------------------------------------------------------------------
377 Name : Get_Bit
378 Purpose :
379 Passed :
380 Returns :
381 Notes :
382 ------------------------------------------------------------------- */
383 bit Get_Bit(unsigned char bytedata, unsigned char bit_pos)
384 {
385 1
386 1 return ((bytedata & BIT_OPOR[bit_pos]) != 0);
387 1
388 1 }
389
390
391 /* -------------------------------------------------------------------
392 Name : Set_Bit
393 Purpose :
394 Passed :
395 Returns :
396 Notes :
397 ------------------------------------------------------------------- */
398 unsigned char Set_Bit(unsigned char bytedata, unsigned char bit_pos, bit set)
399 {
400 1
401 1 unsigned char retdata;
402 1
403 1 retdata = bytedata & BIT_OPAND[bit_pos];
404 1 if(set)
405 1 retdata = retdata | BIT_OPOR[bit_pos];
406 1
407 1 return retdata;
408 1
409 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 576 ----
CONSTANT SIZE = 1026 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILER V7.07 TUNER 09/26/2006 08:56:42 PAGE 8
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -