📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** tank3221@sina.com
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2007-05-26
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: 都虹云
** Created date: 2007-05-26
********************************************************************************************************/
#include "config.h"
#define LEDCON 0x00ff0000 // LED流水灯定义字
#define UART_BPS 115200 // 定义通讯波特率
/*--------------------------------------------------
控制字、数据缓冲区变量定义区
---------------------------------------------------*/
uint8 RfTxCon[10] = { 0x01,0x0c,0x44,0x20,0x20,
0xE7,0xE7,0xE7,0xE7,0x5d}; //射频 发射 控制字
uint8 RfRxCon[10] = { 0x01,0x0c,0x44,0x20,0x20,
0xcc,0xcc,0xcc,0xcc,0x5d}; //射频 接收 控制字
uint8 TxAddr[4] = { 0xcc,0xcc,0xcc,0xcc }; //发射地址
uint8 RxAddr[4] = { 0xcc,0xcc,0xcc,0xcc }; //接收地址
uint8 TxBuf[32] = { //发送缓冲区
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F
};
uint8 RxBuf[32] = { //接收缓冲区
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uint8 temp[32] = { //测试数据缓冲区
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/****************************************************************************
* 名 称:DelayNS()
* 功 能:长软件延时 主要应用于串口到PC及实验台LED的显示
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
{
for(i=0;i<5000;i++);
}
}
/*----------------------------------------------------------------------------
串口发送到PC机各函数
-----------------------------------------------------------------------------*/
/****************************************************************************
* 名 称:UART0_Ini()
* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_Init(void)
{ uint16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
U0DLM = Fdiv / 256; // 分频设置高8位
U0DLL = Fdiv % 256; // 分频设置低8位
U0LCR = 0x03; // 控制启动
}
/****************************************************************************
* 名 称:UART0_SendByte()
* 功 能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data; // 发送数据
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
}
/****************************************************************************
* 名 称:UART0_SendStr()
* 功 能:向串口发送一字符串
* 入口参数:srt 要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void UART0_SendStr(uint8 const *str)
{
while(1)
{
if( *str == '\0' ) break; // 是否发送到最后一个字符
UART0_SendByte(*str++); // 发送数据
}
}
/****************************************************************************
* 名 称:Uart()
* 功 能:数据发送显示到PC机,要发送的数据保存在temp[32]变量中
* 入 口:no 显示的字符数
* 出 口:无
****************************************************************************/
void Uart(uint8 * tempbuf,uint8 no)
{
uint8 i ;
for(i=0;i<no;i++)
{
UART0_SendByte(tempbuf[i]); //显示返回数据
DelayNS(10);
}
}
/****************************************************************************
* 名 称:Init()
* 功 能:串口0、LED灯初始化
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Init(void)
{
Magic905_Init();
IO2DIR = LEDCON;
UART0_Init();
}
/****************************************************************************
* 名 称:main_Tx() 发送端主函数
* 功 能:循环发送数据包,读出发送地址和数据显示到PC上,以LED等闪烁作为标志。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main_Tx(void)
{
Init();
nRFconfig(RfTxCon);
while(1)
{
IO2SET = 0xffffffff; // 灯灭以表示发包开始
DelayNS(10);
TxPacket(TxAddr,RfTxCon[2],TxBuf,RfTxCon[3]); // 发送数据包
RTxAddr(temp,RfTxCon[2]); // 读发送地址
Delay(1);
Uart(temp,4); // 显示发送地址
RTxData(temp,RfTxCon[3]); // 读发送数据
Delay(1);
Uart(temp,32); // 显示发送数据
IO2CLR = 0xffaaffff; // 表示发包结束
DelayNS(60);
}
}
/****************************************************************************
* 名 称:main_Rx() 接收端主函数
* 功 能:循环接收数据包,读出接收到的数据显示到PC上,以LED等闪烁作为结束标志。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void main_Rx(void)
{
uint8 i;
Init();
nRFconfig(RfRxCon);
while(1)
{
RxPacket(RxBuf,32); // 接收数据包
for(i=0;i<RfRxCon[3];i++)
{
UART0_SendByte(RxBuf[i]); // 显示接收数据
DelayNS(10);
}
IO2CLR = 0xff66ffff; // 表示成功接收标志
DelayNS(60);
IO2SET = 0xffffffff;
DelayNS(10);
}
}
/*********************************************************************************************************
** main主函数
********************************************************************************************************/
int main (void)
{
main_Tx();
// main_Rx();
// main_Txtest();
// test();
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -