程序如下:
- #define DS1302_RST P11 // 兼容之前的RST引脚
- #define DS1302_SDA P12 // 推挽输入/输出IO管脚
- #define DS1302_SCL P13 // 时钟
- void DS1302_WriteByte(uint8 dat)
- {
- uint8 i;
-
- for(i = 0; i < 8; i++)
- {
- DS1302_SDA = dat & 0x1;
- dat >>= 1; // 数据左移一位
-
- DS1302_SCL = 0;
- DS1302_SCL = 1;
- }
- }
- void DS1302_Write(uint8 address, uint8 dat)
- {
- DS1302_RST = 0;
- DS1302_SCL = 0;
- DS1302_RST = 1;
-
- DS1302_WriteByte(address);
- DS1302_WriteByte(dat);
-
- DS1302_SCL = 1;
- DS1302_RST = 0;
- }
- uint8 DS1302_Read(uint8 address)
- {
- uint8 i, dat = 0;
-
- DS1302_RST = 0;
- DS1302_SCL = 0;
- DS1302_RST = 1;
-
- DS1302_WriteByte(address);
- for(i = 0; i < 8; i++)
- {
-
-
- dat >>= 1; // 数据左移一位
- if(DS1302_SDA)
- dat = dat | 0x80;
-
- DS1302_SCL = 0;
- DS1302_SCL = 1;
- }
-
- DS1302_RST = 0;
- DS1302_SDA = 0;
- DS1302_SCL = 1;
-
- return dat;
- }
- void main()
- {
-
- // 初始化DS1302
- DS1302_RST = 0;
- DS1302_SCL = 0;
-
- // 设定年份
- DS1302_Write(0x8E, 0x00);
- DS1302_Write(0x8C, 0x20); // 2020年
- DS1302_Write(0x8E, 0x80);
-
- // 打印年份
- printf("%x", DS1302_Read(0x8D));
-
-
- while(1)
- {
复制代码
程序上来就设定一个年份,然后再读出来。但是一直都不对。来回整了一天了,请帮忙看一下哪里有问题。
|