Write_Ds1302Byte(0x8f,0);
1。 sec = BCDToDEC(Read_DS1302Byte(SEC_READ));
Delay(100);
2。 min = BCDToDEC(Read_DS1302Byte(MIN_READ));
Delay(100);
3。 hour = BCDToDEC(Read_DS1302Byte(HOUR_READ));
Delay(100);
4。 day = BCDToDEC(Read_DS1302Byte(DATE_READ));
Delay(100);
5。 month = BCDToDEC(Read_DS1302Byte(MON_READ));
Delay(100);
6。 year = BCDToDEC(Read_DS1302Byte(YEAR_READ));
Delay(100);
每次读取时候只有1,3,5能显示正确,2,4,6显示不正确。不管怎么改读取的顺序,比如先读年再月日等等,都是只有1,3,5位置的能正确显示,2,4,6的不能。我加了延时还是不行,是怎么回事啊?大侠棒棒忙啊。
前面的1,2,3,4,5,6只是代表位置,这样好讲一点。实际程序中是没有的这几个数字
#define SEC_WRI 0x80
#define SEC_READ 0x81
#define MIN_WRI 0x82
#define MIN_READ 0x83
#define HOUR_WRI 0x84
#define HOUR_READ 0x85
#define DATE_WRI 0x86
#define DATE_READ 0x87
#define MON_WRI 0x88
#define MON_READ 0x89
#define WEEK_WRI 0x8A
#define WEEK_READ 0x8B
#define YEAR_WRI 0x8C
#define YEAR_READ 0x8D
定义没问题啊
建议用“连续读取”的模式,这样比单个数据读取省时间。
- #ifndef _DS1302_H_
- #define _DS1302_H_
- #include "const.h"
- #include "chiptypedef.h"
- /**********************************************
- 仅实现多字节读取模式,单字节和RAM的没有实现
- 仅实现24小时制模式,12小时制没实现
- ***********************************************/
- //更改为合适的位
- #define RST_PIN P3_2
- #define SCLK_PIN P3_3
- #define IO_PIN P3_4
- typedef struct tagBCDDATETIME //注意:字节顺序必须和burst的传输顺序一致
- {
- BYTE nSecond;
- BYTE nMinute;
- BYTE nHour;
- BYTE nDay;
- BYTE nMonth;
- BYTE nDayOfWeek;
- BYTE nYear;
- BYTE WriteProtect; // Before ANY write operation to the clock or RAM, bit 7 must be 0
- }BCDDATETIME;
- void InitDS1302();
- void SetDateTime(const BCDDATETIME* pBCDDateTime);
- void GetDateTime(BCDDATETIME* pBCDDateTime);
- ///////////////////////////////////////
- //
- typedef enum tagCOMMANDBYTE
- {
- SECOND_WRITE = 0x80,
- SECOND_READ,
- MINUTE_WRITE,
- MINUTE_READ,
- HOUR_WRITE,
- HOUR_READ,
- DATE_WRITE,
- DATE_READ,
- MONTH_WRITE,
- MONTH_READ,
- DAY_WRITE,
- DAY_READ,
- YEAR_WRITE,
- YEAR_READ,
- CONTROL = 0x8e, //控制寄存器
- TRICKLE_CHARGE = 0x90, //涓流充电设置
- CLOCK_BURST_WRITE = 0xbe, //burst模式传输字节
- CLOCK_BURST_READ = 0xbf,
- RAM_BURST_WRITE = 0xfe, //burst模式读写ram
- RAM_BURST_READ = 0xff,
- }COMMANDBYTE;
- static void WriteSingleCmdByte(COMMANDBYTE cmd, BYTE Data);
- static BYTE ReadSingleCmdByte(COMMANDBYTE cmd);
- static void WriteOneByte(BYTE byte);
- static BYTE ReadOneByte();
- #endif
SEC_READ等的定义有问题,
1xxxxxx1 每个间隔为2,即从0x81起+2=0x83,+2=0x85,+2=0x87
到0x8D