; ----------------------------------------------------------------------------- ; Stoppuhr-pBlaze V2 ; Meineke Becher, FH Osnabrück ; ----------------------------------------------------------------------------- COE "target.coe", 8 ; Belegung der Ports ein_ID3 DSIN 1 ; hdrstl DSOUT 2 ; zehntl DSOUT 3 ; einer DSOUT 4 zehner DSOUT 5 ; Initialisierung LOAD s0, 0 ; Hundertstel LOAD s1, 09 ; Zehntel LOAD s2, 09 ; Einer LOAD s3, 09 ; Zehner LOAD s4, 0 ; Hilfsregister ; Hauptprogramm ; ORG $0 main: IN s5, ein_ID3 ; Eingabe ueber PortID = 1 LOAD s6, s5 SUB s6, 1 ;sw(1) ? 00000001 CALL Z, aktiv ;sw(1) = 1 LOAD s6, s5 SUB s6, 1 ;sw(1) ? 00000001 CALL NZ, passiv ;sw(1) = 0 OUT s0, hdrstl OUT s1, zehntl OUT s2, einer OUT s3, zehner JUMP main stufe1: ADD s1, $1 ;ADD s4, $1 LOAD s0, 0 LOAD s4, s1 XOR s4, $0A CALL Z, stufe2 RET stufe2: ADD s2, $1 ;ADD s4, $1 LOAD s1, 0 LOAD s4, s2 XOR s4, $0A CALL Z, stufe3 RET stufe3: ADD s3, $1 ;ADD s4, $1 LOAD s2, 0 LOAD s4, s3 XOR s4, $0A CALL Z, Zehnerrueck RET Zehnerrueck: LOAD s3, 0 RET ; Subroutine aktiv aktiv: ; Zeile MUSS freibleiben EINT ; Interrupt ein RET ; Subroutine passiv passiv: ; Zeile MUSS freibleiben DINT ; Interrupt aus RET ; Interrupt Routine ORG $D0 int_routine: ADD s0, $1 ;Inkrementiere hdrstl LOAD s4, s0 ;Hilfsregister mit s0 laden XOR s4, $0A ;Wert von s0 überpruefen CALL Z, stufe1 ; =0 dann stufe 2(Zehntelsekunden) RETI ENABLE ; interrupt vector ORG $FF JUMP int_routine