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