杭电单片机实验报告一.docx
- 文档编号:896221
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:13
- 大小:1.16MB
杭电单片机实验报告一.docx
《杭电单片机实验报告一.docx》由会员分享,可在线阅读,更多相关《杭电单片机实验报告一.docx(13页珍藏版)》请在冰豆网上搜索。
杭电单片机实验报告一
单片机原理与应用技术实验报告
实验题目:
Keil软件利用及汇编语言编程
姓名:
***
学号:
********
实验日期:
2017.4.15
指导教师:
高惠芳
1.Keil软件的简介和利用
1.1KeiluVision4的简介
最新的KeiluVision4IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。
uVision4引入了灵活的窗口治理系统,能够拖放到视图内的任何地址,包括支持多显示器窗口。
uVision4在μVision3IDE的基础上,增加了更多公共化的功能:
·多显示器和灵活的窗口治理系统
·系统阅读器窗口的显示设备外设寄放器信息
·调试还原视图创建并保留多个调试窗口布局
·多项目工作区简化与众多的项目
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:
MOVA,5AH;10<=X<=15
MULAB;相当于X*X,结果的低八位存入A
ADDA,#08H;即X*X+8→A
MOV5BH,A;即X*X+8→B
JMPDONE;跳到程序终止段
DO2:
MOVA,5AH;X<10
MULAB;X*X→A
CLRC;进位C清零
SUBBA,#01H;X*X-1→A
MOV5BH,A;X*X-1→B
JMPDONE;跳到程序终止段
DO3:
MOVA,#29H;41→A
MOV5BH,A;41→B
JMPDONE;跳到程序终止段
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进行访问。
代码如下:
ORG0000H
JMPSTART
ORG1000H
START:
MOVR1,#00H;求和寄放器,初始清零
MOVR2,#0FH;循环次数为15次
MOVDPL,#00H;类似段内偏移地址地址
LOOP:
MOVDPH,#20H;DPTR的高八位,可明白得为段地址,那个地址先指向第一个数组的首
;地址2000H
MOVXA,@DPTR;A←((DPTR))
MOVR1,A;R1←(A)
INCDPH;DPH改成指向高8位是21H的存储区
MOVXA,@DPTR;A←((DPTR))
ADDA,R1;两数组对应项求和
INCDPH;DPH改成指向高8位是22H的存储区
MOVX@DPTR,A;求和结果送入上述地址区
INCDPL;低8位地址自增
DJNZR2,LOOP;假设循环次数-1后不为0,那么跳转到LOOP处进行循环
END
程序截图:
程序结果:
第一别离在2000H和2100H存入15数,那个地址我都存入了1,2,3,…,14,15。
结果取得:
2.3P95-(8)
将片外数据存储器地址为1000H~1030H的数据块,全数搬迁到片内RAM30H~60H中,并将原数据块区域全数清零。
设计思路:
显然仍是得用LOOP进行搬迁,且每搬完一个就得清零原地址数据,并用DPTR访问片外存储器。
代码如下:
ORG0000H
JMPSTART
ORG1000H
START:
MOVR1,#30;用R1保留循环次数30次
MOVR0,#30H;将地址30H存入R0中
MOVDPTR,#1000H;将1000H那个地址存入DPTR中
LOOP:
MOVXA,@DPTR;寄放器间接寻址。
A←((DPTR))
MOV@R0,A;(R0)←A
CLRA;A←0
MOVX@DPTR,A;原地址数据清零
INCR0;数据的写入地址自增
INCDPTR;数据的读取地址自增
DJNZR1,LOOP;假设循环次数-1不为0,那么跳转到LOOP处进行循环
END
程序截图:
程序结果:
先在片外存储器1000H开始存入数据
接下来开始将数据搬迁到片内30H开始的区域中
且原地址数据依次被清零
2.4P95-(8)
题目:
设计一个6+50=56ms跑马灯,并在P1端口显示。
设计思路:
第一我得设计一个56ms的延迟。
那个地址已知当单片机系统的振荡频率为fosc=12MHz时,一个机械周期为1T=1us;执行一条DJNZ指令需要2个机械周期,执行一条NOP需要一个机械周期,执行一条MOV也是一个机械周期。
接着,再通过循环左移指令RLA实现跑马等成效。
代码如下:
ORG0000H
JMPSTART
ORG0800H
START:
MOVA,#01H;即将00000001存入A,后面会将最右边1循环左移。
SJMPDELAY;进入延时段起点
LOOP:
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
END
程序截图:
程序结果:
初始状态
执行一次56ms延迟后左移
再一次56ms延迟后左移
Proteus仿真截图:
3.实验心得
通过以上4个实验,我学会了KEIL软件的利用,即创建工程,创建并添加项目,编译与调试等等。
更重要的是学习了很多单片机编程方面的只是。
比如用汇编语言实现数据的传送、运算、移位等,同时还有一些简单的程序设计,如分支程序、循环程序等等。
这些实验使我更好的从底层了解单片机系统的运行机制,尤其的汇编语言的利用更是提高了我对各类端口、存储器的运用水平。
另一方面我也感受到汇编语言尽管十分直接,但面对大型的程序项目就显得力不从心,因此这就表现了后期实验利用C语言编写的简便性。
我想,通过更多的运用各类指令及对更多端口、元件的综合利用,我会对变得愈来愈熟练,且能不断地提升自己的逻辑思维。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)