51单片机实现的简易计算器(6)

2018-12-23 23:43

INC A JZ DISP_DP DEC A

DISP_LOOKUP: MOVC A, @A+DPTR MOV DAT, A LCALL PR2 LCALL DELAY

DJNZ TEMP1, DISP_NORMAL SJMP DISP_DONE ; ----------- DISP_ZERO: MOV A, #00H ; '0' MOV TEMP1, #01H SJMP DISP_LOOKUP

; --------------

DISP_DP: ; DISPLAY, DECIMAL POINT MOV A, #0AH SJMP DISP_LOOKUP ; ----------- DISP_ERR:

MOV A, #0CH ; 'E' MOVC A, @A+DPTR MOV DAT, A LCALL PR2 LCALL DELAY SJMP DISP_DONE ; ---------------- DISP_DONE: RET

;================= DISPTAB:

DB 30H,31H,32H,33H,34H,35H,36H,37H, 38H, 39H DB 2EH, 2DH, 45H ; '.', '-', 'E'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; =======================================================

;;*************************************** ;; LCD 初始化程序

;;*************************************** LCDINIT:MOV A,#30H MOV DPTR,#CW_ADD

MOV R2,#03H LCDINT1:MOVX @DPTR,A LCALL DELAY DJNZ R2,LCDINT1 MOV COM,#38H LCALL PR1 MOV COM,#01H LCALL PR1

MOV COM,#06H ;设置输入方式 LCALL PR1

MOV COM,#0FH LCALL PR1 RET

;******************************** ;读BF和AC值

;********************************

PR0: PUSH DPH PUSH DPL PUSH ACC

MOV DPTR,#CR_ADD MOVX A,@DPTR MOV COM,A POP ACC POP DPL POP DPH RET

;******************************** ;写指令代码字程序

;********************************

PR1: PUSH DPH PUSH DPL PUSH ACC

MOV DPTR,#CR_ADD PR11:MOVX A,@DPTR JB ACC.7,PR11 MOV A,COM

MOV DPTR,#CW_ADD MOVX @DPTR,A

POP ACC POP DPL POP DPH RET

;******************************** ;写显示数据子程序

;******************************** PR2: PUSH DPH PUSH DPL PUSH ACC

MOV DPTR,#CR_ADD PR21:MOVX A,@DPTR JB ACC.7,PR21 MOV A,DAT

MOV DPTR,#DW_ADD MOVX @DPTR,A POP ACC POP DPL POP DPH RET

;******************************** ;读显示数据子程序

;******************************** PR3: PUSH DPH PUSH DPL PUSH ACC

MOV DPTR,#CR_ADD PR31:MOVX A,@DPTR JB ACC.7,PR31 MOV DPTR,#DR_ADD MOVX A,@DPTR MOV DAT,A POP ACC POP DPL POP DPH RET

;***************************************** ; DELAY

;***************************************** DELAY: MOV R6,#02H MOV R7,#02H DELAY1: NOP

DJNZ R7,DELAY1

DJNZ R6,DELAY1 RET

; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; FLOATLIB 浮点程序库

; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; ===========================================================

;(1) 标号: FSDT 功能:浮点数格式化

;入口条件:待格式化浮点操作数在[R0]中。 ;出口信息:已格式化浮点操作数仍在[R0]中。

;影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求: 6字节 FSDT: LCALL MVR0 ; 将待格式化操作数传送到第一工作区中 LCALL RLN ; 通过左规完成格式化

LJMP MOV0 ; 将已格式化浮点操作数传回到[R0]中

;(2) 标号: FADD 功能:浮点数加法

;入口条件:被加数在[R0]中,加数在[R1]中。

;出口信息:OV=0时,和仍在[R0]中,OV=1时,溢出。

;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 6字节 FADD: CLR F0 ; 设立加法标志 SJMP AS ; 计算代数和

;(3) 标号: FSUB 功能:浮点数减法

;入口条件:被减数在[R0]中,减数在[R1]中。

;出口信息:OV=0时,差仍在[R0]中,OV=1时,溢出。

;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节 FSUB: SETB F0 ; 设立减法标志

AS: LCALL MVR1 ; 计算代数和。先将[R1]传送到第二工作区 MOV C,F0 ; 用加减标志来校正第二操作数的有效符号 RRC A XRL A,@R1 MOV C,ACC.7

ASN: MOV 1EH,C ; 将第二操作数的有效符号存入位1EH中 XRL A,@R0 ; 与第一操作数的符号比较 RLC A

MOV F0,C ; 保存比较结果

LCALL MVR0 ; 将[R0]传送到第一工作区中 LCALL AS1 ; 在工作寄存器中完成代数运算

MOV0: INC R0 ; 将结果传回到[R0]中的子程序入口 INC R0

MOV A,R4 ; 传回尾数的低字节 MOV @R0,A DEC R0

MOV A,R3 ; 传回尾数的高字节 MOV @R0,A DEC R0

MOV A,R2 ; 取结果的阶码 MOV C,1FH ; 取结果的数符 MOV ACC.7,C ; 拼入阶码中 MOV @R0,A

CLR ACC.7 ; 不考虑数符 CLR OV ; 清除溢出标志

CJNE A,#3FH,MV01; 阶码是否上溢? SETB OV ; 设立溢出标志

MV01: MOV A,@R0 ; 取出带数符的阶码 RET

MVR0: MOV A,@R0 ; 将[R0]传送到第一工作区中的子程序 MOV C,ACC.7 ; 将数符保存在位1FH中 MOV 1FH,C

MOV C,ACC.6 ; 将阶码扩充为8bit补码 MOV ACC.7,C

MOV R2,A ; 存放在R2中 INC R0

MOV A,@R0 ; 将尾数高字节存放在R3中 MOV R3,A INC R0

MOV A,@R0 ; 将尾数低字节存放在R4中 MOV R4,A

DEC R0 ; 恢复数据指针 DEC R0 RET

MVR1: MOV A,@R1 ; 将[R1]传送到第二工作区中的子程序 MOV C,ACC.7 ; 将数符保存在位1EH中 MOV 1EH,C

MOV C,ACC.6 ; 将阶码扩充为8bit补码 MOV ACC.7,C

MOV R5,A ; 存放在R5中 INC R1

MOV A,@R1 ; 将尾数高字节存放在R6中 MOV R6,A INC R1

MOV A,@R1 ; 将尾数低字节存放在R7中


51单片机实现的简易计算器(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学语文二年级上册(人教版)期中测试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: