沧州交通学院电子与电气工程学院 沈 敏 张 静 张汝峰 郭宝军
单片机原理与应用是高校工业自动化、电子信息/通信工程、机电一体化、机械制造及自动化等工科类专业的必修课。单片机是设计计算机控制系统常用的控制器,掌握单片机系统设计是大学生参加学科竞赛、进入社会参加工作的重要技能。
从教学角度出发,受学时限制以及市场单片机主流产品等因素,多选择CPU字长是8位的MCS-51系列单片机,但是在实际应用中有16位、32位字长的单片机,有非51系列的单片机。学习单片机原理及应用最重要不是记住几条指令,会设置寄存器等理论知识,而是抓住本质,掌握精髓,抽象出学习单片机的系统思维,在学会MC-51单片机的同时,可以掌握任何一款单片机的使用才是学习单片机原理与应用的根本所在。
本文以单片机原理与应用课程内容为基础,对该课程所蕴含的系统思维做了研究和探索,有助于学生迅速掌握单片机系统设计。
单片机是一个计算机系统,由硬件和软件系统构成。单片机系统设计首先要分析系统功能需求,根据系统功能需求进行硬件系统设计,在硬件设计基础上完成软件设计。而单片机硬件系统设计的前提是熟悉并掌握单片机的硬件资源及其使用,MCS-51单片机集成的硬件资源和功能如表1所示。
表1 MCS-51单片机硬件资源和功能
不同型号的单片机,其硬件资源不尽相同,但都是由CPU、存储器和I/O接口构成的,在使用单片机设计系统的时候首先要选择合适的单片机。
单片机CPU字长影响单片机的数据处理速度,例如MCS-51单片机的CPU字长是8位的,使用汇编语言进行程序设计的时候要充分考虑8位CPU的数据处理能力,8位的CPU处理字节数据可以一次处理完,如果处理字数据或双字数据必须两次或四次才能处理完;如果使用C语言编程,表面上C语言在做数据处理时,不同数据类型只是在定义变量的时候有区别,在数据处理的时候区别不大,但是不同字长的CPU会直接单片机的存储空间、I/O资源的管理能力,更重要的是影响系统的响应时间。因此在系统对响应时间要求比较高的场合,CPU字长越长越好。
存储器是由数据存储器和程序存储器构成,数据存储器用来存放数据,程序存储器用来存放程序代码和数据表格。例如MCS-51单片机的存储器有128B的RAM空间,4KB的ROM空间。以汇编语言编程为例,51单片机的大多数指令是单字节或者是双字节,个别指令是三字节,4KB的ROM空间可以存放2000条指令,如果系统功能比较复杂,程序代码超过2000条,在选择单片机时,ROM存储空间是否够用就显得很重要了;如果程序设计时中断、子程序应用比较多,就要考虑堆栈空间初始化的问题,堆栈空间只能安排在片内RAM中,所以选择单片机的时候也不能忽略RAM空间是否够用的问题。
单片机集成的I/O接口资源主要是定时/计数器、中断系统和通信接口,有些单片机还集成了A/D和D/A转换器等。单片机I/O接口是连接I/O设备的桥梁,不同单片机型号,所集成的I/O资源的种类和数量不尽相同。
时间是计算机控制系统中非常重要的参数,很多系统比如常见的家用电器控制:全自动洗衣机、电风扇、面包机等等,主要的控制参数都是时间参数,在单片机做串口通信时,定时器还可以给串行通信提供必要的波特率;中断系统是计算机系统可以实时管理多个I/O设备的重要技术,CPU访问I/O设备常见的两种方法是查询和中断,当CPU要访问的I/O设备比较多时,中断技术中的优先级管理和中断嵌套使得CPU能够高效的处理数据,还能实时与I/O设备通信;串行通信接口是单片机与其他计算机系统通信的接口,并行接口和串行接口是单片机与I/O设备的两种接口方式,串行通信接口是串行接口的一种,除此以外还有SPI、I2C等接口。单片机要构成具有一定功能的系统,通过并行接口、串行接口连接必要的外设是必不可少的,单片机要实现更复杂的系统功能,多个单片机通过串行通信的方式协同工作则是重要的途径,通信也是解决信号远距离传输抗干扰的最好措施。
因此在选择单片机的时候要考虑单片机集成的定时/计数器、中断系统、通信接口是否满足系统需求。
单片机是一个计算机系统,再加上一定的I/O设备就可以构成一个计算机控制系统,如图1所示。
图1 单片机构成的计算机控制系统组成框图
I/O设备是构成计算机控制系统必要组成部分,常见的输入设备有按键和传感器,输出设备有显示器、电动机、电磁阀等,选择I/O设备时要根据计算机控制系统的控制需求。
按键可以把用户的指令发送给单片机,传感器能够把现场的非电量信号转换成电信号,转换的电信号是模拟量电信号,还需要相应的信号处理电路,把电信号转换成标准的电信号交给A/D转换器。如果系统需要A/D转换功能,在选择单片机的时候要考虑选择已经集成A/D转换器的单片机,集成A/D转换器的转换位数和转换时间以及模拟量信号输入通道是否够用等因素。
单片机常用的显示器有LED发光二极管,显示系统状态;LED数码管、点阵显示器、LCD显示器等显示数字、字母、甚至简单的图像等,方便用户了解系统的运行情况。选择显示器一方面要考虑显示信息量的大小、复杂程度,还要考虑系统的应用场合、功耗大小这些因素。
电动机可以选择步进电机、伺服电机、直流电机、交流电机等实现对被控对象的控制,对电动机的控制有启动/制动控制、正反转控制、速度控制等,具体控制方案是由被控对象决定的。考虑到单片机驱动能力比较有限,选择合适的驱动装置才能实现对输出设备的控制。
单片机系统功能的实现是通过硬件、软件协同工作完成的。单片机系统软件设计是基于硬件设计,是单片机系统的“灵魂”,软件设计的思维方式中同样蕴含着重要的系统思维。
软件设计同硬件设计一样,都是从系统控制需求角度出发。根据系统控制需求,分析软件输入数据和输出数据的数据类型(位、字节、字或是双字)、数据性质(有符号数还是无符号数),根据输入/输出数据的数量、数据类型对存储空间进行合理规划,才能为后续确定合适的算法打下基础。
单片机程序设计可以选择使用C51语言,也可以选择使用汇编语言,甚至可以C51与汇编语言嵌套编程。所不同的是C51语言在处理字节、字数据的各种运算,尤其是一些复杂数学运算的时候比较简单,而汇编语言在处理位数据的时候比C51语言更方便,两种编程语言各有千秋。汇编语言生成的目标代码比较短小,相对执行效率高,可以提高系统的响应时间,而C51语言的程序可读性好,可移植性好,根据系统功能需求选择合适的编程语言。
无论是选择哪种编程语言,程序在结构上都是由主程序、子程序和中断服务子程序构成的。当系统需要不间断工作的时候,主程序通常需要循环运行,也就是常说的“死循环”,子程序是通过调用才执行,中断服务子程序则需要硬件触发才执行,这两种程序在功能上是独立封装的,入口参数和出口参数包含着子程序与调用程序间的接口信息。在设计软件结构时,原则上子程序,中断服务子程序越短越好,同时子程序的接口信息要明确。
只有合理设计软件结构基础上才能考虑算法问题,算法并不是针对整个项目而言,而是针对每一个子程序,只有软件结构是合理的,根据输入/输出数据的数量、数据类型对存储空间进行合理规划,才能找到合适的算法进行软件设计。关于算法,汇编语言由于数据处理能力受限于CPU字长,字节数据,字数据在同样的数据处理需求下,其算法可能是不一样的。
单片机系统设计是一个综合性的系统工程,调试是保证系统能正常运行的重要环节。调试有硬件调试、软件调试和系统调试。Proteus仿真软件提供了很多虚拟仪器仪表对硬件系统测试,是系统调试的有效手段,但仿真是理想的运行环境,实际系统运行环境比较复杂,系统调试中还需要擅长利用万用表、示波器的物理仪器仪表对实际系统进行测试,查找问题。
单片机原理及应用是一门应用技术,单片机型号非常丰富,每种型号都有自己特征,但又都具备相同的理论基础。在理论课时远多于实验课时的情况下,理论教学目的不单是让学生掌握某个具体的知识点,而是把基于单片机原理的系统思维方式传递给学生,真正做到“一通百通”、“以不变应万变”。