Zrobiłem płytkę do mówiącego sterownika domowego na której są at128 (procesor główny)i at32(procesor muzyczny z kartą sd). Potrzebuję zrobić przesył plików tekstowych z karty sd(at32) na wyświetlacz lcd(at128). '---PROCESOR-------------------------------------------------------------------- $regfile = "m128def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 64 $framesize = 64 $baud = 9600 Enable Interrupts '---WYŚWIETLACZ-------------------------------------------------------------------- $lib "glcd.lib" Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 7 , Cd = 2 , Wr = 4 , Rd = 3 , Reset = 6 , Fs = 1 , Mode = 8 Cursor Off Cls '---PORTY-------------------------------------------------------------------- Config Porta = Output Set Porta Config Portb = Output Set Portb Config Portc = Output Set Portc Config Portd = Output Set Portd Config Porte = Output Set Porte Config Porte.0 = Input Set Porte.0 Config Porte.1 = Output Set Porte.1 'uart '---ZMIENNE-------------------------------------------------------------------- Dim Odebrany As Byte , Coss As Byte , C As Byte C = 0 '---PĘTLA GŁÓWNA-------------------------------------------------------------------- Do Inputbin Coss 'odbiera znaki liczbowe kodu ASCII Incr C 'ustawia numer znaku na lcd Locate 1 , C Lcd Chr(coss) 'wyśwetla kolejno odebrane znaki liczbowe 'kodu ASCII zmieniając je na text Loop Until C = 29 'dopuki nie odbierze 29 znaków C = 0 Do Inputbin Coss Incr C Locate 2 , C Lcd Chr(coss) Loop Until C = 29 'i podobnie w drugiej linii lcd End i at32(nadajnik): '---PROCESOR-------------------------------------------------------------------- $regfile = "M32Def.dat" $crystal = 16000000 $hwstack = 128 $swstack = 64 $framesize = 64 $baud = 9600 Enable Interrupts '---PORTY-------------------------------------------------------------------- Config Porta = Output Set Porta Config Portb = Output Set Portb Config Portc = Output Set Portc Config Portd = Output Set Portd Config Portd.0 = Input Set Portd.0 Config Portd.1 = Output Set Portd.1 'uart '---ZMIENNE-------------------------------------------------------------------- Dim S(5) As String * 29 , S1 As String * 29 Dim A As Byte , C As Byte , D(29) As Byte At S1 Overlay , E As Byte S(1) = "1234567890QWERTYUIOPASDFGHJKL" S(2) = "LKJHGFDSAPOIUYTREWQ0987654321" C = 0 A = 0 Wait 2 '---PĘTLA GŁÓWNA---------------------------------------------------------------- Do Incr A 'ustawia numer zmiennej s(a) S1 = S(a) 'przypianie s1 do s(a) C = 0 'początkowa wartość zmiennej d(29) Do Incr C 'kolejna liczba kodu ASCII ze zmiennej s1 [czyli s(a)] Printbin D(c) 'wysłaie liczby w kodzie ASCII Loop Until C = 29 'dopuki wyśle 29 znaków w kodzie ASCII Loop Until A = 2 'dopuki wyśle 2 całe zmienne po 29 znaków każda End Program działa ale nie do końca. Pierwszą linijkę tekstu wysyła i odbiera bezbłędnie. problem pojawia się gdy chcę wysyłać więcej linijek tekstu. Mianowicie program próbuje wyświetlać w każdej kolejnej linii to samo co w poprzedniej z tym że obcina coraz więcej pierwszych znaków tej linijki np. w piątej linii obetnie 4 pierwsze znaki a w dziewiątej obetnie 8 pierwszych znaków. W puste miejsca z przodu linijki wstawia jakieś dziwne symbole "krzaczki". W helpie bascoma pisze że jeśli uart pokazuje "krzaczki" to znaczy że źle ustawiona jest szybkość transmisji ale ja mam ustawione w kodzie programu i w kompilatorze bascoma tak samo. Dla lepszego zrozumienia pokażę jak to wygląda na lcd: 'Zamiast:
1234567890QWERTYUIOPASDFGHJKL
LKJHGFDSAPOIUYTREWQ0987654321 'Wyświetla
1234567890QWERTYUIOPASDFGHJKL
234567890QWERTYUIOPASDFGHJKL Proszę o pomoc w którym miejscu popełniłem błąd i jak to poprawić.
|
|||
Działa!!!!!!!!! Zastanawiałe
Działa!!!!!!!!!
Zastanawiałem się czemu procesor próbował wyświetlać ciągle tę samą wysłaną zmienną jedną pod drugą i po wielu próbach i błędach znalazłem przyczynę. Mianowicie wcześniej myślałem że zmienna zdefiniowana jako:
w funkcji:
wysyła po jednym znaku z s1 zmienionym na liczbę w kodzie ASCII i tak próbowałem wysłać całego stringa.
Okazało się że wystarczy instrukcja:
i cały string zostaje wysłany bez żadnego dzielenia na znaki pojedyncze.