Hi All,
I have been going around in circles all day trying to get Darrel's Instant Interrupt routine (Interrupt on Change) working on two PORTB pins of a PIC16F1826. I want to increment or decrement a byte size variable (Level) between 1 and 8 using switches on RB1 and RB2. Each pin has a 10k pull down resistor and I have tried to set the IOCBP register to read rising edge triggers. The variable is displayed on a 16 x 2 LCD using LCDOUT command. I can display the variable (default is 3) but cannot get the switches to work.
My code is as follows:
I have used the Instant Interrupt routine before (with some help from other forum members) but this time it has me perplexed. The process of commenting out variable wsave etc confuses me as on this occasion the compiler gives no error messages. I have tried a number of different combinations - all to no avail. I must admit, I have been clutching at straws for the last few hours!Code:#CONFIG __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __config _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_OFF & _BORV_25 & _LVP_OFF #ENDCONFIG DEFINE OSC 32 'Internal RC Oscillator with PLL ' Connect LCD DB4 to RA0 (Pin 17) ' Connect LCD DB5 to RA1 (Pin 18) ' Connect LCD DB6 to RA2 (Pin 1) ' Connect LCD DB7 to RA3 (Pin 2) ' Connect LCD R/S to RA6 (Pin 15) ' Connect LCD E to RA7 (Pin 16) ' Connect Reset Button to MCLR (Pin 4) ' Connect Up Switch to RB1 (Pin 7) with 10k pulldown resistor ' Connect Down Switch to RB2 (Pin 8) with 10k pulldown resistor INCLUDE "DT_INTS-14.bas" ' Base Interrupt System INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler IOC_INT, _PortBInterrupts, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE IOC_INT ; enable PortB change interrupts ' Define LCD registers and bits Define LCD_DREG PORTA Define LCD_DBIT 0 Define LCD_RSREG PORTA Define LCD_RSBIT 6 Define LCD_EREG PORTA Define LCD_EBIT 7 Define LCD_BITS 4 Define LCD_LINES 2 INTCON = %10001000 'Enable Global Interupts and IOC interrupt OSCCON= %11110000 'PLL enabled, Internal RC-8MHz and PLL x 4 CM1CON0.7 = 0 'Disable comparator 1 CM2CON0.7 = 0 'Disable comparator 2 PORTB = 0:PORTA=0 'Set all outputs to 0 TRISB = %00000110 'Set PORTB.1 & 2 as digital input 'All other PORTB pins as digital outputs TRISA = %00100000 'Set PORTA.5 as digital inputs 'All other PORTA pins as digital outputs '(PORTA.5 can only be an input) ANSELA = %00000000 'Disable PORTA analog inputs ANSELB = %00000000 'Disable PORTB analog inputs ADCON0 = %00000000 'Enable ADC and select AN9 FVRCON = %00000000 'Disable FVR IOCBP = %00000110 'Set IOC on rising edge for RB1 & RB2 IOCBN = 0 'Disable IOC falling ;-- Place a copy of these variables in your Main program ------------------- ;-- The compiler will tell you which lines to un-comment -- ;-- Do Not un-comment these lines -- ;--------------------------------------------------------------------------- wsave VAR BYTE $20 SYSTEM ' location for W if in bank0 ;wsave VAR BYTE $70 SYSTEM ' alternate save location for W ' if using $70, comment wsave1-3 ' --- IF any of these three lines cause an error ?? ------------------------ ' Comment them out to fix the problem ---- ' -- Which variables are needed, depends on the Chip you are using -- wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1 wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2 ;wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3 Level var byte 'Level setting 1 - 8 Level = 3 'Set starting level to 1 pause 1000 'Pause 1 second LCDOUT $FE, 1 'Clear screen Again: lcdout $FE, $80, "Level = ", dec Level, " "'Display Level goto Again PortBInterrupts: if IOCBF.1 = 1 then Level = Level + 1 If Level > 8 then Level = 8 endif endif if IOCBF.2 = 1 then Level = Level - 1 If Level < 1 then Level = 1 endif endif @ INT_RETURN end
Can somebody please look at the code and tell me what I am doing wrong?
Cheers
Barry
VK2XBP


 
		
		 
			 
			 
			 
					
					 Help Needed with Darrel's Interrupt on Change Routine
 Help Needed with Darrel's Interrupt on Change Routine
		 
						
					




Bookmarks