单片机原理及应用长春工业大学人文信息学院Word格式.docx
《单片机原理及应用长春工业大学人文信息学院Word格式.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用长春工业大学人文信息学院Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
4)调试,采用仿真器进行软硬件检测。
5)将程序固化到程序存储器,完成设计。
6)撰写课程设计报告书。
统一用A4纸书写,设计报告统一打印封面,封面包括(实践课程名称、设计题目、指导教师、系别、班级、姓名、成绩、日期),设计报告内容包括所选题目要求、硬件原理图及说明、软件流程图、程序清单(含注释)、调试过程、设计总结、心得等。
字数不少于3000字。
1.3教学安排
课程设计一般分为三个阶段:
1)预设计阶段:
包括教师授课、方案论证、完成电路设计
2)安装调试阶段:
包括组装电路、硬件调试和软件调试,完成设计任务。
3)撰写设计报告阶段:
撰写设计报告,考核并评定成绩。
第二章单片机综合应用的基础知识
2.1MCS-51单片机的设计思路和步骤
一个单片机的控制系统在运行时,一般情况下都需要和使用它的人之间交换信息。
单片机运行的状况要有指示或显示,便于人掌握运行情况,同时人也要给单片机系统输入适当的参数,控制或改变其运行。
单片机应用系统一般都包含显示和键盘电路(除特别简单的应用),在设计制作时应首先做好显示电路,便于后面的工作展开,如键盘电路是否正确可以通过显示电路表现出来。
硬件制作和软件互相配合,程序编制也应跟硬件制作同步,即某部分电路制作好以后编写相应的程序对其操作,看是否达到设想的要求。
单片机应用系统的一般设计步骤如下:
1.制作最小应用系统,也即单片机能工作的最基本的必要条件。
包括电源、时钟电路、复位电路、程序存储器选择四各方面。
2.制作显示电路。
状态指示灯和LED/LCD显示电路,根据系统工作的性能要求确定显示电路的形式,分配资源并要考虑后面制作对资源的要求,综合考虑。
编写相应的控制或显示程序。
3.制作键盘电路。
行列式键盘或个独立式按键接口电路。
根据系统的实际情况选择自己的键盘电路,如果是系统要求的按键比较多,或要求直接能输入数字、字符,一般选用行列式键盘,其它情况下一般用独立式按键,并且可以采用复合功能的方法减少键的数量。
同样硬件的制作也要和软件同步,特别要和显示程序结合起来。
4.其它功能电路设计制作。
包括输出的驱动电路、数字量输入的缓冲整形电路、A/D、D/A转换电路、模拟量的变换电路等。
需要根据它们之间内在关系确定制作的前后顺序,同步地编写控制程序。
合理使用定时器,定时器也可以看作是硬件的资源,由于数量有限,需合理配置满足系统要求。
2.1.1MCS-51单片机应用程序的一般结构
ORG0000H
LJMPSETUP;
起始程序
……;
中断服务程序入口地址
……
ORG0030H
SETUP:
初始化部分
……
MAIN:
……;
主程序
LJMPMAIN
……;
子程序和中断服务程序
END
汇编语言的程序结构在软件设计过程中非常重要,程序结构的错误将导致系统不能运行,因此在编写程序过程中应始终保持程序结构的完整性。
程序的开头一般都是一句跳转语句,要跳过中断服务入口地址。
初始化部分一般包括系统运行的起始参数和运行状态标志的设置,内部中断源的设置等。
初始化程序还应考虑堆栈的设置,一般应将堆栈设置在数据缓冲区,跳过工作寄存器区和位寻址区。
主程序一般是显示程序和键盘程序(键盘用程序控制扫描方式时)。
主程序是循环程序。
程序内容上的错误是容易检查,通过运行的状态和结果可以判断出问题所在,而结构的错误往往较难判断,最好在编写过程中注意。
2.1.2位信息的使用
在实际的单片机应用程序的设计中,程序比我们实验上设计的程序要复杂得多,不是课堂上讲的顺序程序和循环程序,更多的是分支程序,分支程序的设计要根据某一状态确定程序执行的分支。
在程序设计中大多数要编程者人为分配位地址,来存放这些状态信息。
位信息的使用需要注意以下几个方面:
1.位信息只能用来存放两个相反的状态,对于多状态的情况需要用多个位信息的组合表示。
如:
表示灯的亮灭,开关的闭合都可以用一个位信息来表示,而要表示红灯、绿灯和黄灯量的状态,一个位信息显然无法存放,我们可以用两个位信息的组合来表示,BIT1=1时,BIT2任意值表示红灯亮、绿灯灭、黄灯灭的状态;
BIT1=0时,BIT2=0表示红灯灭、绿灯亮、黄灯灭的状态;
BIT1=0时,BIT2=1表示红灯灭、绿灯灭、黄灯亮的状态;
2.位信息在使用前都必须初始化,在初始化程序中确定其初始的状态值以及所表示的状态。
一般在初始化时都设为0(可以根据编程者的习惯任意设定),在需要改变时用指令切换。
3.位信息的修改一般都是“双次”的,“双次”的意思是某一位信息被改变了,在程序的其它地方一定有使其恢复的操作。
只有极个别情况下不是这样,如系统出现某一种特殊状态,不允许继续运行程序,继续运行可能造成控制系统设备或人员的损伤。
这时系统待外部检查没有问题了,从上电开始重新运行。
4.位信息的使用在很多情况下是和定时器配合使用,编写多延时程序;
或者和键盘程序配合使用,实现按键的复合功能。
2.1.3多延时程序设计
在单片机的实践应用中,经常遇到多个同时(三个以上)与延时有关的程序设计,我们把这样的程序称为多延时任务程序。
多延时任务程序从任务间的关系上分为两类:
一是各延时任务间无时间关联,称为简单多延时任务程序。
二是延时任务程序间有时间关联,延时任务的执行同时启动其它一个或多个延时任务操作,或者延时任务执行的同时启动自己的取消操作延时,这类多任务程序称为复合多延时任务程序。
由于单片机内部的定时器数量总是有限的,如MCS—51系列单片机,内部只有2~3个定时器。
这时就需要用位信息和定时器配合设计多延时程序。
方法步骤如下:
首先,为每个时间任务分配一个计时标志(用位寻址区的位存放,1计时,0不计时)、计时单元(一般用内部RAM)和执行标志(1有效,0撤消)。
其次,找出所有时间任务的公倍时间值,这个时间值要小于单片机系统的定时器能产生的最大定时值,定时值时间越长越好,可以减少定时器中断的次数。
第三,分配一个定时器反复产生确定的公倍时间。
第四,在需要执行某一时间任务时,置位该任务的计时标志并清除其计时单元。
该操作可能在系统初始化时执行,也可在主程序中,或者是某一延时任务动作时执行,视具体的任务间关系而定。
在定时器的服务程序中,判断这些任务的计时标志是否为1,为0不计时,去判断下一任务的标志。
如果为1,相应计时单元加1,并和设定的值比较,达到设定值时,置该任务的执行标志为1,同时清除其计时标志。
最后,主程序或其它程序检查到某一任务执行标志时执行相应的操作。
例:
用一个定时器输出多路矩形波
在P1.0和P1.1引脚输出图3所示的多路矩形波(输出更多路信号,方法类似)。
将要输出的信号分解成若干个延时任务。
P1.0输出信号可以分成两个延时任务,TASK1延时2ms使P1.0输出低电平,TASK2延时3ms使P1.0输出高电平,且TASK1和TASK2相互交替启动对方延时。
同样可以把P1.1输出分解成延时任务TASK3和TASK4。
显然这4个延时任务的最大公倍延时时间为1ms。
延时任务
TASK1
TASK2
TASK3
TASK4
计时标志
00H
01H
02H
03H
计时单元
70H
71H
72H
73H
由于4个延时任务的操作都是简单的操作,可以直接放在定时器的服务程序中执行,只需为每个任务分配一个计时标志和一个计时单元,如表1所示。
在初始化程序中将定时器T0设置为方式1定时模式,定时1ms,所有计时单元清为0,位地址00H、02H置为1,位地址01H、03H置为0,P1.0置为1,P1.1置为0,波形的输出在T0的中断服务程序中完成。
2.2单片机常用硬件接口电路和控制程序设计
2.2.1显示电路设计
单片机应用系统的显示电路一般有三种形式的显示电路:
LED指示灯、LED数码管、LCD(液晶)。
1.LED指示灯一般被用来表示系统运行的状态,数量不多可以单片机的I/O直接控制。
LED指示灯发光的条件是两端加正向电压1.8V左右,流过电流大于4毫安,小于10毫安,单片机系统的工作电压一般都是5V,不能直接用来驱动,要在LED回路中串接限流电阻,如下图所示:
单片机口驱动可以用高电平或者低电平,电路分别如下(以AT89C51为例):
高电平驱动由于单片机I/O输出拉电流较小,不足以驱动LED,需要接一个上拉电阻。
一般情况采用低电平驱动,如图B所示。
LED指示灯的程序控制很简单,用内部RAM操作指令对口操作。
(略)如果系统需要的状态指示灯非常多,就不能直接用I/O驱动了,需要将LED指示灯设计成LED数码管形式来控制,后面介绍。
2.LED数码管在单片机应用系统中经常采用,其结构如下图所示:
a、b、c、d、e、f、g、h8个引脚为数码管的段引脚,其余两个引脚内部是相通的,为数码管的位引脚,LED数码管内部是由8个LED二极管,根据内部结构的不同分为共阳型和共阴型。
从数码管的结构上看需要在其位和段加上适当的信号,使二极管两端有正向电压,流过的电流达到4毫安以上。
数码管的显示电路分为静态显示电路和动态显示电路,静态显示电路控制的方式与LED发光类似,用一个8位的I/O口作为段控制信号,将公共端接地或电源即可,在实际应用中比较少,略去不讲。
常用的是动态显示方式,如下图所示:
将所有数码管相同的段连接在一起用一个8位的I/O口去控制,每个数码管的公共端用一位的I/O口控制开关使其接地或电源,如下图为共阳型数码管的动态显示电路。
静态显示原理
P0口作为数码管段控制口,P2.0~P2.3为位控制口,控制三极管导通使公共端接到电源,控制三极管截止关断。
数码管动态扫描电路的工作原理是:
循环显示,动态扫描,视觉暂留。
利用人眼的视觉暂留特性,在某一时刻只控制一个数码管显示,保留很短时间,再控制另一数码管显示,依次显示,到最后一个再返回到第一个,如此反复进行,当扫描的速度达到一定值时,人眼就感觉不到数码管熄灭,看到所有数码管都稳定显示。
一个有实际意义的数码管动态扫描程序,汇编语言编写需要用到查表指令,设计查表程序。
具体程序在实验和课堂讲过,不再重复。
动态显示原理图
前面曾提到有许多LED状态指示时可以设计成数码管的电路形式,实际上就是把LED状态指示灯人为设计成数码管的形式,用数码管的动态显示方式来控制数码管的笔画,如上图虚线框内,只要将二极管不相连的管脚分别连到数码管的段上,在用一个位控制公共端,和前面的电路构成有5个数码管的动态显示电路,编写程序(最后数码管不需查表,直接输出控制即可)。
3.LCD显示电路
要求高的场合可以采用LCD液晶显示器,LCD液晶显示器有数码型和字符型,显示器一般自带驱动模块,使用者按照驱动接口要求用单片机的I/O口去控制。
批量大的产品可以定做。
2.2.2键盘接口电路
键盘是单片机应用系统基础的电路之一,用于人和单片机系统的对话,通过键的操作控制系统的执行或获取系统的运行状态等,一般是和显示电路一起构成完整的人机交互系统。
单片机常用的键盘接口电路有两类:
行列式键盘和独立式按键。
由于按键的操作都是通过机械的触点实现,存在着抖动现象,影响按键操作,因此键盘电路都需要有消抖动的措施,消抖动方法有:
硬件消抖动和软件消抖动。
硬件主要采用滤波电路、单稳态电路、双稳态电路等。
软件主要采用软件延时。
(1)行列式键盘(以4×
4键盘为例)
行列式键盘工作原理是检查行列交叉点是否短路,从而确定键是否按下。
如何确定是否有键按下,以及区分是那一个键按下可以分三步操作。
第一步将行线作为输出线,列线为输入线,在所有行线输出上0,读列线。
如果没有键按下,读进来的都是1,如果有键按下,则对应的列线为0,椐此可以判断是否有键按下。
D7
D6
D5
D4
D3
D2
D1
D0
r7
r6
r5
r4
X
列线有效
行线无效
判断读到的值,根据高4位数据,只要其中有0,就说明有键按下,但要确定哪个键按下还不能,需要进行第二步。
第二步将列线作为输出线,行线为输入线,在所有列线输出上0,读行线,读进来的数据行线有效。
r3
r2
r1
r0
列线无效
行线有效
显然有键按下的行线上读到的是0,其余行线读的值为1。
第三步综合前两步的结果,把两次有效的数据放在某个单元空间X中,可以根据空间内的值确定某个键按下(只考虑有一个按下的情况)。
如两次读到的r4,r0为0,其余位为1,则可以确定是“0”号键按下,这时X中的值为EEH。
下表为键号与读到数据的对应关系。
键值
EEH
DEH
BEH
7EH
EDH
DDH
BDH
7DH
键号
1
2
3
4
5
6
7
EBH
DBH
BBH
7BH
E7H
D7H
B7H
77H
8
9
A
B
C
D
E
F
键盘程序设计一般有三种控制扫描方法:
第一,程序控制扫描。
就是将键盘程序作为主程序的一部分,在程序运行时循环检测。
程序结构思路简单易理解,存在着两个缺陷,一是不能及时响应键的操作,因为只有在程序执行到键盘程序时按键才会被响应。
在没有按键操作时也执行键盘扫描程序,浪费CPU时间。
但这种响应的及时性和浪费时间也是相对的。
对一般的应用没有多大影响。
第二,定时控制扫描。
用定时器控制扫描的周期,每隔一段时间检测一次键盘,同样存在着响应的及时性和浪费CPU时间,并且占用了一个定时器,一般很少采用。
第三,中断控制扫描。
在硬件上将所有的按键操作都转换成外部中断的请求信号,然后在中断服务程序中执行键盘程序。
克服了其他两种方法的缺陷,但要占用一个外部中断资源。
在具体应用中采用那种控制方式可以根据系统对键盘的综合要求确定。
下面介绍程序扫描的框图:
(2)独立式按键接口电路
在按键需要不多的系统一般设计独立式按键接口电路作为系统的键盘电路。
电路结构简单,如下图所示:
没有键按下时,4个端口都被上拉到高电平,有键按下时,对应的端口被拉为低电平,这样键的动作被转换成电平的变化,通过检测4个输入端口电平的变化就可确定哪个键按下。
本电路还通过二极管与门电路将按键转变成中断请求信号,加到P3.2外部中断0,用电容滤波消抖动。
程序设计按编写外中断应用程序的步骤:
初始化、入口地址、服务程序。
按键个数根据实际情况配置,也可以将每个按键功能复用,减少键的数量,但程序结构也相对复杂。
可以综合考虑。
2.2.3常用输入/输出转换电路
在单片机在应用中,单片机需要输出控制动作执行,如继电器、声响这边设备等,由于单片机的带负载能力的限制,不能直接驱动。
这样在单片机和被驱动的设备之间就需要驱动的转换电路(也称为输出缓冲或输出接口电路)。
输入情况也类似,外部的信号也不能直接加在单片机引脚上,也需要通过转换电路。
下面为常用的输入/输出接口电路。
2.2.4A/D接口电路
在单片机应用系统中经常需要对模拟量进行检测或控制,模拟量检测一般采用A/D转换或V/F转换。
A/D转换器的种类很多,根据内部转换原理的不同,主要可分为比较型和积分型两种。
比较型:
比较型A/D转换属于直接的A/D转换,经过几次的逐次比较逼近就可以直接得到A/D转换的结果,转换的速度快,精度高,是目前使用最为广泛的一种A/D转换。
这种原理典型的芯片有ADC0809。
积分型:
积分型的A/D转换是一种间接的A/D转换,经过两次积分的过程得到A/D转换的结果,这种A/D转换的时间长,但精度高,抗干扰能力强,适用于速度要求不高且有较多干扰但精度要求较高的场合。
典型的芯片有ICL7109。
有些场合,还可以用一种特殊的模拟量到数字量的转换的形式——V/F转换,即将模拟电压转换成对应的频率信号,然后对频率信号的频率进行测量来达到测量模拟电压的目的。
(1)ADC0809及其接口电路
ADC0809是8通道8位CMOS逐次逼近式A/D转换器,是目前国内应用最广泛的8位通用并行A/D芯片。
右图为该芯片内部原理结构框图。
主要性能指标
1)分辨率为8位。
2)单电源+5V供电,参考电压由外部提供,典型值为+5V。
3)具有锁存控制的8路模拟选通开关。
4)具有可锁存三态输出,输出电平与TTL电平兼容。
5)功耗为15mW。
6)转换时间取决于芯片的时钟,是芯片时钟周期的64倍。
时钟的频率范围为10~1280KHz。
1、引脚功能和典型的连接电路
下图为ADC0809引脚图和时序图,引脚功能说明如下:
1)IN0~IN7:
8路模拟信号输入端。
2)A、B、C:
三位地址输入端。
8路模拟信号的选择由A、B、C决定。
A为低位,C为高位,与单片机的I/O口相连,单片机通过I/O口输出000~111来选择IN0~IN7中某一路通道的模拟信号进行转换。
3)CLK:
时钟输入端。
这是A/D转换器的工作基准,时钟频率高,转换的速度就快。
时钟频率范围10K~1280KHz,通常由89S51的ALE端直接或者经分频后提供。
4)D0~D7:
A/D转换后的8位数字量的输出端。
5)OE:
A/D转换结果输出允许控制端。
高电平有效,高电平时允许将A/D转换的结果经由D0~D7端输出。
通常由单片机的某一I/O直接控制。
6)ALE:
地址锁存允许控制端。
当ADC0809的ALE得到有效控制信号时,将当前转换的通道地址锁存。
7)START:
A/D转换启动信号。
当START端输入一个正脉冲时,立即启动进行A/D转换。
8)EOC:
A/D转换结束信号输出端。
当启动A/D转换后,EOC输出低电平;
转换结束后,EOC输出高电平,表示可以读取A/D转换的结果。
通常对该信号采用查询的方式,一旦是高电平则读取A/D转换的结果:
也可以将该信号取反后与单片机的外中断相连,转换结束可引发单片机中断,在中断服务程序中读取A/D转换的结果。
9)UREF(+)、UREF(-):
正负参考电压输入端。
通常是+5V,即UREF(+)接电源(+5V),UREF(-)接地(GND),这时能够转换的是0~5V的模拟电压。
10)Vcc:
芯片电源正端(+5V)。
GND:
电源负端,接地。
下图为ADC0809与89S51的实用连接电路。
与以往的ADC0809接口电路不同,一般的接口电路都是把ADC0809扩展成并行的I/O口,用外RAM的指令对其进行操作,本书根据芯片工作的时序要求设计接口电路,直接用单片机的基本I/O口进行操作,用内RAM的操作指令进行控制,有实用意义,读者可以和其它参考书上的应用比较。
图中A、B、C直接接地,选择模拟通道0。
根据图8-9中的时序图,ADC0809转换过程分为以下几步:
(1)通道选择。
用单片机I/O口输出通道信息控制A、B、C。
只有一路模拟信号需要转换时,可以将通道地址A、B、C接固定的电平(高电平或低电平),选择某一固定通道,如图中选择0通道。
(2)所存通道地址(ALE)和启动A/D转换开始(START)。
可以按照时序图的顺序,先控制地址所存,后启动。
也可以用一个信号同时控制,后一种用的较多。
(3)检测A/D转换是否结束。
A/D转换开始后约10µ
s,EOC信号变低,直到转换结束再变高。
可以通过检测EOC判断A/D转换是否结束,也可以利用EOC信号的变化触发中断。
(4)读A/D转换结果。
检测到转换结束标志,使OE有效,将数据读入单片机内部。
将模拟量转换为数字量还可以采用V/F转换,来实现测量。
常用的V/F转换元器件是LM331、VFC32等。
下图是LM331典型应用电路。
LM331的性能特点:
1)最大线性度为0.01%;
2)双电源或单电源工作。
单电源可工作于5V;
3)脉冲输出为集电极开路形式;
4)满量程频率范围:
1Hz~100kHz;
图中,在电压的输入端7脚上增加了由R1、C1组成的低通滤波电路;
在CL、RL原接地端增加了偏移调节电路;
在2脚上增加了一个可调电阻,用来对基准电流进行调节,以校正输出频率;
由于3脚输出端是集电极开路输出,为了使输出的信号能被单片机接收,在输出端3脚上接有一个上拉电阻。
2.2.5D/A接口电路
D/A转换是单片机测控系统控制量输出的典型的接口,如果实际被控对象要求的控制量是模拟量,而单片机本身不可能直接输出模拟量,则由单片机根据具体的要求,输出一定的数字量,再转换成对应的模拟量。
这种将数字量转换成模拟量的过程称之为D/A转换,实现D/A转换的器件称之为D/A转换器。
1、DAC0832及其接口电路
DAC0832是8位的并行D/A转换器,是目前应用最为广泛的一种D/A芯片。
2.主要性能指标
1)分辨率:
8位。
2)输出稳定时间:
1μs
3)功耗:
20Mw
4)工作电源:
+5V~+15V
5)非线性误差:
0.20%
6)工作方式:
直通、单缓冲、双缓冲
3.引脚功能
右图为DAC0832引脚图,引脚功能说明如下:
1)DI0~DI7:
8位数据输入端。
2)ILE:
输入数据允许锁存。
3)