its worth the effortI should use it as a learning exercise though as I do feel the need to better understand ASM.
this just under 100uS for a iteration
Code:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : richard * '* Notice : Copyright (c) 2022 caveat emptor * '* : All Rights Reserved * '* Date : 11/10/2022 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** #CONFIG CONFIG FOSC = INTIO67 CONFIG PLLCFG = ON CONFIG PRICLKEN = ON CONFIG FCMEN = OFF CONFIG IESO = OFF CONFIG PWRTEN = ON CONFIG BOREN = SBORDIS CONFIG BORV = 190 CONFIG WDTEN = OFF CONFIG WDTPS = 32768 CONFIG CCP2MX = PORTC1 CONFIG PBADEN = OFF CONFIG CCP3MX = PORTB5 CONFIG T3CMX = PORTC0 CONFIG HFOFST = ON CONFIG P2BMX = PORTB5 CONFIG MCLRE = EXTMCLR CONFIG STVREN = ON CONFIG LVP = 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 DEFINE OSC 64 DEFINE DEBUG_REG PORTB DEFINE DEBUG_BIT 7 DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 LATB.7=1 bcnt VAR BYTE bank0 dcnt VAR BYTE bank0 BUFF VAR BYTE[32] iteration VAR word OSCCON=$70 OSCTUNE.6=1 while ! osccon2.7 :WEND ;wait for pll ANSELB=0 ANSELC=0 ANSELA=0 dspbuff var byte[380] clear trisc = %01111111 TRISB = %01111111 TRISA = %11111111 pause 1000 debug 13,10,"ready",13,10 LATc.7=0 ;38x8 bits wide 10 bits high dspbuff[379]=$c0 dspbuff[37]=$c0 main: LATc.7=1; trigger oscilloscope gosub rotate_r LATc.7=0 debug 13,10,dec iteration debug 13,10,bin8 dspbuff[379]," " ,bin8 dspbuff[378]," " ,bin8 dspbuff[343] ," ",bin8 dspbuff[342] debug 13,10,bin8 dspbuff[37] ," " ,bin8 dspbuff[36] ," " ,bin8 dspbuff[1] ," ",bin8 dspbuff[0] pause 200 iteration=iteration+1 goto main rotate_r: ' pic18 100uS asm banksel _bcnt ;ROW movlw 10 ;10 rows movwf _bcnt movlw high (_dspbuff) movwf FSR0H movlw low (_dspbuff) movwf FSR0L movlw 123 ;BUFFER SIZE low byte (380-1) 36 displays + 2 outside of display * 10-1 ADDWF FSR0L movlw 1 ;BUFFER SIZE high byte (380) ADDWFC FSR0H MOVLW 38 ;36 displays + 2 outside of display NROW movwf _dcnt bcf STATUS, C Ncol rrcf POSTDEC0 ,f ;PER COLUMN DECFSZ _dcnt ,F BRA Ncol BNC NBNC bsf PLUSW0,7 ;max displays would be 127 to use plusw NBNC DECFSZ _bcnt ,F BRA NROW banksel 0 return endasm




Bookmarks