完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这个程序是字符串的收发,现在我想把程序改一下,gps模块的tx与单片机的rx相连,单片机接受gps传过来的数据,再通过串口发送,有没有大神能帮忙改一下,万分感谢!
#include #include #define uint unsigned int #define uchar unsigned char //定义控制LED灯的端口 #define LED1 P1_0 //定义LED1为P10口控制 #define LED2 P1_1 //函数声明 void Delayms(uint xms); //延时函数 void InitLed(void); //初始化P1口 void InitUart(); //初始化串口 void Uart_Send_String(char *Data,int len); char Rxdata[50]; uchar RXTXflag = 1; char temp; uchar datanumber = 0; /**************************** 延时函数 *****************************/ void Delayms(uint xms) //i=xms 即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M) { uint i,j; for(i=xms;i>0;i--) for(j=587;j>0;j--); } /**************************** //初始化程序 *****************************/ void InitLed(void) { P1DIR |= 0x03; //P1_0、P1_1定义为输出 LED1 = 0; //LED灯熄灭 LED2 = 0; } /**************************************************************** 串口初始化函数 ***********************************************************/ void InitUart() { CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47; // 设置系统主时钟频率为 32MHZ PERCFG = 0x00; //位置1 P0口 P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口,第二功能 P2DIR &= ~0XC0; //P0 优先作为UART0 ,优先级 U0CSR |= 0x80; //UART 方式 U0GCR |= 11; //U0GCR与U0BAUD配合 U0BAUD |= 216; // 波特率设为115200 UTX0IF = 0; //UART0 TX 中断标志初始置位1 (收发时候) U0CSR |= 0X40; //允许接收 IEN0 |= 0x84; // 开总中断,接收中断 } /**************************************************************** 串口发送字符串函数 ****************************************************************/ void Uart_Send_String(char *Data,int len) { { int j; for(j=0;j U0DBUF = *Data++; while(UTX0IF == 0); //发送完成标志位 UTX0IF = 0; } } } /*************************** //主函数 ***************************/ void main(void) { InitLed(); //调用初始化函数 InitUart(); while(1) { if(RXTXflag == 1) //接收状态 { LED1=1; //接收状态指示 if( temp != 0) { if((temp!='#')&&(datanumber<50)) //'#'被定义为结束字符,最多能接收50个字符 Rxdata[datanumber++] = temp; else { RXTXflag = 3; //进入发送状态 LED1=0; //关指示灯 } temp = 0; } } if(RXTXflag == 3) //发送状态 { LED2= 1; U0CSR &= ~0x40; //禁止接收 Uart_Send_String(Rxdata,datanumber); //发送已记录的字符串。 U0CSR |= 0x40; //允许接收 RXTXflag = 1; // 恢复到接收状态 datanumber = 0; //指针归0 LED2 = 0; //关发送指示 } } } /**************************************************************** 串口接收一个字符: 一旦有数据从串口传至CC2530, 则进入中断,将接收到的数据赋值给变量temp. ****************************************************************/ #pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) { URX0IF = 0; // 清中断标志 temp = U0DBUF; |
|
相关推荐
2个回答
|
|
gps模块用的是at指令吧,你得看看
|
|
|
|
1002925094 需要呆坐吗
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11788 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:53 , Processed in 0.536755 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号