?? fasong.c.bak
字號:
#include "pic.h"
#define uchar unsigned char
#define uint unsigned int
//********************************模式控制定義********************************
#define TX_EN RC1 //輸出
#define TRX_CE RC2 //輸出
#define PWR RB1 //輸出
//********************************SPI口定義***********************************
#define MISO RC4 //輸入
#define MOSI RC5 //輸出
#define SCK RC3 //輸出
#define CSN RC0 //輸出
//********************************狀態輸出口*********************************
#define CD RB2 //輸入
#define AM RB3 //輸入
#define DR RB0 //輸入
//********************************數碼管位選*********************************
#define W1 RB7 //輸出
#define W2 RB6 //輸出
#define W3 RB5 //輸出
#define W4 RB4 //輸出
//********************************905-SPI指令********************************
#define WC 0x00
#define RRC 0x10
#define WTP 0x20
#define RTP 0x21
#define WTA 0x22
#define RTA 0x23
#define RRP 0x24
//********************************函數初始化********************************
void Delay(uchar x);
void Spi_initial(void);
uchar SpiReadSpiWrite(uchar DATA);
void system_Init(void);
void Config905(void);
void TxPacket(void);
void SetTxMode(void);
unsigned char CheckCD(void);
void TX(void);
void StartUART(void);
void R_S_Byte(uchar R_Byte);
//*****************************待發發送的32字節數據************************
uchar TxRxBuf[32]= //發送數據
{
'Y','i','n',' ','l','i','x','i',
'n','g',' ','i','s',' ','a',' ',
'g','o','o','d',' ','m','a','n',
'.',' ','L','o','v','e',' ','S',
};
//********************************接收端地址********************************
uchar TxAddress[4]={0xcc,0xcc,0xcc,0xcc }; //接收地址
//********************************初始化nRF905********************************
uchar RFConf[11]=
{
0x00, //配置命令//
0x4c, //CH_NO,配置頻段在430MHZ
0x2C, //輸出功率為10db,不重發,節電為正常模式
0x44, //地址寬度設置,為4字節
0x20,0x20, //接收發送有效數據長度為32字節
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充許,8位CRC校驗,外部時鐘信號不使能,16M晶振
};
//********************************延時**************************************
void Delay(uchar x) //設置延時
{
uchar i;
while(x--)
for(i=0;i<80;i++);
}
//********************************SPI模式初始化********************************
void Spi_initial(void)
{
INTCON=0x00; //關閉所有中斷
PIR1=0x00;
SSPCON=0x20; //寫入時沒有沖突發生,接收時沒有溢出,開啟SPI功能,空閑時處于低電平,fosc/4
SSPSTAT=0xc0; //上升沿時發送,
ADCON1=0x07;
SSPIF=0; //PIR1=PIR1|0x08 ;
}
//********************************SPI數據讀寫**************************************
uchar SpiReadSpiWrite(uchar DATA)//r
{
uchar b;
Spi_initial();
SSPBUF=DATA; //寫入要發送數據發送的同時也得到數據
do
{
;
}
while(SSPIF==0);
SSPIF=0;
b=SSPBUF; //把得到數據保存
return b;
}
//********************************系統初始化**************************************
void system_Init(void) //r
{
TRISA=0x00;
TRISB=0x0D;
TRISC=0x90;
TRISD=0x00;
TRISE=0x00;
ADCON1=0x07; //
CSN=1; // Spi disable
SCK=0; // Spi clock line init low
DR=0; // Init DR for input
AM=0; // Init AM for input
CD=0; // Init CD for input
PWR=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0; // set radio in Rx mode
}
//********************************初始化寄存器********************************
void Config905(void)
{
uchar i;
CSN=0;
Delay(1); // Spi enable for write a spi command
//SpiWrite(WC); // Write config command寫放配置命令
for (i=0;i<11;i++) // Write configration words 寫放配置字
{
SpiReadSpiWrite(RFConf[i]);
}
CSN=1; // Disable Spi
}
//********************************待發數據打包********************************
void TxPacket(void)
{
uchar i;
CSN=0;
Delay(1);
SpiReadSpiWrite(WTP); //向nrf905加載32字節待發數據
for (i=0;i<32;i++)
{
SpiReadSpiWrite(TxRxBuf[i]); // Write 32 bytes Tx data
}
CSN=1; // Spi disable
Delay(1);
CSN=0; // Spi enable for write a spi command
SpiReadSpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // 加載4字節地址
{
(TxAddress[i]);
}
CSN=1; // 關閉SPI
TRX_CE=1; // 激發數據無線發送
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CE low
}
//*******************************************************************************
void SetTxMode(void) //發送模式初始化狀態設置
{
TRX_CE=0; //
TX_EN=1; //發送使能
Delay(1); // delay for mode change(>=650us)
}
//********************************************************************************
void TX(void)
{
SetTxMode(); // Set nRF905 in Tx mode
TxPacket(); // Send data by nRF905
}
//********************************USART串口初始化********************************
void StartUART(void)
{
TXSTA=0x04; //設定TXSTA寄存器。同步從模式,8位數據,數據發送禁止,
SPBRG=51; //16MHZ, BRGH=1.92kbps.
PIE1=0; //清除PIE1所有中斷使能。
RCSTA=0x80; //禁止接收,打開通訊端口
TRISC=TRISC|0X80; //將RC7(RX)設置為輸入方式
TRISC=TRISC&0XBF; //RC6(TX)設置為輸出
TXEN=1; //啟動發送,TSR開始移位操作。
}
//********************************串口數據輸出********************************
void R_S_Byte(uchar R_Byte)
{
TXREG= R_Byte;
}
//********************************主函數*************************************
main()
{
PORTE=0xff; //關閉蜂明器
PORTD=0xbf;
StartUART(); //串口初始化
system_Init(); //系統初始化
Config905(); //寫入配置字
W1=0; W2=0; W3=0; W4=0;
TX(); //數據發送
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -