Programación Del Microcontrolador

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 13

TEMA 2.

PROGRAMACION DEL MICROCONTROLADOR MICROCHIP 18F4550

REPERTORIO DE INSTRUCCIONES.

El juego de instrucciones del PIC 18F4550 son los siguientes


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

REGISTROS DE FUNCIONES ESPECIALES (SFR)

La memoria RAM de datos se compone de los registros de propósito general (GPRs) y de


registros de funciones especiales (SFRs).
Los SFRs son los registros mediante los cuales se puede monitorizar/controlar el
funcionamiento de la CPU y de las unidades funcionales de uC.

Se distinguen dos conjuntos de SFRs:


- SFRs asociados con el núcleo del uC
CPU: WREG, STATUS, BSR, etc…
Interrupciones: INTCON, PIE1, PIR1, IPR1, etc…
RESET: RCON

- SFRs 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...
REGISTROS DECONTROL

REGISTRO STATUS

El registro de ESTADO, contiene el estado aritmético de la ALU. Como con cualquier otro
SFR, se puede modificar con cualquier instrucción.

Si el registro ESTADO es el destino de una instrucción que afecte a los bits N, OV, Z, DC o C,
los resultados de la instrucción no se escriben, en cambio, el registro ESTADO se actualiza según la
instrucción realizada. Por lo tanto, el resultado de una instrucción con el registro ESTADO como
destino puede ser diferente al previsto.

Ejemplo, CLRF STATUS activará el bit Z y el resto de los bits no cambian (‘000u u1uu’).

STATUS: Registro estado

U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x


- - - N OV Z DC(1) C(2)
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Donde:
R = bit de lectura, W = bit de escritura,
U = bit no implementado leído como "0",
-n = Valor en POR
'1' = El bit en set
'0' = El bit en clear
x = El bit es desconocido

Significado de cada uno de los bits del registro STATUS:


bit 7-5 No implementado. Lectura es “0”
bit 4 N: bit negativo
Este bit se utiliza en el complemento a 2. Indica cuando el resultado ha sido negativo.
1= Resultado negativo
0= Resultado positivo
bit 3 OV: Bit de desbordamiento.
Este bit se utiliza en el complemento a 2. Indica que una operación de 7 bits se ha
desbordado.
1= Ha ocurrido un desbordamiento
0= No ha ocurrido un desbordamiento
bit 2 Z: bit de cero
1= El resultado de una operación aritmética es 0
0= El resultado de una operación aritmética no es 0
______
bit 1 DC: Dígito de acarreo/bit Borrow.
Con las instrucciones ADDWF, ADDLW, SUBLW y SUBWF
1= Ocurrió un acarreo en los 4 bits de menos peso
0= No ocurrió un acarreo en los 4 bits de menos peso
______
Bit 0 C: bit de acarreo/Bit Borrow.
Con las instrucciones ADDWF, ADDLW, SUBLW y SUBWF
1= Ocurrió un acarreo en los bits de mayor peso
0= No ocurrió un acarreo en los bits de mayor peso

Nota: 1: Para Borrow, la polaridad se invierte. Una resta se ejecuta agregando el complemento
de 2 del segundo operando. Para las instrucciones de rotación (RRF, RLF), este bit se carga
con el bit 4 o el bit 3 del registro fuente.

Ejemplo: Hallar Z, CD, C =?

1 1111
1 0 1 0 1 1 1 0 = AEH
+ 1 0 1 1 0 1 0 1 = B5H
1 0 1 1 0 0 0 1 1 = 63H
C=1 DC = 1 Z=0
Luego de realizada la anterior operación aritmética el registro queda:
STATUS: Registro estado

U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x


(1)
- - - N OV Z DC C(2)
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
0 0 0 0 0 0 1 1
El anterior número que está en código binario tiene como equivalente al número en código
hexadecimal: 03H

Ejemplo: Realizar la operación y hallar Z


10101011 = ABH
- 10101011 = ABH
00000000 = 00H Z=1

Ejemplo: Sumar aritméticamente: 5EH+3AH, hallar el estado de las banderas Z, DC, C.


111111
5EH = 01011110
+ 3AH = 00111010
98H = 10011000 C=0, DC=1, Z=0
PUERTOS DE E/S

Dependiendo del dispositivo seleccionado y de las características permitidas, hay


hasta cinco puertos disponibles. Algunos pines de los puertos de entrada-salida se
multiplexan con una función alternativa de las características periféricas del dispositivo.
Generalmente cuando se activa un periférico, ese pin no se puede utilizar como
pin de entrada-salida.

Cada puerto tiene tres registros para operar. Estos registros son:
 Registro TRIS (registro de la dirección de los datos)
 Registro PORT (lee los niveles en los pines del dispositivo)
 Registro LAT (latch de salida)

El registro del latch de datos (LATA) es útil para leer-modificar-escribir las


operaciones en el valor de los pines de entrada-salida.

PUERTO GENÉRICO DE OPERACIONES DE ENTRADA-SALIDA

REGISTROS PORTA, TRISA Y LATA

El PORTA es un puerto bidireccional de 8 bits de ancho.


El registro de la dirección de los datos es TRISA.
Activar el bit TRISA (=1) hará que el pin correspondiente de PORTA sea una
entrada (es decir, pone el conductor correspondiente de la salida en un modo alta
impedancia).
Borrar un bit de TRISA (=0) hace que el pin correspondiente de PORTA sea una
salida (es decir, pone el contenido del latch de salida en el pin seleccionado).
Leyendo el registro PORTA se lee el estado de los pines; escribiendo en él, se
graba el latch.
El registro del latch de datos (LATA) sólo es memoria mapeada.
Las operaciones de lectura-modificación-escritura en el registro LATA lee y escribe
el valor del latch de salida del PORTA.

Varios pines de PORTA se multiplexan con las entradas analógicas, las entradas
analógicas de VREF+ y de VREF- y la salida de referencia de la tensión del comparador.
La operación de los pines RA5 y RA3:RA0 como entradas del convertidor A/D se
seleccionan al borrar/activar los bits de control en el registro ADCON1 (registro de control
A/D1).
El resto de los pines de PORTA tienen niveles de introducción de datos de TTL y
drivers de salida de CMOS.

RESUMEN DE REGISTROS ASOCIADOS AL PORTA

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTA —RA6(1) RA5 RA4 RA3 RA2 RA1 RA0


LATA — LATA6(1) LATA5LATA4 LATA3 LATA2 LATA1 LATA0
TRISA — TRISA6(1) TRISA5TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
ADCON1 — — VCFG1VCFG0 PCFG3 PCFG2 PCFG1 PCFG0
CMCON C2OUT C1OUT C2INVC1INV CIS CM2 CM1 CM0
CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

Leyenda: — = no implementado, se lee ‘0’. Las celdas sombreadas no las usa el PORTA.
Nota 1: El RA6 y sus bits de direcciones y latch asociados se activan como pines de E/S
basándose en la configuración del oscilador; en otro caso, se leen como ‘0’.

REGISTROS PORTB, TRISB y LATB

El PORTB es un puerto bidireccional de 8bits de ancho.


El registro de la dirección de los datos es TRISB.
Activar el bit TRISB (=1) hará que el pin correspondiente de PORTB sea una
entrada (es decir, pone el conductor correspondiente de la salida en un modo alta
impedancia).
Borrar un bit de TRISB (=0) hace que el pin correspondiente de PORTB sea una
salida (es decir, pone el contenido del latch de salida en el pin seleccionado).
El registro del latch de datos (LATB) sólo es memoria mapeada. Las operaciones
de lectura-modificación-escritura en el registro LATB lee y escribe el valor del latch de
salida del PORTB.
Cada uno de los pines de PORTB tiene un pull-up interno. Un solo bit de control
puede cambiar todo el pull-up. Esto se realiza borrando el bit, RBPU* (INTCON2<7>). El
pull-up cambia automáticamente cuando el pin se configura como salida. Se inhabilita el
pull-up en un reinicio.

RESUMEN DE REGISTROS ASOCIADOS AL PORTB


Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0


LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
INTCON2 RBPU* INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP
INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF
ADCON1 — — VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0
SPPCON(1) — — — — — — SPPOWNSPPEN
SPPCFG(1) CLKCFG1 CLKCFG0 CSEN CLK1EN WS3 WS2 WS1 WS0
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —

Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no se utilizan


para el PORTB.

REGISTROS PORTC, TRISC Y LATC

El PORTC es un puerto bidireccional de 7bits de ancho.


El registro de la dirección de los datos es TRISC.
Activar el bit TRISC (=1) hará que el pin correspondiente de PORTC sea una
entrada (es decir, pone el conductor correspondiente de la salida en un modo alta
impedancia).
Borrar un bit de TRISC (=0) hace que el pin correspondiente de PORTC sea una
salida (es decir, pone el contenido del latch de salida en el pin seleccionado).

RESUMEN DE REGISTROS ASOCIADOS AL PORTC

Nombre Bit 7 Bit 6 Bit 5Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTC RC7 RC6 RC5(1) RC4(1) — RC2 RC1 RC0


LATC LATC7 LATC6 — — — LATC2 LATC1 LATC0
TRISC TRISC7 TRISC6 — — — TRISC2 TRISC1 TRISC0
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND —
Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no se utilizan
para el PORTC.

REGISTROS PORTD, TRISD Y LATD

El PORTD es un puerto bidireccional de 8bits de ancho.


El registro de la dirección de los datos es TRISD.
Activar el bit TRISD (=1) hará que el pin correspondiente de PORTD sea una
entrada (es decir, pone el conductor correspondiente de la salida en un modo alta
impedancia).
Borrar un bit de TRISD (=0) hace que el pin correspondiente de PORTD sea una
salida (es decir, pone el contenido del latch de salida en el pin seleccionado).
El registro del latch de datos (LATD) sólo es memoria mapeada. Las operaciones
de lectura-modificación-escritura en el registro LATD lee y escribe el valor del latch de
salida del PORTD.
Todos los pines del PORTD están implementados con buffer de entrada de
disparadores Shmitt. Cada pin se puede configurar independientemente como entrada o
salida.
Cada uno de los pines de PORTD tiene un pull-up interno. Un solo bit de control
puede cambiar todo el pull-up. Esto se realiza borrando el bit, RDPU (PORTE<7>). El pull-
up cambia automáticamente cuando el pin se configura como salida. Se inhabilita el pull-
up en un reinicio.

RESUMEN DE REGISTROS ASOCIADOS AL PORTD

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTD(3) RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0


LATD(3) LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1LATD0
TRISD(3) TRISD7 TRISD6 TRISD5 TRISD4TRISD3 TRISD2 TRISD1TRISD0
PORTE RDPU(3) — — — RE3(1,2) RE2(3) RE1(3) RE0(3)
CCP1CON P1M1 (3)
P1M0 (3)
DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1CCP1M0
(3)
SPPCON — — — — — — SPPOWNSPPEN
Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no se utilizan
para el PORTD.

REGISTROS PORTE, TRISE Y LATE

El PORTE es un puerto de 4bits de ancho.


Tres pines (RE0/AN5/CK1SPP, RE1/AN6/CK2SPP y RE2/AN7/OESPP) se
configuran individualmente como entradas o salidas.
Estos pines tienen buffer de entrada tipo disparador Shmitt. Cuando se
seleccionan como entrada analógica, éstos pines se leerán como ‘0’s.

El registro de dirección de los datos es TRISE.


Activar el bit TRISE (=1) hará que el pin correspondiente de PORTE sea una
entrada (es decir, pone el conductor correspondiente de la salida en un modo alta
impedancia).
Borrar un bit de TRISE (=0) hace que el pin correspondiente de PORTE sea una
salida (es decir, pone el contenido del latch de salida en el pin seleccionado).
Además de los datos del puerto, el registro PORTE también contiene el bit de
control RDPU (PORTE<7>); esto permite o inhabilita el pull-up del PORTD.
TRISE controla la dirección de los pines RE, incluso cuando se utilizan como
entradas analógicas. El usuario debe cerciorarse de mantener los pines configurados
como entradas cuando use las analógicas.

RESUMEN DE REGISTROS ASOCIADOS AL PORTE

Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

PORTE RDPU(3) — — — RE3(1,2) RE2(3) RE1(3) RE0(3)


LATE(3) — — — — — LATE2 LATE1 LATE0
TRISE(3) — — — — — TRISE2 TRISE1 TRISE0
ADCON1 — — VCFG1 VCFG0PCFG3 PCFG2 PCFG1 PCFG0
CMCON C2OUT C1OUT C2INV C1INVCIS CM2 CM1 CM0
(3)
SPPCON — — — — — — SPPOWN SPPEN
SPPCFG(3) CLKCFG1 CLKCFG0 CSEN CLK1ENWS3 WS2 WS1 WS0
Leyenda: — = no implementado, se lee como ‘0’. Las celdas sombreadas no se utilizan
para el PORTE.

REGISTROS DE ENTRADAS Y SALIDAS CON EL PIC18F4550

Los pines de entradas y salidas presentan las siguientes características en sus


puertos IO
 3 Registros independientes para Configurar, Escribir y Leer cada PUERTO (TRISx,
LATx y PORTx).
 Selección de resistencia PULL-UP solo para el Puerto B.

En las siguientes imágenes se detallan los registros involucrados a las Entradas y


Salidas de cada PUERTO;
Donde x, se refiere al puerto del microcontrolador (A, B, C, D o E)

cómo configurar, escribir o leer un Pin de cada PUERTO;


 TRISX: Escribiendo en cada bit (“1” lógico = Entrada y “0” lógico = Salida).
 LATX: Escribiendo en cada bit la salida tendrá un nivel de Voltaje (“1” lógico = 5v | “0”
lógico = 0v).
 PORTX: Este registro es de solo Lectura (5v =”1” lógico | 0v =“0” lógico).

1. Configuración de los pines IO de un PUERTO


TRISA = 0b11111111; Configura todos los pines del Puerto A como Entrada.
TRISA = 0b00000000; Configura todos los pines del Puerto A como Salida.
TRISA = 0b00001111; Los pines Altos como Salida y el resto como Entrada.
Puerto como salida (TRISx = 0) o como entrada (TRISx= 1).

2. Escritura de pines en un PUERTO


Permite el envío de datos, el contenido de una variable o el resultado de una expresión
matemática hacia los pines de un puerto.
Ejemplos:
LATA=0x00; //Todos los pines del puerto A se ponen en 0, 0b00000000;
LATB=variable; //Los bits de la variable son enviados hacia los pines del puerto B
LATB=LATA+65; //El valor del puerto A más 65 se envía hacia el puerto B
También se pueden usar bits individuales de un puerto usando cualesquiera de las
siguientes instrucciones:
LATB.F0=0; //El pin RB0 se pone en 0
RB0_bit=0;

LATA = 0b11111111; Todos los pines del Puerto A con una salida de 5v.
LATA = 0b00000000; Todos los pines del Puerto A con una salida de 0v.
LATA = 0b00001111; Los pines Altos a 0v y los pines Bajos a 5v.

3. Lectura de un PUERTO
Permite el ingreso de datos a través de los puertos del microcontrolador y almacenarlos
en una o más variables.

Ejemplos:
variable=PORTA; //Los bits del puerto A se almacenan en la variable
LATB=PORTA; //Los bits del puerto A se envían hacia los pines del puerto B

También se puede leer el estado individual de cada bit de un puerto usando cualesquiera
de las siguientes instrucciones:
variable=PORTB.F3; //Lee el estado del pin RB3 y lo guarda en la variable
variable=RB3_bit;

Valor = PORTA [ RA0 ]; // El estado lógico del pin A0 se escribe en la variable valor
Valor = PORTA; // El estado lógico del todo el Puerto A se escribe en valor.

Para poder Habilitar la resistencia PULL-UP en un pin determinado, es necesario que


dicho pin este configurado como entrada y luego escribir “0” lógico en el bit RBPU del
registro INTCON2.

También podría gustarte