title "MiniPOV" LIST P=16F630, F=INHX8M #include __CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _MCLRE_OFF & _WDT_OFF XTAL EQU 4000000 ; internal crystal @ 4MHz IMAGESIZE EQU 0x10 ; backup spots in SRAM for registers during interrupt handling w_bak equ 0x20 status_bak equ 0x21 fsr_bak equ 0x22 counter equ 0x23 line equ 0x24 pixout equ 0x25 ORG 0x0 goto Main ORG 0x4 ; interrupt handler ; save status, w, & fsr movwf w_bak swapf STATUS, W clrf STATUS movwf status_bak movfw FSR movwf fsr_bak int_2 btfss PIR1, TMR1IF ; check if timer 1 overflowed goto End_IntHandle ; if not, finish up interrupt handling Timer1 bcf PIR1, TMR1IF ; clear timer1 interrupt bit movfw counter call EC; look up the value in the character map movwf line clrf pixout btfsc line, 0 bsf pixout, 3 btfsc line, 1 bsf pixout, 4 btfsc line, 2 bsf pixout, 5 btfsc line, 3 bsf pixout, 2 btfsc line, 4 bsf pixout, 1 btfsc line, 5 bsf pixout, 0 movfw pixout movwf PORTC ; the pixels are in w clrf pixout btfsc line, 6 bsf pixout, 2 btfsc line, 7 bsf pixout, 5 movfw pixout movwf PORTA incf counter, 1 movlw IMAGESIZE subwf counter, 0 btfsc STATUS, Z ; if counter == 10 clrf counter ; counter = 0 movlw 0xAA movwf TMR1L movlw 0xF0 movwf TMR1H Timer1_end End_IntHandle movfw fsr_bak ; restore all the backed up registers movwf FSR swapf status_bak, w movwf STATUS swapf w_bak, 1 swapf w_bak, W retfie ; return from interrupt Main CLRF PORTA ; drop all the port A lines low MOVLW 0x1 ; set_tris_a(0b000001) BSF 0x03,RP0 MOVWF TRISA BCF 0x03,RP0 CLRF PORTC BSF 0x03,RP0 CLRF TRISC ; Port C is all outputs! BCF 0x03,RP0 ; initialize port c with something :P movlw 0xA0 movwf PORTC clrf counter ; enable global interrupts BSF INTCON,GIE ; enable peripheral interrupts BSF INTCON,PEIE ; enable TIMER1 (16bit timer) bcf PIR1, TMR1IF ; clear timer1 interrupt bit first bsf T1CON, TMR1ON ; turn on the timer BSF 0x03,RP0 bsf PIE1, TMR1IE ; turn on the interrupt BCF 0x03,RP0 ; set Timer1 to /8 prescale movlw 0xAA movwf TMR1L movlw 0xFF movwf TMR1H MainLoop goto MainLoop HEART addwf PCL retlw B'00000000'; retlw B'00000000'; retlw B'11111111'; retlw B'10000001'; retlw B'10000001'; retlw B'10000001'; retlw B'11111111'; retlw B'00000000'; retlw B'00000000'; EC addwf PCL retlw B'00000000'; retlw B'11111111'; retlw B'10001001'; retlw B'10001001'; retlw B'10000001'; retlw B'00000000'; retlw B'00000000'; retlw B'00111100'; retlw B'01000010'; retlw B'10000001'; retlw B'10000001'; retlw B'01000010'; retlw B'00000000'; retlw B'00000000'; retlw B'00000000'; retlw B'00000000'; ;.db B'00000000'; end