TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pimai en 14 de Enero de 2006, 14:11:00
-
Hola a todos!
tengo una problemilla... Estoy realizano un proyecto con el PIC16F84A, y no se exactamente si hace lo que realmente quiero que haga... ((Porque en el mplab, da BUILD SUCCESFUL)) Me gustaria saber si el programa esta bien realizado!!
A ver si me explico... Lo que quiero conseguir ((con dos pulsadores, dos displays el pic y un led)) es que cada pulsador(minutos y grados) vaya incrementando separadamente los displays de 0 a 9, uno incrementa los minutos y el otro los grados. Y que cuando uno de ellos ((solo UNO de ellos que en este caso es MINUTOS)) que cuando lo active por un interruptor (ON/OFF) que empiece a descender, y cuando llegue a cero, se encienda el LED.
Os adjunto el programa..Por favor, a ver si hay alguien que me entiende y que me pueda solucionar mi problema cuanto antes!!! es que voy muy apurada de tiempo... muchisimas gracias a todos!.
Me podeis contestar al mail: maiu1985@yahoo.es
Gracias por adelantado!!
list p=16F84A
#include "P16F84A.inc"
CONTG EQU 0x0C
CONTM EQU 0x0D
CONTDES EQU 0x0E
TEMP1 EQU 0x0F
TEMP2 EQU 0x0E
org 0x000
GOTO INICIO
org 0x004
GOTO INTER
org 0x005
INICIO BSF STATUS,RP0
CLRF TRISB
MOVLW B"00000011"
MOVWF TRISA
MOVLW B"00000101"
MOVWF OPTION_REG
MOVLW B"10100000"
MOVWF INTCON
BCF STATUS,RP0
CLRF GRADOS
CLRF MINUTOS
BUCLE BTFSC PORTA,0
CALL GRADOS
BTFSC PORTA,1
CALL MINUTOS
BTFSC PORTA,2
CALL DESCENDER
GOTO BUCLE
GRADOS CALL ESPERA30MS
INCF CONTG,F
MOVLW 0x09
SUBWF CONTG,W
BTFSC STATUS,Z
CLRF CONTG
BTFSC PORTA,0
GOTO $-1
CALL ESPERA30MS
RETURN
MINUTOS CALL ESPERA30MS
INCF CONTM,F
MOVLW 0x09
SUBWF CONTM,W
BTFSC STATUS,Z
CLRF CONTM
BTFSC PORTA,1
GOTO $-1
CALL ESPERA30MS
RETURN
DESCENDER CALL ESPERA30MS
DECF CONTDES,F
MOVLW 0x00
SUBWF CONTDES,W
BTFSC STATUS,Z
CLRF CONTDES
BTFSC PORTA,0
GOTO $-1
CALL ESPERA30MS
RETURN
INTER BCF INTCON,T0IF
BTFSS PORTA,3
GOTO VERGRADOS
GOTO VERMINUTOS
VERGRADOS BCF PORTA,2
MOVFW CONTG
CALL SIETESEG
MOVWF PORTB
BSF PORTA,3
RETFIE
VERMINUTOS BCF PORTA,3
MOVFW CONTM
CALL SIETESEG
MOVWF PORTB
BSF PORTA,2
RETFIE
SIETESEG ADDWF PCL,F
RETLW B"01000000"
RETLW B"01111001"
RETLW B"00100100"
RETLW B"00110000"
RETLW B"00011001"
RETLW B"00010010"
RETLW B"00000010"
RETLW B"01111000"
RETLW B"00000000"
RETLW B"00011000"
ESPERA30MS MOVLW .40
MOVWF TEMP1
DECFSZ TEMP1,F
GOTO $+2
RETURN
CLRF TEMP2
DECFSZ TEMP2,F
GOTO $-1
GOTO $-6
END
-
Podrias simularlo en PROTEUS....
Suerte!!!
-
Hola. Por lo poco que vi, te corrijo esto:
MOVLW B"00000011"
MOVWF TRISA
Lo correcto deberia ser:
MOVLW B"00001111"
MOVWF TRISA
pero has hecho lio...estas son 2 instrucciones que estan en tu programa:
BTFSS PORTA,3
BCF PORTA,3
Eso no puede ser( en teoria si, pero NO 
no me quiero desviar del hilo...) BTFSS PORTA,3 es chequear el pin 3 del puertoA, y utiliza cuando a ese pin lo configuraste como entrada.
BCF PORTA,3 pone el pin 3 del puertoA a cero. Se utiliza cuando configuraste a ese pin como SALIDA.
Decidite,al pin lo configuras y utilizas como entrada o salida!
pero solamente una de las dos opciones!

Si bien podes cambiar dinamicamente mediante el programa un pin de entrada como salida y viceversa, NO LO RECOMIENDO si no la tenes muy clara en programacion.
Lo mismo hiciste con el pin 2 del puertoA...
Otra cosa:Esto es redudante:
DESCENDER CALL ESPERA30MS
DECF CONTDES,F
MOVLW 0x00
SUBWF CONTDES,W
BTFSC STATUS,Z
CLRF CONTDES
Lo optimo:
DESCENDER CALL ESPERA30MS
DECF CONTDES,F
Eso es lo mismo...
Exitos.
-
Wenas!!!
Gracias a los que habeis contestado!!
Intentare arreglarlo hoy a la tarde confugurando o como entrada o como salida, a ver si es ese el error y me lo simula bien en el proteus!!
Gracias
!!