标题:
NRF24LE1射频标签 有源RFID源码(单频卡-优化-500mS)
[打印本页]
作者:
落草
时间:
2018-11-6 15:30
标题:
NRF24LE1射频标签 有源RFID源码(单频卡-优化-500mS)
有源RFID的电子标签卡程序,使用24LE1的MCU+射频来实现,低功耗的有源电子标签
0.png
(11.27 KB, 下载次数: 61)
下载附件
2018-11-6 18:34 上传
源程序如下:
#include <reg24le1.h>
#include <stdint.h>
#include <API.h>
#include <nvdata.h>
#include <radio.h>
#include <system.h>
//#include <uart.h>
uint8_t data rx_buf[RX_PLOAD_WIDTH] = {0};
uint8_t data tx_buf[TX_PLOAD_WIDTH] = {0x00,0x00,0x00,0xEB};
uint8_t radio_status = 0;
uint8_t bdata sta; //IRQ中断后,判断是接收中断、发送中断和重发最大中断。
sbit RX_DR =sta^6;
sbit TX_DS =sta^5;
sbit MAX_RT =sta^4;
uint8_t flag = 0,flag1 = 0; //定时器计数标志变量
uint8_t pck_length = 0; //RF数据包长度
uint8_t cmd = 0; //卡号异或结果
uint8_t xdata packet[6] = {0}; //串口发送数据包
uint8_t xdata packet1[4] = {0}; //串口发送心跳包
/**************************************************
功能:主程序
**************************************************/
void main(void)
{
mcu_init(); //系统时钟
//uart_init(); // 串口初始化
io_init(); // I/O口初始化
//timer1_init(); // 定时器初始化
rf_init(); // RF初始化
//RX_Mode(); // 进入接收模式
TX_Mode(); // 进入发送模式
EA=1; // 允许中断
while(1)
{
watchdog_init();
//=====================PWRDWN节电模式=====================
RTC2CON |= 0x01; //RTC2配置开启
PWRDWN = 0x04; //enter "pwr_dwn"=0x04,register retention寄存器保留
RTC2CON &=~ 0x01; //RTC2配置关闭
//LED1 = ~LED1;
//LED2 = ~LED2;
//ALM = ~ALM; //蜂鸣器
tx_buf[0] = ((tx_buf[1] ^ tx_buf[2] ^ tx_buf[3]) & 0x7f);
if(VotageStatusCheck())
tx_buf[1] |= 0x80;//置位电量不足标志
else
tx_buf[1] &=~ 0x80;
//数据发射
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
CE_PULSE(); //CE置高至少10us,CE置低
radio_status = 0xff;
while(radio_status==0xff); // Wait until radio ready
//数据发射完成
}
}
/**************************************************
功能:RF中断服务程序
**************************************************/
void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
{
sta=SPI_Read(STATUS); // 读出状态值
if(RX_DR)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// 读出FIFO的数据
SPI_RW_Reg(FLUSH_RX,0); // 清除RX的FIFO
radio_status = 6;
}
if(TX_DS)
{
RFCE = 0;
radio_status = 5;
}
if(MAX_RT)
{
radio_status = 4;
}
SPI_RW_Reg(WRITE_REG+STATUS,0x70); // 清除所有中断标志
}
////////////////////////////////////////////////////////////////////////
void TimeSvr(void) interrupt INTERRUPT_TF1
{
TR1 = 0; //进入后先关闭定时器,执行完再打开
TH1 = 0x97;
TL1 = 0xD5; //20mS f=16M/12
flag ++;
if(flag >=50)
{
flag = 0;
//watchdog_init(); //喂狗
}
TR1 = 1;
}
void ri0_interrupt(void) interrupt INTERRUPT_RI0
{
if (RI0 == 1)
{
RI0 = 0;
/*
S0BUF = hal_flash_byte_read(HAL_DATA_NV_ADDRESS32);
while (!TI0); // 等待发送完成
TI0=0; // 清发送完成标志
*/
}
/*
else if (TI0 == 1)
{
TI0 = 0;
}
*/
}
复制代码
所有资料51hei提供下载:
24LE1_2.4GCard.zip
(70.01 KB, 下载次数: 46)
2018-11-6 15:30 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
wjxwood
时间:
2019-9-10 10:00
编译不了
作者:
yxw520
时间:
2020-6-23 10:37
发送的有错还往上发
作者:
SKYLAR123
时间:
2020-6-24 15:28
wjxwood 发表于 2019-9-10 10:00
编译不了
怎么编译不了啦,我下载下来编译通过了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1