Me cansé de hacer pruebas en CCS
; si agregaba mas delay o ponía mas sentencias "printf...." antes de hacer el cálculo de CycleTime éste variaba enormemente. Definitivamente hay algún gran problema o en la implementación de printf o cuando se ingresa demasiado a la interrupción para incrementar ContadorGlobal.
Bajé rutinas de delay y serial para Hitech y me puse a probar con el... te subo dos capturas... ProgramaHitech1 muestra el valor que tiene el StopWatch antes del cálculo de la variable Ciclos; 69.4604 ms
En la captura ProgramaHitech2 vemos que el valor en la variable ciclos es 694272.
Si se divide el valor de ciclos en 10000 nos da el tiempo en ms 69.4272;
La diferencia entre StopWatch y ciclos es 33.2us que equivalen a 166 instrucciones. Este número se está quedando afuera porque no supera la división del prescaler del Timer0 (que está en 256);
Ahora bien, tuve que realizar los cálculos de esa manera porque intenté usar la función FTOA -FloatToASCII- pero no me tomaba bien los decimales. Entonces decidí hacer que ciclos sea "unsigned long" y usar todos número mayores que 0.
/*************
*
* Prueba para ver si puede usar el puerto serie con HiTech
*
*************/
#define PIC_CLK 20000000
#include <htc.h>
#include "delay.c"
#include "serial.c"
//#include <stdlib.h>
//#include <stdio.h>
//#include <string.h>
#include "Definiciones.h"
/*
#define INTERNAL 0
#define EXT_L_TO_H 32
#define EXT_H_TO_L 48
#define TMR0_DIV_1 8
#define TMR0_DIV_2 0
#define TMR0_DIV_4 1
#define TMR0_DIV_8 2
#define TMR0_DIV_16 3
#define TMR0_DIV_32 4
#define TMR0_DIV_64 5
#define TMR0_DIV_128 6
#define TMR0_DIV_256 7
#define set_timer0(x) TMR0= x
#define setup_timer0(x) (OPTION = 0b11000000|x)
*/
unsigned int ContadorGlobal;
void interrupt tc_int(void)
{
if (T0IE && T0IF)
{
T0IF=0;
++ContadorGlobal;
}
}
void main (void)
{
unsigned long Ciclos;
setup_timer0(INTERNAL|TMR0_DIV_256);
serial_setup();
INTCON= 0b10100000;
while (1)
{
set_timer0(0);
ContadorGlobal = 0;
Ciclos = 0;
DelayMs(20);
putst ("Que Mal el CCS ");
DelayMs (30);
putst ("Que barbaro lo del Timer0");
Ciclos = (ContadorGlobal*131072) + (unsigned long)(TMR0)*512;
}
}