mikrokontrolery.net

 

   

Przykład 4 - Generator impulsów

Algorytm działania programu przedstawia poniższy rysunek :

Jedyną różnicą pomiędzy programem poprzednim a obecnym jest usunięcie warunku if(bit_is_clear(PIND, 0)). W wyniku tego, negecja pinu PORTB.7 będzie wykonywana bez przerwy i bez względu na stan przycisku S1. Objawi się to nieprzerwanym miganiem kropki dziesiętnej wyświetlacza.

// Przykład 4 - Generator impulsów

// Dołączenie wymaganego pliku nagłówkowego
#include <avr/io.h>
// makroinstrukcja negująca stan wyprowadzenia PORTB.7
#define TOGGLE_LED PORTB ^= 0x80;
// częstotliwość zegara w megahercach
#define OSC 4
// definicja funkcji opóźniającej
void waitms(unsigned char x)
{
unsigned char a, b; // zmnienne licznikowe
for( ; x > 0; --x) // ta pętla zostanie wykonana x-razy
for(b = 10; b > 0; --b) // a ta 10 razy
for(a = 25 * OSC; a > 0; --a) // natomiast ta 100 razy
__asm("nop"); // dodatkowa instrukcja opóźniająca o 1 cykl
// razem to da opóźnienie ok. x * 1ms
// x od 0 do 255
// gdy x = 0 to opóźnienie = 256ms
}

// Program główny
int main(void)
{
// konfiguracja portów I/O
DDRB = 0xFF;
DDRD = 0xFC;
PORTB = 0xFF;
PORTD = 0xF7;
// pętla nieskoczona
while(1)
{
TOGGLE_LED; // funkcja ex-or portu B i stałej 0x80 - wyniniem jest zanegowanie bitu 7 portu B
waitms(200); // czekaj 200 ms
}// koniec pętli nieskończonej
return 0;
}

 

 

 

 

 

 

 

 

 

 

 
 
 
 

(c) 2004-2008 Radosław Kwiecień
Polityka prywatności