14014-14-730954442828

65
Modul 14. Sistem Minimum 8051 MK : Mikroprosesor SISTEM MINIMUM 8051 Modul ini berisi perancangan dan contoh implementasi sistem minimum mikrokontroler 8051. Perancangan system itu sendiri nantinya akan terbagi menjadi dua yaitu perancangan perangkat keras (hardware) dan perancangan perangkat lunak (software). 14.1. Perancangan Hardware Bagian hardware akan dibagi lagi menjadi bagian yang membentuk modul – modul rangkaian. Diantaranya: Main MCU modul. Target modul 7 – Segment. Target modul motor DC. Target modul motor stepper. Target modul keypad. I/O komunikasi serial (dengan PC). Masing – masing target modul akan bersifat independent dengan pengendalian yang terpusat pada Main MCU. Dengan kata lain semua target modul akan menjadi bagian I/O atau input – output dari Main MCU. Untuk lebih jelasnya dapat dilihat dari diagram blok berikut ini. Gambar 14.1 Blok Diagram implementasi sistem minimum. Mikroprosesor Ir. Eko Ihsanto, M.Eng Pusat Pengembangan Bahan Ajar Universitas Mercu Buana ‘11 1

description

jdjgh

Transcript of 14014-14-730954442828

Page 1: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

SISTEM MINIMUM 8051

Modul ini berisi perancangan dan contoh implementasi sistem minimum

mikrokontroler 8051. Perancangan system itu sendiri nantinya akan terbagi menjadi dua

yaitu perancangan perangkat keras (hardware) dan perancangan perangkat lunak

(software).

14.1. Perancangan Hardware

Bagian hardware akan dibagi lagi menjadi bagian yang membentuk modul – modul

rangkaian. Diantaranya:

Main MCU modul.

Target modul 7 – Segment.

Target modul motor DC.

Target modul motor stepper.

Target modul keypad.

I/O komunikasi serial (dengan PC).

Masing – masing target modul akan bersifat independent dengan pengendalian yang

terpusat pada Main MCU. Dengan kata lain semua target modul akan menjadi bagian I/O

atau input – output dari Main MCU. Untuk lebih jelasnya dapat dilihat dari diagram blok

berikut ini.

Gambar 14.1 Blok Diagram implementasi sistem minimum.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 1

Page 2: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.1.1 Perancangan Modul Main MCU

Pada modul ini terdapat microcontroller sebagai CPU. Microcontroller yang

digunakan adalah keluarga dari MCS’ 51 yaitu AT89C52. Dipilihnya jenis ini dengan alasan

bahwa microcontroller ini mempunyai 3 buah Timer / Counter di dalamnya yang masing –

masing independent. Pada aplikasi system ini microcontroller akan dioperasikan pada

expanded mode. Karena dioperasikan pada mode tersebut maka microcontroller akan

membutuhkan External Program Memory (ROM), External Data Memory (RAM), serta

tambahan peripheral untuk mengekspansi port I/O nya.

Gambar 14.2 Konfigurasi Expanded Mode AT89C52

Expanded mode pada MCS’ 51 dioperasikan menghubungkan pin EA (External

Addressing) IC AT89C52 ke ground. Kemudian microcontroller dirangkaikan dengan IC

74HC573 yang berfungsi sebagai latch alamat A0 – A7 dengan pin ALE sebagai sinyal

controlnya..

Pada External Program Memory (ROM) akan dipergunakan IC ROM bertipe 27C512

yang berkapasitas total 64 kb. Dengan kata lain, memory program akan dialokasikan secara

maksimal sesuai maksimal pengalamatan memory program AT89C52 dengan pin PSEN

pada microcontroller sebagai sinyal control IC ROM. Pada External Data Memory (RAM)

akan dipergunakan IC RAM bertipe 62C256 dengan kapasitas total 32 kb.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 2

Page 3: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

(a) (b)

Gambar 14.3 Konfigurasi IC Memory. (a) Konfigurasi RAM External. (b) Konfigurasi

ROM External.

Pada bagian External Data, pin RD dan WR di pergunakan sebagai sinyal baca dan

tulis ke IC RAM 62C256. Pada bagian External Data ini perlu dilakukan address decoding

untuk menentukan jangkauan alamat memory data. Address decoding ini dilakukan dengan

mengumpankan pin A15 IC microcontroller ke pin CE IC RAM 62C256.

Kapasitas IC RAM 62C256 (sebesar 32Kb) akan menempati jangkauan alamat

0000h-7FFFh. Jika pin A15 IC microcontroller tersebut aktif, maka microcontroller tersebut

tidak akan mengakses IC RAM.

Kemudian rangkaian MCU akan ditambahkan dengan IC peripheral, yaitu IC PPI

82C55 (sebanyak 2 buah) untuk mengekspansi port I/O. Alokasi alamat IC 82C55 akan

menempati alamat setelah alamat IC RAM yaitu setelah alamat 7FFFh. Masing-masing

alamat IC PPI akan dikendalikan oleh bit Address dari pin address microcontroller. Seperti

halnya IC RAM kedua IC peripheral ini membutuhkan address decoding. Address decoding

ini akan dilakukan dengan mengkonfigurasikan rangkaian microcontroller dan IC decoder

74HC138 dengan pin address microcontroller sebagai input dan sinyal kendali IC decoder

tersebut. Selanjutnya IC decoder tersebut akan dipergunakan sebagai address decoding

untuk IC – IC peripheral lainnya.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 3

Page 4: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.4 Konfigurasi rangkaian PPI

Seperti pada gambar terlihat bahwa IC PPI 1 akan menempati alamat 1010-XXXX-

XXXX-XX00 sampai dengan 1010-XXXX-XXXX-XX11. dan IC PPI 2 akan berada di alamat

1011-XXXX-XXXX-XX00 sampai dengan 1011-XXXX-XXXX-XX11. Penambahan 2 buah IC

PPI 82C55 ini akan menghasilkan ekspasi port I/O sebanyak 48 bit. Port I/O ini dihubungkan

optional supaya pada aplikasinya bias digunakan sebagai input maupun sebagai output

tanpa merubah rangkaian hardware nya.

Jika port digunakan sebagai output, maka komponen yang dipasang adalah IC ULN2803A

yang merupakan 8 Darlington array. Dan jika port digunakan sebagai input, maka IC

ULN2803A tersebut diganti dengan 8 resistor array sebesar 100Ω.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 4

Page 5: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

(a) (b)

Gambar 14.5 Konfigurasi Port I/O. (a) sebagai ouput. (b) sebagai input.

Selanjutnya pada modul MCU ini akan ditambahkan dengan IC RTC (Real Time

Clock) yang berfungsi sebagai pencatat dan penyimpan data tangal dan waktu. Tipe IC RTC

yang akan dipakai adalah RTC DS12C887. Seperti pada IC PPI dan RAM, pada IC RTC ini

juga dilakukan pengalamatan.

Pengalamatan dilakukan dengan mengumpankan satu buah output IC decoder ke

pin CS dari IC RTC. Dan pin AD0 – AD7 RTC dihubungkan ke pin AD0 – AD7

microcontroller. Dengan menghubungkan pin ALE ke pin AS sebagai sinyal control nya.

Gambar 14.6 Konfigurasi rangkaian RTC DS12C887

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 5

Page 6: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Seperti yang sudah dijelaskan sebelumnya bahwa, IC RTC ini mempunyai 2 macam

bus mode. Yaitu MOTOROLA BUS dan INTEL BUS. Karena dalam aplikasi ini adalah

berbasiskan MCS’ 51 dari INTEL maka, pin MOT harus di’floating’ atau di’ground’kan untuk

memilih mode bus INTEL.

IC RTC ini juga memiliki jangkauan alamat seperti halnya pada IC RAM dan PPI.

Dengan mengkonfigurasikan IC RTC seperti pada gambar maka jangkauan alamat IC RTC

adalah 1000 – XXXX – 0000 – 0000 sampai dengan 1000 – XXXX – 1111 – 1111.

Pada modul Main MCU ini juga dilengkapi dengan rangkaian ‘Watch dog’ yang

berfungsi sebagai rangkaian pengaman sekaligus reset dari keseluruhan system.

Rangakaian ini akan mencegah terjadinya ‘program crash’. Maksudnya, jika hal tersebut

terjadi maka rangkaian ini akan otomatis me-reset system dan program akan kembali dari

awal. Berikut adalah gambar rangkaiannya.

Gambar 14.7 Rangkaian Watch Dog.

Rangkaian watch dog ini dibuat dengan mengkonfigurasikan IC 74HC123 sebagai detector

pulsa yang hilang. Rangkaian ini mendapatkan umpan input dari Port B7 IC PPI 1. Dalam

penerapannya, program MCU harus memberikan pulsa secara periodic melalui pin ini.

Besarnya minimum lebar pulsa yang harus di berikan bergantung pada harga C dan R

external yang dihubungkan dengan IC 74HC123 tersebut. Pada aplikasinya di rangkaian ini

lebar pulsa yang harus dikeluarkan adalah ≈ 1sec (min.).

Output dari rangkaian ini akan diumpankan ke pin RESET IC microcontroller, IC PPI,

IC RTC. Dimana RESET IC microcontroller dan IC PPI menggunakan output invert dari

74HC123. Sedangkan RESET IC RTC menggunakan pin output normalnya.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 6

Page 7: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.1.2 Perancangan Modul 7-Segment.

Modul selanjutnya yang akan di rancang pada aplikasi tugas akhir ini adalah modul

display 7 – Segment. Modul 7 – Segment akan dibuat dengan kapasitas 8 digit dan

menggunakan metode shift – register SIPO (Serial In Paralel Out). Keunggulan memakai

metode ini adalah:

1. Menghemat Port I/O karena transfer data bersifat serial.

2. Proses update tidak harus sesegera mungkin secara periodic harus

dilakukan.karena data yang ditampilkan akan di’latch’.

Sedangkan metode ini juga mempunyai kelemahan yaitu:

1. Daya listrik yang dibutuhkan cukup besar karena penyalaan LED setiap digit

dinyalakan bersamaan.

2. Untuk setiap segment LED harus disediakan 1 byte data memory.

Gambar 14.8 Rangkaian Modul 7 – Segment

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 7

Page 8: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Pada aplikasi rangkaian ini IC Shift – Register yang digunakan adalah IC 74HC595

yang merupakan IC 8 – bit Shift – Register dengan 3 – State output. Dan tipe 7 – Segment

yang dipakai adalah tipe Common Anode.

Pada bagian logic control, serial data diumpakan ke pin 14 (SER) IC 74HC595 (1)

sedangkan serial data IC berikutnya mendapatkan umpan dari output QH IC 74HC595

sebelumnya yang merupakan serial data output. Clock diumpankan ke pin 11 (SRCK) IC

74HC595 yang di hubungkan secara parallel dengan IC 74HC595 lainnya. Sedangkan latch

diumpankan ke pin 12 (RCK) IC 74HC595 yang selanjutnya juga dihubungkan parallel

dengan IC 74HC595 lainnya. Selanjutnya pin E yang merupakan pin aktivasi output dari IC

74HC595 dihubungkan secara permanent ke ‘ground’. Dan pada pin SCLR IC 74HC595

diumpakan ke rangkain power up reset dengan resistor 10K dan capacitor 10uF untuk

mendapatkan reset output pada saat power up.

Sedangkan bagian output logic di’drive’ dengan menggunakan IC ULN2803 yang

merupakan 8 Transistor Array. Untuk membatasi arus LED maka output IC ULN2803

dipasang resistor seri dengan perhitungan:

Jika menggunakan resistor array sebesar 1KΩ, dihitung ulang menjadi:

Arus LED sebesar 11,1 mA akan memberikan luminasi cahaya yang cukup terang dan jelas.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 8

Page 9: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.1.3 Perancangan Modul DC Motor.

Pada aplikasi ini, modul DC motor yang dirancang akan mempunyai parameter

pengontrolan yaitu kecepatan dan arah putaran. Pengontrolan kecepatan putar dilakukan

dengan metode PWM (Pulse Width Modulation). Dan control arahnya bisa dilakukan dengan

membuat rangkaian H – bridge driver.

Gambar 14.9 Rangkaian Driver Motor DC

Untuk men’drive’ arus motor sehingga bisa berputar, maka transistor harus dalam

keadaan saturasi. Untuk memberikan keadaan keadaan saturasi tersebut, maka arus basis

transistor perlu di tentukan harga minimalnya.

Tipe transistor yang dipakai adalah tipe TIP122, yang mempunyai hfe atau

penguatan arus sebesar 1000(datasheet), Icmax = 5A. Namun dalam aplikasi kali ini, arus

yang akan mengalir ke motor akan dibatasi sampai dengan 0,5A. dengan kata lain arus

yang akan mengalir dari collector ≈ 1A. Jadi Ib minimal yang harus mengalir adalah:

Untuk memberikan umpan arus basis tersebut, digunakan opto coupler PC817. opto

coupler ini mempunyai Vce on saturasi sebesar 0,1 V.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 9

Page 10: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.10 Rangkaian ‘driver’ basis transistor

Jika tegangan saturasi transistor Q adalah ≈ 1V, maka saat Q1,Q5,Q3 ‘on’ tegangan yang

diterima motor adalah:

Vm = 12 – VcesatQ1 – VcesatQ5 – VcesatQ3

= 12 – 1 – 1 – 1 = 9 Volt.

Maka tegangan total c-e opto PC817 dan RA adalah sama dengan tegangan saturasi

transistor Q. maka besarnya RA untuk mendapatkan arus basis 0,5mA adalah:

Maka dipilih resistor sebesar 1K supaya tidak menghasilkan arus yang terlalu kecil. Jika

harga resistor tersebut dihitung kembali akan menghasilkan arus sebesar:

Gambar 14.11 Skema lengkap ‘driver’ motor

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 10

Page 11: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Untuk mengatur arah motor maka dipakai IC 74HC14 untuk melindungi rangkaian

dari short-circuit jika transistor yang berdekatan sama – sama ‘on’. Jika motor bergerak ke

arah A, maka transistor yang ‘on’ haruslah Q4,Q2,Q3. begitu pula sebaliknya jika kearah B

maka Q1,Q5,Q3 yang ’on’. Pin ‘MOTOR ENABLE’ dan ‘MOTOR DIRECTION’ ini kemudian

langsung dihubungkan ke output port I/O setelah terlebih dulu di’pull-up’ dengan resistor 10K

ke Vcc 5Volt.

14.1.4 Perancangan Modul Motor Stepper.

Modul motor Stepper ini menggunakan motor stepper yang mempunyai 4 buah coil di

dalamnya. Dan mampu aktif dengan diberi tegangan 5 Volt / 12 Volt.

Masing masing kutub coil akan langsung dihubungkan ke output port I/O yang berupa output

open-colector ULN2803. Tentunya rangkaian motor stepper ini membutuhkan dioda sebagai

proteksi dari GGL balik dari coil. Rangkaian selengkapnya adalah.

Gambar 14.12 Rangkaian Stepper Motor driver

14.1.5 Perancangan Modul Keypad.

Modul Keypad yang akan dirancang menggunakan keypad matrix 3X4 line. Dengan

konfigurasi ini, maka jumlah digit yang dihasilkan ada 12 kombinasi. Yaitu kombinasi “0” –

“9”, “*”, “#”. Setelah dilakukan pengetesan, maka didapatkan rangkaian switch di dalam

keypad sebagai berikut.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 11

Page 12: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.13 Rangkaian dalam Keypad Matrix

Output pin – pin keypad tersebut selanjutnya dihubungkan ke output dan input port

I/O untuk dilakukan scanning dengan program. Pin 8,7,6 dihubungkan ke ouput I/O port dan

yang lainnya ke input I/O port.

14.1.6 Perancangan Komunikasi Serial.

Komunikasi serial yang akan dibuat dalam aplikasi ini adalah jenis komunikasi UART

Standard RS232C. Sedangkan koneksinya menggunakan koneksi DB9 female standard PC.

Gambar 14.14 Koneksi data serial dengan DB9 Female

Sedangkan ‘driver chip’nya menggunakan IC MAX232CPE untuk mengkonversi logika TTL

ke level RS232C.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 12

Page 13: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.15 Rangkaian ‘Driver-chip’ MAX232CPE

Dari gambar terlihat bahwa, pin TX dari CPU dihubungkan ke pin 11 IC MAX232CPE

dan pin 12 IC MAX232CPE dihubungkan ke pin RX CPU. Untuk menghubungkan ke

konektor DB9 maka pin 14 IC MAX232CPE dihubungkan ke pin 2 DB9 dan pin 13 IC

MAX232CPE diumpankan ke pin 3 DB9.

Untuk rangkaian chipnya, 4 buah kapasitor dirangkaikan seperti pada gambar yang

besar kapasitasnya 1 µF sesuai dengan standard RS232C.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 13

Page 14: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.2 Perancangan Software

Untuk menjalankan aplikasi software yang akan digunakan adalah dengan

pemrograman bahasa C. Hal ini bertujuan untuk memudahkan pengguna / user dalam

mengaplikasikan modul – modul yang dibuat. Sebagai complier digunakan software “KEIL

µVision2”.

Pada prinsipnya, semua instruksi pengolah untuk mengontrol target modul akan

dilakukan oleh transfer data melalui port serial. Data dari port serial yang berupa protocol

akan diterjemahkan menjadi acuan untuk menjalankan target modul. Selain itu juga, protocol

serial ini akan digunakan untuk memilih meu modul target mana yang akan dikontrol.

Gambar 14.16 Alur keseluruhan program

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 14

Page 15: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Pada perancangan software ini, dibagi menjadi beberapa bentuk modul software.

Mereka adalah:

Pendefinisian variable

Pendefinisian Interrupt

Background program

Routine Serial

Routine Scanning keypad

Routine motor stepper

Routine motor DC

Routine display 7 segment

Routine RTC

Inisialisasi

Fungsi ‘main()’

Pembuatan fungsi – fungsi aplikasi

14.2.1 Pendefinisian Variable

Pendefinisian variable diperlukan untuk mengidentifikasi variable – variable yang

akan digunakan, terutama variable yang bersifat ‘xdata’. Variabel ‘xdata’ disini adalah suatu

variable yang bersifat external data memory diluar alamat RAM yang merupakan perangkat

peripheral seperti port I/O PPI, dan alamat – alamat register RTC.

Dengan mengacu pada perancangan hardware, maka alamat – alamat variable

tersebut bisa ditentukan.

#define AT _at_ //membuat nama lain dari _at_#define ABSOLVAR xdata unsigned char volatile

ABSOLVAR RTC_REG_A AT 0x800A; //variable – variable register RTCABSOLVAR RTC_REG_B AT 0x800B;ABSOLVAR RTC_REG_C AT 0x800C;ABSOLVAR RTC_REG_D AT 0x800D;ABSOLVAR RTC_HOUR AT 0x8004;ABSOLVAR RTC_MINUTE AT 0x8002;ABSOLVAR RTC_SECOND AT 0x8000;ABSOLVAR RTC_DAY AT 0x8006;ABSOLVAR RTC_DATE AT 0x8007;ABSOLVAR RTC_MONTH AT 0x8008;ABSOLVAR RTC_YEAR AT 0x8009;

ABSOLVAR IO1PA AT 0x9000;ABSOLVAR IO1PB AT 0x9001;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 15

Page 16: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

ABSOLVAR IO1PC AT 0x9002;ABSOLVAR IO1CW AT 0x9003; //control word PPI 1

ABSOLVAR IO2PA AT 0xA000;ABSOLVAR IO2PB AT 0xA001;ABSOLVAR IO2PC AT 0xA002;ABSOLVAR IO2CW AT 0xA003; //control word PPI 2

Jadi jika dalam program dituliskan

IO1CW = 0x80;

Maka, alamat 0x9003 yang merupakan register control word dari PPI I diisikan dengan data

0x80.

Karena alamat – alamat diatas adalah alamat dari external peripheral, maka perlu

dibuatkan suatu buffer data untuk CPU. Buffer tersebut haruslah bertipe data sama dengan

tipe data external peripheral yaitu karakter tak bertanda atau ‘unsigned char’.

unsigned char lcdinstbuff; //buffer untuk instruksi LCDunsigned char lcddatabuff; //buffer untuk data LCD

unsigned char IO1PAMEM; //buffer untuk Port – port PPI Iunsigned char IO1PBMEM;unsigned char IO1PCMEM;

unsigned char IO2PAMEM; //buffer untuk port – port PPI IIunsigned char IO2PBMEM;unsigned char IO2PCMEM;

Variable – variable yang telah didefinisikan tersebut selanjutnya disimpan dengan

nama file ‘decoder.h’.

Variable selanjutnya yang perlu didefinisikan adalah variable untuk menampung

alamat awal fungsi dan variable acknowledge untuk keperluan watchdog system.

Variable penampung alamat fungsi bertujuan untuk, memudahkan perpindahan

looping program. Alamat fungsi yang akan diwakilkan oleh variable tersebut adalah fungsi

yang bertipe ‘void’.

typedef void(*PROC)();//mendefinisikan nama lain dari fungsi bertipe ‘Void’PROC c,pc; //memndefinisikan nama variable dari ‘PROC’

Nama variable PROC yang akan digunakan di dalam program adalah variable ‘c’ dan ‘pc’.

Jadi, jika ingin menjalankan fungsi bertipe void, pemrogram hanya menuliskan.

pc = c = serial_main_menu;while (1)

pc();

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 16

Page 17: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Jika program tersebut dijalankan, maka fungsi yang bernama serial_main_menu()

akan dijalankan terus – menerus.

Variabel watchdog system dituliskan dengan tipe data integer. Hal ini untuk

mendapatkan flexibilitas waktu eksekusi dari looping program.

unsigned int bkgndwdcnt=0;

Selanjutnya variable – variable tersebut akan di ketik dan disimpan dalam file

bernama “main.h”.

14.2.2 Pendefinisian Interrupt

Pada program aplikasi ini, interrupt yang akan digunakan adalah interrupt serial,

timer 0, dan timer 1. Ketiga sumber interupsi ini akan diaktifkan secara bersamaan dalam

looping program. Penggunaan interupsi secara bersamaan selanjutnya akan diatur

menggunakan Interrupt Priority. Mengenai pengaktifan seluruh interupsi (bit EA), akan

dilakukan diakhir inisialisasi dan akan dijelaskan pada bagian Inisialisasi.

14.2.2.1 Pendefinisian Interupsi Serial

Penggunaan interupsi serial dalam aplikasi ini dibutuhkan untuk mengatur komunkasi

melalui port serial. Komunikasi serial yang akan dipakai dalam aplikasi ini adalah jenis

asynchronous dua arah dengan menggunakan serial komunikasi mode 1. Baud rate yang

dipakai adalah sebesar 9600 bps. Dalam membangkitkan baud rate tersebut akan

dipergunakan timer 2 dari MCU. Penggunaan timer 2 sebagai generator baud rate dipilih

karena timer 1 selanjutnya akan dipakai untuk aplikasi yang lain seperti timer 0.

Untuk menggunakan timer 2 sebagai generator baud rate maka pengaturan

dilakukan dengan mengakses register T2CON dalam inisialisasi yang ditunjukkan dalam

table berikut.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 17

Page 18: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Tabel 14.1 Susunan bit Register T2CON untuk pengaturan baud rate

BIT SIMBOL LOGIKA KETERANGAN

T2CON.7 TF2 0 Bit timer 2 overflow flag

T2CON.6 EXF2 0 External flag

T2CON.5 RCLK 1 Aktifkan receive clock

T2CON.4 TCLK 1 Aktifkan transmit clock

T2CON.3 EXEN2 0 Timer 2 external tidak digunakan

T2CON.2 TR2 1 Jalankan timer 2

T2CON.1 C/ 0 Aktif sebagai interval timer

T2CON.0 CP/ 0 Mode auto reload

Berdasarkan table diatas, maka nilai yang harus diisikan pada register T2CON

adalah 0x34.

Guna mendapatkan nilai dari TL2, TH2, RCAP2L, dan RCAP2H dalam menghasilkan

baud rate sebesar 9600 bps, digunakan persamaan.

Dengan Ferq. Oscilator = 22,1184 Mhz, maka persamaannya menjadi.

Jika nilai 65464 dikonversi ke bilangan hexadecimal, maka nilai Timer2Overflow = 0xFFB8

atau FFB8H. Dengan nilai ini maka bisa ditetapkan untuk nilai RCAP2H = TH2 = 0xFF dan

nilai RCAP2L = TL2 = 0xB8.

Selanjutnya untuk pemilihan mode serial, digunakan mode 1 yaitu tipe 8-bit UART.

Untuk memilih mode tersebut, maka register SCON harus di inisialisasikan seperti dalam

table berikut.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 18

Page 19: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Tabel 14.2 Susunan bit Register SCON untuk pengaturan mode 1 serial

BIT SIMBOL LOGIKA KETERANGAN

SCON.7 SM0 0 Serial Port mode bit 0

SCON.6 SM1 1 Serial Port mode bit 1

SCON.5 SM2 0 Serial Port mode bit 0

SCON.4 REN 1 Diset untuk menerima karakter

SCON.3 TB8 0 Transmit Bit ke – 8 tidak digunakan

SCON.2 RB8 0 Receive Bit ke – 8 tidak digunakan

SCON.1 TI 0 Clear flag untuk mengirim

SCON.0 RI 0 Clear flag untuk menerima

Berdasarkan table diatas, maka nilai yang harus diisikan pada register SCON adalah

0x50.

Untuk mengaktifkan interupsi serial maka bit ‘ES’ pada register IE harus diset (ES =

1).

Secara lengkap inisialisasi interupsi serial akan ditunjukkan pada potongan program

berikut ini. Selanjutnya fungsi inisialisasi tersebut akan diketik dan disimpan dalam file

bernama “serial.c”.

void serialinit()

TL2 = 0xb8; // 9600 bps at 22.1184 MHzTH2 = 0xff; // or 4800 bps at 11.0592 MHzRCAP2L = 0xb8;RCAP2H = 0xff;T2CON = 0x34; // timer2 as baud rate generatorSCON = 0x50; // enable serial com mode1 = 8 bit UARTES = 1; // enable serial interrupt

14.2.2.2 Pendefinisian Interupsi Timer 1

Interupsi timer 1 akan digunakan sebagai aplikasi pewaktu 10 ms. Untuk itu perlu

dilakukan inisialisasi pada register TMOD. Mode timer yang digunakan adalah mode 1 yang

merupakan mode 16-bit timer.

Tabel dibawah ini menunjukkan pengaktifan bit – bit pada register TMOD untuk

mengaktifkan timer 1 dengan pengoperasian mode 1.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 19

Page 20: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Tabel 3.3 Susunan bit Register TMOD untuk pengaturan Timer mode 1

BIT SIMBOL LOGIKA KETERANGAN

TMOD.7 Gate 1 0 Tidak diperlukan control dari luar

TMOD.6 C/ 0 Dipilih untuk operasi timer

TMOD.5 M1 0 Mode 1, 16 – bit Timer

TMOD.4 M0 1

TMOD.3 Gate 0 0

Untuk Timer 0TMOD.2 C/ 0

TMOD.1 M1 0

TMOD.0 M0 0

Berdasarkan table diatas maka, nilai yang harus diisikan pada register TMOD adalah

0x10 atau 10H.

Selanjutnya untuk mendapatkan pewaktu interupsi sebesar 10ms atau 0,01s, nilai

pada register TH1/TL1 akan dihitung dengan menggunakan perhitungan sebagai berikut.

Dengan menggunakan frekuensi oscillator sebesar 22,1184 Mhz, perhitungannya menjadi.

Jika nilai tersebut di konversikan menjadi bilangan hexadecimal maka akan didapatkan nilai

TH1&TL1 = 0xB800 atau B800H. Sehingga untuk nilai register TH1 = 0xB8 dan untuk

register TL1 = 0x00.

Untuk mengakifkan interupsi timer 1, bit ‘ET1’ pada register ‘IE’ harus di set (ET1 =

1).

Secara lengkap inisialisasi interupsi timer 1 akan ditunjukkan pada potongan

program berikut ini. Selanjutnya fungsi inisialisasi tersebut akan diketik dan disimpan dalam

file bernama “timer1.c”.

void timer1init()

TMOD |= 0x10; // di’or’kan karena akan dilakukan inisialisasi timer yang lainnya

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 20

Page 21: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

TH1 = 0xb8;TL1 = 0x00;ET1 = 1;TR1 = 1;

Untuk membuat ISR dari interupsi timer 1, perlu dibuat satu fungsi yang bertugas

untuk menjalankan instruksi apa saja yang dilakukan pada saat timer 1 overflow. Di badan

fungsi tersebut dijalankan program aplikasi yang membutuhkan pewaktuan secara periodic

dan juga terdapat instruksi Toggle untuk rangkaian watch dog. Pada akhir fungsi tersebut

dituliskan reload dari register TH1 dan TL1. Pejelasan mengenai alur instruksi Toggle watch

dog akan dijelaskan pada bagian berikutnya.

void tmr1 (void) interrupt TF1_VECTOR using 2 //ISR Timer 1

…………… /////////////////////////////////////////if (++bkgndwdcnt<300) // // badan fungsi ISR Timer 1

IO1PBMEM ^= 0x80; //IO1PB = IO1PBMEM; //

//////////////////////////////////////TH1 = 0xb8; TL1 = 0x00;

Selanjutnya fungsi ISR tersebut akan diketik dan disimpan juga dalam file bernama

“timer1.c”.

14.2.2.3 Pendefinisian Interupsi Timer 0

Seperti Timer 1, Timer 0 akan pula diaplikasikan pada program. Hanya saja nilai

pewaktuannya sebesar 1ms. Untuk itu perlu dilakukan pula inisialisasi pada register TMOD.

Mode timer yang digunakan adalah sama seperti Timer 1 yaitu mode 1 yang merupakan

mode 16-bit timer.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 21

Page 22: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Tabel 14.4 Susunan bit Register TMOD untuk pengaturan Timer mode 0

BIT SIMBOL LOGIKA KETERANGAN

TMOD.7 Gate 1 0 Untuk Timer 1

TMOD.6 C/ 0

TMOD.5 M1 0

TMOD.4 M0 0

TMOD.3 Gate 0 0 Tidak diperlukan control dari luar

TMOD.2 C/ 0 Dipilih untuk operasi timer

TMOD.1 M1 1 Mode 1, 16 – bit Timer

TMOD.0 M0 0

Berdasarkan table diatas maka, nilai yang harus diisikan pada register TMOD adalah

0x01 atau 01H.

Selanjutnya untuk mendapatkan pewaktu interupsi sebesar 1ms atau 0,001s, nilai

pada register TH1/TL1 akan dihitung dengan menggunakan perhitungan sebagai berikut.

Dengan menggunakan frekuensi oscillator sebesar 22,1184 Mhz, perhitungannya menjadi.

Untuk pembulatan maka nilai yang diambil adalah TH1&TL1 = 63693 Jika nilai tersebut

dikonversikan menjadi bilangan hexadecimal maka akan didapatkan nilai TH1&TL1 =

0xF8CD atau F8CDH. Sehingga untuk nilai register TH1 = 0xF8 dan untuk register TL1 =

0xCD.

Untuk mengakifkan interupsi timer 0, bit ‘ET0’ pada register ‘IE’ harus di set (ET0 =

1).

Secara lengkap inisialisasi interupsi timer 0 akan ditunjukkan pada potongan

program berikut ini. Selanjutnya fungsi inisialisasi tersebut akan diketik dan disimpan dalam

file bernama “timer0.c”.

void timer0init()

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 22

Page 23: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

TMOD |= 0x01; // di’or’kan karena akan dilakukan inisialisasi timer yang lainnya

TH0 = 0xf8;TL0 = 0xcd;ET1 = 1;TR1 = 1;

Untuk membuat ISR dari interupsi timer 0, perlu dibuat satu fungsi yang bertugas

untuk menjalankan instruksi apa saja yang dilakukan pada saat timer 0 overflow. Pada akhir

fungsi tersebut juga dituliskan reload dari register TH0 dan TL0.

void tmr1 (void) interrupt TF0_VECTOR using 2 //ISR Timer 0

…………… /////////////////…………… //badan fungsi ISR Timer 0……………. /////////////////TH0 = 0xf8;TL0 = 0xcd;

Selanjutnya fungsi ISR tersebut akan diketik dan disimpan juga dalam file bernama

“timer0.c”.

14.2.3 Perancangan Background Program

Di dalam background program, segala instruksi yang berkenaan dengan kinerja

hardware dan alur looping program dikerjakan. Jadi fungsi tersebut harus dijalankan di

setiap saat di mana fungsi looping dijalankan. Fungsi ini diberi return type bertipe ‘bit’

Dalam fungsi background ini terdapat isntruksi yang meg’acknowledge’ nilai counter

dari proses toggle watch dog yang dikerjakan dalam fungsi interupsi Timer 1. Proses

acknowledge ini dilakukan dengan meng’clear’ kan nilai variable ‘bkgndwdcnt’

(bkgndwdcnt=0). Proses ini akan membuat nilai dari variable ‘bkgndwdcnt’ tidak akan

sampai pada nilai 300 dan proses toggle akan terus berjalan sehingga rangkaian watch dog

tidak akan me’reset’ system. Untuk itu fungsi yang sedang looping harus terus menjalankan

fungsi ini paling tidak untuk jeda waktu sekitar 3 detik.

Bagian pengatur looping program memanfaatkan dua buah variable yang bertipe

‘*void’ (pc & c) yang sebelumnya telah didefinisikan di file main.h.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 23

Page 24: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.17 Alur penentuan nilai variable ‘*void’

Dari alur program di atas terlihat bahwa, program akan memberikan nilai return = 1

pada fungsi jika nilai variable pc & c tetap sama atau tidak berubah. Hal ini menjelaskan

bahwa didalam looping program yang sedang dikerjakan tidak ada perpindahan looping

fungsi.

Jika dari hasil perbandingan nilai pc c maka, dalam looping program terdapat

perpindahan looping fungsi. Hal ini membuat nilai return akan sama dengan 0.

bit bkgnd()

…………….…………….bkgndwdcnt = 0;if (pc!=c)

c = pc;return 0;

else

return 1;

Potongan program diatas akan ditulis dan disimpan dalam file bernama main.c.

Selanjutnya penjelasan tentang penggunaan fungsi ‘bkgnd()’ dalam aplikasi akan

ditunjukkan dalam pembuatan program aplikasi pada bagian selanjutnya.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 24

Page 25: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.2.4 Perancangan Routine Serial

Prosedur komunikasi serial yang dibuat haruslah dapat menerima dan mengolah

karakter huruf dan angka. Untuk itu dalam pembuatan routine ini akan banyak melibatkan

operasi karakter. Dengan menggunakan Standart Library dari bahasa C operasi – operasi

karakter tersebut akan mudah sekali dibuat.

Protocol serial yang akan dibuat akan disesuaikan dengan target modul yang akan

dikontrol. Jadi pengguna akan bisa mengaplikasikan protocol serial sesuai keinginan.

Setiap frame data serial akan disekat menggunakan karakter titik (“.”) dan diakhiri

dengan penekanan tombol ENTER (“ ”).

Gambar 14.18 Alur pengolahan data dari port serial

Pada alur program di atas akan terlihat dengan jelas penggunaan dari fungsi

interupsi serial. Dalam fungsi ini data akan terima dengan mendeteksi serial flag (RI = 1).

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 25

Page 26: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Dalam fungsi ini juga akan mendeteksi flag pengiriman data (TI = 1) dan segera meng’clear’

kan flag tersebut. Berikut potongan program dalam fungsi interupsi serial seluruhnya dalam

program.

void scommain() interrupt SIO_VECTOR using 2

if(RI)

scombuf = SBUF;scomflg |= 1; // byte received. scomflg should be clearRI = 0;

else if(TI)

scomflg &= ~(2); // byte has been sentTI = 0;

Setelah data diterima, selanjutnya akan ditampung terlebih dulu di array. Kapasitas

dari array yang disediakan dalam aplikasi ini adalah 110 byte. Jadi pengguna akan lebih

fleksibel dalam membuat protocol instruksi untuk mengontrol masing – masing modul target.

Variable array tersebut didefinisikan dengan tipe data ‘unsigned char’.Dalam fungsi interupsi

tersebut data tidak langsung dimasukkan dalam array, tetapi ditampung sementara dalam

variable ‘scombuf’. Dengan mengaktifkan flag (scomflag |= 1) maka fungsi ‘getcmd()’

selanjutnya akan mengenali adanya penerimaan byte.

Dalam fungsi ‘getcmd()’ tersebut, data yang sudah diterima akan dikirimkan kembali

ke PC melalui port serial. Hal ini bertujuan sebagai umpan balik bahwa data sudah diterima

oleh MCU.

Pengolahan data akan dilakukan jika dalam penerimaan data dideteksi adanya

karakter tombol ENTER yang dalam kode ASCII berkarakter 13H atau 0x13. Berikut adalah

potongan program selengkapnya dari fungsi ‘getcmd()’.

void getCmd(void)

// check serialif(!(scomflg & 1))

return;if(scombuf == 13) // ENTER

sendstr("\r\n");if(scbx)

scmdbuf[scbx] = '\0';scomflg |= 0x04;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 26

Page 27: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

scbx = 0; //inisialisasi index scombuf untuk memecah frame dari awal

else

scmdbuf[scbx] = (char)scombuf;scbx++;sendch(scombuf);

scomflg &= ~1;

Dalam fungsi tersebut juga terlihat bahwa setelah karakter ENTER diterima, maka

index selanjutnya dari byte array penampung akan diterminasi oleh karakter ‘NULL’ (‘\0’).

Fungsi getcmd() ini akan dijalankan terus – menerus, untuk itu fungsi ini akan dijalankan

dalam background program (‘bkgnd()’).

Fungsi selanjutnya yang akan digunakan dalam program adalah fungsi ‘parsecmd()’.

Fungsi ini bertugas untuk memecah setiap frame data yang dikirimkan.

Seperti yang telah dijelaskan sebelumnya, setiap frame data akan disekat

menggunakan karakter titik (“.”) dalam setiap pengiriman data dari PC. Dalam fungsi ini

karakter – karakter titik tersebut akan dikenali dan setiap frame data yang diterminasi oleh

karakter titik tersebut akan diambil kemudian ditempatkan ke array lain (‘scparsed’) untuk

diolah sebagai instruksi atau parameter data.

Terminasi karakter titik kemudian akan digantikan dengan karakter ‘\0’ dalam

variable array ‘scparsed’ tersebut. Hal ini bertujuan untuk memudahkan pengolahan instruksi

atau data dengan fungsi standar C.

Dari alur program di bwah ini terlihat bahwa fungsi ‘parseCmd()’ digunakan untuk

memecah frame data yang dikirim lewat port serial. Hasil dari fungsi tersebut ditempatkan

pada array yang bernama ‘scparsed’. Jadi pada penggunaannya, array ‘scparsed’ ini akan

harus selalu dibaca oleh program setelah fungsi ‘parseCmd()’ dijalankan. Berikut adalah

potongan program fungsi ‘parseCmd()’.

bit parseCmd(void)

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 27

Page 28: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.19 Alur fungsi ‘parsecmd()’

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 28

Page 29: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

register bit br = 1;

scp = 0;while(1)

scparsed[scp] = scmdbuf[scbx];scp++; scbx++;if(scmdbuf[scbx]=='.')

scparsed[scp] = '\0';scbx++;return 1;

if(scmdbuf[scbx]=='\0')

scparsed[scp] = '\0';if(br) return 1;return 0;

return 1;

Selain routine mengenai pengolahan data yang diterima, routine lain yang bisa

digunakan adalah routine pengiriman karakter dari MCU ke PC. Routine ini harus bisa

mengirimkan karakter ke PC secara berkesinambungan melalui port serial.

Untuk mengirimkan byte yang berurutan sekaligus, perlu dibuatkan fungsi yang bisa

mengakomodir pengriman data string. Fungsi tersebut akan mengrimkan data array string

dari sebuah fungsi jika fungsi tersebut dijalankan dengan memuat argument string di fungsi

tersebut.

Gambar 14.20 Alur program pengiriman data serial

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 29

Page 30: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Fungsi yang digunakan untuk mengirim data serial tersebut adalah fungsi ‘sendstr’.

Fungsi tersebut mempunyai argument yang berupa data string yang kemudian akan

dikirimkan ke PC melalui transfer serial.

void sendstr(char* str)

register unsigned char i=0;

while(str[i] != '\0')

sendch(str[i]);i++;

Dari potongan program diatas, jika pemrogram akan mengirimkan data serial maka

cukup menuliskan pada contoh.

……..……..sendstr(“Universitas Mercu Buana”);

14.2.5 Perancangan Routine Scanning Keypad

Pada salah satu target modul dalam aplikasi ini terdapat penggunaan keypad matrix.

Untuk itu perlu dibuatkan suatu routine untuk mengakomodasi pengaturan input dari

penekanan tombol pada keypad tersebut.

Pengecekan tombol – tombol pada keypad bisa dilakukan dengan cara memasukkan

terminal – terminal dari keypad tersebut ke Port PPI yang bisa difungsikan menjadi input dan

output. Dalam hal ini port PPI yang bisa dipakai adalah Port C. Port tersebut akan

diinisialisasikan sebagai 4-bit input dan 4-bit output.

Program scanning keypad ini pada dasarnya terbagi atas 2 fungsi. Fungsi pertama

berfungsi sebagai pendeteksi tombol yang ditekan dan sekaligus penghilang efek

‘debounce’ dari proses mekanika saklar. Fungsi yang kedua berfungsi untuk melakukan

‘decode’ dari tombol yang ditekan.

Fungsi yang pertama bernama fungsi ‘kphit’. Fungsi ini betipe nilai return bit. Fungsi

ini akan bernilai = 0 jika dalam pengecekan tidak ditemukan tombol yang ditekan sedangkan

akan bernilai 1 jika ditemukan adanya tombol yang ditekan. Fungsi ini juga melakukan

prosedur delay untuk meredam bounce yang terjadi pada proses penekanan saklar.

Untuk memudahkan melakukan routine tersebut, maka dibuat suatu struktur data

yaitu ‘Keypad’.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 30

Page 31: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

typedef struct _keypad unsigned char debouncecnt;unsigned char flg; //b0=lowdetect; b1=detect finished;

Keypad;Keypad keypad;

Inisialisasi di atas mendefinisikan variable ‘keypad’ mempunyai field yaitu

‘debouncecnt’ dan ‘flg’. Field ‘deboucecnt’ bertugas untuk menjalankan counter untuk

proses delay debounce. Proses delay ini memanfaatkan Timer 1 untuk penghitungan

prescaller nya.Field yang kedua adalah ‘flg’ yang berfungsi untuk sebagai flag status dari

proses keseluruhan debounce. Program selengkapnya ditunjukkan oleh potongan program

berikut.

bit kphit()

IO2PC &= ~rowscan;IO2PCMEM = IO2PC;if((IO2PCMEM&0x0F)!=0x0F)

if (!(keypad.flg&0x01))

keypad.debouncecnt=8;keypad.flg=0x01;

if ((keypad.debouncecnt==0)&&(keypad.flg&0x01))

keypad.flg=0x02;return 1;

else

IO2PC |= 0xF0;rowscan *= 2;if (rowscan==0x80)

rowscan=ROW3;

return 0;

Fungsi yang kedua bernama ‘getch()’. Fungsi tersebut mempunyai nilai return yang

bertipe ‘char’. Nilai return tersebut akan merepresentasikan hasil dari penekanan keypad.

Nilai yang dihasilkan dari fungsi ini akan menunjukkan karakter dari tombol yang diwakilkan.

Karakter tersebut akan bernilai ‘0’ – ‘9’ dan juga karakter ‘*’ dan ‘#’.

Nilai penekanan tombol akan bisa terbaca dari hasil scanning yang dilakukan oleh

fungsi ‘kphit()’. Hasil dari scanning tersebut akan di’latch’ dalam variabel memory dan

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 31

Page 32: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

di’masking’. Hasil masking data tersebut akan digunakan untuk memilih karakter yang akan

dihasilkan.

Gambar 14.21 Alur pemberian karakter pada fungsi ‘getch’

Fungsi ‘getch()’ ini hanya bisa dikerjakan setelah menjalankan fungsi ‘kphit()’. Jadi dalam

aplikasinya fungsi ‘getch()’ ini selalu berdampingan dengan fungsi ‘kphit()’. Berikut adalah

potongan program lengkap dari fungsi ‘getch()’.

char getch()

char key_in='\0';unsigned char tempio;

if (!(keypad.flg&0x02))return key_in;

keypad.flg=0;tempio = IO2PCMEM&0x0F;switch (tempio)case LINE1:

switch (rowscan)case ROW3:

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 32

Page 33: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

key_in = '3';break;

case ROW2:key_in = '2';break;

case ROW1:key_in = '1';break;

break;

case LINE2:switch (rowscan)case ROW3:

key_in = '6';break;

case ROW2:key_in = '5';break;

case ROW1:key_in = '4';;break;

break;

case LINE3:switch (rowscan)case ROW3:

key_in = '9';break;

case ROW2:key_in = '8';break;

case ROW1:key_in = '7';break;

