hace 18 años
Hola colegas, tengo un pequeño inconveniente,,,
estoy diseñando un sistema de control de potencia, al cual pretendo incorporarle un reloj interno.
estoy usando el TMR2 para contar los pulsos, y como referencia del clock uso FOSC de 4MHz...
segun los calculos, cada intruccion simple en el PIC tiene un retardo de 1uS.
por tanto tengo la siguiente configuracion...
Prescaler - 1:16
Postscaler - 1:5
PR2 - 50
con lo anterior, se debiera generar una interrupcion cada 4mS...
con esta interrupcion estoy incrementando un "Segundo" contador, el cual llega hasta 250(decimal).
Bien, cada vez ke se revalsa el contador anterior incremento el contador de SEGUNDOS. pues con cada revalse tengo 1000000uS, equivalente a 1 segundo...
segun mis calculos esto deberia funcionar y depender e la frecuencia del oscilador ( un crystal de 4MHz)...
PERO NO!!.... estoy simulando el sistema en Proteus, y los segundos son mas largos... por tanto el reloj avanza mas lento...
Tambien lo implemente en el circuito fisicamente, para descartar si era problema de simulacion en proteus, pero existe el mismo problema...
Portanto, tambien se descarta que sea problema de la tolerancia del crystal..
hay algun detalle que se me este pasando??...
les adjunto el codigo assembler...
[code:1:7dd1372621]
org 4
bcf INTCON,GIE
btfss PIR1,1 ;revisa si la int fue por TMR2=PR2=250=4mS
goto FINT
incf CONT01
movlw .250
subwf CONT01,W
btfss STATUS,Z
goto NADA1
incf SEG ;SI, incrementa el segundero
incf SEG1
incf SEG2
clrf CONT01
btfss LED
goto LEDON
bcf LED
goto NADA1
LEDON bsf LED
NADA1
movlw .60
subwf SEG,W
btfss STATUS,Z
goto NADA2
incf MIN
clrf SEG
NADA2
movlw .60
subwf MIN,W
btfss STATUS,Z
goto NADA3
incf HOUR
clrf MIN
NADA3
movlw .24
subwf HOUR,W
btfss STATUS,Z
goto NADA4
clrf HOUR
NADA4
goto FINT
FINT bcf PIR1,1 ;borra indicador de int por TMR2=PR2
bsf INTCON,GIE ;habilita las interrupciones
retfie
CONFI bsf STATUS,5
bcf STATUS,6 ;banco 1
clrf TRISB ;PORTB salida -- Datos LCD
clrf TRISD ;PORTD salida -- Control LCD
clrf TRISE ;PORTE salida -- sin uso
movlw 0xff
movwf TRISA ;PORTA entrada -- Botones
movlw b'10000000'
movwf TRISC ;PORTC <C7:C6>RX:TX, <C5:C0>
movlw b'00000111'
movwf OPTION_REG ;Timer 0 ascendente cada 256 ciclos
movlw b'01000000'
movwf INTCON ;Interrupciones perifericas
movlw .25
movwf SPBRG ;9,6k con 4MHz
movlw b'00100100'
movwf TXSTA ;hab tx, 8bit, asyn, hspeed, TSR full
movlw b'111'
movwf ADCON1 ;todos los pines digitales
movlw .50
movwf PR2
movlw b'10'
movwf PIE1 ;interrupcion por TIMER2=PR2
bcf STATUS,5 ;banco 0
clrf HOUR
clrf MIN
clrf SEG
clrf CONT01
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
movlw b'00110011'
movwf T1CON ;hab TIMER 1, external clock RC0
movlw b'00101111'
movwf T2CON ;hab TIMER 2, pres1:16, posts1:5
clrf SEG2
clrf SEG1
clrf SSPCON
movlw b'10010000'
movwf RCSTA ;hab serial async, 8 bit
.... resto del programa...
[/code:1:7dd1372621]
a ver si me exan una mano...
¿Realmente quieres cerrar esta reparación?
Sí
No
¿Realmente quieres reabrir esta reparación?
Sí
No
¿Realmente quieres borrar este post?
Sí
No