📄 timer.lst
字号:
C51 COMPILER V8.02 TIMER 10/15/2008 11:59:32 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //寄存器宏定义
2 #include"at89x52.h"
3 #define WRITE_SECOND 0x80
4
5 #define WRITE_MINUTE 0x82
6
7 #define WRITE_HOUR 0x84
8
9 #define READ_SECOND 0x81
10
11 #define READ_MINUTE 0x83
12
13 #define READ_HOUR 0x85
14
15 #define WRITE_PROTECT 0x8E
16
17
18 //位寻址寄存器定义
19
20 sbit ACC_7 = ACC^7;
21
22 //管脚定义
23
24 sbit SCLK = P3^5; // DS1302时钟信号 7脚
25
26 sbit DIO= P3^6; // DS1302数据信号 6脚
27
28 sbit RST = P3^7; // DS1302片选 5脚
29
30
31 //地址、数据发送子程序
32
33 void Write1302 ( unsigned char addr,dat )
34
35 {
36 1
37 1 unsigned char i,temp;
38 1
39 1 RST=0; //CE引脚为低,数据传送中止
40 1
41 1 SCLK=0; //清零时钟总线
42 1
43 1 RST = 1; //CE引脚为高,逻辑控制有效
44 1
45 1 //发送地址
46 1
47 1 for ( i=8; i>0; i-- ) //循环8次移位
48 1
49 1 {
50 2
51 2 SCLK = 0;
52 2
53 2 temp = addr;
54 2
55 2 DIO = (bit)(temp&0x01); //每次传输低字节
C51 COMPILER V8.02 TIMER 10/15/2008 11:59:32 PAGE 2
56 2
57 2 addr >>= 1; //右移一位
58 2
59 2 SCLK = 1;
60 2
61 2 }
62 1
63 1
64 1
65 1 //发送数据
66 1
67 1 for ( i=8; i>0; i-- )
68 1
69 1 {
70 2
71 2 SCLK = 0;
72 2
73 2 temp = dat;
74 2
75 2 DIO = (bit)(temp&0x01);
76 2
77 2 dat >>= 1;
78 2
79 2 SCLK = 1;
80 2
81 2 }
82 1
83 1 RST = 0;
84 1
85 1 }
86
87
88 //数据读取子程序
89
90 unsigned char Read1302 ( unsigned char addr )
91
92 {
93 1
94 1 unsigned char i,temp,dat1,dat2;
95 1
96 1 RST=0;
97 1
98 1 SCLK=0;
99 1
100 1 RST = 1;
101 1
102 1 //发送地址
103 1
104 1 for ( i=8; i>0; i-- ) //循环8次移位
105 1
106 1 {
107 2
108 2 SCLK = 0;
109 2
110 2 temp = addr;
111 2
112 2 DIO = (bit)(temp&0x01); //每次传输低字节
113 2
114 2 addr >>= 1; //右移一位
115 2
116 2 SCLK = 1;
117 2
C51 COMPILER V8.02 TIMER 10/15/2008 11:59:32 PAGE 3
118 2 }
119 1
120 1 //读取数据
121 1
122 1 for ( i=8; i>0; i-- )
123 1
124 1 {
125 2
126 2 ACC_7=DIO;
127 2
128 2 SCLK = 0;
129 2
130 2 ACC>>=1;
131 2
132 2 SCLK = 1;
133 2
134 2 }
135 1
136 1 RST=0;
137 1
138 1 dat1=ACC;
139 1
140 1 dat2=dat1/16; //数据进制转换
141 1
142 1 dat1=dat1%16; //十六进制转十进制
143 1
144 1 dat1=dat1+dat2*10;
145 1
146 1 return (dat1);
147 1
148 1 }
149
150
151 //初始化DS1302
152
153 void Initial(void)
154
155 {
156 1
157 1 Write1302 (WRITE_PROTECT,0X00); //禁止写保护
158 1
159 1 Write1302 (WRITE_SECOND,0x56); //秒位初始化
160 1
161 1 Write1302 (WRITE_MINUTE,0x34); //分钟初始化
162 1
163 1 Write1302 (WRITE_HOUR,0x12); //小时初始化
164 1
165 1 Write1302 (WRITE_PROTECT,0x80); //允许写保护
166 1
167 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 145 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -