7. Port Programlama Şekil 2.1. Atmega16 mikrodenetleyici pin şeması A, B, C ve D portları için Register yapıları benzer şekildedir. -42-
7.1. Port Yönlendirme Mikrodenetleyicinin A, B, C, D ve varsa diğer portlarının I/O (Input/Output) olarak nasıl çalışacağının belirlenmesi gerekmektedir. MikroC dilinde ilgili portun yapılandırılması amacıyla DDRA, DDRB, DDRC, DDRD gibi port adının son karakter olarak verildiği komut yapısı kullanılmaktadır. I/O belirlenmesi Pin bazında yapılabilmektedir. Bu amaçla kullanılacak bit değerleri Tablo 2.1 de görülmektedir. Tablo 2.1. Port yapılandırmasında Bit kullanımı Yapılandırma Biti İşlev 0 Input (Giriş) 1 Output (Çıkış) Örnek 1: A portunun 4 MSB pininin INPUT, 4 LSB pininin de OUTPUT olarak ayarlanmasını sağlayan kodu yazınız. A Portu MSB LSB PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 Input Input Input Input Output Output Output Output 0 0 0 0 1 1 1 1 0 F 0F DDRA = 0x0F; Örnek 2: Aşağıdaki tabloda A portunun yapılandırılmasına ilişkin çeşitli kodlar görülmektedir. Komut Açıklama DDRA = 0x00; A portunun tüm pinleri INPUT olarak ayarlanır DDRA = 0xFF; A portunun tüm pinleri OUTPUT olarak ayarlanır DDRA = 0x0F; A portunun 4 MSB pini INPUT, 4 LSB pini OUTPUT olarak ayarlanır DDRA = 0xAA; A portunun 0, 2, 4, 6 nolu pinleri INPUT; 1, 3, 5, 7 nolu pinleri OUTPUT olarak ayarlanır DDRA.B0 = 1; A portunun 0 nolu pini OUTPUT olarak ayarlanır. DDRA.B1 = 0; A portunun 1 nolu pini INPUT olarak ayarlanır. NOT: Mikrodenetleyicilerin kullanılmayan Pinlerinin OUTPUT olarak yönlendirilmeleri gerekir. Bu sayede sistemin dış olumsuzluklardan etkilenmesi engellenmiş olur. -43-
7.2. Porta Veri Gönderme Çıkış olarak yapılandırılmış Portun ilgili pinlerine veri gönderme amacıyla PORTA, PORTB, PORTC, PORTD gibi port adının son karakter olarak verildiği komut yapısı kullanılmaktadır. Örnek 1: Aşağıdaki tabloda A portunun ilgili pinlerinin SET/RESET edilmesine yönelik çeşitli kodlar görülmektedir. Komut Açıklama PORTA = 0x00; A portunun tüm pinleri RESET edilir PORTA = 0xFF; A portunun tüm pinleri SET edilir PORTA = 0x0F; A portunun 4 MSB pini RESET, 4 LSB pini SET edilir PORTA.B0 = 1; A portunun PA0 pini SET edilir Örnek 2: A portunun tüm bitlerini SET etmek için gerekli programı MikroC dilinde kodlayınız. // ser_port_out_1.c // A portunun tüm bitlerinin SET edilmesi void main() DDRA = 0xFF; // A portunun tüm pinleri OUTPUT olarak ayarlanır. PORTA = 0xFF; // A portunun tüm pinleri SET edilir. Örnek 3: A portunun 4 LSB pinini OUTPUT, 4 MSB pinini ise INPUT olarak ayarlayıp, çıkışların SET edilmesi için gerekli programı MikroC dilinde kodlayınız. // ser_port_out_2.c // A portunun 4 LSB pini OUTPUT, 4 MSB pini de INPUT olarak ayarlanıp, çıkışların SET edilmesi void main() DDRA = 0x0F; PORTA = 0x0F; -44-
7.3. Porttan Veri Okuma Giriş olarak yapılandırılmış Portun ilgili pinlerinden veri okuma amacıyla PINA, PINB, PINC, PIND gibi port adının son karakter olarak verildiği komut yapısı kullanılmaktadır. Örnek 1: Aşağıdaki tabloda A portunun ilgili pinlerinden OKUMA yapmaya yönelik çeşitli kodlar görülmektedir. Komut Açıklama Okunan = PINA; A portundan 8 bit veri okunur Okunan = PINA.B0; A portunun PA0 Biti okunur Okunan = PINA.B6; A portunun PA6 Biti okunur Örnek 2: A portundan girilen 8 Bit veriyi B Potuna Gönderen programı MikroC dilinde kodlayınız. Örnek 3: A portunun 5. Biti 1 ise, B Portunun 8 biti SET değilse RESET edilmesi için gerekli programı MikroC dilinde kodlayınız. -45-
Örnek 4: A portundan çeşitli okuma yöntemleri. Örnek 5: A portuna bağlı bir butona basıldığında C portundaki karşılığı olan LED'in (birden fazla butona aynı anda basıldığında ise 8 LED'in birlikte) yanmasını sağlayan programı mikroc dilinde kodlayınız. //ser_port_inout_01.c void main() DDRA = 0x00; //PORTA Giriş DDRC = 0xFF; //PORTC Çıkış for (;;) switch (PINA) case 0x00: case 0x01: case 0x02: case 0x04: case 0x08: case 0x10: case 0x20: case 0x40: case 0x80: PORTC = PINA; break; default : PORTC = 0xFF; -46-
Örnek 5: 16 bitlik bir sayının A ve B portlarında gösterilmesini sağlayınız. Kaynak Kodlar Simülasyon -47-