2.7.4
Port sebagai input/output digital
Seperti yang telah disebutkan ATmega16
mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD. Keempat
port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up.
Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn.
Huruf ‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili nomor bit.
Bit DDxn terdapat pada I/O address DDRx, bit
PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address
PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah
pin. Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0
maka Px berfungsi sebagai pin input. Bila PORTxn diset 1 pada saat pin
terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk
mematikan resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai
pin output.
Pin port adalah tri-state setelah kondisi
reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka
pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi
sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port
dari kondisi tri-state (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1,
PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up
enabled (DDxn=0, PORTxn=1)atau kondisi output low (DDxn=1,
PORTxn=0). Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama
lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong
high driver dengan sebuah pull-up. Jika ini bukan suatu masalah, maka bit
PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up dalam semua
port. Peralihan
dari kondisi input dengan pull-up ke kondisi output low juga
menimbulkan masalah yang sama. Kita harus menggunakan kondisi tri-state
(DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi
transisi.
Tabel 2.5 Konfigurasi
pin port
Bit 2 – PUD : Pull-up Disable
Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan
walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up
(DDxn=0, PORTxn=1).