marthinek napisał(a):
przy założeniu transmisji ramki 8 bit to wg mnie powinna się wysłać ramka składająca się właśnie z liczby odpowiadającej znakowi 'A' w kodzie ASCII w jej binarnie zapisanej formie czyli: 01000001
Odpuść sobie myślenie na razie o ramkach, o ilości bitów w ramkach i takich tam pierdókach
Skup się teraz na tym co powiedziałeś i słusznie, że powinna być przesłana liczba odpowiadająca znakowi 'A' w kodzie ASCII.
No więc właśnie - zobacz sam sobie odpowiedziałeś na poprzednie wątpliwości - bo o jakiej ty tu konwersji z ASCII na liczby mówisz albo odwrotnie ?????
Nie tylko, że nie potrzeba żadnej konwersji robić - ale po prostu nie ma czegoś takiego jak konwersja ASCII na liczbę albo liczby na ASCII w tym rozumieniu o jakie pytasz ....
KAŻDY znak ASCII jest tylko i wyłącznie liczbą i niczym innym. Dlatego po co się zastanawiasz jaki typ dać dla znaku ASCII czy unsigned char? czy char? czy uint8_t?
każdy będzie dobry - tyle że automatycznie i domyślnie masz robioną konwersję char do unsigned char przez kompilator - dlatego wpisywanie unsigned char jest po prostu wg mnie bez sensu przez ludzi. Chyba że się wyłączy tę opcję kompilatora, bo można to wtedy trzeba byłoby wpisywać unsigned char.
A w książce pisałem, że dla znaków, dla stringów dajemy zwykle typ char nie dlatego że TAK MUSI BYĆ I KONIEC !!!! .... tylko dlatego, że panie kochany jak ja w twoim kodzie zobaczę np coś takiego:
Kod:
char buf[10];
uint8_t tab[20];
to od razu się domyślę na tym etapie że w buf będziesz pewnie przechowywał znaki ASCII (ale też przecież normalne liczby) .... i że będzie on gdzieś wykorzystywany np w funkcjach komunikacji UART, LCD i tym podobnych - rozumiesz ?
A niepotrzebnie wmieszałeś w tę konwersję funkcję ITOA - bo wynika z tego że właśnie - nie wiesz co to znaczy konwersja liczb ale na format ASCII..... co to oznacza?
ano że jak np chcesz wysłać liczbę 13 do terminala - i teraz zastanów się jaki chcesz uzyskać efekt w terminalu ? taki że na ekranie pojawią ci się dwa znaki 1 i 3 czy chcesz żeby zadziałało to jak kliknięcie entera czyli przejście do kolejnej linii ????
jeśli ma zadziałać jako znak ENTER czyli CR to po prostu wysyłam:
Kod:
UART_putchar(13);
ale jeśli chcę żeby pojawiła się liczba w postaci dwóch znaków to mogę to np wysłać tak:
Kod:
UART_putchar('1');
UART_putchar('3');
widzisz różnicę tego co będzie się działo w terminalu ....
i dlatego żeby nie trzeba było np liczby 233 wysyłać wpisując siedem takich linii można wtedy zastosować konwersję tej liczby do stringa ITOA() albo LTOA()
Pisałeś tak:
marthinek napisał(a):
bez względu co się poda na, czy "unsigned char data " czy "uint8_t data"
i tak wysyła wszystko w postaci znaków ASCII.
Ale o czym ty mówisz ? - co to znaczy wg ciebie że przesyła w postaci znaków ASCII ? dziwisz się, że wysyłając liczbę UDR=65 - widzisz w terminalu znak A ????? No coś ty - to normalne - terminal odebrał liczbę 65 - a jest to panie kochany terminal czyli coś co działa w trybie znakowym - to co miał wg ciebie pokazać ???? 65 ?
przecież "65" to są dwa znaki ASCII o różnych kodach a ty wysłałeś tylko liczbę 65 która jest znakiem ASCII A
marthinek napisał(a):
Jedynie funkcja itoa z parametrem 2 pozwala mi przesyłać binarną postać liczb (jedynki i zera) albo liczby w systemie dziesiętnym.. a nie da się bez tego itoa?
Pewnie, że można bez itoa() - napisz sobie własną funkcję do konwersji liczb na postać/format ASCII - masz przykład takiej własnej funkcji w rozdziale o ADC gdzie chodzi tam o wyświetlanie wyników
marthinek napisał(a):
gdzie następuje to przekształcenie z liczby na znak ASCII?
Przede wszystkim musisz rozróżnić LICZBĘ od CYFRY bo tu się kręcisz troszeczkę....
popatrz np napiszę sobie taką pętlę, która wyśle do terminala w postaci znaków ASCII cyfry 0d 0 do 9
Kod:
uint8_t i;
for(i=0;i<10;i++) {
UART_putchar( i + '0' );
}
spróbuj przeanalizować sobie jak to działa
- a to jest właśnie super prosta konwersja liczb a w zasadzie cyfr!!!!! na znaki ASCII bo przecież tą metodą nie wyślę liczby 10 czy 129, czy 1202323223 - dlaczego ? no pomyśl
Ale za to wiedząc to co wyżej się dzieje w tej pętli to spokojnie zrozumiesz jak działa ta funkcja opisana w rozdziale o ADC OK?
Mam nadzieję, że chociaż troszkę rozjaśniłem sytuację - czy nie za bardzo?