Hi, here is at most one big mistake: the MOVFW at end of the ISR is definitely bogus as it destroys the Z flag. All of PIC data sheets contain a correct suggestion how to deal with IT's (e. g. DS30390-B, p. 136) I hope this is a contribution. Imre On Wed, 3 Feb 1999, Bart Stofferis wrote: > > Hi there !! > > > > Name here is Bart, and i have got some problems with my LUTs (lookup > > tables) & PIC16C73A or 16C76. > > > > I have to implement 10 tables of 127 bytes and the problem is that > > when an interrupt occurs the > > program counter jumps somewhere in space ... lost in space ... > > > > I don't understand the program counter mechanism very well ... > > > > Can someone reserve some time to have a look at my experiments > > > > I have included 2 files, the main program file and the LUT-file > > > > Thanks a lot ... and enjoy ! > > > > > > Main Program: > > ----------------------- > > > > list p=16C76 ; select controller > > include "P16C76.INC" ; include this file where > > ; all initialisation of > > Registers > > ; are defined. > > > > __CONFIG _HS_OSC&_WDT_OFF&_PWRTE_OFF; > > > > > > pointadres equ 0x020 > > pointvalue equ 0x021 > > WBACKUP equ 0x022 > > WBACKUPINT equ 0x023 > > STATUSBACKUPINT equ 0x024 > > > > ;+++++++++++++++++++++++++++++++++++++++++++++++++++ > > GoSub MACRO Subrtn > > ; Performa "call subroutine" anywhere in memory. > > ;+++++++++++++++++++++++++++++++++++++++++++++++++++ > > movwf WBACKUP > > movlw HIGH Subrtn > > movwf PCLATH > > movfw WBACKUP > > call Subrtn > > movwf WBACKUP > > movlw HIGH $ > > movwf PCLATH > > movfw WBACKUP > > ENDM > > > > Startup > > > > org 0x000 > > goto Init ; reset vector address > > > > org 0x004 ; interrupt vector address > > goto ServiceInt > > > > org 0x010 > > Init > > movlw 0x000 ; pointerwaarden 0..127 > > movwf pointadres > > > > bsf STATUS,RP0 ; PAGE1 > > bcf STATUS,RP1 ; PAGE1 > > movlw 0x000 ; PAGE1 > > movwf TRISB ; PAGE1 > > movwf TRISC ; PAGE1 > > movlw 0x007 ; PAGE1 > > movwf OPTION_REG ; PAGE1 > > bcf STATUS,RP0 ; PAGE1 > > bcf STATUS,RP1 ; PAGE1 > > > > clrf TMR0 > > movlw 0x0E0 > > movwf INTCON > > > > > > Main > > movfw pointadres ;1 > > GoSub M_ONTime > > movwf PORTB > > > > movfw pointadres ;2 > > GoSub L_ONTime > > movwf PORTB > > > > movfw pointadres ;3 > > GoSub M_PWM > > movwf PORTB > > > > movfw pointadres ;4 > > GoSub L_PWM > > movwf PORTB > > > > movfw pointadres ;5 > > GoSub M_MSB > > movwf PORTB > > > > movfw pointadres ;6 > > GoSub L_MSB > > movwf PORTB > > > > movfw pointadres ;7 > > GoSub M_Mid > > movwf PORTB > > > > movfw pointadres ;8 > > GoSub L_Mid > > movwf PORTB > > > > movfw pointadres ;9 > > GoSub M_LSB > > movwf PORTB > > > > movfw pointadres ;10 > > GoSub L_LSB > > movwf PORTB > > > > goto Main > > > > > > include "e:\firmware\hbtable.h" > > > > ; ServiceInt > > ServiceInt > > movwf WBACKUPINT > > movfw STATUS > > movwf STATUSBACKUPINT > > btfss INTCON,T0IF > > goto ServiceIntEnd > > Timer0Int > > bcf STATUS,RP0 > > bcf INTCON,T0IF > > bsf PORTC,7 > > clrf TMR0 > > bsf INTCON,T0IE > > > > ServiceIntEnd > > movfw STATUSBACKUPINT > > movwf STATUS > > movfw WBACKUPINT > > retfie > > > > END > > > > Table file: > > ----------------- > > > > ;filename HBTABLE.H > > ; > > ; LOOK-UP Table definition > > ; > > ; ON_Time adres > > ; M_ONTime 1600 > > ; L_ONTime 1700 > > ; > > ; PWM_Freq > > ; M_PWM 1800 > > ; L_PWM 1900 > > ; > > ; 24bconv > > ; M_MSB 1A00 > > ; L_MSB 1B00 > > ; M_Mid 1C00 > > ; L_Mid 1D00 > > ; M_LSB 1E00 > > ; L_LSB 1F00 > > ; > > ;********************************************************************* > > ******** > > > > > > > > > > ;********************************************************************* > > ******** > > ; > > ; LOOK-UP Table ON_Time > > ; > > ;********************************************************************* > > ******** > > > > > > org 0x1600 > > de "M_ONTime",0 > > > > M_ONTime ; High part ON_Time > > addwf PCL,f > > > > retlw 0x001 > > retlw 0x019 > > > > *****127 values***** > > > > org 0x1700 > > de "L_ONTime",0 > > > > L_ONTime ; Low part ON_Time > > addwf PCL,f > > > > retlw 0x002 > > retlw 0x032 > > > > *****127 values***** > > > > > > > > org 0x1800 > > de "H_PWM ",0 > > > > M_PWM ; High part PWM frequency > > addwf PCL,f > > > > retlw 0x004 > > retlw 0x04B > > > > *****127 values***** > > > > > > org 0x1900 > > de "L_PWM ",0 > > > > L_PWM ; Low part PWM frequency > > addwf PCL,f > > > > retlw 0x008 > > retlw 0x064 > > > > *****127 values***** > > > > > > org 0x1A00 > > de "M_MSB ",0 > > > > M_MSB ; High part MSB 24bit word > > addwf PCL,f > > > > retlw 0x001 > > retlw 0x07D > > > > *****127 values***** > > > > > > org 0x1B00 > > de "L_MSB ",0 > > > > L_MSB ; Low part MSB 24bit word > > > > addwf PCL,f > > > > retlw 0x002 > > retlw 0x096 > > > > *****127 values***** > > > > > > org 0x1C00 > > de "M_Mid ",0 > > M_Mid ; High part Mid 24bit word > > > > addwf PCL,f > > > > retlw 0x004 > > retlw 0x0AF > > > > *****127 values***** > > > > > > org 0x1D00 > > de "L_Mid ",0 > > > > L_Mid ; Low part Mid 24bit word > > addwf PCL,f > > > > retlw 0x008 > > retlw 0x0C8 > > > > *****127 values***** > > > > > > org 0x1E00 > > de "M_LSB ",0 > > > > M_LSB ; High part LSB 24bit word > > addwf PCL,f > > > > retlw 0x001 > > retlw 0x0E1 > > > > *****127 values***** > > > > > > org 0x1F00 > > de "L_LSB ",0 > > > > L_LSB ; Low part LSB 24bit word > > addwf PCL,f > > > > retlw 0x002 > > retlw 0x0FA > > > > *****127 values***** > > > > > > Tnx ! , Bart > > > >