单片机原理实验指导书09版.docx
《单片机原理实验指导书09版.docx》由会员分享,可在线阅读,更多相关《单片机原理实验指导书09版.docx(28页珍藏版)》请在冰豆网上搜索。
![单片机原理实验指导书09版.docx](https://file1.bdocx.com/fileroot1/2022-12/7/853dd00d-b85f-4ab1-8641-996bde603bfc/853dd00d-b85f-4ab1-8641-996bde603bfc1.gif)
单片机原理实验指导书09版
单片机原理
实验指导书
云南农业大学工程技术学院
前言
一.试验课是理论联系实际的重要教学环节之一,通过试验验证,加深并巩固课堂所学理论知识。
二.通过试验,培养学生掌握单片机技术的知识内容,建立对实验仪器、设备的感性认识,掌握重要仪器、设备的构造、调整和使用方法,以及培养同学们进行初步科学研究的试验能力。
三.试验是在理论指导下的实践过程,因此,要求在实验前作好预习,仔细阅读试验指导书,明确实验目的、要求、方法和步骤,复习有关理论内容,不得盲目进入试验室。
四.要爱护试验设备仪器。
节约使用试验材料,不得乱动与本试验无关的仪器、设备,不得将试验用品带出试验室或作他用。
五.试验中要注意安全,使用仪器设备要严格按其操作规程进行,严防触电、烧伤以及发生其它意外事故。
六.试验中要仔细观察,认真记录各种试验数据,不得抄袭他人数据。
七.试验完毕后将仪器、设备及备品等整理好,并整理、清扫试验场地,经指导教师同意后方可离开试验室。
第一部分软件实验
实验一存储器块清零
一、实验目的
1、掌握存储器读写方法
2、了解存储器的块操作方法
二、实验说明
本实验是指定存储器中某块的起始地址和长度,要求能将其内容清零。
通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,点击主菜单的仿真器选项,选择仿真器设置,或者可直接点击仿真器设置快捷按钮,打开仿真器设置窗口,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031。
在仿真器标签里选择使用伟福软件模拟器。
2、编写源程序后点击保存,将文件存储为*.ASM文件。
点击项目菜单,选择编译。
编译无误后,打开数据窗口,选择外部数据存储器窗口XDATA,拖动XDATA窗口的滚动条,使地址8000H出现在窗口上,观察8000H起始的256个字节单元的内容,若全为0,则右键点击单元,选择块操作->块填充,填充不为0的值。
执行程序,点击全速执行快捷按钮,点击暂停按钮,观察存储块数据变化情况,256个字节全部清零(红色)。
点击复位按钮,可再次运行程序。
3、打开CPU窗口,选择单步或者跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序
1.源程序
ORG0000H
BlockEQU8000H
MOVDPTR,#Block;起始地址
;清256字节(清除长度)
CLRA
Loop:
INCDPTR;指向下一个地址
;记数减一
LJMP$
END
2.流程图
五、练习题
1.使用单步执行方式,观察CPU窗口中的REG窗口,根据RO变化规律,结合程序判断在程序执行过程中RO中的值改变了多少次?
如果要控制程序清除100个字节,RO中的值应为多少?
2.请将存储器块的内容置成某固定值(例如全填充为0ABH),写出修改后的程序并编译执行。
实验二二进制到BCD码转换
一、实验目的
1、掌握简单的数值转换算法
2、基本了解数值的各种表达方法
二、实验说明
单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一个二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,点击主菜单的仿真器选项,选择仿真器设置,或者可直接点击仿真器设置快捷按钮,打开仿真器设置窗口,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031。
在仿真器标签里选择使用伟福软件模拟器。
2、编写源程序并进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。
用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。
修改源程序中给累加器A的赋值,重复实验,观察实验效果。
3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序
1.源程序
RESULTEQU30H
ORG0000H
LJMPSTART
BINTOBCD:
MOVRESULT,A;除以100得百位数
MOVB,#10
DIVAB
;余数除以10得十位数
MOVRESULT+2,B;余数为个位数
RET
START:
MOVSP,#40H
;累加器A赋值
;调用子程序
LJMP$
END
2.流程图
五、思考题
试将BCD码转换成二进制码。
实验三内存块移动
一、实验目的
1、了解内存的移动方法
2、加深对存储器读写的认识
二、实验说明
块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。
本程序是给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。
移动3000H-->4000H,256字节。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031。
选择使用伟福软件模拟器。
2、编写源程序后点击保存,将文件存储为*.ASM文件。
点击项目菜单,选择编译。
编译无误后,打开数据窗口(XDATA),观察地址3000H起始256个字节存储块和4000H起始的256个字节存储块,若各单元内数据对应相同,则用键盘输入改变其中一块的数据,全速运行程序。
点击暂停按钮,观察两个存储块的数据,可以看到两块数据已相同,说明存储块已移动。
3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序
1.源程序
ORG0
MOVR0,#30H
MOVR1,#00H
MOVR2,#40H
MOVR3,#00H
MOVR7,#0
LOOP:
;读出源地址一字节
;存入目的地址一字节
CJNER1,#0FFH,GOON1
INCR0
GOON1:
INCR1
CJNER3,#0FFH,GOON2
INCR2
GOON2:
INCR3
;循环
LJMP$
END
2.流程图
否
五、思考题
1.实验源程序是在片外数据存储器进行的块移动操作,如何将片内数据存储器中的数据块移动到片外数据存储器中?
试编写程序将片外数据存储器2000H单元起始的16个单元移动到片内30H起始的单元中去。
实验四数据排序
一、实验目的
1、了解数据排序的简单算法
2、掌握数列的有序和无序概念
3、学会将单片机与数学相联系
二、实验说明
有序的数列更有利于查找。
本程序用的是“冒泡排序”法,给出一组随机数存储在所指定的单元里,将此组数据排列顺序,使之成为有序数列。
其算法是将一个数与后面的每个数相比较,如果比后面的数大,则交换,如此操作下去将所有的数都比较一遍后,最大的数就会在数列的最后面。
然后取第二个数,再进行下一轮比较,再找出第二大数据,循环下去,直到全部数据有序。
三、实验步骤及内容
1、1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031。
选择使用伟福软件模拟器。
2、编写源程序后点击保存,将文件存储为*.ASM文件。
点击项目菜单,选择编译。
编译无误后,打开数据窗口(DATA),用键盘输入不同的数据到地址50H~59H。
全速运行程序,按暂停按钮,观察DATA窗口地址50H~59H的数据已从小到大排序完成。
输入不同数据,按复位后,可再次运行程序,观察实验效果。
3、打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。
四、流程图及源程序
1.源程序
ORG0
SIZEEQU10;数据个数
ARRAYEQU50H;数据起始地址
FLAGBIT10H;交换标志
START:
MOVR0,#ARRAY;首地址输入到R0
MOVR7,#SIZE-1;数据个数减一输入到R7
CLRFLAG;交换标志置零
GOON:
MOVA,@R0;将首地址中的内容读到A
MOVR2,A;将数据写入到R2中
INCR0;首地址加1
MOV20H,@R0;将首地址中的内容读到20H单元
CJNEA,20H,NOTEQUAL;不相等则跳转
SJMPNEXT
NOTEQUAL:
JCNEXT;前小后大,不交换
SETBFLAG;前大后小,置交换标志
XCHA,@R0;交换
DECR0;R0减1
XCHA,@R0
INCR0
NEXT:
DJNZR7,GOON;R7不等于0时转到GOON(即没有交换完)
JBFLAG,START;FLAG=1时转到START使FLAG清零
SJMP$
END
2.流程图如下:
否
否
思考题:
1.程序中FLAG标志有何作用?
2.如果要求排序按由大到小的顺序排列,程序应如何改动?
将修改过的程序编译并执行,观察排序的效果。
第二部分硬件实验
实验五P1口输入、输出实验
一、实验目的
1、学习P1口的使用方法
2、学习延时子程序的编写和使用
二、实验说明
P0口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P0口用为输入口时,必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
三、实验内容及步骤
实验
(一):
用P0口做输出口,接八位发光二极管,程序功能使发光二极管单只从右到左轮流循环点亮。
1、在实验台上找到本次实验使用的模块89C51单片机最小应用系统模块。
关闭电源开关,用十线扁平插头连接单片机P0口与八位发光二极管显示模块。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,依次打开电源开关,打开直流稳压电源,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031,选择使用硬件模拟(去掉“使用伟福软件模拟器前的勾”),端口选择COM1,波特率选择115200;选择通信端口,点击测试串行口,通信成功(发送次数与接收次数一致)既可退出设置,进行仿真。
4、编写*.ASM的源程序文件,进行编译。
编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况。
发光二极管单只从右到左轮流循环点亮。
实验
(二):
用P2.0、P2.1作输入接两个拨断开关,P0口用十线扁平插头接单片机发光二极管显示模块。
程序读取开关状态,并在发光二极管上显示出来。
1、用导线连接P2.0、P2.1到两个拨断开关,P0口用十线扁平插头接单片机发光二极管显示模块
2、编写源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。
向下拨为点亮,向上拨为熄灭。
四、流程图及源程序
1.流程图
(A)P1口循环点灯程序框图
(B)P1口输入输出程序框图
2.源程序:
(一)实验一
ORG0
Loop:
mova,#0FEh
movr2,#8
Output:
movP0,a
rla
AcallDelay
djnzr2,Output
sjmpLoop
Delay:
movr6,#0
movr7,#0
DelayLoop:
;延时程序
djnzr6,DelayLoop
djnzr7,DelayLoop
ret
end
(二)实验二
KeyLeftequP2.0;定义
KeyRightequP2.1
LedleftequP0.2
LedRightequP0.3
SETBKeyLeft;欲读先置一
SETBKeyRight
Loop:
Movc,keyleft
MovLEDLeft,c
MOVC,KeyRight
MovLEDRIGHt,c
LJMPLoop
END
五、电路图
六、思考题
1.对于本实验延时子程序
Delay:
MOVR6,#0
MOVR7,#0
DelayLoop:
DJNZR6,DelayLoop
DJNZR7,DelayLoop
RET
本模块使用12MHz晶振,计算此算延时程序的执行时间为多少?
2.实验二中为何要在循环前设置“SETBKeyLeft”、“SETBKeyRight”两条语句?
实验六用74LS245读入数据
一、实验目的
1、了解89C51常用端口与总线连接的方法
2、掌握用74LS245进行数据读入
二、实验说明
1、当P0口总线负载达到或超出P0最大负载能力8个TTL门时,必须接入总线驱动器。
74LS245即是双向数据总线驱动芯片,具有双向三态功能,既可以输出也可以输入数据,本实验中用作输入口。
74LS245的引脚如图所示:
74LS245是8路同相三态双向总线收发器,可双向传输数据,传输方向由DIR决定,当片选端E低电平有效时,DIR=0,信号由B向A传输;DIR=1,由A向B传输;当E为高电平时,A、B均成高阻态。
2、本实验用或门74LS32对74LS245进行译码,74LS32输入分别接单片机的RD和P2.7,决定74LS245的地址为7FFFH。
读这个地址,就是从74LS245读回开关的值。
三、实验内容及步骤
把读入值送入内存地址30H中。
1、选取用89C51单片机最小应用系统模块,按照原理图连接电路,DIR端与地相连。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
4、编写源程序,编译无误后,全速运行程序。
打开数据窗口(DATA),观察地址30H的值,暂停程序。
再次观察30H的值,是否已与拨码开关的值相同。
复位后,改变拨码开关输出,可再次运行程序,观察实验效果。
四、实验程序及流程图
1、流程图
2、源程序
CS245EQU7FFFH;置74LS245口地址
ORG0000H
START:
MOVDPTR,﹟CS245
MOVXA,@DPTR;读入数据
MOV30H,A
SJMP$
END
五、思考题
试用74LS245输出数据。
六、电路图
实验七用74LS273输出数据
一、实验目的
1、学习单片机系统中扩展I/0接口的方法
2、掌握数据输出程序的设计方法
3、了解数据锁存的概念和方法
二、实验说明
1、本实验用八D触发器74LS273扩展I/0输出端口,通过片选信号和写信号将数据总线上的值锁存在74LS273中,同时在74LS273的输出端口输出数据,当数据总线上的值撤消以后,由于74LS273能锁存信号,所以74LS273的输出端保持不变,直到有新的数据被锁存。
2、74LS273引脚图如图所示:
D1~D8为数据输入口,
Q1~Q8为数据输出口,
CLK为触发时钟,
CLR为数据清除端74LS273
3、本实验用八个LED灯显示单片机的输出数据,LED灯高电平亮。
4、实验中用或门74LS32对74LS273进行地址译码,或门输入端分别接单片机的P2.7和RD口,输出接CLK,决定74LS273的地址为7FFFH。
三、实验内容及步骤
把内存地址30H的值输出,8位发光二极管以二进制的形式将其显示出来。
1、选用89C51单片机最小应用系统模块,按照原理图连接电路Q1~Q8接8位发光二极管显示模块。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
4、编写源程序,编译无误后,打开数据窗口(DATA),用键盘输入某一数据到30H。
全速运行程序,观察发光二极管的亮灭情况,是否与30H的值相对应。
程序停止运行后,发光二极管不变化,说明74LS273具有锁存信号作用。
更改30H的值,复位后可再次运行程序,观察实验效果。
四、程序及流程图
1、流程图
2、源程序
CS273EQU7FFFH;置74LS273端口地址
ORG0
START:
MOVDPTR,#CS273
MOVA,30H
MOVX@DPTR,A;输出数据
SJMP$
END
五、电路图
六、思考题
1.本实验中I/O口的编址方法是线选法还是译码法?
如果将端口地址改为0DFFFH,地址线应如何连接?
画出电路图。
实验八计数器实验
一、实验目的
1.学习8031内部定时/计数器使用方法
2.学习计数器各种工作方式的用法
二、实验说明
1、8031内部有两个定时/计数器T0和T1,16位是指定时/计数器内的计数器是16位的,由2个8位计数器组成。
本实验使用定时/计数器T0,它由2个8位计数器TH0和TL0组成,TH0是高8位,TL0是低八位。
所谓加法计数器,指其计数的方法是对计数脉冲每次加1。
在其它单片机和可编程计数器芯片中,有的计数器是减法计数器,即先设置计数器的初值,然后对计数器脉冲每次减1,减到0,计数器溢出。
而8031内部的计数器是加法计数器,需先设置计数器的初值,本实验设置计数器初值为0,然后对计数脉冲每次加1,加到计数器满后溢出。
2、本实验中内部计数器起计数器的作用。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
这就决定了输入波形的频率不能超过机器周期频率。
三、实验内容及步骤
T0接外部脉冲输入,P1口接8位发光二极管显示模块,脉冲个数以二进制形式显示出来。
1、选用89C51单片机最小应用系统模块,用十线扁平插头连接P1口与8位发光二极管显示模块,T0端口接查询式键盘的KEY1。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,依次打开电源开关,打开直流稳压电源,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,设置仿真器为S51,仿真头POD-H8X5X,CPU为8031,选择使用硬件模拟(去掉“使用伟福软件模拟器前的勾”),端口选择COM1,波特率选择115200;选择通信端口,点击测试串行口,通信成功(发送次数与接收次数一致)既可退出设置,进行仿真。
4、编写源程序,编译无误后全速运行程序,按动KEY1按键,8位发光二极管显示按键次数。
四、流程图及源程序
ORG0
MOVTMOD,﹟00000101b;置T0计数器方式1
MOVTH0,﹟0;置T0初值
MOVTL0,﹟0
SETBTR0;T0运行
LOOP:
MOVA,TL0;记录P1口脉冲个数
CPLA
MOVP1,A
ACALLDELAY
LJMPLOOP;返回
DELAY:
MOVR4,#04H
AA:
MOVR5,#0FFH
AA1:
MOVR6,#0FFH
AA2:
NOP
DJNZR6,AA2
DJNZR5,AA1
DJNZR4,AA
RET
END
五、思考题
1、仔细观察实验电路,说明为何铵键要接在14引脚?
如果采用定时/计数器1应使用哪个引脚?
编写使用定时/计数器1的计数主程序。
2、若采用计数器1方式2进行计数,TMOD寄存器应赋何初值?
六、实验电路
实验九定时器实验
一、实验目的
1、学习8051内部定时器的使用和编程方法
2、进一步掌握中断处理程序的编写方法
3、熟悉伟福软件模拟仿真器以及仿真器的使用
二、实验说明
关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器,定时为一秒钟。
CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。
定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是12MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12÷12MHz=1uS
(256-定时常数)×1uS=100uS
定时常数=156。
然后对100uS中断次数计数10000次,就是1秒钟。
在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
三、实验内容及步骤
1、使用单片机最小应用系统模块,用导线连接P1.0到单只发光二极管(LED)上。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,依次打开实验台的电源开关,打开真流稳压电源拨动开关,打开模块电源,插上仿真器电源插头。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,设置“仿真器”为S51,“仿真头”POD-H8X5X,选择“CPU”为8031;再进行通讯设置,选择使用硬件模拟(去掉“使用伟福软件模拟器前的勾”,)“端口选择”COM1,“波特率”选择115200;点击测试串行口,通信成功(发送次数与接收次数一致)既可退出设置,进行仿真。
4、编写源程序,编译无误后,全速运行程序,观察发光二极管,二极管隔一秒点亮一次,点亮时间为一秒。
四、实验框图以及源程序
1、流程图
2、源程序
ORG0
TICKEQU10000;10000×100uS=1S
T100uSEQU256-100;100uS时间常数(6M)
C100uSEQU30H;100uS记数单元