Académique Documents
Professionnel Documents
Culture Documents
AGENDA GENERAL
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
Si
No
Es RA1 RA0 = 10?
No No
Es RA1 RA0 = 01?
Si
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
Es RA0= 1?
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:
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 .
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.
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.
Posibles
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
; 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
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
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
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).
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).
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
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
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
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.
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.
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.