MSP430+nRF24L01程序
來源:網上
改寫:bluefeel
時間:10-03-13
單位:桂林理工大學
/**************************************************/
改寫:bluefeel
時間:10-03-13
單位:桂林理工大學
/**************************************************/
#include
#include
#include
#define uchar unsigned char
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字節寬度的發送/接收地址
#define TX_PLOAD_WIDTH 4 // 數據通道有效數據寬度
#define LED P2
#define TX_ADR_WIDTH 5 // 5字節寬度的發送/接收地址
#define TX_PLOAD_WIDTH 4 // 數據通道有效數據寬度
#define LED P2
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定義一個靜態發送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
ucharflag;
uchar DATA = 0x01;
uchar bdatasta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT =sta^4;
/**************************************************/
uchar RX_BUF[TX_PLOAD_WIDTH];
uchar TX_BUF[TX_PLOAD_WIDTH];
ucharflag;
uchar DATA = 0x01;
uchar bdatasta;
sbit RX_DR = sta^6;
sbit TX_DS = sta^5;
sbit MAX_RT =sta^4;
/**************************************************/
/**************************************************
函數: init_io()
函數: init_io()
描述:
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待機
CSN = 1; // SPI禁止
SCK = 0; // SPI時鐘置低
IRQ = 1; // 中斷復位
LED = 0xff; // 關閉指示燈
}
/**************************************************/
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待機
CSN = 1; // SPI禁止
SCK = 0; // SPI時鐘置低
IRQ = 1; // 中斷復位
LED = 0xff; // 關閉指示燈
}
/**************************************************/
/**************************************************
函數:delay_ms()
函數:delay_ms()
描述:
延遲x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i {
j = 250;
while(--j);
j = 250;
while(--j);
}
}
/**************************************************/
延遲x毫秒
/**************************************************/
void delay_ms(uchar x)
{
uchar i, j;
i = 0;
for(i=0; i
j = 250;
while(--j);
j = 250;
while(--j);
}
}
/**************************************************/
/**************************************************
函數:SPI_RW()
函數:SPI_RW()
描述:
根據SPI協議,寫一字節數據到nRF24L01,同時從nRF24L01
讀出一字節
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循環8次
{
MOSI = (byte & 0x80); // byte最高位輸出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01從MOSI讀入1位數據,同時從MISO輸出1位數據
byte |= MISO; // 讀MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 返回讀出的一字節
}
/**************************************************/
根據SPI協議,寫一字節數據到nRF24L01,同時從nRF24L01
讀出一字節
/**************************************************/
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0; i<8; i++) // 循環8次
{
MOSI = (byte & 0x80); // byte最高位輸出到MOSI
byte <<= 1; // 低一位移位到最高位
SCK = 1; // 拉高SCK,nRF24L01從MOSI讀入1位數據,同時從MISO輸出1位數據
byte |= MISO; // 讀MISO到byte最低位
SCK = 0; // SCK置低
}
return(byte); // 返回讀出的一字節
}
/**************************************************/
/**************************************************
函數:SPI_RW_Reg()
函數:SPI_RW_Reg()
描述:
寫數據value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,開始傳輸數據
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態字
SPI_RW(value); // 然后寫數據到該寄存器
CSN = 1; // CSN拉高,結束數據傳輸
return(status); // 返回狀態寄存器
}
/**************************************************/
寫數據value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
uchar status;
CSN = 0; // CSN置低,開始傳輸數據
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態字
SPI_RW(value); // 然后寫數據到該寄存器
CSN = 1; // CSN拉高,結束數據傳輸
return(status); // 返回狀態寄存器
}
/**************************************************/
/**************************************************
函數:SPI_Read()
函數:SPI_Read()
描述:
從reg寄存器讀一字節
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,開始傳輸數據
SPI_RW(reg); // 選擇寄存器
reg_val = SPI_RW(0); // 然后從該寄存器讀數據
CSN = 1; // CSN拉高,結束數據傳輸
return(reg_val); // 返回寄存器數據
}
/**************************************************/
從reg寄存器讀一字節
/**************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;
CSN = 0; // CSN置低,開始傳輸數據
SPI_RW(reg); // 選擇寄存器
reg_val = SPI_RW(0); // 然后從該寄存器讀數據
CSN = 1; // CSN拉高,結束數據傳輸
return(reg_val); // 返回寄存器數據
}
/**************************************************/
/**************************************************
函數:SPI_Read_Buf()
函數:SPI_Read_Buf()
描述:
從reg寄存器讀出bytes個字節,通常用來讀取接收通道
數據或接收/發送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開始傳輸數據
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態字
for(i=0; i pBuf[i] = SPI_RW(0); // 逐個字節從nRF24L01讀出
CSN = 1; // CSN拉高,結束數據傳輸
return(status); // 返回狀態寄存器
}
從reg寄存器讀出bytes個字節,通常用來讀取接收通道
數據或接收/發送地址
/**************************************************/
uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
{
uchar status, i;
CSN = 0; // CSN置低,開始傳輸數據
status = SPI_RW(reg); // 選擇寄存器,同時返回狀態字
for(i=0; i
CSN = 1; // CSN拉高,結束數據傳輸
return(status); // 返回狀態寄存器
}
關鍵詞:
MSP430nRF24L0
評論