📄 pcf8563.lst
字号:
C51 COMPILER V9.01 PCF8563 07/28/2012 10:12:55 PAGE 1
C51 COMPILER V9.01, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN PCF8563.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8563.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "STC15F2K.h"
2 #include <intrins.H>
3
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 sbit scl=P1^6;
9 sbit sda=P1^7;
10
11
12
13 /*----------------------------------------------------------------------------&
14 I2C程序
15 ----------------------------------------------------------------------------&&*/
16
17
18 void delay_() //2us
19 {
20 1 unsigned char i;
21 1
22 1 i = 3;
23 1 while (--i);
24 1 }
25
26 void start()//IIC启动
27 {
28 1 sda=1;
29 1 delay_();
30 1 scl=1;
31 1 delay_();
32 1 sda=0;
33 1 delay_();
34 1 scl=0; //可以尝试屏蔽scl=0;
35 1 delay_();
36 1 }
37 void stop() //IIC结束
38 {
39 1 sda=0;
40 1 delay_();
41 1 scl=1;
42 1 delay_();
43 1 sda=1;
44 1 delay_();
45 1 scl=0; //可以尝试屏蔽scl=0;
46 1 delay_();
47 1 }
48 /*******************************************************************************
49 功能描述:主机应答
50 注:主设备(比如单片机),从 从设备(比如PCF8563)读取字节后,如果
51 要继续读取,就要给从设备一个ACK(即所谓的”应答“,数据位SDA为0)
52 *******************************************************************************/
53 void ack()
54 { uchar i;
55 1 sda=0;
C51 COMPILER V9.01 PCF8563 07/28/2012 10:12:55 PAGE 2
56 1 delay_();
57 1 scl=1; //在时钟线为高电平的情况下,数据线上的值(SDA=0)被写入到从机中
58 1 delay_();
59 1 while((sda==1)&&(i<250))i++;
60 1 scl=0;
61 1 delay_();
62 1 }
63 /*******************************************************************************
64 功能描述:主机无应答
65 注:主设备(比如单片机),从 从设备(比如PCF8563)读取字节后,如果不再
66 进行读取,就要给从设备一个NACK(即所谓的”无应答“,数据位SDA为1)
67 *******************************************************************************/
68 void nack()
69 { uchar i;
70 1 sda=1;
71 1 delay_();
72 1 scl=1; //在时钟线为高电平的情况下,数据线上的值被写入到从机中
73 1 while((sda==0)&&(i<250))i++;
74 1 delay_();
75 1 scl=0;
76 1 delay_();
77 1 }
78 /*******************************************************************************
79 功能描述:主设备检测从设备应答
80 返回说明:从设备的应答值
81 注:主设备向从设备写入字节后,要检测从设备发出的应答,
82 如果数据位SDA为0,说明向从设备成功写入了字节。1写入失败
83 *******************************************************************************/
84 uchar getack() //从机应答
85 {
86 1 uchar error;
87 1 sda=1; //为了后面能对数据线上的状态进行读取,51中要将IO
88 1 delay_(); //当做输入时,必须置为高电平
89 1 scl=1; //时钟为高时,从机发出应答信号
90 1 delay_();
91 1 error=sda; //对数据线上的状态进行读取并赋值给Error
92 1 delay_();
93 1 scl=0;
94 1 delay_();
95 1 return error;
96 1 }
97 /*******************************************************************************
98 功能描述:主设备向从设备写入一字节
99 参数说明:dat:将要写入的字节
100 返回说明:从设备的应答值
101 注:向从设备写入一个字节,并返回从设备的应答值
102 *******************************************************************************/
103 uchar writebyte(uchar dat)
104 {
105 1 uchar i;
106 1
107 1 for(i=0;i<8;i++)
108 1 {
109 2 sda=((dat<<i)&0x80);//先写字节的高位,赋值给数据线
110 2 scl=1; //SCL高电平时,数据线上的数据有效,被写入到从机中
111 2 delay_();
112 2 scl=0;
113 2 delay_();
114 2 }
115 1 return getack();//返回从机应答
116 1 }
117 /*******************************************************************************
C51 COMPILER V9.01 PCF8563 07/28/2012 10:12:55 PAGE 3
118 功能描述:主设备从从设备读取一字节
119 返回说明:读到的字节
120 *******************************************************************************/
121 uchar readbyte()
122 {
123 1 uchar i,rbyte=0;
124 1 scl=0;
125 1 delay_();
126 1 sda=1; //为了后面能对数据线上的状态进行读取
127 1 delay_();
128 1 for(i=0;i<8;i++)
129 1 {
130 2 scl=1; //在时钟线为高的情况下,从机在数据线上输出相应的位
131 2 delay_();
132 2 rbyte=(rbyte<<1)|sda;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -