Lab04 - Puertos de Entrada y Salida Parte2 - DISPLAY - TECLADO-2
Lab04 - Puertos de Entrada y Salida Parte2 - DISPLAY - TECLADO-2
Lab04 - Puertos de Entrada y Salida Parte2 - DISPLAY - TECLADO-2
Laboratorio N°4
Puertos de Entrada y Salida Parte II
Integrantes:
Profesor:
Ciriaco Martínez, Cesar
Sección:
5 C16 – B
2022
Lab. N° 4 Puertos de Entrada y Salida Parte II
Objetivos
Introducción
Los PICs constituyen en la actualidad una forma de proveer inteligencia a equipos o sistemas para
un mejor desempeño de los mismos. Para que realicen los eventos que querramos es necesario
utilizar los puertos como entrada para que la data ingrese y se procese en el PIC y puertos de
salida para comunicarlos con otros dispositivos y en conjunto logren un objetivo.
Preparación
Para la realización de este laboratorio se requiere la lectura previa de la información proporcionada
para el curso, como el texto y el manual del fabricante.
Equipos y Materiales
● Computadora
● Software de desarrollo
● Proyector multimedia
● Texto del curso
● Manual del fabricante
pá g. 2
Lab. N° 4 Puertos de Entrada y Salida Parte II
Seguridad
Trabajar con Seguridad evita que las personas sufran daños, y provee un ambiente satisfactorio de
trabajo.
1. Al ingresar, inspeccione:
Las vías de acceso.
Orden y limpieza.
pá g. 3
Lab. N° 4 Puertos de Entrada y Salida Parte II
Programa N°1
Desarrolle un proyecto en MPLAB X de nombre SEM04, el cual reciba un dato de 8 bits por el Puerto
B y muestre en 8 Logic States conectados al Puerto D dicho valor binario invertido. El programa a
ingresar se llamará SEM04_1 es el siguiente:
#include<P18F4550.INC>
;---------CONFIGURACION DE BITS----
CONFIG PLLDIV = 1
CONFIG CPUDIV = OSC1_PLL2
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
CONFIG STVREN = OFF
CONFIG LVP = OFF
;---------------------------------------
org 0x0000
goto MAIN
org 0x20
MAIN:
clrf LATD ;0x20
clrf TRISD ;0x22
setf TRISB ;0x24 11111111
INICIO:
movf PORTB,W ;0x26 WREG <-- PORTB
movwf 0x20 ;0x28 0x20 <-- WREG = PORTB
comf 0x20,W ;0x2A COMPLEMENTA EL REGISTRO 0X20 Y EL RESULTADO EN
WREG
movwf LATD ;0X2C LATD <-- WREG
goto INICIO ;0x2E
pá g. 4
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 5
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 6
Lab. N° 4 Puertos de Entrada y Salida Parte II
Programa N°2
Diseñe un nuevo programa de nombre SEM04_2.asm que permita generar una secuencia
numérica del 0 al 9 controlando un convertidor BCD 7 segmentos 74LS47 conectado a los
cuatro bits menos significativos del Puerto D. El 74LS47 controla un Display 7 segmentos
tipo ánodo común, el cual debe variar las cifras cada 0.5 segundos aproximadamente. El
programa a ingresar en el archivo SEM04_2.asm es el siguiente:
#include<P18F4550.INC>
;---------CONFIGURACION DE BITS----
CONFIG PLLDIV = 1
CONFIG CPUDIV = OSC1_PLL2
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
CONFIG STVREN = OFF
CONFIG LVP = OFF
;---------------------------------------
var1 EQU 0x20
var2 EQU 0x21
var3 EQU 0x23
contador EQU 0x10
org 0x00
goto MAIN
org 0x100
MAIN:
movlw 0xF0 ; b'11110000'
movwf TRISD ; RD0:RD3 --> SALIDAS RD4:RD7--> ENTRADAS
clrf contador ; 0X10 <-- B'00000000'
INICIO:
call RETARDO ;retardo de 500 ms
movf contador,W ; wreg <-- 0x10
movwf LATD ;LATD <-- WREG
incf contador,f ;0X10 = 1
movlw .10 ; WREG= 10
cpfseq contador ; 0X10 =WREG
goto INICIO
clrf contador
goto INICIO
RETARDO:
movlw .25 ;(25(100*(200)))*1us = 500000us = 500ms = 0.5s
movwf var3
pá g. 7
Lab. N° 4 Puertos de Entrada y Salida Parte II
RET1:
movlw .100
movwf var2
RET2:
movlw .200
movwf var1
RET3: ; SI 20MHz ---> 1 inst.= 0.2 us
nop ;0.2us
nop ;0.2us
decfsz var1,f ;0.2us
goto RET3 ;0.4us
decfsz var2,f
goto RET2
decfsz var3,f
goto RET1
return
END
pá g. 8
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 9
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 10
Lab. N° 4 Puertos de Entrada y Salida Parte II
Esta instrucción compara el valor del registro de estatus con 0x10 y establece
la bandera de cero (Z) en 1 si son iguales, o en 0 si son diferentes.
Esta instrucción utiliza la función clrf para borrar el contenido del registro de la
SRAM que se encuentra en la dirección 0x10, es decir, coloca todos los bits
en 0, lo que equivale a poner el valor del registro a 0.
INICIO:
call RETARDO ; retardo de 500 ms
movf contador,W ; wreg <-- 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
movwf LATD ; LATD <-- WREG
incf contador,f ; 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
movlw 0x08 ; WREG = 0x08
pá g. 11
Lab. N° 4 Puertos de Entrada y Salida Parte II
Programa N°3
Cree un proyecto de nombre SEM04_3.asm que se encargue de leer dos números de
cuatro bits: A y B. Ambos números ingresan por el Puerto B (A se conecta a los cuatro
bits menos significativos y B a los cuatro bits más significativos). La salida son tres bits
del Puerto D: RD0 es 1 si A>B, RD1 es 1 si A=B y RD2 indica que B>A. El programa a
ingresar en el archivo SEM04_3.asm es el siguiente:
#include <p18f4550.inc>
CONFIG FOSC = HS
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
pá g. 12
Lab. N° 4 Puertos de Entrada y Salida Parte II
AIGUALB:
clrf LATD
bsf LATD,1
goto INICIO
BMAYOR:
clrf LATD
bsf LATD,2
goto INICIO
AMAYOR:
clrf LATD
bsf LATD,0
goto INICIO
END
pá g. 13
Lab. N° 4 Puertos de Entrada y Salida Parte II
B>A
A>B
pá g. 14
Lab. N° 4 Puertos de Entrada y Salida Parte II
A=B
Diagrama de flujo:
pá g. 15
Lab. N° 4 Puertos de Entrada y Salida Parte II
Desarrolle un programa en MPLAB X de nombre SEM04_4.asm que se encargue de mostrar las cifras
del 0 al 9 en un Display 7 segmentos de tipo ánodo común conectado al Puerto D tal como se muestra
en la Figura. El tiempo entre cada cuenta debe ser de aproximadamente cada 0.5 segundos. El
programa para ingresar en el archivo ejemplo.asm es el siguiente:
pá g. 16
Lab. N° 4 Puertos de Entrada y Salida Parte II
#include <p18f4550.inc>
CONFIG FOSC = HS
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
cblock 0x10
var1
var2
var3
cont
endc
org 0x00
goto MAIN
org 0x20
MAIN:
setf LATD
movlw 0x80
movwf TRISD
clrf cont
INICIO:
movf cont,W
call TABLA
movwf LATD
call RETARDO
movlw .2
addwf cont,f
movlw .20
cpfseq cont
goto INICIO
clrf cont
goto INICIO
TABLA:
addwf PCL,f
retlw 0x40
retlw 0x79
retlw 0x24
retlw 0x30
retlw 0x19
retlw 0x12
retlw 0x03
retlw 0x78
retlw 0x00
retlw 0x18
pá g. 17
Lab. N° 4 Puertos de Entrada y Salida Parte II
RETARDO:
movlw .25
movwf var3
RET1:
movlw .100
movwf var2
RET2:
movlw .200
movwf var1
RET3:
nop
nop
decfsz var1,f
goto RET3
decfsz var2,f
goto RET2
decfsz var3,f
goto RET1
return
END
SIMULACION PROTEUS:
pá g. 18
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 19
Lab. N° 4 Puertos de Entrada y Salida Parte II
Responda lo siguiente:
pá g. 20
Lab. N° 4 Puertos de Entrada y Salida Parte II
La instrucción hace que el valor en el registro PCL se sume con el valor del bit
carry y se almacene en PCL. Esto tiene el efecto de saltar a una dirección de
memoria diferente, calculada a partir del valor actual de PCL y el valor del bit
de acarreo.
5. ¿Por qué el registro cont se compara con .20? ¿Qué pasaría si no se hiciera?
Se compara con 20 para tener una referencia de cuanto debe durar el ciclo
pues depende de este valor cuantas iteraciones tendrá, por ejemplo, si se
cambia a un valor diferente el número de iteraciones se alterará y el ciclo del
contador podría durar más o menos dependiendo del valor. Si no se hace
directamente el programa no arranca.
Lo que se haría es sencillo solo basta con modificar el valor con que se
compara cont en lugar de 20 seria 14 y debemos borrar de la tabla estas
instrucciones:
#include <p18f4550.inc>
CONFIG FOSC = HS
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
cblock 0x10
var1
var2
var3
cont
vez
endc
org 0x700
TABLA: db 0x40,0x79,0x24,0x30,0x19,0x12,0x03,0x78,0x00,0x18
org 0x00
goto MAIN
pá g. 22
Lab. N° 4 Puertos de Entrada y Salida Parte II
MAIN:
setf TRISB
setf LATD
movlw 0x80
movwf TRISD
movlw UPPER TABLA
movwf TBLPTRU
movlw HIGH TABLA
movwf TBLPTRH
movlw LOW TABLA
movwf TBLPTRL
clrf cont
clrf vez
INICIO:
btfss PORTB,0
goto CAMBIO
SIGUE:
movf cont,W
movwf TBLPTRL
TBLRD*
movff TABLAT, LATD
call RETARDO
incf cont
movlw .10
cpfseq cont
goto INICIO
clrf cont
goto INICIO
RETARDO:
movlw .25
movwf var3
RET1:
movlw .100
movwf var2
RET2:
movlw .200
movwf var1
RET3:
nop
nop
decfsz var1,f
goto RET3
decfsz var2,f
goto RET2
decfsz var3,f
goto RET1
return
pá g. 23
Lab. N° 4 Puertos de Entrada y Salida Parte II
CAMBIO:
incf vez,f
movlw .1
cpfseq vez
goto INICIO
PARAR:
call RETARDO
btfsc PORTB,0
goto PARAR
clrf vez
goto SIGUE
END
SIMULACION PROTEUS:
pá g. 24
Lab. N° 4 Puertos de Entrada y Salida Parte II
Responda lo siguiente:
pá g. 25
Lab. N° 4 Puertos de Entrada y Salida Parte II
nueva instrucción
pá g. 26
Lab. N° 4 Puertos de Entrada y Salida Parte II
1. RETO EN CLASE
Realice en clase un programa que configure como salidas a todo el puerto D y luego
active todas para después apagarlas y encender cada salida una por una con un
retardo de 300 ms.
CODIGO:
#include<P18F4550.INC>
;---------CONFIGURACION DE BITS----
CONFIG PLLDIV = 1
CONFIG CPUDIV = OSC1_PLL2
CONFIG FOSC = HS
CONFIG PWRT = OFF
CONFIG BOR = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
CONFIG STVREN = OFF
CONFIG LVP = OFF
;---------------------------------------
var1 EQU 0x20
var2 EQU 0x21
var3 EQU 0x23
org 0x00
goto MAIN
org 0x100
MAIN:
clrf TRISD
pá g. 27
Lab. N° 4 Puertos de Entrada y Salida Parte II
INICIO:
clrf LATD
call RETARDO ;retardo de 300 ms
setf LATD
call RETARDO ;retardo de 300 ms
clrf LATD
bsf LATD,0
call RETARDO ;retardo de 300 ms
bsf LATD,1
call RETARDO ;retardo de 300 ms
bsf LATD,2
call RETARDO ;retardo de 300 ms
bsf LATD,3
call RETARDO ;retardo de 300 ms
bsf LATD,4
call RETARDO ;retardo de 300 ms
bsf LATD,5
call RETARDO ;retardo de 300 ms
bsf LATD,6
call RETARDO ;retardo de 300 ms
bsf LATD,7
call RETARDO ;retardo de 300 ms
goto INICIO
RETARDO:
movlw .15
movwf var3
RET1:
movlw .100
movwf var2
RET2:
movlw .200
movwf var1
RET3: ; SI 20MHz ---> 1 inst.= 0.2 us
nop ;0.2us
nop ;0.2us
decfsz var1,f ;0.2us
goto RET3 ;0.4us
decfsz var2,f
goto RET2
decfsz var3,f
goto RET1
return
END
pá g. 28
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 29
Lab. N° 4 Puertos de Entrada y Salida Parte II
#include <p18f4550.inc>
CONFIG FOSC = HS
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG BORV = 3
CONFIG VREGEN = OFF
CONFIG WDT = OFF
CONFIG PBADEN = OFF
CONFIG MCLRE = ON
cblock 0x0000
endc
ORG 0x0000
goto MAIN
ORG 0x0020
MAIN:
clrf TRISD
movlw 0xF0
movwf TRISB
BCF INTCON2,RBPU
clrf LATB
clrf LATD
MOVF LATD,W
pá g. 30
Lab. N° 4 Puertos de Entrada y Salida Parte II
REPETIR:
BCF LATB,0
BSF LATB,1
BSF LATB,2
BSF LATB,3
btfss PORTB,4
MOVLW .1
btfss PORTB,5
MOVLW .2
btfss PORTB,6
MOVLW .3
btfss PORTB,7
MOVLW .10
MOVWF LATD
BSF LATB,0
BCF LATB,1
BSF LATB,2
BSF LATB,3
btfss PORTB,4
MOVLW .4
btfss PORTB,5
MOVLW .5
btfss PORTB,6
MOVLW .6
btfss PORTB,7
MOVLW .11
MOVWF LATD
BSF LATB,0
BSF LATB,1
BCF LATB,2
BSF LATB,3
btfss PORTB,4
MOVLW .7
btfss PORTB,5
MOVLW .8
btfss PORTB,6
MOVLW .9
btfss PORTB,7
MOVLW .12
MOVWF LATD
BSF LATB,0
BSF LATB,1
BSF LATB,2
BCF LATB,3
pá g. 31
Lab. N° 4 Puertos de Entrada y Salida Parte II
btfss PORTB,4
MOVLW .13
btfss PORTB,5
MOVLW .0
btfss PORTB,6
MOVLW .14
btfss PORTB,7
MOVLW .15
MOVWF LATD
GOTO REPETIR
END
Circuito Implementado:
pá g. 32
Lab. N° 4 Puertos de Entrada y Salida Parte II
Responda lo siguiente:
pá g. 33
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 34
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 35
Lab. N° 4 Puertos de Entrada y Salida Parte II
pá g. 36
Lab. N° 4 Puertos de Entrada y Salida Parte II
CONCLUSION:
En conclusión, los puertos de entrada y salida del PIC18F450 son una parte esencial
de su funcionamiento, ya que permiten la comunicación con otros dispositivos y el
procesamiento de datos. Los puertos de entrada permiten al PIC recibir información
del entorno externo, mientras que los puertos de salida permiten al PIC enviar
información a otros dispositivos. La programación adecuada de estos puertos es
crucial para el correcto funcionamiento del PIC y para el logro de los objetivos del
sistema en el que se utiliza. En resumen, los puertos de entrada y salida del
PIC18F450 son componentes clave que permiten que el PIC interactúe con el
mundo exterior y realice su tarea de manera efectiva.
pá g. 37