亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
DS12C887的C51驅(qū)動(dòng)
[打印本頁]
作者:
daniu
時(shí)間:
2014-12-26 21:17
標(biāo)題:
DS12C887的C51驅(qū)動(dòng)
DS12C887自帶電池,并且芯片內(nèi)部具有一定的掉電保存RAM,而且價(jià)格也還可以,因此使用的比較多。DS12C887地址與數(shù)據(jù)總線復(fù)用,因此與51接口方便,51的ALE接入DS12C887的ALE,51的讀信號(hào)RD接入DS12C887的DS,51的寫信號(hào)WR接入D12C887的RW即可。驅(qū)動(dòng)代碼如下:
#define YEANUM 6
#define MONNUM 5
#define DAYNUM 4
#define WEENUM 3
#define HOUNUM 2
#define MINNUM 1
#define SECNUM 0
extern unsigned char idata time[];
// DS12C887寄存器定義
#define RTCSECOND (*(volatile unsigned char xdata *)DS12C887ADR)
#define RTCSECONDALRM (*(volatile unsigned char xdata *)(DS12C887ADR+1))
#define RTCMINUTE (*(volatile unsigned char xdata *)(DS12C887ADR+2))
#define RTCMINUTEALRM (*(volatile unsigned char xdata *)(DS12C887ADR+3))
#define RTCHOUR (*(volatile unsigned char xdata *)(DS12C887ADR+4))
#define RTCHOURALRM (*(volatile unsigned char xdata *)(DS12C887ADR+5))
#define RTCWEEK (*(volatile unsigned char xdata *)(DS12C887ADR+6))
#define RTCDAY (*(volatile unsigned char xdata *)(DS12C887ADR+7))
#define RTCMONTH (*(volatile unsigned char xdata *)(DS12C887ADR+8))
#define RTCYEAR (*(volatile unsigned char xdata *)(DS12C887ADR+9))
#define RTCREGA (*(volatile unsigned char xdata *)(DS12C887ADR+10))
#define RTCREGB (*(volatile unsigned char xdata *)(DS12C887ADR+11))
#define RTCREGC (*(volatile unsigned char xdata *)(DS12C887ADR+12))
#define RTCCENTURY (*(volatile unsigned char xdata *)(DS12C887ADR+50))
unsigned char idata time[7];
void DS12C887Init(void)
{
// 關(guān)閉RTC
RTCREGA = 0x70; // 寄存器A
// 芯片停止工作, BIN模式, 24小時(shí)制, 在此期間初始化初始化時(shí)標(biāo)寄存器
RTCREGB = 0x86; // 寄存器B, 時(shí)標(biāo)寄存器用二進(jìn)制表示,為24小時(shí)工作模式
RTCSECOND = time[SECNUM]; // 0秒
RTCSECONDALRM = 0xff; // 秒鬧
RTCMINUTE = time[MINNUM]; // 0分
RTCMINUTEALRM = 0xff; // 分鬧
RTCHOUR = time[HOUNUM]; // 0時(shí)
RTCHOURALRM = 0xff; // 時(shí)鬧
RTCWEEK = time[WEENUM]; // 星期一
RTCDAY = time[DAYNUM]; // 一日
RTCMONTH = time[MONNUM]; // 一月
RTCYEAR = time[YEANUM]; // 05年
RTCCENTURY = 0x20; // 20世紀(jì)
time[0] = RTCREGC; // 寄存器C, 清楚C標(biāo)志
RTCREGA = 0x20; // 開啟RTC
RTCREGB = 0x06; // 芯片處于正常工作狀態(tài), BIN模式
}
void ReadTime(void)
{
do{
CLR_DOG;
time[0] = RTCREGA; // 判斷DS12C887是否處于更新周期
} while(time[0]&0x80);
time[SECNUM] = RTCSECOND;
time[SECNUM] = RTCSECOND; // 秒
time[MINNUM] = RTCMINUTE; // 分
time[HOUNUM] = RTCHOUR; // 時(shí)
time[WEENUM] = RTCWEEK; // 星期
time[DAYNUM] = RTCDAY; // 日
time[MONNUM] = RTCMONTH; // 月
time[YEANUM] = RTCYEAR; // 年
}
void WriteTime(void)
{
// 關(guān)閉RTC
RTCREGA = 0x70; // 寄存器A
RTCSECOND = time[SECNUM]; // 秒
RTCMINUTE = time[MINNUM]; // 分
RTCHOUR = time[HOUNUM]; // 時(shí)
RTCWEEK = time[WEENUM]; // 星期
RTCDAY = time[DAYNUM]; // 日
RTCMONTH = time[MONNUM]; // 月
RTCYEAR = time[YEANUM]; // 年
RTCREGA = 0x20; // 開啟RTC
}
// 設(shè)置定時(shí)時(shí)間
void SetAlarmClock(unsigned char hour, unsigned char minute, unsigned char second)
{
unsigned char tmp;
// 關(guān)閉RTC
RTCREGA = 0x70; // 寄存器A
// 芯片停止工作, BIN模式, 24小時(shí)制, 在此期間初始化初始化時(shí)標(biāo)寄存器
RTCREGB = 0x84; // 寄存器B
RTCSECONDALRM = second; // 秒鬧
RTCMINUTEALRM = minute; // 分鬧
RTCHOURALRM = hour; // 時(shí)鬧
tmp = RTCREGC; // 寄存器C, 清楚C標(biāo)志
RTCREGA = 0x20; // 開啟RTC
RTCREGB = 0x02; // 芯片處于正常工作狀態(tài), BCD模式
// BCD模式方便讀出顯示
}
復(fù)制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1