📄 compulater.txt
字号:
EQU_Y_N ;循环扫描直到有等号按下时返回
EE1 CALL KEYNUM
BTFSC A3,7
GOTO EE1
BTFSC A3,2
GOTO EE1
RETURN
; 25-funtion******************************************
D_ZERO NOP ;判断DATD中数据是否为0
MOVF DATD3,0 ;先判断DATD3中数据是否为0
IORLW 00H ;DATD3中数据与0或
BTFSC STATUS,Z ;若非0,则Z=0,跳过下一行
GOTO DD_2 ;若为0,则Z=1,继续判断下一位是否为0
MOVLW 01H
MOVWF FLAGB ;将1给FLAGB
RETURN
DD_2 MOVF DATD2,0 ;判断DATD2中数据是否为0
IORLW 00H
BTFSC STATUS,Z
GOTO DD_1 ;若为0,则Z=1,继续判断下一位是否为0
MOVLW 01H
MOVWF FLAGB
RETURN
DD_1 MOVF DATD1,0 ;判断DATD1中数据是否为0
IORLW 00H
BTFSC STATUS,Z
GOTO DD_0 ;若为0,则Z=1,继续判断下一位是否为0
MOVLW 01H
MOVWF FLAGB
RETURN
DD_0 MOVF DATD0,0 ;判断DATD0中数据是否为0
IORLW 00H
BTFSC STATUS,Z
GOTO DD_RET ;若为0,则Z=1,清FLAGB后返回
MOVLW 01H
MOVWF FLAGB
RETURN
DD_RET CLRF FLAGB
RETURN
; 26-funtion****************DELAY PROGRAM*************
DELAY MOVLW .15 ;5毫秒延时子程序
MOVWF G1
LP0 MOVLW .110
MOVWF G2
LP1 DECFSZ G2,1
GOTO LP1
DECFSZ G1,1
GOTO LP0
RETURN
;******************the funtion below are all for data transfering************
; 27-funtion****************************************
ADDER_A NOP ;将ADDER0-3的值给相应的DATA0-3
MOVF ADDER0,0
MOVWF DATA0
DECFSZ ADDER4
GOTO ADD_A1 ;若数据还未传完,则继续传
RETURN ;传完则返回
ADD_A1 MOVF ADDER1,0
MOVWF DATA1
DECFSZ ADDER4
GOTO ADD_A2
RETURN
ADD_A2 MOVF ADDER2,0
MOVWF DATA2
DECFSZ ADDER4
GOTO ADD_A3
RETURN
ADD_A3 MOVF ADDER3,0
MOVWF DATA3
NOP
RETURN
; 28-funtion*********************************
ADDER_B NOP ;将ADDER0-3的值给相应的DATB0-3
MOVF ADDER0,0
MOVWF DATB0
DECFSZ ADDER4
GOTO ADD_B1 ;若数据还未传完,则继续传
RETURN ;传完则返回
ADD_B1 MOVF ADDER1,0
MOVWF DATB1
DECFSZ ADDER4
GOTO ADD_B2
RETURN
ADD_B2 MOVF ADDER2,0
MOVWF DATB2
DECFSZ ADDER4
GOTO ADD_B3
RETURN
ADD_B3 MOVF ADDER3,0
MOVWF DATB3
NOP
RETURN
; 29-funtion********************************************
ADDER_C NOP ;将ADDER0-3的值给相应的DATC0-3
MOVF ADDER0,0
MOVWF DATC0
DECFSZ ADDER4
GOTO ADD_C1 ;若数据还未传完,则继续传
RETURN ;传完则返回
ADD_C1 MOVF ADDER1,0
MOVWF DATC1
DECFSZ ADDER4
GOTO ADD_C2
RETURN
ADD_C2 MOVF ADDER2,0
MOVWF DATC2
DECFSZ ADDER4
GOTO ADD_C3
RETURN
ADD_C3 MOVF ADDER3,0
MOVWF DATC3
NOP
RETURN
; 30-funtion********************************************
ADDER_D NOP ;将ADDER0-3的值给相应的DATD0-3
MOVF ADDER0,0
MOVWF DATD0
DECFSZ ADDER4
GOTO ADD_D1 ;若数据还未传完,则继续传
RETURN ;传完则返回
ADD_D1 MOVF ADDER1,0
MOVWF DATD1
DECFSZ ADDER4
GOTO ADD_D2
RETURN
ADD_D2 MOVF ADDER2,0
MOVWF DATD2
DECFSZ ADDER4
GOTO ADD_D3
RETURN
ADD_D3 MOVF ADDER3,0
MOVWF DATD3
NOP
RETURN
; 31-funtion**************MOV key_ans to adder**************
ANS_ADDER NOP ;将KEY_ANS值给ADDER0,ADDER0-3顺次向后移
MOVF ADDER2,0
MOVWF ADDER3
MOVF ADDER1,0
MOVWF ADDER2
MOVF ADDER0,0
MOVWF ADDER1
MOVF KEY_ANS,0
MOVWF ADDER0
INCF ADDER4
RETURN
; 32-funtion***************** DISPLAY ANSWER*****************
RES_ADDER NOP ;将ANSER0-3的值依次给相应的ADDER0-3
MOVF ANSER0,0
MOVWF ADDER0
MOVF ANSER1,0
MOVWF ADDER1
MOVF ANSER2,0
MOVWF ADDER2
MOVF ANSER3,0
MOVWF ADDER3
RETURN
; 33-funtion********************************
DATE_ADDER ;将DATE0-3的值依次给相应的ADDER0-3
MOVF DATE0,0
MOVWF ADDER0
MOVF DATE1,0
MOVWF ADDER1
MOVF DATE2,0
MOVWF ADDER2
MOVF DATE3,0
MOVWF ADDER3
RETURN
; 34-funtion*********************************
DATC_ADDER ;将DATC0-3的值依次给相应的ADDER0-3
MOVF DATC0,0
MOVWF ADDER0
MOVF DATC1,0
MOVWF ADDER1
MOVF DATC2,0
MOVWF ADDER2
MOVF DATC3,0
MOVWF ADDER3
RETURN
; 35-funtion********************************
E_ADDER ;将DATE3值给ADDER0,ADDER0-3顺次向后移
MOVF ADDER2,0
MOVWF ADDER3
MOVF ADDER1,0
MOVWF ADDER2
MOVF ADDER0,0
MOVWF ADDER1
MOVF DATE3,0
MOVWF ADDER0
CALL TRAN_E ;调用DATE的移位程序
INCF ADDER4 ;计数加一
RETURN
; 36-funtion*********************************
TRAN_E ;将DATE的后面几位依次向前移一位,0给DATE0
MOVF DATE2,0
MOVWF DATE3
MOVF DATE1,0
MOVWF DATE2
MOVF DATE0,0
MOVWF DATE1
MOVLW 00H
MOVWF DATE0
RETURN
; 37-funtion*********************************
ANS_DATE
NOP ;将ANSER0-3的值依次给相应的DATE0-3
MOVF ANSER0,0
MOVWF DATE0
MOVF ANSER1,0
MOVWF DATE1
MOVF ANSER2,0
MOVWF DATE2
MOVF ANSER3,0
MOVWF DATE3
RETURN
; 38-funtion***********************************
ANS_DATD
NOP ;将ANSER0-3的值依次给相应的DATD0-3
MOVF ANSER0,0
MOVWF DATD0
MOVF ANSER1,0
MOVWF DATD1
MOVF ANSER2,0
MOVWF DATD2
MOVF ANSER3,0
MOVWF DATD3
RETURN
; 39-funtion**********************************
ANS_DATC ;将ANSER0-3的值依次给相应的DATC0-3
NOP
MOVF ANSER0,0
MOVWF DATC0
MOVF ANSER1,0
MOVWF DATC1
MOVF ANSER2,0
MOVWF DATC2
MOVF ANSER3,0
MOVWF DATC3
RETURN
;***** the TRAN_*_* funtion means transfer the first data to the second one ******
; 40-funtion**********************************
TRAN_E_A ;将DATE0-3的值依次给相应的DATA0-3
MOVF DATE0,0
MOVWF DATA0
MOVF DATE1,0
MOVWF DATA1
MOVF DATE2,0
MOVWF DATA2
MOVF DATE3,0
MOVWF DATA3
RETURN
; 41-funtion**********************************
TRAN_C_B ;将DATE0-3的值依次给相应的DATB0-3
MOVF DATC0,0
MOVWF DATB0
MOVF DATC1,0
MOVWF DATB1
MOVF DATC2,0
MOVWF DATB2
MOVF DATC3,0
MOVWF DATB3
RETURN
; 42-funtion**********************************
TRAN_D_B ;将DATD0-3的值依次给相应的DATB0-3
MOVF DATD0,0
MOVWF DATB0
MOVF DATD1,0
MOVWF DATB1
MOVF DATD2,0
MOVWF DATB2
MOVF DATD3,0
MOVWF DATB3
RETURN
; 43-funtion*********************************
TRAN_D_A ;将DATD0-3的值依次给相应的DATA0-3
MOVF DATD0,0
MOVWF DATA0
MOVF DATD1,0
MOVWF DATA1
MOVF DATD2,0
MOVWF DATA2
MOVF DATD3,0
MOVWF DATA3
RETURN
; 44-funtion**********************************
TRAN_01_A ;将1给DATA0,将DATA1-3清零
MOVLW 01H
MOVWF DATA0
CLRF DATA1
CLRF DATA2
CLRF DATA3
RETURN
; 45-funtion**********************************
TRAN_01_B ;将1给DATB0,将DATB1-3清零
MOVLW 01H
MOVWF DATB0
CLRF DATB1
CLRF DATB2
CLRF DATB3
RETURN
; 46-funtion*********************************
TRAN_A_G ;将DATA0-3的值依次给相应的DATG0-3
MOVF DATA0,0
MOVWF DATG0
MOVF DATA1,0
MOVWF DATG1
MOVF DATA2,0
MOVWF DATG2
MOVF DATA3,0
MOVWF DATG3
RETURN
; 47-funtion*******************************
TRAN_G_A ;将DATG0-3的值依次给相应的DATA0-3
MOVF DATG0,0
MOVWF DATA0
MOVF DATG1,0
MOVWF DATA1
MOVF DATG2,0
MOVWF DATA2
MOVF DATG3,0
MOVWF DATA3
RETURN
; 48-funtion*****************************
TRAN_G_B ;将DATG0-3的值依次给相应的DATB0-3
MOVF DATG0,0
MOVWF DATB0
MOVF DATG1,0
MOVWF DATB1
MOVF DATG2,0
MOVWF DATB2
MOVF DATG3,0
MOVWF DATB3
RETURN
; 49-funtion*******************************
TRAN_F_B ;将DATF0-3的值依次给相应的DATB0-3
MOVF DATF0,0
MOVWF DATB0
MOVF DATF1,0
MOVWF DATB1
MOVF DATF2,0
MOVWF DATB2
MOVF DATF3,0
MOVWF DATB3
RETURN
; 50-funtion*******************************
TRAN_F_A ;将DATF0-3的值依次给相应的DATA0-3
MOVF DATF0,0
MOVWF DATA0
MOVF DATF1,0
MOVWF DATA1
MOVF DATF2,0
MOVWF DATA2
MOVF DATF3,0
MOVWF DATA3
RETURN
; 51-funtion*******************************
TRAN_B_F ;将DATB0-3的值依次给相应的DATF0-3
MOVF DATB0,0
MOVWF DATF0
MOVF DATB1,0
MOVWF DATF1
MOVF DATB2,0
MOVWF DATF2
MOVF DATB3,0
MOVWF DATF3
RETURN
; 52-funtion********************************
BREAK_AC ;把DATA中存的小数的整数部分和小数部分分开
RRB_1 BTFSC DATA0,7 ;当前最低位是‘.’则返回
RETURN ;小数部分给DATC,整数部分给DATA
CALL CA_DOT ;当前最低位不是‘.’则移入DATC
GOTO RRB_1
RETURN
; 53-funtion*********************************
CA_DOT ;移位函数
MOVF DATC1,0
MOVWF DATC0 ;DATC1给DATC0
MOVF DATC2,0
MOVWF DATC1 ;DATC2给DATC1
MOVF DATC3,0
MOVWF DATC2 ;DATC3给DATC2
MOVF DATA0,0
MOVWF DATC3 ;DATA0给DATC3
MOVF DATA1,0
MOVWF DATA0 ;DATA1给DATA0
MOVF DATA2,0
MOVWF DATA1 ;DATA2给DATA1
MOVF DATA3,0
MOVWF DATA2 ;DATA3给DATA2
CLRF DATA3
RETURN
; 54-funtion**********************************
BREAK_BD ;把DATB中存的小数的整数部分和小数部分分开
RRA_1 BTFSC DATB0,7 ;当前最低位是‘.’则返回
RETURN ;小数部分给DATD,整数部分给DATB
CALL DB_DOT ;当前最低位不是‘.’则移入DATD
GOTO RRA_1
RETURN
; 55-funtion*************************************
DB_DOT ;移位函数(原理同CA_DOT)
MOVF DATD1,0
MOVWF DATD0
MOVF DATD2,0
MOVWF DATD1
MOVF DATD3,0
MOVWF DATD2
MOVF DATB0,0
MOVWF DATD3
MOVF DATB1,0
MOVWF DATB0
MOVF DATB2,0
MOVWF DATB1
MOVF DATB3,0
MOVWF DATB2
CLRF DATB3
RETURN
;************************************
ENDD
NOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -