;**********************************
;* Zadatak 1 - 2. kz. 28.05.2002. *
;**********************************
MOTOR `EQU 0FFFF1000
MOTORSR `EQU 0FFFF1001
CTLR `EQU 0FFFF2000
CTCR `EQU 0FFFF2001
CTIACK `EQU 0FFFF2002
CTIEND `EQU 0FFFF2003
`ORG 0
LOADL R7, 10000 ;inicijalizacija stoga
LOADL R0, %D 50000 ;vremenska konstanta
STORE R0, (CTLR) ;ucitaj konstantu u LR
LOADL R0, %B 11 ;brojilo broji i postavlja prekid
STORE R0, (CTCR) ;slanje kontrolne rijeci
JR MAIN
`ORG 6
`DW 100 ;adresa prekidnog programa
MAIN WRST %B 10010000 ;GIE=1, EINT=1
CLEAR R1 ;broj okretaja
LOOP LOADcc R0, (MOTORSR) ;da li smo spremni
JR_Z LOOP ;cekaj u petlji
INC R1 ;povecaj brojac
STORE R0, (MOTORSR) ;obrisi spremnost
JR LOOP
END LOADL R0, 1 ;vrijednost za alarm
STORE R0, (ALARM) ;ukljuci alarm
HALT
`ORG 50
ALARM `DS 1
;****************************************
;* Potprogram za provjeru brzine vrtnje *
;****************************************
`ORG 100
STORE R0, (CTIACK) ;potvrdi prihvat prekida
PUSH R0 ;pospremi kontekst
RDST R0
PUSH R0
CMP %D 50, R1 ;provjeri koliko puta se motor okrenuo
JR_N END ;dosegli smo kritican broj okretaja - ALARM
CLEAR R1 ;jos nije kriticno, obrisi R1 i broji ponovo
POP R0 ;obnovi kontekst
WRST R0
POP R0
STORE R0, (CTIEND) ;oznaci kraj obrade prekida
RETI
`END