单片机MSP430F149-DS1302读写及串口收发程序
- 格式:doc
- 大小:74.50 KB
- 文档页数:12
DS1302原理及程序说明DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM ,通过简单的串行接口与单片机进行通信。
实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。
DS1302 与单片机之间能简单地采用同步串行的方式进行,DS1302的引脚命名如图1-1所示。
通信仅需用到三根信号线:(1)CE 片选,(2)I/O 数据线,(3)SCLK 串行时钟,DS1302与CPU 的连接如图1-2所示。
时钟/RAM 的读/写数据以一个字节或多字节的字符组方式通信,DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW 。
DS1302具有双电源管脚,用于主电源和备份电源供应Vcc1,为可编程涓流充电电源附加七个字节存储器,它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域。
DS1302主要的性能指标如下:实时时钟具有能计算2100 年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力31× 8 位暂存数据存储RAM 串行I/O 口方式,使得管脚数量最少宽范围工作电压2.0~ 5.5V工作电流2.0V 时,小于300nA读/写时钟或RAM 数据时有两种传送方式:单字节传送和多字节传送字符组方式8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配简单3 线接口与TTL 兼容Vcc=5V 。
DS1302的读写模式工作时序如图1-3和图1-4所示。
图1-3 单字节读模式图1-4 单字节写模式注:在多字节模式下,SCLK 发出同步脉冲,CS 须持续保持高电平直到多字节操作结束,图1-1 DS1302引脚图1-2 DS1302与CPU 接口DS1302内部寄存器的地址定义如表1-1所示。
表1-1 寄存器的地址及定义实验说明1. DS1302与51单片机的连接IO ——P2.7:串行数据输入/输出引脚SCLK ——P2.6:串行时钟引脚CE ——P2.4:片选CE2. LCD 与单片机连接;************************************************************************* ; LCD Module LMB1602 与单片机连接:;************************************************************************* ; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ;Vss Vdd V o RS R/W E D0 D1 D2 D3 D4 D5 D6 D7 BLA BLK ; 0V +5V 0V P32 P33 P34 ---------------- P1[0..7] ---------------- +5V 0V;*************************************************************************3. LCD 显示功能说明LCD1602显示格式如图1-5所示。
ds1302 与单片机的连接,51 单片机操作ds1302 流程
展示
在许多单片机系统中常需要一些与时间有关的控制这就有需要使用实时时钟,因为在测控系统中需要做一些特殊数据的记录及其出现时间的记
录。
那幺实时时钟就能够很好的解决这个问题,今天我们就来谈谈ds1302 与单片机之间是如何作用联系的,单片机又是如何对时钟芯片进行操作的,一
起来了解一下。
51 单片机操作ds1302 流程展示
DS1302 通过3 根线与MCU 连接串行数据发送,接收时钟信号由MCU 发送,可外接备用电池以便主电源断电后不丢失数据,并可编程对备用电源充电。
DS1302 的结构如下:。
模拟SPI数据传输的读写程序(时钟芯片DS1302为例)
本文是以时钟芯片DS1302为例子来分析时序图并写出代码。
DS1302是采用SPI三线接口与单片机进行同步通信。
重点分析单字节读时序,单字节写时序,寄存器读时序,寄存器写时序,并完成4个函数。
完整代码以及仿真图下载地址:
上图为寄存器读时序,为什么先贴出这个图呢,因为读寄存器包含了单字节的写以及单字节的读。
从图上可以看出,读DS1302的寄存器是先写入一个地址,然后再去读一个字节。
那么就可以根据这个图来完成单字节的读写时序分析以及代码的编写。
单字节写时序图1可以告诉我们,在时钟的上升沿是写入数据,是从低位开始写入。
还有一个需要注意的地方是写字节和读字节连接处,从图中可以看出,当最后一个位写入后,接下来的一个下降沿就开始读数据了,在代码编写时要注意这一点,不然读数据就会出错。
先看看下面的代码:
void dsWriteByte(u8 dat) //写入字节
{
u8 i;
for(i = 0;i 8;i++)
{
if(dat 0x01) ds1302IOStatu(1);
else ds1302IOStatu(0); //低位先写入,根据要写入的数据确定IO的电平
ds1302CLKStatu(0);
ds1302CLKStatu(1); //产生上升沿写入数据
dat = 1; //移位,准备下一位
}
} //写一个字节后,此时时钟脚是高电平。
DS1302读写程序(IIC总线)#include; //包含单片机寄存器的头文件#include; //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned intsbit SRT=P3^5;sbit IO=P3^4;sbit SCK=P3^6;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar miao,fen,shi,tian,yue,zhou,nian;uchar read_DS1302(uchar addr)//读DS1302子程序;{uchar dat,i,temp,j;SRT=0;SCK=0;IO=0;//必须先置低,否则易出错;SRT=1;for(i=0;i;>;1;SCK=1;_nop_();}// IO=1;//释放总线,以便接下来的读操作,//否则读出的数据永远都是0x00,//但因addr最高总是1,在传送最高位时,即IO=dat=1, //所以此句可以不要;for(j=0;j;>;=1;if(IO)temp=temp|0x80;SCK=1;_nop_();}SCK=0;//必须严格按时序拉低,不然出错;SRT=0;IO=1;//必须释放总线;return temp;}void write_DS1302(uchar add,uchar date)//写DS1302子程序;{uchar dat1,i,dat2,j;SRT=0;SCK=0;IO=0;SRT=1;_nop_();for(i=0;i;>;1;IO=dat1;SCK=1;_nop_();}for(j=0;j;>;1;IO=dat2;SCK=1;_nop_();}SCK=0;SRT=0;IO=1;}void delay(uint n) {while(n--);}void display(){uchar miao1,miao2,fen1,fen2,shi1,shi2; P0=0xff;P1=0x00;miao1=miao&0x0f;miao2=miao&0xf0;miao2=miao2>;>;4;fen1=fen&0x0f;fen2=fen&0xf0;fen2=fen2>;>;4;shi1=shi&0x0f;shi2=shi&0xf0;shi2=shi2>;>;4;P1=table[miao1];P0=0x7f;delay(200);P1=table[miao2];P0=0xbf;delay(200);P1=0x40;P0=0xdf;delay(200);P1=table[fen1];P0=0xef;delay(200);P1=table[fen2];P0=0xf7;delay(200);P1=0x40;P0=0xfb;delay(200);P1=table[shi1];P0=0xfd;delay(200);P1=table[shi2];P0=0xfe;delay(200);}void main(){//设置日期时间(2013/09/11,21:03:00,星期3);while(1){miao=read_DS1302(0x81);fen=read_DS1302(0x83);shi=read_DS1302(0x85);tian=read_DS1302(0x87);yue=read_DS1302(0x89);zhou=read_DS1302(0x8b);nian=read_DS1302(0x8d);//读取DS18B20数据; P2=miao;display();}}。
#include"ds1302.h"//---DS1302写入和读取时分秒的地址命令---////---秒分时日月周年最低位读写位;-------//uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//---DS1302时钟初始化2013年1月1日星期二12点00分00秒。
---////---存储顺序是秒分时日月周年,存储格式是用BCD码---//uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};/****************************************************************************** ** 函数名: Ds1302Write* 函数功能: 向DS1302命令(地址+数据)* 输入: addr,dat* 输出: 无******************************************************************************* /void Ds1302Write(uchar addr, uchar dat){uchar n;RST = 0;_nop_();SCLK = 0;//先将SCLK置低电平。
_nop_();RST = 1; //然后将RST(CE)置高电平。
_nop_();for (n=0; n<8; n++)//开始传送八位地址命令{DSIO = addr & 0x01;//数据从低位开始传送addr >>= 1;SCLK = 1;//数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();}for (n=0; n<8; n++)//写入8位数据{DSIO = dat & 0x01;dat >>= 1;SCLK = 1;//数据在上升沿时,DS1302读取数据_nop_();SCLK = 0;_nop_();}RST = 0;//传送数据结束_nop_();}/****************************************************************************** ** 函数名: Ds1302Read* 函数功能: 读取一个地址的数据* 输入: addr* 输出: dat******************************************************************************* /uchar Ds1302Read(uchar addr){uchar n,dat,dat1;RST = 0;_nop_();SCLK = 0;//先将SCLK置低电平。
msp430f149中文[最新] MSP430F149中文========================================第1页========================================MSP430单片机的开发及应用MSP430000263# 7100612003年7月西安邮电学院63# 710061陈小忠12004.9.6开始看,其实以前看过,忘记了。
再看~========================================第2页========================================MSP430单片机的开发及应用目录第一章概述第二章MSP430 F149语言介绍第一节开发环境及程序下载第二节语言介绍第三章MSP430F149资源的应用介绍及开发第一节中断介绍及存储器段介绍第二节硬件乘法器第三节P口第四节定时器及数模转换第五节时钟模块第六节USART 通信模块第七节比较器第八节模数转换第四章MSP430F149 开发板的介绍及测试第一节模数转换模块第二节传感器模块第三节外存和实时时钟模块第四节485和232模块第五节电源管理模块及晶振模块第六节PWM波形滤波西安邮电学院63# 710061 陈小忠2========================================第3页======================================== MSP430单片机的开发及应用MSP430是德州公司新开发的一类具有 16位总线的带FLASH的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址 ,寻址范围可达 64K,还可以外扩展存储器 .具有统一的中断管理 ,具有丰富的片上外围模块 , 片内有精密硬件乘法器、两个16位定时器、一个 14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和 FET(FLASH EMULATION TOOL) 的相连,不须另外的仿真工具 ,方便实用 ,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为 100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用 , 而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化,MSP430系列将会得到越来越多人的喜爱.通过两过多月的毕业设计 ,我对MSP430有了初步了解,对内部的硬件资源和自身的汇编语法进行了实验,并开发了一个应用板 ,并进行了调试.鉴于时间和能力有限,没能对所有的应用一一实验.MSP430 F149MSP430是德州公司的新产品 ,有独特的开发环境和自身语言 ,下面是我在毕业设计中对 F149的开发环境熟悉中遇到的一些问题的处理和汇编语言的用法及程序中遇到的问题的体会 .1.开发环境:在EW23环境下进行编程 ,汇编,连接,在C—SPY环境下进行调试 ,下载是在连接之后,调试之前,通过计算机的串口下载的.关于环境的操作 ,可以参考有关资料 , 其中可能遇到的问题及解决方法有:西安邮电学院63# 710061 陈小忠3========================================第4页======================================== MSP430单片机的开发及应用(1) .汇编是对源程序而言的 ,因此必须打开一个源文件才能汇编 ,而连接是对一个工程文件而言的,连接是对工程文件的所有源代码 (包括多个源文件)和数据的定位,因此连接必须打开一个工程文件才能连接.(2)连接中必须将库文件的路径改正确,且必须选定 C—SPY 的驱动方式 ,即在project 中的options 的xlink的include 下修改 (先选中 )xcl的库路径为$TOOLKIT_DIR$\icc430\msp430F149A.xcl , 选择C—SPY 的驱动 drive为simulator 或FLASH EMULATION TOOL ,当没连接430片子时可以选 simulator, 当连接430片子时,选FLASHEMULATION TOOL 进行在线下载调试 . (3)由于430支持汇编语言和 C语言两种语言 ,因此可以在一个工程文件中同时用两种语言 ,但建议用汇编语言 ,因为便于在调试时寻找逻辑和指令的联系及地址的定位正确与否.(4)在在线的C—SPY的调试中 ,单步需要将 Control 的Reatime 前的勾取消才能进行单步测试.(5)在线调试时 ,不能将58管脚(复位 /非屏蔽中断)外部变高 ,否则,会强制退出调试环境.2.程序下载原理及脱机工作原理:程序的在线调试是通过JATG口和F149片子的RST、TCK、TDI、TDO、TMS引脚按一定的时序串行的传递程序代码和数据的,调试指令的命令传递都是通过这些数据线和控制线传递的 , 下载时序可参见资料 1,其中的地址0FFFEH为复位向量的地址,它是程序遇到非屏蔽中断和程序启动的首要地址,地址中存放的是程序段开始的首地址 ,因此必须把程序段的首地址标号表示在中断向量中或程序伪指令的开头位置,否则,连接时将会出错 ,具体的表示方法在下一节中表示.程序的下载和在线调试的电源是通过计算机在JATG提供的,不须另外给加电源 .脱机工作时 ,是将F149的电源线上电 ,此时的复位时序同下载后在线复位的时序一样,只是时钟是通过 F149内部时钟 DCO提供的,上电后,程序将复位向量 0FFFE 中的地址装入 PC,PC开始从程序段的首地址开始执行.脱机工作启动不需要任何操作,只需上电即可 ,电压要大于 1.8v,一般取3v左右,另外,在脱机工作时 ,可以给RST端口加一个低电平脉冲以复位从程序开始重新执行.西安邮电学院63# 710061 陈小忠4========================================第5页======================================== MSP430单片机的开发及应用MSP430有自身语言,汇编语言也不同于其他类型的单片机 ,伪指令也是变幻魔测,但又很重要,下面是我毕业设计的一些尝试、出问题的地方 .也可参见资料。
DS1302时钟芯片读写详解DS1302时钟芯片读写详解2008-09-26 13:07/*DS1302读写程序(C51)*/sbit DS13CLK =P1^5; /*DS1302的SCLK脚脉冲*/ sbit DS13IO =P1^6; /*DS1302的IO脚数据*/ sbit DS13CS =P1^7; /*DS1302的RST脚片选*/ /*向DS1302写一个字节*/void _wds13byte(uchar _code){uchar i;DS13CLK =0;DS13CLK =0;for(i=0;i<8;i++){if(_code&0x01) DS13IO =1;else DS13IO =0;DS13CLK =1;DS13CLK =1;DS13CLK =0;DS13CLK =0;_code =_code >> 1;}}/*从DS1302读一个字节*/uchar _rds13byte(void){uchar i,_code;_code=0;DS13CLK =0;DS13CLK =0;DS13IO =1;for(i=0;i<8;i++){_code =_code >>1;if(DS13IO) _code =_code|0x80;DS13CLK =1;DS13CLK =1;DS13CLK =0;DS13CLK =0;}return _code;}/*读功能 _code读功能命令 */uchar readds1302(uchar _code){DS13CS =0; /*关闭DS1302*/DS13CLK =0;DS13CLK =0;DS13CS =1; /*使能DS1302*/_wds13byte(_code); /*读代码*/_code=_rds13byte(); /*返回读取数字*/ DS13CLK =1;DS13CS =0; /*关闭DS1302*/ return _code;}/*写功能 fp写的地址,_code写的内容*/ void writeds1302(uchar fp,uchar _code) {DS13CS =0; /*关闭DS1302*/DS13CLK =0;DS13CLK =0;DS13CS =1; /*使能DS1302*/_wds13byte(fp); /*写控制命令*/_wds13byte(_code); /*写入数据*/DS13CLK=1;DS13CS =0; /*关闭DS1302*/}/*******DS1302设置快速充电***************/void ds13_charg(void){writeds1302(0x8e,0x00); /*解除写保护*/writeds1302(0x90,0xa5); /*单二极管2K电阻充电*/writeds1302(0x8e,0x80); /*置位写保护*/};;;DS1302读写程序(汇编);;;;************************************************************** *******/T_CLK Bit P1.5 ;实时时钟时钟线引脚T_IO Bit P1.6 ;实时时钟数据线引脚T_RST Bit P1.7 ;实时时钟复位线引脚;**********************************************************;子程序名:Set1302;功能:设置DS1302 初始时间,并启动计时。
/********************************************************* 文件名称:* IIC.c* 文件说明:* 使用口线模拟IIC* 程序使用波特率为2400,程序运行时需要在pc机上使用一个串口* 接收发送程序,任意发送字符,接收的字符为十六进制时间数据* MSP-FET430P149 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2* L.TCH* Feb 2007* Built with IAR Embedded Workbench Version: 3.10A*******************************************************//*********************************************************/#include <MSP430X14X.h>/********************************************************** 定义*********************************************************/#define RST BIT7#define SDA BIT6#define SCLK BIT5char pbuf[7];char clok[7]={0x16,0x15,0x14,0x13,0x12,0x04,0x07};char cbuf;char bbuf;char *pda;char *pck;char *prg;/************************************************说明************************************************/void Port_Init(void);void Init_CLK(void);void Init_UART0(void);void RST_Enable(void);void RST_Disable(void);void SCLK_HI(void);void SCLK_LO(void);void WriteByte(char nVal);char ReadByte(void);void WriteTo1302(char nAddr, char nVal);char ReadFrom1302(char nAddr);void BurstWriteTime(char *pWClock);void BurstReadTime(char *pRClock);void BurstWriteRam(char *pWReg);void BurstReadRam(char *pRReg);void SetTime(char *pClock);void GetTime(char pTime[]);/***********************************************/void Port_Init(void){P1DIR |= RST; //设置CE为输出管脚P1DIR |= RST; //设置SCLK为输出管脚P1DIR |= SCLK;P2DIR |= 0x02; // Set P2.1 to output directionreturn;}void Init_CLK(void){unsigned int i;BCSCTL1 = 0X00; //将寄存器的内容清零//XT2震荡器开启//LFTX1工作在低频模式//ACLK的分频因子为1do{IFG1 &= ~OFIFG; // 清除OSCFault标志for (i = 0xFF; i > 0; i--);}while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1BCSCTL1 &= ~(XT2OFF + XTS); //open XT2, LFTX2 select low frequency //BCSCTL1 |= RSEL0 + RSEL1 + RSEL2; //DCO Rsel=7(Freq=3200k/25摄氏度)//BCSCTL1 |= 0x07;BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1return;}void Init_UART0(void){U0CTL = 0X00; //将寄存器的内容清零UCTL0|=SWRST;P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXDME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit characterUTCTL0 |= SSEL1; // UCLK = SMCLKUBR00 = 0xD3; // 3.58Mhz/2400 -1491UBR10 = 0x05; //UMCTL0 = 0x00; // no modulationUCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interruptIE1 &= ~UTXIE0; // Disable USART TX interrupt return;}void RST_Enable(void){P1OUT |= RST;return;}void RST_Disable(void){P1OUT &= ~(RST);return;}void SCLK_HI(void){P1OUT |= SCLK;return;}void SCLK_LO(void){P1OUT &= ~(SCLK);return;}/*-------------------------------* 功能: 写入1Byte数据* 调用:* 输入: nVal 写入的数据* 返回值: 无*------------------------------*/void WriteByte(char nVal){char i,j;char nTemp = nV al;char nSend;P1DIR |= SDA; //设置DATA为输出管脚_NOP();_NOP();_NOP();_NOP();for(i = 0; i < 8; i++) //发8位,从0位开始{nSend = (nTemp & 0x01);if(nSend == 1){P1OUT |= SDA;}else{P1OUT &= ~(SDA);}SCLK_HI();for(j = 10;j > 0;j--) ;SCLK_LO();for(j = 10;j > 0;j--) ;nTemp >>= 1; //从0位开始,发8位}return;}/*--------------------------------------* 功能: 读取1Byte数据* 调用:* 输入:* 返回值: nTemp*------------------------------------*/char ReadByte(void){char nTemp = 0;int i;int j;P1DIR &=~SDA; //设置DATA为输入管脚_NOP();_NOP();_NOP();_NOP();for(i = 0; i < 8; i++) //接受8位{SCLK_HI();for(j = 10;j > 0;j--);SCLK_LO();_NOP();_NOP();if(P1IN & SDA) //如果第i位是高电平置1{nTemp |= (0x01 << i);}for(j = 10;j > 0;j--);}return nTemp;}/*-----------------------------------------* 功能: 往DS1302写入1Byte数据* 调用:* 输入: nVal 写入的数据* 返回值: 无*------------------------------------------*/void WriteTo1302(char nAddr, char nVal){RST_Disable();SCLK_LO();RST_Enable();_NOP();_NOP();_NOP();_NOP();WriteByte(nAddr); //地址,命令WriteByte(nVal); //写1Byte数据SCLK_HI();RST_Disable();return;}/*-----------------------------------------* 功能: 从DS1302读取1Byte数据* 调用:* 输入:* 返回值: nDta*-----------------------------------------*/char ReadFrom1302(char nAddr){char nData;RST_Disable();SCLK_LO();RST_Enable();_NOP();_NOP();_NOP();_NOP();WriteByte(nAddr); //地址,命令nData = ReadByte(); //读1Byte数据SCLK_HI();RST_Disable();cbuf = nData; //return(nData);}/*-------------------------------------* 功能: 往DS1302写入时钟数据(多字节方式)* 调用:* 输入: pClock[]: 时钟数据地址格式为: 秒分时日月星期年控制* 8Byte (BCD码)* 返回值: 无*----------------------------------*/void BurstWriteTime(char *pClock){char i;WriteTo1302(0x8e,0x00); //控制命令,写操作.。
WP=0开写保护RST_Disable();SCLK_LO();RST_Enable();WriteByte(0xbe); //0xbe:时钟多字节写命令for (i = 8; i > 0; i--) //8Byte = 7Byte 时钟数据+ 1Byte 控制(即写保护){WriteByte(*pClock); //写1Byte数据pClock++;}SCLK_HI();RST_Disable();return;}/*-----------------------------------------* 功能: 读取DS1302时钟数据(多字节方式)* 调用:* 输入: pClock[]: 时钟数据地址格式为: 秒分时日月星期年控制* 8Byte (BCD码)* 返回值: ucDa :读取的数据*---------------------------------------*/void BurstReadTime(char *pClock){char i;RST_Disable();SCLK_LO();RST_Enable();WriteByte(0xbf); //0xbf:时钟多字节读命令for (i = 8; i > 0; i--){*pClock = ReadByte(); //读1Byte数据pClock++;}SCLK_HI();RST_Disable();return ;}/*-----------------------------------------* 功能: 往DS1302寄存器数写入数据(多字节方式)* 调用:* 输入: pReg: 寄存器数据地址* 返回值: 无*----------------------------------------*/void BurstWriteRam(char *pReg){char i;WriteTo1302(0x8e,0x00); //控制命令,WP=0,写操作RST_Disable();SCLK_LO();RST_Enable();WriteByte(0xfe); //0xfe:寄存器数据多字节写命令for (i = 31; i > 0; i--) //31Byte 寄存器数据{WriteByte(*pReg); //写1Byte数据pReg++;}SCLK_HI();RST_Disable();return;}/*------------------------------------------* 功能: 读取DS1302寄存器数据* 调用:* 输入: pReg: 寄存器数据地址* 返回值: 无*----------------------------------------*/void BurstReadRam(char *pReg){char i;RST_Disable();SCLK_LO();RST_Enable();WriteByte(0xff); //0xff:寄存器数据多字节读命令for (i = 31; i > 0; i--) //31Byte 寄存器数据{*pReg = ReadByte(); //读1Byte数据pReg++;}SCLK_HI();RST_Disable();return;}/*------------------------------------------* 功能: 设置初始时间(以单字节读写进行)* 调用:* 输入: pClock[]: 初始时间地址。