单片机应用系统设计项目化教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-17 21:55:44

点击下载

作者:乔之勇

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

单片机应用系统设计项目化教程

单片机应用系统设计项目化教程试读:

前言

。乔之勇,彭仁明 主编方飞,童强,郭辛 副主编底波 责任编辑陈健德 其他贡献者

chenjd@phei.com.cn前言

党的“十八大”明确提出“加快发展现代职业教育”,现代职业教育不仅要注重对学生技能的培养,还要注重对学生现代职业道德、职业素质的培养。特别是我国1999年新升本科院校转型为应用型、职业教育的同时,学科设置、人才培养目标要同市场“零距离”对接,真正把人才培养和社会需要结合起来。本书在吸取国内外当代职业教育教学改革的经验和成果的基础上,构建了基于工作过程的项目化系统教学体系,开发了项目驱动、任务引导的教学内容,并构建了以能力考核为出发点,理实结合、注重过程、覆盖全面的考核体系。

本书以高技能应用型人才专业能力培养为目标,结合作者多年的教学经验与课程改革成果进行编写。全书通过6个典型项目任务,着重介绍单片机基本原理及应用系统的设计方法与技巧。每个项目采用“由简单到复杂”、“模块化”、“自成体系”的设计思路,又细分为2~4个设计任务进行讲解。通过本课程的学习,读者完全可以自行完成简单智能化电子产品的开发与设计。本书项目包括:流水灯控制系统设计、简易数字时钟设计、数字电压表设计、低频信号发生器设计、数据存储及回放系统设计和窗帘智能控制系统设计等。其中,流水灯控制系统设计项目采用汇编与C51两种编程语言分别实现,重点讲述单片机内部资源的使用,包括I/O端口操作、定时器、中断系统和串口模块等内部资源;该项目汇编部分侧重讲解单片机的基本结构及工作原理,基于“理论够用、注重实践”的原则进行内容的编排;C51语言编程部分侧重讲解C51的基本语法及结构化编程思路。其他5个项目则利用C51语言编程实现,重点讲解常用外部模块的使用和综合应用系统设计思路,内容涉及数码管、键盘、蜂鸣器、液晶显示器、DA转换器、AD转换器、步进电机、无线遥控器和光敏电阻等器件的应用编程。为方便读者进行系统学习,附录介绍了与单片机相关的其他知识以供参考。

本书建议按照“理实一体化”模式进行教学,并严格执行“过程量化”考核体系,也可为学生提供“开放性第二课堂”实训教学环境,便于学生完成大量的课后实践练习。本课程教学建议为80~106学时,各院校可根据实际教学情况对内容进行适当调整。

本书由绵阳职业技术学院乔之勇、绵阳师范学院彭仁明任主编并进行统稿,参加编写的还有绵阳师范学院郭辛、张心心,内江师范学院方飞,乐山师范学院童强、常峰。在编写过程中,得到了绵阳职业技术学院胥勋涛博士、王荣海教授、李川副教授、何小河副教授、李兴伟同学、西南科技大学张笑微教授、西南自动化研究所陈秋良高级工程师、中国工程物理研究院第五研究所傅煊研究员、乐山师范学院何光谱教授以及教学合作企业技术人员的大力支持,在此,一并表示感谢!

由于编者水平有限,书中遗漏和错误之处在所难免,请读者多提宝贵意见。

为方便教学,本书配有免费的电子教学课件、习题参考答案,请有需要的教师登录华信教育资源网(http://www.hxedu.com.cn)免费注册后进行下载,如有问题请在网站留言或与电子工业出版社联系(E-mail:hxedu@phei.com.cn)。读者也可通过该精品课网站(http://dpjyy.myvtc.edu.cn)浏览和参考更多的教学资源。

编 者

项目1 流水灯控制系统设计

项目要求

利用单片机内部资源实现LED灯的亮灭、闪烁和流动显示控制。要求学习单片机I/O口、定时器、中断系统、串口等内部资源的原理及编程方式,具体要求如下。(1)设计单片机最小系统电路及其与LED灯的接口电路,编程实现对单片机I/O口的写操作,从而LED灯亮灭。(2)设计软件延时程序、定时器查询方式延时程序和定时器中断延时程序分别控制LED灯的闪烁及流动显示。(3)利用单片机串行通信模块实现LED灯的PC远程控制系统设计。(4)利用C51编程方式实现流水灯控制程序的设计。(5)利用Keil软件和Proteus软件进行系统的仿真设计。

项目拓展要求

(1)可拓展LED灯多种显示方式的功能设计。(2)可拓展LED动态显示广告牌的设计。(3)可拓展远程控制功能的设计。(4)可拓展音乐节拍灯的显示系统设计。

系统方案

1.单片机的选择

系统选择AT89S51单片机作为控制芯片,该单片机属MCS-51系列单片机,学习资料丰富、开发成本低、应用广泛,是简单智能电子产品设计的优选单片机之一,也是一款较好的入门级单片机。该单片机的学习可为后续高性能单片机的学习打下坚实的基础。

2.流水灯延时控制

流水灯需结合灯亮灭控制及延时控制才能实现,延时采用软件延时和硬件延时两种方式实现,皆利用单片机内部资源实现,这种设计便于学习单片机的工作原理及内部资源的使用。

3.远程控制系统设计

远程控制采用单片机内部串口模块实现与PC的通信。单片机系统通过串口获取远程PC控制信号来控制LED灯的亮灭,可以较好学习单片机串行通信设计原理及方法。

4.编程语言

系统分部利用汇编语言和C语言进行软件设计,使用汇编语言可加深对单片机指令系统、存储器等工作过程的学习;使用C语言可极大简化程序设计过程。

任务分解

该系统按由简单到复杂、由部分到整体的模块化设计思路,细分为点亮最简单的单片机系统、LED闪烁及流动显示控制、上位机控制LED灯和C51编程控制LED灯4个任务进行讲解。

任务1.1 点亮最简单的单片机系统

任务要求

设计一个最简单的单片机系统,编程控制发光二极管的亮灭。具体要求如下。(1)单片机最小系统的设计。(2)LED外围电路的设计。(3)汇编程序的编写。(4)软硬件的仿真调试。教学目标(1)掌握单片机最小系统的概念相关引脚及电路设计。(2)掌握单片机I/O口的控制方法。(3)掌握发光二极管发光原理及驱动电路设计。(4)掌握单片机特殊功能寄存器PC、ACC、P0~P3等概念。(5)理解单片机指令的执行过程。(6)掌握单片机软件开发流程。(7)掌握单片机汇编程序设计的基本方法。(8)掌握部分单片机汇编指令及伪指令的使用。(9)熟悉Keil集成开发环境的基本使用方法。(10)熟悉Proteus仿真软件的基本使用方法。1.1.1 系统硬件电路设计

1.认识单片机

1)什么是单片机

单片机(Single Chip Microcomputer)即单片微型数字计算机,其本质是计算机。对于计算机大家非常熟悉,包括硬件和软件两大部分。硬件包括主机和外设,主机又由主板、CPU、硬盘、内存、电源、外设接口(即I/O接口:网卡、显卡、声卡、键盘接口等)等组成。所有设备通过控制总线(CB)、地址总线(AB)和数据总线(DB)进行连接,即所谓的三总线结构。其拓扑结构如图1.1所示。图1.1 计算机拓扑结构(1)CPU(Central Processing Unit)

CPU即中央处理单元,主要由算术逻辑运算单元ALU(Arithmetic Logic Unit)和控制单元CU(Control Unit)组成。ALU主要用于完成加、减、乘、除及与、或、非等运算,控制器发控制命令。(2)ROM(Read-Only Memory)

ROM即程序存储器,用于存放程序,CPU只能对其进行读取操作,不能改写其内容。

编写的程序是通过专门的编程器写入ROM的。(3)RAM(Random Access Memory)

RAM即随机存取存储器,用于存放临时数据及变量等,CPU可以对其进行读写操作。(4)I/O接口(Input/OutputInterface)

I/O接口用于连接外部设备,如计算机的网卡可连接到网络通信设备、显卡用以连接显示器等。(5)三总线(CB、AB、DB)

CPU上可以连接很多设备并对其进行控制,这些设备通过控制总线(CB)、地址总线(AB)及数据总线(DB)和CPU进行连接。

控制总线用于传输控制信号;地址总线解决数据从哪来及到哪去的问题;数据总线则是数据的传输通道。

利用硅集成工艺将CPU、ROM、RAM、I/O接口以及一些常用部件(定时器、中断系统、串行通信口等)集成在一块芯片内便形成了单片机,如图1.2所示。图1.2 单片机的构成

相比于个人计算机,单片机十分便宜,几元钱人民币就能买到,特别适合在低成本智能电子产品的设计中使用。

2)单片机的应用

单片机的应用领域特别广泛,几乎涉及现代生活的各个领域。(1)家用电器

家用电器是单片机的又一个重要应用领域,前景十分广阔。如空调器、电冰箱、洗衣机、电饭煲、高档洗浴设备、高档玩具等。(2)智能仪器仪表

单片机用于各种仪器仪表,一方面提高了仪器仪表的使用功能和精度,使仪器仪表智能化,同时还简化了仪器仪表的硬件结构,从而可以方便地完成仪器仪表产品的升级换代。如各种智能电气测量仪表、智能传感器等。(3)机电一体化产品

机电一体化产品是集机械技术、微电子技术、自动化技术和计算机技术于一体,具有智能化特征的各种机电产品。单片机在机电一体化产品的开发中可以发挥巨大的作用。典型产品如机器人、数控机床、自动包装机、点钞机、医疗设备、打印机、传真机、复印机等。(4)实时工业控制

单片机还可以用于各种物理量的采集与控制。电流、电压、温度、液位、流量等物理参数的采集与控制均可以利用单片机方便地实现。在这类系统中,利用单片机作为系统控制器,可以根据被控对象的不同特征采用不同的智能算法,实现期望的控制指标,从而提高生产效率和产品质量。典型应用如电机转速控制、温度控制、自动生产线等。(5)分布式系统的前端模块

