Vamos aplicar 1 kHz para controlar externamente o TIMER1 em 16 bits
Para isto vamos trabalhar com o estouro do timer 1 em 16bits (65536 mxima contage m) Queremos que uma sada inverta o seu estado a cada 500ms. Para isto vamos acionar uma entrada com 1000 Hz. Naturalmente, vamos usar o conceito de interrupo e no de loop, pois assim a melhor tcnica. Definimos a saida RB7 como a sada do 500ms ---- #define outT1 LATB7_bit criamos uma interrupo para o timer1 e: testamos o bit sinalizador da interrupo: TMR1IF_bit se verdadeiro resetamos este bit: TMR1IF=0x00; recarregamos o valor do timer 1 para se criar 500 pulsos para o estouro TMR1L = 0X0C; TMR1H = OXFE; Invertemos a sada: outT1=~outT1 note que quando houver novo estouro que a sada ir se inverter novamente e isto lev a 500 pulsos de 1ms = 500ms Na funo principal primeiro habilitamos as interrupes necessrias INTCON = OXC0; Habilita a interrupo global e dos perifricos De forma direta habilitamos no PIE1 (pag 100 do datasheet) a interrupo do TIMER1: TMR1IE_bit=0X01; Vamos no registrador de controle do timer 1 - T1CON e ajustamos cada bit para o que queremos T1CON = 0X83;OB1000 0011 BIT7 RD16 Habilita modo 16 bits BIT6 T1RUN Clock a partir de outra fonte BIT5-4 T1CKPS<1:0> Prescaler 1:1 BIT3 TIOSCEN Oscilador do timer1 desabilitado BIT2 T1SYNC Clock assncrono BIT1 TMR1CS Timer1 incrementa com borda de subida BIT0 TMR1ON Liga a contagem do TIMER1 Na rotina principal precisamos carregar o valor inicial do timer 1 para que cont e 500 pulsos Se o timer1 conta no modo 16 bits 65536 pulsos, ento se tirarmos 65036 ele conta 500 pulsos se cada pulso tem o perodo de 1ms (frequencia externa em 1kHz), ento teremos 500ms Equao do estouro: Timer1_0vf=(contagem mxima - valor inicial) x prescaler do timer1 x perodo de cloc k externo Timer1_0vf=(65536-65036)x1x1xE10-3 Timer1_0vf=500ms Configuramos os ports envolvidos, que no caso somente o PORTB TRISB = 0X7F; O PORTB_RB7 = SADA, os demais como entrada 0B0111 1111 NO ESQUECER DAS FUNES ANALGICAS DO PORTB Para isto atuamos na configurao do ADCON1 ADCON1=0X0F; Configura os pinos do PORTB como pinos digitais