;===========================================================; ; ; ; DTS3 CAR AUDIO TEST ; ; ; ; MagnaChip Semiconductor Ldt. ; ; ; ; Project name : DTS3 ; ; Oscilator clock : 7.2 MHz ; ; Target micom : HMS9XC8132 ; ; Start date : JANUARY. 15. 1999. ; ; by : CDJin ; ; Upgrade date : 2002. ; ; ; ;===========================================================; ;============================================== ; DEFINE ;============================================== ;----- SFR Define ----- ADCCON EQU 84H ADCDR EQU 85H T01MOD EQU 89H D_TL0 EQU 8AH D_TL1 EQU 8BH D_TH0 EQU 8CH D_TH1 EQU 8DH T34MOD EQU 91H TL3 EQU 92H TL4 EQU 93H TH3 EQU 94H TH4 EQU 95H SBUF0 EQU 99H SBUF1 EQU 0A1H SBUF2 EQU 0A2H P0CON EQU 0A4H P1CON EQU 0A5H P2CON EQU 0A6H P3CON EQU 0A7H P4CON EQU 0ACH P5CON EQU 0ADH P6CON EQU 0AEH P7CON EQU 0AFH P0MOD EQU 0B4H P1MOD EQU 0B5H P2MOD EQU 0B6H P3MOD EQU 0B7H P4MOD EQU 0BCH P5MOD EQU 0BDH P6MOD EQU 0BEH P7MOD EQU 0BFH D_IP2 EQU 0B1H D_IP3 EQU 0C1H D_RCAP2L EQU 0CAH D_RCAP2H EQU 0CBH D_TL2 EQU 0CCH D_TH2 EQU 0CDH D_IT2 EQU 0D9H PLLMOD EQU 0F1H PLLDRH EQU 0F2H PLLDRL EQU 0F3H IFCMOD EQU 0F4H IFCDR2 EQU 0F5H IFCDR1 EQU 0F6H IFCDR0 EQU 0F7H WDTDR EQU 0F9H RDPG EQU 0FCH WRPG EQU 0FDH SFRPG EQU 0FFH ;SFRG0 ***** SCMODE EQU 80H T01CON EQU 88H T34CON EQU 90H S0CON EQU 98H S12CON EQU 0A0H D_IE EQU 0A8H D_IE2 EQU 0B0H D_IE3 EQU 0C0H D_IP EQU 0B8H D_T2CON EQU 0C8H D_IR2 EQU 0D8H D_IR3 EQU 0E8H WDTCON EQU 0F8H AMINC EQU 0EBH FMINC EQU 0ECH ;SFRPG1 ***** P_0 EQU 88H P_1 EQU 98H P_2 EQU 0A8H P_3 EQU 0B8H P_4 EQU 0C8H P_5 EQU 0D8H P_6 EQU 0E8H P_7 EQU 0F8H ;SFR & Memory Page Define ****** SFRPG0 EQU 00H SFRPG1 EQU 01H RDPG0 EQU 00H ;Read page 0(Data Memory : 00H-7FH) RDPG1 EQU 01H ;Read page 1(Data Memory : 00H-7FH) RDPG2 EQU 02H ;Read page 2(Data Memory : 00H-7FH) RDPG3 EQU 03H ;Read page 3(Data Memory : 00H-7FH) RDPG4 EQU 04H ;Read page 4(Data Memory : 00H-7FH) RDPG5 EQU 05H ;Read page 5(Data Memory : 00H-7FH) RDPG6 EQU 06H ;Read page 6(Data Memory : 00H-7FH) WRPG0 EQU 00H ;Write page 0(Data Memory : 00H-7FH) WRPG1 EQU 01H ;Write page 1(Data Memory : 00H-7FH) WRPG2 EQU 02H ;Write page 2(Data Memory : 00H-7FH) WRPG3 EQU 03H ;Write page 3(Data Memory : 00H-7FH) WRPG4 EQU 04H ;Write page 4(Data Memory : 00H-7FH) WRPG5 EQU 05H ;Write page 5(Data Memory : 00H-7FH) WRPG6 EQU 06H ;Write page 6(Data Memory : 00H-7FH) ;----- Flag Define ----- TIME_FG BIT 20H.1 MUTEFG BIT 20H.2 ;Flag mute TAPE_FG BIT 20H.3 TMFG_8M BIT 20H.4 CLK_FG BIT 20H.5 KEY_BUF_FG DATA 21H KEYFG BIT 21H.0 ;Flag key KEY_ON_FG BIT 21H.1 ;Flag key ON KEY_LONG_FG BIT 21H.2 ;Flag long key KEY_ERR_FG BIT 21H.3 ;Flag error key KEYSEL_FG BIT 21H.4 FM_AM_FG BIT 22H.0 UPDN_FG BIT 22H.1 IF_OK_FG BIT 22H.2 MAXMIN_ING BIT 22H.3 SM_ON BIT 22H.4 CHK_FG BIT 22H.5 LODX_FG BIT 22H.6 IF_FG BIT 22H.7 CDC_FG BIT 23H.0 CDC_ERR_FG BIT 23H.1 CDC_TXRX_FG BIT 23H.2 CDC_DATA_BIT BIT 23H.3 CDC_COM1_FG BIT 23H.4 CDC_HI_CPL BIT 23H.5 CDC_T20M_FG BIT 23H.6 TREVERSE BIT 24H.0 TAPEFR_FG BIT 24H.1 TAPE_ERR BIT 24H.2 TEJECT_FG BIT 24H.3 REMOSTART_FG BIT 25H.1 REMO_FG BIT 25H.2 REMOAM_FG BIT 25H.3 REMORET_FG BIT 25H.4 REMOLEAD_FG BIT 25H.5 REMO_LONG_FG BIT 25H.6 REMO_LUP_FG BIT 25H.7 CDP_FG BIT 26H.0 REMO_LTIME_FG BIT 26H.1 REMO_VCR_FG BIT 26H.2 ;----- Port Define ----- P_AMON BIT P_0.0 P_FMON BIT P_0.1 P_LODX BIT P_0.2 P_IFREQ BIT P_0.3 P_LWON BIT P_0.4 P_LCDINH BIT P_0.7 P_LCDDI BIT P_1.0 P_LCDCL BIT P_1.1 P_LCDCE BIT P_1.2 P_KSO0 BIT P_1.3 P_KSO1 BIT P_1.4 P_KSO2 BIT P_1.5 P_KSO3 BIT P_1.6 P_KSO4 BIT P_1.7 P_SDIN BIT P_2.0 P_STIN BIT P_2.1 P_KSI0 BIT P_2.4 P_KSI1 BIT P_2.5 P_KSI2 BIT P_2.6 P_KSI3 BIT P_2.7 P_POWERON BIT P_3.0 P_RADIOON BIT P_3.1 P_MUTE BIT P_3.2 P_CDRST BIT P_3.3 P_CDACC BIT P_3.4 P_CD_C1 BIT P_3.5 P_CDCDI BIT P_4.0 P_CDCDO BIT P_4.1 P_REMOCON BIT P_4.2 P_CDCON BIT P_4.3 P_CDDATA BIT P_4.4 P_ATS BIT P_4.5 P_CD_C2 BIT P_4.6 P_BEEP BIT P_4.7 P_MP3TX BIT P_5.0 P_MP3RX BIT P_5.1 P_VOLDI BIT P_5.2 P_VOLCLK BIT P_5.3 P_VOLCE BIT P_5.4 P_HOLD BIT P_5.5 P_PM1 BIT P_5.6 ;PM2 --> PM1 P_PM2 BIT P_5.7 ;PM1 --> PM2 P_STPIN BIT P_6.2 P_REWDET BIT P_6.3 P_FOWDET BIT P_6.4 P_FRSW BIT P_6.5 ; P_ATS BIT P_6.6 ;--> P_4.5 P_APS BIT P_6.7 P_SOL2 BIT P_7.1 P_SOL1 BIT P_7.2 P_CM BIT P_7.3 P_DB BIT P_7.4 P_MTL BIT P_7.5 P_SM BIT P_7.6 P_LOWVDET BIT P_7.7 ;----- Memory Address Define ----- TIME_COUNT0 EQU 30H PLLFM_BUF0 EQU 31H PLLFM_BUF1 EQU 32H PLLAM_BUF0 EQU 33H PLLAM_BUF1 EQU 34H IFBUF0 EQU 36H IFBUF1 EQU 37H IFBUF2 EQU 38H STEP_FM EQU 39H STEP_AM EQU 3AH STEP_BUF0 DATA 3BH STEP_BUF1 DATA 3CH TEXT_NUM EQU 3DH CMP_ANL EQU 3EH LCDCLK_FG EQU 3FH KEY_OLD EQU 40H KEY_NEW EQU 41H KEY_COUNT EQU 43H ;Count key input : filter key chaterring MUTE500M EQU 44H ;Count MUTE KEY_LONG_COUNT EQU 45H ;Count Long key TAPE_MODE EQU 46H TEMP_BUF0 EQU 47H TEMP_BUF1 EQU 48H REMO_BUF0 EQU 4BH REMO_BUF1 EQU 4CH REMO_COUNT0 EQU 4DH REMO_BUF2 EQU 4EH REMO_LCOUNT0 EQU 4FH LCD_BUF0 EQU 27H LCD_BUF1 EQU 28H LCD_BUF2 EQU 29H LCD_BUF3 EQU 2AH LCD_BUF4 EQU 2BH LCD_BUF5 EQU 2CH LCD_BUF6 EQU 2DH LCD_BUF7 EQU 2EH LCD_BUF8 EQU 2FH CDC_COM0 EQU 50H CDC_COM1 EQU 51H CDC_TEXT EQU 52H CDC_TEXT0 EQU 53H CDC_TEXT1 EQU 54H CDC_TEXT2 EQU 55H CDC_TEXT3 EQU 56H CDC_TEXT4 EQU 57H CDC_TEXT5 EQU 58H CDC_TEXT6 EQU 59H CDC_TEXT7 EQU 5AH CDC_TEXT8 EQU 5BH CDC_CNT0 EQU 5CH CDC_CNT1 EQU 5DH CDC_BUF_TH1 EQU 5EH CDC_TX_CNT0 EQU 5FH OLD_TEXT0 EQU 0F0H OLD_TEXT1 EQU 0F1H OLD_TEXT2 EQU 0F2H OLD_TEXT3 EQU 0F3H OLD_TEXT4 EQU 0F4H SM_MAX1 EQU 060H SM_MAX2 EQU 061H SM_MAX3 EQU 062H SM_MAX4 EQU 063H SM_MAX5 EQU 064H SM_MAX6 EQU 065H FM_MEM1L EQU 066H FM_MEM1H EQU 067H FM_MEM2L EQU 068H FM_MEM2H EQU 069H FM_MEM3L EQU 06AH FM_MEM3H EQU 06BH FM_MEM4L EQU 06CH FM_MEM4H EQU 06DH FM_MEM5L EQU 06EH FM_MEM5H EQU 06FH FM_MEM6L EQU 070H FM_MEM6H EQU 071H AM_MEM1 EQU 072H AM_MEM1H EQU 073H AM_MEM2 EQU 074H AM_MEM2H EQU 075H AM_MEM3 EQU 076H AM_MEM3H EQU 077H AM_MEM4 EQU 078H AM_MEM4H EQU 079H AM_MEM5 EQU 07AH AM_MEM5H EQU 07BH AM_MEM6 EQU 07CH AM_MEM6H EQU 07DH CDC_T20_CNT EQU 07EH ;----- Memory Page1 Address Define -----; ; ; T1COUNT_P1 EQU 30H ; HSEC_P1 EQU 31H ; SEC_P1 EQU 32H ; MINUTE_P1 EQU 33H ; HDATE_P1 EQU 34H ; HOUR_P1 EQU 35H ; DATE_P1 EQU 36H ; MONTH_P1 EQU 37H ; YEAR0_P1 EQU 38H ; YEAR1_P1 EQU 39H ; ; ; ;---------------------------------------; ;----- LCD Transfer Data ----- LCDD_BLANK EQU 00000000B ;LCD Blank LCDD6_BLK EQU 00100000B LCDD0_DOLBY EQU 00000001B LCDD0_ST EQU 00000010B LCDD0_FM EQU 01101000B LCDD0_AM EQU 01101100B LCDD0_CD2 EQU 10110000B LCDD1_CD3 EQU 11011100B LCDD2_PRT EQU 10000000B LCDD4_COL EQU 00000001B LCDD4_DISC EQU 00000010B LCDD5_P EQU 00000001B LCDD6_TRACK EQU 00001000B LCDD7_CH EQU 00001000B LCDD8_PY EQU 00000001B ;Display Play LCD LCDD8_BPY EQU 00000010B LCDD8_ROCK EQU 00000100B LCDD8_JAZZ EQU 00001000B LCDD8_MTL EQU 00010000B LCDD8_CLAS EQU 00100000B LCDD6_1END EQU 00100000B LCDD13_END EQU 10000000B LCDND0_DO EQU 11111110B LCDND0_ST EQU 11111101B LCDND0_FM EQU 10010111B LCDND0_AM EQU 10010011B LCDND0_CD2 EQU 01001111B LCDND1_CD3 EQU 00100011B LCDND2_PRT EQU 01111111B LCDND4_COL EQU 11111110B LCDND4_DISC EQU 11111101B LCDND5_P EQU 11111110B LCDND6_TRACK EQU 00110111B LCDND7_CH EQU 11110111B LCDND8_PY EQU 11111110B ;Display Play LCD LCDND8_BPY EQU 11111101B LCDND8_ROCK EQU 11111011B LCDND8_JAZZ EQU 11110111B LCDND8_MTL EQU 11101111B LCDND8_CLAS EQU 11011111B LCDND6_1END EQU 00111111B LCDND13_END EQU 11111111B LCDD2_4L0 EQU 01110111B ;"0" 77H LCDD2_4L1 EQU 01100000B ;"1" 60H LCDD2_4L2 EQU 01011110B ;"2" 5EH LCDD2_4L3 EQU 01111010B ;"3" 7AH LCDD2_4L4 EQU 01101001B ;"4" 69H LCDD2_4L5 EQU 00111011B ;"5" 3BH LCDD2_4L6 EQU 00111111B ;"6" 3FH LCDD2_4L7 EQU 01100010B ;"7" 62H LCDD2_4L8 EQU 01111111B ;"8" 7FH LCDD2_4L9 EQU 01111011B ;"9" 7BH LCDD3_5L0 EQU 11010111B ;"0" D7H LCDD3_5L1 EQU 11000000B ;"1" C0H LCDD3_5L2 EQU 10011110B ;"2" 9EH LCDD3_5L3 EQU 11011010B ;"3" DAH LCDD3_5L4 EQU 11001001B ;"4" C9H LCDD3_5L5 EQU 01011011B ;"5" 5BH LCDD3_5L6 EQU 01011111B ;"6" 5FH LCDD3_5L7 EQU 11000011B ;"7" C3H LCDD3_5L8 EQU 11011111B ;"8" DFH LCDD3_5L9 EQU 11011011B ;"9" DBH LCDD4_6A0 EQU 11110100B ;A"0" F4H LCDD5_6B0 EQU 00000010B ;B"0" 02H LCDD4_6A1 EQU 10100000B ;A"1" A0H LCDD5_6B1 EQU 00000000B ;B"1" 00H LCDD4_6A2 EQU 10011100B ;A"2" 9CH LCDD5_6B2 EQU 00000010B ;B"2" 02H LCDD4_6A3 EQU 10111000B ;A"3" B8H LCDD5_6B3 EQU 00000010B ;B"3" 02H LCDD4_6A4 EQU 11101000B ;A"4" E8H LCDD5_6B4 EQU 00000000B ;B"4" 00H LCDD4_6A5 EQU 01111000B ;A"5" 78H LCDD5_6B5 EQU 00000010B ;B"5" 02H LCDD4_6A6 EQU 01111100B ;A"6" 7CH LCDD5_6B6 EQU 00000010B ;B"6" 02H LCDD4_6A7 EQU 11100000B ;A"7" E0H LCDD5_6B7 EQU 00000010B ;B"7" 02H LCDD4_6A8 EQU 11111100B ;A"8" FCH LCDD5_6B8 EQU 00000010B ;B"8" 02H LCDD4_6A9 EQU 11111000B ;A"9" F8H LCDD5_6B9 EQU 00000010B ;B"9" 02H LCDD5_7A0 EQU 11010100B ;A"0" D4H LCDD6_7B0 EQU 00100011B ;B"0" 23H LCDD5_7A1 EQU 11000000B ;A"1" C0H LCDD6_7B1 EQU 00100000B ;B"1" 20H LCDD5_7A2 EQU 10011100B ;A"2" 9CH LCDD6_7B2 EQU 00100010B ;B"2" 22H LCDD5_7A3 EQU 11011000B ;A"3" D8H LCDD6_7B3 EQU 00100010B ;B"3" 22H LCDD5_7A4 EQU 11001000B ;A"4" C8H LCDD6_7B4 EQU 00100001B ;B"4" 21H LCDD5_7A5 EQU 01011000B ;A"5" 58H LCDD6_7B5 EQU 00100011B ;B"5" 23H LCDD5_7A6 EQU 01011100B ;A"6" 5CH LCDD6_7B6 EQU 00100011B ;B"6" 23H LCDD5_7A7 EQU 11000000B ;A"7" C0H LCDD6_7B7 EQU 00100011B ;B"7" 23H LCDD5_7A8 EQU 11011100B ;A"8" DCH LCDD6_7B8 EQU 00100011B ;B"8" 23H LCDD5_7A9 EQU 11011000B ;A"9" D8H LCDD6_7B9 EQU 00100011B ;B"9" 23H LCDD7_8B0 EQU 11100111B ;B"0" E7H LCDD7_8B1 EQU 00000101B ;B"1" 05H LCDD7_8B2 EQU 10101110B ;B"2" AEH LCDD7_8B3 EQU 11101010B ;B"3" EAH LCDD7_8B4 EQU 11001001B ;B"4" C9H LCDD7_8B5 EQU 01101011B ;B"5" 6BH LCDD7_8B6 EQU 01101111B ;B"6" 6FH LCDD7_8B7 EQU 11000010B ;B"7" C2H LCDD7_8B8 EQU 11101111B ;B"8" EFH LCDD7_8B9 EQU 11101011B ;B"9" EBH ;----- LCD ROM Data Address ----- LCD_DA5 EQU 0100H ; MOVC A,@A+DPTR LCD_DA6L EQU 0110H LCD_DA6H EQU 0120H LCD_DA7L EQU 0130H LCD_DA7H EQU 0140H LCD_DA8L EQU 0150H LCD_DA8H EQU 0160H ;----- KEY Data Define ----- K_POWER EQU 01H K_AM EQU 02H K_FM EQU 03H K_BSM EQU 04H K_M_UP EQU 05H K_M1 EQU 06H K_M4 EQU 07H K_TAPE EQU 08H K_TAPE_EJ EQU 09H K_M_DN EQU 10H K_M2 EQU 11H K_M5 EQU 12H K_CDC EQU 13H K_EQ EQU 14H K_SK_UP EQU 15H K_M3 EQU 16H K_M6 EQU 17H K_B EQU 18H K_C EQU 19H K_SK_DN EQU 20H KEY_COUNT_VAL EQU 02H KEY_LONG_VAL EQU 0FFH ;Long key value MUTE_COUNT_VAL EQU 03CH ;MUTE TIME : 500ms LCD_AD_VAL EQU 0A2H DELAY150M_VAL EQU 016H ;Delay 150ms ;----- PLL Define Value ----- PLLRF9K EQU 01111110B ;PLLMOD : 9KHz,AM PLLRF9KM EQU 01111111B ;PLLMOD : 9KHz,AM PLLRF1KM EQU 00011111B ;PLLMOD : 1KHz,AM PLLRF50KM EQU 11011111B ;PLLMOD : 50KHz,AM PLLRF25K EQU 11001101B ;PLLMOD : 25KHz,FM PLLRF50K EQU 11011101B ;PLLMOD : 50KHz,FM ; PLLRF50KA EQU 11011111B ;PLLMOD : 50KHz,FM IFCST EQU 01000000B ;Counting Start (ORL Instruction) IFCCLR EQU 00100000B ;Counter is reset (ORL Instruction) IFC_FM EQU 00000010B ;IFCMOD : Gate 8ms, FMIFC IFC_AM EQU 00000111B ;IFCMOD : Gate 32ms, AMIFC ; IFC_FM EQU 00000110B ;IFCMOD : Gate 32ms, FMIFC ; IFC_AM EQU 00000111B ;IFCMOD : Gate 32ms, AMIFC FM_MIN_H EQU 03H ;FM MIN 87.5MHz High FM_MIN_L EQU 0D6H ;FM MIN 87.5MHz Low FM_MAX_H EQU 04H ;FM MAX 108MHz High FM_MAX_L EQU 0A3H ;FM MAX 108MHz Low AM_MIN_H EQU 06H ;AM MIN 531KHz High AM_MIN_L EQU 0D0H ;AM MIN 531KHz Low AM_MAX_H EQU 0EH ;AM MAX 1602KHz High AM_MAX_L EQU 040H ;AM MAX 1602KHz Low ;--- Gate Time 8ms Data --- ; IF_FM_MAX2 EQU 0F0H ;F1H ;Set IFCDR2 IF(10.7MHz + 25KHz) ; IF_FM_MAX1 EQU 054H ;50H ;51H ;Set IFCDR1 IF(10.7MHz + 25KHz) ; IF_FM_MAX0 EQU 050H ;A0H ;C0H ;Set IFCDR0 IF(10.7MHz + 25KHz) ; IF_FM_MIN2 EQU 0F0H ;F1H ;Set IFCDR2 IF(10.7MHz - 25KHz) ; IF_FM_MIN1 EQU 053H ;4DH ;4FH ;Set IFCDR1 IF(10.7MHz - 25KHz) ; IF_FM_MIN0 EQU 030H ;30H ;00H ;Set IFCDR0 IF(10.7MHz - 25KHz) ; ; IF_AM_MAX2 EQU 0F0H ;Set IFCDR2 IF(450KHz + 5KHz) ; IF_AM_MAX1 EQU 00EH ;38H ;Set IFCDR1 IF(450KHz + 5KHz) ; IF_AM_MAX0 EQU 040H ;C0H ;Set IFCDR0 IF(450KHz + 5KHz) ; IF_AM_MIN2 EQU 0F0H ;Set IFCDR2 IF(450KHz - 5KHz) ; IF_AM_MIN1 EQU 00DH ;38H ;Set IFCDR1 IF(450KHz - 5KHz) ; IF_AM_MIN0 EQU 0E0H ;20H ;Set IFCDR0 IF(450KHz - 5KHz) ;--- Gate Time 8ms Data --- ;--- Gate Time 32ms Data --- IF_FM_MAX2 EQU 0F1H ;Set IFCDR2 IF(10.7MHz + 25KHz) IF_FM_MAX1 EQU 050H ;51H ;Set IFCDR1 IF(10.7MHz + 25KHz) IF_FM_MAX0 EQU 0E0H ;C0H ;Set IFCDR0 IF(10.7MHz + 25KHz) IF_FM_MIN2 EQU 0F1H ;Set IFCDR2 IF(10.7MHz - 25KHz) IF_FM_MIN1 EQU 04DH ;4FH ;Set IFCDR1 IF(10.7MHz - 25KHz) IF_FM_MIN0 EQU 080H ;00H ;Set IFCDR0 IF(10.7MHz - 25KHz) IF_AM_MAX2 EQU 0F0H ;Set IFCDR2 IF(450KHz + 5KHz) IF_AM_MAX1 EQU 038H ;Set IFCDR1 IF(450KHz + 5KHz) IF_AM_MAX0 EQU 0C0H ;Set IFCDR0 IF(450KHz + 5KHz) IF_AM_MIN2 EQU 0F0H ;Set IFCDR2 IF(450KHz - 5KHz) IF_AM_MIN1 EQU 038H ;Set IFCDR1 IF(450KHz - 5KHz) IF_AM_MIN0 EQU 020H ;Set IFCDR0 IF(450KHz - 5KHz) ;--- Gate time 32ms Data --- STEP_FM_VAL EQU 0CDH STEP_AM_VAL EQU 77H ;----- VOLUME IC Define ----- VOL_AD EQU 82H VOL_BUF0 DATA 49H VOL_BUF1 DATA 4AH VOL_DATA2 EQU 00000011B VOL_VOLCON EQU 01011111B VOL_VOLCDC EQU 01001011B VOL_VOLRDO EQU 01011111B VOL_VOLTAP EQU 01000111B VOL_RADIO EQU 10000001B ;10000001B VOL_TAPE EQU 00100001B VOL_CDC EQU 01000001B ;----- CD CHANGER DATA ----- CDC_D0_MIN EQU 01H ;01H ;0.8ms -> 01E0H CDC_D0_MAX EQU 04H ;03H ;1.2ms -> 02CFH CDC_D1_MIN EQU 03H ;04H ;2.2ms -> 0528H CDC_D1_MAX EQU 09H ;07H ;2.8ms -> 0690H CDC_CNT_VAL EQU 02H TERM20M EQU 0F0H ;02EH ;----- TIME COUNT DATA ----- TIME_VAL100M EQU 00EH TIME_VAL150M EQU 014H TIME_VAL300M EQU 027H TIME_VAL400M EQU 033H TIME_VAL600M EQU 04CH TIME_VAL1270M EQU 0A0H TIME_VAL1800M EQU 0E2H TIME_VAL2040M EQU 0FFH ;----- TAPE MODE VALUE ----- TM_EJECT EQU 01H TM_STOP EQU 02H TM_PLAY EQU 03H TM_FFF EQU 04H ;FF or REW TM_RFF EQU 05H ;FF or REW TM_FAPS EQU 06H ;APS FF or APS REW TM_RAPS EQU 07H ;APS FF or APS REW ;----- REMOCON Value ----- REMO_FILTER EQU 01H ;0.5ms -> 012CH REMO_START EQU 018H ;10ms -> 01770H ;12.3ms -> 01CD4H REMO_DLOW EQU 03H ;1.8ms -> 0438H REMO_DHIGH EQU 0AH ;4ms -> 0960H REMO_MAX EQU 24H ;15Ms -> 2328H REMO_REPEAT EQU 18H ;10ms -> 1770H REMO_NT_MIN EQU 46H ;30ms -> 4650H REMO_NT_MAX EQU 75H ;50ms -> 7530H REMO_FLAME EQU 0D2H ;90ms -> 0D2F0H REMO_FLM_MAX EQU 019H ;120ms -> 11940H ;----- Remocon Data -------- REMO_D1 EQU 028H ;Power REMO_D2 EQU 0A8H ;AM/FM REMO_D3 EQU 00H ;Eject REMO_D4 EQU 0A2H ;"-" REMO_D5 EQU 022H ;"+" REMO_D6 EQU 0F5H ;Tape REMO_D7 EQU 0D0H ;Seek - REMO_D8 EQU 071H ;Seek + REMO_D9 EQU 068H ;CDC REMO_D10 EQU 0C1H ; REMO_D11 EQU 009H REMO_D12 EQU 010H REMO_D13 EQU 040H REMO_D14 EQU 080H REMO_D15 EQU 0C0H REMO_D16 EQU 090H REMO_D17 EQU 012H REMO_PD1 EQU 038H REMO_PD2 EQU 000H REMO_PD3 EQU 048H REMO_PD4 EQU 098H REMO_PD5 EQU 0A8H REMO_PD6 EQU 080H REMO_PD7 EQU 0F8H REMO_PD8 EQU 078H REMO_PD9 EQU 040H REMO_PD10 EQU 0A0H REMO_PD11 EQU 090H REMO_PD12 EQU 020H REMO_PD13 EQU 060H REMO_PD14 EQU 050H REMO_PD15 EQU 010H REMO_PD16 EQU 028H REMO_PD17 EQU 068H REMO_PD18 EQU 0B8H ;Mute REMO_PD19 EQU 058H ;Volume up REMO_PD20 EQU 018H ;Volume down ;============================================= ORG 00H LJMP START ; ORG 03H ;INTEX0 LJMP EXT0_INT ;RETI ; ORG 0BH ;INTT0 LJMP TIMER0 ; ORG 13H ;INTEX1 RETI ; ORG 1BH ;INTT1 LJMP TIMER1_INT ;RETI ; ORG 23H ;INTS0(RI&TI) RETI ; ORG 2BH ;INTT2(TF2&EXF2) RETI ;LJMP TIMER2 ; ORG 33H ;INTWDT RETI ; ORG 3BH ;INTIFC SETB IF_FG ;Flag IF count-end RETI ; ORG 43H ;INTAD RETI ; ORG 4BH ;INTEX2 LJMP REMOCON_INT RETI ; ORG 53H ;INTEX3 RETI ; ORG 5BH ;INTEX4 RETI ; ORG 63H ;INTS1 RETI ; ORG 6BH ;INTS2 RETI ; ORG 73H ;INTEX5 LJMP INTEX5 RETI ; ORG 7BH ;INTEX6 RETI ; ORG 83H ;INTT3 LJMP TIMER3 ;RETI ; ORG 8BH ;INTT4 LJMP TIMER4 RETI ; ; ============================ ; MUTE INITIAL ROUTINE ; ============================ MUTE: MOV MUTE500M,#MUTE_COUNT_VAL ; LOAD 500 msec SETB MUTEFG CLR P_MUTE ; ON MUTE PORT RET ;============================================== ; INITIAL ROUTINE ;============================================== ;----- CHANNEL DATA Table----- ORG 100H LCD_4: DB 77H,60H,5EH,7AH,69H,3BH,3FH,62H,7FH,7BH ;LCD 4 DATA ORG 110H LCD_5: DB 0D7H,0C0H,9EH,0DAH,0C9H,05BH,05FH,0C3H,0DFH,0DBH ;LCD 5 DATA ORG 120H LCD_6L: DB 0F4H,0A0H,9CH,0B8H,0E8H,78H,7CH,0E0H,0FCH,0F8H ;LCD 6 DATA ORG 130H LCD_6H: DB 02H,00H,02H,02H,00H,02H,02H,02H,02H,02H ;LCD 6 DATA ORG 140H LCD_7L: DB 0D4H,0C0H,9CH,0D8H,0C8H,58H,5CH,0C0H,0DCH,0D8H ;LCD 7 DATA ORG 150H LCD_7H: DB 23H,20H,22H,22H,21H,23H,23H,23H,23H,23H ;LCD 7 DATA ORG 160H LCD_8: DB 0E7H,05H,0AEH,0EAH,0C9H,6BH,6FH,0C2H,0EFH,0EBH ;LCD 8 DATA ;----- Port Initial ----- ORG 200H START: MOV SFRPG,#SFRPG0 ;SFR page 0 ; MOV SCMODE,#00000000B ;7.2MHz,Fxx ; MOV ADCCON,#00011001B ;START=1,ADC port ON=1,Select ch=1 MOV ADCCON,#01011000B MOV P0MOD,#00H ;Output mode port 0 ;00H MOV P1MOD,#00H ;Output mode port 1 ;00H MOV P2MOD,#0FFH ;Input mode port 2 ;0FFH MOV P3MOD,#00H ;Output/Input mode port 3 ;00H MOV P4MOD,#00110111B ;Output mode port 4 ; MOV P5MOD,#00100010B ;Output mode port 5 ; MOV P6MOD,#0FFH ;Input mode port 6 ;0FFH MOV P7MOD,#11000001B ;Input mode port 7 ; MOV P0CON,#00H ;Enable Pull-up Port 0 MOV P1CON,#0FFH ;11111000B ;Enable Pull-up Port 1 MOV P2CON,#00H ;Enable Pull-up Port 2 MOV P3CON,#00H ;FFH ;Enable Pull-up Port 3 ;Disable 3.0,3.1 MOV P4CON,#00010101B ;Enable Pull-up Port 4 MOV P5CON,#00100010B ; MOV P6CON,#00000000B ;Enable/Disable Pull-up Port 6 MOV P7CON,#00H ;Disable Pull-up Port 7 MOV SFRPG,#SFRPG1 ;SFR page 1 MOV P_0,#00H ;Initial P_0 MOV P_1,#00H MOV P_2,#00H MOV P_3,#00H MOV P_4,#00H MOV P_5,#0C0H MOV P_6,#0FFH MOV P_7,#00H CLR P_MUTE ;AUDIO OFF ;----- RAM CLEAR ----- MOV R0,#7FH MOV @R0,#00H RAMCLR: DJNZ R0,RAMCLR MOV KEY_COUNT,#KEY_COUNT_VAL MOV MUTE500M,#MUTE_COUNT_VAL MOV KEY_LONG_COUNT,#KEY_LONG_VAL ;----- FLAG SETUP ---- CLR CDC_FG CLR TAPE_FG CLR TAPEFR_FG CLR CLK_FG CLR KEYFG ;Clear key flag CLR KEY_ON_FG SETB FM_AM_FG CLR KEY_ERR_FG ;Clear key error flag CLR KEY_LONG_FG MOV TAPE_MODE,#TM_STOP ;----- SFR Initial ----- MOV SFRPG,#SFRPG0 MOV SP,#80H MOV TH0,#0F0H MOV TL0,#5FH ; 4 msec MOV TH1,#00H MOV TL1,#00H ; 4 msec MOV TL3,#00H MOV TH3,#00H MOV TL4,#00H MOV TH4,#00H MOV T01MOD,#00010001B MOV T01CON,#00000001B MOV T34MOD,#00010001B MOV T34CON,#01010000B MOV IE,#10001011B ; ENABLE EXT0,T1 MOV D_IE2,#00001001B ;00001001B ;Enable External Interrupt 5 MOV D_IE3,#00010011B ;Enable IFC, Timer4 and Timer3 MOV IP,#00000000B MOV D_IP2,#00000000B MOV D_IP3,#00000000B MOV D_IT2,#01000010B ;Rising external interrupt 5 mode CLR IE.0H ;Disable CDC MOV AMINC,00H ; DTS3.1 test MOV FMINC,00H ; DTS3.1 test CLR KEYFG SETB TR1 ;Off Timer 1 (Disable long key) SETB TR0 MOV SFRPG,#SFRPG1 ;----- PLL Initial ----- CLR P_CDCON SETB P_RADIOON CLR P_AMON SETB P_FMON CLR P_LWON SETB LODX_FG CLR P_LODX MOV PLLFM_BUF0,#FM_MIN_L ;Set PLLDRL 87.5MHz Low MOV PLLDRL,PLLFM_BUF0 MOV PLLFM_BUF1,#FM_MIN_H ;Set PLLDRH 87.5MHz High MOV PLLDRH,PLLFM_BUF1 MOV PLLMOD,#PLLRF50K ; KWONHK MOV IFCMOD,#IFC_FM ;Set IFCMOD 32ms & FM MOV A,IFCMOD ;Clrea only Unlock bit MOV PLLAM_BUF0,#AM_MIN_L ;Set AM Low MOV PLLAM_BUF1,#AM_MIN_H ;Set AM High MOV STEP_FM,#STEP_FM_VAL MOV STEP_AM,#STEP_AM_VAL MOV R0,#FM_MEM1L MOV @R0,#0D6H MOV R0,#FM_MEM1H MOV @R0,#03H MOV R0,#FM_MEM2L MOV @R0,#0F2H MOV R0,#FM_MEM2H MOV @R0,#03H MOV R0,#FM_MEM3L MOV @R0,#05EH MOV R0,#FM_MEM3H MOV @R0,#04H MOV R0,#FM_MEM4L MOV @R0,#0E2H MOV R0,#FM_MEM4H MOV @R0,#03H MOV R0,#FM_MEM5L MOV @R0,#05CH MOV R0,#FM_MEM5H MOV @R0,#04H MOV R0,#FM_MEM6L MOV @R0,#0A3H MOV R0,#FM_MEM6H MOV @R0,#04H MOV AM_MEM1,#0D0H MOV AM_MEM1H,#06H MOV AM_MEM2,#060H MOV AM_MEM2H,#08H MOV AM_MEM3,#0E0H MOV AM_MEM3H,#09H MOV AM_MEM4,#0A0H MOV AM_MEM4H,#0CH MOV AM_MEM5,#040H MOV AM_MEM5H,#0EH MOV AM_MEM6,#AM_MAX_L MOV AM_MEM6H,#AM_MAX_H LCALL FM_SET CLR P_IFREQ ;----- LCD Initial ----- CLR P_LCDDI CLR P_LCDCL CLR P_LCDCE MOV LCD_BUF0,#LCDD0_FM ;FM MOV LCD_BUF1,#LCDD_BLANK ; MOV LCD_BUF2,#LCDD_BLANK MOV LCD_BUF3,#LCDD3_5L8 ;8 of 87.5MHz MOV LCD_BUF4,#LCDD4_6A7 ;7(low bit) of 87.5MHz MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK LCALL LCD_FM_PLAY ;----- CDC Initial ----- ; SETB P_CDCDO CLR P_CDCON MOV CDC_COM0,#02H ;CDC POWER-OFF MOV CDC_COM1,#00H MOV CDC_TEXT0,#00H MOV CDC_TEXT1,#00H MOV CDC_TEXT2,#00H MOV CDC_TEXT3,#10H MOV CDC_TEXT4,#01H MOV CDC_TEXT5,#00H MOV CDC_TEXT6,#00H MOV CDC_TEXT7,#00H MOV CDC_TEXT8,#00H CLR CDC_FG CLR CDC_TXRX_FG ;------ Tape Setup ------ MOV SFRPG,#SFRPG1 ;INPUT SETB P_STPIN SETB P_REWDET SETB P_FOWDET SETB P_FRSW SETB P_APS SETB P_ATS ;OUTPUT CLR P_SOL2 CLR P_SOL1 CLR P_CM CLR P_PM2 CLR P_PM1 CLR P_DB CLR P_MTL ;----- TAPE Inintial ----- CLR P_MUTE SETB P_POWERON LCALL TAPE_INI ; LCALL TSTOP_FPLAY ; LCALL TPLAY_STOP CLR P_POWERON CLR TEJECT_FG ;----- VOLUME IC Inintial ----- MOV VOL_BUF0,#VOL_VOLCON MOV VOL_BUF1,#VOL_RADIO LCALL VOL_TRANS ;----- REMOCON Initial ----- MOV REMO_BUF0,#00H MOV REMO_BUF1,#00H MOV REMO_COUNT0,#00H CLR REMOSTART_FG CLR REMO_FG CLR REMOAM_FG CLR REMORET_FG MOV REMO_LCOUNT0,#00H CLR REMO_LONG_FG CLR REMO_LUP_FG ;----- CLOCK Inintial ----- CLR CLK_FG MOV LCDCLK_FG,#03H MOV WRPG,#WRPG1 MOV T1COUNT_P1,#00H MOV HSEC_P1,#00H MOV SEC_P1,#00H MOV MINUTE_P1,#3AH MOV HDATE_P1,#00H MOV HOUR_P1,#0BH MOV DATE_P1,#01FH MOV MONTH_P1,#03H MOV YEAR0_P1,#00H MOV YEAR1_P1,#14H ;2000year MOV WRPG,#WRPG0 LCALL RUN_POWER ;============================================= ; MAIN PROGRAM ;============================================= MAIN: ; MOV SCMODE,#08H KEY: JNB KEYSEL_FG,REMOCON CLR KEYSEL_FG LCALL KEY_SCAN0 REMOCON: JNB REMO_FG,REMO_LN CLR REMOSTART_FG CLR REMO_FG LCALL REMO_SEL REMO_LN: JNB REMO_LTIME_FG,TAPE_EJ CLR REMO_LTIME_FG LCALL REMO_LONG_SEL TAPE_EJ: JNB TEJECT_FG,POWON SETB P_POWERON LCALL RUN_EJ_PLAY CLR TEJECT_FG POWON: JB P_POWERON,TAPE_LCD AJMP MAIN_LCD_END TAPE_LCD: JNB TAPE_FG,CLK_LCD LCALL TAPE_REVERSE LCALL APS_SEL LCALL LCD_TAPE_PLAY AJMP MAIN_LCD_END CLK_LCD: JNB CLK_FG,CDC_LCD LCALL LCD_CLK_PLAY AJMP MAIN_LCD_END CDC_LCD: JNB CDC_FG,FM_LCD JB CDC_ERR_FG,MAIN_LCD_END LCALL LCD_CDC_PLAY AJMP MAIN_LCD_END FM_LCD: JNB FM_AM_FG,AM_LCD LCALL LCD_FM_PLAY AJMP MAIN_LCD_END AM_LCD: LCALL LCD_AM_PLAY MAIN_LCD_END: LJMP MAIN ;********************************************* ; * ; TEST ROUTINE * ; * ; INTERRUPT VECTOR * ; INITIAL * ; KEY_SCAN * ; TAPESW_IN * ; CDCSW_IN * ; LCD_DISPLAY * ; TIME_CONTROL * ; PLL CONTROL * ; VOLUME CONTROL * ; MUTE * ; * ;********************************************* ;============================================= ; KEY ROUTINE ;============================================= ;----- Key Check Routine ------ KEY_CHECK: SETB CHK_FG JNB KEYFG,KEY_CK_SET ;Ckeck double key CJNE A,KEY_NEW,K_ERROR AJMP KEY_CK_END K_ERROR: SETB KEY_ERR_FG ;Set error key AJMP KEY_CK_END KEY_CK_SET: SETB KEYFG MOV KEY_OLD,KEY_NEW KEY_CK_END: RET ;----- Key Long Timer ----- KEY_TIMER: ;----- Start Key Scan ----- KEY_SCAN0: CLR CHK_FG ANL P_1,#00000111B ;Clear key out SETB P_KSO0 ;Output key to KSO0 Port MOV B,P_2 MOV A,KEY_OLD ; SW5: JNB B.4,SW10 MOV KEY_NEW,#K_M_UP ;R0 is value selected key LCALL KEY_CHECK SW10: JNB B.5,SW15 MOV KEY_NEW,#K_M_DN ;R0 is value selected key LCALL KEY_CHECK SW15: JNB B.6,SW20 MOV KEY_NEW,#K_SK_UP ;R0 is value selected key LCALL KEY_CHECK SW20: JNB B.7,KEY_SCAN1 MOV KEY_NEW,#K_SK_DN ;R0 is value selected key LCALL KEY_CHECK KEY_SCAN1: ANL P_1,#00000111B ;Clear key out SETB P_KSO1 ;Output key to KSO1 Port MOV B,P_2 SW4: JNB B.4,SW9 MOV KEY_NEW,#K_BSM ;R0 is value selected key LCALL KEY_CHECK SW9: JNB B.5,SW14 MOV KEY_NEW,#K_TAPE_EJ ;R0 is value selected key LCALL KEY_CHECK SW14: JNB B.6,SW19 MOV KEY_NEW,#K_EQ ;R0 is value selected key LCALL KEY_CHECK SW19: JNB B.7,KEY_SCAN2 MOV KEY_NEW,#K_C ;R0 is value selected key LCALL KEY_CHECK KEY_SCAN2: ANL P_1,#00000111B ;Clear key out SETB P_KSO2 ;Output key to KSO2 Port MOV B,P_2 SW3: JNB B.4,SW8 MOV KEY_NEW,#K_FM ;R0 is value selected key LCALL KEY_CHECK SW8: JNB B.5,SW13 MOV KEY_NEW,#K_TAPE ;R0 is value selected key LCALL KEY_CHECK SW13: JNB B.6,SW18 MOV KEY_NEW,#K_CDC ;R0 is value selected key LCALL KEY_CHECK SW18: JNB B.7,KEY_SCAN3 MOV KEY_NEW,#K_B ;R0 is value selected key LCALL KEY_CHECK KEY_SCAN3: ANL P_1,#00000111B ;Clear key out SETB P_KSO3 ;Output key to KSO3 Port MOV B,P_2 SW2: JNB B.4,SW7 MOV KEY_NEW,#K_AM ;R0 is value selected key LCALL KEY_CHECK SW7: JNB B.5,SW12 MOV KEY_NEW,#K_M4 ;R0 is value selected key LCALL KEY_CHECK SW12: JNB B.6,SW17 MOV KEY_NEW,#K_M5 ;R0 is value selected key LCALL KEY_CHECK SW17: JNB B.7,KEY_SCAN4 MOV KEY_NEW,#K_M6 ;R0 is value selected key LCALL KEY_CHECK KEY_SCAN4: ANL P_1,#00000111B ;Clear key out SETB P_KSO4 ;Output key to KSO4 Port MOV B,P_2 SW1: JNB B.4,SW6 MOV KEY_NEW,#K_POWER ;R0 is value selected key LCALL KEY_CHECK SW6: JNB B.5,SW11 MOV KEY_NEW,#K_M1 ;R0 is value selected key LCALL KEY_CHECK SW11: JNB B.6,SW16 MOV KEY_NEW,#K_M2 ;R0 is value selected key LCALL KEY_CHECK SW16: JNB B.7,KEY_SELECT MOV KEY_NEW,#K_M3 ;R0 is value selected key LCALL KEY_CHECK KEY_SELECT: JB KEY_ERR_FG,KEY_ERROR JB CHK_FG,KEY_CHATER KEY_ERROR: LJMP KEY_CLR KEY_CHATER: DJNZ KEY_COUNT,KEY_CH_END JB KEY_ON_FG,KEY_CH_END AJMP KEY_RUN KEY_CH_END: LJMP KEY_END KEY_RUN: MOV R0,KEY_NEW KEY_SW_1: CJNE R0,#K_POWER,KEY_SW_2 LCALL RUN_POWER LJMP KEY_RUN_END KEY_SW_2: CJNE R0,#K_AM,KEY_SW_3 LCALL RUN_AM LJMP KEY_RUN_END KEY_SW_3: CJNE R0,#K_FM,KEY_SW_4 LCALL RUN_FM LJMP KEY_RUN_END KEY_SW_4: CJNE R0,#K_BSM,KEY_SW_5 LCALL RUN_TAPE ;BSM LJMP KEY_RUN_END KEY_SW_5: CJNE R0,#K_M_UP,KEY_SW_6 ; JB KEY_LONG_FG,R_M_UP_LONG LCALL RUN_CDC ;M_UP LJMP KEY_RUN_END R_M_UP_LONG: ; LJMP RUN_M_UP_LONG KEY_SW_6: CJNE R0,#K_M1,KEY_SW_7 LCALL RUN_B ;M1 LJMP KEY_RUN_END KEY_SW_7: CJNE R0,#K_M4,KEY_SW_8 LCALL RUN_EQ ;M4 LJMP KEY_RUN_END KEY_SW_8: CJNE R0,#K_TAPE,KEY_SW_9 LCALL RUN_BSM ;TAPE LJMP KEY_RUN_END KEY_SW_9: CJNE R0,#K_TAPE_EJ,KEY_SW_10 LCALL RUN_SK_UP ;TAPE_EJ LJMP KEY_RUN_END KEY_SW_10: CJNE R0,#K_M_DN,KEY_SW_11 ; JB KEY_LONG_FG,R_M_DN_LONG LCALL RUN_M_UP ;DN LJMP KEY_RUN_END R_M_DN_LONG: ; LJMP RUN_M_DN_LONG KEY_SW_11: CJNE R0,#K_M2,KEY_SW_12 LCALL RUN_M1 ;M2 LJMP KEY_RUN_END KEY_SW_12: CJNE R0,#K_M5,KEY_SW_13 LCALL RUN_M2 ;M5 LJMP KEY_RUN_END KEY_SW_13: CJNE R0,#K_CDC,KEY_SW_14 LCALL RUN_M3 ;CDC LJMP KEY_RUN_END KEY_SW_14: CJNE R0,#K_EQ,KEY_SW_15 LCALL RUN_M4 ;EQ LJMP KEY_RUN_END KEY_SW_15: CJNE R0,#K_SK_UP,KEY_SW_16 ; JB KEY_LONG_FG,R_SK_UP_LONG LCALL RUN_M5 ;SK_UP LJMP KEY_RUN_END R_SK_UP_LONG: ; LJMP RUN_SK_UP_LONG KEY_SW_16: CJNE R0,#K_M3,KEY_SW_17 LCALL RUN_M6 ;M3 LJMP KEY_RUN_END KEY_SW_17: CJNE R0,#K_M6,KEY_SW_18 LCALL RUN_C ;M6 LJMP KEY_RUN_END KEY_SW_18: CJNE R0,#K_B,KEY_SW_19 LCALL RUN_TAPE_EJ ;B LJMP KEY_RUN_END KEY_SW_19: CJNE R0,#K_C,KEY_SW_20 LCALL RUN_SK_DN ;C LJMP KEY_RUN_END KEY_SW_20: CJNE R0,#K_SK_DN,KEY_SW_END ; JB KEY_LONG_FG,R_SK_DN_LONG LCALL RUN_M_DN ;SK_DN LJMP KEY_RUN_END R_SK_DN_LONG: ; LJMP RUN_SK_DN_LONG KEY_SW_END: LJMP KEY_END KEY_RUN_END: ; CLR P_IFREQ SETB KEY_ON_FG LJMP KEY_END KEY_CLR: CLR KEY_ERR_FG CLR KEY_ON_FG CLR KEY_LONG_FG ;Clear long key flag MOV KEY_LONG_COUNT,#00H MOV KEY_COUNT,#KEY_COUNT_VAL CLR KEYFG KEY_END: RET ;FM/AM Memory Loading ------ K_MEM_LOAD: JNB FM_AM_FG,AM_MEM MOV PLLFM_BUF0,@R0 MOV PLLFM_BUF1,@R1 MOV PLLDRL,PLLFM_BUF0 MOV PLLDRH,PLLFM_BUF1 LCALL LCD_FM_PLAY LJMP MEM_END AM_MEM: MOV PLLAM_BUF0,@R0 MOV PLLAM_BUF1,@R1 MOV PLLDRL,PLLAM_BUF0 MOV PLLDRH,PLLAM_BUF1 LCALL LCD_AM_PLAY MEM_END: RET ;***** KEY RUN ROUTINE ********** RUN_POWER: CLR P_MUTE CLR P_LODX JNB P_POWERON,POWER_ON LJMP PTAPE_OFF POWER_ON: SETB P_POWERON LCALL DELAY60M TAPE_POWER: JNB TAPE_FG,CDC_POWER LCALL LCD_TAPE_PLAY SETB P_LCDINH JB TAPEFR_FG,TR_POW_ON LCALL TSTOP_FPLAY AJMP TPOW_VOL TR_POW_ON: LCALL TSTOP_RPLAY TPOW_VOL: MOV VOL_BUF1,#VOL_TAPE MOV TAPE_MODE,#TM_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M AJMP POW_ON CDC_POWER: JNB CDC_FG,POW_FM SETB P_CDCON LCALL LCD_CDC_PLAY SETB P_LCDINH LCALL DELAY240M LCALL COM_PWRON LCALL CDC_PLAY MOV VOL_BUF1,#VOL_CDC LCALL LCD_CDC_PLAY AJMP POW_ON POW_FM: JNB FM_AM_FG,AM_POW_ON FM_POW_ON: SETB P_RADIOON CLR P_AMON SETB P_FMON LCALL DELAY60M MOV VOL_BUF1,#VOL_RADIO LCALL FM_SET LCALL LCD_FM_PLAY AJMP POW_ON AM_POW_ON: SETB P_RADIOON CLR P_FMON SETB P_AMON LCALL DELAY60M MOV VOL_BUF1,#VOL_RADIO LCALL AM_SET LCALL LCD_AM_PLAY POW_ON: LCALL VOL_TRANS SETB P_LCDINH LCALL MUTE AJMP POWER_END PTAPE_OFF: JNB TAPE_FG,PCDC_OFF LCALL TAPE_STOP PCDC_OFF: JNB CDC_FG,PFMAM_OFF LCALL COM_PWROFF LCALL CDC_PLAY CLR P_CDCON PFMAM_OFF: CLR P_RADIOON CLR P_LCDINH CLR P_POWERON CLR P_MUTE POWER_END: LCALL MUTE RET RUN_AM: JB P_POWERON,R_AM LJMP RUN_AM_END R_AM: CLR P_MUTE JNB TAPE_FG,RUN_AM_SET LCALL TAPE_STOP MOV TAPE_MODE,#TM_STOP CLR TAPE_FG RUN_AM_SET: CLR FM_AM_FG CLR CDC_FG MOV SFRPG,#SFRPG0 CLR IE.0H ;CDC control MOV SFRPG,#SFRPG1 CLR P_CDCON CLR CLK_FG SETB P_RADIOON CLR P_FMON SETB P_AMON CLR P_LWON CLR P_LODX LCALL DELAY60M MOV VOL_BUF0,#VOL_VOLCON MOV VOL_BUF1,#VOL_RADIO LCALL VOL_TRANS RUN_AM_ON: LCALL MUTE LCALL AM_SET CLR P_IFREQ LCALL LCD_AM_PLAY RUN_AM_END: RET RUN_FM: JB P_POWERON,R_FM LJMP RUN_FM_END R_FM: CLR P_MUTE JNB TAPE_FG,RUN_FM_SET LCALL TAPE_STOP MOV TAPE_MODE,#TM_STOP CLR TAPE_FG RUN_FM_SET: SETB FM_AM_FG CLR CDC_FG MOV SFRPG,#SFRPG0 CLR IE.0H ;CDC control MOV SFRPG,#SFRPG1 CLR TAPE_FG CLR CLK_FG CLR P_CDCON SETB P_RADIOON CLR P_AMON SETB P_FMON CLR P_LWON SETB P_IFREQ ;*** Test LCALL DELAY60M MOV VOL_BUF1,#VOL_RADIO MOV VOL_BUF0,#VOL_VOLCON LCALL VOL_TRANS RUN_FM_ON: LCALL FM_SET LCALL LCD_FM_PLAY FM_END: LCALL MUTE RUN_FM_END: RET RUN_BSM: JB P_POWERON,R_BSM LJMP RUN_BSM_END R_BSM: JNB CDC_FG,BSM_SET LJMP RUN_BSM_END BSM_SET: CLR P_MUTE SETB P_IFREQ SETB P_LODX MOV SM_MAX1,#00H ;SM Level Value MOV SM_MAX2,#00H MOV SM_MAX3,#00H MOV SM_MAX4,#00H MOV SM_MAX5,#00H MOV SM_MAX6,#00H MOV STEP_FM,#STEP_FM_VAL MOV STEP_AM,#STEP_AM_VAL LCALL DELAY240M JNB FM_AM_FG,BSM_AM BSM_FM: LCALL FM_UP LCALL PLL_UNLK ;Check PLL Unlock JNB KEYSEL_FG,BSM_FM_PLL SETB P_KSO2 JNB P_2.5,FM_OUT BSM_FM_PLL: LCALL LCD_FM_PLAY LCALL DELAY30M ; JB P_SDIN,STEP_FM_CP LCALL DELAY10M LCALL SM_CHECK JNB SM_ON,STEP_FM_CP LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,STEP_FM_CP LCALL STORE_BSM_FM STEP_FM_CP: DJNZ STEP_FM,BSM_FM ;Search MIN --> MAX CLR P_LODX BSM_FMN: LCALL FM_UP LCALL PLL_UNLK ;Check PLL Unlock JB REMO_FG,FM_OUT JNB KEYSEL_FG,BSM_FM_PLLN SETB P_KSO2 JNB P_2.5,FM_OUT BSM_FM_PLLN: LCALL LCD_FM_PLAY LCALL DELAY30M ; JB P_SDIN,STEP_FM_CPN LCALL DELAY10M LCALL SM_CHECK JNB SM_ON,STEP_FM_CPN LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,STEP_FM_CPN LCALL STORE_BSM_FM STEP_FM_CPN: DJNZ STEP_FM,BSM_FMN ;Search MIN --> MAX FM_OUT: MOV PLLFM_BUF0,FM_MEM1L MOV PLLFM_BUF1,FM_MEM1H MOV PLLDRL,PLLFM_BUF0 MOV PLLDRH,PLLFM_BUF1 LCALL LCD_FM_PLAY SJMP BSM_END BSM_AM: LCALL AM_UP JNB KEYSEL_FG,BSM_AM_PLL SETB P_KSO2 JNB P_2.5,AM_OUT BSM_AM_PLL: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_AM_PLAY LCALL DELAY50M LCALL SM_CHECK JNB SM_ON,STEP_AM_CP LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,STEP_AM_CP LCALL STORE_BSM_AM STEP_AM_CP: DJNZ STEP_AM,BSM_AM ;Search MIN --> MAX CLR P_LODX BSM_AMN: LCALL AM_UP JB REMO_FG,AM_OUT JNB KEYSEL_FG,BSM_AM_PLLN SETB P_KSO2 JNB P_2.5,AM_OUT BSM_AM_PLLN: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_AM_PLAY LCALL DELAY50M LCALL SM_CHECK JNB SM_ON,STEP_AM_CPN LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,STEP_AM_CPN LCALL STORE_BSM_AM STEP_AM_CPN: DJNZ STEP_AM,BSM_AMN ;Search MIN --> MAX AM_OUT: MOV PLLAM_BUF0,AM_MEM1 MOV PLLAM_BUF1,AM_MEM1H MOV PLLDRL,PLLAM_BUF0 MOV PLLDRH,PLLAM_BUF1 LCALL LCD_AM_PLAY BSM_END: LCALL MUTE CLR P_IFREQ RUN_BSM_END: RET RUN_M_UP: JB P_POWERON,RM_UP LJMP RUN_M_END RM_UP: JNB CLK_FG,R_MUP_CDC LCALL CLK_UP1 LJMP RUN_M_END R_MUP_CDC: CLR P_MUTE JNB CDC_FG,M_UP_SET ; MOV CDC_COM0,#038H ;CDC DISC-UP LCALL COM_DISCUP LCALL CDC_PLAY LJMP M_UP_END M_UP_SET: JNB FM_AM_FG,AM_M_UP FM_M_UP: LCALL FM_UP LCALL LCD_FM_PLAY LJMP M_UP_END AM_M_UP: LCALL AM_UP LCALL LCD_AM_PLAY M_UP_END: LCALL MUTE RUN_M_END: RET RUN_M1: JB P_POWERON,R_M1 LJMP RUN_M1_END R_M1: JNB CDC_FG,M1_SET LJMP RUN_M1_END M1_SET: LCALL MUTE JNB FM_AM_FG,AM_M1 FM_M1: MOV R0,#FM_MEM1L MOV R1,#FM_MEM1H LCALL K_MEM_LOAD LJMP RUN_M1_END AM_M1: MOV R0,#AM_MEM1 MOV R1,#AM_MEM1H LCALL K_MEM_LOAD RUN_M1_END: RET RUN_M4: JB P_POWERON,R_M4 LJMP RUN_M4_END R_M4: CLR P_MUTE JNB TAPE_FG,RUNM4_CDC LCALL TAPE_FAPS MOV TAPE_MODE,#TM_RAPS LCALL LCD_TAPE_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M LJMP RUN_M4_END RUNM4_CDC: JNB CDC_FG,M4_SET ; MOV A,CDC_TEXT1 ; ANL A,#10000000B ; JZ CDC_FF ; MOV CDC_COM0,#029H ; AJMP CDC_FF_P ;CDC_FF : MOV CDC_COM0,#02AH ;CDC FF ;CDC_FF_P: LCALL CDC_PLAY LJMP RUNM4_END M4_SET: JNB FM_AM_FG,AM_M4 FM_M4: MOV R0,#FM_MEM4L MOV R1,#FM_MEM4H LCALL K_MEM_LOAD LJMP RUNM4_END AM_M4: MOV R0,#AM_MEM4 MOV R1,#AM_MEM6H LCALL K_MEM_LOAD RUNM4_END: LCALL MUTE RUN_M4_END: RET RUN_TAPE: JB P_POWERON,R_TAPE LJMP RUN_TAPE_END R_TAPE: CLR P_MUTE SETB TAPE_FG CLR CLK_FG CLR CDC_FG MOV SFRPG,#SFRPG0 CLR IE.0H ;CDC control MOV SFRPG,#SFRPG1 CLR P_CDCON CLR P_RADIOON CLR P_FMON CLR P_AMON LCALL LCD_TAPE_PLAY JB TAPEFR_FG,TRUN_RPLAY MOV A,TAPE_MODE CJNE A,#TM_STOP,TRUN_M1 LCALL TSTOP_FPLAY AJMP TRUN_SET TRUN_M1: CJNE A,#TM_EJECT,TRUN_M2 LCALL TSTOP_FPLAY AJMP TRUN_SET TRUN_M2: CJNE A,#TM_PLAY,TRUN_M3 CPL TAPEFR_FG LCALL TFPLAY_RPLAY AJMP TRUN_SET TRUN_M3: CJNE A,#TM_FFF,TRUN_M4 LCALL TFFF_FPLAY AJMP TRUN_SET TRUN_M4: CJNE A,#TM_RFF,TRUN_M5 LCALL TRFF_RPLAY LCALL TRPLAY_FPLAY AJMP TRUN_SET TRUN_M5: CJNE A,#TM_FAPS,TRUN_M6 LCALL TFAPSFF_FPLAY AJMP TRUN_SET TRUN_M6: CJNE A,#TM_RAPS,TRUN_RPLAY ; LCALL TRAPS_RPLAY LCALL TRAPSFF_RPLAY LCALL TRPLAY_FPLAY AJMP TRUN_SET TRUN_RPLAY: MOV A,TAPE_MODE CJNE A,#TM_STOP,TRUN_M7 LCALL TSTOP_RPLAY AJMP TRUN_SET TRUN_M7: CJNE A,#TM_EJECT,TRUN_M8 LCALL TSTOP_RPLAY AJMP TRUN_SET TRUN_M8: CJNE A,#TM_PLAY,TRUN_M9 CPL TAPEFR_FG LCALL TRPLAY_FPLAY AJMP TRUN_SET TRUN_M9: CJNE A,#TM_RFF,TRUN_M10 LCALL TRFF_RPLAY AJMP TRUN_SET TRUN_M10: CJNE A,#TM_FFF,TRUN_M11 LCALL TFFF_FPLAY LCALL TFPLAY_RPLAY AJMP TRUN_SET TRUN_M11: CJNE A,#TM_RAPS,TRUN_M12 LCALL TRAPSFF_RPLAY AJMP TRUN_SET TRUN_M12: CJNE A,#TM_FAPS,TRUN_SET LCALL TFAPSFF_FPLAY LCALL TFPLAY_RPLAY AJMP TRUN_SET TRUN_SET: MOV TAPE_MODE,#TM_PLAY TRUN_VOL: MOV VOL_BUF0,#VOL_VOLTAP MOV VOL_BUF1,#VOL_TAPE LCALL VOL_TRANS LCALL LCD_TAPE_PLAY RUN_TEND: LCALL MUTE CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M RUN_TAPE_END: RET RUN_TAPE_EJ: CLR P_MUTE SETB P_POWERON LCALL TAPE_EJECT MOV TAPE_MODE,#TM_EJECT CLR TEJECT_FG CLR TAPE_FG SETB FM_AM_FG CLR CDC_FG MOV SFRPG,#SFRPG0 CLR IE.0H ;CDC control MOV SFRPG,#SFRPG1 CLR CLK_FG CLR P_CDCON SETB P_RADIOON CLR P_AMON SETB P_FMON CLR P_LWON SETB P_IFREQ LCALL DELAY60M MOV VOL_BUF1,#VOL_RADIO MOV VOL_BUF0,#VOL_VOLCON LCALL VOL_TRANS LCALL FM_SET LCALL LCD_FM_PLAY LCALL MUTE RET RUN_M_DN: JB P_POWERON,RM_DN LJMP RUN_MDN_END RM_DN: JNB CLK_FG,M_DN_CDC LCALL CLK_DN1 LJMP RUN_MDN_END M_DN_CDC: LCALL MUTE JNB CDC_FG,M_DN_SET LCALL COM_DISCDN LCALL CDC_PLAY LJMP RUN_MDN_END M_DN_SET: JNB FM_AM_FG,AM_M_DN FM_M_DN: LCALL FM_DOWN LCALL LCD_FM_PLAY LJMP RUN_MDN_END AM_M_DN: LCALL AM_DOWN LCALL LCD_AM_PLAY RUN_MDN_END: RET RUN_M2: JB P_POWERON,R_M2 LJMP RUN_M2_END R_M2: CLR P_MUTE JNB TAPE_FG,RUNM2_CDC MOV A,TAPE_MODE CJNE A,#TM_PLAY,RUNM2_TR LCALL TPLAY_RFF AJMP RUNM2_TS RUNM2_TR: CJNE A,#TM_FFF,RUNM2_TFA LCALL TFFF_FPLAY LCALL TPLAY_RFF AJMP RUNM2_TS RUNM2_TFA: CJNE A,#TM_FAPS,RUNM2_TRA LCALL APS_RFF AJMP RUNM2_TS RUNM2_TRA: CJNE A,#TM_RAPS,RUNM2_TS LCALL APS_RFF RUNM2_TS: MOV TAPE_MODE,#TM_RFF LCALL LCD_TAPE_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M LJMP RUN_M2_END RUNM2_CDC: JNB CDC_FG,M2_SET LCALL COM_TRKDN LCALL CDC_PLAY LJMP RUN_M2_E M2_SET: JNB FM_AM_FG,AM_M2 FM_M2: MOV R0,#FM_MEM2L MOV R1,#FM_MEM2H LCALL K_MEM_LOAD LJMP RUN_M2_E AM_M2: MOV R0,#AM_MEM2 MOV R1,#AM_MEM2H LCALL K_MEM_LOAD RUN_M2_E: LCALL MUTE RUN_M2_END: RET RUN_M5: JB P_POWERON,R_M5 LJMP RUN_M5_END R_M5: CLR P_MUTE JNB TAPE_FG,RUNM5_CDC MOV A,TAPE_MODE CJNE A,#TM_PLAY,RUNM5_TR LCALL TPLAY_FFF AJMP RUNM5_TS RUNM5_TR: CJNE A,#TM_RFF,RUNM5_TFA LCALL TRFF_RPLAY LCALL TPLAY_FFF AJMP RUNM5_TS RUNM5_TFA: CJNE A,#TM_FAPS,RUNM5_TRA LCALL APS_FFF AJMP RUNM5_TS RUNM5_TRA: CJNE A,#TM_RAPS,RUNM5_TS LCALL APS_FFF RUNM5_TS: MOV TAPE_MODE,#TM_FFF LCALL LCD_TAPE_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M LJMP KEY_RUN_END RUNM5_CDC: JNB CDC_FG,M5_SET ; MOV CDC_COM0,#04BH ;CDC TRACK-DOWN LCALL COM_TRKUP LCALL CDC_PLAY LJMP RUN_M5_E M5_SET: JNB FM_AM_FG,AM_M5 FM_M5: MOV R0,#FM_MEM5L MOV R1,#FM_MEM5H LCALL K_MEM_LOAD LJMP RUN_M5_E AM_M5: MOV R0,#AM_MEM5 MOV R1,#AM_MEM5H LCALL K_MEM_LOAD RUN_M5_E: LCALL MUTE RUN_M5_END: RET RUN_CDC: JB P_POWERON,R_CDC LJMP RUN_CDC_END R_CDC: CLR P_MUTE CLR TIME_FG CLR CDC_ERR_FG MOV TIME_COUNT0,#TIME_VAL300M ; LCALL CDC_PLAY RUN_CDC1: JB TIME_FG,RUNCDC_END JNB CDC_ERR_FG,RUN_CDC1 JNB TAPE_FG,RUN_CDC_S LCALL TAPE_STOP MOV TAPE_MODE,#TM_STOP CLR TAPE_FG RUN_CDC_S: SETB P_CDCON CLR CLK_FG MOV SFRPG,#SFRPG0 SETB IE.0H ;CDC control MOV SFRPG,#SFRPG1 CLR P_RADIOON LCALL LCD_CDC_PLAY LCALL DELAY240M SETB CDC_FG MOV VOL_BUF0,#VOL_VOLCDC MOV VOL_BUF1,#VOL_CDC LCALL VOL_TRANS LCALL COM_PWRON ;CDC_COM0,#01H ;CDC REPLAY LCALL CDC_PLAY RUNCDC_END: LCALL MUTE RUN_CDC_END: RET RUN_EQ: JB P_POWERON,R_EQ LJMP EQ_END R_EQ: MOV A,VOL_BUF1 ANL A,#00000011B ADD A,#01H ANL A,#00000011B MOV R0,A MOV A,VOL_BUF1 ANL A,#11111100B ORL A,R0 MOV VOL_BUF1,A LCALL VOL_TRANS MOV A,LCD_BUF8 ANL A,#00000011B MOV LCD_BUF8,A CJNE R0,#00H,EQ_NEXT1 SJMP EQ_END EQ_NEXT1: DEC R0 CJNE R0,#00H,EQ_NEXT2 ORL LCD_BUF8,#00100000B SJMP EQ_END EQ_NEXT2: DEC R0 CJNE R0,#00H,EQ_NEXT3 ORL LCD_BUF8,#00001000B SJMP EQ_END EQ_NEXT3: ORL LCD_BUF8,#00000100B EQ_END: RET RUN_SK_UP: JB P_POWERON,R_SKUP LJMP RUN_SKUP_END R_SKUP: JNB CDC_FG,CLK_UP0_R LJMP RUN_SKUP_END CLK_UP0_R: JNB CLK_FG,SK_UP_SET LCALL CLK_UP0 LJMP RUN_SKUP_END SK_UP_SET: CLR P_MUTE SETB P_LODX SETB P_IFREQ MOV STEP_FM,#STEP_FM_VAL MOV STEP_AM,#STEP_AM_VAL LCALL DELAY240M JNB FM_AM_FG,SK_UP_AM SK_UP_FM: LCALL FM_UP JNB REMO_FG,SK_UP_KEY LJMP SK_UP_END SK_UP_KEY: JNB KEYSEL_FG,UP_PLL_FM SETB P_KSO1 JNB P_2.5,SK_UP_END UP_PLL_FM: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_FM_PLAY LCALL DELAY30M ; JNB P_SDIN,UP_STEP_FM ;Check SD LCALL DELAY10M LCALL SM_CHECK JNB SM_ON,UP_STEP_FM LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,UP_STEP_FM LJMP SK_UP_END UP_STEP_FM: DJNZ STEP_FM,SK_UP_FM LJMP SK_UP_END SK_UP_AM: LCALL AM_UP JB REMO_FG,SK_UP_END JNB KEYSEL_FG,UP_PLL_AM SETB P_KSO1 JNB P_2.5,SK_UP_END UP_PLL_AM: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_AM_PLAY LCALL DELAY50M LCALL SM_CHECK ;**** JNB SM_ON,UP_STEP_AM ;Check SM LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,UP_STEP_AM LJMP SK_UP_END UP_STEP_AM: DJNZ STEP_AM,SK_UP_AM SK_UP_END: LCALL MUTE CLR P_IFREQ RUN_SKUP_END: RET RUN_M3: JB P_POWERON,R_M3 LJMP RUN_M3_END R_M3: CLR P_MUTE JNB TAPE_FG,RUNM3_CDC LCALL TAPE_RAPS MOV TAPE_MODE,#TM_FAPS LCALL LCD_TAPE_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M LJMP RUN_M3_END RUNM3_CDC: JNB CDC_FG,M3_SET ; MOV A,CDC_TEXT1 ; ANL A,#10000000B ; JZ CDC_REW ; MOV CDC_COM0,#029H ; AJMP CDC_REW_P ;CDC_REW: MOV CDC_COM0,#02BH ;CDC REW ;CDC_REW_P: LCALL CDC_PLAY LJMP RUNM3_END M3_SET: JNB FM_AM_FG,AM_M3 FM_M3: MOV R0,#FM_MEM3L MOV R1,#FM_MEM3H ; CLR P_LWON LCALL K_MEM_LOAD LJMP RUNM3_END AM_M3: MOV R0,#AM_MEM3 MOV R1,#AM_MEM3H LCALL K_MEM_LOAD RUNM3_END: LCALL MUTE RUN_M3_END: RET RUN_M6: JB P_POWERON,R_M6 LJMP RUN_M6_END R_M6: JNB CDC_FG,M6_SET MOV A,CDC_TEXT2 ANL A,#00010000B JZ REP_ON MOV CDC_COM0,#0EH ;CDC REPEAT OFF SJMP REP_SET REP_ON: MOV CDC_COM0,#0BH ;CDC REPEAT TRACK REP_SET: LCALL CDC_PLAY LJMP RUN_M6_END M6_SET: LCALL MUTE JNB FM_AM_FG,AM_M6 FM_M6: MOV R0,#FM_MEM6L MOV R1,#FM_MEM6H LCALL K_MEM_LOAD LJMP RUN_M6_END AM_M6: MOV R0,#AM_MEM6 MOV R1,#AM_MEM6H LCALL K_MEM_LOAD RUN_M6_END: RET RUN_B: ;####### TEST ############# ;TS_SK: LCALL MUTE ; SETB P_IFREQ ; MOV STEP_FM,#STEP_FM_VAL ; MOV STEP_AM,#STEP_AM_VAL ; JNB FM_AM_FG,TS_AM ;TS_FM: MOV PLLDRL,PLLFM_BUF0 ; MOV PLLDRH,PLLFM_BUF1 ; LCALL PLL_UNLK ;Check PLL Unlock ; LCALL DELAY30M ; LCALL SM_CHECK ; LCALL LCD_FM_PLAY ; JNB SM_ON,TS_FM_CMP ; LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz ; LJMP TS_END ;TS_FM_CMP: NOP ;DJNZ STEP_FM,TS_FM ; LJMP TS_END ;TS_AM: MOV PLLDRL,PLLAM_BUF0 ; MOV PLLDRH,PLLAM_BUF1 ; LCALL PLL_UNLK ;Check PLL Unlock ; LCALL DELAY30M ; LCALL SM_CHECK ;**** ; LCALL LCD_AM_PLAY ; JNB SM_ON,TS_AM_CMP ;Check SM ; LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz ; JNB IF_OK_FG,TS_AM_CMP ; AJMP TS_END ;TS_AM_CMP: NOP ;DJNZ STEP_AM,TS_AM TS_END: ;CLR P_IFREQ RUN_B_END: RET ;####### TEST END ############# RUN_C: JB P_POWERON,R_C LJMP RUN_C_END R_C: SETB CLK_FG ;CLOCK control CLR CDC_FG CLR TAPE_FG MOV A,LCDCLK_FG CJNE A,#03H,LCFG_INC MOV LCDCLK_FG,#00H SJMP LCD_LP LCFG_INC: INC LCDCLK_FG LCD_LP: LCALL LCD_CLK_PLAY RUN_C_END: RET RUN_SK_DN: JB P_POWERON,R_SKDN LJMP RUN_SKDN_END R_SKDN: JNB CDC_FG,CLK_DN0_R LJMP RUN_SKDN_END CLK_DN0_R: JNB CLK_FG,SK_DN_SET LCALL CLK_DN0 LJMP RUN_SKDN_END SK_DN_SET: CLR P_MUTE SETB P_IFREQ SETB P_LODX LCALL DELAY240M MOV STEP_FM,#STEP_FM_VAL MOV STEP_AM,#STEP_AM_VAL JNB FM_AM_FG,SK_DN_AM SK_DN_FM: LCALL FM_DOWN JNB REMO_FG,SK_DN_KEY LJMP SK_DN_END SK_DN_KEY: JNB KEYSEL_FG,DN_PLL_FM SETB P_KSO1 JNB P_2.7,SK_DN_END DN_PLL_FM: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_FM_PLAY LCALL DELAY30M ; JNB P_SDIN,DN_STEP_FM ;Check SD LCALL DELAY10M LCALL SM_CHECK ;**** JNB SM_ON,DN_STEP_FM ;Check SM LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,DN_STEP_FM AJMP SK_DN_END DN_STEP_FM: DJNZ STEP_FM,SK_DN_FM AJMP SK_DN_END SK_DN_AM: LCALL AM_DOWN JB REMO_FG,SK_DN_END JNB KEYSEL_FG,DN_PLL_AM SETB P_KSO1 JNB P_2.7,SK_DN_END DN_PLL_AM: LCALL PLL_UNLK ;Check PLL Unlock LCALL LCD_AM_PLAY LCALL DELAY50M LCALL SM_CHECK ;**** JNB SM_ON,DN_STEP_AM ;Check SM LCALL IF_TEST ;Check IF 10.7MHz +- 25KHz JNB IF_OK_FG,DN_STEP_AM AJMP SK_DN_END DN_STEP_AM: DJNZ STEP_AM,SK_DN_AM SK_DN_END: LCALL MUTE CLR P_IFREQ RUN_SKDN_END: RET ;============================================= ; PLL CONTROL ROUTINE ;============================================= ;---- FM SET/UP/DOWN ----- FM_SET: MOV PLLDRL,PLLFM_BUF0 ;Set PLLDRL 87.5MHz Low MOV PLLDRH,PLLFM_BUF1 ;Set PLLDRH 87.5MHz High MOV PLLMOD,#PLLRF50K MOV IFCMOD,#IFC_FM ;Set IFCMOD 32ms & FM RET FM_UP: MOV A,PLLMOD ;Clear unlock bit MOV A,PLLDRH CJNE A,#FM_MAX_H,FM_UP_OUT MOV A,PLLDRL CJNE A,#FM_MAX_L,FM_UP_OUT LJMP FM_UP_MIN FM_UP_OUT: CLR C MOV A,PLLFM_BUF0 ADDC A,#01H MOV PLLFM_BUF0,A MOV A,PLLFM_BUF1 ADDC A,#00H MOV PLLFM_BUF1,A MOV PLLDRL,PLLFM_BUF0 ;Set PLLDRL 87.5MHz Low MOV PLLDRH,PLLFM_BUF1 ;Set PLLDRH 87.5MHz High RET FM_UP_MIN: MOV PLLFM_BUF0,#FM_MIN_L ;Set PLLDRL 87.5MHz Low MOV PLLDRL,PLLFM_BUF0 MOV PLLFM_BUF1,#FM_MIN_H ;Set PLLDRH 87.5MHz High MOV PLLDRH,PLLFM_BUF1 RET FM_DOWN: MOV A,PLLDRH CJNE A,#FM_MIN_H,FM_DN_OUT MOV A,PLLDRL CJNE A,#FM_MIN_L,FM_DN_OUT LJMP FM_DN_MAX FM_DN_OUT: CLR C MOV A,PLLFM_BUF0 SUBB A,#01H MOV PLLFM_BUF0,A MOV A,PLLFM_BUF1 SUBB A,#00H MOV PLLFM_BUF1,A MOV PLLDRL,PLLFM_BUF0 ;Set PLLDRL 87.5MHz Low MOV PLLDRH,PLLFM_BUF1 ;Set PLLDRH 87.5MHz High RET FM_DN_MAX: MOV PLLFM_BUF0,#FM_MAX_L ;Set PLLDRL 108MHz Low MOV PLLDRL,PLLFM_BUF0 MOV PLLFM_BUF1,#FM_MAX_H ;Set PLLDRH 108MHz High MOV PLLDRH,PLLFM_BUF1 RET ;---- AM SET/UP/DOWN ----- AM_SET: ;MOV PLLMOD,#PLLRF9K MOV PLLDRL,PLLAM_BUF0 ;Set PLLDRL 531KHz Low MOV PLLDRH,PLLAM_BUF1 ;Set PLLDRH 531KHz High MOV PLLMOD,#PLLRF9KM ; MOV PLLMOD,#PLLRF1KM MOV IFCMOD,#IFC_AM ;Set IFCMOD 32ms & AM RET AM_UP: MOV A,PLLAM_BUF1 CJNE A,#AM_MAX_H,AM_UP_OUT MOV A,PLLAM_BUF0 CJNE A,#AM_MAX_L,AM_UP_OUT LJMP AM_UP_MIN AM_UP_OUT: CLR C MOV A,PLLAM_BUF0 ADDC A,#10H MOV PLLAM_BUF0,A MOV A,PLLAM_BUF1 ADDC A,#00H MOV PLLAM_BUF1,A MOV PLLDRL,PLLAM_BUF0 ;Set PLLDRL Hz Low MOV PLLDRH,PLLAM_BUF1 ;Set PLLDRH Hz High RET AM_UP_MIN: MOV PLLAM_BUF0,#AM_MIN_L ;Set PLLDRL 531KHz Low MOV PLLDRL,PLLAM_BUF0 MOV PLLAM_BUF1,#AM_MIN_H ;Set PLLDRH 531KHz High MOV PLLDRH,PLLAM_BUF1 RET AM_DOWN: MOV A,PLLDRH CJNE A,#AM_MIN_H,AM_DN_OUT MOV A,PLLDRL CJNE A,#AM_MIN_L,AM_DN_OUT LJMP AM_DN_MAX AM_DN_OUT: CLR C MOV A,PLLAM_BUF0 SUBB A,#10H MOV PLLAM_BUF0,A MOV A,PLLAM_BUF1 SUBB A,#00H MOV PLLAM_BUF1,A MOV PLLDRL,PLLAM_BUF0 ;Set PLLDRL Hz Low MOV PLLDRH,PLLAM_BUF1 ;Set PLLDRH Hz High RET AM_DN_MAX: MOV PLLAM_BUF0,#AM_MAX_L ;Set PLLDRL 1602KHz Low MOV PLLDRL,PLLAM_BUF0 MOV PLLAM_BUF1,#AM_MAX_H ;Set PLLDRH 1602KHz High MOV PLLDRH,PLLAM_BUF1 RET ;----- SM Check ----- SM_CHECK: MOV A,ADCCON CLR EA MOV ADCCON,#11111010B ;01011010B ;ADC port ON=1,Select ch=6,START=1 NOP ; debug routine ******** ; PUSH P_1 ; MOV P_1,#55H ; MOV P_1,#0A2H ; MOV P_1,ADCCON ; POP P_1 ; debug end ******* NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP SETB EA ADC_CHECK: MOV A,ADCCON ANL A,#00000001B JZ ADC_CHECK JNB FM_AM_FG,ADC_AM MOV A,#070H ;0B0H ;FM SM Minimum Value ***** AJMP ADC_FM ADC_AM: MOV A,#50H ;37H ;AM SM Minimum Value ***** ADC_FM: CLR C SUBB A,ADCDR MOV A,ADCDR ; debug routine ******** ; PUSH P_1 ; MOV P_1,#55H ; MOV P_1,#0A1H ; mov P_1,ADCDR ; POP P_1 ; debug end ******* MOV SM_ON,C RET ; ;----- PLL Unlock Check ----- PLL_UNLK: MOV A,PLLMOD CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M PLL_UNLP: JB TIME_FG,UNLK_END MOV A,PLLMOD ANL A,#00001100B ;Select Unlock F/F JNZ PLL_UNLP ;Check Locking UNLK_END: RET ;----- IF Read ----- IF_TEST: CLR IF_FG ;INTIFC interrupt flag JNB FM_AM_FG,IF_AM_SET ; MOV IFCMOD,#01100010B ;8ms MOV IFCMOD,#01100110B ;32ms LJMP IF_START IF_AM_SET: ; MOV IFCMOD,#01100011B ;8ms MOV IFCMOD,#01100111B ;32ms IF_START: ; MOV R0,#0FFH ; DJNZ R0,$ ; MOV A,IFCMOD ;Cleared IFCJR (Flag ended IF Counter) ; ORL IFCMOD,#01000000B ;Start IF counter,Reset IF Counter ; MOV R1,20H ;Delay 32ms ;DELAY_LP: MOV R0,#0FFH ; DJNZ R0,$ ; DJNZ R1,DELAY_LP ;Delay Loop 32ms ;IF_READ: MOV A,IFCMOD ; ANL A,#10000000B ;Check ended IF counting ; JZ IF_READ JNB IF_FG,$ JNB FM_AM_FG,IF_AM_TEST IF_FM_TEST: MOV A,IFCDR2 CJNE A,#IF_FM_MAX2,IF_ERR_02 AJMP IF_MAX IF_ERR_02: LJMP IF_ERROR ;Error IF_MAX: MOV R1,#IF_FM_MAX1 ; FM :IF MAXIMUM HIGH MOV R0,#IF_FM_MAX0 ; FM :IF MAXIMUM LOW MOV R3,#IF_FM_MIN1 MOV R2,#IF_FM_MIN0 ; FM :MAX VALUE - MIN VALUE = f(if) LJMP IF_CAL ; AM IF VALUE IF_AM_TEST: MOV A,IFCDR2 CJNE A,#0F0H,IF_ERR_00 SJMP IF_MAX1 IF_ERR_00: LJMP IF_ERROR ;Error IF_MAX1: MOV R1,#IF_AM_MAX1 ; AM :IF MAXIMUM HIGH MOV R0,#IF_AM_MAX0 ; AM :IF MAXIMUM LOW MOV R3,#IF_AM_MIN1 ; AM :IF MINIMUM HIGH MOV R2,#IF_AM_MIN0 ; AM :IF MINIMUM LOW IF_CAL: CLR C MOV A,R0 SUBB A,IFCDR0 MOV A,R1 SUBB A,IFCDR1 ; MAX VALUE - IF CNT JC IF_ERROR ; if C=1, MAX VALUE < IF CNT MOV A,IFCDR0 SUBB A,R2 MOV A,IFCDR1 SUBB A,R3 ; MIN VALUE - IF CNT JC IF_ERROR ; if C=1, IF CNT < MIN VALUE SETB IF_OK_FG ;Passed RET ; IF_ERROR: CLR IF_OK_FG ;Error RET ;----- BSM FM Data Store ----- STORE_BSM_FM: MOV A,FM_MEM1L CJNE A,PLLFM_BUF0,SM_CMP1 MOV A,FM_MEM1H CJNE A,PLLFM_BUF1,SM_CMP1 LJMP STORE_FM_END SM_CMP1: CLR C MOV A,SM_MAX1 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM1 LJMP SHIFT_FM2 STORE_FM1: MOV SM_MAX6,SM_MAX5 MOV FM_MEM6L,FM_MEM5L MOV FM_MEM6H,FM_MEM5H MOV SM_MAX5,SM_MAX4 MOV FM_MEM5L,FM_MEM4L MOV FM_MEM5H,FM_MEM4H MOV SM_MAX4,SM_MAX3 MOV FM_MEM4L,FM_MEM3L MOV FM_MEM4H,FM_MEM3H MOV SM_MAX3,SM_MAX2 MOV FM_MEM3L,FM_MEM2L MOV FM_MEM3H,FM_MEM2H MOV SM_MAX2,SM_MAX1 MOV FM_MEM2L,FM_MEM1L MOV FM_MEM2H,FM_MEM1H MOV SM_MAX1,ADCDR MOV FM_MEM1L,PLLFM_BUF0 MOV FM_MEM1H,PLLFM_BUF1 LJMP STORE_FM_END SHIFT_FM2: MOV A,FM_MEM2L CJNE A,PLLFM_BUF0,SM_CMP2 MOV A,FM_MEM2H CJNE A,PLLFM_BUF1,SM_CMP2 LJMP STORE_FM_END SM_CMP2: CLR C MOV A,SM_MAX2 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM2 LJMP SHIFT_FM3 STORE_FM2: MOV SM_MAX6,SM_MAX5 MOV FM_MEM6L,FM_MEM5L MOV FM_MEM6H,FM_MEM5H MOV SM_MAX5,SM_MAX4 MOV FM_MEM5L,FM_MEM4L MOV FM_MEM5H,FM_MEM4H MOV SM_MAX4,SM_MAX3 MOV FM_MEM4L,FM_MEM3L MOV FM_MEM4H,FM_MEM3H MOV SM_MAX3,SM_MAX2 MOV FM_MEM3L,FM_MEM2L MOV FM_MEM3H,FM_MEM2H MOV SM_MAX2,ADCDR MOV FM_MEM2L,PLLFM_BUF0 MOV FM_MEM2H,PLLFM_BUF1 LJMP STORE_FM_END SHIFT_FM3: MOV A,FM_MEM3L CJNE A,PLLFM_BUF0,SM_CMP3 MOV A,FM_MEM3H CJNE A,PLLFM_BUF1,SM_CMP3 LJMP STORE_FM_END SM_CMP3: CLR C MOV A,SM_MAX3 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM3 LJMP SHIFT_FM4 STORE_FM3: MOV SM_MAX6,SM_MAX5 MOV FM_MEM6L,FM_MEM5L MOV FM_MEM6H,FM_MEM5H MOV SM_MAX5,SM_MAX4 MOV FM_MEM5L,FM_MEM4L MOV FM_MEM5H,FM_MEM4H MOV SM_MAX4,SM_MAX3 MOV FM_MEM4L,FM_MEM3L MOV FM_MEM4H,FM_MEM3H MOV SM_MAX3,ADCDR MOV FM_MEM3L,PLLFM_BUF0 MOV FM_MEM3H,PLLFM_BUF1 LJMP STORE_FM_END SHIFT_FM4: MOV A,FM_MEM4L CJNE A,PLLFM_BUF0,SM_CMP4 MOV A,FM_MEM4H CJNE A,PLLFM_BUF1,SM_CMP4 LJMP STORE_FM_END SM_CMP4: CLR C MOV A,SM_MAX4 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM4 LJMP SHIFT_FM5 STORE_FM4: MOV SM_MAX6,SM_MAX5 MOV FM_MEM6L,FM_MEM5L MOV FM_MEM6H,FM_MEM5H MOV SM_MAX5,SM_MAX4 MOV FM_MEM5L,FM_MEM4L MOV FM_MEM5H,FM_MEM4H MOV SM_MAX4,ADCDR MOV FM_MEM4L,PLLFM_BUF0 MOV FM_MEM4H,PLLFM_BUF1 LJMP STORE_FM_END SHIFT_FM5: MOV A,FM_MEM5L CJNE A,PLLFM_BUF0,SM_CMP5 MOV A,FM_MEM5H CJNE A,PLLFM_BUF1,SM_CMP5 LJMP STORE_FM_END SM_CMP5: CLR C MOV A,SM_MAX5 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM5 LJMP SHIFT_FM6 STORE_FM5: MOV SM_MAX6,SM_MAX5 MOV FM_MEM6L,FM_MEM5L MOV FM_MEM6H,FM_MEM5H MOV SM_MAX5,ADCDR MOV FM_MEM5L,PLLFM_BUF0 MOV FM_MEM5H,PLLFM_BUF1 LJMP STORE_FM_END SHIFT_FM6: CLR C MOV A,SM_MAX6 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_FM6 SJMP STORE_FM_END STORE_FM6: MOV SM_MAX6,ADCDR MOV FM_MEM6L,PLLFM_BUF0 MOV FM_MEM6H,PLLFM_BUF1 STORE_FM_END: RET ;----- BSM AM Data Store ----- STORE_BSM_AM: MOV A,AM_MEM1 CJNE A,PLLAM_BUF0,AMSM_CMP1 MOV A,AM_MEM1H CJNE A,PLLAM_BUF1,AMSM_CMP1 LJMP STORE_AM_END AMSM_CMP1: CLR C MOV A,SM_MAX1 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM1 LJMP SHIFT_AM2 STORE_AM1: MOV SM_MAX6,SM_MAX5 MOV AM_MEM6,AM_MEM5 MOV AM_MEM6H,AM_MEM5H MOV SM_MAX5,SM_MAX4 MOV AM_MEM5,AM_MEM4 MOV AM_MEM5H,AM_MEM4H MOV SM_MAX4,SM_MAX3 MOV AM_MEM4,AM_MEM3 MOV AM_MEM4H,AM_MEM3H MOV SM_MAX3,SM_MAX2 MOV AM_MEM3,AM_MEM2 MOV AM_MEM3H,AM_MEM2H MOV SM_MAX2,SM_MAX1 MOV AM_MEM2,AM_MEM1 MOV AM_MEM2H,AM_MEM1H MOV SM_MAX1,ADCDR MOV AM_MEM1,PLLAM_BUF0 MOV AM_MEM1H,PLLAM_BUF1 LJMP STORE_AM_END SHIFT_AM2: MOV A,AM_MEM2 CJNE A,PLLAM_BUF0,AMSM_CMP2 MOV A,AM_MEM2H CJNE A,PLLAM_BUF1,AMSM_CMP2 LJMP STORE_AM_END AMSM_CMP2: CLR C MOV A,SM_MAX2 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM2 LJMP SHIFT_AM3 STORE_AM2: MOV SM_MAX6,SM_MAX5 MOV AM_MEM6,AM_MEM5 MOV AM_MEM6H,AM_MEM5H MOV SM_MAX5,SM_MAX4 MOV AM_MEM5,AM_MEM4 MOV AM_MEM5H,AM_MEM4H MOV SM_MAX4,SM_MAX3 MOV AM_MEM4,AM_MEM3 MOV AM_MEM4H,AM_MEM3H MOV SM_MAX3,SM_MAX2 MOV AM_MEM3,AM_MEM2 MOV AM_MEM3H,AM_MEM2H MOV SM_MAX2,ADCDR MOV AM_MEM2,PLLAM_BUF0 MOV AM_MEM2H,PLLAM_BUF1 LJMP STORE_AM_END SHIFT_AM3: MOV A,AM_MEM3 CJNE A,PLLAM_BUF0,AMSM_CMP3 MOV A,AM_MEM3H CJNE A,PLLAM_BUF1,AMSM_CMP3 LJMP STORE_AM_END AMSM_CMP3: CLR C MOV A,SM_MAX3 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM3 LJMP SHIFT_AM4 STORE_AM3: MOV SM_MAX6,SM_MAX5 MOV AM_MEM6,AM_MEM5 MOV AM_MEM6H,AM_MEM5H MOV SM_MAX5,SM_MAX4 MOV AM_MEM5,AM_MEM4 MOV AM_MEM5H,AM_MEM4H MOV SM_MAX4,SM_MAX3 MOV AM_MEM4,AM_MEM3 MOV AM_MEM4H,AM_MEM3H MOV SM_MAX3,ADCDR MOV AM_MEM3,PLLAM_BUF0 MOV AM_MEM3H,PLLAM_BUF1 LJMP STORE_AM_END SHIFT_AM4: MOV A,AM_MEM4 CJNE A,PLLAM_BUF0,AMSM_CMP4 MOV A,AM_MEM4H CJNE A,PLLAM_BUF1,AMSM_CMP4 LJMP STORE_AM_END AMSM_CMP4: CLR C MOV A,SM_MAX4 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM4 LJMP SHIFT_AM5 STORE_AM4: MOV SM_MAX6,SM_MAX5 MOV AM_MEM6,AM_MEM5 MOV AM_MEM6H,AM_MEM5H MOV SM_MAX5,SM_MAX4 MOV AM_MEM5,AM_MEM4 MOV AM_MEM5H,AM_MEM4H MOV SM_MAX4,ADCDR MOV AM_MEM4,PLLAM_BUF0 MOV AM_MEM4H,PLLAM_BUF1 LJMP STORE_AM_END SHIFT_AM5: MOV A,AM_MEM5 CJNE A,PLLAM_BUF0,AMSM_CMP5 MOV A,AM_MEM5H CJNE A,PLLAM_BUF1,AMSM_CMP5 LJMP STORE_AM_END AMSM_CMP5: CLR C MOV A,SM_MAX5 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM5 LJMP SHIFT_AM6 STORE_AM5: MOV SM_MAX6,SM_MAX5 MOV AM_MEM6,AM_MEM5 MOV AM_MEM6H,AM_MEM5H MOV SM_MAX5,ADCDR MOV AM_MEM5,PLLAM_BUF0 MOV AM_MEM5H,PLLAM_BUF1 LJMP STORE_AM_END SHIFT_AM6: CLR C MOV A,SM_MAX6 SUBB A,ADCDR ;Compare current SM with SM_MAX6 JC STORE_AM6 SJMP STORE_AM_END STORE_AM6: MOV SM_MAX6,ADCDR MOV AM_MEM6,PLLAM_BUF0 MOV AM_MEM6H,PLLAM_BUF1 STORE_AM_END: RET ;================================== ; CDC PLAY ;================================== ;CDC PLAY ----------- CDC_PLAY: MOV R0,0AFH T20M_CHK2: MOV R1,0FFH T20M_CHK1: MOV R2,0FFH T20M_CHK: JB CDC_T20M_FG,CDC_PSET DJNZ R2,T20M_CHK DJNZ R1,T20M_CHK1 DJNZ R0,T20M_CHK2 ;Exit CDC hang-up LJMP CDC_PLAY_END CDC_PSET: MOV R0,#OLD_TEXT0 MOV @R0,CDC_TEXT0 INC R0 MOV @R0,CDC_TEXT1 INC R0 MOV @R0,CDC_TEXT2 INC R0 MOV @R0,CDC_TEXT3 INC R0 MOV @R0,CDC_TEXT4 SETB CDC_TXRX_FG MOV CDC_TX_CNT0,#00H CLR CDC_COM1_FG MOV TH1,#TERM20M MOV TL1,#00H MOV A,CDC_COM0 CPL A MOV CDC_COM1,A PUSH SFRPG ;| MOV SFRPG,#SFRPG0 ;| SETB TR1 ;| POP SFRPG ;| ; MOV P5MOD,#00000000B ;OUT mode port 5 ; MOV P4MOD,#00110101B ;Output mode port 4.1(CDCDO) ; MOV P4MOD,#00110111B ;Input mode port 4.1(CDCDO) ; CLR P_CDCDO CLR CDC_T20M_FG CDC_PLAY_CHK: ; MOV R0,#DELAY150M_VAL ;CDC_D150M: JNB TMFG_8M,$ ; MOV TMFG_8M,#0 ; DJNZ R0,CDC_D150M ;Delay 150ms ; LCALL DELAY240M ; JB CDC_ERR_FG,CDC_PLAY_CHK MOV A,TEXT_NUM ADD A,CDC_TEXT0 MOV R1,A MOV A,@R1 ANL A,CMP_ANL MOV CDC_TEXT,A MOV A,TEXT_NUM ADD A,#OLD_TEXT0 MOV R0,A MOV A,@R0 ANL A,CMP_ANL CJNE A,CDC_TEXT,CDC_PLAY_END ; Compare CDC_TEXT0 = TEST0_OLD MOV A,CDC_COM1 CPL A MOV CDC_COM0,A ; LJMP CDC_PLAY CDC_PLAY_END: RET ;--- CDC COMMAND DATA ------ COM_PWRON: MOV CDC_COM0,#01H MOV TEXT_NUM,#00H MOV CMP_ANL,#00000010B RET COM_PWROFF: MOV CDC_COM0,#02H MOV TEXT_NUM,#00H MOV CMP_ANL,#00000010B RET COM_RPTON: MOV CDC_COM0,#0BH MOV TEXT_NUM,#02H MOV CMP_ANL,#00010000B RET COM_RPTOFF: MOV CDC_COM0,#0EH MOV TEXT_NUM,#02H MOV CMP_ANL,#00010000B RET COM_DISCUP: MOV CDC_COM0,#038H MOV TEXT_NUM,#03H MOV CMP_ANL,#01110000B RET COM_DISCDN: MOV CDC_COM0,#039H MOV TEXT_NUM,#03H MOV CMP_ANL,#01110000B RET COM_TRKUP: MOV CDC_COM0,#04AH MOV TEXT_NUM,#04H MOV CMP_ANL,#11111111B RET COM_TRKDN: MOV CDC_COM0,#04BH MOV TEXT_NUM,#04H MOV CMP_ANL,#11111111B RET ;CDC EXT0 Interrupt ----- EXT0_INT: PUSH PSW PUSH ACC PUSH SFRPG PUSH RDPG PUSH WRPG MOV RDPG,#00H MOV WRPG,#00H CDC_INT: JB CDC_TXRX_FG,CDC_TXD CLR CDC_T20M_FG SETB CDC_ERR_FG LCALL CDC_CAL ;Receiver routin MOV TH1,#00H MOV TL1,#00H LJMP EXT0_INT_END CDC_TXD: SETB CDC_HI_CPL ; MOV TH1,#0FEH ;F1H ;0.5ms -> 12CH MOV TL1,#0F8H CLR CDC_T20M_FG EXT0_INT_END: POP WRPG POP RDPG POP SFRPG POP ACC POP PSW RETI ;CDC TIMER1 Interrupt ----- TIMER1_INT: PUSH PSW PUSH ACC PUSH SFRPG PUSH RDPG PUSH WRPG MOV SFRPG,#SFRPG1 MOV RDPG,#00H MOV WRPG,#00H TXRX_CHK: JNB CDC_TXRX_FG,TERM_20M ; MOV P5MOD,#00H ;Output mode port 5 ;00H MOV P4MOD,#00110101B ;Output mode port 4.1(CDCDO) ; MOV P4MOD,#00110111B ;Input mode port 4.1(CDCDO) JB CDC_HI_CPL,CDC_HI SETB CDC_HI_CPL CLR P_CDCDO LJMP CDC_TX_D0 ;Count low level data CDC_HI: CLR CDC_HI_CPL SETB P_CDCDO JB CDC_COM1_FG,CDC_TX_COM1 CDC_TX_COM0: MOV A,CDC_TX_CNT0 CJNE A,#08H,CDC_OUT MOV CDC_TX_CNT0,#00H SETB CDC_COM1_FG MOV CDC_COM0,CDC_COM1 CDC_TX_COM1: MOV A,CDC_TX_CNT0 CJNE A,#08H,CDC_OUT MOV CDC_TX_CNT0,#00H CLR CDC_COM1_FG CLR CDC_TXRX_FG MOV TH1,#TERM20M ; MOV P5MOD,#00000010B ;Input mode port 5.1 ;02H ; MOV P4MOD,#00110101B ;Output mode port 4.1(CDCDO) MOV P4MOD,#00110111B ;Input mode port 4.1(CDCDO) LJMP CDC_T1_END CDC_OUT: INC CDC_TX_CNT0 CDC_OUT7: CLR C MOV A,CDC_COM0 RRC A MOV CDC_COM0,A JC CDC_TX_D1 CDC_TX_D0: MOV TH1,#0FEH ;F1H ;0.5ms -> 012CH MOV TL1,#0F8H ;EFH LJMP CDC_T1_END CDC_TX_D1: MOV TH1,#0FBH ;C7H ;2ms -> 04B0H MOV TL1,#070H ;BFH LJMP CDC_T1_END TERM_20M: MOV TH1,#TERM20M MOV CDC_CNT0,#00H MOV CDC_CNT1,#00H SETB CDC_T20M_FG CLR C MOV A,CDC_T20_CNT SUBB A,#09H JNC CDC_T20_OV CLR CDC_ERR_FG INC CDC_T20_CNT AJMP CDC_T1_END CDC_T20_OV: SETB CDC_ERR_FG CDC_T1_END: POP WRPG POP RDPG POP SFRPG POP ACC POP PSW RETI ;CDC Command Transfer ----- ;CDC Receiver ----- CDC_CAL: MOV CDC_BUF_TH1,TH1 CLR C MOV A,CDC_BUF_TH1 ;TH1 value SUBB A,#CDC_D0_MIN ;CDC_D0_MIN = 1 JNC D0MAX_CHK LJMP CDC_RX_ERR D0MAX_CHK: CLR C MOV A,CDC_BUF_TH1 SUBB A,#CDC_D0_MAX ;CDC_D0_MAX = 3 JNC D1MIN_CHK CLR C SJMP CDC_DA_ROT D1MIN_CHK: CLR C MOV A,CDC_BUF_TH1 SUBB A,#CDC_D1_MIN ;CDC_D1_MIN = 4 JNC D1MAX_CHK LJMP CDC_RX_ERR D1MAX_CHK: CLR C MOV A,CDC_BUF_TH1 SUBB A,#CDC_D1_MAX ;CDC_D1_MAX = 7 JC CDC_DA_ROT LJMP CDC_RX_ERR CDC_DA_ROT: MOV A,CDC_TEXT RRC A MOV CDC_TEXT,A MOV A,CDC_CNT1 CJNE A,#07H,CDC_R1 MOV CDC_CNT1,#00H LJMP CDC_CAL_END CDC_R1: INC CDC_CNT1 LJMP CDC_RXD_END CDC_CAL_END: MOV A,CDC_CNT0 CDC_RXD0: CJNE A,#00H,CDC_RXD1 MOV CDC_TEXT0,CDC_TEXT LJMP CDC_INC0 CDC_RXD1: CJNE A,#01H,CDC_RXD2 MOV CDC_TEXT1,CDC_TEXT LJMP CDC_INC0 CDC_RXD2: CJNE A,#02H,CDC_RXD3 MOV CDC_TEXT2,CDC_TEXT LJMP CDC_INC0 CDC_RXD3: CJNE A,#03H,CDC_RXD4 MOV CDC_TEXT3,CDC_TEXT LJMP CDC_INC0 CDC_RXD4: CJNE A,#04H,CDC_RXD5 MOV CDC_TEXT4,CDC_TEXT LJMP CDC_INC0 CDC_RXD5: CJNE A,#05H,CDC_RXD6 MOV CDC_TEXT5,CDC_TEXT LJMP CDC_INC0 CDC_RXD6: CJNE A,#06H,CDC_RXD7 MOV CDC_TEXT6,CDC_TEXT LJMP CDC_INC0 CDC_RXD7: CJNE A,#07H,CDC_RXD8 MOV CDC_TEXT7,CDC_TEXT LJMP CDC_INC0 CDC_RXD8: CJNE A,#08H,CDC_RX_ERR MOV CDC_TEXT8,CDC_TEXT MOV CDC_CNT0,#00H CLR CDC_T20_CNT CHK_SUN: MOV R0,#00H MOV R1,CDC_TEXT0 LCALL ADD_SUM MOV R1,CDC_TEXT1 LCALL ADD_SUM MOV R1,CDC_TEXT2 LCALL ADD_SUM MOV R1,CDC_TEXT3 LCALL ADD_SUM MOV R1,CDC_TEXT4 LCALL ADD_SUM MOV R1,CDC_TEXT5 LCALL ADD_SUM MOV R1,CDC_TEXT6 LCALL ADD_SUM MOV R1,CDC_TEXT7 LCALL ADD_SUM ADD A,CDC_TEXT8 ANL A,#0FH MOV R0,A MOV A,CDC_TEXT8 SWAP A ANL A,#0FH CJNE A,00H,CDC_RX_ERR ;00H = R0 address CLR CDC_ERR_FG LJMP CDC_RXD_END CDC_INC0: INC CDC_CNT0 LJMP CDC_RXD_END CDC_RX_ERR: SETB CDC_ERR_FG CDC_RXD_END: RET ADD_SUM: MOV A,R1 SWAP A ADD A,R1 ADD A,R0 MOV R0,A RET ; ;##### TEST ##### ; PUSH ACC ; PUSH P_0 ; MOV P_0,TH1 ; MOV P_0,TL1 ; POP P_0 ; POP ACC ; ;##### TEST ##### ;============================================= ; TIME PROCESE ROUTINE ;============================================= ;==== DELAY ROUTINE ===== DELAY10M: MOV R1,#0BH DELAY_L10: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L10 RET DELAY20M: MOV R1,#017H DELAY_L20: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L20 RET DELAY30M: MOV R1,#024H DELAY_L30: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L30 RET DELAY50M: MOV R1,#03BH DELAY_L50: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L50 RET DELAY60M: MOV R1,#046H DELAY_L60: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L60 RET DELAY80M: MOV R1,#05DH DELAY_L80: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L80 RET DELAY100M: MOV R1,#075H DELAY_L100: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L100 RET DELAY120M: MOV R1,#08CH DELAY_L120: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L120 RET DELAY150M: MOV R1,#0B0H DELAY_L150: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L150 RET DELAY200M: MOV R1,#0EAH DELAY_L200: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L200 RET DELAY240M: MOV R2,#002H MOV R1,#01AH DELAY_L240: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L240 DJNZ R2,DELAY_L240 RET DELAY260M: MOV R2,#002H MOV R1,#031H DELAY_L260: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L260 DJNZ R2,DELAY_L260 RET DELAY300M: MOV R2,#002H MOV R1,#060H DELAY_L300: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L300 DJNZ R2,DELAY_L300 RET DELAY400M: MOV R2,#002H MOV R1,#0D5H DELAY_L400: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L400 DJNZ R2,DELAY_L400 RET DELAY450M: MOV R2,#003H MOV R1,#011H DELAY_L450: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L450 DJNZ R2,DELAY_L450 RET DELAY500M: MOV R2,#003H MOV R1,#04AH DELAY_L500: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L500 DJNZ R2,DELAY_L500 RET DELAY670M: MOV R2,#004H MOV R1,#011H DELAY_L670: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L670 DJNZ R2,DELAY_L670 RET DELAY1000M: MOV R2,#005H MOV R1,#094H DELAY_L1000: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L1000 DJNZ R2,DELAY_L1000 RET DELAY1020M: MOV R2,#005H MOV R1,#0ACH DELAY_L1020: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L1020 DJNZ R2,DELAY_L1020 RET DELAY1080M: MOV R2,#005H MOV R1,#0F2H DELAY_L1080: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L1080 DJNZ R2,DELAY_L1080 RET DELAY1270M: MOV R2,#006H MOV R1,#0D1H DELAY_L1270: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L1270 DJNZ R2,DELAY_L1270 RET DELAY1800M: MOV R2,#009H MOV R1,#03EH DELAY_L1800: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,DELAY_L1800 DJNZ R2,DELAY_L1800 RET ;------------------------------- ; 4 msec ROUTINE ;------------------------------- ; ;---------< 4 msec >--------- ; TM04M_RTN: DEC MUTE500M ; DECREMENT MUTE TIME ;------------------------------- ; 100 msec ROUTINE ;------------------------------- MUTE100: CLR P_MUTE MOV R1,#09FH LP_MUT100: MOV R0,#0FFH DJNZ R0,$ DJNZ R1,LP_MUT100 RET ;------------------------------- ; MUTE ROUTINE ;------------------------------- MUTE_RTN: JNB MUTEFG,MUTE_END MOV A,MUTE500M JNZ MUTE_END ; 500msec ? CLR MUTEFG SETB P_MUTE ; OFF MUTE MUTE_END: NOP RET ;=========================================== ; LCD Display ;=========================================== ;----- LCD Data Format ----- LCD_FM_PLAY: MOV LCD_BUF0,#LCDD0_FM ;FM JNB P_STIN,STEREO_SET ANL LCD_BUF0,#LCDND0_ST ;FM Stereo OFF LJMP LCD_FM_B1 STEREO_SET: ORL LCD_BUF0,#LCDD0_ST ;FM Stereo ON LCD_FM_B1: MOV LCD_BUF1,#LCDD_BLANK ; MOV LCD_BUF2,#LCDD_BLANK MOV A,PLLDRL CLR C SUBB A,#FM_MIN_L ;87.5MHz Low MOV STEP_BUF0,A ;Compare current FM With 87.5MHz MOV STEP_BUF1,#00H LCALL CONV_DEC CLR C MOV A,STEP_BUF0 ADDC A,#75H ;Add 7.5 part of 87.5MHz DA A MOV STEP_BUF0,A MOV A,STEP_BUF1 ADDC A,#08H ;Add 8 part of 87.5MHz DA A MOV STEP_BUF1,A ANL A,#0F0H ;LCD4 table address SWAP A JZ BUF3_FSET ;0 --> BLANK MOV DPTR,#100H MOVC A,@A+DPTR ;Read LCD4 data table ORL LCD_BUF2,A ; Update LCD4 BUF3_FSET: MOV A,STEP_BUF1 ANL A,#0FH ;LCD5 table address MOV DPTR,#110H MOVC A,@A+DPTR MOV LCD_BUF3,A ;8 of 87.5MHz MOV A,STEP_BUF0 ANL A,#0F0H ;LCD6A table address SWAP A MOV R0,A MOV DPTR,#120H MOVC A,@A+DPTR ;Read LCD6A data table MOV LCD_BUF4,A ; Update LCD6A MOV A,R0 MOV DPTR,#130H MOVC A,@A+DPTR ;Read LCD6B data table MOV LCD_BUF5,A ; Update LCD6A ORL LCD_BUF5,#LCDD5_P ;Point (".") MOV A,STEP_BUF0 ANL A,#0FH ;LCD7A table address MOV R0,A MOV DPTR,#140H MOVC A,@A+DPTR ORL LCD_BUF5,A MOV A,R0 MOV DPTR,#150H MOVC A,@A+DPTR MOV LCD_BUF6,A ;LCD7B table ;PD=1,0,0 MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK LJMP LCD_TRANS LCD_AM_PLAY: MOV LCD_BUF0,#LCDD0_AM ;FM MOV LCD_BUF1,#LCDD_BLANK ; MOV LCD_BUF2,#LCDD_BLANK MOV A,PLLDRL ANL A,#0F0H SWAP A MOV B,A MOV A,PLLDRH ANL A,#0FH SWAP A ORL A,B CLR C SUBB A,#06DH ;531KHz Low MOV B,#09H MUL AB MOV STEP_BUF0,A ;Compare current AM With 531KHz MOV STEP_BUF1,B LCALL CONV_DEC CLR C CLR AC MOV A,STEP_BUF0 ADD A,#31H ;Add 31 part of 531KHz DA A MOV STEP_BUF0,A MOV A,STEP_BUF1 CLR AC ADDC A,#00H DA A CLR AC ADD A,#05H ;Add 5 part of 531KHz DA A MOV STEP_BUF1,A ANL A,#0F0H ;LCD4 table address SWAP A JZ BUF3_ASET ;0 --> BLANK MOV DPTR,#100H MOVC A,@A+DPTR ;Read LCD4 data table ORL LCD_BUF2,A ; Update LCD4 BUF3_ASET: MOV A,STEP_BUF1 ANL A,#0FH ;LCD5 table address MOV DPTR,#110H MOVC A,@A+DPTR MOV LCD_BUF3,A ;8 of 87.5MHz MOV A,STEP_BUF0 ANL A,#0F0H ;LCD6A table address SWAP A MOV R0,A MOV DPTR,#120H MOVC A,@A+DPTR ;Read LCD6A data table MOV LCD_BUF4,A ; Update LCD6A MOV A,R0 MOV DPTR,#130H MOVC A,@A+DPTR ;Read LCD6B data table MOV LCD_BUF5,A ; Update LCD6A MOV A,STEP_BUF0 ANL A,#0FH ;LCD7A table address MOV R0,A MOV DPTR,#140H MOVC A,@A+DPTR ORL LCD_BUF5,A MOV A,R0 MOV DPTR,#150H MOVC A,@A+DPTR MOV LCD_BUF6,A ;LCD7B table ;PD=1,0,0 MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK LJMP LCD_TRANS ;----- LCD Tape Play ----- LCD_TAPE_PLAY: MOV LCD_BUF0,#LCDD_BLANK JNB P_DB,TLCD1 MOV LCD_BUF0,#LCDD0_DOLBY TLCD1: MOV LCD_BUF1,#LCDD_BLANK MOV A,TAPE_MODE CJNE A,#TM_FFF,TLCD2 AJMP TLCD3 TLCD2: CJNE A,#TM_FAPS,TLCD4 TLCD3: MOV LCD_BUF2,#LCDD_BLANK ;" " MOV LCD_BUF3,#00001111B ;"F" MOV LCD_BUF4,#01001100B ;"F" MOV LCD_BUF5,#00000010B ;"F" Low bit MOV LCD_BUF6,#00100000B ; AJMP TLCD8 TLCD4: CJNE A,#TM_RFF,TLCD5 AJMP TLCD6 TLCD5: CJNE A,#TM_RAPS,TLCD7 TLCD6: MOV LCD_BUF2,#LCDD_BLANK ;" " MOV LCD_BUF3,#10101111B ;"R" MOV LCD_BUF4,#01011100B ;"E" MOV LCD_BUF5,#11110110B ;"W" MOV LCD_BUF6,#00100001B ;"W" high bit AJMP TLCD8 TLCD7: MOV LCD_BUF2,#01001111B ;"P" MOV LCD_BUF3,#00010101B ;"L" MOV LCD_BUF4,#11101100B ;"A" MOV LCD_BUF5,#11011010B ;"Y" MOV LCD_BUF6,#00100001B ;"Y" high bit TLCD8: MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK JB TAPEFR_FG,LCD_BPY MOV LCD_BUF8,#LCDD8_PY AJMP LCDT_END LCD_BPY: MOV LCD_BUF8,#LCDD8_BPY LCDT_END: LJMP LCD_TRANS ;----- LCD CD Changer Play ----- LCD_CDC_PLAY: MOV LCD_BUF0,#LCDD0_CD2 MOV LCD_BUF1,#LCDD1_CD3 MOV LCD_BUF2,#LCDD_BLANK MOV A,CDC_TEXT2 ANL A,#00010000B JZ CDC_TXT_3 ORL LCD_BUF2,#10000000B CDC_TXT_3: MOV A,CDC_TEXT3 ANL A,#01110000B SWAP A MOV DPTR,#110H MOVC A,@A+DPTR MOV LCD_BUF3,A MOV LCD_BUF4,#LCDD4_DISC CLR C CLR AC MOV A,CDC_TEXT4 DA A MOV R0,A ANL A,#0F0H CJNE A,#00H,LCD6_CNT MOV LCD_BUF5,#LCDD_BLANK AJMP LCD7_CNT LCD6_CNT: SWAP A MOV R1,A MOV DPTR,#120H MOVC A,@A+DPTR ;Read LCD6A data table ORL LCD_BUF4,A ; Update LCD6A MOV A,R1 MOV DPTR,#130H MOVC A,@A+DPTR ;Read LCD6B data table MOV LCD_BUF5,A ; Update LCD6A LCD7_CNT: MOV A,R0 ANL A,#0FH ;LCD7A table address MOV R1,A MOV DPTR,#140H MOVC A,@A+DPTR ORL LCD_BUF5,A MOV A,R1 MOV DPTR,#150H MOVC A,@A+DPTR MOV LCD_BUF6,A ;LCD7B table ;PD=1,0,0 MOV A,#LCDD6_TRACK ORL LCD_BUF6,A MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK ; MOV RDPG,#RDPG1 ; MOV A,HSEC_P1 ; MOV RDPG,#RDPG0 ; CJNE A,#00H,PY_ON ; SJMP LCDTRAN ;PY_ON: MOV LCD_BUF8,#LCDD8_PY LCDTRAN: LJMP LCD_TRANS ;----- LCD Clock Play ----- LCD_CLK_PLAY: MOV LCD_BUF0,#LCDD_BLANK MOV LCD_BUF1,#LCDD_BLANK MOV A,LCDCLK_FG CJNE A,#00H,LHOUR MOV RDPG,#RDPG1 MOV TEMP_BUF0,MINUTE_P1 MOV TEMP_BUF1,SEC_P1 MOV RDPG,#RDPG0 MOV LCD_BUF4,#LCDD4_COL LMINUT_END: SJMP LCD_SEG0 LHOUR: CJNE A,#01H,LMONTH MOV RDPG,#RDPG1 MOV TEMP_BUF0,HOUR_P1 MOV TEMP_BUF1,MINUTE_P1 MOV A,HDATE_P1 CJNE A,#00H,HOUR_PM MOV LCD_BUF1,#11001111B ;"A" SJMP HOUR_B4 HOUR_PM: MOV LCD_BUF1,#10001111B ;"P" HOUR_B4: MOV LCD_BUF4,#LCDD_BLANK MOV A,HSEC_P1 MOV RDPG,#RDPG0 ; CJNE A,#01H,LHOUR_END JNZ LHOUR_END MOV LCD_BUF4,#LCDD4_COL LHOUR_END: SJMP LCD_SEG0 LMONTH: CJNE A,#02H,LYEAR MOV RDPG,#RDPG1 MOV TEMP_BUF0,MONTH_P1 MOV TEMP_BUF1,DATE_P1 MOV RDPG,#RDPG0 MOV LCD_BUF1,#11011100B ;"d" MOV LCD_BUF4,#LCDD4_COL SJMP LCD_SEG0 LYEAR: MOV RDPG,#RDPG1 MOV TEMP_BUF0,YEAR1_P1 MOV TEMP_BUF1,YEAR0_P1 MOV RDPG,#RDPG0 MOV LCD_BUF1,#10001101B ;"y" MOV LCD_BUF4,#LCDD_BLANK LCD_SEG0: MOV LCD_BUF2,#LCDD_BLANK MOV STEP_BUF0,TEMP_BUF0 CLR C MOV R3,#00H MOV R4,#00H MOV R6,#00H LCALL STEP_LOW MOV A,STEP_BUF0 MOV R0,A ANL A,#0F0H CJNE A,#00H,LCD2_CLK AJMP LCD3_CLK LCD2_CLK: SWAP A MOV R1,A MOV DPTR,#100H MOVC A,@A+DPTR ;Read LCD6A data table ORL LCD_BUF2,A ; Update LCD6A LCD3_CLK: MOV LCD_BUF3,#LCDD_BLANK MOV A,R0 ANL A,#0FH ;LCD7A table address MOV R1,A MOV DPTR,#110H MOVC A,@A+DPTR ORL LCD_BUF3,A LCD4_CLK: MOV STEP_BUF0,TEMP_BUF1 CLR C MOV R3,#00H MOV R4,#00H MOV R6,#00H LCALL STEP_LOW MOV A,STEP_BUF0 MOV R0,A ANL A,#0F0H CJNE A,#00H,LCD6_CLK MOV R5,LCDCLK_FG CJNE R5,#02H,LCD6_CLK ;YERA(03H) MOV LCD_BUF5,#LCDD_BLANK AJMP LCD7_CLK LCD6_CLK: SWAP A MOV R1,A MOV DPTR,#120H MOVC A,@A+DPTR ;Read LCD6A data table ORL LCD_BUF4,A ; Update LCD6A LCD6A: MOV A,R1 MOV DPTR,#130H MOVC A,@A+DPTR ;Read LCD6B data table MOV LCD_BUF5,A ; Update LCD6A LCD7_CLK: MOV A,R0 ANL A,#0FH ;LCD7A table address MOV R1,A MOV DPTR,#140H MOVC A,@A+DPTR ORL LCD_BUF5,A MOV A,R1 MOV DPTR,#150H MOVC A,@A+DPTR MOV LCD_BUF6,A ;LCD7B table ;PD=1,0,0 MOV A,#LCDD_BLANK ORL LCD_BUF6,A MOV LCD_BUF7,#LCDD_BLANK MOV LCD_BUF8,#LCDD_BLANK LJMP LCD_TRANS ;----- LCD Data Transfer ----- LCD_TRANS: MOV A,#LCD_AD_VAL LCALL LCD_OUT SETB P_LCDCE MOV R3,#03H DJNZ R3,$ ;Delay time 10us MOV A,LCD_BUF0 ;LCD FM/AM Data 0 LCALL LCD_OUT MOV A,LCD_BUF1 ;LCD FM/AM Data 1 LCALL LCD_OUT MOV A,LCD_BUF2 LCALL LCD_OUT MOV A,LCD_BUF3 LCALL LCD_OUT MOV A,LCD_BUF4 LCALL LCD_OUT MOV A,LCD_BUF5 LCALL LCD_OUT MOV A,LCD_BUF6 LCALL LCD_OUT CLR P_LCDCL MOV R3,#01H DJNZ R3,$ ;Delay time 10us CLR P_LCDCE CLR P_LCDDI LCD_TRANS1: MOV A,#LCD_AD_VAL LCALL LCD_OUT SETB P_LCDCE MOV R3,#03H DJNZ R3,$ ;Delay time 10us MOV A,LCD_BUF7 ;LCD FM/AM Data 7 LCALL LCD_OUT MOV A,LCD_BUF8 ;LCD FM/AM Data 8 LCALL LCD_OUT MOV A,#LCDD_BLANK ;LCD FM/AM Data 9 LCALL LCD_OUT MOV A,#LCDD_BLANK ;LCD FM/AM Data 10 LCALL LCD_OUT MOV A,#LCDD_BLANK ;LCD FM/AM Data 11 LCALL LCD_OUT MOV A,#LCDD_BLANK ;LCD FM/AM Data 12 LCALL LCD_OUT MOV A,#LCDD13_END ;LCD FM/AM Data 13 LCALL LCD_OUT CLR P_LCDCL MOV R3,#01H DJNZ R3,$ ;Delay time 10us CLR P_LCDCE CLR P_LCDDI RET ;LCD Output LCD_OUT: MOV R4,#08H ;Shift 8bit value LCD_LOOP: RRC A MOV P_LCDDI,C MOV R3,#01H DJNZ R3,$ ;Delay time 10us SETB P_LCDCL MOV R3,#01H DJNZ R3,$ ;Delay time 10us CLR P_LCDCL DJNZ R4,LCD_LOOP ;Count data 8bit RET ;----- LCD Converter (HEX --> Decimal) ----- CONV_DEC: CLR C MOV R3,#00H MOV R4,#00H MOV R6,#00H MOV R7,#00H MOV R1,STEP_BUF1 MOV A,R1 JZ STEP_LOW STEP_HIGH: CLR C CLR AC MOV A,#56H ;"56" of 256 ;100H --> 256 Decimal ADD A,R6 DA A MOV R6,A CLR AC MOV A,#02H ;"2" of 256 ;100H --> 256 Decimal ADDC A,R7 DA A MOV R7,A DEC R1 CJNE R1,#00H,STEP_HIGH STEP_LOW: MOV A,STEP_BUF0 ANL A,#0FH ;Clear high bit CLR AC DA A ;Convert hex to decimal MOV R2,A ;R2 is low value(FM/AM) MOV A,STEP_BUF0 ANL A,#0F0H ;Clear low bit SWAP A JZ DEC_ADD MOV R3,#16H DEC A JZ DEC_ADD MOV R5,A LOOP_F: CLR C CLR AC MOV A,R3 ADD A,#16H ;Convert decimal value DA A CLR AC MOV R3,A ;R3 is High value(FM/AM) MOV A,R4 ADDC A,#00H DA A MOV R4,A ;R4 is Carry ADD value(FM/AM) DJNZ R5,LOOP_F DEC_ADD: CLR C CLR AC MOV A,R3 ADD A,R2 DA A MOV STEP_BUF0,A ;STEP_BUF0 Retun is Low value(FM/AM) CLR A CLR AC ADDC A,R4 DA A MOV STEP_BUF1,A ;STEP_BUF2 Retun is carry value(FM/AM) CLR A CLR AC MOV A,R6 ADD A,STEP_BUF0 DA A MOV STEP_BUF0,A CLR AC MOV A,R7 ADDC A,STEP_BUF1 DA A MOV STEP_BUF1,A RET ;----- VOLUME DATA Transfer ----- VOL_TRANS: MOV A,#VOL_AD LCALL VOL_OUT SETB P_VOLCE MOV A,VOL_BUF0 ;VOL EQ Data 0 LCALL VOL_OUT MOV A,VOL_BUF1 ;VOL EQ Data 1 LCALL VOL_OUT MOV A,#VOL_DATA2 LCALL VOL_OUT CLR P_VOLCE RET ;VOL Output VOL_OUT: MOV R4,#08H ;Shift 8bit value VOL_LOOP: RRC A MOV P_VOLDI,C NOP NOP SETB P_VOLCLK NOP NOP NOP CLR P_VOLCLK DJNZ R4,VOL_LOOP ;Count data 8bit RET ;===========================================; ; ; ; INTERRUPT SERVICE ROUTINE ; ; ; ;===========================================; ;----- TIMER 0 VECTOR ----- TIMER0: PUSH ACC PUSH PSW PUSH SFRPG PUSH RDPG PUSH WRPG MOV SFRPG,#SFRPG1 MOV RDPG,#00H MOV WRPG,#00H ; MOV TH0,#0EDH MOV TL0,#03FH ; 12C0H (ED3FH) = 8 msec SETB TMFG_8M DJNZ TIME_COUNT0,MUTE_TIME ;Delay TIME_VAL SETB TIME_FG MUTE_TIME: JNB MUTEFG,KEY_SCAN DJNZ MUTE500M,KEY_SCAN SETB P_MUTE ; MUTE OFF CLR MUTEFG ;62.5 x 8 =500msec KEY_SCAN: ; DJNZ KEY_TIM_CNT,TIMER0_END ; MOV KEY_TIM_CNT,#01H ORL P_1,#11111000B MOV A,P_2 ANL A,#11110000B JZ KEYSEL_CLR SETB KEYSEL_FG AJMP K_TIM_END KEYSEL_CLR: MOV KEY_BUF_FG,#00H ;Clear KEYSEL_FG, KEY_ERR_FG, KEY_ON_FG, ; KEY_LONG_FG and KEYFG MOV KEY_LONG_COUNT,#00H MOV KEY_COUNT,#KEY_COUNT_VAL K_TIM_END: ANL P_1,#00000111B TIMER0_END: POP WRPG POP RDPG POP SFRPG POP PSW POP ACC RETI ;----- TIMER4 VECTOR ----- ; ; REMOCON Control ; TIMER4: PUSH WRPG PUSH RDPG PUSH ACC PUSH PSW MOV WRPG,#WRPG0 MOV RDPG,#RDPG0 MOV REMO_COUNT0,#00H CLR REMOSTART_FG CLR REMOLEAD_FG CLR REMO_LTIME_FG MOV REMO_LCOUNT0,#00H CLR REMO_LONG_FG CLR REMO_LUP_FG TIMER4_END: POP PSW POP ACC POP RDPG pop WRPG RETI ;------ External Interrupt 5 ------ ; INTEX5: PUSH WRPG MOV WRPG,#WRPG0 SETB TEJECT_FG POP WRPG RETI ;----- TIMER3 VECTOR ----- ; ; Clock Timer ; ; Second, Minute, Hour, Month, Year ; TIMER3: PUSH ACC PUSH PSW PUSH SFRPG PUSH RDPG PUSH WRPG MOV SFRPG,#SFRPG1 MOV RDPG,#01H MOV WRPG,#01H CLK_CNT: INC T1COUNT_P1 MOV A,T1COUNT_P1 CJNE A,#04H,AJMP_T1END MOV T1COUNT_P1,#00H INC HSEC_P1 ;0.5 Sec MOV A,HSEC_P1 CJNE A,#02H,AJMP_T1END MOV HSEC_P1,#00H INC SEC_P1 MOV A,SEC_P1 CJNE A,#3CH,AJMP_T1END ;1 Sec MOV SEC_P1,#00H INC MINUTE_P1 MOV A,MINUTE_P1 CJNE A,#3CH,AJMP_T1END MOV MINUTE_P1,#00H INC HOUR_P1 MOV A,HOUR_P1 CJNE A,#0CH,HOUR_CNT INC HDATE_P1 MOV A,HDATE_P1 CJNE A,#02H,T1END MOV HDATE_P1,#00H SJMP DATE_CNT HOUR_CNT: CJNE A,#0DH,T1END MOV HOUR_P1,#01H SJMP T1END DATE_CNT: CLR C INC DATE_P1 ;Date MOV A,DATE_P1 SUBB A,#1DH ;#1CH - 28ÀÏ JC T1END MOV A,DATE_P1 CHK28: CJNE A,#1DH,CHK29 ;1EH - 28ÀÏ SJMP LEAP_Y CHK29: CJNE A,#1EH,CHK30 ;1FH - 29ÀÏ SJMP LEAP_Y CHK30: CJNE A,#1FH,CHK31 ;1EH - 30ÀÏ MOV A,MONTH_P1 CJNE A,#04H,CHK30_6D SJMP DATE_END CHK30_6D: CJNE A,#06H,CHK30_9D SJMP DATE_END CHK30_9D: CJNE A,#09H,CHK30_11D SJMP DATE_END CHK30_11D: CJNE A,#11H,CHK31 SJMP DATE_END CHK31: CJNE A,#20H,T1END ;1FH - 31ÀÏ SJMP DATE_END AJMP_T1END: SJMP T1END ; Long jump LEAP_Y: MOV A,#02H CJNE A,MONTH_P1,T1END ; MOV A,#0FFH L_YEAR0: INC A CJNE A,YEAR0_P1,YEAR1 SJMP DATE_END ;Leap year(À±³â 29ÀÏ) YEAR1: INC A CJNE A,YEAR0_P1,YEAR2 SJMP DATE_END YEAR2: INC A CJNE A,YEAR0_P1,YEAR3 SJMP DATE_END YEAR3: INC A CJNE A,YEAR0_P1,L_YEAR0 DATE_END: MOV DATE_P1,#01H INC MONTH_P1 MOV A,MONTH_P1 CJNE A,#0DH,T1END MOV MONTH_P1,#01H INC YEAR0_P1 T1END: POP WRPG POP RDPG POP SFRPG POP PSW POP ACC RETI ;==================================================== ; CLCOK SET CONTROL ; ; Clock Timer ; ; Second, Minute, Hour, Month, Year ; ;==================================================== CLK_UP0: PUSH RDPG PUSH WRPG MOV A,LCDCLK_FG MOV RDPG,#RDPG1 MOV WRPG,#WRPG1 SEC_UP0: CJNE A,#00H,MINUTE_UP0 INC SEC_P1 MOV A,SEC_P1 CJNE A,#3CH,SEC_UP0E ;1 Sec MOV SEC_P1,#00H SEC_UP0E: SJMP CLKUP0_END MINUTE_UP0: CJNE A,#01H,DATE_UP0 INC MINUTE_P1 MOV A,MINUTE_P1 CJNE A,#3CH,CLKUP0_END ;1 Sec MOV MINUTE_P1,#00H SJMP CLKUP0_END DATE_UP0: CJNE A,#02H,YEAR_UP0 LCALL DATE_UP SJMP CLKUP0_END YEAR_UP0: INC YEAR0_P1 CLKUP0_END: POP WRPG POP RDPG RET CLK_DN0: PUSH RDPG PUSH WRPG MOV A,LCDCLK_FG MOV RDPG,#RDPG1 MOV WRPG,#WRPG1 SEC_DN0: CJNE A,#00H,MINUTE_DN0 DEC SEC_P1 MOV A,SEC_P1 CJNE A,#0FFH,SEC_DN0E ;1 Sec MOV SEC_P1,#3BH SEC_DN0E: SJMP CLKDN0_END MINUTE_DN0: CJNE A,#01H,DATE_DN0 DEC MINUTE_P1 MOV A,MINUTE_P1 CJNE A,#0FFH,CLKDN0_END ;1 Sec MOV MINUTE_P1,#3BH SJMP CLKDN0_END DATE_DN0: CJNE A,#02H,YEAR_DN0 DEC DATE_P1 MOV A,DATE_P1 CJNE A,#00H,CLKDN0_END MOV A,MONTH_P1 CJNE A,#02H,DATE30_4M MOV DATE_P1,#1CH SJMP CLKDN0_END DATE30_4M: CJNE A,#04H,DATE30_6M MOV DATE_P1,#1EH SJMP CLKDN0_END DATE30_6M: CJNE A,#06H,DATE30_9M MOV DATE_P1,#1EH SJMP CLKDN0_END DATE30_9M: CJNE A,#09H,DATE30_11M MOV DATE_P1,#1EH SJMP CLKDN0_END DATE30_11M: CJNE A,#11H,DATE31 MOV DATE_P1,#1EH SJMP CLKDN0_END DATE31: MOV DATE_P1,#1FH SJMP CLKDN0_END YEAR_DN0: DEC YEAR0_P1 MOV A,YEAR0_P1 CJNE A,#0FFH,CLKDN0_END ;1 Sec MOV YEAR0_P1,#63H CLKDN0_END: POP WRPG POP RDPG RET CLK_UP1: PUSH RDPG PUSH WRPG MOV A,LCDCLK_FG MOV RDPG,#RDPG1 MOV WRPG,#WRPG1 MINUTE_UP1: CJNE A,#00H,HOUR_UP1 INC MINUTE_P1 MOV A,MINUTE_P1 CJNE A,#3CH,CLKUP1_END ;1 Sec MOV MINUTE_P1,#00H SJMP CLKUP1_END HOUR_UP1: CJNE A,#01H,MONTH_UP1 INC HOUR_P1 MOV A,HOUR_P1 CJNE A,#0CH,HOUR_UP1C INC HDATE_P1 MOV A,HDATE_P1 CJNE A,#02H,CLKUP1_END MOV HDATE_P1,#00H SJMP CLKUP1_END HOUR_UP1C: CJNE A,#0DH,CLKUP1_END MOV HOUR_P1,#01H SJMP CLKUP1_END MONTH_UP1: CJNE A,#02H,YEAR_UP1 INC MONTH_P1 MOV A,MONTH_P1 CJNE A,#0DH,CLKUP1_END MOV MONTH_P1,#01H SJMP CLKUP1_END YEAR_UP1: INC YEAR0_P1 CLKUP1_END: POP WRPG POP RDPG RET CLK_DN1: PUSH RDPG PUSH WRPG MOV A,LCDCLK_FG MOV RDPG,#RDPG1 MOV WRPG,#WRPG1 MINUTE_DN1: CJNE A,#00H,HOUR_DN1 DEC MINUTE_P1 MOV A,MINUTE_P1 CJNE A,#0FFH,CLKDN1_END ;1 Sec MOV MINUTE_P1,#3BH SJMP CLKDN1_END HOUR_DN1: CJNE A,#01H,MONTH_DN1 DEC HOUR_P1 MOV A,HOUR_P1 CJNE A,#00H,CLKDN1_END ;HOUR_DN1C MOV HOUR_P1,#0CH INC HDATE_P1 MOV A,HDATE_P1 CJNE A,#02H,CLKDN1_END MOV HDATE_P1,#00H SJMP CLKDN1_END MONTH_DN1: CJNE A,#02H,YEAR_DN1 DEC MONTH_P1 MOV A,MONTH_P1 CJNE A,#00H,CLKDN1_END MOV MONTH_P1,#0CH SJMP CLKDN1_END YEAR_DN1: DEC YEAR0_P1 MOV A,YEAR0_P1 CJNE A,#0FFH,CLKDN1_END ;1 Sec MOV YEAR0_P1,#63H CLKDN1_END: POP WRPG POP RDPG RET DATE_UP: CLR C INC DATE_P1 ;Date MOV A,DATE_P1 SUBB A,#1DH ;#1CH - 28ÀÏ JC DATE_UPEND MOV A,DATE_P1 CHK28UP: CJNE A,#1DH,CHK29UP ;1EH - 28ÀÏ AJMP LEAP_Y_UP CHK29UP: CJNE A,#1EH,CHK30UP ;1FH - 29ÀÏ AJMP LEAP_Y_UP CHK30UP: CJNE A,#1FH,DATE_CLR ;1EH - 30ÀÏ MOV A,MONTH_P1 CJNE A,#04H,CHK30_6DUP SJMP DATE_CLR CHK30_6DUP: CJNE A,#06H,CHK30_9DUP SJMP DATE_CLR CHK30_9DUP: CJNE A,#09H,CHK30_11DUP SJMP DATE_CLR CHK30_11DUP: CJNE A,#11H,DATE_UPEND SJMP DATE_CLR CHK31UP: CJNE A,#20H,DATE_UPEND ;1FH - 31ÀÏ SJMP DATE_CLR LEAP_Y_UP: MOV A,#02H CJNE A,MONTH_P1,DATE_UPEND ; MOV A,#0FFH L_YEARUP: INC A CJNE A,YEAR0_P1,YEAR1UP SJMP DATE_CLR ;Leap year(À±³â 29ÀÏ) YEAR1UP: INC A CJNE A,YEAR0_P1,YEAR2UP SJMP DATE_CLR YEAR2UP: INC A CJNE A,YEAR0_P1,YEAR3UP SJMP DATE_CLR YEAR3UP: INC A CJNE A,YEAR0_P1,L_YEARUP SJMP DATE_CLR DATE_CLR: MOV DATE_P1,#01H DATE_UPEND: RET ;**************************************** ; TAPE CONTROL ;**************************************** RUN_EJ_PLAY: CLR P_MUTE SETB P_POWERON SETB TAPE_FG CLR CLK_FG CLR CDC_FG CLR P_CDCON CLR P_RADIOON CLR P_FMON CLR P_AMON CLR TAPEFR_FG SETB P_LCDINH LCALL LCD_TAPE_PLAY LCALL TEJECT_FPLAY MOV TAPE_MODE,#TM_PLAY MOV VOL_BUF0,#VOL_VOLTAP MOV VOL_BUF1,#VOL_TAPE LCALL VOL_TRANS LCALL MUTE CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M RET ;------ Tape Initial ------- TAPE_INI: SETB P_CM ;1.C Moter ON ÈÄ 1020msec±â´Ù¸°´Ù. LCALL DELAY1020M JB P_STPIN,TAPE_INI6 TAPE_INI3: JB P_FRSW,TAPE_INI5 TAPE_INT4: SETB P_PM1 ;P Motor Á¤È¸Àü(Eject) CLR P_PM2 LCALL DELAY200M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL1800M TAP_DEL1: JB TIME_FG,T_ERR_EJT JNB P_FRSW,TAP_DEL1 CLR P_PM1 LJMP TAPE_INI_END T_ERR_EJT: SETB TAPE_ERR LCALL TSTOP_EJECT LJMP TAPE_INI_END TAPE_INI5: SETB P_PM1 ;P Motor Á¤È¸Àü(Eject) CLR P_PM2 LCALL DELAY100M CLR P_PM1 JB P_FRSW,TAPE_INI8 CLR P_PM1 ;ONÀ̸é P Motor ¿ªÈ¸Àü(Loading) SETB P_PM2 LCALL DELAY100M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAP_DEL3: JNB TIME_FG,TAP_DEL3A CLR P_PM2 SETB TAPE_ERR ;ONÀ̸é Initialize ÀÌ»ó LCALL TSTOP_EJECT LJMP TAPE_INI_END TAP_DEL3A: JB P_FRSW,TAP_DEL3 CLR P_PM2 LJMP TAPE_INI_END TAPE_INI6: JB P_FRSW,TAPE_INI7 ;OFFÀ̸é 7Ç×À¸·Î SETB P_PM1 ;P Motor Á¤È¸Àü(Eject) CLR P_PM2 LCALL DELAY400M CLR P_PM1 JB P_FRSW,TAPE_INI7 CLR P_SOL1 ;Sol ON SETB P_SOL2 LCALL DELAY1270M CLR P_SOL2 JNB P_STPIN,TAPE_INI3 SETB TAPE_ERR LCALL TSTOP_EJECT LJMP TAPE_INI_END TAPE_INI7: CLR P_SOL1 ;Sol ON SETB P_SOL2 LCALL DELAY1270M CLR P_SOL2 JB P_STPIN,TAPE_INI7A LCALL TAPE_INI3 TAPE_INI7A: SETB TAPE_ERR LCALL TSTOP_EJECT LJMP TAPE_INI_END TAPE_INI8: CLR P_PM1 ;ONÀ̸é P Motor ¿ªÈ¸Àü(Loading) SETB P_PM2 LCALL DELAY150M CLR P_PM2 JB P_FRSW,TAPE_INI_END TAPE_INI9: SETB P_PM1 ;P Motor Á¤È¸Àü(Eject) CLR P_PM2 LCALL DELAY400M CLR P_PM1 JB P_FRSW,TAPE_INI_END TAPE_INI10: CLR P_PM1 ;ONÀ̸é P Motor ¿ªÈ¸Àü(Loading) SETB P_PM2 LCALL DELAY150M CLR P_PM2 JB P_FRSW,TAPE_INI_END SETB TAPE_ERR LCALL TSTOP_EJECT TAPE_INI_END: SETB P_PM1 SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 CLR P_CM MOV TAPE_MODE,#TM_STOP CLR TEJECT_FG RET ;----- Tape FPLAY ----- ; ; EJECT -> FPLAY ; TEJECT_FPLAY: LCALL DELAY30M CLR P_PM1 ;ONÀ̸é P Motor (Loading) SETB P_PM2 CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL1800M LCALL DELAY200M TEF_DEL1: JB TIME_FG,TEF_DEL1A JNB P_FRSW,TEF_DEL1 TEF_DEL1A: SETB P_PM1 ;P Motor Brake¸ðµåµ¿ÀÛ LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_CM ;CM Motorµ¿ÀÛ LCALL DELAY120M SETB P_SOL1 ;Kick µ¿ÀÛ SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TEF_DEL2: JB TIME_FG,TEF_DEL2A ; JNB P_STPIN,TEF_DEL2 TEF_DEL2A: CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY150M SETB P_PM2 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL400M TEF_DEL3: JB TIME_FG,TEF_DEL3A JNB P_FOWDET,TEF_DEL3 TEF_DEL3A: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 LCALL DELAY10M SETB P_PM1 LCALL DELAY200M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL1270M TEF_DEL4: JB TIME_FG,TEF_DEL4A JNB P_FRSW,TEF_DEL4 TEF_DEL4A: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY450M CLR P_SOL2 LCALL DELAY500M TEJECT_FPLAY_END: RET ;----- Tape RPLAY ----- ; ; EJECT -> RPLAY ; TEJECT_RPLAY: TEJECT_RPLAY_END: RET ;----- Tape Eject ----- ; ; PLAY -> EJECT ; TPLAY_EJECT: LCALL DELAY30M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M CLR P_CM SETB P_PM1 CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL1800M LCALL DELAY400M TPE_DEL1: JB TIME_FG,TPE1 JNB P_FRSW,TPE_DEL1 TPE1: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TPLAY_EJECT_END: RET ;----- Tape Stop ----- ; ; PLAY -> STOP ; TPLAY_STOP: LCALL DELAY30M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M CLR P_CM TPLAY_STOP_END: RET ;----- Tape Eject ----- ; ; STOP -> EJECT ; TSTOP_EJECT: LCALL DELAY30M SETB P_CM LCALL DELAY100M CLR P_CM SETB P_PM1 CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL1800M LCALL DELAY400M TSE_DEL1: JB TIME_FG,TSE1 JNB P_FRSW,TSE_DEL1 TSE1: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TSTOP_EJECT_END: RET ;----- Tape STOP_FPLAY ----- ; ; STOP -> FPLAY ; TSTOP_FPLAY: LCALL DELAY30M SETB P_CM LCALL DELAY100M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TSF_DEL1: JB TIME_FG,TSF1 ; JNB P_FRSW,TSF_DEL1 TSF1: CLR P_SOL1 LCALL DELAY670M CLR P_SOL2 LCALL DELAY670M TSTOP_FPLAY_END: RET ;----- Tape STOP_RPLAY ----- ; ; STOP -> RPLAY ; TSTOP_RPLAY: LCALL DELAY30M SETB P_CM LCALL DELAY100M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TSR_DEL1: JB TIME_FG,TSR1 ; JNB P_FRSW,TSR_DEL1 TSR1: CLR P_SOL1 LCALL DELAY260M CLR P_SOL2 LCALL DELAY1080M TSTOP_RPLAY_END: RET ;----- Tape RPLAY_FPLAY ----- ; ; RPLAY -> FPLAY ; TRPLAY_FPLAY: LCALL DELAY20M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TRF_DEL1: JB TIME_FG,TRF1 ; JNB P_STPIN,TRF_DEL1 TRF1: CLR P_SOL1 LCALL DELAY670M CLR P_SOL2 LCALL DELAY670M TRPLAY_FPLAY_END: RET ;----- Tape F_RPLAY ----- ; ; FPLAY -> RPLAY ; TFPLAY_RPLAY: LCALL DELAY20M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TFR_DEL1: JB TIME_FG,TFR1 ; JNB P_STPIN,TFR_DEL1 TFR1: CLR P_SOL1 LCALL DELAY260M CLR P_SOL2 LCALL DELAY1080M TFPLAY_RPLAY_END: RET ;----- Tape FPLAY ----- ; ; FAPS_FF, FAPS_REW -> FPLAY ; TFAPSFF_FPLAY: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TFAF_DEL1: JB TIME_FG,TFAF1 JNB P_FRSW,TFAF_DEL1 TFAF1: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TFAF_DEL2: JB TIME_FG,TFAF2 JB P_STPIN,TFAF_DEL2 TFAF2: CLR P_SOL2 LCALL DELAY200M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TFAF_DEL3: JB TIME_FG,TFAF3 ; JNB P_STPIN,TFAF_DEL3 TFAF3: CLR P_SOL1 LCALL DELAY670M CLR P_SOL2 LCALL DELAY670M TFAPSFF_FPLAY_END: RET ;----- Tape RPLAY ----- ; ; RAPS_FF,RAPS_REW -> RPLAY ; TRAPSFF_RPLAY: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TRAR_DEL1: JB TIME_FG,TRAR1 JNB P_FRSW,TRAR_DEL1 TRAR1: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TRAR_DEL2: JB TIME_FG,TRAR2 JB P_STPIN,TRAR_DEL2 TRAR2: CLR P_SOL2 LCALL DELAY200M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TRAR_DEL3: JB TIME_FG,TRAR3 ; JNB P_STPIN,TRAR_DEL3 TRAR3: CLR P_SOL1 LCALL DELAY260M CLR P_SOL2 LCALL DELAY1080M TRAPSFF_RPLAY_END: RET ;----- Tape FAPS_FF/RAPS_REW ----- ; ; FAPS_REW,RAPS_FF -> FAPS_FF,RAPS_REW ; TFAPSREW_FAPSFF: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TREV_DEL1: JB TIME_FG,TREV1 JNB P_FRSW,TREV_DEL1 TREV1: SETB P_PM2 LCALL DELAY60M CLR P_PM2 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TREV_DEL11: JB TIME_FG,TREV11 JB P_FOWDET,TREV_DEL11 TREV11: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TFAPSREW_FAPSFF_END: RET ;----- Tape RAPS_FF/FAPS_REW ----- ; ; RAPS_REW,FRAPS_FF -> RAPS_FF,FAPS_REW ; TRAPSREW_RAPSFF: SETB P_PM2 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TREV_DEL2: JB TIME_FG,TREV2 JNB P_FRSW,TREV_DEL2 TREV2: SETB P_PM1 LCALL DELAY60M CLR P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TREV_DEL21: JB TIME_FG,TREV21 JNB P_FOWDET,TREV_DEL21 TREV21: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TRAPSREW_RAPSFF_END: RET ;----- Tape Loading ----- ; ; F_FF, F_REW -> FPLAY ; TFFF_FPLAY: SETB P_PM2 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TFFP_DEL1: JB TIME_FG,TFFP1 JNB P_FRSW,TFFP_DEL1 TFFP1: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY60M CLR P_SOL1 LCALL DELAY500M CLR P_SOL2 LCALL DELAY670M TFFF_FPLAY_END: RET ;----- Tape RPLAY ----- ; ; R_FF,R_REW -> RPLAY ; TRFF_RPLAY: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TRRP_DEL1: JB TIME_FG,TRRP1 JNB P_FRSW,TRRP_DEL1 TRRP1: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY1080M TRFF_RPLAY_END: RET ;----- Tape RREW/FFF ----- ; ; RPLAY,FPLAY -> R_REW,F_FF ; TPLAY_FFF: LCALL DELAY20M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TPRF_DEL1: JB TIME_FG,TPRF1 ; JNB P_STPIN,TPRF_DEL1 TPRF1: CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY150M SETB P_PM1 LCALL DELAY150M ;Delay 150 ~ 400mms CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TPRF_DEL2: JB TIME_FG,TPRF2 JB P_FOWDET,TPRF_DEL2 TPRF2: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TPLAY_FFF_END: RET ;----- Tape RFF/FREW ----- ; ; RPLAY,FPLAY -> R_FF,F_REW ; TPLAY_RFF: LCALL DELAY20M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY300M CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M ; CLR TIME_FG ; MOV TIME_COUNT0,#TIME_VAL100M ;TPFR_DEL1: JB TIME_FG,TPFR1 ; JNB P_STPIN,TPFR_DEL1 TPFR1: CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY150M SETB P_PM2 LCALL DELAY150M ;Delay 150 ~ 400mms CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TPFR_DEL2: JB TIME_FG,TPFR2 JNB P_FOWDET,TPFR_DEL2 TPFR2: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TPLAY_RFF_END: RET ;----- Tape PLAY_FAPS ----- ; ; PLAY -> FAPS ; TPLAY_FAPS: LCALL DELAY30M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY100M SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M PLAY_FAPS1: JB TIME_FG,PLAY_FAPS2 JB P_FOWDET,PLAY_FAPS1 PLAY_FAPS2: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TPLAY_FAPSFF_END: RET ;----- Tape PLAY_RAPS ----- ; ; PLAY -> RAPS ; TPLAY_RAPS: LCALL DELAY30M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY100M SETB P_PM2 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M PLAY_RAPS1: JB TIME_FG,PLAY_RAPS2 JB P_FOWDET,PLAY_RAPS1 PLAY_RAPS2: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 TPLAY_RAPSFF_END: RET ;----- Tape APS_STOP ----- ; ; APS -> STOP ; APS_STOP: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAPS_STP1: JB TIME_FG,TAPS_STP2 JNB P_FRSW,TAPS_STP1 TAPS_STP2: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TAPS_STP3: JB TIME_FG,TAPS_STP4 JB P_STPIN,TAPS_STP1 TAPS_STP4: CLR P_SOL2 LCALL DELAY150M CLR P_CM LCALL DELAY150M APS_STOP_END: RET ;----- Tape APS_FFF ----- ; ; APS -> FFF ; APS_FFF: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAPS_FFF1: JB TIME_FG,TAPS_FFF2 JNB P_FRSW,TAPS_FFF1 TAPS_FFF2: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TAPS_FFF3: JB TIME_FG,TAPS_FFF4 JB P_STPIN,TAPS_FFF3 TAPS_FFF4: CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY150M SETB P_PM1 LCALL DELAY150M ;Delay 150 ~ 400mms CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAPS_FFF5: JB TIME_FG,TAPS_FFF6 JB P_FOWDET,TAPS_FFF5 TAPS_FFF6: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 APS_FFF_END: RET ;----- Tape APS_RFF ----- ; ; APS -> RFF ; APS_RFF: SETB P_PM1 LCALL DELAY150M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAPS_RFF1: JB TIME_FG,TAPS_RFF2 JNB P_FRSW,TAPS_RFF1 TAPS_RFF2: SETB P_PM2 LCALL DELAY60M CLR P_PM1 CLR P_PM2 SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL100M TAPS_RFF3: JB TIME_FG,TAPS_RFF4 JB P_STPIN,TAPS_RFF3 TAPS_RFF4: CLR P_SOL2 LCALL DELAY150M SETB P_SOL1 SETB P_SOL2 LCALL DELAY50M CLR P_SOL1 LCALL DELAY50M CLR P_SOL2 LCALL DELAY150M SETB P_PM2 LCALL DELAY150M ;Delay 150 ~ 400mms CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL300M TAPS_RFF5: JB TIME_FG,TAPS_RFF6 JNB P_FOWDET,TAPS_RFF5 TAPS_RFF6: SETB P_PM1 LCALL DELAY60M CLR P_PM1 CLR P_PM2 APS_RFF_END: RET ;Tape Control ---- TAPE_FAPS: MOV A,TAPE_MODE CJNE A,#TM_PLAY,FFF_FAPS LCALL TPLAY_FAPS SJMP TAPE_FAPS_END FFF_FAPS: CJNE A,#TM_FFF,RFF_FAPS LCALL TFFF_FPLAY LCALL TPLAY_FAPS AJMP TAPE_FAPS_END RFF_FAPS: CJNE A,#TM_RFF,RAPS_FAPS LCALL TRFF_RPLAY LCALL TPLAY_FAPS AJMP TAPE_FAPS_END RAPS_FAPS: LCALL TFAPSREW_FAPSFF TAPE_FAPS_END: RET TAPE_RAPS: MOV A,TAPE_MODE CJNE A,#TM_PLAY,FFF_RAPS LCALL TPLAY_RAPS AJMP TAPE_RAPS_END FFF_RAPS: CJNE A,#TM_FFF,RFF_RAPS LCALL TFFF_FPLAY LCALL TPLAY_RAPS AJMP TAPE_RAPS_END RFF_RAPS: CJNE A,#TM_RFF,FAPS_RAPS LCALL TRFF_RPLAY LCALL TPLAY_RAPS AJMP TAPE_RAPS_END FAPS_RAPS: LCALL TRAPSREW_RAPSFF TAPE_RAPS_END: RET TAPE_REVERSE: MOV C,TREVERSE MOV ACC.0,C MOV B,A MOV C,P_FOWDET MOV TREVERSE,C MOV B.0,C XRL A,B JZ TREV_TIME MOV TIME_COUNT0,#TIME_VAL600M CLR TIME_FG AJMP TAPE_REV_END TREV_TIME: JNB TIME_FG,TAPE_REV_END MOV A,TAPE_MODE CLR P_MUTE CJNE A,#TM_PLAY,TREV_FFF JNB TAPEFR_FG,TREV_RPLAY LCALL TRPLAY_FPLAY CLR TAPEFR_FG AJMP TREV_SET TREV_RPLAY: LCALL TFPLAY_RPLAY SETB TAPEFR_FG AJMP TREV_SET TREV_FFF: CJNE A,#TM_FFF,TREV_RFF LCALL TFFF_FPLAY LCALL TFPLAY_RPLAY SETB TAPEFR_FG AJMP TREV_SET TREV_RFF: CJNE A,#TM_RFF,TREV_FAPS LCALL TRFF_RPLAY LCALL TRPLAY_FPLAY CLR TAPEFR_FG AJMP TREV_SET TREV_FAPS: CJNE A,#TM_FAPS,TREV_RAPS LCALL TFAPSFF_FPLAY LCALL TFPLAY_RPLAY SETB TAPEFR_FG AJMP TREV_SET TREV_RAPS: LCALL TRAPSFF_RPLAY LCALL TRPLAY_FPLAY CLR TAPEFR_FG TREV_SET: CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M MOV TAPE_MODE,#TM_PLAY LCALL MUTE TAPE_REV_END: RET TAPE_STOP: MOV A,TAPE_MODE CJNE A,#TM_FFF,RFF_STP LCALL TFFF_FPLAY LCALL TPLAY_STOP AJMP TAPE_STOP_END RFF_STP: CJNE A,#TM_RFF,FAPS_STP LCALL TRFF_RPLAY LCALL TPLAY_STOP AJMP TAPE_STOP_END FAPS_STP: CJNE A,#TM_FAPS,RAPS_STP LCALL TFAPSFF_FPLAY LCALL TPLAY_STOP AJMP TAPE_STOP_END RAPS_STP: CJNE A,#TM_RAPS,PLAY_STP LCALL TRAPSFF_RPLAY LCALL TPLAY_STOP AJMP TAPE_STOP_END PLAY_STP: LCALL TPLAY_STOP TAPE_STOP_END: RET TAPE_EJECT: MOV A,TAPE_MODE CJNE A,#TM_FFF,RFF_EJT LCALL TFFF_FPLAY AJMP TAPE_EJT_END RFF_EJT: CJNE A,#TM_RFF,FAPS_EJT LCALL TRFF_RPLAY AJMP TAPE_EJT_END FAPS_EJT: CJNE A,#TM_FAPS,RAPS_EJT LCALL TFAPSFF_FPLAY AJMP TAPE_EJT_END RAPS_EJT: CJNE A,#TM_RAPS,STOP_EJT LCALL TRAPSFF_RPLAY AJMP TAPE_EJT_END STOP_EJT: CJNE A,#TM_STOP,TAPE_EJT_END LCALL TSTOP_EJECT AJMP TAPE_EJT_END TAPE_EJT_END: LCALL TPLAY_EJECT RET APS_SEL: MOV A,TAPE_MODE CJNE A,#TM_FAPS,APS_CHK JNB P_APS,APS_SEL_END JB TAPEFR_FG,APS_SEL1 LCALL TFAPSFF_FPLAY AJMP RAPS_SEL3 APS_SEL1: LCALL TFAPSFF_FPLAY LCALL TFPLAY_RPLAY AJMP RAPS_SEL3 APS_CHK: CJNE A,#TM_RAPS,APS_SEL_END JNB P_APS,APS_SEL_END JB TAPEFR_FG,RAPS_SEL2 LCALL TRAPSFF_RPLAY LCALL TRPLAY_FPLAY AJMP RAPS_SEL3 RAPS_SEL2: LCALL TRAPSFF_RPLAY RAPS_SEL3: LCALL MUTE MOV TAPE_MODE,#TM_PLAY CLR TIME_FG MOV TIME_COUNT0,#TIME_VAL600M APS_SEL_END: RET ;=========================================== ; REMOCON CONTROL ;=========================================== ;--- REMOCON INTERRUP --- REMOCON_INT: PUSH ACC PUSH PSW PUSH SFRPG PUSH RDPG PUSH WRPG MOV RDPG,#00H MOV WRPG,#00H MOV SFRPG,#SFRPG0 MOV REMO_BUF2,TH4 MOV TL4,#00H MOV TH4,#00H MOV SFRPG,#SFRPG1 JNB REMO_LONG_FG,REMO_ST ;Check long key CLR C MOV A,REMO_BUF2 SUBB A,#REMO_FLAME JC REMO_LSE JNB REMO_LUP_FG,REMO_LSET SETB REMO_LTIME_FG LJMP REMO_END REMO_LSET: INC REMO_LCOUNT0 MOV A,REMO_LCOUNT0 CJNE A,#0AH,REMO_LSE ;Start delay time of the long-key SETB REMO_LTIME_FG SETB REMO_LUP_FG REMO_LSE: LJMP REMO_END REMO_ST: JB REMOSTART_FG,REMO_LEAD ;Check remocon start SETB REMOSTART_FG LJMP REMO_END REMO_LEAD: JB REMOLEAD_FG,REMO_CUSTOM CLR C MOV A,#REMO_MAX SUBB A,REMO_BUF2 JC REMO_CLR CLR C MOV A,#REMO_START SUBB A,REMO_BUF2 JNC REMO_CLR ;Check lead code SETB REMOSTART_FG SETB REMOLEAD_FG MOV REMO_COUNT0,#021H ;Count value = 32+1 Decimal AJMP REMO_END REMO_CUSTOM: CLR C MOV A,REMO_COUNT0 SUBB A,#19H JC REMO_CUS_HI LCALL REMO_CODE MOV A,REMO_COUNT0 CJNE A,#19H,REMO_END MOV REMO_BUF1,REMO_BUF0 AJMP REMO_END REMO_CUS_HI: CLR C MOV A,REMO_COUNT0 SUBB A,#011H JC REMO_DATA LCALL REMO_CODE MOV A,REMO_COUNT0 CJNE A,#011H,REMO_END MOV A,REMO_BUF0 CPL A SUBB A,REMO_BUF1 ;Compare custom code low with high JNZ REMO_CLR MOV A,REMO_BUF1 CJNE A,#76H,REMO_PCK ;Check custom code SETB REMO_VCR_FG AJMP REMO_END REMO_PCK: CJNE A,#72H,REMO_CLR CLR REMO_VCR_FG AJMP REMO_END REMO_DATA: CLR C MOV A,REMO_COUNT0 SUBB A,#09H JC REMO_DATA_HI LCALL REMO_CODE MOV A,REMO_COUNT0 CJNE A,#09H,REMO_END MOV REMO_BUF1,REMO_BUF0 AJMP REMO_END REMO_DATA_HI: LCALL REMO_CODE MOV A,REMO_COUNT0 CJNE A,#01H,REMO_END MOV A,REMO_BUF0 CPL A SUBB A,REMO_BUF1 ;Compare data code JNZ REMO_CLR SETB REMO_FG CLR REMOSTART_FG SETB REMO_LONG_FG MOV REMO_LCOUNT0,#00H AJMP REMO_END REMO_CLR: MOV REMO_COUNT0,#00H CLR REMOLEAD_FG CLR REMOSTART_FG REMO_END: POP WRPG POP RDPG POP SFRPG POP PSW POP ACC RETI ; debug routine ******** ; PUSH P_1 ; MOV P_1,#55H ; MOV P_1,#0A1H ; mov P_1,REMO_BUF2 ; POP P_1 ; debug end ******* ;REMOCON Receiver ----- REMO_CODE: CLR C MOV A,#REMO_DHIGH SUBB A,REMO_BUF2 JC REMO_CODE_ERR REMO_CODE1: CLR C MOV A,#REMO_DLOW SUBB A,REMO_BUF2 JNC REMO_CODE0 MOV A,REMO_BUF0 SETB C RLC A MOV REMO_BUF0,A AJMP REMO_CODE_END REMO_CODE0: CLR C MOV A,#REMO_FILTER SUBB A,REMO_BUF2 JNC REMO_CODE_ERR MOV A,REMO_BUF0 CLR C RLC A MOV REMO_BUF0,A AJMP REMO_CODE_END REMO_CODE_ERR: MOV REMO_COUNT0,#00H CLR REMOSTART_FG REMO_CODE_END: DEC REMO_COUNT0 RET ;*** REMOCON SELECT *** REMO_SEL: JB REMO_VCR_FG,REMO_VCRKEY LJMP REMO_PCKEY REMO_VCRKEY: MOV A,REMO_BUF1 REMO_K1: CJNE A,#REMO_D1,REMO_K2 LCALL RUN_POWER CLR REMORET_FG LJMP REMO_SEL_END REMO_K2: CJNE A,#REMO_D2,REMO_K3 JNB REMORET_FG,REMO_FM CPL REMOAM_FG REMO_FM: JB REMOAM_FG,REMO_AM LCALL RUN_FM LJMP REMO_K2_E REMO_AM: LCALL RUN_AM REMO_K2_E: SETB REMORET_FG LJMP REMO_SEL_END REMO_K3: CJNE A,#REMO_D3,REMO_K4 LCALL RUN_TAPE_EJ ;B CLR REMORET_FG LJMP REMO_SEL_END REMO_K4: CJNE A,#REMO_D4,REMO_K5 LCALL RUN_M_DN ;C CLR REMORET_FG LJMP REMO_SEL_END REMO_K5: CJNE A,#REMO_D5,REMO_K6 LCALL RUN_M_UP ;TAPE_EJ CLR REMORET_FG LJMP REMO_SEL_END REMO_K6: CJNE A,#REMO_D6,REMO_K7 LCALL RUN_TAPE ;BSM CLR REMORET_FG LJMP REMO_SEL_END REMO_K7: CJNE A,#REMO_D7,REMO_K8 LCALL RUN_SK_DN ;C CLR REMORET_FG LJMP REMO_SEL_END REMO_K8: CJNE A,#REMO_D8,REMO_K9 LCALL RUN_SK_UP ;C CLR REMORET_FG LJMP REMO_SEL_END REMO_K9: CJNE A,#REMO_D9,REMO_K10 LCALL RUN_CDC ;M_UP CLR REMORET_FG LJMP REMO_SEL_END REMO_K10: CJNE A,#REMO_D10,REMO_K11 LCALL RUN_M2 ;M5 CLR REMORET_FG LJMP REMO_SEL_END REMO_K11: CJNE A,#REMO_D11,REMO_K12 LCALL RUN_M5 ;SK_UP CLR REMORET_FG LJMP REMO_SEL_END REMO_K12: CJNE A,#REMO_D12,REMO_K13 LCALL RUN_M1 ;M2 CLR REMORET_FG LJMP REMO_SEL_END REMO_K13: CJNE A,#REMO_D13,REMO_K14 LCALL RUN_M3 ;CDC CLR REMORET_FG LJMP REMO_SEL_END REMO_K14: CJNE A,#REMO_D14,REMO_K15 LCALL RUN_M6 ;EQ CLR REMORET_FG LJMP REMO_SEL_END REMO_K15: CJNE A,#REMO_D15,REMO_K16 LCALL RUN_M4 ;M3 CLR REMORET_FG LJMP REMO_SEL_END REMO_K16: CJNE A,#REMO_D16,REMO_K17 LCALL RUN_C ;M6 CLR REMORET_FG LJMP REMO_SEL_END REMO_K17: CJNE A,#REMO_D17,REMO_SEL_END LCALL RUN_BSM ;TAPE CLR REMORET_FG LJMP REMO_SEL_END REMO_SEL_END: RET ;----- PC REMOCON TYPE ----- REMO_PCKEY: MOV A,REMO_BUF1 REMO_PK1: CJNE A,#REMO_PD1,REMO_PK2 LCALL RUN_POWER CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK2: CJNE A,#REMO_PD2,REMO_PK3 JNB REMORET_FG,REMO_PFM CPL REMOAM_FG REMO_PFM: JB REMOAM_FG,REMO_PAM LCALL RUN_FM LJMP REMO_PK2_E REMO_PAM: LCALL RUN_AM REMO_PK2_E: SETB REMORET_FG LJMP REMO_PSEL_END REMO_PK3: CJNE A,#REMO_PD3,REMO_PK4 LCALL RUN_TAPE_EJ ;B CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK4: CJNE A,#REMO_PD4,REMO_PK5 LCALL RUN_M_DN ;C CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK5: CJNE A,#REMO_PD5,REMO_PK6 LCALL RUN_M_UP ;TAPE_EJ CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK6: CJNE A,#REMO_PD6,REMO_PK7 LCALL RUN_TAPE ;BSM CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK7: CJNE A,#REMO_PD7,REMO_PK8 LCALL RUN_SK_DN ;C CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK8: CJNE A,#REMO_PD8,REMO_PK9 LCALL RUN_SK_UP ;C CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK9: CJNE A,#REMO_PD9,REMO_PK10 LCALL RUN_CDC ;M_UP CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK10: CJNE A,#REMO_PD10,REMO_PK11 LCALL RUN_M2 ;M5 CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK11: CJNE A,#REMO_PD11,REMO_PK12 LCALL RUN_M5 ;SK_UP CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK12: CJNE A,#REMO_PD12,REMO_PK13 LCALL RUN_M1 ;M2 CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK13: CJNE A,#REMO_PD13,REMO_PK14 LCALL RUN_M3 ;CDC CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK14: CJNE A,#REMO_PD14,REMO_PK15 LCALL RUN_M6 ;EQ CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK15: CJNE A,#REMO_PD15,REMO_PK16 LCALL RUN_M4 ;M3 CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK16: CJNE A,#REMO_PD16,REMO_PK17 LCALL RUN_C ;M6 CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK17: CJNE A,#REMO_PD17,REMO_PK18 LCALL RUN_BSM ;TAPE CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK18: CJNE A,#REMO_PD18,REMO_PK19 CPL P_MUTE CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK19: CJNE A,#REMO_PD19,REMO_PK20 MOV A,#01111100B ;Voice control data ANL A,VOL_BUF0 CJNE A,#01100000B,R19_ADD AJMP R19_VEND R19_ADD: ADD A,#00000111B ;Add 07H = Add one step CJNE A,#01100000B,R19N_ADD AJMP R19_CON R19N_ADD: ADD A,#00000100B ;Add two step R19_CON: ANL A,#01111100B MOV B,VOL_BUF0 ANL B,#10000011B ORL A,B MOV VOL_BUF0,A ;Control volume level ; CLR P_MUTE ; LCALL DELAY30M LCALL VOL_TRANS ; LCALL DELAY260M ; SETB P_MUTE R19_VEND: CLR REMORET_FG LJMP REMO_PSEL_END REMO_PK20: CJNE A,#REMO_PD20,REMO_PSEL_END MOV A,#01111100B ;Voice control data ANL A,VOL_BUF0 JZ R20_VEND SUBB A,#00000100B ;Subtract 04H = One step down JZ R20_CON SUBB A,#00000100B ;Two step down R20_CON: MOV B,VOL_BUF0 ANL B,#10000011B ORL A,B MOV VOL_BUF0,A ;Control volume level ; CLR P_MUTE ; LCALL DELAY30M LCALL VOL_TRANS ; LCALL DELAY260M ; SETB P_MUTE R20_VEND: CLR REMORET_FG LJMP REMO_PSEL_END REMO_PSEL_END: RET ;*** REMOCON LONG KEY SELECT *** REMO_LONG_SEL: JB REMO_VCR_FG,REMO_L_VCRKEY LJMP REMO_L_PCKEY REMO_L_VCRKEY: MOV A,REMO_BUF1 REMO_L4: CJNE A,#REMO_D4,REMO_L5 LCALL RUN_M_DN ;C LJMP REMO_L_SEL_END REMO_L5: CJNE A,#REMO_D5,REMO_L7 LCALL RUN_M_UP ;TAPE_EJ LJMP REMO_L_SEL_END REMO_L7: CJNE A,#REMO_D7,REMO_L8 LCALL RUN_SK_DN ;C LJMP REMO_L_SEL_END REMO_L8: CJNE A,#REMO_D8,REMO_L10 LCALL RUN_SK_UP ;C LJMP REMO_L_SEL_END REMO_L10: CJNE A,#REMO_D10,REMO_L11 ; LCALL RUN_M2 ;M5 LJMP REMO_L_SEL_END REMO_L11: CJNE A,#REMO_D11,REMO_L12 ; LCALL RUN_M5 ;SK_UP LJMP REMO_L_SEL_END REMO_L12: CJNE A,#REMO_D12,REMO_L13 ; LCALL RUN_M1 ;M2 LJMP REMO_L_SEL_END REMO_L13: CJNE A,#REMO_D13,REMO_L14 ; LCALL RUN_M3 ;CDC LJMP REMO_L_SEL_END REMO_L14: CJNE A,#REMO_D14,REMO_L15 ; LCALL RUN_M6 ;EQ LJMP REMO_L_SEL_END REMO_L15: CJNE A,#REMO_D15,REMO_L16 ; LCALL RUN_M4 ;M3 LJMP REMO_L_SEL_END REMO_L16: CJNE A,#REMO_D16,REMO_L_SEL_END ; LCALL RUN_C ;M6 LJMP REMO_L_SEL_END REMO_L_SEL_END: RET ;----- PC REMOCON LONG KEY ----- REMO_L_PCKEY: MOV A,REMO_BUF1 REMO_LP4: CJNE A,#REMO_PD4,REMO_LP5 LCALL RUN_M_DN ;C LJMP REMO_LP_SEL_END REMO_LP5: CJNE A,#REMO_PD5,REMO_LP7 LCALL RUN_M_UP ;TAPE_EJ LJMP REMO_LP_SEL_END REMO_LP7: CJNE A,#REMO_PD7,REMO_LP8 LCALL RUN_SK_DN ;C LJMP REMO_LP_SEL_END REMO_LP8: CJNE A,#REMO_PD8,REMO_LP10 LCALL RUN_SK_UP ;C LJMP REMO_LP_SEL_END REMO_LP10: CJNE A,#REMO_PD10,REMO_LP11 ; LCALL RUN_M2 ;M5 LJMP REMO_LP_SEL_END REMO_LP11: CJNE A,#REMO_PD11,REMO_LP12 ; LCALL RUN_M5 ;SK_UP LJMP REMO_LP_SEL_END REMO_LP12: CJNE A,#REMO_PD12,REMO_LP13 ; LCALL RUN_M1 ;M2 LJMP REMO_LP_SEL_END REMO_LP13: CJNE A,#REMO_PD13,REMO_LP14 ; LCALL RUN_M3 ;CDC LJMP REMO_LP_SEL_END REMO_LP14: CJNE A,#REMO_PD14,REMO_LP15 ; LCALL RUN_M6 ;EQ LJMP REMO_LP_SEL_END REMO_LP15: CJNE A,#REMO_PD15,REMO_LP_SEL_END ; LCALL RUN_M4 ;M3 LJMP REMO_LP_SEL_END REMO_LP_SEL_END: RET END