找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4427|回复: 9
收起左侧

用12C5A60S2和RF905写一个无线发射和接收程序用12自带的SPI

  [复制链接]
ID:51337 发表于 2013-8-7 00:11 | 显示全部楼层 |阅读模式
发送程序  
#include <12c5a60s2.h>
#include <intrins.h>
#define FOSC 11059200L
#define BAUD (256-FOSC/32/9600)
#define uint unsigned int
#define uchar unsigned char
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar bdata DATA_BUF;
/*     定义RF905                    */
#define WC  0x00 // 写配置寄存器指令
#define RC  0x10  // 读取配置寄存器命令
#define WTP 0x20  //写TX有效数据字节写操作全部从0开始
#define RTP 0x21 // 读TX有效数据字节写操作全部从0开始
#define WTA 0x22 // 写发送地址命令
#define RTA 0x23 // 读发送地址命令
#define RRP 0x24 // 读RX有效数据字节写操作全部从0开始
typedef struct RFConfig
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf ={
10,
0x01, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58
};
//这个结构的内容是NRF905的初始化数据。
// ch_no = 1;433MHz;正常运转,没有协议;接收,发送的地址是4字节/收发有效宽度为32字节;禁用外部时钟;晶振频率= 16MHz / / 8位CRC和使/*******************************************************************************************/
/*******************************************************************************************/
void delay(uchar z)
{
uint x,y;
for(x=z;x<0;x--)
  for(y=110;y>0;y--);
}
sbit SPISS=P1^4;
sbit MOSI=P1^5;
sbit MISO=P1^6;
sbit SCK=P1^7;     //主器件启动一次数据传输时自动产生8个SCK时钟周期信号给从机
sbit CSN=P1^1;
sbit DR=P2^1;
sbit AM=P2^2;
sbit CD=P2^4;
sbit PWR_UP=P2^5;
sbit TRX_CE=P2^6;
sbit TX_EN=P2^7;
/*******************************************************************************************/
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void InitIO(void)
{
CSN=1;// SPI禁用
SCK=0;// SPI初始化时钟线高
DR=1;// 初始化DR输入
AM=1;// 初始化AM输入
PWR_UP=1;// nRF905芯片上电
TRX_CE=0;// 在待机模式下设置nRF905
TX_EN=0;// 在接收模式设置无线
}
/*******************************************************************************************/
void SetTXmode()
{
TRX_CE=1;
TX_EN=1;
delay(1);
}
/***********************************
funtion :write spi date
***********************************/
void Spi_write(uchar date)
{
DATA_BUF=date;
SPDAT=DATA_BUF;
while(!SPIF);
SPSTAT=SPIF|WCOL;
}
void Config905(void)
{
uchar i;
CSN=0;
Spi_write(WC);
for(i=0;i<RxTxConf.buf[i];i++)
{
  Spi_write(RxTxConf.buf[i]);
}
CSN=1;
}
/***************************************
funtion: send 32 date
****************************************/
void TxPacket(void)
{
uchar i;
CSN=0;
Spi_write(WTP);
for(i=0;i<32;i++)
{
  Spi_write(TxBuf[i]);
}
CSN=1;
delay(5);
CSN=0;
Spi_write(WTP);
for(i=0;i<4;i++)
{
  Spi_write(TxBuf[i+5]);
}
CSN=1;
TRX_CE=1;
delay(5);
TRX_CE=0;
}
/***************************************
funtion: SPI init
****************************************/
void SPI_init(void)
{
SPCTL=0xfd;
SPSTAT=SPIF|WCOL;
SPDAT=0;
IE2|=ESPI;
EA=1;
}
/***************************************
funtion: uart init
****************************************/
void Uart_init(void)
{
TMOD=0x20;
AUXR=0x40;
TH1=TL1=BAUD;
SCON=0x50;
PCON=0X00;
TR1=1;
}
uchar RecvUart()
{
while(!RI)
RI=0;
return SBUF;
}
void SendUart(uchar dat)
{
while(!TI);
TI=0;
SBUF=dat;
}
void main()
{
InitIO();
Uart_init();
SPI_init();
Config905();
SetTXmode();
delay(500);// 延时
while(1)
{
  Scankey();
  TxPacket();
  if(DR)
   {
    beep=~beep;
    delay(1000);
   }   
}
}
回复

使用道具 举报

ID:52286 发表于 2013-10-13 22:02 | 显示全部楼层
真是不错的资料
回复

使用道具 举报

ID:56665 发表于 2013-11-27 18:35 | 显示全部楼层
有空买个模块照程序试下。
回复

使用道具 举报

ID:62288 发表于 2014-5-26 12:05 | 显示全部楼层
万分感激楼主。
回复

使用道具 举报

ID:64910 发表于 2014-8-10 07:44 | 显示全部楼层
谢谢了
回复

使用道具 举报

ID:65748 发表于 2014-9-3 12:51 | 显示全部楼层
很不错就是看不懂啊
回复

使用道具 举报

ID:66061 发表于 2014-9-18 10:20 | 显示全部楼层
楼主辛苦了
回复

使用道具 举报

ID:66464 发表于 2014-9-21 21:12 | 显示全部楼层
学习了
回复

使用道具 举报

ID:44267 发表于 2015-10-19 13:15 | 显示全部楼层
我搞了个NRF2401的
回复

使用道具 举报

ID:96980 发表于 2016-7-1 19:27 | 显示全部楼层
该程序是发送部分的接收部分能给吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表