Ayuda como sacar datos por un pin en avr

hola estoy empezando a programar con el avr studio 4 un atmega88pa y para un programa que utiliza lógica booleana a la salida debo tener 3 led que enciendan en diferentes circunstancias ¿hay alguna manera de sacar los datos por un pin especifico del puerto? esto es por que en lugar de que me prendan 2 led al mismo tiempo me prende uno el doble de tiempo
nota: adjunto el programa en .doc


Código:
.include "m88pdef.inc"
.cseg
.org 0
 rjmp reset 
 reset:ldi r16, low(ramend) 
       out spl, r16             ;configuracion del stack pointer
	   ldi r16, high(ramend)
	   out sph, r16

	   ser r16      
       out ddrb,r16    	;configuracion del puerto b como salida

	   ser r16
	   out ddrc,r16

	   ldi r16,$0f
	   out ddrd,r16         ;configuracion del puerto d como entrada


inicio: nop
        in r16, pind        ;capturar datos
        mov r17,r16
		mov r18,r16
		mov r19,r16
		ldi r20,1
		and r20,r16
		ror r17
		ldi r21,1
		and r21,r17
		ror r18
		ror r18
		ldi r22,1
		and r22,r18
		ror r19
		ror r19
		ror r19
		ldi r23,1
		and r23,r19
		mov r24,r20
		mov r25,r21
		mov r26,r22
		mov r27,r23
	    com r24
		com r25
		com r26
	    com r27
		ldi r16,1
		and r16,r24
		ldi r17,1
		and r17,r25
		ldi r18,1
		and r18,r26
		ldi r19,1
		and r19,r27

        ;ldi r28,$02
		;out ddrb,r28
		mov r0,r19
		and r0,r21
		and r0,r20
		out portb, r0
		;rcall tiempo

		mov r1,r23
		and r1,r18
		;ldi r28,4
		;out ddrb,r28
		out portc, r1
		;rcall tiempo

        mov r2,r21
		and r2,r16
		;ldi r28,8
		;out ddrb,r28
		out portd, r2
		;rcall tiempo 

		 
	    rjmp inicio
      


tiempo: ldi r24,$ff
        ldi r25,$ff
		ldi r26,$01

aqui:   dec r24
		brne aqui

		dec r25
		brne aqui
		
		dec r26
		brne aqui
		ret
 

Adjuntos

  • tinaco88p.doc
    13.5 KB · Visitas: 1
Última edición por un moderador:
Atrás
Arriba