очистка областей памяти с помощью микроконтроллера - PullRequest
0 голосов
/ 11 мая 2011

Я новичок в asm и встраиваемых системах. Я искал код, который предназначен для очистки областей памяти, используя регистр косвенного обращения (или что-то подобное - не уверен) Код выглядит так:

    movlw 0x20
    movwf FSR
loop    clrf INDF
    incf FSR, F
    btfsc FSR, 7
    goto loop

Я не понимаю incf FSR, F часть. Инструкция incf принимает два операнда; он увеличивает значение в первом месте и сохраняет результат во втором. В этом случае F будет иметь увеличенное значение, тогда почему мы делаем тест на FSR?

Ответы [ 3 ]

1 голос
/ 11 мая 2011

F означает регистр файла, это бит выбора кода d (адресата); d = 0: сохранить результат в W, d = 1: сохранить результат в регистре файлов f. По умолчанию d = 1.

Компилятор должен понимать:

;Increment FSR byte and result store back to FSR
    incf FSR, F
    or
    incf FSR, 1
;Increment FSR byte and result store to W reg
    incf FSR, w
    or
    incf FSR, 0
0 голосов
/ 08 августа 2012

Ok F просто означает ячейку памяти. обрабатывать «FSR» как переменную, указатель на ячейку памяти.

            movlw 0x20     // put's the number 0x20 into the W register
            movwf FSR      // put's condense of W register in memory Loc "FSR"       
    loop    clrf INDF      // clear location pointed at by the value in W register. 
            incf FSR, F    // increment the content of the FSR
            btfsc FSR, 7   // test bit7 in the FSR and skip if set (exiting the loop)
            goto loop      // go back to loop. and do next memory location.

Теперь проблема, которую я вижу в этом, заключается в том, что он завершит первый прогон при FSR = 0x20, поэтому бит 7 сброшен, поэтому он выходит из цикла. поэтому мне интересно, если btfsc должен быть btfss. тогда это будет цикл от 0x20 до 0xF0, что будет иметь больше смысла.

0 голосов
/ 11 мая 2011

incf - регистр файла приращения. Второй аргумент - это назначение, которое является либо самим регистром (F), либо рабочим регистром (W) и фактически является флагом. Инструкции PIC могут иметь только один адрес регистра файла, поэтому вы увеличиваете FSR, который является единственным регистром в вашей инструкции. Нет такой вещи как регистр F.

Внимательно прочитайте справочник инструкций для вашего вкуса PIC.

...