(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> MCU设计实例 >> 浏览文章

快速掌握一款新型MCU的方法

作者:佚名   来源:不详   点击数:x  更新时间2014年08月31日   字体

 

 
 
任何一款MCU其基本原理和功能都是大同小异所不同的只是其外围功能模块的配置及数量指令系统等对于指令系常虽然形式上看似千差万别但实际上只是符号的不同其所代表的含义所要完成的功能和寻址方式基本上是类似的因此对于任何一款MCU主要应从如下的几个方面来理解和掌握
 
              * MCU的特点要了解一款MCU首先需要知道就是其ROM空间RAM空间IO口数量定时器数量和定时方式所提供的外围功能模块Peripheral Circuit中断础工作电压及功耗等等
 
              * 了解这些MCU Features后接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比明确那些资源是目前所需要的那些是本项目所用不到的对于项目中需要用到的而所选MCU不提供的功能则需要认真理解MCU的相关资料以求用间接的方法来实现例如所开发的项目需要与PC机COM口进型讯而所选的MCU不提供UART口则可以考虑用外部中断的方式来实现
 
              * 对于项目开发需要用到的资源则需要对其Manua*进行认真的理解和阅读而对于不需要的功能模块则可以忽略或浏览即可对于MCU学习来讲应用才是关键也是最主要的目的
 
              * 明确了MCU的相关功能后接下来就可以开始编程了对于初学者或初次使用此款MCU的设计者来说可能会遇到很多对MCU的功能描述不明确的地方对于此类问题可以通过两种方法来解决一种是编写特别的验证程序来理解资料所述的功能另一种则可以暂时忽略程序设计中则按照自耗前的理解来编写留到调试时去修改和完善前一种方法适用于时间较宽松的项目和初学者而后一种方法则适合于具有一定MCU开发经验的人或项目进度较紧迫的情况
 
              * 指令系统千万不要特别花时间去理解指令系统只是一种逻辑描述的符号只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可而且随着编程的进行对指令系统不越来越熟练甚量以不自觉地且下来
 
MCU的基本功能
 
对于绝大多数MCU下列功能是最普遍也是最基本的针对不同的MCU其描述的方式可能会有区别但本质上是基本相同的
 
              * Timer定时器Timer的种类虽然比较多但可归纳为两大类一类是固定时间间隔的Timer即其定时的时间是由系统设定的用户程序不可控制系统只提供几种固定的时间间隔给用户程序进行选择如32Hz16Hz8Hz等此类Timer在4位MCU中比较常见因此可以用来实现时钟计时等相关的功能另一类则是Programmable Timer可编程定时器顾名思义该类Timer的定时时间是可以由用户的程序来控制的控制的方式包括时钟源的选择制数Prescale选择及预制数的设定等有的MCU三者都同本备而有的则可能是其中的一只两种此类Timer应用非常灵活实际的使用也千变万化其中最常见的一种应用就是用其实现PWM输出具体的应用后续会有特别的介绍由于时钟源可以自由选择因此此类Timer一般均与Event Counter事件计数器合在一起
 
              * IO口任何MCU都具有一定数量的IO口没有IO口MCU就失去了与外部沟通的渠道根据IO口的可配们况可以分为如下几种类型
 
              **  纯输入或纯输出口此类IO口有MCU硬件设计决定只能是输入或输出不可用软件来进行实时的设定
 
              **  直接读写IO口如MCS-51的IO口就属于此类IO口当执行读IO口指令时就是输入口当执行写IO口指令则自动为输出口
 
              ** 程序编程设定输入输出方向的此类IO口的输入或输出由程序根据实际的需要来进行设定应用比较灵活可以实现一些总线级的应用如I2C总线各种LCDLED Driver的控制总线等
 
              ** 对于IO口的使用重要的一点必须牢记的是对于输入口必须有明确的电平信号确保不能浮空可以通过增加上拉或下拉电阻来实现而对于输出口其输出的状态电平必须考虑其外部的连接情况应保证在Standby或静态状态下不
 
              存在拉电流或灌电流
 
              * 外部中断和部中断也是绝大多数MCU所具有的基本功能一般用于信号的实时触发数据采样和状态的检测中断的方式由上升沿下降沿触发和电平触发几种外部中断一般通过输入口来实现若为IO口则只有设为输入时其中断功能才会开启若为输出口则外部中断功能将自动关闭ATMEL的ATiny系写在一些例外输出口时也能触发中断功能外部中断的应用如下
 
              ** 外看发信号的检测一种是基于实时性的要求比如可控硅的控制突发性信号的检测等而另一种情况则是省电的需要
 
              ** 信号频率的测量为了保证信号不被遗漏外部中断是最理想的选择
 
              ** 数据的解码在遥控应用领域为了降低设计的成本经常需要采用软件的方式来对各种编码数据进行解码如Manchester和PWM编码的解码
 
              **  按键的检测和系统的唤醒对于进入Sleep 状态的MCU一般需要通过外部中断来进行唤醒最基本的形式则前键通过按键的动作来产生电平的变化
 
              * 通讯接口MCU所提供的通讯接口一般包括SPI接口UARTI2C接口等其分别描述如下
 
              **  SPI接口此类接口是绝大多数MCU都提供的一种最基本通讯方式其数据传输采用同步时钟来控制信号包括SDI串行数据输入SDO串行数据输出SCLK串行时钟及Ready信号有些情况下则可能没有Ready信号此类接口可以工作在Master方式或Slave方式下通俗说法就是看谁提供时有号提供时钟的一方为Master相反的一方则为Slaver
 
              **  UARTUniversal Asynchronous Receive Transmit属于最基本的一种异步传输接口其信号线只有Rx和Tx教基本的数据格式为Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)一位数据所占的时间称为Baud Rate波特率对于大多数的MCU来讲数据为的长度数据校
 
              验方式奇校验偶校验或无校验停止位Stop Bit的长度及Baud Rate是可以通过程序编程进行灵活设定此类接口最常用的方式就是与PC机的串口进行数据通讯
 
              **  I2C接口I2C是由Philips开发的一种数据传输协议同样采用2根信号来实现SDAT串行数据输入输出和SCLK串行时钟其最大的好处是可以在此总线上挂接多个设备通过地址来进行识别和访问I2C总线的一个最大的好处就是非常方便
 
               
 
              用软件通过IO口来实现其传输的数据速率完全由SCLK来控制可快可慢不像UART接口有严格的速率要求
 
              * Watchdog看门狗定时器Watchdog也是绝大多数MCU的一种基本配置一些4位MCU可能没有此功能大多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭有的是在程序烧入时来设定的如Microchip PIC系列MCU而有的MCU则是通过特定的方式来决定其是否打开如Samsung的KS57系列只要程序访问了Watchdog寄存器就自动开启且不能再被关闭一般而言watchdog的复位时间是可以程序来设定的Watchdog的最基本的应用是为MCU因为意外的故障而导致死机提供了一种自一指的能力
 
MCU程序的编写
 
    MCU的程序的编写与PC下的程序的编写存在很大的区别虽然现在基于C的MCU开发工具越来越流行但对于一个高效的程序代码和不使用汇编的设计者来讲汇编语言仍然是最简洁最行的编程语言对于MCU的程序编写其基本的框架可以说是大体一致的一般分为初始化部分这是MCU程序设计与PC最大的不同主程序循环体和中断处理程序三大部分见图1 a 和 b其分别说明如下
 
              * 初始化对于所有的MCU程序的设计来讲出世化是最基本也是最重要的一步一般包括如
 
              ** 屏蔽所有中断并初始化堆栈指针初始化部分一般不希望有任何中断发生
 
              **  清除系统的RAM区域和允Memory虽然有时可能没型全的必要但从可靠性及一致性的角度出发特别是对于防止意外的错误还是建议养成己的编程习惯
 
              **  IO口的初始化根据项目的应用的要求设定相关IO口的输入输出方式对与输入口需要设定其上拉或下拉电阻对于输出口则必须设定其出世的电平输出以防出现不必要的错误
 
              ** 中断的设置对于所有项目需要用到的中断源应该给予开启并设定中断的触发条件而对于不使用的多余的中断则必须给予关闭
 
              ** 其他功能模块的初始化对于所有需要用到的MCU的外围功能模块必须按项目的应用的要求进行相应的设置如UART的通讯需要设定Baud Rate数据长度校验方式和Stop Bit的长度等而对于Programmer Timer则必须设置其时钟源制数及Reload Data 等
 
              **  参数的出世化和成了MCU的硬件和资源的出世化后接下来就是对程序中使用到的一些变量和数据的初始化设置这一部分的初始化需要根据具体的项目及程序的总体才来设计对于一些用EEPROM来保存项目预制数的应用来讲建议在初始化时将相关的数据拷贝到MCU的RAM以提高程序对数据的访问速度同时降低系统的功模原则上访问外部EEPROM都会增加电源的功模
 
              * 主程序循环体大多数MCU是属于长时间不间断运行的因此其主程序体基本上都是以循环的方式来设计对于存在多种工作模式的应用来讲则可能存在多个循环体相互之间通过状态标志来进行转换对于主程序体一般情况下主要才如下的模块
 
              ** 计算程序计算程序一般比较耗时因此坚决反对放在任何中断中处理特别是乘除法运算
 
               
 
              ** 实时性要求不高或没有实时性要求的处理程序
 
              **  允传输程序主要针源在外部LEDLCD Driver 的应用
 
              * 中断处理程序中断程序主要用于处理实时性要求较高的任务和事件如外部突发性信号的检测按键的检测和处理定时计数LED允扫描等一般情况下中断程序应尽可能保证代码的简洁和短小对于不需要实时去处理的功能可以在中断中设置触发的标志然后由主程序来执芯体的事务DD这一点非常重要特别是对于低功耗低速的MCU来讲必须保证所有中断的及时响应
 
              * 对于不同任务体的才ţ不同的MCU其处理的方法也有所不同例如对于低速低功耗的MCUFosc32768Hz应用考虑到此类项目均为手持式设备和采用普通的LCD允对按键的反应和允的反应要求实时性较高应此一般采用定时中断的方式来处理按键的动作和数据的允而对于高速的MCU如Fosc>1MHz的应用由于此时MCU有足够的时间来执行主程序循环体因此可以只在相应的中断中设置各种触发标志并将所有的任务放在主程序体中来执行
              * 在MCU的程序设计中还需要特别注意的一点就是要防止在中断和主程序体型时访问或设置同一个变量或数据的情况行的预防方法是将此类数据的处理才在一个模块中通过判断触发标志来决定是否执行该数据的相关操作而在其他的程序体中主要是中断对需要进行该数据的处理的地方只设置触发的标志DD这可以保证数据的执行是可预知和唯一的
 
 
    总之对于MCU开发来讲必须记住一点“条条大路通罗马”没有做不到的事关键是看方法是否正确再就是多做多动手和多想
 
发表评论告诉好友收藏此文关闭窗口

文章评论

2019ֻ߹ۿ