MSP430+nRF24L01程序
來源:網(wǎng)上
改寫:bluefeel
時間:10-03-13
單位:桂林理工大學(xué)
/**************************************************/
改寫:bluefeel
時間:10-03-13
單位:桂林理工大學(xué)
/**************************************************/
#include
#include
#include
#define uchar unsigned char
/***************************************************/
#define TX_ADR_WIDTH 5 // 5字節(jié)寬度的發(fā)送/接收地址
#define TX_PLOAD_WIDTH 4 // 數(shù)據(jù)通道有效數(shù)據(jù)寬度
#define LED P2
#define TX_ADR_WIDTH 5 // 5字節(jié)寬度的發(fā)送/接收地址
#define TX_PLOAD_WIDTH 4 // 數(shù)據(jù)通道有效數(shù)據(jù)寬度
#define LED P2
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定義一個靜態(tài)發(fā)送地址
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;
/**************************************************/
/**************************************************
函數(shù): init_io()
函數(shù): init_io()
描述:
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待機
CSN = 1; // SPI禁止
SCK = 0; // SPI時鐘置低
IRQ = 1; // 中斷復(fù)位
LED = 0xff; // 關(guān)閉指示燈
}
/**************************************************/
初始化IO
/**************************************************/
void init_io(void)
{
CE = 0; // 待機
CSN = 1; // SPI禁止
SCK = 0; // SPI時鐘置低
IRQ = 1; // 中斷復(fù)位
LED = 0xff; // 關(guān)閉指示燈
}
/**************************************************/
/**************************************************
函數(shù):delay_ms()
函數(shù):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);
}
}
/**************************************************/
/**************************************************
函數(shù):SPI_RW()
函數(shù):SPI_RW()
描述:
根據(jù)SPI協(xié)議,寫一字節(jié)數(shù)據(jù)到nRF24L01,同時從nRF24L01
讀出一字節(jié)
/**************************************************/
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é)
}
/**************************************************/
根據(jù)SPI協(xié)議,寫一字節(jié)數(shù)據(jù)到nRF24L01,同時從nRF24L01
讀出一字節(jié)
/**************************************************/
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ù):SPI_RW_Reg()
描述:
寫數(shù)據(jù)value到reg寄存器
/**************************************************/
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ù)據(jù)value到reg寄存器
/**************************************************/
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()
函數(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ù)
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(reg_val); // 返回寄存器數(shù)據(jù)
}
/**************************************************/
從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ù)
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(reg_val); // 返回寄存器數(shù)據(jù)
}
/**************************************************/
/**************************************************
函數(shù):SPI_Read_Buf()
函數(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 pBuf[i] = SPI_RW(0); // 逐個字節(jié)從nRF24L01讀出
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
從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
CSN = 1; // CSN拉高,結(jié)束數(shù)據(jù)傳輸
return(status); // 返回狀態(tài)寄存器
}
關(guān)鍵詞:
MSP430nRF24L0
評論