Hola amigos!
sigo continuando con el programa, y el TMR0 me lleva de cabeza! queria preguntarles si los siguientes calculos son correctos y les pongo el codigo del programa.
para ver si los valores que he utilizado son correctos para conseguir que me temporice cada 500 us que utilizando una variable contador y un IF cada vez que la variable contador llegue a 2000, realizo la accion y reseteo contador, es decir utilizo un multiplicado x2000 para que me ejecute (0,5ms X 2000 = 1000 ms = 1s) por tanto el digito cambiará cada segundo
Sigou un libro y me pone lo siguiente:
TMR0= 256 - (tiempo de desbordamiento)/(4 X periodo oscilador us X preescalador)Utilizo un PIC 16F887 a 8MHz de XTAL por lo que tiene un periodo de 1/8000000 = 0,125 us y utilizo un preescalador de 1:8 con lo que el registro de OPTION_REG= $82
Despejando la ecuacion anterior TMR0= 256 - [500us /(4 X 0,125us X
] = 256 - [500us / 4]= 256 - 125 = 131 de valor de precarga en el TMR0
program CONTADORBCD
dim cnt as word
dim index as byte
dim digitos as byte[10]
SUB PROCEDURE DIGI
digitos[0]= $3F
digitos[1]= $06
digitos[2]= $5b
digitos[3]= $4F
digitos[4]= $66
digitos[5]= $6D
digitos[6]= $7D
digitos[7]= $07
digitos[8]= $7F
digitos[9]= $67
END SUB
SUB PROCEDURE interrupt
Inc(cnt)
TMR0= 131
INTCON= $20
end sub
main:
ANSEL= 0
ANSELH= 0
OPTION_REG = $82
TMR0= 131
INTCON= $A0
index= 0
cnt=0
PORTA= 0
TRISA= 0
PORTD= 0
TRISD= 0
PORTB= 0
TRISB= $FF
DIGI
PORTD=digitos[index]
PORTA.0= 1
WHILE TRUE
while PORTB.0= 0
if (cnt= 2000) then
index= index+1
if index = 10 then
index= 0
end if
cnt=0
PORTD=digitos[index]
end if
wend
WEND
end.
Ahora mi siguiente paso es multiplexar los displays para hacer un contador de 4 digitos que simule 99 minutos y 99 segundos. podeis indicarme un buen ejemplo en basic para poder hacerlo? ya que no entiendo exactamente como encender los displays y desplazar el digito cada vez que llega a 10.
saludos y gracias de antemano!