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

📄 read_7135.asm

📁 利用AT89C51 ,可以读取基于IC7135的电压表头的信号.
💻 ASM
📖 第 1 页 / 共 4 页
字号:
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 + -