软件实验报告.docx

上传人:b****8 文档编号:9906289 上传时间:2023-02-07 格式:DOCX 页数:20 大小:120.39KB
下载 相关 举报
软件实验报告.docx_第1页
第1页 / 共20页
软件实验报告.docx_第2页
第2页 / 共20页
软件实验报告.docx_第3页
第3页 / 共20页
软件实验报告.docx_第4页
第4页 / 共20页
软件实验报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

软件实验报告.docx

《软件实验报告.docx》由会员分享,可在线阅读,更多相关《软件实验报告.docx(20页珍藏版)》请在冰豆网上搜索。

软件实验报告.docx

软件实验报告

 

本科实验报告

 

课程名称:

微机原理与接口技术

姓名:

邵芳琳

学院(系):

控制学院

专业:

自动化

学号:

3140103307

指导教师:

曹峥

 

2016年11月11日

 

实验一存储器块操作实验

一、实验目的

1.熟悉KEIL集成调试环境和汇编程序的调试方法。

2.掌握存储器读写方法;

3.了解内存块的移动方法;

二、实验说明

实验1指定某块存储器的起始地址和长度,要求能将其内容赋值。

通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。

例程2给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。

移动3000H起始的256个字节到4000H起始的256个字节。

思考题

1.如何将存储器块的内容置成某固定值(例全填充为0FFH)?

请用户修改程序,完成此操作。

将MOVA,#1H改为MOVA,#FFH

2.若源块地址和目标块地址有重叠,该如何避免?

源块地址和目标块地址重叠部分数据压制堆栈中,当要使用重叠部分源数据时,直接从堆栈中弹出。

实验内容

1.试编程将片内RAM中的数据依次复制到片外RAM。

假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。

ORG0000H

MOVR0,#40H

MOVA,#01H

MOVR5,#10H

LOOP:

MOV@R0,A

INCR0

DJNZR5,LOOP

MOVR0,#40H;起始地址

MOVR2,#10H

MOVR3,#00H

MOVR7,#10H;循环次数

LOOP1:

MOVA,@R0

MOVDPH,R2

MOVDPL,R3

MOVX@DPTR,A

INCR0

INCR3

DJNZR7,LOOP1

LJMP$

END

运行结果:

2.两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入片内RAM30H(低8位)、31H(高8位)。

ORG0000H

MOVA,#11H

MOVDPTR,#2000H

MOVX@DPTR,A

MOVDPTR,#2003H

MOVX@DPTR,A

MOVR0,A

MOVDPTR,#2002H

MOVXA,@DPTR

ADDA,R0

MOV30H,A

MOVDPTR,#2001H

MOVXA,@DPTR

MOVR0,A

MOVDPTR,#2003H

MOVXA,@DPTR

ADDCA,R0

MOV31H,A

END

运行前:

运行后:

1100+0011=1111

运行结果正确。

实验二数值转换实验

一、实验目的

1.熟悉KEIL集成调试环境和汇编程序的调试方法。

2.掌握简单的数值转换算法。

3.基本了解数值的各种表达方法。

4.掌握数值的加减法运算。

5.掌握用查表的方法将BCD值转换成ASCII值。

二、实验说明

单片机系统内部运算用二进制,而输入输出常用十进制,以符合日常习惯,因此,数制转换是仪表设计中常用的程序之一。

单片机中的数值有各种表达方式,这是单片机的基础。

掌握各种数制之间的转换是一种基本功。

我们将给定的一字节二进制数,转换成二十进制(BCD)码。

将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。

实验2主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法快速地进行数值转换。

进一步掌握数值的各种表达方式。

现在我们给出一个BCD数,将其转换成ASCII值。

如下:

将累加器A的值转换为二个ASCII码,并存入Result开始的二个单元,例如A赋值#1AH。

思考题

BCD码转换成二进制数的算法是什么?

例如:

(91)BCD对应的二进制数是多少?

将BCD码写成权值相加的形式,再将各位转化为二进制。

9×10^1+1×10^0=91=()B

实验内容

