指向PIC 16F和Hitech C的内联asm标签的指针

时间:2015-01-20 23:00:50

标签: c assembly inline-assembly pic

我正在编程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。

2 个答案:

答案 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;