Hola a todos. Escribo porque tengo alguna duda con la variable int16. Resulta que necesito usar el Timer1 del pic16f886, y para probar que funcione bien hice un pequeño programa donde el timer1 interrumpe cada 1ms, y acumulo en las variables ms (los milisegundos), seg (los segundos) y min (los minutos). El problema que tengo es que cuando utilizo a "ms" como int, solo llega hasta 256 (no se si eso esta bien, el wath del debugguer me lo muestra asi). Como necesito que llegue a 1000 cuentas, para completar el Segundo, declare a la variable "ms" como int16, pero la forma en que se acumula esta (ms++) es de la siguiente manera:
ms: 0x0000
ms++
ms: 0x0100
ms++
ms: 0x0200
ms++
ms: 0x0300
ms++
......etc
No se si eso es asi o algo funciona mal. Aqui dejo el programa para que opinen si algo tengo mal. Gracias!!
//------Directivas para el compilador--------
#Include <16F886.h> //PIC utilizado
#Fuses HS, NOWDT, NOPUT, NOBROWNOUT, NOCPD, NOPROTECT //Configuramos los fuses
#Use Delay (Clock=20000000) //Oscilador a 4Mhz
#Use Fast_Io(B) //Optimizamos E/S del PORTB
#Use Fast_Io(A) //Optimizamos E/S del PORTA
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#byte portb = 0x06
int16 ms=0;
int seg=0;
int min=0;
void main(void)
{
//-----------------------configuramos la interrupciones------------------------------------------
disable_interrupts(global); //desactivo todas las interrupciones
//-----------------------configuro el timer 1--------------------------------------------------
setup_timer_1( T1_INTERNAL | T1_DIV_BY_1); //Defino como fente al clock interno
set_timer1(60336); //cargo el timer0
enable_interrupts(INT_TIMER1);
//-----------------------configuro la Interrupcion Externa------------------------------------
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
//---------------------------//activo las interrupciones---------------------------------------
enable_interrupts(global);
set_tris_a(0b00000000);
set_tris_b(0b00000001);
set_tris_c(0b00000000);
while(true)
{
if(ms==1000)
{
seg++;
ms=0;
}
if(seg>=60)
{
min++;
seg=0;
}
}
}
#int_ext
void Interrupcion_ext()
{
// set_timer1(0);
// ext_int_edge( H_TO_L );
}
#int_timer1
void Timer_1()
{
ms++;
set_timer1(60336);
}