📄 yjp_nxsx.asm
字号:
;标号: MULD1
;功 能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7
;堆栈需求:2字节
MULD1: MOV A,R3
MOV B,R7
MUL AB
MOV R4,B
MOV R5,A
MOV A,R3
MOV B,R6
MUL AB
ADD A,R4
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2
MOV B,R7
MUL AB
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
;;====================================
DATA_CHANG3:
MOV R2,#27H
MOV R3,#10H
MOV R6,#0
MOV A,SHOW1BUF5
MOV R7,A
LCALL MULD1
MOV A,R4
MOV R0,A
MOV A,R5
MOV R1,A
MOV R2,#03H
MOV R3,#0E8H
MOV R6,#0
MOV A,SHOW1BUF4
MOV R7,A
LCALL MULD1
MOV A,R5
ADD A,R1
MOV R1,A
MOV A,R4
ADDC A,R0
MOV R0,A
MOV R2,#00H
MOV R3,#64H
MOV R6,#0
MOV A,SHOW1BUF3
MOV R7,A
LCALL MULD1
MOV A,R5
ADD A,R1
MOV R1,A
MOV A,R4
ADDC A,R0
MOV R0,A
MOV A,SHOW1BUF2
MOV B,#10
MUL AB
ADD A,R1
MOV R1,A
MOV A,#0
ADDC A,R0
MOV R0,A
MOV A,SHOW1BUF1
ADD A,R1
MOV R1,A
MOV A,#0
ADDC A,R0
MOV R0,A
MOV A,R0
MOV R4,A
MOV A,R1
MOV R5,A
RET
;;====================================
PLUS: MOV A,FLASH_X
CJNE A,#00H,PP2
MOV A,SHOW1BUF1
CLR C
SUBB A,#9
JNC PA1
INC SHOW1BUF1
RET
PA1: MOV SHOW1BUF1,#0
RET
PP2: MOV A,FLASH_X
CJNE A,#01H,PP3
MOV A,SHOW1BUF2
CLR C
SUBB A,#9
JNC PA2
INC SHOW1BUF2
RET
PA2: MOV SHOW1BUF2,#0
RET
PP3: MOV A,FLASH_X
CJNE A,#02H,PP4
MOV A,SHOW1BUF3
CLR C
SUBB A,#9
JNC PA3
INC SHOW1BUF3
RET
PA3: MOV SHOW1BUF3,#0
RET
PP4: MOV A,FLASH_X
CJNE A,#03H,PP5
MOV A,SHOW1BUF4
CLR C
SUBB A,#9
JNC PA4
INC SHOW1BUF4
RET
PA4: MOV SHOW1BUF4,#0
RET
PP5: MOV A,FLASH_X
CJNE A,#04H,PP6
MOV A,SHOW1BUF5
CLR C
SUBB A,#9
JNC PA5
INC SHOW1BUF5
RET
PA5: MOV SHOW1BUF5,#0
PP6: RET
;;====================================
BAKDATA:
LCALL DATA_CHANG3
MOV A,R4
MOV SET_H_BUF,A
MOV A,R5
MOV SET_L_BUF,A
RET
;;====================================
GETDATA:
MOV A,SET_H_BUF
MOV R4,A
MOV A,SET_L_BUF
MOV R5,A
LCALL DATA_CHANG2
RET
;;====================================
KEY1_0END: RET ;上页键
KEY1_0: LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY1_0END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#01
MOVC A,@A+DPTR
MOV R0,A
MOV A,#02
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY1_0END
LCALL KEY_COM2
RET
;;====================================
KEY1_1END: RET ;下页键
KEY1_1: LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY1_1END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#04
MOVC A,@A+DPTR
MOV R0,A
MOV A,#05
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY1_1END
LCALL KEY_COM2
RET
;;====================================
;;在设置状态下,光标向左移一位
KEY1_2A: MOV A,FLASH_X
CLR C
SUBB A,SHOW_LENTH
JNC KEY1_2END
INC FLASH_X
MOV CLR_CUR_BZ,#1
RET
;;....................................
KEY1_2END: RET ;左键
KEY1_2: MOV A,SET_X
JNZ KEY1_2A ;设置状态
LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY1_2END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#07
MOVC A,@A+DPTR
MOV R0,A
MOV A,#08
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY1_2END
LCALL KEY_COM2
RET
;;====================================
;;在设置状态下,光标向左移一位
KEY1_3A: MOV A,FLASH_X
JZ KEY1_3AEND
DEC FLASH_X
MOV CLR_CUR_BZ,#1
KEY1_3AEND:RET
;;....................................
KEY1_3END: RET ;右键
KEY1_3: MOV A,SET_X
JNZ KEY1_3A
LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY1_3END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#10
MOVC A,@A+DPTR
MOV R0,A
MOV A,#11
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY1_3END
LCALL KEY_COM2
RET
;;====================================
;;在设置状态下,将当前光标的值+1
KEY2_0A:
LCALL GETDATA
LCALL PLUS
LCALL BAKDATA
RET
;;....................................
KEY2_0END: RET ;上键
KEY2_0: MOV A,SET_X
JNZ KEY2_0A ;设置状态
LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY2_0END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#13
MOVC A,@A+DPTR
MOV R0,A
MOV A,#14
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY2_0END
LCALL KEY_COM2
RET
;;====================================
MMIN: MOV A,FLASH_X
CJNE A,#00H,MP2
MOV A,SHOW1BUF1
JZ MA1
DEC SHOW1BUF1
RET
MA1: MOV SHOW1BUF1,#9
RET
MP2: MOV A,FLASH_X
CJNE A,#01H,MP3
MOV A,SHOW1BUF2
JZ MA2
DEC SHOW1BUF2
RET
MA2: MOV SHOW1BUF2,#9
RET
MP3: MOV A,FLASH_X
CJNE A,#02H,MP4
MOV A,SHOW1BUF3
JZ MA3
DEC SHOW1BUF3
RET
MA3: MOV SHOW1BUF3,#9
RET
MP4: MOV A,FLASH_X
CJNE A,#03H,MP5
MOV A,SHOW1BUF4
JZ MA4
DEC SHOW1BUF4
RET
MA4: MOV SHOW1BUF4,#9
RET
MP5: MOV A,FLASH_X
CJNE A,#04H,MP6
MOV A,SHOW1BUF5
JZ MA5
DEC SHOW1BUF5
RET
MA5: MOV SHOW1BUF5,#9
MP6: RET
;;====================================
;;在设置状态下,将当前光标的值-1
KEY2_1A:
LCALL GETDATA
LCALL MMIN
LCALL BAKDATA
RET
;;....................................
KEY2_1END: RET ;下键
KEY2_1: MOV A,SET_X
JNZ KEY2_1A ;设置状态
LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY2_1END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#16
MOVC A,@A+DPTR
MOV R0,A
MOV A,#17
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
JZ KEY2_1END
LCALL KEY_COM2
RET
;;====================================
KEY2_2END: RET ;SET键
KEY2_2: LCALL KEY_COM1
MOV A,R7 ;丢失表格数据
JNZ KEY2_2END
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#19
MOVC A,@A+DPTR
MOV R0,A
MOV A,#20
MOVC A,@A+DPTR
MOV R1,A
MOV A,R0
MOV DPH,A
MOV A,R1
MOV DPL,A
MOV A,#0
MOVC A,@A+DPTR
MOV B,A
JZ KEY2_2END
XRL A,#4
JZ KEY2_2A
MOV A,B
LCALL KEY_COM2
RET
;;....................................
KEY2_2A: ;SET键被定义成设置键
MOV A,#1
MOVC A,@A+DPTR
MOV SET_MODE,A
;;------------------------------------
KEY2_2B:
MOV A,SET_X
JZ IN_SET1
MOV CLR_CUR_BZ,#1
INC SET_X
CLR C
MOV A,SET_X
SUBB A,SET_NUMB
JNC EXIT_SET1
MOV FLASH_X,#0
LCALL SET_COM1
RET
EXIT_SET1: MOV SET_X,#0
MOV FLASH_X,#0
MOV SET_MODE,#0
RET
IN_SET1: MOV SET_X,#1
MOV FLASH_X,#0
LCALL SET_COM1
RET
;;....................................
SET_COM1: MOV A,DPH_S1
MOV DPH,A
MOV A,DPL_S1
MOV DPL,A
MOV A,SET_X
DEC A
MOVC A,@A+DPTR
MOV DPL,A
MOV DPH,#01H
MOVX A,@DPTR
MOV SET_H_BUF,A
INC DPTR
MOVX A,@DPTR
MOV SET_L_BUF,A
;;可设置寄存器标号数据
MOV A,DPH_S2
MOV DPH,A
MOV A,DPL_S2
MOV DPL,A
MOV A,SET_X
DEC A
MOV B,#2
MUL AB
MOVC A,@A+DPTR
DEC A
MOV SHOW_LENTH,A
;;可设置寄存器显示位数数据
MOV A,DPH_S3
MOV DPH,A
MOV A,DPL_S3
MOV DPL,A
MOV A,SET_X
DEC A
MOV B,#4
MUL AB
MOV B,A
MOVC A,@A+DPTR
MOV SET_HIGH_H,A
MOV A,B
INC A
MOV B,A
MOVC A,@A+DPTR
MOV SET_HIGH_L,A
MOV A,B
INC A
MOV B,A
MOVC A,@A+DPTR
MOV SET_LOW_H,A
MOV A,B
INC A
MOVC A,@A+DPTR
MOV SET_LOW_L,A
RET
;;可设置寄存器上限下限数据
;;====================================
CKDATA: MOV R7,#0
LCALL CKDATA_HIGH
LCALL CKDATA_LOW
RET
;;....................................
CKDATA_HIGH:
MOV A,SET_HIGH_L
CLR C
SUBB A,SET_L_BUF
MOV A,SET_HIGH_H
SUBB A,SET_H_BUF
JNC CKDATA_HIGHEND
MOV R7,#1
CKDATA_HIGHEND:
RET
;;....................................
CKDATA_LOW:
MOV A,SET_L_BUF
CLR C
SUBB A,SET_LOW_L
MOV A,SET_H_BUF
SUBB A,SET_LOW_H
JNC CKDATA_LOWEND
MOV R7,#1
CKDATA_LOWEND:
RET
;;====================================
;;将设置值存储在MWn中
KEY2_3B:
;; 首先检查数据是否越界
;; 如果越界,不予存储
LCALL CKDATA
MOV A,R7
JNZ KEY2_3B1
MOV A,DPH_S1
MOV DPH,A
MOV A,DPL_S1
MOV DPL,A
MOV A,SET_X
DEC A
MOVC A,@A+DPTR
MOV DPL,A
MOV DPH,#01H
MOV A,SET_H_BUF
MOVX @DPTR,A
INC DPTR
MOV A,SET_L_BUF
MOVX @DPTR,A
KEY2_3B1: LCALL KEY2_2B
RET
;;====================================
;;将设置值存储在SDA2000A中,时钟值
KEY2_3C:
;; 首先检查数据是否越界
;; 如果越界,不予存储
LCALL CKDATA
MOV A,R7
JNZ KEY2_3C1
MOV A,DPH_S1
MOV DPH,A
MOV A,DPL_S1
MOV DPL,A
MOV A,SET_X
DEC A
MOVC A,@A+DPTR
MOV DPL,A
MOV DPH,#01H
MOV A,SET_H_BUF
MOVX @DPTR,A
INC DPTR
MOV A,SET_L_BUF
MOVX @DPTR,A
LCALL SDA2_HEXZH ;转换BCD码
LCALL SDA2_SENDDATA ;写入时钟
; LCALL SDA2_BCDZH ;转换HEX码
KEY2_3C1: LCALL KEY2_2B
RET
;;====================================
KEY2_3D:
;;将设置值存储在24C021中,时段值
;; 首先检查数据是否越界
;; 如果越界,不予存储
LCALL CKDATA
MOV A,R7
JNZ KEY2_3D1
MOV A,DPH_S1
MOV DPH,A
MOV A,DPL_S1
MOV DPL,A
MOV A,SET_X
DEC A
MOVC A,@A+DPTR
MOV DPL,A
MOV R0,A
MOV DPH,#01H
MOV A,SET_H_BUF
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -