📄 wbl.asm
字号:
;MOVWF DISP_BUFFER2
;GOTO END_BUFFER2_CODING
;SET_M:
;ADDLW 01H
;MOVWF DISP_BUFFER2
;END_BUFFER2_CODING:
;*********************
;*********************
;MOVLW 0BH
;MOVWF PCLATH
;MOVF DISP_BUFFER3,0
;CALL CODE_TABLE
;MOVWF DISP_BUFFER3
;*********************
;*********************
;MOVLW 0BH
;MOVWF PCLATH
;MOVF DISP_BUFFER4,0
;ANDLW 7FH
;CALL CODE_TABLE
;BCF PCLATH,3
;BCF PCLATH,4
;BTFSC DISP_BUFFER4,7
;GOTO SET_S
;MOVWF DISP_BUFFER4
;GOTO END_BUFFER4_CODING
;SET_S:
;ADDLW 01H
;MOVWF DISP_BUFFER4
;END_BUFFER4_CODING:
;*********************
;*********************
;MOVLW 0BH
;MOVWF PCLATH
;MOVF DISP_BUFFER5,0
;ANDLW 7FH
;CALL CODE_TABLE
;BCF PCLATH,3
;BCF PCLATH,4
;BTFSC DISP_BUFFER5,7
;GOTO SET_KG
;MOVWF DISP_BUFFER5
;GOTO END_BUFFER5_CODING
;SET_KG:
;ADDLW 01H
;MOVWF DISP_BUFFER5
;END_BUFFER5_CODING:
;***********************
;***********************
;MOVLW 0BH
;MOVWF PCLATH
;MOVF DISP_BUFFER6,0
;ANDLW 7FH
;CALL CODE_TABLE
;BCF PCLATH,3
;BCF PCLATH,4
;BTFSC DISP_BUFFER6,7
;GOTO SET_DP
;MOVWF DISP_BUFFER6
;GOTO END_BUFFER6_CODING
;SET_DP:
;ADDLW 01H
;MOVWF DISP_BUFFER6
;END_BUFFER6_CODING:
;**********************
;**********************
;MOVLW 0BH
;MOVWF PCLATH
;MOVF DISP_BUFFER7,0
;ANDLW 7FH
;CALL CODE_TABLE
;BCF PCLATH,3
;BCF PCLATH,4
;BTFSC DISP_BUFFER7,7
;GOTO SET_N
;MOVWF DISP_BUFFER7
;GOTO END_BUFFER7_CODING
;SET_N:
;ADDLW 01H
;MOVWF DISP_BUFFER7
;END_BUFFER7_CODING:
;**********************
;^^^^^^^^^^^^^^^^^^^^^^
;^^^^^^^^^^^^^^^^^^^^^^^^^^
RET_DISP_INI:
;***************************
CALL SHADOW
BTFSC SYSTEM_STATUS2,POWERSAVING_DONE_FLAG
GOTO SKIP_DISP_BUFFER_SAVE
BSF STATUS,5
CLRF DELTA_ADDR
BCF STATUS,5
DISP_BUFFER_SAVING_LOOP:
BSF STATUS,5
MOVLW DISP_BUFFER_STARTING_ADDR
MOVWF FSR
MOVF DELTA_ADDR,0
ADDWF FSR,1
MOVF INDF,0
MOVWF EXCHANGE_BUFFER
MOVLW DISP_BUFFER_COPY_STARTING_ADDR
MOVWF FSR
MOVF DELTA_ADDR,0
ADDWF FSR,1
MOVF EXCHANGE_BUFFER,0
BSF FSR,7
MOVWF INDF
BCF FSR,7
INCF DELTA_ADDR,1
MOVF DELTA_ADDR,0
ADDLW DISP_BUFFER_COPY_STARTING_ADDR
SUBLW DISP_BUFFER_COPY_END_ADDR
BCF STATUS,5
BTFSC STATUS,0
GOTO DISP_BUFFER_SAVING_LOOP
;MOVF DISP_BUFFER1,0
;BSF STATUS,5
;MOVWF DISP_BUFFER1_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER2,0
;BSF STATUS,5
;MOVWF DISP_BUFFER2_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER3,0
;BSF STATUS,5
;MOVWF DISP_BUFFER3_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER4,0
;BSF STATUS,5
;MOVWF DISP_BUFFER4_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER5,0
;BSF STATUS,5
;MOVWF DISP_BUFFER5_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER6,0
;BSF STATUS,5
;MOVWF DISP_BUFFER6_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER7,0
;BSF STATUS,5
;MOVWF DISP_BUFFER7_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER0,0
;BSF STATUS,5
;MOVWF DISP_BUFFER0_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER8,0
;BSF STATUS,5
;MOVWF DISP_BUFFER8_COPY
;BCF STATUS,5
;MOVF DISP_BUFFER9,0
;BSF STATUS,5
;MOVWF DISP_BUFFER9_COPY
;BCF STATUS,5
SKIP_DISP_BUFFER_SAVE:
BCF DISP_STATUS,SEG_DISP
BCF DISP_STATUS,MENU_DISP
BCF DISP_STATUS,CHOICE_DISP
BCF DISP_STATUS,POWER_SAVE
BCF DISP_STATUS,REFLASH_DISP
;******************************
BCF PCLATH,3
BCF PCLATH,4
RETURN
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DISP:
;##############################
;DISP_BUFFER0 ;旋转框低8位
;DISP_BUFFER1 ;DIG.1
;DISP_BUFFER2 ;DIG.2
;DISP_BUFFER3 ;DIG.3
;DISP_BUFFER4 ;DIG.7
;DISP_BUFFER5 ;DIG.6
;DISP_BUFFER6 ;DIG.5
;DISP_BUFFER7 ;DIG.4
;DISP_BUFFER8 ;淮,粤,P1,P2,P3
;DISP_BUFFER9 ;旋转框高4位,快,常,川,鲁
;LOOP_NUM
;###############################
BSF STATUS,5
CLRF TRISB
BCF STATUS,5
;MOVLW 20H
MOVLW DISP_BUFFER_STARTING_ADDR
MOVWF FSR
DISP_REFLASH:
CLRF RB
BSF RC,5 ;DATA
MOVLW 08H
MOVWF LOOP_NUM
CALL CLK
BCF RC,5
MOVF INDF,0
MOVWF RB
CALL DELAY25us
LOOP0:
CLRF RB
CALL CLK
INCF FSR,1
MOVF INDF,0
MOVWF RB
CALL DELAY25us
DECFSZ LOOP_NUM,1
GOTO LOOP0
MOVF INDF,0
MOVWF RB
BSF RC,6 ;10B
CALL DELAY25us
BCF RC,6
INCF FSR,1
MOVF INDF,0
MOVWF RB
BSF RC,7 ;9B
CALL DELAY25us
BCF RC,7
END_DISP:
CLRF RB
BCF RC,4
BCF RC,5
BSF STATUS,5
MOVLW 0FFH
MOVWF TRISB
BCF STATUS,5
RETURN
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;*******************************
CLK:
BCF RC,4
NOP
NOP
NOP
NOP
BSF RC,4;CLK
NOP
NOP
NOP
NOP
END_CLK:
RETURN ;CLK
;*****************************
;***********************
DELAY25us:
MOVLW 34H
MOVWF DELAY_NUM
WAIT:
DECFSZ DELAY_NUM,1
GOTO WAIT
RETURN
;***********************
LEFT_RIGHT_TURN_TEST:
;返回SYSTEM_STATUS0,bit6-左旋,bit7-右旋
;KEY_WORD ;编码开关的值
;KEY_WORD_LAST
;TURNING_STATUS_STEP ;判断的步骤
;SYSTEM_STATUS1,7
;SYSTEM_STATUS0,6
;SYSTEM_STATUS0,7
MOVF RA,0
MOVWF KEY_WORD
MOVLW 03H
ANDWF KEY_WORD,1
MOVF KEY_WORD_LAST,0
SUBWF KEY_WORD,0
BTFSC STATUS,2
GOTO END_TURNING_TEST
MOVF KEY_WORD,0
MOVWF KEY_WORD_LAST
MOVF TURNING_STATUS_STEP,1
BTFSC STATUS,2
GOTO STARTING_STATUS_TEST
MOVLW 01H
SUBWF TURNING_STATUS_STEP,0
BTFSC STATUS,2
GOTO LR_TEST0
MOVLW 02H
SUBWF TURNING_STATUS_STEP,0
BTFSC STATUS,2
GOTO MID_STATUS_TEST
MOVLW 03H
SUBWF TURNING_STATUS_STEP,0
BTFSC STATUS,2
GOTO LR_TEST1
MOVLW 04H
SUBWF TURNING_STATUS_STEP,0
BTFSC STATUS,2
GOTO LAST_STATUS_TEST
GOTO END_TEST
STARTING_STATUS_TEST:
MOVF KEY_WORD,1
BTFSS STATUS,2
GOTO END_TEST
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
LR_TEST0:
MOVLW 01H
SUBWF KEY_WORD,0
BTFSC STATUS,2
GOTO R_TURN0
MOVLW 02H
SUBWF KEY_WORD,0
BTFSC STATUS,2
GOTO L_TURN0
GOTO END_TEST
R_TURN0:
BSF SYSTEM_STATUS1,7
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
L_TURN0:
BCF SYSTEM_STATUS1,7
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
MID_STATUS_TEST:
MOVLW 03H
SUBWF KEY_WORD,0
BTFSS STATUS,2
GOTO END_TEST
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
LR_TEST1:
BTFSC SYSTEM_STATUS1,7
GOTO R_TURN1
GOTO L_TURN1
R_TURN1:
MOVLW 02H
SUBWF KEY_WORD,0
BTFSS STATUS,2
GOTO END_TEST
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
L_TURN1:
MOVLW 01H
SUBWF KEY_WORD,0
BTFSS STATUS,2
GOTO END_TEST
INCF TURNING_STATUS_STEP,1
GOTO END_TURNING_TEST
LAST_STATUS_TEST:
MOVF KEY_WORD,1
BTFSS STATUS,2
GOTO END_TEST
BTFSC SYSTEM_STATUS1,7
GOTO SET_R_FLAG
GOTO SET_L_FLAG
SET_R_FLAG:
BSF SYSTEM_STATUS0,7
BCF SYSTEM_STATUS0,6
GOTO NEXT_LOOP_START
SET_L_FLAG:
BCF SYSTEM_STATUS0,7
BSF SYSTEM_STATUS0,6
NEXT_LOOP_START:
MOVLW 01H
MOVWF TURNING_STATUS_STEP
GOTO END_TURNING_TEST
END_TEST:
CLRF TURNING_STATUS_STEP
END_TURNING_TEST:
RETURN
;**************************
;***********************
MUL_SEG_SW:
;SEG_NUM
;SEG_NUM_LAST
;SEG_ADDR
;MENU_ADDR
;CHOICE_ADDR
;SEG_ADDR_LAST
;SEG_ADDR_COPY
;OVER_FLAG
;QULITY
;SECOND_TEMP
;SECOND_TEMP_COPY
;MINUTE_TEMP
;MINUTE_TEMP_COPY
;MENU_NUM
;MOVLW 31H
MUL_SEG_SW_START:
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
BCF TMR0_CONFIG_REG,ZERO_START_FLAG
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MOVLW SEGTIME_STARTING_ADDR
MOVWF FSR ;查表结果的缓冲区首地址
;*****************************************
CLEARUP_ON_TEST:
BTFSS SYSTEM_STATUS0,CLEARUP_FLAG
GOTO SKIP_CLEARUP
CLEARUP_MODE_SELECT:
MOVF CLEAR_MODE,1
BTFSC STATUS,2
GOTO CLEARUP_MODE0
MOVLW 01H
SUBWF CLEAR_MODE,0
BTFSC STATUS,2
GOTO CLEARUP_MODE1
CLEARUP_MODE0:
MOVLW 10H
MOVWF SEG_NUM
GOTO END_CLEARUP_MODE_GET
CLEARUP_MODE1
MOVLW 11H
MOVWF SEG_NUM
GOTO END_CLEARUP_MODE_GET
END_CLEARUP_MODE_GET:
BCF SYSTEM_STATUS0,LT
BCF SYSTEM_STATUS0,RT
GOTO MENU_LOOKING_UP
SKIP_CLEARUP:
;***************************************
MOVF RB,0
ANDLW 0F0H
MOVWF SEG_NUM
SWAPF SEG_NUM,1 ;获得模式号
MENU_LOOKING_UP:
BSF STATUS,5
MOVF SYSTEM_STATUS5,0
BCF STATUS,5
ANDLW 04H
BTFSC STATUS,2
GOTO SHIFT_TEST
MOVF SEG_NUM_LAST,0
SUBWF SEG_NUM,0
BTFSS STATUS,2
GOTO SHIFT_HAPPEN
SHIFT_NO_HAPPEN:
BSF STATUS,5
DECFSZ MUL_SEG_SHIFT_COUNTER,1
GOTO SKIP_SEG_FIND
BCF SYSTEM_STATUS5,MUL_SEG_SHIFT_FLAG
BCF STATUS,5
GOTO TABLE_ADDR_REFLASH
SHIFT_HAPPEN:
BSF STATUS,5
BCF SYSTEM_STATUS5,MUL_SEG_SHIFT_FLAG
BCF STATUS,5
GOTO SKIP_SEG_FIND
SHIFT_TEST:
MOVF SEG_NUM_LAST,0
SUBWF SEG_NUM,0
BTFSC STATUS,2
GOTO SKIP_SEG_FIND
;^^^^^^^^^^^^^^^^^^^^^^^^
BSF STATUS,5
BSF SYSTEM_STATUS5,MUL_SEG_SHIFT_FLAG
MOVLW 06H
MOVWF MUL_SEG_SHIFT_COUNTER
BCF STATUS,5
GOTO SKIP_SEG_FIND
;^^^^^^^^^^^^^^^^^^^^^^^^
;查档位偏移地址
TABLE_ADDR_REFLASH:
MOVLW 0BH
MOVWF PCLATH
MOVF SEG_NUM,0
CALL SEG_ADDR_TABLE ;根据模式号查得所需菜单的偏移地址
MOVWF SEG_ADDR
MOVWF MENU_ADDR
MOVWF CHOICE_ADDR
MOVLW 01H
MOVWF MENU_NUM
BCF PCLATH,3
BCF PCLATH,4
SKIP_SEG_FIND:
;^^^^^^^^^^^^^^^^
BCF STATUS,5
;^^^^^^^^^^^^^^^^
BTFSC SYSTEM_STATUS0,LT
GOTO MENU_FIND
SKIP_MENU_FIND:
BTFSC SYSTEM_STATUS0,RT
GOTO MENUCHOICE_FIND
SKIP_MENUCHOICE_FIND:
GOTO TIME_GET
MENU_FIND: ;左转选择菜单
MOVLW 0CH
MOVWF PCLATH
INCF CHOICE_ADDR,1
MOVF CHOICE_ADDR,0
CALL MENU_TABLE
BCF PCLATH,3
BCF PCLATH,4
MOVWF OVER_FLAG
MOVLW 0F1H
SUBWF OVER_FLAG,0 ;此项菜单是否结束
BTFSC STATUS,2
GOTO THE_END_OF_MENU0 ;***********
MOVLW 0F2H
SUBWF OVER_FLAG,0 ;是否到整个菜单的结尾
BTFSC STATUS,2
GOTO THE_END_OF_SEG0 ;***********
GOTO MENU_FIND
THE_END_OF_MENU0: ;***********
INCF MENU_NUM,1
INCF CHOICE_ADDR,1
MOVF CHOICE_ADDR,0
MOVWF MENU_ADDR
GOTO END_MENU_FIND ;此项菜单结束加1则指向下一个菜单名
THE_END_OF_SEG0: ;***********
MOVF SEG_ADDR,0
MOVWF MENU_ADDR
MOVWF CHOICE_ADDR
MOVLW 01H
MOVWF MENU_NUM
GOTO END_MENU_FIND ;若到了整个菜单的结尾则应指向首个菜单名
END_MENU_FIND:
GOTO TIME_GET
MENUCHOICE_FIND:
MOVLW 0CH
MOVWF PCLATH
INCF CHOICE_ADDR,1
MOVF CHOICE_ADDR,0
CALL MENU_TABLE
BCF PCLATH,3
BCF PCLATH,4
MOVWF OVER_FLAG
MOVLW 0F0H
SUBWF OVER_FLAG,0
BTFSC STATUS,2
GOTO THE_END_OF_CHOICE ;****************
MOVLW 0F1H
SUBWF OVER_FLAG,0
BTFSC STATUS,2
GOTO THE_END_OF_MENU1 ;****************
MOVLW 0F2H
SUBWF OVER_FLAG,0
BTFSC STATUS,2
GOTO THE_END_OF_SEG1 ;****************
GOTO MENUCHOICE_FIND
THE_END_OF_CHOICE:
INCF CHOICE_ADDR,1
GOTO END_CHOICE_FIND
THE_END_OF_MENU1:
THE_END_OF_SEG1:
MOVF MENU_ADDR,0
MOVWF CHOICE_ADDR
GOTO END_CHOICE_FIND
END_CHOICE_FIND:
GOTO TIME_GET
TIME_GET:
MOVF CHOICE_ADDR,0
MOVWF CHOICE_ADDR_COPY
LOOP1:
MOVLW 0CH
MOVWF PCLATH
MOVF CHOICE_ADDR_COPY,0
CALL MENU_TABLE
MOVWF INDF
INCF FSR,1
INCF CHOICE_ADDR_COPY,1
MOVF CHOICE_ADDR_COPY,0
CALL MENU_TABLE
BCF PCLATH,3
BCF PCLATH,4
MOVWF INDF
INCF FSR,1;**************
INCF FSR,1
INCF CHOICE_ADDR_COPY,1
ANDLW 80H
BTFSC STATUS,2
GOTO LOOP1
;********************
QULITY_GET:
MOVLW 0CH
MOVWF PCLATH
MOVF CHOICE_ADDR_COPY,0
CALL MENU_TABLE
BCF PCLATH,3
BCF PCLATH,4
MOVWF QULITY ;查重量
;****************************
MOVLW SEGTIME_STARTING_ADDR
ADDLW 01H
;MOVLW 32H
MOVWF FSR
MOVF INDF,0
ANDLW 0FH
DECF FSR,1
SUBWF INDF,0
BTFSS STATUS,2
GOTO END_MENU_TABLE_LOOKUP
MOVF INDF,1
BTFSS STATUS,2
GOTO END_MENU_TABLE_LOOKUP
TIME_SET:
BCF SYSTEM_STATUS1,POWER_ERR_FLAG
MOVF CHOICE_ADDR_LAST,0
SUBWF CHOICE_ADDR,0
BTFSC STATUS,2
GOTO SET_START
CLRF SECOND_TEMP
CLRF MINUTE_TEMP
SET_START:
BTFSC SYSTEM_STATUS0,LT
GOTO SUB_UNIT
BTFSC SYSTEM_STATUS0,RT
GOTO ADD_UNIT
;^^^^^^^^^^^^^^^^^^^^^^
MOVF SECOND_TEMP,0
SUBWF MINUTE_TEMP,0
BTFSS STATUS,2
GOTO END_TIME_SET
MOVF SECOND_TEMP,1
BTFSS STATUS,2
GOTO END_TIME_SET
MOVLW 01H
SUBWF SEG_NUM,0
BTFSC STATUS,2
GOTO SET_ZERO_START_FLAG
MOVLW 08H
SUBWF SEG_NUM,0
BTFSC STATUS,2
GOTO SET_ZERO_START_FLAG
MOVLW 09H
SUBWF SEG_NUM,0
BTFSC STATUS,2
GOTO SET_ZERO_START_FLAG
GOTO END_TIME_SET
SET_ZERO_START_FLAG:
BSF TMR0_CONFIG_REG,ZERO_START_FLAG
;^^^^^^^^^^^^^^^^^^^^^^
GOTO END_TIME_SET
SUB_UNIT:
SUB_SECOND:
MOVF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -