Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:avr:usart [2010/02/11 15:01] mikk.leiniet: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: +
- //   Jagamistegur = taktsagedus / 16 / boodi kiirus - 1 +
- //   UBRR = 8000000 / 16 / 9600 - 1 = ~51 +
- UBRR0H = 0; +
- UBRR0L = 51;+
  
- // Saatja lubamine +// Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti 
- UCSR0B = (1 << TXEN0);+// 1 stop-bitt, keelatud paarsuse bitt. 
 +UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
  
- // Asünkroonse režiimi seadistamineandmesõna pikkuseks 8 bitti +// Ootamekuni andmepuhver on tühi ehk eelmine sõna on saadetud 
- // 1 stop-bittkeelatud paarsuse bitt+// Selles näites ei oma see küll mõtetsest saadetakse alles 
- UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);+// esimest märki, küll tasub seda teha rohkemate märkide korral
 +while (!(UCSR0A & (1 << UDRE))continue;
  
- // Ootamekuni andmepuhver on tühi ehk eelmine sõna on saadetud +// Märgi kirjutamine puhvrissekust see ka teele saadetakse 
- // Selles näites ei oma see küll erilist mõtet, sest saadetakse +UDR0 = 'X';
- // 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 = 'X'; 
-  
- // Lõputu tsükkel 
- while (1) continue; 
-} 
 </code> </code>
  
 +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 "X".
 +
 +<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<<USART_BSCALE_gp);
 +
 +USARTD0.CTRLB |= (USART_TXEN_bm); // Saatja lubamine
 +
 +// Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti
 +// 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 = 'X';
 +
 +</code>
 </box> </box>
et/avr/usart.1265900484.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0