单片机原理及其接口技术实验报告.docx
- 文档编号:23244620
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:43
- 大小:668.55KB
单片机原理及其接口技术实验报告.docx
《单片机原理及其接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理及其接口技术实验报告.docx(43页珍藏版)》请在冰豆网上搜索。
单片机原理及其接口技术实验报告
单片机原理及其接口技术实验指导书
实验1KeilC51的使用(汇编语言)
一.实验目的:
初步掌握KeilC51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。
二.实验设备:
ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。
三.实验原理及环境:
在计算机上已安装KeilC51软件。
这个软件既可以与硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不与硬件连接,仅在计算机上以虚拟仿真的方法运行程序。
如果程序有对硬件的驱动,就需要与硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。
四:
实验内容:
1.掌握软件的开发过程:
1)建立一个工程项目选择芯片确定选项。
2)加入C源文件或汇编源文件。
3)用项目管理器生成各种应用文件。
4)检查并修改源文件中的错误。
5)编译连接通过后进行软件模拟仿真。
6)编译连接通过后进行硬件仿真。
2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。
3.在2的基础上,实现同时在P1.0和P1.1上各输出一个频率同为1Hz但电平状态相反的方波。
五:
程序清单:
ORG0000H
AGAIN:
CPLP1.0
MOVR0,#10;延时0.5秒
LOOP1:
MOVR1,#100
LOOP2:
MOVR2,#250
DJNZR2,$
DJNZR1,LOOP2
DJNZR0,LOOP1
SJMPAGAIN
END
六:
实验步骤:
1.建立一个工程项目选择芯片确定选项
如图1-1所示:
Project→
NewProject→
输入工程名test→
保存工程文件(鼠标点击保存按钮)
图1-1创建工程名
弹出下一界面。
如图1-2所示:
选CPU厂家(Atmel)→
选CPU型号(89C51),
选好后确定
图1-2选厂家,选CPU型号
接着选晶振频率及生成HEX文件等。
如图1-3所示:
Project→
OptionsforTarget‘Target1’…→
在Target中→
更改CPU晶振频率为12MHz→⑤在Output中→⑥选择生成HEX格式其它采用缺省设置→⑦选好后确定。
图1-3选晶振频率及生成HEX文件等窗口
2.建立汇编源文件
如图1-4所示:
File→
New,
弹出源文件编辑窗口。
输入以下源文件:
ORG0000H
AGAIN:
CPLP1.0
MOVR0,#10;延时0.5秒
LOOP1:
MOVR1,#100
LOOP2:
MOVR2,#250
DJNZR2,$
DJNZR1,LOOP2
DJNZR0,LOOP1
SJMPAGAIN
END
图1-4进入编辑源文件窗口
源程序编写完后,
File→
SaveAs将文件以test.asm保存在E:
\test目录下,获得汇编语言源程序。
3.用项目管理器生成(编译)各种应用文件
点击Target1前之+号→出现
SourceGroup1→
点击它并按鼠标右键会生弹出下拉菜单见图1-5编译文件文件窗口→选择
AddFilestoGroup‘SourceGroup1’→
点击add向项目中添加Test.asm源文件→⑥点击close关闭AddFilestoGroup‘SourceGroup1’窗口→
在SourceGroup1前会出现一个+号→
点击之弹出test.asm文件名点击该文件名→
主窗口中会出现该程序
图1-5进入编译文件文件窗口
编译:
Project→Buildtarget就会生成一系列到文件如OBJ文件LST文件HEX文件等。
4.检查并修改源文件中的错误
如果在源文件中存在错误在Output窗口中会出现错误提示信息,你可以在源程序中进行修改,然后存盘后重新Build观察错误提示信息。
5.编译连接通过后进行软件模拟仿真
Debug→Start/StopDebugSession进入软件模拟的仿真窗口,可使用单步、设断点来进行调试和除错。
6.编译连接通过后进行硬件仿真
实验箱的仿真串口必须与PC机串口连接,通电,拨位开关K10必须拨在B端,连接P10和L00,连接P11和L01,设置硬件实时仿真调试选项:
Project→OptionsforTarget‘Targetl’→Debug.硬件实时仿真调试选项窗口,见图1-5选硬件仿真选项,按确定按钮确定。
图1-5硬件实时仿真调试选项窗口
进入硬件实时调试窗口后,可打开各种观察窗口,进行单步断点运行到光标连续执行等操作,无误后可连续运行观察LED发光管的显示效果。
注意退出时须按单片机的复位按键SS10,在进行硬件连接前最好也先按单片机的复位按键SS10。
7.修改以上程序,实现同时在P1.0和P1.1上各输出一个频率为1Hz但电平状态相反的方波。
七:
试验总结:
通过第一次实验我熟悉了KeilC51(汇编语言)和ZY15MCU12BD的基本操作过程,但还不是很熟练,课后要加强练习。
实验2十六进制与十进制的转换
一:
实验目的:
实践汇编语言顺序结构的编程方法,掌握十六进制数转换成十进制数的编程实现,掌握单步运行程序的基本技巧。
二:
实验设备:
ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。
三:
实验原理及环境:
将十六进制数转换成十进制数有多种方法,比较典型的是用待转换数除以权值的方法,即依次除以100、10,则各次的商和最后的余数就是所需要的十进制数。
四:
实验内容:
将放在片内RAM30H中的2位十六进制数转换成3位十进制数,按照从高位到低位的顺序分别放入31H~33H中(即非压缩的BCD码)。
在本实验中,要求使用单步方式运行,以便观察各单元的变化过程。
五:
程序清单:
LJMP0100H
ORG0100H
MOVA,30H
MOVB,#16
DIVAB
MOVR0,B
MOVB,#16
MULAB
ADDA,R0
MOVB,#10
DIVAB
MOV33H,B
MOVA,33H
MOV33H,A
MOVB,#10
DIVAB
MOV32H,B
MOVA,32H
MOV32H,A
MOV31H,A
SJMP$
END
六:
实验步骤:
1.建立一个工程,将在预习中做好的*.asm文件加入。
2.调出存储器编辑窗口,将30H单元修改成某一值。
3.在希望停下来的指令上设断点,然后运行,在断点处停下来后,再单步运行,可以看到各单元的变化情况。
运行完最后一条指令后,在31H~33H中应获得30H中十六进制数对应的十进制数。
七:
试验总结:
这个实验麻烦的就是编程实现十六进制与十进制的转换,尤其是算数运算指令的使用。
实验过程中还不是很熟练;还有一个体会就是算法对编写程序至关重要,如果编写程序之前没有确立算法,那么编程将无法下手。
实验38段LED显示器动态显示
实验目的:
掌握8段LED显示器的使用及显示程序的设计方法。
实验设备:
ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。
实验原理及环境:
1.实验箱上有6位8段LED显示器,采用动态方式驱动。
即使一位LED显示器显示内容一段时间,然后下一位LED显示器显示内容一段时间……,周而复始。
只要刷新频率不小于50Hz,就可以获得清晰稳定的显示效果。
2.MCS-51CPU通过一片8255对8段LED显示器进行段驱动和位驱动,8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。
3.LED显示器的各段由8255的B口驱动,低电平对应段发光,高电平对应段熄灭。
各段的驱动位如图3-1,各显示字的字形代码如下所示:
显示字字形代码显示字字形代码显示字字形代码
0C0H0.40H-BFH
1F9H1.79H灭FFH
2A4H2.24H
D4
D3
D6
D2
D1
D5
D0
D7
3B0H3.30H
499H4.19H
592H5.12H
682H6.02H
7F8H7.78H
880H8.00H
990H9.80H
A88HA.08H
B83HB.03H
图3-18段LED各段控制位
CC6HC.46H
DA1HD.21H
E86HE.06H
F8EHF.0EH
4.LED显示器的各位由8255的A口驱动,低电平对应位发光,高电平对应位熄灭。
LED显示器对应位口位
左起第一位D0
左起第二位D1
左起第三位D2
左起第四位D3
左起第五位D4
左起第六位D5
实验内容:
1.编写一个6位LED显示器驱动子程序(在主程序中已对接口芯片8255做好必要的初始化)。
字形表按0~F、0.~F.、-、灭的顺序排列。
该子程序的要求如下:
入口:
待显示数(00H~1FH)放在20H~25H(分别对应显示器的左起第1~第6位)中。
出口:
每位LED显示0.5mS后返回。
占用:
R0、R1、R2、A、PSW、DPTR。
显示子程序的流程图如图3-2和图3-3:
Y
N
开始
置显示数地址指针初值20H
显示器位码指向左起第一位
取出待显示数
查出字形代码
字形代码送段口
位码送位口
软件延时0.5mS
关闭所有显示位
位码指向下一位
显示数地址指针加1
显示地址指针超出?
返回
图3-2显示子程序流程图
Y
N
开始
显示地址指针R0=20H
位码初值R2=FEH
A←(R0)
DPTR←表头首址
A←(A+DPTR)
DPTR←4001H
(DPTR)←A
A←R2
DPTR←4000H
(DPTR)←A
软件延时0.5mS
(用R1作计数器)
A←FFH
(DPTR)←A
R2左移
R0←R0+1
R0=26H?
返回
图3-3显示子程序的详细流程图
2.子程序自身无法运行,为了运行这个子程序,另编写一个主程序。
这个主程序的功能是首先对8255进行初始化,然后就反复调用显示子程序,显示20H~25H中的待显示内容。
首先在20H起始的6个字节中置入00H~0FH,然后连续运行此程序,应显示0~F;在20H起始的6个字节中置入10H~1FH,然后连续运行此程序,应显示0.~F.;若置入20H、21H,则显示-、灭。
开始
8255初始化
A口、B口方式0输出
C口任意
调用显示子程序
设置堆栈栈底SP
软件延时0.5秒
等待8255复位结束
图3-4显示主程序流程图
3.按以下框图编写一段程序,运行后会在显示器上应出现连续向左移动的0~F。
20H~25H清0
调用显示子程序330次,运行时间约1秒
(20H)←(21H)
(21H)←(22H)
(22H)←(23H)
(23H)←(24H)
(24H)←(25H)
(25H)←(25H)+1
(25H)←(25H)∧#0FH
开始
8255初始化
A口、B口方式0输出
C口任意
设置堆栈栈底SP
软件延时0.5秒
等待8255复位结束
图3-5实验内容3流程图
6位LED显示器驱动子程序程序清单:
ORG0000H
MOVSP,#6FH
MOV20H,#00
MOV21H,#00
MOV22H,#00
MOV23H,#00
MOV24H,#00
MOV25H,#00
MOVDPTR,#4003H;8255初始化
MOVA,#10000001B;A口、B口方式0输出,C口高4位输出,低4位输入
MOVX@DPTR,A
;ACALLDELAY500MS;延时0.5秒
LOOP3:
LCALLDISP;调用显示子程序
SJMPLOOP3
DISP:
MOVR0,#20H
MOVR2,#0FEH
DISP1:
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#4001H
MOVX@DPTR,A
MOVA,R2
MOVDPTR,#4000H
MOVX@DPTR,A
CALLDELAY500US
MOVA,#0FFH
MOVX@DPTR,A
MOVA,R2
RLA
MOVR2,A
INCR0
CJNER0,#26H,DISP1
RET
DELAY500MS:
PUSH00H
MOVR0,#25;延时0.5秒
NEXT:
ACALLDELAY20MS
DJNZR0,NEXT
POP00H
RET
DELAY500US:
PUSH03H
MOVR3,#250
DJNZR3,$
POP03H
RET
DELAY20MS:
PUSH06H
PUSH07H
MOVR7,#99
AGAIN:
MOVR6,#100
DJNZR6,$
DJNZR7,AGAIN
POP07H
POP06H
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;0,1,2,3,4,5,6,7
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;8,9,A,B,C,D,E,F
DB40H,79H,24H,30H,19H,12H,2H,78H;0.,1.,2.,3.,4.,5.,6.,7.
DB00H,10H,08H,03H,46H,21H,06H,0EH;8.,9.,A.,B.,C.,D.,E.,F.
END
主程序程序清单:
ORG0000H
MOVSP,#6FH
MOV20H,#00
MOV21H,#00
MOV22H,#00
MOV23H,#00
MOV24H,#00
MOV25H,#00
MOVDPTR,#4003H;8255初始化
MOVA,#10000001B;A口、B口方式0输出,C口高4位输出,低4位输入
MOVX@DPTR,A
;ACALLDELAY500MS;延时0.5秒
LOOP3:
LCALLDISP;调用显示子程序
MOV20H,21H
MOV21H,22H
MOV22H,23H
MOV23H,24H
MOV24H,25H
INC25H
ANL25H,#0FH
SJMPLOOP3
DISP:
MOVR0,#20H
MOVR2,#0FEH
DISP1:
MOVA,@R0
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPTR,#4001H
MOVX@DPTR,A
MOVA,R2
MOVDPTR,#4000H
MOVX@DPTR,A
CALLDELAY500US
MOVA,#0FFH
MOVX@DPTR,A
MOVA,R2
RLA
MOVR2,A
INCR0
CJNER0,#26H,DISP1
RET
DELAY500MS:
PUSH00H
MOVR0,#25;延时0.5秒
NEXT:
ACALLDELAY20MS
DJNZR0,NEXT
POP00H
RET
DELAY500US:
PUSH03H
MOVR3,#250
DJNZR3,$
POP03H
RET
DELAY20MS:
PUSH06H
PUSH07H
MOVR7,#99
AGAIN:
MOVR6,#100
DJNZR6,$
DJNZR7,AGAIN
POP07H
POP06H
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H;0,1,2,3,4,5,6,7
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;8,9,A,B,C,D,E,F
DB40H,79H,24H,30H,19H,12H,2H,78H;0.,1.,2.,3.,4.,5.,6.,7.
DB00H,10H,08H,03H,46H,21H,06H,0EH;8.,9.,A.,B.,C.,D.,E.,F.
END
实验步骤:
1.将P0.0~P0.7与JD0~JD7连接起来。
开关KC倒向上方。
2.建立一个工程,将在预习中做好的实验内容1和2的程序拷贝到一个*.asm文件加入。
3.编译后与单片机硬件连接,运行。
4.在20H起始的6个字节中置入00H~0FH中的任意6个值,然后连续运行此程序,应显示0~F中的6个数字;在20H起始的6个字节中置入10H~1FH中的任意6个值,然后连续运行此程序,应显示0.~F.中的6个数字。
5.如果运行结果不正常,可以用设断点、单步运行的方法查找错误所在,修改后重新编译、与单片机硬件连接,运行。
直至获得正确的结果。
6.建立一个工程,将在预习中做好的实验内容1和3的程序拷贝到一个*.asm文件加入。
7.编译后与单片机硬件连接,运行。
8.观察LED显示器,应从右向左依次出现0、1、2、3……
重要提示:
1.指令中的“,:
;”是西文字符,切不可使用中文符号;数字“0”与字符“o”不可混淆。
2.软件延时可以用循环程序实现,单片机的时钟为12MHz,每条指令的执行时间可以从教材的附表中查出。
3.程序的起始地址必须为0000H(以后各实验均同)。
4.退出硬件连接可以按SS10,在进行硬件连接前最好也按一次SS10。
5.对程序修改后必须退出硬件连接,进行编译后再重新进行硬件连接才能生效。
6.调用显示子程序330次可以用双重循环实现。
且使用的计数单元与显示子程序中用到的不能冲突。
7.开关KC倒向上方。
实验总结:
本次试验编程比较复杂,但在老师的指导和同学的帮助下还是完成了试验。
通过这前三次的实验多单片机的实验过程有了较稳定的掌握。
实验4矩阵键盘的使用
实验目的:
掌握矩阵键盘的使用及键盘扫描程序的设计方法。
实验设备:
ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装KeilC51的计算机一台。
实验原理及环境:
实验箱上有一个16键的矩阵键盘,分为4行×4列。
4行分别连接到一片8255(与8段LED显示器的段驱动和位驱动共用)的PC0~PC3,4列分别连接到8255的PC4~PC7。
8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。
第4列(PC7)
第3列(PC6)
第2列(PC5)
第1列(PC4)
行
输
入
PC3
00H
01H
02H
03H
第4行
PC2
04H
05H
06H
07H
第3行
PC1
08H
09H
0AH
0BH
第2行
PC0
0CH
0DH
0EH
0FH
第1行
00H
01H
02H
03H
列驱动
图4-1键盘布置及键值
选择列驱动码使某一列为低电平而其它列为高电平,再读取行输入,若该列有键按下则相应的位便是低电平。
每个键均安排一个键值,如图4-1所示。
实验内容:
1.编写一个键盘扫描子程序(在主程序中已对接口芯片8255做好必要的初始化)。
这个程序对键盘作一次扫描,若无键按下,返回时累加器A中为FFH,若有键按下,返回时A中为该键键值,键盘扫描子程序流程图如图4-2所示。
Y
Y
N
Y
N
N
Y
开始
输出列驱动码
输入行状态
有无键按下?
?
暂存行状态
软件延时20mS
再读行状态
二次相同?
读行状态直到键松开
调用查键值子程序
返回
列驱动码指向下一列
(列驱动码左移)
列驱动码超出?
A←#0FFH
返回
有无键按下?
?
N
R2置列驱动码初值
(第1列低电平,其他列高)
图4-2键盘扫描子程序流程图
其中,查键值子程序可以自行编写,也可以使用下面这个查键值子程序,这个子程序的参数如下:
入口:
行列关键值码放在累加器A中,高4位是列驱动码(被扫描列的对应位为0,其余位均为1),低4位是行状态(按下键的对应位为0,其余位均为1)。
出口:
键码放在A中带出。
占用:
R1、A、PSW、DPTR。
程序清单如下:
;查键值子程序,起始地址为KEY20
KEY20:
PUSHACC;暂存关键值
MOVR1,#00H;查键值自变量清0
KEY21:
JNBACC.4,KEY22;计算列数
RRA
INCR1
SJMPKEY21
KEY22:
MOVA,R1;按每列4个键计算
MOVB,#4
MULAB
MOVR1,A
POPACC;恢复关键值
KEY23:
JNBACC.0,KEY24;计算行数
RRA
INCR1
SJMPKEY23
KEY24:
MOVDPTR,#KEYTAB;读取键值
MOVA,R1
MOVCA,@A+DPTR
RET
KEYTAB:
DB0FH,0BH,07H,03H
DB0EH,0AH,06H,02H
DB0DH,09H,05H,01H
DB0CH,08H,04H,00H
2.键盘扫描子程序自身无法运行,为了运行这个子程序,另编写以下程序:
ORG0000H
MOVSP,#6FH
MOVR0,#5;延时0.5秒
LOOP1:
MOVR1,#200
LOOP2:
MOVR2,#250
DJNZR2,$
DJNZR1,LOOP2
DJNZR0,LOOP1
MOVDPTR,#4003H;8255初始化
MOVA,#10000001B;A口、B口方式0输
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 及其 接口 技术 实验 报告