;Programmer: David Hanchera ;Assignment: Project-Microwave Oven Controller ;Date : 3-3-04 ORG $FFFE ;Reset Interrupt Vector FDB RESET ORG $FFDE ;Timer Overflow Interrupt Vector FDB TOI_ISR ORG $FFF4 FDB XIRQ_ISR ;External Interrupt Vector(Active Low) ORG $FFDE FDB ADC_ISR ORG $FFF2 FDB IRQ_ISR PORTA EQU $0000 DDRA EQU $0002 PAMSK EQU $FF PORTH EQU $0024 DDRH EQU $0025 PHMSK EQU $FF TSRC EQU $0086 TMSK2 EQU $8D HPRIO EQU $001F TFLG2 EQU $008F ATDCTL2 EQU $0062 ATDCTL4 EQU $0064 ATDCTL5 EQU $0065 ATDSTAT1 EQU $0066 ATDSTAT2 EQU $0067 ADR0H EQU $0070 ;Need Keypad Port Setup ORG $0800 COUNTER FDB $00 ;TOI counts ORG $0802 SECONDS FCB $00 ORG $0803 MINUTES FCB $00 ORG $0804 HOURS FCB $00 ORG $0805 TEMP FCB $00 ORG $0806 ;RAM... later $F000(eeprom) RESET CLI ;Enable Maskable Interrupts CLR COUNTER BSR INI_PORTS ;LED port,LCD BSR INI_ADC BSR INI_TIM ;BSR ENTERTIME ;BSR DISPLAYTIME WAIT_INPUT ;InfiniteLoop ;Test for Keypad input ;Display Input, If any BSR COOK BRA WAIT_INPUT ;---------------------------------------------------------------------- INI_TIM LDS #$0A00 ;Initialize stack starting address MOVB #$80,TSRC ;Enable Timer Module MOVB #$B0,TMSK2 ;Enable TOI MOVB #$DE,HPRIO ;Elevate TOI Priority ;---------------------------------------------------------------------- INI_PORTS MOVB #PAMSK,DDRA ;A0-1 Leds, A2-4 LCD control MOVB #PHMSK,DDRH ;LCD Data RTS ;---------------------------------------------------------------------- INI_ADC MOVB #$C3,ATDCTL2 ;PU ADC, Enable ADC Interrupt, Clr flag on read MOVB #$7F,ATDCTL4 ;264us/sample (if PCLK=8MHz) MOVB #$20,ATDCTL5 ;Start single ATD conversion on Ch0 LDAA #$C8 WAIT DBNE A,WAIT ;Loop to wait 100us, for ADC boot up RTS ;---------------------------------------------------------------------- COOK BSR INI_ADC WAIT_END ;Wait 1 sec, then dec cook seconds ;test temp,branch to overtemp if too hot ;Branch if more time to cook,else end MOVB #$00,ATDCTL2 ;Power Down ADC after cooking is complete RTS ;---------------------------------------------------------------------- ILLUMINATE MOVB #$01,PORTA ;Light up LED at PortA0 for $FF cycles LDAA #$FF AGAIN DBNE A,AGAIN CLR PORTA RTS ;---------------------------------------------------------------------- OVERTEMP ;StopMicrowaves ;WARNING! RTS ;---------------------------------------------------------------------- TOI_ISR LDY COUNTER INY STY COUNTER CPY #$033E ;# of Timer Overflows that equals 1 sec BEQ INC_SEC BRA DONE INC_SEC INC SECONDS CLR COUNTER BSR ILLUMINATE DONE MOVB #80,TFLG2 ;Reset Timer overflow flag(TOF) ;Adjust Global Time, test if Minutes needs inc, and if hours needs inc/reset RTI ;---------------------------------------------------------------------- XIRQ_ISR ;Stop Microwaves ;Door Open RTI ;---------------------------------------------------------------------- ADC_ISR MOVB ADR0H,TEMP MOVB #$20,ATDCTL5 ;Start single ATD conversion on Ch0 RTI ;---------------------------------------------------------------------- IRQ_ISR ;External Interrupt from Keypad RTI