单片机及智能仪器实验指导书.docx
《单片机及智能仪器实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机及智能仪器实验指导书.docx(19页珍藏版)》请在冰豆网上搜索。
单片机及智能仪器实验指导书
《单片机及智能仪器》
实验指导书
杨明亮梁应选编
适应专业:
测控技术与仪器
陕西理工学院机械工程学院
2012年4月
前言
《单片机及智能仪器》是一门实践性很强的课程。
为了使学生更好的理解和掌握这些知识,灵活应用单片机,使学生熟悉单片机实用技术的开发过程,提高汇编语言的编写能力,提高对汇编语言的编辑、汇编、调试运行等技能,设置了软件类、硬件类和综合应用类实验,通过上机及接口实验,熟练地掌握单片机的编程结构、工作模式、指令系统;学会汇编语言程序设计;掌握微机输入/输出接口的基本概念,主要模式和基本工作方法,掌握并行和串行接口的原理,学会并行输入/输出口的扩展,并能够进行基本的接口设计,提高其实践能力;并培养学生实事求是、严谨的科学作风和良好的实验习惯,为今后课程学习以及开发应用打下基础。
开设“单片机综合实验”的目的,是总结几年来单片机教学中,用购买的实验箱,虽然功能很齐全,但基本上是黑箱结构,对初学者,不是从最简单的最小系统开始,一步步深入,做完实验后,效果很差,大部分学生对单片机的系统没有感性认识,最后在课程设计和毕业设计中,连最简单的单片机最小系统都不清楚。
因此该实验就是想让学生从最简单的系统开始,自己搭建,编程,调试和固化程序,循序渐进,逐步深入。
本实验指导书是针对测仪专业《单片机与智能仪器》课程实验设置的,两个2学时的验证实验和一个6学时的综合实验。
实验一:
LED显示实验
实验学时:
2
实验类型:
验证
实验要求:
必做
一、实验目的:
1、了解MCS51系列单片机汇编语言的设计和调试方法;
2、掌握8032单片机通过8155扩展I/O接口时,LED显示的连接方法和编程方法。
3、了解LED动态显示原理及汇编语言编程。
二、实验内容:
1、观察单片机实验系统(实验箱)结构与原理;
2、看懂附录1中的程序,将程序输入并调试;编译、调试、运行该程序,显示结果应为“123456”;
3、修改该程序,让LED交替显示“123456”和“654321”,注意交替变化中间要有明显的保持时间;也可以显示任意两个六位数字或字符(用七断数码管可以显示的字符,如“H”、“L”等)。
三、实验原理:
本次实验采用启东计算机总厂生产的“DICE系列单片机实验系统”,该系统运行的基本原理与一般的单片机系统是一样的,但作为实验系统,它的程序存储器里面存储的是监控管理程序,实验所编写的程序,在计算机中进行调试,编译,生成可执行文件,然后将实验程序存入实验系统中的扩展数据存储区。
所以实验程序在断电后就从实验箱中消失了。
在DICE系列单片机实验系统中,用8155芯片扩展I/O口,显示用LED数码管,系统分配给显示部分的端口:
8155A口,连LED显示的字位口,地址为FF21H;8155B口,连LED显示的字形口,地址为FF22H。
四、实验组织运行:
采用集中授课形式,分组进行实验。
五、实验条件:
1、单片机实验系统一套;
2、计算机一台;
3、WIN51仿真软件一套
六、实验步骤:
1、打开实验箱,查看单片机以及其它芯片的铭牌,记录相关芯片的型号;
2、参照教材和实验指导书,找出上述芯片的型号,记录各芯片的作用和引脚功能;
3、打开计算机,进入WIN51仿真软件(执行DICE51.EXE文件),打开其工作界面;
4、检查计算机与单片机是否连接就绪。
即查看WIN51工作界面底边状态栏由“脱机就绪”变成“联机就绪”,说明联机成功。
否则对话框提示“单片机未连上”,要检查硬件实际连接情况,在设置菜单下设定COM1或COM2。
5、将自己编写的程序或提供的参考程序输入,然后进行调试,编译,改正错误。
一直调到没有错误为止,然后让程序单步运行、连续运行,查看程序运行结果。
七、思考题:
1、LED显示分为动态显示与静态显示,本次实验采用动态还是静态显示,显示的原理是什么?
八、实验报告:
实验报告内容应包括实验目的、原理和内容以及结果,特别是修改程序的结果,做详细记录。
应对实验过程,程序调试中出现的问题及解决方法进行记录,对实验中出现的问题应进行分析。
必须对程序全部进行注释。
八、附录
附录1.1:
LED显示源程序
说明:
在LED上实现字符显示的方法,是将待显示的字形码,送入8155的字形口(B口)地址FF22H,显示位置送入8155的字位口(A口)地址FF21H。
附录2给出了本实验中的字形、字位表。
一个字长为8位的二进制,要在两个LED上显示,因此程序中有如何将一个字拆分成两个字。
输入程序时可以不输注释语句。
ORG0500H
SE15:
MOVSP,#53H
LED:
MOVR0,#79H;将字形存在RAM的79H-7EH
MOVR6,#65H;输入待显示的字符
MOVR5,#43H
MOVR4,#21H
MOVA,R6;调用拆分程序将3个字节拆成6个字节
LCALLPTDS
MOVA,R5
LCALLPTDS
MOVA,R4
LCALLPTDS
LCALLSSEESJMPLED;循环显示
;字节拆分程序
PTDS:
MOVR1,A
ACALLPTDS1
MOVA,R1
SWAPA
PTDS1:
ANLA,#0FH
MOV@R0,A
INCR0
RET
;字节显示程序
SSEE:
SETBRS1;换工作寄存器第三组
MOVR5,#05H;每个字显示5次
SSE2:
MOV30H,#20H;字位码初值
MOV31H,#7EH;字形码初地址
MOVR7,#06H;显示位数
SSE1:
MOVR1,#21H;输入字位码
MOVA,30H
MOVX@R1,A
MOVR0,31H;查表、输入字形码
MOVA,@R0
MOVDPTR,#DDFF
MOVCA,@A+DPTR
MOVR1,#22H
MOVX@R1,A;字形送入地址22H
MOVA,30H;改变字位
RRA
MOV30H,A
DEC31H;转换为下一个字形
MOVA,#0FFH
MOVX@R1,A;关显示
DJNZR7,SSE1;6位显示完了吗?
DJNZR5,SSE2;5次显示完了吗?
CLRRS1
RET
;以下为字形表,见表2。
DDFF:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
END
附录1.2:
字形、字位表
字位表
G5
G4
G3
G2
G1
G0
未用
未用
20
10
08
04
02
01
字形表
代码
D7
D6
D5
D4
D3
D2
D1
D0
字形
H
h
g
f
e
d
c
b
a
C0
1
1
0
0
0
0
0
0
0
F9
1
1
1
1
1
0
0
1
1
A4
1
0
1
0
0
1
0
0
2
B0
1
0
1
1
0
0
0
0
3
99
1
0
0
1
1
0
0
1
4
92
1
0
0
1
0
0
1
0
5
82
1
0
0
0
0
0
1
0
6
F8
1
1
1
1
1
0
0
0
7
80
1
0
0
0
0
0
0
0
8
90
1
0
0
1
0
0
0
0
9
88
1
0
0
0
1
0
0
0
A
83
1
0
0
0
0
0
1
1
B
C6
1
1
0
0
0
1
1
0
C
A1
1
0
1
0
0
0
0
1
D
86
1
0
0
0
0
1
1
0
E
8E
1
0
0
0
1
1
1
0
F
FF
1
1
1
1
1
1
1
1
0C
0
0
0
0
1
1
0
0
P.
89
1
0
0
0
1
0
0
1
H
7F
0
1
1
1
1
1
1
1
.
BF
1
0
1
1
1
1
1
1
-
注:
低电位亮。
实验二单片机资源应用
实验学时:
课内6学时,课外6学时。
实验类型:
综合
实验要求:
必做
一、实验目的
1、掌握单片机最小系统的设计。
2、了解51系列单片机并行口输出/输入方式的工作原理及编程方法。
3、掌握51系列单片机中断的设置方法及编程实现。
4、掌握定时器/计数器的设置方法及编程。
5、掌握设计简单的单片机系统并在面包板上搭建单片机系统,或在单片机实验板上组建单片机系统。
6、用七段数码管进行数据显示。
二、实验内容
实验内容按要求分A、B、C、三部分,其中A是必做内容,B是选做内容,C是提高内容。
内容A:
按实验指导书给出的单片机最小系统和4位七段LED数码管动态显示电路,在面包板上搭接,然后用汇编语言编写显示程序,在数码管的任何一位显示要求的数字。
该部分主要是熟悉并掌握单片机的最小系统,振荡电路、复位电路,端口的应用,动态显示的电路及编程,程序的调试及固化,掌握用keil软件调试汇编程序。
由于显示是人机交流的窗口,是以后其它功能实验的基础。
必须在内容A中很好的掌握。
实验电路见附图,还给出数码管引脚图,元器件清单等。
电路说明:
该电路是一个在单片机最小系统上接了4个数码管,由于AT89C51片内有4K的FlashMemory存储器,故在软件不是很大的情况下,一般不需要扩展片外程序存储器,故单片引脚EA接高电平;复位采用上电复位和人工按钮复位;显示采用七段共阳极数码管,位码采用三极管9014驱动,因为LED数码管的电压在1.5-3V,电流在2-20mA,故要加限流电阻。
注意该电路图中的总线画法。
内容B:
在以下两个内容中选做1个
1、用定时器定时,(定时器T0或T1任选),每过20ms计数1次,并将计数值在LED上显示。
提示:
该部分的主要内容是定时器和中断的性能和编程,要知道晶振的频率,然后根据要求的时间,确定定时器的工作方式,计算定时器的初值,设定定时器与中断,在RAM中设定两个单元,永远计数,每中断一次该计数单元的值加1,程序启动后,一直处于动态显示中,直到中断时才处理加1程序。
要注意中断程序的地址,定时器不同该地址也不同,具体请查中断服务程序服务入口地址。
由于几个中断程序入口地址仅相隔8个单元,如果中断程序较长,一般要转移到后面的单元中。
2、由定时器T0计时,对T1口在一定时间内输入的脉冲进行计数并显示。
脉冲的产生可以用点动开关,也可以用信号发生器或单片机实验箱中的分频信号,也可以给出分频器,自己设计电路,对单片机EA口输出信号进行分频。
该实验较上一个实验难度大,用了两个定时器/计数器。
涉及到计数器的设计,由T0定时中断,然后读T1的计数值。
内容C:
该部分内容属提高内容,供学有余力且感兴趣的学生选做,其他学生不作要求。
因此该部分的主导思想是只提要求,提供元件,由学生自己设计电路,编写软件。
教师仅作指导。
这样可以更好的锻炼学生的能力。
1、串行EPROM存储器及按键的电路设计及编程。
在智能仪器中,不可避免的要有按键进行功能转换和控制,经常将标定的系数和测量的数据存储起来,希望下一次开机、甚至断电的情况下该数据能长期保留,用AT24C02等串行EPROM芯片就可以实现该该功能。
这个实验的要求,就是用按键进行控制,将一批数据存储在AT24C02芯片中,然后又用另一个功能键将该数据取出并进行显示。
下面只给出该芯片的资料,自己设计电路,编写软件。
2、RS232串行通信实验。
因为串行通信是智能仪器中经常应用的功能,本实验提供MAX232芯片和电容,由两组同学一起,用串行口实行远距离(5-10m)通信。
也可以和计算机进行通信。
3、模拟信号的数据采集实验,该实验提供ADC0809芯片,由学生自己完成电路设计,搭建。
并进行编程,将一个0-5V的电压信号通过A/D转换后在显示器中显示。
三、实验组织运行要求:
采用学生自主训练为主的开放模式组织教学。
每4个人一组,共同完成电路设计,搭建,软件编写,调试。
四、实验条件:
1、实验面包板一块(或单片机实验板);
2、AT89C51(或相近型号)单片机1个;
3、稳压电源1台;
4、电源插座1只;
5、计算机1台;
6、其它芯片见下表:
(注意:
实验未用的元件报告中不能出现)
序号
名称
型号
1
单片机
AT89C52
2
RS-232收发器
MAX232C
3
三极管
9014
4
模数转换器
ADC0809
5
晶振
24MHZ
6
译码器
74LS138
7
采样保持器
LF398N
8
LED数码管
Sm4205(共阳极)
9
电阻
需要的规格
10
电容
需要的规格
11
面包板
12
轻触开关
KFC_A06_05
说明:
其他元件,电路设计后和指导教师商量解决。
五、实验步骤:
1、实验前先进行实验内容的预习,在课外设计好实验接线图,编写实验要求的汇编程序,并在计算机上进行编译和调试,将调试好的程序转换成*.HEX格式存入移动U盘。
2、实验时按电路图接好线后,将*.HEX程序写入单片机中,进行程序调试。
3、观察实验过程,详细记录实验中出现的问题,并分析其原因以及程序的修改过程。
六、思考题:
1、如何设置定时器和中断?
2、显示器的地址如何确定,如何将一个数据进行动态显示。
怎样查询要显示的数字。
七、实验报告:
1、实验的目的、要求;
2、实验电路图的设计,所用元件性能的简单介绍;
3、实验程序的编写与调试,并对程序加以详细注释;
4、调试过程与调试结果,并对调试中出现的问题进行分析;
5、回答本实验相关问题。
6、实验的体会与总结。
附2.1:
单片机最小系统实验原理图
附2.2设计编程注意事项
一、硬件设计
1、单片机选用
本次实验,单片机采用的是AT89C××系列或AT89S××系列,该系列单片机片内都含有闪速程序存储器,可以根据所编写程序代码大小选择有不同片内程序存储器的单片机,一般情况下,课程设计中的程序代码都不是太大,2K或4K的程序存储器都可以满足。
数据存储器一般都较小,不进行大量的数据处理,或数组变量中成员不是太多的情况下,片内RAM是够用的。
2、端口资源分配
接口是CPU与外界的连接部件,以实现CPU与外部设备的最佳耦合和匹配。
包括键盘、显示、A/D转换、D/A转换和打印机等。
根据实验要求,选用外设,并选用合适的外围接口芯片。
I/O端口是CPU与I/O设备直接通信的地址。
单片机系统对I/O端口是采用端口地址与存储器地址统一编址的方式,即存储器映射方式。
而编址技术又分线选法和译码法。
在设计单片机系统时,对地址必须有一个清楚的认识,一但硬件确定,则相应的扩展地址也就确定了。
3、数据采集单元设计
要针对不同的要求,不同的情况设计数据采集电路。
设计时要考虑测量范围,显示精度,信号的情况,信号变化缓慢的还是变化很快,信号的质量,确定是否需要放大、滤波、采样保持电路;对于数字信号,也要考虑信号的大小和质量,考虑是否用比较电路、驱动电路和光电隔离等。
4、显示单元设计
显示是仪器和人交流信息的重要窗口,也是仪器的一个重要组成部分。
根据题目要求,确定显示的形式(静态显示还是动态显示;LED显示好事LCD显示等),显示的位数,所以必须对要显示的信息做到心中有数,设计的显示单元要满足所有要显示信息的显示要求。
由于LED显示的控制较为简单,本次实验室提供LED指示灯和8段LED数码管。
5、按键控制单元设计
一个测控系统,总是有许多功能,有些功能可以根据系统的运行状态自己变化,如智能仪表中的量程自动选择;但相当多的功能需要人工控制,如交通灯控制中的各段时间的设定等,所以对于测控系统来讲,一般都要有人工控制信号的输入端口-按键或键盘。
设计按件或键盘,要对设计对象的功能相当熟悉,才能正确确定按键的数量。
如果要输入的数字较大且是随机的,要考虑设计键盘。
如果不是很大,或者数字很大但变化范围不大的情况下,尽量使用按键。
6、其它功能设计
其他功能设计,需要根据题目要求,如串行通信,D/A转换等,因为本次实验时间所限,布置任务时,将一些功能不做要求或作为选择内容,学生可以根据实际情况取舍,进度较快的课题组,还可以自己增加相应内容。
7、硬件设计以后,要求搭建电路,在软件未编写完以前,编写测试软件,先对硬件的各部分进行测试。
二、软件设计
本次软件设计必须采用汇编语言,考试考核内容是汇编语言。
(在以后学习了单片机C语言以后,可以采用单片机C语言,由于单片机C语言在系统开发中有明显的优越性,掌握单片机C语言对以后可能从事该工作的同学有很大的益处。
鼓励同学用单片机C语言编程。
)
1、对编写软件的要求:
①软件结构清晰、简捷、流程合理。
②各功能程序实现模块化、子程序化。
这样,既便于调试、链接,又方便移植、修改。
③程序存储区、数据存储区分配合理。
④运行状态实现标志化管理。
各个功能程序运行状态、运行结果以及运行要求都设置状态标志(一般用位寻址区的位)以便查询,程序的转移、运行、控制都可以通过状态标志条件来控制。
⑤软件抗干扰性能好。
2、设计前的准备工作
1)定义系统功能,画出流程图
系统定义是在软件设计前,把软件承担的任务明确出来。
然后对软件进行功能分块。
画出流程图,特别注意有中断时,中断流程图和主流程图一定是分开的。
这一部分是相当重要的工作,对后面程序编写与调试是否顺利有很多影响,一定要认真对待。
软件设计有两种方法:
一种是自上而下,逐步细化;另一种是自下而上,先设计出每一个具体的模块(子程序),然后再慢慢扩大,最后组成一个系统。
两种方法各有优缺点。
自上而下的方法在前期看不到什么具体效果,对于初学者来说,心中总是不踏实。
而自下而上的方法一开始就有结果,每设计并测试好一个模块,就能看到实际的效果,给人一步一个足印的感觉,能树立信心。
建议两种方法结合运用。
主程序采用自上而下的方法,将它分成若干个功能相对独立的较小的程序模块。
然后再采用自下而上的方法,设计一个模块,调试一个模块,加入主程序调试;再进行下一个模块设计和调试。
所以在这一步骤就是设计主程序的框架。
根据问题的定义,确定算法,并绘制程序框图。
注意必须确保程序框图的正确性。
比如在电脑时钟中,考虑输入“分”的数据的合理性,数据必须小于60,程序框图中就不能忽视等于60如何处理。
这是初学者常犯的错误。
2)合理选用数据类型
数据类型选用,在用单片机C语言编程时特别重要。
各种数据类型的定义。
是定点数还是浮点数;是有符号数还是无符号数;是十六进制数还是BCD码。
如果一个参数的变化范围有限,就可以用定点数来表示,以简化程序设计和加快运行速度。
当参数的变化范围太宽时,只好采用浮点数来表示。
若要求数据的正负之分,则考虑定义有符号数。
对于自然数列,为显示方便,可以采用BCD码,如电脑时钟的时、分、秒。
3)合理定义和分配存储空间、定义标志位。
资源分配的主要工作是RAM资源的分配。
片外可扩展RAM的容量要比片内RAM大,在数据量较大的情况下,要扩展片外RAM,通常用来存放批量大的数据,如采集的大量数据的存储。
用汇编语言编程,片内RAM的分配,是一个相当麻烦,要有一定技巧的工作,那个变量放在那个存储单元,该变量需要长期保存还是保存到某一个阶段,在用单片机汇编语言编程时,不能象编普通的计算机程序那样,否则容易造成RAM不够用或者将有用的数据覆盖。
注意用单片机C语言编程不存在这个问题。
系统上电复位时,自动定义0区为工作寄存器,1区为堆栈,并向2区、3区延伸。
如果系统前台程序要用1区、2区作为工作寄存器,就应将堆栈空间重新规划,常将堆栈安放在片内RAM的高端,如60H—7FH。
在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,应充分发挥其作用,尽量避免用来做其他事情。
20H~2FH这16个字节具有位寻址功能,用来存放各种软件标志、逻辑变量、位输入信息、位输出信息副本、状态变量、逻辑运算的中间结果等。
当这些项目全部安排好后,保留一两个字节备用,剩下的单元才可改作其他用途。
30H—7FH为一般通用寄存器,只能存入整字节信息。
通常用来存放各种参数、指针、中间结果,或用作数据缓冲区。
RAM资源规划好后,应列出一张RAM资源的详细分配清单,作为编程依据。
为了增加可读性,便于修改,一般对分配的存储单元取名。
如保存当前时间的时、分、秒取HOUR、MINI、SEC,编程时用变量名,编译时只需在前面加HOUREQU24H即可(20H为分配给小时的存储单元的地址)。
3、编程时注意事项:
①一定要严格根据框图编程。
②一定要写注释。
③通过编译后,只表明语法没错,并不表明逻辑正确,一定要用不同的数据对模块进行测试。
完全符合预定结果,方可确认通过。
④将该模块加到主控模块进行测试,如果与预定结果不符,必须查找原因,进行修改、调试。
⑤必须注意随时保存调试通过的副本。
以便当新程序出现故障时,随时可返回前面的正确点重新开始。
4、软件的调试
调试程序一般应经过以下几个步骤:
1)先进行人工检查,即静态检查。
在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。
这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。
而这一步骤往往容易被人忽视。
有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,作为一个程序人员应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的程序。
2)在人工检查无误后,才可以上机调试。
通过上机发现错误称动态检查。
在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。
应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。
有时提示出错的类型并非绝对准确,由于出错的情况繁多,各种错误互有关联,因止要善于分析,找出真正的错误,而不要只从字面意义上找出错信息。
如果系统提示的出错信息多,应当从上到下一一改正。
有时显示出一大片出错信息往往使人感到问题严重,无从下手。
其实可能只有一二个错误。
例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。
3)在改正语法错误后,程序经过连接就得到可执行的目标程序。
目标程序可以用Keil软件进行仿真。
对仿真结果要作认真分析。
看它是否符合要求。
有时,数据比较复杂,难以立即判断结果是否正确。
可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。
可以在计算的输出结果的程序地方加入一段输出到串口的程序,利用串口窗口可以方便看到结果的。
4)运行结果不对,大多属于逻辑错误。
对这类错误往往需要仔细检查和分析才能发现。
可以采用以下办法:
K