2012-11-12 86 views
0

我正在嘗試做一些微控制器的練習,如果這太顯而易見了,我是一種n00b,所以很抱歉。用PIC16F877A彙編語言中斷

基本上我們有一個PIC16F877A連接按鈕連接到RC4和RC5上的PORTC,配置爲輸入。這個想法是使用RC5來激活中斷,並等待TMR0中斷來激活蜂鳴器(我們現在使用LED)。然後,RC4必須禁用中斷並停止蜂鳴器/ LED(連接在RC0,作爲輸出配置)。

我們製作了我們的程序,它在MPLAB上運行得非常好,但是我們遇到了問題讓它在真實事物上運行。

這是程序:

list p=16f877a 
include "p16f877a.inc" 
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 


DELH EQU 0x2C 
DELL EQU 0x2F 
DELI EQU 0x2E 
ORG 0x00 
GOTO MAIN 
ORG 0x04 
GOTO INTERRUMPE 

MAIN  BCF STATUS,RP0 
      BCF STATUS,RP1 
      CLRF PORTC 
      CLRF PORTB 

      BSF STATUS,RP0 
      MOVWF 0xF0 
      MOVWF TRISC 
      MOVWF 0x00 
      MOVWF TRISB 
      MOVLW 0x83 
      MOVWF OPTION_REG 
      BCF STATUS,RP0 

TECLA  BTFSS PORTC,5 
      GOTO TECLA 
      MOVLW 0xB8 
      MOVWF INTCON 
      MOVLW 0x63 
      MOVWF TMR0   


TECLA2  BTFSS PORTC,4 
      GOTO TECLA2 
      BCF INTCON,7 
      BCF PORTC,0 
      GOTO TECLA 

INTERRUMPE BTFSS INTCON,2 
      GOTO REGRESO 
      BSF PORTC,0 
      MOVLW 0xBF 
      MOVWF TMR0 
      BCF INTCON,T0IF 
REGRESO RETFIE 

END  

我們有以下最低系統:

http://prntscr.com/jkz88

除非我們改變了oscilator從4MHz至12MHz的它沒有做任何事情,有了這種12兆赫的振動器很有用,但有點瘋狂。我們也嘗試了20Mhz,但它也不能很好地工作。 我們甚至嘗試了不同的配置詞,但是我們沒有得到任何好的結果。

請幫忙,我有點絕望。

回答

0

首先,代碼

 MOVWF 0xF0 
     MOVWF TRISC 
     MOVWF 0x00 
     MOVWF TRISB 

沒有做什麼是應該做的,MOVWF移動工作寄存器到GPR或SFR及其地址的內容,所以你在做什麼您正在填充工作寄存器未知值的地址0xF0(GPR)和0x00(間接尋址寄存器)。相反,你的代碼應該開始爲

 MOVLW 0xF0 
     MOVWF TRISC 
     MOVLW 0x00 
     MOVWF TRISB 

而且,如果RC4和RC4輸入是按鈕或開關,考慮實施或者在HW去彈跳溶液或SW

最後,時鐘設置,如果您使用的是8MHz時鐘或更高,則MPLAB中的配置字應該設置爲HS,如果您使用4 MHz,那麼它應該是XT。