引入
任意款MCU的基本原理和功能都是大同小异,不同的是外围的功能模块的配置和数量以及指令系统等。故:对任一款MCU都应由如下几个方面来掌握:
一、了解MCU特点
ROM空间、RAM空间、IO数量、定时器数量和定时方式、所提供的外围功能模块、中断源、工作电压及功耗等。
二、结合项目明确需求
根据以上特点,对比实际项目开发的功能进行对比。
1.明确本项目所需资源与无需资源。
所需资源:应认真阅读和理解手册。
无需资源:忽略或浏览即可。
2.若所选MCU中有不满足项目要求的功能,应认真理解MCU资料尝试间接实现。
如:需与PC机COM通讯,所选MCU却不支持UART口,则可考虑用外部中断方式实现。
三、开始编程
若初次使用该款MCU的设计者,可能会遇到对MCU功能描述不明确地方,则可:
一、编写特别验证程序理解资料所需功能。(时间长、新手)
二、按自己理解编写,后期调试时再修改和完善。(时间短、老手)
PS: 指令系统无需花时间理解,随着编程进行会不断熟练。
MCU基本功能
Timer(定时器):
种类繁多,大体分为两大类:
一、定时器(Timer):该类是时间间隔固定的定时器,即其定时的时间由系统设定,用户程序不可控,系统只提供几种固定的时间间隔给用户程序选择,如:32Hz、16Hz、8Hz等。
此类在4位MCU中较常见,可实现时钟、计时等相关功能。
二、可编程定时器(Programmable Timer):该类是时间间隔可由用户程序控制的定时器,控制方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等(不一定全包含)。
此类应用灵活,最常见应用为:实现PWM输出。
由于时钟源可*选择,故一般均与Event Counter(事件计数器)合在一起。
IO口:
与外部沟通渠道,根据配置情况,可分以下几类:
纯输入或纯输出口:
此类由硬件设计决定,只能是输入或输出,不可用软件进行实时设定。
直接读写IO口:
当执行读IO指令则为输入口;
当执行写IO指令则为输出口;
程序编程设定输入输出方向:
由程序根据实际需要设定,应用灵活,可实现总线级应用。如:I2C总线,各种LCD、LED Driver的控制总线等。
PS: IO使用需牢记:
输入口:须明确电平信号,确定不可浮空(可增加上拉或下拉电阻实现)。
输出口: 输出状态电平须考虑外部连接情况,应保证Standby或静态状态下不存在拉电流或灌电流。
外部中断:
一般用于信号的实时触发,数据采样和状态检测。
中断方式:上升沿、下降沿、电平触发等。
外部中断一般为输入口实现,若为输出口则自动关闭。
应用:
①外部触发信号的检测(两种情况):
情况一:基于实时性的要求:如可控硅的控制,突发性信号检测等。
情况二:省电的需求。
②信号频率测量:保证信号不被遗漏。
③数据解码:遥控领域,为降低设计成本,采用软件方法来对各种编码数据进行解码。
④按键检测和系统唤醒:对进入Sleep状态的MCU,一般需外部中断进行唤醒,最基本形式:通过按键动作产生电平的变化。
通讯接口:
一、UART接口:
最基本的 异步 传输接口。
信号线:Rx和Tx两条。
数据格式:Start Bit + Data Bit(7/8 - bits)+Parity Bit(Even,Odd or None)+Stop Bit(1~2Bit).
波特率(Baud Rate):以为数据所占时间。
二、SPI接口:
同步时钟传输接口。
信号线:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)、Ready信号(可无)。
可在Master/Slava方式下工作。(提供时钟为Master)
三、I2C接口:
由Philips开发的数据传输。
信号线:SDAT(串行数据输入输出)、SCLK(串行时钟)
优势:总线挂多个设备,通过地址识别和访问。可用软件通过IO口实现。传输的数据速率由SCLK控制。
看门狗定时器(Watchdog):
①只允许程序对其复位而不能对其关闭。
如:PIC系列,在程序烧入时设定。
②通过特定方式决定是否打开。
如:KS57系列,只要程序访问Watchdog寄存器,就自动开启切不能被关闭。
watchdog复位时间可程序来设定,为MCU因为意外故障而导致死机提供一种自我恢复的能力。
MCU程序编写
基本框架:初始化、主程序循环体、中断处理。
初始化
①屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中断发生。
②清除系统RAM区域和显示Memory:防止意外错误。
③IO口的初始化:根据项目要求,设定先关IO口输入输出方式。
输入口:设置上拉或下拉电阻。
输出口 :必须设定初始电平输出,以防不必要错误。
④中断设置:需中断源则要设置触发条件,无需则给与关闭。
⑤其他功能模块初始化:按对应要求设置。
⑥参数初始化:对程序中变量和数据初始化设置。对于EEPROM保存项目未知数可在初始化时将相关数据拷贝到RAM中,以提高程序对数据访问速度,降低系统功耗(EEPROM都会增加电源功耗)。
主程序循环体:
①计算程序:一般较为耗时,故坚决反对放在中断中处理。
②实时性要求不高或没实时性要求的处理程序。
③显示传输程序:真要针对外部LED、LCD Driver的应用。
中断处理程序:
主要用于处理实时性要求较高的任务和时间,如;外部突发性信号检测,按键检测和处理,定时计数,LED显示扫描等。
程序应保证代码简洁和短小。