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.
Diagrama de bloques del PIC18F4550
Sección titulada «Diagrama de bloques del PIC18F4550»Los seis registros del esquema general estan en Conceptos basicos. Esta figura es solo este chip:
Los numeros que van junto a las lineas no son direcciones. Dicen cuantos bits caben en ese camino.
| Numero | Donde esta | Que significa |
|---|---|---|
| 8 | Bus de datos, W y la ALU | Un byte. Viaja un dato de 0 a 255. Por eso el 8 se repite en casi todos los caminos de datos. |
| 16 | Bus de instrucciones | Cada instruccion del PIC18 ocupa 16 bits. Sale de la Flash y entra al RI. |
| 12 | Direccion de datos y FSR | La direccion de un dato. Con 12 bits se nombran 4096 posiciones. El FSR (el RDD del PIC) es de 12 bits. |
| 4 | BSR, junto al banco | Elige el banco de la memoria de datos. Esos 4 bits, mas los 8 que trae la instruccion, forman la direccion de 12. |
| 21 | Table Pointer | Puntero de 21 bits hacia un byte de la memoria de programa. Lo usan las lecturas y escrituras de tabla. |
| 20 | Junto al contador de programa | El PC llega hasta el bit 20. Se escribe PC<20:0>: del bit 0 al bit 20 hay 21 bits. El 20 del dibujo es ese bit mas alto, el mismo ancho con el que el PC apunta a la Flash. |
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. |
Los nombres de la clase (cualquier micro) y el nombre en el PIC18:
| En clase | En el PIC18 |
|---|---|
| Acumulador clasico (despues de la ALU) | En el PIC no existe asi: W esta antes de la ALU (WREG) |
| STATUS | STATUS — banderas C, Z, DC, N, OV |
| Registros generales | GPR — bytes de la memoria de datos que tu usas como variables |
| RDD | Direccion f de la instruccion (directo) o FSR (indirecto) |
| SP | STKPTR — tope de la pila |
| RI / IR | Registro interno del opcode. No lo escribes en el .ASM |
| PC y pila | PC y la pila de hardware (guarda direcciones, no datos) |
La tabla resume el papel de cada uno. Abajo los ves en detalle con ejemplos de lo que haras en laboratorio. El mapa general (sin nombres del PIC) esta en Conceptos basicos — bloques de la CPU.
Cada elemento en detalle
Sección titulada «Cada elemento en detalle»WREG — registro de trabajo
Sección titulada «WREG — registro de trabajo»En el esquema general el ACC queda debajo de la ALU: ahi cae el resultado, y ese mismo valor puede volver a entrar como operando. En el PIC eso no existe. W esta antes de la ALU: es un operando que entra junto con otro dato. El resultado puede volver a un registro o a W.
| Microprocesador tradicional | PIC18 | |
|---|---|---|
| Donde esta | El ACC queda debajo de la ALU | W (WREG) esta antes de la ALU |
| Que entra a la ALU | Un dato de los registros y, por el lazo, el propio acumulador | W y otro registro |
| Donde cae el resultado | Siempre en el acumulador | En un registro (,F) o en W (,W) |
Sigue siendo el registro de trabajo de 8 bits (un byte, 0 a 255 — ver Que significa 8 bits).
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 0ALU del PIC18 y el parametro d
Sección titulada «ALU del PIC18 y el parametro d»La ALU combina dos operandos y escribe el resultado. En el PIC18 un operando suele ser W (o un literal embebido en la instruccion) y el otro un registro de archivo f (GPR o SFR). Las banderas van a STATUS.
El bit d (destino) de la instruccion dice donde queda el resultado:
d | En el codigo | Donde queda el resultado |
|---|---|---|
| 0 (destino 0) | ,W | En el acumulador W |
| 1 | ,F | En el registro f |
ADDWF contador, W ; d = 0 → W = W + contador; contador no cambiaADDWF contador, F ; d = 1 → contador = contador + WDireccionamiento
Sección titulada «Direccionamiento»Como la instruccion dice de donde sale el dato:
| Modo | Que significa | Ejemplo |
|---|---|---|
| Literal | El numero viaja dentro de la instruccion. No se lee de RAM. | MOVLW .5 |
| Directo (general) | La instruccion nombra el registro (f). Ese nombre es la direccion en memoria de datos. | MOVF contador, W |
| Indirecto | FSR es el RDD: guarda la direccion. INDF es el dato que hay ahi. | MOVF INDF, W lee lo que apunta FSR |
Mas detalle de literales y de ,W / ,F en Ensamblador.
MOVLW .20MOVWF FSR0L ; RDD = direccion 0x20MOVF INDF0, W ; W = byte que hay en esa direccionPC, pila y saltos
Sección titulada «PC, pila y saltos»PC (Program Counter) apunta a la siguiente instruccion en Flash. No lo escribes a mano: lo cambian GOTO, BRA, CALL y RETURN.
La pila del PIC18 es un arreglo de direcciones del PC, no de variables. Es LIFO. STKPTR (el SP) marca el tope.
- PUSH: mete una direccion.
CALLhace PUSH de la direccion de retorno y luego carga el PC con el destino. - POP: saca esa direccion y la pone en el PC.
RETURNhace POP.
CALL tiene que volver. Si no hay RETURN (o RETFIE en una interrupcion), esa direccion nunca sale de la pila: el programa no retoma donde estaba, y varios CALL sin retorno llenan la pila.
Una interrupcion tambien hace PUSH del PC. RETFIE hace POP y ademas vuelve a habilitar las interrupciones. Ver Interrupciones.
| Instruccion | Que hace con el PC | ¿Usa la pila? | Cuando usarla |
|---|---|---|---|
CALL | Salta a una subrutina | Si — PUSH | Codigo que debe volver (RETURN) |
RETURN | Vuelve a la direccion apilada | Si — POP | Cierre de un CALL |
GOTO | Salta a cualquier etiqueta | No | Saltos lejanos o bucles que no son subrutina |
BRA | Salto relativo y corto | No | Bucles locales, como un retardo |
BRA y GOTO cambian el PC sin guardar retorno. Por eso un bucle de retardo usa BRA, no CALL. Comparacion de ciclos en Calculo de retardos — BRA vs GOTO.
inicio: CALL retardo ; PUSH del PC; salta a retardo GOTO inicio ; no apila: solo cambia el PC
retardo: ; ... RETURN ; POP: el PC vuelve justo despues del CALLCiclo 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