;*************************************** ;R_flag_0.0 R_flag_0.1 用于鍵盤掃描 ;R_flag_0.2 R_flag_0.3 R_flag_0.4用于鍵盤掃描 ;R_flag_0.5 上午還是下午,下午為1 ;R_flag_0.6 是否有交流電,沒(méi)有為1 ;R_flag_0.7 ;R_flag_1.0 用于交流電檢測(cè) ;R_flag_1.1 用于秒點(diǎn)跳躍 ;R_flag_1.2 是否處于時(shí)鐘調(diào)整,是為1 ;R_flag_1.3 左鍋開(kāi)關(guān)標(biāo)志,開(kāi)為1 ;R_flag_1.4 左鍋定時(shí)器是否處于調(diào)整期,是為1 ;R_flag_1.5 是否快速煮飯,是為1 ;R_flag_1.6 右鍋定時(shí)器是否處于調(diào)整期,是為1 ;R_flag_1.7 左定時(shí)器是上午不是下午 ;R_flag_2.0 右定時(shí)器是上午不是下午 ;R_flag_2.1 右鍋開(kāi)關(guān)標(biāo)志,開(kāi)為1 ;R_flag_2.2 煲湯標(biāo)志 ;R_flag_2.3 油炸標(biāo)志 ;R_flag_2.4 左定時(shí)器是否有效,是為1 ;R_flag_2.5 右定時(shí)器是否有效,是為1 ;R_flag_2.6 用于煮飯 ;R_flag_2.7 ;R_flag_3.0 左鍋保溫標(biāo)志,保溫為1 ;R_flag_3.1 右鍋保溫標(biāo)志,保溫為1 ;R_flag_3.2 是否為燜飯過(guò)程,是為1 ;R_flag_3.3 煮粥最后階段標(biāo)志,是為1 ;R_flag_3.4 煲湯最后階段標(biāo)志,是為1 ;R_flag_3.5 左鍋?lái)敳考訜崞鬟^(guò)溫,是為1 ;R_flag_3.6 右鍋?lái)敳考訜崞鬟^(guò)溫,是為1 ;R_flag_3.7 是否允許進(jìn)入睡眠狀態(tài) ;**************************************** #INCLUDE HT46R23.INC DATA .SECTION 'data' R_lcd_data_0 DB 00h R_lcd_data_1 DB 00h R_lcd_data_2 DB 00h R_lcd_data_3 DB 00h R_flag_0 DB 00h R_flag_1 DB 00h R_flag_2 DB 00h R_flag_3 DB 00h R_key_bak_0 DB 00h R_key_bak_1 DB 00h R_key_time_0 DB 00h R_key_time_1 DB 00h R_a_bak DB 00h R_status_bak DB 00h R_time_0 DB 00h R_time_1 DB 00h R_time_2 DB 00h R_time_3 DB 00h R_time_4 DB 00h R_buzzer_time DB 00h R_buzzer_time_0 DB 00h R_hour DB 00h R_minute DB 00h R_timer_hour_l DB 00h R_timer_minute_l DB 00h R_timer_hour_r DB 00h R_timer_minute_r DB 00h R_ad_data_0 DB 00h R_ad_data_1 DB 00h R_temp_0 DB 00h R_temp_1 DB 00h R_temp_2 DB 00h R_temp_3 DB 00h R_temp_4 DB 00h R_temp_5 DB 00h R_temp_6 DB 00h R_temp_7 DB 00h R_select_l DB 00h R_pa_bak DB 00h R_analog_select DB 00h R_ad0_data_0 DB 00h R_ad0_data_1 DB 00h R_ad1_data_0 DB 00h R_ad1_data_1 DB 00h R_ad2_data_0 DB 00h R_ad2_data_1 DB 00h R_ad3_data_0 DB 00h R_ad3_data_1 DB 00h R_curr_low DB 00h R_curr_high DB 00h R_zhufan_time_0 DB 00h R_zhufan_time_1 DB 00h R_zhuzhou_time DB 00h R_baotang_time DB 00h R_protest_time DB 00h R_driver_l_time DB 00h R_driver_r_time DB 00h R_loop DB 00h R_loop_0 DB 00h R_start_time DB 00h CODE .SECTION at 0 'code' ORG 00h JMP L_start ORG 08h JMP L_timer L_start: ;***************** ;全部通用寄存器清零 ;***************** CLR WDT MOV A, 40h MOV MP0, A MOV A, 0c0h L_clear: CLR IAR0 INC MP0 SDZ Acc JMP L_clear ;AD轉(zhuǎn)換設(shè)置 CLR ACSR MOV A, 0a0h MOV ADCR, A CLR ADCR.7 ;********************** ;寄存器初始化 ;定時(shí)器中斷為125微秒一次 ;********************** CLR PAC CLR PA MOV A, 8fh MOV PBC, A CLR PCC CLR PDC SET PC.4 SET PD.1 CLR PB MOV A, 83h MOV TMRL, A MOV A, 0ffh MOV TMRH, A MOV A, 92h MOV TMRC, A MOV A, 05h MOV INTC0, A CLR INTC1 MOV A, 08h MOV R_time_0, A MOV A, 0fah MOV R_time_1, A MOV A, 02h MOV R_time_2, A MOV A, 78h MOV R_time_3, A MOV A, 12h MOV R_hour, A MOV R_timer_hour_l, A MOV R_timer_hour_r, A MOV A, 01h MOV R_select_l, A MOV R_analog_select, A SET R_flag_2.2 CLR R_flag_2.3 CALL Sub_lcd_ini SET PDC.0 NOP NOP NOP MOV A, PD CLR PDC.0 SNZ Acc.0 CALL Sub_test MOV A, 0ch MOV R_start_time, A L_main: CLR WDT SZ R_loop_0 JMP $+6 MOV A, 50h MOV R_loop_0, A CALL Sub_key_loose CALL Sub_key_scan_0 CALL Sub_key_scan_1 CALL Sub_led_display SZ R_loop JMP $+5 MOV A, 14h MOV R_loop, A CALL Sub_lcd_enable CALL Sub_lcd_display CALL Sub_ad_convert CALL Sub_protest CALL Sub_timer_already CALL Sub_driver_l CALL Sub_driver_r SZ R_start_time JMP L_main CALL Sub_sleep JMP L_main ;定時(shí)中斷服務(wù)子程序 L_timer: MOV R_a_bak, A MOV A, Status MOV R_status_bak, A ;125微秒 SZ PB.7 JMP L_curr_high SZ R_flag_1.0 JMP $+3 INC R_curr_low JMP L_curr_judge CLR R_flag_1.0 CLR R_curr_low JMP L_curr_ret L_curr_high: SZ R_flag_1.0 JMP $+4 SET R_flag_1.0 CLR R_curr_high JMP L_curr_ret INC R_curr_high L_curr_judge: MOV A, R_curr_high SUB A, 0a0h SNZ Status.0 JMP $+3 SET R_flag_0.6 JMP L_curr_ret MOV A, R_curr_low SUB A, 0a0h SNZ Status.0 JMP $+2 SET R_flag_0.6 L_curr_ret: SZ R_buzzer_time JMP $+2 JMP $+3 MOV A, 40h XORM A, PB SZ R_loop_0 DEC R_loop_0 SDZ R_time_0 JMP L_reti ;1毫秒 MOV A, 08h MOV R_time_0, A SZ R_key_time_0 DEC R_key_time_0 SZ R_key_time_1 DEC R_key_time_1 SZ R_buzzer_time DEC R_buzzer_time SZ R_loop DEC R_loop SDZ R_time_1 JMP L_reti ;250毫秒 MOV A, 0fah MOV R_time_1, A SZ R_start_time DEC R_start_time SZ R_temp_5 DEC R_temp_5 SZ R_protest_time DEC R_protest_time SZ R_driver_l_time DEC R_driver_l_time SZ R_driver_r_time DEC R_driver_r_time SDZ R_time_2 JMP L_reti ;500毫秒 MOV A, 02h MOV R_time_2, A SZ R_buzzer_time_0 JMP $+2 JMP $+6 DEC R_buzzer_time_0 SNZ R_buzzer_time_0.0 JMP $+3 MOV A, 0ffh MOV R_buzzer_time, A MOV A, 02h XORM A, R_flag_1 SNZ R_flag_1.4 JMP $+3 MOV A, 04h XORM A, R_pa_bak SNZ R_flag_1.6 JMP $+3 MOV A, 10h XORM A, R_pa_bak SDZ R_time_3 JMP L_reti ;1分 MOV A, 78h MOV R_time_3, A SZ R_zhufan_time_0 DEC R_zhufan_time_0 SZ R_zhufan_time_1 DEC R_zhufan_time_1 SZ R_zhuzhou_time DEC R_zhuzhou_time SZ R_baotang_time DEC R_baotang_time INC R_minute MOV A, R_minute AND A, 0fh SUB A, 0ah SZ Acc JMP L_reti MOV A, 10h ADDM A, R_minute MOV A, 0f0h ANDM A, R_minute MOV A, R_minute SUB A, 60h SZ Acc JMP L_reti CLR R_minute INC R_hour MOV A, R_hour SUB A, 0ah SZ Acc JMP L_hour_0 MOV A, 10h MOV R_hour, A JMP L_reti L_hour_0: MOV A, R_hour SUB A, 12h SZ Acc JMP L_hour_1 MOV A, 20h XORM A, R_flag_0 L_hour_1: MOV A, R_hour SUB A, 13h SZ Acc JMP L_reti MOV A, 01h MOV R_hour, A JMP L_reti L_reti: MOV A, R_status_bak MOV Status, A MOV A, R_a_bak RETI ;*********************************************** ;R_flag_0.1是否是正處于去抖動(dòng)延時(shí)時(shí)間中,是則為1 ;R_flag_0.0是否有按鍵處于按下?tīng)顟B(tài),是為1 ;R_key_bak_0保存去抖動(dòng)前的按鍵狀態(tài) ;R_key_time_0去抖動(dòng)時(shí)間 ;*********************************************** Sub_key_scan_0 PROC SZ R_flag_0.3 RET CLR PA.7 CLR PA.5 SET PA.6 SZ R_flag_0.1 JMP L_key0_1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key0_2: SDZ Acc JMP L_key0_2 MOV A, PA OR A, 0e0h MOV R_key_bak_0, A L_key0_3: MOV A, 14H MOV R_key_time_0, A SET R_flag_0.1 JMP L_key0_ret L_key0_1: SZ R_key_time_0 JMP L_key0_ret CLR R_flag_0.1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_Key0_4: SDZ Acc JMP L_key0_4 MOV A, PA OR A, 0e0h SUB A, R_key_bak_0 SZ Acc JMP L_key0_ret CPLA R_key_bak_0 SZ ACC JMP L_key0_5 CLR R_flag_0.0 JMP L_key0_ret L_key0_5: SZ R_flag_0.4 JMP L_key0_ret MOV A, 0c8h MOV R_buzzer_time, A SET R_flag_0.0 SZ R_key_bak_0.0 JMP L_key0_6 SNZ R_flag_1.3 JMP $+3 CLR R_buzzer_time JMP L_key0_ret CLR R_flag_2.4 MOV A, 20h XORM A, R_flag_1 SNZ R_flag_1.5 JMP L_key0_ret MOV A, 01h MOV R_select_l, A JMP L_key0_ret L_key0_6: SZ R_KEY_BAK_0.1 JMP L_key0_7 SNZ R_flag_1.3 JMP $+3 CLR R_buzzer_time JMP L_key0_ret CLR R_flag_2.4 CLR R_flag_1.5 CLR R_flag_2.6 RL R_select_l SNZ R_select_l.3 JMP L_key0_ret MOV A, 01h MOV R_select_l, A JMP L_key0_ret L_key0_7: SZ R_key_bak_0.2 JMP L_key0_8 MOV A, 10h XORM A, R_flag_1 SNZ R_flag_1.2 JMP $+4 CLR R_flag_1.4 CLR R_buzzer_time JMP L_key0_ret SNZ R_flag_1.3 JMP $+4 CLR R_flag_1.4 CLR R_buzzer_time JMP L_key0_ret SNZ R_flag_1.6 JMP $+4 CLR R_flag_1.4 CLR R_buzzer_time JMP L_key0_ret SNZ R_flag_1.4 CALL Sub_timer_l_on JMP L_key0_ret L_key0_8: SZ R_key_bak_0.3 JMP L_key0_9 MOV A, 08h XORM A, R_flag_1 SNZ R_flag_1.3 CLR R_flag_3.0 SZ R_flag_1.3 CLR R_flag_2.4 JMP L_key0_ret L_key0_9: SZ R_key_bak_0.4 JMP L_key0_ret MOV A, 04h XORM A, R_flag_1 SNZ R_flag_1.4 JMP $+4 CLR R_flag_1.2 CLR R_buzzer_time JMP L_key0_ret SNZ R_flag_1.6 JMP $+3 CLR R_flag_1.2 CLR R_buzzer_time L_key0_ret: RET Sub_key_scan_0 ENDP ;*********************************************** ;R_flag_0.3是否是正處于去抖動(dòng)延時(shí)時(shí)間中,是則為1 ;R_flag_0.2是否有按鍵處于按下?tīng)顟B(tài),是為1 ;R_key_bak_1保存去抖動(dòng)前的按鍵狀態(tài) ;R_key_time_1去抖動(dòng)時(shí)間 ;*********************************************** Sub_key_scan_1 PROC SZ R_flag_0.1 RET CLR PA.7 CLR PA.6 SET PA.5 SZ R_flag_0.3 JMP L_key1_1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key1_2: SDZ Acc JMP L_key1_2 MOV A, PA OR A, 0e0h MOV R_key_bak_1, A L_key1_3: MOV A, 14H MOV R_key_time_1, A SET R_flag_0.3 JMP L_key1_ret L_key1_1: SZ R_key_time_1 JMP L_key1_ret CLR R_flag_0.3 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_Key1_4: SDZ Acc JMP L_key1_4 MOV A, PA OR A, 0e0h SUB A, R_key_bak_1 SZ Acc JMP L_key1_ret CPLA R_key_bak_1 SZ ACC JMP L_key1_5 CLR R_flag_0.2 JMP L_key1_ret L_key1_5: SZ R_flag_0.4 JMP L_key1_ret SET R_flag_0.2 MOV A, 0c8h MOV R_buzzer_time, A SZ R_key_bak_1.0 JMP L_key1_6 SZ R_flag_1.4 JMP L_key1_5_0 SZ R_flag_1.6 JMP L_key1_5_1 SZ R_flag_1.2 JMP L_key1_5_2 CLR R_buzzer_time JMP L_key1_ret L_key1_5_2: MOV A, 78h MOV R_time_3, A INC R_minute MOV A, R_minute AND A, 0fh SUB A, 0ah SZ Acc JMP L_key1_ret MOV A, 10h ADDM A, R_minute MOV A, 0f0h ANDM A, R_minute MOV A, R_minute SUB A, 60h SZ Acc JMP L_key1_ret CLR R_minute JMP L_key1_ret L_key1_5_0: MOV A, 05h ADDM A, R_timer_minute_l MOV A, R_timer_minute_l AND A, 0fh SUB A, 0ah SNZ Status.0 JMP $+3 MOV A, 06h ADDM A, R_timer_minute_l MOV A, R_timer_minute_l SUB A, 60h SNZ Status.0 JMP L_key1_ret CLR R_timer_minute_l JMP L_key1_ret L_key1_5_1: MOV A, 05h ADDM A, R_timer_minute_r MOV A, R_timer_minute_r AND A, 0fh SUB A, 0ah SNZ Status.0 JMP $+3 MOV A, 06h ADDM A, R_timer_minute_r MOV A, R_timer_minute_r SUB A, 60h SNZ Status.0 JMP L_key1_ret CLR R_timer_minute_r JMP L_key1_ret L_key1_6: SZ R_KEY_BAK_1.1 JMP L_key1_7 MOV A, 40h XORM A, R_flag_1 SNZ R_flag_1.2 JMP $+4 CLR R_flag_1.6 CLR R_buzzer_time JMP L_key1_ret SNZ R_flag_2.1 JMP $+4 CLR R_flag_1.6 CLR R_buzzer_time JMP L_key1_ret SNZ R_flag_1.4 JMP $+4 CLR R_buzzer_time CLR R_flag_1.6 JMP L_key1_ret SNZ R_flag_1.6 CALL Sub_timer_r_on JMP L_key1_ret L_key1_7: SZ R_key_bak_1.2 JMP L_key1_8 SZ R_flag_1.4 JMP L_key1_7_0 SZ R_flag_1.6 JMP L_key1_7_1 SZ R_flag_1.2 JMP $+3 CLR R_buzzer_time JMP L_key1_ret INC R_hour MOV A, R_hour SUB A, 0ah SZ Acc JMP L_hour_2 MOV A, 10h MOV R_hour, A JMP L_key1_ret L_hour_2: MOV A, R_hour SUB A, 12h SZ Acc JMP L_hour_3 MOV A, 20h XORM A, R_flag_0 L_hour_3: MOV A, R_hour SUB A, 13h SZ Acc JMP L_key1_ret MOV A, 01h MOV R_hour, A JMP L_key1_ret L_key1_7_0: INC R_timer_hour_l MOV A, R_timer_hour_l SUB A, 0ah SZ Acc JMP L_hour_4 MOV A, 10h MOV R_timer_hour_l, A JMP L_key1_ret L_hour_4: MOV A, R_timer_hour_l SUB A, 12h SZ Acc JMP L_hour_5 MOV A, 80h XORM A, R_flag_1 L_hour_5: MOV A, R_timer_hour_l SUB A, 13h SZ Acc JMP L_key1_ret MOV A, 01h MOV R_timer_hour_l, A JMP L_key1_ret L_key1_7_1: INC R_timer_hour_r MOV A, R_timer_hour_r SUB A, 0ah SZ Acc JMP L_hour_6 MOV A, 10h MOV R_timer_hour_r, A JMP L_key1_ret L_hour_6: MOV A, R_timer_hour_r SUB A, 12h SZ Acc JMP L_hour_7 MOV A, 01h XORM A, R_flag_2 L_hour_7: MOV A, R_timer_hour_r SUB A, 13h SZ Acc JMP L_key1_ret MOV A, 01h MOV R_timer_hour_r, A JMP L_key1_ret L_key1_8: SZ R_key_bak_1.3 JMP L_key1_9 MOV A, 02h XORM A, R_flag_2 SNZ R_flag_2.1 CLR R_flag_3.1 SZ R_flag_2.1 CLR R_flag_2.5 JMP L_key1_ret L_key1_9: SZ R_key_bak_1.4 JMP L_key1_ret SNZ R_flag_2.1 JMP $+3 CLR R_buzzer_time JMP L_key1_ret CLR R_flag_2.5 MOV A, 0ch XORM A, R_flag_2 CLR R_flag_2.7 L_key1_ret: RET Sub_key_scan_1 ENDP Sub_key_loose PROC SET R_flag_0.4 SZ R_flag_0.0 RET SNZ R_flag_0.2 CLR R_flag_0.4 RET Sub_key_loose ENDP ;LCD DRIVER寫程序 Sub_lcd_write PROC CLR PD.1 L_lcd_0: SZ R_temp_1.7 SET PD.0 SNZ R_temp_1.7 CLR PD.0 NOP CLR PC.4 RLC R_temp_0 RLC R_temp_1 NOP NOP NOP SET PC.4 SDZ R_temp_2 JMP L_lcd_0 NOP SET PD.1 SET PD.0 RET Sub_lcd_write ENDP ;LCD DRIVER(ET7002)初始化程序 Sub_lcd_ini PROC ;system on MOV A, 80h MOV R_temp_1, A MOV A, 20h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;LCD on MOV A, 80h MOV R_temp_1, A MOV A, 60h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;WDT disable MOV A, 80h MOV R_temp_1, A MOV A, 0a0H MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;TIME enable MOV A, 80h MOV R_temp_1, A MOV A, 0c0h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;XTAL 32768 MOV A, 82h MOV R_temp_1, A MOV A, 80h MOV R_temp_0, A MOV A, 0Ch MOV R_temp_2, A CALL Sub_lcd_write ;BIAS 1/3 MOV A, 85h MOV R_temp_1, A MOV A, 20h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;IRQ disable MOV A, 90h MOV R_temp_1, A MOV A, 00h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;IRQ 4Hz MOV A, 94h MOV R_temp_1, A MOV A, 40h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write RET Sub_lcd_ini ENDP ;LCD顯示子程序 Sub_lcd_display PROC MOV A, 08h MOV R_temp_3, A MOV A, 0a0h MOV R_temp_4, A CLR R_temp_5.7 L_lcd_dis_0: MOV A, R_temp_4 MOV R_temp_1, A SZ R_temp_5.7 SET R_temp_0.7 SNZ R_temp_5.7 CLR R_temp_0.7 SZ R_lcd_data_3.0 SET R_temp_0.6 SNZ R_lcd_data_3.0 CLR R_temp_0.6 SZ R_lcd_data_2.0 SET R_temp_0.5 SNZ R_lcd_data_2.0 CLR R_temp_0.5 SZ R_lcd_data_1.0 SET R_temp_0.4 SNZ R_lcd_data_1.0 CLR R_temp_0.4 SZ R_lcd_data_0.0 SET R_temp_0.3 SNZ R_lcd_data_0.0 CLR R_temp_0.3 MOV A, 0dh MOV R_temp_2, A CALL Sub_lcd_write SZ R_temp_5.7 JMP $+3 SET R_temp_5.7 JMP $+3 CLR R_temp_5.7 INC R_temp_4 RR R_lcd_data_0 RR R_lcd_data_1 RR R_lcd_data_2 RR R_lcd_data_3 SDZ R_temp_3 JMP L_lcd_dis_0 RET Sub_lcd_display ENDP Sub_lcd_enable PROC CLR R_lcd_data_0 CLR R_lcd_data_1 CLR R_lcd_data_2 CLR R_lcd_data_3 SZ R_flag_1.1 SET R_lcd_data_3.4 SET R_lcd_data_3.2 CLR R_lcd_data_3.3 SNZ R_flag_0.5 JMP $+3 CLR R_lcd_data_3.2 SET R_lcd_data_3.3 SNZ R_flag_1.2 JMP L_disp_0 SNZ R_flag_1.1 JMP L_disp_3 L_disp_0: MOV A, R_minute OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_0 MOV A, R_minute SWAPA Acc AND A, 0fh ADD A, 0fah MOV TBLP, A TABRDL R_lcd_data_1 MOV A, R_hour OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_2 MOV A, R_hour SWAPA Acc AND A, 0fh CLR R_lcd_data_3.5 SZ Acc.0 SET R_lcd_data_3.5 L_disp_3: SNZ R_flag_1.4 JMP L_disp_4 MOV A, R_timer_minute_l OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_0 MOV A, R_timer_minute_l SWAPA Acc AND A, 0fh ADD A, 0fah MOV TBLP, A TABRDL R_lcd_data_1 MOV A, R_timer_hour_l OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_2 MOV A, R_timer_hour_l SWAPA Acc AND A, 0fh CLR R_lcd_data_3.5 SZ Acc.0 SET R_lcd_data_3.5 SET R_lcd_data_3.2 CLR R_lcd_data_3.3 MOV A, 0ch SZ R_flag_1.7 XORM A, R_lcd_data_3 SET R_lcd_data_3.4 L_disp_4: SNZ R_flag_1.6 JMP L_disp_5 MOV A, R_timer_minute_r OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_0 MOV A, R_timer_minute_r SWAPA Acc AND A, 0fh ADD A, 0fah MOV TBLP, A TABRDL R_lcd_data_1 MOV A, R_timer_hour_r OR A, 0f0h MOV TBLP, A TABRDL R_lcd_data_2 MOV A, R_timer_hour_r SWAPA Acc AND A, 0fh CLR R_lcd_data_3.5 SZ Acc.0 SET R_lcd_data_3.5 SET R_lcd_data_3.2 CLR R_lcd_data_3.3 MOV A, 0ch SZ R_flag_2.0 XORM A, R_lcd_data_3 SET R_lcd_data_3.4 L_disp_5: SZ R_select_l.0 SET R_lcd_data_0.0 SZ R_select_l.1 SET R_lcd_data_1.0 SZ R_select_l.2 SET R_lcd_data_2.0 SZ R_flag_2.2 SET R_lcd_data_3.0 SZ R_flag_2.3 SET R_lcd_data_3.1 SET R_lcd_data_3.7 SET R_lcd_data_1.1 RET Sub_lcd_enable ENDP ;LED顯示子程序 Sub_led_display PROC CLR PAC MOV A, 14h ANDM A, R_pa_bak SZ R_flag_1.5 SET R_PA_bak.0 SZ R_flag_1.3 SET R_pa_bak.1 SZ R_flag_2.1 SET R_pa_bak.6 SZ R_flag_1.4 JMP L_led_0 SNZ R_flag_2.4 CLR R_pa_bak.2 SZ R_flag_2.4 SET R_pa_bak.2 L_led_0: SZ R_flag_1.6 JMP L_led_1 SNZ R_flag_2.5 CLR R_pa_bak.4 SZ R_flag_2.5 SET R_pa_bak.4 L_led_1: SZ R_flag_3.0 SET R_pa_bak.3 SZ R_flag_3.1 SET R_pa_bak.5 MOV A, R_pa_bak MOV PA, A SET PA.7 RET Sub_led_display ENDP ;判斷左鍋定時(shí)器是否有效子程序 Sub_timer_l_on PROC CLR R_flag_2.4 SZ R_flag_1.5 RET SZ R_select_l.2 RET CALL Sub_timer CALL Sub_timer_l MOV A, R_temp_3 SUBM A, R_temp_1 MOV A, R_temp_2 SBCM A, R_temp_0 SZ Status.2 JMP $+3 SET R_flag_2.4 RET SNZ R_select_l.0 JMP L_timer_on_l_3 MOV A, R_temp_1 SUB A, 2dh SZ Status.0 SET R_flag_2.4 RET L_timer_on_l_3: MOV A, R_temp_1 SUB A, 5ah SZ Status.0 SET R_flag_2.4 RET Sub_timer_l_on ENDP ;判斷右鍋定時(shí)器是否有效子程序 Sub_timer_r_on PROC CLR R_flag_2.5 SZ R_flag_2.3 RET CALL Sub_timer CALL Sub_timer_r MOV A, R_temp_3 SUBM A, R_temp_1 MOV A, R_temp_2 SBCM A, R_temp_0 SZ Status.2 JMP $+3 SET R_flag_2.5 RET MOV A, R_temp_1 SUB A, 78h SZ Status.0 SET R_flag_2.5 RET Sub_timer_r_on ENDP ;計(jì)算當(dāng)前時(shí)間到零點(diǎn)時(shí)的分鐘數(shù) Sub_timer PROC MOV A, R_hour MOV R_temp_4, A MOV A, R_minute MOV R_temp_1, A MOV R_temp_0, A SNZ R_temp_4.4 JMP $+4 CLR R_temp_4.4 MOV A, 0ah ADDM A, R_temp_4 SWAP R_temp_0 MOV A, 0fh ANDM A, R_temp_0 SZ Status.2 JMP L_timer_on_3 ANDM A, R_temp_1 L_timer_on_2: MOV A, 0ah ADDM A, R_temp_1 SDZ R_temp_0 JMP L_timer_on_2 CLR R_temp_0 L_timer_on_3: MOV A, R_hour SUB A, 12h SNZ Status.2 JMP L_timer_on_0 SNZ R_flag_0.5 RET JMP L_timer_on_1 L_timer_on_0: MOV A, 3ch ADDM A, R_temp_1 CLR Acc ADCM A, R_temp_0 SDZ R_temp_4 JMP L_timer_on_0 L_timer_on_1: SNZ R_flag_0.5 JMP $+5 MOV A, 0d0h ADDM A, R_temp_1 MOV A, 02h ADCM A, R_temp_0 RET Sub_timer ENDP ;計(jì)算左定時(shí)器時(shí)間到零點(diǎn)時(shí)的分鐘數(shù) Sub_timer_l PROC MOV A, R_timer_hour_l MOV R_temp_4, A MOV A, R_timer_minute_l MOV R_temp_3, A MOV R_temp_2, A SNZ R_temp_4.4 JMP $+4 CLR R_temp_4.4 MOV A, 0ah ADDM A, R_temp_4 SWAP R_temp_2 MOV A, 0fh ANDM A, R_temp_2 SZ Status.2 JMP L_timer_on_l_5 ANDM A, R_temp_3 L_timer_on_l_4: MOV A, 0ah ADDM A, R_temp_3 SDZ R_temp_2 JMP L_timer_on_l_4 CLR R_temp_2 L_timer_on_l_5: MOV A, R_timer_hour_l SUB A, 12h SNZ Status.2 JMP L_timer_on_l_0 SNZ R_flag_1.7 JMP L_timer_on_l_2 JMP L_timer_on_l_1 L_timer_on_l_0: MOV A, 3ch ADDM A, R_temp_3 CLR Acc ADCM A, R_temp_2 SDZ R_temp_4 JMP L_timer_on_l_0 L_timer_on_l_1: SNZ R_flag_1.7 JMP $+5 MOV A, 0d0h ADDM A, R_temp_3 MOV A, 02h ADCM A, R_temp_2 L_timer_on_l_2: MOV A, R_temp_3 SUB A, R_temp_1 MOV A, R_temp_2 SBC A, R_temp_0 SZ Status.0 JMP $+5 MOV A, 0a0h ADDM A, R_temp_3 MOV A, 05h ADCM A, R_temp_2 RET Sub_timer_l ENDP ;計(jì)算右定時(shí)器時(shí)間到零點(diǎn)時(shí)的分鐘數(shù) Sub_timer_r PROC MOV A, R_timer_hour_r MOV R_temp_4, A MOV A, R_timer_minute_r MOV R_temp_3, A MOV R_temp_2, A SNZ R_temp_4.4 JMP $+4 CLR R_temp_4.4 MOV A, 0ah ADDM A, R_temp_4 SWAP R_temp_2 MOV A, 0fh ANDM A, R_temp_2 SZ Status.2 JMP L_timer_on_r_4 ANDM A, R_temp_3 L_timer_on_r_3: MOV A, 0ah ADDM A, R_temp_3 SDZ R_temp_2 JMP L_timer_on_r_3 CLR R_temp_2 L_timer_on_r_4: MOV A, R_timer_hour_r SUB A, 12h SNZ Status.2 JMP L_timer_on_r_0 SNZ R_flag_2.0 JMP L_timer_on_r_2 JMP L_timer_on_r_1 L_timer_on_r_0: MOV A, 3ch ADDM A, R_temp_3 CLR Acc ADCM A, R_temp_2 SDZ R_temp_4 JMP L_timer_on_r_0 L_timer_on_r_1: SNZ R_flag_2.0 JMP $+5 MOV A, 0d0h ADDM A, R_temp_3 MOV A, 02h ADCM A, R_temp_2 L_timer_on_r_2: MOV A, R_temp_3 SUB A, R_temp_1 MOV A, R_temp_2 SBC A, R_temp_0 SZ Status.0 JMP $+5 MOV A, 0a0h ADDM A, R_temp_3 MOV A, 05h ADCM A, R_temp_2 RET Sub_timer_r ENDP ;判斷定時(shí)時(shí)間是否已到 Sub_timer_already PROC SZ R_flag_1.2 RET SZ R_flag_1.4 JMP L_timer_already_0 SZ R_flag_1.3 JMP L_timer_already_0 SNZ R_flag_2.4 JMP L_timer_already_0 CALL Sub_timer CALL Sub_timer_l MOV A, R_temp_3 SUBM A, R_temp_1 MOV A, R_temp_2 SBCM A, R_temp_0 SZ R_temp_0 JMP L_timer_already_0 SZ R_select_l.0 MOV A, 2dh SZ R_select_l.1 MOV A, 5ah SUB A, R_temp_1 SNZ Status.2 JMP L_timer_already_0 SET R_flag_1.3 CLR R_flag_2.4 L_timer_already_0: SZ R_flag_1.6 RET SZ R_flag_2.1 RET SNZ R_flag_2.5 RET CALL Sub_timer CALL Sub_timer_r MOV A, R_temp_3 SUBM A, R_temp_1 MOV A, R_temp_2 SBCM A, R_temp_0 SZ R_temp_0 RET MOV A, 78h SUB A, R_temp_1 SNZ Status.2 RET SET R_flag_2.1 CLR R_flag_2.5 RET Sub_timer_already ENDP ;A/D轉(zhuǎn)換子程序 Sub_ad_convert PROC SZ ADCR.6 RET MOV A, ADRH MOV R_temp_1, A MOV A, ADRL MOV R_temp_0, A MOV A, 06h L_ad_0: RRC R_temp_1 RRC R_temp_0 SDZ Acc JMP L_ad_0 MOV A, 03h ANDM A, R_temp_1 SNZ R_analog_select.0 JMP L_ad_1 MOV A, R_temp_1 MOV R_ad0_data_1, A MOV A, R_temp_0 MOV R_ad0_data_0, A JMP L_ad_4 L_ad_1: SNZ R_analog_select.1 JMP L_ad_2 MOV A, R_temp_1 MOV R_ad1_data_1, A MOV A, R_temp_0 MOV R_ad1_data_0, A JMP L_ad_4 L_ad_2: SNZ R_analog_select.2 JMP L_ad_3 MOV A, R_temp_1 MOV R_ad2_data_1, A MOV A, R_temp_0 MOV R_ad2_data_0, A JMP L_ad_4 L_ad_3: SNZ R_analog_select.3 JMP L_ad_4 MOV A, R_temp_1 MOV R_ad3_data_1, A MOV A, R_temp_0 MOV R_ad3_data_0, A L_ad_4: SET ADCR.7 RL R_analog_select SNZ R_analog_select.4 JMP $+3 CLR R_analog_select INC R_analog_select INC ADCR SNZ ADCR.2 JMP $+3 MOV A, 0f8h ANDM A, ADCR CLR ADCR.7 RET Sub_ad_convert ENDP ;睡眠子程序 Sub_sleep PROC SNZ R_flag_0.6 RET CLR R_lcd_data_0 CLR R_lcd_data_1 CLR R_lcd_data_2 CLR R_lcd_data_3 CALL Sub_lcd_display L_sleep_0: CLR WDT MOV A, R_time_1 SUB A, 7eh SNZ Status.2 JMP L_sleep_0 MOV A, 0fah MOV R_time_1, A CLR R_curr_high CLR R_curr_low CLR INTC0.0 CLR TMRC.4 CLR R_flag_1.2 CLR R_flag_1.4 CLR R_flag_1.6 ;CLR TIMER MOV A, 81h MOV R_temp_1, A MOV A, 80h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;LCD Off MOV A, 80h MOV R_temp_1, A MOV A, 40h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;IRQ enable MOV A, 91h MOV R_temp_1, A MOV A, 00h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;處理IO口 CLR PC SET PC.4 SET PD CLR ADCR.5 CLR PBC CLR PB SET PB.6 SET PAC ; SET PAC.6 ; SET PAC.7 ; MOV A, 3fh ; ORM A, PA L_sleep_1: HALT SDZ R_time_2 JMP L_time_ret_0 ;500毫秒 MOV A, 02h MOV R_time_2, A MOV A, 02h XORM A, R_flag_1 SDZ R_time_3 JMP L_time_ret ;1分 MOV A, 78h MOV R_time_3, A INC R_minute MOV A, R_minute AND A, 0fh SUB A, 0ah SZ Acc JMP L_time_ret MOV A, 10h ADDM A, R_minute MOV A, 0f0h ANDM A, R_minute MOV A, R_minute SUB A, 60h SZ Acc JMP L_time_ret CLR R_minute INC R_hour MOV A, R_hour SUB A, 0ah SZ Acc JMP L_sleep_hour_0 MOV A, 10h MOV R_hour, A JMP L_time_ret L_sleep_hour_0: MOV A, R_hour SUB A, 12h SZ Acc JMP L_sleep_hour_1 MOV A, 20h XORM A, R_flag_0 L_sleep_hour_1: MOV A, R_hour SUB A, 13h SZ Acc JMP L_time_ret MOV A, 01h MOV R_hour, A L_time_ret: ; CALL Sub_lcd_enable ; CLR R_lcd_data_0.0 ; CLR R_lcd_data_1.0 ; CLR R_lcd_data_1.1 ; CLR R_lcd_data_2.0 ; CLR R_lcd_data_3.0 ; CLR R_lcd_data_3.1 ; CLR R_lcd_data_3.7 ; CALL Sub_lcd_display ; SET PD ; SET PC.4 CALL Sub_timer_already L_time_ret_0: MOV A, PA SZ Acc.6 JMP L_sleep_1 L_wake: MOV A, 0ch MOV R_start_time, A CLR PAC.7 CLR PAC.6 CLR R_flag_0.6 SET PC SET PBC.7 SET INTC0.0 SET TMRC.4 SET ADCR.5 ;IRQ disable MOV A, 90h MOV R_temp_1, A MOV A, 00h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write ;LCD On MOV A, 80h MOV R_temp_1, A MOV A, 60h MOV R_temp_0, A MOV A, 0ch MOV R_temp_2, A CALL Sub_lcd_write RET Sub_sleep ENDP ;左鍋驅(qū)動(dòng)加熱器子程序 Sub_driver_l PROC SZ R_driver_l_time RET MOV A, 04h MOV R_driver_l_time, A SZ R_flag_1.3 JMP $+9 CLR PB.5 SET PC.0 SET PC.1 CLR R_flag_3.0 CLR R_flag_3.2 CLR R_flag_3.3 CLR R_flag_2.6 RET SNZ R_flag_3.5 CLR PC.1 SZ R_flag_3.5 SET PC.1 SNZ R_flag_3.0 JMP L_driver_l_0 MOV A, 3dh SUB A, R_ad0_data_0 MOV A, 02h SBC A, R_ad0_data_1 SNZ Status.0 JMP $+4 CLR PC.0 SET PB.5 RET MOV A, 40h SUB A, R_ad0_data_0 MOV A, 02h SBC A, R_ad0_data_1 SZ Status.0 RET SET PC.0 CLR PB.5 RET L_driver_l_0: SZ R_select_l.0 JMP L_zhufan SZ R_select_l.1 JMP L_zhuzhou SNZ R_select_l.2 RET MOV A, 20h SUB A, R_ad1_data_0 MOV A, 02h SBC A, R_ad1_data_1 SNZ Status.0 JMP $+4 CLR PC.0 SET PB.5 RET SET R_flag_3.0 MOV A, 0eh MOV R_buzzer_time_0, A RET L_zhufan: SNZ R_flag_3.2 JMP L_zhufan_0 SZ R_zhufan_time_0 JMP $+7 SET R_flag_3.0 CLR R_flag_3.2 CLR R_flag_2.6 MOV A, 0eh MOV R_buzzer_time_0, A RET MOV A, 3dh SUB A, R_ad0_data_0 MOV A, 02h SBC A, R_ad0_data_1 SNZ Status.0 JMP $+4 CLR PC.0 SET PB.5 RET MOV A, 40h SUB A, R_ad0_data_0 MOV A, 02h SBC A, R_ad0_data_1 SZ Status.0 RET SET PC.0 CLR PB.5 RET L_zhufan_0: SZ R_zhufan_time_1 JMP L_zhufan_2 SET PB.5 CLR PC.0 SZ R_flag_2.6 JMP L_zhufan_1 MOV A, 10h SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SZ Status.0 RET SET R_flag_2.6 MOV A, 06h SZ R_flag_1.5 MOV A, 03h MOV R_zhufan_time_1, A RET L_zhufan_1: MOV A, 30h SUB A, R_ad1_data_0 MOV A, 02h SBC A, R_ad1_data_1 SZ Status.0 RET SET R_flag_3.2 MOV A, 12h SZ R_flag_1.5 MOV A, 0ah MOV R_zhufan_time_0, A RET L_zhufan_2: CLR PB.5 SET PC.0 RET L_zhuzhou: SNZ R_flag_3.3 JMP L_zhuzhou_0 SZ R_zhuzhou_time JMP $+6 CLR R_flag_3.3 CLR R_flag_1.3 MOV A, 0eh MOV R_buzzer_time_0, A RET MOV A, 2ch SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SNZ Status.0 JMP $+4 SET PB.5 CLR PC.0 RET MOV A, 2eh SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SZ Status.0 RET CLR PB.5 SET PC.0 RET L_zhuzhou_0: MOV A, 18h SUB A, R_ad1_data_0 MOV A, 02h SBC A, R_ad1_data_1 SNZ Status.0 JMP $+4 SET PB.5 CLR PC.0 RET MOV A, 3ch MOV R_zhuzhou_time, A SET R_flag_3.3 RET Sub_driver_l ENDP ;右鍋驅(qū)動(dòng)加熱器子程序 Sub_driver_r PROC SZ R_driver_r_time RET MOV A, 04h MOV R_driver_r_time, A SZ R_flag_2.1 JMP $+7 CLR PB.4 SET PC.2 SET PC.3 CLR R_flag_3.1 CLR R_flag_3.4 RET SZ R_flag_2.2 JMP L_baotang SNZ R_flag_2.3 RET SET PC.2 SET PC.3 MOV A, 0a8h SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SZ Status.0 SET PB.4 MOV A, 0aah SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SNZ Status.0 CLR PB.4 RET L_baotang: SZ R_flag_3.6 SET PC.3 SNZ R_flag_3.6 CLR PC.3 SNZ R_flag_3.1 JMP L_baotang_1 MOV A, 3dh SUB A, R_ad2_data_0 MOV A, 02h SBC A, R_ad2_data_1 SNZ Status.0 JMP $+4 CLR PC.2 SET PB.4 RET MOV A, 40h SUB A, R_ad2_data_0 MOV A, 02h SBC A, R_ad2_data_1 SZ Status.0 RET SET PC.2 CLR PB.4 RET L_baotang_1: SNZ R_flag_3.4 JMP L_baotang_0 SZ R_baotang_time JMP $+6 SET R_flag_3.1 MOV A, 0eh MOV R_buzzer_time_0, A CLR R_flag_3.4 RET MOV A, 2ch SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SNZ Status.0 JMP $+4 CLR PC.2 SET PB.4 RET MOV A, 2eh SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SZ Status.0 RET SET PC.2 CLR PB.4 RET L_baotang_0: MOV A, 18h SUB A, R_ad3_data_0 MOV A, 02h SBC A, R_ad3_data_1 SNZ Status.0 JMP $+4 SET PB.4 CLR PC.2 RET SET R_flag_3.4 MOV A, 5ah MOV R_baotang_time, A RET Sub_driver_r ENDP ;過(guò)溫保護(hù)子程序 Sub_protest PROC SZ R_protest_time RET MOV A, 08h MOV R_protest_time, A SNZ R_flag_1.3 JMP L_protest_0 CLR R_flag_3.5 MOV A, 00h SUB A, R_ad1_data_0 MOV A, 02h SBC A, R_ad1_data_1 SNZ Status.0 SET R_flag_3.5 SNZ R_select_l.0 JMP $+8 MOV A, 90h SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SNZ Status.0 JMP L_left_off JMP L_protest_0 MOV A, 90h SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SZ Status.0 JMP L_protest_0 L_left_off: CLR PB.5 MOV A, 50h MOV R_driver_l_time, A L_protest_0: SNZ R_flag_2.1 RET CLR R_flag_3.6 MOV A, 00h SUB A, R_ad3_data_0 MOV A, 02h SBC A, R_ad3_data_1 SNZ Status.0 SET R_flag_3.6 SNZ R_flag_2.2 JMP $+8 MOV A, 90h SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SNZ Status.0 JMP L_right_off RET MOV A, 0c8h SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SZ Status.0 RET L_right_off: CLR PB.4 MOV A, 50h MOV R_driver_r_time, A RET Sub_protest ENDP ;開(kāi)機(jī)自檢程序 Sub_test PROC ;檢測(cè)LCD MOV A, 03h MOV R_temp_6, A L_test_lcd: CLR R_lcd_data_0 CLR R_lcd_data_1 CLR R_lcd_data_2 CLR R_lcd_data_3 CALL Sub_lcd_display MOV A, 02h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 SET R_lcd_data_0 SET R_lcd_data_1 SET R_lcd_data_2 SET R_lcd_data_3 CALL Sub_lcd_display MOV A, 02h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 SDZ R_temp_6 JMP L_test_lcd CLR R_lcd_data_0 CLR R_lcd_data_1 CLR R_lcd_data_2 CLR R_lcd_data_3 CALL Sub_lcd_display MOV A, 04h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 MOV A, 01h MOV R_lcd_data_0, A MOV R_lcd_data_2, A CLR R_lcd_data_1 CLR R_lcd_data_3 CALL Sub_lcd_display MOV A, 04h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 MOV A, 01h MOV R_lcd_data_1, A MOV R_lcd_data_3, A CLR R_lcd_data_0 CLR R_lcd_data_2 CALL Sub_lcd_display MOV A, 04h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 MOV A, 14h MOV R_lcd_data_3, A MOV A, 0d4h MOV R_lcd_data_1, A MOV A, 0b6h MOV R_lcd_data_2, A MOV R_lcd_data_0, A CALL Sub_lcd_display MOV A, 04h MOV R_temp_5, A CLR WDT SZ R_temp_5 JMP $-2 ;檢測(cè)傳感器部分 MOV A, 04h MOV R_temp_5, A CLR WDT CALL Sub_ad_convert SZ R_temp_5 JMP $-3 MOV A, 80h SUB A, R_ad0_data_0 MOV A, 03h SBC A, R_ad0_data_1 SNZ Status.0 JMP L_test_bad MOV A, 80h SUB A, R_ad1_data_0 MOV A, 03h SBC A, R_ad1_data_1 SNZ Status.0 JMP L_test_bad MOV A, 80h SUB A, R_ad2_data_0 MOV A, 03h SBC A, R_ad2_data_1 SNZ Status.0 JMP L_test_bad MOV A, 80h SUB A, R_ad3_data_0 MOV A, 03h SBC A, R_ad3_data_1 SNZ Status.0 JMP L_test_bad SZ R_ad0_data_0 JMP $+4 SZ R_ad0_data_1 JMP $+2 JMP L_test_bad SZ R_ad1_data_0 JMP $+4 SZ R_ad1_data_1 JMP $+2 JMP L_test_bad SZ R_ad2_data_0 JMP $+4 SZ R_ad2_data_1 JMP $+2 JMP L_test_bad SZ R_ad3_data_0 JMP L_test_key SZ R_ad3_data_1 JMP L_test_key L_test_bad: CLR WDT SET R_lcd_data_0 SET R_lcd_data_1 SET R_lcd_data_2 SET R_lcd_data_3 CALL Sub_lcd_display JMP L_test_bad ;按鍵、LED及發(fā)熱器檢測(cè) L_test_key: CLR R_temp_6 MOV A, 2ah MOV R_temp_7, A L_test_key_0: CLR WDT CALL Sub_key_test CLR PA.7 CALL Sub_key_test_0 CALL Sub_key_test_1 CALL Sub_led_test SET PDC.0 NOP NOP NOP MOV A, PD CLR PDC.0 SNZ Acc.0 JMP L_test_key_0 RET Sub_test ENDP ;*********************************************** ;R_flag_0.1是否是正處于去抖動(dòng)延時(shí)時(shí)間中,是則為1 ;R_flag_0.0是否有按鍵處于按下?tīng)顟B(tài),是為1 ;R_key_bak_0保存去抖動(dòng)前的按鍵狀態(tài) ;R_key_time_0去抖動(dòng)時(shí)間 ;*********************************************** Sub_key_test_0 PROC SZ R_flag_0.3 RET CLR PA.7 CLR PA.5 SET PA.6 SZ R_flag_0.1 JMP L_key0test_1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key0test_2: SDZ Acc JMP L_key0test_2 MOV A, PA OR A, 0e0h MOV R_key_bak_0, A L_key0test_3: MOV A, 14H MOV R_key_time_0, A SET R_flag_0.1 JMP L_key0test_ret L_key0test_1: SZ R_key_time_0 JMP L_key0test_ret CLR R_flag_0.1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key0test_4: SDZ Acc JMP L_key0test_4 MOV A, PA OR A, 0e0h SUB A, R_key_bak_0 SZ Acc JMP L_key0test_ret CPLA R_key_bak_0 SZ ACC JMP L_key0test_5 CLR R_flag_0.0 JMP L_key0test_ret L_key0test_5: SZ R_flag_0.4 JMP L_key0test_ret MOV A, 0c8h MOV R_buzzer_time, A SET R_flag_0.0 SZ R_key_bak_0.0 JMP L_key0test_6 MOV A, 01h XORM A, R_temp_6 JMP L_key0test_ret L_key0test_6: SZ R_KEY_BAK_0.1 JMP L_key0test_7 MOV A, 02h XORM A, R_temp_6 JMP L_key0test_ret L_key0test_7: SZ R_key_bak_0.2 JMP L_key0test_8 MOV A, 04h XORM A, R_temp_6 JMP L_key0test_ret L_key0test_8: SZ R_key_bak_0.3 JMP L_key0test_9 MOV A, 08h XORM A, R_temp_6 JMP L_key0test_ret L_key0test_9: SZ R_key_bak_0.4 JMP L_key0test_ret MOV A, 03h XORM A, R_temp_7 L_key0test_ret: SET PA.5 RET Sub_key_test_0 ENDP ;*********************************************** ;R_flag_0.3是否是正處于去抖動(dòng)延時(shí)時(shí)間中,是則為1 ;R_flag_0.2是否有按鍵處于按下?tīng)顟B(tài),是為1 ;R_key_bak_1保存去抖動(dòng)前的按鍵狀態(tài) ;R_key_time_1去抖動(dòng)時(shí)間 ;*********************************************** Sub_key_test_1 PROC SZ R_flag_0.1 RET CLR PA.7 CLR PA.6 SET PA.5 SZ R_flag_0.3 JMP L_key1test_1 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key1test_2: SDZ Acc JMP L_key1test_2 MOV A, PA OR A, 0e0h MOV R_key_bak_1, A L_key1test_3: MOV A, 14H MOV R_key_time_1, A SET R_flag_0.3 JMP L_key1test_ret L_key1test_1: SZ R_key_time_1 JMP L_key1test_ret CLR R_flag_0.3 MOV A, 0e0h ANDM A, PAC MOV A, 1fh ORM A, PA MOV A, 1FH ORM A, PAC L_key1test_4: SDZ Acc JMP L_key1test_4 MOV A, PA OR A, 0e0h SUB A, R_key_bak_1 SZ Acc JMP L_key1test_ret CPLA R_key_bak_1 SZ ACC JMP L_key1test_5 CLR R_flag_0.2 JMP L_key1test_ret L_key1test_5: SZ R_flag_0.4 JMP L_key1test_ret SET R_flag_0.2 MOV A, 0c8h MOV R_buzzer_time, A SZ R_key_bak_1.0 JMP L_key1test_6 MOV A, 10h XORM A, R_temp_6 JMP L_key1test_ret L_key1test_6: SZ R_KEY_BAK_1.1 JMP L_key1test_7 MOV A, 20h XORM A, R_temp_6 JMP L_key1test_ret L_key1test_7: SZ R_key_bak_1.2 JMP L_key1test_8 MOV A, 40h XORM A, R_temp_6 JMP L_key1test_ret L_key1test_8: SZ R_key_bak_1.3 JMP L_key1test_9 CLR PCC MOV A, 0ch XORM A, R_temp_7 JMP L_key1test_ret L_key1test_9: SZ R_key_bak_1.4 JMP L_key1test_ret CLR PBC MOV A, 30h XORM A, R_temp_7 L_key1test_ret: SET PA.6 RET Sub_key_test_1 ENDP Sub_key_test PROC SET R_flag_0.4 SZ R_flag_0.0 RET SNZ R_flag_0.2 CLR R_flag_0.4 RET Sub_key_test ENDP ;LED顯示子程序 Sub_led_test PROC CLR PAC CLR R_pa_bak SZ R_temp_6.0 SET R_PA_bak.0 SZ R_temp_6.1 SET R_pa_bak.1 SZ R_temp_6.6 SET R_pa_bak.6 SZ R_temp_6.2 SET R_pa_bak.2 SZ R_temp_6.4 SET R_pa_bak.4 SZ R_temp_6.3 SET R_pa_bak.3 SZ R_temp_6.5 SET R_pa_bak.5 MOV A, R_pa_bak MOV PA, A SET PA.7 MOV A, R_temp_7 MOV PC, A SZ R_temp_7.4 SET PB.4 SNZ R_temp_7.4 CLR PB.4 SZ R_temp_7.5 SET PB.5 SNZ R_temp_7.5 CLR PB.5 RET Sub_led_test ENDP ORG 0ff0h DC 07eh DC 00ch DC 0b6h DC 09eh DC 0cch DC 0dah DC 0fah DC 00eh DC 0feh DC 0deh ORG 0ffah DC 07ch DC 018h DC 0ach DC 09ch DC 0d8h DC 0d4h END |
|