登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
51单片机论坛
›
单片机实现接触式IC卡读写
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版
单片机实现接触式IC卡读写
[复制链接]
5719
1
ad***
管理员
发表于 2012-9-3 02:51:09
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
IC 卡芯片为AT45D041A 数据通过SPI接口传输
/*****************************************/
/* Copyright (c) 2005, 通信工程学院 */
/* All rights reserved. */
/* 作 者:戴 佳 */
/*****************************************/
#include "ICRdWr.h"
/* 延时t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
/* 获取需要存入IC卡数据的函数*/
void getdata()
{
// 此函数简化如下:
uchar i;
for (i=0;i<8;i++)
data_in
=i+1;
}
/* 写
单片机
AT89S8252的SPDR寄存器,数据通过SPI口串行输出给IC卡芯片 */
void write_spi(uchar dat)
{
SPDR = dat;
while (!(SPSR & 0x80)) ; // 等待一次传输完成
}
/* 获取IC卡芯片状态函数 */
uchar IC_stat(void)
{
P1_1 = 0; // 使能IC卡芯片;/cs=0
write_spi(STAT_REG_READ); // 写入读IC卡芯片状态指令
write_spi(0x00); // 写无关比特
P1_1 = 1; // 禁用IC卡芯片;/cs=1
return SPDR; // 返回IC卡芯片状态字节
}
/* 写IC卡芯片函数:将数据写入buffer,如果buffer满,
则将buffer中数据写入主内存页 */
void write_to_IC(uchar dat)
{
uchar stat;
/* 检查IC卡芯片是否忙 */
stat = IC_stat();
while ((stat&0x80)==0x00);
/* 数据写入buffer */
P1_1 = 0; // 使能IC卡芯片;/cs=0
write_spi(BUFFER_1_WRITE); // buffer1写指令代码
write_spi(0x00); // 写入8位无关位
write_spi((uchar)(buf_start_addr>>8)); // 写入7位无关位加上9位buffer起始字节地址的第1位
write_spi((uchar)buf_start_addr); // 写入9位buffer起始字节地址的后8位
write_spi(dat); // 写入数据
P1_1 = 1; // 禁用IC卡芯片;结束buffer write指令
buf_start_addr++; // 下一buffer起始字节地址
/* 如果buffer写满,则将buffer中数据写入主内存页 */
if (buf_start_addr > 263)
{
buf_start_addr = 0; // buffer起始字节地址重置0
if (page_addr < 2047) // 如果主内存页不满
{
/* buffer数据写入主内存页 */
P1_1 = 0; // 使能IC卡芯片;/cs=0
write_spi(B1_TO_MM_PAGE_NO_ERA); // 写入无在线擦除的buffer1写主内存页指令代码
write_spi((uchar)(page_addr>>7)); // 写入4位保留位加上11位页地址的高4位
write_spi((uchar)(page_addr<<1)); // 写入11位页地址的低7位和1位无关位
write_spi(0x00); // 再写入8位无关位
P1_1 = 1; // 禁用IC卡芯片;结束无在线擦除的buffer写主内存页指令
page_addr++; // 下一页地址
}
}
}
/* 读IC卡芯片函数,如果一页读完,则读取下一页 */
uchar read_from_IC()
{
uchar stat;
uchar tmp;
/* 检查IC卡芯片是否忙 */
stat = IC_stat();
while ((stat&0x80)==0x00);
/* 从主内存页中读出数据 */
P1_1 = 0; // 使能IC卡芯片;/cs=0
write_spi(MM_PAGE_READ) ; // 写入主内存页读指令代码
tmp = (uchar)(page_addr>>7);
write_spi(tmp); // 写入4位保留位加上11位页地址的高4位
tmp = (uchar)(page_addr<<1)|((uchar)(page_start_addr>>8)&0x01);
write_spi(tmp); // 写入11位页地址的低7位和9位页起始字节地址的最高位
tmp = (uchar)(page_start_addr);
write_spi(tmp); // 写入9位页起始字节地址的低8位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 写入8位无关位
write_spi(0x00) ; // 再写入8位无关位,共写入32位无关位
write_spi(0xff) ; // 写入8位无意义值以确保完成一字节数据的读出
P1_1 = 1; // 禁用IC卡芯片;结束主内存页读指令
page_start_addr++; // 下一页中起始字节地址
/* 如果读完一页,则读取下一页 */
if (page_start_addr > 263)
{
page_start_addr = 0; // 页起始字节地址重置0
if (page_addr < 2047) // 如果主内存页没有读完
page_addr++; // 下一页地址
}
return SPDR; // 返回读出数据
}
/* 主函数 */
void main()
{
uchar i;
P1_0 = 1; // /RST引脚置高
/* SPIE=0,SPE=1,DORD=0,MSTR=1,CPOL=CPHA=1,SPR1=0,SPR0=1*/
SPCR=0x5d;
buf_start_addr = 0;
page_start_addr = 0;
page_addr = 0;
/* 获取需要写入IC卡的数据,存放在data_in[]中 */
getdata();
/* 将data_in[]中存放数据写入IC卡 */
for (i=0;i<DATA_IN_MAX_LEN;i++)
{
write_to_IC(data_in
);
delay(2); // 延时2ms
}
delay(10); // 延时10ms
buf_start_addr = 0;
page_start_addr = 0;
page_addr = 0;
/* 数据读出IC卡,存放在data_out[]中 */
for (i=0;i<DATA_OUT_MAX_LEN;i++)
{
data_out
= read_from_IC();
delay(2); // 延时2ms
}
while(1);
}
通信工程
,
芯片
,
Copyright
,
接口
相关帖子
ASK触摸屏使用USB下载程序方法———ASK触摸屏使用USB下载程序方
WEINVIEW触摸屏在电力工程的运用———直流屏监控系统
CommonQ平台在核电站数字化仪控系统中的应用———CommonQ平台在
北京地铁五号线多通信协议设备集成解决方案———北京地铁五号线
富士FFA电梯控制系统———富士高可靠串行电梯控制系统
基于控创Passau60通信管理机的变电站综合自动化———基于控创Pa
中国现代文学馆五大智能系统的设计实例———中国现代文学馆五大
传感器自动识别装置在空调节能中的应用———传感器自动识别装置
一种扩展微处理器/单片机外部中断接口的方法
500毫安USB接口兼容的锂电池充电集成电路CN3068
举报
回复
1 个评论
L***
新手上路
发表于 2012-9-8 12:13:26
|
显示全部楼层
楼住谢谢你了{:e151:}
举报
回复
支持
反对
返回列表
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
抗干扰LED数码管显示屏驱动芯片/3线串行接
VK1Q68D是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片。内部集成有3线
抗干扰能力强/点阵数显LED屏驱动/数码管驱
VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串
可支持14×4的点阵LED显示面板数码管LED驱
VK1624是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁 存
数显驱动器原厂-数显LED显示驱动芯片VK1620
VK1620B是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、 数据锁
抗干扰数显驱动数码管LED驱动芯片VK1618 SO
产品品牌:永嘉微电/VINKA 产品型号:VK1618 封装形式:SOP18/DIP18 概述 VK161
更多
精华推荐
抗干扰LED数码管显示屏驱动芯片/3线串行接
抗干扰能力强/点阵数显LED屏驱动/数码管驱
可支持14×4的点阵LED显示面板数码管LED驱
数显驱动器原厂-数显LED显示驱动芯片VK1620
抗干扰数显驱动数码管LED驱动芯片VK1618 SO
VK1616 SOP16/DIP16点阵LED数显驱动芯片/数
点阵数显驱动芯片/LED数码管显示屏驱动VK16
数显驱动电路LED显示驱动芯片VK1650 SOP16/
更多
社区学堂
抗干扰LED数码管显示屏驱动芯片/3线串
抗干扰能力强/点阵数显LED屏驱动/数码
抗干扰LED数码管显示屏驱动芯片/3线串行接
VK1Q68D是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片。内部集成有3线
抗干扰能力强/点阵数显LED屏驱动/数码管驱
VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3 线串
可支持14×4的点阵LED显示面板数码管LED驱
VK1624是一种数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁 存
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表