东南大学 单片机实验报告文档格式.docx
《东南大学 单片机实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《东南大学 单片机实验报告文档格式.docx(100页珍藏版)》请在冰豆网上搜索。
ORG003FH
MAIN:
MOVR0,#40H
MOVR2,#10H;
提高时将10H改为20H
MOVA,#0A0H;
提高时将0A0H改为00H
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVR1,#50H;
提高时将50H改为60H
MOVR2,#10H;
A2:
MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,A2
A3:
SJMPA3
四、实验结果
实验显示RAM的40H~4FH以及50H~5FH的内容都为A0H~AFH。
五、实验提高
修改程序:
将所置的数改为00H~1FH,置数单元和传送单元分别改为内部RAM的40H~5FH、60H~7FH。
见实验程序注释部分。
六、实验思考
熟悉了伟福单片机系统的使用方法,在仿真器中查看寄存器内容变化,了解了51单片机内部RAM寻址方式:
立即数寻址、寄存器寻址等。
软件实验二多字节十进制加法实验
掌握MCS-51汇编语言程序设计方法
多字节十进制加法;
加数存储单元首地址由R0指出,被加数和结果的存储单元首地址由R1指出,字节数由R2指出;
编辑、编译、运行程序,检查内部RAM中的结果。
三、实验程序
加数存储单元为:
31H、30H,被加数存储单元为:
21H、20H,结果存储单元为:
22H、21H、20H。
AJMPMAIN
ORG0100H
MOVSP,#60H
MOVR0,#31H
MOV@R0,#22H;
提高时将加数高位改为自定义的数的高位(如66H)
DECR0
MOV@R0,#33H;
提高时将加数低位改为自定义的数的低位(如77H)
MOVR1,#21H
MOV@R1,#44H;
提高时作为被加数的高位被修改(如改为44H)
DECR1
MOV@R1,#55H;
提高时作为被加数的低位被修改(如改为55H)
MOVR2,#02H
ACALLDACE
HERE:
SJMPHERE
DACE:
CLRC
DAL:
ADDCA,@R1
DAA
MOV@R1,A
DJNZR2,DAL
CLRA
MOVACC.0,C
RET
四、实验结果
被加数单元地址(21H)(20H)
加数单元地址(31H)(30H)
+)
结果单元地址(22H)(21H)(20H)
被加数数值44H55H
加数数值22H33H
结果数值00H66H88H
五、实验提高
修改加数和被加数(十进制数),重复运行程序。
思考:
见程序注释部分,改过之后结果如下:
加数数值66H77H
结果数值01H11H32H
学习了多字节十进制加法,其中DA这条汇编指令是实现十进制加法的关键,当用BCD码十进制数进行加法运算时,其运算结果的和数不一定仍为十进制的BCD码,必须用DA指令调整成十进制的BCD码。
软件实验三十进制数排序实验
一、实验目的
掌握十进制数的排序方法
二、实验内容
本程序用的是“冒泡排序”法,是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序,即从小到大排序。
SIZEEQU10
ARRAYEQU40H
CHANGEEQU0
SORT:
MOVR0,#ARRAY
MOVR7,#SIZE-1
CLRCHANGE
GOON:
MOVR2,A
MOVB,@R0
CJNEA,B,NOTEQUAL
SJMPNEXT
NOTEQUAL:
JCNEXT;
提高时将“JC”改为“JNC”
SETBCHANGE
XCHA,@R0
NEXT:
DJNZR7,GOON
JBCHANGE,SORT
LJMP$
END
实验时,运行程序前手动更改RAM50H~59H的内容为任意10个无序的数,如00H,09H,0FH,0AH,04H,C0H,B1H,34H,25H,FFH。
运行程序后可以看到50H~59H的内容变为00H,04H,09H,0AH,0FH,25H,34H,B1H,C0H,FFH即按升序排列的10个数。
修改程序,按照从小到大的顺序排列。
结果:
只要将NOTEQUAL子程序中的JC改为JNC即可实现。
运行后的数据将按照从大到小排列。
本实验使用的是冒泡排序,冒泡排序是很经典的排序算法,通过依次比较前后两个数大小从而将整个序列排序。
这个方法算法思想直观易懂,实现方式简单,但是由于需要多次循环所以整个过程很繁琐,尤其是数据较多时需要处理的时间就会大大加长。
硬件实验一I/O口输入/输出及控制实验
Ⅰ、I/O口输入/输出实验
1、学习单片机I/O口的使用方法;
2、学习延时子程序的编写和使用。
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口输入/输出硬件连接
K4
K5
MCS51的P1口输入/输出
3、分别连接硬件并执行相关程序,记录结果。
四、实验程序
1、I/O口输出(P1口循环点灯)
LOOP:
MOVA,#01H;
提高时将01H改为55H
MOVR2,#8
OUTPUT:
MOVP1,A
RLA
CALLDELAY
DJNZR2,OUTPUT
LJMPLOOP
DELAY:
MOVR6,#0
MOVR7,#0
DELAYLOOP:
DJNZR6,DELAYLOOP
DJNZR7,DELAYLOOP
RET
END
2、I/O口输入/输出(P1口输入/输出)
KEYLEFTEQUP1.0
KEYRIGHTEQUP1.1
LEDLEFTEQUP1.2
LEDRIGHTEQUP1.3
SETBKEYLEFT
SETBKEYRIGHT
MOVC,KEYLEFT
MOVLEDLEFT,C
MOVC,KEYRIGHT
MOVLEDRIGHT,C
六、实验结果
I/O口输出实验,运行程序后可以看到LED从右向左循环点亮;
I/O口输入/输出实验,运行程序并置1后,拨动某一个开关后会看到对应的LED发光。
七、实验提高
修改I/O口输出程序,改成先1,3,5,7灯亮,再2,4,6,8灯亮。
思考:
只要将程序第一行的01H改为55H即可,55H即01010101B,最初1,3,5,7灯亮,右循环后变为10101010B,2,4,6,8灯亮。
八、实验思考
本实验第一次使用延时程序,对于程序
DELAY:
MOVR6,#0H
MOVR7,#0H
DELAYLOOP:
DJNZR6,DELAYLOOP
DJNZR7,DELAYLOOP
查指令表可知MOV和DJNZ指令均需两个指令周期,在12MHz晶振时,一个机器周期时间为:
12/12MHZ=1ms,该延时子程序延时:
(256X256+2)X2X12/12=130ms。
由于DJNZ指令是先对寄存器内容减1再与0比较,所以给R6R7赋值0可以获得最长延时。
Ⅱ、继电器控制实验
1、学习I/O端口的使用方法;
2、掌握继电器控制的基本方法;
3、了解用弱电控制强电的方法。
用单片机端口,输出电平控制继电器的吸合和断开,实现对外部装置的控制。
1、硬件连线
继电器输入
5V
继电器常闭输入
继电器中间输入
2、实验说明
本实验采用的继电器其控制电压是5V,控制端为高电平时,继电器工作常开触点吸合,连接触点的LED灯被点亮。
当控制端为低电平时,继电器不工作,LED灯灭。
3、分析并执行程序
OUTPUTEQUP1.0;
P1.0PORT
MOVOUTPUT,C
SETBC
;
提高时为了修改延时时间,只要更改2个立即数0即可。
DLOOP:
DJNZR7,DLOOP
DJNZR6,DLOOP
五、实验结果
运行程序后可以看到LED灯呈亮、灭、亮、灭的循环。
六、实验提高
1、修改程序,改变继电器吸合的时间间隔;
更改DELAY子程序中的两个立即数即可。
2、查询资料,了解其他弱电控制强电的方法。
弱电控制强电是通过低压系统的设备如定时器、传感器等设备对强电(220V以上)供电系统实现自动延时开启或关闭功能,有固体继电器、可控硅、光电耦合可控硅等等。
七、实验思考
这次试验比较简单,初步了解了继电器及其使用方法。
硬件实验二数据输入/输出口扩展实验
Ⅰ、用74HC245读入数据
1、了解CPU数据总线的使用;