亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
兩片NRF24L01無法實現(xiàn)通信 大神們幫我看看,兩天了!
[打印本頁]
作者:
xiaofang
時間:
2017-8-5 19:33
標題:
兩片NRF24L01無法實現(xiàn)通信 大神們幫我看看,兩天了!
兩片
N
R
F
2
4
L
0
1無法實現(xiàn)通信
#include <STC12C5A60S2.H>
#include"LCD1602display.h"
// Define interface to nRF24L01
// Define SPI pinssbit qq=P3^4;
sbit CE = P2^1; // Chip Enable pin signal (output)
sbit CSN = P2^2; // Slave Select pin, (output to CSN, nRF24L01)
sbit SCK = P2^3; // Master Out, Slave In pin (output)
sbit MOSI = P2^4; // Serial Clock pin, (output)
sbit MISO = P2^5; // Master In, Slave Out pin (input)
sbit IRQ = P2^6; // Interrupt signal, from nRF24L01 (input)
sbit P3_7=P3^2;
// SPI(nRF24L01) commands
#define READ_REG 0x00 // Define read command to register
#define WRITE_REG 0x20 // Define write command to register
#define RD_RX_PLOAD 0x61 // Define RX payload register address
#define WR_TX_PLOAD 0xA0 // Define TX payload register address
#define FLUSH_TX 0xE1 // Define flush TX register command
#define FLUSH_RX 0xE2 // Define flush RX register command
#define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
#define NOP 0xFF // Define No Operation, might be used to read status register
// SPI(nRF24L01) registers(addresses)
#define CONFIG 0x00 // 'Config' register address
#define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
#define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
#define SETUP_AW 0x03 // 'Setup address width' register address
#define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
#define RF_CH 0x05 // 'RF channel' register address
#define RF_SETUP 0x06 // 'RF setup' register address
#define STATUS 0x07 // 'Status' register address
#define OBSERVE_TX 0x08 // 'Observe TX' register address
#define CD 0x09 // 'Carrier Detect' register address
#define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
#define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
#define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
#define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
#define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
#define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
#define TX_ADDR 0x10 // 'TX address' register address
#define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
#define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
#define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
#define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
#define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
#define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
#define uchar unsigned char
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字節(jié)寬度的發(fā)送/接收地址
#define TX_PLOAD_WIDTH 4 // 數(shù)據(jù)通道有效數(shù)據(jù)寬度
uchar code table[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
uchar code
TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};
// 定義一個靜態(tài)發(fā)送地址,該地址是指通道0的地址嗎??
uchar RX_BUF[TX_PLOAD_WIDTH]; //是否以確定發(fā)送與接收的數(shù)據(jù)寬度一樣??
uchar TX_BUF[TX_PLOAD_WIDTH]; //是否以確定發(fā)送與接收的數(shù)據(jù)寬度一樣??
uchar flag; //該字符的作用???
uchar x=0,y=0,z=0,m=0; //為什么設置為這個數(shù)字
uchar bdata sta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT = sta^4;
/**************************************************/
/**************************************************
函數(shù):delay_ms()
描述:
延遲x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i<x; i++)
{
j = 250;
while(--j);
j = 250;
while(--j);
}
}
/**************************************************/
/**************************************************
函數(shù):SPI_RW()
描述:
根據(jù)SPI協(xié)議,寫一字節(jié)數(shù)據(jù)到nRF24L01,同時從nRF24L01
讀出一字節(jié)
/**************************************************/
//是不是接收端與發(fā)射端都要用到這個函數(shù),讀出的字節(jié)是否為狀態(tài)字
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循環(huán)8次
{
MOSI = (byte & 0x80); // byte最高位輸出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01從MOSI讀入1位數(shù)據(jù),同時從MISO輸出1位數(shù)據(jù)
byte |= MISO; // 讀MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 返回讀出的一字節(jié)
}
/**************************************************/
/**************************************************
函數(shù):SPI_RW_Reg()
描述:寫數(shù)據(jù)value到reg寄存器
是不是通過寫地址確定寄存器,然后向其寫數(shù)據(jù)??
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,開始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態(tài)字
SPI_RW(value); // 然后寫數(shù)據(jù)到該寄存器
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
/**************************************************/
/**************************************************
函數(shù):SPI_Read()
描述:
從reg寄存器讀一字節(jié)
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,開始傳輸數(shù)據(jù)
SPI_RW(reg); // 選擇寄存器
reg_val = SPI_RW(0); // 然后從該寄存器讀數(shù)據(jù) 為什么送一個0就可以讀回一個數(shù)據(jù)
CSN = 1;
// CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(reg_val); // 返回寄存器數(shù)據(jù)
}
/**************************************************/
/**************************************************
函數(shù):SPI_Read_Buf()
描述:
從reg寄存器讀出bytes個字節(jié),通常用來讀取接收通道
數(shù)據(jù)或接收/發(fā)送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態(tài)字
for(i=0; i<bytes; i++)
pBuf[ i] = SPI_RW(0); // 逐個字節(jié)從nRF24L01讀出
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
/**************************************************/
/**************************************************
函數(shù):SPI_Write_Buf()
描述:
把pBuf緩存中的數(shù)據(jù)寫入到nRF24L01,通常用來寫入發(fā)
射通道數(shù)據(jù)或接收/發(fā)送地址
/**************************************************/
uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開始傳輸數(shù)據(jù)
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態(tài)字
for(i=0; i<bytes; i++)
SPI_RW(pBuf[ i]); // 逐個字節(jié)寫入nRF24L01
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
/**************************************************/
/**************************************************
函數(shù):RX_Mode()
描述:
這個函數(shù)設置nRF24L01為接收模式,等待接收發(fā)送設備的數(shù)據(jù)包
/**************************************************/
void RX_Mode(void)
{
CE = 0;
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);
// CRC使能,16位CRC校驗,上電,接收模式
CE = 1; // 拉高CE啟動接收設備
}
/**************************************************/
/**************************************************
函數(shù):TX_Mode()
描述:
這個函數(shù)設置nRF24L01為發(fā)送模式,(CE=1持續(xù)至少10us),
130us后啟動發(fā)射,數(shù)據(jù)發(fā)送結(jié)束后,發(fā)送模塊自動轉(zhuǎn)入接收
模式等待應答信號。
/**************************************************/
void TX_Mode(uchar * BUF)
{
CE = 0;
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 寫入發(fā)送地址 (與接收地址一樣)
SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);
// 寫數(shù)據(jù)包到TX FIFO(前以定義BUF數(shù)組發(fā)送數(shù)據(jù)4字節(jié),寫數(shù)據(jù)用于發(fā)送模式)
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
// CRC使能,16位CRC校驗,上電
CE = 1;
}
/**************************************************/
/*********
*****************************************
函數(shù): init_io()
描述:
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待機
CSN = 1; // SPI禁止
SCK = 0; // SPI時鐘置低
IRQ = 1; // 中斷復位
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 寫入發(fā)送地址 (與接收地址一樣)
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
// 為了應答接收設備,接收通道0地址和發(fā)送地址相同 (發(fā)射端設置0通道接收應答信號)
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 使能接收通道0自動應答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 使能接收通道0
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a);
// 自動重發(fā)延時等待250us+86us,自動重發(fā)10次
SPI_RW_Reg(WRITE_REG + RF_CH, 10);
// 選擇射頻通道0x40
SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);
// 接收通道0選擇和發(fā)送通道相同有效數(shù)據(jù)寬度
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
// 數(shù)據(jù)傳輸率1Mbps,發(fā)射功率0dBm,低噪聲放大器增益
}
/**************************************************/
/**************************************************
函數(shù):CheckButtons()
描述:
檢查按鍵是否按下,按下則發(fā)送一字節(jié)數(shù)據(jù)
/**************************************************/
void CheckButtons()
{
if(!P3_7) // 讀取P3^0狀態(tài)
{
delay_ms(10);
if(!P3_7) // 讀取P3^0狀態(tài)
{
TX_BUF[0]=x ; // 數(shù)據(jù)送到緩存 (uchar DATA = 0x01;)
TX_BUF[1]=y;
TX_BUF[2]=z ; // 數(shù)據(jù)送到緩存 (uchar DATA = 0x01;)
TX_BUF[3]=m;
DisplayOneChar(4,0,table[x%16]);
DisplayOneChar(4,1,table[y%16]);
x++;y++;z+=2;m+=3;
RX_Mode(); // 設置為接收模式
while(!P3_7);
}
}
}
/**************************************************/
void Init_T0 (void)
{
TMOD = 0x01;
TH0 = (65536-50000) /256;
TL0 = (65536-50000) %256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
/**************************************************
函數(shù):main()
描述:
主函數(shù)
/**************************************************/
void main(void)
{ qq=0;init_io(); // 初始化IO
LCDInit();
Init_T0();
RX_Mode(); // 設置為接收模式
DisplayListChar(1,0,"Xt=");
DisplayListChar(1,1,"Yt=");
DisplayListChar(7,0,"Xr=");
DisplayListChar(7,1,"Yr=");
while(1)
{
CheckButtons();
}
}
/**************************************************/
void Time0_ISR(void) interrupt 1
{
TH0 = (65536-30000) /256;
TL0 = (65536-30000) %256;
SPI_RW(FLUSH_TX);
TX_Mode(TX_BUF); // 把nRF24L01設置為發(fā)送模式并發(fā)送數(shù)據(jù)
// Check_ACK(1); // 等待發(fā)送完畢,清除TX FIFO
// SPI_RW(FLUSH_TX);
sta = SPI_Read(STATUS); // 讀狀態(tài)寄存器
if(RX_DR) // 判斷是否接受到數(shù)據(jù)
{
SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH);
// 從RX FIFO讀出數(shù)據(jù)
flag = 1;
}
SPI_RW_Reg(WRITE_REG + STATUS, sta); // 清除RX_DS中斷標志
if(flag) // 接受完成
{
flag = 0; // 清標志
DisplayOneChar(10,0,table[RX_BUF[1]%16]);
DisplayOneChar(10,1,table[RX_BUF[2]%16]);
}
}
復制代碼
作者:
yzwzfyz
時間:
2017-8-5 21:57
程序是自己寫的?
NRF24L01通訊原理清楚?
作者:
xiaofang
時間:
2017-8-6 09:32
yzwzfyz 發(fā)表于 2017-8-5 21:57
程序是自己寫的?
NRF24L01通訊原理清楚?
nrf24l01是網(wǎng)上找的,自己根據(jù)自己的理解改了一部分,lcd顯示自己寫的
作者:
zhangyun_mcu
時間:
2017-8-6 10:17
先看看有沒有發(fā)送出來。把其中一個設置成接收模式,初始化后中斷腳為高,接收到數(shù)據(jù)中斷為低。
作者:
Y891530061
時間:
2017-8-6 11:00
LCD顯示能用嗎?用用其他程序試試,或者先不用顯示,用幾個小燈接在扣上看看,數(shù)據(jù)是不是傳輸成功了
作者:
Y891530061
時間:
2017-8-6 11:02
回復我怎么看不到啊
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1