Download

7/05/2012

Mikrokontroler AT89S51/52

             
       Mikrokontroler adalah suatu semikonduktor yang mengandung banyak transistor
dalam ruang yang kecil. Mikrokontroler merupakan komponen yang dapat menyimpan
program kontrol yang digunakan untuk mengendalikan berbagai komponen sesuai dengan
tujuan pembuatannya.
       Mikrokontroler    AT89S51     buatan      ATMEL   yang   merupakan   pengembangan
mikrokontroler standard MCS-51 memiliki fitur:
           PEROM (Programmable Erasable Read Only Memory) 4 kbyte untuk program
           RAM internal 128 byte
           In-System Programming
           4 buah port I/O masing-masing 8 bit (P0 ­ P3)
           2 buah Timer/counter 16 bit
           5 buah sumber interupsi
           Sebuah port serial full duplex
           Tiga level penguncian program (menghindari pembajakan program)
           Memiliki mode operasi daya rendah




                         Gambar 1.1. Pin Mikrokontroler AT89S51
1.1. Organisasi Memori
1.1.1. Program Memory
       Gambar 1.2. menunjukkan suatu peta bagian bawah dari memori program. Setelah
reset CPU mulai melakukan eksekusi dari lokasi 0000H. Sebagaimana yang ditunjukkan pada
gambar 1.3, setiap interupsi ditempatkan pada suatu lokasi tertentu pada memori program.
Interupsi menyebabkan CPU untuk melompat ke lokasi dimana harus dilakukan suatu layanan
tertentu. Sebagi contoh, Interupsi Eksternal 0, menempatai lokasi 0003H. Jika Interupsi

                                                                                  1
                    Modul Mikrokontroler AT89S51/52


Eksternal 0 akan digunakan, maka layanan rutin harus dimulai pada lokasi 0003H. Jika
interupsi ini tidak digunakan, lokasi layanan ini dapat digunakan untuk berbagai keperluan
sebagai Memori Program.




                     Gambar 1.3. Peta Interupsi mikrokontroller 8051


1.1.2 Memory Data
       Pada gambar 1.2. menunjukkan ruang memori data internal dan eksternal pada
keluarga 8051. CPU membangkitkan sinyal RD dan WR yang diperlukan selama akses RAM
eksternal. Memori data internal terpetakan seperti pada gambar 1.2. Ruang memori dibagi
menjadi tiga blok, yang diacukan sebagai 128 byte lower, 128 byte upper dan ruang SFR.
Alamat memori data internal selalu mempunyai lebar data satu byte. Pengalamatan langsung
diatas 7Fh akan mengakses satu alamat memori, dan pengalamatan tak langsung diatas 7Fh
akan mengakses satu alamat yang berbeda. Demikianlah pada gambar 1.4 menunjukkan
128 byte bagian atas dan ruang SFR menempati blok alamat yang sama, yaitu 80h sampai
dengan FFh, yang sebenarnya mereka terpisah secara fisik 128 byte RAM bagian bawah
dikelompokkan lagi menjadi beberapa blok, seperti yang ditunjukkan pada gambar 1.5. 32
byte RAM paling bawah, dikelompokkan menjadi 4 bank yang masing-masing terdiri dari 8
register. Instruksi program untuk memanggil register-register ini dinamai sebagai R0 sampai
dengan R7. Dua bit pada Program Status Word (PSW) dapat memilih register bank mana
yang akan digunakan. Penggunaan register R0 sampai dengan R7 ini akan membuat
pemrograman lebih efisien dan singkat, bila dibandingkan pengalamatan secara langsung.




                            Gambar 1.4. Memori data internal




                                                                                   2
                       Modul Mikrokontroler AT89S51/52




                       Gambar 1.5. RAM internal 128 byte paling bawah
Semua pada lokasi RAM 128 byte paling bawah dapat diakses baik dengan menggunakan
pengalamatan langsung dan tak langsung. 128 byte paling atas hanya dapat diakses
dengan cara tak langsung.


1.1.3. Special Function Register
       Sebuah peta memori yang disebut ruang special function register ( SFR ) ditunjukkan
pada gambar berikut. Perhatikan bahwa tidak semua alamat-alamat tersebut ditempati, dan
alamat-alamat yang tak ditempati tidak diperkenankan untuk diimplementasikan. Akses baca
untuk alamat ini akan menghasilkan data random, dan akses tulis akan menghasilkan efek
yang tak jelas.
Accumulator
ACC adalah register akumulator. Mnemonik untuk instruksi spesifik akumulator ini secara
sederhana dapat disingkat sebagai A.


Register B
Register B digunakan pada saat opersi perkalian dan pembagian. Selain untuk keperluan
tersebut     diatas,    register   ini   dapat     digunakan      untuk    register    bebas.


Program Status Word
Register PSW terdiri dari informasi status dari program seperti pada tabel 1.1


Stack Pointer
Register Pointer stack mempunyai lebar data 8 bit. Register ini akan bertambah sebelum data
disimpan selama eksekusi push dan call. Sementara stack dapat berada disembarang tempat
RAM. Pointer stack diawali di alamat 07h setelah reset. Hal ini menyebabkan stack untuk
memulai pada lokasi 08h.


Data Pointer
Pointer Data (DPTR) terdiri dari byte atas (DPH) dan byte bawah (DPL). Fungsi ini ditujukan
                                                                                       3
                      Modul Mikrokontroler AT89S51/52


untuk menyimpan data 16 bit. Dapat dimanipulasi sebagai register 16 bit atau dua 8 bit
register yang berdiri sendiri.




                                    Gambar 1.6. Peta SFR
Ports 0, 1, 2 dan 3
P0, P1, P2 dan P3 adalah SFR yang ditempati oleh Port 0, 1, 2 dan 3. Menulis suatu logika 1
terhadap sebuah bit dari sebuah port SFR ( P0, P1, P2 atau P3) menyebabkan pin output port
yang bersesesuaian akan berada dalam kondisi logika high `1'. Dan sebaliknya


Buffer Data Serial
Buffer serial sesungguhnya merupakan dua buah register yang terpisah, buffer pemancar
dan buffer penerima. Ketika data diisikan ke SBUF, maka akan menuju ke buffer pemancar
dan ditahan untuk proses transmisi. Ketika data diambil dari SBUF, maka akan berasal dari
buffer penerima.


Registers Timer
Pasangan register ( TH0, TL0) dan (TH1, TL1) adalah register pencacah 16 bit untuk Timer/
Counter 0 dan 1, masing-masing.


Register Control
Registers IP, IE, TMOD, TCON, SCON, dan PCON terdiri dari bit control dan status.


Program Status Word
PSW atau Program Status Word berisi bit-bit status yang berkaitan dengan kondisi atau
keadaan CPU mikrokontroler pada saat tersebut. PSW berada dalam lokasi ruang SFR (
perhatikan pada gambar 1.9, dengan lokasi alamat D0h ). Pada PSW ini kita dapat
memantau beberapa status yang meliputi: carry bit, auxiliary carry ( untuk operasi BCD ), dua
bit pemilih bank register, flag overflow, sebuah bit paritas dan dua flag status yang bisa

                                                                                       4
                          Modul Mikrokontroler AT89S51/52


didifinisikan sendiri. Bit carry dapat juga anda guakan pada keperluan operasi aritmatika,
juga bisa digunakan sebagai universal akumulator untuk beberapa operasi boolean.
                                Table 1.1 Program Status Word
     MSB                                                                                        LSB
      CY                 AC    F0            RS1              RS0             OV       -         P
     BIT             SYMBOL                                     FUNCTION
   PSW.7                 CY    Carry flag.
   PSW.6                 AC    Auxilliary Carry flag. (For BCD operations.)
   PSW.5                 F0    Flag 0. (Available to the user for general purposes.)
                               Register bank select control bit 1.
   PSW.4                 RS1
                               Set/cleared by software to determine working register bank. (See Note.)
                               Register bank select control bit 0.
   PSW.3                 RS0
                               Set/cleared by software todetermine working register bank. (See Note.)
   PSW.2                 OV    Overflow flag.
   PSW.1                  -    User-definable flag.
                               Parity flag.
   PSW.0                  P    Set/cleared by hardware each instruction cycle to indicate an odd/even
                               number of "one" bits in the Accumulator, i.e., even parity.
Bit RS0 dan RS1 dapat digunakan untuk memilih satu dari empat bank register sebagaimana
ditunjukkan pada tabel 19.2. Bit paritas dapat digunakan untuk mengetahuai jumlah logika
'1' pada akumulator: P=1 bila pada akumulator mempunyai logika '1' yang jumlahnya ganjil,
dan P=0 jika akumulator mempunyai logika '1' yang jumlahnya genap. Dua bit yang lain
PSW1 dan PSW5 dapat digunakan untuk berbagai macam tujuan
                                       Tabel 1. 2. Alamat bank
    RS1          RS0            Bank                                  Address RAM
     0               0            0                                    00 h - 07 h
     0               1            1                                    08 h - 0F h
     1               0            2                                    10 h - 17 h
     1               1            3                                       18 - 1F h


1.2. Pengalamatan
      Mode pengalamatan, mengacu bagaimana anda mengalamati suatu lokasi memori
tertentu Mode pengalamatan pada set instruksi 8051 adalah ditunjukkan sebagai berikut
Immediate Addressing MOV A,#20h
Direct Addressing MOV A,30h
Indirect Addressing MOV A,@R0
External Direct MOVX A,@DPTR
Code Indirect MOVC A,@A+DPTR


1.3. Set Instruksi
1.3.1 Instruksi copy data

                                                                                                 5
                         Modul Mikrokontroler AT89S51/52


         Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang artinya
memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna peng-
copy-an data. Hal ini bisa dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan,
Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan
di dalam R7.
         Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada
memori data dituliskan menjadi MOV, misalkan :
MOV A,$20
MOV A,@R1
MOV A,P1
MOV P3,A
         Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC,
hanya ada 2 jenis instruksi yang memakai MOVC, yakni:
MOVC A,@A+DPTR ; DPTR sebagai register indirect
MOVC A,@A+PC ; PC sebagai register indirect
         Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai untuk
memori data eksternal (X singkatakan dari External). Perintah ini hanya dimiliki oleh anggota
keluarga MCS51 yang mempunyai memori data eksternal. Hanya ada 6 macam instruksi
yang memakai MOVX, instruksi-instruksi tersebut adalah:
MOVX A,@DPTR
MOVX A,@R0
MOVX A,@R1
MOVX @DPTR,A
MOVX @R0,A
MOVX @R1,A



1.3.2 Instruksi Aritmatika
Perintah ADD dan ADDC
         Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan
ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW ­
Program Status Word) berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil
penjumlahan tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai `1',
kalau tidak bit Carry bernilai `0'. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit
Carry dalam proses sebelumnya ikut dijumlahkan bersama. Bilangan 1 byte yang
ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari register serba guna,
dari memori data yang nomor memorinya disebut secara langsung maupun tidak langsung,
seperti terlihat dalam contoh berikut :
ADD A,R0 ; register serba guna
ADD A,#$23 ; bilangan konstan
ADD A,@R0 ; no memori tak langsung


                                                                                     6
                         Modul Mikrokontroler AT89S51/52


ADD A,P1 ; no memori langsung (port 1)



Perintah SUBB
Contoh:
SUBB A,R0 ; A = A - R0 ­ C
SUBB A,#$23 ; A = A - $23
SUBB A,@R1
SUBB A,P1



Perintah MUL AB
          Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit
dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang
bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih
kecil ditampung di Akumulator A.
          Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil
perkalian yang ada dalam register B. Bit OV akan bernilai `0' jika register B bernilai $00,
kalau tidak bit OV bernilai `1'.
MOV A,#10
MOV B,#20
MUL AB



Perintah DIV AB
          Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam
register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator,
sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung di register B.
          Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum
pembagian yang ada dalam register B. Bit OV akan bernilai `1' jika register B asalnya
bernilai $00.


1.3.3 Instruksi Logika
Contoh: ANL A,#00001111b                 ; meng- AND- kan accumulator dengan 00001111b


1.3.4 Instruksi Lompatan
jump
Jump adalah instruksi agar program melompat ke alamat program tertentu. Ada empat jenis
jump diantaranya:
              SJMP dengan maximum lompatan sejauh 256 byte
              AJMP dengan maximum lompatan sejauh 2 kb


                                                                                         7
                      Modul Mikrokontroler AT89S51/52


              LJMP dengan maximum lompatan sejauh 64 kb
              JMP bisa digunakan menggantikan SJMP, AJMP, dan LJMP


Instruksi pemanggilan sub-rutin
        Instruksi sub-rutin yang dimaksudkan adalah proses pemanggilan sduatu fungsi dalam
program. Beberapa program memiliki suatu fungsi yang sama, oleh karena itu demi
mengefisiensi memori program digunakan suatu fungsi yang digunakan bersama. Dalah satu
contoh adalah fungsi delay.
        Instruksi pemanggilan ini ada tiga jenis:
        > ACALL dengan pemanggilan sejauh maximum 2 Kb
        > LCALL     dengan pemanggilan maximum sejauh 64 Kb
        > CALL      bisa digunakan mewakili ACALL atau LCALL


Instruksi Lompatan Bersyarat
        Satu hal yang perlu diketahui untuk lompatan bersyarat, lompatan bersyarat hanya
bisa digunakan untuk melompat maximum sejauh 256 Byte. Di luar jarak tersebut haruslah
dibuat program penghubung. Di antaranya lompatan bersyarat adalah:
        Instruksi JZ / JNZ
        Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah instruksi JUMP
bersyarat yang memantau nilai Akumulator A.


        Instruksi JC / JNC
        Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry) adalah instruksi jump
bersyarat yang memantau nilai bit Carry di dalam Program Status Word (PSW). Bit Carry
merupakan bit yang banyak sekali dipakai untuk keperluan operasi bit, untuk menghemat
pemakaian memori-program disediakan 2 instruksi yang khusus untuk memeriksa keadaan bit
Carry, yakni JC dan JNC.


        Instruksi JB / JNB / JBC
        Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan instruksi JBC (Jump
on Bit Set Then Clear Bit) merupakan instruksi Jump bersyarat yang memantau nilai-nilai bit
tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input
mikrokontroler MCS51.
Contoh pemakaian instruksi JB dan JNB sebagai berikut :
JB P1.1,$
JNB P1.1,$




                                                                                           8
                        Modul Mikrokontroler AT89S51/52


          Instruksi-instruksi di atas memantau kedaan kaki IC MCS51 Port 1 bit 1. Instruksi
pertama memantau P1.1, jika P1.1 bernilai `1' maka MCS51 akan mengulang instruksi ini,
(tanda $ mempunyai arti jika syarat terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi
berikutnya melakukan hal sebaliknya, yakni selama P1.1 bernilai `0' maka MCS51 akan
tertahan pada instruksi ini.


          Instruksi proses dan test
          Instruksi-instruksi Jump bersyarat yang dibahas di atas, memantau kondisi yang sudah
terjadi yang dicatat MCS51. Ada dua instruksi yang melakukan dulu suatu proses baru
kemudian memantau hasil proses untuk menentukan apakah harus Jump. Kedua instruksi yang
dimaksud adalah instruksi DJNZ dan instruksi CJNE.


1.4.      Pemrograman pada AT89S51
         Pemrograman pada AT89S51 dilakukan dengan membuat file kode sumber (source
code) yang ditulis dalam bahasa assembly (dalam pelatihan ini berakhiran *.h51) dengan
langkah-langkah sebagai berikut:
1. Ketik Program dengan bantuan NotePad dan Save as dengan nama yang diakhiri
       dengan ekstensi .h51 (misal: mikro.h51)
2. Compile sumber tersebut dengan bantuan Command Prompt sehingga menjadi file *.obj.
       Misalkan sumber disimpan di C:\SDCC, maka untuk mengcompile caranya adalah:
       Ketikkan di Command Prompt: C:\SDCC>asm51 mikro.h51
3. Setelah tidak ada error kemudian file object diubah ke bentuk file intel hex dengan
       command prompt juga
       C:\SDCC>oh mikro.obj
4. Kemudian File Hex ini siap dituliskan ke PEROM dalam mikrokontroler menggunakan
       program uploader (AEC_ISP) dengan urutan sebagai berikut:
       1. Setting Uploader dengan aturan sebagai berikut pada gambar dan kemudian di
           save. Proses ini hanya dilakukan sekali di awal penggunaan selama tidak ada
           pengubahan jenis mikrokontroler.




                                                                                      9
                Modul Mikrokontroler AT89S51/52


                                             (a)




                                           (b)
                          Gambar 1.7. Mensetting Uploader
2. Setelah disetting, kembali ke menu awal dan ketik "A" atau arahkan pointer ke
   bagian A, kemudian ketik nama file berekstensi .HEX.




                          Gambar 1.8. Mengubah Hex ke Bin
3. Kemudian Ketik E atau arahkan pointer ke bagian E untuk mengupload program ke
   mikrokontroler. Setelah ada pesan dalam bentuk persen hingga 100% maka
   pengisian ke Mikrokontroler berhasil.




                   Gambar 1.9. Mengisi Program ke Mikrokontroler
4. Untuk melihat hasilnya atau proses RUNNING maka Ketik I atau arahkan pointer ke
   bagian I, dengan Reset dalam keadaan Low

                                                                                   10
                     Modul Mikrokontroler AT89S51/52




                              Gambar 1.10. Pengaturan Reset Uploader


                                        PERCOBAAN 1
                                         DISPLAY LED
TUJUAN:
1. Peserta memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.
2. Peserta dapat memahami program assembly untuk menghidupkan dan mematikan LED.
3. Peserta memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL. RR, RLC dan
    RRC
4. Peserta memahami pembuatan instruksi waktu tunda



Percobaan 1.1. Instruksi RL/ RR ( Rotate Left dan Right )
Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan sebaliknya, program
ini memanfaatkan instruksi RL dan RR.
Ketik program berikut ini:
ORG 0H
MAIN : MOV     A,#11111110B
        MOV    R5,#7H
CF:      MOV   P1,A
        CALL   DELAY
        RL     A
        DJNZ   R5,CF
        MOV    A,#01111111B
        MOV    R5,#7H
CF2   : MOV    P1,A
        CALL   DELAY
        RR     A
        DJNZ   R5,CF2
        SJMP   MAIN
DELAY : MOV    R2,#0H
DELAY1 : MOV   R3,#90H
DELAY2 : MOV   R4,#1
        DJNZ   R4,$
        DJNZ   R3,DELAY2
        DJNZ   R2,DELAY1
        RET
        END

                                                                                11
                          Modul Mikrokontroler AT89S51/52


1. Simpanlah           program      yang   anda   ketik   dan   beri   nama   :   Led01.H51
      Pada Command Prompt lakukan kompilasi program dari *.H51 ke *.hex.
2. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (
      Lihat Petunjuk Penggunaan)
3. Lakukan pengamatan pada LED
4. Lakukan perubahan pada program tersebut untuk menjalankan dua buah LED kekiri dan
      kekanan, tiga buah LED kekiri dan kekanan , dan seterusnya.

Percobaan 1.2. Instruksi RLC/ RRC ( Rotate Left dan Right )
Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan sebaliknya dengan
bentuk Bar, program ini memanfaatkan instruksi RLC dan RRC.
Ketik program berikut ini:
ORG 0H
MAIN      : MOV      A,#11111111B
            MOV      R5,#8H
CF        : CLR      C
            RLC      A
            MOV      P1,A
            CALL     DELAY
            DJNZ     R5,CF
            MOV      R5,#8H
CF2       : SETB     C
            RRC      A
            MOV      P1,A
           CALL      DELAY
            DJNZ     R5,CF2
             SJMP    MAIN
DELAY      : MOV     R2,#0H
DELAY1     : MOV     R3,#0H
DELAY2     : DJNZ    R3,DELAY2
              DJNZ   R2,DELAY1
              RET
              END
1. Simpanlah           program      yang   anda   ketik   dan   beri   nama   :   Led02.H51
      Pada Command Prompt lakukan kompilasi program dari *.H51 ke *.hex.
2. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software (
      Lihat Petunjuk Penggunaan)
3. Lakukan pengamatan pada LED
4. Lakukan perubahan pada program tersebut untuk menjalankan dua buah LED kekiri dan
      kekanan, tiga buah LED kekiri dan kekanan , dan seterusnya.



                                           PERCOBAAN 2
                                      SAKLAR PUSH BUTTON
TUJUAN:

                                                                                     12
                              Modul Mikrokontroler AT89S51/52


1. Peserta memahami rangkaian mikrokontroller dengan interface ke saklar
2. Peserta dapat memahami program assembly untuk mengambil data saklar dan
    mengeluarkan data ke LED.
3. Peserta memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.




                                Gambar 1.11. Rangkaian Interface Push Button
          Pada gambar 1.11. tersebut tampak rangkaian push button, bila saklar ditekan maka
port sesuai dengan bit tersebut akan mendapat logika low `0' dan sebaliknya bila saklar
tidak ditekan maka port tersebut akan mendapat logika high `1'.


Percobaan 2.1. Ambil Data Saklar
1. Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan bit tersebut.
2. Ketik program berikut ini:

                ORG 0H
MAIN :          MOV P3,#0FFH          ; MEMBERIKAN LOGIKA HIGH KE PORT3
                MOV A,P3              ; MEMBACA PORT 3, APAKAH ADA PENEKANAN TOMBOL
                CALL DELAY            ; MEMBERI WAKTU DELAY UNTUK MENGURANGI EFEK BOUNCING
                MOV P1,A              ; MENGELUARKAN KONDISI PEMBACAAN KE PORT 1
                SJMP MAIN             ; LOMPAT KE AWAL PROGRAM

DELAY : MOV R4,#0                     ; ISI R4 DENGAN 0H
DELAY1 : MOV R5,#1H                   ; ISI R5 DENGAN 1H
         DJNZ R5,$                    ; TUNGGU R5 SAMPAI 0
         DJNZ R4,DELAY1               ; KURANGI R4 DENGAN 1 BILA TIDAK SAMA DENGAN 0 LOMPAT KE
                                      ; delay1
                RET
                END


Percobaan 2.2. Putar Kanan-Kiri
Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti penekanan tombol
P3.2 atau P3.3.
Untuk      melakukan           percobaan     ini   lakukan   beberapa     langkah    sebagai     berikut:
Ketik program berikut ini:
LED_GESER             BIT      P3.2
LED_BAR               BIT      P3.3


                      ORG 0H
LED1     : JB         LED_GESER,LED2           ; CEK PENEKANAN TOMBOL1
          CALL        DELAY                    ; KURANGI BOUNCING

                                                                                                 13
                           Modul Mikrokontroler AT89S51/52


        MOV        A,#11111110B     ; ISI ACCUMULATOR DENGAN 11111110B
        MOV        R5,#7H           ; ISI R5 DENGAN 8
GSR    : MOV       P1,A             ; KELUARKAN ISI ACCUMULATOR KE PORT1
        CALL       LDELAY           ; PANGGIL FUNGSI DELAY
        RL         A                ; GESER ACCUMULATOR KE KIRI
        DJNZ       R5,GSR           ; ULANGI PROSES DIATAS SAMPAI SEBANYAK R5
        MOV        R5,#8H           ; ISI R5 DENGAN 8
GSR2 : MOV         P1,A             ; KELUARKAN ACC KE PORT1
        CALL       LDELAY
        RR         A                ; GESER KANAN DATA DALAM ACC
        DJNZ       R5,GSR2          ; ULANGI PROSES SEBANYAK R5


LED2 : JB          LED_BAR,LED1     ; CEK PENEKANAN TOMBOL
        CALL       DELAY
        MOV        A,#11111111B     ; ISI ACC DENGAN 111111111B
        MOV        R5,#8H


BAR : CLR          C                ; CLEAR BIT CARRY
        RLC        A                ; GESER KIRI ACC DENGAN MELIBATKAN CARRY
        MOV        P1,A             ; KELUARKAN ISI ACC KE PORT1
        CALL       LDELAY
        DJNZ       R5,BAR           ; ULANGI PROSES SEBANYAK R5
        MOV        R5,#8H           ; ISI R5 DENGAN 8
BAR2   : SETB      C                ; SET BIT CARRY
        RRC        A                ; GESER KANAN ACC DENGAN MELIBATKAN BIT CARRY
        MOV        P1,A
        CALL       LDELAY
        DJNZ       R5,BAR2          ; ULANGI PROSES SEBANYAK R5
        SJMP       LED1             ; KEMBALI KE FUNGSI LED1, CEK TOMBOL


DELAY : MOV        R2,#0            ; ISI R4 DENGAN 0H
DELAY1: MOV        R3,#1H           ; ISI R5 DENGAN 1H
        DJNZ       R3,$             ; TUNGGU R5 SAMPAI 0
        DJNZ       R2,DELAY1        ; KURANGI R4 DENGAN 1 BILA TIDAK SAMA DENGAN 0
        RET                         ; LOMPAT KE DELAY1



LDELAY : MOV       R6,#0H           ; ISI R6 DENGAN 0
LDELAY1 : CALL     DELAY            ; PANGGIL FUNGSI DELAY DI ATAS
             DJNZ R6,LDELAY1        ; ULANGI PROSES SEBANYAK R6
             RET                    ; KEMBALI KE PROGRAM PEMANGGILNYA
             END
                                     PERCOBAAN 3
                                    DISPLAY 7 SEGMEN
TUJUAN:
1. Peserta memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Peserta dapat memahami program assembly untuk menampilkan data ke 7 segmen

                                                                                     14
                   Modul Mikrokontroler AT89S51/52


3. Peserta memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RLC, RRC dan
   waktu tunda.




                          Gambar 1.12. Rangkaian 7 Segmen

Pada gambar tersebut seven segment commont anoda dikendalikan dengan menggunakan
transistor PNP, apabila ada logika low pada basis transistor, maka 7 segment akan nyala
dan sebaliknya akan padam.




                         Gambar 1.13 Modul 7 Segment tunggal

                          Tabel 1.3. Data Display 7 Segmen
             P1.7 P1.6 P1.5 P1.4       P1.3   P1.2 P1.1 P1.0     Display
             DOT    g      f     e      d      c      b      a
              1     1     0      0      0      0      0      0       0
              1     1     1      1      1      0      0      1       1
              1     0     1      0      0      1      0      0       2
              1     0     1      1      0      0      0      0       3
              1     :      :     :      :       :     :      :       :
              1     0     0      0      1      0      0      0      A
              1     0     0      0      0      0      1      1       b

Pada tabel tersebut tampak bahwa untuk menghidupkan sebuah segmen, harus dikirimkan
data logika low "0" dan sebaliknya untuk mematikan segmen, harus dikirimkan data logika
high "1".
                                                                                15
                         Modul Mikrokontroler AT89S51/52


Percobaan 3.1. Tulis Sebuah Karakter pada 7 Segmen ( Display 1 )
          Pada percobaan ini, karakter `A' akan ditampilkan pada 7 Segmen Display 1
Untuk melakukan percobaan ini lakukan beberapa langkah seperti percobaan sebelumnya
kemudian ketikkan program ini: ( BERI NAMA SEV0.H51)

SEVENS      EQU P1
            ORG 0H
MAIN      : CLR P0.0
            MOV SEVENS,#0A0H
            SJMP MAIN
            END
Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:
Nama Karakter                                          Posisi Display
C                                                      Display 2
E                                                      Display 5
3                                                      Display 8



Percobaan 3.2. Tulis Tulisan Kata Pada 7 Segmen
Pada percobaan ini, sebuah tulisan akan ditampilkan pada 7 Segmen Display 1 sampai
Display 8 secara berturutan
Program: ( BERI NAMA SEV.H51)
P_DATA EQU P1             ; PORT 1 ADALAH PORT DATA
P_CH      EQU P0          ; PORT 0 ADALAH PORT PEMILIHAN SEVEN SEGMENT


            ORG 0H
START      : MOV R6,#0H          ; LAMA TAMPIL SEBUAH TULISAN
MAIN       : MOV R3,#8H          ; JUMLAH SEVEN SEGMENT
            MOV R2,#01111111B    ; INISIALISASI PENGGESERAN
            MOV DPTR,#TULISAN    ; POINTER KE ALAMAT TULISAN
ULANG      : CLR A               ; ACC DI BERSIHKAN
            MOVC A,@A+DPTR       ; LOAD DARI ALAMAT YANG DITUNJUK ACC+DPTR KE ACC
            MOV P_DATA,A         ; DATA DARI ALAMAT TERSEBUT DIKELUARKAN KE PORT DATA
            MOV A,R2             ; SALIN R2 KE ACC
            MOV P_CH,A           ; KELUARKAN ACC KE PORT 0
            RR A                 ; GESER DATA DI ACC
            MOV R2,A             ; SIMPAN KEMBALI KE R2
             INC DPTR            ; NAIKKAN DATA POINTER
            CALL DELAY           ; BERI WAKTU TAMPILAN
            MOV P_DATA,#0FFH     ; HINDARI BAYANGAN
            DJNZ R3,ULANG        ; TAMPILKAN KE DELAPAN SEVEN SEGMENT BERGANTIAN
            DJNZ R6,MAIN         ; ULSNGI PROSES SEBANYAK 255
            MOV R6,#0H           ; ISI ULANG


MAIN2 :     MOV R3,#8H           ; PROSES SAMA DENGAN DI ATAS
            MOV R2,#01111111B

                                                                                        16
                        Modul Mikrokontroler AT89S51/52


           MOV DPTR,#TULISAN2 ; MENGARAH KE ALAMAT DATA TULISAN2
ULANG2     CLR A
           MOVC A,@A+DPTR
           MOV P_DATA,A
           MOV A,R2
           MOV P_CH,A
           RR A
           MOV R2,A
           INC DPTR
           CALL DELAY
           MOV P_DATA,#0FFH
           DJNZ R3,ULANG2
           DJNZ R6,MAIN2
           SJMP START
DELAY :    MOV R4,#0
DELAY1 :   MOV R5,#1
           DJNZ R5,$
           DJNZ R4,DELAY1
           RET


TULISAN : DB 0C7H,0A0H,87H,0F9H,8BH,0A0H,0C8H,0FFH
TULISAN2: DB 0A0H,87H,80H,90H,92H,92H,0F9H,0FFH
END



Percobaan 3.3. Tulis Karakter Bergerak dalam 7 Segmen
Pada percobaan ini, karakter akan ditampilkan pada 7 Segmen dengan bergerak dari
Display 1 s/d Display 8 :
Program: ( BERI NAMA SEV2.H51)
PORT_DATA           EQU      P1
PORT_SC             EQU      P0
JUMLAH              EQU      8H
          ORG 0H
START   : MOV R1,#30H
KOSONG : MOV @R1,#0FFH
          INC R1
          CJNE R1,#80H,KOSONG
          MOV R1,#40H
          MOV DPTR,#TULISAN
FILL :    CLR A
          MOVC A,@A+DPTR
          MOV @R1,A
          INC R1
          INC DPTR
          CJNE R1,#40H+JUMLAH,FILL
ACT1 :    MOV 2FH,#38H                   ; PENGALAMATAN LANGSUNG
          MOV R2,#JUMLAH+8H
ACT2 :    MOV R3,#50H
ACT3 :    MOV R7,#8H
          MOV R6,#7FH
          MOV R0,2FH
ACT4 :    MOV PORT_DATA,@R0
          MOV PORT_SC,R6
          CALL DELAY
          MOV A,R6
          RR A
          MOV R6,A

                                                                         17
                       Modul Mikrokontroler AT89S51/52


            INC R0
            MOV PORT_SC,#0FFH
            DJNZ R7,ACT4
            DJNZ R3,ACT3
            INC 2FH
            DJNZ R2,ACT2
            SJMP START
DELAY :     MOV R4,#0
DELAY1 :    DJNZ R4,$
            RET

TULISAN : DB 92H,84H,0C7H,0A0H,0C8H,0C8H,0A0H,87H
   END


                                         PERCOBAAN 4
                                          KEYPAD 4X3
TUJUAN:
1. Peserta memahami rangkaian interface keypad 4x4 dengan mikrokontroller
2. Peserta memahami bahasa assembly untuk pengambilan data keypad
3. Peserta memahami bahasa assembly untuk pengambilan data keypad dan mengeluarkan
    ke 7 Segmen
4. Peserta memahami bahasa assembly untuk pengambilan data keypad.




                         Gambar 5.1 Rangkaian interface keypad 4x3
           Keypad serig digunakan sebagi suatu input pada beberapa peralatan yang berbasis
mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang
terhubung sebagai baris dan kolom dengan susuan seperti yang ditunjukkan pada gambar
5.1. Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu
bit dari 4 bit yang terhubung pada BARIS dengan logika low "0" dan selanjutnya membaca 3
bit pada KOLOM untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai
konsekuensi, selama tidak ada tombol yang ditekan, maka mikrokontroller akan melihat
sebagai logika high "1" pada setiap pin yang terhubung ke baris.


5.1. Percobaan CEK data keypad 4x3
      Pada percobaan ini dilakukan cek pada port 3 untuk mendapatkan data keypad yang
ditekan, dan hasilnya ditampilkan pada seven segment.

                                                                                   18
                        Modul Mikrokontroler AT89S51/52


      Program: ( BERI NAMA DENGAN KEYPAD.H51)
KEYPAD    EQU P3
COL1     BIT KEYPAD.4
COL2     BIT KEYPAD.5
COL3     BIT KEYPAD.6
GATE7    BIT P0.0
DATA7    EQU P1

          ORG 0H

BARIS1  : MOV KEYPAD,#11111110B   ; PORT 3 DIISI DENGAN 0FEH
KOLOM11 : JB COL1,KOLOM12         ; CEK APAKAH BARIS1 KOLOM 1 DITEKAN
         CALL DELAY               ; KURANGI BOUNCING
         CLR GATE7                ; SELECT SEVEN SEGMENT KE 0
         MOV DATA7,#11111001B     ; 1111 1001= ANGKA 1
          JMP BARIS2

KOLOM12 : JB COL2,KOLOM13         ; APAKAH BARIS1 KOLOM2 DITEKAN?
         CALL DELAY               ; KURANGI BOUNCING
         CLR GATE7                ; SELECT SEVEN SEGMENT KE 0
         MOV DATA7,#10100100B     ; 1010 0100= ANGKA 2
          JMP BARIS2

KOLOM13 : JB COL3,BARIS2          ; APAKAH BARIS1 KOLOM3 DITEKAN ?
         CALL DELAY               ; KURANGI BOUNCING
         CLR GATE7                     ; SELECT SEVEN SEGMENT KE 0
         MOV DATA7,#10110000B          ; 1011 0000= ANGKA3

BARIS2  : MOV KEYPAD,#11111101B
KOLOM21 : JB COL1,KOLOM22
          CALL DELAY
          CLR GATE7
          MOV DATA7,#10011001B        ; 1001 1001= ANGKA 4
          JMP BARIS3

KOLOM22 : JB COL2,KOLOM23
         CALL DELAY
         CLR GATE7
         MOV DATA7,#10010010B         ; 1001 0010= ANGKA 5
          JMP BARIS3

KOLOM23 : JB COL3,BARIS3
         CALL DELAY
         CLR GATE7
         MOV DATA7,#10000010B        ; 1000 0010= ANGKA 6
          JMP BARIS3

BARIS3  : MOV KEYPAD,#11111011B
KOLOM31 : JB COL1,KOLOM32
         CALL DELAY
         CLR GATE7
         MOV DATA7,#11111000B        ; 1111 1000= ANGKA 7
          JMP BARIS4

KOLOM32 : JB COL2,KOLOM33
         CALL DELAY
         CLR GATE7
         MOV DATA7,#10000000B       ; 1000 0000= ANGKA 8
          JMP BARIS4

KOLOM33 : JB COL3,BARIS4
         CALL DELAY
         CLR GATE7
         MOV DATA7,#10010000B       ; 1001 0000= ANGKA 9
          JMP BARIS4

BARIS4 : MOV KEYPAD,#11110111B
KOLOM41: JB COL1,KOLOM42
         CALL DELAY
         CLR GATE7
         MOV DATA7,#10000011B      ; 1000 0011= HURUF b
         JMP BARIS1

                                                                        19
                     Modul Mikrokontroler AT89S51/52



KOLOM42: JB COL2,KOLOM43
        CALL DELAY
        CLR GATE7
        MOV DATA7,#11000000B     ; 1100 0000= ANGKA 0
        JMP BARIS1

KOLOM43: JB COL3,TRANSIT1
          CALL DELAY
          CLR GATE7
          MOV DATA7,#10001100B   ; 1000 1100= HURUF P
TRANSIT1: JMP BARIS1

DELAY : MOV R2,#0H
DELAY1 : MOV R3,#1H
          DJNZ R3,$
          DJNZ R2,DELAY1
         RET
         END




                                      PERCOBAAN 5
                                       Timer/Counter
AT89S51 mempunyai 2 buah timer/ counter. Yaitu timer/counter 0 dan timer counter 1.
sedangkan untuk AT89S52 ke atas mempunyai 3 buah timer/counter, dengan tambahan
Timer/counter 2. Penggunaan timer/ counter ada beberapa mode
Mode 0




                            Gambar 5.1. Timer/Counter mode 0
     Untuk mode 1 sana dengan mode 0 hanya saja panjang THX:TLX sebesar 8bit:8bit




                                                                                  20
                    Modul Mikrokontroler AT89S51/52




                            Gambar 5.2. Timer/counter mode 1




                           Gambar 5.3. Timer/Counter Mode 2




                           Gambar 5.4. Timer/Counter Mode 3




                          Gambar 5.5 register TCON dalam SFR
                                (bisa dialamati secara BIT)
Deskripsi Bit
TF1 akan set jika Timer 1 overflow

                                                               21
                     Modul Mikrokontroler AT89S51/52


TR1 diset untuk memulai perhitungan waktu dengan Timer/Counter 1
TF0 akan set jika Timer 0 overflow
TR0 di set untuk memulai perhitungan waktu dengan Timer/Counter 0
IE1 akan set jika terjadi interupsi di pin INT1(falling edge)
IT1 untuk mentriger interupsi eksternal 1
IE0 akan set jika terjadi interupsi di pin INT0
IT0 untuk mentriger interupsi eksternal 0




                           Gambar 5.6. register TMOD dalam SFR
                              ( TIDAK bisa dialamati secara BIT)




                                         PERCOBAAN 6
                               LCD ( LIQUID CRYSTAL DISPLAY)


TUJUAN:
1. Peserta memahami rangkaian interface mikrokontroller dengan LCD Karakter 2x 16
2. Peserta dapat memahami program assembly untuk menampilkan data ke LCD Karakter 2 x
16
3. Peserta memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu tunda.
4. Peserta memahami mencetak karakter pada posisi baris dan kolom tertentu
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti
AT89S51. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom
atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan
sebagai berikut:




                           Gambar 4.1. Modul LCD Karakter 2x16
                                   Tabel 1.1 Pin dan Fungsi
    PIN   Name          Function
1         VSS           Ground voltage

                                                                                    22
                     Modul Mikrokontroler AT89S51/52



2        VCC            +5V
3        VEE            Contrast voltage
4        RS             Register Select 0 = Instruction Register 1 = Data Register
                        Read/ Write, to choose write or read mode 0 = write
5        R/W
                        mode 1 = read mode
                        Enable 0 = start to lacht data to LCD character
6        E
                        1= disable
7        DB0            LSB
8        DB1            -
9        DB2            -
10       DB3            -
11       DB4            -
12       DB5            -
13       DB6            -
14       DB7            MSB
15       BPL            Back Plane Light
16       GND            Ground voltage


       Display    karakter     pada     LCD     diatur   oleh    pin     EN,    RS   dan        RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda sedang
mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus
dibuat logika low "0" dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur
yang lain telah siap, set EN dengan logika "1" dan tunggu untuk sejumlah waktu tertentu (
sesuai dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low "0" lagi.
       Jalur RS adalah jalur Register Select. Ketika RS berlogika low "0", data akan
dianggap sebagi sebua perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ).
Ketika RS berlogika high "1", data yang dikirim adalah data text yang akan ditampilkan
pada display LCD. Sebagai contoh, untuk menampilkan huruf "T" pada layar LCD maka RS
harus diset logika high "1". Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika
low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika
high "1", maka program akan melakukan pembacaan memori dari LCD. Sedangkan pada
aplikasi umum pin RW selalu diberi logika low "0". Pada akhirnya, bus data terdiri dari 4
atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user ). Pada kasus bus data 8
bit, jalur diacukan sebagai DB0 s/d DB7
       Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,
Function Set Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
RS    R/W         DB7        DB6      DB5      DB4       DB3       DB2         DB1     DB0
0     0           0          0        1        DL        N         F           X       X


                                                                                           23
                        Modul Mikrokontroler AT89S51/52


CATATAN:
X : Don't care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali


Entry Mode Set
Mengatur increment/ decrement dan mode geser
RS    R/W           DB7     DB6    DB5      DB4        DB3    DB2      DB1    DB0
0     0             0       0      0        0          0      1        I/D    S
Catatan:
I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke
DDRAM.
I/D = "0", decrement
I/D= "1", increment
S: Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser
Display On/ Off Cursor
Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink
RS    R/W           DB7     DB6    DB5      DB4        DB3    DB2      DB1    DB0

0     0             0       0      0        0          1      D        C      B
D : Mengatur display
D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali
secara langsung dengan mengatur D=1.
C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink
Clear Display
Perintah ini hapus layar
RS    R/W           DB7     DB6    DB5      DB4        DB3    DB2      DB1    DB0
                                                                                  24
                          Modul Mikrokontroler AT89S51/52



0      0            0           0         0          0          0     0     0        1


Geser Kursor dan Display
Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display.
Fungsi ini digunakan untuk koreksi atau pencarian display
RS    R/W       DB7             DB6       DB5        DB4        DB3   DB2   DB1      DB0
0     0         0               0         0          0          S/C   R/L   X        X
Catatan : x = Dont care
S/C     R/L             Note
0       0               Shift cursor position to the left
0       1               Shift cursor position to the right
1       0               Shift the entire display to the left
1       1               Shift the entire display to the right
POSISI KURSOR
Modul LCD terdiri dari sejumlah memory yang digunakan untuk display. Semua teks
yang kita tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD
secara berturutan membaca memory ini untuk menampilkan teks ke modul LCD itu
sendiri.




           Pada peta memori tersebut, daerah yang berwarna biru ( 00 s/d 0F dan 40 s/d 4F )
adalah display yang tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak
16 karakter per baris dengan dua baris. Angka pada setiap kotak adalah alamat memori
yang bersesuaian dengan posisi dari layar. Demikianlah karakter pertama di
sudut kiri atas adalah menempati alamah 00h. Posisi karakter berikutnya adalah alamat 01h
dan seterusnya. Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan
pada peta memori adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah
perintah ke LCD untuk mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi
Set Posisi Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita
berharap untuk menempatkan kursor. Sebagai contoh, kita ingin menampilkan kata "World"
pada baris ke dua pada posisi kolom ke sepuluh. Sesuai peta memori, posisi karakter pada
kolom 11 dari baris ke dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata
"World" pada LCD, kita harus mengirim instruksi set posisi kursor, dan perintah untuk instruksi
ini adalah 80h ditambah dengan alamat 80h+4Ah =0Cah. Sehingga dengan mengirim
perintah Cah ke LCD, akan menempatkan kursor pada baris kedua dan kolom ke 11 dari
DDRAM.

                                                                                         25
                         Modul Mikrokontroler AT89S51/52


INISIALISASI
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan inisialisasi dan
mengkonfigurasikannya. Hal ini dijalankan dengan mengirimkan sejumlah instruksi ke LCD.
Antara lain: pengaturan lebar data interface 8 bit atau 4 bit data bus, pemilihan ukuran font
karakter 5x8 atau 5x7 dan lain-lain, dengan instruksi sebagai berikut.




;==================
; Inisialisasi LCD
;==================
INIT_LCD : mov A,#03Fh            ;FUNCTION SET 0011 1111
             call wr_inst
             call wr_inst
             mov A,#0Ch           ;0000 1101
             call wr_inst
             mov A,#06h           ;0000 0110
             call wr_inst
             mov A,#01h           ;0000 0001
             call wr_inst
             RET

Percobaan 4.1. Tulis Sebuah Karakter pada LCD Karakter
Pada percobaan ini, karakter `A' akan ditampilkan pada LCD
LCD_RS            bit      P1.0
LCD_CS                   bit          P1.1
         org 0h
        call init_LCD
