;**************************************************************************
;* VELLEMAN High-Q KIT K8048 SAMPLE SOFTWARE *
;**************************************************************************
;* K8048 Microchip PIC(tm) Programmer / tutor KIT *
;* DEMO2 program for testing K8048 with PIC16F627(A)! *
;* Generate 4 LED light effects, you can select these with SW1..4 *
;**************************************************************************
;* (C) VELLEMAN Components,2003 All rights reserved *
;**************************************************************************
;* Hardw. Rev: P8048'1 Softw. Rev: 1.01 *
;* OSC.......: XT 4MHz Max. POWER.....: 15V DC *
;**************************************************************************
W EQU H'0000'
F EQU H'0001'
;----- Register Files------------------------------------------------------
INDF EQU H'0000'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CMCON EQU H'001F'
OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
PIE1 EQU H'008C'
PCON EQU H'008E'
PR2 EQU H'0092'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
EEDATA EQU H'009A'
EEADR EQU H'009B'
EECON1 EQU H'009C'
EECON2 EQU H'009D'
VRCON EQU H'009F'
;----- STATUS Bits --------------------------------------------------------
IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'
;----- INTCON Bits --------------------------------------------------------
GIE EQU H'0007'
PEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'
;----- PIR1 Bits ----------------------------------------------------------
EEIF EQU H'0007'
CMIF EQU H'0006'
RCIF EQU H'0005'
TXIF EQU H'0004'
CCP1IF EQU H'0002'
TMR2IF EQU H'0001'
TMR1IF EQU H'0000'
;----- T1CON Bits ---------------------------------------------------------
T1CKPS1 EQU H'0005'
T1CKPS0 EQU H'0004'
T1OSCEN EQU H'0003'
NOT_T1SYNC EQU H'0002'
TMR1CS EQU H'0001'
TMR1ON EQU H'0000'
;----- T2CON Bits ---------------------------------------------------------
TOUTPS3 EQU H'0006'
TOUTPS2 EQU H'0005'
TOUTPS1 EQU H'0004'
TOUTPS0 EQU H'0003'
TMR2ON EQU H'0002'
T2CKPS1 EQU H'0001'
T2CKPS0 EQU H'0000'
;----- CCP1CON Bits ---------------------------------------------------------
CCP1X EQU H'0005'
CCP1Y EQU H'0004'
CCP1M3 EQU H'0003'
CCP1M2 EQU H'0002'
CCP1M1 EQU H'0001'
CCP1M0 EQU H'0000'
;----- RCSTA Bits ---------------------------------------------------------
SPEN EQU H'0007'
RX9 EQU H'0006'
SREN EQU H'0005'
CREN EQU H'0004'
ADEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
;----- CMCON Bits ---------------------------------------------------------
C2OUT EQU H'0007'
C1OUT EQU H'0006'
C2INV EQU H'0005'
C1INV EQU H'0004'
CIS EQU H'0003'
CM2 EQU H'0002'
CM1 EQU H'0001'
CM0 EQU H'0000'
;----- OPTION Bits --------------------------------------------------------
NOT_RBPU EQU H'0007'
INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'
;----- PIE1 Bits ----------------------------------------------------------
EEIE EQU H'0007'
CMIE EQU H'0006'
RCIE EQU H'0005'
TXIE EQU H'0004'
CCP1IE EQU H'0002'
TMR2IE EQU H'0001'
TMR1IE EQU H'0000'
;----- PCON Bits ----------------------------------------------------------
OSCF EQU H'0003'
NOT_POR EQU H'0001'
NOT_BO EQU H'0000'
NOT_BOR EQU H'0000'
NOT_BOD EQU H'0000'
;----- TXSTA Bits ----------------------------------------------------------
CSRC EQU H'0007'
TX9 EQU H'0006'
TXEN EQU H'0005'
SYNC EQU H'0004'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
;----- EECON1 Bits ---------------------------------------------------------
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'
;----- VRCON Bits ---------------------------------------------------------
VREN EQU H'0007'
VROE EQU H'0006'
VRR EQU H'0005'
VR3 EQU H'0003'
VR2 EQU H'0002'
VR1 EQU H'0001'
VR0 EQU H'0000'
;==========================================================================
;
; RAM Definition
;
;==========================================================================
__MAXRAM H'01FF'
__BADRAM H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E'
__BADRAM H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E'
__BADRAM H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F'
__BADRAM H'185', H'187'-H'189', H'18C'-H'1EF'
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_CP_ALL EQU H'03FF'
_CP_75 EQU H'17FF'
_CP_50 EQU H'2BFF'
_CP_OFF EQU H'3FFF'
_DATA_CP_ON EQU H'3EFF'
_DATA_CP_OFF EQU H'3FFF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_MCLRE_ON EQU H'3FFF'
_MCLRE_OFF EQU H'3FDF'
_ER_OSC_CLKOUT EQU H'3FFF'
_ER_OSC_NOCLKOUT EQU H'3FFE'
_INTRC_OSC_CLKOUT EQU H'3FFD'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
_EXTCLK_OSC EQU H'3FEF'
_LP_OSC EQU H'3FEC'
_XT_OSC EQU H'3FED'
_HS_OSC EQU H'3FEE'
__CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_ON & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC
;==========================================================================
; Variable Definition
;==========================================================================
;INPUTS
SW1 EQU H'00' ;SW1 is triggering RA0
SW2 EQU H'01' ;SW2 is triggering RA1
SW3 EQU H'02' ;SW3 is triggering RA2
SW4 EQU H'03' ;SW4 is triggering RA3
TIMER1 EQU H'26' ;Used in delay routine
TIMER2 EQU H'25' ; " " "
PATERN EQU H'22' ;Pattern data for effect's
ORG 0 ;Reset vector address
GOTO RESET ;goto RESET routine when boot.
; *********************************************
; * Example of a delay routine *
; *********************************************
DELAY_ROUTINE MOVLW D'254' ;54 Generate approx 10mS delay at 4Mhz CLK
MOVWF TIMER2
DEL_LOOP1 MOVLW D'254' ;60
MOVWF TIMER1
DEL_LOOP2 DECFSZ TIMER1,F
GOTO DEL_LOOP2
DECFSZ TIMER2,F
GOTO DEL_LOOP1
RETLW 0
; **********************************
; ** RESET : main boot routine **
; **********************************
RESET MOVLW B'00000000' ;Disable Comparator module's
MOVWF CMCON
;
BSF STATUS,RP0 ;Switch to register bank 1
;Disable pull-ups
;INT on rising edge
;TMR0 to CLKOUT
;TMR0 Incr low2high trans.
;Prescaler assign to Timer0
;Prescaler rate is 1:256
MOVLW B'11010111' ;Set PIC options (See datasheet).
MOVWF OPTION_REG ;Write the OPTION register.
;
CLRF INTCON ;Disable interrupts
MOVLW B'11000000'
MOVWF TRISB ;RB7 & RB6 are inputs.
;RB5...RB0 are outputs.
MOVLW B'11111111' ;all RA ports are inputs
MOVWF TRISA
BCF STATUS,RP0 ;Switch Back to reg. Bank 0
CLRF PORTB
MOVLW B'00000000'
MOVWF DEEL1
GOTO START
START
CALL MENU
START1 MOVLW B'00100000'
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
GOTO START
MENU
BTFSC PORTA,SW1
CALL UITLEZEN ; ALS JE DIT INDRUKT START DE UITLEES ROUTINE
RETLW 0
UITLEZEN
CLRF H'0C' ; WISSEN VAN EERDERE KNOPJES IN HET GEHEUGEN
BTFSC PORTA,SW2 ; LEES INGANG 2 UIT, IS DEZE HOOG GA DAN NAAR GEHEUGENSW2 ROUTINE
CALL GEHEUGENSW2
BTFSC PORTA,SW3 ; LEES INGANG 3 UIT, IS DEZE HOOG GA DAN NAAR GEHEUGENSW2 ROUTINE
CALL GEHEUGENSW3
BTFSC PORTA,SW4 ; LEES INGANG 4 UIT, IS DEZE HOOG GA DAN NAAR GEHEUGENSW3 ROUTINE
CALL GEHEUGENSW4
CLRW ; MAAK HET W REGISTER LEEG
MOVF H'0C',W ; GOOI ALLES WAT IN HET GEKOZEN GEHEUGEN ZIT IN HET W REGISTER
SUBLW B'00000001' ; TREK DEZE WAARDE AF VAN DE WAARDE DIE IN HET W REGISTER ZIT
BTFSC STATUS,Z ; IS HET W REGISTER NU 0? VOER DAN VOLGENDE BEWERKING UIT, ANDERS SKIP 1 INSTRUCTIE
GOTO GELIJK ; GA NAAR ROUTINE GELIJK
CLRW ; WIS HET W REGISTER
MOVF H'0C',W ; GOOI ALLES WAT IN HET GEKOZEN GEHEUGEN ZIT IN HET W REGISTER
SUBLW B'00000011' ; TREK DEZE WAARDE AF VAN DE WAARDE DIE IN HET W REGISTER ZIT
BTFSC STATUS,Z ; IS HET W REGISTER NU 0 GEWORDEN? VOER DAN VOLGENDE BEWERKING UIT, ANDERS SKIP 1 INSTRUKTIE
GOTO GELIJK1 ; GA NAAR ROUTINE GELIJK1
CLRW ; WIS HET W REGISTER
MOVF H'0C',W ; GOOI ALLES WAT IN HET GEKOZEN GEHEUGEN ZIT IN HET W REGISTER
SUBLW B'00000010' ; TREK DEZE WAARDE AF VAN HET W REGISTER
BTFSC STATUS,Z ; IS HET W REGISTER NU 0 GEWORDEN? VOER DAN DE VOLGENDE INSTRUKTIE UIT, ANDERS SKIP 1 INSTRUCTIE
GOTO GELIJK2 ; GA NAAR ROUTINE GELIJK2
GOTO START1 ; GA TERUG NAAR HET START MENU
GELIJK
BTFSS DEEL1,NUMMER4
GOTO SETBITDEEL1NUMMER1 ;MAAK BIT 1 HOOG VOOR BETREFENDE LERAAR OP HET GEHEUGENREEKS
BCF DEEL1,NUMMER4
NOP
CALL SCHUIFREGISTER
GOTO START1 ; GA TERUG NAAR DE STANDAARD ROUTINE
SETBITDEEL1NUMMER1 ; ROUTINE OM HET GESELECTEERDE BIT HOOG TE MAKEN
BSF DEEL1,NUMMER4
NOP
CALL SCHUIFREGISTER
GOTO START1 ; GA TERUG NAAR DE STANDAARD ROUTINE
GELIJK1
MOVLW B'00110000'
MOVWF PORTB
MOVLW B'00000000'
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
GOTO START
GELIJK2
MOVLW B'00001010'
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
GOTO START
GEHEUGENSW2 CLRW
MOVF H'0C',W
ADDLW B'00000001'
MOVWF H'0C'
RETLW 0
GEHEUGENSW3
CLRW
MOVF H'0C',W
ADDLW B'00000010'
MOVWF H'0C'
RETLW 0
GEHEUGENSW4
CLRW
MOVF H'0C',W
ADDLW B'00000100'
MOVWF H'0C'
RETLW 0
LERARENBESTAND ; HIER KRIJGT ELKE GROEP LERAAR EEN BITREEKS AANGEWEZEN
DEEL1 EQU H'3F' ;LERAAR 1 T/M 8
DEEL2 EQU H'4E' ;LERAAR 9 T/M 17
DEEL3 EQU H'4D' ;LERAAR 18 T/M 26
DEEL4 EQU H'4C' ;LERAAR 27 T/M 35
DEEL5 EQU H'3B' ;LERAAR 36 T/M 44
DEEL6 EQU H'4A' ;LERAAR 45 T/M 53
LERAARSELECTIE ;HIER WORDT 1 LERAAR UIT DE GESELECTEERDE BITREEKS GENOMEN
NUMMER1 EQU H'00000001'
NUMMER2 EQU B'00000010'
NUMMER3 EQU B'00000100'
NUMMER4 EQU H'00001000'
NUMMER5 EQU B'00010000'
NUMMER6 EQU B'00100000'
NUMMER7 EQU B'01000000'
NUMMER8 EQU B'10000000'
SCHUIFREGISTER BTFSC DEEL1,NUMMER1 ; LEES LERAAR 1 UIT
CALL HOOGMAKENDEEL1NUMMER1
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER2 ; LEES LERAAR 2 UIT
CALL HOOGMAKENDEEL1NUMMER2 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER3 ; LEES LERAAR 1 UIT
CALL HOOGMAKENDEEL1NUMMER3 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER4 ; LEES LERAAR 2 UIT
CALL HOOGMAKENDEEL1NUMMER4 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER BTFSC DEEL1,NUMMER1 ; LEES LERAAR 1 UIT
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER5 ; LEES LERAAR 2 UIT
CALL HOOGMAKENDEEL1NUMMER5 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER BTFSC DEEL1,NUMMER1 ; LEES LERAAR 1 UIT
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER6 ; LEES LERAAR 2 UIT
CALL HOOGMAKENDEEL1NUMMER6 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER7 ; LEES LERAAR 1 UIT
CALL HOOGMAKENDEEL1NUMMER7 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
MOVLW B'00000000'
MOVWF PORTB
BTFSC DEEL1,NUMMER8 ; LEES LERAAR 2 UIT
CALL HOOGMAKENDEEL1NUMMER8 ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
NOP
CALL CLOCKSIGNAALVOORSCHUIFREGISTER ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
CLRF PORTB
CALL CLOCKSIGNAALVOORSCHUIFREGISTER
GOTO START1
HOOGMAKENDEEL1NUMMER1
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER2
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER3
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER4
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER5
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER6
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
CALL DELAY_ROUTINE
CALL DELAY_ROUTINE
RETLW 0
HOOGMAKENDEEL1NUMMER7
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
RETLW 0
HOOGMAKENDEEL1NUMMER8
MOVLW B'00000001' ; IS HET BIT VAN DE LERAAR HOOG? MAAK DAN OOK UITGANG 2 (LD2) HOOG
MOVWF PORTB
RETLW 0
CLOCKSIGNAALVOORSCHUIFREGISTER
CALL DELAY_ROUTINE
MOVLW B'00000100'
MOVWF PORTB ; CLOCKSIGNAAL VOOR HET SCHUIFREGISTER
RETLW 0
END