8051单片机汇编LCALL为什么跳转不到子程序?解决办法(新手问题)

  1. 如果是你自己创建的工程,使用Keil C51模拟器,运行程序时发现Keil的Command窗口持续报错:
    error 65: access violation at I:0xC2 : no ‘write’ permission
    则可能时用Keil创建的AT89C51工程默认不会设置外部RAM,而AT89C51内部RAM只有0x80的大小,设置堆栈MOV SP, #0C0H的话,则程序越界了,可以MOV SP, #3FH

  2. 如果你是第一次写8051汇编程序,写了一个汇编函数,然后在复位中断里用LCALL/ACALL/CALL等命令调用了它,然后单步执行,但是按F10时发现怎么也进不去子函数。那不是你程序写错了,而是Keil C51的单步执行和C语言的一样,遇到LCALL它就知道是一个函数,就自己跳过去了,此时你需要在子函数设置一个断点,然后按F5直接运行并进入断点,或者F10单步执行时在CALL DELAY这里改按F11,进入子函数,这样才能继续单步进子函数。我找这个问题找了几个小时才发现是这样的,在网上搜完全没搜到结果。

例如:如果用汇编写了一个子函数

	ORG 0H
	LJMP RESET
	
	ORG 23H
	RETI

RESET:
LOOP:
	CALL DELAY
	LJMP LOOP
	
DELAY:
	NOP
	RET

END

猜你喜欢

转载自blog.csdn.net/qq582880551/article/details/131152366
今日推荐