IC_Card_Reader_SCM.rar

  • zhuoyue0407
    了解作者
  • C/C++
    开发工具
  • 19KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 4
    下载次数
  • 2009-08-20 10:54
    上传日期
单片机实现IC卡读写,对于单片机学习的提高,有很大的帮助
IC_Card_Reader_SCM.rar
  • IC_Card_Reader_SCM
  • 电路原理图
  • ICRDWR.SCH
    8.7KB
  • PROC
  • ICRDWRPRO.UV2
    1.9KB
  • ICRDWRPRO.OPT
    1.3KB
  • ICRDWRPRO_OPT.BAK
    1.3KB
  • ICRDWR.LST
    9.4KB
  • ICRDWR.H
    990B
  • ICRDWRPRO_UV2.BAK
    1.9KB
  • ICRDWRPRO.PLG
    384B
  • ICRDWRPRO.LNP
    47B
  • ICRDWRPRO.M51
    8.6KB
  • ICRDWRPRO
    9.2KB
  • ICRDWR.OBJ
    10.3KB
  • ICRDWR.C
    4.6KB
内容介绍
/*****************************************/ /* 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]=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[i]); 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[i] = read_from_IC(); delay(2); // 延时2ms } while(1); }
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...