📄 eeprom.lst
字号:
C51 COMPILER V8.02 EEPROM 04/16/2008 22:07:30 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE eeprom.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "eeprom.h"
2 void start_24c16(void)
3 {
4 1 SDA=1;_nop_();
5 1 SCL=1;
6 1 _nop_(); _nop_();_nop_();_nop_();
7 1 SDA=0;
8 1 _nop_(); _nop_();_nop_();_nop_();
9 1 SCL=0;
10 1 _nop_();_nop_();
11 1 }
12
13 void stop_24c16(void)
14 {
15 1 SDA=0;
16 1 _nop_();_nop_();_nop_();_nop_();
17 1 SCL=1;
18 1 _nop_();_nop_();_nop_();_nop_();
19 1 SDA=1;
20 1 _nop_();_nop_();_nop_();_nop_();
21 1 }
22 /*-----------------------------------------------
23 调用方式:void ack(void)
24 函数说明:应答函数 ack低电平脉冲
25 -----------------------------------------------*/
26 void ack(void)
27 {
28 1 SCL=0;_nop_();
29 1 SDA=0;_nop_();
30 1 SCL=1;_nop_();_nop_();_nop_();_nop_();
31 1 SCL=0;_nop_();
32 1 SDA=1;_nop_();
33 1 }
34
35
36 /*-----------------------------------------------
37 调用方式:void no_ack(void)
38 函数说明:无需应答位,在读程序中用到
39 -----------------------------------------------*/
40 void no_ack(void)
41 {
42 1 SDA=1;_nop_();
43 1 SCL=1;_nop_();_nop_();_nop_();_nop_();
44 1 SCL=0;_nop_();
45 1 SDA=0;_nop_();
46 1 }
47 /*-----------------------------------------------
48 调用方式:write_8bit(uchar ch)
49 函数说明:写一个字节(8位)数据
50 -----------------------------------------------*/
51 void write_8bit(uchar ch)
52 {
53 1 uchar i=8;
54 1 SCL=0;_nop_();
55 1 while(i--)
C51 COMPILER V8.02 EEPROM 04/16/2008 22:07:30 PAGE 2
56 1 {
57 2 SDA=(bit)(ch&0x80);_nop_();
58 2 ch<<=1;
59 2 SCL=1;_nop_();_nop_();_nop_();_nop_();
60 2 SCL=0;_nop_();_nop_();_nop_();_nop_();
61 2 }
62 1 }
63 /*-----------------------------------------------
64 调用方式:void write24c16(uint address,uchar ddata)
65 函数说明:写数据到24c16的指定地址(字节写)
66 -----------------------------------------------*/
67 void write24c16(uint address,uchar ddata)
68 {
69 1 uchar ddd;
70 1 EA=0; //避免与串口通讯等中断冲突
71 1 ddd=((address&0x7ff)/256)<<1; //7ff=2048-1
72 1 ddd=ddd & 0x0e;//求出在第几页写
73 1 start_24c16();
74 1 write_8bit(0xA0|ddd); //A=1010器件地址高4位
75 1 ack();
76 1 write_8bit(address);
77 1 ack();
78 1 write_8bit(ddata);
79 1 ack();
80 1 stop_24c16();
81 1 EA=1;
82 1 }
83 /*----------------------------------------------
84 调用方式:uchar read24c16(uint address)
85 函数说明:读24c16指定地址数据(字节读)
86 -----------------------------------------------*/
87 uchar read24c16(uint address)
88 {
89 1 uchar data rdata;
90 1 uchar i=8;
91 1 uchar ddd;
92 1 EA=0; //避免与串口通讯等中断冲突
93 1 ddd=((address&0x7ff)/256)<<1;
94 1 ddd=ddd & 0x0e; //求出在第几页写
95 1 start_24c16();
96 1 write_8bit(0xA0|ddd);
97 1 ack();
98 1 write_8bit(address);
99 1 ack();//伪写 随机地址读前按定义伪写
100 1 start_24c16();
101 1 write_8bit(0xA1|ddd);//在指定的页读
102 1 ack();
103 1 while(i--)
104 1 {
105 2 rdata<<=1;
106 2 SCL=0;_nop_(); SCL=1;
107 2 if(SDA) rdata|=0x01;
108 2 }
109 1 no_ack();
110 1 stop_24c16();
111 1 EA=1;
112 1 return rdata;
113 1 }
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 EEPROM 04/16/2008 22:07:30 PAGE 3
CODE SIZE = 239 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
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 + -