《单片机原理及应用》实验指导书.docx
- 文档编号:28728881
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:33
- 大小:579.77KB
《单片机原理及应用》实验指导书.docx
《《单片机原理及应用》实验指导书.docx》由会员分享,可在线阅读,更多相关《《单片机原理及应用》实验指导书.docx(33页珍藏版)》请在冰豆网上搜索。
《单片机原理及应用》实验指导书
单片机原理及应用实验指导书
罗钧付丽编
重庆大学光电工程学院
2010年5月
目录
实验规则(2
实验一单片机监控程序实验(4学时(3
附1.1:
LAB2000P实验仪(9
附1.2:
验证实验程序(10
附1.3:
KEIL的使用步骤参考(17
实验二A/D转换实验(3学时(21
附2.1:
验证实验程序(24
实验三D/A转换实验(2学时(25
附3.1:
DA转换实验程序(27
实验四单片机系统综合实验(3学时(28
附4.1:
实验仪中的温度传感器电路(30
附4.2:
直流电机和步进电机控制接口电路(31
实验规则
为了维护正常的实验教学次序,提高实验课的教学质量,顺利的完成各项实验任务,确保人身、设备安全,特制定如下实验规则:
一、实验前必须充分预习,完成指定的预习内容,预习要求如下:
1.认真阅读本实验指导书,分析掌握本次实验的基本原理;
2.完成各实验预习要求中指定的内容;
3.明确实验任务。
二、实验时,认真、仔细的写出源程序,进行调试,有问题向指导老师举手提问;
三、实验时注意观察,如发现有异常现象(电脑故障或实验箱故障,必须及时报告指导老师,严禁私自乱动。
四、实验过程中应仔细观察实验现象,认真记录实验数据、波形、逻辑关系及其它现象,记录的原始结果必须经指导教师审阅签字后,方可离开。
五、自觉保持实验室的肃静、整洁;实验结束后,必须清理实验桌,将实验设备、工具、导线按规定放好,并填写仪器设备使用记录。
六、凡有下列情况之一者,不准做实验:
1.实验开始后迟到10分钟以上者;
2.实验中不遵守实验室有关规定,不爱护仪器,表现不好而又不服从教育者;
七、实验后,必须认真作好实验报告,在规定时间里必须交给实验指导老师,没交实验报告者,视为缺做一次实验。
实验报告要求必须包括:
1.写出设计实验程序;
2.总结实验步骤和实验结果;
八、一次未做实验,本实验课成绩视为不及格。
以上实验规则,请同学们自觉遵守,并互相监督。
实验一单片机监控程序实验(4学时
实验预习要求:
1.按照附3学习使用Keil软件。
2.熟悉键盘和显示器接口及工作原理。
3.根据实验原理,读懂验证实验程序,并写出设计性实验源程序。
4.思考题:
(1从附1.2监控程序可以看出:
六位数码管显示的数据存放在单片机哪个位置?
(2参考图1.1A与监控程序,键盘上若数字键7被按下,单片机怎样判断该键被按下?
一、实验目的
1.掌握8031系统中,键盘和显示器的接口方法。
2.掌握键盘扫描和LED八段码显示器的工作原理。
3.掌握对单片机IO口的控制编程。
二、实验器材
PC机一台,Lab2000P教学实验系统一台,导线数根。
三、实验内容
1.验证性实验
利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在八位数码管上显示出来。
2.设计性实验
用Lab2000P教学实验系统(见附2图,P1口产生一矩形波(周期可自己设定,设计的程序加到验证实验程序中,放在单片机程序空间0280h开始位置。
程序运行时,把产生矩形波的P1口(P1.0~P1.7任意一位接到示波器,观察设计程序运行时P1口产生的波形是否正确。
四、实验原理
1.实验仪器简介
实验设备中Lab2000P教学实验系统是核心部件,所有实验都通过计算机处理后下载到实验箱中进行验证。
本实验系统提供了多个模块,本次实验使用的主要模块为:
单片机8031模块、8255模块。
4×6键盘模块,六位LED显示模块等。
2.键盘扫描显示原理
键盘与六位LED显示器连接电路图见图1.1。
(1芯片介绍
74HC245:
高速CMOS型8位双向总线收发器(三态。
主要用于数据总线的同步双向通信,起总线隔离驱动作用。
74HC374:
为八D触发器集成芯片,电路中起显示驱动作用。
图1.1(A
图1.1(B
图1.1键盘及LED显示电路
(2扫描键盘和LED显示原理
(1
(2
MC1413
(2
本实验仪的LED显示电路和键盘电路如图1.1(A。
显示控制的位码由芯片74374(1输出,经反向驱动后(反向驱动芯片MC1413,作为LED的位选通信号。
位选通信号也同时作为键盘列扫描码,键盘扫描的行数据从芯片74245读回单片机,74374(1输出的列扫描码经245读入后,用来判断是否有键被按下,以及按下的是什么键。
如果没有键按下,由于上拉电阻的作用,经245读回的数据位均为高,如果有键按下,74374(1输出的低电平经过按键被接到245的端口上,这样从245读回的数据就会有低位,根据74374(1输出的列信号和245读回的行信号,就可以判断哪个键被按下。
LED显示的段码由74374(2输出。
键盘和LED显示的地址译码见图1.1(B,做键盘和LED显示实验时,需将KEY/LEDCS接到相应的地址译码上。
位码输出的地址为0X002H,段码输出的地址为0X004H,键盘行码读回的地址为0X001H,此处X是由KEY/LEDCS决定,参见地址译码。
例如将KEY/LEDCS接到地址译码的CS0(如图1.2上,那么位码输出的地址就为08002H,段码输出的地址就是08004H,键盘行码读回的地址为08001H。
(3Lab2000P实验仪单片机系统138译码电路
图1.2译码电路图
其中:
CS0:
08000H~08FFFHCS1:
09000H~09FFFHCS2:
0A000H~0AFFFH
CS3:
0B000H~0BFFFHCS4:
0C000H~0CFFFHCS5:
0D000H~0DFFFH
CS6:
0E000H~0EFFFHCS7:
0F000H~0FFFFH
4.段码表和键码表
(1段码表
七段数码管的字符型代码表如下表:
(2键码表
键码表如下:
KeyTable:
;键码定义
功能键:
16h,15h,14h,0ffh分别对应MON,LAST,NEXT,RST
13h,12h,11h,10h分别对应TRACE/MODE,MOVE,HERE,EXEC
数字键:
0dh,0ch,0bh,0ah分别对应D,C,B,A
0eh,03h,06h,09h分别对应E,3,6,9
0fh,02h,05h,08h分别对应F,2,5,8
00h,01h,04h,07h分别对应0,1,4,7
3.验证实验程序流程
(1主程序流程
图1.3监控实验主程序流程图
(2键盘扫描子程序流程图
图1.4键盘输入子程序流程图
五、实验步骤
1.运行Keil软件,按照附1.3“Keil软件使用的参考步骤”步骤1~10,建立工程、编译、链接。
2、硬件连接:
(1连接片选信号,将KEY/LEDCS连接到CS0即可(具体的电路原理图请参考图1.1;8255的片选连接到CS1。
(2用串口线连接Lab2000P实验箱(右上角标有“仿真器串口”处到PC机。
用电源线连接实验箱到220V电源,开启实验箱的电源(电源开关在实验箱的左侧。
3、按照附1.3步骤11~12下载目标文件,并全速运行程序。
4、程序全速运行时,从实验箱上的键盘输入0200,再按“EXEC”键,观察实验结果。
等到最左边的数码管显示“0”时,再从键盘输入0300,然后按“EXEC”键,用示波器观察8255的PA、PB、PC口输出的波形。
或者把PA、PB、PC中的每位输出连接到实验箱中“逻
辑笔”输入,观察指示灯的变化,记录实验结果。
5、开始做设计实验。
附1.1:
lab2000P实验仪
仿真器串口输入
附1.2:
验证实验程序
/*监控程序:
包括键盘扫描、8字循环显示、8255三个口输出方波*/
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
INequ08001h;键盘读入口
Ctrl_8255equ09003h;8255控制口地址
PA_8255equ09000h;8255A口地址
LEDBufequ60h;键盘输入数字显示缓冲
LEDBuf1equ70h;六位数码管循环显示缓存
LEDBuf2equ50h;键码缓存,用于跳转用
ljmpStart
LEDMap:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
;==============================延时子程序============================Delay:
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
;========================6位数码管轮流显示子程序=======================DisplayLED:
movr0,#020h
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
mova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop
ret
;==========================单片机读入键盘行的状态子程序===============TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;输出线全置为0
movdptr,#IN;IN=08001h
movxa,@dptr;读入键状态
cpla
anla,#0fh;高四位不用
ret
KeyTable:
;键码定义
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
;==========================扫描键盘子程序===========================GetKey:
movdptr,#OUTBIT
movP2,dph
movr0,#Low(IN
movr1,#00100000b
movr2,#6
KLoop:
mova,r1;找出键所在列
cpla
movx@dptr,a
cpla
rra
movr1,a;下一列
movxa,@r0
cpla
anla,#0fh
jnzGoon1;该列有键入
djnzr2,KLoop
movr2,#0ffh;没有键按下,返回0ffh
sjmpExit
Goon1:
movr1,a;按下键的键码在键码表中的位置偏移量=(列-1X4+(行-1;从第6列开始
mova,r2
deca
rla
rla
movr2,a;r2=(r2-1*4
mova,r1;r1中为读入的行值
movr1,#4
LoopC:
rrca;移位找出所在行
jcExit
incr2;r2=r2+行值
djnzr1,LoopC
Exit:
mova,r2;r2中为按下键的键码在键码表中的位置偏移量
movdptr,#KeyTable
movca,@a+dptr
movr2,a;取出键码
WaitRelease:
movdptr,#OUTBIT;等键释放
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
;================查找A中存放的数所对应LED显示段码子程序==============ToLED:
movdptr,#LEDMap
movca,@a+dptr
ret
;===========将键码(在A中存放到LEDBuf2所指向的内部存储器单元===========
ToKeyTable:
movr1,LEDBuf2
mov@r1,a
ret
;==========================初始化单片机内存子程序=====================
InitLED:
mov20h,#3fh
mov21h,#0h
mov22h,#0h
mov23h,#0h
mov24h,#0h
mov25h,#0h
ret
////////////////////////////////////////////////////////////主程序///////////////////////////////////////////////////////////////Start:
movLEDBuf,#020h
movLEDBuf2,#30h
callInitLED
movLEDBuf1+0,#0ffh;8字循环显示模块程序用到,0ffh为8.的段码
movLEDBuf1+1,#0ffh
movLEDBuf1+2,#0ffh
movLEDBuf1+3,#0ffh
movLEDBuf1+4,#0ffh
movLEDBuf1+5,#0ffh
movr4,#6
MLoop:
callDisplayLED
callTestKey;有键入?
jzMLoop;无键入,继续显示
callGetKey;读入键码
jb0e4h,commkey;如果ACC.4为1,则为命令键,转到commkey处理numkey:
movr0,a;保存数据a
callToKeyTable;键码保存在LEDBuf2(初始值30h指向的单元中mova,r0
anla,#0fh;显示键码
callToLED;查找A的段码并把段码保存在A中
movr0,LEDBuf
mov@r0,a;段码保存在LEDBuf(初始值20h指向的单元中
incLEDBuf
incLEDBuf2
djnzr4,MLoop
movr4,#6
movLEDBuf,#020h
movLEDBuf2,#030h
ljmpMLoop
commkey:
;处理命令键
cjnea,#13h,start;如果按下的键不是EXEC,则转向程序开始
callnextkey
;==========================把dph、dpl压入堆栈子程序====================
nextkey:
acallpickdata
pushdpl
pushdph
ret;dph与dpl弹出堆栈赋给PC
;=================================子程序==============================;;单片机内部RAM30h-33h单元中存储的是从键盘输入的地址,用于改变PC,执行相应的程序;
pickdata:
movr0,#031h;将30H、31H单元中的低4位数据赋给DPH
acallpickone
movdph,a
movr0,#033h;将32H、33H单元中的4位数据赋给DPL
acallpickone
movdpl,a
ret
;=============================取相邻内存单元低4位子程序================;取出r0与r0-1所指向的单元中低4位数据,并保存到A中,只取低4位,键盘上输入的每位数据(0到;F最多只用到4位表示
pickone:
mova,@r0
anla,#0fh
movr1,a
decr0
mova,@r0
swapa
anla,#0f0h
orla,r1
ret
////////////////////////////////////六位数码管轮流显示“8”字,从左到右共循环10次////////////////////////////org0200h
movr0,#4
clra
movr3,#10;循环次数,可自行设置
DisplayLED1:
;轮流显示
movr0,#LEDBuf1
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop1:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#200
callDelay;延迟值如果设定的太大的话,就会检测不到按键mova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop1
djnzr3,DisplayLED1
acallInitLED;重新从左边显示
movr4,#6
movLEDBuf,#020h
movLEDBuf2,#030h
ajmpMLoop
//////////////////////////////////////8255的PA,PB,PC口分别循环输出方波程序///////////////////////////org0300h
testPort:
movdptr,#Ctrl_8255
mova,#80h
movx@dptr,a
mova,#55h
movr3,#20;循环次数,可自行设置
testPortA:
movdptr,#PA_8255;PA口
movx@dptr,a
incdptr
movx@dptr,a;PB口
incdptr
movx@dptr,a;PC口
rra
movr6,#200;输出延时,可自行设置延时时间
acallDelay
djnzr3,testPortA
ajmpMLoop
end
附1.3:
Keil的使用步骤参考
1、点击”ProjectÆNewProject……”,新建一个工程文件,在CreatNewProject窗口
中输入工程名。
图1.5新建工程
2、CreatNewProject窗口中,点击“确定”,然后出现如下窗口,选择芯片类型,本实验选用芯片为Intel公司的8051AH。
图1.6选择芯片
3、点击“确定”后,在出现的如下窗口中选择“否”。
图1.7是否添加Startup文件到工程中
4、新建文件,File->New……或直接点击快捷按钮CreataNewFile,然后编写程序。
文件也可以在建立工程之前建立并编写。
图1.8新建程序文件
5、保存文件,注意文件名必须有后缀名,若是汇编程序后缀名为.asm,C程序为.c。
图1.9保存文件
6、把文件添加到建立的工程中,如下图,点击ProjectWorkspace窗口中的SourceGroup1,单击鼠标右键,在弹出的菜单中选择“AddFilesGroup“SourceGroup1””
图1.10添加文件到工程
7、找到程序文件保存的目录,在出现如下图所示的窗口中,单击“ADD”按钮。
图1.11ADDFilestoGroup窗口
8、按照下图1.12所示选择“OptionforTarget“Target1””。
图1.12选择“OptionforTarget“Target1””
9、单击选择OptionforTarget“Target1”窗口中的Debug。
设置.Use为“WAVEEmulatorDriver”。
图1.13OptionforTarget“Target1”窗口
10、Project->Rebuildalltargetfiles,工程编译链接。
注意:
观察输出窗口,看是否有错误提示,若有错误,需修改程序中的错误,然后再编译链接直至没有错误提示。
输出窗口
11、下载程序到仿真系统,选择Debug->start/stopDebugSession。
12、运行程序Debug->Go或按快捷键F5,若单步运行程序,可选择Debug->Step。
提示:
若需停止程序运行,选择Debug->StopRunning,然后再选择Debug->start/stopDebugSession
实验二A/D转换实验(3学时
实验预习要求:
1.熟悉AD0809工作原理,熟悉单片机中断编程方法。
2.写出设计性实验源程序。
3.思考题:
参考ADC0809转换电路图,ADC0809的控制引脚ALE、ENABLE、START怎样和单片机连接?
叙述其原理。
一、实验目的
1.理解A/D转换的基本原理。
2.掌握A/D转换芯片0809的性能及编程方法。
3.掌握单片机系统中扩展A/D和8255的基本方法。
4.掌握单片机外部中断编程方法。
二、实验器材
PC机一台,Lab2000P教学实验系统一台,导线数根
三、实验内容
1.验证性实验
利用实验箱上的ADC0809做A/D转换实验,实验板上的电位器提供模拟量输入,验证程序将模拟量转换成二进制数字量,用8255的PA口输出到发光二极管显示(图2.4。
2.设计性实验
ADC0809芯片A/D转换结束后会自动产生EOC信号,将EOC与CPU的外部中断相接,在验证实验基础上,用中断方式编程读回A/D结果。
四、实验原理
A/D转换器大致有三类:
一是双积分A/D转换器,优点是精度高,抗干扰性好;价格便宜,但速度慢;二是逐次逼近A/D转换器,精度,速度,价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0809属第二类,是八位A/D转换器。
每采集一次一般需100us。
本程序是用延时查询方式读入A/D转换结果。
验证程序流程图如图2.4所示。
图2.1ADC0809转换电路
图2.2ADC0809控制信号与单片机连接图2.38255A引脚图图2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理及应用 单片机 原理 应用 实验 指导书