This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:avr:usart [2010/02/11 15:01] – mikk.leini | et:avr:usart [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 16: | Line 16: | ||
| <code c> | <code c> | ||
| - | #include <avr/io.h> | + | // Boodi kiiruseks 9600 bps seadmine. |
| + | // Valem: jagamistegur = taktsagedus / 16 / boodi kiirus - 1 | ||
| + | // UBRR = 8000000 / 16 / 9600 - 1 = ~51 | ||
| + | UBRR0H = 0; | ||
| + | UBRR0L = 51; | ||
| - | int main() | + | UCSR0B = (1 << TXEN0); // Saatja lubamine |
| - | { | + | |
| - | // Boodi kiiruseks 9600 bps seadmine. Valem: | + | |
| - | // | + | |
| - | // UBRR = 8000000 / 16 / 9600 - 1 = ~51 | + | |
| - | UBRR0H = 0; | + | |
| - | UBRR0L = 51; | + | |
| - | // Saatja lubamine | + | // Asünkroonse režiimi seadistamine, |
| - | UCSR0B | + | // 1 stop-bitt, keelatud paarsuse bitt. |
| + | UCSR0C | ||
| - | // Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti | + | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud |
| - | // 1 stop-bitt, keelatud paarsuse bitt. | + | // Selles näites ei oma see küll mõtet, sest saadetakse alles |
| - | UCSR0C = (1 << UCSZ01) | (1 << | + | // esimest märki, küll tasub seda teha rohkemate märkide korral. |
| + | while (!(UCSR0A & (1 << | ||
| - | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud | + | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse |
| - | // Selles näites ei oma see küll erilist mõtet, sest saadetakse | + | UDR0 = ' |
| - | // alles esimest märki, küll tasub seda teha rohkemate märkide korral | + | |
| - | while (!(UCSR0A & (1 << UDRE))) continue; | + | |
| - | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse | ||
| - | UDR0 = ' | ||
| - | |||
| - | // Lõputu tsükkel | ||
| - | while (1) continue; | ||
| - | } | ||
| </ | </ | ||
| + | Seadistada 32 MHz taktsagedusel töötav ATxmega128A1U USARTD0 liides boodikiirusel 9600 bps asünkroonselt edastama 8-bitiseid sõnu 1 stop-bitiga ja ilma paarsuse bitita. Saata märk " | ||
| + | |||
| + | <code c> | ||
| + | // Boodi kiiruseks 9600 bps seadmine | ||
| + | // Vaja on valida skaala konstant BSCALE -7..7 | ||
| + | // Vaja on leida perioodi seade BSEL | ||
| + | // Valem: BSEL = (F_CPU / (2^BSCALE * 16 * baudrate))-1 | ||
| + | USARTD0.BAUDCTRLA = 12; | ||
| + | USARTD0.BAUDCTRLB = (4<< | ||
| + | |||
| + | USARTD0.CTRLB |= (USART_TXEN_bm); | ||
| + | |||
| + | // Asünkroonse režiimi seadistamine, | ||
| + | // 1 stop-bitt, keelatud paarsuse bitt. | ||
| + | USARTD0.CTRLC |= ( USART_CMODE_ASYNCHRONOUS_gc| | ||
| + | USART_PMODE_DISABLED_gc| | ||
| + | USART_CHSIZE_8BIT_gc); | ||
| + | |||
| + | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud | ||
| + | // Selles näites ei oma see küll mõtet, sest saadetakse alles | ||
| + | // esimest märki, küll tasub seda teha rohkemate märkide korral. | ||
| + | while (!(USARTD0.STATUS & (USART_DREIF_bm))); | ||
| + | |||
| + | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse | ||
| + | USARTD0.DATA = ' | ||
| + | |||
| + | </ | ||
| </ | </ | ||