哈工大单片机实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-1-软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。二、实验内容把2000~20FFh的内容清零。三、程序框图四、实验过程(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。(2)再利用MOVX语句,将外部存储器指定内容清零。(3)用CJNE比较语句判断循环是否结束。五、实验结果及分析-2-问题回答:清零前2000H~20FFH中为内存里的随机数,清零后全变为0。六、实验源程序;清零程序ORG0000HMOVDPTR,#2000HMOVR0,#0FFHORG0660HMAIN:MOVA,#00HMOVX@DPTR,AINCDPTRDJNZR0,MAINEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。三、程序框图四、实验过程(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。五、实验结果及分析-3-问题回答:将ANLA,#0FH改为ORLA,#0F0H可以实现将高位置为1。六、实验源程序;拆字程序ORG0000HMAIN:MOVDPL,#00HMOVDPH,#20HMOVXA,@DPTRSWAPAANLA,#0FHINCDPTRMOVX@DPTR,AMOVDPL,#00HMOVXA,@DPTRANLA,#0FHINCDPTRINCDPTRMOVX@DPTR,AEND实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。二、实验内容把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。三、程序框图-4-四、实验过程(1)首先利用数据指针DPTR取出2000H中的内容给累加器A,交换高低位后再进行与操作取出2000H中的低位,但在A中是位于高位,将其送入B中。(2)再利用数据指针取出2001H中的内容送给累加器A,直接进行与操作取出其低位数据。(3)再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。五、实验结果及分析问题回答:本实验运行程序后2002H内容为0CEH,即2000H单元中低四位“C”作为2002H的高四位,2001H的低四位“E”作为2002H的低四位。六、实验源程序;拼字程序ORG0000HAJMPMAINORG0680HMAIN:MOVDPL,#00HMOVDPH,#20HMOVXA,@DPTRANLA,#0FHSWAPAMOVB,AINCDPTR-5-MOVXA,@DPTRANLA,#0FHORLA,BINCDPTRMOVX@DPTR,AEND实验四数据区传送子程序一、实验目的掌握RAM中的数据操作。二、实验内容把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。三、程序框图四、实验过程实验要求将一段内存中数据移动到另一段内存中,这个程序在开始定义源RAM首址为0000H,目的区首址为0030H,但是在进行搬移的子程序中选择将INC语句置于开始,所以结果是把0001H单元开始20H个字节的内容送到0031H开始的连续数据单元中。(1)先把初始地址分别放入源地址寄存器和目的地址寄存器,因为转移区的长度定义的较小,所以就是只利用了R3作为数据转移循环条件。(2)每进行一次转移地址寄存器向下加一,由于转移区较短所以整个程序的源RAM和目的RAM区的指针加1的操作只需要对R3、R5进行。五、实验结果及分析-6-问题回答:R4、R5定义的目的地址单元中转移之前为随机数,转移后内容与以R2、R3开始的的源地址单元中20个字节内容相同,即实现了数据的传送。六、实验源程序ORG0000HAJMPMAINORG07B0HMAIN:MOVR7,#20HMOVR6,#00HMOVR2,#00HMOVR3,#00HMOVR4,#00HMOVR5,#30HLOOP:INCR3INCR5MOVDPL,R3MOVDPH,R2MOVXA,@DPTRMOVDPL,R5MOVDPH,R4MOVX@DPTR,ACJNER3,#021H,LOOPEND实验六查找相同数个数一、实验目的熟悉汇编语言编程。二、实验内容在2000~200Fh中查出有几个字节是零,把个数放在2100h中。-7-三、程序框图四、实验过程(1)实验中利用R0放置需查找段长度,即设置其值为10H,设置R1初值为00H,用于存放等于零数据的个数。(2)从2000H单元开始,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能,每次检查完一个单元R0减1,指针下移,直到R0等于0结束循环。循环终止后,将R1内容存入2100H中即可。五、实验结果及分析问题回答:若需查找0FFH,只需将语句JZLOOP1改为CJNZR0,#0FFH,LOOP1即可,即数据等于0FFH时跳转到计数+1的程序段进行计数。六、实验源程序;查找相同数个数ORG0000HLJMPMAINORG0AA0HMAIN:MOVDPL,#00HMOVDPH,#20H-8-MOVR0,#10HMOVR1,#00HLOOP:MOVXA,@DPTRJZLOOP1DECR0INCDPTRSJMPLOOP2LOOP1:INCR1DECR0INCDPTRLOOP2:CJNER0,#00H,LOOPMOVDPL,#00HMOVDPH,#21HMOVA,R1MOVX@DPTR,AEND实验七无符号双字节快速乘法子程序一、实验目的掌握MCS-51汇编语言程序设计方法。二、实验内容将(R2R3)和(R6R7)中双字节无符号整数相乘,乘积送R4R5R6R7中。三、程序框图四、实验过程本程序是利用单字节的乘法指令MUL,根据下面的公式实现双字节数的乘法。(R2R3)×(R6R7)-9-=((R2)×28+(R3))×((R6)×28+(R7))=(R2)×(R6)×216+(R2)×(R7)+(R3)×(R6)×28+(R3)*(R7)将乘数与被乘数高低字节拆开分别相乘,然后再将每个高字节因子向前移动8位进行调整,进行加权求和。利用ADDC语句可实现带进位的加法运算。得到的最终结果存入R4、R5、R6、R7寄存器中。五、实验结果及分析寄存器R2、R3、R6、R7分别输入01、10、11、10,运行程序,即进行0110H×1110H的运算,得到结果为00122100H存放在R4、R5、R6、R7寄存器中,故R4、R6中的内容是00H和21H。六、实验源程序;无符号双字节快速乘法子程序ORG0970HMAIN:MOVR2,#00HMOVR3,#02HMOVR6,#00HMOVR7,#05HMOVA,R3MOVB,R7MULABXCHA,R7MOVR5,BMOVB,R2MULABADDA,R5MOVR4,ACLRAADDCA,BMOVR5,AMOVA,R6MOVB,R3MULABADDA,R4XCHA,R6-10-XCHA,BADDCA,R5MOVR5,AMOVF0,CMOVA,R2MULABADDA,R5MOVR5,ACLRAMOVACC.0,CMOVC,F0ADDCA,BMOVR4,ASJMP$END实验八多分支程序一、实验目的掌握汇编语言的编程。二、实验内容编写程序,根据送入的数据转移运行。三、程序框图四、实验过程实验中利用散转指令JMP@A+DPTR实现程序的多分支跳转,这里A为变址寄存器,DPTR为基址寄存器。跳转到不同分支的运行结果由LED进行显示,每个分支对应的数码管上显示不同的数字。显示数字由数字七段码送至I/O口显示。在显示程序中利用循环左移加延时子程序调用,实现数字循环显示的效果。编程中需要注意的是,A需乘以2即左移一位再作为变址寄存器,这是程序中由于分支跳转语句为2个字节所致。五、实验结果及分析实验中可以看到选择不同的数字进入不同分支,LED管上会出现不同数字的循环左移显示。问题回答:如需将循环速度减慢,只要将延时子程序初值变大,或增加循环层数,或者再增加一段循环语句即可,如可进行以下修改:改为DELAY:-11-MOVR3,#0FFHMOVR2,#0FFHDL1:MOVR4,#0FFHDL1:MOVR3,#0FFHDL2:NOPDL2:MOVR4,#0FFHNOPDL3:NOPDJNZR4,DL2NOPDJNZR3,DL1DJNZR4,DL3RETDJNZR3,DL2ENDDJNZR2,DL1RETEND若将0字循环改为4字循环只需同时将0字七段码0C0H改为4字七段码99H即可。六、实验源程序ORG0000HLJMPMAINORG0DA0HLJMPSOX0ORG0A10HMAIN:MOV20H,#03H;每次实验,这里可以改为0、1、2和3MOVA,20H;取预置数据MOVDPTR,#LOOP;散转表起始地址RLA;A乘以2JMP@A+DPTR;散转指令LOOP:AJMPLOOP1AJMPLOOP2AJMPLOOP3AJMPLOOP4LOOP1:MOV21H,#0C0H;0字的7段码SJMPSOX0LOOP2:MOV21H,#0F9H;1字的7段码SJMPSOX0LOOP3:MOV21H,#0A4H;2字的7段码SJMPSOX0LOOP4:MOV21H,#0B0H;3字的7段码SOX0:;循环显示程序MOVA,21H;取来7段码MOVR0,#0DCH;显示器段地址MOVR1,#0DDH;显示器位地址MOVX@R0,A;将7段码输出-12-MOVA,#01H;最右边的位发光SOX1:MOVX@R1,AMOVR2,#20H;准备延时LCALLDELAY;调用延时子程序RLA;左移显示的位SJMPSOX1;无穷循环DELAY:MOVR3,#0FFHDL1:MOVR4,#0FFHDL2:NOPNOPDJNZR4,DL2DJNZR3,DL1RETEND实验十电脑时钟(定时器、中断器综合实验)一、实验目的熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。二、实验内容编写程序,从本实验系统键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。三、程序框图-13-四、实验步骤1、LED环境⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。⑵在“P.”状态下键入0030,然后按“EXEC”进入该实验项目的运行。2、PC环境在与PC联机状态下,编译、连接、下载PH51\se10.asm,用连续方式运行该程序。3、在键盘上输入时间初值,按执行键EXEC执行,数码管上实时显示时间值。4、按“暂停图标”或实验箱上的“暂停按钮”,系统无条件退出该程序运行返回监控状态。五、实验分析及结果如何修改程序使定时器工作方式改变(实现12小时制)问题回答:因为程序中有十进制调整,所以就将程序中“CJNEA,#24H,DONE;24小时到吗?”改为“CJNEA,#12H,DONE;12小时到吗?”六、实验源程序;电脑时钟(定时器、中断综合实验)ORG0000HSJMPCHK00ORG000BHLJMPCLOCK;INT_T0ORG0030HCHK00:MOVSP,#60HLCALLLEDPCHK0:LCALLLCK0;键扫,显示子程序LCALLPTDS0;显示缓冲区放数子程序MOVTMOD,#01HORLIE,#10000010b;EA=1,IT0=1MOVTL0,#0MOVTH

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功