Sunteți pe pagina 1din 13

Microprocesadores II Docente: Ing.

Roger Guachalla Narváez


xoroger@yahoo.es

Practica 00: Arquitectura del PIC18F4550


I. Objetivos
 Usando el diagrama en bloques del PIC18F4550, conocer la arquitectura del microcontrolador PIC18F4550
 Conocer la organización de memoria de Programa y de Datos
 Mostrar el Mapa de Registros de Función Especial SFR y los registros de propósito general GPR
 Conocer el Conjunto de Instrucciones
 Realizar el primer programa en lenguaje Ensamblador

II. Diagrama de Bloques del PIC18F4550


Unidad de Proceso y Memoria Modelo de Programación
III. Organización de la Memoria
Memoria de Programa o Código (32768 Bytes de ROM Flash)

 Los 32 KBytes ocupan las direcciones de 0000H hasta


7FFFH

 Almacena instrucciones y constantes/datos

 Las instrucciones ocupan 2 bytes (excepto CALL,


MOVFF, GOTO y LSFR que ocupan 4). Por lo tanto la
memoria de programa puede almacenar hasta 16.384
instrucciones.

 La operación de lectura en posición de memoria por


encima de 7FFFH da ´0´como resultado (equivalente a
la instrucción NOP)

 Direcciones especiales de la memoria de programa son:


 Vectorización del Reset es 0000H
 Vectorización de las interrupciones de alta
prioridad es la 0008H
 Vectorización de las interrupciones de baja
prioridad es la 0018H

Memoria de Configuración (12 Bytes de ROM Flash para Bits de configuración


2 Bytes de ROM Flash para Registros de Identificación)
Se trata de un bloque de memoria situado a partir de la posición 30000H de memoria de programa (más allá de la zona de
memoria de programa de usuario).
Los Bits de configuración permiten configurar de algunas opciones del uC como:
 Opciones del oscilador
 Opciones de reset
 Opciones del watchdog
 Opciones de la circuiteria de depuración y programación
 Opciones de protección contra escritura de memoria de programa y memoria EEPROM de datos
Estos bits se configuran generalmente durante la programación del uC, aunque también pueden ser leídos y modificados
durante la ejecución del programa.
Los Registros de identificación están situados en las direcciones 3FFFFEH y 3FFFFFH que contienen información del modelo
y revisión del dispositivo. Son registros de solo lectura y no pueden ser modificados por el usuario.

Memoria EEPROM de datos (256 Bytes de EEPROM)


Almacena datos que se deben conservar aun en ausencia de tensión de alimentación
 El acceso a esta memoria se realiza mediante los registros SFR: EECON1, EECON2, EEDATA, EEADR.
 Esta memoria permite hasta 1.000.000 de ciclos de borrado/escritura
 Se puede leer/escribir de forma individual en cada una de las 256 posiciones de memoria
 Cuando se realiza una operación de escritura la circuitería interna del microcontrolador se encarga de borrar
previamente la posición en la que se desea escribir. La duración de un ciclo completo de borrado/escritura de un byte
en la memoria EEPROM suele ser de unos 4ms.
Memoria de Datos (2048 Bytes de SRAM)
En este espacio de 2kByte están incluidos los SRF (Registros de Función Especial)
Almacena datos de forma temporal durante la ejecución del programa
La SRAM de 2048 bytes está dividida en 8 bancos de 256 bytes.
Además dispone de 160 bytes dedicados a los registros de función especial (SFR) situados en la parte alta del banco 15.
 Para acceder a un byte de la memoria RAM de datos primero debe seleccionarse el banco al que pertenece el byte
mediante el registro de selección de banco (BSR) y a continuación direccionar el byte dentro del banco. Además existe
una modalidad de acceso rápido a las 96 posiciones de la parte baja del banco 0 y a los 160 bytes de SFR
 Los bancos 4, 5, 6 y 7 se utilizan también para el USB

Memoria de Pila (Stack) (31 Palabras de 21 Bytes de SRAM)


Almacena la dirección de la instrucción que debe ser ejecutada después de una interrupción o subrutina
La Pila es un bloque de memoria SRAM independiente que sirve para almacenar temporalmente el valor del Contador de
Programa (PC) cuando se produce una llamada a subrutina o una interrupción.

El puntero de pila (registro SFR STKPTR) es un contador de 5 bits que indica la posición actual del final de pila.
 Cuando se procesa una interrupción o se ejecutan las instrucciones las instrucciones CALL o RCALL (el PC está
apuntando a la siguiente instrucción) se incrementa el STKPR y se almacena en el final de pila el valor del PC.
 Cuando se ejecutan las instrucciones RETURN, RETLW o RETFIE se copia el valor almacenado en la cima de pila en el PC
