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 [2014/01/30 11:40] rellermaaet:avr:usart [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 10: Line 10:
  
 Muide, saatepuhver ja vastuvõtupuhver on füüsiliselt küll erinevad registrid, kuid jagavad sama mäluaadressi ja neil on ühine nimi. Ühine andmeregister toimib nii, et sellesse kirjutades jõuab sõna saatepuhvrisse ja sellest lugedes tuleb see vastuvõtupuhvrist. Veel ühe täpsustusena tuleks arvestada, et 9-bitiste andmesõnade puhul edastatakse ja loetakse üheksandat bitti hoopis ühe seaderegistri kaudu. Muide, saatepuhver ja vastuvõtupuhver on füüsiliselt küll erinevad registrid, kuid jagavad sama mäluaadressi ja neil on ühine nimi. Ühine andmeregister toimib nii, et sellesse kirjutades jõuab sõna saatepuhvrisse ja sellest lugedes tuleb see vastuvõtupuhvrist. Veel ühe täpsustusena tuleks arvestada, et 9-bitiste andmesõnade puhul edastatakse ja loetakse üheksandat bitti hoopis ühe seaderegistri kaudu.
- 
-~~PB~~ 
  
 <box 100% round #EEEEEE|Näide> <box 100% round #EEEEEE|Näide>
Line 18: 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 mõtet, sest saadetakse alles +UDR0 = 'X';
- // 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 ATmega128A1U USARTD0 liides boodikiirusel 9600 bps asünkroonselt edastama 8-bitiseid sõnu 1 stop-bitiga ja ilma paarsuse bitita. Saata märk "X".+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> <code c>
-#include <avr/io.h>+// 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);
  
-int main() +USARTD0.CTRLB |= (USART_TXEN_bm); // Saatja lubamine
-+
- // 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);+
  
- // Saatja lubamine +// Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti 
- USARTD0.CTRLB |= (USART_TXEN_bm);+// 1 stop-bitt, keelatud paarsuse bitt. 
 +USARTD0.CTRLC |= (  USART_CMODE_ASYNCHRONOUS_gc| 
 +                    USART_PMODE_DISABLED_gc| 
 +                    USART_CHSIZE_8BIT_gc);
  
- // 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 
- USARTD0.CTRLC |= ( USART_CMODE_ASYNCHRONOUS_gc| +// esimest märki, küll tasub seda teha rohkemate märkide korral
-                     USART_PMODE_DISABLED_gc| +while (!(USARTD0.STATUS & (USART_DREIF_bm)));
-                     USART_CHSIZE_8BIT_gc);+
  
- // 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 mõtet, sest saadetakse alles +USARTD0.DATA = 'X';
- // 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'; 
- 
- // Lõputu tsükkel 
- while (1) {}; 
-} 
 </code> </code>
- 
 </box> </box>
et/avr/usart.1391082033.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