TEKS BERJALAN

SELAMAT DATANG DI WEB HENRY TORUAN

Kamis, 24 Desember 2009

Presentasi Seminar Nasional UISU 2009

Slide presentasi ini merupakan materi pada acara seminar nasional tentang instrumentasi disajikan pada seminar yang diselenggarakan oleh UISU

Seminar Nasional UISU 2009
Selengkapnya...

Jumat, 04 Desember 2009

SIMULASI MIKROKONTROLER (AVSIM51)

oleh Henry Toruan

Simulasi mikrokontroler diperlukan untuk melihat pengaruh instruksi yang diberikan pada mikrokontroler tersebut. Hal ini sangat membantu saat mempelajari instruksi-instruksi mikrokontroler dan perancangan suatu aplikasi mikrokontroler.

Simulasi untuk mikrokontroler secara umum dapat dilakukan dengan melakukan 3 tahap, yaitu :

1. Pembuatan listing program

2. Pembuatan file kompilasi

3. Melakukan simulasi dengan file yang sudah terkompilasi



Listing program yang akan dibuat menggunakan text editor Notepad. File yang sudah dibuat selanjutnya disimpan menggunakan ekstensi h51 pada lokasi yang sama. File program akan dikompilasi menggunakan program assembler 51xasm untuk menghasilkan file hexadecimal yang akan diperlukan untuk melakukan simulasi. Simulator mikrokontroler yang akan digunakan adalah Avsim51 untuk mikrokontroler keluarga intel 8051.

Program latihan pertama menggunakan Notepad untuk melihat perubahan isi memori dan akumulator dengan instruksi MOV dapat dilihat pada Gambar 1

clip_image002

Gambar 1 Program latihan 1

Proses kompilasi dapat dilihat pada Gambar 2 dimana kita dapat memanggil program 51xasm dan mengetikkan nama file tanpa ekstensi. Secara otomatis program akan menghasilkan file hexadecimal dengan nama yang sama dengan nama programnya bila tidak terdapat pesan kesalahan seperti pada Gambar 3.

clip_image004

Gambar 2 Proses kompilasi program

clip_image006

Gambar 3 Tampilan proses kompilasi saat telah berhasil

Bila masih ada kesalahan, kita dapat melihat pesan kesalahan tersebut dengan membuka file berekstensi prn. Setelah perbaikan dilakukan, dapat dilakukan proses kompilasi kembali. Bila telah sukses dikompilasi, file prn yang terbentuk dapat dilihat pada Gambar 4. Report disebelah kiri adalah alamat memori dan instruksi dalam bahasa mesin atau heksadesimalnya. File heksadesimalnya sendiri dapat dilihat pada Gambar 5.

clip_image008

Gambar 4. File report hasil kompilasi

clip_image010

Gambar 5. File hexadecimal hasil kompilasi

Kita dapat menjalankan program simulasi mikrokontroler avsim51.exe yang terdapat dalam direktori D:\MC8031 dengan mengetikkan avsim51 dalam direktori tersebut pada MsDos Prompt.

Menu awal program dapat dilihat pada Gambar 5.

clip_image012

Gambar 5 Menu awal program simulasi mikrokontroler Avsim51

Pada simulasi ini kita akan menggunakan mikrokontroler keluarga 8031 sehingga kita mengetikkan c pada menu pilihan sehingga tampil menu berikutnya seperti tampak pada Gambar 6.

clip_image014

Gambar 6 Menu pilihan Avsim51 untuk mikrokontroler keluarga 8031

Ketik L(Load) > P(Program) dan ketikkan nama file hexadecimal-nya, yaitu latih1.hex sehingga tampilan program dapat dilihat pada Gambar 7:

clip_image016

clip_image018

Gambar 7 Hasil simulasi program latih1

Untuk melakukan simulasi secara bertahap kita tekan F10 dan lihat pengaruhnya pada mikrokontroler untuk setiap tahap. Untuk melakukan reset atau pengalamatan dari suatu lokasi memori dapat dilakukan dengan menekan tombol esc dan menggantikan alamat pada PC (Program Counter) dengan mengetikkan angka tertentu. Untuk keluar dari program pilih menu Quit dan Exit.

Program latihan kedua, hasil proses kompilasinya dan file hexadesimalnya dapat dilihat pada Gambar 8, 9 dan 10.

clip_image020

Gambar 8 Program latihan kedua

clip_image022

Gambar 9 Hasil kompilasi program latihan kedua

clip_image024

Gambar 10 Hasil file hexadecimal program latihan kedua

Hasil simulasi program latihan kedua dapat dilihat pada Gambar 11.

clip_image026

clip_image028

Gambar 11 Hasil simulasi program latihan kedua


Selengkapnya...

Kamis, 03 Desember 2009

Tutorial EAGLE 4.16r2 Professional

oleh : Henry Toruan

1. Untuk memulai Eagle Board, Pilih File>New>Board

clip_image002




2. Untuk mengambil komponen, Pilih icon Add clip_image004 Pilih katagori komponen dan komponennya

3. Untuk mengambil komponen mikrokontroler AT89S51, Pilih Atmel>DIL40

4. Untuk mengambil komponen resistor, Pilih rcl>0204/7 (7.5 mm)

5. Untuk mengambil komponen resistor pack 9 pin, Pilih resistor-net>RN-9

6. Untuk mengambil komponen Led petak kecil, Pilih led>Led2x5 (2x5mm)

7. Untuk meletakkan komponen, Bawa komponen ke lokasi lembar kerja yang diinginkan, putar posisinya dengan klik kanan mouse dan letakkan dengan klik kiri mouse.

Untuk mengakhirinya Tekan tombol esc dan Pilih cancel.

8. Untuk memperbesar/memperkecil tampilan saat pengeditan, gunakan scroll mouse

9. Untuk menghapus komponen, Pilih icon Delete clip_image005 dan klik kiri pada komponen

10. Untuk memindahkan komponen, Pilih icon Moveclip_image006 >klik kiri mouse pada komponen, tahan sambil bawa dan lepaskan pada lokasi yang diinginkan.

11. Untuk melakukan proses undo, Pilih Edit>Undo atau alt+backspace atau F9. Untuk buat short cut baru, Pilih Options>Assign

12. Pengaturan jalur, Pilih icon Wire clip_image007 . Pilih layer, jenis bengkokan, tebal jalur dan jenis pastikan continuous.

Untuk menghubungkan jalur, klik kiri mouse pada ujung kaki awal komponen, bawa pada ujung akhir komponen dan klik kiri 2x.

13. Untuk penambahan teks, Pilih icon Teks clip_image008 , atur letak layer, besar font dan pastikan jenisnya proportional. Ketikkan teks yang diinginkan>OK. Bawa, putar dengan klik kanan mouse dan letakkan pada posisi yang diinginkan dengan klik kiri. Untuk akhiri, tekan tombol esc>ok.

14. Pengaturan Grid, Pilih icon Grid. Pilih View > Grid. Pengaturan defaultnya adalah :

clip_image010

Untuk memudahkan kerja, pilih satuan mm.

15. Pengaturan background, Pilih Options>User Interface. Pengaturan defaultnya adalah :

clip_image012

16. Pengaturan pencetakan

Pilih Bagian yang dicetak contohnya untuk pcb bottom layer, Pilih icon Display clip_image013 Pilih Bottom(16), Pads(17), Vias(18)

Untuk mencetak, Pilih File>Print>Page>Atur posisi Vertical dan Horizontalnya agar dapat mencetak 6 buah layout pada satu kertas untuk 6 kali pencetakan.

Catatan pada versi 5 telah ada fasilitas print preview.

Skematik Sistem minimum AT89S51 yang dikerjakan pada pelatihan guru SMK N-1 Berastagi :

clip_image015

Layout PCB yang dikerjakan pada pelatihan guru SMK N-1 Berastagi :

clip_image017

TAMBAHAN :

Untuk mengkopi komponen, pilih ikon kopi clip_image018 klik komponen yang akan dikopi > Atur posisinya > Letakkan pada lembar kerja.

· Untuk DB9 yang melekat pada board > con-subd > F09HP

· Untuk konektor header > con-lstb > MA05-2 (2baris @5pin)

· Untuk Led > led > LD 260

· Untuk Resistor > rcl

· Untuk Elco > rcl > E1.8-4

· Untuk Kristal > crystal > HC49U

· Untuk Dioda > diode > D5

· Untuk jumper > jumper > JP1 (2pin)

· Untuk dip switch > switch omron > B3F-10XX

Untuk mengedit jalur jalur PCB apakah telah terkoneksi baik dengan pad-nya, maka hilangkan dahulu layer View > Display>Hide layers >tPlace non aktifkan. Aktifkan hanya layer top, button, pad dan vias.

Untuk buat jumper di lapis atas, gunakan ikon via clip_image019 dan letakkan pada posisi serapat mungkin. Gunakan ikon wire clip_image020 kemudian pilih layer Top dan hubungkan kedua via yang ada.

clip_image022

clip_image024

Bila bosan dengan tampilan kerja Ubah dengan Option > User Interface dan atur settingnya.

Untuk Pengaturan bagian pinggir PCB untuk pentanahan, gunakan ikon clip_image025 dan gunakan pad bentuk lingkaran untuk tempat baut alas PCB.

clip_image027

Hasilnya dapat menyegarkan suasana kerja. Tapi untuk kerja lama setting defaultnya lebih baik.

clip_image029


Selengkapnya...

Kamis, 12 November 2009

PERCOBAAN 2 89S51

SAKLAR PUSH BUTTON

referensi dari internet

TUJUAN:

1. Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar

2. Mahasiswa dapat memahami program assembly untuk mengambil data saklar dan mengeluarkan data ke LED.

3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.



clip_image001
Gambar 2.1. Rangkaian Interface Push Button

Pada gambar 2.1 tersebut tampak rangkaian push button, bila saklar ditekan maka port sesuai dengan bit tersebut akan mendapat logika low ‘0’ dan sebaliknya bila saklar tidak ditekan maka port tersebut akan mendapat logika high ‘1’.

