Hola a todos cómo van?
Pues he estado trabajando en este reloj; pero tengo problemas para anexarlo a otro programa principal, lo que quiero hacer es vincularlo con el menú de otro programa para que por ejemplo cuando yo oprima una tecla, el reloj se active o se detenga, y pueda tener la capacidad de reanudar el conteo....así como está el algoritmo actualmente; comienza a contar automáticamente y lo que necesito es poder controlarlo....
Agradezco si alguno de ustedes me puede ayudar con éste programa.....
Un saludo...........
NOTA:
El código del que les hablo es el siguiente
#include <16f877a.h> // Selecciona el PIC
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT // Opciones de configuración
#use standard_io(C) // PORTB en estandar IO digital
#use fixed_io(c_outputs=PIN_C0,PIN_C1,PIN_C2,PIN_C3,PIN_C4,PIN_C5,PIN_C6,PIN_C7)
#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz
#include <kbd.c>
char const RTCCxS=15; // Número de RTCC's para 1 segundo con 4 Mhz / 1:256.
// VARIABLES GLOBALES
int nRTCC=0x00; // Contador de interrupciones RTCC completas
int segundo=0x0; // Segundos del Reloj
int minuto=0x0; // Minutos del Reloj
int D1=0x00; // Contenido de los Displays
int D2=0x00;
int D3=0x00;
int D4=0x00;
int l_digit, h_digit; // Resultado de la conversión bin2bcd
int i,tecla; // index general
void testdisplays(void); // Función que testea los displays
void display_reloj(void); // Función que muestra el contenido del reloj
void time2bcd(void); // Función que convierte minutos y segundos a 4 x BCD
void bin2bcd(int bcd); // Función que convierte de Binario a BCD
void reloj(void);
#int_RTCC // Interrupción por desbordamiento
RTCC_isr() { // del TIMER0 RTCC
if(++nRTCC==RTCCxS){
nRTCC=0x00;
if(++segundo>59){
segundo=0;
}
}
}
void main() {
kbd_init();
tecla=kbd_getc();
if (tecla=='C'){
reloj();
}
}
void reloj(void){
int ksegundo=0x00;
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); // TIMER0: Clock Interno y Preescaler
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RTCC);// Habilito Interrupción RTCC
enable_interrupts(global); // Habilito Interrupciones
do{ // Bucle infinito
if(segundo!=ksegundo){ // si cambia el segundo actualizo las
time2bcd(); // variables con lo que hay que mostrar
ksegundo=segundo;
}
display_reloj(); // Muestra constantemente
}While(TRUE);
}
//}
void display_reloj(void){ // Función que muestra el contenido del reloj
output_c(D1); // Muestro 1er carácter de segundo
output_high(PIN_C4);
delay_us(30);
output_c(D2); // Muestro 2do carácter de segundo
output_high(PIN_C5);
delay_us(30);
}
void time2bcd(void){ // Función convierte minutos y segundos a 4 x BCD
bin2bcd(segundo); // Paso de binario a BCD el segundo y actualizo
D1 = l_digit; // contenido a mostrar
D2 = h_digit;
}
void bin2bcd(int bcd){ // Función que convierte de Binario a BCD
h_digit=0;
if (bcd>=10){
do{
bcd-=10;
h_digit++;
} while (bcd>=10);
}
l_digit=bcd;
}
Pues he estado trabajando en este reloj; pero tengo problemas para anexarlo a otro programa principal, lo que quiero hacer es vincularlo con el menú de otro programa para que por ejemplo cuando yo oprima una tecla, el reloj se active o se detenga, y pueda tener la capacidad de reanudar el conteo....así como está el algoritmo actualmente; comienza a contar automáticamente y lo que necesito es poder controlarlo....
Agradezco si alguno de ustedes me puede ayudar con éste programa.....
Un saludo...........
NOTA:
El código del que les hablo es el siguiente
#include <16f877a.h> // Selecciona el PIC
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT // Opciones de configuración
#use standard_io(C) // PORTB en estandar IO digital
#use fixed_io(c_outputs=PIN_C0,PIN_C1,PIN_C2,PIN_C3,PIN_C4,PIN_C5,PIN_C6,PIN_C7)
#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz
#include <kbd.c>
char const RTCCxS=15; // Número de RTCC's para 1 segundo con 4 Mhz / 1:256.
// VARIABLES GLOBALES
int nRTCC=0x00; // Contador de interrupciones RTCC completas
int segundo=0x0; // Segundos del Reloj
int minuto=0x0; // Minutos del Reloj
int D1=0x00; // Contenido de los Displays
int D2=0x00;
int D3=0x00;
int D4=0x00;
int l_digit, h_digit; // Resultado de la conversión bin2bcd
int i,tecla; // index general
void testdisplays(void); // Función que testea los displays
void display_reloj(void); // Función que muestra el contenido del reloj
void time2bcd(void); // Función que convierte minutos y segundos a 4 x BCD
void bin2bcd(int bcd); // Función que convierte de Binario a BCD
void reloj(void);
#int_RTCC // Interrupción por desbordamiento
RTCC_isr() { // del TIMER0 RTCC
if(++nRTCC==RTCCxS){
nRTCC=0x00;
if(++segundo>59){
segundo=0;
}
}
}
void main() {
kbd_init();
tecla=kbd_getc();
if (tecla=='C'){
reloj();
}
}
void reloj(void){
int ksegundo=0x00;
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); // TIMER0: Clock Interno y Preescaler
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RTCC);// Habilito Interrupción RTCC
enable_interrupts(global); // Habilito Interrupciones
do{ // Bucle infinito
if(segundo!=ksegundo){ // si cambia el segundo actualizo las
time2bcd(); // variables con lo que hay que mostrar
ksegundo=segundo;
}
display_reloj(); // Muestra constantemente
}While(TRUE);
}
//}
void display_reloj(void){ // Función que muestra el contenido del reloj
output_c(D1); // Muestro 1er carácter de segundo
output_high(PIN_C4);
delay_us(30);
output_c(D2); // Muestro 2do carácter de segundo
output_high(PIN_C5);
delay_us(30);
}
void time2bcd(void){ // Función convierte minutos y segundos a 4 x BCD
bin2bcd(segundo); // Paso de binario a BCD el segundo y actualizo
D1 = l_digit; // contenido a mostrar
D2 = h_digit;
}
void bin2bcd(int bcd){ // Función que convierte de Binario a BCD
h_digit=0;
if (bcd>=10){
do{
bcd-=10;
h_digit++;
} while (bcd>=10);
}
l_digit=bcd;
}