Brezilya selamlar!
Her şeyden önce örnek için Joby teşekkürler. İkincisi, örneğinin küçük bir hatası var. 0x20 sayısı doğru değil. 0x04 olmalıdır. Ayrıca, sadece bir öneri olarak, kodda 0xFB, 0x20 veya 0x04 gibi onaltılık sayılar kullanmaz. Ben io.h ve üstbilgi dosyası tarafından başvurulan diğerleri bulunan PIN bağlantı noktası tanımlarını kullanmanızı öneririm. Joby'nin örneğini yeni başlayanlar için bazı yorumlarla birlikte yeniden yazdım.
# include <avr/io.h>
int main (void)
{
// set all pins on PORTB for output
DDRB = 0xFF;
// set port pin PORTD2 as input and leave the others pins
// in their originally state (inputs or outputs, it doesn't matter)
DDRD &= ~(1 << PD2); // see comment #1
while (1)
{
if (PIND & (1<<PD2)) // see comment #2
PORTB |= (1<<PB2); // see comment #3
else
PORTB &= ~(1<<PB2); // see comment #4
}
return 0;
}
/ *
yeni başlayanlar için yorumlar
yorum # 1: (1 << PD2) ikili 00000100 üretir. "~" İşlemi tüm basamakları çevirir, yani ikili şimdi 11111011'dir. Sonunda & = DDRD ile 11111011 arasında "VE" mantığını uygular ve sonuç tekrar yerleştirilir DDRD bellekte. Not: "VE" operatörünün yaptığı şey, DDRD belleğindeki her bit için yukarıdaki ikili sayı ile karşılaştırılır. DDRD'deki bit 0 ise ve aynı ısırma konumundaki ikili dosyadaki bit 1 ise, DDRD 1 ise ve ikili dosyadaki bit 1 ise, sonuçtaki bit 1 ve DDRD'deki bit 1 veya 0'dır ve ikili dosyadaki bit 0'dır, sonuçta elde edilen bit her zaman 0'dır. Özetle, DDRD & = ~ (1 << PD2) komutu sadece PD2 bitini sıfıra değiştirir ve diğerlerini (sıfırlar veya olanlar) dokunmadan bırakır. Biraz karmaşık görünüyor, ama buna alıştıktan sonra, diğer bitleri değiştirmeden bir ısırıkta biraz değiştirmenin en iyi yolu.
comment # 2 : (1 << PD2) ikili 00000100'ü üretir. # 1 numaralı açıklamada açıklanan aynı "VE" mantığını kullanarak, "PIND & 0000100" komutu yalnızca PIND2'nin (basma düğmesinin bağlı olduğu giriş pinimiz) to) yüksek olarak ayarlanmış veya ayarlanmamış. İkili bitler 0 olarak ayarlandığından ve diğer ikili bit # 2 olarak ayarlandığından, diğer tüm pinler FALSE olur, IF ifadesi yalnızca PD2 girişi yüksek olarak ayarlanmışsa TRUE olur veya PD2 girişi ise FALSE olur düşük olarak ayarlayın.
comment # 3 : Yorum # 1'de açıklanan mantığın ardından, bu komut PORTB portundaki çıkış pimi PINB2'sini yüksek voltaja ayarlar. LED'iniz ~ 300 ohm'luk bir dirençle bu pim portuna doğru bağlanmışsa ve bu direnç toprağa bağlıysa, LED açılmalıdır.
comment # 4 : LED, önceki yorumlarda açıklananlarla aynı nedenlerle sönmelidir.
Son muhakemeler:
a) Basma düğmesine basılmadığında (açık devre) PD2 giriş piminde voltaj salınımını önlemek için, LED'in yanlışlıkla yanmaması için bir aşağı çekme direnci (1 kOhm veya daha yüksek) yerleştirmenizi öneririm. bu rastgele voltaj salınımına.
b) Sorumluluk reddi notu: Burada açıklanan fikirler yalnızca eğitim amaçlı kullanılmalıdır ve elektronik uzmanına danışmadan herhangi bir gerçek sistemde KULLANILMAMALIDIR.
* /