1、Keil C 入门调试实例(黄在 Keil uVision3 下编写):作业:将 A 中的内容送到片内 30H 单元中,然后 A 和 B 中的内容相加,和送到 R0中,同时送到片外 RAM 的 200H 单元中。1、先 filenew 建 asm 文件 demo.asmMOV 30H,AADD A,BMOV R0,AMOV DPTR,#0200HMOVX DPTR,A END为了调试时看数据,预先在 A 中赋值为 45H,在 B 中赋值为 37H,所以程序前加mov a, #45hmov b, #37h (ASM 不分大小写,而 C 分大小写),同时 为了在最后不至于出现不想看到的框,可以在
2、END 前加两三个 NOP 指令,程序变为:mov a, #45hmov b, #37h MOV 30H,AADD A,BMOV R0,AMOV DPTR,#0200HMOVX DPTR,A NOPNOP ; 因为 NOP 是仅耗时但什么也不做的空指令,对本程序无影响,也可以不写。NOPEND2、建新工程,Projectnew project ,选 AtemlAT89C51 ,导入文件 demo.asm。注意,对初学者,一个工程里只能有本程序 demo.asm,无关的程序要删除,新试验一个程序最好重新建工程,以保证一个工程里只有你要试验的那一个程序。3、可见程序4、编译通过后,点 debug
3、下的 start/stop 开始调试, step 和 step over 都是单步调试,step是遇到子程序或中断也要进入进行单步调试,step over 是遇到子程序或中断当一句一次执行完。本程序物子程序,二者是一样的。我们执行一句得到:可见 A 中的值为 45H,B 中还为 0, 是将要执行的语句,再执行一步,可见:B 中数据为 37H5、点 view memory windows,再输入 D:0 回车,得到:可见 30H 处为 00(内存默认是一般为 0) ,再执行一步得到:,可见 30H 处为 45H再执行一步,得到:A 中的值为(A)+(B)=45H+37H=7CH,并且可见 DPTR 中为 0000再执行一步,得到:可见 R0 中为 7CH。同时可见片内地址 00H 处为 7CH,因为(在缺省时)R0 就是片内地址 00H。再执行一步,得到:可见 DPTR 中为 0200H再执行一步,并输入 X:200H 回车,得到:可见片外 RAM 的 200H 单元处的值为 7CH。6、对片内片外 RAM 赋值,也可以不在程序前赋值,在程序调试前直接到地址处赋值。如想对片外 200H 处赋值 6EH,点 view memory windows,输入 X:200H 回车,得到:直接双击 X:200H 处,输入 6E 即可得: