单片机原理和接口技术实验报告.docx

上传人:b****0 文档编号:9326130 上传时间:2023-05-18 格式:DOCX 页数:44 大小:838.18KB
下载 相关 举报
单片机原理和接口技术实验报告.docx_第1页
第1页 / 共44页
单片机原理和接口技术实验报告.docx_第2页
第2页 / 共44页
单片机原理和接口技术实验报告.docx_第3页
第3页 / 共44页
单片机原理和接口技术实验报告.docx_第4页
第4页 / 共44页
单片机原理和接口技术实验报告.docx_第5页
第5页 / 共44页
单片机原理和接口技术实验报告.docx_第6页
第6页 / 共44页
单片机原理和接口技术实验报告.docx_第7页
第7页 / 共44页
单片机原理和接口技术实验报告.docx_第8页
第8页 / 共44页
单片机原理和接口技术实验报告.docx_第9页
第9页 / 共44页
单片机原理和接口技术实验报告.docx_第10页
第10页 / 共44页
单片机原理和接口技术实验报告.docx_第11页
第11页 / 共44页
单片机原理和接口技术实验报告.docx_第12页
第12页 / 共44页
单片机原理和接口技术实验报告.docx_第13页
第13页 / 共44页
单片机原理和接口技术实验报告.docx_第14页
第14页 / 共44页
单片机原理和接口技术实验报告.docx_第15页
第15页 / 共44页
单片机原理和接口技术实验报告.docx_第16页
第16页 / 共44页
单片机原理和接口技术实验报告.docx_第17页
第17页 / 共44页
单片机原理和接口技术实验报告.docx_第18页
第18页 / 共44页
单片机原理和接口技术实验报告.docx_第19页
第19页 / 共44页
单片机原理和接口技术实验报告.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机原理和接口技术实验报告.docx

《单片机原理和接口技术实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理和接口技术实验报告.docx(44页珍藏版)》请在冰点文库上搜索。

单片机原理和接口技术实验报告.docx

单片机原理和接口技术实验报告

单片机原理及其接口技术实验指导书

实验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

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:

图3-3显示子程序的详细流程图

2.子程序自身无法运行,为了运行这个子程序,另编写一个主程序。

这个主程序的功能是首先对8255进行初始化,然后就反复调用显示子程序,显示20H~25H中的待显示容。

首先在20H起始的6个字节中置入00H~0FH,然后连续运行此程序,应显示0~F;在20H起始的6个字节中置入10H~1FH,然后连续运行此程序,应显示0.~F.;若置入20H、21H,则显示-、灭。

图3-4显示主程序流程图

3.按以下框图编写一段程序,运行后会在显示器上应出现连续向左移动的0~F。

图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位输入

MOVXDPTR,A

;ACALLDELAY500MS;延时0.5秒

LOOP3:

LCALLDISP;调用显示子程序

SJMPLOOP3

DISP:

MOVR0,#20H

MOVR2,#0FEH

DISP1:

MOVA,R0

MOVDPTR,#TAB

MOVCA,A+DPTR

MOVDPTR,#4001H

MOVXDPTR,A

MOVA,R2

MOVDPTR,#4000H

MOVXDPTR,A

CALLDELAY500US

MOVA,#0FFH

MOVXDPTR,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位输入

MOVXDPTR,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

MOVXDPTR,A

MOVA,R2

MOVDPTR,#4000H

MOVXDPTR,A

CALLDELAY500US

MOVA,#0FFH

MOVXDPTR,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所示。

 

图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输出,C口高4位输出,低4位输入

MOVXDPTR,A

LOOP3:

LCALLDISP;调用显示子程序DIS,设显示子程序入口为DISP

LCALLKEY;调用键盘扫描子程序,设键盘扫描子程序入口为KEY

CJNEA,#0FFH,LOOP4;如果有键按下转

SJMPLOOP3

LOOP4:

MOV20H,21H

MOV21H,22H

MOV22H,23H

MOV23H,24H

MOV24H,25H

MOV25H,A

SJMPLOOP3

其中显示子程序使用实验3中的显示子程序。

程序运行后,每按一键便从显示器的右端移入一个对应的数。

 

程序清单:

ORG0000H

MOVSP,#6FH

MOV20H,#00

MOV21H,#00

MOV22H,#00

MOV23H,#00

MOV24H,#00

MOV25H,#00

ACALLDELAY500MS;延时0.5秒

MOVDPTR,#4003H;8255初始化

MOVA,#10000001B;A口、B口方式0输出,C口高4位输出,低4位输入

MOVXDPTR,A

LOOP3:

LCALLDISP;调用显示子程序

LCALLKEY;键盘扫描子程序入口

CJNEA,#0FFH,LOOP4;如果有键按下转

SJMPLOOP3

LOOP4:

MOV20H,21H

MOV21H,22H

MOV22H,23H

MOV23H,24H

MOV24H,25H

MOV25H,A

SJMPLOOP3

KEY:

MOVA,#00H;使4根列线都输出0

MOVDPTR,#40

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2