久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3706|回復: 0
打印 上一主題 下一主題
收起左側

NRF24L01無線模塊發送-AVR程序代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:51024 發表于 2014-7-12 01:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


以前學AVR時候做的一些程序,分享一下





#include

#include   

#include "lcd12864.h"

#define uint unsigned int

#define uchar unsigned char

#define MISO PINB.6

#define SCK PORTB.7

#define MOSI PORTB.5

#define CSN PORTC.0

#define CE PORTC.1

#define IRQ PORTC.2  

#define CONFIG          0x00  // 配置收發狀態,CRC校驗模式以及收發狀態響應方式

#define EN_AA 0x01//自動應答使能

#define EN_RXADDR 0x02   //接收地址允許

#define SETUP_AW 0x03  //設置地址寬度

#define SETUP_RETR 0x04  //建立自動重發

#define RF_CH 0x05  //射頻通道

#define RF_SETUP 0x06  //射頻寄存器

#define STATUS 0x07  //狀態寄存器

#define OBSTERVE_TX 0x08  //發送檢測寄存器

#define CD 0x09  //載波檢測

#define RX_ADDR_P0 0x0a  //數據通道0接收地址

#define RX_ADDR_P1 0x0b  //數據通道0接收地址

#define RX_ADDR_P2 0x0c  //數據通道0接收地址

#define RX_ADDR_P3 0x0d  //數據通道0接收地址

#define RX_ADDR_P4 0x0e  //數據通道0接收地址

#define RX_ADDR_P5 0x0f  //數據通道0接收地址

#define TX_ADDR 0x10  //發送地址

#define RX_PW_P0 0x11  //  

#define RX_PW_P1 0x12  //

#define RX_PW_P2 0x13  //

#define RX_PW_P3 0x14  //

#define RX_PW_P4 0x15  //

#define RX_PW_P5 0x16  //

#define FIFO_STATUS 0x17  //FIFO狀態寄存器  

#define READ_REG        0x00      // 讀寄存器指令

#define WRITE_REG       0x20     // 寫寄存器指令

#define RD_RX_PLOAD     0x61      // 讀取接收數據指令

#define WR_TX_PLOAD     0xA0      // 寫待發數據指令

#define FLUSH_TX        0xE1     // 沖洗發送 FIFO指令

#define FLUSH_RX        0xE2      // 沖洗接收 FIFO指令

#define REUSE_TX_PL     0xE3      // 定義重復裝載數據指令

#define NOP             0xFF      // 保留      

#define TX_ADR_WIDTH    5       // 5 uints TX address width

#define RX_ADR_WIDTH    5       // 5 uints RX address width

#define TX_PLOAD_WIDTH  20      // 20 uints TX payload

#define RX_PLOAD_WIDTH  20      // 20 uints TX payload





uchar status;

uchar str[30];

uchar TX_ADDRESS[TX_ADR_WIDTH]= {0x05,0x04,0x03,0x02,0x01};    //本地地址

uchar RX_ADDRESS[RX_ADR_WIDTH]= {0x05,0x04,0x03,0x02,0x01};    //接收地址

uchar TxBuf[17]="anywhere you are";

uchar SPI_RW(uchar uuchar)//SPI寫時序

{

uchar bit_ctr;

for(bit_ctr=0;bit_ctr<8;bit_ctr++)

  {

  MOSI=(uuchar&0x80);

  uuchar=(uuchar<<1);

  SCK=1;

  uuchar|=MISO;

  SCK=0;

  }

return (uuchar);

}   





uchar SPI_Read(uchar reg)//SPI讀取一個字節

{

uchar reg_val;

CSN=0;

SPI_RW(reg);

delay_ms(1);

reg_val=SPI_RW(0);

delay_ms(1);

CSN=1;

return (reg_val);

}



uchar SPI_RW_Reg(uchar reg,uchar value)//寫一個自接到寄存器函數

{

uchar status;

CSN=0;

status=SPI_RW(reg);

delay_ms(1);

SPI_RW(value);

delay_ms(1);

CSN=1;

return (status);

}





uchar  *ucharostr(uchar num)

{

uchar x00,xx,x0,x,n;

x00=num/100;

xx=num0;

x0=xx/10;

x=xx;

n=0;

if(x00!=0)

  {

  str[n]=x00+48;

  n++;

  }

if(!(x00==0&x0==0))

  {

  str[n]=x0+48;

  n++;

  }

str[n]=x+48;

n++;

str[n]='\0';

return str;

}  



