Here's an external interrupt example using DT's Interrupts:
Code:'******************************************************************** '* Name : LAB X1 External Interrupt.BAS Version : 1.0 * '* Author : Demon Date : 2012-01-06 * '* Task : External interrupt from keypad using DT Interrupts * '* Hardware : PIC 16F877, 20mhz crystal * '* : Lab X1 Experimental Board * '* : MeLabs U2 Programmer v4.32 * '* Software : PIC Basic Pro v2.60C * '* : MicroCode Studio Plus v2.2.1.1 * '* : MPASM Assembler v3.50 * '******************************************************************** 'DEFINE LOADER_USED 1 ' Comment out CONFIG in MPASM include (File: 16F877.INC in PBP folder). @ __config _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF DEFINE OSC 20 ' Using only 4 bit bus to control LCD DEFINE LCD_DREG PORTD ' Set LCD data port DEFINE LCD_DBIT 4 ' Set starting data bit DEFINE LCD_RSREG PORTE ' Set LCD register select port DEFINE LCD_RSBIT 0 ' Set LCD register select bit DEFINE LCD_EREG PORTE ' Set LCD enable port DEFINE LCD_EBIT 1 ' Set LCD enable bit DEFINE LCD_BITS 4 ' Set LCD bus size DEFINE LCD_LINES 2 ' Set number of lines on LCD DEFINE LCD_COMMANDUS 2000 ' Set command delay time in microseconds DEFINE LCD_DATAUS 50 ' Set data delay time in microseconds TRISB = %00001111 ' Set port B pins to 4 output, 4 input ' B0 = External Interrupt TRISD = %00000000 ' Set all port D pins to output TRISE = %00000000 ' Set all port E pins to output ADCON1 = 7 ' A/D off, all digital OPTION_REG.6 = 0 ' Sets interrupt trigger on falling edge OPTION_REG.7 = 0 ' Enable weak pull-up resistors wsave VAR BYTE $70 SYSTEM ' Required by Instant Interrupt routine LED1 VAR PORTD.0 PAUSE 1000 ' Wait for LCD to initalize LCDOUT $FE,1,"LabX1 16F877 Ext Int" LCDOUT $FE,$C0,"Any button on row 1" PORTD = %00000000 ' Clear LEDs '---[INT - interrupt includes]-------------------------------------------------- INCLUDE "DT_INTS-14.bas" ; Base Interrupt System INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts '---[INT - interrupt definition]------------------------------------------------ ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler INT_INT, _ToggleLED1, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE INT_INT ; enable external (INT) interrupts Main: PORTB = %00000000 ' Set output on keypad ' to prevent floating pins GOTO Main '---[INT - interrupt handler]--------------------------------------------------- ToggleLED1: TOGGLE LED1 @ INT_RETURN end
This is what it looks like on the Saleae Logic Analyser after 4 button presses:
![]()




Bookmarks