- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AT89C51实验报告
实验一 MCS-51指令系统实验——数据排序
一、实验目的
熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。
二、实验内容
将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM 以8000H开始的地址单元内。
三、实验说明
有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。
四、程序流程图
五、调试程序
;第一步:将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM 40H~49H单元中。
ORG 0000H
LJMP START1
ORG 0030H
START1: MOV R0,#40H ;设置R0为内部RAM首地址
MOV R1,#10 ;设Rl为计数器
MOV DPTR,#TAB1
LOOP1: CLR A ; 累加器清零
MOVC A,@A+DPTR ;外部数据送累加器A中
MOV @R0,A ;送内部RAM
INC R0 ;调整内部RAM指针,指向下一个数据
INC DPTR ;调整外部RAM指针
DJNZ R1,LOOP1 ;未完继续
;第二步:排序。把片内RAM 40H~49H单元中的10个无符号数逐一比较,并按从小到大的顺序依次排列在这片单元中。
START2: CLR F0 ;清除交换标志位F0
MOV R3,#9 ;10个数据循环次数
MOV R0,#40H ;数据存放区首址
MOV A,@R0 ;取前数
L2: INC R0
MOV R2,A ;保存前数
SUBB A,@R0 ;前数减后数
MOV A,R2 ;恢复前数
JC L1 ;顺序则继续比较
SETB F0 ;逆序则建立标志位
XCH A,@R0 ;前数与后数交换
DEC R0 ;指向前数单元
XCH A,@R0
INC R0 ;仍指向后数单元
L1: MOV A,@R0 ;取下一个数
DJNZ R3,L2 ;依次重复比较
JB F0,START2 ;交换后重新比较
;第三步:将内部数据RAM中40H~49H单元的内容传送到外部数据存储器以8000H开始的连续单元中去。
;40H~49H共计10个单元,需传送10次数据。将Rl作为循环计数器。具体程序如下。
START3: MOV R0,#40H ;设置R0为内部RAM首地址
MOV DPTR,#8000H ;设置外部RAM首地址
MOV R1,#10 ;设Rl为计数器
LOOP: MOV A,@R0 ;取内部RAM数
MOVX @DPTR,A ;送外部RAM
INC R0 ;调整内部RAM指针,指向下一个数据
INC DPTR ;调整外部RAM指针
DJNZ R1,LOOP ;未完继续
SJMP $ ;暂停
TAB1: DB 09H,04H,02H,08H,00H ;数0-9表
DB 00H,06H,07H,07H,0FH
END
六、收获与体会
第一次用汇编语言在伟福6000环境下运行,感觉和VC6.0稍有不同,伟福6000调试界面非常丰富,有片内RAM——DATE;片外RAM——XDATE;代
文档评论(0)