Está en la página 1de 5

USO TIMER1 como un contador La operacin de Timer1 como contador es similar a la operacin de TIMER0.

Sin embargo, el Timer1 es un temporizador de 16 bits, puede ser manipulado y cuenta a mayor velocidad. Tambin se puede control con rutinas TimerLoop y Blinker Loop si el programa est diseado para hacerlo. Sin embargo, la puesta en marcha de Timer1 es ms complicada debido a las opciones ms numerosas disponibles. Las diferencias entre el uso de los dos temporizadores tienen que ver con la configuracin del control de registros. Timer1 es controlado por seis registros, en comparacin con tres del TIMER0. Los registros del Timer1son los siguientes: INTCON interrupcin registro de control PIR1 registro perifrica de interrupcin 1 PIE1 Habilita el registro de interrupcin 1 TMR1L byte bajo del contador de registro TMR1H byte alto del registro del temporizador T1CON Timer1 control de la interrupcin

EL Modo de contador se selecciona mediante el establecimiento del bit TMR1CS. En este modo, los incrementos del contador de tiempo en cada flanco ascendente se establecen en la entrada de reloj del pin RC1/T1OSI/CCP2 , cuando el bit T1OSCEN se establece, o en el pin RC0/T1OSO/T1CKI, cuando el T1OSCEN se borra. Tres de los pines en el 16F877A se puede utilizar como insumos para el modulo TIMER1 como contador: 1. Pin PORTA.4, la entrada de reloj externo (pin 6 en el PIC) 2. Pin PORTC.0, seleccionados mediante el establecimiento de TIOSCEN = 1 3. Pin PORTC.1, seleccionados mediante el establecimiento de TIOSCEN = 0 EL Timer1 se habilita estableciendo T1CON.0 = 1. Se detiene cuando este Bit est apagado o con discapacidad. El reloj que usar Timer1 es seleccionado por T1CON.1. El reloj externo seleccionados mediante el establecimiento de este a 1. La entrada para este reloj externo debe estar en PORTA.4. En resumen, ocho bits del registro de control del Timer 1 (T1CON), proporciona las siguientes funciones : Bit 7: No se utiliza y que se lea como un 0 Bit 6: No se utiliza y que se lea como un 0

Bit Bit Bit Bit Bit Bit

5: 4: 3: 2: 1: 0:

Entrada pre-escalador Entrada de pre-escalador oscilador permite Timer1 sincronizacin de reloj externo Timer1 Timer1 seleccin de reloj Timer1 permite

Si las interrupciones no se van a utilizar todos los dems registros se puede ignorar y podemos establecer: T1CON a % 00110001 En primer lugar vamos a definir todos los define que vamos a necesitar. Aqu todos los define se incluyen como ejemplo, pero no todos son necesarios. Timer1 como contador. Timer1 cuenta las seales de un codificador del servomotor. DEFINICIONES PARA EL FUNCIONAMIENTO DEL LCD

Las siguientes dos lneas definen el pin que se va a utilizar para la seal de HPWM que controlara la velocidad del motor. DEFINE CCP1 REG PORTC definir la configuracin de HPWM DEFINE CCP1_BIT 2 pin C1 Las siguientes tres lneas definen la lectura de los tres potencimetros en el tablero. Slo el potencimetro primero se utiliza en el programa, pero los otros son definidos de forma que los puede utilizar cuando se modifica el programa. Los potencimetros son para cambiar el tiempo real. Definir los valores de A2D DEFINE ADC_BITS 8; nmero determinado de bits en el resultado DEFINE ADC_CLOCK 3; ajustar fuente de reloj interno (3 = rc) DEFINE ADC_SAMPLEUS 50, el tiempo de muestreo establecidos en Us A continuacin, ponemos ADCON1 para que el MCU lo establezca como modo digital. , Establecer el registro de control analgico a digital ADCON1 =% 00000111; necesarios para el funcionamiento del LCD , creamos las variables que van a necesitar

TMR1 VAR WORD; establecer la variable para el temporizador ADVAL0 VAR BYTE, crear ADVAL para almacenar resultado ADVAL1 VAR BYTE, crear ADVAL para almacenar resultado ADVAL2 VAR BYTE, crear ADVAL para almacenar resultado X VAR WORD; variable de repuesto para la experimentacin Y VAR WORD; variable de repuesto para la experimentacin PAUSA 500 ; pausa para la pantalla LCD para la puesta en marcha LCDOUT $ FE, 1; pantalla clara y ubicacin del cursor , configurar el registro de E / S TRISC =% 11110001; PORTC.0 va a ser la entrada CCP1CON =% 00000101; capturar cada flanco de subida T1CON =% 00000011; no pre-scale/osc / seal externa ; TMR1 en marcha el motor, utilizando un ; codificador para la entrada PORTC.3 = 0; habilita el motor PORTC.2 = 1, establecer el sentido de rotacin A continuacin, vamos a entrar en el cuerpo del programa. El ciclo del programa comienza con la lectura de tres potencimetros a pesar de que est utilizando slo el primero para establecer el poder y por tanto la velocidad del motor. LOOP: ADCIN 0, ADVAL0; lea el canal 0 a ADVAL0 ADCIN 1, ADVAL1; leer el canal 1 a ADVAL1 ADCIN 3, ADVAL2; leer el canal 3 de ADVAL2 Si el ciclo de trabajo del motor es inferior a 20 sobre un total de 255, el motor se mover, as que hacemos u alinea de cdigo para eso y ver el estado en la pantalla LCD. IF ADVAL0>20 THEN ; HPWM 2, ADVAL0, 32000 ; LCDOUT $FE, $C0, "PWM = ",DEC ADVAL0," " ; ELSE ; LCDOUT $FE, $C0, "PWM TOO LOW ",DEC ADVAL0," "; ENDIF Luego leemos los dos registros de contador de tiempo para ver cuntas cuentas pasaron. Sin embargo, si usted tiene una entrada de conteo rpido, es posible que desee agregar esta informacin a la lectura

TMR1H = 0; claro Timer1 alta de 8 bits TMR1L = 0; claro Timer1 baja de 8 bits T1CON.0 = 1; iniciar el temporizador de 16 bits PAUSA 100; captura de 100 m de la entrada ; Frecuencia de reloj T1CON.0 = 0; parada de 16 bits del temporizador TMR1.BYTE0 = TMR1L; lectura baja de 8 bits TMR1.BYTE1 = TMR1H; lectura de alta de 8 bits TMR1 = TMR1 - 11; Correccin de captura SI = TMR1 = 65.525 THEN NOSIGNAL; ver el libro de PBP ; explicacin. LCDOUT $ FE, $ 80, DEC5 TMR1, "COUNTS", la frecuencia ; pantalla PAUSA 10; lento GOTO BUCLE; hacerlo de nuevo ; NOSIGNAL: LCDOUT $ FE, $ 80, "NO SIGNAL"; GOTO BUCLE; END;

codigo para utilizar el timer 1 del pic 16f877A como contador o modulo de captura DEFINE CCP1 REG PORTC DEFINE CCP1_BIT 2 DEFINE ADC_BITS 8 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 ADCON1 = %00000111 TMR1 VAR WORD ADVAL0 VAR BYTE ADVAL1 VAR BYTE ADVAL2 VAR BYTE X VAR WORD Y VAR WORD PAUSE 500

LCDOUT $FE, 1 TRISC = %11110001 CCP1CON = %00000101 T1CON = %00000011 PORTC.3 = 0 PORTC.2 = 1 LOOP: ADCIN 0, ADVAL0 ADCIN 1, ADVAL1 ADCIN 3, ADVAL2 IF ADVAL0>20 THEN HPWM 2, ADVAL0, 32000 LCDOUT $FE, $C0, "PWM = ",DEC ADVAL0," " ELSE LCDOUT $FE, $C0, "PWM TOO LOW ",DEC ADVAL0," " ENDIF TMR1H = 0 TMR1L = 0 T1CON.0 = 1 PAUSE 100 T1CON.0 = 0 TMR1.BYTE0 = TMR1L TMR1.BYTE1 = TMR1H TMR1 = TMR1 - 11 IF TMR1 = 65525 THEN NOSIGNAL LCDOUT $FE, $80, DEC5 TMR1," COUNTS" PAUSE 10 GOTO LOOP NOSIGNAL: LCDOUT $FE, $80, "NO SIGNAL " GOTO LOOP END