MAIN: mov R1,#80h ; Lokasi Display RAM, Row=1 Col=1
        call wr_inst
        mov A,#'A'        ; Cetak Karakter A
        call write_data
stop : sjmp stop
;==================
; Inisialisasi LCD
;==================
INIT_LCD : mov A,#03Fh                ;FUNCTION SET 0011 1111
             call wr_inst
             call wr_inst
             mov A,#0Ch              ;0000 1101
             call wr_inst
             mov A,#06h              ;0000 0110
             call wr_inst
             mov A,#01h              ;0000 0001
             call wr_inst
             RET
;========================================
; Routine untuk menulis instruksi ke LCD
;========================================
wr_inst:
              clr LCD_RS         ;INSTRUKSI
              mov P2,A ;intruksi ke LCD
              SETB LCD_CS ;module
             CALL DELAY
             CLR LCD_CS
              call delay
              ret
;========================================
; Routine untuk menulis data ke LCD
;========================================
wr_data:

                                                                                     26
                           Modul Mikrokontroler AT89S51/52


           setb LCD_RS
           ;setb LCD_CS
           mov P2,A ;data ke LCD
           SETB LCD_CS ;module
           CALL DELAY
           CLR LCD_CS
           call delay
           ret       ;
;========================================
; ROUTINE DELAY
 ;========================================
delay: mov R0,#0
           delay1:mov R7,#0fh
           djnz R7,$
           djnz R0,delay1
           ret
           end

Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

                      Nama Karakter                                          Posisi Display
                           1                                                  Row 1, Col 2
                           Z                                                  Row 1, Col 8
                           &                                                 Row 2, Col 12


Percobaan 4.2. Tulis Karakter Dengan Look Up Table
Pada percobaan ini, Sebuah Tulisan akan ditampilkan pada LCD. Percobaan sama dengan
program sebelumnya, tetapi sebelum perintah END tambahkan baris berikut:
tulis   : mov DPTR,#judul ; alamat text judul
baris    : mov R3,#16     ; tulis pada baris 1 sebanyak 16 char
          mov A,#080h       ; mulai dari kiri atas
          call write_inst
tulis1 : clr A
          movc A,@A+DPTR
kirim:    Inc DPTR
          call write_data
          djnz R3,Tulis1
          ret

tulis2:   mov DPTR,#judul2 ; alamat text judul
barisB:   mov R3,#16           ; tulis pada baris 1 sebanyak 16 char
          mov A,#0C0h             ; mulai dari kiri atas
          call write_inst
tulis3: clr A
          movc A,@A+DPTR
kirim1: Inc DPTR
          call write_data
          djnz R3,Tulis3
          ret
;===================================
; menuliskan data dari ram terima
; ke LCD baris 2 sebanyak 16 alamat
;===================================

judul: DB       '-FOR MY FUTURE--'
judul2: DB       ' =GET THE BEST='

          end

Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

Nama Karakter                                         Start Posisi Display

                                                                                              27
                     Modul Mikrokontroler AT89S51/52



Selamat Datang                           Row 1, Col 1
Mikrokontroller                          Row 2, Col 1




1.5. Interupsi
       8051 mempunyai 5 buah sumber interupsi. Dua buah interupsi eksternal, dua buah
interupsi timer dan sebuah interupsi port serial. Meskipun memerlukan pengertian yang lebih
mendalam, pengetahuan mengenai interupsi sangat membantu mengatasi masalah
pemrograman mikroprosesor/mikrokontroler dalam hal menangani banyak peralatan
input/output. Pengetahuan mengenai interupsi tidak cukup hanya dibahas secara teori saja,
diperlukan        contoh     program        yang        konkrit      untuk       memahami.
Saat kaki RESET pada IC mikroprosesor/mikrokontroler menerima sinyal reset (pada MCS51
sinyal tersebut berupa sinyal `1' sesaat, pada prosesor lain umumnya merupakan sinyal `0'
sesaat), Program Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor
reset (reset vector), merupakan nomor awal memori-program yang menampung program
yang                                    harus                                    dijalankan.
Pembahasan di atas memberi gambaran bahwa proses reset merupakan peristiwa perangkat
keras (sinyal reset diumpankan ke kaki Reset) yang dipakai untuk mengatur kerja dari
perangkat lunak, yakni menentukan aliran program prosesor (mengisi Program Counter
dengan vektor reset). Program yang dijalankan dengan cara reset, merupakan program
utama bagi prosesor.
       Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan
interupsi (ISR - Interrupt Service Routine). Saat prosesor menjalankan ISR, pekerjaan yang
sedang dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan ISR
prosesor kembali menjalankan program utama


1.5.1. Sumber interupsi MCS51
        AT89S51 mempunyai 6 sumber interupsi, yakni Interupsi External (External Interrupt)
yang berasal dari kaki INT0 dan INT1, Interupsi Timer (Timer Interrupt) yang berasal dari
Timer 0 maupun Timer 1, Interupsi Port Seri (Serial Port Interrupt) yang berasal dari bagian
penerima dan bagian pengirim Port Seri. Di samping itu AT89C52 mempunyai 2 sumber


                                                                                    28
                      Modul Mikrokontroler AT89S51/52


interupsi lain, yakni Interupsi Timer 2 bersumber dari Timer 2 yang memang tidak ada pada
AT89C51.
Bit IE0 (atau bit IE1) dalam TCON merupakan petanda (flag) yang menandakan adanya
permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa meng-aktip-kan petanda ini, yang
pertama karena level tegangan `0' pada kaki INT0 (atau INT1), yang kedua karena terjadi
transisi sinyal `1' menjadi `0' pada kaki INT0 (atau INT1). Pilihan bentuk sinyal ini ditentukan
lewat bit IT0 (atau bit IT1) yang terdapat dalam register TCON.
1. Kalau bit IT0 (atau IT1) ='0' maka bit IE0 (atau IE1) dalam TCON menjadi `1' saat kaki
INT0='0'.
2. Kalau bit IT0 (atau IT1) ='1' maka bit IE0 (atau IE1) dalam TCON menjadi `1' saat terjadi
transisi sinyal `1' menjadi `0' pada kaki INT0.
       Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0 (atau bit IE1)
dikembalikan menjadi `0', menandakan permintaan Interupsi Eksternal sudah dilayani. Namun
jika permintaan Interupsi Ekternal terjadi karena level tegangan `0' pada kaki IT0 (atau IT1),
dan level tegangan pada kaki tersebut saat itu masih ='0' maka bit IE0 (atau bit IE1) akan
segera menjadi `1' lagi!
Bit TF0 (atau bit TF1) dalam TCON merupakan petanda (flag) yang menandakan adanya
permintaan Interupsi Timer, bit TF0 (atau bit TF1) menjadi `1' pada saat terjadi limpahan
pada pencacah biner Timer 0 (atau Timer 1).
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0 (atau bit TF1) dikembalikan
menjadi `0', menandakan permintaan Interupsi Timer sudah dilayani.
Interupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port seri selesai
mengirim data 1 byte, permintaan interupsi semacam ini ditandai dengan petanda (flag)
TI='1'. Yang kedua terjadi saat port seri telah menerima data 1 byte secara lengkap,
permintaan     interupsi   semacam      ini   ditandai   dengan     petanda     (flag)   RI='1'.
Petanda di atas tidak dikembalikan menjadi `0' menjelang prosesor menjalankan ISR dari
Interupsi port seri, karena petanda tersebut masih diperlukan ISR untuk menentukan sumber
interupsi berasal dari TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau
menerima data, petanda-petanda tadi harus di-nol-kan lewat program.
Petanda permintaan interupsi (IE0, TF0, IE1, TF1, RI dan TI) semuanya bisa di-nol-kan atau di-
satu-kan lewat instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh
perangkat keras. Artinya permintaan interupsi bisa diajukan lewat pemrograman, misalnya
permintaan interupsi eksternal IT0 bisa diajukan dengan instruksi SETB IE0.


1.5.2. Mengaktifkan Interupsi



                                                                                         29
                     Modul Mikrokontroler AT89S51/52


       Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-
aktip-kan atau di-nonaktip-kan secara tersendiri lewat bit-bit yang ada dalam register IE
(Interrupt Enable Register). Bit EX0 dan EX1 untuk mengatur interupsi eksternal INT0 dan INT1,
bit ET0 dan ET1 untuk mengatur interupsi timer 0 dan timer 1, bit ES untuk mengatur interupsi
port seri, seperti yang digambarkan dalam Gambar 2. Di samping itu ada pula bit EA yang
bisa dipakai untuk mengatur semua sumber interupsi sekali gus. Setelah reset, semua bit
dalam register IE bernilai `0', artinya sistem interupsi dalam keadaan non-aktip. Untuk
mengaktipkan salah satu sistem interupsi, bit pengatur interupsi bersangkutan diaktipkan dan
juga EA yang mengatur semua sumber interupsi. Misalnya instruksi yang dipakai untuk
mengaktipkan interupsi ekternal INT0 adalah SETB EX0 disusul dengan SETB EA.
MSB                                                                            LSB
EA              X     X      ES       ET1          EX1            ET0          EX0


BIT       SYMBOL           FUNCTION
                           Disables all interrupts. If EA=0, no interrupt will be
IE.7      EA               acknowledged. If EA=1, each interrupt source is individually
                           enabled or disabled by setting or clearing its enable bit.
IE.6      -                -
IE.5      -                -
                           Enables or disables the Serial Port interrupt. If ES=0, the Serial
IE.4      ES
                           Port interrupt is disabled.
                           Enables or disables the Timer 1 Overflow interrupt. If ET1=0, the
IE.3      ET1
                           Timer 1 interrupt is disabled.
                           Enables or disables External Interrupt 1. If EX1=0, External
IE.2      EX1
                           interrupt 1 is disabled.
                           Enables or disables the Timer 0 Overflow interrupt. If ET0=0, the
IE.1      ET0
                           Timer 0 interrupt is disabled.
                           Enables or disables External interrupt 0. If EX0=0, External
IE.0      EX0
                           interrupt 0 is disabled.


1.5.3 Vektor Interupsi
       Saat MCS51 menanggapi permintaan interupsi, Program Counter diisi dengan sebuah
nilai yang dinamakan sebagai vektor interupsi, yang merupakan nomor awal dari memori-
program yang menampung ISR untuk melayani permintaan interupsi tersebut. Vektor interupsi
itu dipakai untuk melaksanakan inststuksi LCALL yang diaktipkan secara perangkat keras.
Vektor interupsi untuk interupsi eksternal INT0 adalah $0003, untuk interupsi timer 0 adalah
$000B, untuk interupsi ekternal INT1 adalah $0013, untuk interupsi timer 1 adalah $001B
dan untuk interupsi port seri adalah $0023. Jarak vektor interupsi satu dengan lainnya
sebesar 8, atau hanya tersedia 8 byte untuk setiap ISR. Jika sebuah ISR memang hanya
pendek saja, tidak lebih dari 8 byte, maka ISR tersebut bisa langsung ditulis pada memori-
                                                                                      30
                      Modul Mikrokontroler AT89S51/52


program yang disediakan untuknya. ISR yang lebih panjang dari 8 byte ditulis ditempat lain,
tapi pada memori-program yang ditunjuk oleh vektor interupsi diisikan instruksi JUMP ke arah
ISR bersangkutan
Source                          Vector Address
IE0                             0003H
TF0                             000BH
IE1                             0013H
TF1                             001BH
RI + TI                         0023H


1.5.4 Tingkatan Perioritas
Masing-masing sumber interupsi bisa ditempatkan pada dua tingkatan perioritas yang
berbeda. Pengaturan tingkatan perioritas isi dilakukan dengan bit-bit yang ada dalam
register IP (Interrupt Priority). Bit PX0 dan PX1 untuk mengatur tingkatan perioritas interupsi
eksternal INT0 dan INT1, bit PT0 dan PT1 untuk mengatur interupsi timer 0 dan timer 1, bit PS
untuk mengatur interupsi port seri. Setelah reset, semua bit dalam register IP bernilai `0',
artinya semua sumber interupsi ditempatkan pada tingkatan tanpa perioritas. Masing-masing
sumber interupsi bisa ditempatkan pada tingkatan perioritas utama dengan cara men-`satu'-
kan bit pengaturnya. Misalnya interupsi timer 0 bisa ditempatkan pada tingkatan perioritas
utama dengan instruksi SETB PT1.


Interrupt Priority Register ( IP )
MSB                                                                                LSB
X                X     X       PS       PT1           PX1            PT0           PX0


Note:
BIT         SYMBOL           FUNCTION
IP.7        -                -
IP.6        -                -
IP.5        -                -
                             Defines the Serial Port interrupt priority level. PS=1 programs it to
IP.4        PS
                             the higher priority level.
                             Defines the Timer 1 interrupt priority level. PT1=1 programs it to
IP.3        PT1
                             the higher priority level.
                             Defines the External Interrupt 1 priority level. PX1=1 programs it
IP.2        PX1
                             to the higher priority level.
                             Enables or disables the Timer 0 interrupt priority level. PT0=1
IP.1        PT0
                             programs it to the higher priority level.
IP.0        PX0              Defines the External Interrupt 0 priority level. PX0=1 programs it

                                                                                           31
                        Modul Mikrokontroler AT89S51/52



                             to the higher priority level.


1.5 Timer Counter
           Timer dan Counter merupakan sarana input yang kurang dapat perhatian pemakai
mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa dipakai untuk
mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti, dipakai dalam
pengendalian tegangan secara PWM (Pulse Width Modulation) dan sangat diperlukan untuk
aplikasi            remote             control               dengan           infra            merah.
Pada dasarnya sarana input yang satu ini merupakan seperangkat pencacah biner (binary
counter) yang terhubung langsung ke saluran-data mikrokontroler, sehingga mikrokontroler
bisa membaca kedudukan pancacah, bila diperlukan mikrokontroler dapat pula merubah
kedudukan pencacah tersebut. MCS-51 mempunyai dua buah register timer/ counter 16 bit,
yaitu Timer 0 dan Timer 1.


1.5.1 Fasilitas Timer/Counter
           Keluarga mikrokontroler MCS51, misalnya AT89C51 dan AT89Cx051, dilengkapi
dengan dua perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer
1. Sedangkan untuk jenis yang lebih besar, misalnya AT89C52, mempunyai tambahan satu
perangkat Timer/Counter lagi yang dinamakan sebagai Timer 2. Pencacah biner untuk Timer
0 dibentuk dengan register TL0 (Timer 0 Low Byte, memori-data internal nomor $6A) dan
register TH0 (Timer 0 High Byte, memori data internal nomor $6C). Pencacah biner untuk
Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte, memori-data internal nomor $6B)
dan register TH1 (Timer 1 High Byte, memori-data internal nomor $6D). Pencacah biner
pembentuk Timer/Counter MCS51 merupakan pencacah biner menaik (count up binary
counter) yang mencacah dari $0000 sampai $FFFF, saat kedudukan pencacah berubah dari
$FFFF kembali ke $0000 akan timbul sinyal limpahan. Untuk mengatur kerja Timer/Counter
dipakai 2 register tambahan yang dipakai bersama oleh Timer 0 dan Timer 1. Register
tambahan tersebut adalah register TCON (Timer Control Register, memori-data internal
nomor $88, bisa dialamat secara bit) dan register TMOD (Timer Mode Register, memori-data
internal        nomor        $89).      Pencacah         biner        Timer      0       dan         1
TL0, TH0, TL1 dan TH1 merupakan SFR (Special Function Register) yang dipakai untuk
membentuk pencacah biner perangkat Timer 0 dan Timer 1. Kapasitas keempat register
tersebut masing-masing 8 bit, bisa disusun menjadi 4 macam Mode pencacah biner seperti
terlihat         dalam           Gambar            2a            sampai         Gambar              2d.
Pada Mode 0, Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing bekerja sendiri,
artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan Timer 1 bekerja pada Mode 2, atau


                                                                                               32
                    Modul Mikrokontroler AT89S51/52


kombinasi         mode           lainnya         sesuai        dengan            keperluan.
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk menyusun system timer
yang tidak bisa di-kombinasi lain. Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode
adalah sebagai berikut:
Mode 0 ­ Pencacah Biner 13 bit




Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1) sebagai pencacah biner
5 bit (meskipun kapasitas sesungguhnya 8 bit), limpahan dari pencacah biner 5 bit ini
dihubungkan ke THx (maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah
biner 13 bit, limpahan dari pencacah 13 bit ini ditampung di flip-flop TFx (maksudnya bisa
TF0      atau     TF1)      yang       berada      di      dalam      register      TCON.
Mode ini meneruskan sarana Timer yang ada pada mikrokontroler MCS48 (mikrokontroler
pendahulu MCS51), dengan maksud rancangan alat yang dibuat dengan MCS48 bisa
dengan mudah diadaptasikan ke MCS51. Mode ini tidak banyak dipakai lagi.
Mode 1 ­ Pencacah Biner 16 bit



Gambar 1.11 Mode 1 - Pencacah Biner 16 Bit
Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai
pencacah biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 16 bit.
Seiring dengan sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari
$0000 (biner 0000 0000 0000 0000), $0001, $0002 ... sampai $FFFF (biner 1111 1111
1111 1111), kemudian melimpah kembali menjadi $0000.
Mode 2 ­ Pencacah Biner 8 bit dengan Isi Ulang




TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai untuk menyimpan nilai
yang diisikan ulang ke TLx, setiap kali kedudukan TLx melimpah (berubah dari $FF menjadi
$00). Dengan cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan oleh
nilai yang disimpan dalam TH0.
Mode 3 ­ Gabungan Pencacah Biner 16 bit dan 8 Bit




                                                                                    33
                     Modul Mikrokontroler AT89S51/52




        Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah,
yang pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan
yang dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai
pencacah biner 8 bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner ketiga
adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan TF1 sebagai sarana
pemantau                                                                         limpahan.
Register Pengatur Timer Register TMOD dan register TCON merupakan register pembantu
untuk mengatur kerja Timer 0 dan Timer 1, kedua register ini dipakai bersama oleh Timer 0
dan Timer 1.




        Register TMOD dibagi menjadi 2 bagian secara simitris, bit 0 sampai 3 register
TMOD (TMOD bit 0 .. TMOD bit 3) dipakai untuk mengatur Timer 0, bit 4 sampai 7 register
TMODE (TMOD bit 4 .. TMOD bit 7) dipakai untuk mengatur Timer 1, pemakaiannya sebagai
berikut :
1. Bit M0/M1 dipakai untuk menentukan Mode Timer seperti yang terlihat dalam Tabel di
Gambar 3a.
2. Bit C/T* dipakai untuk mengatur sumber sinyal denyut yang diumpankan ke pencacah
biner. Jika C/T*=0 sinyal denyut diperoleh dari osilator kristal yang frekuensinya sudah
dibagi 12, sedangkan jika C/T*=1 maka sinyal denyut diperoleh dari kaki T0 (untuk Timer 0)
atau kaki T1 (untuk Timer 1).
3. Bit GATE merupakan bit pengatur saluran sinyal denyut. Bila bit GATE=0 saluran sinyal
denyut hanya diatur oleh bit TRx (maksudnya adalah TR0 atau TR1 pada register TCON).
Bila bit GATE=1 kaki INT0 (untuk Timer 0) atau kaki INT1 (untuk Timer 1) dipakai juga untuk
mengatur saluran sinyal denyut (lihat Gambar 4).




                                                                                   34
                      Modul Mikrokontroler AT89S51/52


       Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3, bagian yang
diarsir dalam Gambar 3b) dipakai untuk keperluan mengatur kaki INT0 dan INT1, ke-empat
bit ini dibahas dibagian lain.
MSB                                                                              LSB
TF1            TR1         TF0        TR0          IE1      IT1        IE0       IT0
BIT           SYMBOL       FUNCTION
                           Timer 1 overflow flag. Set by hardware on Timer/Counter
TCON.7      TF1            overflow. Cleared by hardware when processor vector to
                           interrupt routine, or clearing the bit in software.
                           Timer 1 Run control bit . Set/ cleared by software to turn Timer/
TCON.6      TR1
                           Counter on/off
                           Timer 0 overflow flag. Set by hardware on Timer/Counter
TCON.5      TF0            overflow. Cleared by hardware when processor vector to
                           interrupt routine, or clearing the bit in software.
                           Timer 1 Run control bit . Set/ cleared by software to turn Timer/
TCON.4      TR0
                           Counter on/off
                           Interrupt 1 Edge flag. Set by hardware when external interrupt
TCON.3      IE1
                           edge detected. Cleared when interrupt processed.
                           Interrupt 1 type control bit. Set/ cleared by software to specefy
TCON.2      IT1
                           falling edge/ low level trigerred external interupts
                           Interrupt 0 Edge flag. Set by hardware when external interrupt
TCON.1      IE0
                           edge detected. Cleared when interrupt processed.
                           Interrupt 0 type control bit. Set/ cleared by software to specefy
TCON.0      IT0
                           falling edge/ low level trigerred external interupts
Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian secara simitris yang
dipakai untuk mengatur Timer0/Timer 1, sebagai berikut:
1. Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan (lihat
Gambar 2), TFx akan menjadi `1' setiap kali pencacah biner yang terhubung padanya
melimpah (kedudukan pencacah berubah dari $FFFF kembali menjadi $0000). Bit TFx di-nol-
kan dengan istruksi CLR TF0 atau CLR TF1. Jika sarana interupsi dari Timer 0/Timer 1 dipakai,
TRx di-nol-kan saat MCS51 menjalankan rutin layanan interupsi (ISR ­ Interupt Service
Routine).
2. Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut,
bila bit ini =0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti
mencacah. Bila bit GATE pada register TMOD =1, maka saluran sinyal denyut ini diatur
bersama oleh TRx dan sinyal pada kaki INT0/INT1 (lihat Gambar 4).
1.6. Port Serial
Umumnya orang selalu menganggap port seri pada MCS51 adalah UART yang bekerja
secara asinkron, jarang yang menyadari port seri tersebut bisa pula bekerja secara sinkron,
pada hal sebagai port seri yang bekerja secara sinkron merupakan sarana yang baik sekali
untuk menambah input/output bagi mikrokontroler.
                                                                                       35
                     Modul Mikrokontroler AT89S51/52




                     Gambar 1.17. Komunikasi serial dengan komputer
       Dikenal 2 macam cara transmisi data secara seri. Kedua cara tersebut dibedakan
oleh sinyal denyut (clock) yang dipakai untuk men-`dorong' data seri, kalau clock dikirim
bersama dengan data seri, cara tersebut dikatakan sebagai transmisi data seri secara
sinkron. Sedangkan dalam transmisi data seri secara asinkron, clock tidak dikirim bersama
data seri, rangkaian penerima data harus membangkitkan sendiri clock pendorong data seri.
Port seri MCS51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari 4 mode tersebut, 1
mode diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara asinkron. Secara
ringkas ke-empat mode kerja tersebut bisa dibedakan sebagai berikut:
Mode 0
Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P3.0 (RxD), dan
kaki P3.1 (TxD) dipakai untuk menyalurkan clock pendorong data seri yang dibangkitkan
MCS51. Data dikirim/diterima 8 bit sekali gus, dimulai dari bit yang bobotnya paling kecil
(bit 0) dan diakhiri dengan bit yang bobotnya paling besar (bit 7). Kecepatan pengiriman
data (baud rate) adalah 1/12 frekuensi osilator kristal.
Mode 1
Mode ini dan mode-mode berikutnya bekerja secara asinkron, data dikirim melalui kaki P3.1
(TxD) dan diterima melalui kaki P3.0 (RxD). Pada Mode 1 data dikirim/diterima 10 bit sekali
gus, diawali dengan 1 bit start, disusul dengan 8 bit data yang dimulai dari bit yang
bobotnya paling kecil (bit 0), diakhiri dengan 1 bit stop. Pada MCS51 yang berfungsi
sebagai penerima bit stop ditampung pada RB8 dalam register SCON. Kecepatan
pengiriman data (baud rate) bisa diatur sesuai dengan keperluan. Mode inilah yang umum
dikenal sebagai UART (Universal Asynchronous Receiver/Transmitter).
Mode 2
Data dikirim/diterima 11 bit sekali gus, diawali dengan 1 bit start, disusul 8 bit data yang
dimulai dari bit yang bobotnya paling kecil (bit 0), kemudian bit ke 9 yang bisa diatur lebih
lanjut, diakhiri dengan 1 bit stop. Pada MCS51 yang berfungsi sebagai pengirim, bit 9
tersebut berasal dari bit TB8 dalam register SCON. Pada MCS52 yang berfungsi sebagai
penerima, bit 9 ditampung pada bit RB8 dalam register SCON, sedangkan bit stop
diabaikan tidak ditampung. Kecepatan pengiriman data (baud rate) bisa dipilih antara 1/32

                                                                                     36
                    Modul Mikrokontroler AT89S51/52


atau               1/64                   frekuensi            osilator          kristal.
Mode 3 Mode ini sama dengan Mode 2, hanya saja kecepatan pengiriman data (baud rate)
bisa diatur sesuai dengan keperluan, seperti halnya Mode 1.
Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara full
duplex, artinya pada saat yang sama port seri ini bisa mengirim data sekali gus menerima
data. Register SBUF merupakan register penghubung port seri. Dalam ke-empat mode di
atas, semua instruksi yang mengakibatkan perubahan isi SBUF akan mengakibatkan port seri
mengirimkan data keluar dari MCS51. Agar port seri bisa menerima data, bit REN dalam
register SCON harus bernilai `1'. Pada mode 0, proses penerimaan data dimulai dengan
instruksi CLR RI, sedangkan dalam mode lainnya proses penerimaan data diawali oleh bit
start yang bernilai `0'. Data yang diterima port seri dari luar MCS51, diambil dengan
instruksi                                    MOV                                A,SBUF.
Mengambil data dari SBUF dan menyimpan data ke SBUF sesungguhnya bekerja pada dua
register yang berlainan, meskipun nama registernya sama-sama SBUF.


1.6.1 Register-register Port Seri MCS51
MCS51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan pemakai
port seri.




SBUF merupakan SFR (Special Function Register) yang terletak pada memori-data internal
dengan nomor $99. SBUF mempunyai kegunaan ganda, data yang disimpan pada SBUF
akan dikirim keluar MCS51 lewat port seri, sedangkan data dari luar MCS51 yang diterima
port seri diambil dari SBUF pula. Jadi meskipun hanya menempati satu nomor memori-data
internal (nomor $99), sesungguhnya SBUF terdiri dari 2 register yang berbeda.




    SCON merupakan SFR (Special Function Register) yang terletak pada memori-data
internal dengan nomor $98, merupakan register utama untuk mengatur kerja port seri
MCS51. Setelah reset semua bit dalam SCON bernilai `0'.



                                                                                 37
                        Modul Mikrokontroler AT89S51/52


