{
if(tf&0x01)
dischar(addr+i,"1")
else
dischar(addr+i,"0")
}
dischar是lcd的字符输入驱动,addr是显示地址
#include <reg52.h>#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define TX_ADDR_WITDH 5//发送地址宽度设置为5个字节
#define RX_ADDR_WITDH 5
#define TX_DATA_WITDH 8
#define RX_DATA_WITDH 8
/******************************************************************
// nRF24L01指令格式:
*******************************************************************/
#define R_REGISTER0x00 // 读寄存器
#define W_REGISTER0x20 // 写寄存器
#define R_RX_PLOAD0x61 // 读RX FIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式
#define W_TX_PLOAD0xA0 // 写TX FIFO有效数据,1-32字节,写 *** 作从字节0开始,应用于发射模式
#define FLUSH_TX0xE1 // 清除TX FIFO寄存器,应用于发射模式
#define FLUSH_RX0xE2 // 清除RX FIFO寄存器,应用于接收模式
#define REUSE_TX_PL 0xE3 // 重新使用上一包有效数据,当CE为高过程中,数据包被不断的重新发射
#define NOP 0xFF // 空 *** 作,可以用来读状态寄存器
/******************************************************************
// nRF24L01寄存器地址
*******************************************************************/
#define CONFIG 0x00 // 配置寄存器
#define EN_AA 0x01 // “自动应答”功能寄存器
#define EN_RX_ADDR 0x02 // 接收通道使能寄存器
#define SETUP_AW0x03 // 地址宽度设置寄存器
#define SETUP_RETR 0x04 // 自动重发设置寄存器
#define RF_CH 0x05 // 射频通道频率设置寄存器
#define RF_SETUP0x06 // 射频设置寄存器
#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_P00x11 // 数据通道0有效数据宽度设置寄存器
#define RX_PW_P10x12 // 数据通道1有效数据宽度设置寄存器
#define RX_PW_P20x13 // 数据通道2有效数据宽度设置寄存器
#define RX_PW_P30x14 // 数据通道3有效数据宽度设置寄存器
#define RX_PW_P40x15 // 数据通道4有效数据宽度设置寄存器
#define RX_PW_P50x16 // 数据通道5有效数据宽度设置寄存器
#define FIFO_STATUS 0x17 // FIFO状态寄存器
//*********************************************************************************
uchar sta // 状态变量
#define RX_DR (sta &0x40) // 接收成功中断标志
#define TX_DS (sta &0x20) // 发射成功中断标志
#define MAX_RT (sta &0x10) // 重发溢出中断标志
sbit CE=P2^0
sbit IRQ=P2^5
sbit CSN=P2^1
sbit MOSI=P2^3
sbit MISO=P2^4
sbit SCK=P2^2
sbit LED=P3^2
uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01}
uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
uchar RX_Buffer[RX_DATA_WITDH]
void _delay_us(uint x)
{
uint i,j
for (j=0j<xj++)
for (i=0i<12i++)
}
void _delay_ms(uint x)
{
uint i,j
for (j=0j<xj++)
for (i=0i<120i++)
}
void nRF24L01_Init(void)
{
_delay_us(2000)
CE=0
CSN=1
SCK=0
IRQ=1
}
uchar SPI_RW(uchar byte)
{
uchar i
for(i=0i<8i++)
{
if(byte&0x80)
MOSI=1
else
MOSI=0
byte<<=1
SCK=1
if(MISO)
byte|=0x01
SCK=0
}
return byte
}
uchar SPI_W_Reg(uchar reg,uchar value)
{
uchar status
CSN=0
status=SPI_RW(reg)
SPI_RW(value)
CSN=1
return status
}
uchar SPI_R_byte(uchar reg)
{
uchar status
CSN=0
SPI_RW(reg)
status=SPI_RW(0)
CSN=1
return status
}
uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
{
uchar reg_value,i
CSN=0
reg_value=SPI_RW(reg)
for(i=0i<Dleni++)
{
Dat_Buffer[i]=SPI_RW(0)
}
CSN=1
return reg_value
}
uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
{
uchar reg_value,i
CSN=0
reg_value=SPI_RW(reg)
for(i=0i<Dleni++)
{
SPI_RW(TX_Dat_Buffer[i])
}
CSN=1
return reg_value
}
void nRF24L01_Set_RX_Mode(void)
{
CE=0//待机
SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH)
SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH)
SPI_W_Reg(W_REGISTER+EN_AA,0x01)//auot ack
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01)
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a)
SPI_W_Reg(W_REGISTER+RX_PW_P0,RX_DATA_WITDH)
SPI_W_Reg(W_REGISTER+RF_CH,0)
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07)//0db,lna
SPI_W_Reg(W_REGISTER+CONFIG,0x0f)
CE=1
_delay_ms(5)
}
uchar nRF24L01_RX_Data(void)
{
//uchar i,status
sta=SPI_R_byte(R_REGISTER+STATUS)
if(RX_DR)
{
CE=0
SPI_R_DBuffer(R_RX_PLOAD,RX_Buffer,RX_DATA_WITDH)
//P3=RX_Buffer[0]
SPI_W_Reg(W_REGISTER+STATUS,0xff)
CSN=0
SPI_RW(FLUSH_RX)
CSN=1
return 1
}
else
return 0
}
void main(void)
{
uchar i
P0=0xff
P1=0xff
P2=0xff
P3=0xff
_delay_us(1000)
nRF24L01_Init()
while(1)
{
nRF24L01_Set_RX_Mode()
_delay_ms(100)
if(nRF24L01_RX_Data())
{
LED=0
//delay_ms(300)
}
else
LED=1
}
}
这个是通过测试了的,您可以参考一下,没有用到中断,是用查询的方式,希望对你有帮助吧~!!
ADXL345使用独立5v电源 SPI方式可以参考ti例子因为初始化是固定的呀比如
//******************************************************************************
// MSP-FET430P140 Demo - USART0, SPI Full-Duplex 3-Wire Slave P1.x Exchange
//
// Description: SPI Master communicates at fast as possible, full-duplex with
// SPI Slave using 3-wire mode. The level on P1.4/5 is TX'ed and RX'ed to P1.0
// and P1.1. Master will pulse slave Reset on init to insure synch start.
// Slave normal mode is LPM4.
// ACLK = n/a, MCLK = SMCLK = DCO ~ 800kHz, ULCK = external
//
// fet140_slav0 fet140_mstr0
// MSP430F169 Slave MSP430F169 Master
// ----------------- -----------------
//| XIN|-/|\| XIN|-
//| | | | |
//| XOUT|- --|RST XOUT|-
//| | /|\| |
//| RST|--+<----|P3.0 |
// LED <-|P1.0 || P1.4|<-
// LED <-|P1.1 || P1.5|<-
// ->|P1.4 || P1.0|->LED
// ->|P1.5 || P1.1|->LED
//| SIMO0/P3.1|<-------|P3.1 |
//| SOMI0/P3.2|------->|P3.2 |
//|UCLK/P3.3|<-------|P3.3 |
//
// M. Buccini
// Texas Instruments Inc.
// Feb 2005
// Built with IAR Embedded Workbench Version: 3.21A
//******************************************************************************
#include <msp430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD// Stop watchdog
P1OUT = 0x00// P1.0 setup for LED output
P1DIR |= 0x03
P3SEL |= 0x0E // P3.1,2,3 SPI option select
U0CTL = CHAR + SYNC + SWRST // 8-bit, SPI
U0TCTL = CKPL + STC // Polarity, 3-wire
U0BR0 = 0x02// SPICLK = SMCLK/2
U0BR1 = 0x00
U0MCTL = 0x00
ME1 |= USPIE0 // Module enable
U0CTL &= ~SWRST // SPI enable
IE1 |= URXIE0 + UTXIE0 // RX and TX interrupt enable
_BIS_SR(LPM4_bits + GIE)// Enter LPM4 w/ interrupt
}
#pragma vector=USART0RX_VECTOR
__interrupt void SPI0_rx (void)
{
P1OUT = RXBUF0 // RXBUF0 to TXBUF0
}
#pragma vector=USART0TX_VECTOR
__interrupt void SPI0_tx (void)
{
unsigned int i
i = P1IN
i = i >>4
TXBUF0 = i // Transmit character
}
知识豪杰,快来加入430f149团队吧,一起答疑助人,没你不行!团队地址:http://zhidao.baidu.com/team/view/430f149
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)