📄 ht1380.lst
字号:
C51 COMPILER V8.02 HT1380 07/11/2008 16:59:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE HT1380
OBJECT MODULE PLACED IN ht1380.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ht1380.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "ht1380.h"
3 #include "intrins.h" //_nop_在此头文件中定义
4
5 /********************************************************************
6 * 名称: v_RTInputByte
7 * 说明:
8 * 功能: 往HT1381写入1Byte数据(写单字节)
9 * 调用:
10 * 输入: ucDa 写入的数据
11 * 返回值: 无
12 ********************************************************************/
13 void v_RTInputByte(uchar ucDa)
14 {
15 1 ACC = ucDa;
16 1 T_IO=ACC0; T_CLK=1; delay(); T_CLK=0; delay();
17 1 T_IO=ACC1; T_CLK=1; delay(); T_CLK=0; delay();
18 1 T_IO=ACC2; T_CLK=1; delay(); T_CLK=0; delay();
19 1 T_IO=ACC3; T_CLK=1; delay(); T_CLK=0; delay();
20 1 T_IO=ACC4; T_CLK=1; delay(); T_CLK=0; delay();
21 1 T_IO=ACC5; T_CLK=1; delay(); T_CLK=0; delay();
22 1 T_IO=ACC6; T_CLK=1; delay(); T_CLK=0; delay();
23 1 T_IO=ACC7; T_CLK=1; delay(); T_CLK=0; delay();
24 1 }
25
26 /********************************************************************
27 * 名称: uchar uc_RTOutputByte
28 * 说明:
29 * 功能: 从HT1381读取1Byte数据(读单字节)
30 * 调用:
31 * 输入:
32 * 返回值: ACC
33 ***********************************************************************/
34 uchar uc_RTOutputByte(void)
35 {
36 1 T_IO=1; ACC0=T_IO; //为什么首字节置‘1’?
37 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC1=T_IO;
38 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC2=T_IO;
39 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC3=T_IO;
40 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC4=T_IO;
41 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC5=T_IO;
42 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC6=T_IO;
43 1 T_CLK=1; delay(); T_CLK=0; delay(); ACC7=T_IO;
44 1 return (ACC);
45 1 }
46
47 /********************************************************************
48 * 名称: v_W1381
49 * 说明: 先写地址,后写命令/数据
50 * 功能: 往HT1381写入数据
51 * 调用: v_RTInputByte()
52 * 输入: ucAddr: HT1381地址, ucDa: 要写的数据
53 * 返回值: 无
54 ***********************************************************************/
55 void v_W1381(uchar ucAddr, uchar ucDa)
C51 COMPILER V8.02 HT1380 07/11/2008 16:59:09 PAGE 2
56 {
57 1 T_RST = 0;
58 1 T_CLK = 0;
59 1 T_RST = 1;
60 1 v_RTInputByte(ucAddr); /* 地址,命令 */
61 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
62 1 T_CLK = 1;
63 1 T_RST =0;
64 1 }
65
66 /********************************************************************
67 * 名称: uc_R1381
68 * 说明: 先写地址,后读命令/数据
69 * 功能: 读取HT1381某地址的数据
70 * 调用: v_RTInputByte() , uc_RTOutputByte()
71 * 输入: ucAddr: HT1381地址
72 * 返回值: ucDa :读取的数据
73 ***********************************************************************/
74 uchar uc_R1381(uchar ucAddr)
75 {
76 1 uchar ucDa;
77 1 T_RST = 0;
78 1 T_CLK = 0;
79 1 T_RST = 1;
80 1 v_RTInputByte(ucAddr); /* 地址,命令 */
81 1 ucDa = uc_RTOutputByte(); /* 读1Byte数据 */
82 1 T_CLK = 1;
83 1 T_RST =0;
84 1 return(ucDa);
85 1 }
86
87 /********************************************************************
88 * 名称: v_Set1381
89 * 说明:
90 * 功能: 设置初始时间
91 * 调用: v_W1381()
92 * 输入: pSecDa: 初始时间地址(指针)。初始时间格式为: 秒 分 时 日 月 星期 年
93 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
94 * 返回值: 无
95 ***********************************************************************/
96 void v_Set1381(uchar *pSecDa)
97 {
98 1 uchar i;
99 1 uchar ucAddr = 0x80; //0x80,8个寄存器中首个寄存器的地址
100 1 v_W1381(0x8e,0x00); //0x8e控制命令(地址和命令),0x00数据,即令WP=0写允许
101 1 for(i =7;i>0;i--) //循环7次,依次写第0个--第7个寄存器
102 1 {
103 2 v_W1381(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
104 2
105 2 pSecDa++;
106 2 ucAddr +=2;
107 2 }
108 1 v_W1381(0x8e,0x80); //控制命令,WP=1,写保护(写禁止)
109 1 }
110
111 /********************************************************************
112 * 名称: v_Get1381
113 * 说明:
114 * 功能: 读取HT1381当前时间
115 * 调用: uc_R1381()
116 * 输入: ucCurtime: 保存当前时间地址(指针).当前时间格式为: 秒 分 时 日 月 星期 年
117 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
C51 COMPILER V8.02 HT1380 07/11/2008 16:59:09 PAGE 3
118 * 返回值: 无
119 ***********************************************************************/
120 void v_Get1381(uchar *ucCurtime)
121 {
122 1 uchar i;
123 1 uchar ucAddr = 0x81;
124 1 for (i=0;i<7;i++)
125 1 {
126 2 *ucCurtime = uc_R1381(ucAddr); /*格式为: 秒 分 时 日 月 星期 年 */
127 2 ucCurtime ++;
128 2 ucAddr += 2;
129 2 }
130 1 }
131
132 /*********************************************************************
133 *短暂延时函数
134 *********************************************************************/
135 void delay()
136 {
137 1 _nop_();
138 1 _nop_();
139 1
140 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 343 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -