You use the standard Microchip opcodes. You do not edit the ASM file that PB generates, you add the assembler routines to your basic file.
Look in your samples directory that came with PB you should find ASMINT.BAS in there, that will give you the idea of how to progress.
Code:
' Interrupts in assembly language
' Turn LED on. Interrupt on PORTB.0 (INTE) turns LED off.
' Program waits .5 seconds and turns LED back on.
led var PORTB.7
wsave var byte $20 system
'wsave1 var byte $a0 system ' Necessary for devices with RAM in bank1
'wsave2 var byte $120 system ' Necessary for devices with RAM in bank2
'wsave3 var byte $1a0 system ' Necessary for devices with RAM in bank3
ssave var byte bank0 system
psave var byte bank0 system
Goto start ' Skip around interrupt handler
' Define interrupt handler
define INTHAND myint
' Assembly language interrupt handler
asm
; Save W, STATUS and PCLATH registers, if not done previously
myint movwf wsave
swapf STATUS, W
clrf STATUS
movwf ssave
movf PCLATH, W
movwf psave
; Insert interrupt code here
; Save and restore FSR and any other registers used
bcf _led ; If interrupt, turn off LED
bcf INTCON, 1 ; Clear interrupt flag
; Restore saved registers
movf psave, W
movwf PCLATH
swapf ssave, W
movwf STATUS
swapf wsave, F
swapf wsave, W
retfie ; Return from interrupt
endasm
start: TRISB = $7f ' LED out, rest in
OPTION_REG = $7f ' Enable PORTB pullups
INTCON = $90 ' Enable INTE interrupt
led = 1 ' Turn LED on
waitloop: If led = 1 Then waitloop ' Wait here while LED is still on
' If we get here, LED is off
Pause 500 ' Wait .5 seconds
Goto start ' Start over (turn LED back on)
Bookmarks