Académique Documents
Professionnel Documents
Culture Documents
ue
ba
ENTORNOS DE
PROGRAMACION
de
Son los sistemas que permiten editar, compilar, depurar e incluso programar el microcontrolador, todo desde una misma plataforma. Para ver en detalle como se realizan cada uno de
los pasos en los respectivos entornos, se utilizar
a el clasico ejemplo de apagar y encender un
LED por un pin del microcontrolador (este ejemplo se ha convertido para aplicaciones con
microcontrolador en el equivalente hola mundo de las aplicaciones de escritorio). El circuito esquematico, y el diagrama de flujo de esta aplicacion es el que aparece en la figura 20,
habitualmente se usa una resistencia de 220 Ohmios. Es importante tener presente que sin la
conexion a Vcc del pin de Reset, el microcontrolador no ejecuta ning
un programa, y la conexion
del cristal externo debe hacerse siempre y cuando se elija este circuito como el circuito de reloj
del microcontrolador a la hora de programar los fusibles (tal como se explico en el apartado de
fusibles).
INICIO
10k
Ve
rs
Vcc
Configurar pin
como salida
Reset
RB0
Encender LED
Osc1
RETARDO
Osc2
Apagar LED
RETARDO
Para quienes esten acostumbrados a escribir aplicaciones para escritorio, encontraran algunas
similitudes y diferencias a la hora de escribir el programa. Las principales diferencias son: no
hay archivos de cabecera para entrada/salida (los famosos stdio.h y conio.h), pues la entrada
y salida es mucho m
as simple y se realiza leyendo y/o escribiendo en puertos (y si hubiese un
sistema de entrada y salida m
as complejo, dependera del circuito de la aplicacion). Tambien
es importante resaltar que el programa no se ejecuta inmerso en un sistema operativo, razon
por la cual el programa que se transfiera a la memoria no puede simplemente terminar, por eso
todos los programas de microcontrolador deber
an quedarse en un ciclo infinito en vez de salir
de la funcion main.
ue
ba
de
pr
El entorno SourceBoost usa por defecto el compilador BoostC. Este compilador utiliza la
sintaxis definida en el ANSI-C, pero adicion
andole algunas caractersticas que hacen mas
simple la escritura de programas para microcontroladores, la mas destacable es la posibilidad
de usar el operador punto (.) en las variables para acceder a un bit individualmente, de tal
suerte que se puede poner 1 o 0 en un bit sin alterar los demas bits en el caso de escritura;
o nos permite conocer si solo un bit esta en 1 o 0 en el caso de lectura. En un compilador
ANSI-C debe utilizarse enmascaramiento para cualquiera de estas operaciones, mas adelante
mostraremos ejemplos de c
omo se usa este operador. En este compilador se tiene la convencion
de que todos los registros se etiquetan con nombres en min
uscula sostenida y todos los bits se
etiquetan con nombres en may
uscula sostenida.
rs
Por cada aplicacion debe construirse un proyecto nuevo, escogiendo la respectiva opci
on del
men
u. Inmediatamente aparecer
a un cuadro de
dialogo como el que aparece en la figura 21. Si
a
un no se ha escrito el c
odigo, lo mejor es elegir la segunda opcion, pues con esta el entorno
nos crea un archivo de c
odigo .c nuevo (con el
mismo nombre del proyecto) con el cuerpo de
la funcion main y algunas otras lneas tal como
aparece en la figura 22
Ve
nombre dado a este proyecto, as que ej1.c es el nombre del archivo que se esta editando), y
adicionalmente aparecen una serie de archivos en la carpeta Release (tambien puede aparecer
la carpeta Debug, dependiendo de la opci
on elegida en la pesta
na superior, esto permite tener
compiladas diferentes versiones, dependiendo si es una version definitiva, o una version para
depurar), estos archivos son los que se crear
an una vez se compile la aplicacion, el archivo con
extension .asm es una versi
on en ensamblador del programa en lenguaje C, el archivo .lst es
similar al .asm pero detallando las posiciones de memoria donde quedan los codigos de maquina.
El archivo .hex contiene los c
odigos de m
aquina del programa; este archivo es el que se programa
(o quema en la memoria ROM del microcontrolador). Aunque no aparece en el arbol tambien
se crea el archivo .cof, que es algo as como una version binaria del archivo .hex, y que ademas
ue
ba
contiene informacion u
til para los programas de depuracion (indicando los archivos, n
umero de
lneas correspondiente a los c
odigos de m
aquina, nombre de variables, etc).
pr
de
Tambien es recomendable escoger la frecuencia del oscilador, y en este entorno se debe ser muy
cuidadoso pues la opci
on que se escoge en el men
u (con la opcion ClockRate), es solo para
la simulacion, siendo necesario agregar una lnea de codigo para indicarle dicha frecuencia al
compilador. Para nuestro caso escogemos 4 MHz con la siguiente lnea de preprocesador: (una
lnea de preprocesador en un programa en lenguaje C no es exactamente codigo, sino que son
opciones que le indica al compilador como realizar ciertas acciones).
Ve
rs
(a)
(b)
Esta lnea debe ubicarse al principio del archivo, pues con ella el compilador determina los
codigos de maquina para todo aquello que dependa la frecuencia del oscilador (como los
retardos). Es importante resaltar que para estas y otras opciones de configuracion, cada uno
de los entornos utiliza diferentes mecanismos, as que si se esta utilizando uno diferente al
SourceBoost debera consultar en las ayudas los pasos equivalentes.
Nota: Si se esta utilizando un cristal de 4 MHz se puede omitir la lnea de preprocesamiento
pues 4 MHz es el valor por defecto que se utiliza en este entorno.
ue
ba
#i n cl u d e<system . h>
// a r c h i v o de c a b e c e r a que d e f i n e r e g y f u n c i o n e s
#pragma CLOCK FREC 4000000 // l i n e a p r e p r o . I n d i c i a f r e c . o p e r a c i o n
void main ( )
{
t r i s b =0xFE ;
// i n i c i o f u n c i
o n main
// c o n f i g u r a pi n r b 0 como s a l i d a
// i n i c i o c i c l o i n f i n i t o
// pone un 1 en e l pi n r b 0 ( e n c i e n d e LED)
// r e t a r d o 1 segundo
// pone un 0 en pi n r b 0 ( apaga e l LED)
// r e t a r d o de 1 segundo
// f i n c i c l o i n f i n i t o
pr
do{
p o r tb =1;
delay s (1 );
p o r tb =0;
delay s (1 );
} while ( 1 ) ;
}
de
rs
Ve
ej1 . c
success
Done
ue
ba
de
pr
El u
ltimo paso para generar el archivo ejecutable en el microcontrolador sera enlazar los
archivos (enlazar los archivos consiste en tomar los codigos de maquina correspondiente a
nuestro codigo fuente y unirlo con el c
odigo m
aquina de las libreras y generar un solo archivo
.hex con los codigos de m
aquina de la aplicaci
on completa). Este proceso se invoca usando
el icono con la letra L, o la respectiva opci
on del men
u Build. Aqu tambien pueden ocurrir
errores, pero a diferencia de la fase de compilacion, solo se menciona el error, pues ya no es
posible identificar la lnea del c
odigo que gener
o el error. En este punto ademas se informa
sobre la cantidad de memoria RAM y ROM consumida en la aplicacion. (Nota: con la opcion
Build se puede compilar y enlazar el archivo, pero es mejor hacerlo por separado para que sea
mas facil identificar y corregir los errores).
Ve
rs
R1
10k
U1
C1
0.1uF
R2
330
40
39
38
37
36
35
34
33
1
2
3
4
5
6
7
8
RESET
XTAL1
XTAL2
PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
de
D1
12
13
LED
PC0/SCL
PC1/SDA
PC2/TCK
PC3/TMS
PC4/TDO
PC5/TDI
PC6/TOSC1
PC7/TOSC2
22
23
24
25
26
27
28
29
pr
ue
ba
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
AREF
AVCC
14
15
16
17
18
19
20
21
32
30
ATMEGA16
rs
AVR Studio es un front end donde permite escribir codigo ya sea en lenguaje ensamblador
o en lenguaje C. Por defecto trae todas las libreras necesarias para ejecutar un proyecto en
lenguaje ensamblador.
Ve
INICIO
Encender LED
RETARDO
ue
ba
Configurar PB0
como salida
Apagar LED
RETARDO
pr
de
#i n cl u d e <a v r / i o . h>
#i n cl u d e < u t i l / d e l a y . h>
rs
i n t main ( void )
{
PORTB = 0 ; // Se g a r a n t i z a c e r o en e l p u e r t o a n t e s de s e r
// c o n f i g u r a d o como s a l i d a
DDRB = 1<<PB0 ; // Se c o n f i g u r a e l pi n PB0 como s a l i d a
Ve
while (1)
{
PORTB |= (1<<PB0 ) ;
// Coloca un ( 1 ) l
o g i c o en e l pi n PB0}
delay ms (1000);
// Genera un r e t a r d o de 1 segundo }
PORTB &= (1<<PB0 ) ; // Coloca un ( 0 ) l
o g i c o en e l pi n PB0
delay ms (1000);
// Genera un r e t a r d o de 1 segundo }
}
return 0 ;
}
pr
La figura 27 muestra la ventana donde el usuario crea un nuevo proyecto. En esta fase se parametriza el proyecto. Si se trata de escribir un
archivo fuente en ensamblador se selecciona la
opcion Atmel AVR assembler, o si se trata de
escribir un archivo fuente en lenguaje C se selecciona la opcion AVR GCC . A continuaci
on
se escribe un nombre para el proyecto, se escoge
la ruta y se selecciona el dispositivo o microcontrolador a utilizar.
ue
ba
Una vez nuestro programa ha sido escrito en un editor de texto cualquiera o ha sido planteado,
se procede a crear el proyecto usando la herramienta de desarrollo AVR Studio y compilar y
depurar nuestro programa.
de
rs
Ve
Adicional en esta ventana tambien se puede observar todos los registros de entrada y salida
que posee el microcontrolador.
Durante la depuraci
on de nuestro programa, en
la ventana ubicada en la parte inferior derecha
de la ventana principal, se puede ver c
omo
cambia cada bit de los registros involucrados
en nuestro programa.
Ve
rs
de
pr
ue
ba
En el men
u Debug se puede iniciar el proceso de depuracion ante la cual, la interfaz indicara sobre la ventana del c
odigo la instrucci
on que est
a proxima a ejecutarse a traves de una flecha
como se puede observar en la figura 30. De la misma manera se puede observar una ventana llamada Processor en la que se muestran las variables principales de la CPU. Si se requiere, puede
adicionarse una ventana de Watches donde se puede visualizar los valores y las ubicaciones en
la memoria de datos de las variables que hayamos definido.