Posted by : Niam Tamami March 16, 2011

Pada postingan kali ini saya akan sedikit memaparkan mengenai pemrograman input output AVR. Disini saya menggunakan ATMEGA16 sebagai media pembelajaran.

Dalam bab ini yang perlu ditekankan adalah pemahaman register DDRn dan PORTn. DDRn (Data Direction Register port ke-n) adalah register pengatur settingan bahwa PORT tersebut berfungsi sebagai input atau output.Pemberian nilai logika 1 tiap bit DDR menyatakan bahwa port tersebut digunakan sebagai output, Contoh : DDRA = 0xFF, menyatakan bahwa nilai bit-bit DDRA = |1|1|1|1|1|1|1|1| ini menandakan bahwa seluruh PORTA digunakan sebagai output. Beberapa contoh output adalah nyala led, kontrol motor,dll.

Sedangkan pemberian nilai logika 0 tiap bit DDR menyatakan bahwa port tersebut digunakan sebagai input, Contoh : DDRA = 0x00, menyatakan bahwa nilai bit-bit DDRA = |0|0|0|0|0|0|0|0| ini menandakan bahwa seluruh PORTA digunakan sebagai input. Beberapa contoh output adalah input sensor dan switch,dll.

Selanjutnya mengenai register PORTn.pemberian logika 1/0 pada PORT difungsikan sebagai output menyatakan bahwa nilai logika awal saat mikrokontroler mengeksekusi progam tersebut sesuai dengan nilai register PORT.Misal DDRA=0xFF; PORTA=0xFF; menyatakan bahwa nilai tiap bit PORTA = 1.
Sebaliknya, saat PORT disetting sebagai input maka nilai 1 pada bit-bit register PORT menyatakan bahwa input pull-up diaktifkan. Pull-up adalah kondisi saat ada logika ambang dianggap logika 1.Saat PORT disetting sebagai input maka nilai 0 pada bit-bit register PORT menyatakan bahwa input floating (logika mengambang tidak diproses) diaktifkan.

Contoh program :
Menggeser nyala led tiap 1 detik


#include <mega16.h>
#include <delay.h>


unsigned char temp;
// Declare your global variables here


void main(void)
{
// Declare your local variables here


// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;


// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;


// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 
PORTC=0xFF;
DDRC=0xFF;


// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;
temp=0b100000000;                       //mengeset nilai PORTC.7 = 1
while (1)
      {
      // Place your code here
      temp>>=1;                         //menggeser bit 1 kali tiap siklus
      PORTC=~temp;                      //mengoutputkan nilai temp ke PORTC
      if (temp==0) temp=0b100000000;    //jika temp sudah bernilai 0, nilai temp = 128 (mengeset nilai PORTC.7 = 1)
      delay_ms(1000);                   //delay waktu 1 detik;
      };
}

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Entri Populer

tweet

- Copyright © 2013 blog.nitbot.com -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -