Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
et:examples:delay [2009/09/21 10:19] mikk.leiniet:examples:delay [2009/11/04 13:45] (current) – eemaldatud mikk.leini
Line 1: Line 1:
-Lihtsa viite tekitamine 
  
-Kontrollige, et optimeerimine oleks välja lülitatud: -O0 
-ja et AVRStudios oleks määratud kontrolleri taktsagedus: 14745600 
- 
-{{:et:failid:avrstudio_settings.jpg|}} 
- 
-<code c> 
-void delay1s(int count){ // ~0,09s 
- unsigned int i,j; 
- for(i=0;i<count;i++){ 
- for(j=0;j<65530;j++){asm volatile ("nop");}} 
-} 
- 
- 
-//Väljakutsumine programmist 
-delay1s(10); //0,9 sek. 
- 
-</code> 
- 
-Paus taimeriga. 
-Järgnevat pausi tekitamise koodi optimeerimine ei mõjuta. 
- 
-<code c> 
-// Paus millisekundites 
-// Pausi tegemiseks on kasutusel taimer 0 
-// Maksimaalne pausi aeg on 4500 ms 
-// Pausi täpsus on 3% 
-void aeg(unsigned int t) 
-{ 
-  // Maksimaalse aja piiramine 
-  if (t > 4500) t = 4500; 
-   
-  // Sagedusjaguri teguriks 1024 
-  TCCR1B = _BV(CS12) | _BV(CS10); 
-  
-  // Taimerile sellise väärtuse omistamine, et 
-  // t millisekundi pärast märgitakse katkestuse bitt 
-  TCNT1 = 0xFFFF - (unsigned int)((unsigned long)t * (unsigned long)144 / (unsigned long)10); 
-   
-  // Lõputu tsükkel kuni katkestuse bitt märgitakse 
-  while ((TIFR & _BV(TOV1)) == 0) 
-  { 
-  asm volatile ("nop"); 
-  } 
-   
-  // Katkestuse biti kustutamine toimub seda üheks kirjutades 
-  TIFR |= _BV(TOV1); 
-} 
-</code> 
- 
- 
-Viide kasutades util/delay.h päisfaili. 
-Probleem on maksimaalses väärtuses, mida _delay_ms aktsepteerib. 
-Järgnev funktsioon võimaldab kasutada oluliselt suuremaid viiteid. 
- 
-<code c> 
-void delay_ms(uint16_t ms) // Määrab pausi pikkuse 
-{ 
- while (ms)    // tsükkel, kuni ms väärtus on jõudnud nullini 
- { 
- _delay_ms(1); // 1ms viide 
- ms--;  // lahtutab igas tsüklis ühe maha 
- } 
-} 
-</code> 
- 
-<code c> 
-//***************************************************************************** 
-// 
-// Delay with timer 1. 
-// 
-//***************************************************************************** 
-void delay_ms(unsigned int ms) 
-{ 
- unsigned int count = 0; 
- 
- // 
- // No PWM generating. 
- // 
- TCCR1A = 0; 
- 
-  // 
- // Clock prescaler to 4, so the timer clock will be 250khz. 
- // 
- TCCR1B = BIT(CS11) | BIT(CS10);  
- 
- // 
- // Cycle until ms times of overflow. 
- // 
- while (count++ < ms) 
- { 
- // 
- // Preload timer value to get overflow in 1ms. 
- // 
- TCNT1 = 5; 
- 
- // 
- // Wait for overflow. 
- // 
- while (!IS_BIT_SET(TIFR, TOV1)) 
- { 
- asm volatile ("nop"); 
- } 
- 
- // 
- // Clear timer overflow interrupt flag. 
- // 
- SET_BIT(TIFR, TOV1); 
- }  
- 
- // 
- // Stop the timer. 
- // 
- TCCR1B = 0; 
-} 
-</code> 
et/examples/delay.1253528390.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