?? 4442.lst
字號:
C51 COMPILER V6.12 4442 04/29/2006 11:02:37 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 4442
OBJECT MODULE PLACED IN .\4442.OBJ
COMPILER INVOKED BY: d:\toolfiles\Keil\C51\BIN\C51.EXE .\4442.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------函數(shù)聲明,變量定義--------------------------------------------
2 //-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
3 #include <stdio.h>
4 #include <intrins.h>
5 #include <reg51.h>
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define OFF 1
9 #define ON 0
10 #define True 1
11 #define False 0
12 #define RMM_COMM 0x30 //讀主存命令字
13 #define WMM_COMM 0x38 //寫主存命令字
14 #define VER_COMM 0x33 //校驗密碼
15 #define RSM_COMM 0x31 //讀密碼存儲區(qū)
16 #define WSM_COMM 0x39 //寫密碼存儲區(qū)
17 #define RPM_COMM 0x34 //讀保護存儲區(qū)
18 #define WPM_COMM 0x3c //寫保護存儲區(qū)
19 //----------------------------------------------------------------------------
20 //------------------------------------------------------------------------------------
21 // 定義IC卡接口
22 sbit IC_RST =P1^0; // 將p1.0口設定為復位管腳
23 sbit IC_CLK =P1^1; // 用p1.1口模擬時鐘口
24 sbit IC_IO =P1^2; // 將p1.2口模擬數(shù)據(jù)口
25 sbit watch_PW =P1^3; // 將p1.3口作為電源監(jiān)控,watch_PW=0,設備有損壞
26 sbit CT_PW =P1^4; // 將p1.4口作為電源控制,CT_PW=0接通電源,CT_PW=1斷開電源
27 sbit IC_INT0 =P3^2; // P3.2用于檢測有無卡插入,檢測到低電平,說明有卡插入
28 //------------------------------------------------------------------------------------
29 uchar Read_Buffer[16];
30 bit IC_In_Flag;
31 bit IC_Read_Flag;
32 //------------------------------------------------------------------------------------
33 //4442卡底層程序的外部函數(shù)聲明
34 //------------------------------------------------------------------------------------
35 void ReadMainMem(uchar addr,uchar idata *pt,uchar count); //讀IC卡主存
36 void WriteMainMem(uchar addr,uchar idata *pt); //寫IC卡主存
37 void ReadProtectMem(uchar idata *pt); //讀保護存儲器
38 void ProtectByte(uchar CardAdd,uchar idata *pt); //保護一字節(jié),注意待保
39 //護的字節(jié)是已經(jīng)寫入過的,地址只能在保護存儲區(qū)內
40 void SendComm(uchar a,uchar b,uchar c); //發(fā)送命令
41 void ReadMode(uchar idata *pt,uchar count);
42 void ProcessMode(void);
43 void ResetCard(void);
44 void BreakOperate(void);
45 void StartComm(void);
46 void StopComm(void);
47 uchar ReadByte(void);
48 void WriteByte(uchar ch);
49 void Delay10us(void);
50 void Delay5us(void);
51 void init();
52 //--------------------------------------------------------------------------------
53 // 函數(shù)名稱: ResetCard
54 // 函數(shù)功能: 卡復位子程序
55 //-------------------------------------------------------------------------------
C51 COMPILER V6.12 4442 04/29/2006 11:02:37 PAGE 2
56 void ResetCard(void)
57 {
58 1 uchar temp;
59 1 Delay5us();
60 1 IC_RST = 0;
61 1 IC_CLK = 0;
62 1 IC_IO = 1;
63 1 Delay5us();
64 1 IC_RST = 1;
65 1 Delay5us();
66 1 IC_CLK = 1;
67 1 Delay10us();
68 1 Delay10us();
69 1 Delay10us();
70 1 Delay10us();
71 1 IC_CLK = 0;
72 1 Delay5us();
73 1 IC_RST = 0;
74 1 Delay10us();
75 1 temp = ReadByte();
76 1 temp = ReadByte();
77 1 temp = ReadByte();
78 1 temp = ReadByte();
79 1 IC_CLK = 0;
80 1 Delay5us();
81 1 IC_IO = 1;
82 1 _nop_();
83 1 IC_CLK = 0;
84 1 Delay5us();
85 1 }
86 //-------------------------------------------------------------------------------------
87 // 函數(shù)名稱: BreakOperate
88 // 函數(shù)功能: 停止操作
89 //-----------------------------------------------------------------------------------
90 void BreakOperate(void)
91 {
92 1 IC_CLK = 0;
93 1 IC_RST = 0;
94 1 IC_IO = 0;
95 1 Delay5us();
96 1 IC_RST = 1;
97 1 IC_IO = 1;
98 1 Delay5us();
99 1 IC_RST = 0;
100 1 Delay5us();
101 1 CT_PW = 1;
102 1 }
103 //------------------------------------------------------------------------------------
104 // 函數(shù)名稱: StartComm()
105 // 函數(shù)功能: 啟動I2C總線子程序
106 //-----------------------------------------------------------------------------------
107 void StartComm(void)
108 {
109 1 IC_CLK = 0;
110 1 IC_IO = 1;
111 1 Delay5us();
112 1 IC_CLK = 1;
113 1 Delay5us();
114 1 IC_IO = 0;
115 1 Delay5us();
116 1 }
117 //-------------------------------------------------------------------------------
C51 COMPILER V6.12 4442 04/29/2006 11:02:37 PAGE 3
118 // 函數(shù)名稱: StopComm()
119 // 函數(shù)功能: 停止I2C總線數(shù)據(jù)傳送子程序
120 //-----------------------------------------------------------------------------
121 void StopComm(void)
122 {
123 1 IC_CLK = 0;
124 1 IC_IO = 0;
125 1 Delay5us();
126 1 IC_CLK = 1; //CLK: H
127 1 Delay5us();
128 1 IC_IO = 1; //IO : H
129 1 Delay10us();
130 1 }
131 //-----------------------------------------------------------------------------------
132 // 函數(shù)名稱: ReadByte
133 // 返回接收的數(shù)據(jù)
134 // 函數(shù)功能: 接收一字節(jié)子程序
135 //-----------------------------------------------------------------------------------
136 uchar ReadByte(void)
137 {
138 1 uchar i,ch;
139 1 ch = 0;
140 1 for (i = 8; i > 0; i--)
141 1 {
142 2 IC_CLK = 0;
143 2 ch = ch >> 1; //從低位讀起
144 2 if((uchar)IC_IO)
145 2 ch |= 0x80;
146 2 Delay5us();
147 2 IC_CLK = 1;
148 2 Delay5us();
149 2 }
150 1 return ch;
151 1 }
152 //----------------------------------------------------------------------------------
153 // 函數(shù)名稱: WriteByte
154 // 入口參數(shù): ch
155 // 函數(shù)功能: 發(fā)送一個字節(jié)
156 //------------------------------------------------------------------------------------
157 void WriteByte(uchar ch)
158 {
159 1 uchar i;
160 1 for(i = 8; i > 0; i--)
161 1 {
162 2 IC_CLK = 0;
163 2 IC_IO = (bit)(ch & 0x01);
164 2 Delay5us();
165 2 IC_CLK = 1;
166 2 Delay10us();
167 2 ch = ch >> 1; //右移一位
168 2 }
169 1 }
170 //-------------------------------------------------------------------------------------
171 // 函數(shù)名稱: ReadMode
172 // 入口參數(shù): pt地址指針,指向接收緩沖區(qū),count要接收的數(shù)據(jù)個數(shù)
173 // 函數(shù)功能: 接收n位數(shù)據(jù)子程序
174 //----------------------------------------------------------------------------------
175 void ReadMode(uchar idata *pt,uchar count)
176 {
177 1 IC_CLK=0;
178 1 Delay5us();
179 1 do
C51 COMPILER V6.12 4442 04/29/2006 11:02:37 PAGE 4
180 1 {
181 2 *pt = ReadByte(); //讀入一個字節(jié)
182 2 pt++; //指針加一
183 2 }while(--count); //計數(shù)器減一,判斷
184 1 }
185 //------------------------------------------------------------------------
186 // 延時10us子程序,根據(jù)系統(tǒng)時鐘需要調整
187 //------------------------------------------------------------------------
188 void Delay10us(void)
189 {
190 1 _nop_();
191 1 _nop_();
192 1 _nop_();
193 1 _nop_();
194 1 _nop_();
195 1 _nop_();
196 1 }
197 //------------------------------------------------------------------------
198 // 延時5us子程序,根據(jù)系統(tǒng)時鐘需要調整
199 //------------------------------------------------------------------------
200 void Delay5us(void)
201 {
202 1 _nop_();
203 1 _nop_();
204 1 _nop_();
205 1 }
206 //------------------------------------------------------------------------
207 // 初始化子程序//------------------------------------------------------------------------
208 void init()
209 {
210 1 IC_INT0 = 1;
211 1 IC_Read_Flag = True;
212 1 }
213 //---------------------------------------------------------------------------------
214 // 函數(shù)名稱: ReadMainMem()
215 // 入口參數(shù): addr: IC存儲區(qū)地址;
216 // pt: 地址指針,指向接收緩沖區(qū);
217 // count: 接收數(shù)據(jù)的個數(shù)
218 // 函數(shù)功能: 讀存儲區(qū)
219 //-----------------------------------------------------------------------------------
220 void ReadMainMem(uchar addr,uchar idata *pt,uchar count)
221 {
222 1 SendComm(RMM_COMM,addr,0xff);
223 1 ReadMode(pt,count);
224 1 BreakOperate();
225 1 IC_Read_Flag = False;
226 1 }
227 //-----------------------------------------------------------------------------
228 // 函數(shù)名稱: SendComm()
229 // 入口參數(shù): a: 命令字;
230 // b: 地址;
231 // c: 數(shù)據(jù)
232 // 函數(shù)功能: 發(fā)送一個完整的命令
233 //-------------------------------------------------------------------------------
234 void SendComm(uchar a,uchar b,uchar c)
235 {
236 1 StartComm(); //開始發(fā)送命令
237 1 WriteByte(a); //a: 發(fā)命令字
238 1 WriteByte(b); //b: 發(fā)地址
239 1 WriteByte(c); //c: 發(fā)數(shù)據(jù)
240 1 StopComm(); //結束發(fā)送命令
241 1 }
C51 COMPILER V6.12 4442 04/29/2006 11:02:37 PAGE 5
242
243 main()
244 {
245 1 init();
246 1 if((IC_INT0 == 0)&&(IC_Read_Flag == 1) == 1) //有卡插入,并且有讀標記
247 1 {
248 2 CT_PW = 0; //上電
249 2 Delay10us();
250 2 if(IC_Read_Flag == True)
251 2 {
252 3 ResetCard(); //
253 3 ReadMainMem(0xEF,&Read_Buffer[0],16);
*** WARNING C259 IN LINE 253 OF .\4442.C: 'parameter': pointer: different mspace
254 3 BreakOperate();
255 3 Delay10us();
256 3 ResetCard();
257 3 }
258 2 Delay10us();
259 2 CT_PW = 1;
260 2 }
261 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 357 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 12
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -