Here is a trial of building a tachometer using AT89S52 Microcontroller. This is a digital tachometer which works using infrared rays. The tachometer designed here can measure rotational speed up to 4200 rpm which is sufficient for small scale use. If the speed goes beyond 4200 rpm, it gives a message on the display screen as “OUT OF RANGE”.
OPERATION & PROGRAM STRUCTURE
Video
Project Source Code
###
ORG 00H
HARDWARE_CONNECTION:
LCD_DATA EQU P2
LCD_RS EQU P3.6
LCD_EN EQU P3.7
SOFTWARE_VARIABLE:
TEMPVAR_1 EQU R0
TEMPVAR_2 EQU R1
TEMPVAR_3 EQU R2
TEMPVAR_4 EQU R3
TEMPVAR_5 EQU R4
TEMPVAR_6 EQU R5
TEMPVAR_7 EQU R6
TEMPVAR_8 EQU R7
LCD_INITIALIZATION:
MOV A,#38H
ACALL LCD_COMND_WRT
MOV A,#0CH
ACALL LCD_COMND_WRT
MOV A,#01H
ACALL LCD_COMND_WRT
MOV A,#80H
ACALL LCD_COMND_WRT
CLOCK:
MOV 0C9H,#02H ;T2MOD
MOV 0CAH,#0B7H ;RCAP2L
MOV 0CBH,#0FFH ;RCAP2H
MOV 0CCH,#0B7H ;TL2
MOV 0CDH,#0FFH ;TH2
MOV 0C8H,#04H ;T2CON
ORIGIN:
MOV TH1,#00H
MOV TMOD,#60H
SETB TR1
ACALL DELAY_ONESEC
CLR TR1
MOV A,TL1
CMPR_0: CJNE A,#00H,CMPR_1
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_1: CJNE A,#01H,CMPR_2
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_2: CJNE A,#02H,CMPR_3
MOV A,#01H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_3: CJNE A,#03H,CMPR_4
MOV A,#01H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_4: CJNE A,#04H,CMPR_5
MOV A,#02H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_5: CJNE A,#05H,CMPR_6
MOV A,#03H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_6: CJNE A,#06H,CMPR_7
MOV A,#03H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_7: CJNE A,#07H,CMPR_8
MOV A,#04H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_8: CJNE A,#08H,CMPR_9
MOV A,#04H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_9: CJNE A,#09H,CMPR_10
MOV A,#05H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_10: CJNE A,#0AH,CMPR_11
MOV A,#06H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_11: CJNE A,#0BH,CMPR_12
MOV A,#06H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_12: CJNE A,#0CH,CMPR_13
MOV A,#07H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_13: CJNE A,#0DH,CMPR_14
MOV A,#07H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_14: CJNE A,#0EH,CMPR_15
MOV A,#08H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_15: CJNE A,#0FH,CMPR_16
MOV A,#09H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_16: CJNE A,#10H,CMPR_17
MOV A,#09H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_17: CJNE A,#11H,CMPR_18
MOV A,#10H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_18: CJNE A,#12H,CMPR_19
MOV A,#10H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_19: CJNE A,#13H,CMPR_20
MOV A,#11H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_20: CJNE A,#14H,CMPR_21
MOV A,#12H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_21: CJNE A,#15H,CMPR_22
MOV A,#12H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_22: CJNE A,#16H,CMPR_23
MOV A,#13H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_23: CJNE A,#17H,CMPR_24
MOV A,#13H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_24: CJNE A,#18H,CMPR_25
MOV A,#14H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_25: CJNE A,#19H,CMPR_26
MOV A,#15H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_26: CJNE A,#1AH,CMPR_27
MOV A,#15H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_27: CJNE A,#1BH,CMPR_28
MOV A,#16H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_28: CJNE A,#1CH,CMPR_29
MOV A,#16H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_29: CJNE A,#1DH,CMPR_30
MOV A,#17H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_30: CJNE A,#1EH,CMPR_31
MOV A,#18H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_31: CJNE A,#1FH,CMPR_32
MOV A,#18H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_32: CJNE A,#20H,CMPR_33
MOV A,#19H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_33: CJNE A,#21H,CMPR_34
MOV A,#19H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_34: CJNE A,#22H,CMPR_35
MOV A,#20H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_35: CJNE A,#23H,CMPR_36
MOV A,#21H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_36: CJNE A,#24H,CMPR_37
MOV A,#21H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_37: CJNE A,#25H,CMPR_38
MOV A,#22H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_38: CJNE A,#26H,CMPR_39
MOV A,#22H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_39: CJNE A,#27H,CMPR_40
MOV A,#23H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_40: CJNE A,#28H,CMPR_41
MOV A,#24H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_41: CJNE A,#29H,CMPR_42
MOV A,#24H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_42: CJNE A,#2AH,CMPR_43
MOV A,#25H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_43: CJNE A,#2BH,CMPR_44
MOV A,#25H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_44: CJNE A,#2CH,CMPR_45
MOV A,#26H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_45: CJNE A,#2DH,CMPR_46
MOV A,#27H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_46: CJNE A,#2EH,CMPR_47
MOV A,#27H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_47: CJNE A,#2FH,CMPR_48
MOV A,#28H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_48: CJNE A,#30H,CMPR_49
MOV A,#29H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_49: CJNE A,#31H,CMPR_50
MOV A,#29H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_50: CJNE A,#32H,CMPR_51
MOV A,#30H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_51: CJNE A,#33H,CMPR_52
MOV A,#30H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_52: CJNE A,#34H,CMPR_53
MOV A,#31H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_53: CJNE A,#35H,CMPR_54
MOV A,#32H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_54: CJNE A,#36H,CMPR_55
MOV A,#32H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_55: CJNE A,#37H,CMPR_56
MOV A,#33H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_56: CJNE A,#38H,CMPR_57
MOV A,#33H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_57: CJNE A,#39H,CMPR_58
MOV A,#34H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_58: CJNE A,#3AH,CMPR_59
MOV A,#35H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_59: CJNE A,#3BH,CMPR_60
MOV A,#35H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_60: CJNE A,#3CH,CMPR_61
MOV A,#36H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_61: CJNE A,#3DH,CMPR_62
MOV A,#36H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_62: CJNE A,#3EH,CMPR_63
MOV A,#37H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_63: CJNE A,#3FH,CMPR_64
MOV A,#38H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_64: CJNE A,#40H,CMPR_65
MOV A,#38H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_65: CJNE A,#41H,CMPR_66
MOV A,#39H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_66: CJNE A,#42H,CMPR_67
MOV A,#39H
ACALL BCD_TO_ASCII
MOV A,#80H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_67: CJNE A,#43H,CMPR_68
MOV A,#40H
ACALL BCD_TO_ASCII
MOV A,#40H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_68: CJNE A,#44H,CMPR_69
MOV A,#41H
ACALL BCD_TO_ASCII
MOV A,#00H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_69: CJNE A,#45H,CMPR_70
MOV A,#41H
ACALL BCD_TO_ASCII
MOV A,#60H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
CMPR_70: CJNE A,#46H,EXIT
MOV A,#42H
ACALL BCD_TO_ASCII
MOV A,#20H
ACALL BCD_TO_ASCII
LJMP RPM_DISPLAY
EXIT: MOV DPTR,#NO_RANGE
ACALL STRING_DISPLAY
SJMP $
RPM_DISPLAY:
MOV A,#' '
ACALL LCD_DATA_WRT
MOV DPTR,#RPM
ACALL STRING_DISPLAY
SJMP $
LCD_COMND_WRT:
MOV LCD_DATA,A
CLR LCD_RS
SETB LCD_EN
ACALL DELAY_NINE
CLR LCD_EN
RET
LCD_DATA_WRT:
MOV LCD_DATA,A
SETB LCD_RS
SETB LCD_EN
ACALL DELAY_NINE
CLR LCD_EN
RET
BCD_TO_ASCII:
MOV TEMPVAR_4,A
ANL A,#0FH
ORL A,#30H
MOV TEMPVAR_3,A
MOV A,TEMPVAR_4
ANL A,#0F0H
SWAP A
ORL A,#30H
ACALL LCD_DATA_WRT
ACALL DELAY_NINE
MOV A,TEMPVAR_3
ACALL LCD_DATA_WRT
ACALL DELAY_NINE
RET
DELAY_NINE:
MOV TEMPVAR_5,#16
NINE_BACK:MOV TEMPVAR_6,#250
DJNZ TEMPVAR_6,$
DJNZ TEMPVAR_5,NINE_BACK
RET
DELAY_ONESEC:
MOV TEMPVAR_5,#10
BK_C: MOV TEMPVAR_6,#255
BK_B: MOV TEMPVAR_7,#179
BK_A: DJNZ TEMPVAR_7,BK_A
DJNZ TEMPVAR_6,BK_B
DJNZ TEMPVAR_5,BK_C
MOV TEMPVAR_6,#50
BK_E: MOV TEMPVAR_5,#9
BK_D: DJNZ TEMPVAR_5,BK_D
DJNZ TEMPVAR_6,BK_E
RET
STRING_DISPLAY:
DIS_BACK:CLR A
MOVC A,@A+DPTR
JZ DIS_OUT
ACALL LCD_DATA_WRT
INC DPTR
SJMP DIS_BACK
DIS_OUT:RET
RPM: DB 'RPM',0
NO_RANGE: DB 'OUT OF RANGE',0
END
###
Circuit Diagrams
Filed Under: Electronic Projects
Questions related to this article?
👉Ask and discuss on EDAboard.com and Electro-Tech-Online.com forums.
Tell Us What You Think!!
You must be logged in to post a comment.