Nombre: -Csar Gonzalo Viracocha Garca -Roberto Duran Fecha: Paralelo: CET2
Tema: Timers.
LABORATORIO DE MICROPROCESADORES
INFORME #10
TITULO: TIMERS
OBJETIVO: Utilizar el TMR0 del PIC 16F870 programado con lenguaje Assembly, para medir intervalos de tiempo que deben durar ciertos eventos que se requieren sean producidos por el microcontrolador.
MARCO TERICO: LOS PIC16F87X Forman una subfamilia de microcontroladores PIC de gama media de 8 bits, fabricados por Microchip Technology Inc.. Cuentan con memoria de programa de tipo EEPROM Flash mejorada, lo que permite programarlos fcilmente usando un dispositivo programador de PIC. Esta caracterstica facilita sustancialmente el diseo de proyectos, minimizando el tiempo empleado en programar los microcontroladores (C). Esta subfamilia consta de los siguientes modelos que varan de acuerdo a prestaciones, cantidad de terminales y encapsulados:
TRABAJO PRCTICO
CONTADOR
Presente el circuito elaborado en el simulador PROTEUS.
Presente los archivos xx.C y xx.HEX generados en el proceso de programacin. ARCHIVO .HEX :020000040000FA :020000000528D1 :06000A008316383081006E :0E0010000030860083128101010886000C2852 :02400E00F13F80 :00000001FF
ARCHIVO .ASM LIST P=16F870 ;directiva que define el procesador #INCLUDE <P16F870.INC> ;definicin de variables especficas del procesador
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC ;Configura el funcionamiento; del microcontrolador
ORG 0x0 ;vector de reset del procesador GOTO INICIO ORG 0X5
INICIO BSF STATUS,RP0 ; vamos al banco 1 de memoria MOVLW 0X38 ;se asigna el prescalrer al WDT y se selecciona ;RA4 como entrada de reloj externo MOVWF OPTION_REG ;se configura el Registro OPTION MOVLW 0X0 MOVWF TRISB ;se configura el prtico B como salida de datos BCF STATUS,RP0 ;se regresa al banco 0 de memoria CLRF TMR0 ;se encera el TMR0 OTRO MOVF TMR0, 0 ;el contenido del TMR0 se pone en W MOVWF PORTB ;el contenido de W se enva al prtico B GOTO OTRO
END ;final del programa
ARCHIVO.LST MPASM 5.43 CONTADOR.ASM 11-26-2013 0:01:49 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE Warning[205]: Found directive in column 1. (LIST) 00001 LIST P=16F870 ;directiva que define el procesador 00002 #INCLUDE <P16F870.INC> ;definicin de variables especficas del procesa dor 00001 LIST 00002 00003 ;======================================================= =================== 00004 ; MPASM PIC16F870 processor include 00005 ; 00006 ; (c) Copyright 1999-2011 Microchip Technology, All rights reserved 00007 ;======================================================= =================== 00008 00422 LIST 00003 Warning[205]: Found directive in column 1. (__CONFIG) 2007 3FF1 00004 __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC ;Configura el funcionamiento; del microcontrolador 00005
0000 00006 ORG 0x0 ;vector de reset del procesador 0000 2805 00007 GOTO INICIO 00008 0005 00009 ORG 0X5 00010 0005 1683 00011 INICIO BSF STATUS,RP0 ;vamos al banco 1 de memoria 0006 3038 00012 MOVLW 0X38 ;se asigna el prescales al WDT y se selecciona 00013 ;RA4 como entrada de reloj externo Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 0081 00014 MOVWF OPTION_REG ;se configura el Registro OPTION 00015 0008 3000 00016 MOVLW 0X0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0009 0086 00017 MOVWF TRISB ;se configura el prtico B como salida de datos 000A 1283 00018 BCF STATUS,RP0 ;se regresa al banco 0 de memoria 000B 0181 00019 CLRF TMR0 ;se encera el TMR0 000C 0801 00020 OTRO MOVF TMR0,0 ;el contenido del TMR0 se pone en W 00021 000D 0086 00022 MOVWF PORTB ;el contenido de W se enva al prtico B 000E 280C 00023 GOTO OTRO 00024 00025 END ;final del programa
MPASM 5.43 CONTADOR.ASM 11-26-2013 0:01:49 PAGE 2 SYMBOL TABLE LABEL VALUE
Presente el circuito elaborado en el simulador PROTEUS.
ARCHIVO .HEX :020000040000FA :020000000528D1 :06000A0087018316C730D8 :1000100081000030870083120C3087001E201E20D4 :100020001E201E200A3087001E20213087001E203F :100030001E201E20113087001E200C280830A00032 :10004000A130810081090B110B1D2428A00B23284E :020050000800A6 :02400E00F13F80 :00000001FF ARCHIVO .ASM LIST P=16F870 ;directiva que define el procesador #INCLUDE <P16F870.INC> ;definicin de variables especficas del procesador __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC ;Configura el funcionamiento; del micro controlador
REGIS20 EQU 0X20 ORG 0x0 ;vector de reset del procesador GOTO INICIO ORG 0X5
INICIO CLRF PORTC ;se encera el puerto C BSF STATUS, RP0 ;se cambia al banco 1 de la RAM MOVLW b'11000111' ;se asigna el divisor de frecuencia al TIMER0 MOVWF OPTION_REG ;se usa una frecuencia f/256 del oscilador interno MOVLW 0X0 ;se carga W con el nmero 00H MOVWF TRISC ;se configura el Prtico C como salida de datos BCF STATUS, RP0 ;se regresa al banco 0 de la RAM OTRO MOVLW 0X0C ;se pone en W el cdigo para encender la luz verde en sentido N - S MOVWF PORTC ; se enciende la luz verde en sentido N - S CALL RETARDO CALL RETARDO CALL RETARDO CALL RETARDO MOVLW 0X0A ; se pone en W el cdigo para encender la luz amarilla en sentido N-S MOVWF PORTC ;se enciende la luz amarilla en sentido N-S CALL RETARDO MOVLW 0X21 ;se pone en W el cdigo para encender la luz verde en sentido E-O MOVWF PORTC ;se enciende la luz verde en sentido E-O CALL RETARDO CALL RETARDO CALL RETARDO MOVLW 0X11 ;se pone en W el cdigo para encender la luz amarilla en sentido E-O MOVWF PORTC ;se enciende la luz amarilla en sentido E-O CALL RETARDO GOTO OTRO ;continua el semforo en su trabajo rutinario
RETARDO MOVLW d'8' ;se carga W con 8 MOVWF REGIS20 ;se lleva el contenido de W a REGIS20 MOVLW d'161' ;carga W con 161 MOVWF TMR0 ;pasa el contenido de W al registro TMR0 COMF TMR0 ;pone en TMR0 el complemento de TMR0
RETARD BCF INTCON,T0IF ;encera el bit T0IF de sobreflujo del registro INTCON RETARD1 BTFSS INTCON,T0IF ;chequea si aparece el bit de sobreflujo GOTO RETARD1 ;mantiene la espera por el bit de sobreflujo DECFSZ REGIS20,1 ;decrementa el contenido de REGIS20 GOTO RETARD ;va a contar una nueva vuelta RETURN ;termina la subrutina RETARDO END
ARCHIVO.LST
MPASM 5.43 SEMAFORO.ASM 11-28-2013 9:32:48 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT VALUE
Warning[205]: Found directive in column 1. (LIST) 00001 LIST P=16F870 ;directiva que define el procesador 00002 #INCLUDE <P16F870.INC> ;definicin de variables especficas del procesador 00001 LIST 00002 00003 ;========================================================= ================= 00004 ; MPASM PIC16F870 processor include 00005 ; 00006 ; (c) Copyright 1999-2011 Microchip Technology, All rights reserved 00007 ;========================================================= ================= 00008 00422 LIST Warning[205]: Found directive in column 1. (__CONFIG) 2007 3FF1 00003 __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC ;Configura el funcionamiento; del micro controla dor 00004 00000020 00005 REGIS20 EQU 0X20 00006 00007
0000 00008 ORG 0x0 ;vector de reset del procesador 0000 2805 00009 GOTO INICIO 00010 0005 00011 ORG 0X5 00012 0005 0187 00013 INICIO CLRF PORTC ;se encera el puerto C 0006 1683 00014 BSF STATUS,RP0 ;se cambia al banco 1 de la RAM 0007 30C7 00015 MOVLW b'11000111' ;se asigna el divisor de frecuencia al TIMER0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0008 0081 00016 MOVWF OPTION_REG ;se usa una frecuencia f/256 del oscilador interno 0009 3000 00017 MOVLW 0X0 ;se carga W con el nmero 00H Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000A 0087 00018 MOVWF TRISC ;se configura el Portico C como salida de datos 000B 1283 00019 BCF STATUS,RP0 ;se regresa al banco 0 de la RAM 000C 300C 00020 OTRO MOVLW 0X0C ;se pone en W el cdigo para encender la luz verde en sentido N - S 000D 0087 00021 MOVWF PORTC ;se enciende la luz verde en sentido N - S 000E 201E 00022 CALL RETARDO 000F 201E 00023 CALL RETARDO 0010 201E 00024 CALL RETARDO 0011 201E 00025 CALL RETARDO 0012 300A 00026 MOVLW 0X0A ;se pone en W el cdigo para encender la luz amarilla en sentid o N-S 0013 0087 00027 MOVWF PORTC ;se enciende la luz amarilla en sentido N-S 0014 201E 00028 CALL RETARDO 0015 3021 00029 MOVLW 0X21 ;se pone en W el cdigo para encender la luz verde en sentido E- O 0016 0087 00030 MOVWF PORTC ;se enciende la luz verde en sentido E-O 0017 201E 00031 CALL RETARDO 0018 201E 00032 CALL RETARDO 0019 201E 00033 CALL RETARDO 001A 3011 00034 MOVLW 0X11 ;se pone en W el cdigo para encender la luz amarilla en sentido E-O 001B 0087 00035 MOVWF PORTC ;se enciende la luz amarilla en sentido E-O MPASM 5.43 SEMAFORO.ASM 11-28-2013 9:32:48 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT VALUE
001C 201E 00036 CALL RETARDO 001D 280C 00037 GOTO OTRO ;continua el semforo en su trabajo rutinario 00038 001E 3008 00039 RETARDO MOVLW d'8' ;se carga W con 8 001F 00A0 00040 MOVWF REGIS20 ;se lleva el contenido de W a REGIS20 0020 30A1 00041 MOVLW d'161' ;carga W con 161 0021 0081 00042 MOVWF TMR0 ;pasa el contenido de W al registro TMR0 Message[305]: Using default destination of 1 (file). 0022 0981 00043 COMF TMR0 ;pone en TMR0 el complemento de TMR0 00044 0023 110B 00045 RETARD BCF INTCON,T0IF ;encera el bit T0IF de sobreflujo del registro INTCON 0024 1D0B 00046 RETARD1 BTFSS INTCON,T0IF ;chequea si aparece el bit de sobreflujo 0025 2824 00047 GOTO RETARD1 ;mantiene la espera por el bit de sobreflujo 0026 0BA0 00048 DECFSZ REGIS20,1 ;decrementa el contenido de REGIS20 0027 2823 00049 GOTO RETARD ;va a contar una nueva vuelta 0028 0008 00050 RETURN ;termina la subrutina RETARDO 00051 END
I. EL bit TOCS es muy importante este se encuentra en el OPTION_REG que sirve para seleccionar los pulsos internos (0) Fosc/4, y para que se den pulsos externos (1) por medio del pin RA4/TOCKI.
II. El registro INTCON tiene la funcin principal de controlar las interrupciones. Est ubicado en la localidad OBH de la RAM; El TOIF se encuentra en el BIT2 que es la bandera de TMR0 que indica desbordamiento.
III. En el pin 6 se encuentra el RA4/TOCKI que sirve para ingresar una frecuencia externa para el temporizador TMR0.
IV. A menudo al utilizar un microcontrolador nos encontramos con la necesidad de contar generar eventos cada cierto tiempo, por lo que el microcontrolador tiene circuitos internos para ese uso.
V. PS2, PS1, PS0 sirven como divisor de frecuencia, y as se den las funciones de retardo.
VI. Sabemos que, la bandera T0IF del registro I NTCON (bit2) que se pone a 1 siempre que hay un desborde en el Registro TMR0 es decir cuando pasa de 255 a 0. Esta bandera puede servir nuestros intereses ya que una vez producido el desborde el bit T0IF permanece en "1" y es necesario que lo pongamos a "0".
CONCLUSIONES DE ROBERTO DURN: I. El timer0 funciona como un temporizador o contador, segn la procedencia de la seal que recibe.
II. El Timer0, usado como temporizador, puede contar perodos de tiempo exactos, acumulndolos en un registro auxiliar, cada vez que ocurra un pulso de entrada podemos consultar el registro auxiliar y comparar el incremento acumulado desde el anterior pulso. Conocidos los perodos, podemos calcular el tiempo transcurrido.
III. Algo muy importante para tomar en cuenta es que el TMR0 cuenta exclusivamente de forma ascendente, nunca descendente. Si el TMR0 se carga con un valor, este comenzar a contar desde el valor cargado hasta que se desborda(cuando pasa a 00H)
IV. Para hacer una temporizacin con el registro TMR0,el tiempo empleado en una temporizacin se puede calcular a partir de un ciclo de instruccin, es decir, si usamos un XT de 4 MHz, 1 instruccin por cada microsegundo, necesitaremos el valor del divisor de frecuencia (el que se selecciona con los bit's PS2, PS1 y PS0) y tambin el complemento del valor cargado en TMR0 (es decir 255 - TMR0),
V. Un punto importante a recordar es que, debemos cargar el TMR0 con el valor apropiado para conseguir el retardo deseado.
Bibliografa: PDF de Laboratorio de micros; cuaderno de microprocesadores.