使用汇编语言在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
其实重要的就是片外不能直接覆写,而且传入传出的数据只能用间接寻址法,此处为需要注意的点。
谢谢学习啦!!!