TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: center101 en 02 de Marzo de 2014, 04:26:36

Título: Disculpa la interrupción,y bueno desearía pedirte ayuda con este codigo en ensam
Publicado por: center101 en 02 de Marzo de 2014, 04:26:36


.cseg
.org 0

ldi r16,0xff
out DDRB,r16
ldi r16,0x1

lazo:
out PORTB,r16
ldi r17,0x50
ciclo_externo:
ldi r18,0xff
ciclo_interno:
dec r18
cpi r18,0
brne ciclo_interno
dec r17
cpi r17,0
brne ciclo_externo
rol r16
rjmp lazo

Lo que hace el programa en teroía es que va prendiendo el display en 1, 0,1, etc .... sucesivamente, y para que fuera visible se hizo un paro ( un tiempo de interupcion con cilcos anidados) la duda es por que unicamente lo hace una vez, se pone en 1 y luego en 0 y nadamas.
Ya se probo en la tarje Mehenil y solo hace el cambio una vez, al conectar y desconectar la fuente, la pregunta es por que una vez, podrian ayudarme por favor una explicación. De antemano, gracias, y espero y me puedas ayudar.
Título: Re: Disculpa la interrupción,y bueno desearía pedirte ayuda con este codigo en ensam
Publicado por: BrunoF en 10 de Marzo de 2014, 15:51:17
en lugar de hacer rol r16, me parece que podrías hacer una xor entre r16 y el valor inmediato 0x01. Esa es una manera de alternar el valor entre 0 y 1.

Ej:

.cseg
.org 0

ldi r16,0xff
out DDRB,r16
ldi r16,0x1

lazo:
out PORTB,r16
ldi r17,0x50
ciclo_externo:
ldi r18,0xff
ciclo_interno:
dec r18
cpi r18,0
brne ciclo_interno
dec r17
cpi r17,0
brne ciclo_externo
ldi r18,0x01
eor r16,r18
rjmp lazo

Saludos