You have two choices here - get the multiplexer corrected or change the code.

You may have found the part of the code that does the scrolling. If you have identified it to that extent, why not do a bit of analysis and modify it to scroll in the other direction? Instead of INCrementing the address, DECrement it. Just change the start and finish values.

i tried just changing the commands to dec but the display jumps once and stops that was the first thing i tried b4 i noticed that the chip was wrong i cannot change the chip as it gp in a printed board without cutting the tracks

as i said i am new to this i know how to change the message and speed i can guess a few things from the comments but that is it! Basicaly i am a newbie at programming i am good at electronics but that wont help much with the computer parts

The code insert contains the added line highlighted in RED. This line does nothing more than invert the 4-bit value right before it is written to PORTA. The only other change that is likely to be needed is the pattern table for the message will need to be mirrored.

As far as I can tell, all of the heavy lifting is being performed by the Timer 0 Interrupt Service Routine. There is only one place where PORTA is being updated. By inverting the value written to PORTA, the net effect should be a change in the direction that the display is scrolling. If this works as I expect then you may want to add a bit more code so that you can change the direction of scrolling at will by assigning an unused pin to select the scroll direction.

hgmjr

Code ( (Unknown Language)):

[INDENT];**********************************************

;

; The signboard control processing

;

; Author : Seiichi Inoue

;**********************************************

list p=pic16f84a

include p16f84a.inc

__config h'3ff2'

;************* Label Definition ********************

lpcnt equ 0c ;Screen loop counter adr

scrnidx equ 0d ;Screen data index adr

w_save equ 0e ;W register save adr

s_save equ 0f ;STATUS reg save adr

scrnhd equ 10 ;Screen table head adr

tm_cnt equ 20 ;Time adjust counter adr

e_adr equ 21 ;EEPROM data adr

e_check equ 22 ;EEPROM end check cnt adr

s_loop equ 23 ;Screen data loop cnt adr

s_index equ 24 ;Screen table index adr

s_work equ 25 ;Screen data work area

;************************

;* Time adjust *

;************************

;This data decides a scroll speed. Basic rate is 26msec.

tm_adj equ 0c ;Time adjust(26msec x 12)

;************************

;* EEPROM data size *

;************************

;If the data size is 30 bytes, then simply set d'30'.

e_size equ d'32' ;EEPROM data size

;*************** EEPROM Data Definition ***************

org h'2100'

de b'11111111'

de b'01111000'

de b'10111111'

de b'11011111'

de b'10111111'

de b'01111000'

de b'11111111'

de b'11111111'

de b'11000011'

de b'10111101'

de b'01111110'

de b'00000000'

de b'11111111'

de b'01110110'

de b'01110110'

de b'00000000'

de b'11111111'

de b'00000110'

de b'01110110'

de b'01110000'

de b'11111111'

de b'10000001'

de b'01111110'

de b'10000001'

de b'11111111'

de b'01111111'

de b'01111111'

de b'00000000'

de b'11111111'

de b'10011001'

de b'01111110'

de b'10000001'

;**************** Program Start ***********************

org 0 ;Reset Vector

goto init

org 4 ;Interrupt Vector

goto int

;**************** Initial Process *****************

org 5

init bsf STATUS,RP0 ;Change to Bank1

clrf TRISA ;Set PORTA to Output mode

clrf TRISB ;Set PORTB to Output mode

movlw h'07' ;TOCS=0,PSA=0,PS2/1/0=111

movwf OPTION_REG ;Set timer condition

bcf STATUS,RP0 ;Change to Bank0

movlw h'00' ;Set timer value

movwf TMR0 ;TMR0 = 0 (255 counts)

movlw tm_adj ;Set time adjust value

movwf tm_cnt ;Save time adjust

clrf e_adr ;Clear EEPROM data adr

movlw e_size ;Set EEPROM data size

movwf e_check ;Save EEPROM end check

movlw h'a0' ;GIE=1,TOIE=1

movwf INTCON ;Interruption enable

;************** Screen Load Process *************

screen bsf INTCON,GIE ;Interrupt enable

movlw d'16' ;Set loop count

movwf lpcnt ;Save loop count

movlw h'0f' ;Set screen index

movwf scrnidx ;Save index

bcf INTCON,GIE ;Interrupt disable

scrnlp movlw h'ff' ;Set LED OFF data

movwf PORTB ;Output Data

movf scrnidx,w ;Set Position

[COLOR=red][B]xorlw[/B][/COLOR] [B][COLOR=red]h'ff'[/COLOR][/B] [COLOR=red][B];Invert all of the bits of column address[/B][/COLOR]

[COLOR=red][B] ; just prior to outputing the value to PORTA????[/B][/COLOR]