-
51单片机系列教程主仓库地址:https://gitee.com/langcai1943/8051-from-boot-to-application
-
新手可能遇到的问题:
-
如果是你自己创建的工程,使用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 -
如果你是第一次写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