Professional Documents
Culture Documents
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 bitbit 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; }; }