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

📄 fantest.asm

📁 用汇编语言写的风扇转速测试程序,用于转速测试,传感器用KEYENCE
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	MOV R1, #68H                  
        MOV R2, #05
LOOP:   MOV A, @R1
        ORL A, #30H
        LCALL WriteLCDData
        DEC R1
	DJNZ R2, LOOP
        RET
/*************** Get key value  *****************************************/ 
GETKEY: MOV 32H, #0FFH
        ;MOV P1, #0FFH
        SETB INP 
        JNB INP, KEYIN
        MOV 32H, #0FFH
        LJMP BACK
KEYIN:  MOV A, P1
        SWAP A
        ANL A, #0FH
        MOV DPTR, #TABLE               ;BCD TO ASCII
        MOVC A, @A+DPTR
        MOV 32H, A                     ; GET KEY SBUFF
        JNB INP, $      
        MOV A, 32H
        CJNE A, #0FFH, BACK
        MOV 32H, #0FFH
BACK:   RET   
/*************** key anaylsis ******************************************************/ 
PRESS:  MOV A, 32H
        MOV 33H, A
        MOV A, 33H                    ; HANDLE KEY SBUFF            
        NOP
        CJNE A, #0FFH, PRES0
	LJMP QUIT
/*************** first press A key***************************************************/
PRES0:  NOP
        JNB 20H.0, PRES1              ; switch enter & quit/char & numb, =1, FUNCTION KEY, =0 NUMBER KEY
	MOV A, 33H
	MOV 34H, A                    ; SBUF FOR FUNC KEY
        MOV A, 34H
	NOP
	CJNE A, #0AH, COMP0
	LCALL I2CINIT
	LCALL VERIFY_PAGE_HI
	MOV A, #0C0H                  ;    DISPLAY "H Limit"
        LCALL Write_instruction
	MOV DPTR, #LINE6
	LCALL	PR_STRING
	MOV A, #0C8H                  ; DISPLAY 48H--44H
        LCALL Write_instruction
	MOV R0, #48H
	MOV R2, #5
HILIMT:	MOV A, @R0
	ORL A, #30H
	LCALL	WriteLCDData 
	DEC R0
	DJNZ R2, HILIMT 
	MOV A, #0CDH                  ; DISPLAY "rpm"  
        LCALL Write_instruction
	MOV DPTR, #LINE8
	LCALL	PR_STRING
	CLR 20H.0
        LJMP QUIT
PRES1:  LJMP PRES2
/*************** first press B key***************************************************/
COMP0:  MOV A, 34H
        NOP
        CJNE A, #0BH, COMP1
	LCALL I2CINIT
	LCALL VERIFY_PAGE_LO
        MOV A, #0C0H                             ; DISPLAY "L Limit"
        LCALL Write_instruction
	MOV DPTR, #LINE5
	LCALL	PR_STRING
	MOV A, #0C8H                             ; DISPLAY 4DH--49H
        LCALL Write_instruction
        MOV R0, #4DH
	MOV R2, #5
LOLIMT:	MOV A, @R0
	ORL A, #30H
	LCALL	WriteLCDData 
	DEC R0
	DJNZ R2, LOLIMT	
	MOV A, #0CDH                             ; DISPLAY "rpm"  
        LCALL Write_instruction
	MOV DPTR, #LINE8
	LCALL	PR_STRING
        CLR  20H.0
	LJMP QUIT
/*************** first press C key***************************************************/
COMP1:  MOV A, 34H
        NOP
        CJNE A, #0CH, SAVE
	LCALL I2CINIT
        LCALL VERIFY_BYTE_FILL
        MOV A, #0C0H                         ; DISPLAY "FAN Q'TY"                       
        LCALL Write_instruction                        
	MOV DPTR, #LINE7
	LCALL	PR_STRING
	MOV A, #0C9H                               ; DISPLAY "4F"                      
        LCALL Write_instruction	
	MOV A, 4FH                                
	ORL A, #30H                            
	LCALL WriteLCDData
	MOV A, #0CAH                            ; DISPLAY "PCS"                        
        LCALL Write_instruction
	MOV DPTR, #LINE9
	LCALL	PR_STRING
	CLR  20H.0
	LJMP QUIT
