跳转到主要内容

单片机

浅谈单片机应用程序架构

kelly /

在单片机中,有多个任务需要进行,如何处理才能保证单片机的工作效率以及每个任务完成的及时性?本文跟大家分享几个方法:

<strong>1、顺序执行法:</strong>

这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。

这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。

本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。

下面就写一个顺序执行的程序模型,方面和下面两种方法对比:

如何简单理解单片机项目里的通信协议?

editor /

本文我们所述的通信协议只是指建立再物理层之上的通信数据包格式。通常是我们自行约定的具有一定顺序排列的数据集合,且每一部分都有特定的含义,我们把这些数据集合借助物理层通信方式进行发送和解析。

<strong>1、自定义数据通信协议</strong>

这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。

通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。

【下载】基于单片机的AD转换电路与程序设计

editor /

摘要:A/D转换是指将模拟信号转换为数字信号,这在信号处理、信号传输等领域具 有重要的意义。常用的A/D转换电路有专用A/D集成电路、单片机ADC模块,前者精度高、电路复杂,后者成本低、设计简单。基于单片机的A/D转换电路在实际电路中获得了广泛的应用,论文对这一电路结构进行了详细的研究。

<strong>引言 </strong>

在设计一个控制系统时,首先要对系统进行分析明确设计任务和设计要求,作为系统方案设计的依据。合理选着系统的构成方案,合理规划分硬件和软件的功能,以有利于兼顾性能、价格比和缩短开发周期。硬件设计应以在充分满足系统功能的前提下最简单为原则,在系统的运用中,单片机被广泛运用。A/D转换的方法是由传输信号与接收信号图解方法,借助这种方法可以在已知发,接收点和存储的条件下,制造出各式各样的电器产品。

更多详情请点击附件进行下载

关于单片机中的FLASH和EEPROM

editor /

作者:叶子

FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同

FLASH 和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。

至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。

没有严谨的工作精神,根本无法成为真正的技术高手。

单片机牛人总结的应用程序架构

editor /

工作中经过摸索实验,总结出单片机大致应用程序的架构有三种:

1、简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。

2、时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。

3、操作系统,此法应该是应用程序编写的最高境界。

下面就分别谈谈这三种方法的利弊和适应范围等。

<strong>一、顺序执行法</strong>

这 种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个 完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。 本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。

这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。

单片机的片选和地址分配

editor /

一片外围芯片具有一定的地址空间。例如11根地址线的芯片,其地址空间为2KB(2048)。这2KB地址空间在微处理器的内存空间(如8位微处理器有16根地址线,能寻址64KB)中被分配在什么位置,由高位地址线A11~A15产生的片选信号来分别确定。当外围芯片多于一片时,为了避免误操作,必须利用片选信号来分别确定各芯片的地址分配。产生片选信号的方式不同,存储器的地址分配也就不同。片选方式有线选、全译码和局部译码。

线选方式

线选方式,就是把一根高位地址线直接连外围芯片的片选端,如图1。图中Ⅰ、Ⅱ、Ⅲ都是2KB×8位存储器芯片,地址线 A10~A0 实现片内寻址B。现用3根高位地址线A11、A12、A13实现片选,均为低电平有效。为了不出现寻址错误,当All、A12、A13之中有一根地址线为低电平时,其余两根必须为高电平,即每次操作只能选中其中一个芯片,假设剩下的两根高位地址线 Al4、A15都为低电平,这样可得到3个芯片的地址分配,见表1。

几幅草图教你区分数字地、模拟地、电源地,单点接地

editor /

我们在进行pcb布线时总会面临一块板上有两种、三种地的情况,傻瓜式的做法当然是不管三七二十一,只要是地,就整块敷铜了。这种对于低速板或者对干扰不敏感的板子来讲还是没问题的,否则可能导致板子就没法正常工作了。当然若碰到一块板子上有多种地时,即使板子没什么要求,但从做事严谨认真的角度来讲,咱们也还是有必要采用本文即将讲到的方法去布线,以将整个系统最优化,使其性能发挥到极致!当然关于这些地的一些基础概念、为什么要将它们分开,本文就不讲了,不懂的同学自己查哈!

<strong>一、对于板子上有数字地、模拟地、电源地这种情况:</strong>
  
<center><img src="http://mm32.eetrend.com/files/2016-10/wen_zhang_/100003559-11821-1.png&…; alt=""width="400"></center>

从PCB设计到软件处理,谈单片机系统的电磁兼容性设计

editor /

本文中所提到的对电磁干扰的设计我们主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。

<strong>一、影响EMC的因数

1、电压:电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。

2、频率:高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。

3、接地:在所有EMC题目中,主要题目是不适当的接地引起的。有三种信号接地方法:单点、多点和混合。在频率低于1MHz时,可采用单点接地方法,但不适宜高频;在高频应用中,最好采用多点接地。混合接地是低频用单点接地,而高频用多点接地的方法。地线布局是关键,高频数字电路和低电平模拟电路的接地电路尽不能混合。

4、PCB设计:适当的印刷电路板(PCB)布线对防止EMI是至关重要的。

5、电源往耦:当器件开关时,在电源线上会产生瞬态电流,必须衰减和滤掉这些瞬态电流。来自高di/dt源的瞬态电流导致地和线迹“发射”电压,高di/dt产生大范围的高频电流,激励部件和线缆辐射。流经导线的电流变化和电感会导致压降,减小电感或电流随时间的变化可使该压降最小。

单片机硬件系统7个设计原则,不能不晓得!

kelly /

一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。

系统的扩展和配置应遵循以下原则:

1、尽可能选择典型电路,并符合单片机常规用法。为硬件系统的标准化、模块化打下良好的基础。

2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。

3、硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间。

4、系统中的相关器件要尽可能做到性能匹配。 如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。

5、可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。

这4大单片机开发技巧,可帮您解决很多可以避免的麻烦!

editor /

在单片机应用开发中,代码的使用效率、单片机抗干扰性和可靠性等问题仍困扰着很多工程师。现归纳出单片机开发中应掌握的几个基本技巧,供大家参考。

<strong>1、如何减少程序中的bug</strong>

对于如何减少程序的bug,应该先考虑系统运行中应考虑的超范围管理参数。物理参数:这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。资源参数:这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆叠深度。应用参数:这些应用参数常表现为一些单片机、功能单元的应用条件。过程参数:指系统运行中的有序变化的参数。

<strong>2、如何提高C语言编程代码的效率</strong>

用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%。