14014-14-730954442828
-
Upload
ivan-firmansyah -
Category
Documents
-
view
14 -
download
8
description
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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