SlideShare a Scribd company logo
1 of 26
Download to read offline
INSTITUTO POLITÉCNICO NACIONAL
CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN
2° EVALUACIÓN
Microprocesadores
MCIC
Hernández Lara Derlis
Aplicación de los periféricos de un microcontrolador, uso del TMR1 y
control de LCD con PIC16F.
Proyecto: Taxímetro
Profesor:
Dr. Alfonso Gutiérrez Aldana
MÉXICO, D.F. JUNIO 2014
Derlis Hernández Lara
2
Conociendo los microcontroladores PIC16F
En este trabajo se describe la práctica realizada para la segunda evaluación de la materia
de microprocesadores. Se vio durante el curso correspondiente a este periodo, como
configurar y utilizar algunos de los periféricos más usados de un PIC, como los son el
módulo CCP (Compare/Capture/PWM), control de LCD, programación serial en
circuito (ICSP) y el puerto de comunicación serial (SSP).
Introducción:
Se está trabajando con el PIC16F887 en específico, este es un microcontrolador de 8
bits de mediano rango, con 40 terminales y con una arquitectura Harvard lo que indica
que tiene dos memorias, una para datos y una de programa, además utiliza instrucciones
RISC (del inglés Reduced Instruction Set Computer, en español Computador con
Conjunto de Instrucciones Reducidas).
Taxímetro
El proyecto propuesto es la realización de un sistema que funcione de manera similar a
un taxímetro, este dispositivo se encuentra usualmente instalado en los taxis y mide el
importe a cobrar en relación tanto a la distancia recorrida como al tiempo trascurrido.
Para realizar dicho sistema, se necesita un LCD que muestre el monto a cobrar y que
este vaya incrementando según corresponda, el LCD será controlado por un pic16f887,
para el aumento de tarifa debido al tiempo transcurrido se utilizará el TMR1 en modo de
temporizador que servirá para contar los 45 segundos a los cuales se incrementa la
tarifa, mientras que para el incremento por distancia también se utilizara el TMR1, pero
en modo contador, por el pin RC0 se obtendrá la señal que determinara cuantos metros
se han recorrido.
TMR1
El microcontrolador PIC16F887 dispone de tres temporizadores/contadores
independientes, denominados Timer0, Timer1 y Timer2.
Es un módulo que sirve como contador o como temporizador de 16 bits, cuyo valor se
almacena en dos registros de 8 bits el TMR1H y el TMR1L, ambos registros se pueden
leer y escribir su valor durante la ejecución del programa. Cuando el Timer1 está
habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y una vez que
llega a su máximo valor empieza otra vez desde 0 avisándonos de ello por medio de la
bandera TMR1F.
Si está activa la interrupción por desbordamiento del Timer 1 al desbordarse el
contador, el programa entra en la función de tratamiento a la interrupción por
desbordamiento del Timer1.
El TMR1 puede funcionar de dos maneras; como contador de eventos o como
temporizador. Lo configuramos por medio del bit TMR1CS del registro TICON.
Derlis Hernández Lara
3
Cuando está en modo contador su valor se incrementa en cada flanco de subida de la
señal de reloj externa introducida por RC0.
Se decidió usar TMR1 y no TMR0, por que el tiempo a contar es relativamente grande y
si se usara TMR0 se usarían más recursos del microcontrolador por que habría que
realizar más operaciones o ciclos para contar los 45 segundos necesarios, el TMR1 al
ser de 16 bits tiene mayor capacidad para guardar cuentas más grandes.
El TMR1 (16 Bits) se puede dividir con un preescaler máximo de 8 si así se necesitara,
este registro tiene una capacidad de 65536 (de 0 a 65535) en vez de 256 como el TMR0
(de 0 a 255).
LCD
Cuando se trabaja en diseño de circuitos electrónicos es frecuente encontrarse con la
necesidad de visualizar un mensaje, que tiene que ver con el estado de la máquina a
controlar, con instrucciones para el operario, o si es un instrumento de medida, mostrar
el valor registrado. En la mayoría de los casos, recurrimos a los displays de siete
segmentos, pero estos además de no mostrar caracteres alfanuméricos ni ASCII, tienen
un elevado consumo de corriente y son un poco dispendiosos de manejar, cuando se
requiere hacer multiplexaje.
Los módulos de cristal líquido o LCD, solucionan estos inconvenientes y presentan
algunas ventajas, como un menor consumo de corriente, no hay que preocuparse por
hacer multiplexaje, no hay que hacer tablas especiales con los caracteres que se desea
mostrar, se pueden conectar fácilmente con microprocesadores o microcontroladores y
además, los proyectos adquieren una óptima presentación y funcionalidad.
Los módulos LCD se encuentran en diferentes presentaciones, por ejemplo (2 líneas por
16 caracteres), 2x20, 4x20, 4x40, etc. La forma de utilizarlos y sus interfaces son
similares, por eso, los conceptos vistos aquí se pueden emplear en cualquiera de ellos.
En nuestro caso, trabajaremos con un display de 2x16, ya que es de bajo costo, se
consigue fácilmente en el comercio y tiene un tamaño suficiente para la mayoría de las
aplicaciones.
Estos dispositivos vienen gobernados por un microcontrolador, que normalmente va
incorporado sobre la misma placa de circuito impreso que soporta el LCD (figura 1). En
el mercado es habitual encontrarse con el controlador HD44780 de Hitachi. Este
controlador se encarga de gestionar el display líquido: polariza los puntos de pantalla,
genera los caracteres, desplazar la pantalla, mostrar el cursos, etc. el usuario se
despreocupa de todos esos problemas y solo necesita conocer una serie de comandos o
instrucciones de alto nivel (limpia display, posicionar cursor, etc.) que le permitirán
mostrar mensajes o animaciones sobre la pantalla de forma sencilla. Para comunicarse
con el controlador del display se dispone de un interfaz paralelo al exterior, de fácil
conexión a otros microcontroladores o microprocesadores.
Derlis Hernández Lara
4
Figura 1.- Microcontrolador HD44780, en la parte trasera del LCD.
Conexiones a este tipo de LCD:
El número de pines de un display alfanumérico es normalmente de 14 (o 16 si el LCD
es retroiluminado) y son compatibles TTL. En la tabla 1 se muestra el significado de las
señales de cada pin. Hay tres tipos de señales en el LCD: de alimentación, de control y
de datos.
Derlis Hernández Lara
5
Según la operación que se desee realizar sobre el módulo de cristal líquido, los pines de
control E, RS y R/W deben tener un estado determinado. Además, debe tener en el bus
de datos un código que indique un caracter para mostrar en la pantalla o una instrucción
de control. En la figura 2 se muestra el diagrama de tiempos que se debe cumplir para
manejar el módulo.
Figura 2.- Diagrama de tiempo del módulo LCD.
El módulo LCD responde a un conjunto especial de instrucciones, estas deben ser
enviadas por el microcontrolador o sistema de control al display, según la operación que
se requiera, obsérvese figura 3.
La interface entre el microcontrolador y el display de cristal líquido se puede hacer con
el bus de datos trabajando a 4 u 8 bits. Las señales de control trabajan de la misma
forma en cualquiera de los dos casos, la diferencia se establece en el momento de iniciar
el sistema, ya que existe una instrucción que permite establecer dicha configuración.
Los caracteres que se envían al display se almacenan en la memoria RAM del módulo.
Existen posiciones de memoria RAM, cuyos datos son visibles en la pantalla y otras que
no son visibles, estas últimas se pueden utilizar para guardar caracteres que luego se
desplazan hacia la parte visible.
Es importante anotar que sólo se pueden mostrar caracteres ASCII de 7 bits, por lo tanto
algunos caracteres especiales no se pueden ver (se debe tener a la mano una tabla de los
caracteres ASCII para conocer los datos que son prohibidos). Por otra parte, se tiene la
opción de crear caracteres especiales (creados por el programador), y almacenarlos en la
memoria RAM que posee el módulo.
Derlis Hernández Lara
6
Figura 3.- Conjunto de instrucciones del módulo LCD.
Derlis Hernández Lara
7
DESARROLLO:
Realizar un programa y circuito correspondiente que funcione como un taxímetro, el
cual aumenta la tarifa a cobrar cada 45 segundos o cada 250 metros.
Aumento por tiempo:
1° Para la parte de los 45 segundos, sabiendo que TMR1 puede contar hasta 65535 y
que además se conforma de dos registros TMR1H y TMR1L, se utiliza como
temporizador.
Se decide programar una temporización de 0.5 segundos (500 ms), que después será
ejecutada 90 veces para así tener una temporización total de 45 segundos utilizando un
cristal de 4 MHz como oscilador principal del microcontrolador.
Si el oscilador= 4 MHz; Tosc=0.25µs
Para alcanzar el valor necesario se utilizará el preescaler. Si lo colocamos a 1:8 se
obtendrá el valor deseado:
Retardo=4*Tosc*TMR1*Preescaler
Para calcular el valor a precargar en TMR1:
Retardo=4*0.25us * 62500*8
Retardo=500 ms
65535-62500=3035
Por lo tanto 3035 es el valor a precargar en TMR1 para lograr los 0.5 s. Se apoyó en el
bit de desborde del módulo timer 1 TMR1F. Si se cuenta 90 veces esta temporización se
logran los 45 segundos buscados, la programación y simulación se muestra a
continuación:
Figura 4.- Simulación de los 500 ms, al precargar TMR1 con 3035.
Derlis Hernández Lara
8
Figura 5.- Código para el aumento por tiempo, cada 45 segundos la tarifa aumenta una
unidad.
Figura 6.- Simulación de los 45 segundos, al temporizar TMR1 con 500ms durante 90
ocasiones.
Los registros usados para configurar TMR1 serán descritos con mayor detalle más
adelante, ya que se volverá a usar este timer.
Derlis Hernández Lara
9
Aumento por distancia:
Partiendo de ciertos datos se determinará a cuantos pulsos equivalen 250 metros, que es
la distancia a la cual la tarifa aumenta en una unidad. Para así poder configurar el TMR1
de manera correcta como contador de pulsos externos en el pin RC0.
2° Se sabe que la velocidad tangencial a la que circula el vehículo está relacionada con
el diámetro de sus ruedas, para saber la distancia recorrida no interesa por el momento
la velocidad, pero si el diámetro de la rueda. En la figura 7 se muestra un ejemplo de
cómo se obtiene el diámetro total de una llanta.
Figura 7.- Ejemplo de cómo obtener el diámetro total de una llanta.
Para este trabajo en específico se propone una rueda con un radio de 26 cm (.26 m),
luego entonces su diámetro es de 52 cm (.52 m), para saber cuántas vueltas debe dar esa
rueda para recorrer 250 m, solo se debe conocer su perímetro y este multiplicado por el
número de vueltas debe dar 250 m.
La rueda debe dar 153 vueltas para recorrer 250 m.
Ahora bien, hay que tener en cuenta cómo va a ser el sensor que estará midiendo las
vueltas de la rueda, se propone que el sensor sea óptico acoplado a una rueda dentada de
4 dientes, lo que significa que cada 4 pulsos obtenidos equivale a una vuelta completa
de la rueda.
Entonces: 153*4=612
Derlis Hernández Lara
10
Se deben de contar 612 pulsos en RC0 para incrementar la tarifa en una unidad debido
al aumento por cada 250 m.
Para esto se configura TMR1 como contador de pulso externos en RC0. Los registros
involucrados son: INTCON, T1CON (figura 9), TMR1H, TMR1L y la interrupción
particular PIE1. El diagrama de bloques correspondiente a TMR1 se muestra en la
figura 8.
Como se necesitan contar 612 pulsos, el valor a precargar en TMR1 es:
Si bien es cierto que TMR1 es de 16 bits y puede contar hasta 65535, pensando en el
momento de enviar los datos al LCD para mostrar el monto a pagar, es más fácil
trabajar con 8 bits para la parte de la transformación del dato en código ASCII, por eso
se optó por solo trabajar con la parte baja del registro que es TMR1L y para poder
contar los 612 pulsos se tienes que usar el preescaler de 4, lo que indica que cada 4
pulsos aumentara un valor el registro TMR1.
612/4=153;
Luego entonces habrá que contar 153 en TMR1 para que se produzca el aumento
correspondiente.
Para lo cual TMR1L que es la parte baja de TMR1 sería precargado con:
255-153=102
Entonces los valores a precargar son:
TMR1H=255
TMR1L=102
Con esta configuración cada que se desborde TMR1 se generara una interrupción en
donde se incrementara la tarifa como corresponde. En la figura 10 se muestra el código
correspondiente a esta etapa.
Figura 8.- Diagrama a bloques del registro TMR1.
Derlis Hernández Lara
11
Figura 9.- Registro para configurar TMR1 como contador.
Derlis Hernández Lara
12
Figura 10.- Código correspondiente a la configuración de TMR1 como contador
para el incremento de la tarida por distancia (cada 250 m).
Mostrar tarifa en LCD:
Para enviar los datos que se desean mostrar en la LCD, se considera toda la explicación
teórica-practica comentada anteriormente.
3° Lo primero es decidir por qué puerto del PIC se enviaran los datos correspondientes
al LCD, para este caso se utiliza el puerto B para el bus de bidireccional de datos (DB0-
DB7) y el puerto E para las señales de control (RS, R/W y E). La configuración se
muestra en la siguiente figura 11.
Derlis Hernández Lara
13
Figura 11.- Configuración de puertos para el control de LCD.
Ahora se necesitan rutinas que le indiquen al LCD que deseamos hacer, como encender
el LCD, posicionarlo en alguna celda en específico, indicarle que se mandara una
instrucción o un dato, enviar datos para su impresión en el LCD, actualizar la tarifa y
opción de cobre correspondiente, borrar pantalla, etc.; dichas rutinas se muestran a
continuación (figura 12).
Derlis Hernández Lara
14
RETURN
Derlis Hernández Lara
15
RETURN
Figura 12.- Subrutinas para gobernar el LCD.
Derlis Hernández Lara
16
Para la parte de pintar el dato deseado en la pantalla, hay que recordar que el LCD
espera el codigo ASCII del carácter a pintar, por lo que si la mandas un número este
pintara el equivalente en ASCII a dicho número, para lo que hay que trasformar dicho
número a su equivalente en ASCII, existen varios metodos para realizar esto, en este
caso se propone trasformar el valor de la tarifa (8 bits) al sistema BCD y apartir de allí
obtener su equivalente en ASCII, la transformación a BCD se realiza mediante restas
sucesivas, para obtener el equivalente a ASCII se le suma 30 en hexadecimal, el codigo
correspondiente se muestra a continuación en la figura 13.
Figura 13.- Obtención del código ASCII para enviar al LCD.
Comentarios:
Existe un criterio para decidir cuándo se aumenta la tarifa por tiempo y cuando por
distancia, al cual se le llama velocidad critica.
Derlis Hernández Lara
17
Hay tres formas básicas según las cuales se computa por tiempo o por distancia. Pero en
la mayoría de los casos el tiempo y la distancia están vinculados. Para la más común la
condición es la siguiente:
Para el caso de estudio:
Si aumenta $1.00 cada 45 s, en hora aumentará: 3600 s / 45 s= $80.00 cada hora.
Si aumenta $1.00 cada 250 m, en 250 m aumentará: 1000 m / 250 m= $4.00 cada Km.
Lo que indica que si el vehículo está avanzado a más de 20 Km/h el aumento deberá ser
por distancia de lo contrario será por tiempo.
Las tres formas de pasar a contar por tiempo o distancia son: manualmente (a través de
un botón), automáticamente al detenerse completamente el vehículo por más de un
determinado tiempo, o automáticamente a través de la velocidad de crítica (la más
utilizada).
La velocidad de crítica es la velocidad que marca el límite entre contar por tiempo, o
por distancia, según cobre más. Se calcula automáticamente a partir de los valores de
distancia y tiempo, y puede deducirse con una regla de tres.
Para saber a cuantos pulsos por segundo equivalen 20 Km/h, se parte de la expresión de
velocidad tangencial que se obtuvo (lo cual se pondrá más adelante):
Velocidad=3/2 (dato) (Km/h)
Dato: Pulsos por segundo
Luego entonces si sabemos a partir de 20Km/h se cobrara por distancia:
Lo que indica que si en un segundo contamos 14 pulsos de decide aumentar la tarifa por
distancia, de lo contrario será por tiempo.
Para este caso no se introdujo esta consideración en el proyecto y se estableció que la
selección de elegir una u otra opción fuera manual a través de un interruptor (que
también es correcta según la teoría), pero si se desea acoplar la decisión automática,
solo hay que contar cuantos pulsos se leen en un segundo y con base en ello decidir.
Derlis Hernández Lara
18
Constante para el cálculo de velocidad:
Se propone un radio de rueda de 26 cm y una rudea con 4 muescas para la parte del
sensor (cada 4 pulsos detectados una vuelta completa de la rueda).
Dato=Pulsos por segundo
Derlis Hernández Lara
19
3/2 multiplicado por dato sera el valor en Km/h calculados, según las consideraciones
anteriores.
Conclusiones:
Con la elaboración de este proyecto se desarrollaron las habilidades necesarias para
poder analizar y configurar aspectos básicos a la hora de usar un microcontrolador y sus
diferentes periféricos, se aplicaron los conceptos de contador, temporizador, manejo de
LCD etc., además de entender cómo funciona un taxímetro y las consideraciones físicas
que esto conlleva a la hora de diseñar uno, como lo son diámetro de la rueda, velocidad
angular, velocidad tangencial, frecuencia, etc.
La parte más laboriosa fue el control del LCD en ensamblador, pero una vez logrado
este objetivo se obtiene la destreza para enfrentar otros problemas que necesiten LCD,
sin necesidad de dedicar el mismo tiempo a su control. Además de que se reafirma que
los timer de los microcontroladores son una herramienta sumamente importante en la
solución de muchas necesidades y que es casi seguro que se encuentren en la mayoría
de las aplicaciones a realizar.
Nota: Se anexa el código completo en ensamblador del taxímetro diseñado y simulación
en Proteus (figura 14).
Referencias:
“PICmicro Mid-Range MCU Family Reference Manual”, Microchip rev/DS33023A,
December 1997.
“PIC16F887 Data sheet” Microchiop rev/30292c, 2001
“MAX232 Data sheet”, Texas Instruments, 2003.
HD44780U (LCD-II), Data sheet.
JHD162A SERIES, Data sheet.
“Como gobernar un display LCD alfanumérico basado en el controlador HD44780”,
José Ignacio Suárez Marcelo.
Derlis Hernández Lara
20
Anexo:
; TAXÍMETRO CON OPCIÓN A ELEGIR AUMENTO DE TARIFA POR TIEMPO O POR DIDTANCIA:
; COMO CONFIGUARACION INICIAL (POR DEFAUL) ESTA EN OPCIÓN DE COBRAR POR TIEMPO, ORPIMIENDO UN
BOTON
; CAMBIARÁ A COBRO POR DISTANCIA.
; PROYECTO TAXIMETRO
PROCESSOR 16F887
INCLUDE P16F887.INC
TARIFA EQU 020 ; SE ASIGNA LA ETIQUETA TARIFA A LA LOCALDAD 20 EN LA MEMORIA
CONT EQU 021
;VARIABLES PARA EL RETARDO DEL ENABLE DE LA LCD
VAL1 EQU 022
VAL2 EQU 023
;VARIABLES PARA SEPARAR EL RESULTADO DE LA TARIFA EN VALOR BCD
UNIDADES EQU 024
DECENAS EQU 025
CENTENAS EQU 026
RESTO EQU 027
ORG 0 ;SE INICIA A PARTIR DE LA DIRECCIÓN CERO EN LA MEMORIA DE PROGRAMA
GOTO INICIO
ORG 4
GOTO INTER
INICIO
;______________________________________________________________________________
;LCD
;CONFIGURACIÓN DE PUERTOS
BSF STATUS,RP0 ; BANCO 1
CLRF TRISE ; SE CONFIGURA COMO SALIDAS EL PUERTO E
BSF STATUS,RP1 ; BANCO 3
MOVLW 01F; 0001 1111
MOVWF ANSEL
BCF STATUS,RP1 ; BANCO 1
BCF STATUS,RP0 ; BANCO 0
MOVLW TRISD
MOVWF FSR ; DIRECCIONAMIENTO INDIRECTO
;_______________________________________________________________________________
;PORTA COMO ENTRADA: PARA EL INTERRUPTOR DE SELECCIÓN EL MODO DE AUMENTO DE LA TARIFA
BSF STATUS,RP0 ;BANCO 1
MOVLW b'00111111'
MOVWF TRISA
BSF STATUS,RP1; BANCO 3
CLRF ANSEL ;SE CONFIGURA DE MANERA DIGITAL
BCF STATUS,RP0
BCF STATUS,RP1
;______________________________________________________________________________
;AUMENTO POR TIEMPO:
;_____________________________________________________________________________
MOVLW .8
MOVWF TARIFA
;INICIO DEL PROGRAMA:
INICIO1
CALL LCDON
CALL IMPRIME_TARIFA
OPCION:
CALL ACTUALIZA_OPCION2
BTFSC PORTA,0
GOTO AUMENTO_DISTANCIA
Derlis Hernández Lara
21
CALL AUMENTO_TIEMPO
CALL ACTUALIZA_TARIFA
GOTO OPCION
;AUMENTO DE TARIFA POR TIEMPO, CADA 45 SEGUNDOS AUMENTA $1 PESO
AUMENTO_TIEMPO:
MOVLW .90
MOVWF CONT
MOVLW 030 ; SE ELIGE EL PREESCALER DE TMR1 1:8
MOVWF T1CON
BCF PIR1,TMR1IF
_45
CALL RETARDO
DECFSZ CONT,1
GOTO _45
TAR1
MOVLW .1
ADDWF TARIFA,F ; INCREMENTA LA TARIFA EN UNA UNIDAD CADA 45 SEGUNDOS
RETURN
RETARDO
BSF T1CON,TMR1ON ;HABÍLITA TMR1
MOVLW 00B ;11
MOVWF TMR1H ;SE INICIALIZA CON ESTOS VALORES, LOS REGISTROS DE TMR1 (3035)
MOVLW 0DB ;219
MOVWF TMR1L
BSF T1CON,TMR1ON ;HABÍLITA TMR1
ESPERA
BTFSS PIR1,TMR1IF
GOTO ESPERA
BCF T1CON,TMR1ON ;SE REINICIA LA BANDERA DE TMR1 PARA INICIAR EL PROCESO DE NUEVO
BCF PIR1,TMR1IF
RETURN
;______________________________________________________________________________________
;AUMENTO POR DISTANCIA
;______________________________________________________________________________________
AUMENTO_DISTANCIA
CALL ACTUALIZA_OPCION
BSF STATUS,RP0 ;BANCO 1
BSF PIE1,0 ;HABILITACIÓN PÁRTICULAR DE TMR1
BCF STATUS,RP0 ;BANCO 0
MOVLW B'11000000'
MOVWF INTCON ;HABILITACIÓN GLOBAL DE INTERRUPCIONES PARA EL DESBORDE DE TMR1
;TMR1
MOVLW 0X27;'0010 0111'
MOVWF T1CON ; SE CONFIGURA TMR1 PARA CONTAR PULSOS EXTERNOS Y SE ENCIENDE
MOVLW .255
MOVWF TMR1H ; SE INICIALIZA CON LOS VALORES NECECITADOS
MOVLW .103
MOVWF TMR1L
;TERMINA CONFIGURAIÓN TIMER
CONTEO GOTO CONTEO ;CICLO PARA REALIZAR EL CONTEO HASTA LA INTERRUPCIÓN
INTER ;LLAMADA A INTERRUPCIÓN
INCF TARIFA
CALL ACTUALIZA_TARIFA
INCF PORTB
BCF PIR1,TMR1IF
OPCION1:
BTFSS PORTA,0
GOTO OPCION
MOVLW .255
MOVWF TMR1H
Derlis Hernández Lara
22
MOVLW .103
MOVWF TMR1L
RETFIE ;REGRESAR A DONDE SE PRODUJO LA INTERRUPCIÓN
;______________________________________________________________________________________
;SUBRUTINAS LCD
;SUBRUTINA PARA COLOCAR EL CURSOR EN LA POSICIÓN DESEADA:
POSICION1:
BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
MOVLW b'10001001'
MOVWF PORTD ; INSTRUCCION (SET THE DD RAM ADDRESS ), POSISION 9 DE LA FILA 1
CALL INSTRUCCION
BSF PORTE,2; MODO DATO
RETURN
POSICION2:
BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
MOVLW b'11001000'
MOVWF PORTD ; INSTRUCCION (SET THE DD RAM ADDRESS ), POSISION 9 DE LA FILA 2
CALL INSTRUCCION
BSF PORTE,2; MODO DATO
RETURN
;SUBRUTINA PARA ENCENDER LCD
LCDON:
BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
MOVLW b'00111000'
MOVWF PORTD ; INSTRUCCION (FUNCTION SET)
CALL INSTRUCCION
MOVLW b'00001110'
MOVWF PORTD ; INSTRUCCION (LCDON)
CALL INSTRUCCION
MOVLW b'00000110' ; SELECCIONA LA PRIMERA LÍNEA
MOVWF PORTD
CALL INSTRUCCION ; SE DA DE ALTA EL COMANDO
MOVLW b'10000000'
MOVWF PORTD ; INSTRUCCION (ENTRY MODE SET)
CALL INSTRUCCION
BSF PORTE,2; MODO DATO
RETURN
;SUBRUTINA PARA ENVIAR INSTRUCCIONES
INSTRUCCION:
IINSTRUCCION:
BSF PORTE,0 ; EN CERO EL ENABLE
CALL DELAY ;TIEMPO DE ESPERA
BCF PORTE,0 ;EN CERO EL ENABLE
RETURN
;SUBRUTINA DE RETARDO
DELAY:
MOVLW 0X0F
MOVWF VAL2
CICLO:
MOVLW 0X4F
MOVWF VAL1
CICLO2:
DECFSZ VAL1,1
GOTO CICLO2
DECFSZ VAL2,1
GOTO CICLO
RETURN
;SUBRUTINA PARA IMPRIMIR EN LA LCD
IMPRIME_TARIFA:
Derlis Hernández Lara
23
CALL ERASE_LCD ;LIMPIA LCD
MOVLW 'T'
MOVWF PORTD
CALL ENVIA
MOVLW 'A'
MOVWF PORTD
CALL ENVIA
MOVLW 'X'
MOVWF PORTD
CALL ENVIA
MOVLW 'I'
MOVWF PORTD
CALL ENVIA
MOVLW ' '
MOVWF PORTD
CALL ENVIA
MOVLW 'P'
MOVWF PORTD
CALL ENVIA
MOVLW 'O'
MOVWF PORTD
CALL ENVIA
MOVLW 'R'
MOVWF PORTD
CALL ENVIA
MOVLW ' '
MOVWF PORTD
CALL ENVIA
CALL FILA2
MOVLW 'T'
MOVWF PORTD
CALL ENVIA
MOVLW 'A'
MOVWF PORTD
CALL ENVIA
MOVLW 'R'
MOVWF PORTD
CALL ENVIA
MOVLW 'I'
MOVWF PORTD
CALL ENVIA
MOVLW 'F'
MOVWF PORTD
CALL ENVIA
MOVLW 'A'
MOVWF PORTD
CALL ENVIA
MOVLW '='
MOVWF PORTD
CALL ENVIA
MOVLW '$' ;IMPRIME EL SIMBOLO "$"
MOVWF PORTD
CALL ENVIA
CALL READ_TIEMPO ;LLAMADA A RUTINA QUE OBTINE EL
;VALOR DE LA TARIFA A PARTIR
;DEL RESULTADO DEL CONV A/D O DEL TIEMPO TRANSCURRIDO
MOVF CENTENAS,W ;IMPRIME EL DÍGITO DE LAS CENTENAS
MOVWF PORTD
CALL ENVIA
MOVF DECENAS,W ;IMPRIME EL DÍGITO DE LAS DECENAS
MOVWF PORTD
CALL ENVIA
MOVF UNIDADES,W ;IMPRIME EL DÍGITO DE LAS UNIDADES
MOVWF PORTD
CALL ENVIA
MOVLW ' '
MOVWF PORTD
CALL ENVIA
MOVLW 'M'
MOVWF PORTD
CALL ENVIA
MOVLW '.'
Derlis Hernández Lara
24
MOVWF PORTD
CALL ENVIA
MOVLW 'N'
MOVWF PORTD
CALL ENVIA
MOVLW '.'
MOVWF PORTD
CALL ENVIA
RETURN
;SUBRUTINA PARA ACTUALIZAR SOLO EL MONTO A PAGAR:
ACTUALIZA_TARIFA:
CALL POSICION2
CALL READ_TIEMPO ;LLAMADA A RUTINA QUE OBTINE EL
;VALOR DE LA TARIFA A PARTIR
;DEL RESULTADO DEL CONV A/D O DEL TIEMPO TRANSCURRIDO
MOVF CENTENAS,W ;IMPRIME EL DÍGITO DE LAS CENTENAS
MOVWF PORTD
CALL ENVIA
MOVF DECENAS,W ;IMPRIME EL DÍGITO DE LAS DECENAS
MOVWF PORTD
CALL ENVIA
MOVF UNIDADES,W ;IMPRIME EL DÍGITO DE LAS UNIDADES
MOVWF PORTD
CALL ENVIA
RETURN
ACTUALIZA_OPCION:
CALL POSICION1
MOVLW 'M'
MOVWF PORTD
CALL ENVIA
MOVLW 'E'
MOVWF PORTD
CALL ENVIA
MOVLW 'T'
MOVWF PORTD
CALL ENVIA
MOVLW 'R'
MOVWF PORTD
CALL ENVIA
MOVLW 'O'
MOVWF PORTD
CALL ENVIA
MOVLW 'S'
MOVWF PORTD
CALL ENVIA
RETURN
ACTUALIZA_OPCION2:
CALL POSICION1
MOVLW 'T'
MOVWF PORTD
CALL ENVIA
MOVLW 'I'
MOVWF PORTD
CALL ENVIA
MOVLW 'E'
MOVWF PORTD
CALL ENVIA
MOVLW 'M'
MOVWF PORTD
CALL ENVIA
MOVLW 'P'
MOVWF PORTD
CALL ENVIA
MOVLW 'O'
MOVWF PORTD
CALL ENVIA
RETURN
;SUBRUTINA PARA ENVIAR DATOS
ENVIA:
BSF PORTE,2 ; EL RS EN 1 INDICANDO QUE ES UN DATO
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
Derlis Hernández Lara
25
CALL INSTRUCCION
RETURN
;SUBRUTINA PARA CAMBIAR A LINEA2 DEL LCD
FILA2:
BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
MOVLW 0XC0
MOVWF PORTD ; INSTRUCCION (FUNCTION SET)
CALL INSTRUCCION;
RETURN
;RUTINA PARA LIMPAR PANTALLA LCD
ERASE_LCD:
BCF PORTE,2 ; RS=0 MODO INSTRUCCION
BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS
CLRF INDF ; EL PUERTO D COMO SALIDAS
MOVLW 0X01 ; 0X01 LIMPIA LA PANTALLA EN EL LCD
MOVWF PORTD
CALL INSTRUCCION ; SE DA DE ALTA EL COMANDO
BSF PORTE,2 ; RS=1 MODO DATO
RETURN
READ_TIEMPO:
CLRF CENTENAS ;SE LIMPIAN LOS REGISTROS PARA LA CONVERSIÓN BCD
CLRF DECENAS
CLRF UNIDADES
MOVF TARIFA,W
MOVWF RESTO ;GUARDA EL VALOR DE TMR1 EN RESTO
;BCD
;COMIENZA EL PROCESO DE OTENCIÓN DE VALORES BCD
;PARA CENTENAS, DECENAS Y UNIDADES ATRAVES DE RESTAS
;SUCESIVAS.
CENTENAS1
MOVLW D'100' ;W=D'100'
SUBWF RESTO,W ;RESTO - D'100' (W)
BTFSS STATUS,C ;RESTO MENOR QUE D'100'?
GOTO DECENAS1 ;SI
MOVWF RESTO ;NO, SALVA EL RESTO
INCF CENTENAS,1 ;INCREMENTA EL CONTADOR DE CENTENAS BCD
GOTO CENTENAS1 ;REALIZA OTRA RESTA
DECENAS1
MOVLW D'10' ;W=D'10'
SUBWF RESTO,W ;RESTO - D'10' (W)
BTFSS STATUS,C ;RESTO MENOR QUE D'10'?
GOTO UNIDADES1 ;SI
MOVWF RESTO ;NO, SALVA EL RESTO
INCF DECENAS,1 ;INCREMENTA EL CONTADOR DE CENTENAS BCD
GOTO DECENAS1 ;REALIZA OTRA RESTA
UNIDADES1
MOVF RESTO,W ;EL RESTO SON LA UNIDADES BCD
MOVWF UNIDADES
;RUTINA QUE OBTIENE EL EQUIVALENTE EN ASCII
OBTEN_ASCII
MOVLW H'30'
IORWF UNIDADES,F
IORWF DECENAS,F
IORWF CENTENAS,F
RETURN
END
Derlis Hernández Lara
26
Figura 14. Simulación del taxímetro en Proteus.

