【发布时间】:2023-03-20 17:30:02
【问题描述】:
这是任务: 您将使用“外部中断”引脚(引脚名称为“INT”)来产生中断。该引脚与 PICDEM 2 Plus 评估板上的开关“S3”相连。按下此开关将产生中断。 我们将此引脚配置为输入,启用外部中断,启用全局中断,并使用我们创建的名为“Push_Count”的寄存器跟踪我们生成此中断的次数。
这是我的代码:
; PIC16F877A Configuration Bit Settings
; ASM source line config statements
#include <p16F877A.inc>
; CONFIG
; __config 0xFF7B
__CONFIG _FOSC_EXTRC & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
cblock 0x020
COUNTERL
COUNTERH
PUSH_COUNT
endc
org 0x0000 ;put next line of code at address 0x0000
RESET_V goto START ;reset vector
START org 0x040
clrf PUSH_COUNT ;reset counter to 0
clrf INTCON ;clear INTCON register
bsf INTCON,INTE ;enable external int on INT pin
bsf INTCON,GIE ;enable global int
bsf STATUS,RP0 ;switch to bank 1
movlw b'00000001' ;set RB0 as input
movwf TRISB ;move value to TRISB
bcf STATUS,RP0 ;switch to bank
clrf PORTB ;clear PORTB output vector
bsf PORTB,0 ;turn on LED on RB0
goto $ ;loop here forever
INT_SERVICE org 0x004
call DELAY
incf PUSH_COUNT,f ;increment PUSH_COUNT
bcf INTCON,INTF ;clear int flag
retfie
DELAY decfsz COUNTERL ;decrement COUNTERL
goto DELAY ;if not zero, keep decrementing COUNTERL
decfsz COUNTERH ;decrement COUNTERH
goto DELAY ;if not zero, keep decrementing COUNTERH
return
END
我的问题是,每次我按下 PICDEM 2 上的 S3 开关时,中断都不起作用,PUSH_COUNT 寄存器的值不会增加/计数。我的代码有问题吗?我只是 PIC 的新手。谢谢
【问题讨论】:
-
你的时钟频率是多少?
DELAY会不会太长。你如何检查“PUSH_COUNT”的内容?您是否在调试模式下运行? -
我的振荡器设置为 EXT,我没有设置任何时钟频率。我正在 MPLAB X 的“文件寄存器”窗口中检查 PUSH_COUNT 的内容
-
对于板上的 EXT 时钟频率检查 Y2(或 Y1)。但更重要的是:当您中断调试模式(通过单击“调试主项目”运行)时,如果该变量在范围内,文件寄存器窗口将向您显示当前寄存器值。