📄 wbl.asm
字号:
PROCESSOR PIC16F73
;REGISTER DEFINITION:
;BANK0
;SYSTEM_REGISTER_DEFINITION:
INDF EQU 00H
TMR0 EQU 01H
PCL EQU 02H
STATUS EQU 03H
FSR EQU 04H
RA EQU 05H
RB EQU 06H
RC EQU 07H
PCLATH EQU 0AH
INTCON EQU 0BH
PIR1 EQU 0CH
PIR2 EQU 0DH
TMR1L EQU 0EH
TMR1H EQU 0FH
T1CON EQU 10H
TMR2 EQU 11H
T2CON EQU 12H
SSPBUF EQU 13H
SSPCON EQU 14H
CCPR1L EQU 15H
CCPR1H EQU 16H
CCP1CON EQU 17H
CCPR2L EQU 1BH
CCPR2H EQU 1CH
CCP2CON EQU 1DH
ADRES EQU 1EH
ADCON0 EQU 1FH
;USER_REGISTER_DEFINITION:
;DISP_INI_AREA:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DISPCODE_ADDR EQU 7BH
LOOP_NUM0 EQU 7CH
DISP_STATUS EQU 77H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;DISP_AREA:20~2BH
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DISP_BUFFER_STARTING_ADDR EQU 20H
DISP_BUFFER0 EQU 20H
DISP_BUFFER1 EQU 21H
DISP_BUFFER2 EQU 22H
DISP_BUFFER3 EQU 23H
DISP_BUFFER4 EQU 24H
DISP_BUFFER5 EQU 25H
DISP_BUFFER6 EQU 26H
DISP_BUFFER7 EQU 27H
DISP_BUFFER8 EQU 28H
DISP_BUFFER9 EQU 29H
DISP_BUFFER_END_ADDR EQU 29H
LOOP_NUM EQU 2BH
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;SEGTIME_AREA:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SEGTIME_STARTING_ADDR EQU 31H
SECOND0 EQU 31H
MINUTE0 EQU 32H
COOK_MODE0 EQU 33H
SECOND1 EQU 34H
MINUTE1 EQU 35H
COOK_MODE1 EQU 36H
SECOND2 EQU 37H
MINUTE2 EQU 38H
COOK_MODE2 EQU 39H
SECOND3 EQU 3AH
MINUTE3 EQU 3BH
COOK_MODE3 EQU 3CH
SEGTIME_END_ADDR EQU 3CH
T_SECOND EQU 52H
T_MINUTE EQU 4EH
COOK_MODE EQU 3DH
QULITY EQU 41H
END_FLAG EQU 5AH
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;LEFT_RIGHT_TURN_TEST_AREA:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TURNING_STATUS_STEP EQU 42H
KEY_WORD EQU 43H
KEY_WORD_LAST EQU 75H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;MUL_SEG_SW:
SEG_NUM EQU 44H
SEG_NUM_LAST EQU 45H
SEG_ADDR EQU 46H
SEG_ADDR_LAST EQU 47H
;SEG_ADDR_COPY EQU 48H
MAINLOOP_COUNTER EQU 48H
MENU_NUM EQU 78H
MENU_ADDR EQU 53H
MENU_ADDR_LAST EQU 79H
CHOICE_ADDR EQU 54H
CHOICE_ADDR_LAST EQU 59H
CHOICE_ADDR_COPY EQU 55H
OVER_FLAG EQU 49H
SECOND_TEMP EQU 4AH
SECOND_TEMP_COPY EQU 4BH
MINUTE_TEMP EQU 4CH
MINUTE_TEMP_COPY EQU 4DH
;BCD_EXCHANGE
;^^^^^^^^^^^^^^^^^^^^^^^^^^
OCT_NUM EQU 4FH
TEN_LEVEL EQU 50H
ONE_LEVEL EQU 51H
HUNDRED_LEVEL EQU 5DH
TEST_LEVEL EQU 5EH
BCD_TEMP EQU 5FH
;^^^^^^^^^^^^^^^^^^^^^^^^^^
SECOND_UNIT EQU 56H
MINUTE_UNIT EQU 57H
;UNZIP:
MINUTES EQU 5BH
SECONDS EQU 5CH
;DELAY_AREA:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^
DELAY_NUM EQU 2EH
;^^^^^^^^^^^^^^^^^^^^^^^^^^^
COOK_MODE_ADDR EQU 2AH
WORK_TIME_FIRSTBUFFER EQU 2FH
WORK_TIME_SECONDBUFFER EQU 30H
POWER_MODE EQU 58H
SETUP_KEY EQU 60H
SETUP_KEY_LAST EQU 62H
EXCHANGED_BIT_FLAG EQU 69H
TIME_UNIT_NUM EQU 70H
TIME_UNIT_ADDR EQU 74H
COOK_MODE_TEMP EQU 68H
;TIMER_AREA
;^^^^^^^^^^^^^^^^^^^^^^^^^^^
INT_NUM0 EQU 61H
SEG_SECOND EQU 6AH
SEG_MINUTE EQU 6BH
T_TIME EQU 64H
T_TIME_BUFFER EQU 65H
WORK_TIME EQU 66H
WORK_TIME_BUFFER EQU 67H
TIME_SEG EQU 7AH
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;T_COUNT_AREA
;^^^^^^^^^^^^^^^^^^^^^^^^^^
COUNT_NUM EQU 76H
;^^^^^^^^^^^^^^^^^^^^^^^^^^
;INT_AREA:61~6FH
;^^^^^^^^^^^^^^^^^^^^^^^^^^
T1L EQU 2CH
T1H EQU 2DH
;^^^^^^^^^^^^^^^^^^^^^^^^^^
;ERR_FLAG_TEST_AREA
;^^^^^^^^^^^^^^^^^^^^^^^^^^
ADDR_TEMP EQU 63H
;^^^^^^^^^^^^^^^^^^^^^^^^^^
DELAY_TIMEL EQU 6CH
CLEAR_MODE EQU 6DH
ACTIVE_KEY EQU 6EH ;bit0:PAUSE_KEY
;bit1:TIMEUNIT_SETUP_KEY,VOICE_KEY
;bit2:POWERSAVE_KEY,LOCK_KEY
;bit3:CLEARUP_KEY
;bit4:START_SYSTEM_KEY
;bit5:
;bit6:
;bit7:SECOND_FUNCTION_KEY
PAUSE_KEY EQU 00H
TIMEUNIT_SETUP_KEY EQU 01H
POWERSAVE_KEY EQU 02H
CLEARUP_KEY EQU 03H
VOICE_KEY EQU 01H
LOCK_KEY EQU 02H
START_SYSTEM_KEY EQU 04H
SECOND_FUNCTION_KEY EQU 07H
TMR0_CONFIG_REG EQU 40H ;bit0:MULTI_VOICE_FLAG
;bit1:DOOR_OPENED_FLAG
;bit2:ZERO_START_FLAG
;bit3:DING_TIMER_FLAG
;bit4:TENTH_SECOND_FLAG
;bit5:THAWING_FLAG
;bit6:MUSIC_SEG_LOAD_FLAG
;bit7:TMR0_CONFIG_FLAG
MULTI_VOICE_FLAG EQU 00H
DOOR_OPENED_FLAG EQU 01H
ZERO_START_FLAG EQU 02H
DING_TIMER_FLAG EQU 03H
TENTH_SECOND_FLAG EQU 04H
THAWING_FLAG EQU 05H
MUSIC_SEG_LOAD_FLAG EQU 06H
TMR0_CONFIG_FLAG EQU 07H
DING_TIME EQU 3EH
SYSTEM_STATUS3 EQU 3FH
;SYSTEM_AREA:70~7FH
SYSTEM_STATUS0 EQU 72H ;bit0:TIMER_START_FLAG
;bit1:SECOND_FLAG
;bit2:DING_FLAG
;bit3:HALF_SECOND_FLAG
;bit4:CLEARUP_FLAG
;bit5:25us标志位
;bit6:编码开关左转标志位:1有转动0无转动
;bit7:编码开关右转标志位:1有转动0无转动
SYSTEM_STATUS1 EQU 73H ;bit0:重量出错标志位
;bit1:菜单出错标志位
;bit2:功率出错标志位
;bit3:PAUSE_CANCEL_FLAG
;bit4:SYSTEM_ON_FLAG
;bit5:GRILL_ON_FLAG
;bit6:MICROWAVE_ON_FLAG
;bit7:左转右转临时标志位
SYSTEM_STATUS2 EQU 71H ;bit0:SHUT_DOWN_FLAG
;bit1:SEG_TIME_OVER_FLAG
;bit2:T_TIME_OVER_FLAG
;bit3:WORK_TIME_OVER_FLAG
;bit4:DELAYEND_FLAG
;bit5:SYSTEM_LOCK_FLAG
;bit6:BLOWER_ON_FLAG
;bit7:POWERSAVING_DONE_FLAG
SYSTEM_STATUS3 EQU 3FH ;bit0:LOCK_FLAG
;bit1:CHOICE_SELECTED
;bit2:MENU_SELECTED
;bit3:SEG_SELECTED
;bit4:FULL_WAVE_FLAG
;bit5:COOL_FLAG
;bit6:WAVE_OVER5M_FLAG
;bit7:CANCEL_FLAG
LOCK_FLAG EQU 00H
CHOICE_SELECTED EQU 01H
MENU_SELECTED EQU 02H
SEG_SELECTED EQU 03H
FULL_WAVE_FLAG EQU 04H
COOL_FLAG EQU 05H
WAVE_OVER5M_FLAG EQU 06H
CANCEL_FLAG EQU 07H
;SYSTEM_STATUS0:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TIMER_START_FLAG EQU 00H
SECOND_FLAG EQU 01H
DING_FLAG EQU 02H
HALF_SECOND_FLAG EQU 03H
CLEARUP_FLAG EQU 04H
us_FLAG EQU 05H
LT EQU 06H
RT EQU 07H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;SYSTEM_STATUS1:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
QULITY_ERR_FLAG EQU 00H
MENU_ERR_FLAG EQU 01H
POWER_ERR_FLAG EQU 02H
PAUSE_CANCEL_FLAG EQU 03H
SYSTEM_ON_FLAG EQU 04H
GRILL_ON_FLAG EQU 05H
MICROWAVE_ON_FLAG EQU 06H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;SYSTEM_STATUS2
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SHUT_DOWN_FLAG EQU 00H
SEG_TIME_OVER_FLAG EQU 01H
T_TIME_OVER_FLAG EQU 02H
WORK_TIME_OVER_FLAG EQU 03H
DELAYEND_FLAG EQU 04H
SYSTEM_LOCK_FLAG EQU 05H
BLOWER_ON_FLAG EQU 06H
POWERSAVING_DONE_FLAG EQU 07H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;DISP_STATUS
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SEG_DISP EQU 00H
MENU_DISP EQU 01H
CHOICE_DISP EQU 02H
POWER_SAVE EQU 03H
REFLASH_DISP EQU 04H
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;SYSTEM_AREA:
PCLATH_STORE EQU 7DH
W_STORE EQU 7EH
STATUS_STORE EQU 7FH
;BANK1
OPTION EQU 01H
TRISA EQU 05H
TRISB EQU 06H
TRISC EQU 07H
PIE1 EQU 0CH
PIE2 EQU 0DH
PCON EQU 0EH
WDTCTR EQU 0FH
PR2 EQU 12H
ADCON1 EQU 1FH
COOL_TIMER_SECOND EQU 20H
COOL_TIMER_MINUTE EQU 21H
SEG_MINUTE_REMAINING EQU 22H
SEG_SECOND_REMAINING EQU 23H
MUSIC_SEG_NUM EQU 24H
MUSIC_SEG_BUFFER EQU 25H
VOICE_NUM EQU 26H
MUSIC_STARTING_ADDR EQU 27H
VOICE_NUM_TYPE EQU 28H
DISP_BUFFER_COPY_STARTING_ADDR EQU 29H
DISP_BUFFER0_COPY EQU 29H
DISP_BUFFER1_COPY EQU 2AH
DISP_BUFFER2_COPY EQU 2BH
DISP_BUFFER3_COPY EQU 2CH
DISP_BUFFER4_COPY EQU 2DH
DISP_BUFFER5_COPY EQU 2EH
DISP_BUFFER6_COPY EQU 2FH
DISP_BUFFER7_COPY EQU 30H
DISP_BUFFER8_COPY EQU 31H
DISP_BUFFER9_COPY EQU 32H
DISP_BUFFER_COPY_END_ADDR EQU 32H
SHADOW0 EQU 33H
SHADOW1 EQU 34H
SHADOW_DELAY EQU 35H
ms_BUFFER EQU 36H
HALF_SECOND_COUNTER EQU 37H
TENTH_SECOND_COUNTER EQU 38H
SECOND_REMAINING EQU 39H
MINUTE_REMAINING EQU 3AH
DELTA_ADDR EQU 3BH
EXCHANGE_BUFFER EQU 3CH
;START_KEY EQU 3DH
;START_KEY_LAST EQU 3EH
SYSTEM_STATUS5 EQU 3FH ;bit0:BUZZER_ON_FLAG
;bit1:START_SYSTEM_FLAG
;bit2:MUL_SEG_SHIFT_FLAG
BUZZER_ON_FLAG EQU 00H
START_SYSTEM_FLAG EQU 01H
MUL_SEG_SHIFT_FLAG EQU 02H
MUL_SEG_SHIFT_COUNTER EQU 40H
;ORG 0000H
GOTO MAIN
ORG 0004H
INT_SER:
MOVWF W_STORE
MOVF PCLATH,0
MOVWF PCLATH_STORE
MOVF STATUS,0
BCF STATUS,5
MOVWF STATUS_STORE ;保护现场
BSF PCLATH,3
BCF PCLATH,4
BTFSC PIR1,0
CALL TMR1_SER
BTFSC INTCON,2
CALL TMR0_SER
END_INT_SER:
BCF STATUS,5
MOVF STATUS_STORE,0
MOVWF STATUS
MOVF PCLATH_STORE,0
MOVWF PCLATH
MOVF W_STORE,0 ;恢复现场
RETFIE
MAIN:
BSF PCLATH,3
BCF PCLATH,4
CALL INI
;BCF PCLATH,3
;BCF PCLATH,4
BSF INTCON,6
BSF INTCON,7
BSF T1CON,0
;*****************
BSF T2CON,2
;*****************
MAINLOOP:
;^^^^^^^^^^^^^^^^^^^^^
INCF MAINLOOP_COUNTER,1
BTFSS STATUS,2
GOTO SKIP_SET_MAINLOOP_COUNTER
MOVLW 0FFH
MOVWF MAINLOOP_COUNTER
SKIP_SET_MAINLOOP_COUNTER:
;^^^^^^^^^^^^^^^^^^^^^
CALL DELAY25us
BTFSC SYSTEM_STATUS1,SYSTEM_ON_FLAG
GOTO SKIP_DATA_RELOAD
BTFSC SYSTEM_STATUS3,LOCK_FLAG
GOTO SKIP_DATA_RELOAD
CALL TIME_UNIT_COUNT
CALL LEFT_RIGHT_TURN_TEST
CALL MUL_SEG_SW ;查表求时间及烹煮方式
CALL DATA_UNZIP ;将查得的数据解压缩
CALL T_COUNT ;计算烹煮时间
CALL ERR_FLAG_TEST
CALL CANCEL_TEST
SKIP_DATA_RELOAD:
CALL DISP_INI
CALL DISP ;将显示缓冲区中的数据送显示屏
CALL TIMER
CALL SYSTEM_SETUP
CALL DING_CONFIG
GOTO MAINLOOP
CANCEL_TEST:
BTFSS SYSTEM_STATUS3,CANCEL_FLAG
GOTO END_CANCEL_TEST
BCF SYSTEM_STATUS3,CANCEL_FLAG
CLRF SECOND_TEMP
CLRF MINUTE_TEMP
;CLRF T_SECOND
;CLRF T_MINUTE
BCF SYSTEM_STATUS0,CLEARUP_FLAG
CALL RESET_DELAYTIMER
BSF SYSTEM_STATUS3,SEG_SELECTED
BSF DISP_STATUS,SEG_DISP
RESET_MUL_SEG_SW:
MOVF SEG_ADDR,0
MOVWF SEG_ADDR_LAST
MOVWF MENU_ADDR
MOVWF MENU_ADDR_LAST
MOVWF CHOICE_ADDR
MOVWF CHOICE_ADDR_LAST
MOVLW 01H
MOVWF MENU_NUM
END_CANCEL_TEST:
RETURN
MUSIC_STARTINGADDR_GET:
MOVLW 0EH
MOVWF PCLATH
BSF STATUS,5
MOVF VOICE_NUM,0
CALL MUSIC_STARTING_ADDRESS_TABLE
MOVWF MUSIC_STARTING_ADDR
BCF STATUS,5
BCF PCLATH,3
BCF PCLATH,4
RETURN
DING_CONFIG:
BSF STATUS,5
MOVF SYSTEM_STATUS5,0
ANDLW 01H
BCF STATUS,5
BTFSC STATUS,2
GOTO BUZZER_FREE
BCF SYSTEM_STATUS0,DING_FLAG
GOTO DING_PROCESS
BUZZER_FREE:
BTFSS SYSTEM_STATUS0,DING_FLAG
GOTO DING_PROCESS
BSF STATUS,5
BSF SYSTEM_STATUS5,0
BCF STATUS,5
CALL VOICE_NUM_GET
CALL RESET_DING
GOTO RET_DING_CONFIG
DING_PROCESS:
;************************************
CALL MUSIC_STARTINGADDR_GET
;**************************************
BTFSS TMR0_CONFIG_REG,MUSIC_SEG_LOAD_FLAG
GOTO RET_DING_CONFIG
BSF STATUS,5
INCF MUSIC_SEG_NUM,1
BCF STATUS,5
CALL MUSIC_SEG_LOAD
RET_DING_CONFIG:
RETURN
RESET_DING:
BSF RC,3
BCF SYSTEM_STATUS0,DING_FLAG
BSF TMR0_CONFIG_REG,MUSIC_SEG_LOAD_FLAG
;****************************
CALL MUSIC_STARTINGADDR_GET
;****************************
BSF STATUS,5
CLRF MUSIC_SEG_NUM
BCF STATUS,5
CALL MUSIC_SEG_LOAD
RETURN
MUSIC_SEG_LOAD:
BCF TMR0_CONFIG_REG,MUSIC_SEG_LOAD_FLAG
MUSIC_LOOP:
CALL TMR0_CONFIG
MOVLW 0EH
MOVWF PCLATH
BSF STATUS,5
MOVF MUSIC_SEG_NUM,0
;******************************
ADDWF MUSIC_STARTING_ADDR,0
;******************************
CALL MUSIC_TABLE
BCF PCLATH,3
BCF PCLATH,4
MOVWF MUSIC_SEG_BUFFER
MOVLW 0FFH
SUBWF MUSIC_SEG_BUFFER,0
BCF STATUS,5
BTFSS STATUS,2
GOTO SEG_LOAD
;^^^^^^^^^^^^^^^^^^^^^^^^^^
BSF STATUS,5
BCF SYSTEM_STATUS5,0
BCF STATUS,5
;^^^^^^^^^^^^^^^^^^^^^^^^^^^
BCF RC,3
BSF STATUS,5
CLRF MUSIC_SEG_NUM
BCF STATUS,5
GOTO MUSIC_LOOP
SEG_LOAD:
;^^^^^^^^^^^^^^^^^^^^^
BSF STATUS,5
MOVF MUSIC_SEG_BUFFER,1
BCF STATUS,5
BTFSS STATUS,2
GOTO SKIP_SHUT
BCF RC,3
GOTO RET_MUSIC_SEG_BUFFER
;^^^^^^^^^^^^^^^^^^^^^
SKIP_SHUT:
BSF STATUS,5
MOVF SYSTEM_STATUS5,0
BCF STATUS,5
ANDLW 01H
BTFSS STATUS,2
BSF RC,3
BSF STATUS,5
MOVF MUSIC_SEG_BUFFER,0
MOVWF PR2
BCF STATUS,0
RRF MUSIC_SEG_BUFFER,0
BCF STATUS,5
MOVWF CCPR1L
RET_MUSIC_SEG_BUFFER:
RETURN
TMR0_CONFIG:
BSF STATUS,5
BCF TMR0,0
BCF TMR0,1
BSF TMR0,2
BCF STATUS,5
MOVLW 19H
;MOVLW 18H
;MOVLW 1AH
;MOVLW 1CH
MOVWF DING_TIME
BCF INTCON,2
BSF INTCON,5
BCF TMR0_CONFIG_REG,TMR0_CONFIG_FLAG
CLRF TMR0
END_TMR0_CONFIG:
RETURN
TIME_UNIT_COUNT:
MOVLW 0EH
MOVWF PCLATH
MOVF TIME_UNIT_NUM,0
CALL TIME_UNIT_ADDR_TABLE
MOVWF TIME_UNIT_ADDR
MOVF TIME_UNIT_ADDR,0
CALL TIME_UNIT_TABLE
MOVWF SECOND_UNIT
INCF TIME_UNIT_ADDR,1
MOVF TIME_UNIT_ADDR,0
CALL TIME_UNIT_TABLE
MOVWF MINUTE_UNIT
BCF PCLATH,3
BCF PCLATH,4
RETURN
;DOOR_OPEN_SER:
;BCF TMR0_CONFIG_REG,DOOR_OPENED_FLAG
;BTFSS RA,5
;GOTO END_DOOR_OPEN_SER
;BSF TMR0_CONFIG_REG,DOOR_OPENED_FLAG
;END_DOOR_OPEN_SER:
;RETURN
STARTUP_CONFIG:
BTFSC SYSTEM_STATUS1,SYSTEM_ON_FLAG
GOTO NORMAL_TEST
BTFSS SYSTEM_STATUS0,CLEARUP_FLAG
GOTO NORMAL_TEST
BTFSS TMR0_CONFIG_REG,DOOR_OPENED_FLAG
GOTO CLEARUP_START_DELAY_TEST
BCF SYSTEM_STATUS2,DELAYEND_FLAG
CALL RESET_DELAYTIMER
GOTO END_STARTUP_CONFIG
CLEARUP_START_DELAY_TEST:
BSF T1CON,0
CALL DELAYEND_TEST
BTFSC SYSTEM_STATUS2,DELAYEND_FLAG
GOTO SYSTEM_STARTED
GOTO END_STARTUP_CONFIG
NORMAL_TEST:
START_BTN_TEST:
;MOVF RA,0
;ANDLW 04H
;BSF STATUS,5
;MOVWF START_KEY
;MOVF START_KEY_LAST,0
;XORWF START_KEY,0
;BCF STATUS,5
;BTFSC STATUS,2
;GOTO END_STARTUP_CONFIG
;^^^^^^^^^^^^^^^^^^
HARDWARE_RESTRICT_TEST:
;BTFSC RA,2
;GOTO END_STARTUP_CONFIG
BSF STATUS,5
MOVLW 02H
ANDWF SYSTEM_STATUS5,0
BCF SYSTEM_STATUS5,START_SYSTEM_FLAG
BCF STATUS,5
BTFSC STATUS,2
GOTO END_STARTUP_CONFIG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -