当前位置:文档之家› 哈工大单片机实验报告(上传)

哈工大单片机实验报告(上传)

H a r b i n I n s t i t u t e o f T e c h n o l o g y单片机原理与应用实验报告学生姓名:学号:班级:专业:任课教师:所在单位:2013年5月软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容把2000~20FFh的内容清零。

三、程序框图四、实验过程实验中利用MOVX语句,将外部存储器指定内容清零。

利用数据指针DPTR完成数据传送工作。

程序采用用循环结构完成,R0移动单元的个数,可用CJNE比较语句判断循环是否结束。

五、实验结果及分析清零前清零后【问题回答】清零前2000H~20FFH中为内存里的随机数,清零后全变为0。

六、实验源程序AJMP MAINORG 0640HMAIN: MOV R0, #00HMOV DPL, #00HMOV DPH, #20HLOOP: MOV A, #00HMOVX @DPTR, AINC DPTRINC R0CJNE R0, #0FFH, LOOPMOVX @DPTR, AEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序框图四、实验过程将寄存器中内容送入2000H,分别将高低四位移到低位,将高四位置零然后移入2001H 和2002H中。

利用MOVX语句、DPTR指针可实现数据的传送,利用高低四位交换语句SWAP和与语句ANL可进行对高低位的清零。

五、实验结果及分析拆字前拆字后【问题回答】将ANL A, #0FH改为ORL A, #0F0H可以实现将高位置为1。

六、实验源程序ORG 0000HAJMP MAINORG 0660HMAIN: MOV DPL, #00HMOV DPH, #20HMOVX A, @DPTRSWAP AANL A, #0FHINC DPTRMOVX @DPTR, AMOV A, DPLDEC AMOV DPL, AMOVX A, @DPTRANL A, #0FHINC DPTRINC DPTRMOVX @DPTR, ASJMP $END实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。

二、实验内容把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。

三、程序框图四、实验过程本实验主要应用与语句ANL对高四位进行屏蔽,利用SWAP语句将2000H低四位交换到高四位,再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。

五、实验结果及分析拼字前拼字后【问题回答】本实验运行程序后2002H内容为34H,即2000H单元中低四位“3”作为2002H 的高四位,2001H的低四位“4”作为2002H的低四位。

六、实验源程序ORG 0000HAJMP MAINORG 0680HMAIN: MOV DPL, #00HMOV DPH, #20HMOVX A, @DPTRANL A, #0FHSWAP AMOV B, AINC DPTRMOVX A, @DPTRANL A, #0FHORL A, BINC DPTRMOVX @DPTR, AEND实验四数据区传送子程序一、实验目的掌握RAM中的数据操作。

二、实验内容把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。

三、程序框图四、实验过程实验要求将一段内存中数据移动到另一段内存中,本次实验通过寄存器内容截图显示,是把0000H单元开始20H个字节的内容送到1000H开始的连续数据单元中。

先把初始地址分别放入源地址寄存器和目的地址寄存器,然后利用一组寄存器作为需转移数据区长度计数器,开始数据转移循环。

每进行一次转移地址寄存器向下加一,计数寄存器内容减一,计数寄存器内容为0退出循环移动结束。

由于计数以及地址寄存器是由两个八位寄存器组成,需要在加一减一时对其高字节和低字节进行判断。

加一时若低字节加一变为0,则高字节加一,否则低字节加一高字节不变。

减一时若低字节已是0则高字节减一,同时低字节变为0FFH,否则低字节减一高字节不变。

五、实验结果及分析寄存器内容源内存段中内容目的内存段中移动前内容目的内存段中移动后内容【问题回答】如图R4、R5定义的目的地址单元中转移之前为随机数,转移后内容与以R2、R3开始的的源地址单元中20个字节内容相同,即实现了数据的传送。

六、实验源程序ORG 0000HAJMP MAINORG 07B0HMAIN: MOV R7, #20HMOV R6, #00HMOV R2, #00HMOV R3, #00HMOV R4, #10HMOV R5, #00HLOOP: MOV DPL,R3MOV DPH, R2MOVX A, @DPTRMOV DPL, R5MOV DPH, R4MOVX @DPTR, ACJNE R3, #0FFH, LOOP1INC R2LOOP1: INC R3CJNE R5, #0FFH, LOOP2INC R4LOOP2: INC R5CJNE R7, #00H, LOOP3CJNE R6, #00H, LOOP4SJMP $LOOP3: DEC R7SJMP LOOPLOOP4: DEC R6DEC R7SJMP LOOPSJMP $END实验六查找相同数个数一、实验目的熟悉汇编语言编程。

二、实验内容在2000~200Fh中查出有几个字节是零,把个数放在2100h中。

三、程序框图四、实验过程实验中利用R0放置需查找段长度,即从2000H单元开始,每次检查完一个单元R0减一,指针下移,直到R0等于0结束循环。

R1存放等于零数据的个数,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能。

循环终止后,将R1内容存入2100H中即可。

五、实验结果及分析2000H到200FH中的内容2100H显示找6个0【问题回答】若需查找0FFH,只需将语句JZ LOOP1改为CJNZ R0, #0FFH, LOOP1即可,即数据等于0FFH时跳转到计数+1的程序段进行计数。

六、实验源程序ORG 0000HLJMP MAINORG 0AA0HMAIN: MOV DPL, #00HMOV DPH, #20HMOV R0, #10HMOV R1, #00HLOOP: MOVX A, @DPTRJZ LOOP1DEC R0INC DPTRSJMP LOOP2LOOP1: INC R1DEC R0INC DPTRLOOP2: CJNE R0, #00H, LOOPMOV DPL, #00HMOV DPH, #21HMOV A, R1MOVX @DPTR, ASJMP $END实验七无符号双字节快速乘法子程序一、实验目的掌握MCS-51汇编语言程序设计方法。

二、实验内容将(R2 R3)和(R6 R7)中双字节无符号整数相乘,乘积送R4 R5 R6 R7中。

三、程序框图四、实验过程本程序是利用单字节的乘法指令MUL,根据下面的公式实现双字节数的乘法。

(R2 R3)×(R6 R7)= ((R2)×28+(R3))×((R6)×28+(R7))= (R2)×(R6)×216+(R2)×(R7)+(R3)×(R6)×28+(R3)*(R7)将乘数与被乘数高低字节拆开分别相乘,然后再将每个高字节因子向前移动8位进行调整,进行加权求和。

利用ADDC语句可实现带进位的加法运算。

得到的最终结果存入R4、R5、R6、R7寄存器中。

五、实验结果及分析相乘后寄存器内容Answer:寄存器R2、R3、R6、R7分别输入01、10、11、10,运行程序,即进行0110H×1110H的运算,得到结果为00122100H存放在R4、R5、R6、R7寄存器中,故R4、R6中的内容是00H和21H。

六、实验源程序ORG 0000HLJMP MAINORG 0970HMAIN: MOV R2, #01HMOV R3, #10HMOV R6, #11HMOV R7, #10HMOV A, R3MOV B, R7MUL ABXCH A, R7MOV R5, BMOV B, R2MUL ABADD A, R5MOV R4, ACLR AADDC A, BMOV R5, AMOV A, R6MOV B, R3MUL ABADD A, R4XCH A, R6XCH A, BADDC A, R5MOV R5, AMOV F0, CMOV A, R2MUL ABADD A, R5MOV R5, ACLR AMOV ACC.0, CMOV C, F0ADDC A, BMOV R4, ASJMP $END实验八多分支程序一、实验目的掌握汇编语言的编程。

二、实验内容编写程序,根据送入的数据转移运行。

三、程序框图四、实验过程实验中利用散转指令JMP @A+DPTR实现程序的多分支跳转,这里A为变址寄存器,DPTR为基址寄存器。

跳转到不同分支的运行结果由LED进行显示,每个分支对应的数码管上显示不同的数字。

显示数字由数字七段码送至I/O口显示。

在显示程序中利用循环左移加延时子程序调用,实现数字循环显示的效果。

编程中需要注意的是,A需乘以2即左移一位再作为变址寄存器,这是程序中由于分支跳转语句为2个字节所致。

五、实验结果及分析实验中可以看到选择不同的数字进入不同分支,LED管上会出现不同数字的循环左移显示。

【问题回答】如需将循环速度减慢,只要将延时子程序初值变大,或增加循环层数,或者再增加一段循环语句即可,如可进行以下修改:DELAY: 改为DELAY:MOV R3, #0FFH MOV R2, #0FFHDL1: MOV R4, #0FFH DL1: MOV R3, #0FFHDL2: NOP DL2: MOV R4, #0FFHNOP DL3: NOPDJNZ R4,DL2 NOPDJNZ R3,DL1 DJNZ R4,DL3RET DJNZ R3,DL2END DJNZ R2,DL1RETEND若将0字循环改为4字循环只需将0字七段码0C0H改为4字七段码99H即可。

六、实验源程序ORG 0000HLJMP MAINORG 0DA0HLJMP SOX0ORG 0A10HMAIN: MOV 20H, #03H ;每次实验,这里可以改为0、1、2和3MOV A, 20H ;取预置数据MOV DPTR, #LOOP ;散转表起始地址RL A ;A 乘以2JMP @A+DPTR ;散转指令LOOP: AJMP LOOP1AJMP LOOP2AJMP LOOP3AJMP LOOP4LOOP1: MOV 21H, #0C0H ;"0"字的7段码SJMP SOX0LOOP2:MOV 21H, #0F9H ;"1"字的7段码SJMP SOX0LOOP3: MOV 21H, #0A4H ;"2"字的7段码SJMP SOX0LOOP4: MOV 21H, #0B0H ;"3"字的7段码SOX0: ;循环显示程序MOV A, 21H ;取来7段码MOV R0, #0DCH ;显示器段地址MOV R1, #0DDH ;显示器位地址MOVX @R0, A ;将7段码输出MOV A, #01H ;最"右"边的位发光SOX1:MOVX @R1, AMOV R2, #20H ;准备延时LCALL DELAY ;调用延时子程序RL A ;左移显示的位SJMP SOX1 ;无穷循环DELAY:MOV R3, #0FFHDL1: MOV R4, #0FFHDL2: NOPNOPDJNZ R4,DL2DJNZ R3,DL1RETEND实验十一二进制转换到BCD一、实验目的将给定的一个二进制数,转换成二进制编码的十进制(BCD)码。

相关主题