Ir al contenido

Tutorial — Práctica 1: Operaciones matemáticas

Aprende programando: sigue cada paso, escribe tu propio codigo y valida con las preguntas y el examen del laboratorio. Adapta pines y rutinas a tu placa cuando haga falta.

Lo que vas a construir

Una calculadora ALU con switches en PORTB/PORTD, resultado en LEDs y cambio de operacion con RA0.

Diagrama electronico de la Practica 1 con PIC18F4550, switches y LEDs
Diagrama electronico: operandos en RB0–RB7 y RD0–RD7, resultado en LEDs de RC/RE, pulsador en RA0. — Practica 1 — Operaciones matematicas · UNEXPO
  1. 1

    Monta el hardware según el diagrama

    Operandos en PORTB y PORTD (DIP switches con pull-up). Resultado en LATC y LATE (LEDs). Pulsador en RA0 para cambiar de operación. Revisa el diagrama antes de escribir una línea de código.
  2. 2

    Configura direcciones de puerto

    RB y RD como entradas (`TRISB`/`TRISD` = 0xFF`). RC y RE como salidas (`TRISC`/`TRISE` = 0x00`). RA0 entrada para el pulsador. Lee operandos con `MOVF PORTB, W` y `MOVF PORTD, W`.
    
    								        MOVLW   0xFF
            MOVWF   TRISB
            MOVWF   TRISD
            CLRF    TRISC
            CLRF    TRISE
            BSF     TRISA, 0    ; RA0 entrada
    							
  3. 3

    Implementa una operación ALU

    Empieza por la suma: `MOVF PORTB, W` → `ADDWF PORTD, W` → resultado en W → `MOVWF LATC`. Cuando funcione, duplica la rutina para resta (`SUBWF`), OR (`IORWF`), etc.
    
    								suma:
            MOVF    PORTB, W
            ADDWF   PORTD, W
            MOVWF   LATC
    							
  4. 4

    Añade multiplicación y división por software

    `MULWF` deja el producto en `PRODH:PRODL` — muestra ambos bytes en RC y RE. La división no tiene instrucción nativa: resta el divisor repetidamente y cuenta cuántas veces cabe.
  5. 5

    Usa RA0 para cambiar de modo

    Guarda el modo actual en una variable RAM (`operacion`). Cada pulsación en RA0 incrementa el modo (0…8 y vuelve a 0). En el bucle principal, salta a la rutina según el valor de `operacion`.
  6. 6

    Simula, prueba en físico y documenta

    Verifica cada modo en Proteus con distintas combinaciones de switches. En placa física, repite las pruebas. Completa el informe pre/post laboratorio con capturas y explicación de cada operación.

Antes de programar — pre-laboratorio

Pre-laboratorio — investigación de referencia

Respuestas alineadas al PDF oficial (Práctica 1, UNEXPO). Son una base para orientar tu investigación: analízalas, amplíalas con el datasheet y redacta el informe con tus propias palabras.

P 1 Conexión del sistema mínimo para el PIC18F4550

El sistema mínimo permite que el PIC oscile, se reinicie y se alimente de forma estable:

- Alimentación: VDD = +5 V DC y VSS = tierra (común) en los pines correspondientes.
- Oscilador HS (20 MHz): cristal de 20 MHz entre los pines OSC1 y OSC2, con un condensador de 1 nF de cada pin del cristal a tierra (según la hoja de la práctica).
- Reset (MCLR): resistencia de 10 kΩ de MCLR a VDD (pull-up), condensador de 10 nF de MCLR a tierra para filtrar ruido, y pulsador de reset opcional entre MCLR y tierra.
- Programación: ICSP (PGC/PGD/MCLR/VDD/VSS) si usas PICkit 2/3.

Con CONFIG FOSC = HS el PIC usa el cristal externo. Sin este bloque el programa no ejecuta ciclos de reloj estables.

P 2 Explique los puertos del PIC18F4550 usados en esta práctica

En esta práctica se usan cinco puertos con roles distintos:

| Puerto | Dirección | Función en el montaje |
| --- | --- | --- |
| **PORTB** | Entrada (`TRISB = 0xFF`) | Operando **A** — DIP switch de 8 bits (RB0–RB7) |
| **PORTD** | Entrada (`TRISD = 0xFF`) | Operando **B** — segundo DIP switch (RD0–RD7) |
| **PORTC** | Salida (`TRISC = 0`) | LEDs del byte **bajo** del resultado (RC0–RC7 → `LATC`) |
| **PORTE** | Salida (`TRISE = 0`) | LEDs del byte **alto** en multiplicación (RE0–RE7 → `LATE`) |
| **PORTA** | RA0 entrada | Pulsador NA para **cambiar de operación** |

Cada puerto digital usa el trio TRISx (dirección), PORTx (lectura) y LATx (escritura de salidas). Los switches llevan resistencias de 10 kΩ como pull-up; los LEDs llevan 220–330 Ω en serie.

P 3 ¿Qué es la ALU?

La ALU (*Arithmetic Logic Unit*, unidad aritmético-lógica) es el bloque de la CPU que ejecuta operaciones sobre datos en registros: sumas, restas, AND, OR, XOR, complemento, incrementos, etc.

En el PIC18F4550 la ALU trabaja principalmente con el registro WREG y registros de memoria de datos. No ejecuta programas completos: solo la operación de una instrucción por ciclo (salvo algunas instrucciones de dos ciclos). El resultado puede quedar en WREG, en un registro o en pares especiales como PRODH:PRODL (multiplicación).

P 4 ¿Cuántas operaciones puede realizar la ALU del PIC18F4550?

La ALU no tiene un contador fijo de "modos", pero el juego de instrucciones del PIC18 incluye decenas de operaciones aritméticas y lógicas sobre bytes de 8 bits, entre ellas:

- Aritmética: suma (`ADDWF`, `ADDLW`), resta (`SUBWF`, `SUBLW`), incremento/decremento (`INCF`, `DECF`), multiplicación (`MULWF`).
- Lógica: AND (`ANDWF`), OR (`IORWF`), XOR (`XORWF`), complemento (`COMF`).
- Desplazamientos/rotaciones: `RLCF`, `RRCF`, `RLNCF`, `RRNCF`.

Operaciones como la división entera no tienen instrucción dedicada en PIC18: se resuelven por software (restas repetidas), como pide esta práctica.

P 5 ¿Qué instrucciones dispone el PIC18F4550 para operaciones lógicas y matemáticas?

Instrucciones usadas directamente en la Práctica 1:

| Operación del laboratorio | Instrucciones MPASM |
| --- | --- |
| Suma | `ADDWF` |
| Resta | `SUBWF` |
| Multiplicación | `MULWF` → resultado en `PRODH:PRODL` |
| División (software) | `MOVF`, `SUBWF`, `ADDWF`, `INCF`, `BCF`/`BSF`, `GOTO` (bucle) |
| OR / AND / XOR | `IORWF`, `ANDWF`, `XORWF` |
| Complemento | `COMF` |
| Rotar sin acarreo | `RLNCF` |

También se usan instrucciones de configuración y control: `MOVLW`, `MOVWF`, `CLRF`, `BCF`, `BSF`, `BTFSC`, `BTFSS`, `CALL`, `RETURN`, `GOTO` para inicializar puertos, leer switches y seleccionar la operación activa.

No copies textualmente al informe. El profesor espera tu redacción, tus cálculos y tu diagrama. Esta guía sirve para comparar y mejorar lo tuyo.

Disena tu solucion

Diseño antes del código

La guía oficial pide pseudocódigo y diagrama de flujo antes del .ASM. Escribe los tuyos primero; después desbloqueas la guía de referencia.

  1. 1. Pseudocódigo
  2. 2. Diagrama de flujo
  3. 3. Guía de referencia

Escribe tu pseudocódigo

Incluye: configuración de puertos, bucle principal, SEGÚN con 9 modos, RA0 para cambiar modo, rutina de división por software.

0 caracteres (mínimo 80)

Construye y adapta el codigo

Practica · UNEXPO

Práctica 1 de Laboratorio

Sistema mínimo PIC18F4550. Operandos en puerto B y D (switches). Resultado en puerto C y E (LEDs). Pulsador RA0 cambia la operación.

Pin / puertoFunción en el programa
PORTBOperando A (DIP switch de 8 bits)
PORTDOperando B (DIP switch de 8 bits)
LATCResultado bits 0–7 (LEDs)
LATEResultado bits 8–15 (LEDs; multiplicación)
RA0Pulsador NA — cambia la operación activa

Pulsa RA0 para avanzar entre modos (vuelve a 0 después del último):

ModoOperaciónInstrucciones clave
0SumaADDWF
1RestaSUBWF
2MultiplicaciónMULWFPRODH:PRODL
3División (software)Restas repetidas
4OR lógicoIORWF
5AND lógicoANDWF
6XOR lógicoXORWF
7ComplementoCOMF (operando A)
8Rotar izq. sin acarreoRLNCF (operando A)
  1. Crear proyecto MPASM para PIC18F4550 (cristal HS 20 MHz).
  2. Importar el diagrama de la práctica (página 2 del PDF).
  3. Switches en RB0–RB7 y RD0–RD7 con pull-up 10 kΩ.
  4. LEDs en RC0–RC7 y RE0–RE7 con resistencia 220–330 Ω.
  5. Pulsador en RA0 a tierra con pull-up.
  6. Compilar → .hex → simular → verificar cada modo.
  • MPLAB IDE 8.88 · PICkit 2/3 · Proteus · Datasheet PIC18F4550

Despues de programar — post-laboratorio

Post-laboratorio — investigación de referencia

Respuestas a las preguntas de cierre del PDF. Úsalas como punto de partida y complementa con lo que observaste en Proteus o en placa física.

P 1 ¿Cuál es la diferencia entre una operación matemática por hardware y por software?

Por hardware (ALU nativa): el PIC ejecuta una instrucción y la ALU produce el resultado en uno o pocos ciclos. Ejemplos: `ADDWF`, `SUBWF`, `MULWF`, `IORWF`/`ANDWF`/`XORWF`.

Por software (algoritmo): no existe instrucción directa; escribes una rutina con varias instrucciones. Ejemplo: división entera — repite restas hasta que el dividendo es menor que el divisor.

En oral puedes decir: *"La suma la hace la ALU con ADDWF; la división la implementamos nosotros porque el PIC18 no trae DIV."*

P 2 ¿Por qué no se puede utilizar todo el puerto C como salida?

Los pines RC6 y RC7 tienen funciones alternativas (UART TX/RX). Si activas EUSART, esos pines dejan de ser GPIO simple. En esta práctica se usa `TRISC = 0` porque no usamos UART a la vez, pero debes explicar en el informe que no todos los pines son GPIO dedicados en todo momento.

En el informe final incluye conclusiones propias sobre limitaciones del PIC18 (8 bits, división por software, pines compartidos con UART).

Comprueba lo aprendido

Exámenes por nivel de dificultad

Abre cada nivel cuando estés listo. El básico es público; intermedio y UNEXPO requieren cuenta CALETAS para calificar respuestas.

Básico Nivel básico — Repaso del enunciado 4 preguntas

Preguntas directas sobre el diagrama y la descripción de la práctica. Ideal antes del laboratorio.

0 de 0 respondidas

En Práctica 1, el pulsador que cambia la operación está en…
Los operandos de entrada están en los puertos…
El resultado se visualiza principalmente en…
La división en esta práctica se implementa…
Intermedio Nivel intermedio — Puertos y ALU 4 preguntas

Registros TRIS/LAT/PORT, ALU e instrucciones aritméticas. Nivel pregunta de informe.

0 de 0 respondidas

¿Qué hace la ALU del PIC18F4550 dentro del ciclo de ejecución?
Para leer el estado de un switch conectado a RB3, ¿qué registro debes consultar?
¿Por qué RC6 y RC7 pueden impedir usar todo PORTC como salida simple en algunos montajes?
La diferencia clave entre operación por hardware y por software en esta práctica es…
UNEXPO Nivel UNEXPO — Código y oral de laboratorio 10 preguntas

Preguntas tipo profesor: análisis línea a línea del .ASM, registros, memoria e instrucciones.

0 de 0 respondidas

En el código de Práctica 1, las variables `modo`, `oper_a` y `oper_b` se reservan en RAM a partir de la dirección 0x20. ¿Qué tipo de memoria es esa?
La rutina `division_software` al terminar deja el cociente en WREG. ¿En qué variable RAM se acumula ese cociente antes del `MOVF cociente, W`?
En `op_mul`, la instrucción `MULWF oper_a` deja el producto de 16 bits en…
¿Qué hace `MOVLW 0x0F` seguido de `MOVWF ADCON1` al inicio del programa?
En `mostrar_resultado`, ¿por qué se escribe en `LATC` y `LATE` en lugar de `PORTC`/`PORTE`?
Las instrucciones desde `inicio:` hasta `END` del programa, ¿en qué memoria se almacenan al grabar el PIC?
Tras `CALL division_software` en `op_div`, ¿qué instrucción coloca el cociente en `PRODL` para mostrarlo?
En `op_rot`, la instrucción `RLNCF WREG, W` sobre el operando A corresponde a la operación…
¿Qué valor tiene `TRISB` inmediatamente después de `MOVLW 0xFF` / `MOVWF TRISB` en la inicialización?
Si el profesor pregunta en oral: "¿Qué hace `revisar_pulsador` cuando detecta flanco en RA0?", la respuesta correcta es…

Panel de tutoriales · Ejercicios