210 lines
6.6 KiB
Plaintext
210 lines
6.6 KiB
Plaintext
C51 COMPILER V9.60.7.0 IIC 03/10/2025 18:03:54 PAGE 1
|
||
|
||
|
||
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE IIC
|
||
OBJECT MODULE PLACED IN .\Objects\iic.obj
|
||
COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\driver\iic.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\driver;..\user) DEBUG
|
||
- OBJECTEXTEND PRINT(.\Listings\iic.lst) TABS(2) OBJECT(.\Objects\iic.obj)
|
||
|
||
line level source
|
||
|
||
1 /* # I2C莉」遐∫援谿オ隸エ譏<EFBDB4>
|
||
2 1. 譛ャ譁<EFBDAC>サカ螟ケ荳ュ謠蝉セ帷噪鬩ア蜉ィ莉」遐∽セ帛盾襍幃画焔螳梧<E89EB3>遞句コ剰ョセ隶。蜿り<E3828A><EFBFBD>
|
||
3 2.
|
||
4 蜿りオ幃画焔蜿ッ莉・閾ェ陦檎シ門<EFBDBC>逶ク蜈ウ莉」遐∵<E98190>莉・隸・莉」遐∽クコ蝓コ遑<E98191>梧<EFBFBD>ケ謐ョ謇騾牙黒迚<E9BB92>惻邀サ蝙九∬ソ占
|
||
-。碁溷コヲ蜥瑚ッ暮「<E69AAE>
|
||
5 荳ュ蟇ケ蜊慕援譛コ譌カ髓滄「醍紫逧<E7B4AB>ヲ∵アゑシ瑚ソ幄。御サ」遐∬ー<E288AC>ッ募柱菫ョ謾ケ縲<EFBDB9>
|
||
6 */
|
||
7 #include "iic.h"
|
||
8
|
||
9 #include "intrins.h"
|
||
10 #define DELAY_TIME 5
|
||
11 sbit scl = P2 ^ 0;
|
||
12 sbit sda = P2 ^ 1;
|
||
13 //
|
||
14 static void I2C_Delay(unsigned char n) {
|
||
15 1 do {
|
||
16 2 _nop_();
|
||
17 2 _nop_();
|
||
18 2 _nop_();
|
||
19 2 _nop_();
|
||
20 2 _nop_();
|
||
21 2 _nop_();
|
||
22 2 _nop_();
|
||
23 2 _nop_();
|
||
24 2 _nop_();
|
||
25 2 _nop_();
|
||
26 2 _nop_();
|
||
27 2 _nop_();
|
||
28 2 _nop_();
|
||
29 2 _nop_();
|
||
30 2 _nop_();
|
||
31 2 } while (n--);
|
||
32 1 }
|
||
33
|
||
34 //
|
||
35 void I2CStart(void) {
|
||
36 1 sda = 1;
|
||
37 1 scl = 1;
|
||
38 1 I2C_Delay(DELAY_TIME);
|
||
39 1 sda = 0;
|
||
40 1 I2C_Delay(DELAY_TIME);
|
||
41 1 scl = 0;
|
||
42 1 }
|
||
43
|
||
44 //
|
||
45 void I2CStop(void) {
|
||
46 1 sda = 0;
|
||
47 1 scl = 1;
|
||
48 1 I2C_Delay(DELAY_TIME);
|
||
49 1 sda = 1;
|
||
50 1 I2C_Delay(DELAY_TIME);
|
||
51 1 }
|
||
52
|
||
53 //
|
||
C51 COMPILER V9.60.7.0 IIC 03/10/2025 18:03:54 PAGE 2
|
||
|
||
54 void I2CSendByte(unsigned char byt) {
|
||
55 1 unsigned char i;
|
||
56 1
|
||
57 1 for (i = 0; i < 8; i++) {
|
||
58 2 scl = 0;
|
||
59 2 I2C_Delay(DELAY_TIME);
|
||
60 2 if (byt & 0x80) {
|
||
61 3 sda = 1;
|
||
62 3 } else {
|
||
63 3 sda = 0;
|
||
64 3 }
|
||
65 2 I2C_Delay(DELAY_TIME);
|
||
66 2 scl = 1;
|
||
67 2 byt <<= 1;
|
||
68 2 I2C_Delay(DELAY_TIME);
|
||
69 2 }
|
||
70 1
|
||
71 1 scl = 0;
|
||
72 1 }
|
||
73
|
||
74 //
|
||
75 unsigned char I2CReceiveByte(void) {
|
||
76 1 unsigned char da;
|
||
77 1 unsigned char i;
|
||
78 1 for (i = 0; i < 8; i++) {
|
||
79 2 scl = 1;
|
||
80 2 I2C_Delay(DELAY_TIME);
|
||
81 2 da <<= 1;
|
||
82 2 if (sda) da |= 0x01;
|
||
83 2 scl = 0;
|
||
84 2 I2C_Delay(DELAY_TIME);
|
||
85 2 }
|
||
86 1 return da;
|
||
87 1 }
|
||
88
|
||
89 //
|
||
90 unsigned char I2CWaitAck(void) {
|
||
91 1 unsigned char ackbit;
|
||
92 1
|
||
93 1 scl = 1;
|
||
94 1 I2C_Delay(DELAY_TIME);
|
||
95 1 ackbit = sda;
|
||
96 1 scl = 0;
|
||
97 1 I2C_Delay(DELAY_TIME);
|
||
98 1
|
||
99 1 return ackbit;
|
||
100 1 }
|
||
101
|
||
102 //
|
||
103 void I2CSendAck(unsigned char ackbit) {
|
||
104 1 scl = 0;
|
||
105 1 sda = ackbit;
|
||
106 1 I2C_Delay(DELAY_TIME);
|
||
107 1 scl = 1;
|
||
108 1 I2C_Delay(DELAY_TIME);
|
||
109 1 scl = 0;
|
||
110 1 sda = 1;
|
||
111 1 I2C_Delay(DELAY_TIME);
|
||
112 1 }
|
||
113
|
||
114 unsigned char Ad_Read(unsigned char addr) {
|
||
115 1 unsigned char temp;
|
||
C51 COMPILER V9.60.7.0 IIC 03/10/2025 18:03:54 PAGE 3
|
||
|
||
116 1 // 騾画叫闃ッ迚<EFBDAF>クコPCF
|
||
117 1 I2CStart();
|
||
118 1 I2CSendByte(0x90);
|
||
119 1 I2CWaitAck();
|
||
120 1 I2CSendByte(addr);
|
||
121 1 I2CWaitAck();
|
||
122 1
|
||
123 1 I2CStart();
|
||
124 1 I2CSendByte(0x91);
|
||
125 1 I2CWaitAck();
|
||
126 1 temp = I2CReceiveByte();
|
||
127 1 I2CSendAck(1);
|
||
128 1 I2CStop();
|
||
129 1 return temp;
|
||
130 1 }
|
||
131 // 謨ー蟄礼鳩蜴<E9B3A9>255->5V
|
||
132 void Da_Write(unsigned char dat) {
|
||
133 1 // 騾画叫闃ッ迚<EFBDAF>クコPCF
|
||
134 1 I2CStart();
|
||
135 1 I2CSendByte(0x90);
|
||
136 1 I2CWaitAck();
|
||
137 1 I2CSendByte(0x41);
|
||
138 1 I2CWaitAck();
|
||
139 1 I2CSendByte(dat);
|
||
140 1 I2CWaitAck();
|
||
141 1 }
|
||
142 void EEPROM_Write(unsigned char *str, unsigned char addr, unsigned char num) {
|
||
143 1 I2CStart();
|
||
144 1 I2CSendByte(0xa0);
|
||
145 1 I2CWaitAck();
|
||
146 1 I2CSendByte(addr);
|
||
147 1 I2CWaitAck();
|
||
148 1
|
||
149 1 while (num--) {
|
||
150 2 I2CSendByte(*str++);
|
||
151 2 I2CWaitAck();
|
||
152 2 I2C_Delay(200);
|
||
153 2 }
|
||
154 1 I2CStop();
|
||
155 1 I2C_Delay(255);
|
||
156 1 I2C_Delay(255);
|
||
157 1 I2C_Delay(255);
|
||
158 1 I2C_Delay(255);
|
||
159 1 }
|
||
160 void EEPROM_Read(unsigned char *str, unsigned char addr, unsigned char num) {
|
||
161 1 I2CStart();
|
||
162 1 I2CSendByte(0xa0);
|
||
163 1 I2CWaitAck();
|
||
164 1 I2CSendByte(addr);
|
||
165 1 I2CWaitAck();
|
||
166 1
|
||
167 1 I2CStart();
|
||
168 1 I2CSendByte(0xa1);
|
||
169 1 I2CWaitAck();
|
||
170 1 while (num--) {
|
||
171 2 *str++ = I2CReceiveByte();
|
||
172 2 if (num)
|
||
173 2 I2CSendAck(0);
|
||
174 2 else
|
||
175 2 I2CSendAck(1);
|
||
176 2 }
|
||
177 1 I2CStop();
|
||
C51 COMPILER V9.60.7.0 IIC 03/10/2025 18:03:54 PAGE 4
|
||
|
||
178 1 }
|
||
|
||
|
||
MODULE INFORMATION: STATIC OVERLAYABLE
|
||
CODE SIZE = 388 ----
|
||
CONSTANT SIZE = ---- ----
|
||
XDATA SIZE = ---- ----
|
||
PDATA SIZE = ---- ----
|
||
DATA SIZE = ---- 10
|
||
IDATA SIZE = ---- ----
|
||
BIT SIZE = ---- ----
|
||
END OF MODULE INFORMATION.
|
||
|
||
|
||
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|