?? ds12c887的c51程序.c
字號:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
//DS12C887寄存器地址定義
#define M12887 XBYTE [0x3f00] //秒
#define MA12887 XBYTE [0x3f01] //秒報警
#define F12887 XBYTE [0x3f02] //分
#define FA12887 XBYTE [0x3f03] //分報警
#define S12887 XBYTE [0x3f04] //時
#define SA12887 XBYTE [0x3f05] //時報警
#define X12887 XBYTE [0x3f06] //星期
#define R12887 XBYTE [0x3f07] //日
#define Y12887 XBYTE [0x3f08] //月
#define N12887 XBYTE [0x3f09] //年
#define A12887 XBYTE [0x3f0a] //寄存器A,A.7—只讀判斷忙閑
#define B12887 XBYTE [0x3f0b] //寄存器B,B.7—控制工作狀態:0正常、1停止
// B.2—BCD碼或二進制選擇:0 二進制
// B.1—24/12小時模式選擇:1 24小時進制
#define C12887 XBYTE [0x3f0c] //寄存器C 標志位在讀寄存器C后清0
#define D12887 XBYTE [0x3f0d] //寄存器D 只讀,讀取該寄存器可使設置的時間和工作模式生效
//DS12C887相關變量定義
uchar year;
uchar month;
uchar day;
uchar hour;
uchar minute;
uchar second;
void CLK_BSY(void);
void RD_DATA(void);
void WR_DATA(void);
void main() //主程序
{
year = 9; //寫入時間:2009年06月1日13時24分35秒(要設定的時間)
month = 6;
day = 1;
hour = 13;
minute = 24;
second = 35;
WR_DATA(); //寫入
RD_DATA(); //讀取的時間數據在變量year/month/day/hour/minute/second中
}
void CLK_BSY(void) //時鐘判斷忙閑
{
while(A12887&0x80); //忙則循環等待
}
void RD_DATA(void) //時鐘讀數據
{
CLK_BSY(); //忙則等待
year = N12887; //讀年
CLK_BSY();
month = Y12887; //讀月
CLK_BSY();
day = R12887; //讀日
CLK_BSY();
hour = S12887; //讀時
CLK_BSY();
minute = F12887; //讀分
CLK_BSY();
second = M12887; //讀秒
}
void WR_DATA(void) //時鐘寫數據
{
uchar i;
B12887 = 0x82; //芯片更新禁止 禁止中斷 無方波輸出 二進制編碼 24進制
N12887 = year; //寫年
Y12887 = month; //寫月
R12887 = day; //寫日
S12887 = hour; //寫時
F12887 = minute; //寫分
M12887 = second; //寫秒
A12887 = 0x20; //振蕩器開啟并且保持時鐘運行 無方波輸出
i= C12887; //標志位在讀寄存器C后清0
i= D12887; //使設置的時間和工作模式生效
B12887 = 0x02; //芯片更新正常進行
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -