NRF9E51读IC卡卡号,并把读取到的数据传送出去

发布者:qazwsx007最新更新时间:2015-06-15 来源: 51hei关键字:NRF9E51  IC卡  卡号 手机看文章 扫描二维码
随时随地手机看文章
 /*================================================================================================  
发送时间间隔是1.2秒  
指示灯:接收灯上电后变红,收到数据后变绿,在3秒内未接收到数据则变红  
        发送灯上电后变红,发送数据变绿  
*==================================================================================================*/   
// Comment out the following line for nRF24E1   
//#define NRF9E5 1   
//卡号是916d47   
   
#ifdef NRF9E5   
#include   
#define POWER      3                // 0=min power...3 = max power   
#define HFREQ      1                // 0=433MHz, 1=868/915MHz   
#define CHANNEL  351                // Channel number: f(MHz) = (422.4+CHANNEL/10)*(1+HFREQ)   
#else   
#include   
//#include   
//#include   
#include   
//#include   
//#include   
#endif   
   
#define uchar unsigned char   
#define uint unsigned int   
#define nop()   _nop_()   
   
   
sbit LED=P0^5;   
sbit data0=P0^4;   
sbit data1=P0^3;   
sbit fsen=P1^0;   
//static volatile uchar timer;   
static volatile uchar t0lrel, t0hrel;   
static volatile uchar t1lrel, t1hrel;   
   
uchar a[3];   
uchar ou_check=0;   
uchar ji_check=0;   
uchar count=0;   
uchar count1=0;   
uint count0=0;   
   
bit over_flag=0;   
bit over1_flag=0;   
//bit over2_flag=0;   
   
uchar code array[3]={0x91,0x6d,0x47};   
   
#ifndef NRF9E5   
   
struct RFConfig   
{   
    unsigned char n;   
    unsigned char buf[15];   
};   
   
typedef struct RFConfig RFConfig;   
   
#define ADDR_INDEX  8               // Index to address bytes in RFConfig.buf   
#define ADDR_COUNT  4               // Number of address bytes   
//暂时3个字节卡号无卡号的校验和   
const RFConfig tconf =   
{   
    15,   
    0x18,                           // Payload size transmitter Rx #2 (not used in this example)   
    0x18,                           // Payload size transmitter Rx #1 (not used in this example)   
    0x00, 0x00, 0x00, 0x00, 0x00,   // Address of transmitter Rx #2 (not used in this example)   
    0x00, 0x12, 0x34, 0x56, 0x78,   // Address of transmitter Rx #1 (not used in this example)   
    0x81, 0x6f, 0x04   
};   
   
const RFConfig rconf =   
{   
    15,   
    0x18,                           // Payload size receiver Rx #2 (not used in this example)   
    0x18,                           // Payload size receiver Rx #1   
    0x00, 0x00, 0x00, 0x00, 0x00,   // Address receiver Rx #2 (not used in this example)   
    0x00, 0x12, 0x34, 0x56, 0x78,   // Address receiver Rx #1 (four lower bytes used here)   
    0x81, 0x6f, 0x05   
};   
   
#endif   
   
void Delay100us(volatile unsigned char n)   
{   
    unsigned char i;   
    while(n--)   
        for(i=0;i<35;i++)   
            ;   
}   
void fs()   
{   uchar i;   
    uchar j;   
    uchar k;   
    uchar ou_check=0;   
    uchar ji_check=0;   
    for(i=0;i<8;i++)   
    ou_check+=((a[0]>>i)&0x01);   
    for(i=4;i<8;i++)   
    ou_check+=((a[1]>>i)&0x01);   
    if(ou_check&0x01)   
    ou_check=1;   
    else   
    ou_check=0;   
    for(i=0;i<4;i++)   
    ji_check+=((a[1]>>i)&0x01);   
    for(i=0;i<8;i++)   
    ji_check+=((a[2]>>i)&0x01);   
    if(ji_check&0x01)   
    ji_check=0;   
    else   
    ji_check=1;   
    if(ou_check)                          //1的个数是奇数   
    {   data1=0;   
        count1=0;   
        over1_flag=0;   
        TR2=1;   
        while(!over1_flag)   
        {   nop();   
        }   
        //Delay100us(1);   
        //data1=1;   
        //Delay100us(10);   
    }   
    else   
    {   data0=0;   
        count1=0;   
        over1_flag=0;   
        TR2=1;   
        while(!over1_flag)   
        {   nop();   
        }          
        //Delay100us(1);   
        //data0=1;   
        //Delay100us(10);   
    }   
    for(i=0;i<3;i++)   
    {   for(j=8;j>0;j--)   
        {    k=j-1;   
             k=(a[i]>>k)&0x01;   
             if(k)   
             {  data1=0;   
                over1_flag=0;   
                count1=0;   
                TR2=1;   
                while(!over1_flag)   
                {;}   
                //Delay100us(1);   
                //data1=1;   
                //Delay100us(10);   
             }   
             else   
             {  data0=0;   
                count1=0;   
                over1_flag=0;   
                TR2=1;   
                while(!over1_flag)   
                {;}                
        //  Delay100us(1);   
                //data0=1;   
            //Delay100us(10);   
                   
            }   
        }   
    }   
    if(ji_check)                  //1的个数是偶数   
    {   
        data1=0;   
        count1=0;   
        over1_flag=0;   
        TR2=1;   
        while(!over1_flag)   
        {;}   
        //Delay100us(1);   
    //  data1=1;   
        //Delay100us(10);   
    }   
    else   
    {   data0=0;   
        count1=0;   
        over1_flag=0;   
        TR2=1;   
        while(!over1_flag)   
        {;}   
        //Delay100us(1);   
        //data0=1;   
        //Delay100us(10);   
    }   
}   [page]
/*void rst_wdog()  
{   if((REGX_CTRL&0x10)!=0x10)  
    {   REGX_MSB=0x75;  
        REGX_LSB=0x30;  
    //  REGX_CTRL=0x08;  
    }  
}*/   
unsigned char SpiReadWrite(unsigned char b)   
{   
    EXIF &= ~0x20;                  // Clear SPI interrupt   
    SPI_DATA = b;                   // Move byte to send to SPI data register   
    while((EXIF & 0x20) == 0x00)    // Wait until SPI hs finished transmitting   
        ;      
    return SPI_DATA;   
}   
void TransmitPacket()   
{   
    unsigned char i;   
    CE = 1;   
    Delay100us(0);   
    // All packets start with the receiver address:   
    for(i=0;i
        SpiReadWrite(tconf.buf[ADDR_INDEX+i]);   
    SpiReadWrite(array[0]);   
    SpiReadWrite(array[1]);   
    SpiReadWrite(array[2]);   
    CE = 0;   
    Delay100us(3);                  // Wait ~300us   
}   
///led000000000000000000000000000000000000   
/*定时器0和定时器1的定时间是10ms*/   
void InitTimer(void)   
{   
    TR0 = 0;   
    TMOD &= ~0x33;   
    TMOD |= 0x11;                   // mode 1   
    CKCON |= 0x98;                  // T0M = 1 (/4 timer clock)   
    t0lrel = 0xC0;                  // 1KHz tick...   
    t0hrel = 0x63;                  // ... = 65536-16e6/(4*1e3) = F060h   
    TF0 = 0;                        // Clear any pending Timer0 interrupts   
    ET0 = 1;                        // Enable Timer0 interrupt   
    TR1=0;   
    t1lrel=0xC0;   
    t1hrel=0x63;   
    TF1 = 0;                        // Clear any pending Timer0 interrupts   
    ET1 = 1;      
    T2CON=0x00;   
    RCAP2H=0xFE;   
    RCAP2L=0x70;   
    ET2=1;     
}   
void Timer0ISR (void) interrupt 1   
{   
    TF0 = 0;                        // Clear Timer0 interrupt   
    TH0 = t0hrel;                   // Reload Timer0 high byte   
    TL0 = t0lrel;                   // Reload Timer0 low byte   
    count0++;   
    if (count0==300)   
    {      
        LED=0;                 // Led off          
        TR0 = 0;                    // Stop timer   
    }   
}   
void Timer1ISR(void) interrupt 3   
{      
    TF1 = 0;                        // Clear Timer1 interrupt   
    TH1 = t1hrel;                   // Reload Timer1 high byte   
    TL1 = t1lrel;                   // Reload Timer1 low byte   
    count++;   
    if (count == 120)   
    {   
       count=0;   
       over_flag=1;   
       TR1=0;   
    }      
}   
void Timer2ISR (void) interrupt 5 using 2   
{   
    TF2 = 0;     
    count1++;   
    if (count1==1)   
    {      
        data0=1;   
        data1=1;   
    }   
    else if(count1==11)   
    {   count1=0;   
        over1_flag=1;   
        TR2=0;   
    }   
}   
void Receiver(void)   
{   
    unsigned char b;   
    CS = 1;   
    Delay100us(0);   
    for(b=0;b
    {   
        SpiReadWrite(rconf.buf[b]);   
    }   
    CS = 0;   
       
    for(;;)   
    {   
        CE = 1;    
        while(DR1 == 0)   
        {   //rst_wdog();   
            nop();   
        }   
        a[0]=SpiReadWrite(0);   
        a[1]=SpiReadWrite(1);   
        a[2]= SpiReadWrite(2);     
        CE = 0;   
        LED=1;   
        count0=0;   
        TR0 = 1;   
        if(fsen==0)   
        {      
            fs();   
        }   
        //rst_wdog();      
    }   
}   
   
void Transmitter(void)   
{   
    unsigned char b;   
    CS = 1;   
    Delay100us(0);   
    for(b=0;b
    {   
        SpiReadWrite(tconf.buf[b]);   
    }   
    CS = 0;      
    for(;;)   
    {   //rst_wdog();   
        TransmitPacket();        // Transmit data   
        over_flag=0;   
        TR1=1;   
        LED=1;         
        while(!over_flag)   
        {   nop();   
        }          
    }   
}   
   
void Init(void)   
{   uchar i;   
    uchar j;   
    P0_DIR=0x00;               
    P0=0xfb;   
    P1=0xff;             
    SPICLK=1;   
    SPI_CTRL=0x02;          //连接到RADIO上   
    PWR_UP = 1;                     // Turn on Radio on 24E1   
    Delay100us(30);                 // Wait > 3ms   
    InitTimer();   
    EA = 1;    
    for(j=0;j<2;j++)   
    {   LED=1;   
        for(i=0;i<10;i++)   
        {   Delay100us(250);   
            Delay100us(250);           
        }   
        LED=0;   
        for(i=0;i<10;i++)   
        {   Delay100us(250);   
            Delay100us(250);           
        }   
    }   
}   
   
void main(void)   
{      
    Init();   
   /*f((REGX_CTRL&0x10)!=0x10)  
    {  
        REGX_MSB=0x75;  
        REGX_LSB=0x30;  
        REGX_CTRL=0x08;  
    }  */   
    //Receiver();   
    Transmitter();   
}   
关键字:NRF9E51  IC卡  卡号 引用地址:NRF9E51读IC卡卡号,并把读取到的数据传送出去

上一篇:通过按键控制IO口操作
下一篇:仍在连接中, 请给 MCU 上电...(解决方案)

推荐阅读最新更新时间:2024-03-16 14:03

IC卡接口芯片TDA8007的读写器设计
    IC卡(Integrated Circuit card)即集成电路卡,是将一个集成电路芯片镶嵌于朔料基片中,封装成卡的形式,外形与常用的覆盖磁条的磁卡相似。IC卡芯片具有写入和存储数据的能力。IC卡存储器中的内容根据需要可以有条件地供外部读取,或供内部信息处理和判定。根据卡中所镶嵌的集成电路的不同,可以分成存储器卡、逻辑加密卡、CPU卡三类。其中CPU卡即为由中央处理器CPU、EEPROM、随机存储器RAM以及固化在只读存储器ROM中的片内操作系统COS(Chip Operation System)组成的IC卡。IC卡按与外界数据传送的形式来分,有接触式和非接触式两种。   1 CPU IC卡T=0的协议介绍
[嵌入式]
IC卡设备驱动模块的代码
  面以我们采用的公用电话机通用的IC卡为例,通过已实现代码来说明整个IC卡设备驱动模块。   (1)数据结构的确定   编辑头文件ICDATA.H,确定在驱动模块程序中应用的公用数据结构。驱动模块的最终目的是读取和写入卡数据处理,所以规范整齐的数据结构是必须的。可以定义一个数据结构体来实现卡数据的存储区域、数据地址索引、控制标志位等,如:      这样在驱动模块中,只需要struct ICDATA iccdata;一条语句便可定义全部的卡处理数据结构定义;而ic_fops则定义了设备操作映射函数结构。从这个数据结构看,我们实现了IC卡设备的打开、读、写和监控函数。   (2)硬件接口控制线控制子函数   这些函
[单片机]
<font color='red'>IC卡</font>设备驱动模块的代码
利用曼码调制的非接触IC卡读写程序编制
 导 言   IC卡又称集成电路卡,它是在大小和普通信用卡相同的塑料卡片上嵌置一个或多个集成电路构成的。集成电路芯片可以是存储器或向处理器。带有存储器的IC卡又称为记忆卡或存储卡,带有微处理器的IC卡又称为智能卡或智慧卡。记忆卡可以存储大量信息;智能卡则不仅具有记忆能力,而且还具有处理信息的功能。因其使用便捷、安全,日益为有关技术领域的工程师所关注。   图1 采用e5550/U2270B的非接触卡读写系统示意图非接触IC卡是一种接口电路。它通过卡上配置的发射机应答器振荡线圈与基站振荡线圈的耦合取得能量,通过必要的通信软件配合,保证卡与基站间实现双向数据交换,如图1所示。   图1 采用e5550/U2270B的非接触卡
[工业控制]
利用曼码调制的非接触<font color='red'>IC卡</font>读写程序编制
华北工控工业整机在中国石化IC卡加油站的应用方案
   系统概述:   目前,中国石化加油IC卡工程将覆盖中国石化股份有限公司所属的20个省(自治区、直辖市、计划单列市)石油分公司,260余个地市级公司,1300余个县级公司的25000余座加油站。中国石化加油IC卡工程是一个跨平台、范围广、涉及面宽的全国性系统建设工程。为了应对客户不断提高的服务需求、顺应"信息化带动产业化"的技术发展趋势,利用先进的电子信息技术,以IC卡为载体,实现中国石化成品油零售系统的改造。通过工程的建设,在中国石化领域的所有加油站内实现"一卡在手,各地加油"的目标。以IC卡这一现代支付工具取代传统的现金、油票等结算方式,在加油站安装加油站管理控制了系统,实现成品油零售业务的电子支付和交易数据的自动采集
[嵌入式]
手持终端IC消费机设计方案
一、概述 手持式终端IC消费机是一台针对消费系统应用所研制的读卡机,尤其是在一些计算机使用不方便的商店里或是为了方便让顾客刷卡的地方,可以将手持机拿到客户面前直接做消费处理。 轻巧的手持式终端机可以随时脱机离线作业或是连网作业,不占任何使用空间最适合于空间狭窄的商店公交车或消费包厢里使用。图形式的显示屏具中文显示让交易工作效率更高。 由非接触式IC卡食堂售饭管理系统所引起的“收费革命”,必将为企业带来如下效益: ▼消费方式快捷、方便,极大地提高了工作效率,优化了服务质量。 ▼消除了现金交易的繁琐和误差,并有效地防止了各种徇私舞弊的行为。 ▼加强了卫生管理。 ▼收费和统计的全面自动化,方便了财务管理,亦可堵塞其它管理
[网络通信]
国产智能IC芯片安全性具备竞争力
2013中国国际金融展5日于北京展览馆拉开帷幕,2013中国国际金融展参展企业逾300家,展览面积超过2.2万平方米。2013年是中国金融产业发展的关键年,以互联网金融为代表的新金融模式快速发展,并在整体市场中占据了部分份额,形成了互联网金融的自有产业链。 在2013中国国际金融展组织的第十四届金融发展论坛中,上海华虹集成电路有限责任公司金融产品线总经理贾峻先生向与会者发表了主题为“精益求精、再创辉煌——华虹设计助力金融IC发展”的演讲。演讲中,他表示作为国产IC芯片供应商,上海华虹无论是在产能上还是在安全性上,都已经具备了足够的竞争优势,相关产品也在国外获得了安全认证,华虹愿意为中国金融行业的发展作出更大贡献。 以下是讲
[嵌入式]
载频为13.5MHz的IC卡PCD发送通道技术
摘要:介绍了13.56MHz PCD发送通道的电路结构和设计思路,给出了一种适合TYPE A、TYPE B、REID等多种非接触式IC卡的PCD发送通道的设计方法。 关键词:PCD TYPE A TYPE B 修正密勒码 E类放大器 1 引言 非接触式IC卡是射频技术和IC卡技术相结合的产物, 它成功地解决了无源和免接触问题,因而获得了广泛的应用。ISO/IEC 14443是较新型的非接触IC卡的国际标准,该标准称IC卡为PICC卡,读写器为PCD。它规定了PICC和PCD之间的TYPE A和TYPE B两种通信传输模式,它们的载波频率均为13.56MHz。这两种模式主要针对智能卡。实际上,有很多存储器卡、射频身份识别
[网络通信]
H4001非接触式IC卡读卡程序的研究
【摘 要】 介绍了基于P4095芯片的一种非接触式IC卡(H4001)的读卡机制,并提出了一种曼彻斯特码的解码方法。 关键词:非接触式IC卡,曼彻斯特码,解码   IC卡(Integrated Circuit Card)经过20多年的发展,已广泛应用于金融、电信、保险、商业、国防、公共事业等领域。IC卡按外部接口设备的连接方式可分为接触式IC卡和非接触式IC卡(又称射频卡)两类。接触式IC卡,就是IC卡与外界进行数据通讯时,芯片的电极触点必须与IC卡读写设备直接连接;非接触式IC卡在使用时则无须与IC卡读写器设备直接连接,而是通过无线电波或电磁感应的方式实现与IC卡读写设备的数据通讯。在刷卡速度要求高,用卡环境恶劣,污
[工业控制]
H4001非接触式<font color='red'>IC卡</font>读卡程序的研究
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved