📄 eeprom.lst
字号:
C51 COMPILER V7.06 EEPROM 01/02/2000 11:14:26 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE EEPROM.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<intrins.h>
2 #include "EEPROM.h"
3 #include "C8051f.h"
4
5 extern unsigned char EEPROMTime;
6
7 sbit EEPROM_SDA = P2^2;
8 sbit EEPROM_SCL = P2^3;
9
10 sbit a0 = ACC^0;
11 sbit a1 = ACC^1;
12 sbit a2 = ACC^2;
13 sbit a3 = ACC^3;
14 sbit a4 = ACC^4;
15 sbit a5 = ACC^5;
16 sbit a6 = ACC^6;
17 sbit a7 = ACC^7;
18
19 void s24(void) //起始函数
20 {
21 1 EEPROM_SCL = 0;
22 1 EEPROM_SDA = 0;
23 1 _nop_();
24 1 EEPROM_SCL = 1;
25 1 EEPROM_SDA = 1;
26 1 _nop_();
27 1 EEPROM_SDA = 0;
28 1 _nop_();
29 1 EEPROM_SCL = 0;
30 1 }
31
32 void p24(void) //停止函数
33 {
34 1 EEPROM_SCL = 0;
35 1 EEPROM_SDA = 0;
36 1 _nop_();
37 1 EEPROM_SCL = 1;
38 1 _nop_();
39 1 EEPROM_SDA = 1;
40 1 _nop_();
41 1 EEPROM_SCL = 0;
42 1 EEPROM_SDA = 0;
43 1 }
44
45 unsigned char rd24(void) //从24c16读一字节数据
46 {
47 1 ACC = 0x00;
48 1 EEPROM_SDA = 0;
49 1 EEPROM_SCL = 0;
50 1 EEPROM_SCL = 1; a7 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
51 1 EEPROM_SCL = 1; a6 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
52 1 EEPROM_SCL = 1; a5 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
53 1 EEPROM_SCL = 1; a4 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
54 1 EEPROM_SCL = 1; a3 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
55 1 EEPROM_SCL = 1; a2 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
C51 COMPILER V7.06 EEPROM 01/02/2000 11:14:26 PAGE 2
56 1 EEPROM_SCL = 1; a1 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
57 1 EEPROM_SCL = 1; a0 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
58 1 EEPROM_SDA = 0;
59 1 EEPROM_SCL = 1; _nop_();_nop_();_nop_();_nop_();
60 1 EEPROM_SCL = 0; //24c16的一位回答位。
61 1 return(ACC);
62 1 }
63
64 void wd24(unsigned char dd) //向24c16写一字节数据
65 {
66 1 ACC = dd;
67 1 EEPROM_SDA = a7; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
68 1 EEPROM_SDA = a6; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
69 1 EEPROM_SDA = a5; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
70 1 EEPROM_SDA = a4; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
71 1 EEPROM_SDA = a3; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
72 1 EEPROM_SDA = a2; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
73 1 EEPROM_SDA = a1; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
74 1 EEPROM_SDA = a0; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
75 1 EEPROM_SCL = 1;
76 1 EEPROM_SCL = 0;
77 1 }
78 /*
79 unsigned char EEPROM_Read(unsigned int address)
80 {
81 unsigned char dd;
82
83 s24();
84 wd24(0xa0);
85 _nop_();_nop_();_nop_();_nop_();
86 EEPROM_SCL = 0;
87 wd24(address);
88 _nop_();_nop_();_nop_();_nop_();
89 EEPROM_SCL = 0;
90 s24();
91 wd24(0xa1);
92 EEPROM_SCL = 0;
93 dd = rd24();
94 p24();
95 return(dd);
96 }
97
98 void EEPROM_Write(unsigned int address,unsigned char dd)
99 {
100 s24();
101 wd24(0xa0);
102 EEPROM_SCL = 0;
103 wd24(address);
104 EEPROM_SCL = 0;
105 wd24(dd);
106 EEPROM_SCL = 0;
107 p24();
108 }
109 */
110
111 unsigned char EEPROM_Read(unsigned int address)
112 {
113 1 unsigned char dd;
114 1
115 1 dd = ((address&0x7ff)/256) << 1;
116 1 s24();
117 1 wd24(0xa0|dd);
C51 COMPILER V7.06 EEPROM 01/02/2000 11:14:26 PAGE 3
118 1 EEPROM_SCL = 0;
119 1 wd24(address);
120 1 EEPROM_SCL = 0;
121 1 s24();
122 1 wd24(0xa1|dd);
123 1 EEPROM_SCL = 0;
124 1 dd = rd24();
125 1 p24();
126 1 return(dd);
127 1 }
128
129 void EEPROM_Write(unsigned int address,unsigned char dd)
130 {
131 1 unsigned char ddd;
132 1 ddd = ((address & 0x7ff)/256) << 1;
133 1 s24();
134 1 wd24(0xa0|ddd);
135 1 EEPROM_SCL = 0;
136 1 wd24(address);
137 1 EEPROM_SCL = 0;
138 1 wd24(dd);
139 1 EEPROM_SCL = 0;
140 1 p24();
141 1 EEPROMTime = 0; //time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行
142 1 while (1)
143 1 {
144 2 s24();
145 2 wd24(0xa0|ddd);
146 2 EEPROM_SDA = 1;
147 2 if (EEPROM_SDA == 0) break;
148 2 if (EEPROMTime > 10) break; //此行防止由于eeprom器件损坏后的死循环
149 2 EEPROM_SCL = 0;
150 2 }
151 1 }
152
153
154
155
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 477 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 8 ----
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 + -