Modification et affichage de l'heure et de la date sur la liaison série. Cet exemple utilise un DS1339 sur bus I2C.
#include <avrio/led.h>
#include <avrio/delay.h>
#include <avrio/rtc.h>
#include <avrio/rtc_ds1339.h>
#include <avrio/term.h>
#include <avrio/tc.h>
#include <stdio.h>
#include <string.h>
#include <avr/pgmspace.h>
#define BAUDRATE 115200
#define PORT "tty0"
#define DS1339_ADDR (int)DS1339_BASE
static void
vAssert (bool test) {
if (test == false) {
for (;;) {
}
}
}
static void
prvvSetRtc (void) {
printf_P (PSTR ("\nDate (DDMMYYYY) ? "));
putchar ('/');
putchar ('/');
printf_P (PSTR ("\nJour (1=Dim..7=Sam) ? "));
printf_P (PSTR ("\nHeure (HHMMSS) ? "));
putchar (':');
putchar (':');
putchar ('\n');
vAssert (memcmp (&xSetTime, &xGetTime,
sizeof (
xRtcTime)) == 0);
}
static void
prvvPrintRtc (void) {
printf_P (PSTR (" - "));
putchar ('\n');
}
int
main (void) {
int c;
uint8_t ucWaitTime = 10;
stdout = serial_port;
stderr = serial_port;
stdin = serial_port;
sei();
printf_P (PSTR ("\n\nExemple RTC DS1339\n"));
printf_P (PSTR ("Date courante: "));
prvvPrintRtc();
printf_P (PSTR ("Modification Date ? (y/n) "));
while (ucWaitTime--) {
uint8_t ucCount = 10;
do {
c = getchar();
}
while ( (ucCount--) && (c == EOF));
if (c != EOF) {
if ( (c == 'y') || (c == 'Y')) {
prvvSetRtc();
}
break;
}
putchar ('.');
}
putchar ('\n');
for (;;) {
c = getchar();
if (c != EOF) {
prvvSetRtc();
}
prvvPrintRtc();
}
return 0;
}