y se decrementa el STKPTR.
IV. Mapa de Registros de Función Especial SFR
La memoria RAM de datos se compone de registros de propósito general (GPR) y de registros de función especial (SFR).
Los SFR son los registros mediante los cuales se pueden monitorizar/controlar el funcionamiento de la CPU y de las
unidades funcionales del microcontrolador.
Se distinguen dos conjuntos de SFR:
 SFR asociados con el núcleo del microcontrolador
– CPU: WREG, STATUS, BSR, etc...
– Interrupciones: INTCON, PIE1, PIR1, IPR1, etc...
– Reset: RCON

 SFR asociados con las unidades funcionales:


– Timers: T0CON, TMR1H, TMR1L, T1CON, etc...
– Convertidor A/D: ADRESH, ADRESL, ADCON0, ADCON1, etc...
– EUSART: TXREG, TXSTA, RCSTA, etc...
– CCP: CCPR1H, CCPR1L, CCP1CON, etc...
– MSSP: SSPSTAT, SSPDATA, SSPCFG, etc...
– Puertos de E/S: TRISA, PORTA, TRISB, PORTB, etc...
V. Conjunto de Instrucciones PIC18F4550
Incluye un total de 77 instrucciones: 73 de longitud de 1 word (16 bit) y 4 de longitud de 2 word (32 bit)
VI.

Nemónico, Operandos Descripción # Ciclos Codificación Banderas


