使用汇编语言在AT89C51单片机上实现片内外数据覆写(Keil基本操作教程)

前言:本文章为笔者学习单片机课程的仿真作业,记录,实用性不大,大佬宿便看看就好

片内要求:将片内RAM30H-40H单元全部设置为#10H(如果用实验箱进行实验可以用清零设置为#00H,如果单纯用Keil软件仿真,最好设置为一个非零值,因为软件仿真时,存储单元的初始化都是零,看不出清零的效果)

片外要求:将片外7000H-70FFH单元全部设置为#10H(如果用实验箱进行实验可以用清零设置为#00H,如果单纯用Keil软件仿真,最好设置为一个非零值,因为软件仿真时,存储单元的初始化都是零,看不出清零的效果)

***片外的代码贴在文末,可以直接下翻***

实现过程:

ORG	0000H		        ;单片机上电或复位时程序指针的起始地址为0000H
	AJMP	START		;本条指令是程序执行的第一条指令,上一条伪指令决定本条指令的地址为0000H
	ORG	0030H		    ;将主程序的地址设置为0030H开始是为了避开五个中断的起始地址
START:	
        MOV	SP,#60H		;主程序初始化,将堆栈指针设置为60H是为了避开四个工作区和位寻址区
	    MOV	R0,#30H		;设置固定值的存储单元的首地址为30H
	    MOV	A,#10H		;将存储单元30H-40H中的内容设置为10H(或者要求的其它值)
LOOP:	
        MOV	@R0,A		        ;通过循环方式对每个存储单元赋值10H
	    INC	R0		            ;循环一次,改变一次存储单元的地址
	    CJNE	R0,#41H,LOOP	;条件控制循环结构,以地址作为循环控制的条件,
                                ;当R0中的地址为41H时,表示存储单元30H-40H都已经被赋值10H
	    AJMP	$		        ;等待,主要是为了设置断点便于调试
	END

以下多图预警!!

从0开始教你使用keil!

 

 

 如果使用实验箱进行实验,就选择右边的“使用Keil Monitor-51 Driver”,如果不使用实验箱,而是直接使用软件仿真,就选择左边的“使用软件仿真器”

此处使用实验箱

 

 

 

 

 

 

 

 

 

 到此应该已经学会啦!!

接下来,是片外是数据覆写!

要求:将片外7000H-70FFH单元全部设置为#10H(如果用实验箱进行实验可以用清零设置为#00H,如果单纯用Keil软件仿真,最好设置为一个非零值,因为软件仿真时,存储单元的初始化都是零,看不出清零的效果)

	ORG	0000H		;开始,复位指针起始地址0000H
	AJMP MAIN		;绝对转移main
	ORG 0030H		;放主函数
	MAIN:	
			MOV SP,#60H		    ;将堆栈指针置开始值,防止与寄存器地址冲突
			MOV R0,#0FFH		;将FFH传入R0,为覆写FF个数据置初值
			MOV DPTR,#7000H     ;将起始覆写地址传入
			MOV	 A,#10H         ;将要覆写进去的数据给A
			
	LOOP:	
			MOVX @DPTR,A        ;将DPTR内数据覆盖,改为A内值
			INC DPTR            ;覆写地址加1
			DJNZ R0,LOOP	    ;R0依次减1,不为0则跳转,此处要跳转FFH次
			AJMP $				;等待
	END

 看片外的数据要输入X:某某某某H

 此处用的是keil内置的仿真,所以未覆写的值都为0

其实重要的就是片外不能直接覆写,而且传入传出的数据只能用间接寻址法,此处为需要注意的点。

谢谢学习啦!!!

物联沃分享整理
物联沃-IOTWORD物联网 » 使用汇编语言在AT89C51单片机上实现片内外数据覆写(Keil基本操作教程)

发表评论