- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
单片机课程实验报告
汇编程序
班级:
姓名:
学号:
一、实验名称
实验1:数据排列仿真实验
二、实验目的
1、掌握仿真软件keil51的使用
2、熟练使用指令编写调试程序
3、掌握算法,程序结构
三、使用工具
1、硬件:笔记本电脑
2、软件:keil51仿真系统
四、软件使用方法
(1)界面
(2)建立工程
1.打开Keil4,新建一个工程。
2.新建一个文件,并将之另存为扩展名为.asm的文件,然后将之
添加到当前的工程中。
(3)编程
1.编辑该文件,输入汇编程序源代码。
2.对该文件进行汇编,如有错误转入步骤1进行修改。
3.对整个工程进行二进制文件生成,如有错误转入步骤1进行修改。
(4)调试
调试该工程,可用单步、单步跟踪、非全速断点、全速断点、连
续执行功能调试该程序,直到符合程序设计要求为止。
五、算法原理
先利用循环结构把数字写入地址,然后利用冒泡排序对数字进行排序。冒泡
排序的原理:程序重复地走访过要排序的元素列,依次比较两个相邻的元素,如
果顺序错误(错误指降序排列,如z排在a前面)就把他们交换过来。走访元素
的工作要重复地进行直到没有相邻元素需要交换,此时元素就是按升序排列了。
数字比较过程由一个循环嵌套完成,即一个外循环,一个内循环。
六、程序结构框图
七、源程序
;题目要求:30H~43H存20个数,编程实现升序排列,30h存最小,43h存最大,
ORG0000H
MOVR0,#30H;30h-r0
MOVR7,#20D;20d-r7
MOVA,#56H;56h-a
LOOP:MOV@R0,A;a-((r0))
DECA;a-1
INCR0;r0+1
DJNZR7,LOOP;r7-1!=0,跳转loop。以上为循环给数程序
START:
MOVR7,#19D;外循环初始值
LOOP0:MOVR0,#30H;数字存储起始单元
MOVA,R7;将外循环的次数写入A
MOVR6,A;A的内容给r6,r6为内循环次数
LOOP1:MOVA,@R0;r0指向的内容给A
INCR0;r0加一
CLRC;进位标志清零(没有指令CJNEA,@R0,REL0)
MOVR1,A;保护A的内容
SUBBA,@R0;累加器-R0指向内容,带借位(已清0)
JNCjxj;进位为0跳转到jxj(低字节地址内容小于高字节地址
内容时不进行换位)
LOOP2:DJNZR6,LOOP1;内循环计数减一,不为0跳转LOOP1
DJNZR7,LOOP0;外循环减一,不为0跳转LOOP0
SJMP$
jxj:MOVA,R1;取出r1保护的内容(换位程序,jxj是我名字首字母缩写)
MOVR2,A;把A的内容(大数)送r2保护
MOVA,@R0;将r0指向的内容(小数)给A
DECR0;r0存的地址减一
MOV@R0,A;将A的内容(小数)给r0所存地址指向的内容
INCR0;r0所存地址加一
MOVA,R2;将r2(大数)给A
MOV@R0,A;将A(大数)给r0指向地址的内容
AJMPLOOP2;跳转loop2
END
八、程序调试方式
1、汇编
在keil中将文本后缀改为.asm程序即可自动识别汇
文档评论(0)