Ситуация такая: Решил поиграться с яркостью на матрице светодиодов 8х8.
В плане организации ШИМ это выглядит так - 256 тактов таймера делим на 8 столбцов.
32 такта на столбец. Первые 32 такта - 1 столбец. Подаём минус на столбец (катод), на строки
- плюс (аноды). Держим плюс на каждой из строк пропорционально яркости. На последнем такте
подаём на столбец (катод) плюс, т.е. отключаем его. В следующие 32 такта обрабатываем 2 столбец.
затем по очереди остальные. 32 такта разбиваем на 16 неравномерных (логарифмических) участков
для равномерного свечения светодиодов. В итоге гарантированно получил 16 градаций яркости.
Но так как прерывания по таймеру написано не на ассемблере, кроме вывода градаций яркости
больше ничего нельзя сделать. Тормоза ужасные. С ассемблером незнаком вообще.
Ну и вот собственно вопрос - просьба: кто поможет перевести код прерывания по таймеру на
ассемблер и объяснить в комментариях что к чему.

Код:
$regfile = "m8def.dat"                                      'определяем контроллер
$crystal = 8000000                                          'внутренний генератор

Config Pind.2 = Output                                      'настройка порта на выход (4 столбец)
Config Pind.3 = Output                                      'настройка порта на выход (2 столбец)
Config Pind.6 = Output                                      'настройка порта на выход (1 столбец)
Config Pind.7 = Output                                      'настройка порта на выход (3 столбец)
Config Pinb.0 = Output                                      'настройка порта на выход (6 столбец)
Config Pinb.2 = Output                                      'настройка порта на выход (8 столбец)
Config Pinb.5 = Output                                      'настройка порта на выход (5 столбец)
Config Pinc.1 = Output                                      'настройка порта на выход (7 столбец)

Config Pind.4 = Output                                      'настройка порта на выход (2 колонка)
Config Pind.5 = Output                                      'настройка порта на выход (3 колонка)
Config Pinb.1 = Output                                      'настройка порта на выход (5 колонка)
Config Pinb.3 = Output                                      'настройка порта на выход (4 колонка)
Config Pinb.4 = Output                                      'настройка порта на выход (6 колонка)
Config Pinc.0 = Output                                      'настройка порта на выход (1 колонка)
Config Pinc.2 = Output                                      'настройка порта на выход (7 колонка)
Config Pinc.3 = Output                                      'настройка порта на выход (8 колонка)
' Колонки +
' Столбцы -

Enable Interrupts                                           'Разрешаем прерывания


Dim Tik As Byte                                             'счётчик тиков таймера
Dim Y(64) As Byte                                           'яркость пикселей матрицы
Dim Temp As Byte
Dim Index As Byte
Dim Stolb As Byte                                            'номер столбца

Config Timer0 = Timer , Prescale = 1                        'настраиваем таймер
Enable Timer0                                               'разрешаем работу таймера 0
On Timer0 Pwms                                              'работа по таймеру 0
Start Timer0                                                'старт таймера 0

'диагональная растяжка при старте
Y(1) = 31
Y(2) = 30
Y(3) = 29
Y(4) = 28
Y(5) = 27
Y(6) = 26
Y(7) = 25
Y(8) = 24

Y(9) = 30
Y(10) = 29
Y(11) = 28
Y(12) = 27
Y(13) = 26
Y(14) = 25
Y(15) = 24
Y(16) = 23

Y(17) = 29
Y(18) = 28
Y(19) = 27
Y(20) = 26
Y(21) = 25
Y(22) = 24
Y(23) = 23
Y(24) = 22

Y(25) = 28
Y(26) = 27
Y(27) = 26
Y(28) = 25
Y(29) = 24
Y(30) = 23
Y(31) = 22
Y(32) = 21

Y(33) = 27
Y(34) = 26
Y(35) = 25
Y(36) = 24
Y(37) = 23
Y(38) = 22
Y(39) = 21
Y(40) = 19

Y(41) = 26
Y(42) = 25
Y(43) = 24
Y(44) = 23
Y(45) = 22
Y(46) = 21
Y(47) = 19
Y(48) = 16

Y(49) = 25
Y(50) = 24
Y(51) = 23
Y(52) = 22
Y(53) = 21
Y(54) = 19
Y(55) = 16
Y(56) = 12

Y(57) = 24
Y(58) = 23
Y(59) = 22
Y(60) = 21
Y(61) = 19
Y(62) = 16
Y(63) = 12
Y(64) = 7

Temp = 31
Stolb = 1
'###############################################################################
Do                                                          'основной цикл
For Index = 1 To 64                                         'смена яркости матрицы
  Y(index) = Temp
  Next
 Temp = Temp - 1
 If Temp = 1 Then Temp = 31
 Waitms 1

Loop                                                        'конец основного цикла
'###############################################################################
'работа по таймеру - Организация ШИМ матрицы
Pwms:
Incr Tik

If Stolb = 1 Then
   Reset Portd.6                                            '1 столбец
   If Tik > Y(1) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(2) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(3) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(4) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(5) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(6) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(7) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(8) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portd.6
    Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 2 Then
   Reset Portd.3                                            '2 столбец
   If Tik > Y(9) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(10) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(11) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(12) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(13) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(14) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(15) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(16) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portd.3
    Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 3 Then
Reset Portd.7                                               '3 столбец
   If Tik > Y(17) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(18) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(19) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(20) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(21) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(22) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(23) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(24) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portd.7
    Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 4 Then
Reset Portd.2                                               '4 столбец
   If Tik > Y(25) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(26) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(27) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(28) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(29) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(30) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(31) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(32) Then Set Portc.3 Else Reset Portc.3
    If Tik = 31 Then
     Set Portd.2
     Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 5 Then
Reset Portb.5                                               '5 столбец
   If Tik > Y(33) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(34) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(35) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(36) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(37) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(38) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(39) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(40) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portb.5
    Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 6 Then
Reset Portb.0                                               '6 столбец
   If Tik > Y(41) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(42) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(43) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(44) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(45) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(46) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(47) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(48) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portb.0
    Tik = 0
    Incr Stolb
    End If
 End If

If Stolb = 7 Then
Reset Portc.1                                               '7 столбец
   If Tik > Y(49) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(50) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(51) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(52) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(53) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(54) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(55) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(56) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portc.1
    Tik = 0
    Incr Stolb
    End If
End If

If Stolb = 8 Then
Reset Portb.2                                               '8 столбец
   If Tik > Y(57) Then Set Portc.0 Else Reset Portc.0
   If Tik > Y(58) Then Set Portd.4 Else Reset Portd.4
   If Tik > Y(59) Then Set Portd.5 Else Reset Portd.5
   If Tik > Y(60) Then Set Portb.3 Else Reset Portb.3
   If Tik > Y(61) Then Set Portb.1 Else Reset Portb.1
   If Tik > Y(62) Then Set Portb.4 Else Reset Portb.4
   If Tik > Y(63) Then Set Portc.2 Else Reset Portc.2
   If Tik > Y(64) Then Set Portc.3 Else Reset Portc.3
   If Tik = 31 Then
    Set Portb.2
    Tik = 0
    Stolb = 1
    End If
End If
Return
'*******************************************************************************