ATmega16nrf24l01接收程序.docx
《ATmega16nrf24l01接收程序.docx》由会员分享,可在线阅读,更多相关《ATmega16nrf24l01接收程序.docx(14页珍藏版)》请在冰豆网上搜索。
ATmega16nrf24l01接收程序
/*
*nrf24l01_jieshou.c
*
*Created:
2015/4/411:
53:
11
*Author:
LOVE
*/
/************************************************************************/
/*常用头文件及宏定义*/
/************************************************************************/
#include
#include//延时文件
#include//睡眠文件
#include//中断文件
#include//eeprom
#defineBIT(x)(1<<(x))
#defineucharunsignedchar
#defineuintunsignedint
/************************************************************************/
/*USART程序*/
/************************************************************************/
/*引脚说明*/
/*PD0RXDPD1PXD*/
voidchushihua_usart()
{
UCSRB|=BIT(TXEN);
UCSRC|=BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0);//8位
UBRRH=0;
UBRRL=25;//19.2K波特率
}
voidwrite_char_usart(charshuju)
{
while(!
(UCSRA&BIT(UDRE)));
UDR=shuju;
}
voidwrite_string_usart(char*str)
{
while(*str!
='\0')
{
write_char_usart(*str);
str++;
}
}
/************************************************************************/
/*NRF24L01*/
/************************************************************************/
//PA0CEPA1CSNPA2SCKPA3MOSIPA4MISOPA5IQR
#defineDDR_NRF2401DDRA
#definePORT_NRF2401PORTA
#definePIN_NRF2401PINA
#defineCE_HPORT_NRF2401|=BIT(0)
#defineCE_LPORT_NRF2401&=~BIT(0)
#defineCSN_HPORT_NRF2401|=BIT
(1)
#defineCSN_LPORT_NRF2401&=~BIT
(1)
#defineSCKPORT_NRF2401|=BIT
(2),PORT_NRF2401&=~BIT
(2)
#defineMOSI_HPORT_NRF2401|=BIT(3)
#defineMOSI_LPORT_NRF2401&=~BIT(3)
#defineMISO_PIN(PIN_NRF2401&BIT(4))
#defineIQR_PIN(PIN_NRF2401&BIT(5))
chara[3]={0};
charread_peizhi(chardizhi)
{
CSN_L;
chari;
for(i=0;i<8;i++)
{
if(dizhi&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
dizhi=0;
for(i=0;i<8;i++)
{
_delay_us(10);
if(MISO_PIN)
{
dizhi+=BIT(7-i);
}
SCK;
}
CSN_H;
returndizhi;
}
voidwrite_peizhi(chardizhi,charshuju)
{
chari;
CSN_L;
dizhi+=BIT(5);
for(i=0;i<8;i++)
{
if(dizhi&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
for(i=0;i<8;i++)
{
if(shuju&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
CSN_H;
}
voidread_shuju(ucharn)
{
uchari,j;
CSN_L;
for(i=0;i<8;i++)
{
if(0x61&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
for(j=0;j{
a[j]=0;
for(i=0;i<8;i++)
{
_delay_us(10);
if(MISO_PIN)
{
a[j]+=BIT(7-i);
}
SCK;
}
}
CSN_H;
}
voidwrite_shuju(charshuju)
{
chari;
CSN_L;
for(i=0;i<8;i++)
{
if(0xa0&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
for(i=0;i<8;i++)
{
if(shuju&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
CSN_H;
}
voidqingchu_tx()
{
chari;
CSN_L;
for(i=0;i<8;i++)
{
if(0xe1&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
CSN_H;
}
voidqingchu_rx()
{
chari;
CSN_L;
for(i=0;i<8;i++)
{
if(0xe2&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
CSN_H;
}
charread_zhuangtai()
{
CSN_L;
chari,zhuangtai=0;
MOSI_H;
for(i=0;i<8;i++)
{
SCK;
_delay_us(40);
if(MISO_PIN)
{
zhuangtai+=BIT(7-i);
}
}
CSN_H;
returnzhuangtai;
}
voidread_dizhi(chardizhi,char*shuju,charzijie)
{
CSN_L;
chari,j;
for(i=0;i<8;i++)
{
if(dizhi&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
shuju+=zijie;
for(j=0;j{
shuju--;
*shuju=0;
for(i=0;i<8;i++)
{
_delay_us(10);
if(MISO_PIN)
{
*shuju+=BIT(7-i);
}
SCK;
}
}
CSN_H;
}
voidwrite_dizhi(chardizhi,char*shuju,charzijie)
{
chari,j;
CSN_L;
dizhi+=BIT(5);
for(i=0;i<8;i++)
{
if(dizhi&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
shuju+=zijie;
for(j=0;j{
shuju--;
for(i=0;i<8;i++)
{
if(*shuju&BIT(7-i))
{
MOSI_H;
}
else
{
MOSI_L;
}
SCK;
}
}
CSN_H;
}
voidchushihua_nrf2401()
{
DDR_NRF2401|=BIT(0)|BIT
(1)|BIT
(2)|BIT(3)|BIT(5);
DDR_NRF2401&=~(BIT(4)|BIT(5));
PORT_NRF2401|=BIT(4)|BIT(5);
CSN_H;
CE_L;
chardizhi[5]={'l','o','v','e',0x01};
write_peizhi(0,0x0b);
write_peizhi(0x02,1);
write_dizhi(0x0a,dizhi,5);//接收地址love01
dizhi[4]=0x02;
write_dizhi(0x10,dizhi,5);//发送地址love02
write_peizhi(0x11,0x03);//接收数据宽度3
CE_H;
}
/************************************************************************/
/*中断*/
/************************************************************************/
voidchushihua_int0()
{
MCUCR|=BIT(ISC01);
GICR|=BIT(INT0);
DDRD&=~BIT
(2);
PORTD|=BIT
(2);
sei();
}
ISR(INT0_vect)
{
ucharzhuangtai,i,j;
zhuangtai=read_peizhi(0x07);
write_string_usart("状态");
for(i=0;i<8;i++)
{
if(zhuangtai&BIT(7-i))
{
write_char_usart('1');
}
else
{
write_char_usart('0');
}
}
if(zhuangtai&BIT(6))
{
read_shuju(3);
for(j=0;j<3;j++)
{
write_string_usart("|数据");
write_char_usart(j+'0');
write_char_usart('');
for(i=0;i<8;i++)
{
if(a[j]&BIT(7-i))
{
write_char_usart('1');
}
else
{
write_char_usart('0');
}
}
}
write_peizhi(0x07,BIT(6));
zhuangtai=read_peizhi(0x07);
write_string_usart("|状态");
for(i=0;i<8;i++)
{
if(zhuangtai&BIT(7-i))
{
write_char_usart('1');
}
else
{
write_char_usart('0');
}
}
}
write_char_usart(0x0d);
write_char_usart(0x0a);
}
/************************************************************************/
/*主函数*/
/************************************************************************/
intmain()
{
chushihua_usart();
chushihua_nrf2401();
chushihua_int0();
while
(1)
{
}
}