📄 at24c256.lst
字号:
C51 COMPILER V7.06 AT24C256 06/14/2003 10:03:08 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE AT24C256
OBJECT MODULE PLACED IN AT24C256.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AT24C256.c BROWSE DEBUG OBJECTEXTEND TABS(3)
stmt level source
1 #include "reg52.h"
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 sbit WP= P3^5;
7 sbit SDA=P3^7;
8 sbit SCL=P3^6;
9
10 bit ACK;
11 void STOP_I2C();
12 void START_I2C();
13 void SENDBYTE(uchar c);
14 uchar RCVBYTE();
15 void ACK_I2C(bit A);
16 /*+++++++++++++++++++++++++
17 写数据到256中(SUB);
18 +++++++++++++++++++++++++*/
19 bit WRITE_256_SUB(uchar ADDR_CS,uchar ADDR_HI,uchar ADDR_LO,unsigned char *SP,unsigned int NO)
20 {
21 1 uchar idata I;
22 1 WP=0;
23 1 START_I2C();
24 1 SENDBYTE(ADDR_CS);
25 1 if(ACK==0){WP=1;return(0);}
26 1 SENDBYTE(ADDR_HI);
27 1 if(ACK==0){WP=1;return(0);}
28 1 SENDBYTE(ADDR_LO);
29 1 if(ACK==0){WP=1;return(0);}
30 1 for(I=0;I<NO;I++)
31 1 {
32 2 SENDBYTE(*SP);
33 2 if(ACK==0){WP=1;return(0);}
34 2 SP++;
35 2 }
36 1 STOP_I2C();
37 1 WP=1;
38 1 return(1);
39 1 }
40 /*++++++++++++++++++++++++++
41 从256中读数据(SUB);
42 ++++++++++++++++++++++++++*/
43 bit READ_256_SUB(uchar ADDR_CS,uchar ADDR_HI,uchar ADDR_LO,unsigned char *SP,unsigned int NO)
44 {
45 1 uchar idata I;
46 1 START_I2C();
47 1 SENDBYTE(ADDR_CS);
48 1 if(ACK==0){return(0);}
49 1 SENDBYTE(ADDR_HI);
50 1 if(ACK==0){return(0);}
51 1 SENDBYTE(ADDR_LO);
52 1 if(ACK==0){return(0);}
53 1 START_I2C();
54 1 SENDBYTE(ADDR_CS+1);
55 1 if(ACK==0){return(0);}
C51 COMPILER V7.06 AT24C256 06/14/2003 10:03:08 PAGE 2
56 1 for(I=0;I<(NO-1);I++)
57 1 {
58 2 *SP=RCVBYTE();
59 2 ACK_I2C(0);
60 2 SP++;
61 2 }
62 1 *SP=RCVBYTE();
63 1 ACK_I2C(1);
64 1 STOP_I2C();
65 1 return(1);
66 1 }
67 /*++++++++++++++++
68 空指令;
69 +++++++++++++++++*/
70 void _NOP(void)
71 {
72 1 _nop_();
73 1 }
74 /*++++++++++++++++
75 发送开始信号;
76 ++++++++++++++*/
77 void START_I2C()
78 {
79 1 SDA=1;
80 1 _NOP();
81 1 SCL=1;
82 1 _NOP();
83 1 SDA=0;
84 1 _NOP();
85 1 SCL=0;
86 1 _NOP();
87 1 }
88 /*+++++++++++++
89 发送停止信号;
90 ++++++++++++*/
91 void STOP_I2C()
92 {
93 1 SDA=0;
94 1 _NOP();
95 1 SCL=1;
96 1 _NOP();
97 1 SDA=1;
98 1 _NOP();
99 1 }
100 /*+++++++++++++
101 发送字节;
102 ++++++++++++++*/
103 void SENDBYTE(uchar c)
104 {
105 1 uchar idata bitcnt;
106 1 for(bitcnt=0;bitcnt<8;bitcnt++)
107 1 {
108 2 if((c<<bitcnt)&0x80)SDA=1;
109 2 else SDA=0;
110 2 _NOP();
111 2 SCL=1;
112 2 _NOP();
113 2 SCL=0;
114 2 }
115 1 _NOP();
116 1 SDA=1;
117 1 _NOP();
C51 COMPILER V7.06 AT24C256 06/14/2003 10:03:08 PAGE 3
118 1 SCL=1;
119 1 _NOP();
120 1 if (SDA==1)ACK=0;
121 1 else ACK=1;
122 1 SCL=0;
123 1 _NOP();
124 1 }
125 /*+++++++++++++++++
126 接收字节;
127 ++++++++++++*/
128 uchar RCVBYTE()
129 {
130 1 uchar idata RETC;
131 1 uchar idata bitcnt;
132 1 RETC=0;
133 1 SDA=1;
134 1 for(bitcnt=0;bitcnt<8;bitcnt++)
135 1 {
136 2 _NOP();
137 2 SCL=0;
138 2 _NOP();
139 2 SCL=1;
140 2 _NOP();
141 2 RETC=RETC<<1;
142 2 if(SDA==1)RETC=RETC+1;
143 2 _NOP();
144 2 }
145 1 SCL=0;
146 1 _NOP();
147 1 return(RETC);
148 1 }
149 /*+++++++++++++++++
150 应答信号;
151 ++++++++++++++*/
152 void ACK_I2C(bit A)
153 {
154 1 if (A==0) SDA=0;
155 1 else SDA=1;
156 1 _NOP();
157 1 SCL=1;
158 1 _NOP();
159 1 SCL=0;
160 1 _NOP();
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 393 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
IDATA SIZE = ---- 5
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -