/*********************************标准的SPI协议写入读出(C51)
NRF24L01+
注意!!! : K60  要识别第几数据位时必须移置最低位 例如 sba&0x40要写成(sba&0x40) >>6
修改人:pg
最后修改时间:2016.5.12
**********************************************/
//#include "derivative.h"
#include "24L01.h"
#include "gpio.h"
#include "delay.h"
//#include "main.h"typedef unsigned char uchar;
typedef unsigned char uint;#define CE    PTE0_O  #define CSN   PTE1_O#define SCK   PTE2_O#define MOSI  PTE3_O#define MISO  PTE4_I#define IRQ   PTE5_O #define key1 PTC0_I
#define led PTA15_O/*
#define keydown PTC1_I
#define keyok PTC2_I
#define keyleft PTC3_I
#define keyright PTC4_I         */#define RX_DR ((sta&0x40) >>6)          /**坑爹坑爹K60必须移到最低位才能识别**/
#define TX_DS ((sta&0x20)  >>5)
#define MAX_RT ((sta&0x10) >>4)//==========================NRF24L01============================================
#define TX_ADR_WIDTH    5   // 5 uints TX address width
#define RX_ADR_WIDTH    5   // 5 uints RX address width
#define TX_PLOAD_WIDTH  32   // 32 TX payload
#define RX_PLOAD_WIDTH  32   // 32 uints TX payload
//=========================NRF24L01寄存器指令===================================
#define READ_REG        0x00   // 读寄存器指令
#define WRITE_REG       0x20 // 写寄存器指令
#define RD_RX_PLOAD     0x61   // 读取接收数据指令
#define WR_TX_PLOAD     0xA0   // 写待发数据指令
#define FLUSH_TX        0xE1 // 冲洗发送 FIFO指令
#define FLUSH_RX        0xE2   // 冲洗接收 FIFO指令
#define REUSE_TX_PL     0xE3   // 定义重复装载数据指令
#define NOP             0xFF   // 保留
//========================SPI(nRF24L01)寄存器地址===============================
#define CONFIG          0x00  // 配置收发状态,CRC校验模式以及收发状态响应方式
#define EN_AA           0x01  // 自动应答功能设置
#define EN_RXADDR       0x02  // 可用信道设置
#define SETUP_AW        0x03  // 收发地址宽度设置
#define SETUP_RETR      0x04  // 自动重发功能设置
#define RF_CH           0x05  // 工作频率设置
#define RF_SETUP        0x06  // 发射速率、功耗功能设置
#define STATUS          0x07  // 状态寄存器
#define OBSERVE_TX      0x08  // 发送监测功能
#define CD              0x09  // 地址检测
#define RX_ADDR_P0      0x0A  // 频道0接收数据地址
#define RX_ADDR_P1      0x0B  // 频道1接收数据地址
#define RX_ADDR_P2      0x0C  // 频道2接收数据地址
#define RX_ADDR_P3      0x0D  // 频道3接收数据地址
#define RX_ADDR_P4      0x0E  // 频道4接收数据地址
#define RX_ADDR_P5      0x0F  // 频道5接收数据地址
#define TX_ADDR         0x10  // 发送地址寄存器
#define RX_PW_P0        0x11  // 接收频道0接收数据长度
#define RX_PW_P1        0x12  // 接收频道0接收数据长度
#define RX_PW_P2        0x13  // 接收频道0接收数据长度
#define RX_PW_P3        0x14  // 接收频道0接收数据长度
#define RX_PW_P4        0x15  // 接收频道0接收数据长度
#define RX_PW_P5        0x16  // 接收频道0接收数据长度
#define FIFO_STATUS     0x17  // FIFO栈入栈出状态寄存器设置
//=============================RF24l01状态=====================================unsigned char  TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//本地地址
unsigned char  RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//接收地址
unsigned char  sta;
char  tf, RxBuf[32],TxBuf[32];
/*
void inerDelay_us(unsigned char n);
void init_NRF24L01(void);//Error[Pe147]: declaration is incompatible with "__interwork __softfp char SPI_RW_Reg(char, char)" (declared at line 81) G:\桌面\电赛\15年电赛\旋转倒立摆\k60旋转倒立摆程序\7-31液晶屏加NRF\src\Sources\C\Component_C\OLED.c 86
//原因:需要最前面定义此函数
void SetRX_Mode(void);
uint SPI_RW(uint ucharss);
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);
void nRF24L01_TxPacket(unsigned char * tx_buf);
uint SPI_RW_Reg(uchar reg, uchar value);
uchar SPI_Read(uchar reg);
//uchar Check_Ack();
uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);
uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);   */
/*******************************************************************************************/
/*延时函数*/
/******************************************************************************************/
void inerDelay_us(unsigned char n)
{
for(;n>0;n--){asm("nop");}}
//****************************************************************************************
/*NRF24L01初始化 */
/***************************************************************************************/
void init_NRF24L01(void)
{inerDelay_us(100);CE=0;    // chip enableCSN=1;   // Spi disable SCK=0;   // Spi clock line init high
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      //  频道0自动ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21
SPI_RW_Reg(WRITE_REG + RF_CH, 0);        //   设置信道工作为2.4GHZ,收发必须一致
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   //设置发射速率为1MHZ,发射功率为最大值0dB
}
/****************************************************************************************************函数:uint SPI_RW(uint uchar)  功能:NRF24L01的SPI写时序
***************************************************************************************************/
uint SPI_RW(uint ucharss)
{
uint bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit{       // MOSI = (uchar & 0x80);  k60识别不了!,STC12却可以!坑爹MOSI = (ucharss & 0x80)>>7; // output 'uchar', MSB to MOSI
ucharss = (ucharss << 1);           // shift next bit into MSB..
SCK = 1;                      // Set SCK high..
ucharss |= MISO;        // capture current MISO bit
SCK = 0;             // ..then set SCK low again}return(ucharss);            // return read uchar
}
/****************************************************************************************************
函数:uchar SPI_Read(uchar reg)
功能:NRF24L01的SPI时序
****************************************************************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;CSN = 0;                // CSN low, initialize SPI communication...
SPI_RW(reg);            // Select register to read from..
reg_val = SPI_RW(0);    // ..then read registervalue
CSN = 1;                // CSN high, terminate SPI communicationreturn(reg_val);        // return register value
}
/****************************************************************************************************/
/*功能:NRF24L01读写寄存器函数
****************************************************************************************************/
uint SPI_RW_Reg(uchar reg, uchar value)
{
uint status;CSN = 0;                   // CSN low, init SPI transaction
status = SPI_RW(reg);      // select register
SPI_RW(value);             // ..and write value to it..
CSN = 1;                   // CSN high againreturn(status);            // return nRF24L01 status uchar
}
/****************************************************************************************************/
/*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
****************************************************************************************************/
uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
{
uint status,uchar_ctr;CSN = 0;                    // Set CSN low, init SPI tranaction
status = SPI_RW(reg);       // Select register to write to and read status ucharfor(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
pBuf[uchar_ctr] = SPI_RW(0);    // CSN = 1;                           return(status);                    // return nRF24L01 status uchar
}
/*********************************************************************************************************
函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
*********************************************************************************************************/
uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
{
uint status,uchar_ctr;CSN = 0;            //SPI使能
status = SPI_RW(reg);
for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
SPI_RW(*pBuf++);
CSN = 1;           //关闭SPI
return(status);    //
}
/****************************************************************************************************/
/*函数:void SetRX_Mode(void)功能:数据接收配置
****************************************************************************************************/
void SetRX_Mode(void)
{
CE=0;
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);   // IRQ收发完成中断响应,16位CRC ,主接收
CE = 1;
inerDelay_us(130);
}
void SetTX_Mode(void)
{
CE=0;
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   // IRQ收发完成中断响应,16位CRC ,主发送
CE = 1;
inerDelay_us(130);
}
/******************************************************************************************************/
/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
功能:数据读取后放如rx_buf接收缓冲区中
******************************************************************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{unsigned char revale=0;
sta=SPI_Read(STATUS);// 读取状态寄存其来判断数据接收状况
if(RX_DR) // 判断是否接收到数据
{CE = 0; //SPI使能
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
revale =1; //读取数据完成标志
}
SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
return revale;
}
/***********************************************************************************************************
函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
功能:发送 tx_buf中数据
**********************************************************************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
CE=0; //StandBy I模式
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);// 装载数据
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   // IRQ收发完成中断响应,16位CRC,主发送
CE=1; //置高CE,激发数据发送
inerDelay_us(10);
}
//************************************主函数************************************************************uchar Check_Ack()//他会自动重发
{
//while(IRQ);
sta = SPI_RW(NOP);                    // 返回状态寄存器
if(MAX_RT)// 是否清除TX FIFO,没有清除在复位MAX_RT中断标志后重发
SPI_RW(FLUSH_TX);
SPI_RW_Reg(WRITE_REG + STATUS, sta);  // 清除TX_DS或MAX_RT中断标志
IRQ = 1;
if(TX_DS)
return(0x00);
else
return(0xff);}

以上为C文件,来源于网络的C51标准函数,注意事项已在注释中表明

以下为H文件

#ifndef _24L01_H
#define _24L01_H
#include "common.h"extern void inerDelay_us(unsigned char n);
extern void init_NRF24L01(void);//Error[Pe147]: declaration is incompatible with "__interwork __softfp char SPI_RW_Reg(char, char)" (declared at line 81) G:\桌面\电赛\15年电赛\旋转倒立摆\k60旋转倒立摆程序\7-31液晶屏加NRF\src\Sources\C\Component_C\OLED.c 86
//原因:需要最前面定义此函数
extern void SetRX_Mode(void);
extern void SetTX_Mode(void);
extern uint8 SPI_RW(uint8 ucharss);
extern unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);
extern void nRF24L01_TxPacket(unsigned char * tx_buf);
extern uint8 SPI_RW_Reg(uint8 reg, uint8 value);
extern uint8 SPI_Read(uint8 reg);
extern uint8 Check_Ack();
extern uint8 SPI_Write_Buf(uint8 reg, uint8 *pBuf, uint8 uchars);
extern uint8 SPI_Read_Buf(uint8 reg, uint8 *pBuf, uint8 uchars);//GPIO位带操作宏定义
//Pin方向控制
#define DDR(x, n)       BITBAND_REG(x->PDDR, n)
#define DDRAn(n)        DDR(PTA, n)
#define DDRBn(n)        DDR(PTB, n)
#define DDRCn(n)        DDR(PTC, n)
#define DDRDn(n)        DDR(PTD, n)
#define DDREn(n)        DDR(PTE, n)
#define DDRA0           DDRAn(0)        //PortA方向控制
#define DDRA1           DDRAn(1)
#define DDRA2           DDRAn(2)
#define DDRA3           DDRAn(3)
#define DDRA4           DDRAn(4)
#define DDRA5           DDRAn(5)
#define DDRA6           DDRAn(6)
#define DDRA7           DDRAn(7)
#define DDRA8           DDRAn(8)
#define DDRA9           DDRAn(9)
#define DDRA10          DDRAn(10)
#define DDRA11          DDRAn(11)
#define DDRA12          DDRAn(12)
#define DDRA13          DDRAn(13)
#define DDRA14          DDRAn(14)
#define DDRA15          DDRAn(15)
#define DDRA16          DDRAn(16)
#define DDRA17          DDRAn(17)
#define DDRA18          DDRAn(18)
#define DDRA19          DDRAn(19)
#define DDRA24          DDRAn(24)
#define DDRA25          DDRAn(25)
#define DDRA26          DDRAn(26)
#define DDRA27          DDRAn(27)
#define DDRA28          DDRAn(28)
#define DDRA29          DDRAn(29)
#define DDRB0           DDRBn(0)        //PortB方向控制
#define DDRB1           DDRBn(1)
#define DDRB2           DDRBn(2)
#define DDRB3           DDRBn(3)
#define DDRB4           DDRBn(4)
#define DDRB5           DDRBn(5)
#define DDRB6           DDRBn(6)
#define DDRB7           DDRBn(7)
#define DDRB8           DDRBn(8)
#define DDRB9           DDRBn(9)
#define DDRB10          DDRBn(10)
#define DDRB11          DDRBn(11)
#define DDRB16          DDRBn(16)
#define DDRB17          DDRBn(17)
#define DDRB18          DDRBn(18)
#define DDRB19          DDRBn(19)
#define DDRB20          DDRBn(20)
#define DDRB21          DDRBn(21)
#define DDRB22          DDRBn(22)
#define DDRB23          DDRBn(23)
#define DDRC0           DDRCn(0)        //PortC方向控制
#define DDRC1           DDRCn(1)
#define DDRC2           DDRCn(2)
#define DDRC3           DDRCn(3)
#define DDRC4           DDRCn(4)
#define DDRC5           DDRCn(5)
#define DDRC6           DDRCn(6)
#define DDRC7           DDRCn(7)
#define DDRC8           DDRCn(8)
#define DDRC9           DDRCn(9)
#define DDRC10          DDRCn(10)
#define DDRC11          DDRCn(11)
#define DDRC12          DDRCn(12)
#define DDRC13          DDRCn(13)
#define DDRC14          DDRCn(14)
#define DDRC15          DDRCn(15)
#define DDRC16          DDRCn(16)
#define DDRC17          DDRCn(17)
#define DDRC18          DDRCn(18)
#define DDRC19          DDRCn(19)
#define DDRD0           DDRDn(0)        //PortD方向控制
#define DDRD1           DDRDn(1)
#define DDRD2           DDRDn(2)
#define DDRD3           DDRDn(3)
#define DDRD4           DDRDn(4)
#define DDRD5           DDRDn(5)
#define DDRD6           DDRDn(6)
#define DDRD7           DDRDn(7)
#define DDRD8           DDRDn(8)
#define DDRD9           DDRDn(9)
#define DDRD10          DDRDn(10)
#define DDRD11          DDRDn(11)
#define DDRD12          DDRDn(12)
#define DDRD13          DDRDn(13)
#define DDRD14          DDRDn(14)
#define DDRD15          DDRDn(15)
#define DDRE0           DDREn(0)        //PortE方向控制
#define DDRE1           DDREn(1)
#define DDRE2           DDREn(2)
#define DDRE3           DDREn(3)
#define DDRE4           DDREn(4)
#define DDRE5           DDREn(5)
#define DDRE6           DDREn(6)
#define DDRE7           DDREn(7)
#define DDRE8           DDREn(8)
#define DDRE9           DDREn(9)
#define DDRE10          DDREn(10)
#define DDRE11          DDREn(11)
#define DDRE12          DDREn(12)
#define DDRE24          DDREn(24)
#define DDRE25          DDREn(25)
#define DDRE26          DDREn(26)
#define DDRE27          DDREn(27)
#define DDRE28          DDREn(28)#define PTxn_O(x, n)    BITBAND_REG(x->PDOR, n)
#define PTAn_O(n)       PTxn_O(PTA, n)
#define PTBn_O(n)       PTxn_O(PTB, n)
#define PTCn_O(n)       PTxn_O(PTC, n)
#define PTDn_O(n)       PTxn_O(PTD, n)
#define PTEn_O(n)       PTxn_O(PTE, n)
#define PTA0_O          PTAn_O(0)        //PortA输出
#define PTA1_O          PTAn_O(1)
#define PTA2_O          PTAn_O(2)
#define PTA3_O          PTAn_O(3)
#define PTA4_O          PTAn_O(4)
#define PTA5_O          PTAn_O(5)
#define PTA6_O          PTAn_O(6)
#define PTA7_O          PTAn_O(7)
#define PTA8_O          PTAn_O(8)
#define PTA9_O          PTAn_O(9)
#define PTA10_O         PTAn_O(10)
#define PTA11_O         PTAn_O(11)
#define PTA12_O         PTAn_O(12)
#define PTA13_O         PTAn_O(13)
#define PTA14_O         PTAn_O(14)
#define PTA15_O         PTAn_O(15)
#define PTA16_O         PTAn_O(16)
#define PTA17_O         PTAn_O(17)
#define PTA18_O         PTAn_O(18)
#define PTA19_O         PTAn_O(19)
#define PTA24_O         PTAn_O(24)
#define PTA25_O         PTAn_O(25)
#define PTA26_O         PTAn_O(26)
#define PTA27_O         PTAn_O(27)
#define PTA28_O         PTAn_O(28)
#define PTA29_O         PTAn_O(29)
#define PTB0_O          PTBn_O(0)        //PortB输出
#define PTB1_O          PTBn_O(1)
#define PTB2_O          PTBn_O(2)
#define PTB3_O          PTBn_O(3)
#define PTB4_O          PTBn_O(4)
#define PTB5_O          PTBn_O(5)
#define PTB6_O          PTBn_O(6)
#define PTB7_O          PTBn_O(7)
#define PTB8_O          PTBn_O(8)
#define PTB9_O          PTBn_O(9)
#define PTB10_O         PTBn_O(10)
#define PTB11_O         PTBn_O(11)
#define PTB16_O         PTBn_O(16)
#define PTB17_O         PTBn_O(17)
#define PTB18_O         PTBn_O(18)
#define PTB19_O         PTBn_O(19)
#define PTB20_O         PTBn_O(20)
#define PTB21_O         PTBn_O(21)
#define PTB22_O         PTBn_O(22)
#define PTB23_O         PTBn_O(23)
#define PTC0_O          PTCn_O(0)        //PortC输出
#define PTC1_O          PTCn_O(1)
#define PTC2_O          PTCn_O(2)
#define PTC3_O          PTCn_O(3)
#define PTC4_O          PTCn_O(4)
#define PTC5_O          PTCn_O(5)
#define PTC6_O          PTCn_O(6)
#define PTC7_O          PTCn_O(7)
#define PTC8_O          PTCn_O(8)
#define PTC9_O          PTCn_O(9)
#define PTC10_O         PTCn_O(10)
#define PTC11_O         PTCn_O(11)
#define PTC12_O         PTCn_O(12)
#define PTC13_O         PTCn_O(13)
#define PTC14_O         PTCn_O(14)
#define PTC15_O         PTCn_O(15)
#define PTC16_O         PTCn_O(16)
#define PTC17_O         PTCn_O(17)
#define PTC18_O         PTCn_O(18)
#define PTC19_O         PTCn_O(19)
#define PTD0_O          PTDn_O(0)        //PortD输出
#define PTD1_O          PTDn_O(1)
#define PTD2_O          PTDn_O(2)
#define PTD3_O          PTDn_O(3)
#define PTD4_O          PTDn_O(4)
#define PTD5_O          PTDn_O(5)
#define PTD6_O          PTDn_O(6)
#define PTD7_O          PTDn_O(7)
#define PTD8_O          PTDn_O(8)
#define PTD9_O          PTDn_O(9)
#define PTD10_O         PTDn_O(10)
#define PTD11_O         PTDn_O(11)
#define PTD12_O         PTDn_O(12)
#define PTD13_O         PTDn_O(13)
#define PTD14_O         PTDn_O(14)
#define PTD15_O         PTDn_O(15)
#define PTE0_O          PTEn_O(0)        //PortE输出
#define PTE1_O          PTEn_O(1)
#define PTE2_O          PTEn_O(2)
#define PTE3_O          PTEn_O(3)
#define PTE4_O          PTEn_O(4)
#define PTE5_O          PTEn_O(5)
#define PTE6_O          PTEn_O(6)
#define PTE7_O          PTEn_O(7)
#define PTE8_O          PTEn_O(8)
#define PTE9_O          PTEn_O(9)
#define PTE10_O         PTEn_O(10)
#define PTE11_O         PTEn_O(11)
#define PTE12_O         PTEn_O(12)
#define PTE24_O         PTEn_O(24)
#define PTE25_O         PTEn_O(25)
#define PTE26_O         PTEn_O(26)
#define PTE27_O         PTEn_O(27)
#define PTE28_O         PTEn_O(28)
//Pin输入
#define PTxn_I(x, n)    BITBAND_REG(x->PDIR, n)
#define PTAn_I(n)       PTxn_I(PTA, n)
#define PTBn_I(n)       PTxn_I(PTB, n)
#define PTCn_I(n)       PTxn_I(PTC, n)
#define PTDn_I(n)       PTxn_I(PTD, n)
#define PTEn_I(n)       PTxn_I(PTE, n)
#define PTA0_I          PTAn_I(0)        //PortA输入
#define PTA1_I          PTAn_I(1)
#define PTA2_I          PTAn_I(2)
#define PTA3_I          PTAn_I(3)
#define PTA4_I          PTAn_I(4)
#define PTA5_I          PTAn_I(5)
#define PTA6_I          PTAn_I(6)
#define PTA7_I          PTAn_I(7)
#define PTA8_I          PTAn_I(8)
#define PTA9_I          PTAn_I(9)
#define PTA10_I         PTAn_I(10)
#define PTA11_I         PTAn_I(11)
#define PTA12_I         PTAn_I(12)
#define PTA13_I         PTAn_I(13)
#define PTA14_I         PTAn_I(14)
#define PTA15_I         PTAn_I(15)
#define PTA16_I         PTAn_I(16)
#define PTA17_I         PTAn_I(17)
#define PTA18_I         PTAn_I(18)
#define PTA19_I         PTAn_I(19)
#define PTA24_I         PTAn_I(24)
#define PTA25_I         PTAn_I(25)
#define PTA26_I         PTAn_I(26)
#define PTA27_I         PTAn_I(27)
#define PTA28_I         PTAn_I(28)
#define PTA29_I         PTAn_I(29)
#define PTB0_I          PTBn_I(0)        //PortB输入
#define PTB1_I          PTBn_I(1)
#define PTB2_I          PTBn_I(2)
#define PTB3_I          PTBn_I(3)
#define PTB4_I          PTBn_I(4)
#define PTB5_I          PTBn_I(5)
#define PTB6_I          PTBn_I(6)
#define PTB7_I          PTBn_I(7)
#define PTB8_I          PTBn_I(8)
#define PTB9_I          PTBn_I(9)
#define PTB10_I         PTBn_I(10)
#define PTB11_I         PTBn_I(11)
#define PTB16_I         PTBn_I(16)
#define PTB17_I         PTBn_I(17)
#define PTB18_I         PTBn_I(18)
#define PTB19_I         PTBn_I(19)
#define PTB20_I         PTBn_I(20)
#define PTB21_I         PTBn_I(21)
#define PTB22_I         PTBn_I(22)
#define PTB23_I         PTBn_I(23)
#define PTC0_I          PTCn_I(0)        //PortC输入
#define PTC1_I          PTCn_I(1)
#define PTC2_I          PTCn_I(2)
#define PTC3_I          PTCn_I(3)
#define PTC4_I          PTCn_I(4)
#define PTC5_I          PTCn_I(5)
#define PTC6_I          PTCn_I(6)
#define PTC7_I          PTCn_I(7)
#define PTC8_I          PTCn_I(8)
#define PTC9_I          PTCn_I(9)
#define PTC10_I         PTCn_I(10)
#define PTC11_I         PTCn_I(11)
#define PTC12_I         PTCn_I(12)
#define PTC13_I         PTCn_I(13)
#define PTC14_I         PTCn_I(14)
#define PTC15_I         PTCn_I(15)
#define PTC16_I         PTCn_I(16)
#define PTC17_I         PTCn_I(17)
#define PTC18_I         PTCn_I(18)
#define PTC19_I         PTCn_I(19)
#define PTD0_I          PTDn_I(0)        //PortD输入
#define PTD1_I          PTDn_I(1)
#define PTD2_I          PTDn_I(2)
#define PTD3_I          PTDn_I(3)
#define PTD4_I          PTDn_I(4)
#define PTD5_I          PTDn_I(5)
#define PTD6_I          PTDn_I(6)
#define PTD7_I          PTDn_I(7)
#define PTD8_I          PTDn_I(8)
#define PTD9_I          PTDn_I(9)
#define PTD10_I         PTDn_I(10)
#define PTD11_I         PTDn_I(11)
#define PTD12_I         PTDn_I(12)
#define PTD13_I         PTDn_I(13)
#define PTD14_I         PTDn_I(14)
#define PTD15_I         PTDn_I(15)
#define PTE0_I          PTEn_I(0)        //PortE输入
#define PTE1_I          PTEn_I(1)
#define PTE2_I          PTEn_I(2)
#define PTE3_I          PTEn_I(3)
#define PTE4_I          PTEn_I(4)
#define PTE5_I          PTEn_I(5)
#define PTE6_I          PTEn_I(6)
#define PTE7_I          PTEn_I(7)
#define PTE8_I          PTEn_I(8)
#define PTE9_I          PTEn_I(9)
#define PTE10_I         PTEn_I(10)
#define PTE11_I         PTEn_I(11)
#define PTE12_I         PTEn_I(12)
#define PTE24_I         PTEn_I(24)
#define PTE25_I         PTEn_I(25)
#define PTE26_I         PTEn_I(26)
#define PTE27_I         PTEn_I(27)
#define PTE28_I         PTEn_I(28)/* GPIO - Peripheral instance base addresses */
/** Peripheral PTA base address */
#define PTA_BASE                                 (0x400FF000u)
/** Peripheral PTA base pointer */
#define PTA                                      ((GPIO_MemMapPtr)PTA_BASE)
/** Peripheral PTB base address */
#define PTB_BASE                                 (0x400FF040u)
/** Peripheral PTB base pointer */
#define PTB                                      ((GPIO_MemMapPtr)PTB_BASE)
/** Peripheral PTC base address */
#define PTC_BASE                                 (0x400FF080u)
/** Peripheral PTC base pointer */
#define PTC                                      ((GPIO_MemMapPtr)PTC_BASE)
/** Peripheral PTD base address */
#define PTD_BASE                                 (0x400FF0C0u)
/** Peripheral PTD base pointer */
#define PTD                                      ((GPIO_MemMapPtr)PTD_BASE)
/** Peripheral PTE base address */
#define PTE_BASE                                 (0x400FF100u)
/** Peripheral PTE base pointer */
#define PTE                                      ((GPIO_MemMapPtr)PTE_BASE)#endif

NRF24L01+在K60单片机中的具体实现相关推荐

  1. nRF24L01+基于51单片机的驱动(库)实战代码分享

    nRF24L01+基于51单片机的驱动(库)实战代码分享 关于代码来源 定义数据类型的头文件Type.h nRF24L01+驱动源代码文件nRF24L01P.c nRF24L01+驱动的头文件nRF2 ...

  2. STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)

    STM32单片机中WIFI模块数据传输问题(float->u32->u8/u8->u32->float)   最近在做毕业设计,在做wifi数据传输与接收时,涉及到了STM32 ...

  3. STM32为何能在众多单片机中脱颖而出?

    现在STM32资料教程如此丰富,但还是很多人学不会- 假如STM32像10年前的NXP单片机资料一样少,估计学不会的人会更多. 大家好,我是无际,一个踩坑单片机开发10年的老油条. 这些年,我用过很多 ...

  4. 单片机中存储器扩展位地址线怎么算_小白学单片机 :AT89S51单片机基本硬件结构认识(2)...

    AT89S51单片机存储器的空间配置及功能结构 AT89S51单片机的存储器在物理结构上可以分为4个不同的存储空间:(1)内部程序存储器:(2)片内数据存储器:(3)片外数据存储器(最大可扩展到64K ...

  5. 单片机中的ROM,RAM和FLASH的作用

    本文部分参考自:http://blog.sina.com.cn/s/blog_98ca54fc01017y4t.html 并在此基础上进行整理,添加了关于flash的问题. 之前从较为抽象的角度介绍了 ...

  6. 联合体在单片机中的应用

    转自:http://baike.baidu.com/item/%E8%81%94%E5%90%88%E4%BD%93?fr=aladdin 联合体在单片机中的应用 单片机中经常会遇见分离高低字节的操作 ...

  7. 51单片机中的定时器

    文章目录 1 51单片机中的定时器介绍 1.1 定时器的初步认识 1.2 定时器的寄存器 1.3 使用定时器的方法 1.4 定时时间的计算 2 定时器模式1 2.1 定时器模式1原理分析 2.2 使用 ...

  8. 单片机中灯泡显示miss_单片机实例分享,如何设计八路抢答器

    单片机作为可编程器件,简化了电路的设计.方便了逻辑设计,从此再也不用使用一大堆电路做硬件逻辑了.拆开任何一件功能稍微复杂一点电子产品,里边都可以看到单片机的身影.学会单片机对找工作也很有利,而且待遇还 ...

  9. 单片机中如何将BCD码拆开_单片机二进制BCD码转换实验程序流程图

    二进制BCD码转换 一.实验目的 1.掌握简单的数值转换算法 2.基本了解数值的各种表达方法 二.实验说明 单片机中的数值有各种表达方式,这是单片机的基础.掌握各种数制之间的转换是一种基本功.我们将给 ...

  10. html5控制单片机,10.2 单片机中 PWM 的原理与控制程序

    PWM 在单片机中的应用是非常广泛的,它的基本原理很简单,但往往应用于不同场合上意义也不完全一样,这里我先把基本概念和基本原理给大家介绍一下,后边遇到用的时候起码知道是个什么东西. PWM 是 Pul ...

最新文章

  1. 嗯,挺全乎儿的,Spring Boot 多环境配置都在这儿了,你喜欢哪一种呢?
  2. java flex xml_FLEX与JAVA的交互问题 -DOM4J-xml
  3. Ice_cream's world I HDU - 2120(并查集判环)
  4. 将联网方式更改为桥接模式
  5. 浅述 Docker 的容器编排
  6. 谈区块链的时候别忘记了“新零售”
  7. signature=0727ee8cc38ba70036807ebbc0b018d6,NMSSM+
  8. oracle11g Rac Bond,Oracle11g搭建RAC步骤..doc
  9. JAVAweb之SSH框架
  10. python如何批量下载大文件(支持断点续传)
  11. 2022聚合工艺复训题库及在线模拟考试
  12. 网站监控服务都包括哪些具体内容?
  13. SNAP 4. 使用snap进行地物光谱分析
  14. HALF-GCD算法的阐述
  15. Android中使用SVG矢量图打造多边形图形框架
  16. Minecraft mod制作简易教程(三)——创建一个物品
  17. 外卖返利系统/美团/饿了么外卖CPS联盟返利公众号小程序核心源码
  18. Win10任务栏软件图标变成白色如何解决?
  19. linux 系统时间 硬件时间 及 时区设置
  20. 使用领英助理解决领英搜索限制继续精准搜索人脉(客户)的方法

热门文章

  1. 在线客服html前端代码QQ微信联系
  2. Python爬虫初探——天涯
  3. tampermonkey这玩意如何替换flash播放器为h5播放器?
  4. 百度语音识别API报错KeyError: ‘result‘
  5. Android混淆介绍
  6. 小米笔记本pro充电测试软件,小米笔记本 Pro 评测:高端已成,性价比不变
  7. matlab gui制作,MATLAB GUI制作教程
  8. 12个你值得拥有的虚拟科学实验APP、工具和资源
  9. C# Revit二次开发
  10. Python爬虫实战之爬取链家广州房价_02把小爬虫变大