Antetodo, buenos dias a todos!
Soy un novato con muchas ganas de exprimir todo cuanto el maravilloso mundo PIC nos pueda dar, asi que me he hecho con un Pickit 2 starter kit de microchip, el mplab 8.10 y unos cuantos PIC 16F84A ( tambien el 16F690 ke venia con el kit, pero este me lo reservo para mas adelante hacer algun invento con PWM y leds RGB
).
El caso es ke para comenzar keria hacer una secuencia de leds en particular, ke podriamos decir ke se parece a una barra de carga/descarga, aunke no sera esa su utilidad final, seguramente me hare entender mucho mejor asi
La idea es ke primero se encienda el primer led, luego el segundo (y se mantenga el primero), luego el tercero ( y se mantengan todos los anteriores) y asi sucesivamente hasta 5. He implementado el codigo en asm y consigo ke lo haga bien, incluido los retardos (gracias al fichero ke he encontrado en este mismo site, y el cual ha sido tremendamente util!). El problema esta en ke una vez encendidos todos los leds, reinicia de nuevo toda la serie, exactamente 7 veces mas, y luego se keda congelado con los leds encendidos (como deberia ser). Estoy completamente desesperado porke no kiero ke reinicie todo el programa! kiero ke se keden todos encendidos y de ahi no se muevan! por favor, ayudadme, no se ke mas hacer...y seguro ke es una tonteria...
Datos de interes: uso un cristal de cuarzo a 4MHz, con dos C de 22 pF, un regulador de 5v para alimentar el pic y leds normales, con sus correspondientes resistencias
Intentare pegar el codigo a continuacion (por favor, webmasters, si hay algo ke no haga bien, notifikenmelo y lo editare; soy nuevo
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Autor:Kazu
;
; Fecha:11 agosto 2009
;
; Version:1.0
;
; Titulo:Cluster control
;
; Descripcion:Encendido paulatino de agujas
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;***** VARIABLE DEFINITIONS
STATUS equ 03h ; Direccion del registro STATUS
TRISB equ 86h ; Direccion del registro triestado para el Puerto B.
PORTB equ 06h ; Direccion del Puerto B.
PDel0 equ 0Ch ; Primer contador para nuestros bucles de retardo.
PDel1 equ 0Dh ; Segundo contador para nuestros bucles de retardo.
PDel2 equ 0Eh
;**********************************************************************
;
;****Configuracion del Puerto****
clrwdt
bsf STATUS,5 ; Cambiamos al banco 1Switch to Bank 1
CLRF TRISB ; ...como salidas.
bcf STATUS,5 ; Volvemos al Banco 0.
CLRF PORTB
;****Encendido del LED RB7****
BSF PORTB,7 ; Transmitimos una senal alta al bit 7 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB6****
BSF PORTB,6 ; Transmitimos una senal alta al bit 6 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB5****
BSF PORTB,5 ; Transmitimos una senal alta al bit 5 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB4****
BSF PORTB,4 ; Transmitimos una senal alta al bit 4 del puerto B
call Retraso ; Llama la subrutina retraso y la ejecuta
;****Encendido del LED RB3****
BSF PORTB,3 ; Transmitimos una senal alta al bit 3 del puerto B
;****Inicio del buble de retardo****
Retraso
movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;****Termina el Programa****
end ; Algunos compiladores necesitan esta instruccion.
Tb decir ke aunke use el template del mplab con los __config, #include, y demas, no hay diferencia alguna en el resultado, tarde mas o menos, siempre se reinicia. Parece como si se desbordase el programa...en fin, lo dejo en vuestras sabias manos...help, please!!!!
Muchisimas gracias de antemano