📄 spm-02.asm
字号:
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Finish-High Communication ***************
FINH_COM
MOVF FINH_DATA_HB,W ;"FINH_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF FINH_DATA_LB,W ;"FINH_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Finish-Low Communication ***************
FINL_COM
MOVF FINL_DATA_HB,W ;"FINL_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF FINL_DATA_LB,W ;"FINL_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Communication End ***************
COM_END
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Send of hexadecimal Number Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SEND_HEX_NUM
MOVWF HEX_TEMP ;"Wreg" --> "HEX_TEMP"
CLRF NUM_CHAR_010 ;Clear "NUM_CHAR_010"
CLRF NUM_CHAR_001 ;Clear "NUM_CHAR_001"
;**************************************
; Conversion of the tens place
;**************************************
MOVF HEX_TEMP,W ;"HEX_TEMP" --> "Wreg"
MOVWF CONV_TEMP ;"Wreg" --> "CONV_TEMP"
SWAPF CONV_TEMP,F ;B'xxxx XXXX' --> B'XXXX xxxx'
MOVLW B'00001111' ;B'0000 1111' --> "Wreg"
ANDWF CONV_TEMP,F ;"CONV_TEMP" & "Wreg" --> "CONV_TEMP"
MOVF CONV_TEMP,W ;"CONV_TEMP" --> "Wreg"
SUBLW H'09' ;H'09' - "Wreg" --> "Wreg" (When CNT1 is 0-9, CF=1)
BTFSS STATUS,0 ;B'xxxx xxx1'?
GOTO SEND_HEX_NUM_3 ;No. SEND_HEX_NUM_3
;*************** Processing of 0-9 ***************
MOVLW A'0' ;A'0' --> "Wreg"
ADDWF CONV_TEMP,F ;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
GOTO SEND_HEX_NUM_4 ;SEND_HEX_NUM_4
;*************** Processing of A-F ***************
SEND_HEX_NUM_3
MOVLW D'10' ;D'10' --> "Wreg"
SUBLW A'A' ;A'A' - "Wreg" --> "Wreg"
ADDWF CONV_TEMP,F ;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
SEND_HEX_NUM_4
MOVF CONV_TEMP,W ;"CONV_TEMP" --> "Wreg"
MOVWF NUM_CHAR_010 ;"Wreg" --> "NUM_CHAR_100" (A tens place decision)
CALL SEND ;SEND
;**************************************
; Conversion of one digit
;**************************************
MOVF HEX_TEMP,W ;"HEX_TEMP" --> "Wreg"
MOVWF CONV_TEMP ;"Wreg" --> "CONV_TEMP"
MOVLW B'00001111' ;B'0000 1111' --> "Wreg"
ANDWF CONV_TEMP,F ;"CONV_TEMP" & "Wreg" --> "CONV_TEMP"
MOVF CONV_TEMP,W ;"CONV_TEMP" --> "Wreg"
SUBLW H'09' ;H'09' - "Wreg" --> "Wreg" (When CNT1 is 0-9, CF=1)
BTFSS STATUS,0 ;B'xxxx xxx1'?
GOTO SEND_HEX_NUM_5 ;No. SEND_HEX_NUM_5
;*************** Processing of 0-9 ***************
MOVLW A'0' ;A'0' --> "Wreg"
ADDWF CONV_TEMP,F ;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
GOTO SEND_HEX_NUM_6 ;SEND_HEX_NUM_6
;*************** Processing of A-F ***************
SEND_HEX_NUM_5
MOVLW D'10' ;D'10' --> "Wreg"
SUBLW A'A' ;A'A' - "Wreg" --> "Wreg"
ADDWF CONV_TEMP,F ;"CONV_TEMP" + "Wreg" --> "CONV_TEMP"
SEND_HEX_NUM_6
MOVF CONV_TEMP,W ;"CONV_TEMP" --> "Wreg"
MOVWF NUM_CHAR_001 ;"Wreg" --> "NUM_CHAR_100" (A tens place decision)
CALL SEND ;SEND
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Writing of Label Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
WRITE_LABEL
;*************** Writing of HT ***************
MOVLW H'09' ;B'0000 1001' = D'09'
CALL SEND ;SEND
;*************** Writing of Label ***************
; ;(x/x/FINL/FINH/MEAL/MEAH/STDL/STDH)
;STDH
BTFSC LABEL_STATUS,0 ;"LABEL_STATUS" B'xxxx xxx0'?
GOTO LABEL_STDH ;No. LABEL_STDH
;STDL
BTFSC LABEL_STATUS,1 ;"LABEL_STATUS" B'xxxx xx0x'?
GOTO LABEL_STDL ;No. LABEL_STDL
;MEAH
BTFSC LABEL_STATUS,2 ;"LABEL_STATUS" B'xxxx x0xx'?
GOTO LABEL_MEAH ;No. LABEL_MEAH
;MEAL
BTFSC LABEL_STATUS,3 ;"LABEL_STATUS" B'xxxx 0xxx'?
GOTO LABEL_MEAL ;No. LABEL_MEAL
;FINH
BTFSC LABEL_STATUS,4 ;"LABEL_STATUS" B'xxx0 xxxx'?
GOTO LABEL_FINH ;No. LABEL_FINH
;FINL
BTFSC LABEL_STATUS,5 ;"LABEL_STATUS" B'xx0x xxxx'?
GOTO LABEL_FINL ;No. LABEL_FINL
;NOTHING
GOTO LABEL_NG ;LABEL_NG
;*************** Writing of Label 'STDH' ***************
LABEL_STDH
MOVLW 'S' ;'S' --> "Wreg"
CALL SEND ;SEND
MOVLW 'T' ;'T' --> "Wreg"
CALL SEND ;SEND
MOVLW 'D' ;'D' --> "Wreg"
CALL SEND ;SEND
MOVLW 'H' ;'H' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'STDL' ***************
LABEL_STDL
MOVLW 'S' ;'S' --> "Wreg"
CALL SEND ;SEND
MOVLW 'T' ;'T' --> "Wreg"
CALL SEND ;SEND
MOVLW 'D' ;'D' --> "Wreg"
CALL SEND ;SEND
MOVLW 'L' ;'L' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'MEAH' ***************
LABEL_MEAH
MOVLW 'M' ;'M' --> "Wreg"
CALL SEND ;SEND
MOVLW 'E' ;'E' --> "Wreg"
CALL SEND ;SEND
MOVLW 'A' ;'A' --> "Wreg"
CALL SEND ;SEND
MOVLW 'H' ;'H' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'MEAL' ***************
LABEL_MEAL
MOVLW 'M' ;'M' --> "Wreg"
CALL SEND ;SEND
MOVLW 'E' ;'E' --> "Wreg"
CALL SEND ;SEND
MOVLW 'A' ;'A' --> "Wreg"
CALL SEND ;SEND
MOVLW 'L' ;'L' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'FINH' ***************
LABEL_FINH
MOVLW 'F' ;'F' --> "Wreg"
CALL SEND ;SEND
MOVLW 'I' ;'I' --> "Wreg"
CALL SEND ;SEND
MOVLW 'N' ;'N' --> "Wreg"
CALL SEND ;SEND
MOVLW 'H' ;'H' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'FINL' ***************
LABEL_FINL
MOVLW 'F' ;'F' --> "Wreg"
CALL SEND ;SEND
MOVLW 'I' ;'I' --> "Wreg"
CALL SEND ;SEND
MOVLW 'N' ;'N' --> "Wreg"
CALL SEND ;SEND
MOVLW 'L' ;'L' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of Label 'NG' ***************
LABEL_NG
MOVLW 'N' ;'N' --> "Wreg"
CALL SEND ;SEND
MOVLW 'G' ;'G' --> "Wreg"
CALL SEND ;SEND
GOTO WRITE_LF_CR ;WRITE_LF_CR
;*************** Writing of "LF" & "CR" ***************
WRITE_LF_CR
MOVLW H'0A' ;B'0000 1010' = D'10'
CALL SEND ;SEND
MOVLW H'0D' ;B'0000 1101' = D'13'
CALL SEND ;SEND
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Send Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SEND
MOVWF SEND_TEMP ;"Wreg" --> "SEND_TEMP"
BSF STATUS,RP0 ;Change to Bank1
LPTX
BTFSS TXSTA,TRMT ;"TXSTA" TRMT = '1'?
GOTO LPTX ;No. LPTX
BCF STATUS,RP0 ;Change to Bank0
MOVF SEND_TEMP,W ;"SEND_TEMP" --> "Wreg"
MOVWF TXREG ;"Wreg" --> "TXREG"
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Wait Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;*************** 1 second ***************
WAIT
MOVLW H'28' ;H'28' = B'0010 1000' = D'40'
MOVWF WAIT_CNT2 ;"Wreg" --> "WAIT_CNT2"
;24.948msec亊40=997.92msec = About 1.0 sec
WAIT_LOOP
CALL WAIT_25M ;Wait 25msec
DECFSZ WAIT_CNT2,F ;End ?
GOTO WAIT_LOOP ;No. Continue
RETURN
;*************** 25 milli seconds ***************
WAIT_25M
MOVLW H'A2' ;B'1010 0010' = D'162'
MOVWF WAIT_CNT1 ;"Wreg" --> "WAIT_CNT1"
MOVLW H'FF' ;B'1111 1111' = D'255'
MOVWF WAIT_CNT0 ;"Wreg" --> "WAIT_CNT0"
WAIT_25M_LOOP ;256亊162 Time Repeat
DECFSZ WAIT_CNT0,F ;End ?
GOTO WAIT_25M_LOOP ;No. Continue
MOVLW H'FF' ;B'1111 1111' = D'255'
MOVWF WAIT_CNT0 ;"Wreg" --> "WAIT_CNT0"
DECFSZ WAIT_CNT1,F ;End ?
GOTO WAIT_25M_LOOP ;No. Continue
RETURN
;*************** 100 milli seconds ***************
WAIT_100M
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
RETURN
;*************** 500 milli seconds ***************
WAIT_500M
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
CALL WAIT_25M ;Wait 25msec
RETURN
;*************** 20 micro seconds ***************
WAIT_20MICRO
MOVLW H'21' ;B'0001 0010' = D'33'
MOVWF WAIT_CNT0 ;"Wreg" --> "WAIT_CNT0"
WAIT_20MICRO_LOOP
DECFSZ WAIT_CNT0,F ;End ?
GOTO WAIT_20MICRO_LOOP ;No. Continue
RETURN
;*************** 100 micro seconds ***************
WAIT_100MICRO
CALL WAIT_20MICRO ;Wait 20 micro seconds
CALL WAIT_20MICRO ;Wait 20 micro seconds
CALL WAIT_20MICRO ;Wait 20 micro seconds
CALL WAIT_20MICRO ;Wait 20 micro seconds
CALL WAIT_20MICRO ;Wait 20 micro seconds
RETURN
;*************** 1 milli seconds ***************
WAIT_1M
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
CALL WAIT_100MICRO ;Wait 100 micro seconds
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; End of Sound Pressure Meter
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -