单片机实验报告1lbsv20.docx
《单片机实验报告1lbsv20.docx》由会员分享,可在线阅读,更多相关《单片机实验报告1lbsv20.docx(26页珍藏版)》请在冰豆网上搜索。
![单片机实验报告1lbsv20.docx](https://file1.bdocx.com/fileroot1/2022-11/19/01da9ead-ff78-4a8f-be30-109bcfa5a18f/01da9ead-ff78-4a8f-be30-109bcfa5a18f1.gif)
单片机实验报告1lbsv20
东南大学仪器科学与工程学院学院
实验报告
课程名:
单片机应用系统设计
实验名称:
单片机课程设计实验报告
(一)
院(系):
仪器科学与工程学院专业:
测控技术与仪器
评定成绩:
审阅教师:
目录
一、软件实验一数据传送实验··························3
二、软件实验二多字节十进制加法实验···················5
三、软件实验三多字节十进制加法实验···················8
四、硬件实验一I/O口输入/输出及控制实验··············11
五、硬件实验二数据输入/输出口扩展实验················20
软件实验一数据传送实验
一、实验目的
1.熟悉单片机仿真开发器的使用
2.掌握编程方法;掌握8051内部RAM的数据操作
二、内容
内部RAM40H到4FH单元置数A0H到AFH,然后将40H到4FH中内容送到内部RAM50H到5FH中。
编辑、编译、运行程序,检查内部RAM中的结果。
三、程序代码
ORG0000H
RESET:
AJMPMAIN
ORG003FH
MAIN:
MOVR0,#40H
MOVR2,#10H
MOVA,#0A0H
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVR1,#50H
MOVR2,#10H
A2:
MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,A2
A3:
SJMPA3
四、分析以上程序,运行程序后(暂停),检查并记录相关单元内容。
答:
运行程序后,内部RAM40H到4FH单元中的存储内容A0H~AFH,被传送到了内部RAM50H到5FH中。
五、修改程序,将所置的数改为00H到1FH,置数单元和传送单元为别改为内部RAM的40H到5FH和60H到7FH
答:
实验修改程序如下:
ORG0000H
RESET:
AJMPMAIN
ORG003FH
MAIN:
MOVR0,#40H
MOVR2,#20H;修改
MOVA,#00H;修改
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVR1,#60H;修改
MOVR2,#20H;修改
A2:
MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,A2
A3:
SJMPA3
软件实验二多字节十进制加法实验
一、实验目的
掌握MCS-51汇编语言程序设计方法
二、内容
多字节十进制加法。
加数存储单元首地址由R0指出,被加数和结果的存储单元首地址由R1指出,字节数由R2指出。
编辑、编译、运行程序,检查内部RAM中的结果。
三、程序代码
加数存储单元为:
31H、30H,被加数存储单元为:
21H、20H,结果存储单元为22H、21H、20H。
ORG0000H
RESET:
AJMPMAIN
ORG0100H
MAIN:
MOVSP,#60H
MOVR0,#31H
MOV@R0,#22H
DECR0
MOV@R0,#33H
MOVR1,#21H
MOV@R1,#44H
DECR1
MOV@R1,#55H
MOVR2,#02H
ACALLDACE
HERE:
SJMPHERE
DACE:
CLRC
DAL:
MOVA,@R0
ADDCA,@R1
DAA
MOV@R1,A
INCR0
INCR1
DJNZR2,DAL
CLRA
MOVACC.0,C
MOV@R1,A
RET
四、分析以上程序
五、运行程序后暂停,检查并记录
加数存储单元为:
31H、30H,被加数存储单元为:
21H、20H,结果存储单元为22H、21H、20H。
六、修改加数和被加数(十进制),重复以上过程
ORG0000H
RESET:
AJMPMAIN
ORG0100H
MAIN:
MOVSP,#60H
MOVR0,#31H
MOV@R0,#40H;修改
DECR0
MOV@R0,#30H;修改
MOVR1,#21H
MOV@R1,#20H;修改
DECR1
MOV@R1,#10H;修改
MOVR2,#02H
ACALLDACE
HERE:
SJMPHERE
DACE:
CLRC
DAL:
MOVA,@R0
ADDCA,@R1
DAA
MOV@R1,A
INCR0
INCR1
DJNZR2,DAL
CLRA
MOVACC.0,C
MOV@R1,A
RET
七、填写下列单元地址及内容
加数单元地址(31H)(30H)
加数单元地址(21H)(20H)
结果单元地址(22H)(21H)(20H)
加数数值(22H)(33H)
加数数值(44H)(55H)
结果数值(00H)(66H)(88H)
八、按以上步骤,验证作业中程序设计的习题
运行结果见修改程序后。
加数单元地址(31H)(30H)
加数单元地址(21H)(20H)
结果单元地址(22H)(21H)(20H)
加数数值(40H)(30H)
加数数值(20H)(10H)
结果数值(00H)(60H)(40H)
软件实验三十进制数排序实验
一、目的
掌握十进制数排序方法
二、内容
本程序用的是“冒泡排序”法,是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,知道全部数据有序,即从小到大排序。
三、程序代码
SIZEEQU10
ARRAYEQU50H
MOV50H,#9
MOV51H,#7
MOV52H,#2
MOV53H,#8
MOV54H,#4
MOV55H,#6
MOV56H,#0
MOV57H,#3
MOV58H,#1
MOV59H,#5
CHANCEEQU0
SORT:
MOVR0,#ARRAY
MOVR7,#SIZE-1
CLRCHANCE
GOOD:
MOVA,@R0
MOVR2,A
INCR0
MOVB,@R0
CJNEA,B,NOTEQUAL
SJMPNEXT
NOTEQUAL:
JCNEXT
SETBCHANCE
XCHA,@R0
DECR0
XCHA,@R0
INCR0
NEXT:
DJNZR7,GOOD
JBCHANCE,SORT
LJMP$
END
四、分析以上程序
五、运行程序后(暂停),检查并记录相关单元内容
程序运行后结果为00,01,02,03,04,05,06,07,08,09从小到大排序。
六、修改需排序的十进制数,重复以上过程
将数据修改为:
02,04,08,09,12,14,16,13,89,77后,运行程序,结果为
02,04,08,09,12,13,14,16,77,89。
七、修改程序,按照从大到小的顺序排序
答:
将原程序中的“JNCNEXT”修改为“JNCNEXT”
SIZEEQU10
ARRAYEQU50H
MOV50H,#9
MOV51H,#7
MOV52H,#2
MOV53H,#8
MOV54H,#4
MOV55H,#6
MOV56H,#0
MOV57H,#3
MOV58H,#1
MOV59H,#5
CHANCEEQU0
SORT:
MOVR0,#ARRAY
MOVR7,#SIZE-1
CLRCHANCE
GOOD:
MOVA,@R0
MOVR2,A
INCR0
MOVB,@R0
CJNEA,B,NOTEQUAL
SJMPNEXT
NOTEQUAL:
JNCNEXT;修改
SETBCHANCE
XCHA,@R0
DECR0
XCHA,@R0
INCR0
NEXT:
DJNZR7,GOOD
JBCHANCE,SORT
LJMP$
END
●程序运行后结果为09,08,07,06,05,04,03,02,01,00,从大到小排序。
硬件实验一I/O口输入/输出及控制实验
、I/O口输入/输出实验
一、目的:
学习单片机I/O口的使用方法;学习延时子程序的编写和使用
二、内容
1.I/O口输出:
P1口做输出口,接八只发光二极管,编写程序使发光二极管循环点亮。
2.I/O口输入/输出:
P1.0、P1.1作输入口接两个拨动开关;P1.2、P1.3作输出口,接两个发光二极管。
编写程序读取开关状态,将此状态在发光二极管显示出来。
编写程序时应注意P1.0、P1.1作为输入口是应先置1,才能正确读入值。
三、实验步骤
1、I/O口输出硬件连接
连线
连接孔1
连接孔2
1
P1.0
L0
2
P1.1
L1
3
P1.2
L2
4
P1.3
L3
5
P1.4
L4
6
P1.5
L5
7
P1.6
L6
8
P1.7
L7
MCS51的P1口循环点灯
2、I/O口输入/输出硬件连接
连线
连接孔1
连接孔2
1
K4
P1.0
2
K5
P1.1
3
P1.3
L4
4
P1.3
L4
MCS51的P1口输入/输出
3.实验说明
(1)对于MCS51,P1是准双向口。
它作为输出口时与一般的双向口使用方法相同;但准双向口用作输入口时,因其结构特点必须先对它置“1”,否则读入的数据容易产生错误。
(2)8051的延时子程序的延时计算问题,对于程序
Delay:
MOVR6,#0H
MOVR7,#0H
DelayLoop:
DJNZR6,DelayLoop
DJNZR7,DelayLoop
RET
查指令表可知MOV和DJNZ指令均需要两个机器周期,在12MHz晶振时,一个机器周期时间为:
12/12MHz=1ms,该延时子程序延时:
(256*255+2)*2*12/12
130ms。
4.分别连接硬件并执行相关程序,记录结果。
四、提高要求
修改I/O口输出程序,改成先1,3,5,7灯亮,再2,4,6,8灯亮。
五、程序框图
六、程序代码
1.I/O口输出(P1口循环点灯)汇编版.asm
LOOP:
MOVA,#01H
MOVR2,#8
OUTPUT:
MOVP1,A
RLA
CALLDELAY
DJNZR2,OUTPUT
LJ