⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compulater.txt

📁 1. 计算器实现的功能 (1)整数的加、减、乘、除运算; (2)小数的加、减运算
💻 TXT
📖 第 1 页 / 共 3 页
字号:
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 + -