Manejo de Puertos Con Atmega8

MANEJO DE PUERTOS CON ATMEGA8 OBJETIVO Aprender a desarrollar programas con el microcontrolador Atmega8, utilizando inst

Views 105 Downloads 15 File size 573KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

MANEJO DE PUERTOS CON ATMEGA8 OBJETIVO Aprender a desarrollar programas con el microcontrolador Atmega8, utilizando instrucciones básicas. Aprender a manejar el entorno de desarrollo AVR STUDIO V6.0 Aprender a grabar la memoria flash del microcontrolador. MATERIALES        

1 módulo de entrenamiento AVR Mega8. 1 Módulo de entrada/salida. 1 Cable de programación 1 computadora personal. Cables de conexión Fuente de alimentación Punta lógica multitester

PROCEDIMIENTO 1.-Se desea escribir un programa que permita prender 2 leds, que están conectados a 2 pines de un puerto B del microcontrolador El microcontrolador ATmega8L tiene 23 pines programables E/S. Para la solución utilizaremos PB0, PB6 y PB7 de acuerdo al siguiente Circuito esquemático:

Para desarrollar el programa utilizaremos el entorno AVR STUDIO y los componentes del laboratorio a implementar. Se pide armar el circuito de la figura.

Paso1: Ejecutar el entorno AVR STUDIO La primera ventana con las que encontrarán después de abrir el AVR STUDIO será la siguiente y en la cual seleccionaremos New Project

En ella nos mostrara el lenguaje de programación a usar que puede ser assembler o lenguaje C, luego tenemos que ponerle un nombre a nuestro proyecto y elegir en qué dirección se va a guardar, al terminar de hacer esto se presiona ok.

Paso2:

En esta ventana se muestran una gran variedad de microcontroladores atmega, en el cual vamos a elegir el microcontrolador atmega8. Luego daremos click en ok.

Al realizar todos los procesos anteriores correctamente recién nos saldrá el entorno de trabajo en el cual podemos ingresar la programación que nos plazca.

Paso 3: Diagrama de flujo

Inicio

Org 0x0000 SBI DDRB, PB6 SBI DDRB, PB7

CBI DDRB, PC0

Bucle infinito

PC0 abierto

Led apagado

Led encendido

LDI R16,0b00000000 OUT PORTB,R16 RJMPBUCLE_INFINITO

LDI R16,0b11111111 OUT PORTB,R16 RJMPBUCLE_INFINITO

Programación:

Paso 4: Ensamblaje y depuración del programa: .include "m8def.inc" --> Contiene todas la definiciones de registros y otros datos del m8=ATmega8, si se trabajará con un ATmega1284p se colocaría .include "m1284pdef.inc .cseg --> O segmento de código, Indica que lo que sigue es el programa que irá en la flash. También existe: .eseg o segmento de eeprom (para datos que irán en la eeprom) .dseg o segmento de datos (para datos que irán en la RAM .org 0x0000 --> Es la primera dirección o la dirección de inicio del programa ( esto siempre debe estar presente para poderle indicar a uC dónde debe ir al iniciar el programa). RJMP INICIO --> En nuestro caso haremos un salto incondicional (RJMP INICIO) a la etiqueta INICIO SBI DDRB, PB1 --> O Setear Bit en registro I/O permite configurar el pin PB1 como salida. Cada puerto de I/O cuenta con 3 registros: DDRx permite configurar entradas ("1") y salidas ("0"); PORTx permite poner la salida a "1" ó "0" cuando el pin es salida y también permite habilitar ("1") la resistencia pull up de dicho pin o deshabilitarla ("0") cuando el pin es entrada; PINx permite leer el estado del pin. SBIC PINB, PB0 --> Salta si Bit en registro I/O es Clear CBI PORTB, PB1 -->Clear Bit en registro I/O SBIS PINB, PB0 -->Salta si Bit en registro I/O está Seteado SBI PORTB, PB1 --> Setear Bit en registro I/O RJMP BUCLE_INFINITO --> Salto incondicional a la etiqueta BUCLE_INFINITO Paso 5: Simulación del programa en proteus: