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

哈工大单片机实验报告

软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

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

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

三、程序框图四、实验过程(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。

(2)再利用MOVX语句,将外部存储器指定内容清零。

(3)用CJNE比较语句判断循环是否结束。

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

六、实验源程序;清零程序ORG 0000HMOV DPTR,#2000HMOV R0,#0FFHORG 0660HMAIN: MOV A,#00HMOVX @DPTR,AINC DPTRDJNZ R0,MAINEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

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

三、程序框图四、实验过程(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。

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

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

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

三、程序框图四、实验过程(1)首先利用数据指针DPTR 取出2000H中的内容给累加器A,交换高低位后再进行与操作取出2000H中的低位,但在A 中是位于高位,将其送入B中。

(2)再利用数据指针取出2001H 中的内容送给累加器A,直接进行与操作取出其低位数据。

(3)再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。

五、实验结果及分析问题回答:本实验运行程序后2002H内容为0CEH,即2000H单元中低四位“C”作为2002H 的高四位,2001H的低四位“E”作为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区。

三、程序框图四、实验过程实验要求将一段内存中数据移动到另一段内存中,这个程序在开始定义源RAM首址为0000H,目的区首址为0030H,但是在进行搬移的子程序中选择将INC语句置于开始,所以结果是把0001H单元开始20H个字节的内容送到0031H开始的连续数据单元中。

(1)先把初始地址分别放入源地址寄存器和目的地址寄存器,因为转移区的长度定义的较小,所以就是只利用了R3作为数据转移循环条件。

(2)每进行一次转移地址寄存器向下加一,由于转移区较短所以整个程序的源RAM和目的RAM区的指针加1 的操作只需要对R3、R5进行。

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

六、实验源程序ORG 0000HAJMP MAINORG 07B0HMAIN: MOV R7, #20HMOV R6, #00HMOV R2, #00HMOV R3, #00HMOV R4, #00HMOV R5, #30HLOOP: INC R3INC R5MOV DPL,R3MOV DPH, R2MOVX A, @DPTRMOV DPL, R5MOV DPH, R4MOVX @DPTR, ACJNE R3, #021H, LOOPEND实验六查找相同数个数一、实验目的熟悉汇编语言编程。

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

三、程序框图四、实验过程(1)实验中利用R0放置需查找段长度,即设置其值为10H,设置R1初值为00H,用于存放等于零数据的个数。

(2)从2000H单元开始,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能,每次检查完一个单元R0减1,指针下移,直到R0等于0结束循环。

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

五、实验结果及分析问题回答:若需查找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, AEND实验七无符号双字节快速乘法子程序一、实验目的掌握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寄存器中。

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

六、实验源程序;无符号双字节快速乘法子程序ORG 0970HMAIN: MOV R2, #00HMOV R3, #02HMOV R6, #00HMOV R7, #05HMOV 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:MOV R3,#0FFHMOV R2,#0FFHDL1:MOV R4,#0FFHDL1:MOV R3,#0FFHDL2:NOPDL2:MOV R4,#0FFHNOPDL3:NOPDJNZ R4,DL2NOPDJNZ R3,DL1DJNZ R4,DL3RETDJNZ R3,DL2ENDDJNZ 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:AJMPLOOP1AJMPLOOP2AJMPLOOP3AJMPLOOP4LOOP1: MOV 21H, #0C0H ;"0"字的7段码SJMPSOX0LOOP2:MOV 21H, #0F9H ;"1"字的7段码SJMPSOX0LOOP3: MOV 21H, #0A4H ;"2"字的7段码SJMPSOX0LOOP4: 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实验十电脑时钟(定时器、中断器综合实验)一、实验目的熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。

相关主题