#include "p24FJ64GA002.h" #include //-----config _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF ) _CONFIG2( IESO_OFF & FNOSC_FRCPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_HS ) //--- unsigned long timed[4]; unsigned long y1; unsigned long m1; unsigned long d1; unsigned long h2; unsigned long m2; unsigned long s2; void lockfree(void); //RTCC設定シーケンス void soscok(void); //SOSC開始 void delay_us(int usec); //usec void delay_ms(int msec); //msec #define CLOCK 32 //----- main int main(void){ AD1PCFG = 0xFFFF; //Digital all CLKDIV = 0; TRISA = 0x001f; //RA all IN TRISB = 0x01d0; //RB5 OUT soscok(); //SOSC開始 lockfree(); //RTCC設定シーケンス RCFGCAL = 0xAC00; //RTCC on Start PADCFG1bits.RTSECSEL = 1; //RTCC Clock out RCFGCALbits.RTCPTR = 3; //RTCC access(Write) RTCVAL = 0x0007; //y RTCVAL = 0x1231; //m,d RTCVAL = 0x0423; //week,month RTCVAL = 0x5959; //min,sec RCFGCALbits.RTCWREN = 0; //RTCC設定終了ロック ALCFGRPT = 0x0000; //アラームoff IPC15bits.RTCIP = 5; IEC3bits.RTCIE = 1; //シリアル通信用ポート設定 RPINR18bits.U1RXR = 7; RPOR2bits.RP5R = 3; //ボーレート他通信設定 U1BRG = 51; // 19200 U1MODE = 0b1000100000000000; U1STA = 0b0000010000000000; while(1) { RCFGCALbits.RTCPTR = 3; //RTCC access(Read) timed[0] = RTCVAL; //y timed[1] = RTCVAL; //m,d timed[2] = RTCVAL; //week, hour timed[3] = RTCVAL; //min,sec //16ビットなので上位2桁、下位2桁の切り分けが必要 printf("\r\n"); //改行 y1 = timed[0]; y1 = 0x2000 + y1; printf("%lx",y1); //シリアル送信 年 m1 = timed[1]; m1 = m1 >> 8; //8回ローテート printf("/%lx",m1); //シリアル送信 月 d1 = timed[1]; d1 = d1 & 0x00ff; //上位8ビット削除 printf("/%lx",d1); //シリアル送信 日 printf(" "); //シリアル送信 スペース h2 = timed[2]; h2 = h2 & 0x00ff; printf("%lx",h2); //シリアル送信 時 m2 = timed[3]; m2 = m2 >> 8; printf(":%lx",m2); //シリアル送信 分 s2 = timed[3]; s2 = s2 & 0x00ff; printf(":%lx",s2); //シリアル送信 秒 delay_ms(1000); asm volatile("nop"); }//-----while }//---main void lockfree(void){ asm volatile("disi #5"); asm volatile("mov #0x55, w7"); asm volatile("mov w7, _NVMKEY"); asm volatile("mov #0xAA, w8"); asm volatile("mov w8, _NVMKEY"); asm volatile("bset _RCFGCAL, #13"); asm volatile("nop"); asm volatile("nop"); } void soscok(void){ asm("mov #OSCCON, w1"); asm("mov.b #0x32, w0"); asm("mov #0x46, w2"); asm("mov #0x57, w3"); asm("mov.b w2, [w1]"); asm("mov.b w3, [w1]"); asm("mov.b w0, [w1]"); } //----- usec_delay void delay_us(int usec){ usec = (int)(CLOCK*usec)/40; while(usec){ asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); usec--; } } //----- msec delay void delay_ms(int msec){ int i; for(i=0;i