;***************************************
;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 是否有交流电,没有为1
;R_flag_0.7
;R_flag_1.0 用于交流电检测
;R_flag_1.1 用于秒点跳跃
;R_flag_1.2 是否处于时钟调整,是为1
;R_flag_1.3 左锅开关标志,开为1
;R_flag_1.4 左锅定时器是否处于调整期,是为1
;R_flag_1.5 是否快速煮饭,是为1
;R_flag_1.6 右锅定时器是否处于调整期,是为1
;R_flag_1.7 左定时器是上午不是下午
;R_flag_2.0 右定时器是上午不是下午
;R_flag_2.1 右锅开关标志,开为1
;R_flag_2.2 煲汤标志
;R_flag_2.3 油炸标志
;R_flag_2.4 左定时器是否有效,是为1
;R_flag_2.5 右定时器是否有效,是为1
;R_flag_2.6 用于煮饭
;R_flag_2.7
;R_flag_3.0 左锅保温标志,保温为1
;R_flag_3.1 右锅保温标志,保温为1
;R_flag_3.2 是否为焖饭过程,是为1
;R_flag_3.3 煮粥最后阶段标志,是为1
;R_flag_3.4 煲汤最后阶段标志,是为1
;R_flag_3.5 左锅顶部加热器过温,是为1
;R_flag_3.6 右锅顶部加热器过温,是为1
;R_flag_3.7 是否允许进入睡眠状态
;****************************************
#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
;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 是否有交流电,没有为1
;R_flag_0.7
;R_flag_1.0 用于交流电检测
;R_flag_1.1 用于秒点跳跃
;R_flag_1.2 是否处于时钟调整,是为1
;R_flag_1.3 左锅开关标志,开为1
;R_flag_1.4 左锅定时器是否处于调整期,是为1
;R_flag_1.5 是否快速煮饭,是为1
;R_flag_1.6 右锅定时器是否处于调整期,是为1
;R_flag_1.7 左定时器是上午不是下午
;R_flag_2.0 右定时器是上午不是下午
;R_flag_2.1 右锅开关标志,开为1
;R_flag_2.2 煲汤标志
;R_flag_2.3 油炸标志
;R_flag_2.4 左定时器是否有效,是为1
;R_flag_2.5 右定时器是否有效,是为1
;R_flag_2.6 用于煮饭
;R_flag_2.7
;R_flag_3.0 左锅保温标志,保温为1
;R_flag_3.1 右锅保温标志,保温为1
;R_flag_3.2 是否为焖饭过程,是为1
;R_flag_3.3 煮粥最后阶段标志,是为1
;R_flag_3.4 煲汤最后阶段标志,是为1
;R_flag_3.5 左锅顶部加热器过温,是为1
;R_flag_3.6 右锅顶部加热器过温,是为1
;R_flag_3.7 是否允许进入睡眠状态
;****************************************
#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转换设置
CLR ACSR
MOV A, 0a0h
MOV ADCR, A
CLR ADCR.7
;**********************
;寄存器初始化
;定时器中断为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
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转换设置
CLR ACSR
MOV A, 0a0h
MOV ADCR, A
CLR ADCR.7
;**********************
;寄存器初始化
;定时器中断为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
;定时中断服务子程序
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是否是正处于去抖动延时时间中,是则为1
;R_flag_0.0是否有按键处于按下状态,是为1
;R_key_bak_0保存去抖动前的按键状态
;R_key_time_0去抖动时间
;***********************************************
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是否是正处于去抖动延时时间中,是则为1
;R_flag_0.2是否有按键处于按下状态,是为1
;R_key_bak_1保存去抖动前的按键状态
;R_key_time_1去抖动时间
;***********************************************
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
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是否是正处于去抖动延时时间中,是则为1
;R_flag_0.0是否有按键处于按下状态,是为1
;R_key_bak_0保存去抖动前的按键状态
;R_key_time_0去抖动时间
;***********************************************
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是否是正处于去抖动延时时间中,是则为1
;R_flag_0.2是否有按键处于按下状态,是为1
;R_key_bak_1保存去抖动前的按键状态
;R_key_time_1去抖动时间
;***********************************************
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
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
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_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
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
;判断左锅定时器是否有效子程序
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
;判断右锅定时器是否有效子程序
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
;计算当前时间到零点时的分钟数
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
;计算左定时器时间到零点时的分钟数
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
;计算右定时器时间到零点时的分钟数
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
;判断定时时间是否已到
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转换子程序
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
;左锅驱动加热器子程序
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
JM
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
;判断左锅定时器是否有效子程序
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
;判断右锅定时器是否有效子程序
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
;计算当前时间到零点时的分钟数
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
;计算左定时器时间到零点时的分钟数
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
;计算右定时器时间到零点时的分钟数
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
;判断定时时间是否已到
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转换子程序
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
;左锅驱动加热器子程序
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
JM