教学目的:
1、初步了解单片机的发展历史 , 基础知识以及应用范围;
2、通过演示单片机产品的实物来激发学生的学习兴趣;
3、了解单片机的发展方向和主流技术。
重点、难点:
1、单片机的概念和特点;
2、单片机的主要发展方向和主流技术;
3、几种常见的单片机产品。
教学方式、步骤:
一、课程介绍、学习的目标、学习本课程的方法
1、课程介绍
单片机是当今信息时代的产物,自20世纪70年代问世以来, 以实时控制能力强,成本低,体积小,受到人们的重视和关注,应用很广,发展很快。尤其 在电子产品、工业控制等领域的应用广泛, 已对人类社会产生了巨大的影响。单片机技术开发和应用水平已成为衡量一个国家工业化发展水平的标志之一。
由于单片机的广泛使用使得社会对掌握单片机技术的人才的需求在不断增加,目前全国普通工科大学均已经将单片机课列为必修的专业(基础)课程。
2、学习的目标
通过对孝感周边相关电子企业(亚光电子公司、○六六集团、四四○四厂等)的毕业生跟踪调查和人才需求调研,相关工作岗位都对单片机应用能力都提出了一定的要求。且不同的岗位对单片机应用能力要求的高低不同。要求较高的岗位如电路联调岗和电子线路设计助理工程师岗,对单片机的应用能力要求如下:
掌握常见单片机芯片及外围芯片的功能和引脚分布;
理解掌握单片机系统结构、存储器结构、指令系统,中断、定时器、串行口、接口技术等重要概念和基本知识;
具备一定的电子线路基本知识,能看懂典型单片机外围硬件的原理图,并具备相应的硬件线路调试的基本技能;
能看懂程序流程图,掌握程序调试的基本技能;
具有基本的单片机编程能力;
掌握单片机软硬件联调的基本技能;
掌握单片机产品开发的基本流程和工艺。
课程标准:
作为一门核心的专业基础课程,本课程的专业目标定位为:通过基于实际工作过程(项目制作)的项目导向、任务驱动的理论实践一体化教学模式,教、做、学三者合一,使学生在做中学,学中做,在理解掌握单片机系统结构、存储器结构、指令系统,中断、定时器、串行口、接口技术和单片机初步应用知识的基础上,掌握智能电子应用相关岗位所需要的单片机应用系统的初步的应用分析和软硬件设计能力,掌握基本的编程和程序调试能力,掌握单片机典型外围硬件线路的分析与初步设计能力、硬件调试能力,掌握单片机系统的安装和软硬件联调、故障诊断维护技能,掌握单片机产品开发的基本流程和工艺。在以上述单片机应用能力培养为主线的教学过程中,还要注重学生职业能力的培养,使学生毕业后能够直接适应单片机相关岗位的工作。
3、学习本课程的方法
(1)要学习别人成熟的设计思想,教学上采用:“授人以渔” 的方法。
(2)单片机中很多内容可采用:记忆-理解-练习使用-再理解记忆-最后熟练使用的过程。
(3)当前单片机相关产品系列和型号很多,摆在初学者面前的问题是学习什么机型、怎样学习效果更好?建议读者选取资料多,应用较广的一种系列芯片的单片机进行研究。掌握相应的技术后再学习别的单片机则会事半功倍。
二、内容:
1、单片机的基础知识 , 分类和典型应用
1.1 定义:随着大规模集成电路技术和计算机技术的飞速发展,把计算机的运算器和控制器(即CPU),存储器(程序存储器和数据存储器)和多种接口集成在一块芯片上,称为微处理器(Microprocessor)。也叫微控制器,在我国习惯上又叫单片机。
1.2 单片机的主要应用领域
(1) 智能化产品
单片机与传统的机械产品相结合,使传统的机械产品结构简单化,控制智能化,构成新一代的机、电一代化产品。目前,广泛用于工业自动控制,如数控机床、可编程顺序控制、电机控制、工业机器人,离散与连续过程自动控制等;家用电器,如微波炉、电视机、录像机、音响设备、游戏机等;办公设备,如传真机、复印机、数码相机等;电讯技术,如调制解调器、声像处理、数字滤波、智能线路运行控制;在电传、打印机设计中由于采用了单片机,取代了近千个机械部件;用单片机控制空调机,使制冷量无级调节的优点得到了充分的发挥,并增加了多种报警与控制功能;用单片机实现了通信系统中的临时监控、自适应控制、频率合成、信道搜索等,构成了自动拨号无线电话网、自动呼叫应答设备及程控调度电话分机等等。
(2) 智能化仪表
单片机引入到已有的测量、控制仪表后,能促进仪表向数字化、智能化、多功能化、综合化、柔性化发展,并使监测、处理、控制等功能一体化,使仪表重量大大减轻,便于携带和使用。同时成本低,提高了性能价格比,长期以来测量仪器中的误差修正、线性化处理等难题也可迎刃而解。单片机智能仪表的这些特点不仅使传统的仪器、仪表发生根本的变革,也给传统的仪器、仪表行业技术改革带来了曙光。
(3) 智能化测控系统
测控系统特点是工作环境恶劣,各种干扰繁杂,而且往往要求控制实时,要求检测与控制系统工作稳定、可靠、抗干扰能力强。单片机最适合应用于工业控制领域,可以构成各种工业检测控制系统。例如,温室人工气候控制、电镀生产线自动控制系统等。在导航控制方面,如在导弹控制、鱼雷制导、智能武器装置、航天导航系统等领域中也发挥着不可替代的作用。
(4) 智能化接口
通用计算机外部设备上已实现了单片机的键盘管理、打印机、绘图仪、、扫描仪、磁盘驱动器、 UPS 等,并实现了图形终端和智能终端。
2、单片机的发展方向和几种较为典型的单片机产品
2.1 单片机的发展趋势
• CPU 的改进
• 存储器的发展
• 片内 I/O 的改进
• 外围电路内装化
器件集成度的不断提高,把众多的外围功能部件集成在片内--系统的单片化。
• 低功耗化
CMOS 化 CHMOS 工艺。总之,向高性能、高速、低压、低功耗、低价格、外围电路内装化方向发展。
2.2 典型的单片机产品
Intel 公司在单片机的早期开发中,一直处于领先地位。因此我们以 Intel 公司的产品为例,介绍其较流行的三种系列产品的功能。
• MCS-48 系列单片机
• MCS-51 系列单片机
如ATMEL公司ATC51 ATC52等
• MCS-96 系列单片机
另外,还有Philips公司各系列单片机、PIC(MICROCHIP公司)系列单片机、ST公司系列单片机、 Motorola单片机等。
3、单片机应用和开发系统的知识
三、演示:
1、常见的单片机的不同形式的实物外形
2、自主开发的亚光电子单片机产品
脱水机 ZT-12P2 | 生物组织摊烤片机 YT-7C 型 |
使用教具:
多媒体、单片机产品实物。
第2讲 51单片机的结构与引脚
教学目的:
1、熟悉51单片机的发展历史;
2、了解51单片机的结构;
3、学习51单片机的引脚及其功能;
4、了解常见的 51 系列单片机和增强型单片机。
重点、难点:
1、 51单片机的内部构造;
2、 51单片机的引脚及其功能;
3、 增强型单片机的功能和特点。
教学方式和步骤:
一、复习:单片机的概念和组成
二、授课内容:
1、 51 单片机的发展历史和特点
1.1 单片机的发展历史
单片机的初级阶段:
1976年Intel公司推出了8位的MCS-48系列的单片机,以其体积小、重量轻、控制功能齐全和低价格的特点,得到了广泛的应用,为单片机的发展奠定了坚实的基础。
单片机的发展阶段:
80年代初 ,Intel公司推出了8位的MCS-51系列的单片机
高性能单片机发展阶段:
随着控制领域对单片机性能要求的增加,出现了16位的单片机,而且芯片内部也增加了其他的性能。如Intel的 MCS-96 系列单片机,在单片机内部集成了A/D转换器、PWM输出。
1.2 单片机的特点 :
单片机具有集成度高、体积小、功耗低、系列齐全、功能扩展容易、使用灵活方便、抗干扰能力强、性能可靠、价格低廉等特点。用行话讲叫“性/价”比高 .
2、51 单片机的结构
2.1 MCS-51 的核心电路
单片机 8051 内部结构框图
一个8位CPU;
一个片内振荡器和时钟电路;
4K字节片内部程序存储器ROM ;
128字节片内部数据存储器RAM ;
可寻址K外部程序存储器;
可寻址K外部数据存储器;
21个特殊功能寄存器 (专用寄存) ;
32条可编程的 I/O 线(4个8 位并行I/O端口);
两个16位定时器/计数器;
一个可编程全双工串行口;
具有5个中断源,两个优先级嵌套中断结构。
单片机各功能部件由内部总线联系在一起。简化结构如下图所示
MCS-51 单片机结构框图
2.2 处理单元CPU
CPU 是单片机的核心部件,如上图所示,各方框表示功能部件,可以看出本单片机是 8 位数据宽度的处理器,能处理 8 位二进制数据或代码, CPU 负责控制、指挥和调度整个单元系统协调的工作,完成各种运算,实现对单片机各功能部件的指挥和控制任务,它是由运算器和控制器等部件组成的。各功能部件实际上是 CPU 的有机组成部分,各功能部件通过运行程序相联系
(1)运算器
运算器的功能是进行算术运算和逻辑运算,它还包含一个布尔处理器,用来处理位的操作。运算器模块包括算术和逻辑运算部件 ALU、布尔处理器,累加器 ACC、 B 寄存器、暂存器 TMP1 和 TMP2、程序状态字寄存器 PSW 和十进制数调整电路等。
1、累加器 ACC 是一个最常用的专用寄存器。大部分单操作数据指令的操作数取自累加器。很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除算术运算指令的运算结果都存放在累加器 A 或 AB 寄存器对中。指令系统中用 A 作为累加器的助记符。
2、B 寄存器
3、程序状态字 PSW
程序状态字记录程序状态信息,反映程序运算结果的特征,它是一个 8 位寄存器。其中 PSW 的 1 位未用,格式如下:(按 D7 ~ D0 顺序排列)
Cy | Ac | F0 | RS 1 | RS 0 | OV | - | P |
② AC (PSW.6) — 辅助进位标志。在进行加法或减法操作中,当低 4 位数向高 4 位数有进位或借位时, AC 将被硬件置位,否则就被清零。 AC 被用于十进制调整。
③ FO (PSW.5) — 用户定义标志。可由用户让其记录程序状态,用作标记,即用软件使其置位或复位。
④ RS1、RS0(PSW.4,PSW.3) — 工作寄存器组选择控制位。可以用软件置位或清零,以确定当前工作寄存器组。
⑤ OV(PSW.2 —溢出标志位。在对有符号数作加减运算时,用 C6 表示 D6 位向 D7 位的进位或借位,用C7表示D7位向更高位的进位或借位,则 OV 标志可由下式求得: OV=C6 ⊕ C7。 OV=1 表示加减运算的结果超出了目的寄存器 A 所能表示的带符号数的范围(-128 ~ +127)。
无符号数乘法指令 MUL 的执行结果也会影响溢出标志。若置于累加器 A 和寄存器 B 的两个数的乘积超过 255 时(8位数), OV=1 ,否则 OV=0 。此积的高 8 位放在 B 内,低 8 位放在 A 内。因此, OV=0 时,只要从 A 中取得乘积即可,否则还要从 B 中取得乘积的高 8 位。
除法指令 DIV 也会影响溢出标志,当除数为 0 时, OV=1 ,否则 OV=0 。
⑥ (PSW.0) — 奇偶标志。每个指令周期都由硬件来置位或清零,以表示累加器 A 中有 1 的位数的奇偶数。若 1 的位数为奇数,则 P 置位,否则清零。该标志位对串行通信中的数据传输有重要意义。和数学中的数据本身的奇偶性有区别。当 A=10101000B 时,因数中是三个 1 使 P 置位。在数据传输时,当把一批数的 P 位和原 8 位放在一起构成 9 位数,这批 9 位数中 1 的个数应全为偶数。接收端如收到的数没有偶数个 1 则认为出错。
(2)控制器
控制器部件是由指令寄存器、程序计数器 PC ,定时与控制电路等组成的。
① 指令寄存器和译码
指令寄存器中存放指令代码。
② 程序计数器 PC
程序计数器 PC 用来存放即将要执行的指令地址,共 16 位,可对 K 程序存储器直接寻址。
③ 定时与控制电路
定时与控制电路是产生 CPU 操作时序的,它是单片机的心脏。控制各种操作的时间。
8051 芯片内部有一个反向放大器所构成的振荡电路, XTAL1 和 XTAL2 分别为振荡电路的输入端和输出端。放大器可以产生自激振荡,此时时钟由内部方式产生。当 XTAL1 接地, XTAL2 接外部振荡器时,时钟由外部方式产生。
2.3 8051 内部 ROM 存储器
ROM: Read Only Memory
一般用于存放程序和表格等不常改变的数据
8051单片机的 ROM 是掩摸 ROM
容 量:4096byte(212)
地址范围:0000H ~ 1FFFH
2.4 8051 内部的 RAM 存储器
RAM : Random Access Memory
一般用于存放程序执行过程中产生的大量的临时数据,相当于 PC 的内存。
8051 单片机的内部 RAM :
容 量: 128 字节
地址范围: 00H~7FH
3、 51单片机的引脚及功能
4、当前51单片机的发展方向和常见的51系列单片机
5、增强型51单片机
三 课后小结
使用教具: 多媒体,51单片机产品实物。
第3讲 8051单片机的存储器
教学目的:
1、初布了解8051单片机内部存储器的结构;
2、掌握8051单片机内部 ROM 的结构和资源分配情况;
3、掌握8051单片机内部 RAM 的结构和资源分配情况;
4、内部低128B、SFP 区的特点及使用方法。
教学重点、难点:
1、8051单片机内部存储器的结构特点、资源分配几访问方式;
2、8051单片机内部 ROM 程序入口区的特点和使用方法;
3、8051单片机内部 RAM 的结构;
4、内部低 128B、SFP 区的特点及访问方式。
教学方式与程序:
复习:
授课内容:
1、单片机内部的存储器结构
存储器是计算机的重要硬件之一,单片机存储器结构有两种类型:一种是程序存储器和数据存储器统一编址,属于普林斯顿结构,另一种是程序存储器和数据存储器分开编址的哈佛结构。 MCS-51 采用的是哈佛结构。
1.1 存储器具有的特点
程序存储器和数据存储器截然分开,各有自己的寻址系统,控制信号和特定的功能。程序存储器只存放程序和始终要保留的常数,数据存储器通常用来存放程序运行中所需要的大量数据。
单片机中与存储器有关的名称有:程序存储器和数据存储器、内部存储器和外部存储器、字节地址和位地址。存储器有一定的容量,常把一个 8 位二进制数作基本单位,叫作字节。存储器有很多字节单元,也用二进制数来标识,叫地址。这些存储器空间的地址多数从零开始编址。 8 位地址 00H ~ FFH ,十六位地址 0000H ~ FFFFH 。由于每一位十六进制数可直接换成四位二进制数(如 0H—0000B、 9H—1001B、 FH—1111B ,其中 H 代表十六进制数标识符, B 代表二进制数标识符),以后我们也把两位十六进制数说成是 8 位二进制数
工作寄存器以 RAM 形式组成, I/O 接口也采用存储器方式工作。工作寄存器、 I/O 口锁存器和数据存储器 RAM 在单片机中统一编址。
具有一个功能很强的布尔处理器,可寻址位空间有 256 位。
1.2 MCS-51 具有的存储器编址空间
MCS-51 单片机寄储器结构如图所示。有六个编址空间,有四个物理存储器空间:
① 即由 PC 作地址指针的片内 4K (0000H-0FFFH)程序存储器。
② 片外 4K+60K(0000H-FFFFH) 程序存储器。
③ 由数据指针作地址的片外 K 数据存储器。
④ 片内 8 位地址的 128 字节 RAM ( 00H-7FH )和特殊功能寄存器 (80H-FFH) 。
程序存储器,片内 4K 程序存储器空间,其地址为 0000H ~ 0FFFH ,外部 EPROM 也从 0000H 开始编址。在地址 0000H ~ 0FFFH 区间,地址有重叠,由 EA 引脚信号来控制内、外程序存储器的选择。
EA =0 时,不管 PC 值的大小, CPU 总是访问外部程序存储器。对于 8031 芯片,其内部没有程序存储器,必然外接 EPROM ,所以 EA 必须接地,即 EA =0 时。外部程序存储器从 0000H 开始编址,寻址范围 K 。当 EA =1 时,先执行内部 4K 程序,满 4K 后接着执行外部程序。
程序存储器以 16 位的程序计数器 PC 作为地址指针可寻址 K 字节空间范围, PSEN 作为程序存储器的读选通信号。
程序存储器也存放程序所需要的常数。单片机以指令形式的不同来区分是访问程序存储器,还是访问数据存储器,凡是从程序存储器的常数表中取数据时,都要用查表指令 MOVC 形式。
2、8051单片机内部ROM结构、地址分布、资源利用
51系列单片机程序存储器的管理:
每个ROM单元(byte)对应一个唯一的16bit地址编码(Address)
CPU要到某个ROM单元去取指令,是通过把地址写入一个16bit的特殊功能寄存器——程序计数器 PC(Program Counter)来实现,因此,51系列单片机的地址的编码范围(通常称为寻址范围):
0000 0000 0000 0000B ~ 1111 1111 1111 1111B(二进制)
0 0 0 0 H ~ F F F F H (十六进制)
0 ~ 65535 (十进制)
通常习惯说51系列单片机的ROM寻址范围是K
PC的值是CPU根据用户程序的运行流程自动装载的,它的值代表单片机下一条要执行的指令在ROM中的存放位置,用户不能直接对PC进行操作
3、8051单片机的内部RAM的结构
51 系列单片机数据存储器的管理:
51 系列单片机对数据存储器 RAM 的管理是通过 16bit 的特殊功能寄存器 DPTR(Data Pointer) 来实现,每个 RAM 单元 (byte) 也对应一个特定的地址编码 (Address) ,因此, 51 系列单片机的地址的编码范围 ( 通常称为寻址范围 ) :
0000 0000 0000 0000B ~ 1111 1111 1111 1111B (二进制)
0 0 0 0 H ~ F F F F H (十六进制)
0 ~ 65535 (十进制)
因此 51 系列单片机的 RAM 寻址范围也是 K
51 系列单片机 ROM 和 RAM 的地址编码范围都是 0000H ~ FFFFH ,但由于在寻址时硬件电路上有区别,所以不会混淆。
51 系列单片机中,单片机外接的接口芯片如 A/D、 D/A 等都有互不相同的地址,这些地址都是占用单片机外部 RAM 的地址编号。
4、内部低128B、SFP区的地址分布、访问方式
MCS-51 内部有 128 个字节的数据存储器 RAM ,它们可以作为数据缓冲器、堆栈、工作寄存器和软件标志等使用。 CPU 对内部 RAM 有丰富的操作指令。在编程时经常用到它们,内部 RAM 地址为 00H ~ 7FH ,不同的地址区域内,规定的功能不完全相同。128 字节地址空间的 RAM 中不同的地址区域功能分配为:工作寄存器区(00H-1FH)、位地址区(20H-2FH)、堆栈和缓冲区(30H-7FH )、特殊功能寄存器 SFR 区(80H ~ FFH),下面分别说明。
① 工作寄存器区
单片机的内部工作寄存器以 RAM 形式组成,即工作寄存器包含在内部数据存储器中。地址为 00H ~ 1FH 单元,内部 RAM 的低 32 字节分成 4 个工作寄存器区,每一个区有 8 个工作寄存器,编号为 R0 ~ R7 。
② 位寻址空间
CPU 不仅对内部 RAMR 20H ~ 2FH 这 16 个单元有字节寻址功能,而且具有位寻址功能(可以单独读写某一位)。给这 128 位赋以位地址为 00H ~ 7FH , CPU 能直接寻址这些位。
位地址空间
字节地址 | 寄存器名 | 位 地 址 | |||||||
2FH | 7FH | 7EH | 7DH | 7CH | 7BH | 7AH | 79H | 78H | |
2EH | 77H | 76H | 75H | 74H | 73H | 72H | 71H | 70H | |
2DH | 6FH | 6EH | 6DH | 6CH | 6BH | 6AH | 69H | 68H | |
2CH | 67H | 66H | 65H | H | 63H | 62H | 61H | 60H | |
2BH | 5FH | 5EH | 5DH | 5CH | 5BH | 5AH | 59H | 58H | |
2AH | 57H | 56H | 55H | 54H | 53H | 52H | 51H | 50H | |
29H | 4FH | 4EH | 4DH | 4CH | 4BH | 4AH | 49H | 48H | |
28H | 47H | 46H | 45H | 44H | 43H | 42H | 41H | 40H | |
27H | 3FH | 3EH | 3DH | 3CH | 3BH | 3AH | 39H | 38H | |
26H | 37H | 36H | 35H | 34H | 33H | 32H | 31H | 30H | |
25H | 2FH | 2EH | 2DH | 2CH | 2BH | 2AH | 29H | 28H | |
24H | 27H | 26H | 25H | 24H | 23H | 22H | 21H | 20H | |
23H | 1FH | 1EH | 1DH | 1CH | 1BH | 1AH | 19H | 18H | |
22H | 17H | 16H | 15H | 14H | 13H | 12H | 11H | 10H | |
21H | 0FH | 0EH | 0DH | 0CH | 0BH | 0AH | 09H | 08H | |
20H | 07H | 06H | 05H | 04H | 03H | 02H | 01H | 00H |
③ 堆栈和数据缓冲区
原则上MCS-51单片机的堆栈可以设在内部RAM的任意区域内,但是一般设在30H~7FH的范围内。栈顶的位置由堆栈指针 SP 指出。
④ 特殊功能寄存器 SFR (专用寄存器)区
MCS-51 单片机内除程序计数器(PC)和 4 个工作寄存器区外,所有其它寄存器如 I/O 口锁存器、定时器、数据地址指针,各种控制寄存器都是以特殊功能寄存器(SFR)的形式出现的。 8051 有 21 个特殊功能寄存器,它们离散地分布在 80H~FFH 的地址空间内,并允许像访问内部RAM一样方便地访问特殊功能寄存器。
使用教具:
多媒体
第4讲 8051 单片机的时钟、时序和复位
教学目的:
1、熟悉8051单片机内部时钟电路的结构;
2、掌握单片机时序、复位的概念、复位的特点及实现方法。
重点、难点:
1、8051单片机时钟电路的构成、时序;
2、单片机复位的概念及特点。
教学方式与程式:
复习:
授课内容:
1、8051单片机时钟电路的构成
CPU 的功能,总的来说,就是以不同的方式,执行各种指令。不同的指令其功能各异。有的指令涉及到 CPU 各寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部器件(如外部存储器)有关系。 CPU 是通过复杂的时序电路完成不同的指令功能的。
事实上,控制器按照指令的功能发出一系列在时间上有一定次序的电脉冲信号,控制和启动一部分逻辑电路,完成某种操作。在什么时刻发出什么控制信号,去启动何种部件动作,这就是 CPU 的时序。 CPU 芯片设计一旦完成,“时序”就固定了,因而时序问题是 CPU 的核心问题之一。时钟可看成是主频,时序可看成是完成一个操作各部分电路产生的脉冲对照图。
1.1 振荡器和时钟电路
MCS-51 片内有一个高增益反相放大器,其输入端(XTAL1)和输出端(XTAL2)用于外接石英晶体和微调电容,构成振荡器,如图所示。电容 C2 和 C3 对频率有微调作用,电容容量的选择范围一般为 30pF士10pF 。振荡频率的选择范围为 1.2~12MHz 。
在使用外部时钟时, 8051XTAL2 用来输入外时钟信号,而 XTAL1 则接地。
1.2 单片机内部的时间单位
MCS-51 完成一个基本操作叫机器周期,其一个机器周期包含 12 个时钟周期,分为 6 个状态: S1 ~ S6. 每个状态又分为两拍:P1 和 P2 。因此,一个机器周期中的 12 个时钟周期表示为 SIP1, SIP2, …S6P2 。每个时钟单片机完成一拍操作,当用 6MHZ 晶体时一个机器周期为 2μS
振荡周期 = 振荡频率(石英晶体频率 fosc )的倒数
机器周期 —— 机器周期是单片机应用中衡量时间长短的最主要的单位
1 机器周期 = 12 × 1/ fosc
指令周期 —— 执行一条指令所需要的时间,单位:机器周期
2、单片机内部指令执行的时序
单片机执行各种操作时, CPU 都是严格按照规定的时间顺序完成相关的工作,这种时间上的先后顺序成为时序。
单周期指令的操作时序
双周期指令的操作时序
3、单片机复位
为了保证 CPU 在需要时从已知的起点和状态开始工作,安排了复位功能。 当复位引脚RST/VPD出现两个机器周期高电平时,单片机复位 。
参考复位电路如下:
复位后, P0 ~ P3 输出高电平; SP 寄存器为 07H ;其它寄存器全部清 0 ;不影响 RAM 状态。 复位后片内各寄存器的状态如下( X 为不确定):
PC 0000H ACC 00H
B 00H PSW 00H
SP 07H DPTR 0000H
P0 ~ P3 FFH IP XXX00000B
IE 0XX00000B TMOD 00H
TCON 00H THO 00H
TLO 00H TH1 00H
TL1 00H SCON 00H
SBUF 不确定
PCON 0XXXXXXXB(HMOS)0XXX0000B(CHMOS)
复位不影响内部 RAM 中的数据。复位后, PC=0000 指向程序存储器 0000H 地址单元,使 CPU 从首地址 0000H 单元开始重新执行程序。所以单片机系统在运行出错或进入死循环时,可按复位健重新启动。
RST/Vpp 端的外部复位电路有两种工作方式:上电自动复位和按健手动复位。如图所示。上电复位是利用 RC 充电来实现的。利用 RC 微分电路产生正脉冲。参数选取应保证复位高电平持续时间大于两个机器周期(图中参数适合 6MHz 晶振)。开关 S1 为手动复位,按下 S1 时合上开关, RST 得到高电平,松手后 CPU 完成复位,并从 0000H 开始执行程序。
使用教具:
多媒体、单片机产品实物。
第5讲 MCS-51 单片机指令系统及指令格式
教学目的:
1、51单片机汇编语言的指令系统
2、51单片机汇编语言的指令格式
3、指令表的查阅方法和指令功能的描述
4、几种不同的寻址方法
重点、难点:
1、51单片机汇编语言的指令系统
2、指令表的查阅方法和指令功能的描述
教学方式和步骤:
一 复习:单片机的概念和组成
二 授课内容:
1、51单片机汇编语言的指令系统
单片机汇编语言指令分类
按节数分为:单字节指令49条、双字节指令46条、三字节指令16条
按指令执行的周期分为:一周期指令有57条、二周期指令52条、四周期指令2条(乘法和除法)
按功能可分为五大类:数据传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令、位操作类指令
2、51单片机汇编语言的指令格式
一个简单的循环灯实例
下图中的8个发光二极管代表 8 个彩灯,让我们看看是如何实现的
STAT: MOV A , #01H ; 高电平对应的发光二极管亮
LOOP: MOV P1, A ; 从 P1 口输出到发光二极管
MOV R1, #10
DEL1: MOV R2 , #200
DEL2: MOV R3, #126
DEL3: DJNZ R3, DEL3
DJNZ R2, DEL2
DJNZ R1, DEL1
RL A
LJMP LOOP ; 左移一位 , 下一个发光二极管亮
END
汇编语言指令格式
[ 标号 ] : 操作码 [ 目的操作数 ] [ 源操作数 ] ; [ 注释 ]
↓ ↓ ↓ ↓ ↓
LOOP : MOVX A , @DPTR ; 将外部 RAM 单元内容送到 A
标号: 又称为指令地址符号。对标号有如下规定:
一般由 1 ~ 8 个 ASCII 字符组成,以字母开头,其余字符可以是字母、数字和其他特定字符。
不能使用助记符、伪指令或者寄存器的符号名称做标号。
与操作码之间用冒号分开,带方括号表示为可选项。
一个标号只能在程序中出现一次,不能重复出现。
操作码 是由助记符表示的字符串,它规定了指令要完成的具体操作。
操作数 指令操作的对象 . 操作数分为目的操作数(上例累加器 A) 和源操作数(上例中的 @DPTR). 目的操作数和源操作数的书写顺序不能颠倒 .
注 释 对指令功能的说明,以便于阅读,符号“;”后面的内容为注释。
汇编指令及其注释中常用的符号
Rn ------选中当前的工作寄存器区中的寄存器R0~R7之一
@ Ri------选中当前的工作寄存器组中的寄存器R0或R1,间接寻址前缀符号direct------直接地址,一个内部RAM单元地址或SFR地址.
#data ------------8位或16位常数,也称立即数. #为立即数前缀标志符号
addr11------------11位目的地址
addr16------------16位目的地址
rel ---------------8位地址偏移量,值在-128~+127范围内
bit---------------位地址.SFR的位地址(可用符号或名称表示)
/-----------------位操作前缀,表示该位内容求反
(×)------------表示以×为地址单元中内容
((×))--------表示以×为地址单元中内容为地址的单元中的
3、指令表的查阅方法和指令功能的描述
4、几种不同的寻址方法
4.1 立即寻址
例: MOV A , #10H ;将立即数 10H 送给 A 累加器,即 (A) ← 10H
注意:立即数的前面必有 “#” 标志。
4.2 直接寻址
例: MOV A , 36H ;将内部 RAM 中 36H 单元内的数据
送到累加器 A 中,即 A ← (36H)
在上面这条指令中,带下划线的操作数是所在存储单元的地址,这种寻址方式称为直接寻址。直接寻址方式中操作数所在存储器的空间有板有 3 种 :
(1) 内部数据存储器的 128 个字节单元 ( 内部数据存储器地址 00H~7FH)
(2) 位地址空间 .
(3) 特殊功能寄存器 , 特殊功能寄存器只能用直接寻址方式进行访问 .
4.3 寄存器寻址 (Rn)
例: MOV A, R3 ;将通用寄存器 R3 中的数据送给 A ,即 A ← (R3)
在上面这条指令中,带下划线的操作数 ( 源操作数 ) 是当前工作寄存器区
的某个寄存器,这种寻址方式称为寄存器寻址。
比如:
XCH A, R1 ;累加器 A 和寄存器 R1 中的数互换
ADD A, R2 ; 累加器 A 和寄存器 R2 中的数相加
4.4 间接寻址
例: MOV R0, #30H
MOV A , @R0 ;以 R0 中的内容作为操作数的地址 .A ← ((R0)). 在上面的指令中,带下划线的不是 R0 ,而是以( R0 )为地址,间接找到内部 RAM 中的 30H 单元,将 (30H) 送给 A ,这种寻址方式称为寄存器间接寻址。
可用 R0、R1 和 DPTR 作间址寄存器,访问片内 RAM 或片外 KB 的 RAM 地址空间。
比如: MOV DPTR, #0CFA0H ;将十六位地址 CFA0H 赋给数据指针 DPTR
MOVX A, @DPTR ;将片外 RAM ( CFA0H )单元内的数送给 A
4.5 基址加变址寻址
例: MOVC A, @A+DPTR ;将地址为 (A) + (DPTR) 的 ROM ;单元中的数送给 A
在上面这条指令中,带下划线的操作数是以( DPTR )为基址,( A )为变址,将两者之和作为地址,找出该地址对应的 ROM 单元,再将该单元的数送给 A ,这种寻址方式称为基址加变址寻址方式。 MCS-51 单片机中还有两条变址寻址指令:
MOVC A, @A+PC
MOVC A, @A+DPTR
4.6 相对寻址
例: CJNE A , #80H , BUDENG ;如 (A) ≠ 80H ,跳转到 BUDENG
JNC DAYU ;如 (A) > 80H ,跳转到 DAYU
……
BUDENG: SETB FLAG0 ;置位标志位 FLAG0
……
DAYU: SETB FLAG1 ;置位标志位 FLAG1
……
在上面这个程序片段中,带下划线的操作数指明了程序跳转的目的位置,这个目的位置的 PC 相对于下一条程序语句的 PC 不得超出 -128 ~ +127 字节的范围。
4.7 特定寄存器寻址
例:INC A ; 累加器内容加 1.
INC DPTR ; 数据指针 DPTR 的内容加 1.
累加器 A 和数据指针 DPTR 这两个使用最频繁的寄存器又称为特定寄存器 ,
故称特定寄存器寻址 .
第6讲 指令功能及汇编语言程序设计(一)
教学目的:
1、设计范例 —循环彩灯的制作
2、数据传送类指令
3、控制转移指令
4、延时程序的概念和程序设计
5、子程序的概念和程序设计
6、循环程序的概念和程序设计
重点、难点:
1、设计范例 —循环彩灯的制作
2、数据传送类指令
3、控制转移指令
4、延时程序的概念和程序设计
5、子程序的概念和程序设计
6、循环程序的概念和程序设计
教学方式和步骤:
一、复习:单片机的指令系统和寻址方式
二、授课内容:
1、设计范例 —循环彩灯的制作
1.1 彩灯循环亮硬件原理图
彩灯循环亮硬件分析
• 此电路核心件是 MCS-51 单片机( ATC51 )。
• 包括时钟电路、复位电路及输出电路。
• 用 P1 口作输出口 , 直接驱动 8 只发光二极管。
发光二极管是一种把电能转换成光能的半导体器件.它由PN节组成,在正向偏置的条件下导通,此时会发射出一定波长的光.
1.2 软件设计(程序)
STAT: MOV A , #01H ; 高电平对应的发光二极管亮
LOOP: MOV P1, A ; 从 P1 口输出到发光二极管
MOV R1, #10
DEL1: MOV R2 , #200
DEL2: MOV R3, #126
DEL3: DJNZ R3, DEL3
DJNZ R2, DEL2
DJNZ R1, DEL1
RL A
LJMP LOOP ; 左移一位 , 下一个发光二极管亮
END
彩灯循环亮软件分析
• 此程序包含了传送类指令、控制转移类指令、移位指令。
• 此程序包含了延时程序、循环程序
2、指令讲解(数据传送类指令和控制转移指令)
2.1 传送类指令
(1)片内数据传送指令 (16条)
此类指令参入的源操作数和目的操作数有 #data/A/Rn/@Ri/direct 五个,其不同组合,共有 15 条指令
(2)片外数据传送指令 (4条)
当你想把一个数送到单片机外部扩展 RAM 的某个单元或外部扩展 I/O 口某个端口,或者你想从该 单元、端口将数据取回到单片机内部的时候,就要用到片外数据传送指令。
MOVX A , @Ri ; A ← ((Ri)) 片外
MOVX @Ri , A ; (Ri) 片外← A
MOVX A , @DPTR ; A ← ((DPTR)) 片外
MOVX @DPTR , A ; (DPTR) 片外← A
单片机与外部数据存储器数据传送采用两种寻址方式,这两种寻址形式都是间接寻址。一种是单字节寻址 @Ri ,一种是双字节寻址 @DPTR ,另一个操作数是 A . 共有 4 条指令。
(3)数据交换指令(5条)
① 指令: XCH A ,〈 byte 〉
功能:交换累加器与字节变量中的数据。
XCH 指令把指定字节的内容装入累加器 A 中,同时把累加器中原来的内容写入指定的字节中。源操作数有 Rn/direct/@Ri, 目的操作数是 A, 共三条指令。
例 2.5 设 RO 寄存器内容为 20H ,累加器 A 内容为 3FH ,内部 RAM 的 20H 单元内容为
75H ,若执行指令: XCH A , @RO 则结果为:( 20 ) =3FH ,( A ) =75H
② 指令: XCHD A, @Ri
功能:低半字节数据交换,执行操作( A3-0 )←→(( Ri ) 3-0 )
说明:累加器 A 中的低 4 位与由指定的寄存器间接寻址的内部 RAM 单元的低 4 位数据进行交换。该指令不影响各寄存器的高 4 位,也不影响标志位。
例 设 RO 内容为 20H ,累加器内容为 36H ,内部 RAM 的 20H 单元内容为 75H ,若执行指令 XCHD A , @RO
其结果为 ( 20H ) =0111011=76H
( A ) =00110101B=35H
③ 指令: SWAP A
A 的高四位和其低四位交换,
如 : 当 A 内容为 36H 时执行 SWAP A 后 A 为 63H
(3)堆栈指令
① 指令 PUSH direct 功能:把程序的中间数据送入堆栈,称为进栈。
说明:首先栈指针自动加 1 ,执行( SP )←( SP ) +1 将栈指针移向堆栈中的无数 据字节,然后将直接地址( direct )单元的内容送入 SP 所指向的栈单元中,执行( SP )←( direct ),不影响标志位。
例 设堆栈指针为 09H ,数据指针内容为 0123H ,试分析下列指令的执行结果。
PUSH DPL
PUSH DPH
执行结果为:( 0AH ) =23H ,
( 0BH ) =01H ,( SP ) =0BH
② 指令: POP direct 功能:把堆栈中的中间数据送入目的字节,称为出栈。
说明:读出由栈指针寻址的内部 RAM 单元内容。送到指定的直接寻址的字节单元,然后栈指针自动减 1 ,即执行操作:
( direct )← ((SP)),(SP) ← (SP)-1; 指令执行不影响标志位。
例 设( SP ) =32H ,内部 RAM 的 31H ,32H 单元中的内容分别为 23H , 01H ,试分析下列指令的执行结果。
POP DPH
POP DPL
执行结果为( DPTR ) =0123H,
(SP) =30H 。
2.2 控制转移指令
(1)长转移指令
LJMP 目标语句
说明:目标语句可以是程序存储器 KB 空间的任何地方。
(2)绝对转移指令
AJMP 目标语句
例: 4002H LJMP MM
……
4600H MM : MOV A , #00H
注意:目标语句必须和当前语句同页。在 51 单片机中, KB 程序存储器分成 32 页,每页 2KB(7FFH) 。
(3)短跳转指令
SJMP 目标语句 (rel)
例:
4060H SJMP LOOP
……
4090H LOOP : MOV A , #0FFH
……
注意:短跳转的目标语句地址必须在当前语句向前 127 ( 7FH )字节,向后 128 ( 80H )字节,否则在进行程序编译时会出错。
(4)减 1 条件转移指令组
DJNZ Rn ,目标地址 (rel) ;如果 (Rn)-1 ≠ 0 ,则程序跳转到目标语句,否则顺序执行下一条语句。
DJNZ direct, 目标地址 (rel) ;如果 (direct)-1 ≠ 0 ,则程序跳转到目标语句,否则顺序执行下一条语句。
例 : 将 8031 内部 RAM 的 40H~4FH 单元置初值 A0H~AFH 。程序为:
MOV RO , #40H ; RO 赋值,指向数据单元
MOV R2 , #10H ; R2 赋值,为传送字节数
MOV A , #0A0H ; A 赋值
LOOP : MOV @ RO , A ;开始传送
INC , RO ;修改地址指针
INC A ;修改传送数据
DJNZ R2 , LOOP ;未传送完,继续循环传送
RET ;否则,传送结束
3、程序设计方法的介绍(延时程序、子程序、循环程序)
3.1 延时程序
延时程序是一种应用较为广泛的小程序,一般采用多条语句循环执行来实现延时。
例 1 :当前 fosc=12MHz ,试计算下面延时程序的延时时间。
因为 fosc=12MHz ,故 T 机 =12/fosc=1us
DEL1 : MOV R3 , #10 ;1 个 机器周期
DEL2 : NOP ;1 个 机器周期
NOP ;1 个 机器周期
DJNZ R3 , DEL2 ;2 个 机器周期
t1= (1T 机 +1T 机 +2T 机 ) × 10+ 1T 机 =41us
例 2 :来看看下面这个程序能够实现的延时时间:
T 机 =12/fosc=12/12MHz=1us
DEL : MOV R5 , #50
DEL1 : MOV R4 , #100
DEL2: NOP
NOP
DJNZ R4 , DEL2
DJNZ R5 , DEL
t1= (1T 机 +1T 机 +2T 机 ) × 100+ 1T 机 =401us
t2=(t1+ 2T 机 ) × 50+ 1T 机 =12182us=20.151ms
则部分范例程序为:
ORG 0000H
MAIN : MOV P1 , #0F9H
DEL : MOV R7 , #10
DEL1 : MOV R6 , #123
DEL2: MOV R5 , #200
DEL3 : NOP
NOP
DJNZ R5 , DEL3
DJNZ R6 , DEL2
DJNZ R7 , DEL1
MOV P1 , #0A4H
DEL : MOV R7 , #10
DEL1 : MOV R6 , #123
DEL2: MOV R5 , #200
DEL3 : NOP
NOP
DJNZ R5 , DEL3
DJNZ R6 , DEL2
DJNZ R7 , DEL1
MOV P1 , #0B0H
这样一来,程序显得有些冗长,对于这种在一个程序中反复出现的程序段,我们可以采用子程序的结构来实现。
3.2 子程序
在程序中反复多次执行的程序段,可编写为子程序,在使用时通过主程序调用就可以使用它。这样不但可以减少编程工作量,也缩短了程序的长度。
ORG 0000H
MAIN : CLR P3.2
MOV P0 , #0F9H
LCALL DEL
MOV P0 , #0A4H
LCALL DEL
MOV P0 , #0B0H
LCALL DEL
MOV P0 , #99H
LCALL DEL
MOV P0 , #92H
LCALL DEL
SJMP MAIN
DEL : MOV R7 , #10
…………
DJNZ R7 , DEL1
RET
END
3.3 循环程序
在程序中需要反复执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。结构流程图一般如下图所示:
循环初始化:用于设计循环初值、循环次数
循环体:程序中反复执行的内容
循环控制:用于判断循环是否结束(通常采用次数递减的方法)
ORG 0000H
MAIN: MOV A, #01H ; 初始状态
MOV R0, #08 ; 共 8 位
L1 : MOV P1, A ;D1 发光
LCALL DEL ; 延时子程序
RL A ; 状态下移 1 位
DJNZ R0 , L1; 循环判断
SJMP MAIN ; 循环
4、程序设计一般步骤
(1)分析课题,确定解决方案和算法;
(2)分配系统资源及存储单元;
(3)绘制程序流程图;
(4)设计程序,并反复调试和修改。
彩灯循环设计
ORG 0000H
MAIN: MOV P1, #80H ;D7 发光
MOV P1, #40H ;D6 发光
MOV P1, #20H ;D5 发光
MOV P1, #10H ;D4 发光
MOV P1, #08H ;D3 发光
MOV P1, #04H ;D2 发光
MOV P1, #02H ;D1 发光
MOV P1, #01H ;D0 发光
SJMP MAIN ; 循环
ORG 0000H
MAIN: MOV A, #01H ; 初始状态
MOV R0, #08 ; 共 8 位
L1 : MOV P1, A ;D1 发光
LCALL DEL ; 延时子程序
RL A ; 状态上移 1 位
DJNZ R0 , L1; 循环判断
SJMP MAIN ; 循环
三 课后小结
第7讲 Keil软件的使用
教学目的:
Keil软件的使用与程序的调试操作
重点、难点:
Keil软件的使用与程序的调试操作
教学方式和步骤:
一、复习: 汇编语言程序设计
二、授课内容:
1、 Keil 软件系统概述
1.1 Keil C51
Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。当前提倡用 C51 开发单片机。
1.2 Keil uVision2
Keil uVision2 是优秀的单片机开发软件之一 , 读者可以向 Keil 公司代理周立功网站索取并下载得到 , 解压后在 Windows 下运行软件包中的 WIN\\Setup.exe 安装,在桌面上有 Keil uVision2 图标 , 点击后出现如图 7.13 所示界面,图 7.14 是该软件的一个汉化版界面图。该集成软件开发平台,具有汇编语言和 C 语言源代码编辑、编译、仿真于一体,它的人机界面友好,操作方便,是 51 单片机开发者的首选。
2、 Keil Vision2 软件的运行
主要任务的操作过程
(1)点击软件图标开机,运行 Keil uVision2 ;
(2)创建工程;
鼠标左键单击主菜单 “Project”---------- 项目命令菜单
鼠标左键单击子菜单 “New Project”--------- 创建新项目
弹出 “Creat New Project” 对话框 ---------Window 格式文件对话框,用鼠标在 “ 保存在 ” 下拉框选择你要保存的文件夹 ( 比如 “ 我的文档 ”)---------- 。在 “ 文件名 ” 文本框处用键盘敲入你给这个工程起的工程名 ( 如 “test1”)---------- 。鼠标左键单击 “ 保存 ” 按键 ---------- 。弹出 "Select Device for Target 'Target1'" 对话框 --------- 公司和 CPU 型号选择。用鼠标在左边列表框 “Data Base” 区双击 ATMEL 或单击 ATMEL 前的 “+” 号, ATMEL 子选项展开 ---------- 选公司 ATMEL ,用鼠标左键单击 “C52”---------- 选择项目所用 CPU ,用鼠标左键单击 “ 确定 ” 按键 -------- 完成项目创建。
(3)建立汇编程序源程序并编译过程
鼠标左键单击菜单 “File”---------- 主菜单中的文件菜单,鼠标左键单击菜单 “New”--------- 新建文件。
在出现的文本窗口( Text1 )中用键盘键入你的汇编程序。
鼠标左键单击菜单 File------ 。 Save as--------- 在新建的文档中键入你的汇编程序名称。弹出 Save As 对话框 ---- 。用鼠标在 " 保存在 " 下拉框选择你要保存的文件夹 ( 比如 " 我的文档 ")-------- 。在 “ 文件名 ” 文本框处用键盘敲入你给汇编程序文件名 ( 如 "test1.asm")-------- 注意同时输入扩展名 , 并且是认可的扩展名。鼠标左键单击 “ 保存 ” 按键
例如 使 P1.0 输出高低电平的源程序:
ORG 8000H
LOOP:SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
AJMP LOOP
DELAY: MOV R7, #0F0H
LOD1:MOV R6, #0F0H
LOD2:DJNZ R6,LOD2
DJNZ R7,LOD1
RET
END
在左边资源管理器用鼠标左键双击 “Target 1” 或单击 “Target 1” 前的 “+” 号, 鼠标右键单击 Source Group 。
弹出 “Add file to Group ‘Source Group 1'” 新建文件加入到项目组中。 “ 文件类型 ” 选 “asm source file (*.a*)”: 选择文件类型 C 语言或汇编等。找到 “test1.asm” 文件,鼠标左键单击该文件,找到刚才输入的文件鼠标左键单击 Add 加入工程项目中,鼠标左键单击 “Close”: 关闭对话框。
编译修改过的程序:鼠标左键单击主菜单 “Project”------ ,鼠标左键单击子下拉菜单中的 “Built target”: 编译文件、生成应用文件。
输出窗口显示 “”test1“-0 Errors(s) , 0 Warning(s)”: 完成编译,没有误如有错误,点击输出窗口中的提示行,鼠标会跳到源程序所在窗口中的错误处则根据提示修改源程序,然后再编译。用上述方法也可打开已有的汇编程序进行修改和编译
(4)设置参数
用鼠标左键单击主菜单 “Project”------ 项目和项目命令菜单用鼠标左键单击子菜单 “Options for Target 'Target1'”------ 设置对象或文件工具选项窗口。
弹出 “Options for Target ‘Target1'” 对话框 ------ 。在 “Target” 标签下修改 “Xtal(Mhz)” 为 “11.0592”-------- 。
在 “Output” 标签下,选中 “Create HEX file”( 如果你要生成 hex 文件用编程器写到目标板)
3、菜单和工具栏
4、软件调试与使用操作过程
5、思考题
三、课后小结
第8讲 指令功能及汇编语言程序设计(二)
教学目的:
1、熟悉51单片机控制转移类指令的特点及使用
2、了解51单片机子程序的设计方法
3、掌握51单片机的数码管循环显示
4、理解延时程序的设计和延时时间的计算方法
重点、难点:
1、51单片机的数码管循环显示
2、51单片机指令的功能及汇编语言程序设计
3、指令延时计算方法
教学方式和步骤:
一、复习:单片机指令系统
二、授课内容:
1、设计范例 —数码管循环显示
要求在数码管上循环显示数字 1~5。
范例分析:
1.1硬件分析
数码管采用共阳极结构。
1.2软件设计
设计中要求循环显示1~5,很显然应采用循环的方法来实现,最简单的方法是将1~5的段码依次由P0口送出。
准备程序
2、控制转移类指令的特点及使用
(1)长转移指令
LJMP Addr16
功能:长距离无条件转移指令
说明:三字节指令,它直接将指令中的16位常数装入PC,使程序无条件转移到指定的地址处执行。目标语句可以是程序存储器KB空间的任何地方。
(2)绝对转移指令
AJMP addr11
例: 4002H AJMP MM
……
4600H MM: MOV A,#00H
注意:目标语句必须和当前语句同页。在51单片机中,KB程序存储器分成32页,每页2KB(7FFH)。
(3)短跳转指令
SJMP 目标语句(rel)
例: 4060H SJMP LOOP
……
4090H LOOP:MOV A,#0FFH
……
注意:短跳转的目标语句地址必须在当前语句向前127(7FH)字节,向后128(80H)字节,否则在进行程序编译时会出错。
(4)变址寻址转移指令
JMP @A+DPTR
该指令主要用于多分支的跳转程序设计。跳转的目标地址是累加器A和数据指针DPTR之和,它可以是KB存储空间的任何地方。
例 根据标志单元R2中的内容,分别转各个处理程序。
程序如下:
PJ1: MOV DPTR ,#TAB1
CLR C
MOV A,R2
ADD A,R2 ;(R2) ×2←A
JNC NADD
NC DPH ;(R2)×2>256时,16位数据指针高8位加1
NADD:JMP @A+DPTR
TAB1:LJMP PRG0 ;转处理程序0的首地址
LJMP RRG1
…
LJMP RRG n
(5)减1条件转移指令组
DJNZ Rn,目标地址(rel);如果(Rn)-1≠0,则程序跳转到目标语句,否则顺序执行下一条语句。
DJNZ direct,目标地址(rel);如果(direct)-1≠0,则程序跳转到目标语句,否则顺序执行下一条语句。
例 将8031内部RAM的40H~4FH单元置初值A0H~AFH。程序为:
START:MOV RO,#40H ;RO赋值,指向数据单元
MOV R2,#10H ;R2赋值,为传送字节数,十六进制数
MOV A,#0A0H ;给A赋值
LOOP: MOV @RO,A ;开始传送
INC,RO ;修改地址指针,准备传下一数地址
INC A ;修改传送数据值
DJNZ R2,LOOP ;如果未传送完,则继续循环传送
RET ;当R2的值减为0时,则传送结束
3、延时程序的设计和延时时间的计算方法
延时程序是一种应用较为广泛的小程序,一般采用多条语句循环执行来实现延时。
例1:设计一延时程序,延时时间为1ms(fosc=12MHz)。
例2:设计一延时250ms的程序
已有上例所举延时1ms子程序,调用250次,即得延时250ms子程序
DELAY2:MOV R3,#FAH
DEL3:ACALL DELAY1
DEL2: NOP
NOP
DJNZ R3,DEL3
RET
本段程序延时的时间为:
1+(2+993+2)250+2=249253us
误差不到1ms
思考:如何设计延时1s程序?
4、子程序的设计方法
4.1子程序:在程序中反复多次执行的程序段,可编写为子程序,在使用时通过主程序调用就可以使用它。这样不但可以减少编程工作量,也缩短了程序的长度。
4.2子程序的使用:
(1)子程序调用:
指令:ACALL ××× ;绝对调用,2KB范围
LCALL ××× ;长调用,KB范围
(2)子程序返回:
指令:RET ;子程序返回指令
RETI ;中断子程序返回指令
ORG 2000H
MAIN: CLR P3.2
MOV P0,#0F9H
LCALL DEL
MOV P0,#0A4H
LCALL DEL
MOV P0,#0B0H
LCALL DEL
SJMP MAIN
DEL: MOV R7,#10
DEL1: MOV R6,#123
…………
DJNZ R7,DEL1
RET
END
5、循环程序设计的基本方法
循环程序:在程序中需要反复执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。结构流程图一般如下图所示:
三、课后小结
使用教具:
多媒体,51 单片机产品实物
第9讲 键盘与单片机的接口
教学目的:
1、熟悉单片机简易键盘的特点及使用
2、理解矩阵式键盘由行线和列线组成原理
3、掌握单片机的键盘的编程方法
重点、难点:
1、矩阵式键盘工作原理
2、单片机的键盘的编程方法
教学方式和步骤:
一、复习:单片机指令系统
二、授课内容:
1、键盘工作原理
1.1 按键的分类
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。
全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路。这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。由于其经济实用,较多地应用于单片机系统中。下面将重点介绍非编码键盘接口。
1.2 键输入原理
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与 CPU 相连。 CPU 可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器 ACC ,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。
1.3 按键结构与特点
微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的 TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图 7.2 所示,抖动时间的长短与开关的机械特性有关,一般为 5 ~ 10 ms 。
按键触点的机械抖动
在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
在硬件上可采用在键输出端加 R-S 触发器 ( 双稳态触发器 ) 或单稳态触发器构成去抖动电路。图 7.3 是一种由 R-S 触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。
软件上采取的措施是:在检测到有按键按下时,执行一个 10 ms 左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。
1.4 按键编码
一组按键或键盘都要通过 I/O 口线查询按键的开关状态。根据键盘结构的不同,采用不同的编码。无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。
1.5 编制键盘程序
一个完善的键盘控制程序应具备以下功能:
(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3) 准确输出按键值(或键号),以满足跳转指令要求。
2、式按键
单片机控制系统中,往往只需要几个功能键,此时,可采用式按键结构。
2.1 式按键结构
式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根 I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。式按键的典型应用如图所示。
式按键电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,因此,在按键较多时, I/O 口线浪费较大,不宜采用。
式按键电路
2.2 式按键的软件结构
式按键的软件常采用查询式结构。先逐位查询每根 I/O 口线的输入状态,如某一根 I/O 口线输入为低电平,则可确认该 I/O 口线所对应的按键已按下,然后,再转向该键的功能处理程序。图中的 I/O 口采用 P1 口,请读者自行编制相应的软件。
3、矩阵式键盘
单片机系统中,若使用按键较多时,通常采用矩阵式(也称行列式)键盘。
3.1 矩阵式键盘的结构及原理
矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如图所示。
由图可知,一个 4 × 4 的行、列结构可以构成一个含有 16 个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之式按键键盘要节省很多 I/O 口。
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+ 5V 上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。
3.2 矩阵式键盘按键的识别
识别按键的方法很多,其中,最常见的方法是扫描法。下面以图中 8 号键的识别为例来说明扫描法识别按键的过程。
按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平。显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平。只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。 CPU 根据行电平的变化,便能判定相应的行有键按下。 8 号键按下时,第 2 行一定为低电平。然而,第 2 行为低电平时,能否肯定是 8 号键按下呢?
回答是否定的,因为 9 、 10 、 11 号键按下,同样会使第 2 行为低电平。为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。采用键盘扫描后,再来观察 8 号键按下时的工作过程,当第 0 列处于低电平时,第 2 行处于低电平,而第 1 、 2 、 3 列处于低电平时,第 2 行却处在高电平,由此可判定按下的键应是第 2 行与第 0 列的交叉点,即 8 号键。
3.3 键盘的编码
对于式按键键盘,因按键数量少,可根据实际需要灵活编码。对于矩阵式键盘,按键的位置由行号和列号惟一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高 4 位是行号,低 4 位是列号。如图 7.5 中的 8 号键,它位于第 2 行,第 0 列,因此,其键盘编码应为 20H 。采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。因此,可采用依次排列键号的方式对按排进行编码。以图 7.5 中的 4 × 4 键盘为例,可将键号编码为: 01H 、 02H 、 03H 、 … 、 0EH 、 0FH 、 10H 等 16 个键号。编码相互转换可通过计算或查表的方法实现。
3.4 键盘的工作方式
对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中 CPU 的工作状况而定,其选取的原则是既要保证 CPU 能及时响应按键操作,又不要过多占用 CPU 的工作时间。通常,键盘的工作方式有三种,即编程扫描、定时扫描和中断扫描。
编程扫描方式
编程扫描方式是利用 CPU 完成其它工作的空余时间,调用键盘扫描子程序来响应键盘输入的要求。在执行键功能程序时, CPU 不再响应键输入要求,直到 CPU 重新扫描键盘为止。
键盘扫描程序一般应包括以下内容:
(1) 判别有无键按下。
(2) 键盘扫描取得闭合键的行、列值。
(3) 用计算法或查表法得到键值。
(4) 判断闭合键是否释放,如没释放则继续等待。
(5) 将闭合键键号保存,同时转去执行该闭合键的功能。
4、键盘程序设计示例
在图示电路中,用 P1 口接一个 4 X 4 键盘。设: SO-S9 为数字键,键值为 0-9 ,用于向单片机系统输入数据; S10-S15 为命令键,键值为 A-F ,用于对计算机系统送操作命令;每键只 1 个功能;行线接 P1 口的高 4 位;列线接 P1 口的低 4 位。
(1)键盘扫描子程序
KEY: MOV A, #0F 0H
MOV P1,A
XRL A,P1
JZ KEYR ;无键按下返回
ACALL DELAY ;延时去抖动
MOV 30H,P1 ;读闭合键行位置
MOV P1,#0FH ;反转
MOV A,P1 ;读闭合键列位置
ORL 30H,A ;合成键盘位置码
LOOP: MOV A,P1 ;等待键释放
XRL A, #0FH
JNZ LOOP
ACALL DELAY ;延时去抖动
KEYR : RET
(2)键值转换
键盘矩阵中各键的位置码的特点是:对应该键行、列的位为“ 0 ” ,其他各位均为“ 1 ” 。例如: S7 键的位置码是: 11010111B = 0D7H ; S12 键的位置码是: 01111110B = 7EH 。将各键的位置码顺序排列成键值表,用查表法进行键值转换。
键值转换子程序
TRAN: MOV DPTR,#KEYTAB ; DPTR 指向键值表
MOV R2,#0 ;键值初值送 R2
MOV R3,#10H ;循环次数送 R3
LOOPT: MOV A,R2
MOVC A, @A+DPTR ;读键值表
XRL A,30H ;与位置码比较
JZ KTR ;相等返回,键值在 R2 中
INC R2 ;键值 +1
DJNZ R3,LOOPT
KTR: RET ;若返回时 R2=10H 为错
KEYTAB: DB 0EEH,0EDH,0EBH,0E7H ;键值表
DB 0DEH,0DDH,0DBH,0D7H
DB 0BEH,0BDH,0BBH,0B7H
DB 7EH,7DH,7BH,77H
三、课后小结
使用教具:
多媒体,51单片机产品实物
第10讲 单片机IO接口(1)-功率输出接口
教学目的:
1、功率晶体管接口
2、光电耦合器隔离
3、双向晶闸管接口
重点、难点:
1、功率晶体管接口
2、光电耦合器隔离
3、双向晶闸管接口
教学方式和步骤:
一 、复习:汇编指令与程序设计
二 、授课内容:
1、功率晶体管接口
1.1 晶体管驱动继电器
晶体管驱动继电器电路
1.2 晶体管阵列
当需要多路晶体管驱动输出时,可选用集成晶体管阵列(MC1413),以简化电路,降低成本。
MC1413 中每一路达林顿晶体管可提供 500mA 驱动电流,集电极电压可达 50V 。每一路晶体管均带有续流二极管,用于带感性负载时保护晶体管。
2、光电耦合器隔离
2.1 光电耦合器
光电耦合器是将发光器件和光敏器件集成在一起,通过光线实现耦合,构成的电-光-电转换器件。
实际使用中光电耦合器输入侧发光二极管的驱动电流取 10-20mA ,输出光敏三极管的耐压大于 30V 。
光电耦合器电路符号
2.2 光电隔离电路
输入隔离电路
输出隔离电路
3、双向晶闸管接口
用单片机控制工频交流电,最方便的是采用双向晶闸管。为避免晶闸管导通瞬间产生的冲击电流带来的干扰和对电源的影响,可以采用过零触发的方式。
过零触发双向晶闸管触发电路
三、课后小结
第11讲 单片机的定时器/计数器
教学目的:
1、定时器/计数器的结构和工作原理
2、定时器/计数器的控制
3、定时器/计数器工作方式
4、定时器/计数器综合应用举例
重点、难点:
1、定时器/计数器的控制
2、定时器/计数器工作方式
3、定时器/计数器综合应用举例
教学方式和步骤:
一、复习: 汇编指令与程序设计
二、授课内容:
1、定时方法概述
定时方法
硬件延时 由硬件电路实现延时,长时间延时;
软件延时 通过执行循环而获得延时,短时间延时;
可编程定时 通过对系统时钟脉冲的计数而获得延时。
2、定时器/计数器的结构和工作原理
2.1 结构
2 个定时器 T0 和 T1:16 位加 1 计数器,通过编程来设置工作状态
定时器方式寄存器TMOD:设置定时器的工作方式
定时器控制寄存器TCON:启动和停止定时器的计数;计数溢出标志
2.2 工作原理
MCS-51 单片机定时/计数器的工作原理:
归根结底是计数器。每接收到一个计数脉冲,加法计数器的值就加一,当计满时发生溢出,并从 0 开始继续计数。
(1) 定时功能 (设置 TMOD 中位 C/T=0)
对片内机器周期进行计数,即每个机器周期产生一个计数脉冲,计数加 1 。
(2) 计数功能 (设置 TMOD 中位 C/T=1)
对片外从 T0 (P3.4)、 T1 (P3.5)引脚输入的外部脉冲信号进行计数,下降沿计数加 1 。
3、定时器/计数器的控制
与定时/计数器有关的控制寄存器有 2 个
3.1 定时器控制寄存器 TCON (字节地址 88H )
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | H | 88H |
位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
该位由软件置 1 或清 0 。
TR0 (TR1)= 1 启动定时计数=0停止定时计数
TCON 除字节寻址外,各位还可以位寻址。
例如 启动 T0 开始计数工作,可运行指令
MOV TCON , #00010000B 或者 SETB TR0 与定时 / 计数器有关的控制寄存器有 2 个
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | H | 88H |
位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
当 T0/T1 计数溢出时,该位由硬件自动置 “1” 。
查询方式下,此位作计数溢出状态位供查询,注意溢出后应以软件方法及时清 0 ;
中断方式下,此位会当 T0 溢出时,由硬件自动置 1 ,并向 CPU 申请中断, 当 CPU 响应中断进入中断服务程序后,它又被硬件自动清 0
3.2 定时器工作方式寄存器 TMOD (H)
用于 2 个定时器 T0、T1 的工作方式设定 , TMOD 不能位寻址,只能用字节指令设置定时器工作方式。
M1 M0 设置定时工作方式
4、定时器/计数器工作方式
(1)工作方式0
C/T -定时 / 计数功能选择位。
C/T =“0” ,对片内机器周期进行计数,作定时器用;
C/T =““1” ,对片外从 T0 ( P3.4 )、 T1 ( P3.5 )引脚输入 的外部脉冲信号进行计数 , 作计数器用。
GATE -门控位。
GATE=0 ,允许软件控制位 TR0 或 TR1 启动定时器;
GATE=1 ,允许外中断引脚 INT0( 或 INT1) 为高电电平,且由软件使 TR0( 或 TR1) 置 1 时,才能启动定时器工作。
当 GATE=0 时,封锁或门输出恒为 1 ,使外部中断输入引脚 INT0 信号失效,同时又打开与门,由 TR0 控制定时器 T0 的开启和关断。若 TR0=1 ,接通控制开关,启动定时器 T0 工作,计数器被控制为允许计数。若 TR0=0 ,则断开控制开关,停止计数。
当 GATE=1 时,与门的输出由 INT0 的输入电平和 TR0 位的状态来确定。若 TR0=1 ,则打开与门,外部信号电平通过 INT0 引脚直接开启或关断定时器 T0 。 当 INT0 为高电平时,允许计数,否则停止计数。这种工作方式可用来测量外部信号的脉冲宽度等。
当 C/T=0 时, 控制开关接通振荡器 12 分频输出端, T0 对机器周期计数。 即定时器工作方式。
当 C/T=1 控制开关与引脚 T0 ( P3.4 )接通,计数器 T0 对来自外部引脚 T0 的输入脉冲计数,当外部信号电平发生由 1 到 0 跳变时,计数器加 1 ,这时, T0 成为外部事件计数器。
注意:定时计数器的计数范围与初值 X 的计算
① 定时器的计数规律:
T0 从某初值 X ,对脉冲计数到 1111111111111B(2 13 D=8192D) 溢出
计数个数: 2 13 - X
② 最大计数范围: 从初值 X = 0D ,计数到 1111111111111B(2 13 D)
③ 定时时间:
定时值 = 计数个数×机器周期
=( 2 13 - X )×机器周期
= ( 2 13 - X )×晶振周期× 12
最大定时值 =( 2 13 - 0 ) ×机器周期
例 1 如要求计数值为 1000 ,试计算定时计数器 T0 的初值
分析:由 213 - X = 1000
得 X = 213 - 1000 = 8192 - 1000
= 1C18H = 0001 1100 0001 1000B
故 TH0 = 1 1100 000 = 0E0H
TL0 = 1 1000B = 000 1 1000B = 18H 。
例 2 利用 T0 方式 0 在 P1.0 引脚上输出周期 500us 的方波。设单片机 晶振频率 6MHz 。
分析: 要在 P1.0 输出周期为 500us 的方波,只要 P1.0 每隔 250us 取反一次即可,即定时时间为 250us :
① TMOD 寄存器初始化:
TMOD.1 TMOD.0 M1M0=00 , T0 为方式 0 ;
TMOD.2 C/T=0 T0 为定时状态;
TMOD.3 GATE=0 表示计数不受 INT0 控制;
TMOD.4 TMOD.7 因 T1 不用,可取任意值,这里取为 0 。
故 TMOD=00H
② 计算 250us 定时 T0 的初值: 设 T0 的计数初值为 X ,则
X=8067D=1F83H=0001 1111 1000 0011B
故 TH0= 1 1111 100 高 8 位 =FCH
TL0=0000 0011B 低 5 位 =03H
③ 编写程序。采用查询 TF0 的状态来控制 P1.0 输出
MOV TMOD , #00H ;置 T0 为方式 0
MOV TH0 , #0FCH ;送计数初值
MOV TL0 , #03H
SETB TR0 ;启动 T0
LOOP : JBC TF0 , NEXT ;查询定时时间到否 ?
SJMP LOOP
NEXT : CLR TF0 ; 对溢出标志位清 0
MOV TH0 , #0FCH ;重赋计数初值
MOV TL0 , #03H
CPL P1.0 ;输出取反
SJMP LOOP ; 重复循环
采用查询方式的程序很简单,但在定时器整个计数过程中, CPU 要不断查询溢出时标志 TF0 的状态 , 这就占用了 CPU 工作时间 , 以致 CPU 的效率不高。采用定时溢出中断方式,可以提高 CPU 的效率。
(2)工作方式1
M1 M0=01 TH0 高 8 位和 TL0 低 8 位组成一个 16 位定时器 / 计数器
定时器工作于方式1下,其结构与操作几乎与方式 0 完全相同,差别仅在于计数器的位数不同。
注意:定时计数器的计数范围与初值 X 的计算
① 定时器的计数规律:
T0 从初值 X ,一直对脉冲计数到 1111111111111B(216D) 溢出
计数个数: 216 - X = 65536 - X
② 最大计数范围 :从初值 X = 0D ,计数到 1111111111111111B(216D)
计数个数为 216 - 0 = 65536D
③ 定时时间: 定时值 =( 216 - X ) ×机器周期
=( 216 - X ) ×晶振周期× 12
最大定时定时值 =( 216 - 0 ) ×机器周期
例如 . 若单片机晶振为 6MHZ ,则 1 个机器周期为 2us
最大定时定时值 =( 216 - 0 ) ×机器周期
= 65536 × 2us = 131ms
5、定时器/计数器综合应用举例
P1.0、P1.1 经 7407 驱动 LED 交替发光并以每秒一次的频率闪烁。硬件连接见下图(采用 6MHZ 晶振)
分析:闪烁周期为 1S ,亮、灭各占一半,定时时间需要 500mS 。使用 6MHZ 晶振,单片机最长定时时间仅为 131mS ,所以需要采用软件记数方法扩展定时时间。
使用定时 / 计数器 0 ,定时方式,工作方式 1 。
设置 TMOD 控制字: TMOD = 01H
使用 6MHZ 晶振,机器周期为 2 μ s ,设定时时间 100mS ,定时初值 3CB0H 。定时器溢出 5 次为 500mS 。
程序如下:
ORG 0140H
LED1 : MOV TMOD,#01H ;设置 T0 工作方式
SETB P1.0 ;输出初始状态
CLR P1.1
SETB TR0 ;启动定时器
LOOP0: MOV R2,#05H ;送软件计数初值
LOOP1: MOV TL0,#0B0H ;送定时常数
MOV TH0,#3CH
JBC TF0,$ ;循环等待定时时间到
DJNZ R2,LOOP1 ;软件计数 –1 ≠ 0 循环
XRL P1,#03H ; P1.0、P1.1 求反
SJMP LOOP0 ;循环
三、课后小结
第12讲 单片机的中断系统
教学目的:
1、中断系统的构成和各部分功能
2、中断的响应过程
3、中断控制寄存器的设置
4、典型应用程序设计
重点、难点:
1、中断的响应过程
2、中断控制寄存器的设置
3、典型应用程序设计
教学方式和步骤:
一 复习:单片机的定时器 / 计数器
二 授课内容:
1、中断概述
中断是指计算机暂时停止原程序执行转而响应需要服务的紧急事件(执行中断服务程序),并在服务完后自动返回原程序执行的过程。
中断由中断源产生,中断源在需要时可以向CPU提出 “ 中断请求 ” 。 “ 中断请求 ” 通常是一种电信号, CPU一旦对这个电信号进行检测和响应便可自动转入该中断源的中断服务程序执行,并在执行完后自动返回原程序继续执行,中断源不同中断服务程序的功能也不同。
1.1采用中断控制方式的优点
(1)可以提高CPU的工作效率
(2)可以提高实时数据的处理时效
1.2中断源
中断源是指引起中断的设备、部件或事件。通常,中断源有以下几种:
(1)外部设备中断源
(2)控制对象中断源
(3)故障中断
(4)定时脉冲中断源
1.3中断优先级与中断嵌套
(1)中断优先级:一个CPU总会有若干中断源,但在同一瞬间,CPU只能响应其中的一个中断请求,为了避免在同一瞬间若干个中断源请求中断而带来的混乱,必须给每个中断源的中断请求设定一个中断优先级,CPU先响应中断优先级高的中断请求。
(2)中断嵌套:在某一瞬间,CPU因响应某一中断源的中断请求而正在执行其它的中断服务程序时,若有中断优先级更高的中断源提出中断请求,那它可以把正在执行的中断服务程序停下来,转而响应和处理中断优先权更高中断源的中断请求,等到处理完后再转回来继续执行原来的中断服务程序,这就是中断嵌套。
1.4中断系统功能
(1)进行中断优先级排队
(2)实现中断嵌套
(3)自动响应中断
(4)实现中断返回
2、MCS-51 单片机中断系统
(1)外部中断INT0、INT1
输入/输出设备的中断请求,系统故障的中断请求等都可以作为外部中断源,从引脚INT0或INT1输入。
外部中断请求INT0、INT1的两种触发方式:
电平触发及跳沿触发,由TCON的ITO位及IT1位选择。
ITO(IT1)= “ 0 ” 时,为 INT0、INT1电平触发方式,CPU响应中断后要采取措施撤消中断请求信号,使INT0或INT1恢复高电平。
ITO(IT1)= “ 1 ” 时为跳沿触发方式,当 INT0或INT1引脚上出现负跳变时,该负跳变经边沿检测器使IEO(TCON.1)或IE1(TCON.3)置1,向CPU申请中断。CPU响应中断转入中断服务程序时,由硬件自动清除IEO或IE1。
(2)定时器/计数器0、l溢出中断
定时器/计数器计数溢出时,由硬件分别置TF0 = “ 1 ” 或 TF1 = “ 1 ” ,向 CPU申请中断。CPU响应中断转入中断服务程序时,由硬件自动清除TFO或TF1。
(3)串行口中断
串行口中断由单片机内部串行口中断源产生。串行口中断分为单行口发送中断和串行口接收中断两种。在串行口进行发送/接收数据时,每当发送/接收完一组数据,使串行口控制寄存器 SCON中的 RI = “ 1 ” 或 TI = “ 1 ” ,并向 CPU发出串行口中断请求,CPU响应串行口中断后转入中断服务程序执行。由于RI和TI作为一个中断源,所以需要在中断服务程序中安排一段对RI和TI中断标志位状态的判断程序,以区分发生了接收中断请求还是发送中断请求,而且必须用软件清除TI和RI。
3、中断控制寄存器的设置
3.1中断允许控制
MCS - 51单片机有 5个(8052有 6个)中断源, 为了使每个中断源都能地被允许或禁止, 以便用户能灵活使用, CPU内部在每个中断信号的通道中设置了一个中断允许触发器, 它控制CPU能否响应中断。只有对应的中断允许触发器被使能(置“1”),相应的中断才能得到相应。
中断允许控制寄存器IE (0A8H)
EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
ET0:定时器/计数器0中断允许位
EX1:外部中断1允许位
ET1:定时器/计数器1中断允许位
ES : 串行口中断允许位
EA :中断总允许位
3.2中断优先级控制寄存器IP(0B8H)
- | - | - | PS | PT1 | PX1 | PT0 | PX0 |
PT0:定时器/计数器0中断允许位
PX1:外部中断1允许位
PT1:定时器/计数器1中断允许位
PS:串行口中断允许位
同一级中的5个中断源的优先顺序是:
/INT0中断
T0溢出中断
/INT1中断
T1溢出中断
串口中断
MCS-51系列单片机的中断响应顺序:
CPU同时接收到几个中断请求时,首先响应优先权最高的中断请求。正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现二级中断嵌套。正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。
各中断源优先级的设置要注意各个要求服务的中断事件的轻重缓急和中断服务程序的执行时间。原则是:紧急事件和处理时间短的中断优先级别高。
3.4 中断服务程序
中断服务程序入口地址:
五个中断源: 入口地址
外部中断0(/INT0) 0003H
T0溢出中断 000BH
外部中断1(/INT1) 0013H
T1溢出中断 001BH
串口中断 0023H
4、典型应用程序设计
三 课后小结
第13讲 MCS-51单片机串行接口
教学目的:
1、串行通信的基础知识
2、单片机串行通信控制寄存器的使用
3、串行通信应用
重点、难点:
1、单片机串行通信控制寄存器的使用
2、串行通信应用
教学方式和步骤:
一、复习: 单片机的中断
二、授课内容:
1、串行通信概述
1.1串行通信和并行通信
计算机与外界的信息交换称为通信。基本的通信方法有并行通信和串行通信两种。一组信息的各位数据被逐位顺序传送的通信方式称为串行通信。串行通信可通过串行接口来实现。串行通信速度慢,但传输线少,适宜长距离通信。
一组信息(通常是字节)的各位数据被同时传送的通信方法称为并行通信。并行通信依靠并行I/O接口实现。并行通信速度快,但传输线根数多,只适用于近距离(相距数公尺)的通信。
1.2信息传送方向
根据信息的传送方向,串行通信可以进一步分为单工、半双工和全双工3种。信息只能单方向传送称为单工;信息能双向传送,但不能同时双向传送称为半双工;能够同时双向传送则称为全双工。
MCS-5l单片机有一个全双工串行口。全双工的串行通信只需要一根输出线(TXD)和一根输入线(RXD)。
1.3同步方式和异步方式
(1) 同步方式是将一大批数据分成几个数据块, 数据块之间用同步字符予以隔开, 而传输的各位二进制码之间都没有间隔。 其基本特征是发送与接收时钟始终保持严格同步。
(2)异步通信是按帧传送数据, 它利用每一帧的起、止信号来建立发送与接收之间的同步,每帧内部各位均采用固定的时间间隔, 但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志, 它是以字符为单位一个个地发送和接收的。
1.4波特率
在一帧信息中,每一位的传送时间(位宽)是固定的,位传送时间的倒数称为波特率(Baud rate),波特率表示每秒传送的位数。例如每秒960个字符,若每个字符为10位,则波特率为9600。位传送时间是104μS。
MCS-51串行I/O接口的基本工作是:发送时,将CPU送来的并行数据转换成一定格式的串行数据,从引脚TXD上按规定的波特率逐位输出;接收时,要监视引脚RXD,一旦出现起始位“0”,就将外围设备送来的一定格式的串行数据转换成并行数据,等待CPU读入。
2、串行口功能与结构
2.1功能
MCS-5l单片机中的异步通信串行口能方便地与其他计算机或串行传送信息的外围设备(如串行打印机、CRT终端等)实现双机、多机通信。
串行口有四种工作方式,如表所示:
SM0 | SM1 | 工作方式 | 功能 | 波特率 |
0 | 0 | 方式0 | 移位寄存器方式,用于并行I/O扩展 | fosc/12 |
0 | 1 | 方式1 | 8 位通用异步接收器/发送器 | 可变 |
1 | 0 | 方式2 | 9 位通用异步接收器/发送器 | fosc/1 或 fosc/24 |
1 | 1 | 方式3 | 9 位通用异步接收器/发送器 | 可变 |
由发送数据缓冲器、发送控制器、输出控制门、接收数据缓冲器、接收控制器、输入移位寄存器等组成。发送数据缓冲器只能写入,不能读出,接收数据缓冲器只能读出,不能写入,二者共用一个符号 — 特殊功能寄存器 SBUF,共用一个地址 — 99H。串行口中还有两个特殊功能寄存器SCON、PCON,分别用来控制串行口的工作方式和波特率。波特率发生器由定时器/计数器1构成。
2.3串行口控制寄存器SCON
串行口控制寄存器SCON的格式如下:
(l)工作方式选择位SMO、SM1:SMO、SM1由软件置 “1” 或清 “0” ,用于选择串行口的 4种工作方式。
(2)多机通信控制位SM2:SM2=“1” 时,接收到一帧信息,如果接收到的第 9位数据为1,硬件将RI置“1” ,申请中断;如果第九位数据为“0” ,则 RI不置“1” ,且所接收的数据无效。
SM2=“0” 时,只要接收到一帧信息,不管第九位数据是0还是1,硬件都置RI =“1”,并申请中断。RI由软件清“0”,SM2由软件置“1”或清“0”。
多机通信时,各从机先将SM2置“l”。接收并识别主机发来的地址,当地址与本机相同时,将 SM2清“0”,与主机进行数据传递。各机所发送的数据第 9位必须为“0”。
(3)允许接收控制位REN:REN=“1” 时允许并启动接收,REN =“0”时禁止接收。REN由软件置“1”或清“0”。
(4)发送数据D8位TB8:TB8是方式2、方式3中要发送的第九位数据,事先用软件写入1或0。方式0、方式1不用。
(5)接收数据D8位RB8:方式2、方式3中,由硬件将接收到的第九位数据存入RB8。方式1中,停止位存入RB8。
(6)发送中断标志位TI:发送完一帧信息,由硬件使TI置“1”, TI必须由软件清“0”。
(7)接收中断标志位RI:接收完一帧有效信息,由硬件使RI置“1”, RI必须由软件清“0” 。
2.4串行口数据寄存器 SBUF
串行口数据寄存器SBUF由串行输出移位寄存器和两级缓冲的串行输入寄存器组成。当数据写入SBUF时启动串行数据发送,连同此前置入的TB8,按设定波特率串行输出。串行数据移入串行输入寄存器完成后,自动将数据并行送入接收SBUF,并置“1”通知 CPU读取数据,CPU应该在下一个串行数据接收完成之前读出。
2.5串行口的工作方式
(1)方式0:同步移位寄存器方式
波特率固定为fosc/12
RXD —— 接收发送数据
TXD —— 产生同步移位脉冲
接收/发送完,置位RI/TI ,(要求SM2 = 0)
(2)方式1:8位UART
波特率为(2 SMOD×T1的溢出率)/32 ,可变。
一帧信息10位。
接收到有效数据完毕,置位RI的条件:
REN = 1,RI = 0 且SM2 = 0或接收到第9位数据为1,此时,数据装载SBUF,RI置1,第9位数据(TB8) RB8。
2.6多机通信
多机通信系统有1个主机与多个从机,从机数最多256个,地址编为00H至0FFH。距离近,可直接以TTL电平通信,距离远可转换RS485标准进行通信。为了区分是数据信息还是地址信息,主机用第9位数据TB8作为地址/数据的识别位,地址帧的TB8 =“1” ,数据帧的 TB8 =“0”。各从机的 SM2必须置“1”。在主机与某一从机通信前,先将该从机的地址发送给各从机。由于各从机SM2=“1”,接收到的地址帧 RB8=“1”,所以各从机的接收信息都有效,送入各自的接收缓冲器,并置RI=“1” 。各从机 CPU响应中断后,通过软件判断主机送来的是不是本从机地址,如是本从机地址,就使SM2=“0”,否则保持 SM2 =“l”。
2.7波特率
串行口每秒钟发送或接收的数据位数称为波特率。 假设发送一位数据所需时间为T, 则波特率为 1/T。
(1) 模式0 的波特率等于单片机晶振频率的 1/12, 即每个机器周期接收或发送一位数据。
(2) 模式2的波特率与电源控制器PCON的最高位SMOD的写入值有关:即SMOD=0, 波特率为(1/) f OSC ; SMOD=1, 波特率为(1/32)f OSC 。
(3) 模式 1 和模式 3 的波特率除了与SMOD位有关之外, 还与定时器 T1 的溢出率有关。 定时器 T1 作为波特率发生器, 常选用定时方式 2(8位重装载初值方式), 并且禁止 T1 中断。此时 TH1 从初值计数到产生溢出, 它每秒钟溢出的次数称为溢出率。 于是
3、串行口的应用
3.1 串行口的编程
串行口需初始化后, 才能完成数据的输入、输出。其初始化过程如下:
(1) 按选定串行口的操作模式设定SCON的SM0、SM1两位二进制编码。
(2) 对于操作模式 2 或 3, 应根据需要在 TB8 中写入待发送的第 9 位数据。
(3) 若选定的操作模式不是模式 0, 还需设定接收/发送的波特率。
设定SMOD的状态, 以控制波特率是否加倍。
若选定操作模式1或3, 则应对定时器 T1进行初始化以设定其溢出率。
3.2利用串行口进行双机通信
3.3串行口与PC机通信
三 课后小结
第14讲 电子时钟子项目
教学目的:
1、电子时钟的总体设计和基本方法
2、电子时钟的硬件总体设计和基本方法
3、电子时钟的软件总体设计和基本方法
4、程序设计和程序调试基本技巧
重点、难点:
1、电子时钟的硬件总体设计和基本方法
2、电子时钟的软件总体设计和基本方法
3、程序设计和程序调试基本技巧
教学方式和步骤:
一 复习: 单片机的定时器、中断
二 授课内容:
1、电子时钟总体设计
1.1明确任务
根据课题的要求确定系统的工作原理。如电脑时钟的工作原理为:每百分之一秒对计数一次,满100次秒加一,秒满60次分加一……;并在数码管上显示时、分、秒当前值。
1.2 硬件和软件功能的划分
本课题要求实现的功能比较简单。百分之一秒的控制由C51的定时器T0完成;百分之一秒寄存器的内容加一由T0中断完成;动态显示和键盘管理由8255完成。
系统的硬件配置和软件设计是紧密地联系在一起的,且硬件和软件具有一定的互换性。多用硬件完成一些功能,可以提高工作速度,但降低了系统的柔性。因此,总体设计时,应综合考虑,合理划分硬件和软件的功能。
2、电子时钟硬件总体设计
2.1系统扩展
根据总体设计要求,确定系统扩展与功能接口,设计出系统的电路原理图。
为考虑今后功能的扩展,最小系统由C51、地址锁存器74LS373、8255A构成程序存储器和数据存储空间宽裕,目前暂不考虑扩展。
2.2功能接口
本课题只要求键盘和显示接口。显示设备为6位数码管。为了保证数码管的亮度,必须保证输入电流的大小,因此,选用74LS244作为驱动放大器。
键盘(6个)定义如下:SETB:设置键;↑键:向上翻转或者加一;shift键:为设置的时候切换键;↓键:向下翻转或者减一;ENTER键:确认键。如果还有闹钟功能的话,就用ALARM键表示设置闹铃。
2.3系统的组成及统一编址
汇集各芯片及数码管的技术资料,绘制系统原理图。
D 绘制系统系统原理图(详细接线图)
3、电子时钟软件总体设计
3.1 系统定义
3.1.1 各种数据类型的定义
是定点数还是浮点数;是有符号数还是无符号数;是十六进制数还是BCD码。
本课题中:
时、分、秒采用BCD码,10毫秒计数采用16进制。
3.1.2 定义和分配存储空间、定义标志位
堆栈区安放在片内RAM的高端60H~7FH;
0区为工作寄存器;
1区为显示程序的工作寄存器;
为了调整走时的快慢,设置时间常数初值寄存器,变量名为SJH、SJL,地址为41H、40H。
3.3 模块设计
步骤一 建立入口条件和出口条件,明确模块功能
根据问题的定义,描述出各个输入变量的存放地址(入口条件)和各个输出变量的存放地址(出口条件)。
例如输入量是经A/D转换后的8个数字量,存入在以30H为首的数据块中,输出量是这8个数字量的平均值,存放在40H中。为方便起见,用R0存放输入量数据块首地址,用R1存放输出量地址。则入口条件为R0,出口条件为R1。
步骤二 绘制程序框图
步骤三 编写程序
编写程序要注意:
①一定要严格根据框图编程。
②一定要写注释。
③通过编译后,只表明语法没错,并不表明逻辑正确,一定要用不同的数据对模块进行测试。完全符合预定结果,方可确认通过。
④将该模块加到主控模块进行测试,如果与预定结果不符,必须查找原因,进行修改、调试。
⑤必须注意随时保存调试通过的副本。以便当新程序出现故障时,随时可返回前面的正确点重新开始。
3.4 编写设计说明书
由于设计时间紧迫,读者不要在完成全部设计后再编写设计说明书。而应在设计过程中逐步完成。一开始不可能设计出满意的主程序框图。因此,总体设计部分在完成全部设计任务后再写。而硬件部分和软件部分可以在设计过程同步完成。
三、课后小结
第15讲 电子打铃系统的设计与制作
教学目的:
1、熟悉51单片机最小应用系统的组成
2、了解51单片机应用系统程序的设计方法
3、掌握51单片机电子打铃系统的组成结构
4、完成单片机电子打铃系统的安装、硬件调试、软件调试和整机调试
重点、难点:
1、单片机的电子打铃系统的开发与实训
2、51单片机指令的功能及汇编语言综合程序设计
3、硬件和软件调试
教学方式和步骤:
一、复习:单片机指令系统
二、授课内容:
1、单片机最小应用系统的组成
1.1确定单片机为核心的控制系统
根据应用系统要求,并以性价比作参考, 设计实用够用的应用系统。
(1)单片机型号选取,如C51或S52
(2) 基本的配置部件:晶振/复位/电源等
1.2单片机接口电路
(1) 应用系统要求的基本输入接口和输出接口,键盘、显示、外接存储器等
(2)其它一些功能接口
功率接口、标准时钟电路、红外接收、A/D等
2、单片机电子打铃系统的组成
3、电子打铃系统的开发与实训模块
3.1 确定任务
明确设计目的;
分析系统功能指标;
编写设计任务书;
3.2 总体设计
项目调研;
方案论证;
CPU及关键器件选择;
绘制总体框图;
3.3 硬件、软件设计
(1)硬件设计:
尽可能选择典型电路,采用硬件移植技术,力求硬件电路标准化、模块化;
尽可能选择功能强的芯片,简化电路的设计;
系统的扩展与配置应充分考虑系统的功能要求,并留有余地;
在不影响系统功能的条件下,采用 “ 以软代硬 ” 方法;
可靠性与抗干扰设计;去耦滤波、合理布线、信号隔离等;
I/O的驱动能力;
系统的结构工艺。
(2)软件设计
软件设计是单片机系统设计中最重要的一环。进行软件编程时,可以采用汇编语言或高级语言(常为C语言)完成。 建议采用 Keil C51单片机调试软件, 在进行软件设计时,应该注意以下问题:
模块化结构;
软件抗干扰技术;
程序编写的规范性;
采用标注,提高程序可读性;
(3)硬件、软件调试
单片机开发工具应用:
程序编辑器和仿真器;
编程器;
计算机;
硬件电路的检查与故障诊断:
测试仪表检查(万用表、示波器、信号发生器等)
元件检测:利用万用表、示波器、信号发生器及其它测量仪器检测元件等
软件程序测试(利用仿真器编制测试程序进行故障判断与分析)
(4)系统总调、性能测定
系统总调:
测试样机装配后,进行系统的联机调试,优化系统硬件和软件的配置,使系统达到良好的工作状态。
性能测定:
利用各种测量设备进行系统参数测量,记录系统的各种性能指标参数,完成系统测试报告。
1) 单片机电子打铃电路板和元件检测
2) 单片机电子打铃电路硬件安装和调试
3) 单片机电子打铃系统软件设计和调试
4) 单片机电子打铃应用系统统调和总结
5) 整机装配与性能测试
整机装配与性能测试:
完成外壳等机械设计与装配任务;
按规定时间进行烤机及耐用性实验;
局部试机应用;
产品推广与市场开拓。
三、课后小结
第16讲 温度检测子项目
教学目的:
1、智能温度测控装置的组成和基本工作原理
2、AD 芯片(ADC0809)的结构、典型应用和相关硬件线路的设计和软件编程
3、DA 芯片(DAC0832)的结构、典型应用和相关硬件线路的设计和软件编程
4、单片机应用系统的输入通道硬件线路设计一温度检测子项目
5、单片机应用系统的输出通道硬件线路设计一温度控制子项目
6、输入输出通道硬件线路设计的基本方法
重点、难点:
1、AD 芯片(ADC0809)的结构、典型应用和相关硬件线路的设计和软件编程
2、DA 芯片(DAC0832)的结构、典型应用和相关硬件线路的设计和软件编程
3、单片机应用系统的输入通道硬件线路设计一温度检测子项目
4、单片机应用系统的输出通道硬件线路设计一温度控制子项目
教学方式和步骤:
一、复习:单片机应用系统的设计方法
二、授课内容:
1、 A/D转换器的基本知识
1.1 概述
A/D 转换器用以实现模拟量向数字量的转换。 按转换原理可分为 4 种 : 计数式、 双积分式、逐次逼近式以及并行式 A/D 转换器。
逐次逼近式 A/D 转换器是一种速度较快 , 精度较高的转换器 , 其转换时间大约在几微秒到几百微秒之间。
逐次逼近式 A/D 转换器基本原理
1.2 A/D 转换器的主要技术指标
(1)分辨率
使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。
例如 :12 位 ADC 的分辨率就是 12 位,一个 10V 满刻度的 12 位 ADC 能分辨
输入电压变化最小是 : 10V × 1/212=2.4mV
(2)量化误差
(3)偏移误差
(4)满刻度误差
(5)线性度
(6)绝对精度
(7)转换速率
1.3 典型 A/D 转换器芯片 ADC0809 简介
ADC0809 是 8 位 A/D 转换器。分辨率 8 位,带 8 个模拟量输入通道,有通道地址译码锁存器,输出带三态数据锁存器。
ADC0809 与 8031 的中断方式 接口电路
这里将 ADC0809 作为一个外部扩展的并行 I/O 口 , 直接由 8031 的 P2.0 和 WR 脉冲进行启动。因而其端口地址为 0FEFFH 。用中断方式读取转换结果的数字量 , 模拟量输入通道选择端 ADD A、 ADD B、 ADD C 分别与 8031 的 P0.0、 P0.1、 P0.2 直接相连 , CLK 由 8031 的 ALE 提供。 其读取通道 0 转换后的数字量程序段如下 :
ORG 1000H
INADC: SETB IT1 ; INT1 设为边沿触发
SETB EA ; 开中断 INT1
SETB EX1
MOV DPTR, # 0FEFFH ; 端口地址送 DPTR
MOV A, # 00H ; 选择 0 通道输入
MOVX @DPTR, A ; 启动输入
…
ORG 0013H
AJMP PINT1
PINT1: …
MOV DPTR, # 0FEFFH ; 端口地址送 DPTR
MOVX A, @DPTR ; 读取 IN0 的转换结果
MOV 50H, A ; 存入 50H 单元
MOV A, # 00H
MOVX @DPTR, A ; 启动 A/D, IN0 通道输入并转换
RETI ; 返回
2、D/A转换器的基本知识
2.1 D/A 转换器的性能指标
(1) 分辨率。分辨率是 D/A 转换器对输入量变化敏感程度的描述 , 与输入数字量的位数有关。如果数字量的位数为 n, 则 D/A 转换器的分辨率为 2-n 。
(2) 建立时间。
(3) 接口形式。
DAC0832 外部引脚分布图
单极性输出电压电路
双极性输出电压电路
2.2 DAC0832 与 MCS - 51 的接口及应用
(1) 单缓冲方式
DAC0832 单缓冲方式接口电路
执行下面的几条指令就能完成一次 D/A 转换 :
MOV DPTR, # 7FFFH ; 指向 DAC0832
MOV A, # DATA ; 数字量装入 A
MOVX @DPTR, A ; 完成一次 D/A 输入与转换
(2) 双缓冲方式
(3) DAC0832 的简单应用实例
要求:编程实现从 Vout 端输出一个幅值为 5V ,频率 f=1KHZ 的反向锯齿波电压
START: MOV A,#00H
MOV DPTR,#8000H ;0832 的地址送 DPTR
LOOP: MOVX @DPTR, A ; 送数据至 0832
CALL DELAY ; 1ms 延时
INC A
SJMP L00P
DELAY: MOV R2,#250
HERE: DJNZ R2,HERE
3、智能温度测控装置的基本知识
4、温度检测子项目
温度检测子项目即单片机应用系统的输入通道
输入通道的设计包括以下几个内容 :
(1)传感器选择
AD590 二端式集成温度 - 电流传感器 . 它的测温范围为 -50~+150 °C, 满刻度误差范围为 0.3 °C, 完全适用于本例对水温测量的要求 .
(2)信号转化与放大电路
系统前向通道图中三端稳压器 AD581 提供 10v 标准电压 , 它与运算放大器 OP-07 和电阻 r1,vr1,r2,vr2 组成信号转换与放大电路 , 将 35 ~95 ° C 温度转换成 0~5v 的电压信号 .
(3) A/D 转化器
由于前向通道总误差为 0.83%, 系统对信号采集的速度要求不高 , 故可以采用价格低廉的 8 位逐次逼近型 A/D 转化器 ADC0804.
输入通道硬件电路的设计与制作
(1) 放大器电阻的计算 :
按照测量范围要求 , 信号转化与放大电路应将 35~95 ° C 温度转换成 0~5v 的电压信号 , 查手册计算得到
r1=30k Ω , vr1=5k Ω ;
r2=81k Ω , vr2=5k Ω .
(2) A/D 转换器时钟电路参数计算 :
ADC0804 片内有时钟电路 , 其振荡频率可按下式估算 :
fCLK=1/1.1RC
其中 R=10k Ω ,C=150pF.
此时 ,A/D 转化时间约为 103~114us.
(3)硬件电路制作
5、温度控制子项目
温度控制子项目主要是输出通道的设计
本例采用脉宽调制输出控制法
三、课后小结
第17讲 温度控制子项目
教学目的:
1、智能温度测控装置的组成和基本工作原理
2、单片机应用系统的输入温度检测子项目
3、输入输出通道硬件线路设计的基本方法
重点、难点:
1、温度传感器18B20的结构、技术参数
2、典型应用和相关硬件线路的设计和软件编程
教学方式和步骤:
一、复习:单片机应用系统的设计方法
二、授课内容:串行温度传感器DS18B20
1 DALLAS公司DS18B20基本参数
DALLAS公司生产的单线数字温度传感器DS18B20、 DS1822,外形如图5.8所示,支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,新的产品支持3V~5.5V的电压范围, DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,是经济型产品。 DS18B20内部结构主要由四部分组成:位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。光刻ROM中的位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
这是12位转化后得到的12位数据,存储在18B20的两个8比特(位)的RAM中,Bit0是最低位,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
两字节12位温度格式
温度值位指示 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
温度值的低字节 | 23 | 22 | 21 | 20 | 2-1 | 2-2 | 2-3 | 2-4 |
温度值位指示 | Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 |
温度值的高字节 | S | S | S | S | S | 26 | 25 | 24 |
两字节温度与十进制温度转换关系
温度值/℃ | 双字节温度(二进制) | 双字节温度(十六进制) |
+125 | 0000 0111 1101 0000 | 07D0H |
+85.5 | 0000 0101 0101 1000 | 0558H |
+25.0625 | 0000 0001 1001 0001 | 0191H |
+10.125 | 0000 0000 1010 0010 | 00A2H |
0 | 0000 0000 0000 0000 | 0000H |
-1.5 | 1111 1111 1110 1000 | FFE8H |
-10.125 | 1111 1111 0101 1110 | FF5EH |
-25.0625 | 1111 1111 0110 1111 | FE6FH |
-55 | 1111 1100 1001 0000 | FC90H |
R1 | R0 | 分辨率 | 温度最大转换时间 |
0 | 0 | 9位 | 93.75ms |
0 | 1 | 10位 | 187.5ms |
1 | 0 | 11位 | 375ms |
1 | 1 | 12位 | 750ms |
寄存器内容 | 字节地址 |
温度低8位 | 0 |
温度高8位 | 1 |
高温限值 | 2 |
低温限值 | 3 |
配置寄存器 | 4 |
保留 | 5 |
计数剩余值 | 6 |
每度计数值 | 7 |
CRC校验 | 8 |
2温度传感器DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。由于本节技术复杂性,对一般读者DS18B20内容只作阅读。
(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(3)连接DS1820的总线电缆是有长度的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
温度传感器DS18B20指令(命令)说明
命令功能 | 指令代码 | 功能说明 |
读ROM | 33H | 读DS18B20中的位光刻ROM序列号 |
启动转换 | 44H | 启动温度转换,结果存入内部高速暂存器RAM中 |
写温限值 | 4EH | 向内部字节地址2和3 中写入上下限温度值 |
匹配ROM | 55H | 发出命令后,还发送位ROM序列号寻找对应号码的18B20 |
读供电 | B4H | 读电源供给方式: 18B20发0为寄生供电,1为外接供电 |
读取温度 | BEH | 读取温度寄存器等9字节的内容 |
跳过ROM | CCH | 单片18B20时,跳过读序列号操作,直接发温度转换 |
报警搜索 | ECH | 执行后,当温度超过上下限值时18B20才作响应 |
搜索ROM | F0H | 搜索同一条线上挂接有几个18B20,识别ROM |
当用P1.0和DS18B20相连接时参考程序如下。
DQ EQU P1.0
ORG 0000H
AJMP MAIN
ORG 1000H
MAIN: LCALL INIT_18B20 ;调复位子程序
MOV A,#0CCH
LCALL WRITE_18B20 ; 跳过读序列号操作
MOV A,#4EH ;写温度命令
LCALL WRITE_18B20
MOV A, #TH ;写入上限温度值
LCALL WRITE_18B20
MOV A,#TL
LCALL WRITE_18B20 ;写入下限温度值
MOV A, CONFIG12
LCALL WRITE_18B20 ;设为12位转换精度
MAIN1: LCALL INIT_18B20 ;复位子程序
LCALL RD_TEMPER ;读温度
LCALL LDVV ;调数据处理子程序,简写程序
LCALL DISPLAY ;调显示子程序, 省略程序
LJMP MAIN1
;**********DS18B20复位程序*****************
INIT_18B20: MOV R7 #06H ;复位时查询次数
LOP0: SETB DQ ;18B20输入端
MOV R0,#0FBH
CLR DQ
TSR1: DJNZ R0,TSR1 ;维持DQ低电平480μs~960μs
SETB DQ
MOV R0,#25H
TSR2: DJNZ R0,TSR2
JNB DQ ,TSR3 ;查看18B20把DQ拉低否
DJNZ R7,LOP0 ;未拉低则延时再查,6次结束
SETB P2.0 ;延时期未能查到18B20
SJMP TSR4
TSR3: SETB FLAG1 ;置标志位FLAG1,表明DS18B20存在
CLR P2.0 ;二极管指示
TSR5: MOV R0,#06BH
TSR6: DJNZ R0,TSR6 ;延时后结束
CLR C
ORL C, DQ
LOP1;JC TSR4 ;确认一次
AJMP TSR7
TSR4: CLR FLAG1 ;未能查到
SETB P2.0 ;取消指示灯
SETB DQ ;表明不存在
TSR7: RET
;*****************读转换后的温度值****************
RD_TEMPER:
SETB DQ
LCALL INIT_18B20
JB FLAG1,TSS2
RET ;若不存在则返回
TSS2: MOV A,#0CCH ;跳过ROM
LCALL WRITE_18B20
MOV A,#44H ;发出温度转换命令
LCALL WRITE_18B20
LCALL DELAY ;调延时子程序500ms
LCALL INIT_18B20 ;调复位子程序
MOV A,#0CCH ;跳过ROM
LCALL WRITE_18B20
MOV A,#0BEH ;发出读温度换命令
LCALL WRITE_18B20
LCALL READ2_18B20 ;读两个字节的温度
RET
;***************写DS18B20程序************
WRITE_18B20:
MOV R2,#8
SETB DQ
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$ ;写前保持15μs低电平
RRC A
MOV DQ,C ;写入一位
MOV R3,#30
DJNZ R3,$ ;等待18B20读入
SETB DQ
DJNZ R2,WR1 ;8位写完否
SETB DQ ;写完结束
RET
;***********读18B20程序,读出两个字节的温度*********
READ2_18B20:
MOV R4,#2 ;低位存在29H,高位存在28H
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR DQ ;低电平10μs
NOP
NOP
NOP
SETB DQ ;高电平延时
MOV R3,#7
DJNZ R3,$
MOV C,DQ ;读入一位温度到C中
MOV R3,#30
DJNZ R3,$
RRC A
DJNZ R2,RE01 ;共读8位
MOV @R1,A ;保存
DEC R1 ;保存下一数据单元地址
DJNZ R4,RE00 ;读第二字节
RET
;************读出的温度进行数据转换**************
LDVV: MOV A,29H ; 看成温度大于0
MOV C,28H.0 ;将28H中的最低位移入C
RRC A
MOV C,28H.1
RRC A
MOV C,28H.2
RRC A
MOV C,28H.3
RRC A
MOV 30H,A ;整数温度结果存30H单元
JNC LOP2 ;小数点后面的数四舍五入
INC 30H
LOP2:RET
第3讲 智能温度测控装置综合项目
教学目的:
1、单片机应用系统的软硬件设计的基本方法
2、单片机应用系统开发的一般流程
3、智能温度测控装置的硬件设计和调试
4、智能温度测控装置的软件设计和调试
5、了解常见控制算法
6、温度测控装置的仿真和软硬件联调
重点、难点:
1、智能温度测控装置的硬件设计和调试
2、智能温度测控装置的软件设计和调试
3、温度测控装置的仿真和软硬件联调
教学方式和步骤:
一、复习: 智能温度测控装置温度检测子项目和温度控制子项目
二、授课内容:
1、设计任务与要求
1.1 基本要求
一升水由 1kw 的电炉加热 , 要求水温可以在一定范围内由人工设定 , 并能在环境温度降低时实现自动调整 , 以保持设的的温度基本不变 .
1.2 主要性能指标
(1)温度设定范围 :40~90 ℃ , 最小区分度为 1
(2)控制精度 : 温度控制的静态误差 <1 ℃
(3)用十进制数码显示实际水温 .
(4)能打印实际测量值
1.3 扩展功能
(1)具有通信能力
(2)采用适当的控制方法减小系统的调节时间和超调量
(3)温度控制的静态误差 <0.2 ℃
(4)能自动显示水温随时间变化的曲线
2、总体论证
2.1 总体方案确定
(1)控制方案选择 :
A 输出开关量控制
B 比例控制 (P 控制 )
C 比例积分控制 (PI 控制 )
D 比例积分加微分控制 (PID 控制 )
(2)系统组成 :
本例将单片机为核心构建控制应用系统
2.2 确定系统功能 , 性能指标
本系统具备的功能 :
(1)可以进行温度设定 , 并自动调节水温
(2)可以调整 PID 控制参数 , 满足不同的要求
(3)可以实时显示给定温度与水温实测值
(4)可以打印给定温度和水温实测值
本系统主要性能指标如下 :
(1)温度设定范围 :40~90 ℃ , 最小区分度为 1 ℃
(2)温度控制静态误差 <1 ℃
(3)双 3 位 LED 数码管显示
(4)采用微型打印机打印
3、系统设计
3.1 软 , 硬件功能划分
(1)速度估算
经过计算得到 : 在不考虑容器热容量和环境温度影响的情况下 , 用 1kw 电炉加热 1 升水并使水温上升 1k 所需的时间为 4.186s, 由此可见 , 对于指令执行时间极其短的单片机系统来说 , 控制速度几乎没有任何 .
(2)软 , 硬件功能划分
硬件的主要功能是温度信号的传感 , 放大 ,A/D 转换及输出信号的功率放大 .
软件的主要功能是 PID 运算 , 输入信号滤波 , 大部分控制过程 .
3.2 外围硬件线路设计
3.3 硬件电路的调试
(1)单片机基本系统调试
(2)人机通道调试
(3)前向通道调试
(4)后向通道调试
3.3 软件设计与开发
(1)确定输入 / 输出关系 , 建立数学模型 , 寻找合适算法
(2)划分程序模块 , 编写程序流程图
(3) 编写程序并翻译成目标程序
(4) 软件调试
4、软件调试
(1)测试程序输入条件或设定程序输入条件
(2)以单步,断点或跟踪方式运行程序 .
(3)检查程序运行结果
(4)运行结果不正确时查找原因 , 修改程序 , 重复上述过程 .
三、课后小结