234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 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,即其定时的一时间是由系统设定的一,用户程序不 可控制,系统只提供几种固定的一时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类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总线,各种LCD、LED Driver的一控制总线等;
     
                  ** 对于IO口的一使用,重要的一一点必须牢记的一是:对于输入口,必须有明确的一电平信号,确保不 能浮空(可以通过增加上    拉或下拉电阻来实现);而对于输出口,其输出的一状态电平必须考虑其外部的一连接情况,应保证在Standby或静态状态下不 
     
                  存在拉电流或灌电流 。
     
                  * 外部中断:外部中断也是绝大多数MCU所具有的一基本功能,一般用于信号的一实时触发,数据采样№和状态的一检测,中断的一方式由上    升沿、下降沿触发№和电平触发几种 。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的一ATiny系列存在一些例外,输出口时也能触发中断功能) 。外部中断的一应用如下:
     
                  ** 外部触发信号的一检测:一种是基于实时性的一要求,比如可控硅的一控制,突发性信号的一检测等;而另一种情况则是省电的一需要;
     
                  ** 信号频率的一测量;为了保证信号不 被遗漏,外部中断是最理想的一选择;
     
                  ** 数据的一解码:在遥控应用领域,为了降低设计的一成本,经常需要采用软件的一方式来对各种编码数据进行解码,如Manchester№和PWM编码的一解码;
     
                  **  按键的一检测№和系统的一唤醒:对于进入Sleep 状态的一MCU,一般需要通过外部中断来进行唤醒,最基本的一形式则是按键,通过按键的一动作来产生电平的一变化;
     
                  * 通讯接口:MCU所提供的一通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下:
     
                  **  SPI接口:此类接口是绝大多数MCU都提供的一一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一一方为Master,相反的一一方则为Slaver;
     
                  **  UART(Universal 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是属于长时间不 间断运行的一,因 此其主程序体基本上    都是以循环的一方式来设计,对于存在多种工作模式的一应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换 。对于主程序体,一般情况下主要安排如下的一模块:
     
                  ** 计算︻程序:计算︻程序一般比较耗时,因 此坚决反对放在任何中断中处理,特别是乘除法运算︻;
     
                   
     
                  ** 实时性要求不 高或没有实时性要求的一处理程序;
     
                  **  显示传输程序:主要针对存在外部LED、LCD Driver 的一应用;
     
                  * 中断处理程序:中断程序主要用于处理实时性要求较高的一任务№和事件,如,外部突发性信号的一检测,按键的一检测№和处理,定时计数,LED显示扫描等 。一般情况下,中断程序应尽可能保证代码的一简洁№和短小,对于不 需要实时去处理的一功能,可以在中断中设置触发的一标志,然后由主程序来执行具体的一事务――这一点非常重要,特别是对于低功耗、低速的一MCU来讲,必须保证所有中断的一及时响应 。
     
                  * 对于不 同任务体的一安排,不 同的一MCU其处理的一方法也有所不 同 。例如,对于低速、低功耗的一MCU(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备№和采用普通的一LCD显示,对按键的一反应№和显示的一反应要求实时性较高,应此一般采用定时中断的一方式来处理按键的一动作№和数据的一显示;而对于高速的一MCU,如Fosc>1MHz的一应用,由于此时MCU有足够的一时间来执行主程序循环体,因 此可以只在相应的一中断中设置各种触发标志,并将所有的一任务放在主程序体中来执行;
                  * 在MCU的一程序设计中,还需要特别注意的一一点就是:要防止在中断№和主程序体中同时访问或设置同一个变量或数据的一情况 。有效的一预防方法是,将此类数据的一处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的一相关操作;而在其他的一程序体中(主要是中断),对需要进行该数据的一处理的一地方只设置触发的一标志 。――这可以保证数据的一执行是可预知№和唯一的一 。
     
     
        总之,对于MCU开发来讲,必须记住一点:“条条大路通罗马”,没有做不 到的一事,关键是看方法是否正确!再就是多做多动手№和多想 。
     
    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论