📄 i2c.lst
字号:
C51 COMPILER V7.06 I2C 11/05/2008 23:48:00 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.c BROWSE INCDIR(C:\EZST\EasyStudy51\ES51-II\Target\INC\) DEBUG OBJECTEX
-TEND
stmt level source
1
2 /*
3 File: I2C.c
4 说明: IIC总线操作
5 Author:wolfe
6 Data: 2008.10
7 */
8
9 #include "at89x52.h"
10 #include "ES51_II.h"
11 #include "es51_ii_lib.h"
12 #include <intrins.h>
13
14
15 #define DELAY_1US {_nop_();}
16
17
18 // 操作起始
19 void I2c_Start(void)
20 {
21 1 SDA = 1; // 发送起始条件的数据信号
22 1 SCL = 1;
23 1 DELAY_1US;
24 1 SDA = 0; // 发送起始信号
25 1 DELAY_1US;
26 1 SCL = 0; // 钳住I2C总线,准备发送或接收数据
27 1 }
28
29 // 操作结束
30 void I2c_Stop(void)
31 {
32 1 SDA = 0;
33 1 DELAY_1US;
34 1 SCL = 1;
35 1 DELAY_1US;
36 1 SDA = 1; // 发送I2C总线结束信号
37 1 DELAY_1US;
38 1 SDA = 1;; //
39 1 }
40
41 //写一个字节数据
42 void I2c_WrByte(unsigned char dat)
43 {
44 1 unsigned char i;
45 1
46 1 for(i=0;i!=8;i++) // 输出8位数据
47 1 {
48 2 if( dat & 0x80 )
49 2 SDA = 1;
50 2 else
51 2 SDA = 0;
52 2 DELAY_1US;
53 2 SCL = 1;
54 2 dat<<=1;
C51 COMPILER V7.06 I2C 11/05/2008 23:48:00 PAGE 2
55 2 DELAY_1US;
56 2 SCL = 0;
57 2 }
58 1 SDA = 1;
59 1 DELAY_1US;
60 1 SCL = 1; // 接收应答
61 1 DELAY_1US;
62 1 SCL = 0;
63 1 }
64
65
66 //读一个字节数据
67 unsigned char I2c_RdByte(void)
68 {
69 1 unsigned char dat,i;
70 1
71 1 SDA = 1;
72 1 dat=0;
73 1 for(i=0;i!=8;i++) // 输入8位数据
74 1 {
75 2 DELAY_1US; // 可选延时
76 2 SCL = 1;
77 2 DELAY_1US; // 可选延时
78 2 dat<<=1;
79 2 if( SDA )
80 2 dat++; // 输入1位
81 2 SCL = 0;
82 2 }
83 1 SDA = 1;
84 1 DELAY_1US;
85 1 SCL = 1; // 发出无效应答
86 1 DELAY_1US;
87 1 SCL = 0;
88 1 return(dat);
89 1 }
90
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 90 ----
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 + -