TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: ErnestAl en 21 de Junio de 2007, 19:08:18
-
Buenas, estoy tratando de implementar un retardo de 500segundos usando el Timr1 para comprender las interrupciones, ¿se podria realizar?. Yo lo he intentado pero no consigo encender la bombilla en proteus a los 8minutos, ¿donde puede estar el fallo?
list p=16f877
#include <p16f877.inc>
conta equ 0x20
conta1 equ 0x21
org 0x00
nop
goto main
org 0x04
goto inter
main
movlw b'10111010'
movwf conta
movlw b'00000011'
movwf conta1
bsf STATUS,RP0
BCF STATUS,RP1
CLRF TRISB
CLRF INTCON
CLRF PIE1
CLRF PIE2
MOVLW B'11000000'
MOVWF INTCON
BSF PIE1,TMR1IE
BCF STATUS,RP0
MOVLW B'00110000'
MOVWF T1CON
CLRF PORTB
BUCLE BSF T1CON,TMR1ON
GOTO BUCLE
inter DECFSZ conta,f
GOTO SALIDA
DECFSZ conta1,f
GOTO SALIDA
GOTO FIN
SALIDA BCF PIR1,TMR1IF
RETFIE
FIN BSF STATUS,RP0
CLRF INTCON
BCF T1CON,TMR1ON
MOVLW 0XFF
MOVWF PORTB
RETFIE
END
-
Los tiempos en proteus no son reales, 8 minutos pueden demorarse una eternidad dependiendo del computador, si quieres verificar el funcionamiento de tu código yo te aconsejo que montes el circuito o que simules con el MPLAB SIM que es muy exacto, no tienes que esperar los 8 minutos, solo verifica el tiempo en que salta la interrupción del timer. O si eres paciente puedes esperar los 8 minutos.
Saca la instrucción de encendido del timer del bucle infinito, solo es necesario activarlo una vez
saludos.
-
tambien simulo con mplab, y uso el stopwatch para ver el tiempo, pero m salta cada 2segundos
-
Perdón por lo que voy a decir, pero lo mejor, es en la vida real.
Suerte y saludos :-/ :-/
-
yo he simulaod con el proteus tiempos largos de 3 o 4 minutos y si se cumple en la realidad, es que el proteus se peude demorar pero tiene su propio contador o reloj y uno tiene que estar atento a eso. bueno igual ese no es el problema de ErnertAL
Veamos el periodo de desborde de tu timer1, como no has puesto el cristal que usas supondre para 4MHz
periodo = ( 4 * 8 * (FFFF - carga del timer1) ) / (4 x 10^6)
= ( 8 * 65535 ) / 1000000
= 0.52428 segundos dura en desbordarse el timer1
luego tenemos una sucesión de repeticiones....
periodo * conta = 0.52428 * 186 = 97.51608 segundos
finalmente ....
97.51608 * conta1 = 97.51608 * 3 = 292.54824 segundos esto aproximadamente arroja 4 minutos y unos tantos segundos, pero no llega a 8 minutos.
-
Buenos dias!!!! los valores de esos contadores los hice por lo siguiennte:
R=0.5243---> 500s=B*0.5243
B=954 aprox ---> transformado a binario-->1110111010
-->como trabajo con registros de 8btis
conta-->10111010
conta1-->00000011
¿Esta mal el contador para realizar la demora?
-
ahora que lo vuelvo a ver tu codigo segun lo que comentas, pues no cumple lo que dices, intenta esto:
conta = d'10'
conta1 = d'10'
entonces R=0.5... luego
conta * R = 50 segundos finalmente
conta1 * 50 = 500
entonces en la interrupcion:
inter DECFSZ conta,f
GOTO SALIDA
MOVLW D'10'
MOVWF conta
DECFSZ conta1,f
GOTO SALIDA
MOVLW D'10'
MOVWF conta1
GOTO FIN
prueba con eso.
-
Perdón por lo que voy a decir, pero lo mejor, es en la vida real.
Suerte y saludos :-/ :-/
El simulador del MPSIM realmente es muy preciso. Por supuesto es la vida real la que nos indica si el retardo será realmente de 500useg o de 501 o 499. Eso depende de la desviación de los componentes, etc.
Si uno tiene una aplicación donde el retardo debe ser 500useg exactos... tal vez haya un grave problema de diseño.
Usar el simulador allana mucho terreno y nos permite ahorrar horas de pruebas y error de la vida real.
Si fuera tan tajante, no se harían simuladores de microprocesadores ni nada por el estilo, que permitan a los diseñadores anticipar el funcionamiento antes de realmente probarlo... cada día más en el mundo se invierte en simuladores de todo tipo porque es la forma más económica y veloz de probar muchas cosas.
Saludos
-
El simulador del MPSIM realmente es muy preciso. Por supuesto es la vida real la que nos indica si el retardo será realmente de 500useg o de 501 o 499. Eso depende de la desviación de los componentes, etc.
Si uno tiene una aplicación donde el retardo debe ser 500useg exactos... tal vez haya un grave problema de diseño.
Usar el simulador allana mucho terreno y nos permite ahorrar horas de pruebas y error de la vida real.
Si fuera tan tajante, no se harían simuladores de microprocesadores ni nada por el estilo, que permitan a los diseñadores anticipar el funcionamiento antes de realmente probarlo... cada día más en el mundo se invierte en simuladores de todo tipo porque es la forma más económica y veloz de probar muchas cosas.
Saludos
Estoy totalmente de acuerdo.
Saludos :-/ :-/