📄 card.c
字号:
#include <reg24e1.h>
#define sn1 0x27 // card ID
#define sn2 0x12
sbit LED = P0^6; //LED: P0.6
#define ADDR_INDEX 10 // Index to address bytes in RFConfig.buf
#define ADDR_COUNT 2 // Number of address bytes
/******************************************************************
Fun : RTC interrupt service routine //RTC中断唤醒掉电模式
******************************************************************/
void RTCISR (void) interrupt 12
{
WDTI = 0; //clear WDTI
}
//定义结构体来装入RF寄存器配置
struct RFConfig
{
unsigned char n;
unsigned char buf[15];
};
typedef struct RFConfig RFConfig;
//配置字
const RFConfig tconf =
{
15,
0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x72, 0xaa, 0x43, 0x6f, 0x04
};
//延时时间=n*100us
void Delay100us( unsigned char n)
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}
/****************************************************************
Fun: SPI_DATA R/W //SPI数据读写()
****************************************************************/
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 b1,unsigned char b2 )
{
unsigned char i;
PWR_UP = 1; // 打开Radio
Delay100us(30); //等3ms
CE = 1;
Delay100us(0);
for(i=0;i<ADDR_COUNT;i++)
SpiReadWrite(tconf.buf[ADDR_INDEX+i]);
SpiReadWrite(b1);
SpiReadWrite(b2);
CE = 0;
Delay100us(3); //等300us
}
//初始化
void Init( void )
{
unsigned char b;
PSW = 0x20; //用工作寄存器R0
P0_ALT = 0x00; //不用P0口的第二功能
P0_DIR = 0x00; //P0为输出
LED = 0; // Led on led :p0.6
Delay100us(50);
LED = 1; //Led off
EA = 1; //中断允许
SPICLK = 0; // Max SPI clock,为1/2CPU速度 .
SPI_CTRL = 0x02; // 将SPI口接到905
//配置FR
PWR_UP = 1; // 打开Radio
Delay100us(30); //等3ms
CS = 1;
Delay100us(0);
for(b=0;b<tconf.n;b++)
{
SpiReadWrite(tconf.buf[b]);
}
CS = 0;
// 设置、启动RTC
//REGX_CTRL为看门狗的控制
//4空闲标志,0:空,1:忙 (只读)
//3读/写, 0:读,1:写
//2-0间接寻址
while( REGX_CTRL & 0x10 ); //Wait until REGX_CRTL.4 == 0 (i.e. not busy)
REGX_MSB = 0x07; //2s
REGX_LSB = 0xd0;
REGX_CTRL = 0x0A; //1010 写RTC寄存器
EWDI = 1; // Enable RTC interrupt
}
/***************************************************************
Fun: send card ID
***************************************************************/
void main ( void )
{
Init(); //initialize nrf24e1
while ( 1 ) // main loop
{
TransmitPacket(sn1,sn2);
while ( DR1 == 0 ); //transmit data is over
PWR_UP = 0; //关闭FR
Delay100us(16);
LED = 0; // Led on led :p0.6
Delay100us(5);
LED = 1; //Led off
CK_CTRL = 0x04; //Deep power down
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -