当前位置: 首页 > news >正文

东莞网站建设 汇卓湖州网络推广竞价

东莞网站建设 汇卓,湖州网络推广竞价,邯郸网站制作厂家,网站的logo在百度怎么显示不出来目录 3.串口通信实战实操简易的工作原理Tips:sprintf函数简介 总结课后练习 3.串口通信实战 做一个简易串口控制器。发送对应指令#xff0c;让板子做相应的事情#xff0c;或者传输数据#xff08;文本模式下发送#xff0c;不要选择HEX#xff09;。 1.串口发送字符Ax\… 目录 3.串口通信实战实操简易的工作原理Tips:sprintf函数简介 总结课后练习 3.串口通信实战 做一个简易串口控制器。发送对应指令让板子做相应的事情或者传输数据文本模式下发送不要选择HEX。 1.串口发送字符Ax\r\nx表示0-7板子点亮对应LED.\r\n也可以在串口软件中设置自动发送。 2.串口发送Bxxxx\r\nxxxx表示一个四位数四位数码管显示这个4位数 2.串口发送Z\r\n板子给电脑发送“Hello STC”; 3.串口发送字符Cx\r\nx表示0-1板子打开/关闭蜂鸣 4.串口发送字符D\r\n板子通过串口发送当前温度给电脑。 实操 先把需求复制到demo.c顶部。 为实现功能1首先要对串口接收进行处理。查看void UART2_int (void) interrupt UART2_VECTOR void UART2_int (void) interrupt 8 {if(S2RI) //如果接收到数据{S2RI 0; //Clear Rx flagRX2_Buffer[RX2_Cnt] S2BUF;if(RX2_Cnt UART2_BUF_LENGTH) RX2_Cnt 0;}if(S2TI){S2TI 0; //Clear Tx flagB_TX2_Busy 0;} }简易的工作原理 先清空标志位再把数据存入RX2_Buffer[RX2_Cnt]。S2BUF写入的数据不断的存到RX2_Buffer中这里用到了循环写入的方式刚刚上电的时候RX2_Cnt是0 写完后变成了1变成了2…总长度是#define UART2_BUF_LENGTH 128数组RX2_Buffer的最大长度是128也就是说写入值超过127以后下一次会重新开始写。 覆盖掉0的参数再往下写一个一个的覆盖下去直到覆盖到最后一个然后又从头开始。 再去看一下串口发送在demo.c中if((TX2_Cnt ! RX2_Cnt) (!B_TX2_Busy)) //收到数据, 发送空闲 如果TX2_Cnt ! RX2_Cnt假设接收的数值是4则已经写入了4个数据如果串口发送和串口接收的数值不相等并且不为忙碌的时候就可以开始发送数据。 把数据写入 S2BUF然后他也是跟着跑每次写入一个数据RX2CNT是每接收到一个数据RX2CNT数值加1加1以后TX就不等于RX2CNT了这种情况下先往上写一个数据TX2CNT也就可以开始1 比如说写入的是4个数据假设TX2CNT刚上电初始是0即满足(TX2_Cnt ! RX2_Cnt) (!B_TX2_Busy)的条件则先将数据写入0先传送出去写完以后这里还是不等于他把写入1也写出去如果说还是不等于 再接着写出去这里其实是一个循环的队列串口在空闲的时候就可以跟着他走这里就是一个循环队列的演示。 本次只要接收到一个指令就可以。从指令集分析每次接收到\r\n以后就可以重新开始计数。 在中断函数void UART2_int (void) interrupt 8中开始改写如果先接收到了数据先把接收到的数据存进去初始化的时候RX2_Cnt 0;刚上电的时候这个数值为0。 添加变量bit Rec_Flag 0; //接收完成标志位。还需要在.h文件中定义一下extern bit Rec_Flag; 增加extern关键字主函数中也可以调用。 假设接收到4个字符 先接收到A以后没有检测到\r\n,先接收到O以后他也是没有检测到\r\n直到检测到\n再去判断前一个数值是不是\r如果有说明接收完成。 处理代码为 if( RX2_Buffer[RX2_Cnt] \n ){if( RX2_Buffer[RX2_Cnt-1] \r )Rec_Flag 1; //接收完成标志位RX2_Cnt 0; //接收完成清0}elseRX2_Cnt;接收完成后在主函数里做处理。这里不需要把参数打印出来了将接收数据处理代码注释掉或者删除。 // if((TX2_Cnt ! RX2_Cnt) (!B_TX2_Busy)) //收到数据, 发送空闲 // { // S2BUF RX2_Buffer[TX2_Cnt]; // B_TX2_Busy 1; // if(TX2_Cnt UART2_BUF_LENGTH) TX2_Cnt 0; // }通过检测Rec_Flag位它已经检测到了最末尾的\r\n符号。可以用switch语句根据RX2_Buffer[0]分情况处理比较的时候只能是单个变量或者字符 if(Rec_Flag 1) //它已经检测到了最末尾的\r\n符号{switch (RX2_Buffer[0]){case A:if()break;case B:break;case C:break;case D:break;case Z:break;default:break;}Rec_Flag 0; //执行完后Rec_Flag 清0防止它反复执行}下一步判断第2个字符根据ASCII码表第二个数需要大于等于48小于等于55则这个数据有效 if((RX2_Buffer[1] 48) (RX2_Buffer[1] 55))点亮灯执行LED (1(RX2_Buffer[1] - 48)) RX2_Buffer[1] - 48则取至范围变为0-7如果0左移1位就是点亮LED0,左移7位就是点亮LED1. case A:if((RX2_Buffer[1] 48) (RX2_Buffer[1] 55)){LED (1(RX2_Buffer[1] - 48));}break;编译完准备去下载。下载完成打开串口助手发送A0发现状态反了很好处理取反。一定要用全部取反~LED ~(1(RX2_Buffer[1] - 48));不是感叹号位取反。 再来看第二个: case B:SEG0 RX2_Buffer[1] - 48;SEG1 RX2_Buffer[2] - 48;SEG2 RX2_Buffer[3] - 48;SEG3 RX2_Buffer[4] - 48;break;编译下载选择正确的串口号发送B1234,数码管上显示了1234。 接下来第三个选项C如果RX2_Buffer[1]0直接控制蜂鸣器的引脚。 case C:if(RX2_Buffer[1] 48)BEEP 0;elseBEEP 1;break;选项D,这里要新学一个函数sprintf。 Tips:sprintf函数简介 详细可参考sprintf函数用法详解 sprintf函数的原型如下 int sprintf(char *str, const char *format, …); 其中str参数是指向存储输出结果的缓存区的指针必须具有足够的容量来存储输出结果format参数是格式控制字符串定义了输出的格式等其余的…参数是输出结果。 sprintf函数的返回值为输出到缓存区中的字符数量这个值不包括字符串结尾的’\0’。 本工程中的应用首先需要引用头文件#include “stdio.h”。 sprintf函数与printf相比里面的内容和后面的内容都是不变的只是前面加了一个把生成的字符保存到了前面比如定义数组char str[30];将最终要显示的字符串保存在了之前定义的数组里 int temp 26; //这里仅做模拟每执行一次加1方便区分。下载执行输入D点击发送显示温度0温度1… 再实现命令Z,代码为PrintString2(“Hello STC\r\n”); 完整核心代码为 if(Rec_Flag 1) //它已经检测到了最末尾的\r\n符号{switch (RX2_Buffer[0]){case A:if((RX2_Buffer[1] 48) (RX2_Buffer[1] 55)){LED ~(1(RX2_Buffer[1] - 48));}break;case B:SEG0 RX2_Buffer[1] - 48;SEG1 RX2_Buffer[2] - 48;SEG2 RX2_Buffer[3] - 48;SEG3 RX2_Buffer[4] - 48;break;case C:if(RX2_Buffer[1] 48)BEEP 0;elseBEEP 1;break;case D:sprintf(str,温度%d\r\n,temp);PrintString2(str);temp;break;case Z:PrintString2(Hello STC\r\n);break;default:break;}Rec_Flag 0; //执行完后Rec_Flag 清0防止它反复执行}实际场景下可以做相应的UI界面规划设计发送相应指令执行对应程序。下位机做好指令的接收和处理。如果担心数据乱码可以加入数据校验判断末尾的值是否和要求的相等相等说明命令有效。 总结 1.了解串口的接线TX和RX相连和扩展232,485等硬件 2.学会分析和移植驱动代码。 3.拓展一下sprintf的用法变量转字符串操作很有用 4.课外可以自己买几个串口的模块体验一下~ 课后练习 用试验箱实现简易串口控制器主机。可以用本实验性的第二组串口/另外的核心板 1.按下按钮0-7发送字符Ax\r\nx表示0-7 2.按下按钮8发送B0000\r\n 3.按下按钮9发送Z\r\n 4.按下按钮A串口发送字符C0\r\n 4.按下按钮B串口发送字符C1\r\n 4.按下按钮C发送字符Dx\r\n
http://www.yayakq.cn/news/6023/

相关文章:

  • 免费手机网站源码seo网站分析报告
  • 建设官方企业网站网站建设合同书 简易
  • 网站建设厂商商业网点消防规范
  • 网站建设swf播放器源码html网页制作案例
  • 纪检监察网站建设背景佛山企业网
  • 深圳网站建设app开发宁波网站建设与设计制作
  • 网站怎么做动态背景图片网页设计实训总结200字
  • 哪种语言做网站好下载ppt模板免费的网站
  • 网站为什么百度搜不到crm管理系统软件
  • 常用的设计网站网站论坛怎么做
  • 房产网站怎么推广创新创业项目计划书ppt
  • 做暧电影在线观看网站东道设计招聘要求
  • 如何建设销售型企业网站蚌埠百度做网站
  • 网站正在建设中a手机版深圳创同盟科技有限公司
  • 企业管理系统下载西安网络seo公司
  • 电商网站建设存在哪些问题优秀营销软文范例100字
  • 网站建设管理招聘wordpress个人博客动漫主题
  • 年前做招聘网站话术网站建设公司营销话术
  • 重庆市做网站的公司装修网站怎么做
  • 交通局网站模板泊头网站制作案例
  • 做网站的公司倒闭微网站开发工具
  • 商丘企业网站建设推荐网站分析 工具
  • 太原高端网站建设国际贸易网站排名
  • 怎么做属于自己的领券网站驱动开发
  • 网站地图在线生成宁夏建设工程造价站网站
  • 青岛网站建设搜q.479185700网页设计代码html个人简介
  • 深圳做网站公司地点企业管理模式
  • 道路建设网站营销策略制定
  • 晟合建设集团网站网站建设一年能收入多少钱
  • 比价网站怎么做的工商局企业信息查询系统官网