/*************** first press F key***************************************************/
SAVE:   MOV A, 34H
        NOP
        CJNE A, #0FH, COMP2
        LCALL I2CINIT
	LCALL PAGE_FILL_SAVE
	NOP
	NOP
	NOP
	NOP
	NOP
	LCALL I2CINIT
	LCALL PAGE_FILL_SAVE1
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE14
	LCALL	PR_STRING
	LCALL DELAY2
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
	LJMP QUIT
/*************** first press other key***************************************************/
COMP2:  MOV A, #0C0H                         
        LCALL Write_instruction
	MOV DPTR, #LINE13
	LCALL	PR_STRING
	LCALL DELAY2
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
	LJMP QUIT
/***************after first press A key, press D key quit*************************************/	
PRES2: 	MOV A, 33H
       	CJNE A, #0DH, ENTER
QUITT:	MOV 34H, #00H                     ;SBUF FOR FUNCTION KEY
	SETB 20H.0
	CLR  20H.1
	CLR A
	MOV R0, #59H
	MOV R2, #5
FILLO:	MOV @R0, A
	INC R0
	DJNZ R2, FILLO
	MOV 50H, A               ; Number key buff
        MOV 51H, A               
        MOV 52H, A
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
	LJMP QUIT
/***************after first press A key, press E key enter*************************************/
ENTER:	MOV A, 33H
        CJNE A, #0EH, INPTA                 
        JNB 20H.1, OUT            ; NUMBER KEY IN ?
ABA:    MOV A, 34H
	CJNE A, #0AH, ABB
        LCALL I2CINIT
	LCALL PAGE_FILL_HI
	LJMP OUT
ABB:    MOV A, 34H
        CJNE A, #0BH, ABC
	LCALL I2CINIT
	LCALL PAGE_FILL_LO
        LJMP OUT
ABC:    MOV A, 34H
        CJNE A, #0CH, OUT
	LCALL I2CINIT
        LCALL BYTE_FILL
	LCALL VERIFY_BYTE_FILL
        MOV A, 4FH
        MOV DPTR, #TABLE1
        MOVC A, @A+DPTR
	MOV 4EH, A
OUT:    MOV 34H, #00H
	SETB 20H.0
	CLR  20H.1
	CLR A
	MOV R0, #59H
	MOV R2, #5
FILLH:	MOV @R0, A
	INC R0
	DJNZ R2, FILLH
	MOV 50H, A               ; Number key buff
        MOV 51H, A               
        MOV 52H, A
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE10
	LCALL	PR_STRING
	LCALL DELAY2
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
	LJMP QUIT
/*************** display error input key *************************************/
INPTA:	MOV A, 33H
        CJNE A, #0AH, INPTB 
        JMP FAIL 
INPTB:	MOV A, 33H
        CJNE A, #0BH, INPTC
        JMP FAIL 
INPTC:	MOV A, 33H
        CJNE A, #0CH, INPTF
        JMP FAIL
INPTF:  MOV A, 33H
        CJNE A, #0FH, MATH                  
FAIL:   MOV 34H, #00H
	SETB 20H.0
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE12
	LCALL	PR_STRING
	LCALL DELAY2
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
        LJMP QUIT
/*************** display OK input A key (H limit input)*************************************/
MATH:   MOV A, 34H
        CJNE A, #0AH, OUPTB
	SETB 20H.1                ; SAVE #5DH-#59H PC
	MOV A, 50H                   
	CJNE A, #00H, MOVA1
	MOV A, 33H
	MOV 59H, A
	MOV A, 50H
	ADD A, #01H
	MOV 50H, A
	JMP QW1
MOVA1:  CJNE A, #01H, MOVA2
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 50H
	ADD A, #01H
	MOV 50H, A
	JMP QW1
OUPTB:  LJMP OUPTBB
MOVA2:  CJNE A, #02H, MOVA3
        MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 50H
	ADD A, #01H
	MOV 50H, A
	JMP QW1
MOVA3:  CJNE A, #03H, MOVA4
        MOV A, 5BH
	MOV 5CH, A
        MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 50H
	ADD A, #01H
	MOV 50H, A
	JMP QW1
MOVA4:  CJNE A, #04H, QW1
        MOV A, 5CH
	MOV 5DH, A
        MOV A, 5BH
	MOV 5CH, A
	MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 50H
	ADD A, #01H
	MOV 50H, A
QW1:	MOV A, #0C8H
        LCALL Write_instruction
        MOV R0, #5DH                  
        MOV R2, #05
LCD1:   MOV A, @R0
        ORL A, #30H
        LCALL WriteLCDData
        DEC R0
        DJNZ R2, LCD1
	LJMP QUIT
