📄 main.c
字号:
// 设定为接收方
#include "config.h"
#ifndef OS_Q_MEM_SEL
#define OS_Q_MEM_SEL idata
#endif
volatile uint8 data SelfAddr=0x71,DesAddr=0x69,SourAddr,ReceAddr;
volatile uint8 idata DataCnt, AddressCnt;
volatile uint8 idata FrameType;
volatile uint8 data SendData[_DataWidth]={'x','y'};
Info volatile bdata ControlByte; // 定义
uint8 code Rxconfig_Word[15]={0x20,0x20,0x00,0xcc,0xcc,0xcc,0xcc,
0x00,0x71,0x71,0x71,0x71,0x83,0x4f,0x05};
/* Receive Mode,控制信道为2402MHz,发射功率0DBm,250Kbps,晶振16Mhz,ShockBurst Mode,
使用Channel One,16bits CRC,地址宽度32bits,Payload长度32bits */
uint8 OS_Q_MEM_SEL SerialInBuf[SendBuf]; //给读UART_RX消息队列分配的队列空间
uint8 OS_Q_MEM_SEL ReceDataBuf[ReceBuf]; //给写UART_TX消息队列分配的队列空间
uint8 OS_Q_MEM_SEL AckInBuf[AckBuf];
volatile bit SerialCanSend=1;
void Delay(uint8 TimeFlip)
{
OS_ENTER_CRITICAL(); // 进入临界区
switch(TimeFlip) /* timeflip表示延迟等待的时间片 */
{
case _10MS : TH0=0xdc; /* T0定时周期为10ms的计数初值 */
TL0=0x00;
break;
case _5MS : TH0=0xee; /* T0定时周期为5ms的计数初值 */
TL0=0x00;
break;
case _3MS : TH0=0xf5; /* T0定时周期为3ms的计数初值 */
TL0=0x33;
break;
case _1MS : TH0=0xfc; /* T0定时周期为1ms的计数初值 */
TL0=0x66;
break;
case _500US : TH0=0xfe; /* T0定时周期为500us的计数初值 */
TL0=0x33;
break;
default : break;
}
_WAIT_TIMER0;
OS_EXIT_CRITICAL(); // 退出临界区
}
void UART(void) interrupt OS_UART_ISR
{
uint8 data temp;
#if EN_OS_INT_ENTER>0
OS_INT_ENTER();
#endif
if(RI == 1)
{
RI=0;
OSQIntPost(SerialInBuf,SBUF);
}
if(TI == 1)
{
TI=0;
if(OSQAccept(&temp,ReceDataBuf)==OS_Q_OK) SBUF=temp;
else SerialCanSend=1;
}
OSIntExit();
return;
}
void INT1ISR(void) interrupt OS_INT1_ISR
{
uint8 temp;
#if EN_OS_INT_ENTER>0
OS_INT_ENTER();
#endif
// INT1 = 1; IE1 = 0; // 清中断源,其实MCU会自动清此中断源,故略去
_RX_SPI(temp);
ControlByte.CtrlDataFlag = (temp&_CtrlDataFlag)>>7;
ControlByte.AckState = (temp&_AckState)>>5;
ControlByte.NewFrame = (temp&_NewFrame)>>4;
ControlByte.LastFrame = (temp&_LastFrame)>>3;
ControlByte.FrameSequence = (temp&_FrameSequence);
switch((uint8)ControlByte.CtrlDataFlag)
{
/* case _F_Ctrl : OSIntSendSignal(TaskID_ReceAck); // 唤醒应答帧接收任务
break; */
case _F_Data : OSIntSendSignal(TaskID_ReceData);// 唤醒接收数据任务
break;
default : break;
}
OSIntExit();
return;
}
void main(void)
{
Init_System(); // 系统初始化
OSStart(); // 启动多任务
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -