Pemrograman ATmega8535

PEMROGRAMAN ATmega8535 UNTUK PEMULA
Mikrokontroller merupakan contoh suatu sistem komputer sederhana yang masuk dalam kategori embedded
komputer. Di dalam sebuah mikrokontroller terdapat komponen-komponen seperti: processor, memory, clock,
peripheral I/O, dll. Mikrokontroller memiliki kemampuan manipulasi data (informasi) berdasarkan suatu urutan
instruksi (program) yang dibuat oleh programmer. Mikrokontroller adalah piranti elektronik yang dikemas dalam
bentuk sebuah IC (Integrated Circuit) tunggal, sebagai bagian utama dan beberapa peripheral lain yang harus
ditambahkan, seperti kristal dan kapasitor.
Mikrokontroller AVR memiliki arsitektur RISC 8 Bit, sehingga semua instruksi dikemas dalam kode 16-bit (16-bits
word) dan sebagian besar instruksi dieksekusi dalam satu siklus instruksi clock. Bandingkan dengan instruksi
keluarga MCS-51 (arsitektur CISC) yang membutuhkan siklus 12 clock. RISC adalah Reduced Instruction Set
Computing sedangkan CISC adalah Complex Instruction Set Computing.
AVR dikelompokkan kedalam 4 kelas, yaitu ATtiny, keluarga AT90Sxx, keluarga ATmega, dan keluarga AT86RFxx.
Dari kesemua kelas yang membedakan satu sama lain adalah ukuran onboard memori, on-board peripheral dan
fungsinya. Dipilih Atmega8535 karena populasi yang banyak, sehingga ketersediaan komponen dan referensi
penunjang lebih terjamin.
Tabel Perbandingan Spesifikasi dan Fitur keluarga AVR

Keterangan:
• Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil perencanaan, yang harus
dijalankan oleh mikrokontroler
• RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan

pengolahan data ketika program sedang running
• EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data
secara permanen oleh program yang sedang running
• Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi program
• Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa
• UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial asynchronous
• PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa
• ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu untuk
kemudian dikonversi menjadi suatu nilai digital dalam range tertentu
• SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial synchronous
• ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam
sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal
Arsitektur ATmega8535
• Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C dan Port D
• ADC 10 bit sebanyak 8 Channel
• Tiga buah timer / counter
• 32 register
• Watchdog Timer dengan oscilator internal

• SRAM sebanyak 512 byte

• Memori Flash sebesar 8 kb
• Sumber Interrupt internal dan eksternal
• Port SPI (Serial Peripheral Interface)
• EEPROM on board sebanyak 512 byte
• Komparator analog
• Port USART (Universal Shynchronous Ashynchronous Receiver Transmitter)
Fitur ATmega8535
• Sistem processor 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz.
• Ukuran memory flash 8KB, SRAM sebesar 512 byte, EEPROM sebesar 512 byte.
• ADC internal dengan resolusi 10 bit sebanyak 8 channel
• Port komunikasi serial USART dengan kecepatan maksimal 2.5 Mbps
• Mode Sleep untuk penghematan penggunaan daya listrik
Konfigurasi pin ATmega8535
• VCC merupakan pin yang berfungsi sebagai pin masukan catudaya
• GND merupakan pin Ground
• Port A (PA0...PA7) merupakan pin I/O dan pin masukan ADC
• Port B (PB0...PB7) merupakan pin I/O dan pin yang mempunyai fungsi khusus yaitu Timer/Counter, komparator
Analog dan SPI
• Port C (PC0...PC7) merupakan port I/O dan pin yang mempunyai fungsi khusus, yaitu komparator analog dan Timer
Oscillator

• Port D (PD0...PD1) merupakan port I/O dan pin fungsi khusus yaitu komparator analog dan interrupt eksternal serta
komunikasi serial
• RESET merupakan pin yang digunakan untuk mereset mikrokontroler
• XTAL1 dan XTAL2 merupakan pin masukan clock eksternal
• AVCC merupakan pin masukan untuk suplai tegangan ADC
• AREF merupakan pin masukan tegangan referensi untuk ADC

Pin-out ATmega8535
Peta Memory ATmega8535
ATmega8535 memiliki ruang pengalamatan memori data dan memori program yang terpisah. Memori data terbagi
menjadi 3 bagian yaitu : 32 buah register umum, 64 buah register I.O, dan 512 byte SRAM internal. Register untuk
keperluan umum menempati space data pada alamat terbawah yaitu $00 sampai $1F. Sementara itu register khusus
untuk menangani I/O dan kontrol terhadap mikrokontroler menempati 64 alamat berikutnya, yaitu mulai dari $20
sampai $5F. Register tersebut merupakan register yang khusus digunakan untuk mengatur fungsi terhadap berbagai

peripheral mikrokontroler, seperti kontrol register, timer/counter, fungsi fungsi I/O, dan sebagainya. Register khusus
alamat memori secara lengkap dapat dilihat pada tabel dibawah. Alamat memori berikutnya digunakan untuk SRAM
512 byte, yaitu pada lokasi $60 sampai dengan $25F.

Peta Memori Data ATmega8535

Memori program yang terletak pada Flash Perom tersusun dalam word atau 2 byte karena setiap instruksi memiliki
lebar 16-bit atau 32bit. AVR ATmega8535 memiliki 4KByte x 16 Bit Flash Perom dengan alamat mulai dari $000
sampai $FFF. AVR tersebut memiliki 12 bit Program Counter (PC) sehingga mampu mengalamati isi Flash.

Memori Program AVR ATmega8535
Selain itu AVR ATmega8535 juga memilki memori data berupa EEPROM 8-bit sebanyak 512 byte. Alamat EEPROM
dimulai dari $000 sampai $1FF.
Status Register
Status register adalah register berisi status yang dihasilkan pada setiap operasi yang dilakukan ketika suatu instruksi

dieksekusi. SREG merupakan bagian dari inti CPU mikrokontroler.

Status Register ATmega8535
Penjelasan
• Bit7 >>> I (Global Interrupt Enable), Bit harus di Set untuk mengenable semua jenis interupsi.
• Bit6 >>> T (Bit Copy Storage), Instruksi BLD dan BST menggunakan bit T sebagai sumber atau tujuan dalam
operasi bit. Suatu bit dalam sebuah register GPR dapat disalin ke bit T menggunakan instruksi BST, dan sebaliknya
bit T dapat disalin kembali ke suatu bit dalam register GPR dengan menggunakan instruksi BLD.
• Bi5 >>> H (Half Cary Flag)
• Bit4 >>> S (Sign Bit) merupakan hasil operasi EOR antara flag -N (negatif) dan flag V (komplemen dua overflow).

