📄 kw_rtc.lst
字号:
C51 COMPILER V7.50 KW_RTC 10/12/2007 17:05:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KW_RTC
OBJECT MODULE PLACED IN kw_rtc.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE kw_rtc.C OBJECTADVANCED OPTIMIZE(11,SIZE) REGFILE(.\nand_fw2k.ORC) BROWSE O
-RDER INCDIR(c:\cypress\usb\target\inc) DEFINE(NAND_2K) DEBUG
line level source
1 /**************************************************************************************
2 Copyright (C), 1988-1999, Xi'an Keyway Control & Measurement Technology Co., Ltd
3 FileName: kw_rtc.c
4 Description :rtc 接口模块。
5 Version :1.0
6 Function List :
7 History: // 历史修改记录
8 <author> <time> <version > <desc>
9 LigangWang 07/08/08 1.0 build this moudle
10 *************************************************************************************/
11
12 #include "globals.h"
13
14 #define SCLK_S IOE |= 1<<4 // 设时钟信号高
15 #define SCLK_C IOE &= ~(1<<4) // 设时钟信号低
16 #define IO1302_S IOE |= 1<<3 // 设io信号高
17 #define IO1302_C IOE &= ~(1<<3) // 设io信号低
18 #define RST1302_S IOE |= 1<<2 // 设复位信号高
19 #define RST1302_C IOE &= ~(1<<2) // 设复位信号低
20 #define IO1302_D ((IOE >> 3)&1) // 获取io信号电平
21
22 BYTE xdata RM_Curtime[8]; // 用于保存RTC时间
23
24 #define BCD2Byte(a) (((((a)&0xf0)>>4) * 10) + ((a)&0x0f)) // 转换BCD数到16进制
25
26
27 /*************************************************************************************
28 Function: Delay_1us
29 Description: 简单延时程序,延时不准确
30 Called By:
31 Input: Count @ BYTE,延时数
32 Output: N/A
33 Return: void
34 Others:
35 *************************************************************************************/
36 void Delay_1us(BYTE Count)
37 {
38 1 BYTE i;
39 1 for(;Count>0;Count--)
40 1 for(i=14;i>0;i--);
41 1 }
42
43 /*************************************************************************************
44 Function: Delay
45 Description: 简单延时程序,延时不准确
46 Called By:
47 Input: i @ BYTE,延时数
48 Output: N/A
49 Return: void
50 Others:
51 *************************************************************************************/
52 void Delay(BYTE i)
53 {
54 1 while(i--);
C51 COMPILER V7.50 KW_RTC 10/12/2007 17:05:49 PAGE 2
55 1 }
56
57 /*************************************************************************************
58 Function: RM_WriteDS1302
59 Description: DS1302写函数,用于写字节到指定地址
60 Called By:
61 Input: ADD @ BYTE: 地址
62 DAT @ BYTE: 数据
63 Output: N/A
64 Return: void
65 Others:
66 _________________________________________________________________
67 RST ____| |______
68 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
69 CLK _____| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_________
70
71 DAT -----R---a---a---a---a---a---C---2---d---d---d---d---d---d---d---d-------------
72 *************************************************************************************/
73 void RM_WriteDS1302(BYTE ADD,BYTE DAT)
74 {
75 1 BYTE i;
76 1
77 1 RST1302_C; // 复位信号清零
78 1 _nop_();
79 1 SCLK_C; // 时钟信号清零
80 1 _nop_();
81 1 RST1302_S; // 复位信号置高
82 1 Delay_1us(4);
83 1 for(i=0;i<8;i++) // 发送8位地址
84 1 {
85 2 SCLK_C;
86 2 Delay_1us(1);
87 2 if(ADD&0X01) // 发送一位到io信号线
88 2 IO1302_S;
89 2 else
90 2 IO1302_C;
91 2 ADD >>= 1; // 准备下一位
92 2 Delay(10);
93 2 SCLK_S; // 时钟上升沿,数据被发出
94 2 Delay_1us(1);
95 2 }
96 1
97 1 Delay_1us(1);
98 1 for(i=0;i<8;i++) // 发送8位数据,原理同地址
99 1 {
100 2 SCLK_C;
101 2 Delay_1us(1);
102 2 if(DAT&0X01)
103 2 IO1302_S;
104 2 else
105 2 IO1302_C;
106 2 DAT >>=1;
107 2 Delay(10);
108 2 SCLK_S;
109 2 Delay_1us(1);
110 2 }
111 1 RST1302_C; // 清复位
112 1 Delay_1us(4);
113 1 SCLK_C; // 清时钟
114 1 }
115
116 /*************************************************************************************
C51 COMPILER V7.50 KW_RTC 10/12/2007 17:05:49 PAGE 3
117 Function: RM_ReadDS1302
118 Description: DS1302读函数,用于从指定地址读取数据
119 Called By:
120 Input: ADD @ BYTE: 地址
121 Output: N/A
122 Return: BYTE 数据
123 Others:
124 _________________________________________________________________
125 RST ____| |______
126 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
127 CLK _____| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_________
128
129 DAT -----R---a---a---a---a---a---C---2-d---d---d---d---d---d---d---d-------------
130 *************************************************************************************/
131 BYTE RM_ReadDS1302(BYTE ADD)
132 {
133 1 BYTE i,temp;
134 1
135 1 temp=0;
136 1 RST1302_C;
137 1 _nop_();
138 1 SCLK_C;
139 1 _nop_();
140 1 RST1302_S;
141 1 Delay_1us(1);
142 1 for(i=0;i<8;i++) //循环发送1位,共8位地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -