This is an old revision of the document!
Lihtsa viite tekitamine
Kontrollige, et optimeerimine oleks välja lülitatud: -O0 ja et AVRStudios oleks määratud kontrolleri taktsagedus: 14745600
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.
Paus taimeriga. Järgnevat pausi tekitamise koodi optimeerimine ei mõjuta.
// 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); }
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.
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 } }