您当前的位置:五五电子网电子知识单片机-工控设备综合-其它基于C51串行时钟DS1305在无纸记录仪中的实现 正文
基于C51串行时钟DS1305在无纸记录仪中的实现

基于C51串行时钟DS1305在无纸记录仪中的实现

点击数:7871 次   录入时间:03-04 11:54:21   整理:http://www.55dianzi.com   综合-其它
的用法,由C51头文件REG51.H定义,形式如下:
#include <reg51.h>
3
时钟初始化
DS1305的初始化主要有如下三个写操作:
往控制寄存器写0x05
往状态寄存器写0x01
往涓流充电寄存器写0xa5
对应的C51程序如下,该程序调用了子程序dswr(uchar ac)在其后说明:

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();
}

上一页  [1] [2] [3] [4]  下一页


本文关键字:无纸记录仪  综合-其它单片机-工控设备 - 综合-其它