Practica 10
Practica 10
Practica 10
Introducción al diseño de
elementos mecánicos
Estudiantes:
Ortiz Flores Omar
López Espinoza José Manuel
10 de Enero de 2025
INSTITUTO POLITÉCNICO NACIONAL
Interfases, Periféricos y
Programación I
Estudiante:
7RV2
04 de noviembre de 2024
MATERIALES
1. Microcontrolador PIC16F887 - 1 unidad
2. Display de 7 segmentos (ánodo o cátodo común) - 1 unidad
3. Resistencias de 330 Ω- 11 unidades
4. DIP switch - 1 unidad
5. Fuente de alimentación de 5V - 1 unidad
6. Protoboard o PCB para montaje - 1 unidad
7. Cables de conexión (jumpers) - Cantidad variable
CIRCUITO
CODIGO
LIST P=16F887 __CONFIG _CONFIG2,
_WRT_OFF
#include <p16f887.inc>
; Definiciones de pines
__CONFIG _CONFIG1, _XT_OSC
& _WDT_OFF & _PWRTE_ON & BIT_A0 equ 0x07 ; RD7 -> Bit A0
_BOR_OFF & _LVP_OFF
BIT_A1 equ 0x06 ; RD6 -> Bit A1 movwf TRISB ; Configurar
PORTB como salida
BIT_B0 equ 0x05 ; RD5 -> Bit B0
bcf STATUS, RP0 ; Cambiar a
BIT_B1 equ 0x04 ; RD4 -> Bit B1
banco 0
DISPL equ PORTB ; Salida para
clrf TEMP_A ; Limpiar
el display de 7 segmentos en PORTB
TEMP_A
TEMP_A equ 0x20 ; Usar una
clrf TEMP_B ; Limpiar
ubicación en memoria para TEMP_A
TEMP_B
TEMP_B equ 0x21 ; Usar una
clrf RESULT ; Limpiar
ubicación en memoria para TEMP_B
RESULT
RESULT equ 0x22 ; Usar una
ubicación en memoria para RESULT
BuclePrincipal:
; Leer los bits A y B
org 0x0000
btfsc PORTD, BIT_A0
goto Inicio
bsf TEMP_A, 0
btfss PORTD, BIT_A0
org 0x0004
bcf TEMP_A, 0
; No utilizamos interrupciones en
este ejemplo
btfsc PORTD, BIT_A1
Inicio: bsf TEMP_A, 1
bsf STATUS, RP0 ; Cambiar a btfss PORTD, BIT_A1
banco 1
bcf TEMP_A, 1
clrf ANSEL ; Configurar
pines AN0-AN7 como digitales
btfsc PORTD, BIT_B0
clrf ANSELH ; Configurar
pines AN8-AN13 como digitales bsf TEMP_B, 0
movlw b'11110000' ; Configurar btfss PORTD, BIT_B0
RD7-RD4 como entrada (11110000)
bcf TEMP_B, 0
movwf TRISD ; Configurar
PORTD como entrada
movlw b'00000000' ; Configurar btfsc PORTD, BIT_B1
PORTB como salida (00000000) bsf TEMP_B, 1
btfss PORTD, BIT_B1 addwf PCL, f
bcf TEMP_B, 1 retlw b'00111111' ;0
retlw b'00000110' ;1
; Negar el valor de B y sumarle uno retlw b'01011011' ;2
comf TEMP_B, f ; retlw b'01001111' ;3
Complemento a uno de TEMP_B
retlw b'01100110' ;4
incf TEMP_B, f ; Sumamos
retlw b'01101101' ;5
uno a TEMP_B
retlw b'01111101'
end
; Sumar A y B
movf TEMP_A, W
addwf TEMP_B, W
movwf RESULT
Display:
; Asumimos que el resultado de la
suma está en RESULT
movf RESULT, W
call Tabla7Seg ; Convertir el
resultado binario a decimal para el
display
movwf PORTB ; Mostrar el
resultado en el display
return
Tabla7Seg: