📄 iic.lst
字号:
C51 COMPILER V7.06 IIC 07/18/2004 12:07:16 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IIC.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.h>
2 #include <absacc.h>
3 #include <intrins.h>
4
5 sbit IIC_SDA=P1^4;//IIC的数据线
6 sbit IIC_SCL=P1^3;//IIC的时钟信号
7
8 void IIC_Delay(void)//延时
9 {
10 1 _nop_();
11 1 _nop_();
12 1 //_nop_();
13 1 //_nop_();
14 1 //_nop_();
15 1 //_nop_();
16 1 //_nop_();
17 1 }
18
19 void IIC_Start(void)//IIC的启动信号
20 {
21 1 IIC_SDA=1;
22 1 IIC_SCL=1;
23 1 IIC_Delay();
24 1 IIC_SDA=0;
25 1 IIC_Delay();
26 1 IIC_SCL=0;
27 1 IIC_Delay();
28 1 IIC_SDA=1;
29 1 IIC_Delay();
30 1 }
31
32 void IIC_End(void)//提供IIC的结束信号
33 {
34 1 IIC_SDA=0;
35 1 IIC_Delay();
36 1 IIC_SCL=1;
37 1 IIC_Delay();
38 1 IIC_SDA=1;
39 1 IIC_Delay();
40 1 }
41 void IIC_Write(unsigned char data1)//向IIC总线发送8位数据,并请求一个应答信号
42 {
43 1 unsigned char i;
44 1 for(i=0;i<8;i++)//向IIC总线发送8位数据
45 1 {
46 2 if((data1&128)==128) IIC_SDA=1;
47 2 else IIC_SDA=0;
48 2 IIC_Delay();
49 2 IIC_SCL=1;
50 2 data1=data1<<1;
51 2 IIC_Delay();
52 2 IIC_SCL=0;
53 2 IIC_Delay();
54 2 }
55 1 IIC_SDA=1;//请求一个应答信号
C51 COMPILER V7.06 IIC 07/18/2004 12:07:16 PAGE 2
56 1 }
57 unsigned char IIC_Read(void)//从IIC总线上读出一个8位的数
58 {
59 1 unsigned char i,j;
60 1 j=0;
61 1 for(i=0;i<8;i++)
62 1 {
63 2 j=j<<1;
64 2 IIC_SCL=1;
65 2 IIC_Delay();
66 2 if(IIC_SDA==1) j++;
67 2 IIC_SCL=0;
68 2 IIC_Delay();
69 2 }
70 1 return(j);
71 1 }
72 unsigned char IIC_RandomRead(unsigned char Address)//给定一个地址,从这个地址读出内容
73 {
74 1 unsigned char T_Byte;
75 1 bit Ack=1;
76 1 while(Ack==1) //dummy write ,select current address
77 1 {
78 2 IIC_Start();
79 2 IIC_Write(0xa2); /*写入写控制字*/
80 2 IIC_SCL=1;
81 2 IIC_Delay();
82 2 if(IIC_SDA)
83 2 Ack=1; //EEPROM busy,need retrs
84 2 else Ack=0; //EEPROM Acknowledge
85 2 IIC_SCL=0;
86 2 }
87 1 Ack=1; //设置地址
88 1 while(Ack==1)
89 1 {
90 2 IIC_Write(Address);
91 2 IIC_SCL=1;
92 2 IIC_Delay();
93 2 if(IIC_SDA==1) Ack=1;
94 2 else Ack=0;
95 2 IIC_SCL=0;
96 2 }
97 1 IIC_Start();
98 1 Ack=1;
99 1 while(Ack==1) //读指令
100 1 {
101 2 IIC_Write(0xa3); /*写入读控制字*/
102 2 IIC_SCL=1;
103 2 IIC_Delay();
104 2 if(IIC_SDA==1)
105 2 Ack=1;
106 2 else Ack=0;
107 2 IIC_SCL=0;
108 2 }
109 1 T_Byte=IIC_Read(); //从IIC总线上读出一个8位的数
110 1 IIC_SDA=1;//do not Acknowledge
111 1 IIC_Delay();
112 1 IIC_SCL=1;
113 1 IIC_Delay();
114 1 IIC_SCL=0;
115 1 IIC_Delay();
116 1 IIC_End();
117 1 return T_Byte;
C51 COMPILER V7.06 IIC 07/18/2004 12:07:16 PAGE 3
118 1 }
119 void IIC_RandomWrite(unsigned char Address,unsigned char Data) //给定一个地址和数据,将数据写入到地址中
120 {
121 1 bit Ack=1;
122 1 while(Ack==1)/*测试是否能写入*/
123 1 {
124 2 IIC_Start();
125 2 IIC_Write(0xa2);/*写入写控制字*/
126 2 IIC_SCL=1;
127 2 IIC_Delay();
128 2 if(IIC_SDA==1) Ack=1;
129 2 else Ack=0;
130 2 IIC_SCL=0;
131 2 }
132 1 IIC_Write(Address);/*写入8位地址*/
133 1 IIC_SCL=1;
134 1 IIC_Delay();
135 1 IIC_SCL=0;
136 1 IIC_Write(Data);/*写入数据*/
137 1 IIC_SCL=1;
138 1 IIC_Delay();
139 1 IIC_SCL=0;
140 1 IIC_End();/*送停止位,启动写入时序*/
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 246 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -