Code: '**************************************************************** '* Name : CAPSENSE.BAS * '* Author : RICHARD * '* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 10/20/2011 * '* Version : 1.0 * '* Notes : * '* : 16LF722A * ' * '**************************************************************** '#DEFINE DBUG 1 #CONFIG __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDTE_OFF & _BOR_OFF & _PLLEN_ON #ENDCONFIG define OSC 4 include "dt_ints-14.bas" include "REENTERPBP.bas" ' variables used by interrupt handler, comment out as per assembler 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 asm INT_LIST macro INT_HANDLER T1GATE_INT, _TB1, PBP,YES endm INT_CREATE ENDASM THRESH CON 8000 'needs to be established FLG VAR BYTE 'GOT A KEY KP VAR BYTE 'WHICH KEY pressed key_inx var byte ;key index PW VAR WORD ; PULSEWIDTH DEFINE DEBUG_REG PORTB DEFINE DEBUG_BIT 7 ;pgd DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 OSCCON = %00010000 CPSCON0 = %10001100 'high range CPSCON1 = 0 'cps ch 0 ANSELB = %00000111 'SETS INPUTS B0-B2 AS ANALOG TRISB = %01111111 'SETS INPUTS B0-B5 AS INPUTS b7 output WPUB = %00000000 'DISABLES WEAK PULL-UP BITS TRISC = %11111011 'ccp1 output portc.2 OPTION_REG=$86 'edge int. prescale 1:128 PIE1.7=1 'timer1 gate interrupt T1GCON=$f9 ' single shot timer0 overflow as input T1CON=%11000101 'capsense as input no prescale no sync INTCON= $C0 'peripheral interrupts PW=512 t2con=7 LED VAR portc.2 ;up down off ;key0=portb.0=ch0, key1=portb.1=ch1, key2=portb.2=ch2 #IFDEF DBUG portb.7=1 LED=1 pause 2000 Debug "Start",13 ,10 LED=0 pause 500 #ENDIF ccp1con=12 CCPR1L=128 FLG=0 key_inx=0 MAIN: IF FLG=1 THEN IF KP = 0 THEN PW= (PW+64) MIN 1023 ELSEif KP = 1 THEN PW = PW-64 IF PW.15 THEN PW=0 else 'MUST BE THE OTHER ONE ccp1con=0 ;kill it led=0 ENDIF CCPR1L = PW>>2; ccp1con=12|((PW&3)<<4); #IFDEF DBUG debug "KEY ",#KP,13,10 debug #PW,13,10 #ENDIF PAUSE 300 FLG=0 'clr key pressed flag ENDIF GOTO MAIN TB1: #IFDEF DBUG debug #TMR1,13,10 #ENDIF IF TMR1 < THRESH THEN ' KEY DETECTED if !flg then KP=key_inx FLG=1 'set key pressed flag endif ENDIF key_inx=key_inx+1 ;check next key if key_inx > 2 then key_inx=0 CPSCON1 = key_inx TMR1=0 T1GCON.3= 1 ;single shot reset @ INT_RETURN
Page last modified on April 01, 2018, at 11:52 PM