Percobaan 2.1. Ambil Data Saklar

Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan bit tersebut.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Buka jumper pada EN_DAC apabila sedang terhubung.

2. Hubungkan modul Microcontroller Trainer dengan power supply +5V

3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

5. Ketik program berikut ini:

Org 0h

Start: Mov A, P2 ;Ambil data dari P2 dan Simpan ke A

Mov P0, A ;Kirim data A ke P0

sjmp start

end

6. Simpanlah program yang anda ketik dan beri nama : prog21a.asm

7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada LED.


Percobaan 2.2. Putar Kanan-Kiri

Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti penekanan tombol P2.0 atau P2.1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Hubungkan modul Microcontroller Trainer dengan power supply +5V

2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

4. Ketik program berikut ini:

org 0h

CekP20: JB P2.0,CekP21 ; Menguji bit P2.0, apakah adalah logika '1'

call RLeft ; Jika P2.0=0, maka LED putar kiri

CekP21: JB P2.1,CekP20 ; Menguji bit P2.1, apakah adalah logika '1'

call RRight ; Jika P2.1=0, maka LED putar kanan

sjmp CekP20 ; jump forever to CekP2.0

;================================================

;Subrutin ini digunakan untuk menggerakkan LED Ke Kanan

;================================================

RLeft: mov A,#11111110b;send data to Acc

RLeft1: mov P0,A ;send data to P0

call delay ;call delay time

JB P2.1,RLeft2 ;Menguji bit P2.1, apakah adalah logika '1'

sjmp EndRLeft ;Jika P2.1=0, maka lompat ke EndRLeft

RLeft2: RL A

sjmp RLeft1

EndRLeft: ret

;

;==============================================

;Subrutin ini digunakan untuk menggerakkan LED Ke Kiri

;==============================================

RRight: mov A,#01111111b ;send data to Acc

RRight1: mov P0,A ;send data to P0

call delay ;call delay time

JB P2.0,RRight2 ;Menguji bit P2.0, apakah adalah logika '1'

sjmp EndRRight ;Jika P2.0=0, maka lompat ke EndRRight

RRight2: RR A

sjmp RRight1

EndRRight: ret

;=======================================

;subroutine delay time

;=======================================

delay: mov R1,#255

del1: mov R2,#255

del2: djnz R2,del2

djnz R1,del1

ret

end

5. Simpanlah program yang anda ketik dan beri nama : prog22a.asm

6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.

7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED.

9. Lakukan modifikasi pada percobaan tersebut sesuai dengan dengan mengganti port tersebut dengan P2.2 ( putar kanan ) dan P2.3 ( putar kiri ).


Selengkapnya...

Rabu, 11 November 2009

PERCOBAAN 1 89S51

DISPLAY LED

referensi dari internet

 

TUJUAN:

1. Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.

2. Mahasiswa dapat memahami program assembly untuk menghidupkan dan mematikan LED

3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.

4. Mahasiswa memahami pembuatan instruksi waktu tunda



clip_image001
Gambar 1.1 Rangkaian Display LED

Perhatikan pada gambar 1.1 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW ‘0’ melalui port 0, dan LED akan padam bila diberi logika HIGH ‘1’ melalui port 0. Agar Display LED ini dapat aktiv maka jumper EN LED harus dihubungkan singkat.

Percobaan 1.1. Instruksi MOV

Pada percobaan 1.1 ini LED akan dihidupkan/ dimatikan dengan mengirimkan data tertentu pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Hubungkan jumper pada LED_EN, untuk mengaktifkan 8 buah LED

2. Hubungkan modul Microcontroller Trainer dengan power supply +5

3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

5. Ketik program berikut ini:

Org 0h

Start: Mov P0,#11110000b ; Menghidupkan 8 buah LED

sjmp start

End

6. Simpanlah program yang anda ketik dan beri nama : prog11a.asm

7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.

8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

9. Lakukan pengamatan pada LED

10. Gantilah data tersebut diatas dengan data seperti pada tabel berikut dan lakukan pencatatan LED mana yang padam.

Percobaan 1.2. Pembuatan Subrutine Waktu Tunda

Pada percobaan ini, 8 LED akan berkedip secara kontinu.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Hubungkan modul Microcontroller Trainer dengan power supply +5V

2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

4. Ketik program berikut ini:

Org 0h

Start: Mov P0,#11111111b ; Kirim data biner 11111111 ke P0

Call Delay ; Memanggil waktu tunda

Mov P0,#00000000b ; Kirim data biner 00000000 ke P0

Call Delay ; Memanggil waktu tunda

Sjmp start ;

Delay: mov R1,#255

Del1: mov R2,#255

Del2: djnz R2,del2

djnz R1,del1

ret

end

5. Simpanlah program yang anda ketik dan beri nama : prog12a.asm

6. Pada program MIDE pilih Build /F9 untuk melakukan kompilasi program dari *.asm ke *.hex.

7. Lakukan pemrograman mikrokontroller menggunakan Program ISP Software

8. Lakukan pengamatan pada LED

9. Gantilah data tersebut untuk mengedipkan sebuah LED, dua buah LED dan seterusnya

Percobaan 1.3. Instruksi Setb dan Clr

Pada percobaan ini, sebuah LED atau lebih dapat dihidupkan atau dimatikan dengan perintah setb dan clr.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Hubungkan modul Microcontroller Trainer dengan power supply +5V

2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

4. Ketik program berikut ini:

Org 0h

Start: Clr P0.0 ; Mengirimkan logika ‘0’ ke P0.0

Sjmp start ; jump ke start

end

5. Simpanlah program yang anda ketik dan beri nama : prog13a.asm

6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.

7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

8. Lakukan pengamatan pada LED

9. Gantilah data tersebut untuk menghidupkan LED yang lain: LED 2, LED 3, LED 4, LED 5, LED 6, LED 7 dan LED 8.

10. Lakukan percobaan berikut untuk mengedipkan LED 1, dengan mengetikka program berikut ini.

Org 0h

Start: Clr P0.0 ; Kirim logika ‘0’ ke P0.0

Clr P0.1 ; Kirim logika ‘0’ ke P0.1

Clr P0.2 ; Kirim logika ‘0’ ke P0.2

Clr P0.3 ; Kirim logika ‘0’ ke P0.3

Clr P0.4 ; Kirim logika ‘0’ ke P0.4

Clr P0.5 ; Kirim logika ‘0’ ke P0.5

Clr P0.6 ; Kirim logika ‘0’ ke P0.6

Clr P0.7 ; Kirim logika ‘0’ ke P0.7

Call Delay ; Memanggil waktu tunda

Setb P0.0 ; Kirim logika ‘1’ ke P0.0

Setb P0.1 ; Kirim logika ‘1’ ke P0.1

Setb P0.2 ; Kirim logika ‘1’ ke P0.2

Setb P0.3 ; Kirim logika ‘1’ ke P0.3

Setb P0.4 ; Kirim logika ‘1’ ke P0.4

Setb P0.5 ; Kirim logika ‘1’ ke P0.5

Setb P0.6 ; Kirim logika ‘1’ ke P0.6

Setb P0.7 ; Kirim logika ‘1’ ke P0.7

Sjmp start ; lompat ke start

;

Delay: mov R1,#255

Del1: mov R2,#255

Del2: djnz R2,del2

djnz R1,del1

ret

end

11. Rencanakan program untuk mengedipkan dua buah LED, tiga buah LED dan seterusnya dengan instruksi Setb dan Clr.

Percobaan 1.4. Instruksi RL/ RR ( Rotate Left dan Right )

Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan sebaliknya, program ini memanfaatkan instruksi RL dan RR.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:

1. Hubungkan modul Microcontroller Trainer dengan power supply +5V

2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer

3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

4. Ketik program berikut ini:

Org 0H

Start: Mov A,#11111110b

Mov R0,#7

Kiri: Mov P2,A

Call Delay

RL A

DEC R0

CJNE R0,#0,Kiri

Mov R0,#7

Kanan: Mov P2,A

Call Delay

RR A

DEC R0

CJNE R0,#0,Kanan

Sjmp Start

;

Delay: mov R1,#255

Del1: mov R2,#255

Del2: djnz R2,del2

djnz R1,del1

ret

end

5. Simpanlah program yang anda ketik dan beri nama : prog14a.asm

6.Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.

7.Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

8.Lakukan pengamatan pada LED

9.Lakukan perubahan pada program tersebut untuk menjalankan dua buah LED kekiri dan kekanan, tiga buah LED kekiri dan kekanan , dan seterusnya.


Selengkapnya...

KEIL C51 uVision3

oleh : Henry Toruan

Cara menggunakan KEIL C51 uVision3 (Editor,simulator dan compiler C serta downloader) untuk mikrokontroler 8051 :

1. Memulai proyek baru

Project>New uVision project>Pilih lokasinya>Isi nama file *.uv2>save

2. Memilih komponen target

Untuk memilih komponen target 89S52 pilih pada database Atmel>AT89S52>OK



clip_image002

Setelah muncul dialog box berikut pilih No

clip_image004

3. Untuk memulai memprogram dengan bahasa C, Pilih File>New. Pada jendela text ketikkan program rancangan dan simpan dengan memilih File>Save As> Isi namanya dengan akhiran c, contohnya code1.c dan file tersebut harus ditambahkan pada source group1.

clip_image006

4. Kemudian Pilih Rebuilt all target files

clip_image008

5. Kemudian Pilih Start Stop Debug Session

clip_image010

Kemudian Pilih Run untuk menjalankan simulasi dan Pilih perangkat keluaran dengan memilih Peripherals>I/O Ports>Port1 untuk kasus ini.

6. Untuk berhenti Pilih Halt dan untuk memulai dari awal Pilih Reset.

clip_image012

Pada saat simulasi berjalan akan tampak pada port 1.0 akan kedap – kedip.

clip_image014

7. Untuk membentuk file HEX, Pilih Flash>Configure Flash Tools

clip_image016


Selengkapnya...

Senin, 09 November 2009

Small Device C Compiler (MCS-51)

referensi dari internet

Mengapa SDCC ?

SDCC Merupakan open source , retargetable, optimizing C compiler yang pertama kali dikembangkan oleh Sandeep Dutta untuk mikrokontroller/mikroprosesor 8-bit, SDCC mendukung beberapa arsitektur mikrokontroller/mikroprosessor 8-bit antara lain: Intel MCS-51,Zilog Z80, Atmel AVR, Microchip PIC, Freescale (Motorola) HC08. Disini kita akan bahas penggunaan SDCC untuk MCS-51 Family yang cukup banyak dipakai saat ini



Pemrograman dengan bahasa C lebih mudah di bandingkan menggunakan bahasa assembly (bahasa mesin), SDCC merupakan C compiler gratis (freeware) sehingga anda tidak perlu mengeluarkan biaya untuk membeli compiler komersial yang harganya cukup mahal, dari segi code yang dihasilkan optimasi sdcc sangat bagus

Sebelumnya anda sudah harus mengerti pemrogramman dasar menggunakan bahasa C untuk PC

Instalasi SDCC

Sebelum anda bereksperimen dengan SDCC maka sebelumnya anda harus menginstall SDCC pada komputer anda.

langkah - langkah Instalasi SDCC :

1. Download Win 32 SDCC Setup file pada situs sdcc.sourceforge.net

2. Jalankan file setup yang telah anda download tadi

3. Ikuti langkah yang mucul pada dialog yang muncul, dan gunakan nilai defaultnya, terakhir ketika installer menanyakan untuk menambah path ke system path, pilih Yes sehingga anda akan dapat meng-compile dari sembarang folder

4. Setelah selesai restart komputer anda.

5. Test apakah SDCC sudah terinstall dengan benar, dengan masuk ke command prompt ketik sdcc -v untuk menampilkan versi sdcc yang anda install, berikut langkahnya :

a) Klik Start->Run kemudian ket ik cmd , klik Ok maka akan muncul window command prompt

b) Ketik sdcc -v, jika tampil versi SDCC maka SDCC telah terinstall dengan benar

image

Tipe Data

SDCC medukung beberapa tipe data standar sebagai berikut :

· bool 1 Bit (0,1)

· char 8 bits (signed -128~+127, unsigned 0~255)

· int 16 bits (signed -32768~ +32767, unsigned 0~ +65535)

· long 32 bits(signed -2147483648~ +2147483647, unsigned 0~ +4294967296)

· float 32 bits (4 bytes IEEE 754)

SDCC juga mendukung tipe data spesifik sesuai dengan arsitektur MCS 51 antara lain :

near/data
mendeklarasikan variabel menggunakan storage class near/data akan menyebabkan variabel diletakkan dalam directly Adressable RAM MCS-51 (internal RAM), MCS-51 mempunyai 128 directly Adressable RAM MCS-51

far/xdata
mendeklarasikan variabel menggunakan storage class far/xdata akan menyebabkan variabel diletakkan dalam RAM eksternal

idata
mendeklarasikan variabel menggunakan storage class idata akan menyebabkan variabel diletakkan dalam indirectly Adressable memory

code
mendeklarasikan variabel menggunakan storage class code akan menyebabkan varibel diletakkan dalam program memory, variabel ini mempunyai sifat read-only (constant) dan biasanya digunakan untuk menyimpan suatu look up table/konstanta

#include <at89x51.h>

code unsigned char pola[10] = {0x00,0xff,0xF0,0x0f,0x81}; // Tabel llok

void delay()

{

int i;

for(i=0;i<50000;i++); // Loop 50000 kali

}

void main(void)

{

data unsigned char i = 0;

while (1) // program loop

{

P0 = pola[i++];

delay();

if (i==5)

i=0;

}

}

bit
Deklarasi variabel menggunakan storage class bit akan menyebabkan variabel ini disimpan dalam bit adressable memory pada MCS-51, jumlah total variabel ini adalah 128 (MCS-51 hanya mempunyai 128 bit-adressable memory)

sfr
storage class sfr digunakan untuk mengakses Special Function Register (SFR) MCS-51

sbit
storage class sbit digunakan untuk mengakses Bit Adressable pada Special Function Register (SFR) MCS-51

In line Assembler

Anda dapat menyisipkan kode assember MCS-51 dalam program c anda ( in line Assembler), dengan dimulai keyword _asm dan di akhiri oleh keyword _endasm; contoh:

#include <at89x51.h> // header, definisi port ada pada file ini

_asm

mov P1,#200

mov P2,#255

nop

nop

_endasm;

I/O Port Acess

I/O Port access dapat langsung dilakukan dengan memberikan nilai pada nama port yang ingin anda akses, port yang tersedia disesuaikan mikrokontroler yang digunakan. Nama port haruslah huruf kapital mis: P0,P1,P2,P3 sesuai dengan file header, penggunaan huruf kecil akan menimbulkan kesalahan, contoh:

#include <at89x51.h> // header, definisi port ada pada file ini

P1 = 0xF0 ; // memberikan nilai 0x kepada port 1

P2 = 200 ; // memberikan nilai 200 kepada port 2

i = P2 ; // membaca nilai pada P2 dan nilainya di berikan ke variabel i

akses port secara bit dilakukan dengan cara menggukanan keyword PX_Y , sesuai dengan definisi di file headernya, X diganti dengan port yang akan diakses, sedangkan Y diganti dengan dengan bit yang akan di akses, mis: P1_0 artinya Port 1 bit ke 0 (P1.0) , bit hanya mempunyai dua keadaan logika yaitu on(1)/off(0). Berikut contoh pengaksesan port secara bit:

#include <at89x51.h> // header, definisi port ada pada file ini

bit i;

P1_0 = 1 ; // memberikan nilai 1 kepada port P1.0

P1_1 = 0 ; // memberikan nilai 0 kepada port P1.1

i = P1_0 ; // membaca nilai pada P1.0 dan nilainya di berikan ke variabel i

Definisi file header device untuk SDCC dapat dilihat pada folder include-mcs51 berikut merupakan contoh header, penggunaan file header ini disesuaikan dengan mikrokontroller yang digunakan.

#ifndef AT89x51_H

#define AT89x51_H

/* BYTE addressable registers */

__sfr __at 0x80 P0 ;

__sfr __at 0x81 SP ;

__sfr __at 0x82 DPL ;

__sfr __at 0x83 DPH ;

__sfr __at 0x87 PCON ;

__sfr __at 0x88 TCON ;

__sfr __at 0x89 TMOD ;

__sfr __at 0x8A TL0 ;

__sfr __at 0x8B TL1 ;

__sfr __at 0x8C TH0 ;

__sfr __at 0x8D TH1 ;

__sfr __at 0x90 P1 ;

__sfr __at 0x98 SCON ;

__sfr __at 0x99 SBUF ;

__sfr __at 0xA0 P2 ;

__sfr __at 0xA8 IE ;

__sfr __at 0xB0 P3 ;

__sfr __at 0xB8 IP ;

__sfr __at 0xD0 PSW ;

__sfr __at 0xE0 ACC ;

__sfr __at 0xE0 A ;

__sfr __at 0xF0 B ;

/* BIT addressable registers */

/* P0 */

__sbit __at 0x80 P0_0 ;

__sbit __at 0x81 P0_1 ;

__sbit __at 0x82 P0_2 ;

__sbit __at 0x83 P0_3 ;

__sbit __at 0x84 P0_4 ;

__sbit __at 0x85 P0_5 ;

__sbit __at 0x86 P0_6 ;

__sbit __at 0x87 P0_7 ;

/* TCON */

__sbit __at 0x88 IT0 ;

__sbit __at 0x89 IE0 ;

__sbit __at 0x8A IT1 ;

__sbit __at 0x8B IE1 ;

__sbit __at 0x8C TR0 ;

__sbit __at 0x8D TF0 ;

__sbit __at 0x8E TR1 ;

__sbit __at 0x8F TF1 ;

/* P1 */

__sbit __at 0x90 P1_0 ;

__sbit __at 0x91 P1_1 ;

__sbit __at 0x92 P1_2 ;

__sbit __at 0x93 P1_3 ;

__sbit __at 0x94 P1_4 ;

__sbit __at 0x95 P1_5 ;

__sbit __at 0x96 P1_6 ;

__sbit __at 0x97 P1_7 ;

/* SCON */

__sbit __at 0x98 RI ;

__sbit __at 0x99 TI ;

__sbit __at 0x9A RB8 ;

__sbit __at 0x9B TB8 ;

__sbit __at 0x9C REN ;

__sbit __at 0x9D SM2 ;

__sbit __at 0x9E SM1 ;

__sbit __at 0x9F SM0 ;

/* P2 */

__sbit __at 0xA0 P2_0 ;

__sbit __at 0xA1 P2_1 ;

__sbit __at 0xA2 P2_2 ;

__sbit __at 0xA3 P2_3 ;

__sbit __at 0xA4 P2_4 ;

__sbit __at 0xA5 P2_5 ;

__sbit __at 0xA6 P2_6 ;

__sbit __at 0xA7 P2_7 ;

/* IE */

__sbit __at 0xA8 EX0 ;

__sbit __at 0xA9 ET0 ;

__sbit __at 0xAA EX1 ;

__sbit __at 0xAB ET1 ;

__sbit __at 0xAC ES ;

__sbit __at 0xAF EA ;

/* P3 */

__sbit __at 0xB0 P3_0 ;

__sbit __at 0xB1 P3_1 ;

__sbit __at 0xB2 P3_2 ;

__sbit __at 0xB3 P3_3 ;

__sbit __at 0xB4 P3_4 ;

__sbit __at 0xB5 P3_5 ;

__sbit __at 0xB6 P3_6 ;

__sbit __at 0xB7 P3_7 ;

__sbit __at 0xB0 RXD ;

__sbit __at 0xB1 TXD ;

__sbit __at 0xB2 INT0 ;

__sbit __at 0xB3 INT1 ;

__sbit __at 0xB4 T0 ;

__sbit __at 0xB5 T1 ;

__sbit __at 0xB6 WR ;

__sbit __at 0xB7 RD ;

/* IP */

__sbit __at 0xB8 PX0 ;

__sbit __at 0xB9 PT0 ;

__sbit __at 0xBA PX1 ;

__sbit __at 0xBB PT1 ;

__sbit __at 0xBC PS ;

/* PSW */

__sbit __at 0xD0 P ;

__sbit __at 0xD1 FL ;

__sbit __at 0xD2 OV ;

__sbit __at 0xD3 RS0 ;

__sbit __at 0xD4 RS1 ;

__sbit __at 0xD5 F0 ;

__sbit __at 0xD6 AC ;

__sbit __at 0xD7 CY ;

/* BIT definitions for bits that are not directly accessible */

/* PCON bits */

#define IDL 0x01

#define PD 0x02

#define GF0 0x04

#define GF1 0x08

#define SMOD 0x80

#define IDL_ 0x01

#define PD_ 0x02

#define GF0_ 0x04

#define GF1_ 0x08

#define SMOD_ 0x80

/* TMOD bits */

#define M0_0 0x01

#define M1_0 0x02

#define C_T0 0x04

#define GATE0 0x08

#define M0_1 0x10

#define M1_1 0x20

#define C_T1 0x40

#define GATE1 0x80

#define M0_0_ 0x01

#define M1_0_ 0x02

#define C_T0_ 0x04

#define GATE0_ 0x08

#define M0_1_ 0x10

#define M1_1_ 0x20

#define C_T1_ 0x40

#define GATE1_ 0x80

#define T0_M0 0x01

#define T0_M1 0x02

#define T0_CT 0x04

#define T0_GATE 0x08

#define T1_M0 0x10

#define T1_M1 0x20

#define T1_CT 0x40

#define T1_GATE 0x80

#define T0_M0_ 0x01

#define T0_M1_ 0x02

#define T0_CT_ 0x04

#define T0_GATE_ 0x08

#define T1_M0_ 0x10

#define T1_M1_ 0x20

#define T1_CT_ 0x40

#define T1_GATE_ 0x80

#define T0_MASK 0x0F

#define T1_MASK 0xF0

#define T0_MASK_ 0x0F

#define T1_MASK_ 0xF0

/* Interrupt numbers: address = (number * 8) + 3 */

#define IE0_VECTOR 0 /* 0x03 external interrupt 0 */

#define TF0_VECTOR 1 /* 0x0b timer 0 */

#define IE1_VECTOR 2 /* 0x13 external interrupt 1 */

#define TF1_VECTOR 3 /* 0x1b timer 1 */

#define SI0_VECTOR 4 /* 0x23 serial port 0 */

#endif

Interrupt Routine

Interrupt/Interrupsi adalah pembelokan(vector) eksekusi program utama ke suatu program interrupt (intterupt routine). Interupsi diakibatkan oleh suatu event yang telah ditentukan sebelumnya mis: timer overflow, serial port, external interrupt. interrupt routine ini dikenal dengan istilah ISR (Interrupt Service Routine).

interrupt Routine di implementasikan dengan format sebagai berikut :

void nama_fungsi_interrupt (void) interrupt nomor_interrupt using nomor_bank

{

...

}

nama_fungsi_intterupt adalah nama fungsi yang dapat berupa sembarang nama yang valid untuk sebuah fungsi, nomor_interrupt disesuaikan dengan jenis interrupt yang akan di handle oleh fungsi ini sesuai dengan tabel dibawah, sedangkan nomor_bank merupakan parameter opsional unttuk memilih bank yang akan digunakan untuk menyimpan variabel dalam routine interrupt ini.

image

Aturan dalam penggunaan interrupt :

  • Variabel global yang digunakan/diakses dari ISR harus dideklarasikan volatile, agar compiler tidak melakukan optimisasi pada varibel ini
  • Hindari memangil suatu fungsi dari ISR, jika harus dilakukan maka fungsi harus dideklarasikan sebagai reentrant
  • Disable intterupt ketika melakukan operasi yang menggunakan data 16 bit /32 bit

Contoh :

#include <at89x51.h> // header

volatile unsigned char n ; // variabel global

void SerialISR (void) interrupt 4

{

if (RI)

{

n = SBUF; // Save Rx byte

RI = 0; // Reset Rx interrupt flag

}

else if (TI)

{

SBUF = n; // Load byte to Tx

TI = 0; // Reset Tx interrupt flag

}

}

void main(void)

{

// 1. Inisialissasi Serial Port

EA = 0; // Disable global interrupt mask

SCON1 = 0x50; // Set UART to 8N1, Rx enabled

TMOD |= 0x20; // Set Timer 1 as Mode 2

TH1 = 0xDD; // Set SCI_1 for 2400 baud

TR1 = 1; // Enable Timer 1

ES = 1; // Enable interrupts for serial port

EA = 1; // Enable global interrupt mask

// 2. mengirim data (Tx) 0x53

n = 0x53 ;

SBUF1 = n;

// 3. Program loop...

while (1);

}

Model Memory

SDCC mendukung dua model memory yaitu :

· Small (RAM internal)

· Large (RAM eksternal)

Secara default SDCC akan menggunakan model memory small, dan semua variabel tanpa storage class akan dilokasikan di RAM Internal, ketika menggunakan model memory large maka semua variabel tanpa storage class akan dialokasikan di RAM eksternal. untuk menggunakan model memory large maka pada saat compile harus diikutkan parameter --model-large contoh :

sdcc --model-large nama_file_source.c

Langkah Pemrogramman

1. Pembuatan source program, pembuatan source program dapat dilakukan menggunakan sembarang teks editor mis : notepad, tetapi langkah baiknya jika dibuat di teks editor yang mempunyai fasilitas syntax highlighting (Programmer Notepad), kemudian simpan file source yang telah dibuat dengan ekstensi .c

2. Compile source program, jika terjadi kesalahan cek kesalahan sesuai dengan pesan yang muncul, setelah proses compile berhasil maka akan terbentuk suatu file hex(.ihx) yang merupakan kode biner dari program yang telah kita buat.

3. Pemrograman ke dalam mikrokontroller menggunakan programmer, file hex siap untuk di masukkan kedalam mikrokontroller

4. Mikrokontroller dijalankan pada rangkainnya (Run)

sdcc nama_file_source.c


Selengkapnya...

Minggu, 08 November 2009

Perangkat H/W dan S/W 89S51

referensi dari internet

1. Compiler MIDE Studio

M-IDE Studio adalah salah satu cara yang digunakan untuk menjalankan kompilasi untuk divais MCS-51. M-IDE Studio mempunyai beberapa fitur yang dapat digunakan untuk edit, compil, dan debug file.
The M-IDE Studio juga dapat digunakan untuk menulis program dalam bahasa C. Dengan menggunakan software ini, maka kita dapat melihat error pada report file LST.



clip_image001

Gambar 1.19. M-IDE Studio

Bila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. Hal ini karena file belum dibuat. Untuk membuat sebuah file, lakukan langkah-langkah berikut:

1. Membuat File Baru
Untuk membuat file baru, klik pada menu File atau short cut seperti yang ditunjukkan pada gambar, sehingga akan tampak halaman kosong.

clip_image002

Figure 1.20. File baru dengan halaman kosong

2. Menulis sebuah program

Tulis program assembly pada halaman kosong, dan lakukan penyimpanan file. Bila file telah tersimpan maka akan tampak teks instruksi yang berwarna-warni. Sebagaimana yang ditunjukan pada gambar 3.

clip_image003

Gambar 1.21 Menu penyimpanan file

3. Kompilasi

Agar file dengan ekstensi ASM tersebut dapat diloadkan ke mikrokontroller, maka perlu dilakukan kompilasi dari file ASM ke HEX.

clip_image004

Gambar 1.22 Kompilasi file

4. Debug

clip_image005

Gambar 1.23 Debug file

Hardware dan program downloader

clip_image007

Gambar Sistem minimum AT89S51

clip_image009 clip_image011

Gambar Downloader


Program downloader dapat menggunakan AEC_ISP dengan tahapan berikut untuk mendownload program :

MASUK KE TAMPILAN AEC_ISP, KEMUDIAN PILIHLAH MENU
<A>. LOAD HEX FILE TO FLASH BUFFER <ENTER>
KEMUDIAN MUNCUL TULISAN
INPUT FILE NAME : <KETIK NAMA FILE LENGKAP DENGAN HEX NYA> <ENTER>
CONTOH :
INPUT FILE NAME : LAT1.HEX <ENTER>

3. PILIH MENU
<E>. PROGRAM <ENTER>
TUNGGU SAMPAI 100 % <ENTER>

4. PILIH MENU
<I>. RESET

Note :

Bila menggunakan pengolah kata sebagai editor asemblinya, untuk mempermudah pekerjaan anda dalam mengkompilasi program tersebut, dapat dilakukan :

1. Buat file A.bat dengan listing sebagai berikut :

x8051 %1 -d
pause
l8051 -c %1
del %1.obj
del %1.lst
aec_isp

ingat untuk mengkopikan program x8051.exe dan l8051.exe pada direktori yang sama dengan data.

2. UNTUK PROSES KOMPILASI LAKUKAN LANGKAH BERIKUT:

1. KETIK DI PROMPT C:\A <NAMA FILE> <ENTER>
MISAL : C:\A LAT1 <ENTER>
C:\ <ENTER>
2. HASIL KOMPILASI ADALAH FILE DENGAN EKSTENSI *.HEX
ANDA AKAN MASUK KE TAMPILAN AEC_ISP

dan lakukan hal seperti diatas.


Selengkapnya...