【蓝桥杯单片机10】串行接口的进阶与实战应用

【蓝桥杯单片机10】串行接口的进阶与实战应用

广东职业技术学院 欧浩源

串行接口作为51单片机的重要外设,编程操作并不复杂,但在实际的项目应用中,由于数据结构和通信规约的不同,其程序逻辑也有各种变化,不会像“【蓝桥杯单片机09】串行接口的基本原理与应用”中说的那么简易。
      一般情况下,上位机的命令可能不是一个字节,而是多个字节组成的命令帧,有的长度固定,有的长度变化;而且要求返回的数据可能也不是一个字节,可能是一个数组,也有可能是一个字符串等。在蓝桥杯的比赛中,也不可能让你只是收发一个字节而已,因此,在串口这一个单元中,必须多加一个强化环境,掌握多字节的数据帧收发应用。
      具体的实现有不同的思路,主要还是通过实战案例来理解和强化。

1、单元实训题目

2、程序设计思路与框架
      首先要认真阅读通信规约,在阅读的过程中,头脑中就应该逐渐将文字信息抽象成为数据结构,该定义多少变量,需要多大的数组,程序大致要安排那几个函数,怎么把它们搭建成程序框架...在动手敲代码之前都应该有一个大概而清晰的轮廓。
     就本题来讲,通信规约中明确指导命令帧的长度为4个字节,而且有固定的帧头和帧尾,一个用于接收数据的4字节数组是肯定需要的。
     什么时候才是命令帧接收完成呢,这就需要一个全局的标志来通知主函数了。
     当然你还需要,串口初始化函数、字符串发送函数、串口数据接收函数、和命名解析执行函数。
     因此,你可以得到下面的程序框架结构:

3、关键代码的实现
      教程到了这个阶段,如果你细心观察的话,你就会发现很多代码块是可以重用的,直接拷贝来,一个字母都不用该就能用。例如,串口初始化函数Init_Uart()和单字节发送函数SendByte()就不需要修改,拷过来就能用。
      其他的代码实现起来也不难,几个关键的代码实现,大家可以参考:
      <1> 字符串发送函数

      <2> 串口数据接收函数

      <3> 命令帧解析执行函数

*************蓝桥杯单片机视频教程(永久免费)*************

************************************************** 

原文地址:https://www.cnblogs.com/ALittleBee/p/8955539.html

时间: 2024-08-13 18:34:45

【蓝桥杯单片机10】串行接口的进阶与实战应用的相关文章

2015 蓝桥杯:10.生命之树

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

蓝桥杯单片机知识汇总(更新中)

蓝桥杯知识汇总 1.数码管 段码显示 uchar code display[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf, 0xff}; 打开或关闭数码管 P2 = (P2 & 0x1f) | 0xc0; P0 = order[cnt]; P2 &= 0x1f; P2 = (P2 & 0x1f) | 0xe0; P0 = display[disbuf[cnt]]; P2 &= 0x

蓝桥杯实例之开发板特点

本人之前参加了蓝桥杯,下面我将总结一下我的经历,由于本人技能有限,请多见谅! 我之前用过几种51的板子,说说蓝桥杯的板子: 首先开发板设置了三种芯片的插座,说实话,我估计设计者是出于性价比高的考虑,如果开发AVR.51或者8255的只要插上相应的芯片就行了,其他的都可以用.但是我认为这样设置占据了板子的很大面积,所以单片机开发板相比其他板子有点大(我个人认为的).如果当我们需要其他芯片时,可以接一个转换板不就行了.这样还能节省成本呢. 看一下原理图: 原理图中与其他板子相比,它运用了好多个锁存器

蓝桥杯——说好的进阶之完全背包问题

有N种物品和一个载重量为W的背包,每种物品都有无限件可用.第i种物品的重量是w,价值是p.将哪些物品装入背包可使这些物品的重量总和不超过背包总重量,且价值总和最大.(对比01背包问题,取或不取与无限件) static int W=10; static int[] w_arr = new int[]{3,2,5,1,6,4}; static int[] p_arr = new int[]{6,5,10,2,16,8}; static int[][] v; public static void ma

蓝桥杯——说好的进阶之买不到的数目

问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 10 颗糖. 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17.大于17的任何数字都可以用4和7组合出来. 本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字. 输入格式 两个正整数,表示每种包装中糖的颗数(都不多于1000) 输出格式 一个正整数,表示最大不能买到的糖数 样例输入1

蓝桥杯——说好的进阶之入学考试

问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:"孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值.我会给你一段时间,在这段时间里,你可以采到一些草药.如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大." 如果你是辰辰,你能完成这个任务吗? 输入格式 第一行有两个整数T(1 <= T <= 10

蓝桥杯——说好的进阶之取数博弈游戏(动态规划实现)

今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断. 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个. 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完. 被迫拿到最后一个球的一方为负方(输方) 请编程确定出在双方都不判断失误的情况下,对于特定的初始球数,A是否能赢? 程序运行时,从标准输入获得数据,其格式如下: 先是一个整数n(n<100),表示接下来有n个整数.

蓝桥杯——说好的进阶之砝码称重(贪心算法)

5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总是大数在前小数在后. 可以假设用户的输入的数字符合范围1~121. public static void main(String

蓝桥杯——说好的进阶之去重复元素的排列组合

将待排列(组合)的数组,先分别统计出种类和个数,然后进行避免重复的排列(组合). /* 1,1,2,3的排列组合 去重复 * (借此复习排列组合) * * 1:2 2个1 * 2:1 1个2 * 3:1 1个3 * * */ static int[] iarr = new int[3];//目标序列 static int[] carr = new int[] { 1, 2, 3 };//3种item static int[] used = new int[] { 2, 1, 1 };//每种it