'*************************************************************************** '* Name : ws2812.BAS * '* Author : richard * '* Notice : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 19/5/2015 * '* Version : 1.0 * '* Notes : pic18f4550 @48 * '* : '*************************************************************************** #CONFIG CONFIG PLLDIV = 5 CONFIG CPUDIV = OSC1_PLL2 CONFIG USBDIV = 2 CONFIG FOSC = HSPLL_HS CONFIG FCMEN = OFF CONFIG IESO = OFF CONFIG PWRT = OFF CONFIG BOR = ON CONFIG BORV = 3 CONFIG VREGEN = ON CONFIG WDT = OFF CONFIG WDTPS = 512 CONFIG CCP2MX = ON CONFIG PBADEN = OFF CONFIG LPT1OSC = OFF CONFIG MCLRE = ON CONFIG STVREN = ON CONFIG LVP = OFF CONFIG ICPRT = OFF CONFIG XINST = OFF CONFIG DEBUG = OFF CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CP2 = OFF CONFIG CP3 = OFF CONFIG CPB = OFF CONFIG CPD = OFF CONFIG WRT0 = OFF CONFIG WRT1 = OFF CONFIG WRT2 = OFF CONFIG WRT3 = OFF CONFIG WRTC = OFF CONFIG WRTB = OFF CONFIG WRTD = OFF CONFIG EBTR0 = OFF CONFIG EBTR1 = OFF CONFIG EBTR2 = OFF CONFIG EBTR3 = OFF CONFIG EBTRB = OFF #ENDCONFIG nows con 192 ;NUMBER OF WS2812 *3 p_bt VAR byte bank0 ;PIXEL BIT p_px VAR byte bank0 ;PIXEL BYTE p_int var byte bank0 ;INTERRUPT setting STORAGE p_pc var BYTE bank0 ;PIXEL COUNTER p_offset var word bank0 pixels var byte[nows] goto overasm rw1: @ DB 0,0,0 ,50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DB 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DB 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DB 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DB 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DB 0,0,0, 50,50,50, 0,0,0, 0,0,0 , 50,50,50, 0,0,0, 0,0,0 , 0,0,0 @ DB 0,0,0, 50,50,50, 0,0,0, 0,0,0 , 50,50,50, 0,0,0 , 0,0,0 , 0,0,0 @ DB 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 asm _showpix movlw LOW _pixels movwf FSR2L movlw high _pixels movwf FSR2H movff INTCON , _p_int bcf INTCON ,7 nxby MOVLW 8 movwf _p_bt movf POSTINC2 ,W movwf _p_px nxbt BSF LATC,0 ;the data output pin NOP RLCF _p_px BNC notaone NOP NOP NOP NOP NOP NOP notaone BCF LATC ,0 NOP NOP NOP NOP NOP NOP NOP DECF _p_bt BNZ nxbt DECF _p_pc ;dec pixel count pc BNZ nxby movff _p_int , INTCON RETURN bfill Next_Char tblrd *+ movf TABLAT,w movwf POSTINC2 ;fill buffer DECF _p_pc BNZ Next_Char return getaddr macro Text, Addr movlw low Text movwf Addr movlw High Text movwf Addr + 1 endm Flash2Ram macro buffer, msg ; Fills the buffer from flash @(msg+p_offset) for pc bytes movlw UPPER msg movwf TBLPTRU movlw HIGH msg addwf _p_offset+1 ,w ;add offset BTFSC STATUS,C incf TBLPTRU ,1 movwf TBLPTRH movlw LOW msg addwf _p_offset ,w BTFSC STATUS,C incf TBLPTRH ,1 movwf TBLPTRL movlw low buffer movwf FSR2L movlw High buffer movwf FSR2H L?CALL bfill endm ENDASM overasm: clear trisc=%11111110 trisb=%01111111 define OSC 48 adcon1 = 15 ;ALL PINS DIGITAL cmcon = 7 ;ALL PINS DIGITAL p_offset=0 ;pixel rom offset index aloop: p_pc=nows ;set number of leds to load @ Flash2Ram _pixels,_rw1' Get a String from flash memory p_pc=nows ;set number of leds to show call showpix stop end