/*************** display OK input B key (L limit input)*************************************/
OUPTBB: MOV A, 34H
        CJNE A, #0BH, OUPTC
	SETB 20H.1
        MOV A, 51H                   
	CJNE A, #00H, MOVB1
	MOV A, 33H
	MOV 59H, A
	MOV A, 51H
	ADD A, #01H
	MOV 51H, A
	JMP QW2
MOVB1:  CJNE A, #01H, MOVB2
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 51H
	ADD A, #01H
	MOV 51H, A
	JMP QW2
OUPTC:  LJMP OUPTCC
MOVB2:  CJNE A, #02H, MOVB3
        MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 51H
	ADD A, #01H
	MOV 51H, A
	JMP QW2
MOVB3:  CJNE A, #03H, MOVB4
        MOV A, 5BH
	MOV 5CH, A
        MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 51H
	ADD A, #01H
	MOV 51H, A
	JMP QW2
MOVB4:  CJNE A, #04H, QW2
        MOV A, 5CH
	MOV 5DH, A
        MOV A, 5BH
	MOV 5CH, A
	MOV A, 5AH
	MOV 5BH, A
	MOV A, 59H
	MOV 5AH, A
	MOV A, 33H
	MOV 59H, A
	MOV A, 51H
	ADD A, #01H
	MOV 51H, A        
QW2:	MOV A, #0C8H
        LCALL Write_instruction
        MOV R0, #5DH                  
        MOV R2, #05
LCD2:   MOV A, @R0
        ORL A, #30H
        LCALL WriteLCDData
        DEC R0
        DJNZ R2, LCD2
	LJMP QUIT
/*************** display OK input C key (Fan Q'ty input)*************************************/
OUPTCC: MOV A, 34H
        CJNE A, #0CH, QUIT
	SETB 20H.1
	MOV A, 52H                   
	CJNE A, #00H, QW3
	MOV A, 33H
        CJNE A, #00H, UNZERO
        MOV 34H, #00H
	SETB 20H.0
	CLR  20H.1
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE12
	LCALL	PR_STRING
	LCALL DELAY2
	MOV A, #0C0H
        LCALL Write_instruction
	MOV DPTR, #LINE11
	LCALL	PR_STRING
        JMP QUIT  
UNZERO:	MOV 5FH, A
	MOV 52H, #00H
QW3:	MOV A, #0C9H
        LCALL Write_instruction
        MOV A, 5FH
        ORL A, #30H                          ;BCD TO ASCII
        LCALL WriteLCDData
QUIT:   RET
/*************** compare H limit*************************************/
HILIMIT: LCALL I2CINIT
	 LCALL VERIFY_PAGE_HI
         CLR C
         MOV A, 48H
         SUBB A, 68H
         JC LED1ON
	 JNZ LED1OFF
	 MOV A, 47H
	 SUBB A, 67H
	 JC LED1ON
	 JNZ LED1OFF
	 MOV A, 46H
         SUBB A, 66H
         JC LED1ON
	 JNZ LED1OFF
	 MOV A, 45H
	 SUBB A, 65H
	 JC LED1ON
	 JNZ LED1OFF
	 MOV A, 44H
	 SUBB A, 64H
	 JC LED1ON
	 JNZ LED1OFF
	 JMP LED1OFF
LED1ON:  SETB P0.0
         JMP LASTH
LED1OFF: CLR P0.0
LASTH:   RET
/*************** compare L limit*************************************/
LOLIMIT: LCALL I2CINIT
	 LCALL VERIFY_PAGE_LO
         CLR C
         MOV A, 68H
         SUBB A, 4DH
         JC LED2ON
	 JNZ LED2OFF
	 MOV A, 67H
	 SUBB A, 4CH
	 JC LED2ON
	 JNZ LED2OFF
	 MOV A, 66H
         SUBB A, 4BH
         JC LED2ON
	 JNZ LED2OFF
	 MOV A, 65H
	 SUBB A, 4AH
	 JC LED2ON
	 JNZ LED2OFF
	 MOV A, 64H
	 SUBB A, 49H
	 JC LED2ON
	 JNZ LED2OFF
	 JMP LED2OFF
LED2ON:  SETB P0.1
         JMP LASTL
LED2OFF: CLR P0.1
LASTL:   RET
/*************** OK (Over L limit, Under H limit)*************************************/
GREENLED:MOV C, P0.0

⌨️ 快捷键说明

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