/// Read the current data from CMOS memory void kRTC::kReadRTCDate(WORD* pwYear, BYTE* pbMonth, BYTE* pbDayOfMonth, BYTE* pbDayOfWeek) { BYTE bData; // Set the register storing year // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_YEAR); // Read year from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pwYear = RTC_BCDTOBINARY(bData) + 2000; // Set the register storing month // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_MONTH); // Read month from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbMonth = RTC_BCDTOBINARY(bData); // Set the register storing day // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_DAYOFMONTH); // Read day from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbDayOfMonth = RTC_BCDTOBINARY(bData); // Set the register storing day of week // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_DAYOFWEEK); // Read week from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbDayOfWeek = RTC_BCDTOBINARY(bData); return; }
/// Read the current time from CMOS memory void kRTC::kReadRTCTime(BYTE* pbHour, BYTE* pbMinute, BYTE* pbSecond) { BYTE bData; // Set the register storing hour // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_HOUR); // Read hour from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbHour = RTC_BCDTOBINARY(bData); // Set the register storing minute // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_MINUTE); // Read minute from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbMinute = RTC_BCDTOBINARY(bData); // Set the register storing second // to CMOS memory address register (port 0x70) a_pclPort->kOutPortByte(RTC_CMOSADDRESS, RTC_ADDRESS_SECOND); // Read second from CMOS data register (port 0x71) bData = a_pclPort->kInPortByte(RTC_CMOSDATA); *pbSecond = RTC_BCDTOBINARY(bData); return; }
void kReadRTCTime( BYTE* pbHour, BYTE* pbMinute, BYTE* pbSecond ) { BYTE bData; // CMOS 메모리 어드레스 레지스터(포트 0x70)에 시간을 저장하는 레지스터 지정 kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_HOUR ); // 데이터 레지스터에서 시간 얻어옴 bData = kInPortByte( RTC_CMOSDATA ); *pbHour = RTC_BCDTOBINARY( bData ); kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_MINUTE ); bData = kInPortByte( RTC_CMOSDATA ); *pbMinute = RTC_BCDTOBINARY( bData ); kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_SECOND ); bData = kInPortByte( RTC_CMOSDATA ); *pbSecond = RTC_BCDTOBINARY( bData ); }
void kReadRTCDate( WORD* pwYear, BYTE* pbMonth, BYTE* pbDayOfMonth, BYTE* pbDayOfWeek ) { BYTE bData; kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_YEAR ); bData = kInPortByte( RTC_CMOSDATA ); *pwYear = RTC_BCDTOBINARY( bData ) + 2000; kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_MONTH ); bData = kInPortByte( RTC_CMOSDATA ); *pbMonth = RTC_BCDTOBINARY( bData ); kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_DAYOFMONTH ); bData = kInPortByte( RTC_CMOSDATA ); *pbDayOfMonth = RTC_BCDTOBINARY( bData ); kOutPortByte( RTC_CMOSADDRESS, RTC_ADDRESS_DAYOFWEEK ); bData = kInPortByte( RTC_CMOSDATA ); *pbDayOfWeek = RTC_BCDTOBINARY( bData ); }