找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2517|回复: 0
收起左侧

基于51单片机的THM3060开发程序 缺少文件 求帮助

[复制链接]
ID:515367 发表于 2019-5-22 17:01 | 显示全部楼层 |阅读模式
共享一下网上不好找到的资料,但是 缺少文件无法编译  求指导

单片机源程序如下:
  1. #include <stdio.h>
  2. #include "..\at89x52.h"        
  3. #include "..\Communication\Comn2.h"
  4. #include "..\command\comd.h"
  5. #include "..\thm3060\thm3060.h"
  6. #include "main.h"


  7. #define EnableInterrupt()  EA =1;
  8. #define DisableInterrupt() EA =0;

  9. // FWT (FRAME WATI TIME)为最大静默时间,即读卡器发送完数据后,到开始收到卡片
  10. // 响应,读卡器的最大等待时间 t = FWT * 302 uS
  11. unsigned short FWT = 10;   //设置最大等待时间为 3ms

  12. void main()
  13. {
  14.          initial_serial();
  15.          EnableInterrupt();
  16.         THM_Reset();
  17.     puts("THM3060 Demo Reader (TDR) Version 1.1\r\nCopyright by \
  18.          LEMICRO Technology Co. Ltd 2016.10. All rights reserved.\r\r");        
  19.         puts("THM3060 working at SPI mode.\r");
  20.         while(1)
  21.         {
  22.          
  23.                 printf ("TDR V1.0 >");               
  24.                  deal_with_command();
  25.                 TypeB_CardRead();
  26.         }
  27. }
复制代码
  1. #include "../spi/spi.h"
  2. #include "THM3060.h"


  3. // 通过 SPI 总线写 address 寄存器的值
  4. extern void THM_WriteReg(unsigned char address,unsigned char content)
  5. {
  6.         unsigned char temp_buff[2];
  7.         // 写命令 BIT7 =1        
  8.         temp_buff[0] = address | 0x80;
  9.         temp_buff[1] = content;
  10.         // SPI 帧
  11.         SPI_FRAME_START();        
  12.         SPI_SendBuff(temp_buff,2);        
  13.         SPI_FRAME_END();
  14. }


  15. // 通过 SPI 总线读 address 寄存器的值
  16. extern unsigned char THM_ReadReg(unsigned char address)
  17. {
  18.         unsigned char temp_buff[1];
  19.         // SS_N =0;
  20.         SPI_FRAME_START();        
  21.         // 读命令 BIT7 = 0;
  22.         temp_buff[0] = address & 0x7F;        
  23.         SPI_SendBuff(temp_buff,1);
  24.         SPI_RecvBuff(temp_buff,1);
  25.         //SS_N =1;
  26.         
  27.         SPI_FRAME_END();
  28.         return(temp_buff[0]);
  29. }


  30. // SPI 模式等待接收结束,并读出接收数据,数据存在缓冲区 buffer 中,长度为 len
  31. // 返回值为接收状态
  32. extern unsigned char THM_WaitReadFrame(unsigned short *len, unsigned char *buffer)
  33. {
  34.         unsigned char temp,temp1;        
  35.         // 等待接收结束        
  36.         while (1)        
  37.         {              
  38.            temp = THM_ReadReg(RSTAT);   
  39.            if (temp & 0x80)
  40.                 break;
  41.     }                  
  42.     // 处理返回状态状态值
  43.     if (temp & CERR )   
  44.         temp = CERR;                //碰撞错误
  45.     else if (temp & PERR)      
  46.         temp = PERR;                //奇偶校验位错误
  47.     else if (temp & FERR)      
  48.         temp = FERR;
  49.     else if (temp & DATOVER)      
  50.         temp = DATOVER;            //数据溢出
  51.     else if (temp & TMROVER)
  52.         temp = TMROVER;             //超时错误
  53.     else if (temp & CRCERR)   
  54.         temp = CRCERR;              //CRC 计算错误
  55.     else
  56.         temp = FEND;                //帧正常结束
  57.     //取得接收长度值
  58.     *len =((unsigned short)(THM_ReadReg(RSCH)) <<8 ) + THM_ReadReg(RSCL);                     
  59.     //读取接收数据
  60.     if (*len != 0x00 )
  61.     {
  62.         SPI_FRAME_START();
  63.         
  64.         temp1 = DATA;
  65.         SPI_SendBuff( &temp1,1);
  66.         SPI_RecvBuff( buffer,*len);
  67.         
  68.         SPI_FRAME_END();
  69.     }      
  70.     //清除状态标志
  71.     THM_WriteReg(RSTAT,0x00);        
  72.     return (temp);
  73. }
  74. /*
  75. // 读取接收状态和接收长度
  76. extern unsigned char THM_ReadStat( unsigned short *len)
  77. {
  78.    
  79.     unsigned char temp;

  80.     temp = THM_ReadReg(RSTAT);   
  81.         if (temp & 0x80 == 0)
  82.         {
  83.             *len =0;
  84.             return 0;
  85.         }   
  86.     else
  87.     {
  88.         *len =((unsigned short)(THM_ReadReg(RSCH)) <<8 ) + THM_ReadReg(RSCL);     
  89.         if (temp & CERR )
  90.             temp = CERR;
  91.         else if (temp & PERR)
  92.             temp = PERR;
  93.         else if (temp & FERR)
  94.             temp = FERR;
  95.         else if (temp & DATOVER)
  96.             temp = DATOVER;
  97.         else if (temp & TMROVER)
  98.             temp = TMROVER;
  99.         else if (temp & CRCERR)   
  100.             temp = CRCERR;
  101.         else
  102.             temp = FEND;      
  103.          }     
  104.          THM_WriteReg(RSTAT,0x00);   
  105.          return temp;
  106. }

  107. //读取接收缓冲区数据

  108. extern void THM_ReadBuff( unsigned short *len,unsigned char * buff)
  109. {
  110.         unsigned char temp;

  111.     if (*len != 0x00 )
  112.     {
  113.         SPI_FRAME_START();
  114.         
  115.         temp = DATA;
  116.         SPI_SendBuff( &temp,1);
  117.         SPI_RecvBuff( buff,*len);
  118.         
  119.         SPI_FRAME_END();
  120.     }
  121. }
  122. */
  123. // 发送数据子程序                 
  124. extern void THM_SendFrame(unsigned char *buffer,unsigned short num)
  125. {
  126.         unsigned char temp;        
  127.         THM_WriteReg(SCNTL, 0x5);                                        //RAMPT_CLR =1,CLK_EN =1
  128.         THM_WriteReg(SCNTL, 0x01);                                  // RAMPT_CLK=0;        
  129.         
  130.         temp = DATA | 0x80;                                                        //写数据寄存器命令         
  131.                                 
  132.         SPI_FRAME_START();
  133.         
  134.         SPI_SendBuff(&temp,1);
  135.         SPI_SendBuff(buffer,num);                                            //写入数据        
  136.         
  137.         SPI_FRAME_END();
  138.         
  139.         THM_WriteReg(SCNTL, 0x03);                                  // SEND =1 ,开始发送                    
  140. }


  141. //打开射频
  142. extern void THM_OpenRF()
  143. {
  144.         THM_WriteReg(SCNTL,0x01);
  145.         return;
  146. }

  147.         
  148. //关闭射频
  149. extern void THM_CloseRF()
  150. {
  151.    
  152.         THM_WriteReg(SCNTL,0x00);
  153.         return;
  154.                
  155. }

  156. extern void THM_ChangeProtBaud(unsigned char prot, unsigned char sndbaud, unsigned char rcvbaud)
  157. {
  158.     THM_WriteReg( PSEL, prot | sndbaud | rcvbaud );
  159.     return;
  160. }   


  161. #if 0
  162. unsigned char xdata reqb[] = {0x05,0x00,0x00};
  163. unsigned char xdata revbuff[100] _at_ 0x000;

  164. void main()
  165. {
  166.          unsigned short len;
  167.         unsigned char temp;
  168.         GPIO_DIR = 0x01;
  169.         
  170.         InitSPI();
  171.         THM_OpenRF();        
  172.         while(1)
  173.         {
  174.          
  175.            THM_SendFrame(reqb,3);
  176.            temp =THM_WaitReadFrame(&len,revbuff);
  177.            //temp = THM_ReadReg(0x05);
  178.         }



  179. }
  180. #endif
复制代码


所有资料51hei提供下载:
基于51单片机的THM3060参考程序.7z (216.39 KB, 下载次数: 51)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表