Calculadora PIC - Ensamblador

November 30, 2018 | Author: Santy Marchulo Venegas | Category: Microcontroller, Peripheral, Pic Microcontroller, Areas Of Computer Science, Office Equipment
Share Embed Donate


Short Description

Programada en Ensamblador...

Description

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA Octubre 2017  – Febrero 2018

CARRERA DE INGENIERIA ELECTRONICA EN TELECOMUNICACIONES  ASIGNATURA: MICROCONTROLADORES NRC: 2094 INFORME/TRABAJO PREPARATORIO DE LABORATORIO No.1 Profesor: Ing. Vanessa Vargas INTEGRANTES 1. Herrera Diana 2. Sampedro Darwin 3. Venegas Marcelo

11/12/2017 - SANGOLQUI

Tema:

UTILIZACIÓN DE PUERTOS DE E/S, TECLADO MATRICIAL Y PANTALLA LCD 1. Objetivo:

 Al finalizar este laboratorio, el estudiante debe ser capaz de entender y utilizar las funciones básicas de los puertos de entrada y salida del Microcontrolador PIC 16F877A a través del manejo de un teclado matricial y una pantalla LCD como periféricos. 2. Materiales y Equipos:

Materiales: 

Microcontrolador PIC 16F877A



Elementos que constituyen su circuito básico



Teclado matricial



Pantalla LCD



Grabador de PIC

Herramientas: 

Plataforma de Desarrollo MPLAB IDE –X



Software de grabación para el PIC seleccionado

3. Procedimiento:

3.1.

PREPARACION

3.1.1. Leer el capítulo 5 del texto guía. 3.1.2. Luego de consultar la bibliografía recomendada recomendada en el curso o en otras fuentes, responda a las siguientes preguntas. En todas sus respuestas indique la referencia bibliográfica empleada.

Tema:

UTILIZACIÓN DE PUERTOS DE E/S, TECLADO MATRICIAL Y PANTALLA LCD 1. Objetivo:

 Al finalizar este laboratorio, el estudiante debe ser capaz de entender y utilizar las funciones básicas de los puertos de entrada y salida del Microcontrolador PIC 16F877A a través del manejo de un teclado matricial y una pantalla LCD como periféricos. 2. Materiales y Equipos:

Materiales: 

Microcontrolador PIC 16F877A



Elementos que constituyen su circuito básico



Teclado matricial



Pantalla LCD



Grabador de PIC

Herramientas: 

Plataforma de Desarrollo MPLAB IDE –X



Software de grabación para el PIC seleccionado

3. Procedimiento:

3.1.

PREPARACION

3.1.1. Leer el capítulo 5 del texto guía. 3.1.2. Luego de consultar la bibliografía recomendada recomendada en el curso o en otras fuentes, responda a las siguientes preguntas. En todas sus respuestas indique la referencia bibliográfica empleada.

1. Describa brevemente brevemente los conceptos de puerto y periférico, los métodos de transferencia paralela de datos, y las técnicas de entrada y salida. Puerto: circuito que forma parte del microcontrolador y sirve de interfaz con

algún dispositivo externo. Si lo vemos desde el ámbito de programación, los puertos se identifican por sus direcciones, ubicadas por lo general en la memoria de datos. Periférico: dispositivo externo conectado al microcontrolador. Algunos de

periféricos tenemos interruptores, teclados matriciales, displays de 7 segmentos o de cristal líquido. Por supuesto, todos estos periféricos deben incluir un circuito de interfaz que es necesario para conectar a los puertos del microcontrolador.  Métodos de trans ferenci fer enci a paralel paralela a de datos datos : la transferencia de datos entre

un periférico y un puerto se realiza básicamente mediante uno de los métodos siguientes:  

E/S simple: es caracterizada porque entre el puerto y el periférico solamente se transfieren los bits del dato, sin señales de control.

 

E/S controlada: en cambio en este método se establece una “conversación” entre el puerto y el periférico. Para realizar la E/S

controlada se necesitan de algunas señales de control y algún protocolo o reglas de entendimiento uno y otro dispositivo. Técnica Técnic as de entrada entrada y s alida: lida: posee dos técnicas las cuales son 

E/S programada: esta técnica técnica es basada en software. Se considera considera la presencia de algún indicador de estado del periférico, el estado de este indicador es un bit cuyo valor se reconoce desde el programa que atiende al periférico.



E/S por interrupción: se se caracteriza porque porque el periférico notifica cuando cuando necesita atención. El aviso se lo realiza mediante la solicitud de interrupción al microcontrolador. microcontrolador. Al obtener obtener una solicitud solicitud de interrupción interrupción generada por el periférico, el microcontrolador interrumpe la ejecución del programa y ejecuta la subrutina de atención del periférico.

2. ¿Qué registros de funciones especiales están asociados asociados a un puerto paralelo cualquiera? Para la manipulación de los puertos paralelos hay dos registros de funciones especiales para cada uno de los puertos, que se denominan: a) PORT (PORTA, PORTB, etc): estos registros almacenan el dato de salida del puerto. b) TRIS (TRISA, TRISB, etc): estos registros registros sirven para programar programar cada línea del puerto correspondiente como entrada o salida. 3. ¿Cómo se programa que un terminal cualquiera cualquiera de un puerto paralelo sea entrada o salida? Utilizamos los registros TRIS ya que son los correspondientes puertos de entrada o salida. Cada bit de cualquier registro TRIS se programa de la siguiente manera: TRIS

= 1 programa la línea del puerto como entrada = 0 programa la línea del puerto como salida.

4. La instrucción movf PORTA, PORTA, W, ¿coloca en W el valor del registro de funciones especiales PORTA o coloca el valor lógico de los terminales del puerto A? En este caso coloca los valores lógicos de los terminales del puerto A, para usar el valor del registro de funciones tendríamos que usar la instrucción de la siguiente manera: movf TRISA,W 5. ¿Qué problemas puede presentar la modificación individual por programa de un bit de un puerto paralelo? Para modificar la configuración de un puerto paralelo es preferible hacerlo con una palabra en este caso, el pic 16F877A, de 8 bits puesto que si se modifica un único bit entonces en caso de estar precargada información externa en este

puerto, al cambiar por ejemplo de entrada a salida entonces un solo bit significa una sola patilla del microcontrolador por lo tanto puede existir un corto, porque si externamente se introduce un 0 lógico y desde el programa se está enviando un 1 entonces no se sabrá cuál es el estado del pin en ese instante. 6. Comente las técnicas de E/S programada e interrupción en cuanto a recursos necesarios y velocidad de la transferencia de datos. E/S programada: programada:

Cuenta con dos algoritmos por consulta y por espera. Por consulta el programa pasa a otra tarea si el periférico no está listo, mientras que por espera el programa que atiende al periférico espera a que esté listo para at enderle. Así el algoritmo por consulta aprovecha el tiempo del microcontrolador ya que pasa a otra tarea como podría ser atender a otro periférico. E/S interrupción:

Esta técnica interrumpe al programa que este ejecutando en curso y pasa a atender la subrutina de atención al periférico. Debido a que es una interrupción se debe utilizar hardware para tratar la interrupción es decir un circuito necesario para solicitar la interrupción y luego tratarla. En cuanto a velocidad, la velocidad de transferencia de datos de un periférico hacia el microcontrolador en ambos casos se encuentra limitada por la velocidad con la que se ejecuten las instrucciones de un programa elaborado para la comunicación entre el microcontrolador y el periférico 7. ¿Qué factor limita la velocidad velocidad de transferencia transferencia de datos en las las técnicas de E/S programada y por interrupción? ¿Qué solución hay para esto? El factor que limita la transferencia de datos es el CPU ya que los datos transferidos desde la memoria hacia los puertos de E/S tienen que pasar por el CPU del microcontrolador y esto limita la velocidad del proceso. La solución es utilizar una tercera técnica llamada DMA (acceso directo a memoria) la cual consiste en que la transferencia de datos se realiza directamente entre el periférico y la memoria. Se implementa por hardware logrando mayor velocidad en transferencia de datos, los microcontroladores PIC no la emplean mientras que los otros microcontroladores la usan muy poco.

 ACTIVIDADES 3.2.1. Diseñe una Calculadora de 2 dígitos decimales, que sume, reste, multiplique y divida. El ingreso de Datos se realiza mediante el uso de un teclado matricial. En tanto que la visualización de la información tanto de los datos ingresados como de la respuesta se despliega en una pantalla LCD. 3.2.2 Implementar el código en lenguaje ensamblador. a) PIC 16F628A

list p=16f628a #include "p16F628A.inc"  __config 3F18 org 0x00 bsf STATUS,RP0 movlw 0XF0 movwf TRISB clrf TRISA bcf OPTION_REG,NOT_RBPU bcf STATUS,RP0 movlw 0x00 movwf PORTA INICIO: movlw 0x0E movwf PORTB btfss PORTB,4 call UNO btfss PORTB,5 call DOS btfss PORTB,6 call TRES btfss PORTB,7 call LETRA_A movlw 0x0D movwf PORTB btfss PORTB,4 call CUATRO btfss PORTB,5 call CINCO

btfss PORTB,6 call SEIS btfss PORTB,7 call LETRA_B movlw 0x0B movwf PORTB btfss PORTB,4 call SIETE btfss PORTB,5 call OCHO btfss PORTB,6 call NUEVE btfss PORTB,7 call LETRA_C movlw 0x07 movwf PORTB btfss PORTB,4 call ASTERISCO btfss PORTB,5 call CERO btfss PORTB,6 call NUMERAL btfss PORTB,7 call LETRA_D goto INICIO CERO: movlw 0x80 movwf PORTA btfss PORTB,5 goto CERO movlw 0x00 movwf PORTA return UNO: movlw 0x81 movwf PORTA btfss PORTB,4 goto UNO movlw 0x01 movwf PORTA return DOS: movlw 0x82

movwf PORTA btfss PORTB,5 goto DOS movlw 0x02 movwf PORTA return TRES: movlw 0x83 movwf PORTA btfss PORTB,6 goto TRES movlw 0x03 movwf PORTA return CUATRO: movlw 0x84 movwf PORTA btfss PORTB,4 goto CUATRO movlw 0x04 movwf PORTA return CINCO: movlw 0x85 movwf PORTA btfss PORTB,5 goto CINCO movlw 0x05 movwf PORTA return SEIS: movlw 0x86 movwf PORTA btfss PORTB,6 goto SEIS movlw 0x06 movwf PORTA return SIETE: movlw 0x87 movwf PORTA btfss PORTB,4 goto SIETE movlw 0x07

movwf PORTA return OCHO: movlw 0x88 movwf PORTA btfss PORTB,5 goto OCHO movlw 0x08 movwf PORTA return NUEVE: movlw 0x89 movwf PORTA btfss PORTB,6 goto NUEVE movlw 0x09 movwf PORTA return LETRA_A: movlw 0x8A movwf PORTA btfss PORTB,7 goto LETRA_A movlw 0x0A movwf PORTA return LETRA_B: movlw 0x8B movwf PORTA btfss PORTB,7 goto LETRA_B movlw 0x0B movwf PORTA return LETRA_C: movlw 0x8C movwf PORTA btfss PORTB,7 goto LETRA_C movlw 0x0C movwf PORTA return LETRA_D: movlw 0x8D

movwf PORTA btfss PORTB,7 goto LETRA_D movlw 0x0D movwf PORTA return NUMERAL: movlw 0x8E movwf PORTA btfss PORTB,6 goto NUMERAL movlw 0x0E movwf PORTA return  ASTERISCO: movlw 0x8F movwf PORTA btfss PORTB,4 goto ASTERISCO movlw 0x0F movwf PORTA return end628A b) PIC 16F877A

#include "p16F877A.inc" list p=16f877A  __config(0x3f71) CBLOCK 0x20 RETARDO1 RETARDO2 RETARDO3 DATO RESPALDO OPERACION RESPUESTA FILA NUMERO1 NUMERO2

  DSIGNO SIGUE N M VALOR endc ORG 0X00 #DEFINE RS PORTC,6 #DEFINE E PORTC,5 INICIO: bsf STATUS,RP0 movlw 0x00 movwf TRISC movlw 0x1F movwf TRISB bcf STATUS,RP0 movlw 0x00 movwf PORTC LCD: movlw 0x03 call ENVIO_CONTROL movlw 0x02 call ENVIO_CONTROL movlw 0x02 call ENVIO_CONTROL movlw 0x08 call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL movlw 0x0E call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL movlw 0x01 call ENVIO_CONTROL movlw 0x00 movwf RESPALDO movwf FILA movwf SIGUE movwf OPERACION movlw 0x08 movwf VALOR LECTURA: btfss PORTB,4

goto LECTURA L1: btfsc PORTB,4 goto L1 movf PORTB,0 andlw 0x0F movwf DATO movlw 0x0A subwf DATO,0 btfss STATUS,C call NUMEROS movlw 0x02 movwf SIGUE movlw 0x0A subwf DATO,0 btfsc STATUS,Z call BORRAR movlw 0x0B subwf DATO,0 btfsc STATUS,Z call SUMA movlw 0x0C subwf DATO,0 btfsc STATUS,Z call RESTA movlw 0x0D subwf DATO,0 btfsc STATUS,Z call IGUAL movlw 0x0E subwf DATO,0 btfsc STATUS,Z call NUEVA_OPERACION movlw 0x0F subwf DATO,0 btfsc STATUS,Z call SIGNO goto LECTURA NUMEROS: movlw 0x01 subwf SIGUE,0 btfsc STATUS,Z return movlw 0x02

subwf SIGUE,0 btfsc STATUS,Z return movlw 0x03 call ENVIO_DATO movf DATO,0 call ENVIO_DATO movf DATO,0 movwf DSIGNO addwf RESPALDO,1 swapf RESPALDO,1 movlw 0x02 movwf SIGUE return BORRAR: movlw 0x00 call ENVIO_CONTROL movlw 0x01 call ENVIO_CONTROL clrf RESPALDO clrf OPERACION clrf RESPUESTA clrf FILA clrf SIGUE clrf N clrf M movlw 0x08 movwf VALOR return SUMA: movlw 0x01 subwf SIGUE,0 btfsc STATUS,Z return movlw 0x02 call ENVIO_DATO movlw 0x0B call ENVIO_DATO movlw 0x01 movwf OPERACION movlw 0x00 movwf SIGUE return RESTA:

movlw 0x01 subwf SIGUE,0 btfsc STATUS,Z return movlw 0x02 call ENVIO_DATO movlw 0x0D call ENVIO_DATO movlw 0x02 movwf OPERACION movlw 0x00 movwf SIGUE return IGUAL: movlw 0x01 subwf SIGUE,0 btfsc STATUS,Z return movf VALOR,0 call ENVIO_CONTROL movlw 0x0A call ENVIO_CONTROL movlw 0x03 call ENVIO_DATO movlw 0x0D call ENVIO_DATO movf RESPALDO,0 andlw 0x0F movwf NUMERO1 swapf RESPALDO,0 andlw 0x0F movwf NUMERO2 movlw 0x01 subwf OPERACION,0 btfsc STATUS,Z call MAS movlw 0x02 subwf OPERACION,0 btfsc STATUS,Z call MENOS movlw 0x01 movwf SIGUE return MAS:

movlw 0x01 subwf N,0 btfsc STATUS,Z goto MAS1 movlw 0x01 subwf M,0 btfsc STATUS,Z goto MAS3 movf NUMERO1,0 addwf NUMERO2,0 movwf RESPUESTA movlw 0x0A subwf RESPUESTA,0 btfsc STATUS,C call MAYOR movlw 0x03 call ENVIO_DATO movf RESPUESTA,0 call ENVIO_DATO return MAS1: movlw 0x01 subwf M,0 btfsc STATUS,Z goto MAS2 movf NUMERO1,0 movwf RESPUESTA movf NUMERO2,0 movwf NUMERO1 movf RESPUESTA,0 movwf NUMERO2 clrf N call MENOS return MAS2: clrf M clrf N movlw 0x02 call ENVIO_DATO movlw 0x0D call ENVIO_DATO call MAS return MAS3:

clrf M call MENOS return MAYOR: movlw 0x0A subwf RESPUESTA,1 movlw 0x03 call ENVIO_DATO movlw 0x01 call ENVIO_DATO return MENOS: movlw 0x01 subwf N,0 btfsc STATUS,Z goto MENOS1 movlw 0x01 subwf M,0 btfsc STATUS,Z goto MENOS3 movf NUMERO2,0 subwf NUMERO1,0 movwf RESPUESTA btfss STATUS,C call MENOR movlw 0x03 call ENVIO_DATO movf RESPUESTA,0 call ENVIO_DATO return MENOS1: movlw 0x01 subwf M,0 btfsc STATUS,Z goto MENOS2 bsf M,0 goto MAS1 return MENOS2: clrf M goto MAS1 return MENOS3: clrf M

call MAS return MENOR: movlw 0x02 call ENVIO_DATO movlw 0x0D call ENVIO_DATO movf NUMERO1,0 subwf NUMERO2,0 movwf RESPUESTA return NUEVA_OPERACION: movlw 0x00 subwf FILA,0 btfsc STATUS,Z goto F2 movlw 0x01 subwf FILA,0 btfsc STATUS,Z goto F3 movlw 0x02 subwf FILA,0 btfsc STATUS,Z goto F4 movlw 0x03 subwf FILA,0 btfsc STATUS,Z goto F1 return F1: movlw 0x08 movwf VALOR movlw 0x00 call ENVIO_CONTROL movlw 0x01 call ENVIO_CONTROL clrf RESPALDO clrf OPERACION clrf RESPUESTA clrf FILA clrf SIGUE clrf N clrf M return

F2: movlw 0x0C movwf VALOR call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL clrf RESPALDO clrf OPERACION clrf RESPUESTA clrf SIGUE clrf N clrf M incf FILA,1 return F3: movlw 0x09 movwf VALOR call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL clrf RESPALDO clrf OPERACION clrf RESPUESTA clrf SIGUE clrf N clrf M incf FILA,1 return F4: movlw 0x0D movwf VALOR call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL clrf RESPALDO clrf OPERACION clrf RESPUESTA clrf SIGUE clrf N clrf M incf FILA,1 return SIGNO: movlw 0x01

subwf SIGUE,0 btfsc STATUS,Z return movlw 0x00 subwf OPERACION,0 movlw 0x01 btfsc STATUS,Z movwf N btfss STATUS,Z movwf M movlw 0x01 call ENVIO_CONTROL movlw 0x00 call ENVIO_CONTROL movlw 0x02 call ENVIO_DATO movlw 0x08 call ENVIO_DATO movlw 0x02 call ENVIO_DATO movlw 0x0D call ENVIO_DATO movlw 0x03 call ENVIO_DATO movf DSIGNO,0 call ENVIO_DATO movlw 0x02 call ENVIO_DATO movlw 0x09 call ENVIO_DATO return ENVIO_DATO: MOVWF PORTC BSF RS BSF E CALL RETARDODP BCF E CALL RETARDODP RETURN ENVIO_CONTROL: MOVWF PORTC BCF RS BSF E CALL RETARDODP

BCF E CALL RETARDODP RETURN RETARDODP: movlw 0x0B movwf RETARDO3 RET3: movwf RETARDO2 RET2: movwf RETARDO1 RET: decfsz RETARDO1 goto RET decfsz RETARDO2 goto RET2 decfsz RETARDO3 goto RET3 return end

3.2.3 Realizar la simulación del programa.

3.2.4 Implementar el circuito electrónico correspondiente. 4. Bibliografía: Valdés, F., Pallas, R. “Microcontroladores: fundamentos y aplicaciones con PIC”. Ed. Marcombo. Barcelona. 2007.

Planteamiento del problema:

1.1 Programar el PIC 16F628A para que funcione como un decodificador de teclado matricial 4x4, emulando las funciones de un 74C922, en base a la siguiente distribución 1

2

3

4

5

6

7

8

9



Aceptar

0

Limpiar





 _



 _

T T

1.2 Integrar el LCD al microcontrolador 16F877A, en configuración de bus de datos multiplexado con las siguientes funciones. 0-9

Visualiza números 0 - 9  Desplaza hacia la derecha el cursor una  _  posición.  Desplaza hacia la izquierda el cursor una  _  posición.  Desplaza hacia la derecha el texto una T  posición.  Desplaza hacia la izquierda el texto una T  posición. Aceptar Cambia entre filas del LCD Limpiar Limpia el contenido del LCD

2. Objetivos: -

Programar un microcontrolador para que funcione como un decodificador de teclado 4x4. Utilizar subrutinas para generar retardos por software. Aplicar las instrucciones del microcontrolador para generar la señal DA. Integrar un LCD de 16x2.

3. Materiales -

Microcontrolador PIC 16F877A Microcontrolador PIC 16F628 Teclado matricial 4x4 LCD 16x2 Fuente de alimentación Protoboard Multímetro Cristal 4Mhz Capacitores, resistencias, dipswitch, leds, Cables Computador Grabador de PICs

4. Contenido 

FUNDAMENTO TEÓRICO

PIC16f877A: Es un microcontrolador con memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no requiere borrarlo con luz ultravioleta como las versiones EPROM, sino que  permite reprogramarlo nuevamente sin ser borrado con anterioridad. El encapsulado más común para este microcontrolador es el DIP (Dual In-line Package) de 40 pines,  propio para usarlo en experimentación 

        

Set de instrucciones reducidas (tipo RISC), pero con las instrucciones necesarias  para facilitar su manejo. Frecuencia máxima: DX-20MHz Memoria de programa flash palabra de 14 bits: 8KB Posiciones RAM de datos: 368 Posiciones EEPROM de datos: 256 Puertos E/S: A,B,C,D,E Juego de instrucciones: 35 instrucciones Longitud de la instrucción : 14 bits Arquitectura: Harvard CPU: Risc

ASEMBLER:  Es una lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los microcontroladores, en el caso de la familia ‘16F’ solo posee 35 instrucciones.

Gracias a la miniaturización que permite incorporar cada vez más memoria dentro de un microcontrolador sin aumentar prácticamente su costo, han surgido compiladores de lenguajes de alto nivel como Basic y C.

MPLAB X IDE:  Es un Entorno de Desarrollo Integrado por sus siglas en Ingles (IDE) implementado por la empresa de Microchip para desarrollar sistemas basados en microcontroladores PIC. Su distribución es libre y gratuita y se puede descargar directamente del sitio oficial de Microchip. Este editor es modular, permite seleccionar los distintos microcontroladores soportados, además de permitir la grabación de estos circuitos integrados directamente al programador. PIC16F628: El pic 16f628a es un microcontrolador de 8 bit, posee una arquitectura RISC avanzada así como un juego reducido de 35 instrucciones. Este microcontrolador es el remplazo del obsoleto pic16f84a, los pines del pic16f628a son compatibles con el pic16f84a, así se podrían actualizar proyectos que hemos utilizado con el pic16f84a.

TECLADO MATRICIAL 4X4

Conformado por una matriz de pulsadores conformado por cuatro filas y cuatro columnas, cuando no se ha oprimido ninguna tecla, no hay conexión entre filas y columnas. Cuando se oprime una tecla se hace una conexión entre la columna y la fila de la tecla. Muchos teclados comerciales ya traen incluido su decodificador, caso contrario se debe utilizar un chip decodificador.

INICIALIZACION LCD Si bien muchas aplicaciones donde debemos mostrar información podemos resolverlas con display de 7 segmentos, estos presentas algunas limitaciones importantes, por ejemplo: no muestran caracteres alfanuméricos ni ASCII, y tienen un elevado consumo de corriente (recordemos que estamos encendiendo LEDs). Los módulos LCD (display de cristal líquido) solucionan estos inconvenientes y tienen algunas ventajas adicionales como la facilidad que con que se pueden conectar a microprocesadores y microcontroladores, sumado a la óptima  presentación de la información.

El display LCD para funcionar, debe ser inicializado, para lo que se debe recurrir a una secuencia de instrucciones en un orden especifico que solo se realizarán una vez  para configurar el display. El display puede funcionar con un bus de datos de 8 bits y con uno de 4 bits por lo que su secuencia de inicialización es diferente según la forma en la que se va a trabajar. Para esto existen protocolos por parte del fabricante del controlador de los displays, que nos guían para inicializarlos, la inicialización de 8 bits se encuentra en el Anexo 1 y la correspondiente a 4 bits en el Anexo 2.

5. Diagrama de bloques Fuente de  Alimentación 5V

BLOQUE DE ENTRADA TECLADO MATRICIAL 4X4

Uc Pic16F628A DECODIFICADOR TECLADO 4X4

Fuente de alimentación 5V

5

Uc Pic16F877A CONTROL DISPLAY LCD 16X4

Oscilador 4Mhz

6

BLOQUE DE SALIDA LCD 16X4

6. Tabla de asignación de variables PIC 16F628 N° 1

Descripción Registro de Configuración de bits Registro de configuración del puerto de entrada B del teclado matricial 4 bits menos significativos (filas). 4 bits más significativos (columnas). Registro de configuración del puerto de salida A. Registro de Lectura de Datos Registro de Escritura de Datos Registro de almacenamiento de datos (Almacena un dato auxiliar) Registro de almacenamiento de datos (Almacena el dato del  boton presionado) Registro de almacenamiento de datos (Almacena el dato para el contador) Registro de almacenamiento de datos (Almacena el dato para el contador)

Registro CW

Dirección 2007h

Valor 3F71h

TRISB

86h

FFh

TRISA

87h

00h

PortB

06h

------

PortA

07h

------

AUX

20H

−−

BOTON

21H

−−

CONT0

22H

−−

CONT1

23H

−−

Registro CW

Dirección 2007h

Valor 3F71h

2

Descripción Registro de Configuración de bits Puerto de Entrada (5 bits)

TRISB

86h

FFh

3

Puerto de Salida (8 bits)

TRISC

87h

00h

4

Registro de Lectura de Datos Registro de Escritura de Datos Registro para generación del retardo Registro para generación

PortB

06h

------

PortC

07h

------

t1

20H

------

t2

21H

------

2

3 4 5 6

7

8

9

PIC 16F877A N° 1

5 6 7

8 9 10

11 12 13 14 15 16

17

del retardo Registro de Almacenamiento de Dato Registro de Almacenamiento de dato a enviar. Registro de Almacenamiento de comprobación para envío de datos Registro de asignación de valor para ir a funciones Registro de asignación de valor para ir a funciones Registro de asignación de valor para ir a funciones Registro de Almacenamiento de Dato Registro de Almacenamiento de Dato Registro de Almacenamiento de comprobación para envío de datos Registro de Almacenamiento de comprobación para envío de datos

7. Diagrama de flujo PIC 16F628 DIAGRAMA DE FLUJO INICIO DIAGRAMA DE FLUJO DETECCIÓN DIAGRAMA DE FLUJO REBOTE

nibble1

22H

------

nibble2

23H

------

Dato

24H

------

Cont

25H

------

Cont1

26H

------

Cont2

27H

------

linea1

28H

------

linea2

29H

------

Dato1

30H

------

Dato2

31H

------

DIAGRAMA DE FLUJO CODIFICACION

 A

 A

DIAGRAMA DE FLUJO SALIDA DIAGRAMA DE FLUJO d20ms (RETARDO)

PIC16F877A DIAGRAMA DE FLUJO INICIO (PROGRAMA PRINCIPAL)

B

B

C

C

D

D

DIAGRAMA DE FLUJO LCDint

E

E

DIAGRAMA DE FLUJO ENABLE DIAGRAMA DE FLUJO RETARDO

DIAGRAMA DE FLUJO FIN DE LINES DIAGRAMA DE FLUJO BLINK

DIAGRAMA DE DISPLAYDER DIAGRAMA DE DISPLAYIZQ DIAGRAMA DE CURSORIZQ

DIAGRAMA DE CURSORDER DIAGRAMA DE LIMPIAR DIAGRAMA DE ABAJO

8. Cálculos Calculo de Retardos:

PIC16F877A: Retardo movlw 0xC8 (1) movwf t1 (1) Ciclo1 movlw 0x0A (1) movwf t2 (1)

;

Ciclo2 decfsz goto decfsz goto return

t2,1 Ciclo2 t1,1 Ciclo1

(1, 2) (2) (1, 2) (2) (2)

[(3 ∗ 9) + 2] + [(34 ∗ 199) + 33] + 2 + 2 + 1 + 1 = 6834   = 6834  ∗ 1  = 6.8 []

PIC16F628A: d20ms MOVLW MOVWF

.255 (1) CONT0 (1)

MOVLW MOVWF

.18 (1) CONT1 (1)

DECF BTFSS GOTO DECF BTFSS GOTO RETURN

CONT1, 1 STATUS, Z LAZO2 CONT0, 1 STATUS, Z LAZO1

LAZO1 LAZO2 (1) (1, 2) (2) (1) (1, 2) (2)

[(4 ∗ 17) + 3] + (77 ∗ 254) + 76 + 2 + 2 + 2 = 19711   = 19711 ∗ 1  = 19,71 []

Error PIC16F628A  =

PIC16F877A  =

  − 

100 = 2.37%

 − 

100 =1.445%

9. Programa PROGRAMA DE DECODIFICACIÓN list p=16F628A ;Tipo de procesador INCLUDE "P16F628A.Inc" ;Librería con las direcciones del microcontrolador.  __CONFIG(0x3f18) ;define las caracteristicas que se van a usar AUX BOTON CONT0 CONT1

INICIO

EQU 0x20 EQU 0x21 EQU 0x22 EQU 0x23 ORG GOTO ORG MOVLW MOVWF BSF MOVLW MOVWF CLRF BCF BCF CLRF

00 INICIO 05 0x07 CMCON STATUS,RP0 0xF0 TRISB TRISA OPTION_REG,NOT_RBPU STATUS,RP0 PORTA

;Activa el banco 1 ;entradas y salidas en RB ;asigna el valor de w a TRISB ;limpia TRISA para salida ; resistencias de pull-up ;Regresa al Banco 0 ;Limpia el puerto A

BCF MOVLW MOVWF CALL SUBWF BTFSS GOTO

PORTA,7 0xAA AUX DETECCION AUX,1 STATUS,Z EMPEZAR

;Apaga el bit DA ;carga un valor ;si se presiono o no una tecla ;Llama a DETECCION ;analiza el valor extraido ;para saber si es igual a AUX ;regresa a la direccion de

CALL

CODIFICACION

;asigna un codigo a la tecla

MOVWF

BOTON

;almacena el valor del codio

CALL GOTO

SALIDA EMPEZAR

;imprime el codigo presentado ;Subrutina DETECCION:

CLRF BTFSS GOTO

PORTB PORTB,7 REBOTE

;Limpia el Puerto B ;Lee la Fila1 "1,2,3,A" ;Lamo a subrutina para eliminar

BTFSS GOTO

PORTB,6 REBOTE

;Lee la Fila2 "4,5,6,B" ;Lamo a subrutina para eliminar

BTFSS GOTO

PORTB,5 REBOTE

;Lee la Fila3 "7,8,9,C" ;Lamo a subrutina para eliminar

BTFSS

PORTB,4

;Lee la fila4 "*,0,#,D"

;programa principal EMPEZAR

EMPEZAR  presionada asignado

DETECCION

el rebote el rebote el rebote

GOTO

REBOTE

;Lamo a subrutina para eliminar

RETLW

0x00

;Regresa con W=0x00

el rebote ;Subrutina REBOTE: elimina el rebote REBOTE CALL BTFSS RETLW BTFSS RETLW BTFSS RETLW BTFSS RETLW RETLW

d20ms PORTB,7 0xAA PORTB,6 0xAA PORTB,5 0xAA PORTB,4 0xAA 0x00

;Retardo de 20ms ;Lee la Fila1 "1,2,3,A" ;Regresa con W=0x10 ;Lee la Fila2 "4,5,6,B" ;Regresa con W=0x10 ;Lee la Fila3 "7,8,9,C" ;Regresa con W=0x10 ;Lee la fila4 "*,0,#,D" ;Regresa con W=0x10 ;Regresa con W=0x00

;Subrutina CODIFICACION: asigna un código a cada tecla presionada CODIFICACION ;Primera columna MOVLW MOVWF BTFSS RETLW BTFSS RETLW BTFSS RETLW BTFSS RETLW

0xF7 PORTB PORTB,7 0x0D PORTB,6 0x0E PORTB,5 0x00 PORTB,4 0x0F

;Activa la Columna 1 ;agrega el valor de w PORTB ;analiza si se presiono la tecla 1 ;asigna el valor de 1 ;analiza si se presiono la tecla 6 ;asigna el valor de 4 ;analiza si se presiono la tecla 7 ;asigna el valor de 7 ;analiza si se presiono la tecla * ;asigna el valor de F

MOVLW MOVWF BTFSS RETLW BTFSS RETLW BTFSS RETLW BTFSS RETLW

0xFB PORTB PORTB,7 0x0C PORTB,6 0x09 PORTB,5 0x08 PORTB,4 0x07

;Activo la Columna 2 ;agrega el valor de w a PORTB ;analiza si se presiono la tecla 2 ;asigna el valor de 2 ;analiza si se presiono la tecla 6 ;asigna el valor de 5 ;analiza si se presiono la tecla 8 ;asigna el valor de 8 ;analiza si se presiono la tecla 0 ;asigna el valor de 0

MOVLW MOVWF BTFSS RETLW BTFSS RETLW BTFSS RETLW BTFSS RETLW

0xFD PORTB PORTB,7 0x0B PORTB,6 0x06 PORTB,5 0x05 PORTB,4 0x04

;Activo la Columna 3 ;agrega el valor de w a PORTB ;analiza si se presiono la tecla 3 ;asigna el valor de 3 ;analiza si se presiono la tecla 6 ;asigna el valor de 6 ;analiza si se presiono la tecla 9 ;asigna el valor de 9 ;analiza si se presiono la tecla # ;asigna el valor de E

MOVLW MOVWF BTFSS RETLW BTFSS RETLW BTFSS RETLW BTFSS RETLW RETURN

0xFE PORTB PORTB,7 0x0A PORTB,6 0x03 PORTB,5 0x02 PORTB,4 0x01

;Activo la Columna 4 ;agrega el valor de w a PORTB ;analiza si se presiono la tecla A ;asigna el valor de A ;analiza si se presiono la tecla B ;asigna el valor de B ;analiza si se presiono la tecla C ;asigna el valor de C ;analiza si se presiono la tecla D ;asigna el valor de D

;Subrutina SALIDA: imprime el valor extraido y enciende el bit DA SALIDA MOVF MOVWF BSF

BOTON,0 PORTA PORTA,7

;Carga el valor de la tecla a w ;agrega el valor de w a PORTA ;Enciende el bit DA

BTFSS GOTO BTFSS GOTO BTFSS GOTO BTFSS GOTO RETURN

PORTB,7 bitDA PORTB,6 bitDA PORTB,5 bitDA PORTB,4 bitDA

;Mantiene el bit ;encendido en caso ;de que se mantenga ;presionado alguna ;tecla de ;cualquier ;fila

MOVLW MOVWF

.255 CONT0

;crea un retardo ;de 20 ms

MOVLW MOVWF

.18 CONT1

;para elimnar el rebore ;en las teclas

DECF BTFSS GOTO DECF BTFSS GOTO RETURN

CONT1,1 STATUS,Z LAZO2 CONT0,1 STATUS,Z LAZO1

;presionadas

 bitDA

;Subrutina RETARDO d20ms

LAZO1

LAZO2

end

;termina el ensamblaje

PROGRAMA CONTROL DISPLAY list p=16F877A INCLUDE "P16F628A.Inc"  __CONFIG(0x3f18) t1 equ 0x20 t2 equ 0x21 nibble0 equ 0x22 nibble1 equ 0x23 Dato equ 0x24 cont equ 0x25 cont1 equ 0x26 cont2 equ 0x27 linea1 equ 0x28 linea2 equ 0x29 Dato1 equ 0x30 Dato2 equ 0x31 org 0x00  bsf STATUS,RP0  bcf STATUS,RP1 movlw 0x00 movwf TRISC movlw 0xFF movwf TRISB  bcf STATUS,RP0  bcf STATUS,RP1 movlw 0x00 movwf PORTC movwf cont movwf cont1 movwf cont2 movlw 0x80 movwf linea1 movlw 0xC0 movwf linea2 CALL LCDint CALL Blink Ciclo: CALL Findelinea  btfss PORTB,4 goto Ciclo movf PORTB,0 andlw 0x0F addlw 0x30 movwf Dato goto Decodificar Decodificar:  bcf STATUS,C movlw 0x3A subwf Dato,0  btfss STATUS,C goto EnviarNum goto Instruccion Instruccion:  bsf STATUS,Z

;Tipo de procesador ;Librería con las direcciones. ;define las caracteristicas que se van a usar

;Inicio del Programa ;Acceso al banco 1 ;Configuración del Puerto C como salida ;Configuración del Puerto B como entrada ;Acceso al banco 0

;PORTC en cont ;PORTC en cont1 ;PORTC en cont2 ;linea1 igual a 0x80 ;linea2 0X0CO

;llamado a findelinea ;ir a ciclo

;Ir a decodificador ;muevo 0X3A a w ;ir a EnviarNum ;Ir a Instruccion

movlw subwf  btfsc goto  bsf movlw subwf  btfsc goto  bsf movlw subwf  btfsc goto  bsf movlw subwf  btfsc goto  bsf movlw subwf  btfsc goto  bsf movlw subwf  btfsc goto

0x3A Dato,0 STATUS,Z CursorDer STATUS,Z 0x3B Dato,0 STATUS,Z CursorIzq STATUS,Z 0x3C Dato,0 STATUS,Z DisplayDer STATUS,Z 0x3D Dato,0 STATUS,Z DisplayIzq STATUS,Z 0x3E Dato,0 STATUS,Z Limpiar STATUS,Z 0x3F Dato,0 STATUS,Z Abajo

incf movf sublw  btfss goto goto

cont1,1 cont1,0 B'00000001' STATUS,Z signo dato1

;Ir a signo ;Ir a dato1

movf movwf goto

Dato,0 Dato1 Enviar

;Ir a Enviar

movf sublw  btfss goto movf movwf goto

cont1,0 0x03 STATUS,Z Enviar Dato,0 Dato2 Enviar

movf movwf andlw movwf movlw andwf

Dato,0 nibble1 0x0F nibble0 0xF0 nibble1,1

;Ir a CursorDer ;Hacer uno a bit cero. ;Decremento lo que tengo en w.

;Decremento Dato y guardo en Dato.

;Hacer uno a bit cero. ;Decrementar Dato y guardar en Dato.

EnviarNum:

dato1:

dato2:

Enviar:

swapf movf movwf  bsf CALL movf iorlw movwf CALL

nibble1,1 nibble1,0 PORTC PORTC,4 Enable nibble0,0 0x10 PORTC Enable

 btfsc goto goto

PORTB,4 Espera1 Ciclo

;Ir a espera ;Ir a ciclo

