📄 pcf8563.lst
字号:
C51 COMPILER V7.50 PCF8563 10/18/2005 14:13:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN pcf8563.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pcf8563.c DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include "globedef.h"
4 #include "pcf8563.h"
5 #include "delay.h"
6
7 /**--------------------------------------------------------------------------------
8 调用方式:void I2CStart(void) ﹫2001/07/0 4
9 函数说明:私有函数,I2C专用
10 ---------------------------------------------------------------------------------*/
11 void pcf8563_start(void)
12 {
13 1 // EA=0;
14 1 pcf8563_scl=1;
15 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
16 1 pcf8563_sda=1;
17 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
18 1 pcf8563_sda=0;
19 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
20 1 pcf8563_scl=0;
21 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
22 1 }
23
24 /**--------------------------------------------------------------------------------
25 调用方式:void I2CStop(void) ﹫2001/07/0 4
26 函数说明:私有函数,I2C专用
27 ---------------------------------------------------------------------------------*/
28 void pcf8563_stop(void)
29 {
30 1 pcf8563_scl=1;
31 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
32 1 pcf8563_sda=0;
33 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
34 1 pcf8563_sda=1;
35 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
36 1 pcf8563_scl=0;
37 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
38 1 // EA=1;
39 1 }
40
41 /**--------------------------------------------------------------------------------
42 调用方式:bit I2CAck(void) ﹫2001/07/0 4
43 函数说明:私有函数,I2C专用,等待从器件接收方的应答
44 ---------------------------------------------------------------------------------*/
45 void WaitAck(void)
46 {
47 1 // unsigned char errtime=255;//因故障接收方无ACK,超时值为255。
48 1 // pcf8563_sda = 1; //写1准备读
49 1 // _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
50 1 pcf8563_scl = 1;
51 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
52 1 // while(pcf8563_sda)
53 1 // {
54 1 // errtime--;
55 1 // if (!errtime)
C51 COMPILER V7.50 PCF8563 10/18/2005 14:13:31 PAGE 2
56 1 // {
57 1 // pcf8563_stop();
58 1 // // pcf8563Error=0xaa;
59 1 // }
60 1 // }
61 1 pcf8563_scl=0;
62 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
63 1 }
64
65 /**--------------------------------------------------------------------------------
66 调用方式:void SendAck(void) ﹫2001/07/0 4
67 函数说明:私有函数,I2C专用,主器件为接收方,从器件为发送方时,应答信号。
68 ---------------------------------------------------------------------------------*/
69 void SendAck(void)
70 {
71 1 pcf8563_sda = 0; _nop_();_nop_();_nop_();// send ack
72 1 //第9位clk
73 1 pcf8563_scl = 1;
74 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
75 1 pcf8563_scl = 0;
76 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
77 1
78 1 }
79
80 /**--------------------------------------------------------------------------------
81 调用方式:void I2CSend(uchar ch) ﹫2001/07/0 5
82 函数说明:私有函数,I2C专用
83 ---------------------------------------------------------------------------------*/
84 void pcf8563_sendbyte(unsigned char ch)
85 {
86 1 unsigned char i = 8;
87 1 while (i--)
88 1 {
89 2 pcf8563_scl=0;
90 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
91 2 pcf8563_sda=(bit)((ch&0x80) >> 7);
92 2 ch<<=1;
93 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
94 2 pcf8563_scl=1;
95 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
96 2 }
97 1 pcf8563_scl=0;
98 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
99 1
100 1 WaitAck();
101 1 }
102
103 /**--------------------------------------------------------------------------------
104 调用方式:uchar I2CReceive(void) ﹫2001/07/0 5
105 函数说明:私有函数,I2C专用
106 ---------------------------------------------------------------------------------*/
107 unsigned char pcf8563_receivebyte(void)
108 {
109 1 unsigned char i=8;
110 1 unsigned char ddata=0;
111 1
112 1 pcf8563_sda = 1; //写1为读做准备
113 1
114 1 while (i--)
115 1 {
116 2 ddata <<= 1;
117 2 pcf8563_scl = 0;
C51 COMPILER V7.50 PCF8563 10/18/2005 14:13:31 PAGE 3
118 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
119 2 pcf8563_scl = 1;
120 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
121 2 ddata |= (unsigned char)pcf8563_sda;
122 2 }
123 1 pcf8563_scl = 0;
124 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
125 1 SendAck();
126 1 return ddata;
127 1 }
128
129 /**--------------------------------------------------------------------------------
130 调用方式:void GetPCF8563(uchar firsttype,uchar count,uchar *buff) ﹫2001/08/0 7
131 函数说明:读取时钟芯片PCF8563的时间,设置要读的第一个时间类型firsttype,并设置读取
132 的字节数,则会一次把时间读取到buff中。顺序是:
133 0x02:秒/0x03:分/0x04:小时/0x05:日/0x06:星期/0x07:月(世纪)/0x08:年
134 ---------------------------------------------------------------------------------*/
135 void set_pcf8563(unsigned char time_type,unsigned char time_value)
136 {
137 1 pcf8563_start();
138 1
139 1 pcf8563_sendbyte(0xa2); //器件地址,写
140 1 pcf8563_sendbyte(time_type); //发送数据-时间类型
141 1 pcf8563_sendbyte(time_value); //发送设置时间值
142 1 pcf8563_stop();
143 1 }
144
145 unsigned char get_pcf8563(unsigned char time_type)
146 {
147 1 unsigned char time_value;
148 1
149 1 pcf8563_start();
150 1
151 1 pcf8563_sendbyte(0xa2);
152 1 pcf8563_sendbyte(time_type);
153 1
154 1 pcf8563_start();
155 1 pcf8563_sendbyte(0xa3); //器件地址,读
156 1 time_value = pcf8563_receivebyte();
157 1
158 1 pcf8563_stop();
159 1
160 1 return time_value;
161 1 }
162
163 void init_pcf8563(void)
164 {
165 1 pcf8563_start();
166 1 pcf8563_sendbyte(0xa2); //器件地址,写
167 1 pcf8563_sendbyte(0x00); //地址0为控制状态寄存器
168 1 pcf8563_sendbyte(0x00); //发送数据-普通模式,开启时钟
169 1 pcf8563_stop();
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 324 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
C51 COMPILER V7.50 PCF8563 10/18/2005 14:13:31 PAGE 4
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 + -