• Bit3 >>> V (Two's Component Overflow Flag) Bit ini berfungsi untuk mendukung operasi matematis.
• Bit2 >>> N (Negative Flag) Flag N akan menjadi Set, jika suatu operasi matematis menghasilkan bilangan negatif.
• Bit1 >>> Z (Zero Flag) Bit ini akan menjadi Set apabila hasil operasi matematis menghasilkan bilangan 0.
• Bit0 >>> C (Cary Flag) Bit ini akan menjadi set apabila suatu operasi menghasilkan carry.
SISTEM MINIMUM ATmega8535
Sistem minimum (minsys) mikrokontroler adalah rangkaian elektronik minimum yang diperlukan untuk beroperasinya
IC mikrokontroler. Rangkaian ini kemudian bisa dihubungkan dengan rangkaian lain untuk menjalankan fungsi
tertentu.

Sistem Minimum Atmega8535
Untuk membuat rangkaian minimum ATmega8535 diperlukan beberapa komponen yaitu:
• IC mikrokontroler ATmega8535
• 1 XTAL 4 MHz atau 8 MHz atau 11.0592 MHz (XTAL1)
• 3 kapasitor kertas yaitu dua 22 pF (C2 dan C3) serta 100 nF (C4)
• 1 kapasitor elektrolit 4.7 uF (C12) 2 resistor yaitu 100 ohm (R1) dan 10 Kohm (R3)
• 1 tombol reset pushbutton (PB1)
Selain itu tentunya diperlukan power suply yang bisa memberikan tegangan 5V DC. Rangkaian sistem minimum ini
sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A.
PEMROGRAMAN ATmega8535
Prosedur umum untuk memprogram ATmega8535 secara berurutan adalah :

1. Menuliskan listing program menggunakan bahasa tingkat pemrograman tingkat tinggi (assembler, C, Basic,
Pascal, dll)
2. Mengkompail program ke dalam set instruksi ATmega8535 menggunakan software compiler (WinAVR, GCC,

CVAVR, BASCOM, AVR-Studio, dll)
3. Memasukkan file hasil proses compile atau make ke dalam IC ATmega8535 menggunakan software downloader
atau chip programmer (Ponyprog, CVAVR, USB-Downloader, dll). Biasanya file ini berekstensi .hex atau .bin.
4. IC ATmega8535 telah terprogram dan siap digunakan
Dalam praktikum ini digunakan bahasa C sebagai bahasa pemrograman dan Codevision AVR (CVAVR) sebagai
compiler. CVAVR dipilih karena tersedia dalam versi bajakan (hehehe…) dan memiliki fasilitas Code Wizard yang
sangat membantu. Software chip programmer menggunakan CVAVR standard V 1.24, Ponyprog2000 atau Universal
ISP Programmer V 1.04, tergantung mode download, menggunakan port paralel atau port USB.
Jika menggunakan PC dengan fasilitas port paralel, pemrograman dapat dilakukan langsung menggunakan CVAVR.
Sebelumnya dibuat dulu kabel downloader, untuk menghubungkan port paralel PC dengan port SPI (Serial Peripheral
Interface) pada mikrokontroler.

Skema Kabel Downloader Paralel
Jika pemrograman menggunakan laptop, yang hanya mengandalkan USB, maka harus dipakai peralatan downloader
via port USB, seperti AVRdoper, USB-downloader, dll.
Langkah untuk menghasilkan file .hex dengan menggunakan CVAVR secara umum adalah :

1. Membuat Project baru, diberi nama.
2. Membuat file Source baru, dalam bahsa C, edit, simpan.
3. Hubungkan/koneksikan file Source dengan Project yang ada.
4. Lakukan proses make (shift+F9) untuk membuat file .hex.
5. Jika ada yang salah, dikoreksi sampai berhasil
FASILITAS DASAR INPUT-OUTPUT
Fasilitas input/output merupakan fungsi mikrokontroller untuk dapat menerima sinyal masukan (input) dan
memberikan sinyal keluaran (output). Sinyal input maupun sinyal output adalah berupa data digital 1 (high, mewakili
tegangan 5 volt) dan 0 (low, mewakili tegangan 0 volt). Mikrokontroller ATMEGA8535 memiliki 4 buah PORT 8 bit
bidirectional yang dapat difungsikan sebagai PORT input maupun PORT output yaitu PORTA, PORTB , PORTC, dan
PORT D. Register digunakan untuk mengatur fungsi dari pin-pin pada tiap port. Register dapat dianalogikan sebagai
kumpulan switch on/off yang digunakan untuk mengaktifkan fungsi apa yang akan dipakai dari port mikrokontroller.
Pada setiap port pin terdapat 3 buah register 8 bit: DDRxn, PORTxn, dan PINxn.
Register DDRxn digunakan untuk menentukan arah dari pin yang bersangkutan. Jika DDRxn diberikan nilai 1 (high),
maka pin digunakan sebagai output. Jika DDRxn diberikan nilai 0 (low), maka pin difungsikan sebagai input. Register
PORTxn digunakan untuk mengaktifkan pull-up resistor (pada saat pin difungsikan sebagai input), dan memberikan
nilai keluaran pin high/low (pada saat difungsikan sebagai output). PINxn merupakan register yang berfungsi untuk
mengetahui keadaan tiap-tiap pin pada mikrokontroller. Register ini digunakan untuk membaca keadaan pin pada
saat difungsikan sebagai input.


Rangkaian Output LED dan Input Tombol
Percobaan pertama adalah menyalakan LED sesuai dengan pola tertentu. Sesuai skema, LED dikonfigurasikan
dalam posisi SINK, artinya LED menyala jika port yang bersesuaian diberi logika 0 (tegangan 0 volt atau dianggap
ground). Demikian halnya dengan saklar tombol. Jika ditekan, maka port yang bersesuaian akan terhubung ke
ground.
Tugas : menyalakan LED yang terhubung ke port B, selang seling ON dan OFF dimulai dari port B yang paling besar
(PORT B.7)
Penyelesaian :
1. Konfigurasikan PORT B sebagai keluaran
2. Kirimkan urutan bilangan 1 0 1 0 1 0 1 0

Pelaksanaan tanpa menggunakan CodeWizard AVR:
1. Hubungkan PC dengan minimum system 8535 melalui port ISP. Nyalakan catu daya.
2. Buka Codevision AVR, lakukan konfigurasi chip programmer. Pilih menu Setting>>Programmer, lalu pilih type
Kanda System STK200+/300.
3. Pilih menu File>>New, pilih Project.
4. Jika ditawari untuk menggunakan CodeWizardAVR, pilih No saja dulu.
5. Beri nama project baru dengan nama “kenalan” (tanpa “)
6. Buat file source C. Pilih menu File>> New, pilih Source.
7. Ketikkan listing seperti ini.

#include

void main(void)
{
DDRB=0xFF;
PORTB=0xFF;
while(1)
{
PORTB=0xAA;
}
}
8. Simpan dulu file C nya. Beri nama “nocw” saja.
9. Lakukan konfigurasi project. Pilih menu Project>>Configure. Tekan tombol Add, lalu pilih
file dengan nama “nocw”. Pilih tab C Compiler. Pada pilihan Chip pilih Atmega8535. Ubah

Clock menjadi 4 MHz. Lalu pilih tab After Make, centang pilihan Program the Chip. Setelah
semua selesai, klik OK.
10. Simpan dulu filenya.
11. Lakukan compile dengan menekan shift+F9. Jika tidak ada pesan error atau peringatan, maka
klik Program. Tunggu sebentar, semoga tidak ada kesalahan teknis.

12. Amati keluaran LED pada sismin.
Pelaksanaan menggunakan CodeWizard AVR:
1. Hubungkan PC dengan minimum system 8535 melalui port ISP. Nyalakan catu daya.
2. Buka Codevision AVR, lakukan konfigurasi chip programmer. Pilih menu
Setting>>Programmer, lalu pilih type Kanda System STK200+/300.
3. Pilih menu File>>New, pilih Project.
4. Jika ditawari untuk menggunakan CodeWizardAVR, pilih Yes.
5. Pada tab Chip, pilih 8535 dengan clock 4 MHz.
6. Pilih tab Ports, lalu pilih tab Port B. Setelah itu klik semua pilihan di bawah tulisan Data
Direction dari In berubah menjadi Out. Klik juga semua pilihan di bawah tulisna Pull-up/Output
Value dari 0 menjadi 1.
7. Pilih menu File>>Generate, save and exit.
8. Beri nama sourcenya dengan nama withcw
9. Beri nama projectnya dengan nama kenalan2. juga file cwp-nya.
10. Lihatlah, program awal sudah dibuatkan. Scroll ke bawah, amati tulisan DDRB dan PORT B.
Bandingkan nilainya dengan listing program sebelumnya. Sama …
11. Scroll lagi ke bawah. Cari tulisan //place your code here. Di bawahnya tuliskan perintah
PORTB=0xAA;
12. Simpan dulu file C nya.
13. Lakukan konfigurasi project. Pilih menu Project>>Configure. Lalu pilih tab After Make,

centang pilihan Program the Chip. Setelah semua selesai, klik OK.
14. Lakukan compile dengan menekan shift+F9. Jika tidak ada pesan error atau peringatan, maka
klik Program. Tunggu sebentar, semoga tidak ada kesalahan teknis.
15. Amati keluaran LED pada sismin.
PENJELASAN
1. Semua port 8 bit memiliki indeks 0 s/d 7. Misalkan PORTB.0, PORTB.1 s/d PORTB.7
2. Indeks port yang paling besar merupakan bagian Most Significant Bit (MSB).
3. Indeks port yang paling kecil merupakan bagian Least Significant Bit (LSB).
4. Penulisan bilangan biner, yang paling kiri adalah MSB, dan sebaliknya.
5. Biasakan menuliskan data dalam format Heksadesimal. Syntax-nya adalah 0xXX di mana XX
merupakan bilangan heksadesimal. Misalkan dituliskan PORTB=0xAA, artinya kita
memasukkan data AA atau 1 0 1 0 1 0 1 0 ke port B.
6. DDRB=0xFF artinya kita memasukkan bilangan 1 1 1 1 1 1 1 1 ke Data Direction Register B,
yang membuat semua pin B menjadi output.
7. PORTB=0xFF artinya kita memasukkan bilangan 1 1 1 1 1 1 1 1 ke Register PORT B, yang
membuat semua pin B menjadi berlogika high.

8. Perintah #include artinya kita menggunakan file Header mega8535.h yang berisi perintahperintah yang dapat dikenali oleh compiler. Nanti kita akan menggunakan header-header lainnya.
9. void main(void) menunjukkan program utama.
10. Tulisan yang berada di belakan tanda // dan berwarna biru dianggap sebagai komentar, dan
tidak dijalankan dalam program. Demikian juga tulisan di antara tanda /* …. */
11. while (1) artinya adalah looping yang tanpa henti.
LATIHAN 1. LAMPU BERKEDIP
Masukkan listing berikut ini ke dalam 8535.
#include
#include
void main()
{
DDRB=0xFF;
while(1)
{
PORTC=0;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
}
}
PENJELASAN
1. Pada program di atas, digunakan file header untuk mengijinkan digunakannya perintah/fungsi
delay_ms(1000).
2. Perintah ini artinya melakukan delay/penundaan dalam satuan milidetik, sebanyak data yang
dimasukkan dalam (…).
3. Agar lama delaynya akurat, maka setting clock pada 8535 harus persis sama dengan nilai
osilator kristal yang dipasang.
TIPE DATA
Tipe data yang dapat dioperasikan dalam C untuk aplikasi mikrokontroler adalah :
1. byte. Mulai 0 s/d 255 (8 bit)
2. char. Mulai -128 s/d 127 (8 bit)
3. unsigned. Sama dengan byte. (8 bit)
4. int. Mulai -32768 s/d 32767 (16 bit)
5. Unsigned int. Mulai 0 s/d 65535 (16 bit)
6. long int (int versi 32 bit)
7. float dan double mulai 1,175e-38 s/d 3,402e38 (32 bit)

VARIABEL
Variabel Global, digunakan di seluruh program. Dideklarasikan di luar fungsi, di bagian paling
atas. Saat program berjalan, jika tidak ditentukan, akan bernilai 0. Variabel Lokal, digunakan
secara lokal di dalam fungsi tertentu. Dideklarasikan di dalam fungsi tersebut, dan tidak
diinisialisasikan pada awal program berjalan. Variabel dalam bentuk Array, indeks paling
kecilnya adalah 0.
OPERATOR ARITMATIKA
* Multiplication x*y kalikan x dengan y
/ Division x/y bagi x dengan y
% Modulo x%y sisa x dibagi oleh y
+ Addition x+y jumlahkan x dan y
- Subtraction x-y Kurangkan y dari x
++ Increment x++ Increment x setelahnya
-- Decrement --x Decrement x sebelumnya
- Negation -x Kalikan x dengan –1
OPERATOR LOGIKA.
> Greater than x>y 1 jika terpenuhi
>= Greater than or equal to x>=y 1 jika terpenuhi
< Less than x