Been trying to get a timer to fire off on my 16F870 for a while now... I tried TMR0 since I had experience setting it on from my 16F84a. Here are the steps I take: Set up TMR0 configuration stuff, prescalar, etc. (watchdog disabled of course) Enable T0 interrupt Enable Global Interrupts wait for the magic to happen. nothing. is there something I'm missing on the 16F870 to get a timer to go off? My code worked fine on my 16F84 so I just changed it to fit a 870... So I nuked that code, and tried to use TMR1 since it was 16 bit and would be a bit slower to work with. Here's my setup (I saved the code this time! :) *snip* movlw 0x24 ; W <- 0010 0100 movwf T1CON ; set T1CON (PS=4, Internal OSC) clrf TMR1H ; clear timer clrf TMR1L ; clear timer BANK1 ; bank1 macro bsf PIE1,TMR1IE ; enable TIMER1 interrupt BANK0 bsf INTCON,GIE ; enable global interrupts *snip* org 4 ISR movwf W_TEMP ; Copy W to TEMP register swapf STATUS,w ; Swap status to be saved into W clrf STATUS ; bank 0, regardless of current bank, Clears IRP,RP1,RP0 movwf STATUS_TEMP ; Save status to bank zero STATUS_TEMP register movf PCLATH,w ; Only required if using pages 1, 2 and/or 3 movwf PCLATH_TEMP ; Save PCLATH into W clrf PCLATH ; Page zero, regardless of current page incf EIGHTTEEN,f ; counter++ movlw 18 subwf EIGHTTEEN,w btfss STATUS,C ; if EIGHTTEEN < 18 goto ISR_DONE ; do nothing incf MINUTES ; otherwise do this ISR_DONE movf PCLATH_TEMP,w ; Restore PCLATH movwf PCLATH ; Move W into PCLATH swapf STATUS_TEMP,w ; Swap STATUS_TEMP register into W movwf STATUS ; Move W into STATUS register swapf W_TEMP,f ; Swap W_TEMP swapf W_TEMP,w ; Swap W_TEMP into W bcf PIR1,TMR1IF ; handle TMR1 flag retfie *snip* and nothing happens, MINUTES never gets incremented, nor does TMR1H/L as I've outputted them as well... Any thoughts? This is confusing me as this should be totally simple! All hail PICLIST :) Thanks... -- Nick Veys -- http://www.piclist.com#nomail Going offline? Don't AutoReply us! email listserv@mitvma.mit.edu with SET PICList DIGEST in the body