We have Three Timers in PIC16F877A , and here we have a look to how to setup the TIMER0 in PIC16F877A using HiTech C programm
• To set up the timer, one must first disable interrupts so that an interrupt doesn’t occur when the timer expires.
• Then, enable the timer and assign the prescaler to the timer.
• Establish the prescaler value, and finally, load the timer register.
Whenever the timer expires, the T0IF bit in the INTCON register will be set.
• We must clear this bit, reload the timer register, and then execute the code that is to be done at this time.
In code, the setup portion might look something like:
########################## IN ASSEMBLY PROGRAM ###########################
banksel INTCON
bcf INTCON,T0IE ; Mask timer interrupt
banksel OPTION_REG
bcf OPTION_REG,T0CS ; Enable timer
bcf OPTION_REG,PSA ; Prescaler to timer
bcf OPTION_REG,PS2 ; \
bsf OPTION_REG,PS1 ; >- 1:16 prescale
bsf OPTION_REG,PS0 ; /
movlw D’100’ ; Timer will count
movwf TMR0 ; 156 (256-100) counts
######################## IN HITECH C PROGRAM #######################################
OPTION_REG= 0x0F;
TMR0=0x0F;
while(TMR0IF=0);
TMR0IF=0;
##################################################
• Clearly, the individual bits in the option register could all be set with a single store.
• If we didn’t care about the RB0 interrupt, the weak pullups, or the transition of RA4, then instead of five bit manipulations we could have said:
• movlw B’10000011’ ; Set up prescaler and
• movwf OPTION_REG ; timer
The execution loop might look something like:
main:
btfss INTCON,T0IF ; Did timer overflow?
goto main ; No, hang around some more
movlw D’100’ ; Timer will count
movwf TMR0 ; 156 (256-100) counts
bcf INTCON,T0IF ; reset overflow flag
call DoCode ; Execute main code
goto main ; Go back and wait
Post a Comment