исходник

$map

  $regfile = "m328pdef.dat"
  $crystal = 1000000
  $framesize = 250
  $hwstack = 250
  $swstack = 250

  Config Pinc.2 = Input : Reset Portc.2
  Config Pinc.3 = Input : Reset Portc.3
  Config Pinc.4 = Input : Reset Portc.4
  Config Pinc.5 = Input : Reset Portc.5

  Pin_0 Alias Pinc.2
  Pin_1 Alias Pinc.3
  Pin_2 Alias Pinc.4
  Pin_3 Alias Pinc.5

  Config Portd = Output

  Virtual_port_b Alias Pinb
  Virtual_port_c Alias Pinc
  Virtual_port_d Alias Pind

  Virtual_pin_0 Alias 2
  Virtual_pin_1 Alias 3
  Virtual_pin_2 Alias 4
  Virtual_pin_3 Alias 5

  Dim Input_data As Byte
  Dim Adress_label(16) As Word

  Adress_label(1) = Loadlabel(подпрограмма_0) / 2
  Adress_label(2) = Loadlabel(подпрограмма_1) / 2
  Adress_label(3) = Loadlabel(подпрограмма_2) / 2
  Adress_label(4) = Loadlabel(подпрограмма_3) / 2
  Adress_label(5) = Loadlabel(подпрограмма_4) / 2
  Adress_label(6) = Loadlabel(подпрограмма_5) / 2
  Adress_label(7) = Loadlabel(подпрограмма_6) / 2
  Adress_label(8) = Loadlabel(подпрограмма_7) / 2
  Adress_label(9) = Loadlabel(подпрограмма_8) / 2
  Adress_label(10) = Loadlabel(подпрограмма_9) / 2
  Adress_label(11) = Loadlabel(подпрограмма_10) / 2
  Adress_label(12) = Loadlabel(подпрограмма_11) / 2
  Adress_label(13) = Loadlabel(подпрограмма_12) / 2
  Adress_label(14) = Loadlabel(подпрограмма_13) / 2
  Adress_label(15) = Loadlabel(подпрограмма_14) / 2
  Adress_label(16) = Loadlabel(подпрограмма_15) / 2

'===============================================================================

               'Г Л А В Н Ы Й     Ц И К Л
  Главный_цикл:
'===============================================================================

    '===========================================================================

    '    Время выполнения от NOP до NOP, 79...181 такт, в зависимости от значения переменной "input_data"

    '===========================================================================
     nop

     Gosub Первый_вариант

     nop
    '===========================================================================

    '    Время выполнения от NOP до NOP, 79...151 такт, в зависимости от значения переменной "input_data"

    '===========================================================================
     nop

     Gosub Второй_вариант

     nop
    '===========================================================================

    '    Время выполнения от NOP до NOP, 40...70 такт, в зависимости от значения переменной "input_data"

    '===========================================================================
     nop

     Gosub Третий_вариант

     nop
    '===========================================================================

    '    Время выполнения от NOP до NOP, 89 тактов (не изменяется), не зависит от переменной "input_data"

    '===========================================================================
     nop

     Gosub Четвертый_вариант

     nop
    '===========================================================================

    '    Время выполнения от NOP до NOP, 40 тактов (не изменяется), не зависит от переменной "input_data"

    '===========================================================================
     nop

     'Gosub Пятый_вариант

     nop

     Waitms 100

'===============================================================================
  Goto Главный_цикл
End
'===============================================================================

'===============================================================================
  Первый_вариант:
'-------------------------------------------------------------------------------
     Input_data.0 = Pin_0
     Input_data.1 = Pin_1
     Input_data.2 = Pin_2
     Input_data.3 = Pin_3

     If Input_data = 0 Then
         Gosub Подпрограмма_0
     Elseif Input_data = 1 Then
         Gosub Подпрограмма_1
     Elseif Input_data = 2 Then
         Gosub Подпрограмма_2
     Elseif Input_data = 3 Then
         Gosub Подпрограмма_3
     Elseif Input_data = 4 Then
         Gosub Подпрограмма_4
     Elseif Input_data = 5 Then
         Gosub Подпрограмма_5
     Elseif Input_data = 6 Then
         Gosub Подпрограмма_6
     Elseif Input_data = 7 Then
         Gosub Подпрограмма_7
     Elseif Input_data = 8 Then
         Gosub Подпрограмма_8
     Elseif Input_data = 9 Then
         Gosub Подпрограмма_9
     Elseif Input_data = 10 Then
         Gosub Подпрограмма_10
     Elseif Input_data = 11 Then
         Gosub Подпрограмма_11
     Elseif Input_data = 12 Then
         Gosub Подпрограмма_12
     Elseif Input_data = 13 Then
         Gosub Подпрограмма_13
     Elseif Input_data = 14 Then
         Gosub Подпрограмма_14
     Elseif Input_data = 15 Then
         Gosub Подпрограмма_15
     End If
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Второй_вариант:
'-------------------------------------------------------------------------------
     Input_data.0 = Pin_0
     Input_data.1 = Pin_1
     Input_data.2 = Pin_2
     Input_data.3 = Pin_3

     Select Case Input_data
         Case 0 :
                  Gosub Подпрограмма_0
         Case 1 :
                  Gosub Подпрограмма_1
         Case 2 :
                  Gosub Подпрограмма_2
         Case 3 :
                  Gosub Подпрограмма_3
         Case 4 :
                  Gosub Подпрограмма_4
         Case 5 :
                  Gosub Подпрограмма_5
         Case 6 :
                  Gosub Подпрограмма_6
         Case 7 :
                  Gosub Подпрограмма_7
         Case 8 :
                  Gosub Подпрограмма_8
         Case 9 :
                   Gosub Подпрограмма_9
         Case 10 :
                   Gosub Подпрограмма_10
         Case 11 :
                   Gosub Подпрограмма_11
         Case 12 :
                   Gosub Подпрограмма_12
         Case 13 :
                   Gosub Подпрограмма_13
         Case 14 :
                   Gosub Подпрограмма_14
         Case 15 :
                   Gosub Подпрограмма_15
     End Select
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Третий_вариант:
'-------------------------------------------------------------------------------
    !in R16 , Virtual_port_c
    !clr R17

    !BST R16 , Virtual_pin_0
    !BLD R17 , 0

    !BST R16 , Virtual_pin_1
    !BLD R17 , 1

    !BST R16 , Virtual_pin_2
    !BLD R17 , 2

    !BST R16 , Virtual_pin_3
    !BLD R17 , 3

    !sts {input_data} , R17

   Data_decoder_1:
    !cpi R17 , 0
    !BReq Decoder_0       'Перейти если равно

    !cpi R17 , 1
    !BReq Decoder_1       'Перейти если равно

    !cpi R17 , 2
    !BReq Decoder_2       'Перейти если равно

    !cpi R17 , 3
    !BReq Decoder_3       'Перейти если равно

    !cpi R17 , 4
    !BReq Decoder_4       'Перейти если равно

    !cpi R17 , 5
    !BReq Decoder_5       'Перейти если равно

    !cpi R17 , 6
    !BReq Decoder_6       'Перейти если равно

    !cpi R17 , 7
    !BReq Decoder_7       'Перейти если равно

    !cpi R17 , 8
    !BReq Decoder_8       'Перейти если равно

    !cpi R17 , 9
    !BReq Decoder_9       'Перейти если равно

    !cpi R17 , 10
    !BReq Decoder_10       'Перейти если равно

    !cpi R17 , 11
    !BReq Decoder_11       'Перейти если равно

    !cpi R17 , 12
    !BReq Decoder_12       'Перейти если равно

    !cpi R17 , 13
    !BReq Decoder_13       'Перейти если равно

    !cpi R17 , 14
    !BReq Decoder_14       'Перейти если равно

    !cpi R17 , 15
    !BReq Decoder_15       'Перейти если равно

   !rjmp Exit_data_decoder

   Decoder_0:
    !rcall Подпрограмма_0
    !rjmp Exit_data_decoder

   Decoder_1:
    !rcall Подпрограмма_1
    !rjmp Exit_data_decoder

   Decoder_2:
    !rcall Подпрограмма_2
    !rjmp Exit_data_decoder

   Decoder_3:
    !rcall Подпрограмма_3
    !rjmp Exit_data_decoder

   Decoder_4:
    !rcall Подпрограмма_4
    !rjmp Exit_data_decoder

   Decoder_5:
    !rcall Подпрограмма_5
    !rjmp Exit_data_decoder

   Decoder_6:
    !rcall Подпрограмма_6
    !rjmp Exit_data_decoder

   Decoder_7:
    !rcall Подпрограмма_7
    !rjmp Exit_data_decoder

   Decoder_8:
    !rcall Подпрограмма_8
    !rjmp Exit_data_decoder

   Decoder_9:
    !rcall Подпрограмма_9
    !rjmp Exit_data_decoder

   Decoder_10:
    !rcall Подпрограмма_10
    !rjmp Exit_data_decoder

   Decoder_11:
    !rcall Подпрограмма_11
    !rjmp Exit_data_decoder

   Decoder_12:
    !rcall Подпрограмма_12
    !rjmp Exit_data_decoder

   Decoder_13:
    !rcall Подпрограмма_13
    !rjmp Exit_data_decoder

   Decoder_14:
    !rcall Подпрограмма_14
    !rjmp Exit_data_decoder

   Decoder_15:
    !rcall Подпрограмма_15
    !rjmp Exit_data_decoder

    !nop

   Exit_data_decoder:
    !nop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Четвертый_вариант:
'-------------------------------------------------------------------------------
    Input_data.0 = Pin_0
    Input_data.1 = Pin_1
    Input_data.2 = Pin_2
    Input_data.3 = Pin_3

    On Input_data Gosub Подпрограмма_0 , _
                        Подпрограмма_1 , _
                        Подпрограмма_2 , _
                        Подпрограмма_3 , _
                        Подпрограмма_4 , _
                        Подпрограмма_5 , _
                        Подпрограмма_6 , _
                        Подпрограмма_7 , _
                        Подпрограмма_8 , _
                        Подпрограмма_9 , _
                        Подпрограмма_10 , _
                        Подпрограмма_11 , _
                        Подпрограмма_12 , _
                        Подпрограмма_13 , _
                        Подпрограмма_14 , _
                        Подпрограмма_15 , _
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Пятый_вариант:
'-------------------------------------------------------------------------------
    nop
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_0:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_1:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_2:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_3:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_4:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_5:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_6:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_7:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_8:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_9:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_10:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_11:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_12:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_13:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_14:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Подпрограмма_15:
'-------------------------------------------------------------------------------
    nop
    Portd = Input_data
'-------------------------------------------------------------------------------
  Return
'===============================================================================