initclock() /*时钟初始化*/
{
sclk_bit=0;
dswr(0x8f);/* 往控制寄存器写0x05*/
dswr(0x05);
dswr(0x90); /*往状态寄存器写0x01 */
dswr(0x01);
dswr(0x91); /*往涓流充电寄存器写0xa5*/
dswr(0xa5);
}
函数dswr 中用到参数uchar 是在C51 主程序开始定义的无符号字符:
#define unsigned char uchar
有了上述定义,整个程序都可以这样使用。
dswr(uchar ac) /*ACC中的数据从高位开始送入ds1305 */
{
uchar i;
clk_ce=1;
sdu_bit=1;
for (i=0;i<8;i++)
{
sdi_bit=(ac&0x80==0x80)?1:0;
sclk_bit=1;
sclk_bit=0;
ac=ac<<1;
}
}
4 时钟的读
uchar dsrd() /*读时钟*/
{
uchar i,j,ac=0,x;
clk_ce=1;
for (i=0;i<=7;i++)
{
sclk_bit=1;
j=2;
while (j--);
sclk_bit=0;
x=P2;
ac=(x&0x80)>>i|ac;/*高位在前,底位在后*/
}
return (ac);
clk_ce=0;
}
说明:因为DS1305为串行方式,每次输出1位,且高位在前,故上述程序用了向右移位再与原值相或的技巧来实现。
5 时钟的设置
clockset() /*时钟设置*/
{
uchar i,j;
sclk_bit=0;
dswr(0x8f);/* 往控制寄存器写0x05*/
dswr(0x05);
clk_ce=0;
sclk_bit=0;
for (i=0x80,j=0;i<=0x86;i++)
if(i!=0x83)
{
clk_ce=1;
dswr(i);/*address*/
dswr(y_m_d_h_m[5-j]);/*data*/
j++;
clk_ce=0;
}
clockwp();
}
本文关键字:无纸记录仪 综合-其它,单片机-工控设备 - 综合-其它