有问题的嵌入式系统是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
答案 0 :(得分:1)
检查数据表:
启用外围功能时,应注意定义 每个PORTC引脚的TRIS位。某些外设会覆盖TRIS位 使引脚成为输出,而其他外设则覆盖TRIS位 把针作为输入。
首先确保PORTC上的所有外围功能都关闭!
要查找被覆盖的引脚,请使用incurcuit debugger!
答案 1 :(得分:0)
作为一个新手,我无法做到这一点,所以我放弃了PORTC并定义了一个常量,增加了它并将该WORKING注册表移动到了portc并获得了相同的结果。是的,我是一个放弃者。
更新:事实证明,这是一个微妙的硬件错误,允许所有其他实验运行,但阻止这个实现。直到电路重新连线才被发现。