毕业论文设计
i +=2;
write1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/ }
//功能: 读取DS1302当前时间 void get1302(void) {
unsigned char i,time_bcd_temp[6]; unsigned char ucAddr = 0x81; for (i=0;i<7;i++) {
time_bcd_temp[i] = read1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */ ucAddr += 2; }
sec=time_bcd_temp[0]; min=time_bcd_temp[1]; hou=time_bcd_temp[2]; day=time_bcd_temp[3]; mon=time_bcd_temp[4]; yea=time_bcd_temp[6]; }
//连续6字节读出程序
void ds1302_read(unsigned char *ptr,unsigned char addr) {
unsigned char i;
第 31 页 共 48 页
毕业论文设计
}
addr=addr*2+0x0c1; for(i=0;i<6;i++) {
*(ptr+i)=read1302(addr); addr+=2; }
//连续6字节写入程序
void ds1302_write(unsigned char *ptr,unsigned char addr) { }
void Start1302(void) {
unsigned char temp; bit ea; ea=EA; EA=0;
第 32 页 共 48 页
unsigned char i;
addr=addr*2+0x0c0;
write1302(0x8e,0x00); //写保护置低(关闭) for(i=0;i<6;i++) {
write1302(addr,*(ptr+i)); addr+=2; }
write1302(0x8e,0x80); //写保护置高(打开)
毕业论文设计
temp=read1302(0x81); temp&=0x7f;
write1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ write1302(0x80,temp); write1302(0x90,0);
write1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/ EA=ea; }
//DS1302驱动程序结束
三、数据存储底层驱动程序
//ATC256引脚定义 sbit epr_sd=P3^3; sbit epr_sc=P3^2;
bdata unsigned char temp1; sbit temp1_0 = temp1^0; sbit temp1_7 = temp1^7;
//存储器驱动程序开始 void noack(void) {
epr_sd=1;
epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0; }
void ask() {
第 33 页 共 48 页
毕业论文设计
unsigned char i=0xff; epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1; do{
i--;
if(epr_sd==0) { epr_sc=0; i=0;
}
}while(i!=0); epr_sd=1; epr_sd=1; epr_sd=1; }
void stop() {
epr_sd=0; epr_sd=0; epr_sd=0; epr_sc=1; epr_sc=1; epr_sc=1; epr_sd=1; epr_sd=1; epr_sd=1; epr_sd=1;
第 34 页 共 48 页
毕业论文设计
}
///24c256 start void start() {
epr_sc=1; epr_sd=1; epr_sd=1;
epr_sd=0; epr_sd=0; epr_sc=0; }
void wrby(unsigned char x)
{ unsigned char i; epr_sc=0; }
//////////////24c256 rdby
unsigned char rdby() //从高位开始读出数据
第 35 页 共 48 页
temp1=x;
for(i=0;i<8;i++) //从高位开始传送数据 {
epr_sd=temp1_7;
temp1=temp1<<1; //左移一位 epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0; }