rezolut Marzec 7, 2012 Udostępnij Marzec 7, 2012 Szukaj. Przykładów jest bez liku. Ja nie piszę nic w C 🙁 Cytuj Link do komentarza Share on other sites More sharing options...
Mily2001 Marzec 9, 2012 Autor tematu Udostępnij Marzec 9, 2012 Zakodziłem coś takiego: void convert(int a, int *tab) { int tmp=1024; for(int i=0; i<11; i++) { if(tmp<=a) { tab[i]=1; a-=tmp; }else { tab[i]=0; } tmp/=2; } } void UART_Wyslij(int liczba) { while(bit_is_clear(UCSRA,UDRE)) {} UDR=15; _delay_ms(1); int mail[11]; convert(liczba, mail); for(int i=0; i<11; i++) { while(bit_is_clear(UCSRA,UDRE)) {} UDR=mail[i]; _delay_ms(1); while(bit_is_clear(UCSRA,UDRE)) {} UDR=3; _delay_ms(1); } } oraz dla odbiornika: int UART_Odbierz() { int tmp=1024, wyn=0; while(UDR!=15){} for(int i=0; i<11; i++) { while(UDR==15||UDR==3){} wyn+=tmp*UDR; tmp/=2; while(UDR!=3){} } return wyn; } Niestety to nie działa tak jak powinno. W googlu nie znalazłem niczego co mogłoby pomóc w rozwiązaniu przesyłania liczb >255. Jeśli ktoś ma jakieś pomysły to proszę, niech się z nami podzieli 😉 Cytuj Link do komentarza Share on other sites More sharing options...
rezolut Marzec 9, 2012 Udostępnij Marzec 9, 2012 Mnie C nie mówi zupełnie nic, za cholerę nie rozumiem tej symboliki, ale.... Umiesz odebrać jedną daną typu byte i to różną od "znaczników" 15 i 3? Wstawiaj więc dane odebrane w tablicę typu byte. Po odebraniu zanku stopu przetwórz właściwe elementy tablicy w pętli I, przepisując zmiennej int tablica * 256 + tablica[i+1] i już masz zmienną dwubajtową. Cytuj Link do komentarza Share on other sites More sharing options...
Mily2001 Marzec 11, 2012 Autor tematu Udostępnij Marzec 11, 2012 Ok, poradziłem sobie poprzez wysyłanie każdej cyfry liczby po kolei. Kody, może komuś się przydadzą: Wysyłanie: void UART_Wyslij (int liczba) { int czy; if(liczba<10){czy=1;} if(liczba>9 && liczba<100){czy=2;} if(liczba>99 && liczba<1000){czy=3;} if(liczba>999){czy=4;} w8; UDR=32; w8; int tmp=liczba%10; UDR=tmp; w8; UDR=16; if(czy>1){ liczba=liczba/10; tmp=liczba%10; w8; UDR=tmp; w8; UDR=16; if(czy>2){ liczba=liczba/10; tmp=liczba%10; w8; UDR=tmp; w8; UDR=16; if(czy>3){ liczba=liczba/10; tmp=liczba%10; w8; UDR=tmp; w8; UDR=16; }else{ w8; UDR=0; w8; UDR=16; } }else{ w8; UDR=0; w8; UDR=16; w8; UDR=0; w8; UDR=16; } }else{ w8; UDR=0; w8; UDR=16; w8; UDR=0; w8; UDR=16; w8; UDR=0; w8; UDR=16; } } i odbieranie: int UART_Odbierz() { int tmp, x=1, wyn=0; while(tmp!=32) { tmp=UDR; } for(int i=0; i<4; i++) { tmp=UDR; while(tmp==32 || tmp==16) { tmp=UDR; } tmp=UDR; if(tmp>9){i--; continue;}else{ wyn+=tmp*x; x*=10; } while(tmp!=16) { tmp=UDR; } } return wyn; } Wiem że kody nie są najładniejsze ale liczy się to że działają 😋 W wysyłaniu jest jeszcze #define w8 while(bit_is_clear(UCSRA,UDRE)) Oba programy działają tylko dla liczb <10000 ale można to łatwo rozszerzyć. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
alloploid Styczeń 26, 2013 Udostępnij Styczeń 26, 2013 Hej, Bardzo pilnie potrzebuję zrealizować takie coś. Mam dwie atmegi, 8 i 32. Do mniejszej podłączony jest wyświetlacz 2x siedmiosegmentowy. Procek ten realizuje odliczanie na tym wyświetlaczu. Jedno z przerwań służy do zatrzymywania tego odliczania. Potrzbuję bardzo aby z Atmegi32 móc wysłać od ilu ma się zacząć odliczanie (wartość z przedziału 1 do 99). Próbowałem za pomocą kodu, który jest na forum. Nie zrozumiałem tej części o odczycie w przerwaniu. Podłączyłem linie zgodnie z zaleceniem i wkleiłem kody. Jednak nie działa. Mógłbyś mi ktoś jakoś pomóc? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!