Tampilkan postingan dengan label Mytutorialcafe. Tampilkan semua postingan
Tampilkan postingan dengan label Mytutorialcafe. Tampilkan semua postingan

Senin, 06 September 2010

Programmer ISP menggunakan Port Serial

Programmer ISP menggunakan Port Serial

Keberadaan port parallel semakin lama akan semakin berkurang, apalagi pada sebuah notebook, yang hanya memiliki port USB. Pemrograman mikrokontroller dengan menggunakan port serial masih sangat dimungkinkan sekali, karena telah dijual bebas converter USB to Serial, sehingga dapat digunakan untuk keperluan pemrograman dengan menggunakan rangkaian ini.


Gambar 1. Rangkaian programmer ISP 89sxxx ( dari 8052.com )

Download Software ISP Prog V1.4

Langkah-langkah penggunaan program ISP Prog. V1.4

1.Buatlah rangkaian sesuai dengan gambar tersebut diatas, lakukan pengisian pada mikrokontroller AT89s2051, dengan file FirmWare v.1.4.HEX. dengan menggunakan programmer lain, anda dapat menggunakan programmer secara parallel.

2.Buatlah shorcut file ISP Prog V1.4 dengan gambar seperti yang ditunjukkan pada gambar tersebut dibawah.

3. Klik dua kali pada shortcut tersebut diatas, maka akan keluar display windows, sebagaimana yang ditunjukkan pada gambar. Pada gambar tersebut tampak terdapat tiga buah menu utama: File, Option dan Help. Menu file digunakan untuk mengambil data yang akan diisikan pada IC mikrokontroller. Menu Option digunakan untuk pemilihan setting COM yang akan digunakan (bila anda menggunakan Converter USB to Serial pastikan menempati antara COM1 sampaia dengan COM8, rubahlah melalui sistem di control panel). Device digunakan untuk pemilihan tipe IC yang akan digunakan 89s51, 89s52, 89s8252 dan 89s89s53.

4. Setelah melakukan setting dan pemilihan device, maka programmer siap untuk melakukan proses pemrogramman.dengan langkah-langkah sebagai berikut:


a. Pilih menu CHIP ERASE dan tekan tombol RUN, perhatikan LED pada rangkaian programmer, pada proses penghapusan, LED dalam keadaan nyala, tunggulah sampai dalam keadaan mati.

b. Pilihlah menu WRITE FLASH, dan load data HEX yang akan diisikan pada mikrokontroller, melalui menu utama File - Load Flash File.Tekan tombol RUN apabila data telah di Load. Pada saat proses pengisian maka anda akan melihat status bar berjalan mulai dari 0 % sampai dengan 100 %.

c. Lakukan langkah-langkah a s/d b, setiap akan melakukan proses pemrogramman pada ic mikrokontroller.

Minggu, 05 September 2010

EASY PROGRAMMER ISP 89SXXX

EASY PROGRAMMER ISP 89SXXX

Introduction
Programmer ISP ini dapat digunakan baik pada mode in system programming atau dengan mode stand alone untuk IC ATMEL ISP

Hardware
Rangkaian programmer ini dapat dibuat dengan cara yang sangat sederhana. Anda hanya membutuhkan sebuah IC yang digunakan sebagai buffer 74244.
Koneksikan rangkaian ini ke port printer/ LPT untuk melakukan pemrograman pada rangkaian target.


No
Component
Discription
1
Connector DB 25

2
6 Parallel Cable
about 0.5 meter
3
Connector Header 6 pin

4
House Connector DB 25
5
74LS244
6
PCB
about 5 x 5 cm

Microcontroller Programmer

Figure T.1. Programmer AT89S

Microcontroller Programmer

Figure T.2. Top View Programmer AT89S

Microcontroller Programmer

Figure T.3. Bottom View Programmer AT89S

Download Skematik dan Layout PCB Rangkaian Programmer.
Desain dengan program EAGLE 4.01

Microcontroller Programmer Schematic Diagram

Figure T.4 Schematic Diagram Programmer with LPT Connection

Sabtu, 04 September 2010

PULSE WIDHT MODULATION

Konsep Dasar PWM

Salah satu cara yang paling mudah untuk membangkitkan sebuah tegangnan analog dari sebuah nilai digital adalah dengan menggunakan pulse-width modulation (PWM). Dalam PWM gelombang kotak, frekuensi tinggi dibangkitkan sebagai output digital. Untuk contoh, sebuah port bit secara kontinyu melakukan kegiatan saklar on dan off pada frekuensi yang relatif tinggi. Selanjutnya, bila sinyal diumpankan pada LPF low pass filter, tegangan pada output filter akan sama dengan Root Mean Squere ( RMS ) dari sinyal gelombang kotak. Selanjutnya tegangan RMS dapat divariasi dengan mengubah duty cycle dari sinyal.

DUTY CYCLE menyatakan fraksi waktu sinyal pada keadaan logika high dalam satu siklus. Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dikatakan sinyal mempunyai DUTY CYCLE 50 %. DUTY CYCLE 20 % menyatakan sinyal berada pada logika 1 selama 1/5 dari waktu total

Gambar 15.1. Duty cycle 30 %


Gambar 15.2. Aplikasi PWM pada setting kecepatan motor

PWM dengan Mikrokontroler

Pada rangkaian tersebut menunjukkan sebuah DAC yang dibangun dengan metode PWM, yang digunakan untuk mengendalikan kecepatan motor DC dengan modulasi lebar pulsa. Bit 0 dari P0 mengemudikan sebut saklar transistor sebagaimana yang ditunjukkan pada gambar. Motor dihidupkan dan dimatikan untuk suatu periode tertentu
Bagian pada saat motor hidup disebut DUTY CYCLE. Pada program ini menggunakan sebuah byte untuk menyimpan lama waktu motor on, dari sejumlah 256 siklus. Bila duty cycle yang diberikan adalah 10 % maka program ini menyimpan data waktu ON selama 10 siklus dan OFF selama 246 siklus dari 256 siklus.
Berikutnya nilai duty cycle disimpan pada RAM internal yang diberi label dCycle. Komplemen dari duty cycle disimpan pada RAM internal dengan nama dCycleC. Pada perancangan software ini, Timer 0 diaplikasikan dalam mode 2, yaitu 8 bit timer auto reload, yang akan melakukan increment nilai register counter setiap siklus, dan bila terjadi overflow maka data yang berada pada TH0 akan diloadkan ke TL0 yang berfungsi sebagai counter 8 bit.
Bila frekuensi kristal yang digunakan adalah 12 Mhz, sehingga jika nilai reload adalah 0 maka timer 0 akan over flow setiap 256 udetik; dan jika nilai reload adalah FFh maka timer akan over flow setiap 1 udetik. Pertama kali program menghidupkan motor dan menempatkan nilai dCycle ke TH0 sebagai nilai reload. Setelah timer overflow, komplemen dari duty cycle dCycleC akan ditempatkan ke TH0 sebagai nilai reload dan motor berhenti berputar. Pada pemrograman ini keadaan motor dapat dilihat pada register yang dapat dialamati bit, yang ditandai sebagai motorFlag.


Percobaan 15.1. Setting kecepatan putaran motor DC dengan PWM

Pada percobaan ini, putaran kecepatan motor kemudikan dengan menggunakan transistor TIP120 melalui metode PWM. PWM dikemudikan dengan menggunakan satu bit dari P0, seperti yang ditunjukkan pada gambar dibawah.

Gambar 15.3. Diagram alir (a) rutin utama (b) inisialisasi duty cycle dan (c) inisialisasi timer pada percobaan 15.1

Gambar 15.4. Diagram alir interupsi timer 0 pada percobaan 15.1

1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (Download File: Prog151a.asm)

           dCycle equ 30h
dCycleC equ 31h
PWM bit P0.0
MotorF bit 20h
org 0h
sjmp start
org 0bh
ljmp Interupsi_Timer0
;
start: call Init_Dcycle
call init_Timer
loop: sjmp loop
;
Init_Dcycle:
mov dCycle,#45 ;inisialisasi data dCycle T_ON
mov A,dCycle ;copy data ke A
cpl A ;komplemen A
mov dCycleC,A ;copy A ke dCycleC
ret
;
Init_Timer:
anl TMOD,#0F0h ;
orl TMOD,#2 ;Timer0 mode2 auto reload
mov TH0,dCycle ;Load data counter 8 bit
setb ET0 ;enable interupsi timer0
setb EA ;enable all interupsi
setb TR0 ;timer0 run
ret
;
Interupsi_Timer0:
jb motorF,motorOff ;deteksi bit motorF
setb PWM ;Hidupkan motor
setb P0.7 ;TP pulsa PWM di osiloskop
mov TH0,dCycle ;load data dCycle ke TH0
setb motorF ;beri tanda motorF=1-> motor ON
reti
motorOff:
clr PWM ;matikan motor
clr P0.7 ;TP pulsa PWM di osiloskop
mov TH0,dCycleC ;load data cCycleC ke TH0
clr motorF ;beri tanda motorF=0-> motor OFF
reti
end

6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)



Percobaan 15.2. Pengaturan kecepatan putaran motor DC dengan metode PWM melalui ADC

Pada percobaan ini, ADC digunakan untuk membaca tegangan dari input pembagi tegangan 0-5 Volt, selanjutnya tegangan yang telah diuabah menjadi data digital, digunakan untuk mengatur PWM pada Motor DC.

1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (Download File: Prog151a.asm)

           dCycle equ 30h
dCycleC equ 31h
PWM bit P0.0
MotorF bit 20h
org 0h
sjmp start
org 0bh
ljmp Interupsi_Timer0
;
start: call init_Timer
loop: call ADC
mov dCycle,A
cpl A
mov dCycleC,A
sjmp loop
;
ADC: clr P3.3
nop
nop
nop
setb P3.3
eoc: jb P3.2,eoc
clr P3.4
mov A,P1
setb P3.4
ret
;
Init_Timer:
mov dCycle,#40
mov A,dCycle
cpl A
mov dCycleC,A
anl TMOD,#0F0h
orl TMOD,#2
mov TH0,dCycle
setb ET0
setb EA
setb TR0
ret
;
Interupsi_Timer0:
jb motorF,motorOff
setb PWM
setb P0.7
mov TH0,dCycle
setb motorF
reti
motorOff:
clr PWM
clr P0.7
mov TH0,dCycleC
clr motorF
reti
end

6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)

Jumat, 03 September 2010

Percobaan REAL TIME CLOCK (RTC) 12C887

Percobaan 14.1. Pengambilan data detik pada RTC DS12887 dengan display LED

Pada percobaan ini, data detik RTC diambil dan dikeluarkan ke LED.


Gambar 14.7. Rangkaian interface ke LED

1. Hubungkan jumper LED_EN
2. Hubungkan kabel data dan kontrol pada board RTC
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini:(download file prog141a.asm)

CS bit P3.3
ALE bit P3.2
Write bit P3.1
Read bit P3.0
PortData equ P0
RegisterA equ 10
RegisterB equ 11
;
org 0h
clr CS ; Aktivkan RTC
call INIT_RTC
start: mov PortData,#00h ; 00h = alamat detik pada RTC
clr ALE ; Penguncian alamat 0-1-0
setb ALE
clr ALE
;
setb Write ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortData ; Baca data dari alamat 00h = detik
setb Read
;
mov P0,A ; simulasi data ke LED = P0
sjmp start
;
INIT_RTC:
setb Read
mov PortData,#RegisterA ;
clr ALE
setb ALE
clr ALE
;
setb WRite
clr Write
mov PortData,#20h
setb WRite
;
mov PortData,#RegisterB
clr ALE
setb ALE
clr ALE
;
setb WRite
clr WRite
mov PortData,#02h
setb WRite
;
RET
end

7. Simpanlah program yang anda ketik dan beri nama : prog141a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)


Percobaan 14.2. Pengambilan data detik dan menit pada RTC12887 dengan display LCD Karakter 2x 16.

Pada percobaan ini, data detik dan menit diambil dan ditampilkan pada LCD Karakter 2x16.

Gambar 14.8 Interface LCD Carácter 2x16

1. Hubungkan jumper LCD_EN
2. Hubungkan kabel data dan kontrol pada board RTC ke rangkaian mikrokontroller
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog142a.asm)

CS bit P3.3
ALE bit P3.2
Write bit P3.1
Read bit P3.0
PortRTC equ P2
RegisterA equ 10
RegisterB equ 11
Puluhan equ 30h
Satuan equ 31h
detik equ 32h
Menit equ 33h
org 0h
call init_LCD
call init_RTC
; call setDetik
; call setMenit
call write_char
start:
call readDetik
call bin2Dec
call write2LCDDetik
;
call readMenit
call bin2Dec
call write2LCDMenit
;
sjmp start
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
acall write_inst
;
write1:clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b;Function set,Data 8 bit,2linefont 5x7
call write_inst ;
mov r1,#00001100b ;Display on,cursor off,cursorblink off
call write_inst
mov r1,#00000110b ;Entry mode, Set increment
call write_inst
ret
;
Write_inst:
clr P3.6 ; P3.6 = RS =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
Write_data:
setb P3.6 ; P3.6 = RS =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay:mov R0,#0
delay1: mov R7,#0fh
djnz R7,$
djnz R0,delay1
ret
;
ReadDetik:
mov PortRTC,#00h ;00h = alamat detik pada RTC
clr ALE ;Penguncian alamat 0-1-0
setb ALE
clr ALE
setb Write ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortRTC ; Baca data dari alamat 00h = detik
setb Read
ret
;
ReadMenit:
mov PortRTC,#02h ; 00h = alamat detik pada RTC
clr ALE ; Penguncian alamat 0-1-0
setb ALE
clr ALE
setb Write ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortRTC ; Baca data dari alamat 00h = detik
setb Read
ret
;
init_RTC:
clr CS
setb Read
mov PortRTC,#RegisterA ;
clr ALE
setb ALE
clr ALE
;
setb WRite
clr Write
mov PortRTC,#20h
setb WRite
;
mov PortRTC,#RegisterB
clr ALE
setb ALE
clr ALE
;
setb WRite
clr WRite
mov PortRTC,#06h
setb WRite
RET
;
Bin2Dec:
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;
Write2LCDDetik:
mov r1,#0c4h
call write_inst
mov a,Puluhan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c5h
call write_inst
mov a,Satuan
add a,#30h
mov r1,a
call write_data
ret
;
Write2LCDMenit:
mov r1,#0c2h
call write_inst
mov a,Puluhan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c3h
call write_inst
mov a,Satuan
add a,#30h
mov r1,a
call write_data
ret
;
setMenit:
setb Read
mov PortRTC,#02h;
clr ALE
setb ALE
clr ALE
;
setb WRite
clr Write
mov PortRTC,#21d
setb WRite
ret
;
setDetik:
setb Read
mov PortRTC,#00h;
clr ALE
setb ALE
clr ALE
;
setb WRite
clr Write
mov PortRTC,#00h
setb WRite
ret
word1: DB ' My RTC Test '; here is the data to be look up
end

