Bascom- dlaczego program nie działa tak jak ma??

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
GruX
-
Posty: 2
Rejestracja: 26 paź 2006, 16:46

Bascom- dlaczego program nie działa tak jak ma??

Post autor: GruX » 26 paź 2006, 16:49

Napisalem taki program:

Kod: Zaznacz cały

$regfile = "89c4051.dat"
$baud = 9600
$crystal = 11059200


Dim Kod As Bit
Dim Com As Byte , Suba As Byte
Dim Kat As Bit
Dim Lc As Bit

Kat = 1
Lc = 1
Reset P1.6
Reset P1.7
Set P1.2
Set P1.3
Set P1.4
Set P1.5

Set Tcon.0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
Do
If Kod = 1 Then
Disable Int0

   If Suba = 40 Then
      If Com = 12 Then
      Reset P1.2
      Wait 2
      Set P1.2
      End If

      If Com = 1 Then
      Reset P1.3
      Set P1.3
      End If
   End If

   If Suba = 32 Then
      If Com = 42 Then
      Reset P1.4
      Wait 2
      Set P1.4
      End If

      If Com = 46 Then
      Reset P1.5
      Wait 2
      Set P1.5
      End If

      If Com = 11 Then
      If Kat = 0 Then
       Reset P1.6
       Kat = 1
      Else
       Set P1.6
       Kat = 0
      End If
      End If

      If Com = 62 Then
      If Lc = 0 Then
       Reset P1.7
       Lc = 1
      Else
       Set P1.7
       Lc = 0
      End If
      End If
   End If
Kod = 0
Enable Int0
End If
Loop

Receiverc5:
Getrc5(suba , Com)
Kod = 1
Return
Ma on zczytac kod z piota i w przypadku czterech pierwszych mozliwosi robi on stan niski czeka 2s i robi stan wysoki, w nastepnym natomiast ustawia stan wysoki, lub niski w zależności od tego, jaki jest teraz. Na poczatku 4 pierwsze wyjscia ustawia na wysoki, dwa na niski. Teraz pytanie dlaczego, jak wcisne przycisk na pilocie, ktory ma zrobic wlasnie stan I albo O w zaleznosci co jest teraz, nie wykonuje tego zadania, tylko cały czas na 1.6 i 1.7 jest niski, a na 1.2 , 1.3 , 1.4, 1.5 wysoki??

ZbeeGin

Post autor: ZbeeGin » 26 paź 2006, 17:38

Dlaczego tak:

Kod: Zaznacz cały

Set Tcon.0 
On Int0 Receiverc5
skoro należy tak:

Kod: Zaznacz cały

Reset Tcon.0 
On Int0 Receiverc5


[ Dodano: 2006-10-26, 18:44 ]
A przy okazji, jesteś pewien, że ta konstrukcja jest taka jakiej oczekiwałeś?:

Kod: Zaznacz cały

  If Kod = 1 Then
    Disable Int0

    If Suba = 40 Then
      If Com = 12 Then
        Reset P1.2
        Wait 2
        Set P1.2
      End If
      If Com = 1 Then
        Reset P1.3
        Set P1.3
      End If
    End If

    If Suba = 32 Then
      If Com = 42 Then
        Reset P1.4
        Wait 2
        Set P1.4
      End If
      If Com = 46 Then
        Reset P1.5
        Wait 2
        Set P1.5
      End If
      If Com = 11 Then
        If Kat = 0 Then
          Reset P1.6
          Kat = 1
        Else
          Set P1.6
          Kat = 0
        End If
      End If

      If Com = 62 Then
        If Lc = 0 Then
          Reset P1.7
          Lc = 1
        Else
          Set P1.7
          Lc = 0
        End If
      End If
    End If
    Kod = 0
    Enable Int0
  End If
Loop

GruX
-
Posty: 2
Rejestracja: 26 paź 2006, 16:46

Post autor: GruX » 26 paź 2006, 18:35

Dzieki :D Już dziłą :P
Tam się przez przypadek zrobił Set, bo wszystkie set'y zmienilem na reset'y i na odwrót wiec i ten sie zmeinił, aa ja tego niezauwazyłem :oops: Tamten fragment działa tak jak chciałem. Jeszcze raz wielkie dzieki :d

ODPOWIEDZ