对于指令系统来说,虽然看起来形式不同,但实际上只是符号不同而已 。它们的含义、要完成的功能和寻址方式基本相似 。
要了解一个MCU,首先需要知道它的ROM空室、RAM空室、IO口数量、定时器数量和定时方式、提供的外围电路、中断源、工作电压和功耗等 。
了解了这些MCU的特性之后,接下来就是将所选MCU的功能与实际项目开发所需要的功能进行对比,明确目前需要哪些资源,哪些资源在本项目中没有用到 。
对于项目中需要用到但所选MCU没有提供的功能,需要仔细了解MCU的相关信息,以便用间接的方法实现 。例如,如果开发的项目需要与PC的COM口通信,而选用的MCU没有提供UART口,可以通过外部中断来实现 。
对于项目开发所需的资源,需要仔细理解和阅读其手册,不必要的功能模块可以忽略或浏览 。对于单片机学习来说,应用是关键,也是主要目的 。
定义好MCU的相关功能后,就可以开始编程了 。
对于初学者或者第一次使用这款单片机的设计师来说,可能会有很多对单片机功能的模糊描述 。对于这样的问题,有两种方法可以解决 。一种是编写专门的验证程序,理解数据中描述的功能;另一个可以暂时忽略,单片机程序设计按其目前的理解写,留待调试时修改完善 。前一种方法适合时间比较宽松的项目和初学者,后一种方法适合有一定单片机开发经验的人或者项目进度比较紧迫的时候 。
千万不要花特别的时间去理解说明书 。指令系统只是一个逻辑描述的符号 。编程时只能根据自己的逻辑和程序的逻辑要求去查相关指令 。而且随着编程的进展,你会对指令系统越来越熟练,甚至不自觉的背下来 。
单片机编程
单片机的编程和PC机的编程有很大的不同 。虽然基于C的单片机开发工具越来越流行,但是对于一个高效的程序代码和喜欢用汇编的设计人员来说,汇编语言仍然是最简洁有效的编程语言 。
对于单片机的编程,其基本框架可以说是大体一致的,一般分为三个部分:初始化部分(这是单片机编程与PC最大的区别)、主程序循环体和中断处理程序,解释如下:
初始化:对于所有单片机程序的设计来说,外化是最基本也是最重要的一步,一般包括以下内容:
屏蔽所有中断,初始化堆栈指针:初始化部分一般不希望有任何中断 。
清空系统的RAM区域和显示内存:虽然有时候可能不完全需要,但是从可靠性和一致性的角度,特别是为了防止意外错误,建议养成良好的编程习惯 。
IO口初始化:根据项目的应用需求,设置相关IO口的输入输出模式,设置输入口的上拉或下拉电阻;对于输出端口,需要设置其原始电平输出,以防止不必要的错误 。
中断设置:打开项目需要的所有中断源,设置中断的触发条件,不使用的不必要中断必须关闭 。
其他功能模块的初始化:所有需要使用的MCU外围功能模块都必须根据项目的应用需求进行设置,如UART通信、波特率、数据长度、校验模式、停止位长度等 。,而对于编程器定时器,必须设置其时钟源、分频数和重载数据 。
参数外化:MCU的硬件和资源外化后,下一步就是初始化程序中用到的一些变量和数据 。这部分的初始化需要根据具体项目和程序的整体安排来设计 。对于一些使用EEPROM保存预设项目数的应用,建议在初始化时将相关数据复制到MCU的RAM中,以提高程序对数据的访问速度,降低系统功耗(原则上访问外部EEPROM会增加电源功耗) 。
主程序循环:大多数单片机都是长时间连续运行的,所以它的主程序基本上是以循环的方式设计的 。对于有多种工作模式的应用,可能会有多个循环体,通过状态标志进行转换 。对于主程序体,通常主要安排以下模块:
推荐阅读
- 奥迪tt有敞篷的吗
- 儿童室内游戏项目有哪些
- apple论坛有哪些 apple论坛
- 更新中
- 谁能告诉我 坚果手机质量有问题客服不鸟我我该怎...
- 坚果手机突然充不上电也开不了机的进来有办法了,我的独家黑科技绝对解决
- 已经把坚果卖掉了~
- 锤子是不是和浏览器有合作
- 你们最爱的大屏手机来了 2020巨屏手机有哪些
- 搭载的天玑1200跑分有点狠 红米k40天玑1200跑分