在较复杂的工业系统中,经常要采用分布式测控系统完成大量的分布参数的采集。在这类系统中,采用单片机作为分布式系统的前端采集模块,系统具有运行可靠、数据采集方便灵活、成本低廉等优点。

另外,在交通领域中,汽车、火车、飞机、航天器等均有单片机的广泛应用。如汽车自动驾驶系统、航天测控系统、黑匣子等。

3)单片机的选择

单片机的选择主要考虑运行速度、存储容量、I/O口数量、增强型功能、功耗、开发成本等几个方面。(1)运行速度

运行速度主要从单片机一次性处理数据的位数来衡量,由此将单片机分为8位、16位和32位。通常情况下,位数越高性能越好,运行速度越快。其中8位单片机是最基础的一类单片机,主要包括MCS-51系列单片机、AVR单片机等。(2)存储容量

单片机的存储容量主要是指RAM和ROM的大小,这包含两层意思:一是单片机内部是否有存储器,存储器大小是多少;二是存储器的可扩展性。如MCS-51系列单片机中的8031单片机就不带ROM,8051有4 KB的ROM,8052有8 KB的ROM,最多可扩展至64 KB,而STC公司的部分单片机自身就带有64 KB的ROM存储空间。(3)I/O数量

这主要取决所设计单片机应用系统的外设对I/O(输入/输出口)的需要,MCS-51系列单片机的标准I/O口配置为32个,但有些廉价单片机的I/O口配置仅有8个、16个等,可根据实际情况进行选择从而实现低成本设计。(4)增强型功能

仍以MCS-51系列单片机为例,其内部的标准配置包括定时器、RS232串口、中断系统等,但很多功能强大的单片机还配置了A/D转2换电路、PWM输出及捕获电路、IC及SPI串口模块等增强型电路,这为单片机应用系统的开发带来了极大的方便。(5)功耗

作为简易控制系统设计的核心器件,单片机在便携式智能设备中的应用对低功耗的要求就显得尤为重要,这也是很多单片机制造商追求的设计目标之一,其中 MPS430 系列单片机的功耗已达到0.1μA以下。(6)开发成本

开发成本主要取决于开发工具、开发周期、开发技术资料获取等几方面。很多单片机厂商在技术支持方面做得很好,提供了大量的开发案例,可以极大地缩短开发周期,但开发工具比较昂贵。对于初学者来说,选择技术比较成熟的MCS-51系列单片机无疑可以很好地节约学习成本和学习周期。

4)MCS-51系列单片机

自从美国Intel公司于1976年推出第一款MCS-48系列8位单片机以来,相继于1980年研制生产了现在还十分流行的MCS-51系列8位单片机,以及MCS-96系列16位单片机。之后,Intel公司将主业转入PC。Philips、Microchip、Atmel等微处理器生产公司在MCS-51系列单片机基础上,不断改进单片机的性能,从而生产出各具特色的系列单片机。

在教学中,我们选用市场占有率较高的Atmel公司生产的AT89S51单片机,该单片机属MCS-51系列单片机,学习资料丰富、使用方便、开发成本也十分低廉,其具有以下特征。(1)MCS-51内核,指令完全兼容。(2)4 KB可编程Flash存储器(寿命为1000次写/擦循环),具有在系统下载功能(ISP)。(3)全静态工作,时钟频率最高可达33 MHz。(4)三级程序存储器保密锁定。(5)128×8位内部RAM。(6)两个16位定时器/计数器。(7)5个中断源。(8)可编程串行通道。(9)低功耗的闲置和掉电模式。

在此,值得一提的是在系统下载功能(In System Program,ISP)。我们写好的程序要写入ROM中才能被CPU执行,没有ISP功能的单片机,只能采用专门的编程器将程序写进去,这对教学带来了极大的不方便,而具有ISP功能的单片机只需通过一个单片机的下载接口,再利用简单的下载工具就可以完成程序的写入了。为此,在教学中我们选用了这款具有ISP下载功能的AT89S51单片机。

2.最简单单片机系统硬件电路设计

1)单片机硬件系统的组成

在设计单片机应用系统之前,首先要搞清楚单片机硬件系统的组成。如图1.3所示,单片机系统硬件部分主要由单片机最小系统及外围电路两部分组成。(1)单片机最小系统

单片机最小系统就是能让单片机工作起来的最少电路组成,有了最小系统后,单片机就能运行起来,主要包括单片机、电源电路、时钟电路、复位电路等几部分。

其中,单片机是系统的核心器件,它是整个系统的大脑,实现了系统的智能化;当然,单片机作为电子器件,首先需要电源提供其所需电能才能工作;同样,作为典型的数字电路,单片机也必须在时钟信号的配合下,才能完成相应的工作,它相当于人的脉搏;而复位电路的作用就相当于PC的上电自检或故障重启,包括上电复位电路和按键复位电路两部分。图1.3 单片机系统构成

在此,我们在通常意义的小系统电路中增加了一个ISP(In System Programming)电路,将它作为学习型单片机硬件系统组成的不可缺少的部分。ISP即在系统编程,所谓编程,就是将写好的程序存放到单片机系统的ROM中的过程。传统的编程方法需要专门的编程器,必须将ROM从单片机系统板上取出并插到编程器上才能进行,非常麻烦且容易损坏器件。而ISP是一种无须将程序存储芯片(如Flash ROM)从单片机系统板上取出就能对其进行编程的过程,从而极大简化了程序的下载工作。(2)外围电路

外围电路主要是指单片机的输入、输出电路,输入电路相当于我们的眼睛、鼻子、耳朵等感知器官,而输出电路相当于我们的手和脚。单片机可以通过输入电路获得不同的控制信号去控制输出电路中输出设备的动作。比如,键盘就是一种典型的输入设备,而我们本系统所要控制的发光二极管就是其中的一种输出设备,当我们按不同的键时,设计好的单片机程序就可以根据按键情况控制某些发光二极管的亮灭。

输入电路主要包括键盘电路、模拟信号采集电路、触摸屏、摄像头、GPS接收器、红外线接收电路等;输出电路主要包括显示电路、发声电路、电机控制电路、继电器输出电路、红外线发射电路等。

总之,单片机、电源电路、时钟电路和复位电路是每一个单片机系统所必备的基本电路,有了这些基本电路,单片机就可以工作了,它们共同构成单片机最小系统。外围电路则根据不同的系统功能要求进行设计,如本系统要点亮发光二极管,则发光二极管电路就是我们的外围电路。

2)单片机系统硬件电路设计经验分享

单片机系统是一个比较复杂的智能系统,由硬件和软件两部分组成。作为硬件电路的设计相对简单,但要设计出性能优越的单片机系统还是比较困难。在此,我们就学习单片机系统设计过程中所体会的几点经验跟大家分享。(1)具备模电、数电等基础知识,知道如何查阅和设计一些基本电路。(2)具备从简单到复杂、模块化设计的思路。(3)认真学好单片机等所需芯片的原理及硬件特征。(4)掌握至少一种硬件仿真软件的使用。(5)熟练掌握各种仪器仪表及工具的使用。(6)最重要的一点就是一定要动手焊板子、调板子,在做的过程中体验学习的快乐。

3)AT89S51单片机的引脚

要搭建单片机系统硬件电路,首先应掌握的就是单片机的引脚及其功能。但由于AT89S51单片机的引脚有40个之多(如图1.4所示),并且有些引脚具有多种功能,对于初学者要一下子全部掌握,实属不易。为此,本书将根据项目的进程,由简单到复杂逐一给大家详解。在此,我们暂且将单片机引脚分为小系统相关引脚、通用I/O口和系统扩展辅助引脚3部分进行学习,以便于大家归类记忆。图1.4 AT89S51单片机引脚(1)小系统相关引脚

①电源引脚:VCC(40引脚)和GND(20引脚),外部电源将从这两个引脚送入单片机。将5V电源正极接到VCC,负极接到GND就构成了单片机系统的电源电路。

②时钟引脚:XTAL1(19引脚)和XTAL2(18引脚),晶体振荡器或外部时钟信号接到该引脚上就构成了单片机的时钟电路。

③复位引脚:RST(9引脚),当该引脚上保持一段时间的高电平后,单片机就会产生复位。

④下载线引脚:图中P1.5、P1.6及P1.7(即5、6、7引脚)为ISP串行编程接口。编程的本质就是数据的串行传送,即将编写好的程序传送到单片机ROM中。其中P1.5为MOSI引脚(Master Out Slave In),即输入引脚,程序由主机PC经该引脚传到单片机系统ROM中;P1.6为MISO引脚(Master In Slave Out),即输出引脚,数据经该引脚由单片机传到主机PC;P1.7为SCK引脚(Serial Clock),即串行时钟引脚,提供串行通信所必需的时钟信号。(2)通用I/O口(Input/Output)

通用I/O口即单片机与外部器件进行联系的通道。标准的MCS-51系列单片机共有32个I/O口,分为4组,每组8个引脚,即P0口(32~39引脚)、P1口(1~8引脚)、P2口(21~28引脚)、P3口(10~17引脚)。数据可以在这些引脚上双向传递,键盘等输入设备可以通过这些引脚传送信息到单片机,单片机也可以从这些引脚输出高/低电平去控制发光二极管等输出设备的工作。当然,这些引脚的输入/输出功能都要靠执行程序才能实现。

需要说明的是,P0~P3口除了作为通用I/O口使用外,大部分引脚都具有第二功能,其内部电路和连线方式也不尽相同,这在以后的设计中再进行详述。(3)系统扩展辅助引脚

所谓系统扩展,主要包括存储器和I/O口的扩展,即当单片机本身所提供的存储器或I/O口不够用时,就需要扩展。在扩展时,(29引脚)、(30引脚)、(31引脚)这3个引脚将辅助完成扩展功能,在此不细述,需要大家必须掌握的是引脚的含义。

由前面的内容可知,有些单片机内部有ROM,但有些没有或是内部ROM不够用,而需要扩展外部ROM用以存放程序,那么程序放在内部ROM还是外部扩展的ROM呢?引脚上的电平会告诉单片机,当将该引脚接高电平时,单片机将从内部取指令,而接为低电平时,则会从外部ROM取指令。由于本书所选取的AT89S51单片机内部ROM已经足够初学者使用,我们编写的程序都是放在内部ROM中的,因此,所有项目的引脚都接为高电平(+5V)。

以上就是所有40个引脚的基本功能介绍,其中,对所有的单片机系统,电源引脚、时钟引脚、复位引脚及引脚都会用到。在本系统中,还会用到P1口,它将作为发光二极管亮灭控制信号的输出端,当然也可以用其他3组I/O口中的任意一组来实现这个功能。

4)单片机最小系统电路设计

在前面的介绍中可知,要搭建单片机系统使其完成所需的功能,应由简单到复杂、分模块一步一步完成整体系统的设计。单片机最小系统电路就是应该搭建的基本电路,有了最小系统后,单片机就能运行起来,再根据系统功能要求设计外围功能电路即可完成整个单片机系统的硬件设计。因此,我们将单片机最小系统作为一个基础模块来讲解,并要求大家能熟练掌握它的设计方法及原理,在以后的学习中会发现,每个单片机系统都需要完成最小系统的设计。(1)电源电路设计

AT89S51单片机采用5 V供电,在此我们选用9 V电源供电方式,此方式非常适合便携式产品电源设计,在市面上购买 1 只 9 V/800 mA 电源适配器、1 个电源插座、1 片LM7805、2 只25 V/100μF电解电容、2 只 104 瓷片电容即可,其电路原理如图 1.5 所示,各部分电路原理简要介绍如下。

①9 V电源由市电220 V供电,输出9 V电源接入电源插座。

② LM7805为三端线性稳压芯片,可将9 V电压转换为5V电压并稳定输出,其输出功率可达1A,完全满足一般单片机系统的要求。图1.5 电源电路原理图

③电容C4、C5、C6、C7起滤波作用,通过滤波后将使单片机得到一个抗干扰能力强的稳定电源。

④图1.5中VCC即为5V电源的正极,接单片机的VCC(40引脚),7805的2引脚也就是电源的负极,接单片机的GND(20引脚)。(2)时钟电路原理及设计

在单片机XTAL1和XTAL2引脚上接一个石英晶体谐振器和两只30pF±10pF谐振电容即可搭建好内部时钟电路(如图1.6所示),它们配合单片机内部的反向放大器形成自激振荡电路,产生时钟序列。自激振荡电路的工作原理可不必深究,有兴趣的读者可参考模拟电子技术相关部分内容。图1.6 内部时钟方式电路(3)复位电路原理及设计

从前面的介绍可知,所谓复位就是让单片机回到初始状态,重新开始执行程序。而复位是通过给RST引脚一段时间的高电平来实现的,当复位后单片机正常工作时又要求RST引脚保持低电平。为达到这一时序要求,上电复位电路往往采用如图1.7所示的RC延时电路来实现,图中与C3并联的按键起手动复位的作用。当单片机初次上电时,由于电容电压不能突变,使得RST上保持为5V电压直到电容充满电后才下降至0 V,从而实现上电复位;单片机工作时按下SB键将使RST引脚上出现一段时间的高电平,直到按键松开后又将变为低电平从而实现了手动复位。(4)ISP电路设计

ISP下载电路原理如图1.8所示,采用IDC10插头,分别与地线、电源正、RST及P1.5~P1.7等引脚按如图所示连接即可。图1.7 复位电路图1.8 ISP下载电路

有了单片机、电源、时钟、复位电路及ISP下载电路后,单片机就可以运行起来了,其电路原理图如图1.9所示。其中接5V是告诉单片机应从内部ROM取指令开始执行程序。图1.9 单片机最小系统原理图

5)发光二极管外围电路设计(1)发光二极管怎样才会亮

发光二极管是单片机系统中经常使用到的一种显示器件,只要加在发光二极管的正向电压超出其导通压降时开始工作,发光二极管的导通压降一般为1.7~1.9 V,此外,流过的电流要满足该二极管的工作要求。满足电流和电压的要求,发光二极管就可以发光了。(2)单片机如何与发光二极管连接

单片机可以通过 4 组 I/O 引脚(P0~P3 口)与外部设备进行联系,发光二极管的负极经一只470Ω电阻接到P1口的某个引脚(如P1.0),正极连到+5 V电源上(如图1.10所示)。当P1.0口输出低电平(0 V)时,发光二极管就能达到发光电压和电流要求而发光,但当P1.0输出高电平(5 V)时,由于二极管上压差为0 V,不满足发光电压要求,因而不亮。图1.10 发光二极管连接电路(3)为什么要接一只电阻

发光二极管发光时正向电流一般为25 mA,而P1.0口最大电流为10 mA,25 mA电流流经 P1.0 口时就会造成其损坏,因此要接电阻以满足端口对最大电流的限制。在 5 V驱动时,多采用 470 Ω限流电阻,将电流限制在 5~10 mA,若采用 1 kΩ的电阻,电流为3~5 mA。当然,为了更亮一点,可以减小电阻值,但二极管的电流不要超出单片机的 I/O口最大电流。这个问题也是在以后硬件电路设计中应十分注意的驱动问题。

若必须用P1口驱动使发光二极管电流为25 mA,则需要加电流放大电路(驱动电路),最简单的驱动电路就是射极输出器(非门)。1.1.2 系统软件设计

1.认识单片机软件

单片机全称为单片微型计算机,有了硬件电路还需要软件的配合才能完成特定的任务。软件由一条条指令组成,软件工程师根据工作任务借助计算机等工具把软件(称为源程序)编写好后,再将源程序翻译成二进制机器码并写入单片机系统的程序存储器(ROM)中。系统工作时,单片机CPU在时钟信号及程序地址寄存器的配合下,逐条按顺序将指令从ROM中取出进行译码并执行。任务软件的编写及执行过程:任务分析—软件编写—软件编译—软件装入—软件运行。

1)编程语言

单片机的编程语言有:机器语言、汇编语言和高级语言(主要是C语言)。(1)机器语言

用二进制代码编写的程序称为机器语言程序。在使用机器语言编程时,不同的指令用不同的二进制代码表示,这种二进制代码构成的指令就是机器指令。在使用机器语言编写程序时,由于需要记住大量的二进制代码指令及这些代码代表的功能,所以很不方便且容易出错,现在很少有人用机器语言对单片机进行编程了。例如:(2)汇编语言

由于机器语言编程很不方便,人们便用一些有意义并且容易记忆的符号来表示不同的二进制代码指令,这些符号称为助记符。用助记符表示的指令称为汇编语言指令,用助记符编写出来的程序称为汇编语言程序。例如:

这两行程序的功能是一样的,都是将二进制数据00000010送到累加器A中。可以看出,机器语言程序要比汇编语言难写,并且容易出错。(3)高级语言

高级语言是依据数学语言设计的,在使用高级语言编程时不用过多考虑单片机的内部结构。与汇编语言相比,高级语言易学易懂,而且通用性很强。单片机常用C语言作为高级编程语言。实现上述功能的C语言指令如下:

上面3种编程语言中,高级语言编程较为方便且容易实现复杂算法。实现相同的功能,汇编语言代码少、运行效率高,另外对于初学单片机的读者,学习汇编语言编程有利于更好地理解单片机的结构与工作原理,也能为以后学习高级语言编程打下扎实的基础。而机器语言已不再使用,但单片机只认识机器语言,所以不管是汇编语言程序或是高级语言程序都必须用编译软件翻译成机器语言才能被单片机CPU执行。

2)软件的编译

编译即编写翻译,在明确任务的基础上利用汇编或C语言编写的程序称为源程序;利用编译软件将源程序翻译成机器语言的过程称为汇编;汇编后再进行仿真运行,如有问题则进行调试,再汇编、再调试,直到达到任务要求为止。

源程序的编写通常可以利用记事本、Word等文本编辑器进行,但文件后缀名必须保存为.Asm(汇编语言)或.C(C语言);汇编需要用专门的编译软件,如A51及C51等;仿真调试也需要专门的软件才能完成。通常我们将源程序编写、汇编、仿真调试等软件做在一起称为单片机集成开发环境,常用的有Keil、Wave、Medwin等集成开发软件。

编译过程:编写源程序—汇编—调试—汇编—调试—……—调试通过。

3)软件下载

汇编的结果是将汇编语言或高级语言源程序翻译成为二进制机器代码,接下来则要利用下载软件将二进制代码下载到单片机系统的ROM中,这个过程称为编程。单片机编程实际上就是将二进制代码当做普通数据,利用串行或并行通信接口和专门的通信软件将数据送到单片机内部或外部ROM并固化。

4)软件执行过程

程序放入ROM后,由CPU逐条取出并执行,执行过程包括取指令、译码及执行3个步骤。要掌握好单片机执行程序的过程,首先应了解单片机的内部结构。(1)单片机的内部结构

单片机内部采用总线结构,所有模块通过地址总线、数据总线及控制总线组成的系统总线与CPU进行连接,称为三总线结构,如图1.11所示。图1.11 51系列单片机的基本结构图

整个单片机由CPU、片内ROM、片内RAM、功能模块(串口、中断、定时、I/O、ISP等)组成。图中虚线框内为单片机的CPU,由算术逻辑单元ALU、累加器A(8位)、B寄存器(8位)、程序状态字PSW(8位)、程序计数器PC(16位)、指令寄存器IR(8位)、指令译码器ID、控制器等部件组成。