7. Simpanlah program yang anda ketik dan beri nama : prog142a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut untuk memunculkan data jam, hari, bulan dan tahun pada LCD Karakter
11. Lakukan modifikasi pada program tersebut untuk menampilkan data detik dan menit pada rangkaian 7 segmen.

REAL TIME CLOCK (RTC) 12C887

TEORI DASAR

Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai penunjuk waktu. RTC DS 12C887 memiliki register yg dapat menunjukkan detik, menit, jam, tanggal, bulan dan tahun. RTC ini didesain memiliki 128 lokasi RAM yang terdiri dari 15 byte untuk data waktu serta kontrol, dan 113 byte sebagai RAM yang dapat digunakan sebagai RAM pada umumnya.


RTC DS 12C887 menggunakan bus yang termultipleks untuk menghemat pin. Timing yang digunakan untuk mengakses RTC dapat menggunakan intel timing atau motorola timing. RTC ini juga dilengkapi dengan pin IRQ untuk kemudahan dalam proses.

Operasi dari RTC

Berikut ini gambar pin-pin dari RTC DS 12C887, jumlah total pin-nya sebanyak 13 buah :

Gambar 14.1 Pin RTC DS 12C887


Berikut ini akan ditampilkan blok diagram dari RTC DALLAS 12C887. Terlihat dari blok diagram tersebut bawhwa RTC terbagi menjadi beberapa bagian utama dengan kontrol maupun I/O untuk operasinya.

Tabel 14.1. berikut ini menjelaskan fungsi masing-masing pin yang ada :

Nama Pin
Keterangan
MOT Motorola / Intel timing
AD0-AD7 Bus DATA / ADDRESS yang termultipleks
CS Chip Select
AS Address Strobe
R/W Write Strobe
DS Data Strobe
RESET Inputan Reset
IRQ Interrupt Request Output
SQW Output Sinyal Kotak
VCC Catu tegangan +5 volt
Gnd Ground
RCLR Hapus RAM

Penjelasan dari masing-masing pin RTC DS12C887 dijelaskan berikut :


1. GND, VCC
Merupakan pin untuk power supply RTC. VCC diberikan input +5volt. Ketika tegangan 5 volt diberikan dalam batas yang normal, RTC bebas diakses dan data dapat ditulis atau dibaca. Sedangkan ketika Vcc dibawah 4.25 volt, maka proses baca dan tulis tidak dapat dilakukan. Akan tetapi, proses pewaktu (timekeeping) tetap dilakukan oleh RTC tanpa dipengaruhi oleh tegangan input yang rendah. Saat VCC turun dibawah 3 volt, catu daya untuk RAM dan pewaktu dipindahkan ke internal lithium batery yang terdapat pada RTC. Fungsi pewaktu dari RTC memiliki akurasi ± 1 menit per bulan pada suhu 250 C walaupun tanpa adanya catu pada VCC.

2. MOT (Mode Select)
Pin MOT memberikan kebebasan untuk memilih dua tipe bus. Ketika pin ini dihubungkan dengan VCC, maka motorolla bus timing yang dipilih, sedangkan ketika dihubungkan ke ground atau dibiarkan (tak dihubungkan) maka intel bus timing yang dipilih. Pin ini memiliki pull down internal sebesar sekitar 20 k?.

3. SQW (Square Wave Output)
Pin SQW dapat mengeluarkan sinyal kotak, dari satu sampai 13 pembagian yang disediakan oleh 15 buah tingkat pembagi (divider) internal dari RTC. Frekuensi dari SQW dapat dipilih dengan memprogram register A seperti pada tabel. Sinyal SQW dapat dihidupkan dan dimatikan dengan mengatur bit SQWE pada register B. Sinyal SQW tidak hidup ketika VCC dibawah 4,25 volt.

4. AD0 – AD7 (Adrress/Data bus yang ter-multipleks dan bidirect)
Bus yang ter-multiplex menghemat penggunaan pin karena informasi address dan data waktu menggunakan jalur sinyal yang sama. Alamat muncul pada bagian pertama dari bus cycle dan dengan pin yang sama pula digunakan untuk data pada bagian kedua dari bus cycle. Multipleksing antara data dan address tidak memperlambat waktu akses dari RTC karena perubahan dari address menuju data dilakukan pada saat akses RAM internal pada RTC. Address harus valid saat terjadi falling edge pada AS/ALE, yang kemudian RTC akan me-latch address dari AD0 sampai AD6. Data valid yang akan dituliskan ke RTC harus valid dan dijaga stabil pada saat pin DS dan WR diberi pulsa. Pada proses pembacaan, RTC menghasilkan output 8 bit data pada saat pin DS dan RD diberi pulsa. Bus akan menjadi high impedance saat pulsa low diberikan pada pin DS (motorola) atau pulsa high diberikan pada pin RD (intel).

5. AS (Address Strobe Input)
Perubahan pulsa positif pada address strobe berguna untuk melakukan multipleks pada bus. Perubahan pulsa negatif pada AS akan menyebabkan address ter-latch. Perubahan positif selanjutnya akan menghapus address walaupun CS tidak diaktifkan. Perintah access seharusnya dikirimkan secara bersamaan.


6. DS (Data Strobe or Read Input)
Pin DS/RD mempunyai 2 mode operasi tergantung pada tingkat yang diberikan kepada MOT. Ketika MOT dihubungkan ke VCC, motorola bus timing dipilih dan pada mode ini DS merupakan pulsa positif saat bagian lanjut dari bus cycle dan disebut sebagai data strobe. Saat proses pembacaan, DS menunjukkan bahwa RTC memiliki bus yang bidirectional. Pada proses penulisan, pulsa positif pada DS akan me-latch data yang ditulis. Ketika MOT dihubungkan ke ground, maka intel bus timing yang dipilih dan pin DS disebut sebagai read (RD). RD menjelaskan periode ketika RTC memperlakukan bus sebagai pembaca data. Sinyal RD mempunyai pengertian yang sama seperti sinyal Output Enable (OE) pada memori yang umum.

7. R/W (Read/Write Input)
Pin R/W juga memiliki 2 mode operasi. Ketika pin MOT dihubungkan ke VCC untuk motorola timing, R/W berada pada level yang menunjukkan apakah berada pada proses baca atau tulis. Proses baca ditunjukkan dengan level high pada R/W sementara DS juga high. Proses tulis ditunjukkan saat R/W low dan DS high. Ketika pin MOT dihubungkan ke ground untuk intel timing, sinyal R/W adalah sinyal active low dinamakan WR. Pada mode ini pin R/W mempunyai makna yang sama dengan sinyal Write Enable (WE) seperti pada RAM umum.

8. CS (Chip Select Input)
Sinyal chip select harus di hubungkan low untuk dapat mengakses bus cycle. CS harus dijaga pada posisi aktif saat DS dan AS pada motorola timing atau RD dan WR untuk intel timing. Bus cycle yang terjadi tanpa mengaktifkan CS akan me-latch address tapi tidak ada akses yang bisa dilakukan. Saat VCC dibawah 4,25 volt, RTC secara internal menghalangi akses dengan cara secara internal tidak mengaktifkan input CS. Proses ini akan melindungi baik data RTC maupun data pada RAM saat tidak ada catu daya.

9. IRQ (Interrupt Request Output)
Pin IRQ adalah keluaran active low dari RTC 12C887 yang digunakan sebagai masukan interupsi pada prosessor. Keluaran IRQ tetap low selama selama bit status menyebabkan interupsi terjadi dan bit yang berhubungan yaitu interrupt-enable di-set. Untuk menghapus interupsi biasanya dilakukan dengan membaca register C. Pin RESET juga menghapus interupsi yang dilakukan atau yang belum terjadi (pending). Ketika tidak terjadi interupt maka level IRQ berada pada kondisi high impedance. Beberapa peralatan interupsi dapat dihubungkan dengan IRQ bus. Bus IRQ adalah keluaran open drain dan memerlukan tambahan resistor pull-up.

10. RESET (Reset Input)
Pin RESET tidak berpengaruh terhadap jam, kalender atau RAM. Pada saat penyalaan RTC, pin RESET dapat dijaga LOW untuk beberapa saat untuk menstabilkan catu daya. Lamanya waktu pin RESET diberikan low tergantung dari aplikasi yang digunakan. Akan tetapi jika reset digunakan saat power up (penyalaan), waktu RESET dijaga low harus melebihi 200 ms untuk meyakinkan bahwa timer internal dari RTC untuk penyalaan telah cukup. Ketika RESET low dan VCC diatas 4,25 volt, maka hal-hal yang terjadi adalah sebagai berikut :

a. Periodic Interrupt Enable (PEI) dihapus menjadi nol.
b. Alarm Interrupt Enable (AIE) dihapus menjadi nol.
c. Update Ended Interrupt Flag (UF) dihapus menjadi nol.
d. Interrupt Request Status Flag (IRQF) dihapus menjadi nol.
e. Periodic Interrupt Flag (PF) dihapus menjadi nol.
f. RTC tidak dapat diakses sampai RESET menjadi high.
g. Alarm Interrupt Flag (AF) dihapus menjadi nol.
h. Pin IRQ dalam kondisi high impedance.
i. Square Wave Output Enable (SQWE) dihapus menjadi nol.
j. Update Ended Interrupt Enable (UIE) dihapus menjadi nol.
Pada aplikasi umum, RESET dapat dihubungkan langsung VCC. Koneksi ini akan menjadikan RTC 12C887 dapat berfungsi saat terjadi kerusakan catu daya tanpa mempengaruhi register kontrol RTC.

Address Map dari RTC

RTC mempunyai RAM internal didalamnya, dalam memori tersebut terbagi menjadi beberapa register-register yang mempunyai fungsi dalam pengontrolan maupun pengambilan data RTC. Agar tidak terjadi kesalahan dalam pengontrolan maupun pengambilan data, peta alamat dari masing-masing register harus jelas.
Address map dari RTC terdiri dari 113 byte RAM yg dapat digunakan oleh pengguna RTC, 11 byte RAM yang berisikan data RTC berupa waktu, kalender dan alarm, dan 4 byte yang digunakan untuk kontrol dan status. Keseluruhan 128 byte ini dapat ditulis atau dibaca secara langsung kecuali pada keadaan berikut:
1. Register C dan D adalah read-only.
2. Bit ke-7 dari register A adalah read-only.
3. Bit atas dari byte detik adalah read-only.

Gambar 14.2. Peta Alamat RTC

Waktu, Kalender dan Alarm

Informasi waktu dan kalender diperoleh dengan membaca byte memori yang sesuai. Waktu, kalender dan alarm di-set atau diinisialisasi dengan menulis ke byte RAM yang sesuai. Isi dari kesepuluh data kalender, waktu dan alarm dapat digunakan dalam mode biner atau BCD (Binary-Coded Decimal). Sebelum mengakses register kalender, waktu dan alarm, SET bit pada register B harus ditulis dengan level logika yang sesuai agar tidak mengganggu proses update yang dilakukan oleh RTC. Kesemua data kalender, waktu dan alarm harus menggunakan mode data yang sma (biner atau BCD), yaitu dengan cara menulis pada register B pada bit DM(Data Mode). Sekali di inisialisasi maka RTC akan terus menggunakan mode data yang dipilih sebelumnya. Tabel berikut menunjukkan mode data dari kalender, waktu dan alarm baik dalam mode biner atau BCD.

Tabel 14.2. Tabel data mode waktu, kalender dan alarm

Register Kontrol RTC
RTC 12C887A mempunyai 4 buah register kontrol yang dapat diakses setiap saat, walaupun pada saat RTC melakukan update cycle.

Register A

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0

UIP – Update in progress adalah status bit yang dapat dimonitor, merupakan bit read only dan tidak dipengaruhi oleh reset. Ketika bit UIP 1, proses update akan segera berlangsung. Ketika UIP 0, proses update tidak akan terjadi sekurangnya 244?s. Informasi kalender, waktu dan alarm yang ada pada RAM akan dapat diakses secara penuh ketika bit UIP nol.

DV2, DV1, DV0 – Ketiga bit ini digunakan untuk menghidupkan atau mematikan osilator dan me-reset rantai perhitungan. Pola 010 adalah satu-satunya kombinasi yang akan menghidupkan osilator dan menyebabkan RTC dapat menyimpan waktu. Pola 11x akan menghidupkan osilator tapi menahan rantai perhitungan dalam kondisi reset.

RS2, RS2, RS1, RS0 – Keempat bit ini akan memilih frekuensi atau mematikan pulsa kotak pada pin SQW. Pin SQW dapat berfungsi juga sebagai periodic interrupt. Keempat bit ini dapat dibaca/tulis dan tidak dipengaruhi oleh RESET. Untuk mengaktifkannya, dapat dilakukan sebagai berikut :
1. Mengaktifkan interupt dengan bit PIE.
2. Mengaktifkan keluaran SQW dengan bit SQWE.
3. Mengaktifkan keduanya dengan waktu dan frekuensi yang sama.
4. Tidak mengaktifkan keduanya.

Register B

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
SET PIE AIE UIE SQWE DM 24/12 DSE


SET – Ketika bit SET adalah 0, proses update berfungsi normal dengan menambahkan perhitungan sekali dalam satu detik. Ketika SET ditulis menjadi 1, semua proses update dihentikan sehingga program dapat menginisialisasi byte waktu dan kalender tanpa adanya proses update yang terjadi ditengah proses inisialisasi.

PIE – Periodic Interrupt Enable merupakan bit yang dapat dibaca/tulis yang akan menyebabkan bit Periodic Interrupt Flag (PF) pada register C mengatur pin IRQ menjadi low. Ketika bit PIE diset 1, interupt secara periodik dihasilkan dengan mengatur pin IRQ menjadi low dengan periode tertentu sesuai dengan bit RS3-RS0 (register A). Apabila PIE 0, ini akan menghalangi pengaturan pin IRQ oleh interupt periodik, tetapi bit PF masih di-set dengan periode tertentu. PIE tidak dapat dirubah secara internal oleh RTC, tetapi akan dihapus menjadi 0 pada saat RESET.

UIE – Update Ended Interrupt merupakan bit yang dapat dibaca/tulis yang akan meng-enable Update ended Flag (UF) pada register C untuk memasukkan IRQ. Pin RESET yang di “low” atau bit SET yang di “high” akan menghapus bit UIE.

SQWE – Ketika bit Square Wave Enable di-set menjadi 1, gelombang kotak dengan periode yang sudah ditentukan oleh bit RS3-RS0 akan dikeluarkan pada pin SQW. Ketika SQWE di-set menjadi 0, maka pin SQW tetap low. Bit SQWE dapat dibaca/tulis dan dapat dihapus oleh RESET. SQWE di-set menjadi 1 ketika Vcc dihidupkan.

DM – Bit Data Mode (DM) mengindikasikan apakah informasi waktu dan kalender mempunyai format biner atau BCD. Bit DM di-set oleh program dengan memberikan format yang sesuai dan dapat dibaca sesuai keperluan. Bit ini tidak dapat dirubah secara internal atau oleh RESET. ‘1’ pada DM menyatakan data biner sedangkan ‘0’ menyatakan DM mempunyai format BCD (Binary Coded Decimal).

24/12 – Bit ini digunakan untuk memilih mode jam, 24 atau 12. ‘1’ menunjukkan mode 24-jam dan ‘0’ menunjukkan mode 12-jam. Bit ini dapat dibaca/tulis dan tidak dipengaruhi secara internal atau RESET.
DSE – Merupakan bit khusus yang digunakan untuk merubah waktu ketika terjadi perubahan musim (biasanya terjadi pada negara dengan 4 musim). Ketika di-set 1, pada hari minggu pertama pada bulan april terjadi perubahan jam dari 1:59:59 AM menjadi 3:00:00 AM. Pada hari minggu terakhir bulan oktober saat waktu menunjukkan 1:59:59 AM berubah menjadi 1:00:00 AM. Hal ini tidak terjadi ketika DSE di-set 0. Bit ini tidak dipengaruhi secara internal atau RESET.

Register C

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
IRQF PF AF UF 0 0 0 0

IRQF – Interrupt Request Flag (IRQF) bit diset menjadi 1 ketika hal berikut terjadi :
PF = PIE = 1
AF = AIE = 1
UF = UIE = 1
Contoh: IRQF = (PF*PIE) + (AF*AIE) + (UF*UIE)
Saat ketika bit IRQF adalah 1, pin IRQ menjadi “low”. Bit flag PF, AF, dan UF di hapus detelah register C dibaca oleh program atau ketika pin RESET “low”.

PF – Periodic Interrupt Flag adalah bit read-only yang diset menjadi 1 ketika edge dideteksi pada tap yang dipilih pada rantai pembagian. Bit RS3 – RS0 menghasilkan frekuensi periodik. PF diset menjadi 1 tanpa dipengaruhi oleh bit PIE. Ketika PF dan PIE ‘1’ , sinyal IRQ aktif dan akan mengeset bit IRQF. Bit PF akan dihapus secara pembacaan software pada register C atau RESET.

AF – ‘1’ pada bit Alarm Interrupt Flag (AF) mengindikasikan waktu yang dicapai sesuai dengan waktu alarm. Jika bit AIE juga 1, pin IRQ akan menjadi low dan ‘1’ akan terjadi pada bit IRQF. RESET atau pembacaan register C akan menghapus AF.

UF – Bit Update Ended Interrupt Flag akan diset setelah tiap proses update. Ketika bit UIE diset menjadi 1, ‘1’ pada UF akan menyebabkan bit IRQF menjadi 1 dan akan mengaktifkan pin IRQ. UF dihapus dengan membaca register C atau RESET.

BIT 3 sampai BIT 0 – Bit ini tidak dipakai dan selalu bernilai 0.

Register D

BIT 7
BIT 6
BIT 5
BIT 4
BIT 3
BIT 2
BIT 1
BIT 0
VRT
0
0
0
0
0
0
0

VRT – Valid RAM Time mengindikasikan kondisi dari baterai yang dihubungkan ke pin VBAT. Bit ini tidak dapat ditulis dan selalu menjadi 1 ketika dibaca. ‘0’ akan terjadi ketika baterai internal telah rusak. Bit ini tidak dipengaruhi oleh RESET.

BIT 6 sampai BIT 0 - Bit ini tidak dipakai dan selalu bernilai 0.

Proses Update

RTC 12C887 melaksanakan proses update sekali dalam satu detik walau tanpa memperhatikan bit SET pada register B. Ketika bit SET pada register B di-set menjadi 1, maka informasi waktu, kalender, dan alarm akan berhenti dan tidak akan berubah pada saat terjadi penambahan waktu, tetapi rantai perhitungan waktu akan tetap terjadi dan disimpan pada buffer internal. Hal ini akan menjaga akurasi watu dari RTC saat terjadi proses pembacaan dan penulisan. Proses update ini juga akan membandingkan byte alarm dengan waktu yang terjadi sat itu.
Ada tiga metode untuk mengakses data pada RTC yang akan menghindari akses informasi waktu yang tidak konsisten. Metode pertama adalah menggunakan update ended interrupt. Jika di enable, interupt akan terjadi tiap proses update selesai, dimana terdapat waktu 999 ms untuk membaca data waktu yang valid. Jika interupsi ini digunakan, bit IRQF pada register C harus dihapus sebelum meninggalkan proses interupsi.
Metode yang kedua adalah dengan menggunakan bit update in progress (UIP) yang terdapat pada register A yang menyatakan apakah proses update sedang berlangsung. Bit UIP akan mengeluarkan pulsa tiap satu detik. Setelah bit UIP menjadi high, maka proses update akan terjadi 244 ?s kemudian dan jika low terbaca pada bit UIP, maka pengguna mempunyai waktu 244 ?s sebelum data waktu/kalender akan berubah. Sehingga, pengguna harus menghindari proses interupsi yang menyebabkan waktu pembacaan data melebihi 244 ?s.




Gambar 14.3 Hubungan antara Update-Ended dan Periodic Interrupt

Metode yang ketiga adalah mengunakan periodic interrupt untuk menunjukkan apakah proses update sedang berlangsung. Bit UIP pada register A akan di-set high diantara pengaktifan dari bit PF pada register C. Periode interupt yang melebihi waktu tBUC akan menyebabkan data yang valid dapat dicapai pada setiap terjadinya interupsi. Pembacaan harus telah selesai dalam waktu (tPI/2 + tBUC) untuk memastikan data tidak dibaca saat proses update.

Gambar 14.6 Rangkaian interface RTC12c887

Kamis, 02 September 2010

INTERFACE KE KEYBOARD PC PS/2

TEORI
Antarmuka keyboard standard adalah hubungan komunikasi serial. “Serial” yang menandakan bahwa data dikirim satu bit pada suatu waktu tertentu pada satu jalur tunggal. Serial komunikasi dipilih untuk antara muka keyboard karena hal ini simple dan mudah diterapkan, dan tidak banyak data per detik yang harus dikirimkan pada antar muka keyboard.
Ada empat jalur yang menghubungkan keyboard dan PC. Dua dari ini adalah power supply dan ground, yang digunakan untuk memberikan daya ke rangkaian keyboard. Dua sinyal yang lain adalah sebagai berikut:
1. Data Keyboard: Disinilah jalur bit-bit data dan perintah yang akan dikirimkan ke sistem PC dari keyboard.
2. Clock Keyboard: Ini merupakan sinyal clock regular, dengan suatu nilai yang berosilasi dari logika “1” ke “0” dengan pola yang teratur. Tujuan dari sinyal clock ini adalah untuk mensinkronisasi keyboard dan sistem, sehingga merekan selalu bekerja secara bersamaan.
Keyboard PC AT yang terkoneksi, hanya menggunakan empat buah kabel, kabel ini ditunjukkan pada gambar dibawah, untuk 5 pin DIM dan PS/2.


5 PIN DIN
(a)
1.KBD Clock
2.KBD Data
3.N/C
4.GND
5. +5V (VCC)

6 PIN DIN
(b)
1. KBD Clock
2. GND
3. KBD Data
4. N/C
5. +5V (VCC)
6. N/C

Gambar 12.1. Keyboard konektor (a) XT (b) PS/2

Diagram dibawah ini menunjukkan kode scan yang menandai tombol individu. Kode scan ditunjukkan pada bagian bawah dari tombol. Contoh kode scan untuk tombol ESC adalah 76. Semua kode scan ditunjukkan dalam Hex.

Gambar 12.2. Peta data keyboard PC

Sebagaimana yang anda lihat, kode scan ditandai dengan kode yang random. Pada beberapa kasus, cara yang paling mudah untuk menerjemahkan kode scan ke ASCII adalah dengan menggunakan metode look up table.
Transmisi data, dari keyboard ke sistem, dilakukan dengan frame 11 bit. Bit pertama adalah bit start ( logika 0 ), diikuti dengan 8 bit data ( LSB first ), satau bit paristas ( paritas ganjil ) dan bit stop ( logika 1 ). Setiap bit harus dibaca pada sisi turun dari clock.


Gambar 12.3. Sinyal clock dan data

Gambar 12.4 Interface rangkaian keyboard PC PS/2

Gambar 12.5. Rangkaian interface LCD karakter 2x16


Percobaan 12.1. Pengambilan data karakter keyboard PC dan display ke LED

Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada LED.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Pasang jumper LED_EN
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog122a.asm)

dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
KbdData bit P3.2
KbdClock bit INT1;P3.3
DataKeyboard equ 30h
;
org 0h
Forever:
JB KbdClock,$
acall ambilKeyboard
jnc Forever
Mov P0, Datakeyboard
clr C
sjmp Forever
;
;============================================
;Subrutine AmbilKeyboard
;Subrutine berikut berfungsi untuk mendeteksi apakah keyboard
;sedang ditekan atau dilepas. Bila tombol tidak dilepas maka
;akan menuju pada subrutine ;Kybd_tidakLepas
;dan memberi tanda pada bit C = 0 sehingga bila C = 0
; maka data tidak akan dicetak
;Bila tombol keyboard dilepas maka data scan code diambil
;dan dikonversi ke dengan dengan menggunakan
; look up table serta menandai bit C = 1
;===========================================
AmbilKeyboard:
acall ambil_scancode
cjne a,#0F0h,kybd_tidakLepas
JB KbdClock,$
acall ambil_Scancode
Setb C
Acall Konversi_Scancode
ret
;
Kybd_tidakLepas:
Clr C
ret
;

;======================================================
;Subrutine Konversi_ScanCode
;Pada subrutine ini digunakan untuk menerjemahkan scan code ke bentuk
;karakter
; dengan menggunakan look up table.
;======================================================
Konversi_ScanCode:
Mov DPTR,#TableKeyboard
movc A,@A+DPTR
mov DataKeyboard,A
ret
;
Ambil_scanCode:
clr A
Jnb KbdClock,$
mov R0,#08h
Ambil_ScanCode2:
Jb KbdClock,$
Mov C,KbdData
Rr A
mov acc.7,C
Jnb KbdClock,$
Djnz R0,Ambil_ScanCode2
Jb KbdClock,$
Jnb KbdClock,$
Jb KbdClock,$
Jnb KbdClock,$
ret
;
delay: mov R5,#0
delay1:mov R4,#02fh
djnz R4,$
djnz R5,delay1
ret
;
TableKeyboard:
DB 00
DB 0F9H
DB 00
DB 0F5H,0F3H,0F1H,0F2H,0FCH
DB 00H
DB 0FAH,0F8H,0F6H,0F4H
DB 0C0H
DB '~'
DB 00H
DB 00H
DB 0C1H
DB 0C2H
DB 00H
DB 0C3H
DB 'Q1'
DB 00H,00H,00H
DB 'ZSAW2'
DB 00H,00H
DB 'CXDE43'
DB 00H,00H
DB ' VFTR5'
DB 00H,00H
DB 'NBHGY6'
DB 00H,00H,00H
DB 'MJU78'
DB 00H,00H
DB ',KIO09'
DB 00H,00H
DB './L;P-'
DB 00H,00H,00H
DB 27H
DB 00H
DB '[='
DB 00H,00H
DB 0C5H
DB 0C6H
DB 0AH
DB ']'
DB 00H
DB '\'
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 08H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0DH
DB 00H
DB 0FBH
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0F7H
;

