Você está na página 1de 71

Tutorial de C para WinAVR -2005

Versin 1.0

INDICE
1.-INTRODUCCION. 2 1.1.- Qu es un puerto digital?...................................................................... 2 1.2.- Qu es digital? . 2 2.-SOBRE EL CURSO .... 5 3.-EL LENGUAJE C 6 4.-EL EDITOR .. 7 5.-INSTALACIN DEL PROGRAMA .. 9 6.-MI PRIMER PROGRAMA CON WINAVR ... 15 7.-CONTENIDO DE UN PROGRAMA .... 23 7.1.- Seccin de bibliotecas 23 7.2.- Tipos de variables.. 23 7.3.- Globales . 23 7.4.- Locales ... 24 7.5.- Tipos de datos 24 7.10.- Modificador unsigned ...24 8.-FUNCION PRINCIPAL MAIN ..25 9.-OPERADORES 26 9.1.- Que es un operador ?..............................................................................26 9.2.- Operadores Aritmticos ..26 9.2.1.- Suma 26 9.2.2.- Resta 26 9.2.3.- Multiplicacin ..27 9.2.4.- Divisin 27 9.3.- Operadores de comparacin ....................................................................28 9.4.- Operadores lgicos matemticos .....29 9.5.- Operadores lgicos comparativos ............................................................29 9.6.- Otro tipo de comparadores ...30 10.- SENTENCIAS DE FLUJO .....31 10.1.- If .31 10.2.- If else ...31 10.3.- For ..32 10.4.- While ..32 10.5.- Switch .33 11.-PROTOTIPOS (FUNCIONES)35 12.-PUERTOS DIGITALES ..38 13.- INTERRUPCIONES ...40 13.1.- Registro de control MCU ..42 13.2.- Registro de estado y control del MCU ..42 13.3.- Registro de control de las interrupciones generales..42 13.3.1.-INT1: Peticin de la habilitacin de la interrupcin 1 ...43 13.3.2.-INT0: Peticin de la habilitacin de la interrupcin 0 ...43 13.3.3.-INT2: Peticin de la habilitacin de la interrupcin 2 ...43 13.4.- Registro de la bandera de las interrupciones generales.....43 13.4.1.-BIT 7--INTF1: Bandera de la Interrupcin externa 143 13.4.2.- BIT 6 -- INTF0: Bandera de la Interrupcin externa 0 .43

1
Escrito por los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Tutorial de C para WinAVR -2005

Versin 1.0

13.4.3.-BIT 5 -- INTF2: Bandera de la Interrupcin externa 2 44 14.- ADC CONVERTIDOR ANALOGICO-DIGITAL...45 14.1.- ADMUX --- REGISTRO DE LA SELECCIN DE LOS MULTIPLEXORES DEL ADC ..45 14.1.1.- BIT 7:6 --- REFS 1:0: Bits de la seleccin del voltaje de referencia 45 14.1.2.-BIT 5 --- ADLAR: Resultado del ADC ajustado a la derecha45 14.1.3.- BIT 4:0 --- MUX4:0 Bits de seleccin de la ganancia y del canal analgico. ...46 14.2.- ADCSRA --- REGISTRO A DEL ESTADO Y CONTROL DEL ADC 47 14.2.1.- BIT 7 -- ADEN: Habilitacin del ADC ....47 14.2.2.- BIT 6 --ADSC: Inicializacin de la conversin del ADC .47 14.2.3.- BIT 5 -- ADATE: Habilitacin del auto-disparo del ADC ...47 14.2.4.- BIT 4 -- ADIF: Bandera de interrupcin del ADC ...47 14.2.5.- BIT 3 -- ADIE: Habilitacin de la Interrupcin del ADC 47 14.2.6.- BIT 2:0 -- ADPS: Bits selectores del prescalador del ADC .47 14.3.-ADCL Y ADCH -- LOS REGISTROS DE DATOS DEL ADC ..48 14.4.- SFIOR-- REGISTRO ESPECIAL DE LA FUNCION I/O 49 14.4.1 BIT 7:5 --ADTS2:0:FUENTE DEL AUTO-DISPARO DEL ADC 49 14.4.2.-BIT 4 --ADHSM: Modo de alta velocidad del ADC ...49 15.- USART ...54 15.1 FORMAT FRAME ..54 15.2 INICIALIZACION DE LA USART .54 15.3 TRANSMISOR DE LA USART .. 55 15.4 RECEPTOR DE LA USART (Rxc) .56 16.- DESCRIPCION DE LOS REGISTROS DE LA USART: 57 16.1 UDR -- Registro de datos I/O de la USART 57 16.2 UCSRA --Registro A de control y estado de la USART ..57 16.2.1 BIT 7 --RXC: Recepcin completa de la USART 57 16.2.2 BIT 6 --TXC: Transmisin completa de la USART .57 16.2.3 BIT 5 --UDRE: Registro vaco de datos de la USART 57 15.2.4 BIT 4 --FE: Frame Error .57 16.2.5 BIT 3 --DOR: Data OverRun ...57 16.2.6 BIT 2 --PE: Error de paridad ..58 16.2.7 BIT 1 --U2X:Doble velocidad de transmisin .58 16.2.8 BIT 0 ---MPCM:Modo de comunicacin del multiprocesador... 58 16.3 UCSRB --REGISTRO B DE CONTROL Y ESTADO DE LA USART 58 16.3.1 BIT 7 ---RXCIE: Habilitacin de la interrupcin de la recepcin completada .58 16.3.2 BIT 6 ---TXCIE: Habilitacin de la interrupcin de la transmisin completada .58 16.3.3 BIT 5 ---UDRIE: Habilitacin de la interrupcin del registro de datos vaci. 58 16.3.4 BIT 4 -- RXEN: Habitacin del Receptor..58 16.3.5 BIT 3 -- TXEN: Habitacin del Transmisor..58 16.3.6 BIT 2 -- UCSZ 2: Tamao del carcter ..58 2
Escrito por los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Tutorial de C para WinAVR -2005

Versin 1.0

16.3.7 BIT 1 -- RXB 8: Receptor de datos de 8 bits ..58 16.3.8 BIT 0 -- TXB 8: Transmisor de datos de 8 bits .59 16.4 UCSRC -- REGISTRO C DE DATOS Y ESTADO DE LA USART .59 16.4.1 BIT 7 -- URSEL: Selector de registro 59 16.4.2 BIT 6 -- UMSEL: Selector del modo de la USART .59 16.4.3 BIT 5:4 -- UPM 1:0: Modo de paridad .59 16.4.4 BIT 3 -- USBS: Selector del bit de paro ...59 16.4.5 BIT 2:1 -- UCSZ 1:0 Tamao del carcter ...60 16.4.6 BIT 0 -- UCPOL: Polaridad del reloj .60 16.5 UBRRL Y UBRRH --- REGISTRO DEL RANGO DE BAUDIOS DE LA USART 61 16.5.1 BIT 15 URSEL: Selector de registros ...61 16.5.2 BIT 14:12 --- Bits reservados ...61 16.5.3 BIT 11:0 --- UBRR 11:0: Registro del rango de baudios de la USART ...61 EJERCICIOS ...68 AGRADECIMIENTOS69

3
Escrito por los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
1.-

INTRODUCCION:

En la actualidad el ser humano se ha visto en la necesidad de volver su vida cada vez mas fcil, por lo tanto algunos ingeniero y cientficos crearon los Microcontroladores. Pero ustedes se preguntaran: que es un microcontrolador? un microcontrolador es un pequeo cerebro capaz de manipular cualquier cosa que requiera energa elctrica a travs de comandos sencillos programables. Por ejemplo: si nosotros queremos llegar a tener un control de todos nuestros aparatos elctricos de la casa lo podemos controlar con un objeto de unas magnitudes insignificantes (microcontrolador) y crear un men de encendido-apagado desde cualquier parte de la habitacin, o donde sea colocado este. Bueno esa es una de las pocas aplicaciones que se pueden obtener empleando los microcontroladores en nuestra vida actual. Pero ahora despus de este rollo comenzaremos con el tutorial. El Microcontrolador Atmega32 posee 4 puertos digitales. Cada puerto posee 8 pines de entrada o/y de salida. Y me imagino que se viene a su mente la siguiente pregunta:

1.1.-

Qu es un puerto digital?

Suponemos que tenemos 4 casas: la Casa de la Familia A, la de la familia B, la de la C y la de la D. Esos son nuestros 4 puertos pero dentro de ellos existen 8 puertas (pines) que nosotros las podemos manejar a nuestra disposicin ya siendo como entrada o/y salida. Pero cada casa tiene solo 8 puertas. Por ejemplo: La casa A tiene 8 puertas que pertenecen a A y as con las otras casas. Cada puerta (pin) tiene un cargo de fuerza, entre mas cargo tenga valdr ms. Por ejemplo esta seria nuestra cantidad binaria de las puertas. Puerta 8 Pin 7 128 Puerta 7 Pin 6 64 Puerta 6 Pin 5 32 Puerta 5 Pin 4 16 Puerta 4 Pin 3 8 Puerta 3 Pin 2 4 Puerta 2 Pin 1 2 Puerta 1 Pin 0 1

En el primer rengln podemos ver las puertas que tiene nuestra casa A. Lo establecemos con su nombre original dentro del Atmega32 en el segundo rengln (pines). En el tercer rengln le daremos su valor en nmero decimal. Bueno creo que ya entendieron lo de puertos pero:

1.2.-

Qu es digital?

Se refiera a todo aquel dispositivo que trabaja con 2 valores independientes. Digital se refiere a todo aquello que tiene como salida 5 volts que es una carga de voltaje estndar en electrnica, utilizada para trabajar en sistemas digitales.

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
Primero que nada para utilizar los puertos del Microcontrolador Atmega32 tenemos que declararlos como entrada o salida. Para la entrada se utiliza un 0 lgico y para la salida un 1 lgico. Los puertos del ATMega son bidireccionales, esto quiere decir que los podemos utilizar tanto de entrada o como de salida. Cada puerto tiene 8 pines (puertas) nosotros vamos a declarar cuales de esos pines queremos de entrada y cuales de salida. La palabra para la declaracin es DDR que significa Direccional Date Register. Ejemplo: Si nosotros queremos tener en el puerto A, 4 bits de entrada y 4 de salida tenemos que poner la siguiente lnea de cdigo en nuestro programa principal. DDRA= 0xF0; Por ejemplo si queremos que un cierto puerto ya sea A,B,C,D sea de entrada tenemos que ocupar la siguiente instruccin: DDRA= 0x00; // Esto es en caso de ponerlo en numero hexadecimal DDRA= 0b00000000; // Esto es en caso de ponerlo en numero binario DDRA=0; // Esto es en caso de ponerlo en numero decimal. Si notamos todos lo nmeros de la parte de arriba forman un cero aunque la estructura es diferentes todos llegan al mismo numero. Ahora si queremos poner un puerto de salida tenemos que utilizar la siguiente lnea de cdigo: DDRA= 0xFF; // Esto es en caso de ponerlo en numero hexadecimal DDRA= 0b11111111; // Esto es en caso de ponerlo en numero binario DDRA=255; // Esto es en caso de ponerlo en numero decimal. De esta manera notamos que cualquier nmero que colocamos forma el 255 que quiere decir que esta lleno el puerto y que lo estamos utilizando como puerto de salida. Es como si pusiramos un uno en cada pin de ese puerto. Si notan en la segunda lnea se declaro de forma binaria que seria la forma ms sencilla de observar que pines son de entrada o que pines son de salida. Una vez que ya sabemos como declarar los puertos del microcontrolador, ya sea como de entrada o salida proseguiremos a aprender como leer y desplegar datos en un puerto digital. La instruccin que se utiliza para leer un puerto es PINX (donde X representa a uno de los 4 puertos A, B, C o D.), la instruccin PORTX se utiliza para mandar datos a un puerto estos datos pueden ser visualizados en un par de leds.

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
Por ejemplo si declaramos un puerto como entrada tendremos que proseguir a leer en ese puerto. Si tenemos el puerto A como puerto de entrada y queremos leer en el tendremos que proseguir a la siguiente lnea de cdigo: DDRA = 0x00; // x= PINA; //aqu le estamos asignando el valor ledo en el puerto A la variable x Cuando se utiliza un puerto de salida hay que recordar que el nmero que se muestre en el puerto de salida ser mostrado en binario y que puede ser mximo de 255 por que solamente tenemos 8 bits para mostrar el nmero de salida. Ejemplo: Planteamos el puerto B como puerto de salida y queremos que nos muestre un 15 (en binario seria 00001111). Las lneas de cdigo son las siguientes: DDRB = 0xFF; PORTB = 15; As nos desplegara por el puerto B el numero 15.

Bueno hasta este punto ya sabemos declarar un puerto del microcontrolador como de entrada o como de salida y a su vez sabemos como leer en el o desplegar. Con estas bases ya podemos empezar a programar en C pero primero les enseare la estructura de los programas en WINAVR.

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

2.- SOBRE EL CURSO

Ya que el contenido en Internet de un tutorial para programar dispositivos microcontroladores en lenguaje c es extensamente escaso se crea este tutorial, el cual tiene la finalidad de proporcionar una base ms slida de conocimientos acerca de estos dispositivos logrando comprender de manera ms fcil las caractersticas y desempeo de los mismos.

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
3.- EL LENGUAJE C
Un programa en sentido informtico esta constituido por un conjunto de instrucciones que se ejecutan ordinariamente de modo secuencial, es decir cada una a continuacin de la anterior. Recientemente, con objeto de disminuir los tiempos de ejecucin de programas crticos por su tamao o complejidad, se esta haciendo un gran esfuerzo en desarrollar programas paralelos, esto es, programas que se pueden ejecutar simultneamente en varios procesadores. Analgicamente a los datos que maneja, las instrucciones que un procesador digital es capaz de entender estn constituidas por conjuntos de unos y ceros. A esto se le llama lenguaje de mquina o binario, y es muy difcil de manejar. Por ello, desde casi los primeros aos de los ordenadores, se comenzaron a desarrollar los lenguajes de alto nivel, que estn mucho ms cerca del lenguaje natural. Estos lenguajes estn basados en el uso de identificadores, tanto para los datos como para los componentes elementales del programa, que en algunos lenguajes se llaman rutinas o procedimientos, y que en C se llaman funciones. Adems, cada lenguaje dispone de una sintaxis o conjunto de reglas con las que se indica de modo inequvoco las operaciones que se quiere realizar. Los lenguajes de alto nivel son ms o menos comprensibles para el usuario, pero no para el procesador. Para que este pueda ejecutarlos es necesario traducirlos a su propio lenguaje de maquina. Esta es una tarea que realiza que realiza un programa especial llamado compilador, que traduce el programa a lenguaje maquina. El programa de alto nivel se suele almacenar en uno o mas ficheros llamados ficheros fuente, que en casi todos los sistemas operativos se caracterizan por una terminacin (tambin llamada extensin) especial. As todos los ficheros fuente de C deben terminar por (.c) ejemplos de nombres de estos ficheros son calculos.c derivada.c etc. La primera tarea del compilador es realizar una traduccin directa del programa a un lenguaje mas prximo al del computador (llamado ensamblador), produciendo un fichero objeto con el mismo nombre que el fichero original, pero con la extensin (.obj). En una segunda etapa se realiza el proceso de montaje (linkage) del programa, consiste en producir un programa ejecutable en lenguaje de maquina, en el que estn ya incorporados todos los otros mdulos que aporta el sistema sin intervencin explicita del programador (funciones de librera, recursos del sistema operativo, etc.)

Una de las ventajas mas importantes de los lenguaje de alto nivel es la portabilidad de los ficheros fuente resultantes. Quiere esto decir que un programa desarrollado en un PC podr ser ejecutado en una Macintosh o en una maquina UNIX, con mnimas modificaciones y una simple recompilacin. El lenguajes C naci en los Laboratorios Bell de AT&T y ha sido estrechamente asociado con el Sistema Operativo UNIX, ya que su desarrollo se realiz en este sistema y debido a que tanto UNIX como el propio compilador de C y la casi totalidad de los programas y herramientas de UNIX, fueron escritos en C. Este lenguaje est inspirado en el lenguaje B escrito por Ken Thompson en 1970 con intencin de recodificar el UNIX, que en la fase de arranque esta escrito en asembler, en vistas a su transportabilidad a otras mquinas. B era un lenguaje evolucionado e

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
independiente de la mquina, inspirado en el lenguaje BCPL concedido por Martin Richard en 1967. En 1972, Dennis Ritchie, toma el relevo y modifica el lenguaje B, creando el lenguaje C y reescribiendo el UNIX en dicho lenguaje. La novedad que proporcion el lenguaje C sobre el B fue el diseo de tipos y estructuras de datos. Posteriormente estandarizado por un comit del ANSI (American Nacional Standard Institute) con objeto de garantizar su portabilidad entra distintos computadores, dando lugar al ANSI C. Una de las particularidades de C es su riqueza de operadores, Puede decirse que prcticamente dispone de un operador para cada una de las posibles operaciones en cdigo mquina. Algunas caractersticas de ste lenguaje:

Programacin estructurada Abundancia en operadores y tipos de datos. Codificacin en alto y bajo nivel simultneamente. Reemplaza ventajosamente la programacin en ensamblador (assembler). Utilizacin natural de las funciones primitivas del sistema. No est orientado a ningn rea en especial. Produccin de cdigo objeto altamente optimizado. Facilidad de aprendizaje. La posibilidad de poder ser compilado en una variedad de computadoras, con pocos cambios (portabilidad).

Debido a las caractersticas que nos proporciona este lenguaje lo utilizaremos para programar los microcontroladores (AVR de Atmel).

CreatedEscrito poreDocPrinter PDF Pro!! by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

4.- EL EDITOR
Para programar los microcontroladores utilizaremos WinAVR un programa sencillo de utilizar y adems gratuito, podrs descargarlo del siguiente link: http://prdownloads.sourceforge.net/winavr/WinAVR-20060125-install.exe?download

CreatedEscrito poreDocPrinter PDF Pro!! 10 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
5.- INSTALACION DEL PROGRAMA
Para poder utilizar WinAVR el usuario debe iniciar sesin como administrador. Esto es a que el programa requiere de algunas variables del entorno, de otra manera el programa no responder adecuadamente. Unas ves que hayas descargado el programa se recomienda guardarlo en una carpeta en la que recuerdes con facilidad la direccin.

(El archivo pesa 25 MB por lo que si cuentas con una conexin lenta puede demorar demasiado). Haciendo doble click sobre el archivo ejecutable (.EXE), inicia el proceso de instalacin. Elige el idioma y pulsar sobre el botn Siguiente.

A continuacin se muestra el acuerdo de licencia, GNU GPL. Para poder continuar se requiere aceptar las condiciones.

CreatedEscrito poreDocPrinter PDF Pro!! 11 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

Entre otras cosas, una licencia de tipo GNU GPL proporciona al usuario final el cdigo fuente de la aplicacin, as como la facilidad de copiar, modificar, distribuir, etc. Sin cargo extra. La nica condicin es que se mantenga el mismo tipo de licencia y se den los crditos al autor original. Para ms detalles puedes consultar http: / /www.gnu.org/home.es.html o bien http: / / e s.wikipedia.org/wiki /GPL. Posteriormente, deber indicar el directorio en donde se instalara la aplicacin. Se recomienda utilizar la opcin por default.

Una vez seleccionado el directorio en donde se instalara el programa, aparece una ventana para personalizar la instalacin. Recomendamos dejar las opciones seleccionadas tal como aparecen por defecto y pulsar en el botn Instalar.

CreatedEscrito poreDocPrinter PDF Pro!! 12 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

El proceso de instalacin inicia. Se instalan los archivos necesarios en el directorio seleccionado previamente. Para ver los detalles de la instalacin puede pulsar en el botn Ver detalles y se desplegar una pantalla como la que se muestra a continuacin.

Tan pronto como finaliza la instalacin, una ventana indicando que el proceso se ha completado aparece. Cuando se pulsa sobre el botn Terminar, el programa de instalacin lanza la aplicacin del explorador de Internet que se tenga por omisin, mostrando una pgina web con el WinAVR User Manual, tal como se muestra.

CreatedEscrito poreDocPrinter PDF Pro!! 13 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

En este punto, se puede cerrar la ventana del navegador web. El usuario notar que en el escritorio se crean una serie de iconos. Puede borrarlos, si gusta, y el funcionamiento del programa no se afecta.

CreatedEscrito poreDocPrinter PDF Pro!! 14 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
6.- Mi primer programa con WinAVR
WinAVR cuenta con diversas herramientas de software para la generacin, depuracin y programacin de aplicaciones destinadas a los microcontroladores AVR de Atmel. Para generar una aplicacin, seguir estos pasos: 1. Crear una carpeta, en la direccin que mejor nos parezca, de preferencia algn lugar en el que recuerden donde quedo colocada la carpeta. En esta carpeta se almacenarn los archivos de la aplicacin. 2. En el escritorio aparece un icono similar a la lmpara de aladino. Hacer doble click; o bien ir al men inicio- > Programas - > WinAvr y seleccionar Mfile[WinAvr]

3. A continuacin se debe elegir el tipo de microcontrolador que se va a programar. Esto se hace desde el men Makefil, ir a MCU type y elegir el tipo de microcontrolador a programar.

CreatedEscrito poreDocPrinter PDF Pro!! 15 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

4. Una vez seleccionado el microcontrolador, se debe elegir el programador. Para esto se vuelve a pulsar sobre el men Makefile, dirigirse al submen Programmer y elegir el tipo de tarjeta programadora que van a utilizar.

CreatedEscrito poreDocPrinter PDF Pro!! 16 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

5. Ahora ser necesario especificar el puerto de comunicacin en donde se conecta el programador. Para el caso de las STK500, se elige un puerto serial; las tarjetas compatibles con STK200 utilizan, tpicamente el lpt1, o puerto paralelo 1.

CreatedEscrito poreDocPrinter PDF Pro!! 17 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

6. Hasta aqu la configuracin bsica. Existen otras opciones que, en un primer acercamiento no ser necesario modificar. 7. Se guarda este archivo en la carpeta creada en el paso 1. Utilice el men File - > Save As... Cercirese de que se graba SIN extensin, simplemente como Makefile. 8. Ahora, utilice la aplicacin Programmer s Notepad[WinAVR]. Desde el icono en el escritorio o desde la ruta men inicio- > Programas - > WinAvr y seleccionar Programmers Notepad[WinAvr].

9. Lo primero que debe hacer se es ir al men File - > New - > Project y dar un nombre a su proyecto, y elegir al pulsar sobre el botn lateral derecho [...], la carpeta creada en el paso 1.

CreatedEscrito poreDocPrinter PDF Pro!! 18 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

10. Al pulsar sobre el botn que aparece encerrado en color rojo, se despliega una ventana tipo explorador de archivos. En esta se busca la carpeta creada en el paso 1 y se pulsa sobre el botn Aceptar, y posteriormente sobre el botn OK de la ventana New Project... 11. En este momento en nuestra carpeta deben existir dos archivos, uno llamado Makefile y otro con extensin pnproj . Esta extensin indica que se trata de un archivo generado por el Programmer s Notepad y es de tipo PROJect o proyecto. 12. El siguiente paso es guardar la hoja en blanco del lado derecho que lleva por ttulo New , con el nombre main.c. No olvidar la extensin, ni elegir otro nombre, ni usar mayusculas. Debe ser main.c 13. Falat asociar a nuestro proyecto un archivo de inicio. Para lograrlo se da clic derecho (tambin llamado botn secundario) sobre el nombre de nuestro proyecto y se elige la opcin Add Files, como se muestra en la imagen. Aparece una ventana de exploracin en la que hay que localizar el archivo main.c y dar doble click sobre l.

CreatedEscrito poreDocPrinter PDF Pro!! 19 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

14 .Una vez guardado el archivo main.c, se puede comenzar a escribir la aplicacin. Un ejemplo es el que se muestra en la figura. En el lado izquierdo est la ventana titulada Projects. En esta aparece el nombre de nuestro proyecto y los archivos que lo componen. La ventan lateral es la del archivo main.c y es en esta en donde se escribe la aplicacin. Las dos ventanas inferiores sirven para depuracin y como salida para el proceso de compilacin y programacin.

CreatedEscrito poreDocPrinter PDF Pro!! 20 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

15. Una vez que se escribe el cdigo para la aplicacin, hay que compilarlo. Esto se hace desde el men Tools - > Make All, como se muestra en la figura. El usuario notar que en la ventana llamada Output aparecer informacin sobre el proceso de compilacin. Si no hay errores marcar como salida > Process Exit Code: 0 > Time Taken: xx:xx

CreatedEscrito poreDocPrinter PDF Pro!! 21 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

16. Una vez compilada la aplicacin, se puede descargar al microcontrolador. Para lograrlo se utiliza la opcin Tools - > Program. Nuevamente, la ventana Output proporciona informacin del proceso de programacin.

CreatedEscrito poreDocPrinter PDF Pro!! 22 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
7.- CONTENIDO DE UN PROGRAMA
7.1.- Seccin de libreras
Las libreras son necesarias para que funcione el dispositivo que estamos programando, simplemente si uno no coloca las libreras el dispositivo no se podr programar; las libreras son necesarias para compilar un dispositivo AVR. Todas las libreras tendrn como extensin un punto h (nombre de la libreria.h) Ejemplo: io.h delay.h interrupt.h etc El siguiente ejemplo muestra como declarar una librera en WinAVR: # include <avr/io.h> (Esta librera se encuentra dentro del directorio de libreras definidas por el programa) Si alguien utiliza una librera que no este dentro de este directorio no puede declararla de la forma anterior, esta vez uno tiene que indicar el directorio en el que se encuentra la librera y el nombre de la librera, esta debe de ir declarada entre comillas: # include directorio en el que se encuentra/nombre de la libreria.h Ejemplo: # include D:/Documents and Settings/jefe/Mis documentos/lcd.h (Aqu tenemos una librera llamada lcd.h que se encuentra dentro del directorio D:/Documents and Settings/jefe/Mis documentos/ lcd.h)

7.2.- Tipos de variables


Una variable como su nombre lo indica es aquella que puede tomar diferentes valores en el programa a ejecutar, existen dos tipos de variables globales y locales. Una variable debe tomar un valor de algn tipo de dato char, int, etc.

7.3.- Variables globales


Se colocan antes de la funcin principal (main) estas pueden tomar distintos valores en todo el programa; estas variables regularmente son declaradas cuando el usuario hace uso de funciones (se vern de forma mas detallada mas adelante). Ejemplo: # incluye <avr/io.h> //librera io.h char x; int y; //x es una variable global tipo char //y es una variable global tipo int

int main(void){ //funcin principal //contenido del programa return 0;

CreatedEscrito poreDocPrinter PDF Pro!! 23 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
}

7.4.- Variables locales


Se colocan dentro de la funcin principal (main) estas pueden tomar distintos valores pero solo dentro de la funcin principal. Ejemplo: # incluye <avr/io.h> //librera io.h int main(void){ //inicia funcin principal char x; //x es una variable local tipo char int y; //y es una variable local tipo int return 0; } //se cierra la funcin principal

7.5.- Tipos de Datos


Conjunto de valores que pueden ser asignados a una variable NOMBRE char int float double TAMAO EN BITS 8 16 32 64 RANGO -128 a 128 -32.767 a 32.767 3,4E-38 a 3,4E38 1,7E-307 a 1,7E308

7.6.- Modificador unsigned


Este modificador significa sin signo y puede modificar cada uno dos datos que puede tomar nuestra variable, ejemplo: unsigned char x; //variable x tipo char sin signo

Este modificador cambia el rango del tipo de variables de nmeros a solo nmeros positivos: NOMBRE unsigned char unsigned int TAMAO EN BITS 8 16 RANGO 0 a 255 0 a 65.535

CreatedEscrito poreDocPrinter PDF Pro!! 24 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
8.- FUNCION PRINCIPAL MAIN
Como su nombre lo indica, es la funcin en la cual se va a desarrollar el cuerpo de nuestro programa. Ejemplo: # include <prototipo> // Libreras int main (void ) // Funcin principal de C. { // Inicio del programa principal. // Declaraciones. Cuerpo del programa principal. // Sentencias return 0; } // Fin del main o programa principal.

CreatedEscrito poreDocPrinter PDF Pro!! 25 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
9.- OPERADORES
9.1.- Que es un operador?
Sirve para manipular los datos a manejar en un programa, existen varios tipos de operadores; de asignacin, aritmticos, lgicos; por mencionar algunos.

9.2.- Operadores aritmticos 9.2.1.Sintaxis: x=6; y=2; z=x + y; Ejemplo: #include<avr/io.h> int main(void){

Suma

//declaracin de la librera io.h //funcin principal

char x,y,z; //declaracin de variables locales tipo char (8 bits) DDRA=0xff; //declaracin del puerto A como salida while(1){ x= 6; y= 2; z=x+y; PORTA=z; } return 0; } //ciclo infinito, siempre se estar realizando

//despliegue de datos por el puerto A //cierre del ciclo while

//cierre de la funcin principal

9.2.2.Sintaxis: x=6; y=2; z=x - y; Ejemplo: #include<avr/io.h> int main(void){

Resta

//declaracin de la librera io.h //funcin principal

char x,y,z; //declaracin de variables locales tipo char (8 bits) DDRA=0xff; //declaracin del puerto A como salida

CreatedEscrito poreDocPrinter PDF Pro!! 26 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
while(1){ x= 6; y= 2; z=x-y; PORTA=z; } return 0; } //ciclo infinito, siempre se estar realizando

//despliegue de datos por el puerto A //cierre del ciclo while

//cierre de la funcin principal

9.2.3.Sintaxis: x=6; y=2; z=x * y; Ejemplo: #include<avr/io.h> int main(void){

Multiplicacin

//declaracin de la librera io.h //funcin principal

char x,y,z; //declaracin de variables locales tipo char (8 bits) DDRA=0xff; //declaracin del puerto A como salida while(1){ x= 6; y= 2; z=x*y; PORTA=z; } return 0; } //ciclo infinito, siempre se estar realizando

//despliegue de datos por el puerto a //cierre del ciclo while

//cierre de la funcin principal

9.2.4.Sintaxis: x=6; y=9; z=x / y; Ejemplo: #include<avr/io.h> int main(void){

Divisin

//declaracin de la librera io.h //funcin principal

CreatedEscrito poreDocPrinter PDF Pro!! 27 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
char x,y,z; //declaracin de variables locales tipo char (8 bits) DDRA=0xff; //declaracin del puerto A como salida while(1){ x= 6; y= 2; z=x/y; PORTA=z; } return 0; } //ciclo infinito, siempre se estar realizando

//despliegue de datos por el puerto a //cierre del ciclo while

//cierre de la funcin principal

9.3.- Operadores de comparacin


Operadores que se encargan de comprobar condiciones o sentencias de control. Cuando se evala una condicin el resultado que se obtiene es 0 si no se cumple y un nmero distinto de 0 si se cumple. Normalmente cuando se cumplen devuelven un 1. == igual que != diferente de > mayor que < menor que Se cumple si son iguales Se cumple si son diferentes Se cumple si el primero es mayor que el segundo Se cumple si el primero es menor que el segundo

>= mayor o igual que Se cumple si el primero es mayor o igual que el segundo <= menor o igual que Se cumple si el primero es menor o igual que el segundo Ejemplo: # include <avr/io.h> //declaracin de librera io.h int main (void){ DDRD=0x00; DDRC=0x00; DDRA=0xff; char x,y,salida; while(1) { x=PIND; y=PINC; if(x>y){ //si x es mayor a y ejecuta esta instruccin salida=x; //coloca a salida el valor de x PORTA= salida;//muestra por el puerto A lo que hay en salida } //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida //declaracin del puerto A como salida /*declaracin de variables, y, x y salida como variable local tipo char (8 bits)*/ //inicio ciclo infinito

CreatedEscrito poreDocPrinter PDF Pro!! 28 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
//se cierra el ciclo if(x>y) if(x==y){ //si x es igual a y ejecuta esta instruccin salida=oxff; //dale a salda el valor de ff (255 en decimal) PORTA= salida;/*muestra por el puerto A el valor de salida, en este caso si ambas variables son iguales x & y, todas las salidas del puerto A se colocaran en estado alto*/ } //se cierra el ciclo if(x==y) if(y>x){ //si y es mayor a x ejecuta la siguiente instruccin salida=y; //salida tomara el valor de y PORTA= salida; /*se le asignara al puerto A el valor de salida, y se mostrara el resultado por el mismo puerto*/ } //se cierra este ultimo ciclo if(y>x) } //se cierra el ciclo while return 0; } //se cierra la funcin principal

9.4.- Operadores lgicos matemticos


Los operadores lgicos son: AND (&), OR (|). Este tipo de operadores se utiliza para enmascarar puertos, es decir conservar los bits que uno requiera.

Sintaxis: X=pinA&0x0F;

//En este caso estamos leyendo el pinA y enmascaramos la parte


// baja. La parte alta desaparece por que pasa como si la //multiplicramos por cero y la parta baja como si la //multiplicramos por uno.

X=pinA|0x0F;

//Aqu a lo que leemos en el pinA le agregamos 0x0F es como si //hiciramos una suma de la parte baja. Si tenemos algn valor //en cero de la parte baja lo volvemos uno inmediatamente

9.5.- Operadores lgicos comparativos


Los operadores lgicos son: AND (&&), OR (||). Ejemplo: If(x==5&&y==10){ PORTB=0xFF; }

// Si ocurre que x es igual a 5 y y es // igual a 10 entonces enciende el puerto B // completo. //Mientras x sea igual a 3 o y sea igual // a 10, mostrar la parte alta por el puerto // A.

While(x==3||y==10){ PORTA=0xF0; }

CreatedEscrito poreDocPrinter PDF Pro!! 29 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
9.6.- Otro tipo de operadores
<< >> Desplazamiento a la izquierda Desplazamiento a la derecha

Sintaxis: 1<<6 //coloca un uno en la sexta posicin Ejemplo: # include <avr/io.h> //declaracin de libreria io.h # include <avr/delay.h> //declaracin de libreria delay.h int main (void){ DDRD=0x00; DDRA=0xff; char entrada,x; //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida /*declaracin de variables, entrada y x como variable local tipo char (8 bits)*/ //inicio ciclo infinito //a la variable entrada le damos el valor del puerto D //iniciamos el puerto A con una salida de 0

while(1) { entrada =PIND; PORTA=0;

if(entrada==1) { //si entrada obtiene valor de uno entra a un ciclo for for(x=0;x<8;x++){/*ciclo en el cual va a iniciar la variable x con un valor de 0 (x=0) e ira aumentando en uno (x++) hasta llegar a ser menor a 8 (x<8)*/ PORTA=1<<x;/*se mostrara por el puerto A un uno, x indica la posicin en la cual se mostrara el uno, esta ira aumentando gradualmente de 0 a 7, el ciclo mostrara un recorrimiento de derecha a izquierda de un bit*/ _delay_ms(1000); /*retardo de 1000 milisegundos, cuando este tiempo pase se ejecutara la siguiente la siguiente instruccin*/ } //cierre del ciclo for } //cierre del ciclo if==1 if(entrada==2) { //si entrada es igual a 2, entrara a este ciclo for(x=0;x<8;x++){ //inicia un ciclo que ira de 0 a 8 PORTA=128>>x; /*este ciclo se ejecutara de derecha a izquierda recorriendo el bit mas significativo primero y terminara en el bit menos significativo*/ _delay_ms(1000); //retardo de 1000 milisegundos } //cierre del ciclo for } //cierre del ciclo if=2 } //cierre del ciclo while return 0; } //se cierra la funcin principal, main

CreatedEscrito poreDocPrinter PDF Pro!! 30 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
10.- SENTENCIAS DE FLUJO
10.1.- If
La palabra if significa si es una palabra condicional, si se cumple la sentencia se ejecutara la instruccin contenida dentro de la condicin. Sintaxis: if (condicin) { //instrucciones a ejecutarse } Ejemplo: # include <avr/io.h> //declaracin de libreria io.h int main (void){ DDRD=0x00; DDRA=0xff; char entrada,salida; //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida /*declaracin de variables entrada y salida, como variable local tipo char (8 bits)*/

while (1){ //inicio ciclo infinito entrada = PIND ; //leer el puerto D y asignarle su valor a entrada if (entrada==1){ //sentencia: si entrada == 1 ejecuta el cdigo salida =10; //a salida le asignamos el valor de 13 PORTA= salida; //despliegue del resultado por el puerto A } //cierre del ciclo if } //cierre del ciclo while return 0; } //cierre de la funcin principal

10.2.- If else
Aqu se combina el if (si) con else (sino) si no se cumple la sentencia del if, entonces el programa ejecutara las instrucciones contenidas dentro del else. Sintaxis: if (condicin){ //instrucciones a ejecutar si se cumple la condicin } else { //instrucciones a ejecutar si no se cumple la condicin } Ejemplo: # include <avr/io.h> //declaracin de libreria io.h

CreatedEscrito poreDocPrinter PDF Pro!! 31 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
int main (void){ DDRD=0x00; DDRA=0xff; char entrada,salida; //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida /*declaracin de variables entrada y salida, como variable local tipo char (8 bits)*/

while (1){ //inicio ciclo infinito entrada = PIND ; //leer el puerto D y asignarle su valor a entrada if (entrada==1){ //sentencia: si entrada == 1 ejecuta el cdigo salida =15; //a salida le asignamos el valor de 13 PORTA= salida; //despliegue del resultado por el puerto A } //cierre del ciclo if

else { /*si la sentencia if no se cumple, se ejecutara la sentencia else*/ salida = 0xf0; //a salida le asignamos el valor de 255 PORTA= salida; //despliegue del resultado por el puerto A } //cierre del ciclo else } return 0; } //cierre del ciclo while //cierre de la funcin principal

10.3.- For
Muy diferente al if y el else, esta sentencia forma lo que podemos llamar un lazo, el cual se realizara hasta cumplir cierta condicin. Sintaxis: for (condicin inicial, condicin final, incremento){ //conjunto de instrucciones a realizarse } Ejemplo: for(x=0;x<8;x++){ //inicia un ciclo que ira de 0 a 8 PORTA=128>>x; /*este ciclo se ejecutara de derecha a izquierda recorriendo el bit mas significativo primero y terminara en el bit menos significativo*/ _delay_ms(1000); //retardo de 1000 milisegundos

10.4.- While
Sentencia que se cumplir en un ciclo, mientras la condicin establecida se mantenga Sintaxis: while (condicin) { //instrucciones a ejecutar }

CreatedEscrito poreDocPrinter PDF Pro!! 32 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
Ejemplo: # include <avr/io.h> //declaracin de libreria io.h # include <avr/delay.h> //declaracin de libreria delay.h void main (){ DDRD=0x00; DDRA=0xff; char x,y; //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida /*declaracin de variables x & y, como variable local tipo char (8 bits)*/ //inicia un ciclo infinito

while(1) { x=PIND;

if(x==1) { //si x = a 1 ejecuta esto y=0; //inicializa y con 0 while(y<20){ //mientras y sea menor a 20 se realizara la instruccin PORTA=y; //muestra por el puerto A el valor de y y=y+1; //suma a la variable y 1 _delay_ms(1000);//retardo de 1000 milisegundos } //se cierra el ciclo while (y<20) } //se cierra el ciclo if ==1 if(x==2) { //si x es igual a 2, ejecuta esto y=20; //inicializa y con un valor de 20 while(y>20){ //mientras y sea mayor a 20, se realizara la instruccin PORTA=y; //muestra por el puerto A el valor de y y=y-1; //resta a la variable y 1 _delay_ms(1000); //retardo de 1000 milisegundos } //se cierra el ciclo while (y<20) } //se cierra el ciclo if ==2 } //se cierra el while(1) return 0; } //se cierra la funcion principal

10.5.- Switch
Funciona como un sistema de varios interruptores, el cual va a leer una variable a la cual se le pueden asignar distintos valores. Nos da la opcin de escoger entre diferentes valores. Sintaxis: switch (variable){ case opcin1: //cdigo a ejecutar si la variable toma el valor de la opcin 1 break; case opcin2: //cdigo a ejecutar si la variable toma el valor de la opcin 2

CreatedEscrito poreDocPrinter PDF Pro!! 33 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
break; case opcin3: //cdigo a ejecutar si la variable toma el valor de la opcin 3 break; default: //si la variable tomo un valor diferente a los anteriores se ejecutara el cdigo de aqu

Ejemplo: # include <avr/io.h> //declaracin de libreria io.h void main (){ DDRD=0x00; DDRA=0xff; char entrada,salida; //funcin principal //declaracin del puerto D como entrada //declaracin del puerto A como salida /*declaracin de variables entrada y salida, como variable local tipo char (8 bits)*/

while (1){ entrada = PIND ; switch (entrada){

/* switch leer la entrada y escoger el caso segn corresponda a la variable*/ case 1: salida=2+2; // caso 1 se mostrara en la salida la suma de 2+2 PORTA=salida; break; /*cada vez que se cierre un caso se debe hacerlo con un break*/ //caso 2 se mostrara en la salida la resta de 8-3

case 2: salida=8-3; PORTA=salida; break; case 3: salida=3*2; PORTA=salida; break; default: salida=15; PORTA=salida; } } return 0; }

/*caso 3 se mostrara en la salida la multiplicacin de 3*2 */

/*para otro caso diferente a los anteriores se mostrara un 15 en el puerto A*/

//cierre del switch //cierre del while //cierre de la funcin principal

CreatedEscrito poreDocPrinter PDF Pro!! 34 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
11.- Prototipos (funciones)
A medida que los programas se van desarrollando y aumentan de tamao, se convertiran en sistemas poco manejables sino fuera por la modularizacin, que es el proceso consistente en dividir un programa muy grande en una serie de mdulos mucho ms pequeos y manejables. A estos mdulos se les denomina de distintas formas (subprogramas, subrutinas, procedimientos, funciones, etc.) segn los distintos lenguajes. El lenguaje C hace uso del concepto de funcin. Sea cual sea la nomenclatura, la idea sin embargo es siempre la misma: dividir un programa grande en un conjunto de subprogramas o funciones mas pequeas que son llamadas por el programa principal; estas a su vez llaman a otras funciones mas especificas y as sucesivamente. La divisin de un programa en unidades ms pequeas o funciones presenta entre otras- las siguientes ventajas: 1.- Modularizacin. Cada funcin tiene una misin muy concreta, de modo que nunca tiene un nmero de lneas excesivo y siempre se mantiene dentro de un tamao manejable. Adems una misma funcin puede ser llamada muchas veces en un mismo programa, e incluso puede ser reutilizada por otros programas. Cada funcin puede ser desarrollada y comprobada por separado. 2.- Ahorro de memoria y tiempo de desarrollo. En la medida en que una misma funcin es utilizada muchas veces, el nmero de total de lneas de cdigo disminuye, y tambin lo hace la probabilidad de introducir errores en el programa. 3.- Independencia de datos y ocultamiento de informacin. Una de las fuentes ms comunes de errores en los programas del computador son los efectos colaterales o perturbaciones que se pueden producir en distintas partes del programa. Es muy frecuente que la hacer una modificacin para aadir una funcionalidad o corregir un error, se introduzcan nuevos errores en partes del programa que antes funcionaban correctamente. Una funcin es capaz de mantener gran independencia con el resto del programa, manteniendo sus propios datos y definiendo muy claramente la interfaz o comunicacin con la funcin que la ha llamado y con las funciones a las que llama, y no teniendo ninguna posibilidad de acceso a la informacin que no le compete. Sintaxis: #include Tipo-de-variable nombre-de-la-funcin (variable-con-la-que-va-a-trabajar); //declaracin de la funcin int main(void){ //funcin principal while(1){ nombre-de-la-funcin (variable-con-la-que-va-a-trabajar); //llamada de la funcin } return 0; }

CreatedEscrito poreDocPrinter PDF Pro!! 35 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
//funcin: Tipo-de-variable nombre-de-la-funcin (variable-con-la-que-va-a-trabajar) { //instrucciones a ejecutar return x; //x representa un valor } //cierre de la funcin Tipo-de-variable: cuando una funcin se ejecuta debe devolver un valor aqu se coloca el tipo de valor que devuelve puede ser char, int, etc; si no devuelve ningn valor entonces se indicara con la palabra void. return x: en caso de que nuestra funcin devuelva algn valor (char,int,etc) se especificara aqu en el return. Ejemplo: #include<avr/io.h> int suma (char , char ); /*funcin llamada suma que devuelve un valor entero y trabaja con dos variables tipo char; aqu se declara la funcin*/ char x,y,z; /*declaracin de variables globales, casi siempre cuando se trabaja con funciones se utilizan variables globales si estas variables las declaramos como variables locales, es decir dentro del main, la funcin lo que realizamos no servir */

void main(void){ DDRA=0xff; while(1){

//declaracin del puerto A como salida //inicio ciclo infinito

PORTA=suma (x,y); /*manda a llamar a la funcin y muestra el resultado por el puerto A, tambin se indican las variables con las que trabaja*/ } //fin while //fin funcin principal /*aqu inicia la funcin, int significa que devolver un dato de tipo entero, la funcin se llama suma, y trabaja con dos variables de tipo char, es aconsejado colocar una funcin al final del programa principal*/

int suma (char x , char y ){

x=3; //le asignamos a la variable x el valor de 3 y=2; //le asignamos a la variable y el valor de 2 z=x+y; /*en este caso nuestra funcin solo se encargara de realizar la suma de dos variables*/ return z; /*aqu asignamos a la variable suma el valor de z*/ }

CreatedEscrito poreDocPrinter PDF Pro!! 36 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
Este fue un ejemplo muy sencillo de la estructura de una funcin; mas adelante veremos ms ejemplos.

CreatedEscrito poreDocPrinter PDF Pro!! 37 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
12.Puertos Digitales.

El microcontrolador ATMEGA16 de la familia AVR de ATMEL, cuenta con cuatro puertos digitales. En esta seccin describiremos brevemente sus caractersticas. Los puertos disponibles en el AVR se enumeran de la A la D. Por cada puerto digital, existen tres registros asociados a su manejo y configuracin. Suponga que "x" puede tomar cualquier valor del conjunto {A,B,C,D}; y adems "n" puede tomar un valor cualquiera del conjunto n={0,1,2,3,4,5,6,7}. Por lo tanto:

DDRx
Registro de Direccin de Datos del puerto digital "x". En este registro se va a indicar cul o cules de sus 8 bits sern de entrada y cules de salida. Un "0" provoca que el bit en el que aparece sea de entrada. Un "1" provoca que el bit en el que aparece sea de salida. Este registro es de lectura/escritura.

PORTx
Las escrituras a un puerto digital se realizan a travs de este registro. Cuando se desea que un cierto valor aparezca a la salida del puerto "x", se debe de escribir ese valor en este registro. Este registro es de lectura/escritura.

PINx
Por el contrario, si lo que se desea es leer un valor presente en las terminales de un puerto digital, esta lectura se hace va el registro PINx. Este registro es de slo lectura. /*************************EJEMPLO C********************************/ DDRA=0; DDRC=255; DDRD=0x0F; //Puerto A como entrada //Puerto C como salida //La parte alta del puerto D es entrada, y la parte baja es salida EN

;***********************EJEMPLO ENSAMBLADOR******************** clr r16 out ;El registro de trabajo r16 se inicializa con 0's

EN

DDRA,r16 ;El contenido de r16 se copia en el registro DDRA ;provocando que el puerto A sea de entrada

CreatedEscrito poreDocPrinter PDF Pro!! 38 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
ser r16 out ;El registro de trabajo r16 se inicializa con 1's

DDRC,r16 ;El contenido de r16 se copia en el registro DDRC ;provocando que el puerto C sea de salida

La informacin anterior fue obtenida de la pgina www.embeddedv.com del Ing. Daniel Hernndez Ventura

CreatedEscrito poreDocPrinter PDF Pro!! 39 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
13.- INTERRUPCIONES:
El Atmega 32 contiene diferentes fuentes de interrupcin. Cada interrupcin contiene un vector de la direccin programa dentro de la memoria interna del Atmega en los vectores de Reset e Interrupcin. La tabla que se presentar a continuacin mostrar la jerarqua entre los vectores de Reset e Interrupcin dentro del Atmega:

Para lograr utilizar cualquier interrupcin primero se necesita inicializarla y darle algunas caractersticas dependiendo de cual va a ser el manejo que le vamos a dar a dicha interrupcin. Por ejemplo: Vamos a utilizar la interrupcin 0 y la interrupcin 1 como un conteo ascendente y descendente respectivamente.

CreatedEscrito poreDocPrinter PDF Pro!! 40 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
/*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// NOTA: Este programa realiza la habilitacin de la interrupcin 1 y 0 dentro del programa con lo cual ahora nuestro programa realiza el incremento de una variable al ocurrir la interrupcin 0 y el decremento de la misma al ocurrir la interrupcin 1 y cada resultado ser desplegado por el puerto B. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> //aqu se declara la librera de los puertos //aqu se declara la librera de las interrupciones //esta librera tambin contiene las interrupciones //(WinAVR2005) void INIT_INT0_Falling(void); //Se asigna un nombre a la inicializacin int cont; //Se declara a cont como variable entera. //Esta instruccin lo que hace es detectar cuando se //habilita la interrupcin 0 para entrar a este ciclo //Esta instruccin deshabilita las interrupciones //Cont va a ser incrementado una vez //Por el puerto B se muestra el valor de cont //habilita las interrupciones de nuevo

SIGNAL(SIG_INTERRUPT0){ cli(); cont++; PORTB = cont; sei(); } SIGNAL(SIG_INTERRUPT1){ cli(); cont--; PORTB = cont; sei(); }

//Esta instruccin lo que hace es detectar cuando se //habilita la interrupcin 1 para entrar a este ciclo //Esta instruccin deshabilita las interrupciones //Cont va a ser decrementado una vez //Por el puerto B se muestra el valor de cont //habilita las interrupciones de nuevo

int main (void){ //Programa principal DDRB= 0xff; //Declaracin del Puerto B como Puerto de salida INIT_INT0_Falling();//Inicializa la interrupcin 0 sei(); //Habilita las interrupciones while(1); //Entra a un ciclo infinito } void INIT_INT0_Falling(void){//Inicializacin de la interrupcin 0 GICR|=0xC0; //Registro del control general de las interrupciones //Aqu se lleva acabo la habilitacin de las //interrupciones utilizadas dentro del programa GIFR|=0xC0; //Registro de la bandera de interrupcin general. //Aqu se declaran las interrupciones externas en //forma de bandera MCUCR|=0x0A; //Dentro de esta opcin se le da los valores del //control de sensado por ejemplo de pulso alto y //pulso bajo, flanco ascendente y descendente, }

CreatedEscrito poreDocPrinter PDF Pro!! 41 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
13.1.- REGISTRO DE CONTROL MCU:

Este registro contiene los bits de control para los sensores de las interrupciones y las funciones generales de las funciones del MCU. El sensor de control de las interrupciones es habilitado dentro de (ISC00..ISC11). Cada uno tiene una funcin diferente, depende de la tabla para saber como utilizarlo. Por ejemplo: Si ISC10=0 y ISC11=0 entonces ocurrir la interrupcin 1 al ocurrir un bajo nivel en el pin de la interrupcin 1. Si ISC10=1 y ISC11=0 entonces ocurrir la interrupcin 1 cuando ocurra algn cambio lgico en el pin de la interrupcin 1. Si ISC10=0 y ISC11=1 entonces ocurrir la interrupcin 1 cuando ocurra un pulso descendente en el pin de la interrupcin 1. Si ISC10=1 y ISC11=1 entonces ocurrir la interrupcin 1 cuando ocurra un pulso ascendente en el pin de la interrupcin 1.

13.2.- REGISTRO DE ESTADO Y CONTROL DEL MCU:

El bit ISC2 dentro del vector MCUCSR sirve solamente para darse cuenta si ha ocurrido una interrupcin dentro del microcontrolador.

13.3.- REGISTRO DE CONTROL DE LAS INTERRUPCIONES GENERALES:

CreatedEscrito poreDocPrinter PDF Pro!! 42 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
13.3.1.INT1: Peticin de la habilitacin de la interrupcin 1 Cuando el bit 7 (INT1) es habilitado (puesto en 1) y en el registro de estado tambin es habilitado lo que suceder es que el pin externo de la interrupcin 1 ser habilitado con lo cual nosotros podemos dar un interrupcin al microcontrolador tecleando ese pin. Ahora dentro del MCUCR nosotros le damos la caracterstica del tipo de presionado para que se active nuestra interrupcin. Por ejemplo: Puede ser cuando es un nivel bajo(un cero), cuando hay un cambio lgico (de 0 a 1 lgico o viceversa), cuando hay un flanco ascendente lgico y cuando hay un flanco descendente lgico. 13.3.2.INT0: Peticin de la habilitacin de la interrupcin 0 Cuando el bit 6 (INT0) es habilitado (puesto en 1) y en el registro de estado tambin es habilitado lo que suceder es que el pin externo de la interrupcin 1 ser habilitado con lo cual nosotros podemos dar un interrupcin al microcontrolador tecleando ese pin. Ahora dentro del MCUCR nosotros le damos la caracterstica del tipo de presionado para que se active nuestra interrupcin. Por ejemplo: Puede ser cuando es un nivel bajo(un cero), cuando hay un cambio lgico (de 0 a 1 lgico o viceversa), cuando hay un flanco ascendente lgico y cuando hay un flanco descendente lgico. 13.3.3.INT2: Peticin de la habilitacin de la interrupcin 2 Cuando el bit 5 (INT2) es habilitado (puesto en 1) y en el registro de estado tambin es habilitado lo que suceder es que el pin externo de la interrupcin 1 ser habilitado con lo cual nosotros podemos dar un interrupcin al microcontrolador tecleando ese pin. Ahora dentro del MCUCR nosotros le damos la caracterstica del tipo de presionado para que se active nuestra interrupcin. Por ejemplo: Puede ser cuando es un nivel bajo(un cero), cuando hay un cambio lgico (de 0 a 1 lgico o viceversa), cuando hay un flanco ascendente lgico y cuando hay un flanco descendente lgico.

13.4.- REGISTRO GENERALES:

DE

LA

BANDERA

DE

LAS

INTERRUPCIONES

13.4.1.BIT 7 -- INTF1: Bandera de la Interrupcin externa 1 Cuando ocurre un flanco o cambio lgico en el pin de la INT1 es habilitada dicha interrupcin dentro del microcontrolador. Se necesita activar este bit de este registro para que funcione la interrupcin 1 por que si no, no detectar los cambios en el pin INT1. 13.4.2.BIT 6 -- INTF0: Bandera de la Interrupcin externa 0 Cuando ocurre un flanco o cambio lgico en el pin de la INT0 es habilitada dicha interrupcin dentro del microcontrolador. Se necesita activar este bit de este registro para que funcione la interrupcin 0 por que si no, no detectar los cambios en el pin INT0.

CreatedEscrito poreDocPrinter PDF Pro!! 43 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
13.4.3.BIT 5 -- INTF2: Bandera de la Interrupcin externa 2 Cuando ocurre un flanco o cambio lgico en el pin de la INT2 es habilitada dicha interrupcin dentro del microcontrolador. Se necesita activar este bit de este registro para que funcione la interrupcin 2 por que si no, no detectar los cambios en el pin INT2 .

CreatedEscrito poreDocPrinter PDF Pro!! 44 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
14.- ADC Convertidor Analgico - Digital
El microcontrolador ATMega32 contiene 8 ADC en los pines del puerto A cada uno funciona independiente del otro pero no pueden funcionar 2 en el mismo ciclo de reloj por lo cual se tienen que manejar arreglos o variables para almacenar los valores de cada ADC para que se vayan mostrando cuando uno lo requiera por posiciones del vector asignado. Para inicializar el ADC se tienen que asignar unos bits a diferentes registros que se explicaran a continuacin: 14.1.- ADMUX --- REGISTRO MULTIPLEXORES DEL ADC DE LA SELECCIN DE LOS

14.1.1.BIT 7:6 --- REFS 1:0: Bits de la seleccin del voltaje de referencia Estos bits sirven para la eleccin del voltaje de referencia del ADC. La opcin de referencia de voltaje interno no puede ser utilizada cuando se este aplicando un voltaje de referencia al pin AREF. La siguiente tabla explica los siguientes casos: Si REFS0= 0 y REFS1= 0 entonces el voltaje Vref interno se apagar dejando al pin de AREF como entrada del voltaje de referencia. Si REFS0= 1 y REFS1= 0 entonces a AVCC se le tendr que colocar un capacitor externo para hacer la funcin del clock hacia el pin de AREF. Si REFS0= 0 y REFS1 = 1 no ocurrir nada ya este bit esta reservado. Si REFS0= 1 y REFS1 = 1 se activar el voltaje de referencia interno que es de 2.56 con un capacitor externo al pin de AREF.

14.1.2.BIT 5 --- ADLAR: Resultado del ADC ajustado a la derecha. Este bit afecta la presentacin de la conversin del resultado del ADC en el registro de datos del ADC. Colocando un 1 en este bit ajustamos a la izquierda el resultado. En otro caso el resultado es ajustado a la derecha.

CreatedEscrito poreDocPrinter PDF Pro!! 45 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
14.1.3.BIT 4:0 --- MUX4:0 Bits de seleccin de la ganancia y del canal analgico. Estos bits sirven para declarar nuestros bits de entrada del ADC as como para saber cuanta ganancia o que bits del ADC con ganancia vamos a utilizar. A continuacin se presenta una tabla donde se describen los bits ms detalladamente:

CreatedEscrito poreDocPrinter PDF Pro!! 46 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

14.2.- ADCSRA --- REGISTRO A DEL ESTADO Y CONTROL DEL ADC

14.2.1.-

BIT 7 --ADEN: Habilitacin del ADC Colocando un 1 en este bit habilitamos el ADC del microcontrolador. BIT 6 --ADSC: Inicializacin de la conversin del ADC En modo de conversin sencilla, al escribir 1 en este bit inicializa cada

14.2.2.conversin. 14.2.3.-

BIT 5 --ADATE: Habilitacin del auto-disparo del ADC Cuando se habilita este bit el ADC comenzar una conversin sobre un flanco positivo de la seal elegida del disparador. 14.2.4.BIT 4 --ADIF: Bandera de interrupcin del ADC Este bit se vuelve 1 cuando una conversin en el ADC es completada y una actualizacin de los registros de datos se lleva acabo. ADIF es limpiado por hardware cuando la ejecucin correspondiente al vector de interrupcin. 14.2.5.BIT 3 --ADIE: Habilitacin de la Interrupcin del ADC Cuando este bit es puesto en 1 y el bit 1 del SREG es iniciado, la interrupcin de la conversin completa es activada. BIT 2:0 --- ADPS: Bits selectores del prescalador del ADC. Estos bits determinan el factor de divisin entre la frecuencia del XTAL y el reloj de entrada para el ADC. A continuacin se presenta una tabla de las diferentes combinaciones que se pueden hacer. 14.2.6.-

CreatedEscrito poreDocPrinter PDF Pro!! 47 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

14.3.-

ADCL Y ADCH---

LOS REGISTROS DE DATOS DEL ADC

ADLAR = 0 ---

ADLAR = 1 ---

Cuando una conversin del ADC es completada el resultado se almacena en estos 2 registros. Cuando el ADCL es ledo, el registro de datos del ADC no es actualizado hasta que ADCH es ledo. Consecuentemente, si el resultado es ajustado a la izquierda y no ms que 8 bits son requeridos, eso es suficiente para leer ADCH. En otro caso se debe leer primero ADCL y despus ASCH. El bit ADLAR en el ADMUX, y los bits MUXn en ADMUX afectan la manera en que los registros son ledos del registro. Si el ADLAR es iniciado, el resultado es ajustado a la izquierda. Si el ADLAR es limpiado (puesto a 0), entonces el resultado es ajustado a

CreatedEscrito poreDocPrinter PDF Pro!! 48 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
la derecha. Nosotros utilizaremos el ADLAR = 1 para que se pierda solo la parte baja (2 bits) que sera la cantidad menor que podemos perder. ADC 9:0: Conversin de los resultados del ADC Estos bits representan el resultado de la conversin

14.4

SFIOR---

REGISTRO ESPECIAL DE LA FUNCION I/O

14.4.1 BIT 7:5 --- ADTS2:0: FUENTE DEL AUTO-DISPARO DEL ADC Si ADATE en ADCSRA es puesto a 1, el valor de estos bits dispararan una conversin del ADC. Si ADATE es limpiado (puesto a 0), las caractersticas del ADTS2:0 no tendrn efecto. Una conversin ser disparada por el flanco descendente de la bandera de interrupcin seleccionada. Note que el cambio de una fuente de disparo que es limpiada a una fuente de disparo que es iniciada, generar un flanco positivo sobre la seal del disparador. Si ADEN en ADCSRA es iniciado (puesto en 1), entonces iniciar una conversin. Cambiando a modo de corrimiento libre (ADTS [2:0] = 0) no causar un evento del disparador, siempre que la bandera de la interrupcin del ADC sea iniciada. A continuacin se presenta una tabla de las diferentes fuentes de autodisparo dentro de este registro.

14.4.2

BIT 4 --ADHSM: Modo de alta velocidad del ADC Escribiendo un 1 en este bit habilita el modo de alta velocidad del ADC. Este modo habilita la conversin muy rpida as como el alto poder de consumo.

CreatedEscrito poreDocPrinter PDF Pro!! 49 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
/****programa que hace la operacin de un voltmetro de 5 Volts para 255 en binario. ********/ /******** INSTRUCCIONES DE ARMADO Y USO: /// Primero que nada tenemos que tener un ADC armado por que en este caso no utilizamos el ADC interno del Atmega. El puerto A del Atmega ser entrada e ira conectado a la salida del ADC con sus respectivas resistencias. El puerto B va conectado a los displays de la siguiente forma: a=bit0, b=bit1, c=bit2, d=bit3, e=bit4, f=bit5, g=bit6. El puerto C va conectado a las bases de los transistores que van conectados a cada display para evitar una sobre carga en el Atmega en su configuracin de saturacin con una resistencia de 330 conectada a cada ctodo de los displays y de ah conectada al colector del transistor. El Voltmetro podr leer voltajes de 0 a 5 volts y desplegarlos por los 3 displays como en el caso anterior del sumador-restador. Los 3 displays tienen que ir conectados en paralelo de la forma como se les indico anteriormente. El bit-2 va conectado al colector del display menos significativos (unidades), el bit-3 al de las decenas, y el bit-4 al de las centenas; si realizaron bien el armado, entonces tiene que funcionar a la perfeccin. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Programa diseado por Abimael Rodrguez Sosa y Hctor Ortiz Gamino /// /// Alumnos de la carrera del 6to semestre de la carrera Ingeniera Electrnica /// ///en la materia de MICROPROCESADORES del Instituto Tecnolgico/// ///Superior de Xalapa, Veracruz /// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include<avr/signal.h> #include<avr/io.h> #include<avr/delay.h> #include<stdio.h> #include<string.h> #include<avr/interrupt.h> #include<avr/lcd_library.h> //Programa realizado por los alumnos: Abimael Rodriguez Sosa y Hctor Ortiz //Gamino //A continuacin le explicaremos la forma de conexin: //El puerto A se envan los sensores que se van a estar cuantificando //En el puerto B Se conecta el LCD en la parte de los bits o datos. //En el Puerto C se conectan los leds para el desplegado de los resultados tambin //Del puerto D tomamos los primeros 2 bits para habilitar el LCD. void init_ADC(void);void ADC_select (char ch); void datos_display(unsigned int temp,int lecth); int lectl,lecth,adL; int ADCn[4]={0,0,0,0}; int main(void){ int temp=0,x;

CreatedEscrito poreDocPrinter PDF Pro!! 50 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
///////////////////////////// CONEXIONES DE LOS PUERTOS /////////////////////////////////////// DDRA=0X00; //Entrada del ADC DDRC=0XFF; //Salida a los leds DDRB=0XFF; //Salida a lcd DDRD=3; //Salida a Rs y E del LCD /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// lcd_INIT(); init_ADC(); SREG|=0x80; //PARA HABILITAR TODAS LAS INTERRUPCIONES

while(1){ for(x=1;x<5;x++){ ADMUX=0x20|(x-1);

//elige canal //Inicia conversion

ADCSRA|=0x40; while((ADCSRA&0x10)==0); ADCSRA|=0x10; ADCn[x-1]=ADCH; } if(ADCn[0]<85){ posicion(0x80); lcd_string(" Sensor # 1"); lecth=ADCn[1]; posicion(0xC0); lcd_string("Voltage out = ."); datos_display(temp,lecth); PORTC=ADCn[1]; } if (ADCn[0]>84&&ADCn[0]<170){ posicion(0x80); lcd_string(" Sensor # 2"); lecth=ADCn[2]; posicion(0xC0); lcd_string("Voltage out = datos_display(temp,lecth); PORTC=ADCn[2]; } if (ADCn[0]>169&&ADCn[0]<255){ posicion(0x80); lcd_string(" Sensor # 3"); lecth=ADCn[3]; posicion(0xC0); lcd_string("Voltage out = ."); datos_display(temp,lecth);

.");

CreatedEscrito poreDocPrinter PDF Pro!! 51 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
PORTC=ADCn[3]; } }return (0); } void init_ADC(void){ //Inicializacin del ADC ADMUX = 0x20; //cambie de 0 a 5 por el ADLAR ADCSRA=0xA5; // Aqu habilita el ADC, inicio de conversin,etc SFIOR&=0x1F; //Activa el modo de alta velocidad } void ADC_select (char ch){ ADMUX = 0x20|ch; //aqui se eligen los canales a utilzar ADCSRA=0xA5; } //Convertidor ADC a 5 volts de salida.

void datos_display(unsigned int temp ,int lecth){ lecth= (lecth*0.019607843)*100; temp= lecth/100; // Aqu realiza la multiplicacin del dato de //entrada por 1/255 y por 100 // para recorrer el numero 2 posiciones y //evitar los nmeros flotantes

if (temp!=0){ posicion(0xCF); lcd_datos(0x30+temp);

// Aqu despliega las //centenas en caso de haber

_delay_ms(3); lecth = lecth - (temp * 100); // Elimina las centenas del //numero para dejar solamente las decenas y unidades } else { posicion(0xCF); lcd_datos(0x30); // Aqui despliega las centenas en //caso de haber

_delay_ms(3); } temp= lecth/10; // Localiza las decenas if (temp!=0){ posicion(0xD1); lcd_datos(0x30+temp); // Aqui //despliega las centenas en caso de haber _delay_ms(3); lecth = lecth - (temp * 10); // elimina las decenas //dejando solo las unidades

CreatedEscrito poreDocPrinter PDF Pro!! 52 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
} else { posicion(0xD1); lcd_datos(0x30); // Aqui despliega las //centenas en caso de haber

_delay_ms(3); } posicion(0xD2); lcd_datos(0x30+temp); // Aqui despliega las //centenas en caso de haber _delay_ms(3); }

CreatedEscrito poreDocPrinter PDF Pro!! 53 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
15.- USART
El microcontrolador contiene un Transmisor-Receptor Asncrono y Sncrono Universal que es un dispositivo de comunicacin serial altamente flexible.

15.1 FORMAT FRAME Un frame serial es definido como un tren de bits seriales con unos bits de sincronizacin (bits de inicio y de paro), y opcionalmente un bit de paridad para checar los errores. La USART acepta todas las 30 combinaciones de los siguientes formatos de frames validos: 1 bit de inicio 5 , 6 , 7 , 8 o 9 bits de datos Sin, impar y par bit de paridad 1 o 2 bits de paro Un frame inicia con el bit de inicio (Start bit) este siempre es bajo (cero) seguido por el bit de dato menos significativo (el de menor valor). Entonces van llegando el tren de bits ascendente hasta llegar al bit ms significativo. Si esta habilitado el bit de paridad entonces es insertado despus de los bits de datos, antes del bit de paro. Cuando un frame es transmitido, este puede estar seguido de otro frame inmediatamente, o la comunicacin de la lnea puede ser enviada a un alto estado con lo que detendra los trenes de pulsos siguientes, ya que no habra bit de inicio.

15.2 INICIALIZACION DE LA USART La USART tiene que ser inicializada antes de que cualquier comunicacin se lleve acabo. La inicializacin de la USART es un proceso que consiste en colocar las caractersticas que van a llevar nuestros trenes de pulsos de comunicacin, por ejemplo: que lleve 1 bit de inicio, una cierta cantidad de bits de datos, sin o con bit de paridad, y

CreatedEscrito poreDocPrinter PDF Pro!! 54 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
1 bit de paro. Todas estas caractersticas estn contenidas en los registros de la USART y nosotros tenemos que habilitar los bits que vayamos a utilizar, como por ejemplo la cantidad de bits de datos, etc. Tambin es importante habilitar si vamos a utilizar el transmisor o el receptor. Las banderas del USART, Txc, Rxc, sirven para ver cuando ya se llevo acabo la transmisin o recepcin de datos. A continuacin se muestra un ejemplo de cmo iniciar la USART para operar de modo asncrono

Esta inicializacin contiene las siguientes caractersticas: Habilita el receptor y el transmisor Enva un formato de frame de: 8 datos y 2 bits de paro Habilita la velocidad de bits por segundo.

15.3 TRANSMISOR DE LA USART Para habilitar el transmisor de la USART tenemos que activar el TXEN que se encuentra dentro del registro UCSRB. Cuando es activado el bit de Txc es habilitado y puede enviar datos de manera serial a travs de l. El siguiente cdigo sencillo muestra una simple funcin del transmisor de la USART basada en el resultado de la bandera del registro de datos vacos UDRE.

CreatedEscrito poreDocPrinter PDF Pro!! 55 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
15.4 RECEPTOR DE LA USART (Rxc) Se habilita cuando activamos el bit RXEN en el registro UCSRB. Cuando el receptor es habilitado el bit de Rxc es habilitado para recibir los datos seriales. El receptor comienza a trabajar cuando detecta el bit de inicio. Cada bit que sigue de la transmisin serial es recibido y almacenado en un espacio de la memoria del microcontrolador hasta que llegue un bit de paro. Si llega otro bit de paro, este ser ignorado por el receptor. El siguiente cdigo una funcin de la recepcin simple de la USART basada en la bandera de la recepcin completa RXC.

CreatedEscrito poreDocPrinter PDF Pro!! 56 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
16.- DESCRIPCION DE LOS REGISTROS DE LA USART:
16.1 UDR --Registro de datos I/O de la USART

El buffer del registro de la transmisin de datos de la USART y el receptor de la USART tienen algunas direcciones de I/O referidas a la UDR. El TXB buffer de la transmisin de datos ser el destino para la escritura de los datos a la locacin del registro UDR. Leyendo la locacin de los datos regresar el contenido delos datos recibidos por el RXB.

16.2 UCSRA ---

Registro A de control y estado de la USART

BIT 7 --RXC: Recepcin completa de la USART Esta bandera es iniciada cuando hay un dato sin leer en el buffer del receptor y limpiada cuando el buffer del receptor esta vaco. 16.2.2 BIT 6 --TXC: Transmisin completa de la USART Este bit de la bandera es iniciado cuando el frame entero en el transmisor del registro de corrimiento ha sido terminado y no hay un nuevo dato en el buffer de transmisin (UDR). 16.2.3 BIT 5 --UDRE: Registro vaco de datos de la USART La bandera UDRE indica si el buffer de transmisin (UDR) esta listo para recibir nuevos datos. Si UDRE=1 entonces el buffer esta listo para utilizarse. BIT 4 --FE: Frame Error Este bit es iniciado si el siguiente carcter en el buffer del receptor tiene un error en el frame cuando recibe la transmisin serial y tambin cuando el primer bit de paro del siguiente carcter en el buffer del receptor es cero. BIT 3 --DOR: Data OverRun Este bit es iniciado cuando una condicin de Dato de OverRun es detectada. Quiere decir que cuando el buffer recibe 2 datos en el mismo instante (esto se debe a una alta velocidad), se bloquea y espera hasta que un nuevo bit de inicio sea detectado. 16.2.5 15.2.4

16.2.1

CreatedEscrito poreDocPrinter PDF Pro!! 57 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
16.2.6 bit de paridad. BIT 1 --U2X: Doble velocidad de transmisin de la USART Este bit solamente tiene efecto para la operacin asncrona. Escribe un cero cuando se esta usando la operacin sncrona. 16.2.8 BIT 0 ---MPCM: Modo de comunicacin del multiprocesador Este bit habilita el modo de comunicacin de multiprocesador. 16.2.7 BIT 2 --PE: Error de paridad Como su nombre lo dice este bit se activa cuando sucede un error en el

16.3 UCSRB ---

REGISTRO B DE CONTROL Y ESTADO DE LA USART

16.3.1 BIT 7 ---RXCIE: Habilitacin de la interrupcin de la recepcin completada Al escribir un 1 en este bit habilitan la interrupcin sobre la bandera del RXC. 16.3.2 BIT 6 ---TXCIE: Habilitacin de la interrupcin de la transmisin completada Al escribir un 1 en este bit habilitan la interrupcin sobre la bandera del TXC. 16.3.3 BIT 5 ---UDRIE: Habilitacin de la interrupcin del registro de datos vaci. Al escribir un 1 en este bit, una interrupcin del registro de datos vacos ser generada. 16.3.4 BIT 4 --RXEN: Habitacin del Receptor Si escribes un 1 en este bit entonces habilitaras el Receptor del microcontrolador. Con lo cual se activara el pin RxD ser activado para llevar acabo la recepcin a travs de l. 16.3.5 BIT 3 --TXEN: Habitacin del Transmisor Si escribes un 1 en este bit entonces habilitaras el Transmisor del microcontrolador. Con lo cual se activara el pin TxD ser activado para llevar acabo la transmisin de datos de manera serial a travs de l. 16.3.6 BIT 2 --UCSZ 2: Tamao del carcter El UCSZ 2 combinado con el UCSZ 1:0 bit en UCSRC proporciona el numero de bits de datos en un frame que el receptor y el transmisor van a utilizar. 16.3.7 BIT 1 --RXB 8: Receptor de datos de 8 bits RXB 8 es el noveno bit del carcter recibido cuando el frame serial contiene un noveno dato.

CreatedEscrito poreDocPrinter PDF Pro!! 58 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
BIT0 --TXB 8: Transmisor de datos de 8 bits TXB 8 es el noveno bit del carcter transmitido cuando el frame serial contiene un noveno dato. 16.3.8

16.4

UCSRC ---

REGISTRO C DE DATOS Y ESTADO DE LA USART

16.4.1

BIT 7 --URSEL: Selector de registro Este bit es el selector entre el acceso a UCSRC o el UBRRH. BIT 6 --UMSEL: Selector del modo de la USART Este bit selecciona entre los 2 modos de operacin: sncrono o asncrono.

16.4.2

BIT 5:4 --- UPM 1:0: Modo de paridad Estos bits habilitan y sirven para elegir el modo de paridad que utilizara nuestro transmisor o receptor. Existen 4: deshabilitado, reservado, habilitado con paridad par y habilitado con parida impar.

16.4.3

16.4.4

BIT 3 --USBS: Selector del bit de paro Este bit seleccionar el nmero de bits de paro que sern insertados en el transmisor.

CreatedEscrito poreDocPrinter PDF Pro!! 59 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
BIT 2:1 --- UCSZ 1:0 Tamao del carcter El UCSZ 1:0 bit combinado con el bit UCSZ 2 en UCSRB elige el numero de bits de datos en un frame del receptor y transmisor usado. 16.4.5

BIT 0 --UCPOL: Polaridad del reloj Este bit es utilizado solamente para el modo sncrono. Y ve si el reloj va a ser de pulso ascendente o descendente (XCK).

16.4.6

CreatedEscrito poreDocPrinter PDF Pro!! 60 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
16.5 UBRRL Y UBRRH --DE LA USART REGISTRO DEL RANGO DE BAUDIOS

16.5.1 BIT 15 --URSEL: Selector de registros Este bit selecciona entre el acceso a UBRRH o al registro UCSRC. Es ledo como cero cuando esta escrito en UBRRH. 16.5.2 BIT 14:12 --- Bits reservados Estos bits estn reservados para su uso en el futuro. 16.5.3 BIT 11:0 --- UBRR 11:0: Registro del rango de baudios de la USART Este es un registro de 12 bits que contiene los rangos de baudios de la USART. El UBRRH contiene los 4 bits ms significativos, y el UBRRL contiene los 8 bits menos significativos del rango de baudios de la USART. Sobre la transmisin por el transmisor y el receptor ser daada si el rango de baudios es cambiado. Escribiendo UBRRL disparar una inmediata actualizacin del pre-escalador de los rangos de baudios. Estos son los diferentes rangos de baudios que contiene el ATMega32 y el ATMega16 pi.

CreatedEscrito poreDocPrinter PDF Pro!! 61 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

CreatedEscrito poreDocPrinter PDF Pro!! 62 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0

Algunos de ellos se utilizan viendo que oscilador estan colocando y despus viendo que rango de baudios quieren para su comunicacin para as platear el valor para UBRR.

CreatedEscrito poreDocPrinter PDF Pro!! 63 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
Programa que fue realizado por los alumnos: Abimael Rodriguez Sosa y Hctor Ortiz Gamino Descripcin del programa: Este programa realiza la transmisin de datos del Atmega16 a otro ATmega16 por medio de un programa creado en visual basic para la recepcin de los mismos. El programa lee lo que se recibe por el PORTA y lo enva por Rx a la PC. Al detectar algo por el Tx lo recibe y lo muestra en el LCD en su configuracin de 8 bits de datos. Para cualquier aclaracin sobre el programa este es el correo. ------------------------------youbai_1@hotmail.com-------------------------------*/ /* Library */ #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <stdio.h> #include "lcd_library.h" /* Global Var */ extern int uart_putchar(char c); unsigned char reset_source; unsigned char output; unsigned char c; extern int usart_putc(char c); void INIT_INT0_Falling(void); unsigned char contd,contu; /* User Defined functions */ void delay_ms(unsigned short ms) { // ... subprograma : delay unsigned short outer1, outer2; outer1 = 200; while (outer1) { outer2 = 1000; while (outer2) { while ( ms ) ms--; outer2--; } outer1--; } } void setup(void){ uint16_t baud; /* as early as possible, grab the current reason for being reset and then clear it */ reset_source = MCUCSR; MCUCSR = 0x1f; // Limpia la fuente de reset /*

CreatedEscrito poreDocPrinter PDF Pro!! 64 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
DDRD = _BV (PD6) | _BV(PD7); //lo cambie era PD5 y PD4 sern Rs y //Enable para el LCD DDRC = 0xff; DDRA = 0x00; /* Habilitacin del puerto serial */ // Habilita el receptory el transimisor del Atmega: Rx y Tx UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); baud = ( 3646800/ (16 * 9600UL)) - 0; UBRRH = (unsigned char)(baud >> 8); UBRRL =23; UCSRC = (1<<URSEL)|(3<<UCSZ0); /* 38400 Bd */

//Modo asncrono y 8 bits de transmisin y //recepcin

/* enable interrupts */ sei(); /* set up serial printing */ fdevopen(usart_putc/*uart_putchar*/, NULL, 0); }

// associate uart //output function with stdio

/*********************************************************************/ /* RS232 Enva carcter */ /* RS232 Receptor de carcter */ /* */ /* Enva carcter bajo a la UART Tx, y espera a que lo almacene el registro */ /* Tx y este limpio */ /* Recive el carcter c bajo del UART Rx, mientras espera que el Rx este limpio*/ /* Para poder almacenarlo en Rx. */ /********************************************************************** / // El Signal no puede ser interrumpido SIGNAL (SIG_UART_RECV) { unsigned char d; d = UDR; posicion(0xC0); lcd_string(" posicion(0xC0); lcd_string("Recibo= "); posicion(0xC8+contd); lcd_datos(d); contd++; if(contd==12){ lcd_string(" contd=0; } // USART RX interrupt // define of c // d it's data received on Rx

");

//nuevo //nuevo //nuevo "); //nuevo //nuevo

CreatedEscrito poreDocPrinter PDF Pro!! 65 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
PORTC=~d; } //enviar al pc lo q se recibi

SIGNAL (SIG_INTERRUPT0){ // habilitacin de la interrupcin 0 cli(); posicion(0x80); lcd_string("

");

output=~PINA; //luego quitar el de abajo c = output; contd++; //nuevo if(contd==10){ contd=0; } //nuevo //nuevo //nuevo

posicion(0x80); //nuevo lcd_string("ATMEGA16 "); posicion(0x8A); lcd_string("Envio= "); lcd_datos(output); delay_ms(250); usart_putc(c); sei(); } int usart_putc( char c) { if (c == '\n') usart_putc('\r'); // Espera hasta que UDR este listo. while(!(UCSRA & (1 << UDRE))); UDR = c; // enva el carcter return (0); } void uart_puts (char *s) { while (*s) { s++; usart_putc(*s); } } /*********************************************************************/ /* Print Reset Source */ /* Las siguientes instrucciones indican cuando se ha llevado un tipo de reset */ /* en al ATMegay lo muestran en la pantalla del LCD. */ /*********************************************************************/ //nuevo

//envi a Tx por RS232

CreatedEscrito poreDocPrinter PDF Pro!! 66 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
void dump_reset(void) { if (reset_source & _BV(JTRF)) printf("JTAG Reset\n"); if (reset_source & _BV(WDRF)) printf("Watchdog Reset\n"); if (reset_source & _BV(BORF)) printf("Brownout Reset\n"); if (reset_source & _BV(EXTRF)) printf("External Reset\n"); if (reset_source & _BV(PORF)) printf("Power-on Reset\n"); } /*********************************************************************/ /* Main Program Entry Point */ /* El programa ya realiza la interrupcin y el envo por Tx. Adems de */ /*que cuando enva un dato lo manda por rebote al puerto y ala pantalla */ /*********************************************************************/ int main (void) { DDRB=0xff; //VA AL lcd DDRA=0x00; //entrada de los datos que se van a enviar DDRC=0xFF; //enviar al pc lo q se recibi DDRD=0xC0; //conexin del Rs y E del LCD y conexin de Rx y Tx y la Interrupcion 0 setup(); printf("Comunicacin RS232 Atmega16 por Abimael le informa la interrupcin siguiente: \r"); dump_reset(); cli(); lcd_INIT(); lcd_string(" INTERFACE FOR 2 "); posicion(0xC0); lcd_string("ATMEGA16 WITH RS-232"); GICR|=0x40; GIFR|=0x40; MCUCR|=0x02; sei(); /* loop forever, the interrupts are doing the rest */ while(1){ output=~PINA; c = output } return (0); } //Poner despus

CreatedEscrito poreDocPrinter PDF Pro!! 67 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
EJERCICIOS:
PUERTOS DIGITALES:

1.El microcontrolador leer tres de sus cuatro puertos y desplegar por el puerto D la lectura ms grande hecha en los otros tres puertos. 2.Modifique el programa anterior para que muestre por el puerto D la lectura ms baja. 3.Escriba las versiones de los problemas 2 y 3 para nmeros con signo. 4.Muestre cmo hacer que su microcontrolador haga las veces de: multiplexor, demultiplexor, codificador binario decimal (3 a 8), decodificador de prioridad decimal a binario, sumador completo de 8 bits (suma y acarreo), flip-flop JK, D y T sncronos. 5.Programe las operaciones de suma, resta, comparacin, and, or, xor entre datos de 8 bits tomados del puerto A y B. Utilice funciones para cada una de las operaciones a realizar. 6. Se requiere un programa que cuente en BCD. Conecte 3 displays de siete segmentos para apreciar la cuenta. Use retardos de aproximadamente 0.2 a 0.5 segundos. 7. Escriba el programa que lea un puerto digital y transforme esta lectura a cdigo ASCII. En general escribir los cdigos ASCII del nmero ledo por el puerto digital, necesitando forzosamente tres puertos digitales de salida. 8. Modifique el problema anterior para que la salida sea ahora en formato BCD. 9. Crear la macro y la subrutina que hacen la codificacin solicitada en el problema 9 10.Si la entrada ahora es en formato BCD, escriba el programa, la macro y la subrutina que son capaces de devolver como salida el valor correspondiente en binario. Ponga especial atencin en aquellos casos en que la entrada o los valores de entrada no corresponden a un dgito BCD vlido. Escriba dos versiones distintas para este problema: a) limitando las entradas BCD a 2 5 5 b) utilizando como entrada BCD dos puertos digitales y como salida los dos restantes con lo cual se podrn leer valores BCD de hasta 9 9 9 9 12.Programe la tabla de multiplicar. Escriba los valores por el puerto B y el valor de la tabla a mostrar introdzcalo por la parte baja del puerto A. Muestre nicamente los primeros diez mltiplos. 13.Muestre como utilizar su microcontrolador como un manejador de un par de displays de siete segmentos para desplegar valores hexadecimales introducidos por el puerto A.

CreatedEscrito poreDocPrinter PDF Pro!! 68 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
14.programe por el puerto B las siguientes acciones: a. corrimiento hacia la derecha (shr) y hacia la izquierda (shl) b.corrimiento cclico hacia la derecha (shcr) y hacia la izquierda (shcl) c.corrimiento aritmtico hacia la derecha (shar) y hacia la izquierda (shal). El valor a ser desplazado se tomar del puerto A, la accin a ser efectuada se decidir en funcin del valor ledo por el puerto C. 15.Modifique el problema anterior para que se acte por prioridad, teniendo las operaciones de shl y shr la prioridad ms alta y las de shar y shal la ms baja. 16.Escriba el programa que permita leer el puerto A y B, de forma tal que efecte cierta operacin sobre los datos ledos en funcin de la lectura de un tercer puerto (puerto C); el resultado de la operacin se escribir el puerto D. Los valores posibles a ser ledos en el puerto C son: 1.suma 2.resta 3.complemento a uno de A 4.complemento a dos de A 5.and 6.or 7.xor 8.nor 9.nand 10.xnor 11.shr 12.shl 13.shcr 14.shcl 15.comparacin entre A y B se reserva el valor de 0 para limpiar la salida.

17. Programe una ALU de 8 bits. Consulte las hojas de datos de la 74LS181. 18. Instrumente un codificador de teclado matricial de 4 x 4 (decimal + ctrl.). 19.Instrumente un codificador de teclado matricial de 4 x 5 (hexadecimal + ctrl.).

CreatedEscrito poreDocPrinter PDF Pro!! 69 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
INTERRUPCIONES: 1. Programe el dispositivo microcontrolador para que realice un conteo binario por el puerto B. Tenga en cuenta que este conteo ser ascendente cada vez que ocurra una interrupcin INT0, y ser descendente cada vez que la interrupcin sea por INT1. 2. Similar al problema anterior pero ahora utilice nicamente la lnea INT0 para controlar la direccin de contero. 3. Cuente cada vez que ocurra una interrupcin por cada uno de los canales disponibles. Muestre los resultados en puertos distintos. 4. Cada vez que ocurre la secuencia flanco descendente flanco ascendente por el canal 0 incremente un contador y muestre su cuenta por un puerto digital. 5. Cada vez que ocurre la secuencia flanco ascendente flanco descendente por el canal 1 decremente un contador y muestre su cuenta por un puerto digital. 6. Cada vez que ocurra una interrupcin externa, escriba en un puerto digital el valor de la parte baja del PC al momento de entrar a la rutina de servicio a la interrupcin, y en otro puerto el valor de la parte baja del PC al momento de salir de la interrupcin. 7. Utilice la interrupcin externa 0 para efectuar la lectura de un ADC, mostrando la lectura en un display de 7 segmentos pudiendo elegir el despliegue en forma decimal o hexadecimal. 8. Efecte la lectura de un teclado matricial de 4 x 4 cada vez que ocurra la interrupcin externa 1, cada nueva lectura recorre el digito previo hacia la izquierda. 9. Programe una ruleta de dos dgitos hexadecimales y haga sonar una alarma cada vez que un usuario logra un par de dgitos iguales. 10.Utilice una seal de reloj externa para construir un reloj digital. La seal de reloj externa se alimentar a la INT1. la INT0 servir para inicializar el reloj a una hora especfica. Muestre las horas en formato 0 a 11 y en formato 0 a 23, segn elija el usuario. 11.Muestre cmo utilizar la INT1 para generar interrupciones por software. 12.Utilizando el esquema propues to en el problema anterior, indique exactamente cuntas interrupciones por software sera capaz de manejar su sistema. 13.Utilice las lneas de interrupcin para instrumentar el Handshacking de un puerto paralelo estndar (SPP). 14. Escriba las funciones necesarias para manejar un display de cristal lquido (LCD) de dos lneas y 16 caracteres. 15.Utilizando la solucin del problema anterior, conecte a su sistema un teclado de PC y exhiba en el LCD cada uno de los caracteres enviados por el teclado.

CreatedEscrito poreDocPrinter PDF Pro!! 70 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Buy Now toC para WinAVR -2005 without Trial Watermark!! Tutorial de Create PDF Versin 1.0
GRACIAS A LAS SIGUIENTES PERSONAS Y EMPRESAS: ATMEL ya que nos facilit el pdf del ATMega 32 y 16 pi del cual tomamos la mayor parte de informacin para llevar acabo este tutorial. Al Ing. Daniel Hernandez Ventura por habernos facilitado los pdf que creo que para colocarlos en los ejercicios, puertos digitales e instalacin del software.

Para ms informacin acerca de este tutorial puede contactarnos a los siguientes e-mails: Abimael Rodrguez Sosa (youbai_1@hotmail.com) Hctor Ortiz Gamino (martero165@hotmail.com) Ing. Daniel Hernandez Ventura (ing_ventura@yahoo.com)

Si quieren comprobar los resultados de los ejercicios puede visitar la siguiente pagina de Internet donde encontrar tambin esta pagina de Internet y muchos ejercicios ms: http://abirockdriguez.webcindario.com

CreatedEscrito poreDocPrinter PDF Pro!! 71 by los alumnos: Abimael Rodrguez Sosa y Hctor Ortiz Gamino

Você também pode gostar