assembly - 在 Intel 8051 上结合 SDCC 和 ASM 代码编译的问题

标签 assembly 8051 sdcc

我们正在尝试编译我们的 C 代码,其中包括用于各种操作(定时、产生输出波形和测量输入频率)的大量汇编。

对于我们的一些 ASM 操作,我们不断收到相同的错误:

“.org 在 REL 区域或指令/助记符错误”

在我们下面的代码中,我们得到 3 个错误(我评论了它们发生的行,以及我们得到的错误究竟是什么。谢谢!

void getFrequency(int *freqHi, int *freqLo) 
{
    __asm
    ;
    ; A program that measures the frequency at pin T0 (P1.2)

    ljmp GetFreq

    Wait1s:
        mov R2, #40
    M3: mov R1, #250
    M2: mov R0, #181
    M1: djnz R0, M1 ; 2 machine cycles-> 2*0.27126us*181=100us
        djnz R1, M2 ; 100us*250=0.025s
        djnz R2, M3 ; 0.025s*40=1s
        ret

    ;Initializes timer/counter 0 as a 16-bit counter
    InitTimer0:
        setb T0 ; Enable pin T0 as input
        clr TR0 ; Stop timer 0
        mov a,#0F0H ; ERROR <o> .org in REL area or directive / mnemonic error
        anl a,TMOD
        orl a,#00000101B ; Set timer 0 as 16-bit counter ERROR <o> .org in REL area or directive / mnemonic error
        mov TMOD,a
        ret

    GetFreq:
        mov SP, #7FH ; Set the stack pointer to the begining of idata ERROR <o> .org in REL area or directive / mnemonic error

        lcall InitTimer0

        clr TR0 ; Stop counter 0
        mov TL0, #0
        mov TH0, #0

        setb TR0 ; Start counting
        lcall Wait1s ; Wait one second
        clr TR0 ; Stop counter 0, TH0-TL0 has the frequency

        mov R0, TH0
        mov R1, TL0

        mov _freqHi, R0
        mov _freqLo, R1

    __endasm;

    // freqHi, freqLo have respective values
}

最佳答案

sdcc的汇编程序不支持 HB您正在使用的立即数的后缀语法。

试试 #0xF0而不是 #0F0H , 和 #0b00000101而不是 #00000101B , 等等。

关于assembly - 在 Intel 8051 上结合 SDCC 和 ASM 代码编译的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007283/

相关文章:

embedded - 如何在 8051 中使用无线串口连续发送和接收?

C - 使用函数填充(获取)数据。最好通过引用或复制(在微 Controller 环境中)?

c - 8051 的 sdcc 编译器的奇怪行为

c - 功能根本没有执行或没有正确执行

c - keil uvision4 是否足以替代 8051 硬件

linux - 如何获取 SDCC 生成的十六进制文件以在 Pic Simulator IDE 中进行模拟?

assembly - m80 宏汇编器 org 指令

assembly - ARM 64 中堆栈指针和帧指针指向同一地址是否有效?

assembly - VC++ 2K8 中 SSE 编码的内在函数与内联 ASM

c++ - 代码如何捕获异常?