end

7. Simpanlah program yang anda ketik dan beri nama : prog122a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan untuk data keyboard yang ditampilkan.


Percobaan 12.2. Pengambilan data karakter keyboard PC dan display ke LCD Karakter

Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada layar LCD Karakter.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog121a.asm)

           dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
KbdData bit P3.2
KbdClock bit INT1;P3.3
DataKeyboard equ 30h
;
org 0h
nop
call init_LCD
;
Forever:
JB KbdClock,$
acall ambilKeyboard
jnc Forever
acall LCD_Out
clr C
sjmp Forever
;
;============================================
;Subrutine AmbilKeyboard
;Subrutine berikut berfungsi untuk mendeteksi apakah keyboard
;sedang ditekan atau dilepas. Bila tombol tidak dilepas maka
;akan menuju pada subrutine ;Kybd_tidakLepas
;dan memberi tanda pada bit C = 0 sehingga bila C = 0
; maka data tidak akan dicetak
;Bila tombol keyboard dilepas maka data scan code diambil
;dan dikonversi ke dengan dengan menggunakan
; look up table serta menandai bit C = 1
;===========================================
AmbilKeyboard:
acall ambil_scancode
cjne a,#0F0h,kybd_tidakLepas
JB KbdClock,$
acall ambil_Scancode
Setb C
Acall Konversi_Scancode
ret
;
Kybd_tidakLepas:
Clr C
ret
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
acall write_inst
;
write1:
clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall write_data;
djnz r3,write1 ; R3 = R3-1,
ret
;
;======================================================
;Subrutine Konversi_ScanCode
;Pada subrutine ini digunakan untuk menerjemahkan scan code ke bentuk
karakter
; dengan menggunakan look up table.
;======================================================
Konversi_ScanCode:
Mov DPTR,#TableKeyboard
movc A,@A+DPTR
mov DataKeyboard,A
ret
;
LCD_Out:
mov R7, #80h
acall write_inst
mov R7,DataKeyboard
acall write_data
ret
;
Ambil_scanCode:
clr A
Jnb KbdClock,$
mov R0,#08h
Ambil_ScanCode2:
Jb KbdClock,$
Mov C,KbdData
Rr A
mov acc.7,C
Jnb KbdClock,$
Djnz R0,Ambil_ScanCode2
Jb KbdClock,$
Jnb KbdClock,$
Jb KbdClock,$
Jnb KbdClock,$
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
acall write_inst ;
mov r1,#00111000b ;Function set, Data 8 bit,2 line font 5x7
acall write_inst ;
mov r1,#00001100b ;Display on, ;cursor off,cursor blink off
acall write_inst
mov r1,#00000110b ;Entry mode, Set increment
acall write_inst
ret
;
Write_inst:
clr P3.6 ; RS = P2.0 = 0, write mode instruction
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay; call delay time
clr P3.7 ; EN = 0 = P2.1
ret
;
Write_data:
setb P3.6 ; RS = P2.0 = 1, write mode data
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay; call delay time
clr p3.7 ; EN = 0 = P2.1
ret
;
delay: mov R5,#0
delay1:mov R4,#02fh
djnz R4,$
djnz R5,delay1
ret
;
TableKeyboard:
DB 00
DB 0F9H
DB 00
DB 0F5H,0F3H,0F1H,0F2H,0FCH
DB 00H
DB 0FAH,0F8H,0F6H,0F4H
DB 0C0H
DB '~'
DB 00H
DB 00H
DB 0C1H
DB 0C2H
DB 00H
DB 0C3H
DB 'Q1'
DB 00H,00H,00H
DB 'ZSAW2'
DB 00H,00H
DB 'CXDE43'
DB 00H,00H
DB ' VFTR5'
DB 00H,00H
DB 'NBHGY6'
DB 00H,00H,00H
DB 'MJU78'
DB 00H,00H
DB ',KIO09'
DB 00H,00H
DB './L;P-'
DB 00H,00H,00H
DB 27H
DB 00H
DB '[='
DB 00H,00H
DB 0C5H
DB 0C6H
DB 0AH
DB ']'
DB 00H
DB '\'
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 08H
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0DH
DB 00H
DB 0FBH
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 0F7H
word1: DB ' Welcome Home '; here is the data to be            look up
end

7. Simpanlah program yang anda ketik dan beri nama : prog121a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan pengamatan untuk data keyboard yang ditampilkan.
11. Lakukan modifikasi program tersebut untuk menampilkan data keyboard PC lebih dari satu karakter ke LCD karakter.


Percobaan 12.3. Pengambilan data karakter keyboard PC dan display ke 7 Segmen

Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada disply 7 Segmen

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Pasang jumper 7 SegmenEN
4. Hubungkan modul Microcontroller Trainer dengan power supply +5V
5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
7. Ketik program berikut ini:

Rabu, 01 September 2010

INTERFACE KE PRINTER DOT MATRIKS

TEORI

Gambar 13.1. Pin Konfigurasi Printer Dot Matriks

Gambar 13.2. Penamaan sinyal pada printer DB25 Female

Selama operasi printer standart, cara data ditransmisikan melalui jalur parallel port adalah bervariasi, tetapi pada prinsipnya adalah sebagai berikut:
1. Untuk mengirimkan sebuah byte data, software mengeluarkan byte ke jalur data, selanjutnya mengeluarkan pulsa STROBE.
2. Disisi lain Printer, menguji jalur BUSY, dan komputer menunggu untuk jalur busy sebelum mengirimkan byte berikutnya.
3. Pada implemantasi yang lain, jalur ACK digunakan printer untuk menginformasikan PC bahwa data telah diterima.
4. Jalur PAPER EMPTY adalah jalur untuk menginformasikan ke PC bahwa kertas telah keluar.
5. Printer juga mengirim sinyal SELECTED ke PC untuk mengindikasikan bahwa printer sedang on line dan siap untuk menerima data
6. Sinyal ERROR dari printer dapat digunakan untuk berbagai macam error yang akan menyebabkan printer tidak dapat menerima data.
7. AUTOFEED, memberitahukan ke printer untuk secara automatik menyisipkan line feed setelah carriage return
8. INIT, inisialisasi printer setelah pemberia catu daya

Gambar 13.3. Koneksi interface printer


Percobaan 13.1 Cetak sebuah karakter dengan menggunakan printer dot matriks

Pada percobaan ini, dua buah kalimat akan dicetak pada kertas dengan menggunakan sebuah printer melalui interface ke mikrokontroller.
1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3
2. Hubungkan modul printer ke konektor printer DB25 female
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog132a.asm)

