单片机实验指导书.docx
《单片机实验指导书.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书.docx(24页珍藏版)》请在冰豆网上搜索。
单片机实验指导书
§4单片机应用系统实验
§4.1软件实验(使用软件仿真设置)
软件实验一数据传送实验
一、实验内容:
1.编写程序,将内部RAM中30H-5FH中的数据设置为55H。
2.编写程序,将内部RAM中30H-5FH中的内容传送到90H开始的内部RAM中去。
3.编写程序,将内部RAM中30H-5FH中的内容传送到200H开始的外部RAM中去(注意实际系统中为扩展的内部RAM)。
二、实验目的与要求:
1.学习与掌握针对不同区域RAM的操作方法。
2.学习与掌握指针的使用与循环程序的编写方法。
3.学习与掌握如何查看各个部分存储器的内容。
三、实验说明:
对于不同区域的RAM操作需要使用不同的寻址方式与指令。
对于内部RAM的低128字节,可以使用直接寻址也可以使用间接寻址;对于内部RAM的高128字节,只能使用间接寻址;对于外部RAM,只能使用指针DPTR进行间接寻址。
对于数据块的操作一般使用循环程序完成。
编写程序并编译(build)检查语法错误。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM内容是否正确。
注意主程序的最后应该加一条SJMP$指令,以避免由于连续执行时无法停机而造成无法预料的后果。
四、实验程序流程图:
五、思考题:
如果源与目的数据块
均为外部RAM,应该如何编程?
软件实验二数据分类与校验实验
一、实验内容:
1.编写程序,将内部RAM中30H-5FH中的数据设置为1-48。
2.编写程序,将内部RAM中30H-5FH中的奇数传送到90H开始的内部RAM中去。
3.编写程序,将内部RAM中30H-5FH中的数据按照奇校验设置最高位。
二、实验目的与要求:
1.学习与掌握判断数据奇偶性的方法。
2.学习与掌握分支程序的编写方法。
3.学习与掌握如何给存储器中的数据增加校验位。
三、实验说明:
汇编语言中判断数据的奇偶性很简单,数据的最低位为1为奇数,否则为偶数。
分支处理是程序设计中的基本技巧,是根据某一条件是否成立执行或不执行规定操作的方法。
数据的奇偶校验不是判断数据的奇偶性,而是判断数据中有奇数个1还是偶数个1。
如果是奇校验,则增加校验位后的数据应该具有奇数个1。
编写程序并编译(build)检查语法错误。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM内容是否正确。
四、实验程序流程图:
(传送奇数)
Y
N
五、思考题:
1.如果只传送正数或负数应该如何编程?
2.如果只传送大于某个规定数值的数据应该如何编程?
软件实验三简单算术运算实验
一、实验内容:
1.编写程序,计算Z=X+Y+30。
X、Y为位于内部RAM30H、31H单元的单字节BCD变量。
Z位于32H33H,高位放低地址。
2.编写程序,计算Z=X*10+Y/5-10。
X、Y为位于内部RAM30H、31H单元的单字节变量,Z位于32H33H,高位放低地址。
3.编写程序,计算1~100的累加和。
结果存放于内部RAM的30H、31H中。
高位放低地址。
二、实验目的与要求:
1.学习与掌握算术运算指令的使用方法。
2.学习与掌握BCD数据运算的处理方法。
3.学习与掌握多字节数据的运算方法。
三、实验说明:
MCS-51单片机的算术运算指令比较简单,因此功能也比较差。
所有的算术运算必须使用累加器进行。
如果数据和运算结果都是8位,则处理要简单得多。
如果数据和结果高于8位,则必须做多字节运算的处理。
应该使用不同的数据对程序进行检验。
在第一个程序中,可分别令X=10、Y=20和X=100、Y=200。
在第二个程序中,可分别令X=10、Y=30和X=100、Y=200。
编写程序并编译(build)检查语法错误。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM内容是否正确。
四、实验程序流程图:
(数据累加)
N
五、思考题:
1.如果X、Y均为两字节的变量,应该如何编程?
2.BCD运算结果为负数时(如-1),其读数是多少?
软件实验四定点数算术运算实验
一、实验内容:
1.编写4字节加法和减法子程序。
加数与被加数由指针R0和R1定位。
结果存放于固定的内部RAM地址RESULT。
2.编写2字节乘2字节子程序。
乘数位于R2R3,被乘数位于R4R5。
结果存放于R4R5R6R7内。
3.编写2字节除以2字节子程序。
除数位于R2R3,被除数位于R4R5。
结果存放于R4R5,余数存放于R6R7内。
二、实验目的与要求:
1.学习与掌握常用基本子程序的编写方法。
2.学习与掌握多字节算术运算程序的编写方法。
3.学习与掌握主程序调用子程序的方法。
三、实验说明:
将常用的基本子程序编写出来,以后直接调用,可以提高编程的效率。
商业软件中都提供这些基本子程序库,自己编写可以进一步了解其功能与使用方法。
多字节的加减法程序比较容易编写,只是要注意进位问题。
多字节乘法可以利用单字节乘法来实现,有关教材中已经有所介绍。
多字节除法不能用单字节除法实现,只能用移位相减的方法实现。
进行除法前必须进行除0检验。
编译通过后进入调试环境,单步执行程序并检查程序的正确性。
最后连续执行程序并检查RAM中运算是否正确。
应该多使用几组数据进行检验,以确保程序的正确性。
四、实验程序流程图:
(多字节除法)
Y
N
五、思考题:
1.N字节乘以M字节的运算结果应该为几个字节?
2.如何编写4字节除以2字节的算术运算程序?
软件实验五逻辑运算实验
一、实验内容:
1.编写程序,计算Z=X∧Y、Z=X∨Y和Z=X⊕Y。
X、Y、Z为位于内部RAM中30H、31H和32H中的字节变量。
2.编写程序,计算Z=X∨Y⊕F0。
X、Y、Z为位于内部RAM中20H中的位变量。
F0为位于PSW中的位变量。
3.利用移位指令完成Y=X*10的运算,结果为单字节。
二、实验目的与要求:
1.学习与掌握逻辑运算指令的使用方法。
2.学习与掌握位运算指令的使用方法。
3.学习利用移位指令进行算术运算的方法。
三、实验说明:
逻辑运算指令有3种,一般情况下也需要使用累加器进行处理。
位操作指令是MCS-51单片机的一个特色。
所有的位操作必须使用进位位进行。
要特别注意SFR中的位操作有些属于“读-修改-写”的类型。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM内容是否正确。
有关位的内容也可以输出到P1口直接观看结果。
四、实验程序流程图:
(计算X*10)
五、思考题:
1.有什么简单的办法计算一个多字节数据除以256的结果?
2.如果Y=X*16的运算结果为双字节,如何编程?
软件实验六数制转换实验
一、实验内容:
1.编写程序,将内部RAM中30H中的二进制数据转换为十进制数据并存放在31H(百)、32H(十)、33H(个)中。
2.编写程序,将内部RAM中30H-3FH中的16进制数据(0-F)转换为ASCII码并存放在40H-4FH中。
3.编写程序,将内部RAM中30H31H中的双字节二进制数据转换为十进制BCD码并存放在40H开始的单元中。
二、实验目的与要求:
1.学习与掌握基本的数制转换程序的编写方法。
2.学习与掌握ASCII码数据的处理方法。
3.学习与掌握多字节二进制数据的转换方法。
三、实验说明:
数据在各种不同数制与编码之间的转换是经常要使用的处理过程。
不同数制之间的转换有多种方法,也有一定的技巧,可以参考教材中的程序例子。
应该使用不同的数据对程序进行检验。
在第一个程序中,可以令所转换的数据为10,99,250。
在第二个程序中,应该令数据为0-15。
在第三个程序中,可以令所转换的数据为10,255,2000,65535等。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM中的转换结果是否正确。
四、实验程序流程图:
(二进制到十进制数据转换)
五、思考题:
1.二进制数据转换为十进制数据还有其它方法吗?
2.多位十进制ASC码如何转换为数字?
软件实验七数据统计实验
一、实验内容:
1.编写程序,首先将内部RAM中30H-7FH中的数据设置为50-9FH。
然后编写程序统计该数据区内大于80H的个数,结果存放在寄存器B中。
2.编写程序,统计该数据区内的奇数个数和正数个数,并存放在R6、R7中。
3.编写程序,找出该数据区内作为无符号数据的最大值和最小值。
二、实验目的与要求:
1.学习与掌握数据统计程序的基本技巧与编写方法。
2.学习与掌握如何区分数据的符号。
3.学习与掌握如何在数据区内寻找最大值和最小值。
三、实验说明:
MCS-51单片机没有数据比较指令,比较数据的大小只能用减法指令。
单字节数据的比较可以使用CJNE指令。
要特别注意对于有符号数和无符号数的处理方法是不一样的。
在计算机中一般均采用补码表示数据。
汇编语言中判断数据的符号很简单,数据的最高位为1为负数,否则为正数。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM中的内容及对应的统计结果是否正确。
四、实验程序流程图:
(寻找最大值)
Y
N
五、思考题:
1.数据为无符号数和有符号时的程序编写有何不同?
2.如何统计数据区中某一个数字出现的次数(例如0)?
软件实验八数据排序实验
一、实验内容:
1.编写程序,首先将内部RAM中30H-5FH中的数据设置为随机数值。
然后编写程序将该数据区内的数据按从小到大的顺序排序。
2.编写程序将该数据区内的数据按从大到小的顺序排序。
3.编写程序将该数据区内的数据按正数和负数分别排序。
二、实验目的与要求:
1.学习与掌握数据排序程序的基本技巧与编写方法。
2.学习与掌握如何进行复杂数据的处理。
三、实验说明:
数据排序是经常使用的数据处理过程。
数据排序有几种不同的方法,单片机中常用的方法是冒泡排序法。
其原理和程序可以参考有关教材和书籍。
按正数和负数分别排序时可以先分类,再排序。
也可以直接进行插入排序。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查排序结果是否正确。
四、实验程序流程图:
(简化的冒泡排序)
Y
N
N
五、思考题:
1.对于双字节数据排序,应该如何处理?
2.尝试使用其它排序方法编写程序。
软件实验九查表与程序散转实验
一、实验内容:
1.编写程序,用查表的方法计算X的平方(X为单字节数据)。
2.编写程序,用查表的方法计算X的立方(X为单字节数据)。
3.编写程序,根据A中的内容(1-5)分别执行不同的程序(程序入口分别为PR1,PR2,PR3,PR4,PR5)。
二、实验目的与要求:
1.学习与掌握查表程序的编写方法。
2.学习与掌握分支程序的编写方法。
三、实验说明:
查表程序一般需要使用指针DPTR实现,有关程序可以参考教材中的例子。
可以将查表计算程序作为一个子程序编写,然后由主程序进行调用。
编写程序时需要注意X平方和立方需要多个字节才能容纳。
散转程序的编写需要一定的技巧,具体可以参考教材中的例子。
散转也可以用多重分支的方法实现,但这样做的效率要低一些。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查运算结果是否正确,通过设置断点检查散转结果是否正确。
四、实验程序流程图:
(计算X的平方)
五、思考题:
1.尝试编写Y=LgX的程序。
2.查表程序还能用来做什么?
软件实验十数字滤波实验
一、实验内容:
1.编写程序,计算Yi+1=a×Yi+b×Xi。
其中a、b为常数,Xi为一个采样数据队列。
可以用30H-3FH中的数据来代替。
2.编写程序,对30H-7FH中的数据进行5次采样中值滤波。
结果存放在30H开始的单元中。
二、实验目的与要求:
1.学习与掌握软件滤波程序的基本技巧与编写方法。
2.进一步学习与掌握基本数据处理程序的编写方法。
三、实验说明:
各种数据处理方法均有多种相应的程序,可以参考教材和有关的书籍。
用汇编语言编写这类程序虽然比较复杂,但是编得好可以提高程序的效率。
程序编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并检查RAM内容是否与事先计算的结果吻合。
应该使用几组不同的数据进行检验。
四、实验程序流程图:
(5次采样中值滤波)
N
五、思考题:
1.尝试编写去极值滤波的程序。
2.软件滤波程序的作用是什么?
§4.2硬件实验(须使用硬件仿真设置)
硬件实验一P3口输出控制实验
一、实验内容:
1.编写程序,使P3.5端口输出周期为1秒的方波信号。
并通过三极管驱动一个直流小喇叭,使其发出断续的鸣响。
2.改变程序中的延时时间,使喇叭发出不均匀间隔的鸣响。
二、实验目的与要求:
1.学习与掌握对单片机单个端口进行控制的方法。
2.学习与掌握软件延时程序的编写方法与软件延时时间的计算方法。
三、实验说明:
本实验所使用的喇叭为直流驱动。
当P3.5端口输出高电平时,PNP三极管截止,喇叭不响。
当端口输出低电平时,PNP三极管导通,喇叭鸣响。
通过改变程序的延时时间,可以控制喇叭的鸣响时间。
单片机执行一条指令的周期数可以查指令表得到;一个机器周期等于12个时钟周期。
一段程序的执行时间是所有指令执行时间的总和。
为了减少程序长度,通常采用多重循环结构实现软件延时。
可以参考教材中的例子。
编写程序并设置为硬件仿真调试,正确连接实验装置。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查延时时间是否正确。
四、实验程序流程图:
五、思考题:
1.采用PNP三极管与NPN三极管作为喇叭驱动电路有何不同?
2.延时程序的作用是什么?
如何实现可变的延时?
硬件实验二P1口输出控制实验
一、实验内容:
1.编写程序,使P1各个端口轮流输出低电平。
从而驱动连接在该端口上的LED指示灯轮流点亮。
2.改变程序中的延时时间,使LED指示灯不均匀的点亮。
3.改变LED指示灯的点亮组合与次序,使其产生类似彩灯的艺术效果(例如,先由低到高循环点亮,再按照相反的循序点亮;同时由两侧向中间循环点亮,再按照相反的循序由中间向两边循环点亮;间隔循环点亮等)。
二、实验目的与要求:
1.学习与掌握对P1端口进行整体控制的方法。
2.进一步掌握软件延时程序的编写方法。
3.掌握复杂组合输出程序的编写方法。
三、实验说明:
根据本实验电路的设计,当P1端口输出为低电平时,相应的LED指示灯点亮。
通过适当配置输出P1口的数据,可以使不同的LED指示灯点亮,从而达到所希望的效果。
LED状态持续时间可由软件延时来控制。
对于循环点亮LED指示灯的程序,可以利用循环移位指令来实现。
有规则的数据变化,可以利用一定的算法实现。
编写程序并设置为硬件仿真调试,正确连接实验装置。
编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查运行效果。
四、实验程序流程图:
(循环点亮LED指示灯)
五、思考题:
1.能否将P1口的内容读入再改变其状态输出?
2.如何确定软件延时程序的最长延时时间?
硬件实验三定时器应用实验
一、实验内容:
1.编写程序,利用定时器(方式一)使P3.5端口输出周期为1秒的方波信号。
从而驱动连接在该端口三极管上的喇叭,使其发出断续的鸣响。
2.编写程序,利用定时器(方式一)使P1各个端口轮流输出低电平。
从而驱动连接在该端口上的LED指示灯轮流点亮。
3.编写程序,利用定时器(方式二)实现上述功能。
二、实验目的与要求:
1.学习与掌握单片机上定时器的基本使用方法。
2.进一步掌握单片机定时器的各种工作方式。
三、实验说明:
MCS-51单片机的定时器是一个基本的计数器单元,有三种工作方式。
常用的是方式一和方式二。
由于只有16位字长,因此最大计数值为65535。
最大定时时间为65535×时钟周期×12。
如果定时时间超过这个最大值,就需要采用对定时时间再进行计数的方法。
方式一只能单次定时,方式二能够自动重复定时,但是最大计数值仅为255。
程序开始需要进行定时器的初始化,然后通过查询标志等待定时时间到达。
定时时间到达后再进行相应的处理。
注意处理完成后必须清除定时到达的标志位。
编写程序并编译通过后进入调试环境,单步或设置断点执行程序检查程序的正确性。
最后连续执行程序检查定时时间是否正确。
四、实验程序流程图:
(循环点亮LED指示灯)
N
五、思考题:
1.定时器的最长定时时间如何计算?
如果不够长怎么办?
2.使用软件延时与使用定时器各有何优点和缺点?
硬件实验四LED数码管显示实验
一、实验内容:
1.编写程序,在实验板的LED上轮流显示数字0000-9999。
2.编写程序,在实验板的LED上轮流显示0000-FFFF。
3.编写程序,在实验板上LED上增量显示000-255(每次加1)。
二、实验目的与要求:
1.学习与掌握在LED数码管上显示数字的方法。
2.进一步掌握在LED数码管上显示部分字母与符号的方法。
三、实验说明:
LED数码管可以有几种驱动方法,实验板上的LED数码管是由8锁存器74HC373驱动的。
因此具体的显示内容要根据实际的连接确定。
为了确定实际连接,可以向锁存器输出只含有1个1的数据(01H、02H、04H、08H、10H、20H、40H、80H),然后观察数码管哪一段点亮。
将结果进行综合就可以确定每个数字或字母所对应的字模了。
小数点可以先不点亮。
实验板上的LED数码管通过译码电路进行连接,因此每个LED数码管都有一个地址(分别为8000H、8100H、8200H、8300H)。
在编写程序时使用MOVX指令对其进行写操作,读操作没有意义。
编写程序并编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查是否满足所要求的功能。
四、实验程序流程图:
(轮流显示0000-9999)
。
。
。
。
。
。
。
。
。
。
。
。
五、思考题:
1.共阳极LED与共阴极LED的显示有什么不同?
2.查找一个数字的字模有几种方法?
硬件实验五计数器应用实验
一、实验内容:
1.编写程序,利用单片机上的定时器/计数器测量外部输入信号的频率。
2.对所编写的程序进行修改,提高频率测量的精度。
二、实验目的与要求:
1.进一步掌握单片机上定时器/计数器的使用方法。
2.学习掌握频率测量的方法及提高测量精度的方法。
三、实验说明:
实验板上有一个由555电路制作的频率发生器,调整电位器可以改变其输出频率。
输出频率经过分频后送入单片机的T0引脚。
MCS-51单片机有两个定时器/计数器。
利用其中一个作为定时器,另外一个作为计数器,在单位时间内对来自外部的脉冲进行计数,就能够实现频率计的功能。
程序开始需要进行定时器和计数器的初始化,然后等待定时时间到达。
定时时间到达后再读出计数器的计数值,然后利用实验四的显示程序将计数值显示出来。
注意读出计数值后应该将计数值清零,以便重新开始计数。
频率的测量有两种基本方法,一种是刚才介绍的计数法,另外一种是周期法,即测量脉冲的周期,再将周期换算为频率。
计数法适合高频信号测量,而周期法适合低频信号测量。
如果能将两者结合起来,就能提高频率测量的精度。
编写程序并编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序并用万用表检查测量显示结果是否正确。
四、实验程序流程图:
(计数法测量频率)
N
五、思考题:
1.利用定时器/计数器测量的最高频率是多少?
2.利用定时器/计数器测量频率的误差如何计算?
硬件实验六定时中断实验
一、实验内容:
1.编写程序,利用定时器中断使P3.5端口输出周期为1秒的方波信号。
从而驱动连接在该端口后面三极管上的喇叭,使其发出断续的鸣响。
2.编写程序,利用定时器中断使P1各个端口轮流输出低电平。
从而驱动连接在该端口上的LED指示灯轮流点亮。
二、实验目的与要求:
1.学习与掌握中断程序的编写方法。
2.进一步掌握单片机定时器中断的应用。
三、实验说明:
具有中断的应用程序分为两个独立的部分:
主程序和中断服务程序。
每个中断服务程序的入口地址是固的不变的,两个定时器/计数器的中断服务程序入口地址分别位于0BH和1BH。
主程序开始需要进行定时器和中断的初始化、设置堆栈并开放中断,然后即可执行其它的操作。
如果没有其它操作则就地等待。
定时时间到达后CPU会自动进入中断服务程序,中断服务程序的结尾必须是中断返回指令。
注意中断返回前必须清除中断申请的标志位,否则在返回主程序后会立即重新进入中断。
一般情况下中断服务程序中需要保护和恢复现场,但是如果主程序与中断服务程序之间无冲突(例如主程序原地等待),则可以省略这一步骤。
编写程序并编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查运行结果是否正确。
四、实验程序流程图:
五、思考题:
1.还可以利用定时器中断做什么?
2.为什么要设置堆栈?
什么情况下可以不保护现场?
硬件实验七外部中断实验
一、实验内容:
1.编写中断应用程序,主程序使P1各个端口轮流输出低电平。
当连接在INT0上的按键按下时,进入中断清除显示并延时2秒后返回。
2.编写中断应用程序,主程序在实验板LED上逐个显示000-255。
当连接在INT0上的按键按下时,进入中断并关闭显示、使喇叭鸣响并延时2秒后返回。
二、实验目的与要求:
1.进一步掌握中断程序的编写方法。
2.进一步掌握外部中断的应用与触发方式。
三、实验说明:
外部中断有两种触发方式:
边沿触发与电平触发。
采用不同的触发方式会有不同的效果,需要根据具体要求选择触发方式。
本实验的中断服务程序中需要保护和恢复现场,因此必须设置堆栈并在中断服务程序中编写入栈与出栈的程序。
如果编写错误,用正常的调试手段(单步、断点)一般无法检查出来。
编写程序并编译通过后进入调试环境,单步执行程序检查程序的正确性。
最后连续执行程序检查结果是否正确。
四、实验程序流程图:
(P1口输出显示)
五、思考题:
1.如何设置堆栈空间的大小?
2.如果既有定时器中断,又有外部中断,应该如何编写程序?
硬件实验八D/A输出实验
一、实验内容:
1.编写程序,通过实验板上的DAC0832输出一个频率为10Hz的锯齿波。
2.编写程序,通过实验板上的DAC0832输出一个频率为10Hz的正弦波。
3.编写程序,通过连接在INT0端口上的按键,使实验板上的DAC0832输出不同的电压。