Ciao, a tutti! sto facendo un primo programmino in linguaggio "C". però ho un problema su una funzione non saprei come risolverlo, vi chiedere gentilmente se mi dareste un cosiglio di come sistemare il codice.
queste è la funzione:
void incrementoConteggio() {// questa funzione la devo far richiamare dal timer
while (mills <= 86400000) { // ciclo per l'avvanzare del tempo
/**int fosc = 8; // frequenza oscillatore
int ft = fosc / 4; // frequenza timer
mills = 1 / (ft * 1000); // periodo timer in millesimi di secondi
*/mills++;
if (mills == 10) {
mills = 0;
cents++; // avanzo 1 centesimo
}
if (cents == 10) {
cents = 0;
decs++; // avanzo di 1 decimo
}
if (decs == 10) {
decs = 0;
sec++; // avanzo di 1 secondo
}
if (sec == 60) {
sec = 0;
min++; // avanzo di 1 minuto
}
if (min == 60) {
min = 0;
ore++; // avanzo di 1 ora
}
if (ore == 24) {
Azzera(); // azzero il tempo perchè sono passate 24 ore
}
visualizzaTempo();
}
}
void Azzera() { // funzione per azzera il cronometro
sec = 0;
min = 0;
ore = 0;
decs = 0;
cents = 0;
mills = 0;
}
void visualizzaTempo() { // funzione per visualizzare il tempo
printf("%02d : %02d : %02d : %02d : %02d : %02d \n", ore, min, sec,
decs, cents, mills);
}
questo è il risultato visualizzato a schermo:
00 : 03 : 27 : 07 : 07 : 00
00 : 03 : 27 : 07 : 07 : 01
00 : 03 : 27 : 07 : 07 : 02
00 : 03 : 27 : 07 : 07 : 03
00 : 03 : 27 : 07 : 07 : 04
00 : 03 : 27 : 07 : 07 : 05
00 : 03 : 27 : 07 : 07 : 06
00 : 03 : 27 : 07 : 07 : 07
00 : 03 : 27 : 07 : 07 : 08
00 : 03 : 27 : 07 : 07 : 09
l'incrementazione è giusta ma io vorrei che il risultato non ripetesse cosi tante volte ma che scrivesse
ad esempio:
00 : 03 : 27 : 07 : 07 : 00
ma che però ogni millisecondo che incrementa si modifichi. senza che ripeta la scritta tante volte quante sono i millisecondi.
il programma è un cronometro che dovrebbe misuare i millisecondi reali. spero sia giusto anche il
resto del programma:
#include <stdio.h>
#include <stdlib.h>
//#include <unistd.h>
/*#define BTN1 RD0 // pulsante 1
#define BTN2 RD1 // pulsante 2
#define BTN3 RD2 // pulsante 3
#define PIE1 RAE1 // interupt timer
#define INTCON RAE2 // tutti interupt*/
int sec = 0; // contatore dei secondi
int min = 0; // contatore dei minuti
int ore = 0; // contatore dei ore
int decs = 0; // contatore dei decimi di secondo
int cents = 0; // contatore dei centesimi secondo
int mills = 0; // contatore dei millesimi secondo
/*void avvioTempo() { // funzione per avviare il tempo nel cronometro
// inserisco il codice che abilita l'interrupt del timer
PIE1 = 0b00000001;
INTCON = 0b01000000;
}
void stoppaTempo() { // funzione per fermare il tempo nel cronometro
// inserisco il codice che disabilita l'interrupt del timer
PIE1 = 0b00000000;
INTCON = 0b01000001;
visualizzaTempo(); // visualizzo il tempo
}
void Riavvio() { // funzione per riavviare da capo il cronometro
stoppaTempo(); //stoppo il tempo
Azzera(); //azzero il tempo
avvioTempo(); // avvio il tempo
}
*/
main:
int main(int argc, char** argv) {
/* if(!BTN1){
avvioTempo(); // se premo il primo pulsante
sleep(2); // ritardo per antirimbalzo
}
if(!BTN2){
stoppaTempo();// se premo il secondo pulsante
sleep(2); // ritardo per antirimbalzo
}
if(!BTN3){
Riavvio();// se premo il terzo pulsante
sleep(2); // ritardo per antirimbalzo
} */
incrementoConteggio();
return (EXIT_SUCCESS);
}
il resto del programma ve lo scritto in modo molto sgangerato ma il codice ha un suo ordine cronologico, e lo messo commentato apposta perchè ora volevo provare la funzione incrementaConteggio(). ma ve lo posta in modo tale ke mi diate un giudizio sul programmino.
il programma lo scritto usanto MPLAB® X IDE. perhè deve girare su un microcontrollore (il PIC16F690 ) montanto su una apposita scheda elettronica e uttilizzando il pickkit2 come programmatore.