久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

NRF9E51讀IC卡卡號,并把讀取到的數(shù)據(jù)傳送出去

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月15日   【字體:

 /*================================================================================================  

發(fā)送時間間隔是1.2秒  
指示燈:接收燈上電后變紅,收到數(shù)據(jù)后變綠,在3秒內未接收到數(shù)據(jù)則變紅  
        發(fā)送燈上電后變紅,發(fā)送數(shù)據(jù)變綠  
*==================================================================================================*/   
// Comment out the following line for nRF24E1   
//#define NRF9E5 1   
//卡號是916d47   
   
#ifdef NRF9E5   
#include <Nordic\reg9e5.h>   
#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 <reg24e1.h>   
//#include<absacc.h>   
//#include<stdlib.h>   
#include<intrins.h>   
//#include<stdio.h>   
//#include<math.h>   
#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個字節(jié)卡號無卡號的校驗和   
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的個數(shù)是奇數(shù)   
    {   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的個數(shù)是偶數(shù)   
    {   
        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);   
    }   
}   
/*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<ADDR_COUNT;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<rconf.n;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<tconf.n;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();   
}   
關閉窗口

相關文章

主站蜘蛛池模板: 91.色| 午夜激情网 | 国产精品久久久久久亚洲调教 | 亚洲精品日韩视频 | 亚洲 欧美 综合 | 欧美xxxx性 | 欧美不卡网站 | 二区三区视频 | 亚洲免费av一区 | 欧美亚洲激情 | 99久久精品国产麻豆演员表 | 一区二区视频 | 亚洲视频欧美视频 | 美女露尿口视频 | 日韩精品免费 | 99国产视频| 一区二区日韩精品 | 久久久久久久一区二区三区 | 亚洲精品www久久久久久广东 | www.久久99 | 鸳鸯谱在线观看高清 | 亚洲91av| 久久精品国产一区二区电影 | 欧美日韩视频一区二区 | 在线看av的网址 | 爱综合| 欧美激情国产精品 | 日本理论片好看理论片 | 久久精品视频网站 | 欧美成人免费在线视频 | 91视频在线 | 日韩高清在线 | 久久一及片 | 91视在线国内在线播放酒店 | 澳门永久av免费网站 | 99中文字幕 | 九色视频网站 | 欧美一a | 久久久久久久久国产精品 | 午夜影视在线观看 | 超碰日本|