Arquitectura basica
El PIC18F4550 usa una arquitectura tipo Harvard, donde la memoria de programa y la memoria de datos estan separadas. Esto permite que el microcontrolador busque instrucciones y maneje datos usando espacios distintos.
Elementos importantes
Sección titulada «Elementos importantes»| Elemento | Funcion |
|---|---|
WREG | Registro de trabajo. Muchas operaciones pasan por el. |
STATUS | Guarda banderas como cero, acarreo y negativo. |
SFR | Registros de funcion especial para controlar perifericos. |
GPR | Registros de proposito general, usados como variables. |
BSR | Selecciona banco de memoria para acceder a registros. |
PC | Contador de programa. Indica la proxima instruccion. |
La tabla resume el papel de cada uno. Abajo los ves en detalle con ejemplos de lo que haras en laboratorio.
Cada elemento en detalle
Sección titulada «Cada elemento en detalle»WREG — registro de trabajo
Sección titulada «WREG — registro de trabajo»Es el acumulador de la CPU: un registro de 8 bits (un byte, valores 0 a 255 — ver Que significa 8 bits) por donde pasan la mayoria de operaciones aritmeticas y logicas antes de guardar el resultado en otro sitio.
Piensa en el como una mano temporal del procesador: agarra un valor, opera con el y luego lo suelta en un registro o variable.
MOVLW D'5' ; carga 5 en WREGADDLW D'3' ; WREG = 5 + 3 → WREG vale 8MOVWF contador ; copia WREG al GPR 'contador'Sin WREG no podrias hacer un MOVLW, sumar dos numeros ni mover datos entre registros con la mayoria de instrucciones del PIC18.
STATUS — banderas del resultado
Sección titulada «STATUS — banderas del resultado»Despues de muchas operaciones, el PIC guarda banderas en STATUS. Cada bandera es un bit: vale 1 (activa) o 0 (inactiva). Lo que importa en el parcial no es solo el nombre, sino que significa cada valor.
| Bit | Nombre | Que mide |
|---|---|---|
| 0 | C | Acarreo (carry) |
| 1 | DC | Acarreo de digito (nibble bajo) |
| 2 | Z | Resultado cero |
| 4 | OV | Desbordamiento con signo (overflow) |
| 7 | N | Signo del resultado (bit 7) |
Que significa activa (= 1) vs inactiva (= 0)
Sección titulada «Que significa activa (= 1) vs inactiva (= 0)»| Bandera | = 1 (activa) | = 0 (inactiva) |
|---|---|---|
| Z | El resultado de la operacion es cero | El resultado no es cero |
| C | Hubo acarreo mas alla del bit 7 (en sumas: el valor supera 255 en 8 bits sin signo) | No hubo acarreo hacia afuera del byte |
| DC | Hubo acarreo del nibble bajo (del bit 3 al 4) | No hubo acarreo de digito |
| N | El bit 7 del resultado es 1 → numero negativo en complemento a 2 (signed) | El bit 7 es 0 → no es negativo en signed 8 bits |
| OV | Desbordamiento con signo: el resultado no cabe en el rango -128 a +127 | La operacion con signo fue valida |
Ejemplo con Z — ¿contador es cero? El PIC no tiene instruccion CMP (comparar); comparas operando y leyendo la bandera Z del registro STATUS:
MOVLW D'0' ; WREG = 0 (con esto vamos a comparar)XORWF contador, W ; XOR bit a bit entre contador y WREG → resultado en W ; (compuerta XOR: bit igual → 0, bit distinto → 1) ; contador no cambia; solo se actualiza W y las banderas ; ; si contador = 0: todos los bits coinciden con WREG ; → resultado 00000000 → Z = 1 (activa) ; si contador = 5: hay bits distintos de cero ; → resultado 00000101 → Z = 0 (inactiva)Ejemplo con C tras una suma. WREG solo guarda 8 bits (2⁸ = 256 valores: 0 a 255); si la suma pasa de 255, lo que no cabe se registra en C y en W queda el resto:
MOVLW D'200' ; WREG = 200ADDLW D'100' ; 200 + 100 = 300 ; 300 > 255 → no cabe en 8 bits ; sobra 256 (un byte completo) → C = 1 (acarreo) ; en WREG queda: 300 - 256 = 44Las usas para decidir con saltos condicionales:
MOVLW D'0' ; referencia: comparar contra 0XORWF contador, W ; ¿contador == WREG? → si igual, resultado 0, Z=1BTFSS STATUS, Z ; salta si Z=1 (contador era 0)GOTO sigue ; si Z=0 → salta al destinoGOTO manejar_cero ; si Z=1 → salta al destinomanejar_cero: ; contador era 0 ...sigue: ; contador no era 0 ...BTFSC salta si la bandera esta en 0; BTFSS salta si esta en 1.
En un parcial te pueden preguntar: “¿Como sabes si una operacion dio cero?” → Z = 1. “¿Como sabes si una suma desbordo 255?” → C = 1.
SFR — registros de funcion especial
Sección titulada «SFR — registros de funcion especial»Los SFR (Special Function Registers) controlan el hardware interno: puertos, timers, ADC, UART, interrupciones, etc. Cada bit o byte de un SFR tiene un significado fijo definido por Microchip.
Ejemplo real — encender un LED en RB0. Para cambiar un solo bit de un SFR sin tocar los demas, el PIC usa BCF (Bit Clear File → pone el bit en 0) y BSF (Bit Set File → pone el bit en 1):
BCF TRISB, 0 ; TRISB es SFR, bit 0 → fuerza ese bit a 0 ; (los bits 1..7 de TRISB no cambian) ; en TRISB: 0 = salida → RB0 queda como salidaBSF LATB, 0 ; LATB es SFR, bit 0 → fuerza ese bit a 1 ; (los bits 1..7 de LATB no cambian) ; RB0 queda en alto → enciende el LEDNo escribes el byte entero: BCF/BSF solo modifican el bit que indicas; el resto del registro se queda igual. TRISB y LATB son nombres fijos del hardware — no los inventas tu.
Otros SFR que usaras pronto: INTCON (interrupciones), TMR0 (Timer0), ADCON0 (ADC).
GPR — registros de proposito general
Sección titulada «GPR — registros de proposito general»Los GPR son bytes de RAM que tu programa usa como variables: contadores, temporales, estados de una maquina de estados, etc. No controlan hardware directamente; guardan datos.
Con contador RES 1 haces dos cosas a la vez: el nombre (contador) define la variable — un simbolo que usaras en el codigo — y RES 1 le reserva 1 byte en RAM. Despues escribes INCF contador, F y el ensamblador ya sabe que direccion es.
; En la zona de variables:contador RES 1 ; define 'contador' y reserva 1 byte en RAM
; En el codigo:INCF contador, F ; contador = contador + 1MOVF contador, W ; copia contador a WREGDECFSZ contador, F ; decrementa; si llega a 0, salta la siguiente lineaGOTO esperaLa diferencia clave frente a un SFR: contador es tuyo — puedes llamarlo como quieras y usarlo para lo que necesites. TRISB no — su nombre y funcion vienen del hardware.
BSR — selector de banco
Sección titulada «BSR — selector de banco»Tanto los SFR como los GPR viven en la RAM de datos, dividida en bancos (0 a 15). El registro BSR indica en que banco estas parado cuando accedes a una direccion.
Muchos SFR (TRISB, LATB, INTCON…) estan en el banco de acceso (ACCESS) y no necesitas tocar BSR. Pero si reservas variables GPR en distintos bancos con RES, debes seleccionar el banco correcto:
; 'temp' declarada con: temp RES 1MOVLW 0x01MOVWF BSR ; activa banco 1CLRF temp ; limpia la variable GPR en ese bancoCLRF BSR ; vuelve a banco 0PC — contador de programa
Sección titulada «PC — contador de programa»PC (Program Counter) apunta a la siguiente instruccion que el PIC va a ejecutar en la memoria Flash. No lo escribes directamente en codigo normal; lo cambias con saltos y llamadas:
GOTO inicio ; PC salta a la etiqueta 'inicio'
inicio: CALL retardo ; guarda donde volver; PC va a 'retardo' ; ... al RETURN de retardo, PC regresa aqui ... GOTO inicio ; repite el bucleCuando ocurre una interrupcion, el hardware guarda PC en la pila para retomar despues donde se quedo el programa principal.
La pila es una memoria auxiliar LIFO (Last In, First Out: lo ultimo que entra es lo primero que sale). Con un CALL se apila la direccion de retorno; con RETURN se desapila y el programa continua donde se quedo. El registro STKPTR indica la posicion actual de la pila.
Ciclo mental de ejecucion
Sección titulada «Ciclo mental de ejecucion»- El PIC lee una instruccion desde memoria de programa.
- La decodifica.
- Ejecuta la operacion.
- Actualiza registros, banderas o perifericos.
- Avanza a la siguiente instruccion, salvo que haya salto o interrupcion.
Pregunta tipo parcial
Sección titulada «Pregunta tipo parcial»Por que es importante diferenciar SFR y GPR?
Porque los SFR controlan hardware interno como puertos, timers e interrupciones; los GPR se usan como memoria de trabajo para variables del programa.
Arquitectura y elementos de la CPU
Basado en: Clase Tema 2 y 3 (1).pdf
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETAS