打印

自己做毕业设计,遇到问题,急呀?(有图)

[复制链接]
2511|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mhjerry|  楼主 | 2011-5-19 14:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mhjerry 于 2011-5-19 14:47 编辑

我做的是基于SLE4442卡的读写器设计,但我电路程序搞好后,单片机感觉就是读不出来卡里面的数据?下面有图,我写的主程序是想如果读卡不成功,显示TEST数组,成功显示RecBuf数组,我插入卡后,显示的是RecBuf数组,但竟然是我设定的初始值:aa  bb cc dd,根本不是卡里 的数据,我不知道为什么?
未插入卡时:

插入后:

相关帖子

沙发
mhjerry|  楼主 | 2011-5-19 14:47 | 只看该作者
 
/下面为读例子程序
main()
{
unsigned char code RecBuf[4]={0xdd,0xcc,0xbb,0xaa};  //接收缓冲区,初始化数据
unsigned char ret;          //函数返回值
unsigned char test[4]={0x51,0x80,0x51,0x80};   //读卡不成功,显示数据
do
{
  ret = ReadCm(0x32,4,RecBuf);      //从0地址开始读4个字节
  //读成功返加0,失败返回1
  if(ret==0)           //请在此设置断点查看是否读成功以及读到的数据
  {
  
   Display(RecBuf);
  }
  else
  {
   Display(test);
  }
}while(1);
}

/***************************************************************
函数名称:ReadCm
功    能:从主存储器中读出数据块并存入ReadBuf中
输   入:unsigned char StarAddr --- 开始地址(0 - 255)
    unsigned char ByteNum  --- 要读出的字节数(1 - 256)
    unsigned char *RecBuf  --- 接收数据缓冲区
输   出: 0 --- 读成功
    1 --- 表示无效卡或者卡损坏
****************************************************************/
unsigned char ReadCm(unsigned char StarAddr,unsigned char ByteNum,unsigned char *RecBuf)
{
unsigned char i = 0;
if (RstCard() == 1)      /* 使卡复位*/
  return 1;       /* 如果复位失败返回1 */
  
SendCommand(0x30,StarAddr,0x00);  /* 发送读主存命令 */
for(i = 0; i < ByteNum; i++)
{
  *RecBuf = Readchar();       /* 从主存中读出ByteNum个字节并存入RecBuf中 */
  RecBuf++;
}
  return 0;
}

/***************************************************************
函数名称:Readchar
功   能:读一个字节
输   入: 无
输   出:所得的字节的值
****************************************************************/
unsigned char Readchar(void)
{
CLK = 0; Delay5Us(); mybit0 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit1 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit2 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit3 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit4 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit5 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit6 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit
CLK = 0; Delay5Us(); mybit7 = IO; CLK = 1; Delay5Us(); //一个脉冲接收1 bit

return(ibase);  //返回读得的一个字节
}

/***********************************************************
函数名称:RstCard
功    能:使IC卡SLE4442复位
输   入:无
输   出:0 --- 复位成功
       1 --- 复位失败,卡为无效卡或卡已损坏
************************************************************/
unsigned char RstCard(void)
{
unsigned char i;
unsigned char ReadBuf[4];
IO  = 1;    //IO  引脚置高电平   
RST = 0;    //RST 引脚置低电平
CLK = 0;    //CLK 引脚置低电平
Delay10Us();   //下面在一个RST脉冲期间产生一个CLK脉冲
RST = 1;
Delay5Us();
CLK = 1;
Delay5Us();
CLK = 0;
Delay5Us();
RST = 0;
       //接收复位响应值
for(i = 0; i < 4; i++)
{
  ReadBuf = Readchar();
}
CLK = 1;
Delay5Us();  
CLK = 0;  
IO  = 1;     //置CLK和IO为复位时序图复位完成时的状态  

if ((ReadBuf[0] == IDENTIFY1) && (ReadBuf[1] == IDENTIFY2) &&
     (ReadBuf[2] == IDENTIFY3) && (ReadBuf[3] == IDENTIFY4))
{
  return 0;   //复位值正确,返回复位成功
}
else
{
  return 1;   //复位值错误,返回复位失败
}  
}

/************************************************************
函数名:SendCommand
功  能:根据不同的参数把命令字发给IC卡
参  数:unsigned char command  --- 命令字;
  unsigned char Address  --- 地址;
  unsigned char senddata --- 数据
返回值:无
*************************************************************/
void SendCommand(unsigned char command,unsigned char Address,unsigned char senddata)
{
IO  = 1;   /*产生开始状态*/
CLK = 0;
Delay5Us();
CLK = 1;
Delay10Us();
IO = 0;
Delay10Us();
CLK = 0;
      /*发送命令*/
SendByte(command);
SendByte(Address);
SendByte(senddata);
      /*产生停止状态*/
CLK = 0;
  IO  = 0;
Delay5Us();
CLK = 1;
Delay5Us();
IO  = 1;
Delay5Us();
}

使用特权

评论回复
板凳
huangqi412| | 2011-5-19 16:46 | 只看该作者
看图片难道是IIC接口的那种老式电话卡,如果是的话,
以前读过。
LZ去网上找找,有相关资料的。

使用特权

评论回复
地板
mhjerry|  楼主 | 2011-5-19 18:25 | 只看该作者
3# huangqi412
是的,是接触式IC卡~我的研究了快一个月了,就这个读写程序感觉比较靠谱,但不知为啥主程序显示读卡成功了,但数组里就是没有卡里的值呀?

使用特权

评论回复
5
mhjerry|  楼主 | 2011-5-20 16:43 | 只看该作者
程序感觉没问题呀?有没有高手做过这个卡的?求解释呀!这个调试不过,我论文不好朝下写了,现在不知怎么办了!找老师,老师来了句:“自己动手,不提供技术指导,失败再尝试。。。”

使用特权

评论回复
6
abin0415| | 2011-5-20 18:45 | 只看该作者
估计老师也不太会吧

使用特权

评论回复
7
funfactory| | 2011-5-21 02:21 | 只看该作者
楼主,你在二楼的文字效果是怎么做出来的啊!!
比我以前直接复制黏贴帅多啦!!!
分享一下啊!!、

使用特权

评论回复
8
mhjerry|  楼主 | 2011-5-21 10:33 | 只看该作者
点击插入代码即可!

使用特权

评论回复
9
mhjerry|  楼主 | 2011-5-22 19:17 | 只看该作者
终于可以读出数据啦:lol 程序里一个细节自己没注意,嗨,让我郁闷了几天,不过还好,让我对卡的读写时序又研究了一遍~

使用特权

评论回复
10
zgy_1218| | 2012-6-4 14:11 | 只看该作者
读卡不成功,不知道为什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:本人回复,均代表个人观点。 个人经验不错,如有错误,敬请指教!

0

主题

103

帖子

1

粉丝