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

📄 motor_speed.asm

📁 可以测量马达的实际转速,用的IC 是AT89C2051,也可以用于AT89C51
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;INPUT:
;-----------------------------------------------------------------------------------------------
START          EQU      P3.0
PERIOD         EQU      P3.5
;-----------------------------------------------------------------------------------------------
;OUTPUT:
;-----------------------------------------------------------------------------------------------
RY_SAMPLE      EQU      P3.7
FREQ_R         EQU      P1.0
FREQ_C         EQU      P1.1
FAIL_LED       EQU      P1.2
PASS_LED       EQU      P1.3
RY_POWER			EQU		P1.4
RESET1         EQU      P1.5
COUNTER        EQU      P1.6
ENABLE			EQU		P1.7
;-----------------------------------------------------------------------------------------------

TIME         EQU    21H
TIME_H       EQU    22H        
TIME_S       EQU    23H       
OP_0         EQU    2BH
OP_1         EQU    2CH
OP_2         EQU    2DH
OP_3         EQU    2EH
DIV_16_0     EQU    2FH
DIV_16_1     EQU    30H
SUB_0        EQU    31H
SUB_1        EQU    32H
TEST_FRQL    EQU    37H   ;TESTING INPUT VALVE LOW 8BIT          ;
TEST_FRQH    EQU    38H   ;TESTING INPUT VALVE HIGH 8BIT         ;
ADD_0        EQU    39H
ADD_1        EQU    3AH
ANSL2        EQU    3BH
ANSH2        EQU    3CH
TMP_0        EQU    3DH
TMP_1        EQU    3EH
TMP_2        EQU    3FH
TMP_3        EQU    40H
mul_16_0     equ    41h
mul_16_1     equ    42h
temp0        equ    43h
temp1        equ    44h
temp         equ    45h
FLAG         EQU    46H
FREQ_FLAG    EQU    47H
RESULT_0     EQU    48H
RESULT_1     EQU    49H
SAMPLE_FRQL  EQU    4AH
SAMPLE_FRQH  EQU    4BH

;-----------------------------------------------------------------------------------------------
              
                ORG     0000H
                JMP     0100H
                ORG     0100H
            
                MOV     R0,    #7FH
CLEAR_RAM_LP:        
                MOV     @R0,   #00H
                DEC     R0
                CJNE    R0,    #1FH,CLEAR_RAM_LP
                MOV     PSW,   #00H
                MOV     IE,    #80H
                MOV     IP,    #80H
                MOV     TCON,  #00H
        
                MOV     SP,    #50H         ;PUT STACK POINTER
                MOV     TMOD,  #01010001B ;16 BIT
                SETB    IT1
                MOV     TH1,   #00
                MOV     TL1,   #00
       
                MOV     P3,     #7FH
                MOV     P1,     #80H
                CALL    RESET_DISPLAY
                CALL    DISPLAY_FREQ_R
                CALL		D50MS
                JB      START,MAIN
                CALL    D50MS
                JB      START,MAIN
                SETB    FLAG
                MOV     P1,#00H
                JMP     MANUAL
;-----------------------------------------------------------------------------------------------
MAIN:         
					 CALL    BUTTON
					 CLR     RY_SAMPLE
					 CALL		D50MS
					 MOV     FREQ_FLAG,#00H
					 CALL    RESET_DISPLAY
					 CALL    DISPLAY_FREQ_R
					 MOV		P1, 	#00H
                CALL		D50MS
                SETB		RY_POWER
                CALL    D50MS
                CALL    D200MS
                CALL    D200MS
                CLR     RY_SAMPLE
                CALL		D200MS
                CALL    D200MS
                CALL    D200MS
                CALL    RTST
                MOV     SAMPLE_FRQL,TEST_FRQL
                MOV     SAMPLE_FRQH,TEST_FRQH
                SETB    RY_SAMPLE
                CALL    D200MS
                CALL    D200MS
                CALL    D200MS
                CALL    D200MS
                CALL    D200MS
                CALL    RTST
                MOV     OP_0,SAMPLE_FRQL
                MOV     OP_1,SAMPLE_FRQH
                MOV     SUB_0,TEST_FRQL
                MOV     SUB_1,TEST_FRQH
                CALL    SUB16_16BIT
                
                JC      RETURN
                MOV     FREQ_FLAG,#0FFH
                JMP     GO_DIV12
RETURN:         MOV     OP_0,TEST_FRQL
                MOV     OP_1,TEST_FRQH
                MOV     SUB_0,SAMPLE_FRQL
                MOV     SUB_1,SAMPLE_FRQH
                CALL    SUB16_16BIT
                               
GO_DIV12:       MOV     OP_2,#00H
                MOV     OP_3,#00H
                MOV     DIV_16_0,#0CH
                MOV     DIV_16_1,#00H
                CALL    DIV32_16BIT
                MOV     A,FREQ_FLAG
                MOV     RESULT_0,OP_0
                MOV     RESULT_1,OP_1
                JZ      GO_ON
                MOV     ADD_0,#0C8H
                MOV     ADD_1,#00H
                CALL    ADD16_16BIT
GO_ON:          CALL    DISPLAY1                
                MOV     OP_0,#02H
                MOV     OP_1,#00H
                MOV     SUB_0,RESULT_0
                MOV     SUB_1,RESULT_1
                CALL    SUB16_16BIT
                JC      FAIL
                CALL    D50MS
                MOV     P1,#00H
                CLR     RY_SAMPLE
                SETB    PASS_LED
                CALL    D50MS
                LJMP		MAIN        

;+++++==========================================================================
FAIL:           MOV     P1,#00H
                SETB    FAIL_LED
                CALL    D200MS
                JMP     MAIN

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MANUAL:         SETB    PASS_LED
                SETB    FAIL_LED
                SETB    RY_POWER
                CALL    RESET_DISPLAY
					 CALL    DISPLAY_FREQ_R
					 CALL		D50MS
                CALL    D200MS
                CALL    D200MS
                CALL    RTST
                CALL    D200MS
                CALL    D200MS
                JMP     MANUAL
;----------------------------------------------------------------------------------------------------------------
BUTTON:
					JB			START,BUTTON
					CALL		D50MS
					JNB		START,$
					CALL     D50MS
					RET
;-----------------------------------------------------------------------------------------------------------------
COUNTER_DISPLAY: 
  					SETB		COUNTER
  					NOP
  					NOP
  					NOP
  					CLR		COUNTER
  					NOP
  					NOP
  					NOP					                
               RET 					 
;-----------------------------------------------------------------------------------------------------------------
RESET_DISPLAY: 
  					SETB		RESET1
  					NOP
  					NOP
  					NOP
  					CLR		RESET1
  					NOP
  					NOP
  					NOP					                
               RET 					 
;--------------------------------------------------------------------------------------
DISPLAY_FREQ_C: 
               SETB      FREQ_C
               NOP
               NOP
               NOP
               CLR       FREQ_C
               NOP
               NOP
               NOP
               RET
;---------------------------------------------------------------------------------------
DISPLAY_FREQ_R:
               SETB      FREQ_R
               NOP
               NOP
               NOP
               CLR       FREQ_R
               NOP
               NOP
               NOP
               RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RTST:
         CALL    FIN2              ; INPUT TEST BORAD FRQUENCY
         ;CALL    MUL_SUM6
         CALL    DISPLAY
         call    D200MS
         CALL    D200MS
OVER:    ret
;##############################################################                                              
;MUL_SUM6: 
;          MOV     OP_2,#00H
;          MOV     OP_3,#00H
;          MOV     OP_0,TEST_FRQL
;          MOV     OP_1,TEST_FRQH                                                  
;          MOV     mul_16_0,#3CH                                      
;          MOV     mul_16_1,#00H    
;          CALL    mul32_16bit
;          MOV     TEST_FRQL,OP_0
;          MOV     TEST_FRQH,OP_1
;          RET
;##########################################
FIN2:
          MOV     TH1,#00h
          MOV     TL1,#00h                      ;INPUT FRQ ON TEST BOARD
          SETB    TR1
          CALL    D1S
          CLR     TR1
          MOV     TEST_FRQL,TL1
          MOV     TEST_FRQH,TH1
over1:

          RET     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:
             CALL    DISPLAY_FREQ_R
             MOV     A,TEST_FRQL
             JZ      LOOP12
             MOV     R0,A
LOOP9:
             CALL    DISPLAY_FREQ_C
             DJNZ    R0,LOOP9

LOOP12:
             MOV     A,TEST_FRQH
             JZ      FE
             MOV     R1,A
             MOV     R2,A
LOOP11:
             MOV     R0,#0FFH
LOOP10:
             CALL    DISPLAY_FREQ_C    
             DJNZ    R0,LOOP10
             DJNZ    R1,LOOP11
LOOP13:             
             CALL    DISPLAY_FREQ_C
             DJNZ    R2, LOOP13
FE:
             RET
;-------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY1:
             CALL    RESET_DISPLAY
             MOV     A,OP_0
             JZ      LOOP121
             MOV     R0,A
LOOP91:
             CALL    COUNTER_DISPLAY
             DJNZ    R0,LOOP91

LOOP121:
             MOV     A,OP_1
             JZ      FE1
             MOV     R1,A
             MOV     R2,A
LOOP111:
             MOV     R0,#0FFH
LOOP101:
             CALL    COUNTER_DISPLAY    
             DJNZ    R0,LOOP101
             DJNZ    R1,LOOP111
LOOP131:             
             CALL    COUNTER_DISPLAY
             DJNZ    R2, LOOP131
FE1:
             RET
;-------------------------------------------------
;###############################################################
;sub the 16 bits supplied by the                               #
;caller to the op registers                                    #
;op_0  op_1  -  sub_0  sub_1                                   #
;-->   op_0     op_1                                           #
;###############################################################
SUB16_16BIT:   CLR    c
               MOV    R5,SUB_0
               MOV    A,OP_0
               SUBB   A,R5                ;low byte first
               MOV    OP_0,A

               MOV    R5,SUB_1
               MOV    A,OP_1
               SUBB   A,R5                ;high byte + carry
               MOV    OP_1,A
               RET
;###############################################################
;add the 16 bits supplied by the                               #

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -