|
有源RFID的電子標(biāo)簽卡程序,使用24LE1的MCU+射頻來實現(xiàn),低功耗的有源電子標(biāo)簽
0.png (11.27 KB, 下載次數(shù): 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中斷后,判斷是接收中斷、發(fā)送中斷和重發(fā)最大中斷。
- sbit RX_DR =sta^6;
- sbit TX_DS =sta^5;
- sbit MAX_RT =sta^4;
- uint8_t flag = 0,flag1 = 0; //定時器計數(shù)標(biāo)志變量
- uint8_t pck_length = 0; //RF數(shù)據(jù)包長度
- uint8_t cmd = 0; //卡號異或結(jié)果
- uint8_t xdata packet[6] = {0}; //串口發(fā)送數(shù)據(jù)包
- uint8_t xdata packet1[4] = {0}; //串口發(fā)送心跳包
- /**************************************************
- 功能:主程序
- **************************************************/
- void main(void)
- {
- mcu_init(); //系統(tǒng)時鐘
- //uart_init(); // 串口初始化
- io_init(); // I/O口初始化
- //timer1_init(); // 定時器初始化
- rf_init(); // RF初始化
- //RX_Mode(); // 進(jìn)入接收模式
- TX_Mode(); // 進(jìn)入發(fā)送模式
- EA=1; // 允許中斷
- while(1)
- {
- watchdog_init();
- //=====================PWRDWN節(jié)電模式=====================
- RTC2CON |= 0x01; //RTC2配置開啟
- PWRDWN = 0x04; //enter "pwr_dwn"=0x04,register retention寄存器保留
- RTC2CON &=~ 0x01; //RTC2配置關(guān)閉
- //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;//置位電量不足標(biāo)志
- else
- tx_buf[1] &=~ 0x80;
- //數(shù)據(jù)發(fā)射
- 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
- //數(shù)據(jù)發(fā)射完成
- }
- }
- /**************************************************
- 功能:RF中斷服務(wù)程序
- **************************************************/
- void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
- {
- sta=SPI_Read(STATUS); // 讀出狀態(tài)值
- if(RX_DR)
- {
- SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// 讀出FIFO的數(shù)據(jù)
- 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); // 清除所有中斷標(biāo)志
- }
- ////////////////////////////////////////////////////////////////////////
- void TimeSvr(void) interrupt INTERRUPT_TF1
- {
- TR1 = 0; //進(jìn)入后先關(guān)閉定時器,執(zhí)行完再打開
- 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); // 等待發(fā)送完成
- TI0=0; // 清發(fā)送完成標(biāo)志
- */
- }
- /*
- else if (TI0 == 1)
- {
- TI0 = 0;
- }
- */
- }
復(fù)制代碼
所有資料51hei提供下載:
24LE1_2.4GCard.zip
(70.01 KB, 下載次數(shù): 46)
2018-11-6 15:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|