Professional Documents
Culture Documents
TELECOMUNICACIONES
ASIGNATURA: MICROCONTROLADORES
NRC: 2094
INFORME/TRABAJO PREPARATORIO
DE LABORATORIO No.1
INTEGRANTES
1. Herrera Diana
2. Sampedro Darwin
3. Venegas Marcelo
11/12/2017 - SANGOLQUI
Tema:
1. Objetivo:
2. Materiales y Equipos:
Materiales:
Herramientas:
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 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 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.
b) TRIS (TRISA, TRISB, etc): estos registros sirven para programar cada
línea del puerto correspondiente como entrada o salida.
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
E/S 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 atenderle. 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:
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
4. Bibliografía:
1 2 3
_
4 5 6
_
7 8 9
T
Aceptar 0 Limpiar
T
2. Objetivos:
3. Materiales
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
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
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 Fuente de
Alimentación 5V alimentación 5V
BLOQUE
DE Uc Pic16F628A Uc Pic16F877A
5 6
ENTRADA BLOQUE
DECODIFICADOR CONTROL DE
TECLADO TECLADO 4X4 DISPLAY LCD SALIDA
MATRICIAL 16X4 LCD 16X4
4X4
Oscilador 4Mhz
6. Tabla de asignación de variables
PIC 16F628
PIC 16F877A
7. Diagrama de flujo
PIC 16F628
A
A
DIAGRAMA DE FLUJO SALIDA
DIAGRAMA DE FLUJO d20ms (RETARDO)
PIC16F877A
B
C
C
D
DIAGRAMA DE FLUJO LCDint
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 t2,1 (1, 2)
goto Ciclo2 (2)
decfsz t1,1 (1, 2)
goto Ciclo1 (2)
return (2)
PIC16F628A:
d20ms
MOVLW .255 (1)
MOVWF CONT0 (1)
LAZO1
MOVLW .18 (1)
MOVWF CONT1 (1)
LAZO2
DECF CONT1, 1 (1)
BTFSS STATUS, Z (1, 2)
GOTO LAZO2 (2)
DECF CONT0, 1 (1)
BTFSS STATUS, Z (1, 2)
GOTO LAZO1 (2)
RETURN
Error
PIC16F628A
7000−6834
𝐸𝑟𝑟𝑜𝑟 = 7000
𝑥100 = 2.37%
PIC16F877A
20000−19711
𝐸𝑟𝑟𝑜𝑟 = 𝑥100 =1.445%
20000
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
;programa principal
EMPEZAR
BCF PORTA,7 ;Apaga el bit DA
MOVLW 0xAA ;carga un valor
MOVWF AUX ;si se presiono o no una tecla
CALL DETECCION ;Llama a DETECCION
SUBWF AUX,1 ;analiza el valor extraido
BTFSS STATUS,Z ;para saber si es igual a AUX
GOTO EMPEZAR ;regresa a la direccion de
EMPEZAR
CALL CODIFICACION ;asigna un codigo a la tecla
presionada
MOVWF BOTON ;almacena el valor del codio
asignado
CALL SALIDA ;imprime el codigo presentado
GOTO EMPEZAR ;Subrutina DETECCION:
DETECCION
CLRF PORTB ;Limpia el Puerto B
BTFSS PORTB,7 ;Lee la Fila1 "1,2,3,A"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,6 ;Lee la Fila2 "4,5,6,B"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,5 ;Lee la Fila3 "7,8,9,C"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,4 ;Lee la fila4 "*,0,#,D"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
RETLW 0x00 ;Regresa con W=0x00
REBOTE
CALL d20ms ;Retardo de 20ms
BTFSS PORTB,7 ;Lee la Fila1 "1,2,3,A"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,6 ;Lee la Fila2 "4,5,6,B"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,5 ;Lee la Fila3 "7,8,9,C"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,4 ;Lee la fila4 "*,0,#,D"
RETLW 0xAA ;Regresa con W=0x10
RETLW 0x00 ;Regresa con W=0x00
CODIFICACION
;Primera columna
MOVLW 0xF7 ;Activa la Columna 1
MOVWF PORTB ;agrega el valor de w PORTB
BTFSS PORTB,7 ;analiza si se presiono la tecla 1
RETLW 0x0D ;asigna el valor de 1
BTFSS PORTB,6 ;analiza si se presiono la tecla 6
RETLW 0x0E ;asigna el valor de 4
BTFSS PORTB,5 ;analiza si se presiono la tecla 7
RETLW 0x00 ;asigna el valor de 7
BTFSS PORTB,4 ;analiza si se presiono la tecla *
RETLW 0x0F ;asigna el valor de F
bitDA
;Subrutina RETARDO
d20ms
LAZO1
LAZO2
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