Vous êtes sur la page 1sur 29

EJERCICIOS DE APLICACIN Y MISCELNEAS SOBRE EL PIC16F84 MDULO I

Realizado por: Ing. Ivn Ochoa


Cabimas, Estado Zulia

AGENDA GENERAL

Encendido y Apagado de Diodos LEDs.


Semforos. Manejo de Tablas de Verdad.

Rotaciones.

Escribir un programa que, dependiendo del estado de dos interruptores conectados a RA0 y RA1, presente en el puerto B diferentes funciones lgicas cuya tabla de verdad es:
RA1 RA0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 0 0 1 0 1 0 1 0 1 0

0 1 1

1 0 1

0 0 1

1 0 1

0 0 1

1 0 1

0 1 0

1 1 0

0 1 0

1 1 0

Inicio

List p= 16F84 Declaracin de Etiquetas Configuracin de Puertos PtoA Entrada, PtoB Salida
Cargar a w con 11110000 y moverlo a PtoB

Es RA1 RA0 = 00?

Si

Cargar a w con10101010 y moverlo a PtoB

No
Es RA1 RA0 = 10?

No No
Es RA1 RA0 = 01?

Si

Cargar a w con 01010101 y moverlo a PtoB

Si
Cargar a w con 00001111 y moverlo a PtoB

En un PIC16F84 que trabaja a 4 MHz se conecta un diodo led rojo al pin RB0 y un led verde al pin RB1. Se desea hacer parpadearlos mediante el uso de un interruptor S0 colocado en el pin RA0. Cuando RA0 = 1 el led rojo parpadea 1 seg y cuando RA0 = 0 el LED verde parpadea 2 seg. Confeccione el programa.

Inicio

List p= 16F84 Declaracin de Etiquetas Configuracin de Puertos PtoA Entrada, PtoB Salida Rutina de Retardo de 1 Seg RB0= 0

Rutina de Retardo de 1 Seg


RB0= 1

Es RA0= 1?

RB1= 1 Rutina de Retardo de 2 Seg Rutina de Retardo de 2 Seg

RB1= 0

Podemos comprobar como la memoria est dividida en dos bancos (cada una de las columnas): banco 0 y banco 1. Las primeras 12 posiciones de cada banco (00h-0Bh y 80h-8Bh) estn ocupadas por los Registros de Propsito Especial (Special Purpose Registers). Estos registros son los encargados de controlar ciertas funciones especficas del PIC. Las 68 posiciones siguientes (0Ch4Fh y 8Ch-CFh) son los denominados Registros de Propsito General, del ingls General Purpose Registers. stos son empleados para guardar cualquier dato que necesitemos durante la ejecucin del programa.

BANCO 0
TMR0: es un temporizador/contador de 8 bits. Puede operar de dos modos distintos:

- Temporizador: el registro incrementa su valor en cada ciclo de instruccin (Fosc/4).


- Contador: el registro incrementa su valor con cada impulso introducido en la patita RA4/TOCKI. En ambos casos, cuando el registro se desborda, es decir, llega a su valor mximo (en este caso 2^8 = 256. Como el 0 tambin se cuenta, el mximo valor sera 255), empieza de nuevo a contar a partir del 0, no sin antes informar de este evento a travs de la activacin de un flag y/o una interrupcin. PCL: es el contador del programa. Indica la direccin de memoria que se leer a continuacin. En algunas ocasiones, como el empleo de las tablas, el uso de este registro es imprescindible.

BANCO 0
STATUS: registro de 8 bits que sirve para configurar ciertos aspectos del PIC. En la
siguiente figura se aprecia la disposicin de los bits de dicho registro:

Bit 7 IRP

Bit 6

Bit 5 RP0

Bit 4 TO#

Bit 3 PD#

Bit 2 Z

Bit 1 DC

Bit 0 C

- RP0: indica el banco de memoria con el que se est trabajando. Cuando vale 0 se
selecciona el Banco 0 y cuando vale 1 el Banco 1. PORTA: representacin de la puerta A. Cada bit representa una lnea de E/S de la puerta A:

Bit 7

Bit 6

Bit 5

Bit 4
RA4

Bit 3
RA3

Bit 2
RA2

Bit 1
RA1

Bit 0
RA0

Como se puede comprobar, los tres bits de mayor peso no representan ninguna lnea de E/S, ya que la puerta A slo tiene 5 lneas de E/S. PORTB: lo mismo que la puerta A, pero en este caso con 8 lneas de E/S

Bit 7 RB7

Bit 6 RB6

Bit 5 RB5

Bit 4 RB4

Bit 3 RB3

Bit 2 RB2

Bit 1 RB1

Bit 0 RB0

BANCO 1
TRISA: Registro de 8 bits de configuracin de la puerta A. Si un bit se encuentra en 1, esa lnea de E/S se configura como entrada; si, en cambio, se encuentra a 0, se configura como salida .

TRISB: Lo mismo que TRISA, pero referente a la puerta B.


Bit 7 RB7 Bit 6 RB6 Bit 5 RB5 Bit 4 RB4 Bit 3 RB3 Bit 2 RB2 Bit 1 RB1 Bit 0 RB0

Finalmente cabe destacar el registro W, tambin conocido como registro de trabajo (del ingls work) o acumulador. Es de vital importancia ya que, entre otras, deberemos usarlo de registro puente para llevar a cabo ciertas operaciones.

REGISTRO ESTADO (STATUS)


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

IRP

RP1

RP0

TO#

PD#

DC

Bit 7, IRP: Seleccin del banco en direccionamiento indirecto. Este bit junto con el de ms peso del registro FSR sirven para determinar el banco de la memoria de datos seleccionado. En el PIC16X84 al disponer de dos bancos no se usa y debe programarse como 0. Bit 6 y 5, RP0 y RP1: Register Bank Select. Seleccin de pgina o banco de la memoria con direccionamiento directo. Cada pgina contiene 128 bytes. Como el PIC16X84 slo tiene dos bancos nicamente se emplea RP0 de forma que cuando vale 0 se accede al banco 0 y cuando vale 1 se accede al banco 1. Despus de un reset, RP0 se pone automticamente a 0. RP1 debe mantenerse a 0. El bit RP1 deber ser puesto a cero, ya que si no nos saldramos del rango de memoria. Bit 4 (flag), TO: Time Out (Tiempo acabado) 1. Se pone a 1 tras conectar la alimentacin o al ejecutar CLRWDT o SLEEP. 0. Se pone a 0 por desbordamiento del Perro Guardin WDT. Bit 3 (flag), PD: Power Down (Apagado). 1. Se pone automticamente a 1 tras conectar la alimentacin Vdd o ejecutar CLRWDT, que resetea el contador WatchDog. 0. Se pone a 0 al ejecutar la instruccin SLEEP.

REGISTRO ESTADO (STATUS)


Bit 7 IRP Bit 6 RP1 Bit 5 RP0 Bit 4 TO# Bit 3 PD# Bit 2 Z Bit 1 DC Bit 0 C Bit 2 (flag), Z: Cero
1 = El resultado de una operacin aritmtica o lgica es 0. 0 = El resultado es distinto de 0. Bit 1 (flag), DC (Digit Carry): Acarreo en el 4 bit de menos peso. Funciona igual que el bit de Carry descrito a continuacin. De inters en operaciones en BCD. Bit 0 (flag), C (Carry): Acarreo en el 8 bit o bit de mas peso. Es el bit de "acarreo" en operaciones de suma AADWF y ADDLW as como tambin el bit de "llevada" en las instrucciones de sustraccin SUBWF y SUBLW. Tambin lo emplean las instrucciones RLF y RRF de rotacin de bits. Suma 1. Se pone a 1 cuando se ha producido acarreo en la suma en el bit de mayor peso con las operaciones AADWF y ADDLW. 0. Se pone a 0 si en la suma no se ha producido acarreo. Resta 1. Se pone a 1 si en la resta no se ha producido llevada. 0. Se pone a 0 cuando se ha producido llevada en la resta con las operaciones SUBWF y SUBLW.

REGISTRO ESTADO (STATUS)


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 IRP RP1 RP0 TO# PD# Z DC C

Posibles

configuraciones de los bits de seleccin de pgina RP1 y RP0:


RP1
0 0 1 1

RP0
0 1 0 1

BANCO
0 1 2 3

DIRECCIN
00h a 7Fh 80h a FFh 100h a 17Fh 180h a 1FFh

REGISTRO OPTION
El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupcin y la activacin de las resistencias de polarizacin del puerto B. Ocupa la posicin 81h de la pgina 1 del banco de registros. Debe escribirse usando la instruccin especial OPTION. Esta instruccin carga el contenido de W en el registro OPTION. Bit 7 IRP Bit 6 RP1 Bit 5 RP0 Bit 4 TO# Bit 3 PD# Bit 2 Z Bit 1 DC Bit 0 C

Bit 7, /RBPU (RB Pull Up). Conexin de las resistencias de polarizacin del Puerto B. Se conectan todas cuando el puerto B acta como entrada. 1: Todas las resistencias son desconectadas. 0: Las resistencias se activan de forma individual.
Bit 6, INTDEG (INTerrupt EDGe). Selecciona el tipo de flanco para la interrupcin externa. Este bit indica el tipo de flanco de la seal externa que ha de provocar una interrupcin en la patilla RB0/INT. 1: La interrupcin es producida por el flanco ascendente o de subida. 0: La interrupcin es producida por el flanco descendente o de bajada.

REGISTRO OPTION
Bit 7 IRP Bit 6 RP1 Bit 5 RP0 Bit 4 TO# Bit 3 PD# Bit 2 Z Bit 1 DC Bit 0 C
Bit 5, T0CS (Timer 0 Signal Source): Seleccin de la fuente de reloj para el TMR0. 1: TMR0 se usa en modo contador de los pulsos introducidos a travs de RA4/T0CKI 0: TMR0 se usa en modo temporizador haciendo uso de los pulsos de reloj internos (Fosc/4). Bit 4, T0SE (Timer 0 Signal Edge): Tipo de flanco activo de T0CKI (patilla RA4/T0CKI). 1 = El TMR0 se incrementa con el flanco descendente de la seal aplicada a RA4/T0CK1. 0 = El TMR0 se incrementa con el flanco ascendente. Bit 3, PSA (PreScaler Assignement): Se usa para la asignacin del divisor de frecuencias o Prescaler. 1 = El divisor de frecuencia se asigna al WDT. 0 = El divisor de frecuencia se asigna a TMR0.

REGISTRO OPTION
Bit 7 IRP

Bit 6 RP1

Bit 5 RP0

Bit 4 TO#

Bit 3 PD#

Bit 2 Z

Bit 1 DC

Bit 0 C

Bits 0, 1 y 2, PS0, PS1 y PS2 (Prescaler Rate Select Bits): Configura la tasa del valor del divisor de frecuencia o prescaler. Difiere dependiendo que se haya asignado al TMR0 o al WDT.
PS2 PS1 PS0 Divisor TMRO Divisor WDT

0
0 0

0
0 1

0
1 0

1:2
1:4 1:8

1:1
1:2 1:4

0
1 1 1 1

1
0 0 1 1

1
0 1 0 1

1:16
1:32 1:64 1:128 1:256

1:8
1:16 1:32 1:64 1:128

RUTINA DE TEMPORIZACIN PARA UN SEGUNDO


Reta1 movlw movwf bucle call clrf decf movwf btfss goto return explora btfss goto return d'122' CONTA explora TMR0_OPT CONTA,0 CONTA ESTADO,2 bucle TMR0_OPT,6 explora ; 122 -> W

; TMR0 = 0 y empieza su decremento ; CONTA - 1 -> W ; Se actualiza FZ ; FZ = 1? ; Otra vez al bucle de exploracin ; Se ha explorado 122 veces ; TMR0<6> = 1? ; No ha llegado TMR0 a 64d ; Ha llegado TMR0 al valor 64d y retorna ; al programa principal

FRMULA PARA EL CLCULO DE LA TEMPORIZACIN


TEMPORIZACIN=

4 x Tosc x Valor Cargado en x TMR0

Rango del Divisor de Frecuencia

Ejemplo N 1: Si tenemos un PIC16F84 funcionando con una Fosc= 4 MHz, con un valor mximo cargado en el TMRO de 11111111(2) y un rango para el Divisor de Frecuencia de 1:256 asignado al TMR0. Cul es el valor de la temporizacin ? Luego aplicando la frmula de Tosc= 1/Fosc = 1/4MHz = 0.25 seg temporizacin obtenemos: Valor cargado en TMR0= 11111111(2), llevndolo a decimal sera = 255 (10) TEMP= 4x(0.25x10-6)x255x256 TEMP= 65,28 mseg 65.3 mseg

FRMULA PARA EL CLCULO DE LA TEMPORIZACIN


TEMPORIZACIN=

4 x Tosc x Valor Cargado en x TMR0

Rango del Divisor de Frecuencia

Ejemplo N 2: Si tenemos un PIC16F84 funcionando con una Fosc= 4 MHz, con un valor mximo cargado en el TMRO de 01000000(2) y un rango para el Divisor de Frecuencia de 1:128 asignado al TMR0. Cul es el valor de la temporizacin ? Tosc= 1/Fosc = 1/4MHz = 0.25 seg. Luego aplicando la frmula de temporizacin obtenemos: TEMP= 4x(0.25x10-6)x64x128 TEMP= 8.192 mseg 8.2 mseg

Valor cargado en TMR0= 01000000(2), llevndolo a decimal sera = 64(10)

Organigrama de la Secuencia a Seguir para el Grabado del Microcontrolador

Archivos de Entrada: Cdigo fuente (.asm): Archivo fuente de entrada al ensamblador. Archivo include (.inc): Archivo de inclusin o cabecera. Archivos de Salida: Archivo de listado (.lst): Archivo del listado generado por el ensamblador. Archivo de error (.err): Archivo de errores de ensamblado. Archivo hexadecimal (.hex, .hxl, .hxh): Archivo hexadecimal con cdigo ejecutable. Archivo de referencias cruzadas (.xrf): Archivo para las referencia cruzadas de los archivos ensamblados. Archivo de smbolos y depuracin (.cod). Archivo objeto (.o).

Introduccin a la Programacin en Ensamblador

Desde que se concibe un programa hasta que se graba en la memoria del microcontrolador, suceden una serie de operaciones. El primer paso de un diseo basado en microcontrolador consiste en escribir el cdigo fuente del programa en el lenguaje seleccionado. Posteriormente, si el lenguaje usado ha sido el ensamblador, se convierte a cdigo ejecutable mediante el uso de un programa de ensamblador como el de la empresa Microchip, que se llama MPASM. La depuracin y simulacin se realizarn mediante el simulador software MPSIM (entorno DOS) o el MPLAB (entorno Windows).

Escritura del Cdigo Fuente

El cdigo fuente del lenguaje ensamblador est estructurado en columnas. Cualquier texto que comience en la primera columna se considerar una etiqueta y ser parte del campo de etiquetas. Las siguientes tres columnas contienen el campo de instrucciones, el campo de datos y el campo de comentarios. Los comentarios deben empezar con punto y coma

Escritura del Cdigo Fuente

Campo de Etiquetas: Las etiquetas son nombres de subrutinas o secciones de cdigo fuente.
Dando nombres a partes del programa, se posibilita que las

instrucciones puedan saltar o hacer referencia a esas partes sin necesidad de recordar las direcciones fsicas donde estn ubicadas.
El ensamblador MPASM permite etiquetas de hasta 32

caracteres.
Una etiqueta puede ir seguida de dos puntos (:), espacios,

tabuladores o RETURN.
Deben empezar por un carcter alfanumrico o de subrayado

(_) y pueden contener cualquier combinacin de caracteres alfanumricos.

Escritura del Cdigo Fuente

Campo de Instrucciones: Las segunda columna corresponde al campo de instrucciones. Puede ser una instruccin del microcontrolador o una instruccin para el ensamblador, llamada directiva.

Campo de Datos: Contiene datos u operandos para las intrucciones. En los PICs, los datos pueden ser un registro, un bit de un registro, una etiqueta o un nmero constante (llamado literal).
Algunas instrucciones no llevan datos. Si una instruccin necesita mltiples datos, deben

separarse por comas (,).


La especificacin de la base en la que se expresan los datos u operandos es opcional: d65,

b01000001,0x41, o101 y A son el mismo dato.


El sufijo d o D se emplea para expresar un valor en decimal. El sufijo b o B expresa un valor

en binario.
Para expresar un valor en hexadecimal se emplea el sufijo 0x 0X. Un nmero en base octal se representa mediante el sufijo o O.

Finalmente, un valor se puede expresar mediante un caracter ASCII si se encierra entre

comillas simples como A.

Escritura del Cdigo Fuente

Campo de Comentarios: El ltimo campo es el del comentario, siempre que haya un punto y coma (;) como primer carcter. Puede colocarse en cualquier lugar del cdigo fuente. Los comentarios en ensamblador son muy importantes. Los comentarios deben describir las tareas que realizan las instrucciones y/o subrutinas. Sin comentarios, es muy difcil descifrar, algunos das despus, el cdigo fuente que uno mismo ha creado.

Ejemplo de Etiquetas, Instrucciones, Datos y Comentarios

Ms Ejemplos de lo Anterior

DIRECTIVAS
Una directiva es un comando escrito en el cdigo fuente para realizar un control directo o ahorrar tiempo a la hora de ensamblar. El resultado de incorporar directivas se puede ver en el fichero *.LST despus de ensamblar el programa. LIST: Permite elegir, entre otras cosas, el tipo de microcontrolador a utilizar (P), nmero de caracteres por lnea (C), tamao de los tabuladores (B), base de numeracin por defecto (R), niveles de mensajes de salida (W), etc. EQU: Se utiliza para asignar valores a las etiquetas deseadas. As, Resultado, tiene asignado el valor 0x10, y puede referirse a un registro de la memoria de datos del PIC. ORG: indica al ensamblador dnde debe comenzar a colocar las instrucciones en la memoria de programa. Es decir, es el ORiGen para todo el cdigo que sigue. La direccin de comienzo (origen) es en la posicin 0, debido a que la familia de microcontroladores PIC de gama media despus del encendido o RESET siempre ejecutan la instruccin situada en la direccin 0. Se denomina Vector de Reset. La direccin 4 es el Vector de Interrupcin. Si se genera una interrupcin el microcontrolador ejecuta la instruccin que se encuentre aqu. Es una buena prctica dejar libre la direccin 4 por si ms adelante deseamos aadir capacidad de interrupcin a nuestro programa. El programa salta por encima del Vector de interrupcin y comienza en la direccin 5. INCLUDE: Permite aadir listados de programas al listado del programa actual. END: Indica al ensamblador el final del cdigo fuente, donde ha de finalizar el proceso de ensamblado.

Vous aimerez peut-être aussi