решил попробовать переписать, не могу разобраться с динамической индикацией , может подскажет кто,тест делаю в протеусе, символы как то смешивает непонятно и выводит черти что....
Код:
#define _pic16f877      // зададим тип процессора
#include <pic.h>   


__CONFIG(LVPDIS & UNPROTECT & PWRTDIS & WDTDIS & XT);

// таблица знакогенератора
const unsigned char CODE_TABLE[10] = {0b1000000,0b1111001,0b0100100,0b0110000,0b0011001,0b0010010,0b0000010,0b1111000,0b0000000,0b0010000};   
const unsigned char a[3] = {0b00000001,0b00000010,0b00000100};    
unsigned char in1;  //индикатор 1
unsigned char in2;	//индикатор 2
unsigned char in3;  //индикатор 3

void    main(void)
{

        // настроим порты на выход
        TRISB = 0b11111000;    // 1.2.3 на выход, общий анод
        TRISD = 0b00000000;     // abcdefg..

        PORTD = 1;              // очистим индикатор
        PORTB = 0b00000000;    

        OPTION = 0b10000010;    // запишем байт настройки в регистр OPTION
        INTCON = 0;             // Выключить все прерывания и сбросить T0IF
        TMR0 = 0;               // Сброс TMR0

        T0IE =1;               // Разрешить прерывания от TMR0
        GIE = 1;                // Разрешить все прерывания
	in1 = 1;
	in2 =2;
	in3 =3;

       
        // зациклим программу
while(1)
  {
     }

}

// обработка прерываний
void interrupt all(void)
{

                // установим следующее знакоместо для отображения
        PORTD = CODE_TABLE[in1];
		PORTB = a[0];        // выведем на индикатор

		PORTD = CODE_TABLE[in2];   
		PORTB = a[1];        // выведем на индикатор
		
	       
        PORTD = CODE_TABLE[in3];  
		PORTB = a[2];       // выведем на индикатор
       

                 
   
}