1. Bit SM0 dan bit SM1 (bit 7 dan bit 6 pada register SMOD) dipakai untuk menentukan
      mode kerja port seri. Setelah reset kedua bit ini bernilai `0'
2. Bit REN (bit 4) dipakai untuk mengaktipkan kemampuan port seri menerima data. Pada
      mode 0 kaki RxD (kaki P3.0) dipakai untuk mengirim data seri (REN='0') dan juga untuk
      menerima data seri (REN='1'). Sifat ini terbawa pula pada saat port seri bekerja pada
      mode 1, 2 dan 3, meskipun pada mode-mode tersebut kaki RxD hanya dipakai untuk
      mengirim data, agar kaki RxD bisa dipakai untuk menerima data terlebih dulu harus
      dibuat REN='1'. Setelah reset bit REN bernilai `0'.
3. Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9 bit data, SBUF yang
      kapasitasnya 8 bit tidak cukup untuk keperluan ini. Bit ke-sembilan yang akan dikirim
      terlebih dulu diletakkan di TB8 (bit 3), sedangkan bit RB8 (bit 2) merupakan bit yang
      dipakai untuk menampung bit ke-sembilan yang diterima port seri.
4. Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang diterima, dengan
      demikian apa bila RB8 bernilai `1' maka data diterima dengan benar, sebaliknya apa
      bila    RB8='0'        berarti      terjadi       kesalahan     kerangka            (framing   error).
      Kalau bit SM2 (bit 5) bernilai `1', jika terjadi kesalahan kerangka, RI tidak akan menjadi
      `1'     meskipun          SBUF        sudah           berisi   data          dari       port        seri.
      Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti yang dikirim harus
      ditentukan sendiri dengan program dan diletakkan pada TB8, dan bit pariti yang
      diterima pada RB8 dipakai untuk menentukan integritas data secara program pula. Tidak
      seperti dalam UART standard, semuanya itu dikerjakan oleh perangkat keras dalam IC
      UART.
5. Bit TI (bit 1) merupakan petanda yang setara dengan petanda TDRE (Transmitter Data
      Register Empty) yang umum dijumpai pada UART standard. Setelah port seri selesai
      mengirim data yang disimpan ke-dalam SBUF, bit TI akan bernilai `1' dengan sendirinya,
      bit ini harus di-nol-kan dengan program agar bisa dipakai untuk memantau keadaan
      SBUF                dalam                  pengiriman                 data                 berikutnya.
      Sub-rutin SerialOut berikut dipakai untuk mengirim data seri, bisa dipakai untuk semua
      mode port seri. Baris 02 menunggu TI menjadi `1', dimaksud untuk memastikan pengiriman
      data sebelumnya sudah selesai. Data yang akan dikirim sebelumnya sudah disimpan di A,
      pada baris 03 data tersebut dikirim melalui port seri dengan cara meletakannya di
      SBUF. Agar TI bisa dipakai untuk memantau keadaan SBUF pada pengiriman data
      berikutnya, pada baris 04 TI di-nol-kan.
SerialOut:
MOV SBUF,A       ; kirim data baru
JNB TI,$         ; tunggu data sebelumnya selesai dikirim
CLR TI           ; petanda ada pengiriman baru
RET

                                                                                                     38
                           Modul Mikrokontroler AT89S51/52


6. Bit RI (bit 0) merupakan petanda yang setara dengan petanda RDRF (Receiver Data
      Register Full) yang umum dijumpai pada UART standard. Setelah SBUF menerima data
      dari port seri, bit RI akan bernilai `1' dengan sendirinya, bit ini harus di-nol-kan dengan
      program agar bisa dipakai untuk memantau keadaan SBUF dalam penerimaan data
      berikutnya.
      Sub-rutin SerialIn berikut dipakai untuk menerima data seri, bisa dipakai untuk semua
      mode port seri. Baris 02 menunggu RI menjadi `1', dimaksud untuk memastikan sudah ada
      data baru yang diterima pada SBUF. Pada baris 03 data pada SBUF diambil ke A. Agar
      RI bisa dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada
      baris 04 RI di-nol-kan.
SerialIn:
MOV A,SBUF          ; ambil data
JNB RI,$            ; tunggu SBUF berisi data baru
CLR RI              ; pentanda data sudah diambil
RET




Mode 0 port serial
UART merupakan standard yang dipakai untuk komunikasi data seri dengan komputer,
komunikasi data seri dengan modem dan lain sebagainya. Komunikasi data seri secara
sinkron seperti mode 0, merupakan komunikasi data seri yang banyak dipakai untuk
menghubungkan IC-IC digital dalam sebuah sistem, misalnya pada IC Serial EEPROM, cara ini
belakangan menjadi makin populer karena rangkaiannya sederhana dan tidak makan
tempat. Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara sinkron untuk
keperluan di atas, yang paling terkenal adalah teknik ciptaan Philips yang dinamakan
sebagai I2C (Inter IC Communication), Motorola mengenalkan teknik yang dinamakan sebagai
SPI (Serial Peripheral interface) dan National Semiconductor menciptakan MicroWire.
Transmisi data seri yang dipakai pada mode 0, tidak sepadan dengan 3 teknik yang disebut
di atas, tapi dengan perancangan yang cermat mode 0 ini bisa dihubungkan ke SPI, sehingga
bisa dipakai untuk menghubungkan MCS51 dengan mikrokontroler Motorola MC68HC11.
Sinyal data seri sinkron yang ada pada kaki P3.0 dan P3.1, sesungguhnya murni merupakan
sinyal yang biasa dipakai untuk mengendalikan shift-register, dengan demikian dengan
menghubungkan shift register ke port seri, bisa menambah port input maupun port output
dengan mudah.
Baud Rate
Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate = 1/12 x Frekuensi
Osilator. Baud rate pada mode 2 bergantung pada nilai bit SMOD pada SFR PCON. Jika

                                                                                         39
                       Modul Mikrokontroler AT89S51/52


SMOD = 0, baud rate adalah 1/64 frekuensi osilator. Jika SMOD=1, baud rate adalah
1/32 frekuensi osilator. Penentuan baud rate mode 2 adalah sebagai berikut:



Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju overflow dari Timer 1.
Menggunakan Timer 1 untuk membangkitkan Baud Rate Ketika timer 1 digunakan untuk
membangkitkan clock baud rate, baud rate pada mode 1 dan 3 adalah ditentukan oleh laju
overflow timer 1 dan nilai dari SMOD. Penentuan baud rate untuk mode 1 dan 3 adalah
sebagai berikut:




Interupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan aplikasi, timer ini
dioperasikan sebagai timer, dengan mode auto reload mode 2. Pada kasus ini baud rate
diberikan dengan rumus sebagai berikut:




MOTOR STEPPER




                   Gambar 5.10. urutan pemberian logika pada motor stepper




                                                                                40
                  Modul Mikrokontroler AT89S51/52




                      ULN2003                              STEPPER




                   Gambar 5.11. diagram koneksi ke motor stepper




ADC0804

ADC adalah pengubah dari data analog ke data digital. Beberapa contoh adc adalah
aDC0808,ADC0809, ADC0804,AD574, dsb.       ADC0804 adalah adc yang memiliki data
sepanjang 8 bit dengan 1 masukan sedangkan adc0809, dan adc0808 adalah adc 8 bit
dengan 8 masukan. Sedangkan AD574 adalah ADC 12 bit dengan 8 masukan.




                                                                          41
Modul Mikrokontroler AT89S51/52


VCC                                           VCC
      R2              R3                                J2
                                                        1
       1K              1K                               2
                                                        3
                                                        From sensor
                                 U1
                                                                     J1
                            6                      18
                            7     +IN      DB0     17                1
                                  -IN      DB1     16                2
               R1            9             DB2     15                3
                10K         19    VREF/2   DB3     14                4
                             4    CLKR     DB4     13                5
       C1                         CLKIN    DB5     12                6
       150pF                1              DB6     11                7
                            2     CS       DB7                       8
                            3     RD               5                 CON8
                                  WR       INTR

                                 ADC0804          VCC
                                                             J3
                                                             1
                                                             2
                                                             3
                                                             To uP



            Gambar 5.12. rangkaian ADC0804




                                                                            42

0 komentar:

Post a Comment

Newer Post Older Post Home
Aulia DirUt. Powered by Blogger.
 

Blog Archive

Followers

 

Templates by Nano Yulianto | CSS3 by David Walsh | Powered by {N}Code & Blogger