TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: distelg en 27 de Agosto de 2005, 22:56:00
-
Hola. Estoy haciendo un programa muy sencuillo para encender y apagar 5 leds conectados al port B. La primera vez los leds se encienden y luego se apagan como debe ser, pero despues pareciera ser que la pausa fuese mas corta cuando los leds se apagan, porque apenas se apagan se vuelven a encender.
A continuacion adjunto el codigo para que me ayuden y me digan que esta mal. Estoy usando un 16F84A con un cristal de 4 MHZ.
Gracias por la ayuda.
;********************************************
;* Este programa prende y apaga 5 leds
;* el PORTA se configura como entrada y
;* el PORTB como salida
;********************************************
;BANCO 0 y BANCO 1
STATUS EQU 03H
;BANCO 0
PORTB EQU 06H
EEDATA EQU 08H
EECON1 EQU 08H
;BANCO 1
TRISA EQU 05H
TRISB EQU 06H
;Registros
COUNT EQU 0CH
ADDRESS EQU 0DH
CUENTA1 EQU 0EH
CUENTA2 EQU 0FH
CUENTA3 EQU 010H
W_AUX EQU 011H ;para salvar el valor del registro W
F EQU 1
W EQU 0
#DEFINE BANCO0 BCF STATUS,5
#DEFINE BANCO1 BSF STATUS,5
ORG 00H
BANCO1 ;Paso al banco 1
MOVLW 0FFH ;Todos los bits del acumulador a "1"
MOVWF TRISB ;configuro el puerto A como entrada (son 5)
MOVLW 00H ;Todos los bits del acumulador a "0"
MOVWF TRISB ;configuro el puerto B como salida (son 8)
BANCO0 ;Vuelvo al banco 0
CLRF PORTB ;pongo todas las salidas a 0
BANCO0
CLRW ;W=0
MOVWF COUNT
LOOP1
INCF COUNT,F
MOVF COUNT, W
MOVLW 07H
MOVWF PORTB
CALL PAUSA
MOVLW 00H
MOVWF PORTB
CALL PAUSA
GOTO LOOP1
;============================================
;= Hago una pausa para que se vean los leds =
;============================================
PAUSA
MOVWF W_AUX ;salvo el valor del registro W
MOVLW 078H ;120D
MOVWF CUENTA1
BUCLE1
MOVLW 019H ;25D
MOVWF CUENTA2
BUCLE2
MOVLW 040H
MOVWF CUENTA3
BUCLE3
DECFSZ CUENTA3,F
GOTO BUCLE3
DECFSZ CUENTA2,F
GOTO BUCLE2
DECFSZ CUENTA1,F
GOTO BUCLE1
MOVF W_AUX,W ;recupero el valor de W
RETURN
END
-
A ver dijo un ciego... primero te ire resaltando un error q hay por alli..
BANCO1 ;Paso al banco 1
MOVLW 0FFH ;Todos los bits del acumulador a "1"
MOVWF TRISB ;configuro el puerto A como entrada (son 5) ; debe ser TRISA
MOVLW 00H ;Todos los bits del acumulador a "0"
MOVWF TRISB ;configuro el puerto B como salida (son 8)
luego, no entiendo muy bien para que esta el registro COUNT, pues no le veo un uso especial, a mi parecer tu codigo prodria kedar asi....
LOOP1
MOVLW 07H
MOVWF PORTB
CALL PAUSA
MOVLW 00H
MOVWF PORTB
CALL PAUSA
GOTO LOOP1
PAUSA
MOVLW 078H ;120D
MOVWF CUENTA1
BUCLE1
MOVLW 019H ;25D
MOVWF CUENTA2
BUCLE2
MOVLW 040H
MOVWF CUENTA3
BUCLE3
DECFSZ CUENTA3,F
GOTO BUCLE3
DECFSZ CUENTA2,F
GOTO BUCLE2
DECFSZ CUENTA1,F
GOTO BUCLE1
RETURN
END
No necesitas guardar el registro w xq tu programa no lo necesita. Por lo demas deberian funcionar bien las pausas... Hay un programa para generar demoras en ASM si no te sale puedes probar con ese...
Nos vemos y un abrazo...