C51 COMPILER V9.60.7.0 DS1302 03/10/2025 18:03:53 PAGE 1 C51 COMPILER V9.60.7.0, COMPILATION OF MODULE DS1302 OBJECT MODULE PLACED IN .\Objects\ds1302.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\driver\ds1302.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\driver;..\user) DE -BUG OBJECTEXTEND PRINT(.\Listings\ds1302.lst) TABS(2) OBJECT(.\Objects\ds1302.obj) line level source 1 /* # DS1302代码片段说明 2 1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。 3 2. 4 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运 -速度和试题 5 中对单片机时钟频率的要求,进行代码调试和修改。 6 */ 7 #include "ds1302.h" 8 9 #include "intrins.h" 10 sbit SDA = P2 ^ 3; 11 sbit RST = P1 ^ 3; 12 sbit SCK = P1 ^ 7; 13 // 14 void Write_Ds1302(unsigned char temp) 15 { 16 1 unsigned char i; 17 1 for (i = 0; i < 8; i++) 18 1 { 19 2 SCK = 0; 20 2 SDA = temp & 0x01; 21 2 temp >>= 1; 22 2 SCK = 1; 23 2 } 24 1 } 25 26 // 27 void Write_Ds1302_Byte(unsigned char address, unsigned char dat) 28 { 29 1 RST = 0; 30 1 _nop_(); 31 1 SCK = 0; 32 1 _nop_(); 33 1 RST = 1; 34 1 _nop_(); 35 1 Write_Ds1302(address); 36 1 Write_Ds1302(dat); 37 1 RST = 0; 38 1 } 39 40 // 41 unsigned char Read_Ds1302_Byte(unsigned char address) 42 { 43 1 unsigned char i, temp = 0x00; 44 1 RST = 0; 45 1 _nop_(); 46 1 SCK = 0; 47 1 _nop_(); 48 1 RST = 1; 49 1 _nop_(); 50 1 Write_Ds1302(address); 51 1 for (i = 0; i < 8; i++) 52 1 { 53 2 SCK = 0; C51 COMPILER V9.60.7.0 DS1302 03/10/2025 18:03:53 PAGE 2 54 2 temp >>= 1; 55 2 if (SDA) 56 2 temp |= 0x80; 57 2 SCK = 1; 58 2 } 59 1 RST = 0; 60 1 _nop_(); 61 1 SCK = 0; 62 1 _nop_(); 63 1 SCK = 1; 64 1 _nop_(); 65 1 SDA = 0; 66 1 _nop_(); 67 1 SDA = 1; 68 1 _nop_(); 69 1 return (temp); 70 1 } 71 // 十进制 11 -> 0x11 72 void Set_Rtc(unsigned char *ucRtc) 73 { 74 1 unsigned char i; 75 1 unsigned char temp; 76 1 Write_Ds1302_Byte(0x8e, 0x00); 77 1 Write_Ds1302_Byte(0x80, 0x80); 78 1 for (i = 0; i < 3; i++) 79 1 { 80 2 81 2 temp = (ucRtc[i] / 10) * 16 + ucRtc[i] % 10; 82 2 Write_Ds1302_Byte(0x84 - 2 * i, temp); 83 2 } 84 1 Write_Ds1302_Byte(0x8e, 0x80); 85 1 } 86 // 十进制 0x11 -> 11 87 void Read_Rtc(unsigned char *ucRtc) 88 { 89 1 unsigned char i; 90 1 unsigned char temp; 91 1 for (i = 0; i < 3; i++) 92 1 { 93 2 temp = Read_Ds1302_Byte(0x85 - 2 * i); 94 2 ucRtc[i] = temp / 16 * 10 + temp % 16; 95 2 } 96 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 222 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 6 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)