1.把R3中的8位二进制整数转换为压缩BCD码,存放在R4,R5中。

ORG0000H

MOVR3,##10111011B

MOVA,R3

MOVB,#100

DIVAB

MOVR4,A

MOVA,B

MOVB,#10

DIVAB

MOVR5,A

SWAPA

ADDA,B

MOVR5,A

寄存器结果:

2.设4位BCD码abcd依次存放在内部RAM中50H~53H单元的低4位,(高4位为0)。

试编程将其转换成二进制数并存入R6R7中。

ORG0000H

MOV50H,#01

MOV51H,#02

MOV52H,#03

MOV53H,#04

MOVA,50H

MOVB,#10

MULAB

MOVB,#100

MULAB

MOVR1,B

MOVR0,A

MOVB,#100

MOVA,51H

MULAB

ADDA,R0

MOVR0,A

MOVA,B

ADDCA,R1

MOVR1,A

MOVB,#10

MOVA,52H

MULAB

ADDA,R0

MOVR0,A

MOVA,R1

ADDCA,#0

MOVR1,A

MOVA,R0

ADDA,53H

MOVR0,A

MOVA,R1

ADDCA,#0

MOVR6,A

MOVA,R0

MOVR7,A

执行结果:

4位BCD码为1234,转换为2进制数为4d2与实际相符。

实验三程序跳转表实验

一、实验目的

1.熟悉KEIL集成调试环境和汇编程序的调试方法。

2.了解简单的函数计算。

3.掌握多分支结构程序的编程方法

二、实验说明

多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。

若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。

三、思考题

1.写跳转程序时要注意些什么?

1)子程序的第1条指令前必须有标号,即表明子程序的名称,也作为调用指令的符号地址。

2)要有入口条件,用来说明入子程序时,它所要处理的数据如何得到。

另外,要有出口条件,即处理的结果是如何存放的。

3)注意保护现场和恢复现场,即在调用子程序前将不允许被破坏的内容保存起来;恢复现场即在子程序执行完毕返回主程序前,将保存的内容恢复到保护现场前的状况;

4)子程序必须以RET结束。

子程序中,对堆栈的入栈和出栈操作次数必须相同,以保证返回后堆栈指针SP的值与调用时一直。

2.可以避免重复书写相同的程序;

可以简化程序的逻辑结构;

使程序模块化,通用化。

3、实验内容

ORG0000H

MOVR0,#0FCH

CJNER0,#0,NEXT0

MOVR0,#2

MOVA,R0

SJMPNEXT3

NEXT0:

CJNER0,#80H,NEXT1

MOVR0,#2

MOVA,R0

SJMPNEXT3

NEXT1:

JCNEXT2

SETBC

MOVA,R0

RRCA

SJMPNEXT3

NEXT2:

MOVA,R0

MOVB,#2

MULAB

NEXT3:

MOV30H,A

END

测试结果:

X<0

X=0

X>0

实验四数据排序实验

一、实验目的

1.熟悉KEIL集成调试环境和汇编程序的调试方法。

2.掌握排序程序的设计方法。

二、实验说明

本例程采用交换排序法将内部RAM中的50~59H单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM1000H开始处。

初始:

结果:

三、实验内容

画出本实验程序的流程图。

实验五键盘显示仿真实验

一、实验目的

1.熟悉KEIL集成调试环境和汇编程序的调试方法。

2.学习使用外围接口工具调试程。

3.熟悉键盘显示接口电路及程序设计。

提高实验

1.根据键盘、LED仿真板,设计一个走马灯程序,通过按键实现启停、速率及方向的控制

UpDownBIT00H

StartEndBIT01H

LAMPCODEEQU21H

ORG0000H

AJMPMAIN

ORG30H

MAIN:

MOVSP,#5FH

MOVP1,#0FFH

CLRUpDown;启动时处于向上的状态

CLRStartEnd;启动时处于停止状态

MOVLAMPCODE,#01H;单灯流动的代码

LOOP:

ACALLKEY;调用键盘程序

JNBF0,LNEXT;如果无键按下,则继续

