无法在嵌入式系统中增加寄存器

时间:2012-02-07 03:35:18

标签: assembly pic

有问题的嵌入式系统是PIC 16F877,我试图用incfsz增加PORTC寄存器,但它保持为0.教程说这是可能的,但我无法让它工作。

list p=16f877
include "p16f877.inc"

__CONFIG    _CP_OFF & _CPD_OFF & _LVP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC


org 0x000           ; Start at the reset vector
nop                 ; Reserved for ICD in debu mode

Init
banksel PORTC
clrf    PORTC       ; Clear PORTC initially


; Set up the Timer0 control register

banksel OPTION_REG
movlw   B'10000111' ; Internal clock, prescaler assigned to Timer0
movwf   OPTION_REG  ; prescaler, 1:256

clrf    TRISC       ; PORTC all output  

banksel PORTC       ; Back to Bank 0

movlw   B'00000000'
Main

; Timer0 delay for acquisition


btfss   INTCON,T0IF ; Loop until T0IF = 1 (TMR0 rollover)
goto    Main
bcf     INTCON,T0IF
incfsz  PORTC , F  
goto Main


LoopWhilePushed         ; Loop if PORTB<0> = 0 (pressed)

btfss   PORTB,0
goto    LoopWhilePushed

goto    Main        ; Do it again

end

2 个答案:

答案 0 :(得分:1)

检查数据表:

  

启用外围功能时,应注意定义   每个PORTC引脚的TRIS位。某些外设会覆盖TRIS位   使引脚成为输出,而其他外设则覆盖TRIS位   把针作为输入。

首先确保PORTC上的所有外围功能都关闭!

要查找被覆盖的引脚,请使用incurcuit debugger!

答案 1 :(得分:0)

作为一个新手,我无法做到这一点,所以我放弃了PORTC并定义了一个常量,增加了它并将该WORKING注册表移动到了portc并获得了相同的结果。是的,我是一个放弃者。

更新:事实证明,这是一个微妙的硬件错误,允许所有其他实验运行,但阻止这个实现。直到电路重新连线才被发现。