📄 receive.c
字号:
#include <c8051f020.h> // SFR声明
#include <stdio.h>
#include <string.h>
//-----------------------------------------------------------------------------
// sfr定义及全局常量
//-----------------------------------------------------------------------------
#define SYSCLK 22118400 // 系统时钟为22118400HZ
#define BAUDRATE 9600 // UART0 波特率为19200HZ
//#define TX_LENGTH 16 // 接收缓冲器长度为16
sfr16 DP = 0x82; // 数据指针
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 RCAP2 = 0xca; // Timer2 capture/reload
sfr16 T2 = 0xcc; // Timer2
sfr16 RCAP4 = 0xe4; // Timer4 capture/reload
sfr16 T4 = 0xf4; // Timer4
sbit PWR= P0^2; //P0.2 =1 为工作模式;P0.2=0为待机模式
sbit CS = P0^3; //P0.3=0为频道1,载波频率为433.92MHZ
//P0.3=1为频道2,载波频率为434.32HZ
sbit TXEN = P0^4; //P0.4=0为接收模式,P0.4=1为发射模式
sbit LED = P1^6 ;
int i; //LED显示发射状态
int k;
int j;
int m;
int l;
int q;
unsigned char xdata re[100];
//-----------------------------------------------------------------------------
// 函数声明
//-----------------------------------------------------------------------------
void SYSCLK_Init (void); //系统时钟初始化函数声明
void PORT_Init (void); //端口初始化函数声明
void UART0_Init (void); //UART初始化函数声明
//----------------------------------------------------------------------------
//系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init (void)
{
int i; // 延时计数
OSCXCN = 0x67; // 使用外部时钟22.1184MHz
for (i=0; i < 256; i++) ; // 等侍晶振起振
while (!(OSCXCN & 0x80)) ; // 等待晶振稳定
OSCICN = 0x88; // 选择外部晶振作为系统时钟
//CKCON = 0x20; //定时器2使用系统时钟
}
//-----------------------------------------------------------------------------
// 交叉开关配置
//-----------------------------------------------------------------------------
//
void PORT_Init(void)
{
XBR0 = 0x04; //使能UART0
XBR1 = 0x00;
XBR2 = 0x40;
P0MDOUT |= 0xFD; //RX,即P0.1为漏极开路方式,其它为推挽方式
P1MDOUT |= 0x40; //p1.6为推挽方式
}
//--------------------------------------------------------------------------------------
//UART初始化
//--------------------------------------------------------------------------------------
void UART0_Init (void)
{
SCON0=0x50;
TMOD=0x20;
TH1=-(SYSCLK/BAUDRATE/16);
TR1=1;
CKCON |=0x10;
PCON |=0x80;
//TI0=1;
}
void main(void)
{
WDTCN = 0xde; //禁止看门狗定时器
WDTCN = 0xad;
SYSCLK_Init ();
PORT_Init ();
UART0_Init ();
PWR = 1; //置nRF401为工作模式
CS = 0;
for(l=0;l<1000;l++)
for(q=0;q<100;q++); //选择载波频率为433MHZ
TXEN = 0; //接收模式
for(j=0;j<1000;j++)
for(k=0;k<100;k++);
EA=1;
ES0=1;
//TI0=0;
//RI0=0;
while(1)
{
while(RI0==0);
RI0=0;
}
}
//UART中断服务程序,中断向量4
//------------------------------------------------------------------------------------
void UART0_ISR (void) interrupt 4 using 3
{
if(m==100)
m=0;
//while(m<100)
//if(SBUF0==0xaa)
//{
re[m]=SBUF0;
m++;
RI0=0;
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -