Hola nuevamente soy yo, perdón por las molestias pero tengo un problea estoy iniciando en esto de los pics y estoy haciendo como práctica una caminata de leds conectados al puerto b la rutina la tome de internet que era el encender 4 leds del puerto b a continuación pongo la rutina para 4 led y tambien la midificación para 8 pero no trabaja bien porque cuenta sólo hasta el 5 led pero no retorna al inicio y tampoco encienden los ledsdepués del 5o. led, espero alguien me ayude:
;Este programa maneja una secuencia de 4 LED"s.
list p=16c84
;----------------------------------------------------------------------
ptob equ 06 ;el puerto b est en la direcci¢n 06 de la memoria RAM
rota equ 0a
reg1 equ 0b ;se asignan nombres a algunos registros de prop¢sito general
reg2 equ 0c
reg3 equ 0d
valor1 equ 30 ;se asignan nombres a algunas constantes
valor2 equ 40
valor3 equ 50
;-----------------------------------------------------------------------
reset org 0 ;el vector de reset es la direccion 00
goto inicio ;se salta al inicio del programa
org 7 ;el programa empieza e la direccion de memoria 7
inicio movlw 00 ;se carga el registro W con 0
tris ptob ;se programan los pines del puerto b como salidas
otra movlw 01 ;se carga el registro W con el valor 01
movwf rota ;se dispone el dato para la rotacion
hol movf rota,0 ;mueve el contenido del registro rota a W
movwf ptob ;enciende el LED correspondiente
call retardo ;se mantiene el LED encendido por un momento
rlf rota ;desplaza el contenido del registro un bit a la izquierda
btfss rota,4 ;probar si el quinto bit se enciende
goto hol ;si no ha llegado al quinto bit enciende el LED que sigue
goto otra ;si ya encendio el ultimo LED se inicia nuevamente la secuencia
retardo movlw valor1 ;se carga el registro W con el numero valor1, es decir
;con el numero 30 que se asigno al principio a valor1
movwf reg1 ;se traslada ese numero al registro reg1
tres movlw valor2 ;se carga W con el numero valor2 (40)
movwf reg2 ;se traslada ese numero al registro reg2
dos movlw valor3 ;se carga W con valor3
movwf reg3 ;se carga reg3 con 50
uno decfsz reg3 ;se decrementa el registro reg3 y si el valor es cero
goto uno ;se salta a la siguiente instruccion, sino, se continua
;decrementandolo
decfsz reg2 ;igual que el anterior
goto dos
decfsz reg1 ;igual al anterior
goto tres
retlw 00 ;termina la subrutina retardo y vuelve al programa principal
end
;------------------------------------------------------------------------
; Fusibles de programacion
; Osc XT
; Watchdog OFF
; Code protect OFF
; Power-Up-Timer ON
; Micro. PIC16C84
;=========================================================================
esta es la modificación que le hice para los 8 leds del puerto b pero no sale
;Este programa maneja una secuencia de 4 LED"s.
list p=16c84
;----------------------------------------------------------------------
ptob equ 06 ;el puerto b est en la direcci¢n 06 de la memoria RAM
rota equ 0a
reg1 equ 0b ;se asignan nombres a algunos registros de prop¢sito general
reg2 equ 0c
reg3 equ 0d
valor1 equ 30 ;se asignan nombres a algunas constantes
valor2 equ 40
valor3 equ 50
;-----------------------------------------------------------------------
reset org 0 ;el vector de reset es la direccion 00
goto inicio ;se salta al inicio del programa
org 7 ;el programa empieza e la direccion de memoria 7
inicio movlw 00 ;se carga el registro W con 0
tris ptob ;se programan los pines del puerto b como salidas
otra movlw 01 ;se carga el registro W con el valor 01
movwf rota ;se dispone el dato para la rotacion
hol movf rota,0 ;mueve el contenido del registro rota a W
movwf ptob ;enciende el LED correspondiente
call retardo ;se mantiene el LED encendido por un momento
rlf rota ;desplaza el contenido del registro un bit a la izquierda
btfss rota,7 ;probar si el quinto bit se enciende
goto hol ;si no ha llegado al quinto bit enciende el LED que sigue
goto otra ;si ya encendio el ultimo LED se inicia nuevamente la secuencia
retardo movlw valor1 ;se carga el registro W con el numero valor1, es decir
;con el numero 30 que se asigno al principio a valor1
movwf reg1 ;se traslada ese numero al registro reg1
tres movlw valor2 ;se carga W con el numero valor2 (40)
movwf reg2 ;se traslada ese numero al registro reg2
dos movlw valor3 ;se carga W con valor3
movwf reg3 ;se carga reg3 con 50
uno decfsz reg3 ;se decrementa el registro reg3 y si el valor es cero
goto uno ;se salta a la siguiente instruccion, sino, se continua
;decrementandolo
decfsz reg2 ;igual que el anterior
goto dos
decfsz reg1 ;igual al anterior
goto tres
retlw 00 ;termina la subrutina retardo y vuelve al programa principal
end
;------------------------------------------------------------------------
; Fusibles de programacion
; Osc XT
; Watchdog OFF
; Code protect OFF
; Power-Up-Timer ON
; Micro. PIC16C84
;=========================================================================
de antemano gracias y espero ayuda