
/* main.c */


#include <stdio.h> 
#include <ADuC834.h>
#pragma NOREGPARMS
extern unsigned char Blink_func (unsigned char Dly_time);
extern void Delay_func (void);

void main (void)
{
while(1){
    Blink_func (1); /* blink at a 0.2 second interval */
	Delay_func();  /* delay for 5 seconds */

	Blink_func (5); /* blink at a 1.0 second interval */
	Delay_func();  /* delay for 5 seconds */
	
	Blink_func (10); /* blink at a 2.0 second interval */
	Delay_func();  /* delay for 5 seconds */
	
	Blink_func (20); /* blink at a 4.0 second interval */
	Delay_func();  /* delay for 5 seconds */
	}
}


;======================================================================
;======================================================================

;Blink_func.a51
;routine to blink LED


NAME	Blink_FUNC

?PR?Blink_func?Blink_FUNC                SEGMENT CODE
?DT?Blink_func?Blink_FUNC                SEGMENT DATA OVERLAYABLE
	PUBLIC	?Blink_func?BYTE
	PUBLIC	Blink_func

	RSEG  ?DT?Blink_func?Blink_FUNC
?Blink_func?BYTE:
 Dly_time?040:   DS   1

	RSEG  ?PR?Blink_func?Blink_FUNC
Blink_func:

		MOV	R7,#40
BLINK:		CPL	P3.4			; blink LED using compliment instruction
		CALL 	DELAY			; Call Software delay 100mS
		DJNZ    R7,BLINK
		RET

;------------------------------------------------------------------

DELAY:					; Delays by 100ms * A


	        MOV  	A,Dly_time?040

		MOV	R0, A		; Acc holds delay variable
 DLY0:		MOV	R1,#01Ah	; Set up delay loop0
 DLY1:		MOV	R2,#0FAh	; Set up delay loop1
		DJNZ	R2,$		; Dec R2 & Jump here until R2 is 0
		DJNZ	R1,DLY1         ; Dec R1 & Jump DLY1 until R1 is 0
		DJNZ	R0,DLY0		; Dec R0 & Jump DLY0 until R0 is 0
		RET			; Return from subroutine

;======================================================================
	END

;======================================================================
;======================================================================

;Delay_func.a51
;routine delays approximately 5 seconds

NAME	Delay_FUNC

?PR?Delay_func?Delay_FUNC    SEGMENT CODE
	PUBLIC	Delay_func

	RSEG  ?PR?Delay_func?Delay_FUNC
Delay_func:

					; Delays by 100ms * A

		MOV     A,#50
		MOV	R0,A		; Acc holds delay variable
 DLY0:		MOV	R1,#019h	; Set up delay loop0
 DLY1:		MOV	R2,#0FEh	; Set up delay loop1
		DJNZ	R2,$		; Dec R2 & Jump here until R2 is 0
		DJNZ	R1,DLY1         ; Dec R1 & Jump DLY1 until R1 is 0
		DJNZ	R0,DLY0		; Dec R0 & Jump DLY0 until R0 is 0
		RET			; Return from subroutine

;======================================================================
	END
