标题:
无线通讯器件24L01的读写寄存器程序
[打印本页]
作者:
hujia
时间:
2015-6-23 16:21
标题:
无线通讯器件24L01的读写寄存器程序
读写寄存器程序只能工作在待机模式和掉电模式
还有一点非常重要:在上电后要有一个1.5~2毫秒的等待;否则麻烦大了!
切记切记!!!1,16,与天津开发区第四项目部
/*无线模块定义*/
sbit CE=P1^3;//nrf24l01d的模式控制线在 CSN 为低的情况下,CE 协同NRF24L01 的CONFIG 寄存器共同决定NRF24L01 的状态(参照NRF24L01 的状态机)
sbit CSN=P1^4;//nrf24l01d的片选线,低电平有效
sbit IRQ=P1^5;//nrf24l01d的中断信号
/*SPI定义
*/
sbit SI=P1^0;//MOSI主出-从入
sbit SO=P1^1;//MISO主入-从出
sbit SCK=P1^2;// 时钟信号
/*可谓操作字节dat定义,用来构成最底层的SPT读写函数使用
*/
unsigned char bdata dat;
sbit dat_0=dat^0;
sbit dat_1=dat^1;
sbit dat_2=dat^2;
sbit dat_3=dat^3;
sbit dat_4=dat^4;
sbit dat_5=dat^5;
sbit dat_6=dat^6;
sbit dat_7=dat^7;
/*SPI最底层写一个字节函数
无返回值
有参
带形参H
*/
void delay2ms()//开机延时2MS
{
unsigned char a,b,c;
for(c=5;c>0;c--)
for(b=68;b>0;b--)
for(a=31;a>0;a--);
}
/*SPI写一个字节的最底层函数
有参
无返回值*/
void write_spi_2401(uchar h)//SPI写一字节函数
{
dat=h;
SI=dat_7;
SCK=0;
SCK=1;
SI=dat_6;
SCK=0;
SCK=1;
SI=dat_5;
SCK=0;
SCK=1;
SI=dat_4;
SCK=0;
SCK=1;
SI=dat_3;
SCK=0;
SCK=1;
SI=dat_2;
SCK=0;
SCK=1;
SI=dat_1;
SCK=0;
SCK=1;
SI=dat_0;
SCK=0;
SCK=1;
}
/*
SPI最底层读取一个字节
返回值是读出的这一个字节
无参
*/
uchar read_spi_2401()//SPI读一字节函数
{
SO=1;//初始化SO线
SCK=1;
SCK=0;
dat_7=SO;
SCK=1;
SCK=0;
dat_6=SO;
SCK=1;
SCK=0;
dat_5=SO;
SCK=1;
SCK=0;
dat_4=SO;
SCK=1;
SCK=0;
dat_3=SO;
SCK=1;
SCK=0;
dat_2=SO;
SCK=1;
SCK=0;
dat_1=SO;
SCK=1;
SCK=0;
dat_0=SO;
return (dat);//返回读取数值
}
/*写入寄存器命令函数
有参
无返回值
m:表示要操作的寄存器地址
date:表示要向内不写入的数据
*/
void write_rge_nrf24l01(uchar m,uchar date)
{
SCK=0;//时钟预选拉低
CSN=1;
CSN=0; //SPI开
write_spi_2401((0x20+m));//写入写寄存器命令
write_spi_2401(date);//写入date指向的寄存器数据
CSN=1;//SPI关
}
/*度寄存器子函数
将寄存器的数值读出
有参 M表示要读的寄存器
有返回值 返回读出的数据
*/
uchar read_reg_nrf24l01(uchar m)
{ uchar date;
SCK=0;
CSN=1;
CSN=0;
write_spi_2401(m);//读寄存器
date=read_spi_2401();
CSN=1;
return (date);
}
void main () //主函数
{
uchar i;
delay2ms(); //特别重要!!!不加的话,NRF24L01反应不过来!教训!!!!!20110116终于突破了
write_rge_nrf24l01(0x00,0x0a);//表示0号寄存器写入0AH数据
i=read_reg_nrf24l01(0x00);//表示读取0号寄存器数据
P0=i;
while(1);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1