📄 write2401a.lst
字号:
C51 COMPILER V6.23a WRITE2401A 08/22/2003 15:20:39 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE WRITE2401A
OBJECT MODULE PLACED IN Write2401A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Write2401A.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include "Write2401A.h"
3 #include "intrins.h"
4 main()
5 {
6 1 // uchar i;
7 1 init();
8 1 // Write_Add = 0x35;
9 1 // Write_Data = 0x66;
10 1 for(;;)
11 1 {
12 2 if(Card_In == True)
13 2 {
14 3 Card_Insert_Flag = True;
15 3 }
16 2 else
17 2 Card_Insert_Flag = False;
18 2 if(Card_Insert_Flag == True)
19 2 {
20 3 Write_Add = R_Buffer[0];
21 3 Write_Data = R_Buffer[1];
22 3 if(Card_Write_Flag == True)
23 3 {
24 4 NOP();
25 4 NOP();
26 4 Card_Power_Control = True;
27 4 Card_Power_LED = ON;
28 4 Open_At24c01A();
29 4 NOP();
30 4 Start_I2C();
31 4 SendByte(Write_At24c01A);
32 4 if(ack == 1)
33 4 {
34 5 SendByte(Write_Add);
35 5 if(ack == 1)
36 5 {
37 6 SendByte(Write_Data);
38 6 if(ack == 1)
39 6 {
40 7 Send();
41 7 Card_Write_Flag = False;
42 7 Stop_I2C();
43 7 Close_At24c01A();
44 7 }
45 6 }
46 5 }
47 4 }
48 3 else NOP();
49 3 }
50 2 else
51 2 {
52 3 Card_Power_Control = False;
53 3 Card_Power_LED = OFF;
54 3 }
55 2 }
C51 COMPILER V6.23a WRITE2401A 08/22/2003 15:20:39 PAGE 2
56 1 }
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 /*--------------------------------
75 启动卡函数
76 函数原型:Open_At24c01A()
77 功能:启动ic卡片
78 ---------------------------------*/
79 void Open_At24c01A()
80 {
81 1 NOP();
82 1 SCL=0;
83 1 NOP();
84 1 RST=0;
85 1 NOP();
86 1 RST=1;
87 1 NOP();
88 1 SDA=1;
89 1 NOP();
90 1 SCL=1;
91 1 NOP();
92 1 SCL=0;
93 1 NOP();
94 1 RST=0;
95 1 }
96 /*--------------------------------
97 关闭卡函数
98 函数原型:Close_At24c01A()
99 功能:关闭ic卡片
100 ---------------------------------*/
101 void Close_At24c01A()
102 {
103 1 SDA=0;
104 1 NOP();
105 1 SCL=0;
106 1 NOP();
107 1 RST=0;
108 1 NOP();
109 1 }
110 /*--------------------------------
111 延时
112 函数原型:Nop();
113 功能:延时
114 ---------------------------------*/
115 void NOP()
116 {
117 1 _nop_();
C51 COMPILER V6.23a WRITE2401A 08/22/2003 15:20:39 PAGE 3
118 1 _nop_();
119 1 _nop_();
120 1 _nop_();
121 1 _nop_();
122 1 }
123
124 /*---------------------------------
125 启动总线函数
126 函数原型:Start_I2C()
127 功能:启动I2C总线,即发送起始条件
128 ---------------------------------*/
129 void Start_I2C()
130 {
131 1 SDA = 1; //发送起始条件数据信号
132 1 _nop_();
133 1 SCL = 1;
134 1 _nop_(); //起始建立时间大于4.7us
135 1 _nop_();
136 1 _nop_();
137 1 _nop_();
138 1 _nop_();
139 1 SDA = 0; //发送起始信号
140 1 _nop_();
141 1 _nop_();
142 1 _nop_();
143 1 _nop_();
144 1 _nop_();
145 1 SCL = 0; //钳位
146 1 _nop_();
147 1 _nop_();
148 1 }
149 /*-------------------------------
150 结束总线函数
151 函数原型:Stop_I2C()
152 功能:结束I2C总线,即发送I2C结束条件
153 -------------------------------*/
154 void Stop_I2C()
155 {
156 1 SDA = 0; //发送结束条件的数据信号
157 1 _nop_(); //发送结束条件的时钟信号
158 1 SCL = 1; //结束条件建立时间大于4us
159 1 _nop_();
160 1 _nop_();
161 1 _nop_();
162 1 _nop_();
163 1 _nop_();
164 1 SDA = 1; //发送I2C总线结束命令
165 1 _nop_();
166 1 _nop_();
167 1 _nop_();
168 1 _nop_();
169 1 _nop_();
170 1 }
171
172 /*------------------------------
173 字节数据传送函数
174 函数原型:SendByte(uchar c)
175 功能:将数据C发送出去,可以是地址,
176 也可以是数据,发送完成之后等待应答
177 并且对应答状态位进行操作,不应答和非
178 应答都使得ACK=0,发送数据正常则ACK=1
179 --------------------------------*/
C51 COMPILER V6.23a WRITE2401A 08/22/2003 15:20:39 PAGE 4
180 void SendByte(uchar c)
181 {
182 1 uchar BitCnt;
183 1 for(BitCnt = 0;BitCnt < 8;BitCnt++) //一个字节
184 1 {
185 2 if((c << BitCnt)& 0x80) SDA = 1; //判断发送位
186 2 else SDA = 0;
187 2 _nop_();
188 2 SCL = 1; //时钟线为高,通知被控器开始接受数据
189 2 _nop_();
190 2 _nop_();
191 2 _nop_();
192 2 _nop_();
193 2 _nop_();
194 2 SCL = 0;
195 2 }
196 1 _nop_();
197 1 _nop_();
198 1 SDA = 1; //释放数据线,准备接受应答位
199 1 _nop_();
200 1 _nop_();
201 1 SCL = 1;
202 1 _nop_();
203 1 _nop_();
204 1 _nop_();
205 1 if(SDA == 1) ack =0;
206 1 else ack = 1; //判断是否收到应答信号
207 1 SCL = 0;
208 1 _nop_();
209 1 _nop_();
210 1 }
211
212 void init()
213 {
214 1 TMOD=0x20;
215 1 TL1=0xFd;
216 1 TH1=0xFd;
217 1 SCON=0x50;
218 1 PCON=0x00;
219 1 EA = 1;
220 1 ES = 1;
221 1 TR1=1;
222 1 P1_5 = OFF;
223 1 P1_6 = OFF;
224 1 P1_7 = OFF;
225 1 RST = OFF;
226 1 Card_In = 1;
227 1 Card_Insert_Flag = False;
228 1 Card_Power_Control = False;
229 1 Card_Power_LED = OFF;
230 1 Card_Write_Flag = False;
231 1 R_Counter = 0;
232 1 }
233 void R_Serial() interrupt 4 using 1
234 {
235 1 if( RI == 1)
236 1 {
237 2 uchar R_Temp;
238 2 RI = 0;
239 2 R_Temp = SBUF;
240 2 if(R_Counter==0)
241 2 {
C51 COMPILER V6.23a WRITE2401A 08/22/2003 15:20:39 PAGE 5
242 3 if( R_Temp== 0xFF)
243 3 {
244 4 R_Counter=0;
245 4 }
246 3 else return;
247 3 }
248 2 else
249 2 {
250 3 R_Buffer[R_Counter -1] = R_Temp;
251 3 if( R_Counter == 2)
252 3 {
253 4 R_Counter=0;
254 4 Card_Write_Flag = True;
255 4 return;
256 4 }
257 3 }
258 2 R_Counter++;
259 2 }
260 1 }
261
262 void Send()
263 {
264 1 SBUF = Write_Add;
265 1 do{}
266 1 while(TI == 0);
267 1 TI = 0;
268 1 SBUF = Write_Data;
269 1 do{}
270 1 while(TI == 0);
271 1 TI = 0;
272 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 362 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 1
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -