Вы находитесь на странице: 1из 85

Curso de Microcontroladores PIC 16F877

Carlos Romero D.
Ingeniero en Electrnica

Principales Caractersticas
Los Microcontroladores poseen caractersticas que los hacen nicos, ya que integran una arquitectura y funcionamiento que los hace superiores a los microprocesadores tradicionales

Que es un microcontrolador?
Es un computador completo, aunque de limitadas prestaciones, que esta contenido en el chip de un circuito integrado y se destina a gobernar una sola tarea

Diferencias entre un microprocesador y un microcontrolador


Se dice que un microprocesador es un sistema abierto porque su configuracin es variable de acuerdo con la aplicacin que se destina

Un microcontrolador por el hecho de que los componentes internos son fijos, se puede decir, de que se trata de un sistema cerrado y su configuracin no es del tipo variable

Esquema de un sistema basado en un microprocesador tradicional


La disponibilidad de los buses en el exterior permite que se configure a la medida de la aplicacin

Esquema de un sistema abierto basado en un microprocesador tradicional

Microcontrolador
El microcontrolador es un sistema cerrado. Todas sus partes estn contenidas en su interior y solo salen al exterior las lneas que gobiernan los perifricos

Componentes bsicos de un microcontrolador

Procesador o CPU

Memoria RAM para contener los datos


Memoria para el programa tipo ROM / PROM / EPROM / EEPROM Lneas de E/S para comunicarse con el exterior Recursos auxiliares

Mdulos especializados de los microcontroladores en tareas de:

Temporizadores Puertas en serie y paralelo Convertidores A/D y D/A Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema

Caractersticas relevantes de los PIC


Arquitectura interna Arquitectura RISC, juego reducido de Arquitectura de Harvard, la memoria de instrucciones datos e instrucciones son independientes Ciclo de reloj, cada instruccin del PIC tarda en ejecutarse cuatro periodos de reloj

Todas las instrucciones del PIC se realizan en un ciclo de instruccin menos las de salto que se tardan el doble

Caractersticas relevantes de los PIC


Los impulsos de la seal de reloj se dividen en 4 internamente dando lugar a las seales Q1, Q2,Q3, Q4.

Ciclo de instruccin formado por 4 seales (Q1-Q4 asociadas al reloj externo OSC1)

Caractersticas relevantes de los PIC


Se realizan las siguientes operaciones:

Q1: Se incrementa el contador de programa Q4: Se busca el cdigo de la instruccin en la memoria del programa y se carga en el registro de instrucciones Q2 Q3: Se produce la descodificacin y la ejecucin de la instruccin.

Caractersticas relevantes de los PIC


Para conseguir que cada instruccin se ejecute en un ciclo de instruccin se aplica la tcnica de la segmentacin.

La segmentacin permite ejecutar en el mismo ciclo la instruccin y la bsqueda excepto en las instrucciones de salto

Osciladores
La variedad de trabajo del PIC depende del oscilador a emplear, pueden ser del tipo RC, LP, XT y HS.

Oscilador tipo RC: Formado por una resistencia y un condensador. El rango del oscilacin depende del valor de R y C Oscilador tipo LP: Formado por un cristal de cuarzo y 2 condensadores. Opera entre 35 a 200 KHZ. Bajo consumo Oscilador tipo XT: Formado por un cristal de cuarzo y 2 condensadores. Opera entre 100 KHZ y 4 MHZ. Oscilador tipo HS: Formado por un cristal de cuarzo y 2 condensadores. Opera entre 4 y 10 MHZ.

El procesador
Es el corazn del sistema y por la concepcin de su arquitectura lo hace ms rpido en la ejecucin de cada instruccin.

En la arquitectura de Harvard la memoria de instruccin y de los datos son independientes, lo que permite optimizar sus caractersticas y propiciar el paralelismo

PIC 16F877
A continuacin se presenta la arquitectura tipo Harvard simplificada para los PIC 16F87x

Arquitectura tipo Harvard simplificada para los microcontroladores PIC 16F87x

PIC 16F877

PIC 16F877
En el siguiente esquema se presenta con ms detalle la arquitectura correspondientes a los modelos PIC 16F87x

Diagrama de bloques que poseen los PICS 16F874 / 77 internamente

Principales Caractersticas

Set reducido de 35 instrucciones 14 fuentes de interrupciones disponibles Proteccin para cdigo de programa Frecuencia de operacin hasta 20 Mhz. Memoria FLASH de programa 8k (con palabras de 14 bit) Memoria de datos 368 bytes. Memoria de datos EEPROM 256 bytes

Principales Caractersticas

Puertos de Entrada/Salida: Puerto A : 6 bit Puerto B : 8 bit Puerto C : 8 bit Puerto D : 8 bit Puerto E : 3 bit 3 Timers 2 Mdulos de captura/Comparacin/PWM Comunicacin Serial Comunicacin Paralelo Conversor Anlogo Digital de 10 bit, 8 canales

Definiciones
Registros: Posiciones de memoria que poseen 8 bits de datos. El contenido de un registro se puede expresar en formato decimal (d128), formato Hexadecimal (0x80) o en binario (b10000000).
W: Registro especial llamado Acumulador y se utiliza en la mayora de las operaciones

Organizacin de la memoria de programa


La memoria FLASH de 8K x 14bit esta direccionada con el PC (de 13bit) la pila es de tipo LIFO. Con la instruccin CALL e interrupciones el valor del PC se salva en el nivel superior

Organizacin de la memoria de tipo FLASH en los PIC 16F87x

Organizacin de la memoria de datos


La memoria de datos tiene posiciones implementadas en RAM y otros en EEPROM. La RAM esttica consta de 4 bancos con 128bytes cada uno.

Mapa de registros PICS 16F876 / 877

Tablas

Posicin de memoria y los bits asociados al nombre del registro

Tablas

Posicin de memoria y los bits asociados al nombre del registro

Tablas

Posicin de memoria y los bits asociados al nombre del registro

Tablas

Posicin de memoria y los bits asociados al nombre del registro

Instrucciones
Instrucciones que manejan bits dentro de un registro cualquiera 1.- Instruccin BCF bcf f,b Coloca un 0 en una posicin especfica de un registro f definida por b bcf REGISTRO,3

Resultado

Instrucciones
2.- Instruccin BSF bsf f,b
Coloca un 1 en una posicin especfica de un registro f definida por b

bsf

REGISTRO,5

Resultado

Ejemplo
Ejemplo : Transformar el contenido de REGISTRO (0xF8) en 0x91

bcf bcf bcf bsf

REGISTRO,6 REGISTRO,5 REGISTRO,3 REGISTRO,0

Instrucciones de salto
3.- Instruccin BTFSC btfsc f,b Explora el bit cuya posicin esta definida por b, dentro del registro f y se salta la siguiente instruccin si y solo si el valor de dicho bit es cero. Btfsc REGISTRO,3
bsf REGISTRO,0

bcf

REGISTRO,5

Instrucciones de salto
4.- Instruccin BTFSS btfss f,b Explora el bit cuya posicin esta definida por b, dentro del registro f y se salta la siguiente instruccin si y solo si el valor de dicho bit es uno. Btfss REGISTRO,3
bsf REGISTRO,0

bcf

REGISTRO,5

Instrucciones de GOTO
5.- Instruccin GOTO goto l Salta automaticamente al lugar que se le indica en l (Etiqueta de salto).
bcf bsf goto bsf bcf bcf bsf bsf REGISTRO,3 REGISTRO,2 SALTAR REGISTRO,0 REGISTRO,1 REGISTRO,4 REGISTRO,8 REGISTRO,7

SALTAR

Ejemplo
Ejemplo : Verificar que el primer nible del REGISTRO es igual a 1011, de lo contrario borrarlo
btfss REGISTRO,0 goto SALIR btfss REGISTRO,1 goto SALIR btfsc REGISTRO,2 goto SALIR btfss REGISTRO,3 goto SALIR goto OK SALIR bcf REGISTRO,0 bcf REGISTRO,1 bcf REGISTRO,2 bcf REGISTRO,3 OK RETURN

Instruccin DECFSZ
6.- Instruccin DECFSZ decfsz f,d Decrementa el registro f y se salta la siguiente instruccin cuando el registro adquiere el valor cero. Si d=0,el resultado se almacena en W, si d=1 se almacena en f.

REGISTRO contiene el valor 0x05


VOLVER decfsz REGISTRO,d ; Puede ser f o w goto VOLVER bcf REGISTRO,2 .

Instruccin DECFSZ
6.- Instruccin DECFSZ decfsz f,d Decrementa el registro f y se salta la siguiente instruccin cuando el registro adquiere el valor cero. Si d=0,el resultado se almacena en W, si d=1 se almacena en f.

REGISTRO contiene el valor 0x05


VOLVER decfsz REGISTRO,d ; Puede ser f o w goto VOLVER bcf REGISTRO,2 .

Instruccin INCFSZ
7.- Instruccin INCFSZ incfsz f,d Incrementa el registro f y se salta la siguiente instruccin cuando el registro adquiere el valor cero. Si d=0,el resultado se almacena en W, si d=1 se almacena en f.

REGISTRO contiene el valor 0xFE


VOLVER incfsz goto bcf . REGISTRO,d VOLVER REGISTRO,2 ; Puede ser f o w

Instrucciones para manejo de literales


8.- Instruccin MOVLW movlw l Mueve un nmero cualquiera (entre 0 y 255) al acumulador

movlw

0x30

Resultado : en W se almacena el nmero 30 en notacin hexadecimal

Instrucciones para manejo de literales


9.- Instruccin ADDLW addlw l Suma un numero cualquiera con el contenido del acumulador (W) Flags afectados: C, CD, Z del registro STATUS
movlw d23

addlw

d10

Resultado : en W se almacena el resultado final de la operacin : 33

Instrucciones para manejo de literales


10.- Instruccin SUBLW sublw l Al literal le resta el contenido del acumulador (w) movlw d15

sublw

d20

Resultado : en W se almacena el resultado final de la operacin : 5

Instrucciones para manejo de literales


11.- Instruccin ANDLW andlw l Realiza la operacin lgica AND entre el acumulador y un nmero cualquiera movlw
andlw

b10101010
b01010101

Resultado : en W se almacena el resultado final de la operacin : 0

Instrucciones para manejo de literales


12.- Instruccin IORLW iorlw l Realiza la operacin lgica OR entre el acumulador y un nmero cualquiera. Flags afectados: z
movlw b10101010

iorlw

b01010101
Resultado : en W se almacena el resultado final de la operacin : 0xFF

Instrucciones para manejo de literales


13.- Instruccin XORLW xorlw l Realiza la operacin lgica OR exclusiva entre el acumulador y un nmero cualquiera movlw xorlw b10101111 b10101111
Resultado : en W se almacena el resultado final de la operacin : 0x00

Ejemplo
Ejemplo : Si el valor de W es igual a 0XAA, entonces borrar W, de lo contrario mantener el valor

xorlw btfss goto movlw SALIR return

0xAA STATUS,Z SALIR 0X00

Instrucciones para manejo de registros


14.- Instruccin MOVWF movwf f Mueve el contenido del acumulador a un registro cualquiera

movlw
movwf

0x55
CUENTA

Resultado : en CUENTA se almacena el nmero 55 en notacin hexadecimal

Instrucciones para manejo de registros


15.- Instruccin MOVF movf f,d Mueve un registro cualquiera y lo coloca en el acumulador o en si mismo. Flags afectados Z movlw movwf bcf
movf

0xFF CUENTA CUENTA,0


CUENTA,W

Resultado : en W se almacena el nmero 0xFE en notacin hexadecimal

Instrucciones para manejo de registros


16.- Instruccin RLF rlf f,d Rota hacia la izquierda el contenido de un registro, dejando el resultado en el mismo registro o en W (d=0) Flags afectados: C
movlw movwf bcf rlf 0xFF VALOR STATUS,C VALOR,1

Resultado : en VALOR se almacena el nmero 0xFE en notacin hexadecimal

Instrucciones para manejo de registros


17.- Instruccin RRF rrf f,d Rota hacia la derecha el contenido de un registro, dejando el resultado en el mismo registro o en W (d=0) Flags afectados: C movlw movwf bcf rrf 0xFF VALOR STATUS,C VALOR,1

Resultado : en VALOR se almacena el nmero 0x7F en notacin hexadecimal

Instrucciones para manejo de registros


18.- Instruccin CLRF clrf f Borra el contenido de un registro cualquiera. Flags afectados: Z

movlw
movwf

0x4A
CONTADOR

clrf

CONTADOR

Resultado : 0X00 en CONTADOR

Instrucciones para manejo de registros


19.- Instruccin CLRW clrw Borra el contenido del acumulador (W) Flags afectados: Z clrw

Resultado : 0X00 en W

Instrucciones para manejo de registros


20.- Instruccin NOP No ejecuta ninguna operacin nop

nop

Resultado : No afecta en nada, solo demora

Instrucciones para manejo de registros


21.- Instruccin COMF compf f,d Complementa el valor de un registro cualquiera Flags afectados: Z movlw movwf compf b00011000 ADC ADC,1 Resultado : en ADC se almacena el valor inicial negado.

Instrucciones para manejo de registros


22.- Instruccin SWAPF swapf f,d Intercambia el nible superior con el nible inferior
movlw 0X0F

movwf
swapf

ADC
ADC,1

Resultado : en ADC se almacena el valor 0XF0.

Instrucciones para manejo de registros


23.- Instruccin INCF incf f,d Incrementa el valor de un registro cualquiera. Flags afectados: Z movlw movwf
incf

0X0F PORTB
PORTB,1

Resultado : en PORTB se almacena el valor 0X10.

Instrucciones para manejo de registros


24.- Instruccin DECF decf f,d Decrementa el valor de un registro cualquiera. Flags afectados: Z movlw
movwf decf

0X0F
PORTB PORTB,1

Resultado : en PORTB se almacena el valor 0X0E.

Instrucciones para manejo de registros


25.- Instruccin ADDWF addwf f,d Suma el valor de un registro cualquiera con el acumulador (W) y el resultado lo deja en W, o en el mismo registro. Flags afectados: C, CD, Z movlw 0X03

addwf

PORTB,F1

Resultado : en PORTB se almacena el la suma entre 0X03 y el valor de PORTB.

Instrucciones para manejo de registros


26.- Instruccin SUBWF subwf f,d Resta a un registro cualquiera el valor del acumulador. Flags afectados: C, CD, Z movlw subwf 0X20 RESTA,1

Resultado : en RESTA se almacena la resta entre RESTA y el valor de W.

Instrucciones para manejo de registros


27.- Instruccin ANDWF andwf f,d Operacin lgica AND entre el acumulador y un registro cualquiera. Flags afectados: Z
movlw 0X50

andwf

VALOR,1

Resultado : en VALOR se almacena la operacin lgica entre VALOR y W.

Instrucciones para manejo de registros


28.- Instruccin IORWF iorwf f,d Operacin lgica OR entre el acumulador y un registro cualquiera. Flags afectados: Z movlw iorwf 0XDE VALOR,1

Resultado : en VALOR se almacena la operacin lgica entre VALOR y W.

Instrucciones para manejo de registros


29.- Instruccin XORWF xorwf f,d Operacin lgica OR exclusiva entre el acumulador y un registro cualquiera. Flags afectados: Z
movlw 0XDE

xorwf

VALOR,1

Resultado : en VALOR se almacena la operacin lgica entre VALOR y W.

Instrucciones especiales
30.- Instruccin CALL Llama a una subrutina call l

31.- Instruccin RETURN return Retorna desde una subrutina

32- Instruccin clrwdt Borra el contador del Perro Guardin

Instrucciones especiales
33.- Instruccin RETFIE retfie Retorna del llamado de interrupcin 34.- Instruccin SLEEP sleep Coloca en reposo el microcontrolador 35.- Instruccin RETLW retlw Retorna de una subrutina volviendo con un literal en el acumulador

Ejemplo
Ejemplo : Cargar el numero 3 en el registro VALOR y multiplicarlo por 4 movlw movwf bcf rlf rlf goto d3 VALOR STATUS,C VALOR,F VALOR,F SALIR

Principales Registros de control

Registro de status

C : Bit sealizador para el acarreo o Curry.


1= operacin aritmtica suma sobrepasa el bit ms significativo. 0= operacin aritmtica suma no sobrepasa el bit ms significativo. En la resta es lo contrario

DC : Funciona igual que el anterior (sealizador C) pero con el 4 bit. Z : bit de 0.


1= cuando el resultado de una operacin aritmtica o lgica es 0. 0= cuando el resultado de una operacin aritmtica o lgica no es 0.

Registro de status
PD# : Se pone a 0 con la instruccin SLEEP, pasa a 1 con la instruccin CLRWDT o tras la conexin de alimentacin. TO# : Se pone a 0 con el rebalse del WDT, pasa a 1 con la instruccin CLRWDT y SLEEF o tras la conexin de alimentacin. RP1, RP0 : Se utilizan para seleccionar un banco en la RAM

Registro TRIS

Registro utilizado para configurar los puertos de entrada/salida a nivel de bit, en el caso de PIC16F877, se tiene TRISA, TRISB, TRISC, TRISD y TRISE. 1 : Entrada Digital 0 : Salida Digital

Ejemplo
Configurar los puertos de E/S del uC para trabajar con el circuito de la figura.

Solucin
bsf clrf bsf movlw movwf bcf bcf STATUS,RP0 TRISB TRISE,2 0xFF TRISD TRISD,0 STATUS,RP0 ; Banco 1 ; Puerto B Salida ; Bit 2 puerto E, entrada ; Mover 0XFF al W ; Puerto D entrada ; Bit 0 puerto D, salida ; Banco 0

Ejercicios prcticos
1.- Mover un literal directamente al puerto B.

2.- Encender un led conectando al puerto RB0, en funcin del estado de un switch conectado a RB7.
3.- Copiar el puerto C al puerto B 4.- Encender todos los leds del puerto B y cambiar su estado cuando se presione el pulsador. 5.- Incrementar el contenido del puerto B cada vez que se presione el pulsador.

TIMER TMR0 y registros asociados


TIMER TMR0 El TMR0 tiene dos funciones principales 1.- Contador de eventos 2.- Temporizador Registros asociados

1.- OPTION_REG (Configuracin) 2.- TMR0 (Valor del contador), registro 8 bits. 3.- INTCON (Banderas)

Registro OPTION_REG
Es el encargado de configurar el timer 0 y el watchdog.

Bit 7: bit de resistencia pull-up PDRTB. 1=desactivadas 0= activadas Bit 6: 1=flanco ascendente en pin RBO/INT 0=flanco descendente en pin RBO/INT Bit 5: bit selector de tipo de reloj para el TMRO 1=pulsos introducidos a travs de TOCK1 (contador) 0=pilsos de reloj interno. Fosc/4 (temporizador) Bit 4: 1=incremento de transicin de alto a bajo pin TOCK1 0=incremento de transicin de bajo a alto pin TOCK1 Bit 3: selector de preescaler. 1= preescaler asignado al WDT. 0= preescaler asignado al timer 0 Bits 2-0: bits de seleccin del divisor de frecuancia

Registro OPTION_REG
Es el encargado de configurar el timer 0 y el watchdog.

Registro TMR0 y Registro INTCON


Registro TMR0 Registro de 8 bit el que contiene el valor actual del Contador/Temporizador Registro INTCON Encargado principalmente de controlar las interrupciones, pero adems, muestra distintos tipos de banderas.

Registro INTCON
BIT 7, GIE : Bit de activacin global de interrupciones
1= concedido el permiso de interrupciones 0= no est activado para interrupciones

BIT 6, PEIE: Bit de activacin de perifricos


1= concedido el permiso de interrupcin 0= interrupcin desactivada.

BIT 5, T0IE: Bit de activacin del TMRO


1= concedido el permiso de interrupcin 0= interrupcin desactivada.

Registro INTCON
BIT 4, INTE: Bit de activacin interna
1= concedido el permiso de interrupcin 0= interrupcin desactivada.

BIT 3, RBIE: Bit de activacin del PB


1= concedido el permiso de interrupcin 0= interrupcin desactivada.

BIT 2, T0IF: flag de desborde de TMRO


1= el TMRO ha sobrepasado su cuenta. Se borra por sofware. 0=no ha sobrepasado su cuenta.

Registro INTCON
BIT 1, INTF : bit indicador de interrupcin externa
1= interrupcin activa. Se borra por software. 0= no hay peticin de interrupcin

BIT 0, RBIF : Bit indicador de interrupcion de PB


1= cuando cambia de estado cualquier pin de PB (RB7:RB0) 0= ninguna entrada ha cambiado de estado

Calculo de la temporizacion:

Temporizacin = (valor timer 0) X (valor pre-escaler) x 4 fosc

TIMER TMR1 y registros asociados


TIMER TMR1 Es un controlador/temporizador de 16 bits Interrupcin opcional por desbordamiento de FFFFh a ooooh Registros asociados

1.2.3.4.5.-

T1CON (configuracin) PIR 1 (banderas) PIE 1 (interrupciones) TMR 1 H (carga byte mas significativo de TMR1) TMR 1 L (carga byte menos significativo de TMR1)

Registro T1CON
Es el encargado de configurar TMR1

bit 5 y 4: TICK PS1 TICK SO: bit de seleccin del preescaler bit 3: T1 OSEN, bit de control de habilitacin del oscilador de TM R1 1= oscilador habilitado 0= oscilador no habilitado bit 2: T1SYNC, bit de sincronismo con clock externos 1= modo asncrono 0= modo sncrono

Registro T1CON
TICK PS 1 0 0 1 1 TICK PSO 0 1 0 1 VALOR DEL PREESCALER 1:1 1:2 1:4 1:8

bit 1: TMR1CS, bit de seleccin del clock 1= cloc externo (contador) 0= clock interno (temporizador)

Bit 0: TMR1ON, bit de habilitacin de TMR1 1= TMR1 habilitado 0= TMR1 no habilitado

Registros
REGISTRO PIR 1

Bit 0: TMR1IF, bit de desbordamiento de TMR1 1= TMR1 se ha desbordado 0= TMR1 no se ha desbordado

Registros
REGISTRO PIE 1

Bit 0: TMR1IE, habilita interrupcin del desbordamiento del TMR1 1= habilita 0= no habilita

TIMER TMR2 y registros asociados


TIMER TMR2 Es un temporizador de 8 bits Dispone de un registro de periodo de 8 bits (PR2) Posee preescaler y postescaler de frecuencia programable Registros asociados

1.2.3.4.5.-

T2CON (configuracin) PIR 1 (banderas) PIE 1 (interrupciones) TMR 2 (registro del modulo del TIMER TMR2) PR2 (registro de periodo del TIMER TMR2)

Registro T2CON

T2SKPS1 0 0 1

T2SCKPS0 0 1 X

PREDIVISOR 1:1 1:4 1:16

TOUTPS3 0 0 0 . 1

TOUTPS2 0 0 0 . 1

TOUTPS1 0 0 1 . 1

TOUTPS0 0 1 0 .. 1

POSTDIVISOR 1:1 1:2 1:3 . 1:16

Bit 2: el bit TMRON permite o prohbe (0) el funcionamiento del TMR2

REGISTROS
REGISTRO PIR 1 BIT 1: TMR2IF, bit sealizador de interrupcin cuando TMR2 coincide con PR2 1= TMR2 coincide con PR2 0= TMR2 no coincide con PR2

REGISTRO PIE 1
BIT 1: TMR2IE, habilita interrupcin si TMR2 coincide con PR2 1= habilita 0= deshabilita

Вам также может понравиться