ACALLKEYPROC;否则调用键盘处理程序

LNEXT:

ACALLLAMP;调用灯显示程序

AJMPLOOP

DELAY:

MOVR7,#100

D1:

MOVR6,#100

DJNZR6,$

DJNZR7,D1

RET

KEYPROC:

MOVA,B;从B寄存器中获取键值

JBACC.2,KeyStart;分析键的代码,某位被按下,则该位为1

JBACC.3,KeyOver

JBACC.4,KeyUp

JBACC.5,KeyDown

AJMPKEY_RET

KeyStart:

SETBStartEnd;第一个键按下后的处理

AJMPKEY_RET

KeyOver:

CLRStartEnd;第二个键按下后的处理

AJMPKEY_RET

KeyUp:

SETBUpDown;第三个键按下后的处理

AJMPKEY_RET

KeyDown:

CLRUpDown;第四个键按下后的处理

KEY_RET:

RET

KEY:

CLRF0;清F0,表示无键按下。

ORLP3,#00111100B;将P3口的接有键的四位置1

MOVA,P3;取P3的值

ORLA,#11000011B;将其余4位置1

CPLA;取反

JZK_RET;如果为0则一定无键按下

CALLDELAY;否则延时去键抖

ORLP3,#00111100B

MOVA,P3

ORLA,#11000011B

CPLA

JZK_RET

MOVB,A;确实有键按下,将键值存入B中

SETBF0;设置有键按下的标志

K_RET:

ORLP3,#00111100B;此处循环等待键的释放

MOVA,P3

ORLA,#11000011B

CPLA

JZK_RET1;读取的数据取反后为0说明键释放了

AJMPK_RET

K_RET1:

CALLDELAY;消除后沿抖动

RET

D500MS:

;流水灯的延迟时间

MOVR7,#255

D51:

MOVR6,#255

DJNZR6,$

DJNZR7,D51

RET

LAMP:

JBStartEnd,LampStart;如果StartEnd=1,则启动

MOVP1,#0ffH

LampStart:

AJMPLAMPRET;否则关闭所有显示,返回LampStart:

JBUpDown,LAMPUP;如果UpDown=1,则向上流动

MOVA,LAMPCODE

RLA;左移位而

MOVLAMPCODE,A

MOVP1,A

LCALLD500MS

LCALLD500MS

AJMPLAMPRET

LAMPUP:

MOVA,LAMPCODE

RRA;向下流动实际就是右移

MOVLAMPCODE,A

MOVP1,A

LCALLD500MS

LAMPRET:

RET

END

2.根据实验仿真板2设计一个按键显示数字的程序,即按0显示0,依次类推。

ORG0000H

START:

MOVP2,#0FEH

MOVP3,#0EFH

JBP3.0,NEXT1

MOVP0,#0C0H

LJMPFINAL

NEXT1:

MOVP3,#0EFH

JBP3.1,NEXT2

MOVP0,#0F9H

LJMPFINAL

NEXT2:

MOVP3,#0EFH

JBP3.2,NEXT3

MOVP0,#0A4H

LJMPFINAL

NEXT3:

MOVP3,#0EFH

JBP3.3,NEXT4

MOVP0,#0B0H

LJMPFINAL

NEXT4:

MOVP3,#0DFH

JBP3.0,NEXT5

MOVP0,#99H

LJMPFINAL

NEXT5:

MOVP3,#0DFH

JBP3.1,NEXT6

MOVP0,#92H

LJMPFINAL

NEXT6:

MOVP3,#0DFH

JBP3.2,NEXT7

MOVP0,#82H

LJMPFINAL

NEXT7:

MOVP3,#0DFH

JBP3.3,NEXT8

MOVP0,#0F8H

LJMPFINAL

NEXT8:

MOVP3,0CFH

JBP3.0,NEXT9

MOVP0,#80H

LJMPFINAL

NEXT9:

MOVP3,#0CFH

JBP3.1,FINAL

MOVP0,#90H

LJMPFINAL

FINAL:

END

显示结果:

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

当前位置:首页 > 求职职场 > 简历

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

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