00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "pic24_all.h"
00031 #include <stdio.h>
00032
00033
00038 typedef union _unionRTCC {
00039 struct {
00040 uint8 yr;
00041 uint8 null;
00042 uint8 date;
00043 uint8 month;
00044 uint8 hour;
00045 uint8 wday;
00046 uint8 sec;
00047 uint8 min;
00048 }u8;
00049 uint16 regs[4];
00050 }unionRTCC;
00051
00052 unionRTCC u_RTCC;
00053
00054 uint8 getBCDvalue(char *sz_1) {
00055 char sz_buff[8];
00056 uint16 u16_bin;
00057 uint8 u8_bcd;
00058 outString(sz_1);
00059 inStringEcho(sz_buff,7);
00060 sscanf(sz_buff,"%d", (int *)&u16_bin);
00061 u8_bcd = u16_bin/10;
00062 u8_bcd = u8_bcd << 4;
00063 u8_bcd = u8_bcd | (u16_bin%10);
00064 return(u8_bcd);
00065 }
00066
00067 void getDateFromUser(void) {
00068 u_RTCC.u8.yr = getBCDvalue("Enter year (0-99): ");
00069 u_RTCC.u8.month = getBCDvalue("Enter month (1-12): ");
00070 u_RTCC.u8.date = getBCDvalue("Enter day of month (1-31): ");
00071 u_RTCC.u8.wday = getBCDvalue("Enter week day (0-6): ");
00072 u_RTCC.u8.hour = getBCDvalue("Enter hour (0-23): ");
00073 u_RTCC.u8.min = getBCDvalue("Enter min (0-59): ");
00074 u_RTCC.u8.sec = getBCDvalue("Enter sec(0-59): ");
00075 }
00076
00077
00078 void setRTCC(void) {
00079 uint8 u8_i;
00080 __builtin_write_RTCWEN();
00081 RCFGCALbits.RTCEN = 0;
00082 RCFGCALbits.RTCPTR = 3;
00083 for (u8_i=0;u8_i<4;u8_i++) RTCVAL = u_RTCC.regs[u8_i];
00084 RCFGCALbits.RTCEN = 1;
00085 RCFGCALbits.RTCWREN = 0;
00086 }
00087
00088 void readRTCC(void) {
00089 uint8 u8_i;
00090 RCFGCALbits.RTCPTR = 3;
00091 for (u8_i=0;u8_i<4;u8_i++) u_RTCC.regs[u8_i] = RTCVAL;
00092 }
00093
00094 void printRTCC(void) {
00095 printf ("day(wday)/mon/yr: %2x(%2x)/%2x/%2x, %02x:%02x:%02x \n",
00096 (uint16) u_RTCC.u8.date,(uint16) u_RTCC.u8.wday, (uint16) u_RTCC.u8.month,
00097 (uint16) u_RTCC.u8.yr, (uint16) u_RTCC.u8.hour, (uint16) u_RTCC.u8.min, (uint16) u_RTCC.u8.sec);
00098 }
00099
00100 int main(void) {
00101 __builtin_write_OSCCONL(OSCCON | 0x02);
00102 configBasic(HELLO_MSG);
00103 getDateFromUser();
00104 setRTCC();
00105 while (1) {
00106 while (!RCFGCALbits.RTCSYNC) doHeartbeat();
00107 readRTCC();
00108 printRTCC();
00109 DELAY_MS(30);
00110 }
00111 }