TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: raptor200 en 30 de Mayo de 2005, 07:08:00

Título: caminata de led del puerto b pic 16f84
Publicado por: raptor200 en 30 de Mayo de 2005, 07:08:00
Escrito originalmente por raptor200
Escrito originalmente por raptor200
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


Título: RE: caminata de led del puerto b pic 16f84
Publicado por: antoniof en 30 de Mayo de 2005, 12:07:00
El fallo es que no colocas el puerto B como salida:

Codigo:
inicio movlw 00 ;se carga el registro W con 0
tris ptob ;se programan los pines del puerto b como salidas


Esta sintaxis está obsoleta. Mejor asi:

Codigo:
   bsf   status,5      ;Banco 1
   clrf   ptob      ;PB como salida   
   bcf   status,5      ;Banco 0   
Título: RE: caminata de led del puerto b pic 16f84
Publicado por: Micom en 30 de Mayo de 2005, 23:36:00
Tambien hacer la rotacion con un registro y luego mandarla al PORTB no es muy bueno ya que si te fijas cuando el registro rota llega al 7 bit salta a la etiqueta otra y nunca se encendera el 7 led conectado al puerto b lo mejor es hacer la rotacion directa en el protb y borrar en cada rotacion el bit C del registyro STATUS

Codigo:
otra bsf portb,0   ;Bit 0 PORTB=1 enciende el led del bit 0
     bcf status,0  ;Bit de acarreo C=0
rota call retardo  ;LLama a la subrutina retardo
     rlf portb,1   ;Rota un bit a la izquierda el PORTB con C
     btfss portb,7 ;Si el bit 7 de POTB=1 sale
     goto rota     ;Salta a rota
     goto otra


espero que te sirva este fracmento de codigo. Hasta luego
Título: RE: caminata de led del puerto b pic 16f84
Publicado por: raptor200 en 31 de Mayo de 2005, 06:51:00
Avergonzado

gracias por la ayuda voy a provar con la información que amablemente me has proporcionado y te comento como me fue
Vacilandogracias a todos los que me han apóyado con sus comentarios y sugerencias estoy pendiente del resultado de ellas.


graciassssss


Sonrisa GiganteSonrisa GiganteSonrisa Gigante