[BASCOM] zmiana kodu źródłowego


Witam.

Mam przeogromną prośbę.
Czy da się zmienić tak kod (poniżej), aby pracował z zewnętrznymi przyciskami/przełącznikami ?

Chciałbym, aby to było tak:
-8 przekaźników sterowanych przez PC,
-4 wejścia wykorzystać do włączania/wyłączania przekaźników 1, 2, 3 i 4

Po prostu wszystkie przekaźniki sterowane z PC + przekaźniki 1-4 dodatkowo sterowane przez zewnętrzne przyciski/przełączniki (wejścia 1-4)-coś jakby przełączniki schodowe/krzyżowe-nie ważne gdzie włączę/wyłączę (PC lub przełącznik)
Włączę przełącznikiem, a mogę wyłączyć przez PC lub przełącznik i tak samo w drugą stronę-włączę przez PC, a mogę wyłączyć przez PC lub przełącznik.

Z góry dziękuję za pomoc. Pimowo.

'******************************************
'******************************************
'**   Karta wyjsc z interfejsem RS-485   **
'**      Firmware v1.2 (06.08.2009)      **
'**      Projekt: Mariusz Ciszewski      **
'**            Publikacja: EP            **
'** mariusz.ciszewski(malpa)elportal.pl  **
'** poprawki Arnoldziq(malpa)eletroda.pl **
'**      Firmware v1.2a (21.09.2012)     **
'******************************************
'******************************************
 
Const Fw = ", FV-1.2a"
 
$regfile = "ATtiny2313.DAT"
$crystal = 8000000
$baud = 4800
 
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Output
Config Pinb.7 = Output
 
 
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.4 = Output
 
Out1 Alias Portb.7
Out2 Alias Portb.6
Out3 Alias Portb.5
Out4 Alias Portb.4
Out5 Alias Portb.3
Out6 Alias Portb.2
Out7 Alias Portb.1
Out8 Alias Portb.0
 
Nadawanie Alias Portd.4
 
Declare Sub Czekaj
 
Echo Off
 
Const Urzadzenie = "Urz: "
 
Dim Rozkaz As String * 4
Dim Opoznienie$ As Byte
Dim Numer_karty$ As Byte
Dim Numer_urzadzenia$ As Byte
Dim Stan$ As Byte
Dim Adres As Byte
Dim Zmienna_adresowa As String * 2
Dim Zmienna_interpretacyjna As String * 1
Dim Dr$ As Byte
Const Ramka = ": OK > [karta][urzadzenie][stan] "
 
'**********************************************************************
'*Tu nalezy ustawic adres karty, dla ktorej program jest przeznaczony 
Adres = 01                                                            
'**********************************************************************
 
 
Call Czekaj
 
  Set Nadawanie
   Print
   Print Urzadzenie ; Adres ; Fw ; Ramka
   Printbin &H13
  Reset Nadawanie
 
Do
   Numer_karty$ = 0
   Input Rozkaz
   Dr$ = Len(rozkaz)
   If Dr$ = 4 Then ' ograniczenie tylko dla ramek 4-bajtowych
    Zmienna_adresowa = Left(rozkaz , 2 )
    Numer_karty$ = Val(zmienna_adresowa)
    Zmienna_interpretacyjna = Mid(rozkaz ,3 , 1)
    Numer_urzadzenia$ = Val(zmienna_interpretacyjna)
    Zmienna_interpretacyjna = Mid(rozkaz , 4 , 1)
    Stan$ = Val(zmienna_interpretacyjna)
 
 
 
  If Numer_karty$ = Adres Or Numer_karty$ = 99 Then
 
     If Stan$ = 0 Then
      Select Case Numer_urzadzenia$
       Case 1 : Reset Out1
       Case 2 : Reset Out2
       Case 3 : Reset Out3
       Case 4 : Reset Out4
       Case 5 : Reset Out5
       Case 6 : Reset Out6
       Case 7 : Reset Out7
       Case 8 : Reset Out8
       Case 9 : Portb = 0
      End Select
     End If
 
     If Stan$ = 1 Then
      Select Case Numer_urzadzenia$
       Case 1 : Set Out1
       Case 2 : Set Out2
       Case 3 : Set Out3
       Case 4 : Set Out4
       Case 5 : Set Out5
       Case 6 : Set Out6
       Case 7 : Set Out7
       Case 8 : Set Out8
       Case 9 : Portb = 255
      End Select
     End If
 
     If Numer_karty$ = 0 Then Call Czekaj
     Set Nadawanie
      Print "Urzadzenie nr " ; Numer_urzadzenia$ ; " na karcie nr " ; Numer_karty$ ; " zostalo " ;
      If Stan$ = 0 Then Print "wylaczone." ;
      If Stan$ = 1 Then Print "wlaczone." ;
      Print
      Print
      Print Urzadzenie ; Adres ; Fw ; Ramka
      Print
      Printbin &H13
     Reset Nadawanie
 
   End If
  End If
 
Loop
 
 
Sub Czekaj
 For Opoznienie$ = 1 To Adres
  Waitms 150
 Next Opoznienie$
End Sub
 
End