Electronic Hand Sanitizer (EHS)-8051

#y2019 #Electronics #asm

Design an Electronic Hand Sanitizer (EHS) based on 8051 uController

Schematic 

Pasted image 20240528002646.png

Assembly Program:
SC BIT P3.1
READ BIT P3.0
HEATER BIT P0.4
ORG 0000H
SJMP MAIN

ORG 0003H
LJMP ISR_STOP
ORG 000BH
LJMP ISR_TIMER
ORG 0013H
LJMP ISR_EOC

ORG 0030H
MAIN:	SETB P0.0	;EMPTINESS OF WATER AND SOAP INPUT
	SETB P0.2	;IR SENSOR INPUT
	MOV IE,#87H	;ENABLE INTERRUPTS
	SETB IT0	;MAKE EDGE-TRIGGERD EXTERNAL INTERRUPTS
	MOV P2,#32D	;PROVIDE VREF TO ADC
	MOV P1,#0FFH	;PORT 1 READS ADC OUTPUT(TEMPERATURE)
	MOV TMOD,#01H	;TIMER0,MODE1
	ACALL SET_TIMER0;SET TIMER VALUVES
	MOV R5,00H	;j=0

MOV R3,#2D
ACALL DELAY
CHECK_EMPTINESS:	JNB P0.0,CHECK_HAND
SJMP CHECK_EMPTINESS
CHECK_HAND:		JNB P0.2,WASHING
SJMP CHECK_EMPTINESS

WASHING:	CLR P0.5	;OPENING WATER FLOW
		MOV R3,#4D	;WAIT 1S
		ACALL DELAY
		SETB P0.5	;CLOSEING WATER FLOW
		MOV R3,#2D	;WAIT 500MS
		ACALL DELAY
		
		CLR P0.6	;OPENING SOAP FLOW
		MOV R3,#4D	;WAIT 1S
		ACALL DELAY
		SETB P0.6	;CLOSING WATER FLOW
		
		MOV R3,#80D	;WAIT 20S
		ACALL DELAY

		CLR P0.5	;OPENING WATER FLOW
		MOV R3,#80D	;WAIT 20S
		ACALL DELAY
		SETB P0.5
		MOV R3,#2D	;WAIT 500MS
		ACALL DELAY
		
		CLR P0.7	;OPENING AIR FLOW
		CLR P0.3	;TRUN ON MOTOR
		SETB TR0	;START TIMER
		CLR SC		;SENDING SC SOGNAL TO ADC

		MOV R3,#40D	;WAIT 10S
		ACALL DELAY
		SETB P0.4	;TRUN OF HEATER
		CLR TR0		;STOP TIMER
		SETB P0.3	;STOP MOTOR
		SETB P0.7	;CLOSE V3
		ACALL BEEP
		SJMP MAIN
DELAY:	
LOOP2:	MOV R2,#10D
LOOP1:	MOV R1,#100D
LOOP0:	MOV R0,#125D
DJNZ R0,$
DJNZ R1,LOOP0
DJNZ R2,LOOP1
DJNZ R3,LOOP2
RET

BEEP:	MOV R6,#08D
BEEP_L:	CPL P0.1
	MOV R3,#1
	ACALL DELAY
	DJNZ R6,BEEP_L
	RET

ISR_EOC:	JNB P0.7,NEXT	;CHECK V3 IS OPEN
		RETI
NEXT:		SETB READ
		CLR READ	;HIGH TO LOW PULSE
		MOV A,P1	;READ TEMPERATURE
		CJNE A,#0CDH,HEATER_CODE
HEATER_CODE:	CPL C
		MOV HEATER,C
		SETB SC
		CLR SC
		RETI

ISR_TIMER:	MOV A,R5	;GENERATE 80% PWM SIGNAL FOR DC MOTOR
		MOV B,#05D
		DIV AB
		XCH A,B
		INC R5
		ACALL SET_TIMER0
		JNZ MOTOR_ON
		SJMP MOTOR_OFF
MOTOR_ON:	CLR P0.3
		RETI
MOTOR_OFF:	SETB P0.3
		RETI

SET_TIMER0:	MOV TL0,#0EFH
		MOV TH0,#0D8H
		RET
		
ISR_STOP:	MOV P0,#0FFH
		MOV P1,#0FFH
		MOV P2,#0FFH
		MOV P3,#0FFH	;CLEAR ALL I/O PORTS
		CLR IE.7	;DISABLE INTERRUPTS
		SJMP $		;WAIT UNTIL ON_SWITCH FOR RESET
END