Od jakiegoś czasu próbuję wysłać przez UART z jednego procka do drugiego trzy zmienne, poniżej zamieściłem oprogramowanie dwóch procesorów pierwszy nadający i drugi odbiorczy. W efekcie działania pierwszego procesora po realizacji przerwania INT0 zostają wysłane trzy zmienne, terminal obrazuje to w tej postaci:
>221
>222
>21
>
Jednak na wyświetlaczu drugiego układu nie odzwierciedlają się te dane.
Jeżeli zamienię zmienne w procesorze odbierającym transmisję z Integer na String * 5
Otrzymuję taki efekt na lcd:
█221 █222 █21
Dowód na to, że transmisja odbywa się poprawnie, sprawdziłem to także echo na terminalu, drugi układ odbija następujące dane:
>221
>
>222
>
>21
>
Proszę o pomoc, nie wiem jak się za to zabrać, gdzie robię błąd ??
_____________________________
Pierwszy program
_____________________________
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9200
Config Int0 = Low Level
Enable Interrupts
Enable Int0
On Int0 Rs
Dim Dg1 As Integer
Dim Dg2 As Integer
Dim Ntemp As Integer
Dg1 = 221
Dg2 = 222
Ntemp = 21
Do
' program
Loop
Rs:
Disable Interrupts
Print Dg1
Print Dg2
Print Ntemp
Wait 1
Enable Interrupts
Return
_____________________________
Drugi program
_____________________________
$regfile = "8515def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 24 * 2
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Dim Name1 As Integer
Dim Name2 As Integer
Dim Nast As Integer
Cls
Do
Input Name1
Input Name2
Input Nast
Locate 1 , 1
Lcd Name1
Locate 1 , 8
Lcd Name2
Locate 1 , 15
Lcd Nast
Loop
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ęTransmisja UART między dwoma prockami
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:8
- Rejestracja:4 sie 2004, o 22:40
- Lokalizacja:Taarn. Góry
na wstepie nie bedzie polskich liter i moga byc bledy ortograficzne wiec mi ich nie wypominac, jestem we wloszech:)
po pierwsze obsluge przerwania odbioru nie rob w BASCOMie, najlepiej w ASM, ale jak musisz to wywal instrukcje WAIT w przerwaniu!
nie wylaczaj przerwania, ale co najwazniejsze nie wykonuj instrukcji PRINT w przerwaniu.
PRINT dziala poza przerwaniem, a INPUT zrob z czasem.
ja osobiscie odradzam instrukcje PRINT i INPUT, gdyz mialem z nimi problemy.
napisz wlasna procedure i wykozystaj wektory przerwan RS232 w procku, bedziesz mial pewnosc i mozesz to kontrolowac w pelni
po za tym te instrukcje wysylaja dodatkowo znaki 10 i 13, niekoniecznie w tej kolejnosci, na zakonczenie transmisji.
powodzenia
po pierwsze obsluge przerwania odbioru nie rob w BASCOMie, najlepiej w ASM, ale jak musisz to wywal instrukcje WAIT w przerwaniu!
nie wylaczaj przerwania, ale co najwazniejsze nie wykonuj instrukcji PRINT w przerwaniu.
PRINT dziala poza przerwaniem, a INPUT zrob z czasem.
ja osobiscie odradzam instrukcje PRINT i INPUT, gdyz mialem z nimi problemy.
napisz wlasna procedure i wykozystaj wektory przerwan RS232 w procku, bedziesz mial pewnosc i mozesz to kontrolowac w pelni
po za tym te instrukcje wysylaja dodatkowo znaki 10 i 13, niekoniecznie w tej kolejnosci, na zakonczenie transmisji.
powodzenia
GasM chyba troszkę się zagalopował... Wydaje mi się, że ty masz problem z tym, że print nie wysyła zmiennej tylko łańcuch tekstowy. I to jest prawda. Liczba zostaje zamieniona na jej reprezentację dziesiętną i wysłana przez UART. Tak działa print i nie popełniasz nigdzie błędu. Kwadrciki wyświetlane za odebranymi cyframi, to po prostu znak o kodzie 0D szesnastkowo, bo każdy ciąg przesłany przez print kończy co najmniej znak nowej linii o kodzie 0D (albo sekwencja CR-LF, to jest 0A-0D).
Jeśli chcesz wysłać liczbę binarnie, użyj printbin i będzie ok. Do odbioru natomiast inputbin. Inna możliwość, to wysłanie liczby jako stringu, odebranie jej jako stringu i zamiana przez Val na reprezentację liczbową.
Co do używania wait w obsłudze przerwania INT0. Nie mam nic przeciwko, tylko po co? Czy faktycznie wprowadzony czas oczekiwania ma uzasadnienie praktyczne?
Maybe
PS
Nie przejmuj się zbyt ostrą moim zdaniem krytyką . Na tym poziomie spokojnie możesz sobie programować w Bascom.
Jeśli chcesz wysłać liczbę binarnie, użyj printbin i będzie ok. Do odbioru natomiast inputbin. Inna możliwość, to wysłanie liczby jako stringu, odebranie jej jako stringu i zamiana przez Val na reprezentację liczbową.
Co do używania wait w obsłudze przerwania INT0. Nie mam nic przeciwko, tylko po co? Czy faktycznie wprowadzony czas oczekiwania ma uzasadnienie praktyczne?
Maybe
PS
Nie przejmuj się zbyt ostrą moim zdaniem krytyką . Na tym poziomie spokojnie możesz sobie programować w Bascom.
-
- -
- Posty:8
- Rejestracja:4 sie 2004, o 22:40
- Lokalizacja:Taarn. Góry
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 44 gości