使用pic微控制器清除存储器位置

时间:2011-05-11 16:51:24

标签: assembly microcontroller low-level pic

我是asm和嵌入式系统的初学者。我正在寻找使用“间接”寄存器(或类似的东西 - 不确定)清除内存位置的代码。代码如下:

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

我没有得到incf FSR, F部分。指令incf需要两个操作数;它在第一个位置递增值,并将结果存储在第二个位置。在这种情况下,F将具有递增的值,那么我们为什么要对FSR进行测试?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

incf是增量文件寄存器。第二个参数是目标,它是寄存器本身(F)或工作寄存器(W),实际上是一个标志。 PIC指令只能有一个文件寄存器地址,因此您将递增FSR,这是指令中唯一的寄存器。寄存器F没有。

仔细阅读有关PIC风格的指令集参考。

答案 2 :(得分:0)

好的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,这将更有意义。