杭电单片机实验报告一Word文件下载.docx

上传人:b****3 文档编号:13818228 上传时间:2022-10-13 格式:DOCX 页数:13 大小:1.16MB
下载 相关 举报
杭电单片机实验报告一Word文件下载.docx_第1页
第1页 / 共13页
杭电单片机实验报告一Word文件下载.docx_第2页
第2页 / 共13页
杭电单片机实验报告一Word文件下载.docx_第3页
第3页 / 共13页
杭电单片机实验报告一Word文件下载.docx_第4页
第4页 / 共13页
杭电单片机实验报告一Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

杭电单片机实验报告一Word文件下载.docx

《杭电单片机实验报告一Word文件下载.docx》由会员分享,可在线阅读,更多相关《杭电单片机实验报告一Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

杭电单片机实验报告一Word文件下载.docx

系统阅读器窗口的显示设备外设寄放器信息

调试还原视图创建并保留多个调试窗口布局

多项目工作区简化与众多的项目

1.2KeiluVision4的利用

①,打开Keil4应用软件,其初始界面如下:

②、点击菜单项“Project”下的“NewuVisionProject”,如以下图所示。

③、选择文件夹,并输入工程名。

④、输入工程名并保留后会弹出选择芯片界面

⑤、那个地址咱们选择Atmel公司的AT89S51单片机,选择后,点击“OK”,即创建完工程。

⑥、单击点击以下图所示圆圈圈起的部份成立一个文件。

也能够点击菜单“File”下面的“NEW”来新建一个文件。

⑦、以后输入程序的代码后,单击File—Saveas,依照代码语言的格类型,可保留为后缀为.asm(汇编语言)和.c(C语言)的文件。

⑧、单击“Target1”前面的“+”号,并用鼠标右键点击“SourceGroup1”,界面如图10所示。

在用鼠标左键点击“AddFilestoGroupSourceGroup1...”即可把方才的代码文件添加到工程。

最后点击左上角的编译按钮即可完成编译。

以后即可进行程序的调试了。

2.实验内容

利用汇编语言完成讲义P95的

(2)、(5)、(8)三道题和一个跑马灯程序。

2.1P95-

(2)

设内部RAM5AH单元中有一个变量X,请编写计算下述函数式的程序,结果存入5BH。

设计思路:

显然此题要利用分支语句,不妨利用JZ,JNB等,并通过X-10,X-15综合判定X处于哪个区间。

代码如下:

ORG0000H

JMPSTART

ORG1000H

START:

MOVA,5AH;

直接寻址,将5AH地址上的数据X存入寄放器A

MOVB,5AH;

直接寻址,将5AH地址上的数据X再一次存入寄放器B

SUBBA,#0FH;

将A中数据X先减去15,初步判定X所属区间

JNBACC.7,DO3;

若A的第7位不为1(X>

=15)那么程序跳到DO3,不然顺序执行

MOVA,5AH;

若X比15小,再次将X存入累加器A中

CLRC;

清零进位C

SUBBA,#0AH;

将X减去10

JNBACC.7,DO1;

若A的第7位不为1,(X>

=10),跳到DO1

JMPDO2;

剩下的情形确实是:

X<

10,跳到DO2

DO1:

10<

=X<

=15

MULAB;

相当于X*X,结果的低八位存入A

ADDA,#08H;

即X*X+8→A

MOV5BH,A;

即X*X+8→B

JMPDONE;

跳到程序终止段

DO2:

MOVA,5AH;

10

X*X→A

进位C清零

SUBBA,#01H;

X*X-1→A

X*X-1→B

DO3:

MOVA,#29H;

41→A

MOV5BH,A;

41→B

DONE:

SJMP$

END

程序截图:

程序结果:

①、当X=12时,Y=12*12+8=152

②、当X=8时,Y=8*8-1=63

③、当X=18时,Y=41

2.2P95-(5)

设有两个长度均为15的数组,别离寄存在以2000H和2100H为首的存储区中,试编程求其对应项之和,结果寄存到以2200H为首的存储区中。

设计思路:

此题需要用到LOOP进行15次的求和及寄存。

而且由于地址太高,应采纳DPTR进行访问。

MOVR1,#00H;

求和寄放器,初始清零

MOVR2,#0FH;

循环次数为15次

MOVDPL,#00H;

类似段内偏移地址地址

LOOP:

MOVDPH,#20H;

DPTR的高八位,可明白得为段地址,那个地址先指向第一个数组的首

;

地址2000H

MOVXA,@DPTR;

A←((DPTR))

MOVR1,A;

R1←(A)

INCDPH;

DPH改成指向高8位是21H的存储区

ADDA,R1;

两数组对应项求和

DPH改成指向高8位是22H的存储区

MOVX@DPTR,A;

求和结果送入上述地址区

INCDPL;

低8位地址自增

DJNZR2,LOOP;

假设循环次数-1后不为0,那么跳转到LOOP处进行循环

第一别离在2000H和2100H存入15数,那个地址我都存入了1,2,3,…,14,15。

结果取得:

2.3P95-(8)

将片外数据存储器地址为1000H~1030H的数据块,全数搬迁到片内RAM30H~60H中,并将原数据块区域全数清零。

显然仍是得用LOOP进行搬迁,且每搬完一个就得清零原地址数据,并用DPTR访问片外存储器。

MOVR1,#30;

用R1保留循环次数30次

MOVR0,#30H;

将地址30H存入R0中

MOVDPTR,#1000H;

将1000H那个地址存入DPTR中

MOVXA,@DPTR;

寄放器间接寻址。

MOV@R0,A;

(R0)←A

CLRA;

A←0

MOVX@DPTR,A;

原地址数据清零

INCR0;

数据的写入地址自增

INCDPTR;

数据的读取地址自增

DJNZR1,LOOP;

假设循环次数-1不为0,那么跳转到LOOP处进行循环

先在片外存储器1000H开始存入数据

接下来开始将数据搬迁到片内30H开始的区域中

且原地址数据依次被清零

2.4P95-(8)

题目:

设计一个6+50=56ms跑马灯,并在P1端口显示。

第一我得设计一个56ms的延迟。

那个地址已知当单片机系统的振荡频率为fosc=12MHz时,一个机械周期为1T=1us;

执行一条DJNZ指令需要2个机械周期,执行一条NOP需要一个机械周期,执行一条MOV也是一个机械周期。

接着,再通过循环左移指令RLA实现跑马等成效。

ORG0800H

MOVA,#01H;

即将00000001存入A,后面会将最右边1循环左移。

SJMPDELAY;

进入延时段起点

RLA;

从此处开始跑马灯模块。

先将A循环左移

MOVP1,A;

将A的值赋给端口P1的8位

SJMPDELAY;

从56ms的延迟程序段再跑一遍

DELAY:

MOVR7,#224;

设置外循环次数224次

DLY1:

MOVR6,#123;

设置内循环次数123次

DLY2:

DJNZR6,DLY2

NOP

DJNZR7,DLY1;

延时程序段终止,总历时(123*2+2+1+1)T*224T+2T+1T=56ms

SJMPLOOP

SJMP

初始状态

执行一次56ms延迟后左移

再一次56ms延迟后左移

Proteus仿真截图:

3.实验心得

通过以上4个实验,我学会了KEIL软件的利用,即创建工程,创建并添加项目,编译与调试等等。

更重要的是学习了很多单片机编程方面的只是。

比如用汇编语言实现数据的传送、运算、移位等,同时还有一些简单的程序设计,如分支程序、循环程序等等。

这些实验使我更好的从底层了解单片机系统的运行机制,尤其的汇编语言的利用更是提高了我对各类端口、存储器的运用水平。

另一方面我也感受到汇编语言尽管十分直接,但面对大型的程序项目就显得力不从心,因此这就表现了后期实验利用C语言编写的简便性。

我想,通过更多的运用各类指令及对更多端口、元件的综合利用,我会对变得愈来愈熟练,且能不断地提升自己的逻辑思维。

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

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1