More Related Content

What's hot

Overview of LPC214x MCUs
Overview of LPC214x MCUsOverview of LPC214x MCUs
Overview of LPC214x MCUsPremier Farnell
 
Timer counter in arm7(lpc2148)
Timer counter in arm7(lpc2148)Timer counter in arm7(lpc2148)
Timer counter in arm7(lpc2148)Aarav Soni
 
DWDM Presentation
DWDM PresentationDWDM Presentation
DWDM Presentationayodejieasy
 
디지털통신 9
디지털통신 9디지털통신 9
디지털통신 9KengTe Liao
 
PIC timer programming
PIC timer programmingPIC timer programming
PIC timer programmingAkash Puri
 
Introduction to DSP Processors-UNIT-6
Introduction to DSP Processors-UNIT-6Introduction to DSP Processors-UNIT-6
Introduction to DSP Processors-UNIT-6Ananda Gopathoti
 
Basic of MODBUS Communication/Protocol
Basic of MODBUS Communication/ProtocolBasic of MODBUS Communication/Protocol
Basic of MODBUS Communication/ProtocolShivam Singh
 
Normatividad de las telecomunicaciones en mexico
Normatividad de las telecomunicaciones en mexicoNormatividad de las telecomunicaciones en mexico
Normatividad de las telecomunicaciones en mexicoJesus Cisneros Morales
 
