Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
E estado intentando hacer un codigo el cual funcione como un cronometro real, el cual al presionar un boton comience la cuenta del tiempo y al presionar de nuevo ese boton lo detenga mostrando el ultimo tiempo registrado, e intentado de distintas formas pero no e logrado que el tiempo se detenga
aqui el codigo del cronometro:
#include <16f887.h>
#fuses INTRC,NOPROTECT,NOLVP,NOWDT
#use delay (clock=8000000)
#include <stdlib.h>
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
void main()
{
int16 minutos=0 ;
int16 segundos=0;
int16 milisegundos=0;
int1 boton;
while(true)
{
boton=input_state(pin_b7);
milisegundos=milisegundos+1;
delay_ms(1);
if(milisegundos>=999)
{
milisegundos=0;
segundos=segundos+1;
}
if(segundos==59)
{
segundos=0;
minutos=minutos+1;
}
if(boton==1)
{
printf("%li : %li : %linr",minutos,segundos,milisegundos);
}
}
}
Vale, quizá adaptar el código hay muchas cosas que sobren, así que vamos a hacer algo sencillo. Lo primero ¿a qué velocidad va tu microcontrolador? Yo tenía un cristal de cuarzo externo de 20MHz, en tu código veo que tenías pensando uno de 8MHz interno (pero sin inicializar con setup_oscillator(OSC_8MHZ|OSC_INTRC);), te recomiendo que para cálculos de precisión uses un cristal externo ya que el calor de funcionamiento del propio PIC hace que el oscilador interno no sea tan preciso.
Por otro lado yo uso décimas de segundo, por eso el valor del timer1 es 59286, si quieres milésimas de segundo puedes usar esta calculadora que hice para medir los timers comunes de los pic: http://www.sistemasorp.es/blog/temporizadores_pic.html " onclick="window.open(this.href);return false; y verás que para 1ms sería un valor de 64911 para el divisor por 8.
Gracias por contestar
Tengo pensado utilizar un oscilador de 20MHZ, por lo cual debo utilizar #fuses HS, mostrar datos en LCD y también en pc utilizando un modulo bluetooth o un cable serial utilizando para ello un max232.
E cambiado el cristal de 8 por uno de 20, e utilizado la oscilación interna como externa y no e logrado hacer que muestre algo en pantalla, ni en simulación.