movf movwf andlw movwf movlw andwf swapf movf movwf CALL movf movwf CALL

Dato,0 nibble1 0x0F nibble0 0xF0 nibble1,1 nibble1,1 nibble1,0 PORTC Enable nibble0,0 PORTC Enable

;Llamo a Enable

 btfsc goto goto

PORTB,4 Espera2 Ciclo

movlw movwf Goto

0x10 Dato EnviarCom

;Ir a EnviarCom

movlw movwf Goto

0x14 Dato EnviarCom

;Ir a EnviarCom

decf decf movlw movwf Goto

cont1,1 cont2,1 0x18 Dato EnviarCom

;Ir a EnviarCom

incf incf movlw movwf Goto

cont1,1 cont2,1 0x1C Dato EnviarCom

;Ir a EnviarCom

incf movf subwf

cont,1 cont2,0 linea2,1

;muevo w a nibble ;or exclusive nibble y 0x10

Espera1:

EnviarCom:

Espera2:

CursorIzq:

CursorDer:

DisplayIzq:

DisplayDer:

Abajo:

movf movwf Goto

linea2,0 Dato EnviarCom

;Ir a EnviarCom

incf movf subwf movf movwf Goto

cont,1 cont2,0 linea1,1 linea1,0 Dato EnviarCom

;Ir a EnviarCom

movlw movwf movlw movwf movlw movwf Goto

0x00 cont1 0x00 cont 0x01 Dato EnviarCom

;Ir a EnviarCom

movlw movwf CALL movlw movwf Call movlw movwf Call movlw movwf Call movlw movwf Call movlw movwf Call movlw movwf Call movlw movwf Call  bcf return

0x03 PORTC Enable 0x02 PORTC Enable 0x02 PORTC Enable 0x08 PORTC Enable 0x00 PORTC Enable 0x0C PORTC Enable 0x00 PORTC Enable 0x01 PORTC Enable PORTC,0

Call  bsf CALL  bcf return

Retardo PORTC,5 Retardo PORTC,5

;Hacer uno el bit 5 del Puerto C ;Llamo a retardo

movlw movwf

0xC8 t1

; 200 ; Iniciamos contador1.-

Arriba:

Limpiar:

LCDint: ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable ;Llamo a Enable

Enable:

Retardo: Ciclo1

movlw movwf

0x0A t2

; Iniciamos contador2

decfsz goto decfsz goto return

t2,1 Ciclo2 t1,1 Ciclo1

; Decrementa Contador2 y si es 0 sale.; Si no es 0 repetimos ciclo.; Decrementa Contador1.; Si no es cero repetimos ciclo.-

movlw movwf movf movwf andlw movwf movlw andwf swapf movf movwf CALL movf movwf CALL return

0x0F Dato Dato,0 nibble1 0x0F nibble0 0xF0 nibble1,1 nibble1,1 nibble1,0 PORTC Enable nibble0,0 PORTC Enable

movlw subwf  btfss return goto end

0x10 cont1,0 STATUS,Z

;Revisar bit z igual a uno

Abajo

;Ir a Abajo

Ciclo2

Blink:

;and entre nibble1 y 0X0F ;and entre nibble1 y 0XF0 ;Cambio de valores de nibble ;Llamo a Enable ;Llamo a Enable

Findelinea:

10. Diagrama electrónico

11. Conclusiones El manejo del PIC16F628 en cuanto a programación en ensamblador es igual al PIC16F877A por contener el mismo número de instrucciones, ya que pertenece a la gama media de microcontroladores de la microchip. Al utilizar el PIC16F628 y PIC16F877A para manejar el teclado matricial se puede asignar un valor y función correspondiente que se quiera a cada tecla, sin depender de las especificaciones del fabricante. Es necesario tener un conocimiento general de las funciones que se van a programar en cada uno de los microcontroladores, puesto que al formar solo un bloque de decodificación, estas funciones deben complementarse y usarse de manera correcta para obtener los resultados deseados. Se deben tomar muchas consideraciones en el manejo del LCD, pasando por la inicialización, la conexión correcta de sus pines de polarización para que este funcione correctamente. Los problemas que se generan en la lectura de datos por el puerto es el tiempo en que las teclas son presionadas, este aspecto se debe fijar, es decir que se debe de tomar en cuenta el tiempo en presionar un tecla en la programación y complementarlo con la implementación del circuito.

11. Conclusiones El manejo del PIC16F628 en cuanto a programación en ensamblador es igual al PIC16F877A por contener el mismo número de instrucciones, ya que pertenece a la gama media de microcontroladores de la microchip. Al utilizar el PIC16F628 y PIC16F877A para manejar el teclado matricial se puede asignar un valor y función correspondiente que se quiera a cada tecla, sin depender de las especificaciones del fabricante. Es necesario tener un conocimiento general de las funciones que se van a programar en cada uno de los microcontroladores, puesto que al formar solo un bloque de decodificación, estas funciones deben complementarse y usarse de manera correcta para obtener los resultados deseados. Se deben tomar muchas consideraciones en el manejo del LCD, pasando por la inicialización, la conexión correcta de sus pines de polarización para que este funcione correctamente. Los problemas que se generan en la lectura de datos por el puerto es el tiempo en que las teclas son presionadas, este aspecto se debe fijar, es decir que se debe de tomar en cuenta el tiempo en presionar un tecla en la programación y complementarlo con la implementación del circuito.

12. Bibliografía Microcontroladores: fundamentos y aplicaciones con PIC Programación de microcontroladores PIC

Fernando E. Valdés Pérez, Ramón Pallás Areny Ibrahim Dogan

PRIMERA

2007

Español

Marcombo

PRIMERA

2006

Español

Marcombo

13. Anexos

Anexo1. Inicialización LCD con 8 bits

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF