TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: shakziel en 17 de Julio de 2009, 19:04:46
-
Hola a todos :)
Necesito de su ayuda urgentemente, mi proyecto consiste en utilizar un ATMega8, manejar tres teclas y que dichas teclas envien el dato de la tecla pulsada a un display de 7 segmentos y que ademas sea transmitido de manera serial por el puerto PD0 (TxD).
Pues bien este es mi programa el cual lo compile en AVRStudio y segun esto no tiene errores, el problema es que los datos no estan siendo transmitidos y al momento de manejar el teclado tampoco se ve nada en el display de 7 segmentos, espero me puedan ayudar a resolver este problema. Tengo muchas dudas en la parte del manejo de la USART y no se si fue iniciada y configurada adecuadamente. De antemano muchas gracias.
;******************************************************************************************
.include "m8def.inc"
;variable global registro temporal
.def temp=r16
.def datoascii=r17
.def datodisp=r18
;Vector de Interrupciones
.org 0x00
; configuración del stack (pila)
ldi temp,low(ramend)
out spl,temp
ldi temp,high(ramend)
out sph,temp
rjmp main
main:
; configuración del micro
ser temp ; Para inizializar puerto B como salida
out DDRB,temp
out PORTB,temp ; Para borrar el puerto al inicio
ldi temp,0x00
out DDRC,temp ; Se habilita el puerto C como entrada
ser temp ; Habilita las resistencias de Pull up
out PORTC,temp
rcall USART_Ini
detdato:
in temp,pinc
//rcall delay
out PORTB,temp
rjmp detdato
rcall loop
out PORTB,datodisp
rcall USART_Tx
rjmp detdato
loop:
clr temp
rcall delay
in temp,PINC
cpi temp,0b00000001 ;prueba si es tecla 1
breq uno
cpi temp,0b00000010 ;prueba si es tecla 2
breq dos
cpi temp,0b00000100 ;prueba si es tecla 3
breq tres
nop
rcall loop
uno:
ldi datoascii,0x31
ldi datodisp,0b00000110
ret
dos:
ldi datoascii,0x32
ldi datodisp,0b01011011
ret
tres:
ldi datoascii,0x33
ldi datodisp,0b01001111
ret
delay:
ldi R20,$10
WGLOOP0:
ldi R21,$FF
WGLOOP1:
ldi R22,$FF
WGLOOP2:
dec R22
brne WGLOOP2
dec R21
brne WGLOOP1
dec R20
brne WGLOOP0
ret
USART_Ini:
; Set baud rate
ldi temp,0x00
out UBRRH,temp
ldi temp,0x12
out UBRRL,temp
ldi temp, 0b00000010
out UCSRA,temp
; Habilita Tx y Rx así como petición de interrupción Rx completa
ldi temp,(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
out UCSRB,temp
; Modo asincrono, sin paridad, 1 bit de parada, 8 bits
ldi temp,(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC,temp
ret
USART_Tx:
;Transmision de un caracter
;Espere a transmitir buffer vacío
ldi temp,
sbis UCSRA,UDRE
rjmp USART_Tx
cbi UCSRB,TXB8
sbrc temp,0
sbi UCSRB,TXB8
;Coloca el dato LSB (r16) dentro del buffer, envio de datos
out UDR,temp
ret
;Fin del programa