ds12887 走的巨慢 十几秒才动一下(付c51代码) 请指点 bow
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define DSA XBYTE[0xff0a] //寄存器A
#define DSB XBYTE[0xff0b] //寄存器B
#define DSC XBYTE[0xff0c] //寄存器C
#define DSD XBYTE[0xff0d] //寄存器D
sbit uip_bit=ACC^7;
uchar data date[6]={4,4,12,8,59,0}; //时
间输入和输出数组
uchar data at[6]={9,8,7,4,2,0};
//设置年月日的偏移量
uchar xdata *ds_addr=0xff00; //寄存器开始地址
void start_ds(void) //功能设置,开始计算时间
{
DSA=0x20; //选择时钟32.768kHz,无中断
ACC=DSC; //清除中断
ACC=DSD; //vrt=1,数据有效
DSB=0x06; //无中断,时标为bcd码。24小时制,芯片工作,06
是二进制输出,02是bcd输出
}
void w_ds(void) //设置状态函数
{
uchar i;
DSB=0x80; //设置set为1
for(i=0;i <6;i++)
*(ds_addr+at[i])=date[i];
}
void r_ds(void) //输出时间函数
{
uchar i;
do{ACC=DSA;}while (uip_bit); //判断UIP位,为0时才可以读出数据
for(i=0;i <6;i++)
date[i]=*(ds_addr+at[i]);
}
void main(void)
{
P1=0x0D; //ls138(0x05); //12
887片选选中
w_ds();
start_ds();
while(1)
{
_nop_();
r_ds();
_nop_();
}
_nop_();
}
发表时间:2004年4月13日10:05:31