Página principal

Tesina de seminario


Descargar 0.55 Mb.
Página6/10
Fecha de conversión18.07.2016
Tamaño0.55 Mb.
1   2   3   4   5   6   7   8   9   10

3.-DESCRIPCION DE LOS PROYECTOS


A continuación se describen 5 proyectos ilustrativos que tiene como objetivo mostrar las funcionalidades y desarrollos básicos realizados en el BUTTERFLY, dos de estos serán desarrollados en Asembler, y tres en lenguaje C.

3.1. PROYECTO1: MANEJO DE JOYSTICK POR MEDIO DE INTERRUPCIONES PCINT0 Y PCINT1.

3.1.1 OBJETIVO.-


Manejo de sentencias en Asembler, configuración de Joystick del AVRBUTTERFLY, por medio de interrupciones, Utilización del Modulo Usart, para enviar dato referente a la Opción escogida por medio del Joystick.

3.1.2 ENUNCIADO:


Elaborar un Programa en lenguaje C que habilite el Joystick del ArvButterfly, al presionar cualquier opción del Joystick este deberá Transmitir el nombre de la Opción escogida por medio de transmisión Usart. Por lo tanto si se presiona el Joystick hacia arriba deberá transmitir la palabra ARRIBA. y de esta manera para las otras 4 opciones restantes.

3.1.3 ESQUEMA DEL PROYECTO.


Figura 3-1 Diagrama Esquemático de PROYECTO 1



Figura 3-2 Diagrama de Flujo de Subrutina INT_PCINT0


3.1.4 Diagrama de flujo del Proyecto.


Figura 3-3 Diagrama de Flujo de PROYECTO 1



Figura 3-4 Diagrama de Flujo de Subrutina INT_PCINT1



Figura 3-5 Diagrama de Flujo de Rutina HABILITACION _PCINT0



Figura 3-6 Diagrama de Flujo de Rutina HABILITACION _PCINT0


3.1.5 CÓDIGO FUENTE.


/*

* PRIMERO.asm

*

* Created: 27/10/2011 10:22:59



* Author: Giovanni Granados & Jorge Vega.

* Tema: MANEJO DE JOYSTICK POR MEDIO DE INTERRUPCIONES PCINT0

* Y PCINT1

*/

;INICIO DE PROGRAMA

.INCLUDE "M169DEF.INC" ;BUTTERFLY/ATMEGA169 DEFS

.def REG_TEMP =r16 ;ASIGNA UN NOMBRE A REGISTRO

.def Temp =r17 ;USO TEMPORAL.

.def ROJO =R18

.def AZUL =R19


.def Delay =r20 ;Delay variable 1 PARA USO DE RETARDO

.def Delay2 =r21 ;Delay variable 2 PARA USO DE RETARDO

.def OPCION =R22 ;OPCION DE JOYSTICK

.def COLUMNA =R23

.def LINEA =R24
.def SELECCION=R25
.def VERDE =R26

.def CENTRAL =R27

//VECTORES DE INTERRUPCION------------------------------------

.ORG 0x0000 ;INICIO DEL PROGRAMA

RJMP RESET

.ORG 0x0004 ;VECTOR PARA INTERRUPCION PCINT0(PUERTO E)

RJMP INT_PCINT0

.ORG 0x0006 ;VECTOR PARA INTERRUPCION PCINT1(PUERTO B)

RJMP INT_PCINT1

//------------------------------------------------------------

RESET:

//CONFIGURACIN DE PILA Y MEMORIA



LDI COLUMNA,HIGH(RAMEND)

OUT SPH,COLUMNA

LDI COLUMNA,LOW(RAMEND)

OUT SPL,COLUMNA

//CONFIGURACION DE RELOJ

//8MHZ


LDI REG_TEMP, 0B10000000

STS CLKPR,REG_TEMP

LDI REG_TEMP, 0B00000000

STS CLKPR,REG_TEMP


//CONFUGURA LOS PUERTOS I/O

RCALL CONFIGURACION_PUERTOS

//HABILITACIONES DE INTERRUPCIONES

RCALL HABILITAR_PCINT0

RCALL HABILITAR_PCINT1
//HABILITACION DE COMUNICACION SERIAL

RCALL HABILITAR_COMUNICACION_SERIAL


SEI

LDI OPCION,0X00


LAZO_PRINCIPAL:
RCALL DLY

SBI PORTD,7

RCALL DLY

CBI PORTD,7

NOP

//COMPARO OPCION



CPI OPCION,0X00

BREQ LAZO_PRINCIPAL

RCALL MENSAJES

LDI OPCION,0X00


RJMP LAZO_PRINCIPAL

//------------------------------------------------------

//CONFIGURACION DE PUERTOS

//PORTB COMO ENTRADA

//PORTE COMO ENTREDA EXPTO TX QUE ES SALIDA.

CONFIGURACION_PUERTOS:

LDI REG_TEMP,0B11110000 //CONFIGURACION DE PUERTO B

LDI TEMP, 0B00101111

OUT PORTB,REG_TEMP

OUT DDRB,TEMP

NOP

LDI REG_TEMP,0B11111111 //CONFIGURACION PUERTO E



LDI TEMP, 0B11110011

OUT PORTE,REG_TEMP

OUT DDRE,TEMP

NOP


LDI REG_TEMP,0B00000000 //CONFIGURACION PUERTO D

LDI TEMP, 0B11111111 //PORTD,7 INDICADOR DE TRABAJO

OUT PORTD,REG_TEMP

OUT DDRD,TEMP

NOP
RET //FIN CONFIGURACION DE PUERTOS

//======================================================

//------------------------------------------------------

//HABILITAR_COMUNICACION_SERIAL:

//
HABILITAR_COMUNICACION_SERIAL:

//PRUSART0 = 0 EN REGISTRO PRR (POWER REDUCCION REGISTER)

LDS REG_TEMP,PRR ;GUARDAMOS ESTADO ANTERIOR DE REGISTRO PRR

CBR REG_TEMP,(1<

STS PRR,REG_TEMP ;SE CARGA VALOR A REGISTRO PRR.
//CONFIGURACION DE UCSRC (USART CONTROL AND ESTATUS REGISCTRER C)

//UMSEL = 0 0 ->ASINCRONO.

// 1 ->SINCRONO.
//UPM1 = 0 0 0 DESABILITADA PARIDAD

//UPM0 = 0 0 1 RESERVADO

// 1 0 PARIDAD PAR

// 1 0 PARIDAD IMPAR


//USBS = 0 0 ->1 BIT DE PARADA.

// 1 ->2 BITS DE PARADA.


//UCSZ1 = 1 0 0 ->5 BITS

//UCSZ1 = 1 0 1 ->6 BITS

// 1 0 ->7 BITS

// 1 1 ->8 BITS

//OBS: UCZ2=0 EN EL REGISTRO UCSRB
//UCPOPL = 0 POLARIDAD DE RELOJ MODO SINCRONO.

// NO USADO AQUI.


LDI REG_TEMP,0B00000110

STS UCSRC,REG_TEMP ;CONFIGURACION DE UCSRC


//HABILITACION DE TXEN EN EL REGISTRO UCSRC
//LDI REG_TEMP,0B00000000// prueba de cambios...

//STS UCSRC,REG_TEMP


LDS REG_TEMP,UCSRB ;GUARDAMOS ESTADO ANTERIOR DE REGISTRO UCSRB

SBR REG_TEMP,(1<

STS UCSRB,REG_TEMP ;SE CARGA VALOR A REGISTRO UCSRB.

//CONFIGURACION DE VELOCIDAD DE TRANSMISION

//DEPENDE DE LA CONFIGURACION DE RELOJ PRINCIPAL

//BAUDIO = 2f/(16(UBRR+1)

LDI REG_TEMP, 0B00000000

STS UBRRH,REG_TEMP

// EL RELOJ ESTA TRABAJANDO A 8 MHZ

LDI REG_TEMP, 51 //VER TABLA DE VALORES

STS UBRRL,REG_TEMP

RET //HABILITAR_COMUNICACION_SERIAL

//======================================================

//TRANSMITIR_DATO_USART:

//DATO A ENVIAR ESTA EN REG_TEMP

TRANSMITIR_DATO_USART:

LDS Temp,UCSRA

SBRS Temp,UDRE

RJMP TRANSMITIR_DATO_USART

STS UDR,REG_TEMP

RET //FIN TRANSMITIR DATO

//========================================================


;HABILITACION DE REGISTROS PARA UTILIZAR LA INTERRUPCION PCINT0

HABILITAR_PCINT0:

//habilitamos interrupcion PCIE0

IN REG_TEMP,EIMSK ;GUARDAMOS EL ESTADO ANTERIOR DE GIMSK,

SBR REG_TEMP,(1<<6) ;COLOCAMOS UN ALTO EN EL BIT6(PCIE0), NO SE ALTERA EL RESTO DE BITS

OUT EIMSK,REG_TEMP ;ACTUALIZAMOS EL REGSITRO GIMSK CON EL NUEVO VALOR

LDS REG_TEMP,PCMSK0 ;GUARDAMOS EL ESTADO ANTERIOR DE PCMSK0,

SBR REG_TEMP,(1<

STS PCMSK0,REG_TEMP ;ACTUALIZAMOS EL REGSITRO PCMSK0 CON EL NUEVO VALOR

RET

;HABILITACION DE REGISTROS PARA UTILIZAR LA INTERRUPCION PCINT1

HABILITAR_PCINT1:

//habilitamos interrupcion PCIE1

IN REG_TEMP,EIMSK ;GUARDAMOS EL ESTADO ANTERIOR DE GIMSK,

SBR REG_TEMP,(1<<7) ;COLOCAMOS UN ALTO EN EL BIT7 (PCIE1), NO SE ALTERA EL RESTO DE BITS

OUT EIMSK,REG_TEMP ;ACTUALIZAMOS EL REGSITRO GIMSK CON EL NUEVO VALOR

LDS REG_TEMP,PCMSK1 ;GUARDAMOS EL ESTADO ANTERIOR DE PCMSK0,

SBR REG_TEMP,(1<

STS PCMSK1,REG_TEMP ;ACTUALIZAMOS EL REGSITRO PCMSK0 CON EL NUEVO VALOR

RET
;RUTINA DELAY

DLY:

dec Delay



brne DLY

dec Delay2

brne DLY

ret

//--------------------------------------------------------

INT_PCINT1:

CLI

//MOV REG_TEMP,OPCION



NOP
SBIS PINB,6

RJMP ARRIBA //ARRIBA

SBIS PINB,7

RJMP ABAJO //ABAJO

SBIS PINB,4

RJMP CENTRO_BNT //CENTRO


NOP

RJMP SALIDA_INT_PCINT1

;;;;;;;;;;;;;;;;;;;;;;;

ARRIBA:
LDI OPCION,'A'

RJMP SALIDA_INT_PCINT1
ABAJO:

LDI OPCION,'B'

RJMP SALIDA_INT_PCINT1

CENTRO_BNT:

LDI OPCION,'C'

RJMP SALIDA_INT_PCINT1


SALIDA_INT_PCINT1:
SEI

RETI


//////////////////////////////////////////////////////////
//-------------------------------------------------------

INT_PCINT0:

CLI

SBIS PINE,2



RJMP IZQUIERDO

SBIS PINE,3

RJMP DERECHA

nop


RJMP SALIDA_INT_PCINT0
IZQUIERDO:

LDI OPCION,'I'

RJMP SALIDA_INT_PCINT0
DERECHA:

LDI OPCION,'D'

RJMP SALIDA_INT_PCINT0

SALIDA_INT_PCINT0:


SEI

RETI


////////////////////////////////////////////////////////
MENSAJES:

CPI OPCION,'A'

BRNE COMPARAR_CON_B

//CASO CONTRARIO ARRIBA

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'R'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'R'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'I'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'B'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'-' //SEPARADOR

RCALL TRANSMITIR_DATO_USART

RJMP SALIR_DE_MENSAJE

COMPARAR_CON_B:

CPI OPCION,'B'

BRNE COMPARAR_CON_C


//CASO CONTRARIO ABAJO

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'B'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'J'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'O'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'-' //SEPARADOR

RCALL TRANSMITIR_DATO_USART

RJMP SALIR_DE_MENSAJE


COMPARAR_CON_C:

CPI OPCION,'C'

BRNE COMPARAR_CON_I
//CASO CONTRARIO CENTRO

LDI REG_TEMP,'C'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'E'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'N'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'T'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'R'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'0'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'-' //SEPARADOR

RCALL TRANSMITIR_DATO_USART

RJMP SALIR_DE_MENSAJE

COMPARAR_CON_I:

CPI OPCION,'I'

BRNE COMPARAR_CON_D

//CASO CONTRARIO IZQUIERDA

LDI REG_TEMP,'I'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'Z'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'Q'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'U'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'I'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'E'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'R'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'D'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'-' //SEPARADOR

RCALL TRANSMITIR_DATO_USART

RJMP SALIR_DE_MENSAJE

COMPARAR_CON_D:

CPI OPCION,0X00

BREQ SALIR_DE_MENSAJE


LDI REG_TEMP,'D'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'E'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'R'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'E'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'C'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'H'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'A'

RCALL TRANSMITIR_DATO_USART

LDI REG_TEMP,'-' //SEPARADOR

RCALL TRANSMITIR_DATO_USART

RJMP SALIR_DE_MENSAJE
SALIR_DE_MENSAJE:

RET


1   2   3   4   5   6   7   8   9   10


La base de datos está protegida por derechos de autor ©espanito.com 2016
enviar mensaje