Проблемы, связанные с компиляцией кода SDCC и ASM на Intel 8051 - PullRequest
4 голосов
/ 15 февраля 2011

Мы пытаемся скомпилировать наш код 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
}

1 Ответ

2 голосов
/ 15 февраля 2011
Ассемблер

sdcc не поддерживает синтаксис суффиксов H и B для непосредственных значений, которые вы используете.

Попробуйте #0xF0 вместо #0F0H и #0b00000101 вместо #00000101B и т. Д.

...