📄 sle4442_b.lst
字号:
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE SLE4442_B
OBJECT MODULE PLACED IN SLE4442_B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SLE4442_B.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: 蓝海微芯LJD-SY-5200单片机开发系统演示程序 *
3 * 文件: SLE4442.C *
4 * 日期: 2006-8-9 *
5 * 版本: 1.0 *
6 * 作者: 蓝海微芯 *
7 * 网站: http://www.ljd-2008.com *
8 ********************************************************************************
9 * 描述: *
10 * IC卡程序模块 *
11 * *
12 * 30H-----------读主存储区 *
13 * 34H-----------读保护存储区 *
14 * 38H-----------写主存储区 *
15 * 3CH-----------写保护存储区 *
16 * 31H-----------读保密存储区 *
17 * 33H-----------比较验证数据 *
18 * 39H-----------更新保密存储区 *
19 * *
20 * *
21 ********************************************************************************
22 * 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com All Rights Reserved *
23 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
24 *******************************************************************************/
25 #include<reg51.h> /*=== 头文件包含 ===*/
26 #include<intrins.h>
27 #include<absacc.h>
28 #include <IC_CARD_B.h>
29
30 #define uchar unsigned char
31 #define uint unsigned int
32
33 bdata uchar wbyte;
34 sbit wbyte_0=wbyte^0;
35
36
37 uchar RSTANSER[4]; /*4字节复位应答*/
38 uchar ICCOMMAND[3]; /*3字节命令*/
39 uchar ICADDRESS; /*1字节地址*/
40 uchar ICDATAIN; /*1字节数据*/
41 uchar ICLENTH; /*1字节读写长度*/
42 uchar ICCODE[3]={0xff,0xff,0xff}; /*3字节密码*/
43 uchar ICDATA[32]; /*32字节读写数据*/
44
45 void icdelay();
46 void cardpulse();
47 uchar cardrbyte();
48 void cardwbyte(uchar ss);
49 void rst_ans();
50 void sendcommand(uchar comm,uchar address,uchar odata);
51 void rdmm();
52 void rdpm();
53 void wrmm();
54 void wrpm();
55 void rdsm();
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 2
56 uchar rdsm_ec();
57 void sendpsc();
58 void wrsm(uchar ec);
59 void updatepsc();
60 uchar verifi();
61 /*main()
62 {
63 uchar i;
64 uchar EOC;
65 _nop_();
66 P1_4=1;
67 P1_4=0;
68
69
70
71 for(i=0;i<0x20;i++)
72 ICDATA[i]=0xf0; //要写的数据
73 EOC=rdsm_ec(); //读错误计数器
74 EOC=verifi(); //校验密码
75 EOC=rdsm_ec();
76 wrmm(); //写主存储区
77 rdmm(); //再读主存储区
78
79 while(1);
80 }*/
81 /********************************************************************
82 函 数 名:icdelay()
83 功 能:延时10us
84 说 明:
85 入口参数:
86 返 回 值:
87 设 计:蓝海微芯
88 ***********************************************************************/
89 void icdelay()
90 {
91 1 _nop_();
92 1 _nop_();
93 1 _nop_();
94 1 _nop_();
95 1 }
96 /********************************************************************
97 函 数 名:cardpulse()
98 功 能:产生时钟脉冲
99 说 明:
100 入口参数:
101 返 回 值:
102 设 计:蓝海微芯
103 ***********************************************************************/
104 void cardpulse()
105 {
106 1 SCL=1;
107 1 icdelay();
108 1 SCL=0;
109 1 icdelay();
110 1 }
111 /********************************************************************
112 函 数 名:cardbyte()
113 功 能:从SLE4442读取一字节数据
114 说 明:
115 入口参数:
116 返 回 值:ACC
117 设 计:蓝海微芯
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 3
118 ***********************************************************************/
119 uchar cardrbyte()
120 {
121 1 uchar i;
122 1
123 1 ACC=0;
124 1 SDA=1;
125 1 for(i=0;i<8;i++)
126 1 {
127 2 ACC=ACC>>1;
128 2 A_7=SDA;
129 2 cardpulse();
130 2 }
131 1 return ACC;
132 1 }
133 /********************************************************************
134 函 数 名:cardwbyte()
135 功 能:向SLE4442写一字节命令或数据
136 说 明:
137 入口参数:uchar ss
138 返 回 值:
139 设 计:蓝海微芯
140 ***********************************************************************/
141 void cardwbyte(uchar ss)
142 {
143 1 uchar i;
144 1
145 1 wbyte=ss;
146 1
147 1 for(i=0;i<8;i++)
148 1 {
149 2 SDA=wbyte_0;
150 2 wbyte=wbyte>>1;
151 2 cardpulse();
152 2 }
153 1 }
154 /********************************************************************
155 函 数 名:rst_ans()
156 功 能:复位与应答(4个字节的复位应答)
157 说 明:
158 入口参数:
159 返 回 值:
160 设 计:蓝海微芯
161 ***********************************************************************/
162 void rst_ans()
163 {
164 1 uchar i;
165 1 RST=0;
166 1 SCL=0;
167 1 icdelay();
168 1 RST=1;
169 1 icdelay();
170 1 SCL=1;
171 1 icdelay();
172 1 SCL=0;
173 1 icdelay();
174 1 RST=0;
175 1 icdelay();
176 1 for(i=0;i<4;i++)
177 1 RSTANSER[i]=cardrbyte();
178 1 }
179 /********************************************************************
C51 COMPILER V7.08 SLE4442_B 09/27/2006 09:14:02 PAGE 4
180 函 数 名:sendcommand()
181 功 能:发送命令
182 说 明:3字节 命令字+地址+数据
183 入口参数:uchar comm uchar address uchar odata
184 返 回 值:
185 设 计:蓝海微芯
186 ***********************************************************************/
187 void sendcommand(uchar comm,uchar address,uchar odata)
188 {
189 1
190 1 SCL=1; /*start condition*/
191 1 icdelay();
192 1 SDA=0;
193 1 icdelay();
194 1 SCL=0;
195 1
196 1 cardwbyte(comm);
197 1 cardwbyte(address);
198 1 cardwbyte(odata);
199 1
200 1 SCL=0; /*stop condition*/
201 1 SDA=0;
202 1 icdelay();
203 1 SCL=1;
204 1 icdelay();
205 1 SDA=1;
206 1 icdelay();
207 1 SCL=0;
208 1 icdelay();
209 1 }
210 /********************************************************************
211 函 数 名:rdmm()
212 功 能:读主存储区
213 说 明:将数据读取到数组ICDATA[]
214 入口参数:
215 返 回 值:
216 设 计:蓝海微芯
217 ***********************************************************************/
218 void rdmm()
219 {
220 1 uchar i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -