********************************************* ** Preliminary Design-SPIRIT Timer ** ** Mike Koontz ** Steven Aumack ** ** File: penab2.asm ** ** Date: 3/27/01 ** ** MEMORY MAP: 0000 TO 01FF ** ** USED MEMORY: $B600 - $B693 ** $B6F5 - $B74F ** FREE MEMORY: $B694 - $B6F4 96 BYTES ** $B750 - $B800 176 BYTES ** ********************************************* ********************************************* ** VARIABLES AND TIME ON/OFF ********************************************* ORG $0000 TIME RMB 2 ;VARIABLE THAT COUNTS # OF TIMES THE TIMER OVERFLOWS EVENT RMB 1 ;INDEX VARIABLE USED FOR 16-BIT EVENT TIME COUNT RMB 1 ;INDEX VARIABLE USED FOR WHICH EVENT OCCURS DDRC EQU $1007 ;DDRC ADDRESS DDRD EQU $1009 :DDRD ADDRESS PORTB EQU $1004 ;PORTB ADDRESS PORTC EQU $1003 ;PORTC ADDRESS PORTD EQU $1008 ;PORTD ADDRESS TMSK2 EQU $1024 ;TMSK2 ADDRESS TFLG2 EQU $1025 :TFLG2 ADDRESS OPTION EQU $1039 BPROT EQU $1035 COPRST EQU $103A ********************************************* ** SET-UP INTERRUPTS ********************************************* ORG $B600 ;START OF EEPROM INIT LDAB #$00 STAB TMSK2 ;SET TMSK2 TO INTERRUPT EVERY 32.77 ms LDAA #$93 ;BUFFALO INITIALIZATION WHEN EEPROM RUNS STAA OPTION CLRA STAA BPROT LDS #$0047 ;END OF BUFFALO INITIALIZATION CODE LDAA #%01111111 STAA DDRC ;MAKE PC6 - PC0 OUTPUT PINS CLR PORTC LDAA #$0F STAA DDRD ;MAKE PD3 - PD0 OUTPUT PINS CLR PORTD LDX #FAIL STX $00FB T0LOOP LDAA #$55 STAA COPRST LDAA #$AA STAA COPRST LDAA PORTC ;START OF T0 LOOP ANDA #%10000000 CMPA #$80 ;CHECK TO SEE IF SIGNAL RECEIVED ON PC7 BNE T0LOOP ;POLLING LOOP ENDS WHEN T0 TRIGGERS LDAA #$04 ;00000100 STAA PORTD ;OUTPUT LINE TO START BACKUP BATTERY SUPPLY LDAA #$00 STAA EVENT ;CLEAR EVENT STAA COUNT ;CLEAR COUNT LDX #$0000 STX TIME ;CLEAR TIME LDAA #%10000011 STAA TMSK2 SET TMSK2 REGISTER TO 8-3 IN BINARY LDX #$B6F5 ;ADDRESS OF INTERRUPT SUB-ROUTINE STX $00D1 ;PSUEDO IVT - TIMER OVERFLOW VECTOR CLI ;ENABLE INTERRUPTS ********************************************* ** TIME ON/OFF PORTB ENABLE ********************************************* LOOP LDAA #$55 STAA COPRST LDAA #$AA STAA COPRST LDY #$B700 ;LOAD VALUE OF 'TIME OF EVENT' FROM LOOKUP TABLE LDAB EVENT ABY LDX 0,Y ;LOAD TIME OF EVENT CPX TIME ;CHECK TIME OF EVENT WITH CURRENT TIME BLE ACTION ;IF TIME OF EVENT IS LESS THAN OR EQUAL TO CURRENT TIME BRANCH TO 'ACTION' BRA LOOP ACTION LDY #$B728 ;LOAD VALUE OF 'BIT MASK' FROM LOOK-UP TABLE LDAB COUNT ABY LDAA 0,Y ;LOAD 'BIT MASK' INTO ACCUMULATOR A LDY #$B73C ;LOAD 'TYPE' OF EVENT (PULSE=FF OR ENABLE=00) ABY LDAB 0,Y BEQ ENABLE ;CHECK TO SEE WHETHER EVENT TYPE IS PULSE OR ENABLE PULSE STAA PORTC ;START 1 SEC. PULSE EVENT ON PORTC LDAB #20 ;DELAY LOOP STARTS HERE. LOAD 20 INTO ACCUMULATOR B OUTER1 EQU * ;THIS IS THE START OF THE OUTER LOOP (REPEAT 20 TIMES) LDX #$411A ;LOAD THIS VALUE INTO X-REGISTER (CORESPONDS TO 50ms) DELAY1 DEX ;DECREMENT X-REGISTER BNE DELAY1 ;BRANCHES IF ZERO CONDITION BIT IS NOT SET DECB ;DECREMENT ACCUMULATOR B BNE OUTER1 ;DELAY ENDS HERE LDAA #$00 STAA PORTC ;END 1 SEC. PULSE LOOP BRA TOTAL ENABLE STAA PORTB ;START ENABLE EVENT TOTAL INC COUNT ;INCREMENT NUMBER OF EVENT INC EVENT INC EVENT ;INCREMENT EVENT VARIABLE TWICE LDAA #$14 ;20 TOTAL EVENTS CMPA COUNT ;CHECK TO SEE IF ALL EVENTS ARE COMPLETE BGT LOOP EXIT SWI ******************************************** ** WATCHDOG (COP) AND CLOCK ** MONITOR FAILURE ROUTINE ******************************************** ORG $B6C0 FAIL LDAA #%00001000 STAA PORTD SWI ********************************************* ** INTERRUPT SUB-ROUTIME ********************************************* ORG $B6F5 LDX TIME ;LOAD CURRENT TIME INX ;INCREMENT CURRENT TIME STX TIME LDAA #%10000000 STAA TFLG2 ;CLEAR TFLG2 REGISTER RTI ********************************************* ** TIME ON/OFF LOOK-UP TABLE ********************************************* ORG $B700 TIME1 FDB $0001 ;0 TIME2 FDB $002E ;1.5 TIME3 FDB $005C ;3 TIME4 FDB $0089 ;4.5 TIME5 FDB $00B7 ;6 TIME6 FDB $00E5 ;7.5 TIME7 FDB $0113 ;9 TIME8 FDB $0140 ;10.5 TIME9 FDB $016E ;12 TIME10 FDB $019C ;13.5 TIME11 FDB $01CA ;15 TIME12 FDB $0216 ;17.5 TIME13 FDB $0244 ;19 TIME14 FDB $0272 ;20.5 TIME15 FDB $029F ;22 TIME16 FDB $02CD ;23.5 PULSE17 FDB $02FB ;25 PULSE18 FDB $0356 ;28 PULSE19 FDB $03B2 ;31 PULSE20 FDB $040E ;34 ********************************************* ** EVENT LOOK-UP TABLE ********************************************* ORG $B728 EVENT1 FCB $80 ;10000000 enable outputs EVENT2 FCB $C0 ;11000000 EVENT3 FCB $E0 ;11100000 EVENT4 FCB $F0 ;11110000 EVENT5 FCB $F8 ;11111000 EVENT6 FCB $FC ;11111100 EVENT7 FCB $FE ;11111110 EVENT8 FCB $FF ;11111111 EVENT9 FCB $FE ;11111110 EVENT10 FCB $FC ;11111100 EVENT11 FCB $F8 ;11111000 EVENT12 FCB $F0 ;11110000 EVENT13 FCB $E0 ;11100000 EVENT14 FCB $C0 ;11000000 EVENT15 FCB $80 ;10000000 EVENT16 FCB $00 ;00000000 PVENT17 FCB $08 ;00001000 ;pulse outputs PVENT18 FCB $04 ;00000100 PVENT19 FCB $02 ;00000010 PVENT20 FCB $01 ;00000001 ********************************************* ** PULSE/ENABLE TYPE TABLE ********************************************* ORG $B73C ETYPE1 FCB $00 ETYPE2 FCB $00 ETYPE3 FCB $00 ETYPE4 FCB $00 ETYPE5 FCB $00 ETYPE6 FCB $00 ETYPE7 FCB $00 ETYPE8 FCB $00 ETYPE9 FCB $00 ETYPE10 FCB $00 ETYPE11 FCB $00 ETYPE12 FCB $00 ETYPE13 FCB $00 ETYPE14 FCB $00 ETYPE15 FCB $00 ETYPE16 FCB $00 PTYPE17 FCB $FF PTYPE18 FCB $FF PTYPE19 FCB $FF PTYPE20 FCB $FF