单片机系统综合试验.docx
- 文档编号:24526167
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:28
- 大小:305.99KB
单片机系统综合试验.docx
《单片机系统综合试验.docx》由会员分享,可在线阅读,更多相关《单片机系统综合试验.docx(28页珍藏版)》请在冰豆网上搜索。
单片机系统综合试验
单片机系统综合实验第六章
6.1单片机基本实验.存储器块清零程序设计实验6-1掌握存储器读写方法;2.了解存储器的块操作方法。
(1)实验目的。
1.
RAM要求能将其内容清零。
2.指定外部实验内容:
1.指定内部RAM中某块的起始地址和长度,
(2)中某块的起始地址和长度,要求指定外部RAM中某块的起始地址和长度,要求能将其内容清零。
3.
)。
能将其内容置为某固定值(如012H)实验说明。
通过本实验,学生可以了解单片机的存储器结构及读写存储器的方法,同时也可以(3了解单片机编程、调试方法。
、参考程序如下:
、程序参考流程如图6-1所示;24()参考程序框图。
1EQUBLOCK0400H
ORG0000H
LJMPSTART
0030HORG
DPTRSTART:
←起始地址DPTR,#BLOCKMOV;R0MOVR0,#0FFH←块长度;0
MOVA←;A,#0
0LOOP:
;当前地址内容清MOVX@DPTR,A
1;地址加INCDPTR
R0,LOOPDJNZ,循环;计数器减1$SJMP;结束程序流程图6-1图END
空外部数据存储器XDATA图6-36-2图程序窗口(存储器块赋值程序)
间窗值,请修改以上程序完成开始的255个字节外部数据存储器块的内容置成12H0400H例如若要将从、程序调试过3此操作,注意在程序调试过程中数据的变化情况。
注意在程序调试过程中数据的变化情况。
了解程序运行结果,运行结果如图XDATA所示。
可通过观察外部数据存储器窗口6-2程。
程序窗口如图
6-3所示。
(5)思考题。
如何将存储器块的内容置成某固定值(例全填充为0FFH)?
请用户修改程序,完成此操作。
实验6-2二进制到BCD转换程序设计
(1)实验目的。
掌握简单的数值转换算法。
基本了解数值的各种表达方法。
(2)实验内容。
1、将给定的一个单字节二进制数,转换成非压缩的二—十进制(BCD)码;2、将给定的一个单字节二进制数,转换成压缩的二—十进制(BCD)码。
(3)实验说明。
计算机中的数值有各种表达方式,这是计算机的基础。
掌握各种数制之间的转换是一种基本功。
有兴趣的同学可以试试将BCD转换成二进制码。
五、参考程序框图。
(1)程序参考流程如图6-4所示;
(2)参考程序
通过本实验学习简单的数值转换算法,了解数值的各种表达方法。
同时进一步熟悉单片机实验集成开发软件环境的使用方法。
学习“单步”、“跟踪”、“执行到光标处”等调试功能。
启动程序运行到最后一条指令处,打开8051内部数据存储器空间,观察程序执行结果。
若A中原来的内容“123”(7BH)转换为三个BCD码“01”、“02”和“03”,并分别存入了从(30H)开始的三个单元中,如图6-5所示。
程序执行后的结果:
图6-5内部数据存储器DATA空间窗口
实验6-3十六进制到ASCII码转换程序设计
(1)实验目的。
1.了解十六进制数和ASCII值的区别。
2.了解如何将十六进制数转换成ASCII值。
3.了解如何查表进行数值转换及快速计算。
(2)实验内容。
给出一个十六进制数,分别用查表法和逻辑运算方法将其转换成ASCII值。
(3)实验说明。
此实验主要让学生了解数值的十六进制数和ASCII码的区别,学会用查表法快速地进行数值转换并进一步了解数值的各种表达方式。
(4)参考程序框图(查表法)
位二进制数在8所示。
入口条件:
待转换的6-6。
程序流程图如图(通过查表实现数制转换)方法一:
累加器A中。
出口信息:
高四位的ASCII码在31H中,低四位的ASCII码在30H中。
方法2:
逻辑运算方法。
HASC功能:
8位二进制数转换成双字节ASCII码。
入口条件:
待转换的8位二进制数在累加器A中。
出口信息:
高四位的ASCII码在A中,低四位的ASCII码在B中。
MOVHASC:
B,A;暂存待转换的单字节十六进制数HAS1LCALL;转换低四位;存放低四位的ASCIIXCH码A,B
ASWAP;准备转换高四位HAS1:
ANLA,#0FH;将累加器的低四位转换成ASCII码
A,#90HADD
ADA
A,#40HADDC
A
DA
RET
实验6-4存储块移动程序设计
(1)实验目的。
1.了解内存的移动方法;2.加深对存储器读写的认识。
(2)实验内容。
将指定源地址和长度的存储块移到指定目标位置。
(3)实验说明。
块移动是计算机常用操作之一,多用于大量的数据复制和图象操作。
本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。
另外,若源块地址和目标块地址有重叠,该如何避免?
(4)参考程序框图。
1、程序流程图如图6-7所示;
2、参考程序。
将外部RAM存储器XDATA中3000H开始的256B数据移动到4000H开始的存储单元中。
参考程序如上:
(5)思考题。
1.若源块地址和目标块地址有重叠,该如何避免?
2.请思考给出块结束地址,用地址减请用户修改程序,完成0FFH)?
例全填充为(如何将存储器块的内容置成某固定值3.一方法移动块的算法。
.
此操作。
6-5多分支程序实验
.了解程序的多分支)实验目的。
1(12.了解多分支结构程序的编程方法。
结构。
(2)实验内容。
在多分支结构的程序中,能够按调用号执行相应的功能。
(3)实验说明。
多分支结构是程序中常见的结构,若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序,完成指定操作。
分支结构程序设计也是最基本的程序设计技术。
在实际的程序设计中,有很多情况往往还需要程序按照给定的条件进行分支。
这时就必须对某一个变量所处的状态进行判断,根据判断结果来决定程序的流向。
在编写分支程序时,关键是如何判断分支的条件。
在MCS—51单片机指令系统中有JZ(JNZ)、CJNE、JC(JNC)、DJNZ及JB(JNB)等丰富的控制转移指令,他们是分支结构程序设计的基础,可以完成各种各样的条件判断、分支。
常用的分支结构有以下几种:
。
起,结果放入码放在30HR71:
统计全班60名同学不及格人数,成绩以BCD1、统计:
例分的60分的、大于等于75分的、大于等于、分类:
例2:
统计全班60名同学的成绩,大于等于902中。
、R6R3、R4、R5及小于60分的人数,分别放入2
例1例
3.程序散转:
可以有多种方法实现程序散转。
(1)方法1:
利用地址偏移量表实现散转。
将转移目标地址与表首地址差列表,作为转移目标地址。
利用了伪指令的数学计算功能,标首地址加上处理程序与标首地址差转到处理程序。
实验内容:
有5个按键0,1,2,3,4,根据按下的键转向不同的处理程序,分别为PR0,PR1,PR2,PR3,PR4。
(2)方法2:
利用转移指令表实现转移。
将转移到不同程序的转移指令列成表格,判断条件后查表,执行表中的转移指令。
用直接转移指令组成一个转移表,然后把菜单号读入累加器(A),转移表首地址放入DPTR中,利用JMP@A+DPTR实现散转。
【入口参数】(R3)=存输入键盘码1~9。
【出口参数】转移到相应的子程序入口。
ORG0030H
DPTR,#TAB1KEY_JMP:
MOV;子程序入口首地址送DPTR
;把键盘输入缓冲区内容送累加器(A)MOVA,R3
;由于输入数码为1~9,因此需减1
DECA
#03H
B,MOV
MULAB;由于长跳转指令LJMP占用3B,;各子程序入口地址相距3B
JMP@A+DPTR;根据输入码,执行相应的子程序
ORG0500H;程序入口地址表
TAB1:
LJMPNO1
LJMPNO2
LJMPNO3
LJMPNO4
LJMPNO5
LJMPNO6
LJMPNO7
LJMPNO8
LJMPNO9
END
(3)方法3:
利用转向地址表实现转移。
将转移地址列成表格,将表格的内容作为转移的目标地址。
根据R3(0~n)的内容转向对应的程序;处理程序的入口符号地址分别为PR0~PRn(n<256)
①将PR0~PRn入口地址列在表格中,每一项占两个单元;
②PRn在表中的偏移量为2n,因此将R3的内容乘“2”即得PRn在表中的偏移地址;
③从偏移地址2n和2n+1两个单元分别取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP
@A+DPTR指令(A先清零)即转移到PRn入口执行。
【入口参数】(R3)=0~n转移序号。
【出口参数】转移到相应的子程序入口。
0030H
ORG
KEY_JMP:
MOVDPTR,#TAB
MOVA,R3
ADDA,R3;(A)←(R3)*2
JNCNADD
INCDPH;(R3*2)>256
NADD:
MOVR3,A
MOVCA,@A+DPTR
XCHA,R3;转移地址高8位
INCA
MOVCA,@A+DPTR
MOVDPL,A;转移地址低8位
MOVDPH,R3
CLRA
JMP@A+DPTR
TAB:
DWPR0,PR1,PR2,···········PRn
PR0:
处理程序0
处理程序PR1:
1
…
…
PRn:
处理程序n
END
实验要求:
根据以上实例程序,按以下要求编写程序
1、全班30个人的成绩放在1000H起,统计及格和不及格的情况,30H放及格人数,31H开始放成绩,50H放不及格人数,51H起放成绩。
2、统计全班30名同学的成绩(20H起),大于等于90分的、大于等于75分的、大于等于60分的及小于60分的人数,分别放入R3、R4、R5、R6中,找出成绩最高的放入50H起的单元。
(4)实验报告要求
1.根据实验实例程序,完成实验要求中的程序以及程序的流程图。
2.观察数据窗口中数据的变化过程。
记录实验过程中遇到的问题和解决方法。
四、
(5)思考题。
1、分类程序中,如何设计判断的次序使90分、75分、60分合理的归档?
2、针对不同的判断条件,相应的流程图应如何正确画出以使程序的编写更为清晰?
实验6-6数据排序程序设计
(1)实验目的。
1.了解数据排序的简单算法。
2.了解数列的有序和无序概念。
(2)实验内容。
给出一组随机数,编写程序将此组数据排序,使之成为有序数列。
有序的数列更有利于查找。
.
(3)实验说明。
有序的数列更有利于查找。
本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
通过本实验可以了解数据有序和无序的概念以及数据排序的简单算法。
(4)参考程序框图。
1、程序参考流程如图6-9所示。
2、参考程序:
将片内RAM50H-59H中的数据按从小到大的顺序排序
3、调试步骤①设置待排序数字。
点击存储器空间菜单中的“DATA”选项,打开单片机内部数据存储器空间DATA,将鼠标指向其中从50H开始的单元,单击右键,将其中内容修改为一组无序的数据,如图6-10所示,
②运行程序。
点击程序运行键,再用“执行到光标处”功能,启动程序运行到最后一条指令处,可以看到此时数据已经按从小到大的顺序排列了,如图6-11所示。
图6-10未排序数据图6-11排序后的数据
实验6-7P1口输入、输出实验
(1)实验目的。
1.学习Pl口的使用方法。
2.学习延时子程序的编写和使用。
(2)实验内容。
P1口做输出口,接八只发光二极管(其输入端为高电平时发光二极管点亮),编写程作输出口,接两个P1.3,P1.2;S1、S0口接两个拨动开关输入作P1.1、P1.0序,使发光二极管循环点亮。
.
发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。
编程时应注意P1.0、P1.1作为输入口时应先置1,才能正确读入值。
(3)实验电路连线。
(4)实验说明。
P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用作输入口时必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
延时子程序的延时计算问题
(5)参考程序框图
图6-12P1循环点灯流程图图6-13P1口输入输出流程图
输出6-15P1端口输入/图6-14P1图端口输出情况
集成软件调试环境下,输入以上程序,编译通过后,打开外设端口,单步VEWA)程序调试。
在6(.
运行,观察P1口的输出情况,实验1运行情况如图6-14所示。
调试实验2程序时,采用单步运行方式,用鼠标点击P1.0和P1.1改变其输入状态,观察P1.2和P1.3的输出情况,实验2运行情况如图6-15所示。
交通灯控制实验6-8(软件延时法)
(1)实验目的。
1.学习数据输出程序的设计方法。
学习模拟交通灯控制的方法。
3.进一步了解软件延时方法。
(2)实验内容。
用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。
(3)实验电路连接:
(4)实验说明。
l.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始为状态0。
状态0:
东西红灯,南北红灯;然后转
状态1:
南北绿灯通车,东西红灯;过一段时间转
状态2:
南北绿灯闪几次转黄灯亮,延时几秒,东西仍然红灯;再转
状态3:
东西绿灯通车,南北红灯;过一段时间转
状态4:
东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯;最后循环至状态1。
2.各用一组红、黄、绿色LED分别表示南北方向和东西方向红绿灯。
3.延时程序参考硬件实验一中的例子,具体时间长短由同学自己确定。
(5)参考程序框图如图6-16所示。
实验6-9交通灯控制(定时器延时法)
(1)实验目的。
1.进一步理解单片机内部定时器/计数器的工作原理和使用方法。
2.学习模拟交通灯控制的方法。
3.学习数据输出程序的设计方法。
4.学习中断处理程序的编程方法。
(2)实验内容。
用CPU的P1口输出控制信号,控制六个LED灯(红,绿,黄),模拟交通灯管理。
)实验电路连接:
3(.
)实验说明。
(4因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南l.
0北走向。
初始为状态。
红灯;然后转入0:
东西红灯,南北状态;过一段时间转入通车,东西南北绿灯红灯状态1:
再转入,延时几秒,东西仍然红;几次转状态2:
南北绿灯闪黄灯亮红灯;过一段时间转入:
东西状态3绿灯通车,南北1。
状态延时几秒,南北仍然绿灯闪几次转黄灯亮,红灯;最后循环至:
东西状态4分别表示南北方向和东西方向。
2.各用一组红、黄、绿色LED
图6-17主程序流程图
。
3.由定时器来产生通车延时时间,时间长短1秒以上(由同学自己确定)个振荡器周期。
因为12提示:
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是16s=65536位方式)时,最大定时时间为:
2μ*1,实验系统的晶振是12MHZ本程序定时器工作于方式1(16s=65.536ms
μ65536*32=2097120中断32次,所用时间为:
如要延时所以需要配合软件记数。
2秒,则需要T02s
μs≈,若不到32次,则只使中断次数加1因此在T0中断处理程序中,要判断中断次数是否到32次,然后返回,若到了32次,定时2秒时间到。
。
时间(参考硬件实验6-8)4.用软件延时方法产生“闪”延时6-18
、5)参考程序框图如图6-17(计数器应用实验6-10实验
/计数器使用方法。
(1)实验目的。
学习51单片机内部定时,1)(2实验内容。
51单片机内部定时计数器T0,按计数器模式工作于方式对P3.4(T0)引脚进行计数。
将其数值按二进制数在P1口驱动LED灯上显示出来。
(3)实验电路连线如右图所示。
(4)实验说明。
本实验中内部计数器起计数器的作用。
外部事件计数脉冲由T0(P3.4)脚引入定时器T0。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
同时这就决定了输入波形的频率不能超过机器周期频率。
所示。
)参考程序框图如图6-19(5计数器实验参考程序框图图6-19
实验6-11外部中断实验
(1)实验目的。
1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
(2)实验内容。
用单次脉冲申请中断,在中断处理程序中对信号进行反转输出。
(3)实验电路连线如右图。
(4)实验说明。
编写中断处理程序需要注意的问题是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
.必须在中断处理程序中设定是否允许中断重2位。
入,即设置EX0中断,一般进入中断处理程序INT0本例中使用了以及中断处理程序使用但非其专,ACC时应保护PSW中断处理程序保INT0。
用的寄存器(保护现场)本例的
中断处理程序框图6-21INT0图主程序框图6-20图
。
另外中断处理程序中涉及ACC等三个寄存器并且在退出前恢复了这三个寄存器(恢复现场)护了PSW,端接单次.INT0到关键数据的设置时应关中断,即设置时不允许中断重入。
本例中没有涉及这种情况。
3LED灯,以查看信号反转.脉冲发生器。
P1.0接)参考程序框图如图6-20,6-21(51
定时器实验实验6-12
()口状态取反P1进一步掌握中断处理程序的编程方学习单片机内部计数器的使用和编程方法;2.
(1)实验目的。
1.
法。
P1口输出状态发生一次反转。
(2)实验内容。
用单片机内部定时器中断方式计时,实现每1秒钟计数器的编程主要是时间常数的设置和有关控制寄存器的设置。
.关于内部定时器/(3)实验说明。
1/计数器在单片机中主要有定时和计数两种功能。
本实验使用的是定时功能。
内部定时器用于设置定时器/计TMOD2..与定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
并主要功能是为定时器在溢出时设定标志位,数器的工作方式0-3,并确定用于定时还是用于计数。
TCON控制定时器的运行或停止等。
个振荡器周期。
因为实验123.内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是16s=131072位方式)时,最大定时时间为:
2μ*2系统的晶振是6MHz,本程序定时器工作于方式1(16131ms
≈μsX
,可计算定时器初值为设定时时间为100msms1001616?
?
15536?
32CBs,X?
20H?
100ms(2?
?
X)?
?
s2再利用软件记数,当T0中断10次时,所用时间为2S。
因此在T0中断处理程序中,要判断中断次数是否到10,若不到10,则只使中断次数加1,然后返回,若到了10次,则使输出状态位取反。
4.在设置时间常数前要先关对应的中断,设置完时间常数之后再打开相应的中断。
(4)实验参考程序:
ORG0000H
LJMPMAIN;转主程序
;T0中断入口ORG000BH
;转T0LJMPTIME0
中断服务程序
;主程序ORG0100H
MAIN:
MOV;A,#0FFH
MOVR2,#0
0;计数器清
TMOD,#01HMOV
工作方式设置T01;TH0,#3CH;设置T0的初值MOV
TL0,#0B0HMOV
;允许SETBET0T0中断
;开放总中断允许SETBEA
;启动SETBT0工作TR0
;AP1,A中数据送L0:
MOVP1口
;SJMPL0主程序结束
TIME0:
MOVTH0,#3CH;T0中断服务程序
MOVTL0,#0B0H;重装T0计数初值
;INCR2软件计数器加1
CJNER2,#10,L1;判断是否到10次计数?
A
CPL;到10次后,将A中数据取反
图6-22主程序流程图图6-23中断服务程序流程图
0;软件计数器清MOVR2,#0
;中断返回RETIL1:
END
.运行程序。
25)实验步骤。
1.设计应用程序,包括主程序和T0中断服务程序(见参考程序)。
(0点击程序运行键,打开外设窗口,观察端口输出情况。
将光标停留在中断服务程序的中,对软件计数器清口的输出状态P1执行到光标处再用“”功能,可以看到每中断10次计数时间到以后,语句“MOVR2,#0”处,都会发生改变。
实验实验6-13定时器输出PWM系列单片机的512.学习用PWM输出模拟量;3.熟悉
(1)实验目的。
1.了解脉宽调制(PWM)的原理;延时程序。
是单片机上常用的模拟量输出方法,通过外接的转换电路,可以将脉冲的占空比
(2)实验说明。
PWM变成电压。
程序中通过调整占空比来调节输出模拟电压。
占空比是制脉冲中高电平与低电平的宽度比。
信号,输出信号送数字电压表显示。
本实验需要用到单片机最(3)实验内容及步骤。
P1.0输出PWM”端,电压1.选用单片机最小应用系统模块,用导线将P1.0电压输出接电压表“+小应用系统(F1区)。
表“-”端接地。
仿真软件,首先建立本实验的项目文件,输入源程序,进行编译,直到编译无2.打开KeiluVision2误。
程序段两次,LOOP全速运行程序,观察电压表显示值,并做记录,改变PWM的占空比。
修改源程序3.,重新编译后运行,记录电压表显示值,”,#9”给累加器A的赋值,改为①“MOVA,#1②“MOVA信号转换电压的大小,比较三种PWM的PWM。
同样,用户可做占空比9:
1PWM,并做记录。
这是占空比1:
9的与理论值相比较。
89S52/89S51芯片中运行。
4.也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到流程图和源程序如下:
(4)流程图及源程序。
0ORG
START
LJMP
ORG000BH;T0中断入口
LJMPT0INT;转中断服务程序ORG0030H
;主程序1START:
MOV方式TMOD,#01H;TO时间常数MOV
TH0,#0ECH;设T0;
MOVTL0,#78H
T0工作SETBTR0;启动中断SETBET0;允许T0开放总中断SETBEA;0MOVR2,#0;计数器清1SETBP1.0;P1.0输出;循环SJMP$
中断服务程序T0INT:
MOVTL0,#78H;T0T0初值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 系统 综合 试验