[ ] es opcional, afectada
default d=1 (en f), a=0 (no BSR)
OPERACIONES DE REGISTROS (f) ORIENTADAS A BYTE
ADDWF f [,d[,a]] (WREG) + (f) 1 0010 01da ffff ffff C, DC, Z, OV, N
ADDWFC f [,d[,a]] (WREG) + C + (f) 1 0010 00da ffff ffff C, DC, Z, OV, N
ANDWF f [,d[,a]] (WREG) & (f), operación AND bit a bit 1 0001 01da ffff ffff Z, N
CLRF f [,a] (f) ⭠ 0, limpiar f 1 0110 101a ffff ffff Z
COMF f [,d[,a]] (~f), complementar f (invertir los bits) 1 0001 11da ffff ffff Z, N
CPFSEQ f [,a] Comparar (f) con (WREG), omitir si = 1 (2 o 3) 0110 001a ffff ffff Ninguna
CPFSGT f [,a] Comparar (f) con (WREG), omitir si > 1 (2 o 3) 0110 010a ffff ffff Ninguna
CPFSLT f [,a] Comparar (f) con (WREG), omitir si < 1 (2 o 3) 0110 000a ffff ffff Ninguna
DECF f [,d[,a]] Decrementar (f) 1 0000 01da ffff ffff C, DC, Z, OV, N
DECFSZ f [,d[,a]] Decrementar (f), omitir siguiente si resultado = 0 1 (2 o 3) 0010 11da ffff ffff Ninguna
DCFSNZ f [,d[,a]] Decrementar (f), omitir siguiente si resultado ≠ 0 1 (2 o 3) 0100 11da ffff ffff Ninguna
INCF f [,d[,a]] Incrementar (f) 1 0010 10da ffff ffff C, DC, Z, OV, N
INCFSZ f [,d[,a]] Incrementar (f), omitir siguiente si resultado = 0 1 (2 o 3) 0011 11da ffff ffff Ninguna
INFSNZ f [,d[,a]] Incrementar (f), omitir siguiente si resultado ≠ 0 1 (2 o 3) 0100 10da ffff ffff Ninguna
IORWF f [,d[,a]] (WREG) | (f), operación OR bit a bit 1 0001 00da ffff ffff Z, N
MOVF f [,d[,a]] Mover (f) a (WREG) o a sí mismo 1 0101 00da ffff ffff Z, N
MOVFF fs, fd (fd) ⭠ (fs), 1era palabra codifica fs 2 1100 ffff ffff ffff Ninguna
2da palabra codifica fd 1111 ffff ffff ffff
MOVWF f [,a] (f) ⭠ (WREG), mover WREG a f 1 0110 111a ffff ffff Ninguna
MULWF f [,a] (WREG) * (f) = PRODH : PRODL 1 0000 001a ffff ffff Ninguna
NEGF f [,a] Negar (f), usando complemento a 2 1 0110 110a ffff ffff C, DC, Z, OV, N
RLCF f [,d[,a]] Rotar a la izquierda (f) a través del bit carry 1 0011 01da ffff ffff C, Z, N
RLNCF f [,d[,a]] Rotar a la izquierda (f) 1 0100 01da ffff ffff Z, N
RRCF f [,d[,a]] Rotar a la derecha (f) a través del bit carry 1 0011 00da ffff ffff C, Z, N
RRNCF f [,d[,a]] Rotar a la derecha (f) 1 0100 00da ffff ffff Z, N
SETF f [,a] (f) ⭠ 0xFF, poner a 1 todos los bits de (f) 1 0110 100a ffff ffff Ninguna
SUBFWB f [,d[,a]] (WREG) – (f), con préstamo 1 0101 01da ffff ffff C, DC, Z, OV, N
SUBWF f [,d[,a]] (f) – (WREG) 1 0101 11da ffff ffff C, DC, Z, OV, N
SUBWFB f [,d[,a]] (f) – (WREG), con préstamo 1 0101 10da ffff ffff C, DC, Z, OV, N
SWAPF f [,d[,a]] Intercambiar nibbles de (f) 1 0011 10da ffff ffff Ninguna
TSTFSZ f [,a] Revisar (f), omitir si =0 1 (2 o 3) 0110 011a ffff ffff Ninguna
XORWF f [,d[,a]] (WREG) ⊕ (f), operación XOR bit a bit 1 0001 10da ffff ffff Z, N
OPERACIONES DE DE REGISTROS (f) ORIENTADAS A BIT
BCF f, b [,a] Poner a 0 bit b de (f) 1 1001 bbba ffff ffff Ninguna
BSF f, b [,a] Poner a 1 bit b de (f) 1 1000 bbba ffff ffff Ninguna
BTFSC f, b [,a] Revisar bit b de (f), omitir si = 0 1 (2 o 3) 1011 bbba ffff ffff Ninguna
BTFSS f, b [,a] Revisar bit b de (f), omitir si = 1 1 (2 o 3) 1010 bbba ffff ffff Ninguna
BTG f, b [,a] Complementar bit b of (f) 1 0111 bbba ffff ffff Ninguna
OPERACIONES DE CONTROL
BC n Saltar a n si C=1 1 (2) 1110 0010 nnnn nnnn Ninguna
BN n Saltar a n si N=1 1 (2) 1110 0110 nnnn nnnn Ninguna
BNC n Saltar a n si C = 0 1 (2) 1110 0011 nnnn nnnn Ninguna
BNN n Saltar a n si N = 0 1 (2) 1110 0111 nnnn nnnn Ninguna
BNOV n Saltar a n si OV = 0 1 (2) 1110 0101 nnnn nnnn Ninguna
BNZ n Saltar a n si Z ≠ 0 1 (2) 1110 0001 nnnn nnnn Ninguna
BOV n Saltar a n si OV=1 1 (2) 1110 0100 nnnn nnnn Ninguna
BRA n Saltar a n 2 1101 0nnn nnnn nnnn Ninguna
BZ n Saltar a n si Z=1 1 (2) 1110 0000 nnnn nnnn Ninguna
CALL k [,s] Llamar a la subrutina 1ra palabra 2 1110 110s k7kkk kkkk0 Ninguna
2da palabra 1111 k19kkk kkkk kkkk8
CLRWDT Limpiar WDT (watchdog timer) 1 0000 0000 0000 0100 TO, PD
DAW Ajuste decimal del (WREG) 1 0000 0000 0000 0111 C
GOTO k Ir a la dirección de memoria 1era palabra 2 1110 1111 k7kkk kkkk0 Ninguna
2da palabra 1111 k19kk kkkk kkkk8
NOP No operación 1 0000 0000 0000 0000 Ninguna
NOP No operación 1 1111 xxxx xxxx xxxx Ninguna
POP Sacar tope de la dirección de retorno 1 0000 0000 0000 0110 Ninguna
PUSH Meter tope de la dirección de retorno 1 0000 0000 0000 0101 Ninguna
RCALL n Llamada Relativa 2 1101 1nnn nnnn nnnn Ninguna
RESET Reset por Software 1 0000 0000 1111 1111 Todas
RETFIE [s] Retorno de interrupción 2 0000 0000 0001 000s GIE, PEIE
RETLW k Retorno con k en WREG 2 0000 1100 kkkk kkkk Ninguna
RETURN [s] Retorno de subrutina 2 0000 0000 0001 001s Ninguna
SLEEP Ir a modo de ahorro de energía 1 0000 0000 0000 0011 TO, PD
OPERACIONES LITERALES
ADDLW k (WREG) + k 1 0000 1111 kkkk kkkk C, DC, Z, OV, N
ANDLW k (WREG) & k, operación AND bit a bit 1 0000 1011 kkkk kkkk Z, N
IORLW k (WREG) | k ,operación OR bit a bit 1 0000 1001 kkkk kkkk Z, N
LFSR f, k Mover literal a FSRx 1ra palabra 2 1110 1110 00ff kkkk Ninguna
2da palabra 1111 0000 kkkk kkkk
MOVLB k BSR<3:0> ⭠ k 1 0000 0001 0000 kkkk Ninguna
MOVLW k (WREG) ⭠ k 1 0000 1110 kkkk kkkk Ninguna
MULLW k (WREG) * k = PRODH : PRODL 1 0000 1101 kkkk kkkk
RETLW k Retornar con literal en (WREG) 2 0000 1100 kkkk kkkk Ninguna
SUBLW k k – (WREG) 1 0000 1000 kkkk kkkk C, DC; Z, OV, N
XORLW k (WREG) ⊕ k, operación XOR bit a bit 1 0000 1010 kkkk kkkk Z, N

f: dirección de d: Bit de selección de a: bit de acceso a memoria RAM k: dato constante n: dirección s: bit se selección para
registro de 8 bit Destino a = 0: Registro BSR es relativa para el modo de Llamada
d = 0: guardar resultado ignorado instrucciones (Call) y Retorno
en WREG a = 1: El banco de RAM está de salto (Return)
d = 1: guardar resultado especificado por BSR
x:valor ignorado
en registro f

VII. PUERTOS DE ENTRADA/SALIDA

El microcontrolador PIC18F4550 dispone 5 puertos de E/S que incluyen un total de 35 líneas digitales de E/S:

Todas las líneas digitales de E/S disponen de al menos una función alternativa asociada a alguna circuitería especifica
del microcontrolador.

REGISTROS DE UN PUERTO DE E/S


Cada puerto de E/S tiene asociado 3 registros:
 Registro TRIS: mediante este registro se configuran cada una de las líneas de E/S del puerto como:
ENTRADA (bit correspondiente a '1')
SALIDA (bit correspondiente a '0')
 Registro PORT: mediante este registro se puede LEER el nivel en el pin de E/S (Entrada de Datos)
 Registro LAT: mediante este registro se ESCRIBIR el valor de del pin de E/S (Salida de Datos)
VIII. Edición-Compilación-Simulación del primer programa en
Lenguaje Ensamblador usando Proteus
Descripción: Al alimentar el circuito, el PIC18F4550 muestra los leds del puerto RD prendidos y apagados de manera
Intercalada y luego el procesador se detiene.

1 Abrir Proteus y seleccionar ‘New Project’

2 Ingresar un Nombre y un Folder para el proyecto. Presionar ‘Next’

3 Seleccionar ‘Crear el esquemático con el tamaño DEFAULT’. Presionar ‘Next’


4 Seleccionar ‘No crear una placa de circuito impreso PCB’. Presionar ‘Next’

5 Seleccionar ‘Crear un proyecto firmware’


Seleccionar ‘Familia PIC18’
Seleccionar microcontrolador ‘PIC18F4550’
Seleccionar el compilador ‘MPASM (Proteus)’
Seleccionar ‘Crear archivos de inicio rápido’ (‘Create Quick Start Files’).
Presionar ‘Next’

6 Revisar las opciones del Resumen y presionar ‘Finish’


7 Seleccionar la pestaña Esquemático (Schematic Capture)

8 Modificar el circuito para Simulación

Componentes Proteus
9 Seleccionar la pestaña de Código (Source Code)

10 Modificar y Escribir el siguiente programa:


11 En la barra principal de íconos, modificar el campo ‘Debug’ a ‘Release’

12 Presionar la combinación de teclas Ctrl + F7 para Compilar el programa y corregir errores si los hubiere hasta que
se muestre el mensaje ‘Compilación exitosa’

13 Empezar la depuración paso a paso. Hacer click en ‘Debug’ del menú principal y seleccionar ‘Start VSM Debugging’

14 La disposición de ventanas se modifica y aparece una línea gris con una flecha roja indicando la primera instrucción a
ejecutarse:
15 Seleccionar la opción del menú ‘Debug – PIC18 CPU – 3. Registers’S

16 En la pestaña de Código hacer correr el programa paso a paso presionando la tecla F10 para que el procesador ejecute
una línea de código. Revisar el contenido de los registros en cada instrucción.
17 Observar los resultados de la simulación seleccionando la pestaña ‘Schematic Capture’.

Como se puede observar los bits del puerto RD tienes salidas intercaladas

NOTA:En Proteus los colores significan:


 ROJO Valor Alto (1)
 AZUL Valor Bajo (0)
 GRIS Sin Conexión
 AMARILLO Contención (choque) de valores lógicos
18 Para detener la depuración, seleccionar ‘Stop VSM Debugging’ de la opción ‘Debug’ del menú principal.

IX. Informe de práctica


A. Carátula INDIVIDUAL (NO REQUIERE FIRMAS DEL DOCENTE)
B. TRABAJO DE INVESTIGACIÓN INDIVIDUAL
CONJUNTO DE INSTRUCCIONES DEL PIC18F4550
 Nemónico
 Significado
 Ejemplo
Incluir:
Fuentes de Información: direcciones web o bibliografía
Impresión de las primeras 2 páginas de la fuente de información
Resumen escrito a mano (de un mínimo de 3 páginas)
C. Conclusiones

S-ar putea să vă placă și