'-------------------------------
Dim W As Bit , U As Bit , Li As Byte , S As Byte
'------------------------------
Enable Interrupts
Set Tcon.0
Set Tcon.2
Enable Int0
Disable Int1
Set W
Set U
Li = 50
Reset Sbuf
On Int0 Licznik
On Int1 Transmisja
'---------------------
Do
Loop
'----------------------
Licznik:
If P3.7 = 0 Then
If U = 1 Then
W = 0
Enable Int1
End If
Else
U = 1
End If
Return
'--------------------
Transmisja:
S = Peek(Li)
Printbin S
Incr Li
If Li > 56 then
Disable int1
U = 0
W = 1
Li =50
End If
Return
'---------------------
Witam grupowiczów narzekacie, że nikt si e o nic nie pyta, postanowiłem to
zmienić. Napisałem taki programik jak wyżej. Przerwanie Int0 co 1s, Int1
generuję przyciskiem. Wszystko wykonuje się tak jak należy z małym
wyjątkiem: pierwsze naciśnięcie przycisku P3.7 ok wystąpienie przerwań Int1
powoduje wysłanie 7 bajtów do portu szeregowego. Problem zaczyna się przy
każdym następnym naciśnięciu przycisku, otóż po naciśnięciu przycisku P3.7 w
momencie wystąpienia przerwania Int0 jest wysyłany 1 Bajt, następne są
wysyłane dopiero po wystąpieniu INT1.
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj się89C2051 i przerwania
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
nie zrozumiałem opisu, ale pierwszy błąd to nie wysyłaj przez RS w przerwaniu INT.
o ile pamiętam to RS ma mniejszy priorytet od INT, a więc musi wyjść z przerwania INT żeby wykonać transmisje.
napisz tak:
dim wysylaj as bit
Transmisja:
disable INT1
set wysylaj
Return
a w głównym:
do
if wysylaj=1 then
S = Peek(Li)
Printbin S
Incr Li
If Li > 56 then
clr wysylaj
U = 0
W = 1
Li =50
End If
End If
loop
powinno chodzić
o ile pamiętam to RS ma mniejszy priorytet od INT, a więc musi wyjść z przerwania INT żeby wykonać transmisje.
napisz tak:
dim wysylaj as bit
Transmisja:
disable INT1
set wysylaj
Return
a w głównym:
do
if wysylaj=1 then
S = Peek(Li)
Printbin S
Incr Li
If Li > 56 then
clr wysylaj
U = 0
W = 1
Li =50
End If
End If
loop
powinno chodzić
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 32 gości