微机原理附应用实验报告.docx
- 文档编号:11069573
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:15
- 大小:59.29KB
微机原理附应用实验报告.docx
《微机原理附应用实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理附应用实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理附应用实验报告
微机原理及应用实验报告
班级:
姓名:
学号:
中南大学
机电工程学院精密测控实验室
实验二软件程序设计
1.实验目的:
1、掌握MCS-51单片机指令系统及用汇编语言编程技巧;
2、了解和熟悉用MCS-51单片机仿真开发机调试程序的方法。
2.实验内容:
1、编写排序程序并上机调试通过。
已知8031内部RAM60H~69H单元中,依次存放了FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。
2.、编写多字节加法程序并上机调试通过。
8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。
3.实验设备名称、型号:
台式微型计算机
MCS-51仿真开发机
THKSCM-2A
4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:
程序1、编写排序程序并上机调试通过。
已知8031内部RAM60H~69H单元中,依次存放了
FFH,99H,77H,CCH,33H,DDH,88H,BBH,44H,EEH,它们均为无符号数,编程将它们按递减次序排序,即最大数放在60H中,最小数放在69H中。
解:
本设计采用冒泡排序法,使用双重循环,并在内循环中进行比较如果合乎从大到小的顺序则不动,否则两两交换,这样比较下去,比较9次后,最小的那个数就会沉底,在下一次比较时将减少一次比较次数。
如果一次比较完毕,没有发生交换,说明已经按照从大到小的顺序排列了。
则可以退出循环,结束程序。
程序结构框图和程序代码如下:
ORG1000H
TEMDATA50H
MOVR7,#9
MOV60H,#0FFH
MOV61H,#99H
MOV62H,#77H
MOV63H,#0CCH
MOV64H,#33H
MOV65H,#0DDH
MOV66H,#88H
MOV67H,#0BBH
MOV68H,#44H
MOV69H,#0EEH
LOOP0:
CLRF0
MOVA,R7
MOVR6,A
MOVR0,#60H
MOVR1,#60H
INCR1
LOOP1:
MOVA,@R0
MOVTEM,A
MOVA,@R1
CJNEA,TEM,NEXT
SJMPNOCHA
NEXT:
JCNOCHA
SETBF0
MOV@R0,A
XCHA,TEM
MOV@R1,A
NOCHA:
INCR0
INCR1
DJNZR6,LOOP1
JNBF0,HAL
DJNZR7,LOOP0
HAL:
SJMP$
END
程序2:
编写多字节加法程序并上机调试通过。
8031内部RAM20H~22H单元中,存放了3字节被加数(低字节在前),在2AH~2CH单元中存放3字节加数(低字节在前),求两数之和,并将结果存入以20H为起始地址的区域中(低字节在前)。
解:
改程序由三个字节数相加,其结果不会超过4个字节,可以采用循环求和的办法,吧加数和被加数依次从低位带进位相加,当然加最低位时必须先对进位位清零。
可以采用线性结构,也可以采用循环结构。
我在设计该程序采用单重循环,结构简单,特别是当相加的数较长时,优势更加明显。
程序结构框图和源代码如下:
ORG1000H
MOV20H,#××H
MOV21H,#××H
MOV22H,#××H
MOV2AH,#××H
MOV2BH,#××H
MOV2CH,#××H
MOVR0#20H
MOVR1#2AH
MOVR7#03H
CLRC
LOOP0:
MOVA,@R0
MOVB,@R1
ADDCA,B
MOV@R0,A
INCR0
INCR1
DJNZR7,LOOP0
NEXT:
JNCHAL
INCR0
MOV@R0,#01H
HAL:
SJMP$
END
5.思考题
1、如果题目1改为递增排序,如何修改程序,为什么?
答:
将NEXT中的指令中的JC指令换为JNC指令即可
2、如果题目1改为从30H单元开始的16个单元中无符号数排序,改哪几条指令?
答:
改变R7的值为15,将值赋予30H到3FH上就可以了
3、如果题目2改为从50H开始的4字节数与60H开始的四字节数相加,如何修改?
答:
MOVR0#20H改为MOVR0#50H
MOVR1#2AH改为MOVR1#60H
MOVR7#03H改为MOVR7#04H
4、写出题目2中你处理最高位进位的相应指令。
答:
NEXT:
JNCHAL
INCR0
MOV@R0,#01H
HAL:
SJMP$
5、循环程序中为何常用间接寻址方式(@Ri,@DPTR)?
答:
因为间接寻址可以实现程序的循环,便于编写程序。
6.心得体会:
通过实际模拟操作,加深了对单片机的理解,更好的理解编程语言,本次实验较为简单,
我是独立按时完成,当我看到发光二极管一次亮时别提我的兴奋劲了。
在试验的编程过程中
弄清了定时器的使用方法,以及延时的计算。
审阅:
实验三定时/计数器实验
1.实验目的:
1、掌握MCS-51单片机内部定时/计数器的功能与特点,工作方式选择和编程方法,中断功能的使用和中断服务程序的设计;
2、解和熟悉MCS-51单片机实验板的功能。
2.实验内容:
1、用MCS-51单片机的内部定时器定时中断,通过P1口控制实验板上八个LED发光二极管轮流循环显示发光,每个LED发光二极管显示时间为0.5秒;
2、用MCS-51单片机的内部定时器定时中断,编写一段电子秒表程序。
(选做)
3.实验设备名称、型号:
台式微型计算机
MCS-51仿真开发机
THKSCM-2A
4.画出软件程序流程图写出上机调试通过的汇编语言程序清单:
1、用MCS-51单片机的内部定时器定时中断,通过P1口控制实验板上八个LED发光二
极管轮流循环显示发光,每个LED发光二极管显示时间为0.5秒.
分析:
采用的晶振为11.0592MHz,所以时间周期T=1.085069μs。
采用方式一计时需要
460800次,超过了计时范围,故在采用一个内循环,取为10,则共需
460800÷10=46080。
X=2^(16)-46080=19456=4C00H
编程:
START:
MOVTMOD,#01H
MOVTH0,#4CH
MOVTL0,#00H
SETBTR0
SETBEA
SETBET0
MOVA,#F7H
MOVP1,A
MOV40H,#0AH
SJMP$
ORG0000H
LJMPSTART
ORG00BH
MOVTH0,#4CH
MOVTL0,#00H
DJNZ40H,OVER
MOV40H,#0AH
MOVP1,A
RRA
OVER:
RETI
5.思考题
1、你采用的是定时器0还是定时器1?
如果换用另外一个定时器,需要修改那些语句?
为什么?
答:
采用定时器0,若用另一个则要替换的语句是
MOVTMOD,#01H换为MOVTMOD,#10H
MOVTH0,#4CH换为MOVTH1,#4CH
MOVTL0,#00H换为MOVTL1,#00H
SETBTR0换为SETBTR1
2、如果将延时时间变为1秒,如何修改程序,为何?
答:
两个程序均是将MOV40H,#0AH改为MOV40H,#14H
3、改变发光二极管循环点亮方向,如何修改程序?
如果间隔闪亮(亮一个,黑一个,亮一个……)如何修改程序?
你还能做哪些花样?
答:
将RLA改为RRA
如果要间隔闪亮可以将A连续两次左移即RLA变为RLA再加RLA就可以了。
我还可以要其两同时亮,将累加器A的值变为0FDH就可以了语言是MOVA#0FEH变为MOVA,#0FDH
7.心得体会:
通过实际模拟操作,加深了对单片机的理解,更好的理解编程语言,本次实验较为简单,
我是独立按时完成,当我看到发光二极管一次亮时别提我的兴奋劲了。
在试验的编程过程中弄清了定时器的使用方法,以及延时的计算。
审阅:
实验四串行数据传送实验
1.实验目的:
1、掌握MCS-51单片机内部串行通信接口的功能与特点,工作方式选择和编程方法,中断功能的使用和中断服务程序的设计;
2、一步了解和熟悉MCS-51单片机实验板的功能。
2.实验内容:
1、用查询方式在二块单片机实验系统之间进行串行数据通信;
2、用中断方式在二块单片机实验系统之间进行串行数据通信。
3.实验设备名称、型号:
台式微型计算机
MCS-51仿真开发机
THKSCM-2A
4.画出软件程序流程图,写出上机调试通过的汇编语言程序清单:
说明:
采用的晶振为11.0592MHz,所以时间周期T=1.085069μs。
执行一次DJNZ指令需要2T,要间隔0.5s。
故需要执行0.5÷(2T)=230400次。
取三次循环,第一次为4,第二次为256,第三次为230400÷4÷256=225=0E1H。
代码如下:
ORG0000H
MOV40H,#00H
MOV41H,#01H
MOV42H,#02H
MOV43H,#03H
MOV44H,#04H
MOV45H,#05H
START:
MOVR0,#40H
MOVR2,#06H
MOVR7,#7FH
LOOP:
MOVA,@R0
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVP1,A
MOVA,R7
MOVP2,A
RRA
MOVR7,A
MOVR3,#04H
MOVR4,#00H
MOVR5,#0E1H
LOOP1:
DJNZR5,LOOP1
DJNZR4,LOOP1
DJNZR3,LOOP1
INCR0
DJNZR2,LOOP
LJMPSTART
DISTAB:
DB06H;显示1
DB5BH;显示2
DB4FH;显示3
DB66H;显示4
DB6DH;显示5
DB7DH;显示6
END
修改MOVR3,#04H
MOVR4,#00H
MOVR5,#0E1H
可以缩短显示时间。
当修改为MOVR3,#04H
MOVR4,#04H
MOVR5,#02H时从视觉看已经看不出变化。
用定时器实现方法:
采用的晶振为11.0592MHz,所以时间周期T=1.085069μs。
采用方式一
计时需要460800次,超过了计时范围,故在采用一个内循环,取为50,则共需
460800÷50=9216。
X=216-9216=56350=DC1EH
源代码如下:
MOVTMOD,#01H
MOVTH0,#0DCH
MOVTL0,#1EH
SETBEA
SETBET0
SETBTR0
SJMP$
0RGB000BH
MOVR2,#32H
DJNZR2,NEXT
ORG0050H
MOV40H,#00H
MOV41H,#01H
MOV42H,#02H
MOV43H,#03H
MOV44H,#04H
MOV45H,#05H
START:
MOVR0,#40H
MOVR2,#06H
MOVR7,#EFH
LOOP:
MOVA,@R0
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVP1,A
MOVA,R7
MOVP2,A
RRA
MOVR7,A
INCR0
NEXT:
RETI
DISTAB:
DB06H;显示1
DB5BH;显示2
DB4FH;显示3
DB66H;显示4
DB6DH;显示5
DB7DH;显示6
END
5.思考题
1、要显示实验当天的日期(如20100509),怎样调试?
答:
将MOVR2,#06H改为MOVR2,#08H
DISTAB:
DB06H;显示1改为DISTAB:
DB5BH;显示2
DB5BH;显示2DB3FH;显示0
DB4FH;显示3DB06H;显示1
DB66H;显示4DB3FH;显示0
DB6DH;显示5DB3FH;显示0
DB7DH;显示6DB6DH;显示5
DB3FH;显示0
DB6FH;显示9
2、用其中4位数码管显示“good”,程序如何修改?
答:
将MOVR2,#06H改为MOVR2,#04H
DISTAB:
DB06H;显示1改为DISTAB:
DB6FH;显示g
DB5BH;显示2DB3FH;显示0
DB4FH;显示3DB3FH;显示0
DB66H;显示4DB5EH;显示d
DB6DH;显示5
DB7DH;显示6
7.心得体会:
通过实际模拟操作,加深了对单片机的理解,更好的理解编程语言,本次实验我能够根
据老师给出的代码理解完成,并且取得满意的结果。
在试验的编程过程中弄清了很多在课堂
上没有理解的操作码的含义。
熟悉了各个操作码的使用方法及为什么如此用。
审阅:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 应用 实验 报告