Hi,
Just learnd how to use loockup tables and SPI interface with a digital pot. When adding a switch to my project the code halts. It does not get the table data it seems. The gode works fine without the "BTFSS PORTA,1"
Just learnd how to use loockup tables and SPI interface with a digital pot. When adding a switch to my project the code halts. It does not get the table data it seems. The gode works fine without the "BTFSS PORTA,1"
Code:
LIST p=16F88 ; list directive to define processor
#INCLUDE <p16f88.inc> ; processor specific variable definitions
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
errorlevel -302
cblock 0x20
d1
d2
d3
count1
count2
endc
;******************** EQUATES ************************************************************
CS EQU H'00' ;CHIP SELECT
COMMAND EQU H'13' ;VARIABLE FOR THE COMMAND BYTE
R_VALUE EQU d'20' ;VARIABLE FOR THE RESISTANCE VALUE
DIM EQU H'00'
;******************** PROGRAM ORIGIN *****************************************************
ORG 0X00
;-------------------- PORTB AND SPI SETTING ----------------------------------------------
BSF STATUS, RP0 ;SPECIFY BANK 1
MOVLW B'01101100'
MOVWF OSCCON
MOVLW H'00'
MOVWF TRISB ;SET PORTB AS AN OUTPUT
CLRF PORTA
MOVLW 0x00
MOVWF ANSEL
MOVLW 0xFF
MOVWF TRISA
BCF STATUS, RP0 ;SPECIFY BANK 0
CLRF PCLATH ;ENSURE PCLATH BIT 3 IS CLEARED
CLRF INTCON ;ENSURE ALL INTERRUPTS ARE DISABLED
MOVLW 0x30 ;
MOVWF SSPCON ;SET SYNC SERIAL PORT CONTROL REGISTER
;-------------------- PROGRAM ROUTINE ----------------------------------------------------
LOOP1
btfss PORTA,1 ;start?
goto LOOP1
START
BCF PORTA, CS ;SELECT THE POT
CLRF DIM
LOOP
MOVLW COMMAND ;LOAD THE COMMAND BYTE IN THE ACCUMULATOR
CALL TRANSMIT ;TRANSMIT THE COMMAND BYTE
MOVF DIM,W
CALL TABLE
CALL TRANSMIT
INCF DIM,1
BTFSS DIM,4
GOTO LOOP
BSF PORTA, CS ;UNSELECT THE POT
GOTO START ;FINISH
;-------------------- TRANSMISSION SUBROUTINE --------------------------------------------
TRANSMIT
BCF STATUS, RP0 ;SPECIFY BANK 0
MOVWF SSPBUF ;PLACE DATA IN BUFFER TO SEND
BSF STATUS, RP0 ;SPECIFY BANK 1
LOOP3
BTFSS SSPSTAT, BF ;CHECK IF TRANSMISSION IS COMPLETE
GOTO LOOP3 ;
BCF STATUS, RP0 ;SPECIFY BANK 0
RETURN ;RETURN FROM SUBROUTINE
;*******************************************************************************************
TABLE
ADDWF PCL,1
retlw d'220'
retlw d'221'
retlw d'222'
retlw d'223'
retlw d'224'
retlw d'225'
retlw d'226'
retlw d'227'
retlw d'228'
retlw d'229'
retlw d'230'
retlw d'231'
retlw d'232'
retlw d'233'
retlw d'234'
retlw d'235'
DELAY ;100ms
;99993 cycles
movlw 0x1E
movwf d1
movlw 0x4F
movwf d2
DELAY_0
decfsz d1, f
goto $+2
decfsz d2, f
goto DELAY_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
END
;******************** END OF PROGRAM *****************************************************