TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: gergh en 16 de Mayo de 2009, 01:31:11
-
se trata de un contador up/down de 3 dígitos que cuenta desde 000 hasta 999. la entrada de pulsos a contar se aplica por ra4 que es sensible al flanco descendente la entradara3 determina si la cuenta es ascendente o descendente, lo simulo en isis de proteus, pero me marca errores la verdad soy nuevo con el tema pero con lo que he leido en el foro me he podido familiarizar con el codigo y entender la logica del mismo, solo que no puedo detectar el error en el, si alguien fuera tna amable, para echarme una ayuda y comentar mas o menos el problema o hacer observaciones se lo agradecere. adjuntare el archivo de isis y una imagen jpg del circuito. muchisimas gracias que ya no puedo y me heroto la cabeza con esto jejejejeje disculpen mi ignorancia :s :) :)
codigo :
List p=16F84A
include "P16F84A.inc"
DIG0 equ 0x0c
DIG1 equ 0x0d
DIG2 equ 0x0e
Delay_Fijo equ 0x0f
org 0x00
goto Inicio
org 0x05
Tabla_7_seg addwf PCL,F
retlw b'11000000'
retlw b'11111001'
retlw b'10100100'
retlw b'10110000'
retlw b'10011001'
retlw b'10010010'
retlw b'10000010'
retlw b'11111000'
retlw b'10000000'
retlw b'10011000'
Display bsf PORTA,0
movf DIG0,W
call Tabla_7_seg
movwf PORTB
call Delay
bcf PORTA,0
movlw b'11111111'
mmovwf PORTB
bsf PORTA,1
movf DIG1,W
call Tabla_7_seg
movwf PORTB
call Delay
bcf PORTA,1
movlw b'11111111'
movwf PORTB
bsf PORTA,2
movf DIG2,W
call Tabla_7_seg
movwf PORTB
call RETARDO_200MS
bcf PORTA,2
movlw b'11111111'
movwf PORTB
return
Delay clrf Delay_Fijo
Delay_1 nop
decfsz Delay_Fijo,F
goto Delay_1
return
Incrementa incf DIG0,F
movlw 0x0a
subwf DIG0,W
btfss STATUS,Z
return
clrf DIG0
incf DIG1,F
movlw 0x0a
subwf DIG1,W
btfss STATUS,Z
return
clrf DIG1
incf DIG2,F
movlw 0x0a
subwf DIG2,W
btfss STATUS,Z
return
clrf DIG2
return
Decrementa decfsz DIG0,F
movlw 0xff
subwf DIG0,W
btfss STATUS,Z
return
movlw .9
movwf DIG0
decf DIG1,F
movlw 0xff
subwf DIG1,W
btfss STATUS,Z
return
movlw .9
movwf DIG1
decf DIG2,F
movlw 0xff
subwf DIG2,W
btfss STATUS,Z
return
movlw .9
movwf DIG2
return
Inicio movlw b'11111111'
movwf PORTB
clrf PORTB
bsf STATUS,RP0
clrf TRISB
movlw b'00011000'
movwf TRISA
movlw b'00000111'
movwf OPTION_REG
bcf STATUS,RP0
clrf DIG0
clrf DIG1
clrf DIG2
Loop clrwdt
btfsc PORTA,3
goto Descendente
call Display
goto Loop
Descendente clrwdt
btfss PORTA,4
goto Pulso
call Display
goto Descendente
Pulso btfss PORTA,3
goto Dec_Cont
call Incrementa
goto Loop
Dec_Cont call Decrementa
goto Loop
END
-
http://www.todopic.com.ar/foros/index.php?topic=24720.msg201403#msg201403
Echale un ojo a esto, tienes varias cosas mal entre ellas el delay, temporiza algo?
saludos tapi8
-
Picdel_sp.zip Aqui tienes un programa, el que usamos casi todos en el foro, que te hace los delays.
Porque esto no te funciona, haces un clrf y lo pones a 0 y despues lo decrementas, pero ya esta a 0
Delay clrf Delay_Fijo
Delay_1 nop
decfsz Delay_Fijo,F
goto Delay_1
return
Aqui configuras el timer0 para dividir la frec por 256 pero no tienes habilitada la interrupcion por timer, no te vale para nada.
ovlw b'00000111'
movwf OPTION_REG
Para multiplexar los displas, fijate en la direccion del post anterior, tienes que hacer delays pequeños y repetirlos varias veces si haces un delay de 200 ms, se veran encendidos y apagados, y no encendidos todo el tiempo, que tu no haces ningun delay como te dije antes
saludos tapi8