TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Mecatronico_MG en 26 de Julio de 2012, 03:08:58
-
Hola amigos. Estoy aprendiendo a programar en microcode studio y se me ha presentado un problema con el registro de desplazamiento 74HC595. Estoy usando 2 de estos integrados junto con el comando SHIFTOUT de microcode para desplazar un dato por 14 bits. El problema es que no logro hacer que el circuito funcione como deseo. Aqui pongo el circuito y mi programa. Lo que quiero es que los leds se vayan encendiendo uno por uno desde el primero hasta el ultimo, y cuando se encienda el ultimo led se quede prendido, y luego empiece a encenderse otra vez el primer led hasta llegar al penultimo y que tambien se quede prendido, algo asi como una "pila" que se va llenando. Es decir, al final todos los leds deberian prenderse. Si alguien me puede ayudar se lo agradecere mucho. :)
@ DEVICE PIC16F628A
@ DEVICE PROTECT_OFF
@ DEVICE CPD_OFF
@ DEVICE WDT_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE LVP_OFF
@ DEVICE HS_OSC
INCLUDE "modedefs.bas"
DEFINE OSC 20
TRISA=$F0 'PORTA.0 ES ENTRADA
TRISB=0 'PORTB.0 ES SALIDA
CMCON=7 'DESACTIVA EL MODO COMPARADOR
CLK VAR PORTB.0
DS VAR PORTB.1
ST VAR PORTB.2 : ST = 0
DATO VAR WORD : DATO = 1
CUENTA VAR BYTE
IND VAR BYTE : IND=14
BUCLE:
SHIFTOUT DS,CLK,1,[DATO\14]
ST=1 : PAUSE 1 : ST = 0
DATO = DATO<<1
CUENTA=CUENTA+1
PAUSE 100
IF CUENTA<IND THEN
GOTO bucle
ENDIF
CUENTA=0
IND=IND-1
GOTO BUCLE
-
El compilador es pic basic pro (.pbp) :-/
Adjunto en un archivo rar el diagrama del circuito en proteus y el codigo en pic basic pro.
-
Hola:
Realmente te respondo para darte una pista rápida ,no he estudiado en detalle el circuito o el 595 ,pero me parece que no debes considerar el desplazamiento como de 14 bits sino de 16 ,porque entiendo que los 2 integrados 595 son de 8bits cada uno ,emtonces deberías hacer la escritura de 16 bits ,aunque sea los 2 no usados como cero.-
Sds.
Jorge
-
Gracias Jorge, probare con tu idea. Si tienes tiempo podrias verificar el codigo anterior que hice? Tengo una duda, no se por que el ultimo GOTO BUCLE del codigo, aparentemente no funciona :? :?
-
Amigo, lo probe considerando un desplazamiento de 16 bits y no resulto. Me parece que ese no es el problema. El problema es que la orden GOTO no esta funcionando. Alguien puede ayudarme a ver que esta mal en el codigo? :(
@ DEVICE PIC16F628A
@ DEVICE PROTECT_OFF
@ DEVICE CPD_OFF
@ DEVICE WDT_OFF
@ DEVICE BOD_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE LVP_OFF
@ DEVICE HS_OSC
INCLUDE "modedefs.bas"
DEFINE OSC 20
TRISA=$F0 'PORTA.0 ES ENTRADA
TRISB=0 'PORTB.0 ES SALIDA
CMCON=7 'DESACTIVA EL MODO COMPARADOR
CLK VAR PORTB.0
DS VAR PORTB.1
ST VAR PORTB.2 : ST = 0
DATO VAR WORD : DATO = 1
CUENTA VAR BYTE
IND VAR BYTE : IND=14
BUCLE:
SHIFTOUT DS,CLK,1,[DATO\14]
ST=1 : PAUSE 1 : ST = 0
DATO = DATO<<1
CUENTA=CUENTA+1
PAUSE 100
IF CUENTA<IND THEN
GOTO BUCLE
ENDIF
RET:
CUENTA=0
IND=IND-1
GOTO BUCLE 'esta orden GOTO BUCLE me parece que no funciona