機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
HT46R23控制的智能電飯鍋源程序
HT46R23控制的智能電飯鍋源程序
 更新時(shí)間:2008-7-26 20:05:11  點(diǎn)擊數(shù):2
【字體: 字體顏色
;***************************************
;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
  • 上一篇: 合泰單片機(jī)矩陣鍵盤程序
  • 下一篇: HT48R10-1設(shè)計(jì)的交通指示控制器的程序
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1