busy bit P3.0
strobe bit P3.1
portData equ P2
;
org 0h
start:call printchar; cetak sebuah karakter "A"
quit: sjmp Quit ; Hang Forever until reset pressed
;
;======================================================
;Subrutin ini digunakan untuk cetak satu karakter
;melalui D0 s/d D7
;sebelum melakukan cetak karakter, sinyal BUSY harus
;dideteksi, sampai terdeteksi sinyal dg logika low
;selanjutnya kirim sinyal STROBE dengan pulsa( --__-- )
;======================================================
Printchar:
mov portData,'A'
jb busy,$
setb strobe
clr strobe
acall delay
Setb strobe
acall delay
ret
;
delay: mov R7,#2
del1: mov R6,#20
DJNZ R6,$
DJNZ R7,del1
ret
;
end

7. Simpanlah program yang anda ketik dan beri nama : prog132a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot matriks


Percobaan 13.2 Cetak dua buah kalimat dengan menggunakan printer dot matriks

Pada percobaan ini, dua buah kalimat akan dicetak pada kertas dengan menggunakan sebuah printer melalui interface ke mikrokontroller.
1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3
2. Hubungkan modul printer ke konektor printer DB25 female
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog131a.asm)

       busy bit P3.0
strobe bit P3.1
portData equ P2
;
org 0h
start: call word_Welcome ; to print ' Welcome To '
call enter ; new line feed
call word_Lab ; to print ' Computer Laboratory '
call enter ; new line feed
;
quit: sjmp Quit ; Hang Forever until reset pressed
;
;======================================================
;Subrutin ini digunakan untuk cetak satu karakter
:melalui D0 s/d D7
;sebelum melakukan cetak karakter, sinyal BUSY harus
;dideteksi, sampai terdeteksi sinyal dg logika low
;selanjutnya kirim sinyal STROBE dengan pulsa( --__-- )
;======================================================
Printchar:
mov portData,A
jb busy,$
setb strobe
clr strobe
acall delay
Setb strobe
acall delay
ret
;
delay: mov R7,#2
del1: mov R6,#20
DJNZ R6,$
DJNZ R7,del1
ret
;======================================================
;SUbrutine ini digunakan untuk cetak kalimat
;dengan mamanggil subrutine printchar dan look up data
;proses cetak akan berlangsung terus sampai ditemui '$'
;======================================================
word_welcome:
mov DPTR,#Text_welcome
lagi1: clr A
movc A,@A+DPTR
cjne A,#'$',Print1
sjmp Out1
Print1: call Printchar
inc dptr
call delay
sjmp lagi1
Out1: ret
;
;==========================================
;This subroutine print a text'Computer Laboratorium'
;this subroutine will print character by character till '$'
;character is detected, when this character is detected then
;It's indicated that a text has finished
;==========================================
word_Lab:
mov DPTR,#Text_lab
lagi2: clr A
movc A,@A+DPTR
cjne A,#'$',Print2
sjmp Out2
Print2:call Printchar
inc dptr
call delay
sjmp lagi2
Out2: ret
Enter:
mov A,#0dh
call printchar
call delay
mov A,#0ah
call printchar
ret
;
Text_welcome:
DB ' Welcome To $'
Text_Lab: DB ' Computer Laboratory $'
;
end

7. Simpanlah program yang anda ketik dan beri nama : prog131a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot matriks


Selasa, 31 Agustus 2010

I N T E R U P S I Mikrokontroller MCS-51

Pada mikrokontroller menyediakan 5 buah sumeber interupsi, 2 buah interupsi eksternal, 2 buah interupsi timer, dan 1 buah interupsi serial. Agar interupsi dapat dilayani maka instruksi assembly harus ditempatkan pada alamat vektor berikut, sesuai dengan sumber interupsi yang akan digunakan.

Source
Vector Address
IE0
0003H
TF0
000BH
IE1
0013H
TF1
001BH
RI + TI
0023H

Org 0000h
Ljmp Start
Org 000bh
Ljmp Timer0Interupt
Start: ; Instruksi Rutinitas
; Instruksi Rutinitas
; Instruksi Rutinitas
Sjmp Start; { Looping Forever }
;
Timer0Interupt:
:
:
Reti
End

Pada contoh instruksi pemrograman tersebut tampak, apabila tidak ada interupsi maka program akan menuju ke start dan menjalankan rutinitas-rutinitas secara terus menerus, tetapi apabila suatu interupsi yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang semula bersarang pada rutinitas akan melompat pada alamat vektor 0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi Timer0Interupt.




Percobaan 11.1. Membangkitkan clock pada jam digital :DD dengan memanfaatkan interupsi timer 0.

Pada percobaan akan dibangkitkan clock untuk jam digital, hanya bagian detik puluhan (display 1) dan detik satuan (display 2) pada 7 segmen
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi setiap 50000 udetik maka data yang harus diisikan pada register TL1 dan TH1 adalah sebagai berikut:
65536 - 50000 = 15536 d or 3CB0h
Maka interupsi TF1 akan segera dibangkitkan setiap 50000 x 1 udetik = 0,05 detik
pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan increment setiap Timer 1 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan nyala selama = 0,05 x 20 detik = 1 detik

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini:(download file prog111a.asm)

detik equ            30h
detikpuluhan equ 31h
detiksatuan equ 32h
counter20 equ 33h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start:
mov detik,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
;
Setb P3.5 ;
clr P3.6
Setb P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End

6. Simpanlah program yang anda ketik dan beri nama : prog111a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu detik yang ditampilkan apakah sesuai dengan jam konvensional.

Display Detik (:DD)
Jam Konvensional (Detik)
1

2

3

4

5

:

60




Percobaan 11.2. Membangkitkan clock pada jam digital MM:DD dengan memanfaatkan interupsi timer 0.

Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog112a.asm)

    detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#0
mov menit,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
satumenit:
inc menit
mov A,#60
cjne A,menit,Update
mov menit,#0
Update:mov   A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End

6. Simpanlah program yang anda ketik dan beri nama : prog112a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu yang ditampilkan.

Display Detik (:DD)
Jam Konvensional (Detik)
00:01
00:02
00:03
00:04
:
01:59




Percobaan 11.3. Membangkitkan clock down MM:DD dengan memanfaatkan interupsi timer 0.


Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog113a.asm)

    detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#60
mov menit,#59
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
dec detik
mov A,detik
cjne A,#0,Update
mov detik,#60
satumenit:
dec menit
mov A,#0
cjne A,menit,Update
mov menit,#60
Update:mov            A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End


10. Simpanlah program yang anda ketik dan beri nama : prog113a.asm
11. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
13. Lakukan pengamatan untuk data waktu yang ditampilkan.

Percobaan 11.3. Membangkitkan clock down MM:DD dengan memanfaatkan interupsi timer 0.

Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog113a.asm)

    detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#60
mov menit,#59
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
dec detik
mov A,detik
cjne A,#0,Update
mov detik,#60
satumenit:
dec menit
mov A,#0
cjne A,menit,Update
mov menit,#60
Update:mov            A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End


10. Simpanlah program yang anda ketik dan beri nama : prog113a.asm
11. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
13. Lakukan pengamatan untuk data waktu yang ditampilkan.

Links Free Traffic And BackLink

 
Copyright © JHN-SOFT Poweredby Julka Hendri