break;

case LINE4:switch (rowscan)case ROW3://'#'

key_in = '#';break;

case ROW2:key_in = '0';break;

case ROW1:key_in = '*';break;

break;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 33

Page 34: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

return key_in;

Selanjutnya kedua fungsi tersebut bersama variable pendukungnya diketik dan

disimpan dalam file bernama ‘Keypad.c’.

14.2.6 Perancangan Routine Motor Stepper

Modul target yang selanjutnya akan dibuatkan routine nya adalah modul motor

stepper. Motor stepper yang digunakan dalam aplikasi ini mempunyai jumlah step 200 step

untuk satu putaran penuh.

Pada pengontrolan motor stepper ini akan diaplikasikan mode pengontrolan besar

sudut dan jumlah step dengan dua arah (CW & CCW). Selain itu mode pengontrolan akan

mengaplikasikan mode half-step dan juga full-step.

Dalam pengoperasiannya routine ini juga dapat menentukan perioda pulsa clock

yang dipergunakan untuk menjalankan stepper. Jadi dalam pengoperasiannya pengguna

dapat menentukan langsung perioda clock yang akan dipakai.

Sebelum membuat routine motor stepper, terlebih dahulu dibuatkan struktur data

yang berisikan variable – variable yang digunakan.

typedef struct _steppermotor unsigned int stepcount;unsigned char pulsetm;unsigned char flg;

Stepper;

Stepper stepper;

Field stepcount akan digunakan sebagai penghitung jumlah step. Field ini

menggunakan tipe data integer sehingga nantinya jumlah putaran yang bisa dilakukan akan

bisa mencapai sekitar 100000 derajat putaran.

Field pulsetm berfungsi sebagai variable pewaktuan dari perioda clock yang

digunakan. Karena routine ini dijalankan dalam fungsi Timer 0, maka nilai pewaktuan akan

mengacu pada nilai perkalian dari 1 ms. Field ini menggunakan tipe data karakter tak

bertanda (unsigned char), jadi nilai dari perioda clock maksimum yang bisa dijalankan

adalah sekitar 255 ms.

Field flg digunakan sebagai flag dalam routine ini. Flag ini akan menentukan mode

kerja dari motor stepper tersebut. Field ini menggunakan tipe data karakter tak bertanda

yang dapat memuat 8 – bit informasi flag. Definisi dari informasi setiap bit akan dijelaskan

dalam table berikut.

Tabel 14.5 Perincian Field flg dalam routine stepper

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 34

Page 35: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

BIT Fungsi KETERANGAN

D7 -

ReservedD6 -

D5 -

D4 -

D3 Mode Torsi 0 = full step, 1 = half step

D2 Update arah

putar

0 = inisialisasi bit perputaran, 1 = perputaran

berlangsung

D1 Arah putar 0 = CW, 1 = CCW

D0 Enable 0 = motor stop, 1 = aktifkan motor

Dalam pergeseran bit untuk menjalankan motor akan digunakan look up table yang

berupa array dari nilai – nilai pergeseran bit. Ada dua jenis Array yang digunakan, yang

pertama untuk melakukan putaran full step, sedangkan yang lainnya untuk putaran half step.

const unsigned char steppattern[4] = 0x10,0x20,0x40,0x80;

const unsigned char halfstepattern[8] = 0x10,0x30,0x20,0x60,0x40,0xC0,0x80,0x90;

Putaran dilakukan dengan cara menaik – turunkan nilai index dari array tersebut.

Nilai – nilai dari variable array tersebut didasarkan pada konektifitas rangkaian MCU dengan

modul motor stepper.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 35

Page 36: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.22 Alur Routine motor stepper

Karena routine motor stepper ini dijalankan pada fungsi Timer maka, seluruh variable

local yang digunakan pada routine ini bertipe static. Program selengkapnya mengenai

routine motor stepper ini akan ditujukkan oleh potongan program berikut ini. Selanjutnya

potongan program berikut dengan semua definisi variable yang digunakan diketik dan

disimpan dalam file yang bernama ‘stepper.c’.

void steppermotor_engine()

static unsigned int stepper_prescaller=1;static unsigned int stepcount=0;static char i=0;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 36

Page 37: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

if ((stepper.flg&0x02)&&!(stepper.flg&0x04))i=0;

else if (!(stepper.flg&0x02)&&!(stepper.flg&0x04)) i = stepper.flg&0x08 ? 7 : 3;

if (stepper.flg&0x01)

stepper.flg |= 0x04;if (--stepper_prescaller==0)

stepper_prescaller = stepper.pulsetm;IO2PAMEM = stepper.flg&0x08 ? (IO2PAMEM &= ~0xF0) |

halfstepattern [i] : (IO2PAMEM &= ~0xF0) | steppattern [i];IO2PA = IO2PAMEM;if (stepper.flg&0x02)

if (stepper.flg&0x08)

if (++i>=8)i=0;

else

if (++i>=4)

i=0;

else if (!(stepper.flg&0x02))

if (--i<0)i = stepper.flg&0x08 ? 7 : 3;

if (++stepcount>stepper.stepcount)

IO2PAMEM &=~0xF0;IO2PA = IO2PAMEM;stepper.flg = 0;

else

stepper_prescaller=1;stepcount=0;IO2PAMEM &=~0xF0;IO2PA = IO2PAMEM;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 37

Page 38: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.2.7 Perancangan Routine Motor DC

Pada aplikasi selanjutnya akan dibuatkan juga routine untuk menjalankan modul

Motor DC. Seperti hal nya motor stepper, routine motor DC ini juga menggunakan

pewaktuan Timer 0.

Routine yang akan dibuat akan mengacu pada rangkaian modul motor DC dengan

system pengoperasian dengan PWM. Namun dalam routine ini juga akan diberikan

pengaturan periode dari pulsa PWM secara manual. Selain itu juga routine yang dibuat akan

bisa mengatur arah putaran (CW atau CCW).

Sebagai variable pendukung maka akan dibuatkan struktur data untuk motor DC ini.

typedef struct Mot_DC unsigned int period;unsigned int tm_off;unsigned int tm_on;unsigned char flg; //b0 = motor enable; b1 = '0' 0ff, '1'

on, motorDC;

motorDC motcount;

Field period digunakan sebagai pencatat prescaller waktu untuk memberikan

perioda dari pulsa PWM. Field ini bertipe data integer tak bertanda maka waktu perioda

maksimum yang bisa digunakan adalah sampai 65,535 detik. Tetapai dalam aplikasi ini

perioda tersebut akan dibatasi sampai 500 ms saja.

Field tm_on dan tm_off akan mencatat pewaktuan ‘on’ dan ‘off’ motor. Field tm_on

akan mencatat prescaller waktu untuk ‘on’, sedangkan tm_off untuk ‘off’. Kedua field ini

bertipe data integer tak bertanda untuk menyesuaikan dengan waktu periode.

Field flg akan digunakan sebagai flag dalam routine. Posisi bit D0 untuk

mengaktifkan motor, sedangkan posisi D1 untuk memberi tanda bahwa motor sedang ‘on’

atau ‘off’. Field flg ini bertipe data karakter tak bertanda.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 38

Page 39: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.23 Alur Routine Motor DC

Seperti halnya motor stepper, penggunaan variable local dalam routine ini juga

bersifat static variable. Potongan program selanjutnya adalah routine selengkapnya dari

motor DC. Kemudian seluruh routine berikut dengan variable yang didefinisikan diketik dan

disimpan dalam file yang bernama ‘motor DC.c’.

void MotorDC_engine()

static unsigned char motorcnt=0;

if (motcount.flg&0x01)

switch (motcount.flg&0x02)case 0x00:

if(motorcnt==0)

motorcnt=motcount.tm_on;IO1PAMEM |= 0x04;

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 39

Page 40: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

IO1PA = IO1PAMEM;motcount.flg|=0x02;

else

motorcnt--;break;

case 0x02:if(motorcnt==0)

motorcnt=motcount.tm_off;IO1PAMEM &= ~0x04;IO1PA = IO1PAMEM;motcount.flg&=~0x02;

else

motorcnt--;break;

else

motorcnt=0;

14.2.8 Perancangan Routine display 7 segment

Pada aplikasi tugas akhir ini juga akan dibuatkan routine untuk menjalankan modul 7

segment. Routine yang dibuat akan bisa menampilkan karakter huruf dan angka pada

display, namun tak tertutup kemungkinan juga bisa untuk menciptakan berbagai animasi

menggunakan 7 segment display.

Sesuai dengan system pada hardware, display 7 segment dinyalakan dengan

menggunakan metode shift register. Penyalaan akan dilakukan dengan memetakan

sejumlah byte data parallel dari buffer ke buffer lainnya. Buffer pertama digunakan untuk

menampung data yang diambil dari look up table. Sedangkan buffer kedua digunakan

sebagai hasil pemetaan dan dikeluarkan lewat port PPI.

Buffer pertama berupa array yang berukuran 8 byte data. Ukuran array tersebut

menyesuaikan jumlah display 7 segment yang berjumlah 8 digit. Array ini adalah array lapis

atas yang diakses langsung oleh program utama jika ingin menampilkan karakter pada

display. Urutan byte data pada array akan ditunjukkan oleh gambar berikut.

Gambar 14.24 Susunan data buffer lapis 1 pada display

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 40

Page 41: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Buffer kedua bernama ‘dispport’ yang merupakan physical buffer. Data pada buffer

ini akan digunakan langsung oleh port untuk menyalakan display. Buffer ini berukuran 64

byte yang masing – masing byte nya akan menyalakan 1 buah segment LED yang

memerlukan hanya 1 bit dari masing – masing byte array ini.

Kedua buffer ini selanjutnya dihubungkan oleh sebuah fungsi yang bernama

‘upddisp()’. Fungsi ini bertipe ‘void’ dan bertugas untuk memetakan data pada buffer

‘dispbuff’ ke buffer ‘dispport’.

Gambar 14.25 Alur program fungsi ‘upddisp()’

Berikut adalah potongan program lengkap dari fungsi ‘upddisp()’.

void upddisp()

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 41

Page 42: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

register unsigned char i,j,k,m;

k = 63;for(i=0;i<8;i++)

j=0x01;do

m = dispport[k];dispport[k] = dispbuff[i] & j? m&~0x20 : m|0x20;

k--;j *= 2;

while (j);

Data yang diisikan ke buffer ‘dipbuff’ merupakan data dari array look up table yaitu

array ‘dis7seg’. Array ini berukuran 128 byte dan berisikan data penyalaan 7 segment yang

indexnya disesuaikan dengan format data karakter ASCII yang mungkin untuk ditampilkan

pada display 7 segment. Jadi, pengisian buffer ‘dispbuff’ dapat dilakukan dengan

meng’copy’ kan data pada array ‘dis7seg’ yang ditentukan indexnya. Seperti pada contoh

dibawah ini, pada display akan menampilkan tulisan ‘-LINGGA-’.

dispbuff [7] = dis7seg[‘-‘];dispbuff [6] = dis7seg[‘L’];dispbuff [5] = dis7seg[‘I’];dispbuff [4] = dis7seg[‘n’];dispbuff [3] = dis7seg[‘G’];dispbuff [2] = dis7seg[‘G’];dispbuff [1] = dis7seg[‘A’];dispbuff [0] = dis7seg[‘-‘];upddisp();

Selanjutnya, data yang sudah dipetakan ke buffer ‘dispport’ tersebut akan

dikeluarkan ke port melalui prosedur sebuah fungsi bernama ‘outport()’. Fungsi ini dijalankan

untuk memberikan update penyalaan display 7 segment.

Data dikeluarkan melalui port parallel secara serial sinkron. Setiap data yang

dikeluarkan, port membangkitkan sinyal clock. Setelah data terkirim semua sebanyak 64 bit,

port juga akan membangkitkan sinyal latch.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 42

Page 43: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Gambar 14.26 Alur program fungsi ‘outport()’

Dari alur diatas maka dapat dibuat fungsi ‘outport yang bertipe ‘void’. Berikut adalah

potongan program selengkapnya dari fungsi outport().

void outport()

register unsigned char i,ck=0x80;

IO1PC = IO1PCMEM = 0xC0;for(i=0;i<64;i++)

IO1PCMEM &= ~0x20;IO1PCMEM |= (dispport[i]&0x3F);IO1PC = IO1PCMEM;IO1PCMEM ^= ck; IO1PC = IO1PCMEM;IO1PCMEM ^= ck; IO1PC = IO1PCMEM;

ck = 0x40;IO1PCMEM ^= ck; IO1PC = IO1PCMEM;IO1PCMEM ^= ck; IO1PC = IO1PCMEM;

Fungsi outport tersebut harus dijalankan terus menerus dengan tujuan untuk

menjamin keadaan logika dari rangkaian modul 7 segment dapat stabil dalam menyalakan

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 43

Page 44: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

display. Oleh karena itu fungsi outport tersebut akan jalankan pada fungsi ‘bkgnd()’.

Selanjutnya seluruh potongan program, inisalisasi variable, dan array look up table ditulis

dan disimpan dalam file bernama ‘sevensegment.c’

14.2.9 Perancangan Routine RTC

RTC digunakan sebagai pembangkit data waktu dan tanggal. Untuk mengatur

transfer data dari dan ke RTC, perlu dibuatkan satu prosedur untuk menanganinya.

Untuk menampung data – data RTC, dibuatkan satu struktur data untuk RTC.

Struktur tersebut akan memuat data – data nilai, alamat dan flag dari setiap register RTC

yang digunakan.

typedef struct _RTC_

unsigned char value;unsigned int addr;

unsigned char flg; RTC;

#define MAXRTCDATA 14#define RTCSTADDR 0x8000

#define SECOND 0#define SECOND_AL 1#define MINUTE 2#define MINUTE_AL 3#define HOUR 4#define HOUR_AL 5#define DAY 6#define DATE 7#define MONTH 8#define YEAR 9#define REG_A 10#define REG_B 11#define REG_C 12#define REG_D 13

Field ‘value’ digunakan untuk menampung data nilai dari RTC itu sendiri. Field ini

bertipe data karakter tak bertanda karena data yang akan diakses berkapasitas 8 – bit.

Field ‘addr’ digunakan untuk menampung data alamat dari setiap register RTC.

Sesuai dengan perancangan hardware sebelumnya, alamat dari register – register RTC

akan menempati jangkauan 0x8000 sampai 0x800D (alamat maksimum register RTC

12C887). Oleh karena itu Field ‘addr’ ini diberi tipe data integer tak bertanda untuk

menampung data alamat dari jangkauan tersebut.

Filed ‘flg’ digunakan untuk menyimpan flag dari setiap register RTC yang digunakan.

Flag ini merupakan flag dari informasi transfer data RTC ke MCU. Field ini diberi tipe data

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 44

Page 45: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

karakter tak bertanda yang dapat menampung maksimum 8 – bit informasi flag. Bit – 0 dari

flag ini digunakan sebagai tanda bahwa register RTC yang diakses perlu diupdate.

Fungsi pertama yang akan dibuat adalah fungsi untuk melaksanakan prosedur

inisialisasi dari RTC. Fungsi ini diberi nama ‘initRTC’.Fungsi ini bertugas untuk mengisikan

nilai pada register control pada RTC.

Register pertama yang akan diakses adalah register A. Pengaturan bit – bit pada

register A akan diperlihatkan oleh table berikut.

Tabel 14.6 Pengaturan bit control dari register A pada RTC

BIT SYMBOL LOGIKA KETERANGAND7 UIP 0 Read OnlyD6 DV2 0

Membentuk pola 010 untuk mengkatifkan internal oscillator

D5 DV1 1D4 DV0 0D3 RS3 0

Square wave Output tidak dipakaiD2 RS2 0D1 RS1 0D0 RS0 0

Berdasarkan table diatas maka nilai yang harus diisikan pada register A adalah 20H

atau 0x20.

Register selanjutnya yang perlu diakses adalah register B. Pengaturan bit – bit pada

register B akan diperlihatkan oleh table berikut.

Tabel 14.7 Pengaturan bit control dari register A pada RTC

BIT SYMBOL LOGIKA KETERANGAND7 SET 0 Proses update dibutuhkanD6 PIE 0 Tidak memakai interupsi periodicD5 AIE 0 Tidak memakai interupsi alarmD4 UIE 0 Tidak memakai update interupsi periodicD3 SQWE 0 Tidak digunakanD2 DM 1 Mode BinaryD1 24/12 1 Mode 24HD0 DSE 0 Tidak digunakan

Berdasarkan table, maka nilai yang harus diisikan pada register B adalah 06H atau

0x06.

Sebelum mengatus register control dari RTC tersebut, sebelumnya proses inisialisasi

melakukan pengisian alamat masing – masing register pada Field ‘addr’ pada struktur RTC.

Selanjutnya pengaksesan pada setiap register RTC bisa dilakukan dengan menggunakan

alamat soft code. Program selengkapnya untuk inisialisasi RTC ditunjukkan pada potongan

program berikut.

void initRTC()

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 45

Page 46: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

register unsigned char i; unsigned int startaddr=0;

startaddr = RTCSTADDR;for (i=0;i<MAXRTCDATA;i++) //load data address ke struktur

'rtcdata[].addr'

rtcdata[i].addr = startaddr;startaddr++;

XBYTE[rtcdata[REG_A].addr] = 0x20;//set oscilator patternXBYTE[rtcdata[REG_B].addr] = 0x06;//binary mode, 24H mode

Fungsi selanjutnya yang akan dibuat adalah fungsi untuk melakukan update pada

nilai register RTC. Fungsi ini diberi nama ‘updateRTC()’. Fungsi akan melakukan proses

update ke setiap register RTC yang butuh untuk diupdate kecuali register – register control.

Berikut adalah potongan program selengkapnya dari fungsi ‘updateRTC()’.

void updateRTC()

register unsigned char i;

for (i=0;i<MAXRTCDATA-4;i++)//tidak termasuk control register.....A, B, C, D

if (rtcdata[i].flg & 1)

XBYTE[rtcdata[i].addr] = rtcdata[i].value;while (XBYTE[rtcdata[REG_A].addr]&8);rtcdata[i].flg &= ~1;

Fungsi selanjutnya yang akan dibuat adalah fungsi ‘readRTC()’. Fungsi ini bertugas

untuk memantau data pada register – register RTC kecuali register control. Isi data pada

register RTC ini akan dibaca setiap saat supaya mendapatkan pembacaan data yang cukup

real time. Program selengkapnya dari fungsi ini selanjutnya akan ditunjukkan oleh potongan

program berikut ini.

void readRTC()

register unsigned char i;for (i=0;i<MAXRTCDATA-4;i++)

rtcdata[i].value = XBYTE[rtcdata[i].addr];

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 46

Page 47: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

Selanjutnya, seluruh potongan program dan inisialisasi variable untuk RTC diketik

dan disimpan pada file yang bernama RTC.c.

14.2.10 Perancangan Routine Inisialisasi

Pada proses inisialisasi, program akan melakukan inisialisasi untuk keseluruhan

program beserta modul target yang terpakai. Diantaranya adalah, inisialisasi pada Port PPI.

Inisialisasi Port PPI dilakukan untuk menentukan Port mana yang berfungsi sebagai

output dan yang berfungsi sebagai input. Hampir semua target modul memerlukan Port

sebagai output, seperti Motor DC, Stepper, 7 segment display. Sedangkan yang

memerlukan sebagaian Port sebagai input adalah Modul Keypad.

Pada inisialisasi ini juga ditentukan nilai awal untuk keadaan Port. Keadaan awal

yang perlu ditentukan adalah keadaan awal Port untuk Motor DC dan Motor Stepper.

Potongan program dari fungsi inisialisasi ini akan ditunjukkan oleh potongan program berikut

ini.

void initPPI()

IO1CW = 0x80;IO2CW = 0x83;//c upper out, c lower inIO1PAMEM = IO1PA = 0x00;IO2PAMEM = IO2PA = 0xF0;

Pembahasan tenatang inisialisasi ini juga meliputi pendefinisian pengarah Pre-

processor. Pengarah Pre-processor dilakukan untuk melakukan pemilihan file yang akan

disertakan pada program. Hal ini untuk memudahkan pengguna dalam melakukan edit-

program.

Fungsi keseluruhan inisialisasi ini akan dilakukan dalam fungsi yang bernama

‘init_utility()’. Dalam fungsi ini akan dilakukan keseluruhan inisialisasi pada program.

Potongan program selengkapnya dari fungsi inisialisasi ini akan ditunjukkan oleh potongan

program berikut.

#define _SERIAL_//////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////#define _TMR1_ // //#define _TMR0_ // Pengarah pre processor di definisikan disini //#define _sevensegment_ // //#define _STEPPER_ // //#define _MOTORDC_ // //

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 47

Page 48: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

#define _KEYPAD_ // //#define _RTC_

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <AT89X52.h> //header file untuk SFR CPU 8052#include <absacc.h> //

#include <ctype.h> //standard header untuk string control#include <stdio.h> //standard header untuk standard I/O#include <stdlib.h> //header untuk fungsi konversi string#include <string.h> //header fungsi - fungsi operasi string

#include "decoder.h" //pendefinisian external peripheral e.g PPI, dll#include "main.h" //pendefinisian variable yang ada di main.C#ifdef _SERIAL_

#include "serial.c" //fungsi dan interrupt serial ada di sini#endif#ifdef _RTC_

#include "RTC.c" //fungsi - fungsi RTC#endif#ifdef _KEYPAD_

#include "Keypad.c" //fungsi - fungsi operasi keypad matrix#endif#ifdef _sevensegment_

#include "sevensegment.c"//fungsi dan routine 7 segment#endif#ifdef _MOTORDC_

#include "motorDC.c" //fungsi dan routine menjalankan Motor DC#endif#ifdef _STEPPER_

#include "stepper.c" //fungsi dan routine menjalankan motor stepper#endif#include "program_aplikasi.c" // contoh contoh aplikasi program ada disini#ifdef _EXT0_

#include "ex_int0.c" //fungsi interrupt external0#endif#ifdef _EXT1_

#include "ex_int1.c" //fungsi interrupt external1#endif#ifdef _TMR0_

#include "timer0.c" //fungsi dan interrupt timer 0#endif#ifdef _TMR1_

#include "timer1.c" //fungsi dan interrupt timer 1#endif

void initPPI()

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 48

Page 49: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

IO1CW = 0x80;IO2CW = 0x83; //c upper out, c lower inIO1PCMEM = 0xC0;IO1PAMEM = IO1PA = 0x00;IO2PAMEM = IO2PA = 0xF0;

void init_utility()

P1 = 0x00;initPPI();

#ifdef _RTC_initRTC();

#endif#ifdef _EXT0_

ext0init ();#endif#ifdef _EXT1_

ext1init ();#endif

#ifdef _TMR0_timer0init();PT0=1;

#endif#ifdef _TMR1_

timer1init();PT1=1;PT0=0;

#endif#ifdef _SERIAL_

serialinit();PT1=0;PT0=0;PS=1;

#endifEA = 1; //enable semua interrupt

Dalam fungsi ini juga dituliskan prioritas interupsi. Pada aplikasi ini, prioritas interupsi

serial menempati prioritas paling tinggi diikuti interupsi Timer 1 dan Timer 0. Pada akhir

inisialisasi sinyal EA untuk meng enable kan semua interupsi diaktifkan.

Selanjutnya pendefinisian Pre-processor dan semua inisialisasi ini ditulis dan

disimpan dalam file main.c bersama dengan fungsi bkgnd().

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 49

Page 50: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

14.2.11. Perancangan Fungsi ‘main()’

Pada fungsi ‘main()’ terletak fungsi program utama. Setelah dilakukan sinyal RESET

pada rangkaian, register PC pada MCU akan menuju alamat 0000h dan compiller akan

mengatur pelompatan ke fungsi ini secara otomatis.

Pada fungsi ini terdapat pemanggilan fungsi delay untuk menunggu sinyal – sinyal

dari rangkaian stabil. Kemudian barulah dilakukan pemanggilan fungsi inisialisasi.

Selanjutnya fungsi akan melakukan pemanggilan terhadap looping program utama. Pada

aplikasi ini looping program utama akan menuju fungsi aplikasi ‘serial_main_menu()’.

Potongan program dari fungsi main() dan fungsi delay() akan ditunjukkan oleh potongan

program berikut ini.

void delay()

unsigned int i=0xFFFF;do

i--;while (i);

main()

delay();init_utility();

pc = c = serial_main_menu;while (1)

pc(); Selanjutnya fungsi main() dan fungsi delay() tersebut ditulis dan disimpan pada file

main.c.

14.2.12 Pembuatan fungsi – fungsi aplikasi

Dalam pembuatan fungsi aplikasi ada beberapa hal yang perlu diperhatikan.

Diantaranya adalah, penampatan fungsi bkgnd(), dan kerangka pada fungsi aplikasi itu

sendiri. Berikut adalah contoh kerangka dari fungsi aplikasi.

void fungsi_aplikasi() small reentrant //menandakan fungsi bersifat reentrant atau

recursive

…………. //deklarasi variable local yang dipakai

do

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 50

Page 51: 14014-14-730954442828

Modul 14. Sistem Minimum 8051 MK : Mikroprosesor

…………. //badan fungsiwhile(bkgnd()); //fungsi background ditempatkan disini………….. //de-inisialisasi fungsi jika keluar dari

looping program

Fungsi bkgnd() ditempatkan sebagai status dari kondisi ‘do-while’. Kondisi ini akan

menyebabkan looping program dalam fungsi aplikasi tersebut akan berakhir dan akan

menuju looping program pada fungsi aplikasi lainnya jika pada looping ‘do-while’ terdapat

perubahan nilai dari pointer fungsi. Berikut adalah contohnya.

void fungsi_aplikasi_1() small reentrant //Kepala fungsi aplikasi 1

…….. //inisialisasi fungsido //looping do-while dimulai

………………… //badan fungsiIf(…….)

pc = fungsi_aplikasi_2; //looping akan menuju fungsi aplikasi 2

…………While(bkgnd());

Jika pada program aplikasi terdapat penulisan seperti diatas maka, looping program

akan berpindah dari fungsi_aplikasi_1() ke fungsi_aplikasi_2(). Hal ini bisa terjadi jika kondisi

‘if’ terpenuhi. Jika terjadi hal tersebut maka, pembacaan nilai variable ‘pc’ akan berbeda

nilainya dengan variable ‘c’ pada fungsi bkgnd(). Hal itu menyebabkan fungsi bkgnd() akan

mengeluarkan nilai ‘0’ atau false dan menyebabkan kondisi ‘do-while’ dalam fungsi aplikasi

tidak terpenuhi maka, program akan keluar dari fungsi aplikasi tersebut dan menuju fungsi

aplikasi lainnya sesuai yang dituliskan di variable ‘pc’.

Fungsi aplikasi ini bisa dibuat untuk menjalankan modul – modul target yang ada

dengan menggunakan pengontrolan dari komunikasi serial PC, serta menggunakan tools

dan library yang sudah dibuat. Selanjutnya fungsi – fungsi aplikasi ini dituliskan dalam file

program_aplikasi.c.

MikroprosesorIr. Eko Ihsanto, M.Eng

Pusat Pengembangan Bahan AjarUniversitas Mercu Buana

‘11 51