📄 iic.lst
字号:
C51 COMPILER V7.50 IIC 12/01/2007 19:19:59 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************************/
2 /**
3 /** 模 块 名: -------------------IIC.C--------------------------------------
4 /** -----------------PCF8583实时时钟模块-------------------------*/
5 /** 功能描述:
6 /**
7 /** 创 建 人: huangtiexiong 日期:2006-11-28 */
8 /** 修 改 人: 日期:2006-11-28 */
9 /** 其他说明:
10 /******************************************************************************/
11
12 #include "Includes.h" //文件包含
13
14 /*************************************************
15 模块级变量申明
16 *************************************************/
17
18 //…………模块级变量申明在这
19 static void IIC_Start(void);
20 static void IIC_Stop(void);
21 static void IIC_TxByte(int8u tx_byte);
22 static int8u IIC_RxByte(void);
23 static bool IIC_WaitAck(void);
24 static void IIC_SendAck(void);
25 static void IIC_SendNoAck(void);
26
27 /*************************************************
28 子函数定义
29 *************************************************/
30
31 /*******************************************************************************
32 *** 函 数 名: static void IIC_Start(void)
33 *** 功能描述:
34 *** 全局变量: NO !
35 *** 输 入: NO !
36 *** 输 出: NO !
37 *** 创 建 人:huangtiexiong 日期:2006-11-28
38 *** 修 改 人: 日期:2006-11-28
39 *** 函数说明: Start IIC.
40 /******************************************************************************/
41 static void IIC_Start(void)
42 {
43 1 EA = 0; //关中断;
44 1 SDA = 1; //初始化总线;
45 1 SCL = 1;
46 1 NOP();
47 1 SDA = 0; //启动总线;
48 1 NOP();
49 1 SCL = 0; //准备数据发送,启动IIC之后传输线全部置0;
50 1 }
51 /*******************************************************************************
52 *** 函 数 名: static void IIC_TxByte(int8u tx_byte)
53 *** 功能描述: 发送一个字节;
54 *** 全局变量: NO !
55 *** 输 入: tx_byte
C51 COMPILER V7.50 IIC 12/01/2007 19:19:59 PAGE 2
56 *** 输 出: NO !
57 *** 创 建 人:huangtiexiong 日期:2006-11-28
58 *** 修 改 人: 日期:2006-11-28
59 *** 函数说明: 操作完成后保证SCL为0;
60 /******************************************************************************/
61 static void IIC_TxByte(int8u tx_byte)
62 {//SDA:0; SCL:0.
63 1 int8u i;
64 1 for(i=0;i<8;i++)
65 1 {
66 2 if(tx_byte & 0x80)
67 2 SDA = 1; //因为Start函数中以把SCL拉低,数据直接发送;
68 2 else
69 2 SDA = 0;
70 2 tx_byte <<= 1; //因为发送顺序:由Msb——>Lsb;
71 2 SCL = 1;
72 2 NOP(); //延时;
73 2 SCL = 0;
74 2 }
75 1 }
76 /*******************************************************************************
77 *** 函 数 名: static bool IIC_WaitAck(void)
78 *** 功能描述: 发送一个字节;
79 *** 全局变量: NO !
80 *** 输 入: tx_byte
81 *** 输 出: NO !
82 *** 创 建 人:huangtiexiong 日期:2006-11-28
83 *** 修 改 人: 日期:2006-11-28
84 *** 函数说明: 操作完成后保证SCL为0;
85 /******************************************************************************/
86 static bool IIC_WaitAck(void)
87 {//SDA:U; SCL:0.
88 1 int8u waitTime = 0xff; //设置Ack信号超时数;
89 1 SDA = 1; //将数据线拉高;
90 1 SCL = 1; //启动Ack脉冲;
91 1 NOP();
92 1 while(SDA)
93 1 {
94 2 waitTime--;
95 2 if(!waitTime)
96 2 {
97 3 SCL = 0; //SCL=0;
98 3 IIC_Stop();
99 3 return FALSE;
100 3 }
101 2 }
102 1 SCL = 0; //操作完成后确认SCL为0,此时SDA=0;
103 1 return TRUE;
104 1 }
105 /*******************************************************************************
106 *** 函 数 名: static int8u IIC_RxByte(void)
107 *** 功能描述: 接收一个字节;
108 *** 全局变量: NO !
109 *** 输 入: NO !
110 *** 输 出: 接收字节:tmp
111 *** 创 建 人:huangtiexiong 日期:2006-11-28
112 *** 修 改 人: 日期:2006-11-28
113 *** 函数说明: 操作完成后保证SCL为0;
114 /******************************************************************************/
115 static int8u IIC_RxByte(void)
116 {//SDA:0; SCL:0;
117 1 int8u tmp = 0;
C51 COMPILER V7.50 IIC 12/01/2007 19:19:59 PAGE 3
118 1 int8u i;
119 1 for(i=0;i<8;i++)
120 1 {
121 2 SCL = 0;
122 2 SDA = 1; //向I/O口写1后准备读入;
123 2 NOP();
124 2 SCL = 1;
125 2 NOP();
126 2 tmp <<= 1;
127 2 if(SDA)
128 2 {
129 3 tmp |= 0x01;
130 3 }
131 2 }
132 1 SCL = 0; //SCL=0;
133 1 return tmp;
134 1 }
135 /*******************************************************************************
136 *** 函 数 名: static void IIC_SendAck(void)
137 *** 功能描述: 发送应答信号;
138 *** 全局变量: NO !
139 *** 输 入: NO !
140 *** 输 出: NO !
141 *** 创 建 人:huangtiexiong 日期:2006-11-28
142 *** 修 改 人: 日期:2006-11-28
143 *** 函数说明: 操作完成后保证SCL为0;
144 /******************************************************************************/
145 static void IIC_SendAck(void)
146 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -