?? 3-rec.c
字號:
/* wireless.c ================================================================================================
*=============================================================================================================
*/
#include <reg24e1.h>
#define uchar unsigned char
#define uint unsigned int
#define ADDR_INDEX 8 // 在 RFConfig.buf 地址字節的指針
#define ADDR_COUNT 4 // 地址字節的數目
#define num_buf 24 // 緩沖區的大小
#define num_RTcon 15
//定義io端口
sbit p00=P0^0;
sbit p01=P0^1;
sbit p02=P0^2;
sbit p03=P0^3;
sbit p04=P0^4;
sbit p05=P0^5;
sbit p06=P0^6;
sbit p07=P0^7;
volatile unsigned char idata RxBuf[num_buf]; //rec buf
volatile unsigned char idata Rxcheck[num_buf]; //rec buf
const RxTxConf[15] = //發射接收配置
{
0xc0, 0xc0, 0x00, 0xab, 0xbc, 0x13, 0x35, 0x00,
0xaa, 0xbb, 0x12, 0x34, 0x80, 0xef, 0x04
};
void Delay100us(volatile uint n)//delay 100US
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}
//--------------------------------led flash
void LED(void)
{
unsigned char i;
for(i=1;i<3;i++)
{
p07=1;
Delay100us(2540);
p07=0;
Delay100us(2540);
}
}
//----------------------------------------------SPI 讀寫函數
unsigned char SpiReadWrite(unsigned char b)
{
EXIF &= ~0x20; // 清除 SPI 中斷
SPI_DATA = b; // 發送字節到SPI數據寄存器
while((EXIF & 0x20) == 0x00) // 一直等到SPI完成通信
;
return SPI_DATA;
}
//---------------------------------------------------set 24e1 to RX
void SetRxMode(void)
{
CS = 1;
Delay100us(0);
SpiReadWrite(RxTxConf[num_RTcon-1] | 0x01);
CS = 0;
}
//--------------------------------------------------------//初始化函數
void Init(void)
{
unsigned char i;
for(i=0;i<num_buf;i++)
Rxcheck[i]=i;
P0_DIR = 0x00;
//************ SPI:
SPICLK = 0x00; // 最大SPI時鐘 (=CLK/8)
SPI_CTRL = 0x02; // 連接SPI到射頻CH1
// **********RADIO:
PWR_UP = 1;
Delay100us(40); // 等待大于3ms
CE = 0;
CS = 1; // RF SPI CE=0 CS = 1 配置使用
Delay100us(0);
for(i=0;i<num_RTcon;i++)
SpiReadWrite(RxTxConf[i]);
CS = 0;
//*************
EA = 1; // 開啟全局中斷
}
//-----------------------------------------------------rf rec packet
void RxPacket(void)
{
unsigned char index_Rbuf=0;
while(DR1)
{
EXIF &= ~0x20; // 清除SPI中斷
SPI_DATA = 0; // 寫空字節到SPI數據寄存器
while((EXIF & 0x20) == 0x00) // 一直等到SPI完成接收
;
RxBuf[index_Rbuf] = SPI_DATA;//save to RX buf
index_Rbuf+=1;
}
index_Rbuf=0;
}
uchar checkrec(void)
{
unsigned char i,j;
for(i=0,j=0;i<num_buf;i++)
if(Rxcheck[i]=RxBuf[i])
j+=1;
if(j==23)
return 1;
else return 0;
}
//---------------------------------------------------main function
void main(void)
{
unsigned char i=0;
Init(); // 初始化
LED();
P0=0;
SetRxMode();
CE = 1;
Delay100us(30);
while(1)
{
if(DR1)
{
RxPacket();
if(checkrec())
{
i+=1;
P0=0x40|(i/10);
P0=0x20|(i%10);
if(i>98)
i=0;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -