You are on page 1of 17

PROGRAMACIN DE MICROCONTROLADORES

Unidad 2. Anlisis estructural y funcional de un microcontrolador

Un lenguaje de programacin consiste en una serie especfica de caracteres que permiten dar instrucciones a un computador o microcontrolador con la finalidad de lograr que ella realice ciertas acciones en la solucin de alguna necesidad.

TABLA DE CONTENIDO

Lenguaje de programacin ......................................................................................................... 3 Lenguaje Assembly ASM ............................................................................................................. 4 Estructura de lenguaje Assembly .............................................................................................. 6 Etiquetas ................................................................................................................................................ 6 Instrucciones ........................................................................................................................................ 6 Comentarios......................................................................................................................................... 6 Directivas ............................................................................................................................................... 7 Directivas de control ......................................................................................................................... 7 Directivas de configuracin ........................................................................................................... 9 Directivas de datos ......................................................................................................................... 10 Instrucciones de condicin ......................................................................................................... 11 Operadores matemticos ............................................................................................................ 14 Ejemplo de lenguaje Assembly ................................................................................................16 Enlaces externos ......................................................................... Error! Marcador no definido.

Lenguaje de programacin Cada lenguaje tiene caractersticas propias en cuanto a su gramtica y sintaxis. A diferencia del lenguaje humano que permite transmitir mltiples ideas a la vez, los lenguajes de programacin no requieren que comuniquen gran variedad de pensamientos, es suficiente que permitan la transmisin de solo cuatro pensamientos bsicos. Adems, la comunicacin a travs de estos lenguajes tiene que ser precisa, clara y sin ambigedades.

Existen dos niveles de lenguajes de programacin dependiendo de qu tan cercanos estn del lenguaje humano: Los lenguajes de bajo nivel son una representacin simblica del lenguaje mquina asociado, lo cual permite una programacin menos tediosa que con el lenguaje mquina correspondiente. Los lenguajes de alto nivel son ms modernos, y presentan una gran facilidad para el programador en cuanto a la facilidad de realizar programas debido a que poseen macroinstrucciones. Estas macroinstrucciones son instrucciones escritas en un lenguaje diferente al de mquina, que mediante traduccin, es convertida en otro grupo de instrucciones en lenguaje mquina.

Lenguaje Assembly ASM El lenguaje que el microcontrolador y el hombre utilizan para comunicarse entre s, se llama "lenguaje Assembly". El hombre puede entender el lenguaje Assembly (ASM), ya que consta de los signos del alfabeto y las palabras. Un traductor interpreta cada instruccin escrita en lenguaje ASM como una serie de ceros y unos que tienen un sentido de la lgica interna en el microcontrolador. Es un tipo de lenguaje de bajo nivel basado en la escritura de una serie de instrucciones que corresponden al flujo de rdenes ejecutables que pueden ser cargadas en la memoria de un sistema basado en microcontrolador. Muchos dispositivos programables (como los microcontroladores) an cuentan con el Assembly como la nica manera de ser manipulados. Caractersticas

Los programas hechos en lenguaje Assembly son generalmente ms rpidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar cuidadosamente en lenguaje Assembly se pueden crear programas que se ejecutan ms rpidamente y ocupan menos espacio que con lenguajes de alto nivel. Con el lenguaje Assembly se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de cdigo difciles de programar en un lenguaje de alto nivel. Posee una cierta dificultad de ser entendido directamente por un ser humano ya que su estructura se acerca ms bien al lenguaje mquina, es decir, lenguaje de bajo nivel.

Es difcilmente portable, es decir, un cdigo escrito para un microcontrolador en particular necesita ser modificado muchas veces en su totalidad para poder ser usado en otro.

Cada arquitectura de microcontrolador tiene su propio lenguaje de mquina, y en consecuencia su propio lenguaje Assembly ya que este se encuentra muy ligado a la estructura del hardware para el cual se programa. Los microprocesadores difieren en el tipo y nmero de operaciones que soportan; tambin pueden tener diferente cantidad de registros, y distinta representacin de los tipos de datos en memoria. Aunque la mayora de los microcontroladores son capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes Assembly reflejan tal diferencia.

Estructura de lenguaje Assembly Etiquetas Es una designacin de texto fcil de leer en una lnea de un programa, o una seccin de un programa donde el micro puede saltar a... - o el comienzo de un conjunto de lneas de un programa. La etiqueta empieza con una letra del alfabeto o con un subrayado "_". La longitud de la etiqueta puede ser de hasta 32 caracteres. Tambin es importante que la etiqueta se inicie en la primera columna.
Start _end P123 Is it bigger?

Instrucciones

Estn ya definidas por el uso de un microcontrolador especfico, por lo que slo nos queda seguir las instrucciones para su uso en lenguaje ASM. La forma en que escribimos una instruccin tambin se denomina "sintaxis".
movlw H`01FF` goto Start

Comunicacin escrita correctamente

Comentarios

Son una serie de palabras que escribe un programador para hacer el programa ms claro y legible. Se coloca despus de una instruccin, y debe comenzar con un punto

y coma ";". Los comentarios no hacen parte del programa y no son reconocidos por el compilador.
#define test . Ifdef test ; como la prueba fue definida ......; las instrucciones de estas lneas ejecutaran endif

Directivas Es similar a una instruccin, pero esta es independiente en el modelo de microcontrolador, y representa una caracterstica de la lengua propia ASM. En las Directivas se dan generalmente significados o propsitos a travs de variables o registros.
Directiva usada frecuentemente: PROCESSOR 16F84 #include "p16f84.inc" _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

Directivas de control
Intercambios de una parte de texto por otra Sintaxis: # define <text> [<another text>]

#DEFINE

Descripcin: Cada vez que <text> aparece en el programa, ser cambiado por el texto <another>. Ejemplo: # define turned_on 1 # define turned_off 0

Incluir un archivo adicional en un programa Sintaxis: # include # include <nombre_de_archivo> "file_name" Descripcin: esta directiva tiene el efecto como si todo el archivo se copi en un lugar donde la "incluyan". Si el nombre del archivo se encuentra en los corchetes, se trata de un archivo de sistema y si est dentro de las comillas se trata de un archivo de usuario. La directiva "include" contribuye a una mejor distribucin del programa. Ejemplo: #include<regs.h> #include "subprog.asm" Da un valor numrico constante a la designacin Sintaxis: Constante <nombre> = <valor> Descripcin: Cada vez que <nombre> aparece en el programa, ser sustituido por <valor>. Ejemplo: constant MAXIMUM=100 constant Lenght=30 Da un valor numrico variable a la designacin Sintaxis: Variable <nombre> = <valor> Descripcin: Mediante el uso de esta directiva, las designaciones textuales cambian con un Valor particular. Difiere de la directiva CONSTANT en que despus de la aplicacin, el valor de la designacin de texto se puede cambiar. Ejemplo: variable level=20 variable time=13 Define el sintaxis de variables del ASM Sintaxis: <name_variable> set <value> Descripcin: Para la variable <name_variable> se aade la expresin <valor>. La directiva SET es similar a la EQU, pero con el nombre de directiva SET, la variable puede ser redefinida seguida de una definicin. Ejemplo: level set 0 length set 12 level set 45

#INCLUDE

CONSTANT

VARIABLE

SET

Define la constante del ASM Sintaxis: <nombre_constante>equ<valor> Descripcin: a el nombre de una constante <name_constant> se

EQU

aade un valor <value> Ejemplo: five equ 5 six equ 6 seven equ 7 Define la direccin en la memoria del microcontrolador en la cual el programa est siendo grabado. Sintaxis: <label>org<value> Descripcin: Esta es la directiva ms utilizada. Con la ayuda de

ORG

esta directiva definimos que parte del programa ser iniciada en la memoria del programa. Ejemplo: Start org 000 movlw 0xFF movwf PORTB Termina el programa Sintaxis: end Descripcin: al final de cada programa es necesario escribir 'end'

END

para que el traductor de ASM sepa que no hay ms instrucciones. Ejemplo: movlw 0xFF movwf PORTB end

Directivas de configuracin
Ajuste de los bits de configuracin. Sintaxis: _config<term> or _config<address>,<term> Descripcin: Oscilador, la aplicacin de temporizador de vigilancia (Watchdog) y circuito de reinicio interno se definen. Antes de utilizar esta directiva, el procesador debe ser definido usando la directiva PROCESSOR. Ejemplo: _CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

_CONFIG

Define el modelo del microcontrolador. Sintaxis: Processor <microcontroller_type>

PROCESSOR

Descripcin: la instruccin establece el tipo de microcontrolador en la programacin. Ejemplo: processor 16F84

Directivas de datos
Define un bloque para las constantes nombradas. Sintaxis: Cblock [<term>] <label>[:<increment>],<label>[:<increment>] endc Descripcin: da valor a las constantes nombradas. Cada trmino siguiente recibe un valor mayor por 1 que su persecutor. Si el parmetro <increment> tambin es dado, entonces el valor dado en el parmetro <increment> es aadido a las siguientes

CBLOCK

constantes. Valor del parmetro <term> es el valor inicial. Si no es dado, es considerado cero. Ejemplo: Cblock 0x02 first, second, third ;first=0x02, second=0x03, third=0x04 Endc cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc Finaliza el bloque de definicin constante. Sintaxis: endc Descripcin: la directiva es usada al final de la definicin de un bloque de constantes para que el traductor de ASM pueda saber

ENDC

que no hay ms constantes. Ejemplo: cblock 0x02 first : 4, second : 2, third ;first=0x06, second=0x08, third=0x09 endc

10

Define un byte de datos. Sintaxis: [<label>]db <term> [, <term>,.....,<term>] Descripcin: reserva un byte en la memoria del programa. Cuando hay ms de un trmino los cuales necesitan asignrseles un byte para cada uno, se asignaran uno tras otro. Ejemplo: db 't', 00f, 'e', 's', 012 Definir el byte para la memoria EEPROM Sintaxis: [<term>] de <term> [, <term>,....., <term>] Descripcin: esta directiva es usada para definir el byte de la memoria EEPROM. Aunque se puede utilizar para cualquier locacin en cualquier memoria. Ejemplo: org H'2100' de "Version 1.0" , 0 Definir la tabla de dato. Sintaxis: [<label>] dt <term> [, <term>,........., <term>]

DB

DE

DT

Descripcin: Esta directiva genera series de instruccin RETLW, una instruccin por cada trmino. Ejemplo: dt "Message", 0 dt first, second, third

Instrucciones de condicin
Programa de salto condicional Sintaxis: If <conditional_term> Descripcin: Si la condicin se cumple en <conditional_term>, parte del programa que sigue sera ejecutado. Y si no se cumple, entonces la siguiente parte ELSE o ENDIF de la directiva sera ejecutado. Ejemplo: If level=100 goto FILL else goto DISCHARGE endif

IF

11

Es la alternativa de `IF` programa en bloque con trminos de condicin. Sintaxis: else Descripcin: Se utiliza con la Directiva IF como una alternativa si el trmino condicional no se cumple. Ejemplo: If time< 50 goto SPEED UP else goto SLOW DOWN endif Finaliza la seccin condicional del programa. Sintaxis: endif Descripcin: esta directiva se escribe para informar al traductor de ASM que es el final del bloque de condiciones. Ejemplo: If level=100 goto LOADS else goto UNLOADS endif Ejecucin de la seccin del programa siempre y cuando se cumpla la condicin. Sintaxis: while<condition>Endw Descripcin: las lneas de programa entre While y ENDW se ejecutan mientras se cumpla la condicin. Si una condicin dej de ser vlida, el programa continuara ejecutando las instrucciones hasta la lnea ENDW. El nmero mximo de instrucciones entre While y ENDW puede ser de 100. Ejemplo: While i<10 i=i+1 endw Finaliza la parte de condicin del programa. Sintaxis: endw

ELSE

ENDIF

WHILE

ENDW

12

Descripcin: la instruccin es escrita al final de la condicin del bloque WHILE, para que el traductor de ASM sepa que es el final del bloque de condiciones. Ejemplo: while i<10 i=i+1 endw Ejecucin de una parte del programa si el smbolo fue definido. Sintaxis: ifdef<designation> Descripcin: Si la designacin <designation> es previamente descrita, muy comnmente por la instruccin #define, las instrucciones que le siguen sern ejecutadas hasta que las

IFDEF

directivas ELSE o ENDIF no sean alcanzadas. Ejemplo: #define test . Ifdef test ; como fue definida la prueba ......; las instrucciones de esta lnea ejecutaran endif Ejecucin de parte del programa si el smbolo fue definido. Sintaxis: ifndef<designation> Descripcin: si la designacin <designation> no fue previamente definida, o si su definicin fue borrada con directiva #undefine, las instrucciones que siguen sern ejecutadas hasta que las directivas ELSE o ENDIF sean alcanzadas.

IFNDEF

Ejemplo: #define test .......... #undefine test .......... ifndef test; como fue definida la prueba ......; las instrucciones de esta lnea ejecutaran endif

13

Operadores matemticos $ ( ) ! high low * / % + << >> >= > < <= == != &

Estado actual del contador del programa Corchete izquierdo Corchete derecho Complemento lgico Complemento Negacin (segundo complemento) Devuelve el byte ms alto Devuelve el byte ms inferior Multiplicador Divisor Divisor por mdulo Sumando Restando Moviendo a la izquierda Moviendo a la derecha Mayor que o igual Mayor que Menor que Menor que, o igual Igual No igual Operacin AND en los bits Exclusivo OR en los bits Lgica OR sobre bits Lgica OR sobre bits Lgica OR Igual

goto $ + 3 1 + (d * 4) (Length + 1) * 256 if ! (a b) flags = -flags -1 * Length movlw high CTR_Table movlw low CTR_Table a=b*c a=b/c entry_len = tot_len % 15 tot_len =entry_len * 3 + 1 entry_len = (tot 1) / 8 val = flags << 1 val = flags >> 1 if entry_idx > =num_entries if entry_idx > num_entries if entry_idx < num_entries if entry_idx < = num_entries if entry_idx = = num_entries if entry_idx ! = num_entries flags = flags & ERROR_BIT flags = flags

ERROR_BIT

| && || =

flags = flags | ERROR_BIT if (len ==512) && (b ==c) if (len ==512) || (b ==c) entry_index = 0

14

+= -= *= /= %= <<= >>= &= |=

Aadir y asignar Restar y asignar Multiplicar y asignar Dividir y asignar Divide el mdulo y asignar Mueve a la izquierda y asigna Mueve a la derecha y asigna Lgica AND y asigna Lgica OR y asigna Exclusivo OR en los bits y asigna Incrementa por uno Reduce por uno

entry_index +=1 entry_index -=1 entry_index *= entry_length entry_index /= entry_length entry_index %=1 flags << = 3 flags >> = 3 flags & = ERROR_FLAG flags | = ERROR_FLAG flags 1++ 1

= ERROR_FLAG

++ -

15

Ejemplo de lenguaje Assembly El siguiente es un ejemplo de un programa para escribir Hola mundo utilizando la arquitectura de procesador x86 (bajo el sistema operativo DOS).
.model small .stack .data Cadena1 DB 'Hola Mundo.$' .code programa: mov ax, @data mov ds, ax mov dx, offset Cadena1 mov ah, 9 int 21h end programa

La transformacin del lenguaje Assembly en cdigo mquina la realiza un programa Ensamblador, y la traduccin inversa la puede efectuar un desensamblador. A diferencia de los lenguajes de alto nivel, aqu hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del Assembly y el lenguaje de mquina. Sin embargo, en algunos casos, un Assembly puede proveer "pseudo instrucciones" que se expanden en un cdigo de mquina ms extenso a fin de proveer la funcionalidad necesaria. Por ejemplo, para un cdigo mquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudoinstruccin al grupo "haga si menor que", y "si = 0" sobre el resultado de la condicin anterior.

16

Enlaces externos

Programacin de microcontroladores

http://www.monografias.com/trabajos12/microco/microco.shtml http://r-luis.xbot.es/pic1/pic01.html http://www.neoteo.com/tutorial-programacion-demicrocontroladores.neo

http://www.neoteo.com/tutorial-programacion-de-microcontroladores2366.neo

http://www.jvmbots.com/viewtopic.php?t=18

17