我正在编程16F886,这是一个内联asm的示例:
#asm
psect TxtData,class=CODE,delta=2
global _text1,_text2
_text1: dw 'T','E','X','T','1',0
_text2: dw 'T','E','X','T','2',0
#endasm
我需要将EEADR和EEADRH指向每个标签以读取闪存。
在纯asm中,我只想使用低/高操作数来获取每个标签的地址,例如movlw low Text1
。
在C中,我需要为每个标签添加类似“const指针”的东西,但我无法使其工作。
我正在使用Hitech C编译器用于PIC 10/12/16。
答案 0 :(得分:1)
感谢大家的支持。 我在Microchip论坛上发布了这个问题,并且有几个人尝试了它。事实证明,编译器中有10/12/16 mcus有一些bug。在C18编译器或Hitech C18中,当设置为18F mcu时,上面提出的解决方案完美无缺。 我设法找到的唯一解决方法是使用内联汇编来获取asm地址标签的高字节并以这种方式设置正确的寄存器。
asm
EEADRH EQU 0x10F
movlw high _text1
banksel EEADRH
movwf EEADRH
endasm
答案 1 :(得分:0)
字符串标签是指针 - 您不必使用&
指定其地址。你必须先编写地址的MS部分
unsigned short address = text;
EEADRH = (address >> 8) & 0xF;
EEADR = address & 0xFF;