
$MOD51
;**************************************************************
;**************************************************************
;**							     **
;**---------------INTELLIGENT UPS PROJECT--------------------**
;**		  Inverter Module Software		     **
;**************************************************************
;*************ADVISOR: Prof. Dr. Eyup AKPINAR******************
;**							     **  
;**-----------------------DESIGNERS--------------------------**
;**	    	        BATUHAN CELIK			     **
;**			FUAD SOLTANOV			     **
;**			 HASIM TURGUT			     **
;**************************************************************
;**							     **
;**------------MicroController Family:ATMEL80C51-------------**
;**							     **
;**************************************************************
;**************************************************************
;(((((((((((((((((((((((MAIN PROGRAM)))))))))))))))))))))))))))
;
	ORG	00H			;Reset Vector
	JMP	START			;Was AJMP START
;
;(((((((((((((((((INTERRUPT SUB-PROGRAM)))))))))))))))))))))))
;
	ORG	03H			;External Int0 Vector
	JMP	DECIDE			;Was ACALL DECIDE
;
;	RETI				;Not needed
;
	ORG	13H			;External Int1 Vector
	JMP	STOP			;Was LCALL STOP
;
;(((((((((((((((((((MAIN PROGRAM START)))))))))))))))))))))))))
;
START:  ANL	P1,#83H
	MOV	IE,#85H
	MOV	IP,#01H			;ZERO CROSS INT. PRIORTY HIGH
	MOV	TCON,#01H		;INT0-> MADE FALLING EDGE
	MOV	R1,#00H		
	MOV	R2,#00H
REPEAT: NOP				;Endless looP
	JMP	REPEAT			;Here
;
;(((((((((((((((((((PWM SIGNAL GENERATORS))))))))))))))))))))))
;
;<<<<<<<<<<<<<<<<<<<<<<POSITIVE CYCLE>>>>>>>>>>>>>>>>>>>>>>>>>>
;
	ORG	33H
	CLR	P1.4
	CLR	P1.2
	NOP
	NOP
	NOP
	NOP
	NOP				;THESE NOP COMMANDS USED FOR OUR
	NOP				;IPM MODULE RISING/FALLING TIME DELAYS
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	P1.5
	SETB	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR	P1.2		;This port already cleared from above
	CLR	P1.4		;This port already cleared from above
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV	R3,#1BH		;Set up delay
FWAIT2:	NOP
	DJNZ	R3,FWAIT2	;Delay loop here
;
CONTROL1:
	JB	P1.0,GOON1
	CLR	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	P1.2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	AMP	CONTROL1
;
GOON1:
	CLR	P1.2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	JMP	CONTROL1
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>ALARM<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;
	ORG	94H			;This is the address that STOP returns to
	MOV	IE,#00H
	JMP	REPEAT			;Was ACALL REPEAT
;
;<<<<<<<<<<<<<<<<<<<<<<NEGATIVE CYCLE>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
	ORG	100H
	CLR	P1.5
	CLR	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	P1.4
	SETB	P1.2
	NOP
	NOP	
	MOV	R3,#1BH			;Set up Delay
FWAIT1:	NOP
	DJNZ	R3,FWAIT1		;Delay loop here
;
AGAIN:	JB	P1.1,CONTROL2
	CLR	P1.2
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	JMP	AGAIN
;
CONTROL2:
	SETB	P1.2
	NOP
	NOP
	CLR	P1.3
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	JMP AGAIN
;
;((((((((((((((((((((((((INTERRUPT PROGRAM))))))))))))))))))))))
;
SPECIFY:
	JNB	P1.0,YES1		;IF !INT0 THEN YES1
	JNB	P1.1,NO3		;IF !INT1 THEN NO3
	JMP	SPECIFY			;Loop Here ;Was AJMP SPECIFY
YES1:   JNB	P1.1,YES2		;IF !INT1 THEN YES2
NO2:	MOV	R2,#0FH			;IF INT1 THEN LOAD R2:R1 WITH 0FFFH
	MOV	R1,#0FFH
	RET				;RETURN
;
YES2:	JNB	P1.0,YES3		;HERE +VE OR -VE CYCLE OF 50HZ SIN IS BEING SPECIFIED
NO3:	MOV	R2,#0FFH		;IF !INT0 THEN YES3 ELSE LOAD R2:R1 WITH FFFFH
	MOV	R1,#0FFH
	RET				;RETURN
;
YES3:	JNB	P1.1,YES4		;IF !INT1 THEN YES4
	JMP	NO2			;ELSE NO2
YES4:	JMP	YES2			;GOTO YES2
;
;<<<<<<<<<<<<<<<<<<<<CYCLE BRANCHING>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
CYCLE:	
	CJNE	R2,#0FH,NEG		;R2
	MOV	30H,#33H
	MOV	31H,#00H
	POP	DPH
	POP	DPL
	PUSH	30H	
	PUSH	31H
	MOV	R2,#0FFH
	RET
;
					;HERE I'm MANUPULATING THE STACK POINTER TO BRACH
					;THE MICROCNTROLLER +VE OR -VE CYCLE PWM GENERATIG PROGRAM 
NEG:	MOV	32H,#01H
	MOV	31H,#00H
	POP	DPH
	POP	DPL
	PUSH	32H
	PUSH	31H
	MOV	R2,#0FH
	RET
;
DECIDE:					;External INT0 Interrupt Vector
	CJNE	R1,#00H,SAYKIL
	CALL	SPECIFY			;Was ACALL SPECIFY
	RETI				;Was RET
;
SAYKIL:	CALL	CYCLE			;This was branched to by a JMP instruction
	RET				;Returns to ???
;
STOP:	ANL	P1,#43H			;Called By External INT1 Vector
	SETB	P1.6			;Set this port for some reason?
	POP	DPH			;POP the last return address
	POP	DPL
	MOV	33H,#94H		;Set the return address to 0094H
	MOV	34H,#00H
	PUSH	33H			;PUSH it on the stack
	PUSH	34H
	RETI				;and return to it
;
END
