;************************************************************************** ;* VELLEMAN High-Q KIT K8048/VM111 SAMPLE SOFTWARE * ;************************************************************************** ;* Microchip PIC(tm) Programmer & experiment board * ;* DEMO2 program for testing K8048 with PIC16F627(A)! * ;* Generate 4 LED light effects, you can select these with SW1..4 * ;************************************************************************** ;* (C) VELLEMAN Components,2003-2008 All rights reserved * ;************************************************************************** ;* Hardw. Rev: P8048'1 Softw. Rev: 1.22 * ;* OSC.......: XT 4MHz Max. POWER.....: 12V DC * ;************************************************************************** W EQU H'0000' F EQU H'0001' ;----- Register Files------------------------------------------------------ INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' CMCON EQU H'001F' ;----- 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' ;========================================================================== ; ; 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_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC ORG 0 ; Reset vector address GOTO RESET ; goto RESET routine when boot. SPACELENGTH EQU H'20' ; The space time register MARKLENGTH EQU H'21' ; The mark time register SPACETIMER EQU H'22' ; The space loop counter register MARKTIMER EQU H'23' ; The mark loop counter register ; ********************************** ; ** RESET : main boot routine ** ; ********************************** RESET MOVLW B'00000111' ; 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 ; Intialise the mark/space times MOVLW 63 ; 1 <= count <= 63 MOVWF SPACELENGTH ; Set the space time MOVLW 1 ; 1 <= count <= 63 MOVWF MARKLENGTH ; Set the mark time GOTO PCM_LOOP ; ********************************************* ; * PCM Routine * ; ********************************************* PCM_LOOP MOVLW B'00000000' ; Set all LEDS off MOVWF PORTB ; Send to PORT B MOVF SPACELENGTH,W ; Get the space time MOVWF SPACETIMER ; Initialise the timer SPACE_LOOP DECFSZ SPACETIMER,F ; Count down GOTO SPACE_LOOP ; Loop until zero NOP ; Give symmetry NOP ; Give symmetry MOVLW B'00111111' ; Set all LEDS on MOVWF PORTB ; Send to PORT B MOVF MARKLENGTH,W ; Get the mark time MOVWF MARKTIMER ; Initialise the timer MARK_LOOP DECFSZ MARKTIMER,F ; Count down GOTO MARK_LOOP ; Loop until zero GOTO PCM_LOOP ; ********************************************* ; * Example of a delay routine (not used) * ; ********************************************* 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'20' ;Used in delay routine TIMER2 EQU H'21' ; " " " DELAY_ROUTINE MOVLW D'100' ;54 Generate approx 10mS delay at 4Mhz CLK RETLW 0 ; Added immediate return MOVWF TIMER2 DEL_LOOP1 MOVLW D'1' ; This gives a measured 18ms total period (55.6Hz) MOVWF TIMER1 DEL_LOOP2 BTFSC PORTA,SW1 BTFSC PORTA,SW2 BTFSC PORTA,SW3 BTFSC PORTA,SW4 DECFSZ TIMER1,F GOTO DEL_LOOP2 DECFSZ TIMER2,F GOTO DEL_LOOP1 RETLW 0 END