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

KrzysiekTG
-
-
Posty:8
Rejestracja:4 sie 2004, o 22:40
Lokalizacja:Taarn. Góry
Transmisja UART między dwoma prockami

Postautor: KrzysiekTG » 14 paź 2004, o 18:56

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

GasM
-
-
Posty:92
Rejestracja:4 lut 2004, o 11:57

Postautor: GasM » 14 paź 2004, o 19:31

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

Awatar użytkownika
Maybe
-
-
Posty:63
Rejestracja:19 wrz 2004, o 19:58
Lokalizacja:Dziebieszyce
Kontaktowanie:

Postautor: Maybe » 14 paź 2004, o 20:59

GasM chyba troszkę się zagalopował... :wink: 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ą :wink: . Na tym poziomie spokojnie możesz sobie programować w Bascom.

KrzysiekTG
-
-
Posty:8
Rejestracja:4 sie 2004, o 22:40
Lokalizacja:Taarn. Góry

Postautor: KrzysiekTG » 15 paź 2004, o 21:51

Dzięki wszystkim. Pomogło printbin i inputbin :)

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości