📄 motor_speed.asm
字号:
;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 + -