📄 read_7135.asm
字号:
DISP_STEP_3: CALL DISP_ZERO
MOV A,#03H
GO_DISP_3: CALL DISP_STEP
DJNZ ACC,GO_DISP_3
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_4: CALL DISP_ZERO
MOV A,#04H
GO_DISP_4: CALL DISP_STEP
DJNZ ACC,GO_DISP_4
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_5: CALL DISP_ZERO
MOV A,#05H
GO_DISP_5: CALL DISP_STEP
DJNZ ACC,GO_DISP_5
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_6: CALL DISP_ZERO
MOV A,#06H
GO_DISP_6: CALL DISP_STEP
DJNZ ACC,GO_DISP_6
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_7: CALL DISP_ZERO
MOV A,#07H
GO_DISP_7: CALL DISP_STEP
DJNZ ACC,GO_DISP_7
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_8: CALL DISP_ZERO
MOV A,#08H
GO_DISP_8: CALL DISP_STEP
DJNZ ACC,GO_DISP_8
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_9: CALL DISP_ZERO
MOV A,#09H
GO_DISP_9: CALL DISP_STEP
DJNZ ACC,GO_DISP_9
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_10: CALL DISP_ZERO
MOV A,#0AH
GO_DISP_10: CALL DISP_STEP
DJNZ ACC,GO_DISP_10
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_11: CALL DISP_ZERO
MOV A,#0BH
GO_DISP_11: CALL DISP_STEP
DJNZ ACC,GO_DISP_11
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_12: CALL DISP_ZERO
MOV A,#0CH
GO_DISP_12: CALL DISP_STEP
DJNZ ACC,GO_DISP_12
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_13: CALL DISP_ZERO
MOV A,#0DH
GO_DISP_13: CALL DISP_STEP
DJNZ ACC,GO_DISP_13
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_14: CALL DISP_ZERO
MOV A,#0EH
GO_DISP_14: CALL DISP_STEP
DJNZ ACC,GO_DISP_14
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_15: CALL DISP_ZERO
MOV A,#0FH
GO_DISP_15: CALL DISP_STEP
DJNZ ACC,GO_DISP_15
RET
;----------------------------------------------------------------------------------------------
DISP_STEP_16: CALL DISP_ZERO
MOV A,#10H
GO_DISP_16: CALL DISP_STEP
DJNZ ACC,GO_DISP_16
RET
;###############################################################
;add the 16 bits supplied by the #
;caller to the op registers #
;op_0 op_1 + add_0 add_1 #
;--> op_0 op_1 #
;###############################################################
ADD16_16BIT:
PUSH ACC
CLR C
MOV R5,ADD_0
MOV A,OP_0
ADDC A,R5 ;low byte first
MOV OP_0,A
MOV R5,ADD_1
MOV A,OP_1
ADDC A,R5 ;high byte + carry
MOV OP_1,A
POP ACC
RET
;-----------------------------------------------------------------------------------------------
;MULTIPLY THE 32 BIT OP WITH THE 16 VALUE
;SUPPLIED
;OP_0 OP_1 OP_2 OP_3 * MUL_16_0 MUL_16_1 -->
;OP_0 OP_1 OP_2 OP_3
;-------------------------------------------------
MUL32_16BIT:
CLR A
MOV TMP_0,A
MOV TMP_1,A
MOV TMP_2,A
MOV TMP_3,A
;GENERATE THE LOWEST BYTE OF THE RESULT
MOV A,OP_0
MOV B,A
MOV A,MUL_16_0
MUL AB
;LOW-ORDER RESULT
MOV TMP_0,A
;HIGH_ORDER RESULT
MOV A,B
MOV TMP_1,A
;NOW GENERATE THE NEST HIGHER ORDER BYTE
MOV A,OP_1
MOV B,A
MOV A,MUL_16_0
MUL AB
MOV R0,A
MOV A,TMP_1
ADD A,R0 ;LOW-ORDER RESULT
;SAVE
MOV TMP_1,A
MOV A,TMP_2
MOV R0,A
MOV A,B ;GET HIGH-ORDER RESULT
ADDC A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
MOV TMP_2,A ;SAVE
JNC MUL_LOOP1
;PROPAGATE CARRY INTO TMP_3
MOV A,TMP_3
INC A
MOV TMP_3,A
MUL_LOOP1:
MOV A,OP_0
MOV B,A
MOV A,MUL_16_1
MUL AB
MOV R0,A ;LOW-ORDER RESULT
;SAVE
MOV A,TMP_1 ;GET HIGH-ORDER RESULT
ADD A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
;SAVE
MOV TMP_1,A
MOV A,TMP_2
MOV R0,A
MOV A,B
ADDC A,R0
MOV TMP_2,A
JNC MUL_LOOP2
;PROPAGATE CARRY INTO TMP_3
MOV A,TMP_3
INC A
MOV TMP_3,A
MUL_LOOP2:
;NOW START WORKING ON THE 3RD BYTE
MOV A,OP_2
MOV B,A
MOV A,MUL_16_0
MUL AB
MOV R0,A ;LOW-ORDER RESULT
;SAVE
MOV A,TMP_2 ;GET HIGH-ORDER RESULT
ADD A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
;SAVE
MOV TMP_2,A
MOV A,TMP_3
MOV R0,A
MOV A,B
ADDC A,R0
MOV TMP_3,A
; NOW THE OTHER HALF
MOV A,OP_1
MOV B,A
MOV A,MUL_16_1
MUL AB
MOV R0,A ;LOW-ORDER RESULT
;SAVE
MOV A,TMP_2 ;GET HIGH-ORDER RESULT
ADD A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
;SAVE
MOV TMP_2,A
MOV A,TMP_3
MOV R0,A
MOV A,B
ADDC A,R0
MOV TMP_3,A
; NOW FINISH OFF THE HIGHEST ORDER BYTE
MOV A,OP_3
MOV B,A
MOV A,MUL_16_0
MUL AB
MOV R0,A ;LOW-ORDER RESULT
;SAVE
MOV A,TMP_3 ;GET HIGH-ORDER RESULT
ADD A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
;SAVE
MOV TMP_3,A
; FORGET ABOUT THE HIGH-ORDER RESULT,THIS
MOV A,OP_2
MOV B,A
MOV A,MUL_16_1
MUL AB
MOV R0,A ;LOW-ORDER RESULT
;SAVE
MOV A,TMP_3 ;GET HIGH-ORDER RESULT
ADD A,R0 ;INCLUDE CARRY FROM PREVIOUS OPERATION
;SAVE
MOV TMP_3,A
; NOW WE ARE ALL DONE, MOVE THE TMP VALUES BACK INTO OP
MOV OP_0,TMP_0
MOV OP_1,TMP_1
MOV OP_2,TMP_2
MOV OP_3,TMP_3
RET
;---------------------------------------------------
;THIS DIVIDES THE 32 BIT OP EQUISTER BY
;THE VALUE SUPPLIED
;OP_0 OP_1 OP_2 OP_3 / DIV_16_0 DIV_16_1 -->
;OP_0 OP_1 OP_2 OP_3 REMAINDER --> R6 R7
;---------------------------------------------------
DIV32_16BIT:
MOV R7,#0
MOV R6,#0 ;ZERO OUT PARTIAL REMAINDER
CLR A
MOV TMP_0,A
MOV TMP_1,A
MOV TMP_2,A
MOV TMP_3,A
MOV R1,DIV_16_1
MOV R0,DIV_16_0 ;LOAD DIVISOR
MOV R5,#32 ;LOOP COUNT
;THIS BEGINS THE LOOP
DIV_LOOP1:
CALL SHIFT_D ;SHIFT THE DIVIDEND AND RETURN MSB IN C
MOV A,R6 ;SHIFT CARRY INTO LSB OF PARTIAL REMAINDER
RLC A
MOV R6,A
MOV A,R7
RLC A
MOV R7,A
;NOW TEST TO SEE IF R7:R6 >= R1:R0
JC CAN_SUB1 ;CARRY OUT OF R7 SHIFT MEANS R7:R6> R1:R0
CLR C
MOV A,R7 ;SUBTRACT R1 FROM R7 TO SEE IF R1 < R7
SUBB A,R1 ;A = R7 -R1 ,CARRY SET IF R7 < R1
JC CANT_SUB1
;AT THIS POINT R7>R1 OR R7=R1
JNZ CAN_SUB1 ;JUMP IF R7>R1
;IF R7 = R1, TEST FOR R6>=R0
CLR C
MOV A,R6
SUBB A,R0 ;A=R6-R0,CARRY SET IF R6 < R0
JC CANT_SUB1
CAN_SUB1:
;SUBTRACT THE DIVISOR FROM THE PARTIAL REMAINDER
CLR C
MOV A,R6
SUBB A,R0 ;A=R6-R0
MOV R6,A
MOV A,R7
SUBB A,R1 ;A= R7-R1-BORROW
MOV R7,A
SETB C ;SHIFT A 1 INTO THE QUOTIENT
JMP QUOT1
CANT_SUB1:
;SHIFT A 0 INTO THE QUOTIENT
CLR C
QUOT1:
;SHIFT THE CARRY BIT INTO THE QUOTIENT
CALL SHIFT_Q1
;TEST FOR COMPETION
DJNZ R5,DIV_LOOP1
;NOW WE ARE ALL DONE, MOVE THE TMP VALUES BACK INTO OP
MOV OP_0,TMP_0
MOV OP_1,TMP_1
MOV OP_2,TMP_2
MOV OP_3,TMP_3
RET
;-----------------------------------------------
;SHIFT THE DIVIDEND ONE BIT TO THE LEFT
;AND RETURN THE MSB IN C
;-----------------------------------------------
SHIFT_D:
CLR C
MOV A,OP_0
RLC A
MOV OP_0,A
MOV A,OP_1
RLC A
MOV OP_1,A
MOV A,OP_2
RLC A
MOV OP_2,A
MOV A,OP_3
RLC A
MOV OP_3,A
RET
;--------------------------------------------
;SHIFT THE QUOTENT ONE BIT TO THE LEFT
;AND SHIFT THE C INTO LSB
;--------------------------------------------
SHIFT_Q1: MOV A,TMP_0
RLC A
MOV TMP_0,A
MOV A,TMP_1
RLC A
MOV TMP_1,A
MOV A,TMP_2
RLC A
MOV TMP_2,A
MOV A,TMP_3
RLC A
MOV TMP_3,A
RET
;--------------------------------
TD_1MS:
PUSH PSW
SETB RS1
MOV R0,#200
TD2: NOP
NOP
NOP
NOP
NOP
DJNZ R0,TD2
CLR RS1
POP PSW
RET
;--------------------------------
TD_2MS:
CALL TD_1MS
CALL TD_1MS
RET
;--------------------------------
TD_10MS:
MOV TIME,#01H
CALL DELAY_H
RET
;--------------------------------
TD_50MS:
MOV TIME,#05H
CALL DELAY_H
RET
;--------------------------------
TD_100MS: MOV TIME,#0ah
CALL DELAY_H
RET
;--------------------------------
TD_200MS: MOV TIME,#14h
CALL DELAY_H
RET
;--------------------------------
TD_250MS: MOV TIME,#19h
CALL DELAY_H
RET
;--------------------------------
TD_300MS: MOV TIME,#1eh
CALL DELAY_H
RET
;--------------------------------
TD_400MS: MOV TIME,#28h
CALL DELAY_H
RET
;--------------------------------
TD_500MS: MOV TIME,#32h
CALL DELAY_H
RET
;--------------------------------
TD_1S: MOV TIME,#64h
CALL DELAY_H
RET
;--------------------------------
TD_2S: MOV TIME,#0c8h
CALL DELAY_H
RET
;********************************************
;*DELAY TIME = R5*10MS
;********************************************
DELAY_H:
mov r5, TIME
clr tf0
clr tr0
delay_h1:
mov th0,#HIGH(65536-10000)
mov tl0,#LOW(65536-10000)
setb tr0 ;start timer
del_wait:
jbc tf0,time_out
jmp del_wait
time_out:
djnz r5,delay_h1
clr tr0
ret
;;********************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -