AVRVariablesANSI C
Docente
Variables AVR-GCC en CODEBLOCKS
Comenzamos con el código básico el cual iremos analizando:
// Código uno
#include
#include
// Ejemplo para una rutina de interrupcion
ISR(USART0_RX_vect){
}
// Funcion principal
int main(){
DDRC=0xFF;
While(1){
PORTC=0xFF;
_delay_ms(70);
PORTC=0x00;
_delay_ms(1300);
}
return 1;
}
#include
archivo posee todas las definiciones del Mcu seleccionado en la opciones del proyecto, registros I/O,
vectores y bits relativos, por lo que si se desea cambiar de microcontrolador solo hay que seleccionarlo
desde este menú. En el código ejemplo se aprecia que no es necesario declarar explícitamente el nombre
del microcontrolador,pero puede ser que algunas definiciones utilizadas como “USART0_RX_vect” no
esté presente en todos los microcontroladores (esta definición corresponde a la rutina de interrupción por
puerto serial primario que poseen varios micros ATMEGA, lo que mejora la compatibilidad del programa si
queremos compilar para otro microcontrolador sin necesidad de cambiar algo). Esta constante debe ser revisadatanto para ATMEGA328 y ATMEGA2560 porque no son iguales.
int main(){ } (Función principal): La función principal “main” es antecedida por un ‘int’, “int main()”,
esto quiere decir que el main() es una función que debe volver un entero (int) por lo que al final del main se
le agrega un “return(1)”, o “return(0)”, aunque en general puede devolver cualquier valor que se desee.
#include
“La función _delay_ms() genera los retardos utilizando la velocidad del oscilador, según la siguiente expresión:
𝑚𝑠𝑚𝑎𝑥 =
262,14
𝐹𝑜𝑠𝑐(𝑀ℎ𝑧)
En el caso que la F_CPU sea de 1Mhz, el tiempo máximo de retardo será de 262ms”.
Como último dato, es importante señalar que el compilador AVR-GCC es “casesensitive”, esto significa
que diferencia entre mayúsculas y minúsculas cuando asignamos los nombres de las constantes, variables
y funciones (opuesto al compilador PIC-CCS).
“Se debe tener en cuenta también que existen muchas funciones que acostumbramos a usar en CCS, como
delay_ms(), printf() que no están integradas aquí y que deben ser agregadas como librerías externas (tanto
compiladas como nocompiladas)”.
Jaime Mutis P.
Docente
Tipos de datos
AVR-GCC maneja los mismos tipos de datos que ANSI-C, eso si los rangos están orientados a los Mcu de
8-bits, estos son:
Type Layout
Data Type
Size in Bits
Data Range/Usage
Unsugned Char
8-bits
0 to 255
Char
8-bits
-128 to +127
Unsigned int
16-bits
0 to 65.535
Int
16-bits
-32.768 to +32.767
Unsigned long
32-bits
0 to 4.294.967.295Long
32-bits
-2.147.483 to +2.147.483.648
Float
32-bits
+/-1.175 x10-38 to +/-3.402 x1038
Doublé
32-bits
+/-1.175 x10-38 to +/-3.402 x1038
A parte de los datos con los cuales usted puede trabajar, es posible definir constantes mediante #define
PI 3.14159 de esta manera puede utilizar PI a lo largo de la ejecución del programa.
Operadores Aritméticos
Al igual que ANSI-C, el AVR-GCC permiterealizar operaciones aritméticas ordinarias tal como describe las
siguetees tablas.
Jaime Mutis P.
Docente
Jaime Mutis P.
Docente
Puertos I/O Discretos
El ATMEGA2560 nos proporciona una gran cantidad de puertos para jugar, puertos A, B, C, D, E, F, G, H,
J, K y L, todos completos (esto es, 8 pines por cada puerto). Cada puerto tiene asociado 3 registros
internos, los cuales son (por ejemplopara el puerto D): PORTD, PIND y DDRD, a diferencia de los PIC16
y 18 que poseen 2 registros (PORTA y TRISA).
DDRx (Data Direction Register): Este registro controla entrada/salida digital de cada uno de los pines que
componen los Mcu Atmega de 8-bits. Cabe mencionar que al contrario de los Mcu de la familia PIC,
escribiremos ‘0’ lógico para configurar un pin como entrada digital y ‘1’ para...
Regístrate para leer el documento completo.