bueno Maunix estoy empezando a hacer el programa como me has dicho tu, empece a mirar como funciona el TMR0 y vaya follon, asi que te voy a hacer unas preguntas.
1ª/ para configurar el OPTION REGISTER lo hago como con ptrp registro cualquiera?
movlw aqui pongo los bits a configurar
movwf option reg
2ª/ para calcular el tiempo de 10ms use la formula
T=CI*TMR0*DF
Donde T=10ms, CI=1MH, df=i/256 le puse la maxima division y para esto si lo hice bien me da para el TMR0=3.90625 que aproximare a 4.este es el valor a meter en el TMR0?
3ª/ cuando se me desborde el TMR0 para saberlo tengo que hacer un btfss en el TOIF del regitro INTCON? este registro tambien lo tendre que estudiar
Mira si no funciona por lo menos voy a aprender un monton que falta me hace
un saludo tapi8
1) Sí, así es, es un registro como cualquier otro.
2)
Si usas un XTAL de 4MHz, tu ciclo de instrucción será de 1useg.
Usando el prescaler en 1:256, y sabiendo que el máximo valor que puede tomar el TMR0 es 255 (por ser de 8 bits) el cálculo sería
Tmax = 256 * 256 * 1u[seg] = 65535 useg = 65.635 mseg.
Ahora bíen para hacer al reves, para saber 'cuantos pasos' del timer deberán pasar para que hayan transcurrido 10mseg (10000 microsegundos) hacemos lo siguiente.
Tdeseado = 256 * TMR0 * 1u[seg]
TMR0 =10000 u[seg] / (256 * 1u[seg]) = 39,0625 --> tomamos 39
Como el TMR0 es un timer cuyo flag se activa por rebasamiento, para que el flag se encienda cada 10mseg, deberemos cargar en el 256-39 = 217.
Al llegar a 256 el TMR0 se hace 0 pero enciende su flag.
3) Sí, tal cual, verificas que se ponga encendido el FLAG. Luego haces 0 el flago, incrementas la cuenta de tu variables, vuelves a cargar el TMR0.
Por último si quieres mayor precisión para medir los 10mseg, puedes usar un prescaler más chico 1:32 por ejemplo con lo cual ganarás en precisión, de todas formas no creo que sea tan crítico para tu aplicación.
Saludos