I am still struggling with this, however I am a few steps further (I hope)

First off I played with Darrel's Cylon/Kitt code
and slightly modified it to scan one way but I have 2 issues;
  • Since I have 64 LEDs connected like Sayzer indicated I get 8 LEDs turned on and slowly drained at the same time.
  • After each scan I could not pause until the last LEDs fully extinguish and have an extra 2 seconds before the next scan starts.
This is the modified code:
Code:
CLEAR
;-- 16F887 Internal OSC @ 8Mhz ------
;@  __config _CONFIG1, _INTOSCIO & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
@ __config _CONFIG1,  _INTOSCIO & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _BOREN_OFF
ANSEL = 0
ANSELH = 0
OSCCON = %01110001
DEFINE OSC 8

TRISC = 0       ; I needed to clear PORTC
Y var PORTC
y = 0

;____[ For 12F/16F only - Interrupt Context save locations]_________________
wsave       var byte    $20     SYSTEM  ' location for W if in bank0
;wsave       var byte    $70     SYSTEM  ' Alternate save location for W 
                                        ' if using $70, comment out wsave1-3
' --- IF any of these next three lines cause an error ?? -------------------
'       Comment them out to fix the problem ----
' -- The chip being used determines which variables are needed -------------
wsave1      VAR BYTE    $A0     SYSTEM      ' location for W if in bank1
wsave2      VAR BYTE    $120    SYSTEM      ' location for W if in bank2
wsave3      VAR BYTE    $1A0    SYSTEM      ' location for W if in bank3
'---DO NOT change these-----------------------------------------------------
ssave       VAR BYTE    BANK0   SYSTEM      ' location for STATUS register
psave       VAR BYTE    BANK0   SYSTEM      ' location for PCLATH register


;----[ MIBAM Setup ]--------------------------------------------------------
;BAM_FREQ  CON 100                   ; Desired Refresh rate Limit
;ScopeSync VAR PORTB.0               ; if declared, generates sync for OScope
;DEFINE BAM_INFO 1                   ; use to display MIBAM results

BAM_COUNT CON 8                     ; How many BAM Pins are used?
INCLUDE "MIBAM.pbp"                 ; Bit Angle Modulation module

BAM_DUTY  VAR BYTE[BAM_COUNT]
  LED1    VAR BAM_DUTY[0]           ; group them in an array for easy access
  LED2    VAR BAM_DUTY[1]           ; with FOR loops etc.
  LED3    VAR BAM_DUTY[2] 
  LED4    VAR BAM_DUTY[3] 
  LED5    VAR BAM_DUTY[4] 
  LED6    VAR BAM_DUTY[5] 
  LED7    VAR BAM_DUTY[6] 
  LED8    VAR BAM_DUTY[7] 

ASM
BAM_LIST  macro                     ; Define PIN's to use for BAM
     BAM_PIN (PORTB,0, LED1)        ;   and the associated Duty variables
     BAM_PIN (PORTB,1, LED2)
     BAM_PIN (PORTB,2, LED3)
     BAM_PIN (PORTB,3, LED4)
     BAM_PIN (PORTB,4, LED5)
     BAM_PIN (PORTB,5, LED6)
     BAM_PIN (PORTB,6, LED7)
     BAM_PIN (PORTB,7, LED8)
  endm
  BAM_INIT  BAM_LIST                ; Initialize the Pins
ENDASM

;_________________________________________________
Speed       CON 5         ; Smaller = Faster
TracerSpeed CON 20        ; Smaller = Faster Left/Right
Brightness  CON 200       ; Tracers DutyCycle
DrainSpeed  CON 40        ; Smaller = Shorter Trail

Idx         VAR BYTE
LoopCount   VAR BYTE
NextLED     VAR BYTE
TraceDIR    VAR BIT

  TraceDIR  = 0
  LoopCount = 0
  NextLED   = 0
    
Main:
    if LoopCount = TracerSpeed then             ; __[ Cylon/Kitt Scanner ]__
      LoopCount = 0
      BAM_DUTY(NextLED) = Brightness
  ;    if TraceDIR then                          ; if scanning left
  ;      NextLED = NextLED - 1
  ;      if NextLED = 0 then TraceDIR = 0
  ;    else                                      ; else scanning right
        NextLED = NextLED + 1
  ;      if NextLED = BAM_COUNT-1 then TraceDIR = 1
  ;    endif
    endif
    
    FOR Idx = 0 to BAM_COUNT - 1                ; Drain all dutycycles
       IF BAM_DUTY(Idx) > 0 then
           BAM_DUTY(Idx) = BAM_DUTY(Idx)*DrainSpeed/(DrainSpeed+1)
       ENDIF
    NEXT Idx
    pause Speed
    if NextLED = BAM_COUNT then NextLED = 0     ; Added this line
    LoopCount = LoopCount + 1
GOTO Main
Also looking at Sayzer's code example, I removed the ADC, the LCD and modified based on my understanding and came up with this result which is scanning at the proper rate and the pause between scans.
Code:
CLEAR
@ __config _CONFIG1,  _INTOSCIO & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _BOREN_OFF
ANSEL = 0
ANSELH = 0
OSCCON = %01110001
DEFINE OSC 8

TRISB = 0
TRISC = 0
TRISD = 0
X       var PORTB
Y       var PORTC
xCOL    var byte
yROW    VAR BYTE
Speed   var word

Pause 10

Begin:
    X = 0              
    Y = 255
    speed = 30
Start:
    for xcol = 0 to 7
        x = 0  
        x.0[xcol] = 1
        for yrow =7 to 0 step -1
            y = 255
            y.0[yrow] = 0
            pause speed
        Next yrow
    next xcol
    y = 255         ; turn off (and drain all LEDs)
    PAUSE 2000      ; wait before starting over    
goto start
END
Last but not least I am trying to find a way to add a trail of 20 to 30 LEDs with the same effect as Darrel's code using MIBAM.
I can't figure it out

Mike