uchar SPI_Read_Buf(uchar reg,uchar *pBuf,uchar uchars)//用于讀數據,reg:寄存器地址,pBuf:帶度數數據地址,uchars數據個數

{

uchar status,uchar_ctr;

CSN=0;

status=SPI_RW(reg);

for(uchar_ctr=0;uchar_ctr

  {

  pBuf[uchar_ctr]=SPI_RW(0);

  }

  CSN=1;

    return (status);



}     







uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)

{

    uint status,uchar_ctr;



    CSN = 0;            //SPI使能      

    status = SPI_RW(reg);   

    for(uchar_ctr=0; uchar_ctr

        SPI_RW(*pBuf++);

    CSN = 1;           //關閉SPI

    return(status);    //

}









void init_NRF24L01(void)

{

delay_ms(1);

CE=0; //射頻停止工作

CSN=1;

SCK=0;

IRQ=1;//中斷復位

SPI_RW_Reg(WRITE_REG+EN_AA,0x00);//頻道0自動,ack應答禁止

SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x00);//禁止自動發送

SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x00);//允許接收地址只有頻道0

SPI_RW_Reg(WRITE_REG+RF_CH,1);//設置信道工作為2.4GHZ,收發必須一致

SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設置接收數據長度,32字節

SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//發射速率2MHZ,發射功率最大為0dB

}



void nRF24L01_TxPacket(unsigned char *tx_buf) //發送tx_buf總中數據

{

CE=0;

SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//寫本地地址

SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//裝在接收端地址

SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//裝在要發送的數據

SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);//IRQ收發完成中斷響應,16位CRC,發送模式

CE=1;//置高CE,激發數據發送

delay_ms(1);

}





void main(void)

{ uchar fifo_s;

uchar status;

uchar i;





// Declare your local variables here



// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0x00;



// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00;

DDRB=0xB0;



// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0xff;



// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;



// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;



// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;



// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;



// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

// INT2: Off

MCUCR=0x00;

MCUCSR=0x00;



// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;



// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;





CE=0;

CSN=1;

SCK=0;

IRQ=1;

status=0;



//lcd12864_init();

delay_ms(100);

init_NRF24L01();

delay_ms(10);

i=1;

while (1)

      {

      TxBuf[0]=i;//把發送次數寫入要發送的數據首和尾

      SPI_RW_Reg(WRITE_REG+STATUS,0xff);//清狀態寄存器  

      SPI_RW_Reg(FLUSH_TX,0xff);//清空發送緩沖區

      delay_ms(10);

      nRF24L01_TxPacket(TxBuf);//進行一次發送操作   

      delay_ms(100);



      //SPI_Write_Buf(WR_TX_PLOAD,TxBuf,TX_PLOAD_WIDTH);//裝載數據













     i++;

     if(i==127) i=1;



      delay_ms(2000);   





      };

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频一区 | 日韩欧美二区 | 欧美国产一区二区 | 亚洲精品在线观 | 天堂成人国产精品一区 | 福利视频1000 | 成人精品在线观看 | 亚洲一区 | av天天操 | 精产国产伦理一二三区 | 亚洲精品久久久9婷婷中文字幕 | 国产一区二区三区在线 | 亚洲天堂精品一区 | 日韩免费看片 | 91免费在线 | 免费看国产一级特黄aaaa大片 | 国产成人99久久亚洲综合精品 | 亚洲视频在线观看 | 国产综合网站 | 国产精品亚洲视频 | 亚洲欧洲综合av | 欧美精品乱码99久久影院 | 欧美精品成人影院 | 完全免费在线视频 | 偷拍亚洲色图 | 日本高清中文字幕 | 欧美又大粗又爽又黄大片视频 | 在线视频91 | 亚洲第一成年免费网站 | www.国产精品 | 国产羞羞视频在线观看 | 性一交一乱一伦视频免费观看 | 国产精品免费看 | 日韩欧美在线一区二区 | 国产羞羞视频在线观看 | 亚洲国产欧美日韩 | 男女视频在线免费观看 | 欧洲精品码一区二区三区免费看 | 美女啪啪国产 | 日韩中出 | 99色综合|