单片机实验指导书终稿概要.docx
《单片机实验指导书终稿概要.docx》由会员分享,可在线阅读,更多相关《单片机实验指导书终稿概要.docx(24页珍藏版)》请在冰豆网上搜索。
单片机实验指导书终稿概要
实验一清零、移数、判断
一、实验目的
1、掌握汇编语言程序设计和调试方法。
2、掌握RAM存储器读写及存储块操作方法
3、熟悉分支结构程序的设计。
二、实验内容
将片内30H~40H及片外0010H~0100H清零,然后将片内41H~47H的内容移到片外0041H~0047H,判断:
若(0041H)<15,则求其平方存到0050H中,并将位00H置1。
(0041H)=15,则加15存到0050H中,并将位01H置1。
(0041H)>15,则减15存到0050H中,并将位02H置1。
三、实验说明
通过本实验,学生可以了解单片机读写存储器的读写方法,同时也可以了解单片
机编程,调试方法。
四、实验框图
片内外RAM清零流程图移数流程图
判断流程图
五、思考题
1、如果平方数超过255,怎样将数放到片内RAM30H和31H单元内,写出指令。
2、位的表示方法有哪些,举例说明?
将01H位清零的方法有几种,写出指令。
实验二排序、加法
一、实验目的
1、进一步掌握汇编语言程序设计和调试方法。
2、掌握数据排序的算法及加法运算。
二、实验内容
1、有两个长度为10个字节的无符号数分别放在片内30H和40H为首的存储单元中(低字节),求其和(带进位位),放在50H为首的单元中。
2、将50H为首单元中的数按升序排列放在60H为首的单元中。
三、实验说明
通过本实验,学生可以了解单片机排序的算法,本程序采用“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
四、实验框图
加法运算流程图排序流程图
五、思考题
1、-125与-9相加,PSW中OV、AC、CY的值是多少?
各表示什么含义?
2、两个压缩BCD码59和22相加,结果放到片内RAM30H单元中,写出程序。
实验三查表、多分支
一、实验目的
1、掌握查表指令。
2、掌握多分支结构程序的设计。
二、实验内容
设有一表格,表中数为:
00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。
根据片外0000H单元的低4位的数,取出表中相应的值存到片内30H中;根据片外0000H单元的高4位的数,将片内RAM区中可位寻址的相应的位置1(从位00H~位0FH,只可有一个位地址为1)
三、实验说明
通过本实验,学生可以掌握多分支结构程序的设计,本程序采用查表指令和散转指令进行程序设计。
四、实验框图
查表指令查数流程图散转指令位操作流程图
五、思考题
1、如果表中对应的数是一个字,该如何操作,例如:
根据片内RAM50H单元中的数,给出的数在00-05H之间,数据表存放在片内ROM20H开始的单元中,数据表存放在20H开始的片内ROM中,查表所得数据字(双字节,高位字节在后)高位字节存于52H、低位字节存于51H。
写出程序。
50H单元中的数据:
000102030405H
对应的数:
1011H1234H3456H4578HAA10HFF89H
2、写出远程查表和近程查表指令的查表范围。
实验四外部中断实验
一、实验目的
1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
二、实验要求
1、用单次脉冲申请中断,在中断处理程序中对输出信号进行反转。
2、用单次脉冲申请中断,在中断处理程序中对输出信号进行处理,使8个发光二极管
依次点亮。
3、利用两个按键分别接INT0、INT1,作为加1和减1键使用,实现上电时8个发光
二极管全灭,每按加1键一次,亮的灯多一盏,按8次后重复开始状态,每按减1键一次,亮的灯少一盏,按8次后重复开始状态。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
P1.2
L2
4
P1.3
L3
5
P1.4
L4
6
P1.5
L5
7
P1.6
L6
8
P1.7
L7
9
单脉冲输出
INT0(51系列)
10
单脉冲输出
INT1(51系列)
11
单脉冲输出
EINT(96系列)
单次脉冲
四、实验说明
中断服务程序的关键是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断程序中设定是否允许中断重入,即设置EXO位。
3.对于80C196,要选择相应的中断源,并设置中断屏蔽寄存器的相应位。
中断程序使用了INT0、INT1中断(80C196为EXTINT中断),一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,实验中要注意保护用到的寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
五、实验框图
下图为实验要求1对应的实验框图
外部中断子程序框图
主程序框图
中断入口
中断返回
恢复现场
状态位输出
状态位取反
保护现场
等待中断
中断允许
设置中断控制
寄存器
设置初始状态
开始
:
六、思考题
1、利用软件延时的方法,修改程序改变发光二极管的发光时间,写出延时程序
实验五定时器实验
一、实验目的
1、学习8031内部定时计数器的使用和编程方法。
2、进一步掌握中断处理程序的编程方法。
二、实验要求
1、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转。
2、单片机P1.0、P1.1接两个发光二极管,INT0接一启动按键,利用定时器实现启动后两个发光二极管一亮一灭,亮灭时间均为1s,再按按键发光二极管停止工作。
3、单片机P1.0、P1.1接两个发光二极管,利用定时器产生两个控制信号,分别控制两个发光二极管实现一个每隔200µs状态发生一次反转,另一个每隔400µs状态发生一次反转。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
单脉冲输出
INT0(51系列)
4
单脉冲输出
INT0(51系列)
5
单脉冲输出
EINT(96系列)
单次脉冲
四、实验说明
1、关于内部定时计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部定时计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器。
2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
3、内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100us中断一次,所以定时常数的设置可按以下方法计算:
机器周期=12÷6MHZ=2uS
(256-定时常数)×2uS=100us
定时常数=206。
然后对100us中断次数计数10000次,就是1秒钟。
4、在中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
5、对于80C196,与定时器有关的寄存器为IOC1.2和INT-MASK。
IOC1.2为定时器1溢出中断允许/禁止位。
INT-MASK的第0位为定时器溢出屏蔽位。
6、对于80C196,在设置中断定时常数时,要注意先设置窗口寄存器WSR,设置完常数后,再恢复原WSR值。
五、实验框图
下图为实验要求1对应的实验框图:
中断子程序框图
主程序框图
是
否
保护现场
恢复现场
重新设置秒计数值
是否到一秒
定时中断入口
中断返回
状态位取反
秒计数值减1
设置初始状态位
设置定时常数
置T0中断工作方式
等待中断
输出状态位
中断允许
开始
六、思考题
1、若定时时间超过定时器的最大定时时间,如何处理?
若需要定时2s,定时器怎样设
定?
实验六定时器计数器实验
一、实验目的
1、学习80C51内部定时/计数器使用方法。
二、实验要求
1、利用80C51内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚
进行计数。
将其数值按二进制数在P1口驱动LED灯上显示出来。
2、利用80C51内部定时计数器T0和T1,T0作为计数器使用,T1作为定时器使用,计
数次数达到10次时,控制P1.0连接的发光二极管点亮100µs(由定时器T1实现),计数次数再增加10次,发光二极管灭100µs,如此循环。
3、利用80C51内部定时计数器T0,采用工作方式3,TL0设置为计数器,实现外部中
断功能,TH0设置为定时器,实现中断响应过程中控制P1.0连接的发光二极管点亮100µs。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
P1.2
L2
4
P1.3
L3
5
单脉冲输出
T0
四、实验说明
本实验中内部计数器起计数器的作用。
外部事件计数脉冲由P3.4引入定时器T0。
单
片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
同时这就决定了输入波形的频率不能超过机器周期频率。
五、实验框图
计数,输出计数值
开始计数
设置工作方式
开始
下图为实验要求1对应的实验框图:
六、思考题
如何设置计数10次发生中断?
设计的依据是什么?
实验七8255输入、输出实验
一、实验目的
1、掌握8255芯片结构及编程方法。
2、掌握8255输入/输出实验方法。
二、实验内容
利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255PA口作输出,PB口作输入。
1、按下开关,并用发光极管显示开关的状态。
2、让发光二极管循环左移点亮,延时时间为1S。
三、实验电路及连线
8255的CS/接地址译码/CS0,则命令字地址为8003H,PA口地址为8000H,PB口地址为8001H,PC口地址为8002H。
PA0-PA7(PA口)接LED0-LED7(LED)PB0-PB7(PB口)接K0-K7(开关量)。
数据线、读/写控制、地址线、复位信号板
上已接好。
连线
连接孔1
连接孔2
1
CS0
8255CS
2
L0
8255-PA0
3
L1
8255-PA1
4
L2
8255-PA2
5
L3
8255-PA3
6
L4
8255-PA4
7
L5
8255-PA5
8
L6
8255-PA6
9
L7
8255-PA7
10
K0
8255-PB0
11
K1
8255-PB1
12
K2
8255-PB0
13
K3
8255-PB2
14
K4
8255-PB3
15
K5
8255-PB4
16
K6
8255-PB6
17
K7
8255-PB7
四、实验说明
可编程通用接口芯片8255A有三个八位的并行I/O口,它有三种工作方式。
本实验采用的是方式0:
PA,PC口输出,PB口输入。
很多I/O实验都可以通过8255来实现。
五、实验步骤
用插针按接线图接好线,运行程序,发光二极管按下开关的状态,调整开关的状态,发光二极管跟开关的变化而变化。
延时
六、实验框图
置8255PB口
发光二极管循环左移点亮流程图
用发光极管显示开关状态流程图
七、思考题
若延时1S用定时器实现,程序应如何改?
实验八单片机串行口通讯实验
一、实验目的
1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
二、实验内容
主机:
每隔1秒读一次P0口并将读数发给从机,同时接收从机的信号,若与所发数相同,则P1.0的灯亮,若不同或不回答则P1.1的灯亮。
从机:
将接收的数据从P1口送出,并回发此数据。
三、实验电路及连线
连线
连接孔1
连接孔2
1
P0。
0
K0
2
P0。
1
K1
3
P0。
2
乙方
甲方
K2
4
P0。
3
K3
5
P0。
4
K4
6
P0。
5
K5
7
P0。
6
K6
8
P0。
7
K7
9
P1。
0
LED0
10
P1。
1
LED1
主机接线图
从机接线:
P1口接8只发光二极管。
四、实验说明
1、8051、80C196的RXD、TXD接线柱在POD51/96仿真板上,8088/86的TXD、RXD在POD8086仿真板上的8251芯片旁边。
2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。
3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。
可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。
可以用实验仪上的逻辑分析仪采样串口通信的波形。
五、实验步骤
按要求接好线,运行程序,改变开关状态,看主机和从机发光二极管的变化情况。
六、实验框图
1、甲机程序流程图
清接收中断标志RI
发送中断标志TI=1?
接收中断标志RI=1?
与所发数据同?
2、乙机程序流程图
清发送中断标志TI
接收中断标志RI=1?
发送中断标志TI=1?
七、思考题
1、51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯,进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,如何实现?
实验九A/D转换实验
一、实验目的
1、掌握A/D转换与单片机的接口方法。
2、掌握A/D芯片ADC0809转换性能及编程。
3、通过实验掌握单片机如何进行数据采集。
二、实验内容
利用实验板上的ADC0809做A/D转换器,实验板上的电位器提供模拟量输入,编制程序,将模拟量转换成二进制数字量,采用查询方式读入A/D转换结果,用8255的PA口输出到发光二极管显示。
三、实验电路及连线
连线
连接孔1
连接孔2
1
IN0
电位器输出
2
AD_CS
CS0
3
EOC
INT0
4
8255_CS
CS1
5
PA0
L0
6
PA1
L1
7
PA2
L2
8
PA3
L3
9
PA4
L4
10
PA5
L5
11
PA6
L6
12
PA7
L7
四、实验说明
A/D转换器大致有三类:
一是双积分A/D转换器,优点是精度高,抗干扰性好;价格便宜,但速度慢;二是逐次逼近A/D转换器,精度,速度,价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0809属第二类,是八位A/D转换器。
每采集一次一般需100us。
本实验采用延时查询方式读入A/D转换结果,也可以用中断方式读入结果。
在中断方式下,A/D转换结束后会自动产生EOC信号,将其与CPU的外部中断相接,在中断服务程序中读取转换结果。
有兴趣的同学可以试试编程用中断方式读回A/D结果。
五、实验步骤
把0809的0通道IN0用插针接至电位器输出,按接线图接好线(查询方式下,EOC和INT0之间不用连接)。
运行程序,发光二极管显示转换后的数字量,调整电位器输出值,发光二极管跟随电位器电压的变化而变化。
六、实验框图
开始
初始化0809和8255
选择通道号,启动A/D转换
N
延时时间到?
吗?
读取转换结果
将转换结果从8255输出
查询方式进行A/D转换时程序流程图
七、思考题
1、修改程序,能对IN0~IN7这8个通道轮流采样,把转换结果依次存入数据存储器中20H~27H单元。
2、画出采用中断方式进行A/D转换的程序流程图。
实验十键盘扫描、显示实验
一、实验目的
1、了解数码管动态显示的原理。
2、了解用总线方式控制数码管显示的方法。
3、掌握键盘扫描和LED八段码显示器的工作原理。
4、掌握键盘和显示器的接口方法和编程方法。
三、实验内容
1、利用实验仪提供的显示电路,动态显示一行数据。
2、利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
三、实验电路及连线
D5D4D3D2D1D0
段码输出位选通信号
(0x004H)(0x002H)
D3D2D1D0
读回行码列码
(0X001H)(0X002H)
七段数码管的字型代码表(共阴极)如下表:
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
0
1
7fh
9
1
1
0
1
1
1
1
6fh
A
1
1
1
0
1
1
1
77h
B
1
1
1
1
1
0
0
7ch
C
0
1
1
1
0
0
1
39h
D
1
0
1
1
1
1
0
5eh
E
1
1
1
1
0
0
1
79h
F
1
1
1
0
0
0
1
71h
连线
连接孔1
连接孔2
1
KEY/LED_CS
CS0
四、实验说明
1、实验仪提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
本实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。
此处X是由KEY/LEDCS决定。
做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H。
2、本实验仪提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
地址中的X是由KEY/LEDCS决定,参见地址译码。
例如将KEY/LEDCS信号接CS0上,则列扫描地址为08002H,行码地址为08001H。
列扫描码还可以分时用作LED的位选通信号。
3、实验2的实验程序可分成三个模块。
①键输入模块:
扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
②显示模块:
将显示单元的内容在显示器上动态显示。
③主程序:
调用键输入模块和显示模块。
五、实验步骤
1、按要求接好线,运行程序,在数码管上动态显示一行数据,调整动态扫描时间看显示的变化情况。
2、按要求接好线,运行程序,按动小键盘,数码管显示对应的数字或字符。
六、实验框图
1、显示程序流程图
Y
显示程序流程图
2、键盘扫描、显示程序流程图
N
主程序流程图
返回
读取键值子程序流程图
七、思考题
1、对于LED显示程序,如果数码管采用共阳极接法,程序该怎样修改?