📄 read2401a.lst
字号:
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE READ2401A
OBJECT MODULE PLACED IN Read2401A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Read2401A.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg51.h"
2 #include "Read2401A.h"
3 #include "intrins.h"
4 main()
5 {
6 1 init();
7 1 for(;;)
8 1 {
9 2 if(Card_In == True)
10 2 {
11 3 Card_Insert_Flag = True;
12 3 Card_Insert_LED = ON;
13 3 }
14 2 else
15 2 {
16 3 Card_Insert_Flag = False;
17 3 Card_Insert_LED = OFF;
18 3 Card_Power_LED = OFF;
19 3 Card_Write_LED = OFF;
20 3 Card_Read_LED = OFF;
21 3 }
22 2 if(Card_Insert_Flag == True)
23 2 {
24 3
25 3 if(Card_Power_Flag == True)
26 3 {
27 4 Card_Power_Control = True;
28 4 Card_Power_LED = ON;
29 4 NOP();
30 4 NOP();
31 4 if(Card_Write_Flag == True)
32 4 {
33 5 Card_Read_LED = OFF;
34 5 Card_Write_LED = ON;
35 5 Write_Card();
36 5 }
37 4 if(Card_Read_Flag == True)
38 4 {
39 5 Card_Read_LED = ON;
40 5 Card_Write_LED = OFF;
41 5 Read_Card();
42 5 }
43 4 }
44 3 else
45 3 {
46 4 if(Card_Write_Flag == True)
47 4 {
48 5 Error_Send();
49 5 Card_Write_Flag = False;
50 5 }
51 4 if(Card_Read_Flag == True)
52 4 {
53 5 Error_Send();
54 5 Card_Read_Flag = False;
55 5 }
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 2
56 4 Card_Power_Control = False;
57 4 Card_Power_LED = OFF;
58 4 Card_Write_LED = OFF;
59 4 Card_Read_LED = OFF;
60 4 }
61 3
62 3 }
63 2 else
64 2 {
65 3 if(Card_Power_Flag == True)
66 3 {
67 4 Error_Send();
68 4 Card_Power_Flag = False;
69 4 }
70 3 if(Card_Write_Flag == True)
71 3 {
72 4 Error_Send();
73 4 Card_Write_Flag = False;
74 4 }
75 3 if(Card_Read_Flag == True)
76 3 {
77 4 Error_Send();
78 4 Card_Read_Flag = False;
79 4 }
80 3 Card_Power_Control = False;
81 3 Card_Power_LED = OFF;
82 3 Card_Read_LED = OFF;
83 3 Card_Write_LED = OFF;
84 3 }
85 2 }
86 1 }
87
88 /*--------------------------------
89 启动卡函数
90 函数原型:Open_At24c01A()
91 功能:启动ic卡片
92 ---------------------------------*/
93 void Open_At24c01A()
94 {
95 1 NOP();
96 1 SCL=0;
97 1 NOP();
98 1 RST=0;
99 1 NOP();
100 1 RST=1;
101 1 NOP();
102 1 SDA=1;
103 1 NOP();
104 1 SCL=1;
105 1 NOP();
106 1 SCL=0;
107 1 NOP();
108 1 RST=0;
109 1 }
110 /*--------------------------------
111 关闭卡函数
112 函数原型:Close_At24c01A()
113 功能:关闭ic卡片
114 ---------------------------------*/
115 void Close_At24c01A()
116 {
117 1 SDA=0;
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 3
118 1 NOP();
119 1 SCL=0;
120 1 NOP();
121 1 RST=0;
122 1 NOP();
123 1 }
124 /*--------------------------------
125 延时
126 函数原型:Nop();
127 功能:延时
128 ---------------------------------*/
129 void NOP()
130 {
131 1 _nop_();
132 1 _nop_();
133 1 _nop_();
134 1 _nop_();
135 1 _nop_();
136 1 }
137
138 /*---------------------------------
139 启动总线函数
140 函数原型:Start_I2C()
141 功能:启动I2C总线,即发送起始条件
142 ---------------------------------*/
143 void Start_I2C()
144 {
145 1 SDA = 1; //发送起始条件数据信号
146 1 _nop_();
147 1 SCL = 1;
148 1 _nop_(); //起始建立时间大于4.7us
149 1 _nop_();
150 1 _nop_();
151 1 _nop_();
152 1 _nop_();
153 1 SDA = 0; //发送起始信号
154 1 _nop_();
155 1 _nop_();
156 1 _nop_();
157 1 _nop_();
158 1 _nop_();
159 1 SCL = 0; //钳位
160 1 _nop_();
161 1 _nop_();
162 1 }
163 /*-------------------------------
164 结束总线函数
165 函数原型:Stop_I2C()
166 功能:结束I2C总线,即发送I2C结束条件
167 -------------------------------*/
168 void Stop_I2C()
169 {
170 1 SDA = 0; //发送结束条件的数据信号
171 1 _nop_(); //发送结束条件的时钟信号
172 1 SCL = 1; //结束条件建立时间大于4us
173 1 _nop_();
174 1 _nop_();
175 1 _nop_();
176 1 _nop_();
177 1 _nop_();
178 1 SDA = 1; //发送I2C总线结束命令
179 1 _nop_();
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 4
180 1 _nop_();
181 1 _nop_();
182 1 _nop_();
183 1 _nop_();
184 1 }
185
186 /*------------------------------
187 字节数据传送函数
188 函数原型:SendByte(uchar c)
189 功能:将数据C发送出去,可以是地址,
190 也可以是数据,发送完成之后等待应答
191 并且对应答状态位进行操作,不应答和非
192 应答都使得ACK=0,发送数据正常则ACK=1
193 --------------------------------*/
194 void SendByte(uchar c)
195 {
196 1 uchar BitCnt;
197 1 for(BitCnt = 0;BitCnt < 8;BitCnt++) //一个字节
198 1 {
199 2 if((c << BitCnt)& 0x80) SDA = 1; //判断发送位
200 2 else SDA = 0;
201 2 _nop_();
202 2 SCL = 1; //时钟线为高,通知被控器开始接受数据
203 2 _nop_();
204 2 _nop_();
205 2 _nop_();
206 2 _nop_();
207 2 _nop_();
208 2 SCL = 0;
209 2 }
210 1 _nop_();
211 1 _nop_();
212 1 SDA = 1; //释放数据线,准备接受应答位
213 1 _nop_();
214 1 _nop_();
215 1 SCL = 1;
216 1 _nop_();
217 1 _nop_();
218 1 _nop_();
219 1 if(SDA == 1) ack =0;
220 1 else ack = 1; //判断是否收到应答信号
221 1 SCL = 0;
222 1 _nop_();
223 1 _nop_();
224 1 }
225
226 /*-------------------------------------------
227 字节数据接收函数
228 函数原型:uchar RcvByte();
229 功能:用来接收从器件传来的数据,并且判断总线错误(不发送应答信号)
230 发送完成后使用应答信号
231 -------------------------------------------*/
232 uchar RevByte()
233 {
234 1 uchar retc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -