大家好我是华维蔵鹰,我从业单片机这个行业也有些年头了,刚开始我写的程序跑起来也像老爷车一样慢吞吞的,在整个程序的载入过程中大概要一分多钟,而同事做的另一个版本的比我快上20秒左右。我们都是参考老版本代码做出来的东西,这个差距无疑是非常大的。

后面通过在网上收集了很多的资料和查看一些大神的代码,我发现里面也是有一些门道的。大概在两三年前我写的程序里已经几乎找不到 delay() 了,因为程序中没有 delay 你会发现整个程序跑起来会明显的发现会比之前带有delay的快。下面我们来聊一下平时写单片机程序中一些可以让我们加速的地方。

我们的程序框架是 main 函数里先初始化,然后 while(1),前台程序是各种中断。

以下几种情况是导致我们程序运行久的常见原因:一种是按键程序判断会用到 delay 消抖,最典型的消抖需要耗时5ms。一种是动态显示时候显示一位数码管时候也会用到延时 5ms 左右。还有一种是等待串口发送完成。单片机处理的速度在“微秒”级,而按键抖动的时间至少在“毫秒”级,这对于单片机来说是一个非常“漫长”的过程。

像消抖和数码管的延时问题我们可以这样处理,我们可以在定时中断里面判断按键的状态,利用定时中断服务程序或利用标志位的方法来实现软件消抖。

串口中断发送这个功能我估计很多人没有用过,很多人觉得没有必要,因为不是每个人都遇到过大型项目的开发,当项目对实时性要求很高,你的程序又很大,需要服务的地方很多,那你用非常耗时的方式发送就会降低整个程序的实时性。

我们简单的举个例子就能体现出来,9600 波特率发送一个字符 1ms时间,如果一次发送 50 个字符就是相当于执行 delay(50); 如果我们用中断发送,整个过程很简单,打开串口发送中断,第一个字符是程序发送,剩余的在发送中断里面发送就可以了。

上面我们聊到的是属于单种情况的解决方法,我们在实际情况中遇到的通常是一个完整型操作里面有的需要执行速度很快,有的又必须使用慢的方式。

例如一个温度传感器,它要求先下发转换命令然后等待一定时间后才能进行下一步操作。这个时候我就会这样处理,把这个任务分解成两个部分,一个是启动转换,另一个是读。

程序形式如下:

startcov();

delay();

read();

当然上述的 delay 并不是执行一些无关命令,而是在一个标志位。

也可以把上面所说的的三个函数封装到一个函数里面。

例如取个名字叫HUAWEI():

voidHUAWEI()

{

static u8 state=0;

switch(state)

{

case 0:

startcov();

state++;

break;

case 1:

if(flag_500ms)

state++;

break;

case 2:

read();

state=0;

break;

}

}

}

然后在 while(1) 里不断的调用HUWWEI() 函数即可。

我们的程序中只要没有了 delay 你就会发现执行速度飞快,因为我们绝大部分程序都是赋值和 if 判断,因此执行速度会非常的快。

单片机的编程世界是很简单的,你要想它想跑车一样的运行的快,只要你为它消除道路上的障碍,让它运行的道路平坦,它自然能以它最快的速度去运行,给出它最出色的表现。

希望以上的知识能够给大家提供帮助,这期我们先分享到这里,觉得有用的可以给个三连!免费领,单片机入门到高级进阶学习攻略(附教程+工具)

为什么我的单片机不是“跑车”而是“牛车”,过来人告诉你。相关推荐

  1. 单片机能代替PLC吗?过来人告诉你

    随着科技的进步和市场的需要,近年来出现了非常多类似Arduino这样的开源电子原型平台,它们大部分实现了对单片机的二次封装,所有外设.模块接口都是现成的,对于使用者的要求只需懂C语言,熟悉各种库的调用 ...

  2. 怎么提高单片机编程水平?

    大家好,我是无际,无实战不理论,下面是我从事单片机编程10年的终极程序. 对于怎么提高单片机编程能力,作为一个过来人,我感触很深! 工作的前3,4年,做过一些产品,自以为自己的水平还算可以了,直到去了 ...

  3. 51单片机(2):最小系统

    一.概述 单片机最小系统又称为最小应用系统,是指用最少的元器件组成的能让单片机正常工作的最小电路.通常由四个部分:电源.单片机.晶振电路.复位电路组成. 二.分支 (1)电源:单片机执行所比不可少的, ...

  4. 51单片机的新手入门前所有疑问整理

    51单片机的新手入门前所有疑问整理 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦.最近比较闲 ...

  5. 单片机入门到高级进阶路径(附教程+工具)

    一.先帮大家解答几个问题: 1. 单片机是什么? 答:单片机就是一个微型CPU,把程序烧录芯片里面,通过控制不同的外围电路实现不同产品的功能. 2. 学单片机编程对数学英语有要求吗? 答:数学会基本的 ...

  6. C51单片机——中断与定时器

    中断是大多数CPU最精彩的部分之一,下面我们通过讲解和编程练习学习中断和定时器相关概念 目录 1.1.什么是中断 1.2.中断的种类 1.3中断的相关概念 1.4. 51单片机可用中断及相关引脚 1. ...

  7. 机械转行的都干啥去了?机械转行计算机难吗?

    虽然一个人混得好不好,绝大多数取决于人,但是选择正确能为你如虎添翼. 就好比,你身边都是有钱人,你大概率也穷不到哪里去,如果你身边都是屌丝,那你大概率也是屌丝. 所以,行业选择还是很重要的. 曾经我也 ...

  8. Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]

    http://blog.csdn.net/shimiso/article/details/8156439 前面几篇给大家系统讲解的有关xmpp openfire smack asmack相关的技术和使 ...

  9. 逐梦壹号STC32四驱智能小车开发文档(一):原理图设计

    1 项目简介 如果说小时候有什么梦想,那可能就是想拥有一辆属于自己的四驱车了.为了和大家一起圆了造车的梦想,我们将电路学习.PCB设计.焊接与单片机开发结合起来,以视频与文档的形式去讲述如何制作出一辆 ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. 解题报告:【kuangbin带你飞】专题九 连通图
  3. 苹果损失超 1000 万美元,前员工被控收回扣、盗窃、欺诈!
  4. select case语句举例_图解Go select语句原理
  5. Python 进度条 tqdm
  6. jQuery remove 内存 释放
  7. 牛客寒假5-D.炫酷路途
  8. 新Astaroth***病毒可利用杀毒软件窃取数据
  9. bo耳机h5使用说明_真香时刻·性价比大旗——红米AirDots2 TWS真无线耳机体验测评...
  10. HTML5 中的新特性:
  11. 在程序设计中使用Interface
  12. JerryScript:物联网开发者的得力工具
  13. 《人件》--- 读书笔记
  14. Windows设计师:多核芯片要求全新操作系统
  15. html获取页面input值,javascript怎么获取input中用户输入的内容?
  16. 免费OA办公系统评测 到底哪个适合本公司?
  17. 文献--A Survey on Server-side Approaches to Securing Web Applications
  18. MOS管开关使用方法
  19. 智课雅思词汇---二十七、形容词后缀-ant/-ent
  20. find vba 模糊_EXCEL——VBA实现模糊查找并获取查找到的单元格内容

热门文章

  1. python图表_使用Python绘制图表大全总结
  2. HDU3713 Double Maze(BFS)
  3. Karabiner配置
  4. 列表xcode项目下所有的lnfo.plist
  5. Mac 配置 docker 基本操作
  6. wkhtmltopdf 中文参数详解
  7. mciSendString函数简介(播放音乐以及录音相关操作)
  8. 对 Windows 官方文档的一点吐槽
  9. 使用aspose-slides将ppt转pdf
  10. swiper跳转指定slides,其他路由跳转swiper指定slides