
	.title  "rampa"	; Titolo del programma 
	.vers   "ST62E10"	; Microprocessore usato  
	.w_on             	; Abilita la memoria a finestre
	;        8 Mhz		;vers 08-09-99
;------------------------------------
;|  VARIABILI DEL MICROPROCESSORE        

a       .def    0ffh    ;Registro accumulatore
x       .def    080h    ;Registro x 
y       .def    081h    ;Registro y
v       .def    082h    ;Registro v
w       .def    083h    ;Registro w
port_a  .def    0c0h    ;Registro Dati porta A 
port_b  .def    0c1h    ;Registro Dati porta B
port_c  .def    0c2h    ;Registro Dati porta C
pdir_a  .def    0c4h    ;Registro Direzione porta A
pdir_b  .def    0c5h    ;Registro Direzione porta B
pdir_c  .def    0c6h    ;Registro Direzione porta C
popt_a  .def    0cch    ;Registro Opzioni porta A
popt_b  .def    0cdh    ;Registro Opzioni porta B
popt_c  .def    0ceh    ;Registro Opzioni porta C
ior     .def    0c8h    ;Registro Opzioni per le Interruzioni
addr    .def    0d0h    ;Registro Dati dell'A/D converter
adcr    .def    0d1h    ;Registro di Controllo dell'A/D converter
psc     .def    0d2h    ;Registro per il Prescaler del Timer
tcr     .def    0d3h    ;Registro Dati del Timer
tscr    .def    0d4h    ;Registro TSCR del Timer 
wdog    .def    0d8h    ;Registro del WatchDog
drw     .def    0c9h    ;Registro della zona dati ROM (Rom Data Window)
;----------------------------------------------
;|  VARIABILI usate da questo PROGRAMMA       |
;----------------------------------------------

durata	.def	084h
livello	.def	085h
sec3	.def	086h
ctrl	.def	087h

;fino	.def	0bfh    massimo
;*****************************
;*** Settaggio iniziale    ***
;*****************************
	.org    080h      ; Significa: da qui in poi memorizziamo il
			   ; programma nella memoria ROM

inizio                     ; Inizializzazione del micro

	ldi     wdog,0ffh  ; Carico il Watch-Dog.

;***  Setta la porta A 
	ldi     port_a,00000000b	;pa0=out relé
	ldi     pdir_a,00000001b        ;pa3=in
	ldi     popt_a,00000001b 	

;***  Setta la porta B 
	ldi     port_b,00000000b        ;default out=0
	ldi     pdir_b,11111111b        ;tutti out
	ldi     popt_b,11111111b  

	ldi     adcr,0         	;DISABLE A/D INTERRUPT
	ldi     tscr,0         	;DISABLE TIMER INTERRUPT
	ldi     ior,0          	;DISABLE ALL INTERRUPT
	reti    		;RIPRISTINA I FLAG PRINCIPALI

      	jp      main   

;*******************************
;*** GESTORI di INTERRUPT    ***
;*******************************

ad_int 	reti

tim_int ldi	wdog,255
	dec 	durata		;nr per ottenere un secondo (12)
	jrz 	dur		;jrnz ritor
	jp      ritor
dur	ldi 	durata,50
	dec	sec3		;ritardo 3 secondi
	jrnz	ritor
	ldi	ctrl,1		;setta 1 il flag 
	ldi	sec3,4
ritor	ldi	tscr,01011110b	 
	ldi	tcr,124          
	reti
	
BC_int  reti
A_int   reti

nmi_int 
	reti

;******************************************
;PROGRAMMA PRINCIPALE
;******************************************

main	ldi 	wdog,255
	ldi	livello,1	;livello DAC output
	ldi	tscr,01011110b	 
	ldi	tcr,124 
	ldi	durata,50
	set	4,ior
	ldi	sec3,4
	clr	ctrl		;diventa 1 ogni 3 sec in TIM_INT
	ldi	port_a,1	;attiva rele`
out_	ld	a,livello
	ld	port_b,a	;uscita livello DAC
qui	ldi	wdog,255
	ld	a,port_a
	jrs	3,a,fine   ;se si riapre TIMER esterno finisce
	jrr	0,ctrl,qui
	clr	ctrl		
	inc	livello
	ld	a,livello
	jrz	resta
	jp	out_
resta	ldi	wdog,255
	ld	a,port_a
	jrr	3,a,resta
	clr	ctrl
	dec	livello		;livello = 255 pronto per la discesa
discesa	ld	a,livello
	ld	port_b,a	;mette in uscita livello DAC
qui2	ldi	wdog,255
	jrr	0,ctrl,qui2
	clr	ctrl
	dec	livello		;abbassa luce
	ld	a,livello
	jrz	fine
	jp	discesa
fine	clr	a		;spegne ADC=0
	ld 	port_b,a
	ld	a,port_a
	res	0,a		;diseccita relé - tutto spento
	ld	port_a,a
	ldi 	wdog,255
	jp	fine
;*********************************
;***  VETTORI DI INTERRUPTS    ***
;*********************************
	.org    0ff0h
	jp      ad_int  	;A/D int        vector #4
	jp      tim_int 	;timer int      vector #3
	jp      BC_int  	;port B & C int vector #2
	jp      A_int   	;port A int     vector #1
	.org    0ffch
	jp      nmi_int 	;nmi int        vector #0
	jp    	inizio  	;reset vector
	.end     		; Fine del programma
