Procek At89s51 czy ustawienie: SCON = 0x40; TMOD = 0x20; TH1 = TL1 = 0xFD; TR1 = 1; /*TCON.6*/ SBUF = 0; TI = 0; /*SCON.1*/ ustawi transmije weglug topicu ? thx, prosze o info na priv: snipped-for-privacy@student.prz.rzeszow.pl
ustawianie UART na 9600bps, 1b start,1 stop,no-parity
Jun 17, 2004
6 Replies
U¿ytkownik "Imperator" snipped-for-privacy@st-wola.pl napisa³ w wiadomo¶ci news:casd2i$el9$ snipped-for-privacy@lena.prz.rzeszow.pl
Jaki kwarc?!
Tylko na listê. Tu pytasz - tu dostajesz odpowied¼.
11,0592 U¿ytkownik "Marek Dzwonnik" <mdz@WIADOMO_PO_CO_TO.message.pl> napisa³ w wiadomo¶ci news:40d1b97d$ snipped-for-privacy@news.home.net.pl...
U¿ytkownik "Imperator" snipped-for-privacy@st-wola.pl napisa³ w wiadomo¶ci news:casi4l$hbk$ snipped-for-privacy@lena.prz.rzeszow.pl
Pierwsze primo: Cytuj, ale odpowiadaj POD przyciêtym cytatem.
No to po kolei:
Bierzemy ksi±¿kê Rydzewskiego. Skoro '51ka to do generacji baudrate-u mo¿e byæ wziêty tylko timer1. W '52 mo¿na by u¿yæ jeszcze timer2 (T2CON.4==TCLK :=1 , T2CON5==RCLK := 1).
Czyli f_xtal/ 12 = 921.6kHz.
SCON = 01000000b ==>
SM0=0, SM1=1 -> Tryb1; trans. szeregowa, asynch, 8bit, szybko¶æ okr. programowo (czyli przez timer1) SM2 = 0 -> bez maskowania (nie robimy komunikacji wieloprocesorowej) REN = 0 -> odbiornik nieaktywny (czy tak mia³o byæ?) TB8 = 0 -> (bit8-tx) nieistotne (chcia³e¶ mieæ tylko 8bitów pomiêdzy start a stop) RB8 = 0 -> (bit8-rx) nieistotne, j.w. TI =0 -> znacznik przerwania bedzie ustawiany przez sprzêt RI=0 -> j.w. (a Rx i tak nie dzia³a przy REN=0)
Czyli mamy 8 bitów danych, po 1 bicie START/STOP (51-ka potrafi tylko tak). Je¶li chce siê mieæ parzysto¶æ to i tak trzeba obs³u¿yæ programowo tzn. ustawiaæ albo czytaæ i sprawdzaæ odpowiedni bit: DB7 lub TB8/RB8 - zale¿nie od trybu.
Mlodszy (zerowy) pó³bajt dotyczy timera0 wiêc nas nie interesuje
Starszy pó³bajt (timer1): TMOD = 00100000b ->
GATE = 0 -> timer1 _bez_ bramkowania zewn. sygna³em z we INT1\ (czyli Ok) C/T\ = 0 czyli czasomierz taktowany z zegara wewn (f_xtal/12) M1.M0 = 10 -> tryb 2, czyli licznik 8bitowy (TL1) z automatycznym przeladowaniem z TH1 -> Ok
0xFD = 253d Zatem czêstotliwo¶æ wyj¶ciowa licznika T1 bêdzie równa:f_ot1 = (fxtal/12) / (256 - TH1) f_ot1 = 921.6kHz / (256-253) = 307.2kHz
No dobrze, a co z bitem SMOD==PCON.7 ? (Decyduje o dodatkowym podziale czêstotliwo¶ci /2) Za³ó¿my, ¿e SMOD=0 (musisz tego przypilnowaæ), wiêc f_bd = f_ot1 / 32 f_bd = 307.2kHz / 32 = 9600 c.n.d :-)
Ok. Bez tego licznik nie ruszy
A z tym ostro¿nie, bo za³adowanie SBUF uruchamia wysy³anie znaku. Czy naprawdê chcesz wys³aæ 0x00 ?
To jest znacznik przerwañ od Tx. Zerujesz go przed odblokowaniem przerwañ (na wszelki - ¿eby nie mieæ fa³szywego przerwania) a potem w obs³udze przerwania UART - po _wys³aniu_ ka¿dego znaku. TI i RI _nie_sa_ (bodajze jako jedyne) automatycznie zerowane po przyjêciu przerwania. Zwróc uwagê, ¿e UART ma przypisane _jedno_ przerwanie a badaj±c w obs³udze RI i TI dopiero ustalasz co faktycznie zasz³o.
primo to juz znaczy "pierwsze" ;-)
bierzemy taki stary ale fajny programik AppBuilder z Intela, odfajkowujemy odpowiednie opcje w menu i klikamy jeden przycisk, po czym delektujemy sie automagicznie wygenerowanym odpowiednim kodem ;-) Gdybysmy uzywali prockow Siemensa to wtedy rozgladamy sie za DaVE'm ;-) Oczywiscie to wszystko w celach edukacyjnych, aby wiedziec co popsulismy w procedurze napisanej wczesniej wlasnorecznie :-)
Wysyłając taki oto zestaw znaków dnia 2004-06-18 12:37 Michal Baszynski nakarmił(a) stado głodnych newsserwerów:
A mógłbyś napisać gdzie można znaleźć ten program???
kiedys byl na stronie intela, google wyrzuca np. taki adres:
formatting link
, a jak nie to odezwij sie na priv - postaram sie wtedy odkopac w piwnicy stare CD Intela i powinienem go znalezc
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required