Sistem Programlama 5. Hafta Doküman

Port D’nin Dışarıdan Led Bağlanarak Kullanılması

  • PD0 ve PD1’e Birer Led Bağanması.

  • 3 Led ile Trafik Işığı.

  • PORTE’ye Dışardan Buton Bağlanması.

 

 

PD0 ve PD1’e birer led bağlı.

#include ;
#include "inc/tm4c123gh6pm.h"
// stellaris #include "inc/lm4f120h5qr.h"

void init_port_D() {
	volatile unsigned long delay;
	SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOD; // Port D’yi aktiflestir
	delay = SYSCTL_RCGC2_R;  	// zaman gecirmek icin
	GPIO_PORTD_DIR_R |= 0x0F;	// PD 3,2,1,0 pinlerini cikis yap
	GPIO_PORTD_AFSEL_R & = ~0x0F; // PD 3,2,1,0 pinlerini alternatif fonksinunu 0 yap
	GPIO_PORTD_DEN_R |= 0x0F;	// PD 3,2,1,0 pinlerini aktiflestir
}

int main() {
	volatile unsigned long delay;

	init_port_D();

	while (1) {
   	GPIO_PORTD_DATA_R |= 0b0010; // PD1’i 1 yap
   	GPIO_PORTD_DATA_R & = ~0b0001; // PD0’i 0 yap

   	for (delay = 0 ; delay < 400000 ; delay++)
       		/* bos dongu */;

   	GPIO_PORTD_DATA_R |= 0b0001; // PD0’i 1 yap
   	GPIO_PORTD_DATA_R & = ~0b0010; // PD1’i 0 yap

   	for (delay = 0 ; delay < 400000 ; delay++)
       		/* bos dongu */;
	}
}

3 Led ile Trafik Işığı

PD1’e kırmızı, PD2’ye sarı (şekilde mavi led), PD3’e yeşil led bağlı.

#include ;
#include "inc/tm4c123gh6pm.h"
// stellaris #include "inc/lm4f120h5qr.h"

void init_port_D() {
	volatile unsigned long delay;
	SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOD; // Port D’yi aktiflestir
	delay = SYSCTL_RCGC2_R;  	// zaman gecirmek icin
	GPIO_PORTD_DIR_R |= 0x0F;	// PD 3,2,1,0 pinlerini cikis yap
	GPIO_PORTD_AFSEL_R & = ~0x0F; // PD 3,2,1,0 pinlerini alternatif fonksinunu 0 yap
	GPIO_PORTD_DEN_R |= 0x0F;	// PD 3,2,1,0 pinlerini aktiflestir
}

#define BIT_SET(PORT, PIN) do { 
	PORT |= 1 << PIN; 
} while (0)

#define BIT_RESET(PORT, PIN) do { 
	PORT & = ~(1 << PIN); 
} while (0)

#define PORTD (GPIO_PORTD_DATA_R)

int main() {
	volatile unsigned long delay;

	init_port_D();

	while (1) {
  	// KIRMIZI=1, SARI=0, YESIL=0
  	BIT_SET(PORTD, 1);
   	BIT_RESET(PORTD, 2);
   	BIT_RESET(PORTD, 3);
   	for (delay = 0 ; delay < 4000000 ; delay++)
  		 /* bos dongu */;

   	// KIRMIZI=1, SARI=1, YESIL=0
  	BIT_SET(PORTD, 1);
   	BIT_SET(PORTD, 2);
   	BIT_RESET(PORTD, 3);
  	for (delay = 0 ; delay < 4000000 ; delay++)
  		 /* bos dongu */;

  	// KIRMIZI=0, SARI=0, YESIL=1
  	BIT_RESET(PORTD, 1);
   	BIT_RESET(PORTD, 2);
   	BIT_SET(PORTD, 3);
  	for (delay = 0 ; delay < 4000000 ; delay++)
  		 /* bos dongu */;

  	// SARI
  	BIT_RESET(PORTD, 1);
   	BIT_SET(PORTD, 2);
   	BIT_RESET(PORTD, 3);
  	 for (delay = 0 ; delay < 4000000 ; delay++)
  		 /* bos dongu */;

	}
}
R
R

PORTE’ye Dışardan Buton Bağlama

 

Button’lara 10 K direnç, Led’lere 330 ohm direnç bağlayınız.

Sağdaki button PortE 4. pine, soldaki button Port E 5. pine bağlanmıştır.

LED ler Port E 1,2 ve 3. pinlere bağlanmıştır. 

Koda dikkat ederek bağlantıları kontrol ediniz.

#include ;
#include "inc/tm4c123gh6pm.h"
/**Bu fonksiyon portE’ye erişip müdahale edebilmemiz için gerekli ayarları yapıyor.*/
void init_port_E() {
   volatile unsigned long tmp; // bu degisken gecikme yapmak icin gerekli
   SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOE;   // 1) E portunun osilatörünü etkinleştir
   tmp = SYSCTL_RCGCGPIO_R;    	// allow time for clock to start
   GPIO_PORTE_LOCK_R = 0x4C4F434B;   // 2) unlock GPIO Port E
   GPIO_PORTE_CR_R = 0x3F;         // allow changes to PE5-0 //PE5-0 değişikliklerine izin ver
                                   // only PE0 needs to be unlocked, other bits can't be locked
    			 // Sadece PE0 kilidinin açılması gerekir, diğer bitler kilitlenemez
   GPIO_PORTE_AMSEL_R = 0x00;    	// 3) disable analog on PE //PE'de analog devre dışı bırak
   GPIO_PORTE_PCTL_R = 0x00000000;   // 4) PCTL GPIO on PE4-0
   GPIO_PORTE_DIR_R = 0x0F;      	// 5) PE4,PE5 in, PE3-0 out
   GPIO_PORTE_AFSEL_R = 0x00;    	// 6) disable alt funct on PE7-0
   GPIO_PORTE_PUR_R = 0x30;      	// enable pull-up on PE5 and PE4
   	   	   	   	   	 //PE4 ve PE5'te pull up'ı etkinleştir ( BUTON İÇİN)
   GPIO_PORTE_DEN_R = 0x3F;      	// 7) enable digital I/O on PE5-0 // portE 5-0 giriş çıkış  etkinlerştir.
   }
int main(void) {
   init_port_E();                   // portE’yi ayarla
 volatile unsigned long delay; // compiler optimizasyonunu engellemek icin volatile kullandik
   int button_sag, button_sol;
   while (1) {
  	  // sagdaki button 4. bit, soldaki button 5. bit // button basiliyken 0, basili degilken 1 değerini alır.
    button_sag = GPIO_PORTE_DATA_R & =0x20; // sagdaki buttonun değerini oku, değişkene  değerini ata
    button_sol = GPIO_PORTE_DATA_R & =0x10; // soldaki buttonun değerini oku, degiskene degerini ata
if (button_sag == 0) {    // kirmizi ledi yak
  	 GPIO_PORTE_DATA_R |=0x02; // 0x02 portE in 1.bitini çıkış yap  kırmızı ledi yak
  	 GPIO_PORTE_DATA_R & = ~(0x09); // portE in 3. Bitini çıkış yap yeşil ledi söndür
  	 }
else if  (button_sol == 0) {
           GPIO_PORTE_DATA_R |= 0x04;// portE in 2.bitini çıkış yap  mavi  ledi yak
           GPIO_PORTE_DATA_R & = ~(0x09); // portE in 3. Bitini çıkış yap yeşil ledi söndür
 	 }
else {
GPIO_PORTE_DATA_R & = ~(0x02); //  portE in 1.bitini çıkış yap  kırmızı ledi söndür
  	GPIO_PORTE_DATA_R & = ~(0x04); // portE in 2.bitini çıkış yap  mavi  ledi södür
  	 GPIO_PORTE_DATA_R |= 0x09; // portE in 3. Bitini çıkış yap yeşil ledi yak
  	 }
      }
   }
R
R