Unit II Study of Onchip Peripherals
Unit II Study of Onchip PeripheralsUnit II Study of Onchip Peripherals
Unit II Study of Onchip PeripheralsDr. Pankaj Zope
 
MPLS - Multiprotocol Label Switching v1.3
MPLS - Multiprotocol Label Switching v1.3MPLS - Multiprotocol Label Switching v1.3
MPLS - Multiprotocol Label Switching v1.3Gianpietro Lavado
 
Metroethernet redes-y-servicios
Metroethernet redes-y-serviciosMetroethernet redes-y-servicios
Metroethernet redes-y-serviciosc09271
 

What's hot (20)

Overview of LPC214x MCUs
Overview of LPC214x MCUsOverview of LPC214x MCUs
Overview of LPC214x MCUs
 
Timer counter in arm7(lpc2148)
Timer counter in arm7(lpc2148)Timer counter in arm7(lpc2148)
Timer counter in arm7(lpc2148)
 
LCD Interacing with 8051
LCD Interacing with 8051LCD Interacing with 8051
LCD Interacing with 8051
 
DWDM Presentation
DWDM PresentationDWDM Presentation
DWDM Presentation
 
디지털통신 9
디지털통신 9디지털통신 9
디지털통신 9
 
Reglamento ict rd346-2011
Reglamento ict rd346-2011Reglamento ict rd346-2011
Reglamento ict rd346-2011
 
PIC timer programming
PIC timer programmingPIC timer programming
PIC timer programming
 
Fundamentos de PON (Redes Ópticas Pasivas)
Fundamentos de PON (Redes Ópticas Pasivas)Fundamentos de PON (Redes Ópticas Pasivas)
Fundamentos de PON (Redes Ópticas Pasivas)
 
Introduction to DSP Processors-UNIT-6
Introduction to DSP Processors-UNIT-6Introduction to DSP Processors-UNIT-6
Introduction to DSP Processors-UNIT-6
 
Manual do px
Manual do pxManual do px
Manual do px
 
Redes de banda ancha unidad 1
Redes de banda ancha unidad 1Redes de banda ancha unidad 1
Redes de banda ancha unidad 1
 
Interfacing LCD with 8051 Microcontroller
Interfacing LCD with 8051 MicrocontrollerInterfacing LCD with 8051 Microcontroller
Interfacing LCD with 8051 Microcontroller
 
Basic of MODBUS Communication/Protocol
Basic of MODBUS Communication/ProtocolBasic of MODBUS Communication/Protocol
Basic of MODBUS Communication/Protocol
 
ARM Processors
ARM ProcessorsARM Processors
ARM Processors
 
Normatividad de las telecomunicaciones en mexico
Normatividad de las telecomunicaciones en mexicoNormatividad de las telecomunicaciones en mexico
Normatividad de las telecomunicaciones en mexico
 
1- INTRO TVT
1- INTRO TVT1- INTRO TVT
1- INTRO TVT
 
Unit II Study of Onchip Peripherals
Unit II Study of Onchip PeripheralsUnit II Study of Onchip Peripherals
Unit II Study of Onchip Peripherals
 
PRESENTACION SIEMENS.pptx
PRESENTACION SIEMENS.pptxPRESENTACION SIEMENS.pptx
PRESENTACION SIEMENS.pptx
 
MPLS - Multiprotocol Label Switching v1.3
MPLS - Multiprotocol Label Switching v1.3MPLS - Multiprotocol Label Switching v1.3
MPLS - Multiprotocol Label Switching v1.3
 
Metroethernet redes-y-servicios
Metroethernet redes-y-serviciosMetroethernet redes-y-servicios
Metroethernet redes-y-servicios
 

Similar to Taxímetro con Pic16F887

Similar to Taxímetro con Pic16F887 (20)

Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
El microcontrolador PIC16F877
El microcontrolador PIC16F877El microcontrolador PIC16F877
El microcontrolador PIC16F877
 
Libro basico pic
Libro basico picLibro basico pic
Libro basico pic
 
Microprosedador
MicroprosedadorMicroprosedador
Microprosedador
 
Familia De Los Microcontroladores Pic
Familia De Los Microcontroladores PicFamilia De Los Microcontroladores Pic
Familia De Los Microcontroladores Pic
 
Informe censores
Informe censoresInforme censores
Informe censores
 
Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550
 
Introducpic2
Introducpic2Introducpic2
Introducpic2
 
Introducpic
IntroducpicIntroducpic
Introducpic
 
Práctica #2 parcial #2 registros del banco
Práctica #2 parcial #2  registros del bancoPráctica #2 parcial #2  registros del banco
Práctica #2 parcial #2 registros del banco
 
Unidad III
Unidad IIIUnidad III
Unidad III
 
PANTALLAS LCD
PANTALLAS LCDPANTALLAS LCD
PANTALLAS LCD
 
Curso de microcontrolador MCS51
Curso de microcontrolador MCS51Curso de microcontrolador MCS51
Curso de microcontrolador MCS51
 
Introducción pic 16 f 84 universidad de la marina mercante
Introducción pic 16 f 84   universidad de la marina mercanteIntroducción pic 16 f 84   universidad de la marina mercante
Introducción pic 16 f 84 universidad de la marina mercante
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
FAMILIA MICROCONTROLADORES
FAMILIA MICROCONTROLADORESFAMILIA MICROCONTROLADORES
FAMILIA MICROCONTROLADORES
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
 
Curso-de-PLC.pdf
Curso-de-PLC.pdfCurso-de-PLC.pdf
Curso-de-PLC.pdf
 
Sistemas Microprocesados I
Sistemas Microprocesados ISistemas Microprocesados I
Sistemas Microprocesados I
 

Recently uploaded

ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesgovovo2388
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCarlosGabriel96
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptxBRAYANJOSEPTSANJINEZ
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfvladimirpaucarmontes
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZgustavoiashalom
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAJOSLUISCALLATAENRIQU
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesElianaCceresTorrico
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdfCristhianZetaNima
 

Recently uploaded (20)

ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
introducción a las comunicaciones satelitales
introducción a las comunicaciones satelitalesintroducción a las comunicaciones satelitales
introducción a las comunicaciones satelitales
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdfMODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
MODIFICADO - CAPITULO II DISEÑO SISMORRESISTENTE DE VIGAS Y COLUMNAS.pdf
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
04. Sistema de fuerzas equivalentes II - UCV 2024 II.pdf
 

Taxímetro con Pic16F887

  • 1. INSTITUTO POLITÉCNICO NACIONAL CENTRO DE INVESTIGACIÓN EN COMPUTACIÓN 2° EVALUACIÓN Microprocesadores MCIC Hernández Lara Derlis Aplicación de los periféricos de un microcontrolador, uso del TMR1 y control de LCD con PIC16F. Proyecto: Taxímetro Profesor: Dr. Alfonso Gutiérrez Aldana MÉXICO, D.F. JUNIO 2014
  • 2. Derlis Hernández Lara 2 Conociendo los microcontroladores PIC16F En este trabajo se describe la práctica realizada para la segunda evaluación de la materia de microprocesadores. Se vio durante el curso correspondiente a este periodo, como configurar y utilizar algunos de los periféricos más usados de un PIC, como los son el módulo CCP (Compare/Capture/PWM), control de LCD, programación serial en circuito (ICSP) y el puerto de comunicación serial (SSP). Introducción: Se está trabajando con el PIC16F887 en específico, este es un microcontrolador de 8 bits de mediano rango, con 40 terminales y con una arquitectura Harvard lo que indica que tiene dos memorias, una para datos y una de programa, además utiliza instrucciones RISC (del inglés Reduced Instruction Set Computer, en español Computador con Conjunto de Instrucciones Reducidas). Taxímetro El proyecto propuesto es la realización de un sistema que funcione de manera similar a un taxímetro, este dispositivo se encuentra usualmente instalado en los taxis y mide el importe a cobrar en relación tanto a la distancia recorrida como al tiempo trascurrido. Para realizar dicho sistema, se necesita un LCD que muestre el monto a cobrar y que este vaya incrementando según corresponda, el LCD será controlado por un pic16f887, para el aumento de tarifa debido al tiempo transcurrido se utilizará el TMR1 en modo de temporizador que servirá para contar los 45 segundos a los cuales se incrementa la tarifa, mientras que para el incremento por distancia también se utilizara el TMR1, pero en modo contador, por el pin RC0 se obtendrá la señal que determinara cuantos metros se han recorrido. TMR1 El microcontrolador PIC16F887 dispone de tres temporizadores/contadores independientes, denominados Timer0, Timer1 y Timer2. Es un módulo que sirve como contador o como temporizador de 16 bits, cuyo valor se almacena en dos registros de 8 bits el TMR1H y el TMR1L, ambos registros se pueden leer y escribir su valor durante la ejecución del programa. Cuando el Timer1 está habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y una vez que llega a su máximo valor empieza otra vez desde 0 avisándonos de ello por medio de la bandera TMR1F. Si está activa la interrupción por desbordamiento del Timer 1 al desbordarse el contador, el programa entra en la función de tratamiento a la interrupción por desbordamiento del Timer1. El TMR1 puede funcionar de dos maneras; como contador de eventos o como temporizador. Lo configuramos por medio del bit TMR1CS del registro TICON.
  • 3. Derlis Hernández Lara 3 Cuando está en modo contador su valor se incrementa en cada flanco de subida de la señal de reloj externa introducida por RC0. Se decidió usar TMR1 y no TMR0, por que el tiempo a contar es relativamente grande y si se usara TMR0 se usarían más recursos del microcontrolador por que habría que realizar más operaciones o ciclos para contar los 45 segundos necesarios, el TMR1 al ser de 16 bits tiene mayor capacidad para guardar cuentas más grandes. El TMR1 (16 Bits) se puede dividir con un preescaler máximo de 8 si así se necesitara, este registro tiene una capacidad de 65536 (de 0 a 65535) en vez de 256 como el TMR0 (de 0 a 255). LCD Cuando se trabaja en diseño de circuitos electrónicos es frecuente encontrarse con la necesidad de visualizar un mensaje, que tiene que ver con el estado de la máquina a controlar, con instrucciones para el operario, o si es un instrumento de medida, mostrar el valor registrado. En la mayoría de los casos, recurrimos a los displays de siete segmentos, pero estos además de no mostrar caracteres alfanuméricos ni ASCII, tienen un elevado consumo de corriente y son un poco dispendiosos de manejar, cuando se requiere hacer multiplexaje. Los módulos de cristal líquido o LCD, solucionan estos inconvenientes y presentan algunas ventajas, como un menor consumo de corriente, no hay que preocuparse por hacer multiplexaje, no hay que hacer tablas especiales con los caracteres que se desea mostrar, se pueden conectar fácilmente con microprocesadores o microcontroladores y además, los proyectos adquieren una óptima presentación y funcionalidad. Los módulos LCD se encuentran en diferentes presentaciones, por ejemplo (2 líneas por 16 caracteres), 2x20, 4x20, 4x40, etc. La forma de utilizarlos y sus interfaces son similares, por eso, los conceptos vistos aquí se pueden emplear en cualquiera de ellos. En nuestro caso, trabajaremos con un display de 2x16, ya que es de bajo costo, se consigue fácilmente en el comercio y tiene un tamaño suficiente para la mayoría de las aplicaciones. Estos dispositivos vienen gobernados por un microcontrolador, que normalmente va incorporado sobre la misma placa de circuito impreso que soporta el LCD (figura 1). En el mercado es habitual encontrarse con el controlador HD44780 de Hitachi. Este controlador se encarga de gestionar el display líquido: polariza los puntos de pantalla, genera los caracteres, desplazar la pantalla, mostrar el cursos, etc. el usuario se despreocupa de todos esos problemas y solo necesita conocer una serie de comandos o instrucciones de alto nivel (limpia display, posicionar cursor, etc.) que le permitirán mostrar mensajes o animaciones sobre la pantalla de forma sencilla. Para comunicarse con el controlador del display se dispone de un interfaz paralelo al exterior, de fácil conexión a otros microcontroladores o microprocesadores.
  • 4. Derlis Hernández Lara 4 Figura 1.- Microcontrolador HD44780, en la parte trasera del LCD. Conexiones a este tipo de LCD: El número de pines de un display alfanumérico es normalmente de 14 (o 16 si el LCD es retroiluminado) y son compatibles TTL. En la tabla 1 se muestra el significado de las señales de cada pin. Hay tres tipos de señales en el LCD: de alimentación, de control y de datos.
  • 5. Derlis Hernández Lara 5 Según la operación que se desee realizar sobre el módulo de cristal líquido, los pines de control E, RS y R/W deben tener un estado determinado. Además, debe tener en el bus de datos un código que indique un caracter para mostrar en la pantalla o una instrucción de control. En la figura 2 se muestra el diagrama de tiempos que se debe cumplir para manejar el módulo. Figura 2.- Diagrama de tiempo del módulo LCD. El módulo LCD responde a un conjunto especial de instrucciones, estas deben ser enviadas por el microcontrolador o sistema de control al display, según la operación que se requiera, obsérvese figura 3. La interface entre el microcontrolador y el display de cristal líquido se puede hacer con el bus de datos trabajando a 4 u 8 bits. Las señales de control trabajan de la misma forma en cualquiera de los dos casos, la diferencia se establece en el momento de iniciar el sistema, ya que existe una instrucción que permite establecer dicha configuración. Los caracteres que se envían al display se almacenan en la memoria RAM del módulo. Existen posiciones de memoria RAM, cuyos datos son visibles en la pantalla y otras que no son visibles, estas últimas se pueden utilizar para guardar caracteres que luego se desplazan hacia la parte visible. Es importante anotar que sólo se pueden mostrar caracteres ASCII de 7 bits, por lo tanto algunos caracteres especiales no se pueden ver (se debe tener a la mano una tabla de los caracteres ASCII para conocer los datos que son prohibidos). Por otra parte, se tiene la opción de crear caracteres especiales (creados por el programador), y almacenarlos en la memoria RAM que posee el módulo.
  • 6. Derlis Hernández Lara 6 Figura 3.- Conjunto de instrucciones del módulo LCD.
  • 7. Derlis Hernández Lara 7 DESARROLLO: Realizar un programa y circuito correspondiente que funcione como un taxímetro, el cual aumenta la tarifa a cobrar cada 45 segundos o cada 250 metros. Aumento por tiempo: 1° Para la parte de los 45 segundos, sabiendo que TMR1 puede contar hasta 65535 y que además se conforma de dos registros TMR1H y TMR1L, se utiliza como temporizador. Se decide programar una temporización de 0.5 segundos (500 ms), que después será ejecutada 90 veces para así tener una temporización total de 45 segundos utilizando un cristal de 4 MHz como oscilador principal del microcontrolador. Si el oscilador= 4 MHz; Tosc=0.25µs Para alcanzar el valor necesario se utilizará el preescaler. Si lo colocamos a 1:8 se obtendrá el valor deseado: Retardo=4*Tosc*TMR1*Preescaler Para calcular el valor a precargar en TMR1: Retardo=4*0.25us * 62500*8 Retardo=500 ms 65535-62500=3035 Por lo tanto 3035 es el valor a precargar en TMR1 para lograr los 0.5 s. Se apoyó en el bit de desborde del módulo timer 1 TMR1F. Si se cuenta 90 veces esta temporización se logran los 45 segundos buscados, la programación y simulación se muestra a continuación: Figura 4.- Simulación de los 500 ms, al precargar TMR1 con 3035.
  • 8. Derlis Hernández Lara 8 Figura 5.- Código para el aumento por tiempo, cada 45 segundos la tarifa aumenta una unidad. Figura 6.- Simulación de los 45 segundos, al temporizar TMR1 con 500ms durante 90 ocasiones. Los registros usados para configurar TMR1 serán descritos con mayor detalle más adelante, ya que se volverá a usar este timer.
  • 9. Derlis Hernández Lara 9 Aumento por distancia: Partiendo de ciertos datos se determinará a cuantos pulsos equivalen 250 metros, que es la distancia a la cual la tarifa aumenta en una unidad. Para así poder configurar el TMR1 de manera correcta como contador de pulsos externos en el pin RC0. 2° Se sabe que la velocidad tangencial a la que circula el vehículo está relacionada con el diámetro de sus ruedas, para saber la distancia recorrida no interesa por el momento la velocidad, pero si el diámetro de la rueda. En la figura 7 se muestra un ejemplo de cómo se obtiene el diámetro total de una llanta. Figura 7.- Ejemplo de cómo obtener el diámetro total de una llanta. Para este trabajo en específico se propone una rueda con un radio de 26 cm (.26 m), luego entonces su diámetro es de 52 cm (.52 m), para saber cuántas vueltas debe dar esa rueda para recorrer 250 m, solo se debe conocer su perímetro y este multiplicado por el número de vueltas debe dar 250 m. La rueda debe dar 153 vueltas para recorrer 250 m. Ahora bien, hay que tener en cuenta cómo va a ser el sensor que estará midiendo las vueltas de la rueda, se propone que el sensor sea óptico acoplado a una rueda dentada de 4 dientes, lo que significa que cada 4 pulsos obtenidos equivale a una vuelta completa de la rueda. Entonces: 153*4=612
  • 10. Derlis Hernández Lara 10 Se deben de contar 612 pulsos en RC0 para incrementar la tarifa en una unidad debido al aumento por cada 250 m. Para esto se configura TMR1 como contador de pulso externos en RC0. Los registros involucrados son: INTCON, T1CON (figura 9), TMR1H, TMR1L y la interrupción particular PIE1. El diagrama de bloques correspondiente a TMR1 se muestra en la figura 8. Como se necesitan contar 612 pulsos, el valor a precargar en TMR1 es: Si bien es cierto que TMR1 es de 16 bits y puede contar hasta 65535, pensando en el momento de enviar los datos al LCD para mostrar el monto a pagar, es más fácil trabajar con 8 bits para la parte de la transformación del dato en código ASCII, por eso se optó por solo trabajar con la parte baja del registro que es TMR1L y para poder contar los 612 pulsos se tienes que usar el preescaler de 4, lo que indica que cada 4 pulsos aumentara un valor el registro TMR1. 612/4=153; Luego entonces habrá que contar 153 en TMR1 para que se produzca el aumento correspondiente. Para lo cual TMR1L que es la parte baja de TMR1 sería precargado con: 255-153=102 Entonces los valores a precargar son: TMR1H=255 TMR1L=102 Con esta configuración cada que se desborde TMR1 se generara una interrupción en donde se incrementara la tarifa como corresponde. En la figura 10 se muestra el código correspondiente a esta etapa. Figura 8.- Diagrama a bloques del registro TMR1.
  • 11. Derlis Hernández Lara 11 Figura 9.- Registro para configurar TMR1 como contador.
  • 12. Derlis Hernández Lara 12 Figura 10.- Código correspondiente a la configuración de TMR1 como contador para el incremento de la tarida por distancia (cada 250 m). Mostrar tarifa en LCD: Para enviar los datos que se desean mostrar en la LCD, se considera toda la explicación teórica-practica comentada anteriormente. 3° Lo primero es decidir por qué puerto del PIC se enviaran los datos correspondientes al LCD, para este caso se utiliza el puerto B para el bus de bidireccional de datos (DB0- DB7) y el puerto E para las señales de control (RS, R/W y E). La configuración se muestra en la siguiente figura 11.
  • 13. Derlis Hernández Lara 13 Figura 11.- Configuración de puertos para el control de LCD. Ahora se necesitan rutinas que le indiquen al LCD que deseamos hacer, como encender el LCD, posicionarlo en alguna celda en específico, indicarle que se mandara una instrucción o un dato, enviar datos para su impresión en el LCD, actualizar la tarifa y opción de cobre correspondiente, borrar pantalla, etc.; dichas rutinas se muestran a continuación (figura 12).
  • 15. Derlis Hernández Lara 15 RETURN Figura 12.- Subrutinas para gobernar el LCD.
  • 16. Derlis Hernández Lara 16 Para la parte de pintar el dato deseado en la pantalla, hay que recordar que el LCD espera el codigo ASCII del carácter a pintar, por lo que si la mandas un número este pintara el equivalente en ASCII a dicho número, para lo que hay que trasformar dicho número a su equivalente en ASCII, existen varios metodos para realizar esto, en este caso se propone trasformar el valor de la tarifa (8 bits) al sistema BCD y apartir de allí obtener su equivalente en ASCII, la transformación a BCD se realiza mediante restas sucesivas, para obtener el equivalente a ASCII se le suma 30 en hexadecimal, el codigo correspondiente se muestra a continuación en la figura 13. Figura 13.- Obtención del código ASCII para enviar al LCD. Comentarios: Existe un criterio para decidir cuándo se aumenta la tarifa por tiempo y cuando por distancia, al cual se le llama velocidad critica.
  • 17. Derlis Hernández Lara 17 Hay tres formas básicas según las cuales se computa por tiempo o por distancia. Pero en la mayoría de los casos el tiempo y la distancia están vinculados. Para la más común la condición es la siguiente: Para el caso de estudio: Si aumenta $1.00 cada 45 s, en hora aumentará: 3600 s / 45 s= $80.00 cada hora. Si aumenta $1.00 cada 250 m, en 250 m aumentará: 1000 m / 250 m= $4.00 cada Km. Lo que indica que si el vehículo está avanzado a más de 20 Km/h el aumento deberá ser por distancia de lo contrario será por tiempo. Las tres formas de pasar a contar por tiempo o distancia son: manualmente (a través de un botón), automáticamente al detenerse completamente el vehículo por más de un determinado tiempo, o automáticamente a través de la velocidad de crítica (la más utilizada). La velocidad de crítica es la velocidad que marca el límite entre contar por tiempo, o por distancia, según cobre más. Se calcula automáticamente a partir de los valores de distancia y tiempo, y puede deducirse con una regla de tres. Para saber a cuantos pulsos por segundo equivalen 20 Km/h, se parte de la expresión de velocidad tangencial que se obtuvo (lo cual se pondrá más adelante): Velocidad=3/2 (dato) (Km/h) Dato: Pulsos por segundo Luego entonces si sabemos a partir de 20Km/h se cobrara por distancia: Lo que indica que si en un segundo contamos 14 pulsos de decide aumentar la tarifa por distancia, de lo contrario será por tiempo. Para este caso no se introdujo esta consideración en el proyecto y se estableció que la selección de elegir una u otra opción fuera manual a través de un interruptor (que también es correcta según la teoría), pero si se desea acoplar la decisión automática, solo hay que contar cuantos pulsos se leen en un segundo y con base en ello decidir.
  • 18. Derlis Hernández Lara 18 Constante para el cálculo de velocidad: Se propone un radio de rueda de 26 cm y una rudea con 4 muescas para la parte del sensor (cada 4 pulsos detectados una vuelta completa de la rueda). Dato=Pulsos por segundo
  • 19. Derlis Hernández Lara 19 3/2 multiplicado por dato sera el valor en Km/h calculados, según las consideraciones anteriores. Conclusiones: Con la elaboración de este proyecto se desarrollaron las habilidades necesarias para poder analizar y configurar aspectos básicos a la hora de usar un microcontrolador y sus diferentes periféricos, se aplicaron los conceptos de contador, temporizador, manejo de LCD etc., además de entender cómo funciona un taxímetro y las consideraciones físicas que esto conlleva a la hora de diseñar uno, como lo son diámetro de la rueda, velocidad angular, velocidad tangencial, frecuencia, etc. La parte más laboriosa fue el control del LCD en ensamblador, pero una vez logrado este objetivo se obtiene la destreza para enfrentar otros problemas que necesiten LCD, sin necesidad de dedicar el mismo tiempo a su control. Además de que se reafirma que los timer de los microcontroladores son una herramienta sumamente importante en la solución de muchas necesidades y que es casi seguro que se encuentren en la mayoría de las aplicaciones a realizar. Nota: Se anexa el código completo en ensamblador del taxímetro diseñado y simulación en Proteus (figura 14). Referencias: “PICmicro Mid-Range MCU Family Reference Manual”, Microchip rev/DS33023A, December 1997. “PIC16F887 Data sheet” Microchiop rev/30292c, 2001 “MAX232 Data sheet”, Texas Instruments, 2003. HD44780U (LCD-II), Data sheet. JHD162A SERIES, Data sheet. “Como gobernar un display LCD alfanumérico basado en el controlador HD44780”, José Ignacio Suárez Marcelo.
  • 20. Derlis Hernández Lara 20 Anexo: ; TAXÍMETRO CON OPCIÓN A ELEGIR AUMENTO DE TARIFA POR TIEMPO O POR DIDTANCIA: ; COMO CONFIGUARACION INICIAL (POR DEFAUL) ESTA EN OPCIÓN DE COBRAR POR TIEMPO, ORPIMIENDO UN BOTON ; CAMBIARÁ A COBRO POR DISTANCIA. ; PROYECTO TAXIMETRO PROCESSOR 16F887 INCLUDE P16F887.INC TARIFA EQU 020 ; SE ASIGNA LA ETIQUETA TARIFA A LA LOCALDAD 20 EN LA MEMORIA CONT EQU 021 ;VARIABLES PARA EL RETARDO DEL ENABLE DE LA LCD VAL1 EQU 022 VAL2 EQU 023 ;VARIABLES PARA SEPARAR EL RESULTADO DE LA TARIFA EN VALOR BCD UNIDADES EQU 024 DECENAS EQU 025 CENTENAS EQU 026 RESTO EQU 027 ORG 0 ;SE INICIA A PARTIR DE LA DIRECCIÓN CERO EN LA MEMORIA DE PROGRAMA GOTO INICIO ORG 4 GOTO INTER INICIO ;______________________________________________________________________________ ;LCD ;CONFIGURACIÓN DE PUERTOS BSF STATUS,RP0 ; BANCO 1 CLRF TRISE ; SE CONFIGURA COMO SALIDAS EL PUERTO E BSF STATUS,RP1 ; BANCO 3 MOVLW 01F; 0001 1111 MOVWF ANSEL BCF STATUS,RP1 ; BANCO 1 BCF STATUS,RP0 ; BANCO 0 MOVLW TRISD MOVWF FSR ; DIRECCIONAMIENTO INDIRECTO ;_______________________________________________________________________________ ;PORTA COMO ENTRADA: PARA EL INTERRUPTOR DE SELECCIÓN EL MODO DE AUMENTO DE LA TARIFA BSF STATUS,RP0 ;BANCO 1 MOVLW b'00111111' MOVWF TRISA BSF STATUS,RP1; BANCO 3 CLRF ANSEL ;SE CONFIGURA DE MANERA DIGITAL BCF STATUS,RP0 BCF STATUS,RP1 ;______________________________________________________________________________ ;AUMENTO POR TIEMPO: ;_____________________________________________________________________________ MOVLW .8 MOVWF TARIFA ;INICIO DEL PROGRAMA: INICIO1 CALL LCDON CALL IMPRIME_TARIFA OPCION: CALL ACTUALIZA_OPCION2 BTFSC PORTA,0 GOTO AUMENTO_DISTANCIA
  • 21. Derlis Hernández Lara 21 CALL AUMENTO_TIEMPO CALL ACTUALIZA_TARIFA GOTO OPCION ;AUMENTO DE TARIFA POR TIEMPO, CADA 45 SEGUNDOS AUMENTA $1 PESO AUMENTO_TIEMPO: MOVLW .90 MOVWF CONT MOVLW 030 ; SE ELIGE EL PREESCALER DE TMR1 1:8 MOVWF T1CON BCF PIR1,TMR1IF _45 CALL RETARDO DECFSZ CONT,1 GOTO _45 TAR1 MOVLW .1 ADDWF TARIFA,F ; INCREMENTA LA TARIFA EN UNA UNIDAD CADA 45 SEGUNDOS RETURN RETARDO BSF T1CON,TMR1ON ;HABÍLITA TMR1 MOVLW 00B ;11 MOVWF TMR1H ;SE INICIALIZA CON ESTOS VALORES, LOS REGISTROS DE TMR1 (3035) MOVLW 0DB ;219 MOVWF TMR1L BSF T1CON,TMR1ON ;HABÍLITA TMR1 ESPERA BTFSS PIR1,TMR1IF GOTO ESPERA BCF T1CON,TMR1ON ;SE REINICIA LA BANDERA DE TMR1 PARA INICIAR EL PROCESO DE NUEVO BCF PIR1,TMR1IF RETURN ;______________________________________________________________________________________ ;AUMENTO POR DISTANCIA ;______________________________________________________________________________________ AUMENTO_DISTANCIA CALL ACTUALIZA_OPCION BSF STATUS,RP0 ;BANCO 1 BSF PIE1,0 ;HABILITACIÓN PÁRTICULAR DE TMR1 BCF STATUS,RP0 ;BANCO 0 MOVLW B'11000000' MOVWF INTCON ;HABILITACIÓN GLOBAL DE INTERRUPCIONES PARA EL DESBORDE DE TMR1 ;TMR1 MOVLW 0X27;'0010 0111' MOVWF T1CON ; SE CONFIGURA TMR1 PARA CONTAR PULSOS EXTERNOS Y SE ENCIENDE MOVLW .255 MOVWF TMR1H ; SE INICIALIZA CON LOS VALORES NECECITADOS MOVLW .103 MOVWF TMR1L ;TERMINA CONFIGURAIÓN TIMER CONTEO GOTO CONTEO ;CICLO PARA REALIZAR EL CONTEO HASTA LA INTERRUPCIÓN INTER ;LLAMADA A INTERRUPCIÓN INCF TARIFA CALL ACTUALIZA_TARIFA INCF PORTB BCF PIR1,TMR1IF OPCION1: BTFSS PORTA,0 GOTO OPCION MOVLW .255 MOVWF TMR1H
  • 22. Derlis Hernández Lara 22 MOVLW .103 MOVWF TMR1L RETFIE ;REGRESAR A DONDE SE PRODUJO LA INTERRUPCIÓN ;______________________________________________________________________________________ ;SUBRUTINAS LCD ;SUBRUTINA PARA COLOCAR EL CURSOR EN LA POSICIÓN DESEADA: POSICION1: BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS MOVLW b'10001001' MOVWF PORTD ; INSTRUCCION (SET THE DD RAM ADDRESS ), POSISION 9 DE LA FILA 1 CALL INSTRUCCION BSF PORTE,2; MODO DATO RETURN POSICION2: BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS MOVLW b'11001000' MOVWF PORTD ; INSTRUCCION (SET THE DD RAM ADDRESS ), POSISION 9 DE LA FILA 2 CALL INSTRUCCION BSF PORTE,2; MODO DATO RETURN ;SUBRUTINA PARA ENCENDER LCD LCDON: BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS MOVLW b'00111000' MOVWF PORTD ; INSTRUCCION (FUNCTION SET) CALL INSTRUCCION MOVLW b'00001110' MOVWF PORTD ; INSTRUCCION (LCDON) CALL INSTRUCCION MOVLW b'00000110' ; SELECCIONA LA PRIMERA LÍNEA MOVWF PORTD CALL INSTRUCCION ; SE DA DE ALTA EL COMANDO MOVLW b'10000000' MOVWF PORTD ; INSTRUCCION (ENTRY MODE SET) CALL INSTRUCCION BSF PORTE,2; MODO DATO RETURN ;SUBRUTINA PARA ENVIAR INSTRUCCIONES INSTRUCCION: IINSTRUCCION: BSF PORTE,0 ; EN CERO EL ENABLE CALL DELAY ;TIEMPO DE ESPERA BCF PORTE,0 ;EN CERO EL ENABLE RETURN ;SUBRUTINA DE RETARDO DELAY: MOVLW 0X0F MOVWF VAL2 CICLO: MOVLW 0X4F MOVWF VAL1 CICLO2: DECFSZ VAL1,1 GOTO CICLO2 DECFSZ VAL2,1 GOTO CICLO RETURN ;SUBRUTINA PARA IMPRIMIR EN LA LCD IMPRIME_TARIFA:
  • 23. Derlis Hernández Lara 23 CALL ERASE_LCD ;LIMPIA LCD MOVLW 'T' MOVWF PORTD CALL ENVIA MOVLW 'A' MOVWF PORTD CALL ENVIA MOVLW 'X' MOVWF PORTD CALL ENVIA MOVLW 'I' MOVWF PORTD CALL ENVIA MOVLW ' ' MOVWF PORTD CALL ENVIA MOVLW 'P' MOVWF PORTD CALL ENVIA MOVLW 'O' MOVWF PORTD CALL ENVIA MOVLW 'R' MOVWF PORTD CALL ENVIA MOVLW ' ' MOVWF PORTD CALL ENVIA CALL FILA2 MOVLW 'T' MOVWF PORTD CALL ENVIA MOVLW 'A' MOVWF PORTD CALL ENVIA MOVLW 'R' MOVWF PORTD CALL ENVIA MOVLW 'I' MOVWF PORTD CALL ENVIA MOVLW 'F' MOVWF PORTD CALL ENVIA MOVLW 'A' MOVWF PORTD CALL ENVIA MOVLW '=' MOVWF PORTD CALL ENVIA MOVLW '$' ;IMPRIME EL SIMBOLO "$" MOVWF PORTD CALL ENVIA CALL READ_TIEMPO ;LLAMADA A RUTINA QUE OBTINE EL ;VALOR DE LA TARIFA A PARTIR ;DEL RESULTADO DEL CONV A/D O DEL TIEMPO TRANSCURRIDO MOVF CENTENAS,W ;IMPRIME EL DÍGITO DE LAS CENTENAS MOVWF PORTD CALL ENVIA MOVF DECENAS,W ;IMPRIME EL DÍGITO DE LAS DECENAS MOVWF PORTD CALL ENVIA MOVF UNIDADES,W ;IMPRIME EL DÍGITO DE LAS UNIDADES MOVWF PORTD CALL ENVIA MOVLW ' ' MOVWF PORTD CALL ENVIA MOVLW 'M' MOVWF PORTD CALL ENVIA MOVLW '.'
  • 24. Derlis Hernández Lara 24 MOVWF PORTD CALL ENVIA MOVLW 'N' MOVWF PORTD CALL ENVIA MOVLW '.' MOVWF PORTD CALL ENVIA RETURN ;SUBRUTINA PARA ACTUALIZAR SOLO EL MONTO A PAGAR: ACTUALIZA_TARIFA: CALL POSICION2 CALL READ_TIEMPO ;LLAMADA A RUTINA QUE OBTINE EL ;VALOR DE LA TARIFA A PARTIR ;DEL RESULTADO DEL CONV A/D O DEL TIEMPO TRANSCURRIDO MOVF CENTENAS,W ;IMPRIME EL DÍGITO DE LAS CENTENAS MOVWF PORTD CALL ENVIA MOVF DECENAS,W ;IMPRIME EL DÍGITO DE LAS DECENAS MOVWF PORTD CALL ENVIA MOVF UNIDADES,W ;IMPRIME EL DÍGITO DE LAS UNIDADES MOVWF PORTD CALL ENVIA RETURN ACTUALIZA_OPCION: CALL POSICION1 MOVLW 'M' MOVWF PORTD CALL ENVIA MOVLW 'E' MOVWF PORTD CALL ENVIA MOVLW 'T' MOVWF PORTD CALL ENVIA MOVLW 'R' MOVWF PORTD CALL ENVIA MOVLW 'O' MOVWF PORTD CALL ENVIA MOVLW 'S' MOVWF PORTD CALL ENVIA RETURN ACTUALIZA_OPCION2: CALL POSICION1 MOVLW 'T' MOVWF PORTD CALL ENVIA MOVLW 'I' MOVWF PORTD CALL ENVIA MOVLW 'E' MOVWF PORTD CALL ENVIA MOVLW 'M' MOVWF PORTD CALL ENVIA MOVLW 'P' MOVWF PORTD CALL ENVIA MOVLW 'O' MOVWF PORTD CALL ENVIA RETURN ;SUBRUTINA PARA ENVIAR DATOS ENVIA: BSF PORTE,2 ; EL RS EN 1 INDICANDO QUE ES UN DATO BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS
  • 25. Derlis Hernández Lara 25 CALL INSTRUCCION RETURN ;SUBRUTINA PARA CAMBIAR A LINEA2 DEL LCD FILA2: BCF PORTE,2 ; EL RS EN 0 INDICANDO UNA INSTRUCCION BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS MOVLW 0XC0 MOVWF PORTD ; INSTRUCCION (FUNCTION SET) CALL INSTRUCCION; RETURN ;RUTINA PARA LIMPAR PANTALLA LCD ERASE_LCD: BCF PORTE,2 ; RS=0 MODO INSTRUCCION BCF PORTE,1 ; EN 0 EL RW INDICANDO QUE ESCRIBIREMOS CLRF INDF ; EL PUERTO D COMO SALIDAS MOVLW 0X01 ; 0X01 LIMPIA LA PANTALLA EN EL LCD MOVWF PORTD CALL INSTRUCCION ; SE DA DE ALTA EL COMANDO BSF PORTE,2 ; RS=1 MODO DATO RETURN READ_TIEMPO: CLRF CENTENAS ;SE LIMPIAN LOS REGISTROS PARA LA CONVERSIÓN BCD CLRF DECENAS CLRF UNIDADES MOVF TARIFA,W MOVWF RESTO ;GUARDA EL VALOR DE TMR1 EN RESTO ;BCD ;COMIENZA EL PROCESO DE OTENCIÓN DE VALORES BCD ;PARA CENTENAS, DECENAS Y UNIDADES ATRAVES DE RESTAS ;SUCESIVAS. CENTENAS1 MOVLW D'100' ;W=D'100' SUBWF RESTO,W ;RESTO - D'100' (W) BTFSS STATUS,C ;RESTO MENOR QUE D'100'? GOTO DECENAS1 ;SI MOVWF RESTO ;NO, SALVA EL RESTO INCF CENTENAS,1 ;INCREMENTA EL CONTADOR DE CENTENAS BCD GOTO CENTENAS1 ;REALIZA OTRA RESTA DECENAS1 MOVLW D'10' ;W=D'10' SUBWF RESTO,W ;RESTO - D'10' (W) BTFSS STATUS,C ;RESTO MENOR QUE D'10'? GOTO UNIDADES1 ;SI MOVWF RESTO ;NO, SALVA EL RESTO INCF DECENAS,1 ;INCREMENTA EL CONTADOR DE CENTENAS BCD GOTO DECENAS1 ;REALIZA OTRA RESTA UNIDADES1 MOVF RESTO,W ;EL RESTO SON LA UNIDADES BCD MOVWF UNIDADES ;RUTINA QUE OBTIENE EL EQUIVALENTE EN ASCII OBTEN_ASCII MOVLW H'30' IORWF UNIDADES,F IORWF DECENAS,F IORWF CENTENAS,F RETURN END
  • 26. Derlis Hernández Lara 26 Figura 14. Simulación del taxímetro en Proteus.