2012-02-07 34 views
0

有問題的嵌入式系統是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

作爲一個新手,我不能這樣做,所以我放棄了PORTC並定義了一個常量,遞增並將該WORKING regsiter移動到portc中並得到了相同的結果。是的,我是個騙子。

更新:事實證明這是一個微妙的硬件錯誤,允許所有其他實驗的功能,但阻止這一個工作。直到電路被惡意重新佈線之後才發現。

+0

對stackoverflow的迴應應在相關答案下的評論中作出。 – 2012-02-09 19:41:55

1

井檢查數據表:

當使能外設的功能,應小心定義每個PORTC銷 TRIS位。一些外設覆蓋了TRIS位 以使引腳成爲輸出,而其他外設覆蓋TRIS位 以使引腳成爲輸入。

所以首先確保PORTC上的所有外設功能都關閉!

要找到哪個引腳被重寫輸入使用電路調試器!