串口返回调试c语言代码,用CC2530做串口实验,用调试助手输入自己的名字,电脑返回结果...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在这基础上修改代码,使得波特率设置为38400

在电脑上串口调试助手中发送自己姓名中某个字的拼音字符串到模块,则模块通过串口返回答辩同学自己姓名中全部字的拼音到电脑,若发送错误字符串,查找不到返回“NULL”到电脑,例如,例如,张三发送zhang到模块,模块返回zhang san(提示:调用某C语言字符串对比函数,仅需一次调用即可)。

/****************************************************************************

* 文 件 名: main.c

* 作 者: Andy

* 修 订: 2013-01-08

* 版 本: 1.0

* 描 述: 设置串口调试助手波特率:115200bps 8N1

* 串口调试助手给CC2530发字符串时,开发板会返回接收到的字符串

* 从PC上通过串口调试助手发送字符串给目标板,并以“#”结束

****************************************************************************/

#include

#include

typedef unsigned char uchar;

typedef unsigned int uint;

#define UART0_RX 1 //输入

#define UART0_TX 2 //输出

#define SIZE 51

char RxBuf;

char UartState;

uchar count;

char RxData[SIZE]; //存储发送字符串

/****************************************************************************

* 名 称: DelayMS()

* 功 能: 以毫秒为单位延时

* 入口参数: msec 延时参数,值越大,延时越久

* 出口参数: 无

****************************************************************************/

void DelayMS(uint msec)

{

uint i,j;

for (i=0; i

for (j=0; j<1070; j++);

}

/****************************************************************************

* 名 称: InitUart()

* 功 能: 串口初始化函数

* 入口参数: 无

* 出口参数: 无

****************************************************************************/

void InitUart(void)

{

PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1

P0SEL = 0x0c; //P0_2,P0_3用作串口(外设功能)

P2DIR &= ~0xC0; //P0优先作为UART0

U0CSR |= 0x80; //设置为UART方式

U0GCR |= 11;

U0BAUD |= 216; //波特率设为38400

UTX0IF = 0; //UART0 TX中断标志初始置位0

U0CSR |= 0x40; //允许接收

IEN0 |= 0x84; //开总中断允许接收中断

}

/****************************************************************************

* 名 称: UartSendString()

* 功 能: 串口发送函数

* 入口参数: Data:发送缓冲区 len:发送长度

* 出口参数: 无

****************************************************************************/

void UartSendString(char *Data, int len)

{

uint i;

for(i=0; i

{

U0DBUF = *Data++; //将数据读入缓存器中

while(UTX0IF == 0);

UTX0IF = 0; //UART0 TX中断标志初始置位0

}

}

/****************************************************************************

* 名 称: UART0_ISR(void) 串口中断处理函数

* 描 述: 当串口0产生接收中断,将收到的数据保存在RxBuf中

****************************************************************************/

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{

URX0IF = 0; // 清中断标志

RxBuf = U0DBUF;

}

/****************************************************************************

* 程序入口函数

****************************************************************************/

void main(void)

{

CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振

while(CLKCONSTA & 0x40); //等待晶振稳定为32M

CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

InitUart(); //调用串口初始化函数

UartState = UART0_RX; //串口0默认处于接收模式

memset(RxData, 0, SIZE); //数据清0

while(1)

{

if(UartState == UART0_RX) //接收状态

{

if(RxBuf != 0)

{

if((RxBuf != '#')&&(count < 50))//以'#'为结束符,一次最多接收50个字符

RxData[count++] = RxBuf;

else

{

if(count >= 50) //判断数据合法性,防止溢出

{

count = 0; //计数清0

memset(RxData, 0, SIZE);//清空接收缓冲区

}

else

UartState = UART0_TX; //进入发送状态

}

RxBuf = 0;

}

}

if(UartState == UART0_TX) //发送状态

{

U0CSR &= ~0x40; //禁止接收

UartSendString(RxData, count); //发送已记录的字符串。

U0CSR |= 0x40; //允许接收

UartState = UART0_RX; //恢复到接收状态

count = 0; //计数清0

memset(RxData, 0, SIZE); //清空接收缓冲区

}

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值