I am not sure weather I am doing something incorrectly or maybe there is a problem with the data sheet.
When I compile the above code and run it with the ICD3 I appear to get valid timer1 values in sfr locations 03a-045. When I touch the touch pad connected to pin 26 (CPS5) the value in 03a,03b changes. All other locations appear to be offset by a vale of 2. See expected,actual addresses after the port definitions. Can anyone explain why this is like it is?Code:DEFINE OSC 4 @ __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_ON & _BOREN_ON & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDTE_OFF & _FOSC_XT @ __CONFIG _CONFIG2, _WRT_HALF & _BORV_25 & _PLLEN_OFF db0 VAR PORTC.0 'o 0:3 digit data db1 VAR PORTC.1 'o db2 VAR PORTC.2 'o PIN13 db3 VAR PORTC.3 'o PIN14 digitsel1 VAR PORTC.4 'o PIN15 digitsel2 VAR PORTC.5 'o PIN16 TX VAR PORTC.6 'o RX VAR PORTC.7 'i cs VAR PORTA.0 'o nu1 VAR PORTA.1 'o nu2 VAR PORTA.2 'o 'EXPECTED ACTUAL BUT1 VAR PORTB.0 'i pin21 03A-O3B 03C-03D UP VAR PORTB.1 'i pin22 03C-03D 03E-03F BUT3 VAR PORTB.2 'i pin23 03E-03F 040-041 ENTER VAR PORTB.3 'i pin24 040-041 042-043 DOWN VAR PORTB.4 'i pin25 042-043 044-045 BUT2 VAR PORTB.5 'i pin26 044-045 03A-03B nu3 VAR PORTB.6 'o pin27 nu4 VAR PORTB.7 'o pin28 INDEX var byte BASEVAL VAR byte[12] 'AFTER COMPILING BASEVAL=ADDRESS 03A GOTO START: DEFINE INTHAND MYINT ASM MYINT CLRF BSR ;SET PAGE=0 BTFSS PIR1,TMR1GIF ;TEST FOR TIMER1 GATE INTERRUPT BRA TIMER0 ;MUST BE TIMER0 BCF T1CON,TMR1ON ;STOP TIMER1 CLRF FSR0H ;CLEAR FSR HIGH BYTE MOVLW _BASEVAL ;MOV BASEVAL TO FSR0 LOW MOVWF FSR0L MOVLW 6 ;MOVE 6 TO WREG SUBWF _INDEX,W ;SUBTRACT W FROM INDEX BTFSC STATUS,Z ;TEST FOR ZERO CLRF _INDEX ;IF ZERO THEN ZERO INDEX MOVF _INDEX,w ;MOVE INDEX TO W MOVWF CPSCON1 ;MOV W TO CAPACITIVE SENSING CHANNEL LSLF WREG,W ;MULTIPY W BY 2 ADDWF FSR0L,F ;ADD W TO BASEVAL MOVF TMR1L,W ;MOVE TIMER1 LOW TO WREG MOVWI INDF0++ ;SAVE WREG TO BASEVAL+INDEX*2 AND INC FSR0 MOVF TMR1H,w ;MOVE TIMER1 HIGH BYTE TO WREG MOVWI INDF0++ ;SAVE WREG TO BASEVAL+INDEX*2+1 INCF _INDEX,f ;INCREMENT INDEX CLRF TMR1L ;CLEAR TIMER1 LOW CLRF TMR1H ;CLEAR TIMER1 HIGH BSF T1CON,TMR1ON ;TURN TIMER 1 ON BCF PIR1,TMR1GIF ;CLEAR TIMER 1 GATE INTERRUPT FLAG RETFIE ;RETURN FROM INTERRUPT TIMER0 BCF INTCON,TMR0IF ;CLEAR TIMER0 INTERRUPT FLAG RETFIE ;RETURN FROM INTERRUPT ENDASM START: ANSELA=$00 TRISA=$00 ANSELB=$3F TRISB=$3F PORTA=$01 PORTB=$00 PORTC=$30 TRISC=$80 CPSCON0=$8C 'BITS 2,3=OSCILLATOR RANGE CPSCON1=$00 'BITS 0-2 SELECT CHANNEL OPTION_REG=$C4 T1CON=$C5 T1GCON=$E1 PIR1=$00 PIE1=$80 INDEX=0 INTCON=$E0 loop1: goto loop1
Graham Guthrie




Bookmarks