①算术逻辑单元ALU(Arithmetic Logic Unit)。

算术逻辑单元是CPU中的核心器件,可完成加、减、乘、除等算术运算和与、或、异或、求补、循环等逻辑运算。

②累加器A(Accumulator)和B寄存器。

累加器A和B寄存器用来临时存放运算的中间结果,辅助ALU完成相应的运算。由于ALU内部没有寄存器,参加运算的操作数,必须放在累加器A中。累加器A也用于存放运算结果。例如,下面指令完成累加器A和寄存器B的内容相加,结果再送回累加器A。

注意,B寄存器的主要作用是辅助CPU完成乘法和除法运算。

③程序计数器PC(Program Counter)。

PC用来存放将要执行的指令地址(ROM的某个单元地址),CPU将从该地址进行取指,其特点如下。

● 复位后PC指向ROM的0000H单元,即复位后CPU从ROM的0000H单元开始执行指令。

●16位,可对64 KB ROM直接寻址。

● 自动加1功能,从ROM中低地址到高地址顺序取指。

● 不能读写。

④指令寄存器IR(Instruction Register)。

IR用来存放即将执行的指令代码,CPU从PC所指向的ROM单元中取出指令并放入IR中。

⑤指令译码器ID(Instruction decoder)。

ID用于对送入IR中的指令进行译码,所谓译码就是把指令转变成执行此指令所需要的电信号。

⑥程序状态字PSW(Program Status Word)。

PSW用于记录运算过程中的状态,如是否溢出、进位等。

⑦控制器。

指令译码后,将在时钟信号的配合下,由控制器对CPU各部件产生控制信号完成指令任务。

⑧功能模块。

功能模块主要包括I/O、定时、中断、串口、ISP等,由CPU通过程序对它们进行控制,在以后的章节中我们再详细介绍。(2)软件执行过程

软件编译完成并利用ISP将二进制代码下载到ROM后,单片机系统就可以工作了。系统上电后PC指向ROM的0000H单元,此时CPU便从ROM的0000H单元取出第一条指令并放入IR中(同时,PC自动加1指向ROM的0001H单元,为取下一条指令做好准备),IR中的指令经ID译码后再由定时与控制电路发出相应的控制信号,从而完成指令的功能。第一条指令执行完毕后,CPU再从PC所指向的ROM的0001H单元取第二条指令译码并执行,直到程序结束。

2.认识单片机汇编语言

学习汇编语言编程有利于更好地理解单片机的结构与原理,也能为以后学习高级语言编程打下扎实的基础,而且对于某些实时控制系统,汇编语言的优势也是不可取代的。因此,基础篇部分我们采用汇编语言进行软件设计。

1)汇编语言指令

汇编语言指令分为可执行指令和伪指令两大类。可执行指令是指单片机CPU能执行的指令,该类指令将被编译软件翻译成对应的机器代码并由单片机CPU执行;伪指令则是由Keil等编译软件执行,用于辅助编译软件进行源程序的编译,而不被单片机CPU执行。(1)可执行指令

MCS-51系列单片机可执行指令共有111条,按字节长度分为单字节指令(49条)、双字节指令(46条)及三字节指令(16条);按执行时间分为单机器周期指令(64条)、双机器周期指令(45条)及四机器周期指令(2条);按用途又可分为数据传送类指令、算术操作类指令、逻辑操作类指令、程序转移类指令及位操作类指令。在编写汇编语言源程序时有统一的格式:

①标号。

源程序写好后编译成二进制机器代码存入ROM的某个地址单元,标号就是程序设计人员给这个地址单元起的名字,便于程序的转移。由英文字母或数字组成,但必须以英文字母开头,再用“:”隔开,标号可以省略。

②指令助记符。

指令助记符告诉CPU要完成的任务,如助记符MOV就要求CPU进行一次数据的传送。每个操作码都有对应的机器代码,不可省略。

③操作数。

操作数指明操作码所操作的对象,如助记符MOV只告诉CPU要进行数据传送,到底数据从哪里来又传到哪里去呢,完整的写法是:MOV A,R0,这就告诉CPU应从通用寄存器R0取数据并送到累加器A中。所有指令分为无操作数指令、单操作数指令、双操作数指令和三操作数指令4种,MOV指令属双操作数指令,注意操作数与操作码之间用空格隔开,而多个操作数之间必须用“,”隔开。

④注释。

注释是对该指令在程序中的作用进行解释说明,便于程序的阅读。书写时用“;”隔开,可以省略。

注意,不管是注释用的“;”,标号后的“:”还是操作数间的“,”都必须是英文半角状态下输入,否则编译软件不能识别。(2)伪指令

伪指令是告诉A51编译软件如何编译源程序的指令。不被编译成机器代码,即不被单片机CPU执行的指令,故称为伪指令。在对源程序进行编译时,伪指令会告诉编译软件定义了哪些数据、机器代码放在ROM的什么地方以及程序编译是否结束等信息。例如:

伪指令ORG 0030H告诉A51编译软件:汇编指令MOV A,R0的机器代码应从ROM的30H单元开始存放。而伪指令END则告诉A51编译软件:源程序编译到此结束,即汇编结束伪指令。对于常用伪指令的使用,本书将在项目软件中逐一给读者介绍。(3)寻址方式

指令中的操作数可以为RAM、SFR、ROM的某个地址单元或以“#”开头写在指令中的数据,告诉CPU操作数所在地址单元的方式称为寻址方式。例如:

上面两个指令实际上是一回事,都是将累加器A的内容送入通用寄存器R0中,但采用的寻址方式却有差异。一个给出寄存器的名字R0,称为寄存器寻址;另一个则直接给出R0所在的内部RAM地址00H,称为直接寻址。

寻址方式包括立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址及位寻址等7种方式,本书将在项目程序中逐一给大家介绍。

2)汇编语言程序设计经验与技巧(1)明确软件设计步骤。

①分析问题:明确所求解问题的意义及任务,并将实际问题转化为单片机可以解决的问题,如该系统是控制发光二极管的亮灭,对于单片机来说就是控制单片机I/O引脚电平的高低。

②确定算法:根据实际问题和指令系统的特点确定计算公式和计算方法。

③绘制流程图:根据算法制定的运算步骤和顺序,把运算过程画成流程图,这样使程序清晰、结构合理、便于调试。

④分配资源:根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内、外存储区进行合理分配并确定每个区域的首地址,以便于编程使用。

⑤编写程序:用汇编语言来实现上面已确定的算法。

⑥仿真调试:利用单片机各种开发工具对所编写的程序进行测试,检验程序是否完成制定功能,测试过程尽可能详细,要保证每条支路都能得到检验。

⑦程序固化:即将调试好的程序生成机器代码后固化到程序存储器中。(2)熟练掌握单片机存储器结构及功能特点。(3)熟练掌握各汇编指令的格式及功能。(4)掌握各种器件的编程特点。(5)熟练掌握单片机的寻址方式。(6)具备由简单到复杂及模块化设计思路。(7)掌握子程序的设计方法。

3.MCS-51系列单片机的存储器结构

汇编语言是和硬件联系非常紧密的编程语言,由指令读写相关存储单元的值来实现单片机系统的功能,因此对于存储器的学习就显得尤为重要。AT89S51单片机内部存储器包括程序存储器(ROM)、数据存储器(RAM)和特殊功能寄存器(SFR)3部分。SFR用于配合单片机各内部电路完成某种特定任务(如向特殊功能寄存器P1写数据,实际上就是控制P1引脚的电平)。

1)ROM(Read-Only Memory)

ROM即只读存储器(所谓只读是相对于单片机CPU的),也称程序存储器,掉电不丢失,用于存放程序和表格。AT89S51片内具有4 KB的Flash ROM(可扩展至64 KB),具有在系统下载(ISP)功能。需要说明的是,我们从0000H开始给ROM的每个字节按顺序编了一个号,即地址,4 KBROM的地址范围是0000H~0FFFH。

2)RAM(Random Access Memory)

RAM即随机存储器,也称数据存储器,单片机CPU可对其随机读写,掉电数据丢失,主要用于临时存放CPU运算的中间结果。AT89S51具有128B的RAM(可扩展至64 KB),地址范围为00H~7FH,分为通用寄存器区、位寻址区和用户区。(1)通用寄存器区(00H~1FH)

该区共32个字节,分为4组,每组8个字节,每组的8个字节都以R0~R7命名,如表1.1所示。也就是说有4个字节都用同样的名字“R0”,到底是哪个地址则取决于当前用的是哪组通用寄存器,组别用状态字寄存器PSW的RS0和RS1来区分,CPU复位后定位在第0组。表1.1 通用寄存器(2)位寻址区(20H~2FH)

该区共16个字节,一个字节8位,共128位,位地址编号为00H~7FH,如表1.2所示,由专门的位操作指令进行读写。前面的R0~R7只能进行字节操作(8位),而所谓位寻址是指CPU可以对这128位中的任意一位进行读写(当然也可以进行字节操作)。(3)用户区(30H~7FH)

该区共80个字节,没有特殊的意义,只是供用户使用的一般数据存储区,只能进行字节操作。表1.2 RAM中的位寻址区地址表

3)特殊功能寄存器SFR(Special Function Register)

特殊功能寄存器的地址位于80H~0FFH,AT89S51共26个SFR,占据了128个字节中的26个,各寄存器名称及复位初始值如表1.3所示,其中地址能被8整除的SFR可以进行位寻址。这些寄存器很重要,单片机功能的实现实际上就是通过读写这些特殊功能寄存器来实现的。但SFR有很多,在此我们只需知道ACC叫累加器,P0~P3寄存器的数字对应着P0~P3引脚电平的高低等概念即可,即读写特殊功能寄存器P0~P3,实际就是对相应引脚P0~P3进行操作。表1.3 AT89S51特殊功能寄存器及复位值续表

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载