0

我正在尝试做一些微控制器练习,如果这太明显了,我有点抱歉。

基本上,我们拥有的是一个 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

在我们将振荡器从 4Mhz 更改为 12Mhz 之前,它什么也没做,使用 12 Mhz 振荡器它有点工作,但有点疯狂。我们也尝试了 20Mhz,但效果也不是很好。我们甚至尝试了不同的配置词,但我们没有得到任何好的结果。

请帮忙,我有点绝望。

4

1 回答 1

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 输入是按钮或开关,请考虑在硬件或软件中实施去抖动解决方案

最后,对于时钟设置,如果您使用 8MHz 或更高的时钟,则 MPLAB 中的配置字应设置为 HS,如果您使用 4 MHz,则应设置为 XT。

于 2012-11-13T22:03:44.720 回答