Docstoc

AT89S51 mikrokontroler

Document Sample
AT89S51 mikrokontroler Powered By Docstoc
					  JURUSAN TEKNIK ELEKTRO

SMK BINAWIYATA SRAGEN
                                                                                              1


                INTRODUCTION OF MICROCONTROLLERS AT89S51
Features
8-bit
Microcontroller
with 4K Bytes Flash

• Compatible with MCS-51® Products
• 4K Bytes of In-System Programmable (ISP) Flash Memory
         – Endurance: 1000 Write/Erase Cycles *)
• 4.0V to 5.5V Operating Range
• Fully Static Operation: 0 Hz to 33 MHz *)
• Three-level Program Memory Lock
• 128 x 8-bit Internal RAM
• 32 Programmable I/O Lines
• Two 16-bit Timer/Counters
• Six Interrupt Sources
• Full Duplex UART Serial Channel
• Low-power Idle and Power-down Modes
• Interrupt Recovery from Power-down Mode *)
• Watchdog Timer *)
• Dual Data Pointer *)
• Power-off Flag *)
• Fast Programming Time *)

                                Ket: *) Tidak diperoleh di versi sebelumnya yaitu AT89C51


TENTANG MICROCONTROLLER

DISKRIPSI

Pada tahun 1970 mikroposesor (‘computer on a chip’) intel 4004 pertama diproduksi secara masal,
pertumbuhannya sangat cepat. Pengembangan mikoprosesor dengan menggunakan teknik
pabrikasi yang sama dan konsep pemrograman yang sama melahirkan mikrokontroler.
Mikrokontroler tidak dikenal secara luas karena hanya ditujukan untuk komunitas teknik.
Mikroprosesor adalah cpu computer, untuk dapat digunakan secara umum,masih diperlukan:
     • Memory (RAM, ROM) dan juga decoder memory
     • I/O dan decoder I/O
     • Piranti khusus (Interupsi, timer, counter, etc)
     • Clock Generator
Mikrokontroler didesain sebagai True computer on a chip, jadi mikrokontroler sudah mempunyai
piranti-piranti tambahan untuk membangun suatu sistem computer digital. Mikrokontroler dirancang
dengan dengan intruksi yang bisa mengakses piranti terprogram dan dioptimalkan untuk instruksi
bit dan byte, sementara computer PC didesain dengan instruksi untuk mengases data data multy
byte.

                                                                Pelatihan Mikrokontroler AT89S51
                                                                                           2


MICROCONTROLLER MARKET

4 bit Mikrokontroler
mikrokontroler terlaris dengan minimal pin dan ukuran sehingga murah sudah cukup “cerdas”
untuk mengendalikan peralatan sederhana

Manufacture   Model     Pins       i/o        Counter     Ram        Rom         Feature
Hitachi       HMCS      28         10         0           32         512
National      COP420    28         23         1           64         1K
OKI           MSM6411   16         11         0           32         1K
TI            TMS1000   28         23         0           64         1K
TOSHIBA       TLCS47    42         35         2           128        2K


8 BIT MIKROKONTROLER
Transisi antara volume besar 4bit dengan performa tinggi 16 bit dan 32 bit
Mampu menangani data dalam byte dan bisa digunakan untuk komputasi sederhana.
Digunakam untuk pengendalian lebih komplek seperti pengendalian mesin-mesin dan kolektor
data.
Diproduksi baik dengan ROM, EPROM, maupun ROMless, bahkan beberapa uC dilengkapi
dengan piranti tambahan., seperti ADC dan DAC.

Manufacture   Model     Pins       I/O        Counter    RAM        ROM         Feature
Intel         8051      40         32         2          128        4K
National      COP820    28         24         1          64         1K
Motorola      68HC11    52         40         2          256        4K
TI            TMS370    68         55         2          256        4K          ADC,WDT
Zilog         Z8820     44         40         2          272        8K




                                                           Pelatihan Mikrokontroler AT89S51
                                                               3


ARSITEKTUR MIKROKONTROLER AT89S51




          Gambar 1. Arsitektur




                                 Pelatihan Mikrokontroler AT89S51
                                                                                                      4


RESET VALUE

           Saat mikrokontroler di reset, maka nilai dari register-register mikrokontroler adalah sebagai
berikut:




Mikrokontroler dapat di reset dengan memberikan sinyal ‘high’ (1) pada kaki reset (pin 9) untuk
periode tertentu, besarnya periode ini adalah 2 periode siklus mesin.
Dibawah ini adalah sistem minimum agar mikrokontroler bisa bekerja dengan normal.




                                                                      Pelatihan Mikrokontroler AT89S51
                                                                                              5




                                  Gambar 2. Sistem minimum

Sistem diatas bekerja sebagai berikut:
Kapasitor C1 dan Resistor R1 digunakan untuk sistem Reset, saat pertama suplay diberikan ke
mikrokontroler maka kaki 9 akan berlogika 1, selama 2 siklus mesin. Setelah itu pin 9 akan
berlogika 0 kembali. Proses seperti ini bisa terjadi berdasarkan proses pengisian dan
pengosongan kapasitor.
Kapasitor C2 dan C3, dipasang bersamaan dengan keramik resonator (x-tal) untuk menghasilkan
Clock internal. Nilai dari clok ini tergantung dari keramik resonator (x-tal) yang diberikan

SISTEM CLOCK

Mikrokontroler, mempunyai sistem pewaktuan CPU, 12 siklus clock. Artinya setiap 12 siklus yang
dihasilkan oleh ceramic resonator maka akan menghasilkan satu siklus mesin. Nilai ini yang akan
menjadi acuan waktu operasi CPU.
Untuk mendesain sistem mikrokontroler kita memerlukan sistem clock, sistem ini bisa di bangun
dari clock eksternal maupun clock internal. Untuk clock internal, kita tinggal memasang komponen
seperti di bawah ini:




                                    Gambar 3. Sistem Clock

                                                                Pelatihan Mikrokontroler AT89S51
                                                                                             6


                              FUNGSI MASING-MASING PIN




                                    Gambar 4. Deskripsi Pin


Yang membedakan mikrokontroler AT89S51 dengan C51(seri sebelumnya) adalah cara pengisian
program (flash programming). Pada mikrokontroler AT89S51 terdapat fasilitas ISP (In System
Programming). Artinya mikrokontroler ini mampu diprogram meskipun dalam kondiasi bekerja.
Letak perbedaan pada hardware adalah adanya MOSI, MOSI, dan SCK, pin ini berguna saat flash
programming. Adapun fungsi dari pin pin yang lain, fungsinya sama seperti pada seri sebelumnya.
Diwah ini disajikan fungsi pin untuk mikrokontroler AT89S51

Nomor    Nama                   Ket
                       Alternatif
20       GND                    Sebagai Kaki Suplay GND
40       VCC                    Sebagai Kaki Suplay VCC
32..39   P0.7.. P0.0   D7..D0 & Port 0 dapat berfungsi sebagai I/0 biasa, juga bisa sebagai
                       A7..A0   alamat rendah dan bus data untuk memori eksternal
1..8     P1.0.. P1.7            Sebagai port I/0 biasa, mempunyai internal pull up dan
                                berfungsi sebagai input dengan memberikan logika 1
                                Terdapat pin MISO, MOSI, SCK
21..28   P2.0.. P2.7   A8.. A15 Port 0 sebagai I/0 biasa, atau sebagai high order address,
                                pada saat mengakakses memori eksternal.
10..17   Port 3                 Sebagai I/O biasa, namun juga mempunyai fungsi khusus
10       P3.0          RXD      Port serial input
11       P3.1          TXD      Port serial output
12       P3.2          INT0     External Interupt 0
13       P3.3          INT1     External Interupt 1
14       P3.4          T0       External timer 0 input

                                                               Pelatihan Mikrokontroler AT89S51
                                                                                 7


15   P3.5    T1     External timer 1 input
16   P3.6    WR     External data memory write strobe
17   P3.7    RD     External data memory read strobe
9    RST            Reset aktiv dengan logika 1 minimal 2 siklus
30   ALE     Prog   Pin ini dapat berfungsi sebagai Address Latch Enable (ALE)
                    yang me-latch low byte address pada saat mengakses memori
                    eksternal
                    Sedangkan pada saat Flash Programming (PROG)
                    berfungsi sebagai pulse input untuk
                    Pada operasi normal ALE akan mengeluarkan sinyal clock
                    sebesar 1/16 frekwensi oscillator kecuali pada saat
                    mengakses memori eksternal
                    Sinyal clock pada pin ini dapat pula didisable dengan
                    men-set bit 0 dari Special Function Register di alamat 8EH
                    ALE hanya akan aktif pada saat mengakses memori ekster-
                    nal (MOVX & MOVC)

29   PSEN           Pin ini berfungsi pada saat mengeksekusi program yang ter-
                    letak pada memori eksternal. PSEN akan aktif dua kali
                    setiap cycle

31   EA             Pada kondisi low maka pin ini akan berfungsi sebagai EA
                    yaitu mikrokontroler akan menjalankan program yang ada
                    pada memori eksternal setelah sistem direset
                    Apabila berkondisi high maka pin ini akan berfungsi untuk
                    menjalankan program yang ada pada memori internal
18   XTAL1          Input Oscillator

19   XTAL2          Output Oscillator




                                                 Pelatihan Mikrokontroler AT89S51
                                                                                         8


                                STRUKTUR MEMORI
        Dalam pengertian MCS51, Random Access Memory dalam chip AT89x51 adalah memori-
data, yaitu memori yang dipakai untuk menyimpan data, sedangkan Flash PEROM merupakan
memori penampung program pengendali AT89x51, dikenal sebagai memori-program. Karena
kedua memori itu memang dibedakan dengan tegas, maka kedua memori itu mempunyai
penomoran yang terpisah. Memori-program dinomori sendiri, pada AT89S51 mulai dari nomor
$0000 sampai $0FFF. Sedangkan memori-data yang hanya 256 byte dinomori dari nomor $00
sampai $FF.




                                           Gambar 5
                                       Denah Memori-data
Seperti terlihat dalam denah memori-data Gambar 5, memori-data dibagi menjadi dua bagian,
memori nomor $00 sampai $7F merupakan memori seperti RAM selayaknya meskipun beberapa
bagian mempunyai kegunaan khusus, sedangkan memori nomor $80 sampai $FF dipakai sangat
khusus yang dinamakan sebagai Special Function Register



                                                           Pelatihan Mikrokontroler AT89S51
                                                                                               9


Memori-data nomor $00 sampai $7F bisa dipakai sebagai memori penyimpan data biasa, dibagi
menjadi 3 bagian:
        • Memori nomor $00 sampai $18 selain sebagai memori-data biasa, bisa pula dipakai
            sebagai Register Serba Guna (General Purpose Register).
        • Memori nomor $20 sampai $2F selain sebagai memori-data biasa, bisa dipakai untuk
            menyimpan informasi dalam level bit.
        • Memori nomor $30 sampai $7F (sebanyak 80 byte) merupakan memori-data biasa,
            bisa dipakai untuk menyimpan data maupun dipakai sebagai Stack.


Register Serba Guna
Register Serba Guna (General Purpose Register) menempati memori-data nomor $00 sampai $18,
memori sebanyak 32 byte ini dikelompokkan menjadi 4 Kelompok Register (Register Bank), 8 byte
memori dari masing-masing Kelompok itu dikenali sebagai Register 0, Register 1 .. Register 7 (R0,
R1, R2, R3, R4, R5, R6 dan R7).
Dalam penulisan program memori-memori ini bisa langsung disebut sebagai R0, R1, R2, R3, R4,
R5, R6 dan R7, tidak lagi dengan nomor memori. Dengan cara ini instruksi yang terbentuk bisa
lebih sederhana dan bekerja lebih cepat. Pengertian ini bisa diperjelas dengan contoh 2 instruksi
berikut :
                MOV A,04H
                MOV A,R4
         Instruksi pertama mempunyai makna isi memori-data nomor 4 di-copy-kan ke Akumulator
A, sedangkan instruksi kedua artinya isi R4 di-copy-kan ke Akumulator A. Karena R4 menempati
memori-data nomor 4, jadi kedua instruksi itu berakibat sama bagi Akumulator A. Tapi saat
diterjemahkan ke kode mesin, intruksi pertama dirubah menjadi E5 04 (heksadesimal) dan
instruksi kedua menjadi E6 (heksadesimal), jadi instruksi kedua lebih sederhana dari instruksi
pertama. Selain itu, khusus untuk Register 0 dan Register 1 (R0 dan R1) masih punya mempunyai
kemampuan lain, kedua register ini bisa dipakai sebagai register penampung alamat yang dipakai
dalam penyebutan memori secara tidak langsung (indirect memori addressing), hal ini akan
dibicarakan lebih lanjut di belakang.
         Empat kelompok Register Serba Guna itu tidak bisa dipakai secara bersamaan, saat
setelah reset yang aktif dipakai adalah Kelompok Register 0 (Register Bank 0).
Kalau yang diaktifkan adalah Kelompok Register 1, maka yang dianggap sebagai R0 bukan lagi
memori-data nomor 0 melainkan memori-data nomor 8, demikian pula kalau yang diaktifkan
Kelompok Register 3 maka memori-data nomor 18h yang menjadi R0.
Kelompok Register yang aktif dipilih dengan cara mengatur bit RS0 dan RS1 yang ada di dalam
Register PSW (Program Status Word).

Memori level Bit
Memori-data nomor $20 sampai $2F bisa dipakai menampung informasi dalam level bit. Setiap
byte memori di daerah ini bisa dipakai menampung 8 bit informasi yang masing-masing dinomori
tersendiri, dengan demikian dari 16 byte memori yang ada bisa dipakai untuk menyimpan 128 bit
(16 x 8 bit) yang dinomori dengan bit nomor $00 sampai $7F.
Informasi dalam level bit tersebut masing-masing bisa di-‘1’-kan, di - ‘0’-kan dengan instruksi.



                                                                 Pelatihan Mikrokontroler AT89S51
                                                                                            10


         Pengertian di atas bisa dipikirkan seolah-olah MCS51 mempunyai jenis memori yang lain,
tapi sesungguhnya kedua jenis memori itu tetap sama, hanya saja cara penyebutannya saja yang
berlainan.
Instruksi SETB $00 mengakibatkan memori-bit nomor 0 menjadi ‘1’, atau sama dengan membuat
bit nomor 0 dari memori-data nomor $20 menjadi ‘1’, sedangkan bit-bit lainnya dalam memori
nomor $20 tidak berubah nilai.
Sedangkan instruksi CLR $7F mengakibatkan memori-bit nomor $7F menjadi ‘0’, satau sama
dengan membuat bit nomor 7 dari memori-data nomor $2F menjadi ‘0’, sedangkan bit-bit lainnya
dalam memori nomor $2F tidak berubah nilai.
Pengertian ini dipertegas dengn intsruksi-instruksi berikut:
                 MOV 21H,#0FH
Sama dengan hasil kerja instruksi-instruksi berikut :
                 SETB   08H
                 SETB   09H
                 SETB   0AH
                 SETB   0BH
                 CLR    0CH
                 CLR    0DH
                 CLR    0EH
                 CLR    0FH
Instruksi MOV 21H,#0FH mempunyai makna mengisi memori-data nomor 21H dengan nilai 0FH
(atau bilangan biner 00001111), berarti mengisi memori-bit nomor 0FH sampai 08H dengan
bilangan biner 00001111 yang bisa dinyatakan dengan 8 baris instruksi berikutnya.

Special Function Register (SFR)
Register Khusus (SFR - Special Function Register) adalah satu daerah RAM dalam IC keluarga
MCS51 yang dipakai untuk mengatur perilaku MCS51 dalam hal-hal khusus, misalnya tempat
untuk berhubungan dengan port paralel P1 atau P3, dan sarana input/output lainnya, tapi tidak
umum dipakai untuk menyimpan data seperti layaknya memori-data.
Meskipun demikian, dalam hal penulisan program SFR diperlakukan persis sama dengan memori-
data. Untuk mengisi memori-data nomor 60H dengan bilangan 0FH, instruksi yang dipergunakan
adalah :
                 MOV 60H, #0FH
Sedangkan untuk memenyimpan 0FH ke Port 1 yang di SFR menempati memori-data nomor 90H,
instruksi yang dipergunakan adalah :
                 MOV 90H, #0FH
Membandingkan kedua instruksi di atas bisa dimengerti dalam segi penulisan program SFR
diperlakukan persis sama dengan memori-data.
Meskipun demikian, dalam menyebut memori-data bisa dipakai dua cara, yakni penyebutan nomor
memori secara langsung (direct memory addressing) dan penyebutan nomor memori secara tidak
langsung (indirect memory addressing) lewat bantuan R0 dan R1. Tapi untuk SFR hanya bisa
dipakai penyebutan nomor memori secara langsung (direct memory addressing) saja. Hal ini akan
dibahas lebih lanjut di bagian lain.


                                                               Pelatihan Mikrokontroler AT89S51
                                                                                                11


Register Dasar MCS51
Untuk keperluan penulisan program, setiap mikroprosesor/mikrokontroler selalu dilengkapi dengan
Register Dasar. Ada beberapa macam register merupakan register baku yang bisa dijumpai
disemua jenis mikroprosesor/ mikrokontroler, ada register yang spesifik pada masing-masing
prosesor.
Yang termasuk Register Baku antara lain Program Counter, Akumulator, Stack Pointer Register,
Program Status Register. MCS51 mempunyai semua register baku ini.
Sebagai register yang khas MCS51, antara lain adalah Register B, Data Pointer High Byte dan
Data Pointer Low Byte. Semua ini digambarkan dalam Gambar 4.
Di samping itu MCS51 masih mempunyai Register Serba Guna R0..R7 yang sudah disebut
dibagian atas.
                Dalam mikroprosesor/mikrokontroler yang lain, register-register dasar biasanya
        ditempatkan ditempat tersendiri dalam inti prosesor, tapi dalam MCS51 register-register itu
        ditempatkan secara terpisah.
        • Program Counter ditempatkan ditempat tersendiri di dalam inti prosesor
        • Register Serba Guna R0..R7 ditempatkan di salah satu bagian dari memori-data
        • Register lainnya ditempatkan dalam Special Function Register (SFR).




                                              Gambar 6
                                     Susunan Register Dasar MCS51
Kegunaan dan pemakaian register-register dasar tersebut antara lain sebagai berikut:

Program Counter
Program Counter (PC) dalam AT89S51 merupakan register dengan kapasitas 16 bit. Di dalam PC
dicatat nomor memori-program yang menyimpan instruksi berikutnya yang akan diambil (fetch)
sebagai instruksi untuk dikerjakan (execute).
Saat setelah reset PC bernilai 0000h, berarti MCS51 akan segera mengambil isi memori-program
nomor 0 sebagai instruksi. Nilai PC otomatis bertambah 1 setelah prosesor mengambil instruksi 1
byte. Ada instruksi yang hanya 1 byte, ada instruksi yang sampai 4 byte, dengan demikian
pertambahan nilai PC setelah menjalankan instruksi, tergantung pada jumlah byte instruksi
bersangkutan.


                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                            12


Akumulator
Sesuai dengan namanya, Akumulator adalah sebuah register yang berfungsi untuk menampung
(accumulate) hasil hasil pengolahan data dari banyak instruksi MCS51. Akumulator bisa
menampung data 8 bit (1 byte) dan merupakan register yang paling banyak kegunaannya, lebih
dari setengah instruksi-instruksi MCS51 melibatkan Akumulator.
Instruksi-instruksi berikut memperjelas pengertian di atas :
               MOV A,#20H
               ADD A,#30H
Instruksi pertama menyimpan nilai 20H ke Akumulator, instruksi kedua menambahkan bilangan
30H ke Akumulator, hasil penjumlahan sebesar 50H ditampung di Akumulator.

Stack Pointer Register
Salah satu bagian dari memori-data dipakai sebagai Stack, yaitu tempat yang dipakai untuk
menyimpan sementara nilai PC sebelum prosesor menjalankan sub-rutin, nilai tersebut akan
diambil kembali dari Stack dan dikembalikan ke PC saat prosesor selesai menjalankan sub-rutin.
Stack Pointer Register adalah register yang berfungsi untuk mengatur kerja stack, dalam Stack
Pointer Register disimpan nomor memori-data yang dipakai untuk operasi Stack berikutnya.

Program Status Word
Program Status Word (PSW) berfungsi mencatat kondisi prosesor setelah melaksanakan instruksi.
Pembahasan tentang PSW secara rinci akan dilakukan dibagian lain.

Register B
Merupakan register dengan kapasitas 8 bit, merupakan register pembantu Akumulator saat
menjalankan instruk perkalian dan pembagian.

DPH dan DPL
Data Pointer High Byte (DPH) dan Data Pointer Low Byte (DPL) masing-masing merupakan
register dengan kapasitas 8 bit, tapi dalam pemakaiannya kedua register ini digabungkan menjadi
satu register 16 bit yang dinamakan sebagai Data Pointer Register (DPTR).
Sesuai dengan namanya, Register ini dipakai untuk mengalamati data dalam jangkauan yang luas.




                                                               Pelatihan Mikrokontroler AT89S51
                                                                                       13


ASEMBBLY OPERATION & SINTAX PROGRAM

ARITHMETIC OPERATIONS

Mnemonic           Description                                   Bytes Cycles
ADD A,Rn           Add register to A                             1      1
ADD A,             direct Add direct byte to A                   2      1
ADD A,             @Ri Add indirect RAM to A                     1      1
ADD A,#data        Add immediate data to A                       2      1
ADDC A,Rn          Add register to A with Carry                  1      1
ADDC A,direct      Add direct byte to A with Carry               2      1
ADDC A,@Ri         Add indirect RAM to A with Carry              1      1
ADDC A,#data       Add immediate data to A with Carry            2      1
SUBB A,Rn          Subtract register from A with Borrow          1      1
SUBB A,direct      Subtract direct byte from A with Borrow       2      1
SUBB A,@Ri         Subtract indirect RAM from A with Borrow      1      1
SUBB A,#data       Subtract immediate data from A with Borrow    2      1
INC A              Increment A                                   1      1
INC Rn             Increment register                            1      1
INC direct         Increment direct byte                         2      1
INC @Ri            Increment indirect RAM                        1      1
DEC A              Decrement A                                   1      1
DEC Rn             Decrement register                            1      1
DEC direct         Decrement direct byte                         2      1
DEC @Ri            Decrement indirect RAM                        1      1
INC DPTR           Increment Data Pointer                        1      2
MUL AB             Multiply A & B (A x B => BA)                  1      4
DIV AB             Divide A by B (A/B => A + B)                  1      4
DA A               Decimal Adjust A                              1      1

LOGICAL OPERATIONS

Mnemonic           Description                                   Bytes Cycles
ANL A,Rn           AND register to A                             1      1
ANL A,direct       AND direct byte to A                          2      1
ANL A,@Ri          AND indirect RAM to A                         1      1
ANL A,#data        AND immediate data to A                       2      1
ANL direct,A       AND A to direct byte                          2      1
ANL direct,#data   AND immediate data to direct byte             3      2
ORL A,Rn           OR register to A                              1      1
ORL A,direct       OR direct byte to A                           2      1
ORL A,@Ri          OR indirect RAM to A                          1      1
ORL A,#data        OR immediate data to A                        2      1
ORL direct,A       OR A to direct byte                           2      1
ORL direct,#data   OR immediate data to direct byte              3      2
XRL A,Rn           Exclusive-OR register to A                    1      1
XRL A,direct       Exclusive-OR direct byte to A                 2      1

                                                          Pelatihan Mikrokontroler AT89S51
                                                                                         14


XRL A,@Ri           Exclusive-OR indirect RAM to A                 1       1
XRL A,#data         Exclusive-OR immediate data to A               2       1
XRL direct,A        Exclusive-OR A to direct byte                  2       1
XRL direct,#data    Exclusive-OR immediate data to direct byte     3       2
CLR A               Clear A                                        1       1
CPL A               Complement A                                   1       1
RL A                Rotate A Left                                  1       1
RLC A               Rotate A Left through Carry                    1       1
RR A                Rotate A Right                                 1       1
RRC A               Rotate A Right through Carry                   1       1
SWAP A              Swap nibbles within A                          1       1


DATA TRANSFER

Mnemonic            Description                                    Bytes Cycles
MOV A,Rn            Move register to A                             1      1
MOV A,direct        Move direct byte to A                          2      1
MOV A,@Ri           Move indirect RAM to A                         1      1
MOV A,#data         Move immediate data to A                       2      1
MOV Rn,A            Move A to register                             1      1
MOV Rn,direct       Move direct byte to register                   2      2
MOV Rn,#data        Move immediate data to register                2      1
MOV direct,A        Move A to direct byte                          2      1
MOV direct,Rn       Move register to direct byte                   2      2
MOV direct,direct   Move direct byte to direct byte                3      2
MOV direct,@Ri      Move indirect RAM to direct byte               2      2
MOV direct,#data    Move immediate data to direct byte             3      2
MOV @Ri,A           Move A to indirect RAM                         1      1
MOV @Ri,direct      Move direct byte to indirect RAM               2      2
MOV @Ri,#data       Move immediate data to indirect RAM            2      1
MOV DPTR,#data16    Load Data Pointer with 16-bit constant         2      1
MOVC A,@A+DPTR      Move Code byte relative to DPTR to A           1      2
MOVC A,@A+PC        Move Code byte relative to PC to A             1      2
MOVX A,@Ri Move     External RAM (8-bit addr) to A                 1      2
MOVX A,@DPTR        Move External RAM (16-bit addr) to A           1      2
MOVX @Ri,A          Move A to External RAM (8-bit addr)            1      2
MOVX @DPTR,A        Move A to External RAM (16-bit addr)           1      2
PUSH direct         Push direct byte onto stack                    2      2
POP direct          Pop direct byte from stack                     2      2
XCH A,Rn            Exchange register with A                       1      1
XCH A,direct        Exchange direct byte with A                    2      1
XCH A,@Ri           Exchange indirect RAM with A                   1      1
XCHD A,@Ri          Exchange low-order Digit indirect RAM with A   1      1




                                                            Pelatihan Mikrokontroler AT89S51
                                                                                           15


BOOLEAN VARIABLE MANIPULATION

Mnemonic             Description                                     Bytes Cycles
CLR C                Clear Carry flag                                1      1
CLR bit              Clear direct bit                                2      1
SETB C               Set Carry flag                                  1      1
SETB bit             Set direct bit                                  2      1
CPL C                Complement Carry flag                           1      1
CPL bit              Complement direct bit                           2      1
ANL C,bit            AND direct bit to Carry flag                    2      2
ANL C,/bit           AND complement of direct bit to Carry flag      2      2
ORL C,bit            OR direct bit to Carry flag                     2      2
ORL C,/bit           OR complement of direct bit to Carry flag       2      2
MOV C,bit            Move direct bit to Carry flag                   2      1
MOV bit,C            Move Carry flag to direct bit                   2      2

PROGRAM AND MACHINE CONTROL

Mnemonic             Description                                     Bytes Cycles
ACALL addr11         Absolute subroutine call                        2      2
LCALL addr16         Long subroutine call                            3      2
RET                  Return from subroutine                          1      2
RETI                 Return from interrupt                           1      2
AJMP addr11          Absolute Jump                                   2      2
LJMP addr16          Long Jump                                       3      2
SJMP rel             Short Jump (relative addr)                      2      2
JMP @A+DPTR          Jump indirect relative to DPTR                  1      2
JZ rel               Jump if A is Zero                               2      2
JNZ rel              Jump if A is Not Zero                           2      2
JC rel               Jump if Carry flag is set                       2      2
JNC rel              Jump if No Carry flag                           2      2
JB bit,rel           Jump if direct Bit is set                       3      2
JNB bit,rel          Jump if direct Bit is Not set                   3      2
JBC bit,rel          Jump if direct Bit is set & Clear bit           3      2
CJNE A,direct,rel    Compare direct to A & Jump if Not Equal         3      2
CJNE A,#data,rel     Compare immediate to A & Jump if Not Equal      3      2
CJNE Rn,#data,rel    Compare immed. to reg. & Jump if Not Equal      3      2
CJNE @Ri,#data,rel   Compare immed. to ind. & Jump if Not Equal      3      2
DJNZ Rn,rel          Decrement register & Jump if Not Zero           2      2
DJNZ direct,rel      Decrement direct byte & Jump if Not Zero        3      2
NOP                  No operation                                    1      1




                                                              Pelatihan Mikrokontroler AT89S51
                                                                                               16


Notes on data addressing modes
Rn                    Working register R0-R7
direct                128 internal RAM locations, any I/O port, control or status register
@Ri                   Indirect internal RAM location addressed by register R0 or R1
#data                 8-bit constant included in instruction
#data16               16-bit constant included in instruction
bit                   128 software flags, any I/O pin, control or status bit

Notes on program addressing modes
addr16          Destination address may be anywhere in 64-kByte program address space
addr11          Destination address will be within same 2-kByte page of program address
                space as first byte of the following instruction
rel 8-bit       offset relative to first byte of following instruction (+127, -128)
All mnemonics copyrighted © Intel Corporation 1979
Information from Intel Application Note AP-69




                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                                17


                            PROSES PEMBUATAN PROGRAM
Pada proses pembuatan program, program diketik dalam bahasa asembler, dengan sintax seperti
diatas). Kemudian di compile dalam dengan compiler asm51, menjadi file object. Deri object di
compile menjadi file dalam bentuk hexa

                                   Mulai


                              Program.ASM


                         Di-Compile oleh ASM51

                                                  Tidak
                                 File.OBJ?                       File.LST


                                        Ya

                            Di-Compile oleh OH



                                 File.HEX




                                   Selesai


                                    Gambar 7. Asembly Proses

          Untuk menulis program dalam bahasa asember kita bisa memanfaatkan teks editor,
seperti notepad, editor dos, dsb. Setelah kita menulis program dalam teks editor, kita perlu simpan
file kita dengan ekstensi .asm atau .h51, kemudian kita simpan pada folder dengan lokasi yang
sama dengan lokasi copiler ASM51.

Contoh,
          1. Buat folder untuk ASM 51, OH, dalam folde C:\Mikro\
          2. Masuk ke direktori C:\Mikro\ dengan DOS
          3. Jalankan ASM51 dengan perintah asm51 spasi namfile.asm, lalu tekan enter
          4. Dari sana lakukan hingga ada keterangan Assembly Complete, No Error Found
          5. Jika ada bugs dalam program maka akan terlihat, biasanya ditampilkan no baris untuk
              letak kesalahan program kita
          6. Untuk melihat detail kesalahan kita kita bisa melihat file .LST nya

                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                              18


        7. Dibawah ini adalah contoh proses kompilasi file.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\Zero_Bit>cd..


C:\Documents and Settings>cd..
C:\>d:
D:\>cd mikro
D:\mikro>asm51 robotc.h51
DOS 5.0 (038-N) MCS-51 MACRO ASSEMBLER, V2.2
Copyright 1979, 1983, 1986 Intel Corporation


ASSEMBLY COMPLETE, NO ERRORS FOUND


D:\mikro>oh robotc.obj
DOS 5.0 (038-N)            OH     V1.0
Copyright 1986 Intel Corporation
D:\mikro>



        Deangan demikian sekarang kita telah mendapatkan file dalam bentuk .HEX, file inilah
yang akan kita kirim ke mikrokontroler. Untuk menulis ke mikriokontroler kita memerlukan sofrware
downloader. Kali ini kita menggunakan Software ISP-Programmer Version 3.0a. Alasan kita
menggunakan software ini karena pada software ini telah dilengkapi driver untuk Windows XP,
sehingga kita tidak pusing lagi menghadapi proteksi yang diberikan oleh Windows XP. Selain itu
software ini juga mampu digunakan untuk menulis progra pada mikrokontroler jenis AVR.




                                                                 Pelatihan Mikrokontroler AT89S51
                                                                                                19




                                    Gambar 8. Software downloader
Fitur yang disajikan:
Read              : Untuk membaca isi program dalam mikrokontroler
Write             : Untuk menulis mengisikan program dalam mikrokontroler
Open              : Membuka file dan enyimpannya ke buffer internal program
Disp              : Menampilkan isi Buffer, berupa file-file Hexa
Verify            : Untuk mengecek, apakah progarm program yang ditulis sudah sesuai dengan
buffer
Signature         : membaca jenis mikrokontroler yang dipakai
Reload            : megisi ulang file yang sama namanya ke buffer
About             : Informasi pembuat Program
Lock bit          : Mengunci mikrokontroler, digunakan saat program bersifat rahasia

Cara menggunakan software
Untuk pertama kali cek koneksi dengan hardware mwnggunakan perintah signature
Pilih Open file untuk memanggil program kita, dalah hal ini file harus berekstensi .HEX
Kemudian pilih Write dan pastikan tidak ada error




                                                                   Pelatihan Mikrokontroler AT89S51
                                                                                            20


                               PORT PARALEL AT89S51




                           Gambar 9. Antarmuka Port 1 dengan LED

        Prinsip kerja Hardware, yaitu saat kita memberikan logika 0 pada port 1 maka kita akan
mendapatkan led menyala. Hal ini dikarenakan terjadi perbedaan tegangan pada kaki anoda dan
katoda, saar kita memberikan logika 1, maka Led akan padam karena disana kita menggunakan
conmmon anoda yang terhubung dengan VCC.

Contoh program sederhana untuk menyalakan Led.

org 00h                        ;   Alamat mualainya program
mov p1,#00H                    ;   keluarkan data ke port 1 dengan nilai 00
                               ;   Hexa atau 00000000 ;Biner
end                            ;   done

Ketik Program seperti diatas,
Simpan pada direktori yang sama dengan direktori ASM51, misal C:\Mikro\.
Lakukan Proses Assembly dengan masuk ke dos, yaitu masuk direktori C:\Mikro\
Ketikkan perintah Asm51 Nama_file.asm
Pastikan tidak ada error
Ketikkan perintah OH Nama_file.OBJ
Sekarang kita sudah punya file Hexa nya, yang diahasilkan dari proses diatas
Buka Program ISP-Flash Programmer Version 30.a
Pilih Open File, dan masukkan program yang akan kita isikan ke mikrokontroler
Yang terakhir Klik Write. Dan pastikan tidak ada error




                                                               Pelatihan Mikrokontroler AT89S51
                                                                                        21


Hardware Conection
Pasang Power Suplay, hubungkan mikrokontroler dengan PC menggunakan DB25 Cable.
Tampilan Led yang dipasang pada modul adalah Led pada port 1

Penjelasan.
Program diatas hanya menyalakan Led pada port 1, dengan cara memberikan data ke port 1
berupa bilangan 00 Hexa, karena sifat dari hardware active low, maka led menyala.

Program untuk membuat led Flip Flop

ORG   0H                              ; program ditempatkan pada lokasi 0000H
MULAI:
MOV   P1,#00001111B                   ;   LED P1.4 s/d P1.7 nyala (heksa= #0FH)
ACALL DELAY                           ;   lakukan penundaan sesaat (sub. DELAY)
MOV   P1,#11110000B                   ;   LED P1.0 s/d P1.3 nyala (heksa= #0F0H)
ACALL DELAY                           ;   lakukan penundaan sesaat (sub. DELAY)
SJMP MULAI                            ;   ulangi lagi dari awal

;==================================================================
; subrutin ini hanya sekedar melakukan penundaan sesaat dengan cara
; mengulangi proses (pengurangan isi register) hingga dicapai suatu
; kondisi tertentu
;==================================================================
DELAY:
MOV   R0,#5H                  ; Isi Register R0 dengan 5 (5x ulang)
DELAY1:
      MOV   R1,#0FFH          ; Isi Register R1 dengan 255 (255x ulang
DELAY2:
      MOV   R2,#0             ; Isi register R2 dengan 0 (256x ulang)
      DJNZ R2,$               ; R2=R2-1, jika R2 belum 0 ulangi lagi
      DJNZ R1,DELAY2          ; R1=R1-1, jika R1 belum 0 ulangi DELAY2
      DJNZ R0,DELAY1          ; R0=R0-1, jika R0 belum 0 ulangi DELAY1
RET                           ; Kembali ke pemanggil subrutin DELAY

END

Penjelasan
Yang Pertama dilakukan adalah memberikan data ke port 1 0FH, sehingga 4 led menyala dan 4
led padam, kemudian kita menunda waktu dengan menggunakan looping program. Tunda waktu
diperlukan agar efek kedipan led terlihat mata


Program Untuk membuat led ping pong

;----------------------------------------------------------------------
; Lampu menyala pingpong kiri ke kanan, kanan ke kiri di port 1
;----------------------------------------------------------------------
Org   0h
MOV   A, #0FEH                ; simpan data 11111110B ke akumulator
                              ; (P1.0 menyala duluan)
MULAI:
MOV   P1,A                    ; kirim data ke Port 1
ACALL DELAY                   ; tunda sebentar


                                                           Pelatihan Mikrokontroler AT89S51
                                                                                            22

RL     A                               ; putar isi akumulator ke kiri 1 bit
CJNE   A,#7FH,MULAI                    ; apakah A=01111111B ?
                                       ;Tidak, ulangi lagi!
MULAI1:                                ; Ya, lanjutkan ke proses berikut...
      MOV      P1,A                    ; kirim data ke Port 1
      ACALL    DELAY                   ; tunda sebentar
      RR       A                       ; putar isi akumulator ke kanan 1 bit
      CJNE     A,#0FEh,MULAI1          ; apakah A=11111110B ?
                                       ;Tidak, ulangi lagi!
       SJMP    MULAI                   ; Ya, ulangi lagi dari paling awal...

Delay:
      Mov   R0,#0                      ; Isi Register R0 dengan 0 (256x ulang)
Delay1: Mov R1,#0                      ; Isi Register R1 dengan 0 (256x ulang)
      Djnz        R1,$
      Djnz R0,Delay1
      Ret
      End



                             PORT PARALEL UNTUK MASUKAN

Port-port mikrokontroler dilengkapi pull up internal, sehingga kondisi default-nya adalah high.
Untuk menjadikan Port ini sebagai input, kita tinggal memberikan logika high atau membiarkannya
dalam kondisi default. Jika kita menginginkan sebuah masukan terbaca kita sebaiknya
menggunakan masukan berup sinyal Low.




                            Gambar 10. Antarmuka dengan keypad




                                                               Pelatihan Mikrokontroler AT89S51
                                                                                            23


Prinsip kerja hardware,
Saat kita menekan tombol keypad maka signal reendah akan dikrim ke port 3 pada mikrokontroler,
Dengan demikian port ini akan mempunyai logika sesuai dengan penekanan tombol

Hardware Conection
Pasang Modul Mikrokontroler, sambungkan modul Keypad 8 tombol ke port 3

;---------------------------------------------------------------------
; Simulasi penekanan tombol pd P3.0 untuk menghidupkan
; dan P3.1 untuk mematikan LED pada Port 1
;----------------------------------------------------------------------

ORG 0H
MULAI:
      MOV     A,P3                     ;   Baca port 3 dan simpan isinya
                                       ;   ke akumulator
       CJNE A,#0FEH,TERUS              ;   Apakah isi akumulator = 11111110B
                                       ;   (P3.0 ditekan)?
                                       ;   Tidak! lompat ke TERUS
      MOV P1,#0                        ;   Ya! Hidupkan lampu LED di port 1
      SJMP MULAI                       ;   Ulangi lagi dari awal (label MULAI)
TERUS:
      CJNE A,#0FDH,MULAI               ;   Apakah isi akumulator = 11111101B
                                       ;   (P3.1 ditekan)?
                                       ;   Tidak! lompat ke awal (label MULAI)
       MOV P1,#0FFH                    ;   Ya! Matikan lampu LED di port 1
       SJMP MULAI                      ;   Ulangi lagi dari awal...

       END

Penjelasan
Saat keypad yang terhubung P3.0 di tekan maka data pada port 3 adalah 11111110 Biner atau
0FE Hexa, program akan mengetahuai dengan menengok isi port 3 jika datanya sama (0FE H)
maka Led pada port 1 dinyalakan, jika terjadi penekanan P3.1 maka data pada port 3 11111101
Biner atau 0FD Hexa, Program akan mengecek isi port 3 jika data tersebut di temukan maka Led
pada port 1 akan dimatikan

;----------------------------------------------------------------------
; Simulasi penekanan tombol pd P3.0 sebagai toggle switch
; untuk menghidupkan/mematikan lampu pada Port 1
;----------------------------------------------------------------------

ORG 0H
MULAI:
      MOV A,P3                         ;   Baca tombol P3 dan simpan di akumulator
      CJNE A,#0FEH,MULAI               ;   Apakah tombol P3.0 ditekan? (=11111110)
                                       ;   Tidak! Ulangi lagi dari awal
       CJNE R0,#0,TERUS                ;   Ya! Apakah R0=0
                                       ;   (artinya lampu sedang mati)?
                                       ;   Tidak! loncat ke proses mematikan
                                       ;   lampu LED (TERUS)
       MOV    R0,#1                    ;   Ya! ubah status R0=1 (lampu menyala)
       MOV    P1,#0                    ;    dan hidupkan lampu LED di port 1


                                                               Pelatihan Mikrokontroler AT89S51
                                                                                         24

TUNGGU:                              ; Untuk menghindari bouncing
      MOV    A,P3                    ; Tunggu hingga tombol P3.0 dilepas
      CJNE   A,#0FFH,TUNGGU          ;
      SJMP   MULAI                   ; Ulangi lagi dari awal
TERUS:
      MOV    R0,#0                   ; Ubah status R0=0 (lampu mati)
      MOV    P1,#0FFH                ; dan matikan lampu LED di port 1
      SJMP   TUNGGU                  ; untuk menghindari bouncing, lompat ke
TUNGGU
      END



Keypad Matrik




                         Gambar 11. Antarmuka dengan Matrik keypad
Hardware Conection
Pasang Modul mikrokontroler dengan menghubungkan keypad matrik dengn port 2, 0
Isikan program dibawah ini ke mikrokontroler

;=======================================
; PROGRAM KEYPAD 4X4 DIPASANG
; PADA PORT 0, OUTPUT PADA PORT 1
;=======================================

KOLOM1                BIT     P0.0
KOLOM2                BIT     P0.1
KOLOM3                BIT     P0.2
KOLOM4                BIT     P0.3
BARIS1                BIT     P0.4
BARIS2                BIT     P0.5
BARIS3                BIT     P0.6
BARIS4                BIT     P0.7


                                                            Pelatihan Mikrokontroler AT89S51
                                                                                  25

KEYPORT              EQU   P0            ; KEYPAD CONNECT KE PORT 0
KEYDATA              EQU   50H           ; MEMORY DATA UNTUK KEYPAD
KEYBOUNC             EQU   51H           ; MEMORY UNTUK ANTI BOUNCING

ORG   0H
ULANG:
      CALL   KEYPAD                      ; PANGGIL SUB RUTIN KEYPAD
      MOV    A,KEYDATA
      CJNE   A,#0FFH,DITEKAN
      JMP    ULANG
DITEKAN:
      CPL    A
      MOV    P1,A
      DJNZ   R0,$
      JMP    ULANG


KEYPAD:
      MOV    KEYBOUNC,#100       ;   KONSTANTA ANTI BOUNCING
      MOV    KEYPORT,#0FFH       ;   PORT KEY PAD
      CLR    KOLOM1              ;   SCAN KOLOM 1
UL1: JB      BARIS1,KEY1         ;   TOMBOL 1 DITEKAN?
      CALL   DELAY
      DJNZ   KEYBOUNC,UL1
      MOV    KEYDATA,#1          ; ISI REG. DATA DGN 1
      RET
KEY1: JB     BARIS2,KEY2         ; TOMBOL 2 DITEKAN?
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY1
      MOV    KEYDATA,#4
      RET
KEY2: JB     BARIS3,KEY3
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY2
      MOV    KEYDATA,#7
      RET
KEY3: JB     BARIS4,KEY4
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY3
      MOV    KEYDATA,#0AH
      RET
KEY4: SETB   KOLOM1
      CLR    KOLOM2
      JB     BARIS1,KEY5
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY4
      MOV    KEYDATA,#2
      RET
KEY5: JB     BARIS2,KEY6
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY5
      MOV    KEYDATA,#5
      RET
KEY6: JB     BARIS3,KEY7
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY6
      MOV    KEYDATA,#8

                                                     Pelatihan Mikrokontroler AT89S51
                                                                 26

      RET
KEY7: JB     BARIS4,KEY8
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY7
      MOV    KEYDATA,#0
      RET
KEY8: SETB   KOLOM2
      CLR    KOLOM3
      JB     BARIS1,KEY9
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY8
      MOV    KEYDATA,#3
      RET
KEY9: JB     BARIS2,KEY10
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY9
      MOV    KEYDATA,#6
      RET
KEY10:       JB    BARIS3,KEY11
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY10
      MOV    KEYDATA,#9
      RET
KEY11:       JB    BARIS4,KEY12
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY11
      MOV    KEYDATA,#0BH
      RET
KEY12:       SETB KOLOM3
      CLR    KOLOM4
      JB     BARIS1,KEY13
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY12
      MOV    KEYDATA,#0CH
      RET
KEY13:       JB    BARIS2,KEY14
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY13
      MOV    KEYDATA,#0DH
      RET
KEY14:       JB    BARIS3,KEY15
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY14
      MOV    KEYDATA,#0EH
      RET
KEY15:       JB    BARIS4,KEY16
      CALL   DELAY
      DJNZ   KEYBOUNC,KEY15
      MOV    KEYDATA,#0FH
      RET
KEY16:       MOV    KEYDATA,#0FFH
      RET
DELAY:
      DJNZ   R0,$
      RET

     END

                                    Pelatihan Mikrokontroler AT89S51
                                                                                            27




                         PORT PARALEL UNTUK KELUARAN




                 Gambar 12. Antarmuka dengan Seven segment dengan 4 digit




                        Gambar 13. Rangkaian Dasar Saklar Elektronik


Data yang diolah mikrokontroler adalah data hexa, untuk dapat ditampilkan di seven segment kita
bisa menggunakan dekoder hexa ke sevent segmen atau lewat konversi program, untuk konveri,
kita bisa menggunakan sistem look up table program kita memerlukan tabel konversi, tabelnya
adalah sebagai berikut:

Hardware Conection
Pasang Modul mikrokontroler dengan menghubungkannya dengan Modul seven segment pada
port 1 dan 3, perhatikan jangan sampaI terbalik.




                                                               Pelatihan Mikrokontroler AT89S51
                                                                                  28


  Tampilan   P0.7   P0.6    P0.5   P0.4   P0.3   P0.2    P0.1     P0.0     Hexa
   angka      g     dot      c      b      a      f       e        d
     0        1      1       0      0      0      0       0        0        C0
     1        1      1       0      0      1      1       1        1        CF
     2        0      1       1      0      0      1       0        0        64
     3        0      1       0      0      0      1       1        0        46
     4        0      1       0      0      1      0       1        1        4B
     5        0      1       0      1      0      0       1        0        52
     6        0      1       0      1      0      0       0        0        50
     7        1      1       0      0      0      1       1        1        C7
     8        0      1       0      0      0      0       0        0        40
     9        0      1       0      0      0      0       1        0        42



;=================================================
;PROGRAM UNTUK MENYALAKAN 4X 7SEGMENT COMMON ANODA
;=================================================

ORG   00H

MULAI:
      MOV    P1,#0C7H      ;KELUARKAN DATA ANGKA 0
      CLR    P3.4          ;HIDUPKAN COMMON 1
      CALL   DELAY         ;TUNDA SEBENTAR
      SETB   P3.4          ;MATIKAN COMMON
      CALL   DELAY         ;TUNDA SEBENTAR
      MOV    P1,#040H      ;KELUARKAN DATA ANGKA 1
      CLR    P3.5
      CALL   DELAY
      SETB   P3.5
      CALL   DELAY
      MOV    P1,#042H      ;KELUARKAN DATA ANGKA 2
      CLR    P3.6
      CALL   DELAY
      SETB   P3.6
      CALL   DELAY
      MOV    P1,#050H      ;KELUARKAN DATA ANGKA 3
      CLR    P3.7
      CALL   DELAY
      SETB   P3.7
      CALL   DELAY
      AJMP   MULAI

DELAY:                     ;TUNDA INI DIGUNAKAN AGAR 7SEGMENT KELIHATAN
      MOV    R1,#1         ;MENYALA BERSAMAAN
DELAY1:      DJNZ R0,$
      DJNZ   R1,DELAY1
RET
END


                            TIMER DAN COUNTER

                                                     Pelatihan Mikrokontroler AT89S51
                                                                                            29




      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.
      Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang diumpankan sudah
melebihi kapasitas pencacah, maka pada bagian akhir untaian pencacah akan timbul sinyal
limpahan, sinyal ini merupakan suatu hal yang penting sekali dalam pemakaian pencacah.
Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop tersendiri.
      Di samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan
dengan mudah. Hal-hal yang dibicarakan di atas diringkas dalam Gambar 12.




                                           Gambar 14
                       Konsep dasar Timer/Counter sebagai sarana input
      Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2 macam, yang
pertama yalah sinyal denyut dengan frekuensi tetap yang sudah diketahui besarnya dan yang
kedua adalah sinyal denyut dengan frekuensi tidak tetap.
      Jika sebuah pencacah bekerja dengan frekuensi tetap yang sudah diketahui besarnya,
dikatakan pencacah tersebut bekerja sebagai timer, karena kedudukan pencacah tersebut setara
dengan waktu yang bisa ditentukan dengan pasti.
      Jika sebuah pencacah bekerja dengan frekuensi yang tidak tetap, dikatakan pencacah
tersebut bekerja sebagai counter, kedudukan pencacah tersebut hanyalah menyatakan banyaknya
pulsa yang sudah diterima pencacah.

       Sarana Timer/Counter dalam MCS51
       Keluarga mikrokontroler MCS51, misalnya AT89S51 dan AT89x051, dilengkapi dengan dua
perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1. Sedangkan
untuk jenis yang lebih besar, misalnya AT89S52, mempunyai tambahan satu perangkat
Timer/Counter lagi yang dinamakan sebagai Timer 2.
       Perangkat Timer/Counter tersebut merupakan perangkat keras yang menjadi satu dalam
chip mikrokontroler MCS51, bagi pemakai mikrokontroler MCS51 perangkat tersebut dikenal
sebagai SFR (Special Function Register) yang berkedudukan sebagai memori-data internal.
       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).

                                                               Pelatihan Mikrokontroler AT89S51
                                                                                               30


      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
kombinasi mode lainnya sesuai dengan keperluan.
       Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk menyusun sistem 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




                                             Gambar 15
                                 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 16
                                 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

                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                            31


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




                                            Gambar 17.
                           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




                                         Gambar 18
                     Mode 3 – Gabungan Pencacah Biner 16 Bit dan 8 Bit
      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.




                                                               Pelatihan Mikrokontroler AT89S51
                                                                                                32




                                            Gambar 19
                            Denah susunan bit dalam register TMOD
       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 :
       •     Bit M0/M1 dipakai untuk menentukan Mode Timer seperti yang terlihat dalam Tabel di
Gambar 3a.
       •     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).
       •     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).




                                            Gambar 20
                             Denah susunan bit dalam register TCON
       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.
       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:
       •     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).
       •     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).



                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                              33


       Mengatur Timer
       Gambar 4 merupakan bagan susunan rangkaian yang bisa terjadi pada Timer 1 secara
lengkap, digambarkan pula hubungan-hubungan semua register pembentuk dan pengatur Timer 1.
Gambar ini berlaku pula untuk Timer 0.
       Dalam pemakaian sesungguhnya, rangkaian yang dipakai hanya sebagian dari rangkaian
lengkap tersebut, sesuai dengan keperluan sistem yang dibangun. Rangkaian yang dikehendaki
dibentuk dengan mengatur register TMODE, sedangkan kerja dari Timer dikendalikan lewat
register TCON.




                                           Gambar 21
                             Skema lengkap Timer 1 dalam Mode 1
       Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti :
       •     bit C/T* =’0’, menurut Gambar 4 keadaan ini membuat saklar S1 ke posisi atas,
sumber sinyal denyut berasal dari osilator kristal yang frekuensinya sudah dibagi 12, pencacah
biner yang dibentuk dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang dirancang
memang menghendaki Timer 1 bekerja sebagai timer maka bit C/T* tidak perlu diatur lagi.
Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai counter untuk
menghitung pulsa yang masuk lewat kakai T1 (P3.5), maka posisi saklar S1 harus dikebawahkan
dengan membuat bit C/T* menjadi ‘1’.
       •     bit GATE=’0’, hal ini membuat output gerbang OR selalu ‘1’ tidak dipengaruhi keadaan
‘0’ atau ‘1’ pada kaki INT1 (P3.3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan
lewat bit TR1 dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga sinyal denyut dari S1
disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika TR=’0’.
Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti keadaan kaki INT1, saat INT1=’0’


                                                                 Pelatihan Mikrokontroler AT89S51
                                                                                                     34


apa pun keadaan bit TR1 output gerbang AND selalu =’0’ dan saklar S1 selalu terbuka, agar saklar
S1 bisa tertutup kaki INT1 dan bit TR1 harus =’1’ secara bersamaan.
       Jika sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan dari sinyal
yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘1’
       •     bit M1 dan M0=’0’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode
0), jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar 4, maka bit M1
harus dibuat menjadi ‘0’ dan bit M0 menjadi ‘1’.

       Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan Timer
seperti terlihat dalam contoh-contoh berikut :
       Setelah reset TMOD bernilai $00, berarti Timer 1 bekerja sebagai pencacah biner 13 bit,
sumber sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’0’ berarti
kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1.
       Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk keperluan itu instruksi
yang diperlukan untuk mengatur TMOD adalah :
      MOV TMOD,#%00010000
      Catatan dalam instruksi di atas tanda ‘#’ menyatakan bagian di belakangnya adalah
bilangan konstan yang akan diisikan ke TMOD, ‘%’ merupakan awalan yang menandakan bahwa
bilangan di belakangnya adalah bilangan biner. Penulisan dengan bilangan biner semacam ini,
memudahkan untuk mengenali dengan cepat bit-bit apa saja yang diisikan ke TMOD.
       Bilangan biner %00010000 diisikan ke TMOD, berakibat bit 7 TMOD (bit GATE) bernilai ‘0’,
bit 6 (bit C/T*) bernilai ‘0’, bit 5 dan 4 (bit M1 dan M0) bernilai ‘01’, ke-empat bit ini dipakai untuk
mengatur Timer 1, sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit yang
dikendalikan hanya dengan TR1.
       Jika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa
yang masuk lewat kaki T1 (P3.5), instruksinya menjadi :
      MOV TMOD,#%01010000
      Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T*) bernilai ‘1’.
Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa ikut mengendalikan
Timer 1, instruksi pengatur Timer 1 akan menjadi :
      MOV TMOD,#%11010000
      Dalam hal ini bit 7 (bit GATE) bernilai ‘1’.
      Setelah mengatur konfigurasi Timer 0 seperti di atas, pencacah biner belum mulai mencacah
sebelum diperintah dengan instruksi :
      SETB TR1
     Perlu diingatkan jika bit GATE = ‘1’, selama kaki INT1 bernilai ‘0’ pencacah biner belum akan
mencacah. Untuk menghentikan proses pencacahan, dipakai instruksi
      CLR TR1
      Di atas hanya dibahas Timer 1 saja, tata canya untuk Timer 0 persis sama. Yang perlu
diperhatikan adalah register TMOD dipakai untuk mengatur Timer 0 dan juga Timer 1, sedangkan
TMOD tidak bisa dialamati secara bit (non bit addressable) sehingga jika jika kedua Timer dipakai,
pengisian bit-bit dalam register TMOD harus dipikirkan sekali gus untuk Timer 0 dan Timer 1.

                                                                     Pelatihan Mikrokontroler AT89S51
                                                                                             35


       Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses pencacahan, terletak di dalam
register TCON (memori-data internal nomor $88) yang bisa dialamati secara bit (bit addressable).
Sehingga TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau CLR), tidak
seperti mengatur TMOD yang harus dilakukan secara bersamaan.
       Demikian pula bit penampung limpahan pencacah biner TF0 dan TF1, juga terletak dalam
register TCON yang masing-masing bisa di-monitor sendiri.

Dibawah ini adalah contoh program untuk aplikasi timer, timer yang diitung mengguanakan
perhitungan kristal pada 12M

; ---------------------------------------------------------------------
; Program menyalakan/mematikan LED selama 1 detik
; ---------------------------------------------------------------------

RATUSAN        EQU     100             ; 100 x 10000 ud = 1 detik
CACAH          EQU     -10000

ORG    0H

      MOV      TMOD,#01H               ; gunakan timer 0 mode 16 bit (0000 0001)
MULAI:
      MOV      P1,#00H                 ; hidupkan LED selama 1 detik
      CALL     TUNDA
      MOV      P1,#0FFH                ; matikan LED selama 1 detik
      CALL     TUNDA
      SJMP     MULAI                   ; ulangi lagi dari awal

TUNDA:         MOV   R1,#RATUSAN
LAGI: MOV      TH0,#HIGH CACAH         ;   isi TH0 dengan HIGH(CACAH)
      MOV      TL0,#LOW CACAH          ;   isi TL0 dengan LOW(CACAH)
      SETB     TR0                     ;   hidupkan timer 0
TUNGGU: JNB    TF0,TUNGGU              ;   tunggu hingga melimpah
      CLR      TF0                     ;    matikan flag limpahan timer                0   scr
manual
      CLR      TR0                     ;   matikan timer 0
      DJNZ     R1,LAGI                 ;   apakah sudah #ratusan kali?
                                       ;   BELUM! ulangi dari LAGI
       RET                             ;   SUDAH! kembali dari subrutin TUNDA
       END

Penjelasan

Kali ini kita akan membuat led nyala dan padam dalam waktu satu detik, agar mendapatkan waktu
yang presisi, kita harus menggunakan timer. Timer yang diguanakan adalah timer 0 mode 16 bit,
tundaan maksimal yang mampu dihasilkan adalah 65.536uD, sehingga kita perlu mengulangi
untuk beberapa kali agar kita mendapatkan tundaan waktu 1 detik. Dalam hal ini, kita
memnggunakan perhitungan 10000 X 100 = 1000000 uDetik

Hardware Conection
Hubungkan modul mikrokontroler, dengan modul keypad 8 tombol yang terhubung pada port 3



                                                                Pelatihan Mikrokontroler AT89S51
                                                                                         36




                          Gambar 22. Hubungan pin pada int timer
;----------------------------------------------------------------------
; Program menyalakan/mematikan LED setelah penekanan tombol
; pada P3.4 sebanyak 5 kali dengan menggunakan timer
; ---------------------------------------------------------------------
CACAH       EQU    -5         ; cacah sama dengan 5
ORG   0H
      MOV   TMOD,#0Eh         ; gunakan timer 0 mode 8 bit isi-ulang
                              ; otomatis
LAGI: MOV   TH0,#CACAH        ; isi TH0 dengan #cacah
      MOV   TL0,#CACAH        ; isi TL0 dengan #cacah
      SETB TR0                ; aktifkan timer0
CEK: JNB    TF0,$             ; tunggu hingga melimpah
      Mov   P1,#00            ; hidupkan P1.0 setelah 5 kali
                              ; penekanan tombol pada T0 (P1.4)
      CLR   TF0               ; bersihkan flag limpahan timer 0
                              ; scr manual
CEK1: JNB   TF0,$             ; tunggu hingga overflow
      Mov   P1,#0FFH          ; matikan P1.0 setelah 5 kali
                              ; penekanan tombol pada T0 (P1.4)
      CLR   TF0               ; bersihkan flag limpahan timer 0 scr
manual
      SJMP CEK                ; ulangi lagi dari awal
      END

Penjelasan
Sekarang timer 0 dikonfigurasikan untuk mencacah, caranya dengan memberi bit C/T dengan
logika 1, saklar dihugungkan dengan pin T0, pada (P3.4), lampu akan menyala setelah tombol
ditekan 5 kali dan akan padam setelah ditekan 5 kali.

                                                            Pelatihan Mikrokontroler AT89S51
                                                                                                37




                                          INTERUPSI

Interrupt adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler berhenti sejenak
untuk melayani interrupt tersebut. Program yang dijalankan pada saat melayani interrupt disebut

Yang harus diperhatikan untuk menguanakan interupsi adalah, kita harus tau sumber-sumber
interupsi, vektor layanan interupsa dan yang terpenting rutin lyanan interupsi, yaitu subrutin yang
akan dikerjakan bila terjad interupsi

Sumber interupsi:
Interupsi eksternal 0
Interupsi eksternal 1
Interupsi timer 0
Interupsi timer 1
Interupsi port serial

Alamat vektor interupsi
Reset system                    0000H
Eksternal 0                     0003H
Timer 0                         0000B
Eksternal 1                     0013H
Timer 1                         001BH
Port Serial                     0023H

     • Interrupt Service Routine.
Analoginya adalah sebagai berikut, seseorang sedang mengetik laporan, mendadak telephone
berdering dan menginterrupsi orang tersebut sehingga menghentikan pekerjaan mengetik dan
mengangkat telephone. Setelah pembicaraan telephone yang dalam hal ini adalah merupakan
analogi dari Interrupt Service Routine selesai maka orang tersebut kembali meneruskan
pekerjaanya mengetik. Demikian pula pada sistem mikrokontroler yang sedang menjalankan
programnya, saat terjadi interrupt, program akan berhenti sesaat, melayani interrupt tersebut
dengan menjalankan program yang berada pada alamat yang ditunjuk oleh vektor dari interrupt
yang terjadi hingga selesai dan kembali meneruskan program yang terhenti oleh interrupt tadi.
Seperti yang terlihat Gambar 4.1, sebuah program yang seharusnya berjalan terus lurus, tiba-tiba
terjadi interrupt dan harus melayani interrupt tersebut terlebih dahulu hingga selesai sebelum ia
kembali meneruskan pekerjaannya.




                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                                38




                               Gambar 23. Analogi proses interupsi

Proses yang dilakukan oleh mikrokontroler saat melayani interrupt adalah sebagai berikut:
Proses yang terjadi saat mikrokontroler melayani interrupt adalah sebagai berikut:
- Instruksi terakhir yang sedang dijalankan diselesaikan terlebih dahulu
- Program Counter (alamat dari instruksi yang sedang berjalan) disimpan ke stack
- Interrupt Status disimpan secara internal
- Interrupt dilayani sesuai peringkat dari interrupt (lihat Interrupt Priority)
- Program Counter terisi dengan alamat dari vector interrupt (lihat Interrupt
Vector) sehingga mikrokontroler langsung menjalankan program yang terletak pada vector
interrupt Program pada vector interrupt biasanya diakhiri dengan instruksi RETI di mana pada saat
ini proses yang terjadi pada mikrokontroler adalah sebagai berikut:
- Program Counter diisi dengan alamat yang tersimpan dalam stack pada
saat interrupt terjadi sehingga mikrokontroler kembali meneruskan program di lokasi saat interrupt
terjadi
- Interrupt Status dikembalikan ke kondisi terakhir sebelum terjadi interrupt

     • Enable Interrupt
Dalam suatu kondisi dapat juga dibutuhkan suatu program yang sedang berjalan tidak boleh
diinterrupt, untuk itu 89C51 mempunyai lima buah interrupt yang masing-masing dapat dienable
ataupun disable satu per satu. Pengaturan enable dan disable interrupt dilakukan pada Register
Interrupt Enable yang terletak pada alamat
A8H.




EA: Disable semua interrupt apabila bit ini clear. Bila bit ini clear, maka apapun kondisi bit lain
dalam register ini, semua interrupt tidak akan dilayani, oleh karena itu untuk mengaktifkan salah
satu interrupt, bit ini harus set



                                                                  Pelatihan Mikrokontroler AT89S51
                                                                                                     39


ES: Enable/disable Serial Port Interrupt, set = enable, clear = disable Apabila Serial Port Interrupt
aktif maka interrupt akan terjadi setiap ada data yang masuk ataupun keluar melalui serial port
yang membuat Flag RI (Receive Interrupt Flag) ataupun TI (Transmit Interrupt Flag).
ET1: Enable/disable Timer 1 Interrupt, set = enable, clear = disable Apabila interrupt ini enable
aka interrupt akan terjadi pada saat Timer 1 overflow.
EX1: Enable/disable External Interrupt 1, set = enable, clear = disable Apabila interrupt ini enable
maka interrupt akan terjadi pada saat terjadi pulsa low pada INT1
ET0: Enable/disable Timer 0 Interrupt, set = enable, clear = disable Apabila interrupt ini enable
maka interrupt akan terjadi pada saat Timer 0 overflow.
EX0: Enable/disable External Interrupt 0, set = enable, clear = disable Apabila interrupt ini enable
maka interrupt akan terjadi pada saat terjadi pulsa low pada INT0

    •    Status Interrupt

Status-status interrupt dari 89C51 terletak pada Register TCON yaitu
INT0: Bit IE0, clear oleh hardware saat interrupt terjadi pada mode aktif level
INT1: Bit IE1, clear oleh hardware saat interrupt terjadi pada mode aktif level
Timer 0: Bit TF0, clear oleh hardware saat interrupt terjadi
Timer 1 : Bit TF1, clear oleh hardware saat interrupt terjadi
Serial Port (TXD) : Bit TI, clear oleh software
Serial Port (RXD) : Bit RI, clear oleh software
External Interrupt 0 maupun External Interrupt 1 dapat diatur menjadi aktif level maupun aktif
transisi dengan mengubah bit IT0 atau IT1 pada Register TCON External Interrupt akan bekerja
secara aktif level bila bit ITx (x = 0 untuk INT0 dan x =1 untuk INT1) berkondisi low dan bekerja
secara aktif transisi bila bit Itx berkondisi high.

    •   Interrupt Priority

Dalam melayani interrupt, mikrokontroler bekerja berdasarkan prioritas yang dapat diatur pada
Register Interrupt Priority.
IP0 atau PX0 untuk External Interrupt 0
IP1 atau PT0 untuk Timer 0 Interrupt
IP2 atau PX1 untuk External Interrupt 1
IP3 atau PT1 untuk Timer 1 Interrupt
IP4 atau PS untuk Serial Interrupt
Bit-bit ini akan berkondisi set apabila interrupt yang diaturnya ditempatkan pada prioritas yang
tinggi. Interrupt dengan prioritas yang tinggi dapat meng-interrupt interrupt lain yang mempunyai
prioritas lebih rendah, sedangkan interrupt dengan prioritas tinggi itu sendiri tidak dapat di interrupt
oleh interrupt lain.
Apabila terjadi lebih dari satu interrupt yang mempunyai prioritas yang sama secara bersamaan,
maka prioritas akan diatur secara polling mulai dari:
- External Interrupt 0
- Timer 0 Interrupt
- External Interrupt 1
- Timer 1 Interrupt
- Serial Interrupt


                                                                     Pelatihan Mikrokontroler AT89S51
                                                                                                   40


     • Interrupt Vector
Interrupt Vector adalah harga yang disimpan ke Program Counter pada saat terjadi interrupt
sehingga program akan menuju ke alamat yang ditunjukkan oleh Program Counter. Pada saat
program menuju ke alamat yang ditunjuk oleh Interrupt Vector maka flag-flag yang set karena
terjadinya interrupt akan di-clear kecuali RI dan TI. Kelima interrupt dan system reset dari 89C51
mempunyai Vector masing masing Masing-masing alamat vektor mempunyai jarak yang
berdekatan sehingga akan timbul masalah bila diperlukan sebuah Interrupt Service Routine yang
cukup panjang, misalnya hendak digunakan External Interrupt 0 dan Timer 0 dalam satu sistem,
maka bila Interrupt Service Routine untuk External Interrupt 0 diletakkan pada alamat 0003H dan
Interrupt Service Routine untuk Timer 0 diletakkan pada alamat 000BH akan terjadi bentrok alamat
antara kedua Interrupt Service Routine ini apabila tidak dilakukan suatu trik berikut yang terlihat
pada listing berikut.

ORG 0000H
LJMP Start
ORG 0003H
LJMP Int0
ORG 000BH
LJMP Timer0
......
......
......
Start:
......
...... ;Main Program
......
Int0:
......
...... ;Int0 ISR
......
RETI
Timer0:
......
...... ;Timer 0 ISR
......
RETI
Jadi pada listing ini, saat terjadi interrupt Program Counter memang tetap berisi nilai dari Interrupt
Vector sehingga program juga meloncat ke alamat tersebut, namun karena di alamat tersebut
sudah diletakkan instruksi untuk meloncat ke label yang lain seperti Int0 untuk External Interrupt 0
Service Routine maka tidak akan terjadi bentrok alamat antara kedua Interrupt Service Routine ini.




                                                                    Pelatihan Mikrokontroler AT89S51
                                                                                            41


Hardware




                              Gambar 24. Interupsi eksternal

ORG    00H
AJMP   START                         ; Program Utama
ORG    03H
AJMP   AKSI                          ; Rutin layanan Interupsi

Start:         SETB EA
      SETB     IT0
      SETB     IE.0
      MOV      A, #0FEh              ; simpan data 11111110B ke
                                     ; akumulator (P1.0 menyala duluan)
MULAI:
      MOV      P1,A                  ; kirim data ke Port 1
      ACALL    DELAY                 ; tunda sebentar
      RL       A                     ; putar isi akumulator ke kiri 1 bit
      CJNE     A,#7FH,MULAI          ; apakah A=01111111B ? Tidak, ulangi
lagi!
MULAI1:                              ;   Ya, lanjutkan ke proses berikut...
      MOV      P1,A                  ;   kirim data ke Port 1
      ACALL    DELAY                 ;   tunda sebentar
      RR       A                     ;   putar isi akumulator ke kanan 1 bit
      CJNE     A,#0FEh,MULAI1        ;    apakah A=11111110B ? Tidak, ulangi
lagi!
      SJMP     MULAI                 ; Ya, ulangi lagi dari paling awal...

Delay:      Mov   R0,#0              ; Isi Register R0 dengan 0 (256x ulang)
Delay1: Mov R1,#0                    ; Isi Register R1 dengan 0 (256x ulang)
      Djnz        R1,$
      Djnz R0,Delay1
      Ret

                                                               Pelatihan Mikrokontroler AT89S51
                                                                                             42

AKSI: MOV      P1,#00
      CALL     DELAY
      MOV      P1,#0FFH
      CALL     DELAY
      MOV      P1,#00
      CALL     DELAY
      MOV      P1,#0FFH
      CALL     DELAY
      MOV      P1,#00
      CALL     DELAY
      MOV      P1,#0FFH
      CALL     DELAY
      RETI

       End

                          TEKNIK ANTARMUKA DENGAN ADC 0804

Pada ADC 0804 terdapat pin pin kontrol yang harus di kendalikan jika kita ingin menggunakan
ADC, Selain itu terdapat nilai tegangan refferensi yang harus diberikan, misal kita menggunakan
ADC 8 bit, jika kita memberi tegangan refferensi 2,55 volt maka kita akan mendapatkan kenaikan 1
bit untuk perubahan 10 mVolt. Perlu diketahui bahwa pada pin ADC 0804 pada kaki Vref yang
disajikan berupa Vref/2, jadi untuk mendapatkan resolusi 10mV maka perlu pengesetan Vref/2
sebesar 1,27.5V
Cara akses ADC 0804:
Aktivkan ADC dengan memberikan sinyal 0 pada kaki Chip Select.
Berikan perintah mulai konversi dengan memberikan pulsa rendah sempit ke kaki ADC Write
Tunggu hingga ADC mengeluarkan sinyal 0 dari kaki INT nya
Berikan tunda waktu sesaat agar data dari ADC sudah benar
Berikan perintah baca dengan memberikan sinyal 0 pada kaki ADC Read
Berikan tunda waktu sesaat
Sekarang data dari ADC siap digunakan.




                              Gambar 25 antarmuka dengan ADC


                                                                Pelatihan Mikrokontroler AT89S51
                                                                              43


;=============================================
; PROGRAM AKSES ADC
;=============================================
ADC_CS      BIT   P2.7
ADC_RD      BIT   P2.6
ADC_WR      BIT   P2.5
ADC_INT     BIT   P2.4
;
      ORG   0H
NEXT_SAMPLING:
      CLR   ADC_CS      ; AKTIFKAN ADC0804
      CLR   ADC_WR      ; START OF CONVERSION
      SETB ADC_WR
NOT_EOC:
      JB    ADC_INT,NOT_EOC
DELAY:      DJNZ R2,$
      DJNZ R3,DELAY
      CLR   ADC_RD      ; BACA DATA MELALUI P3
      DJNZ R3,$
      MOV   A,P3
      SETB ADC_RD
      SETB ADC_CS
      CPL   A
      MOV   P1,A
      SJMP NEXT_SAMPLING
      END




                                                 Pelatihan Mikrokontroler AT89S51
                                                                                           44


                             Antar Muka dengan Motor Stepper




                            Gambar 26. Antar mula motor stepper


Pada motor stepper yang lazim digunakan dipasaran, terdapat 4buah pin data dan satu bua
common. Untuk dapat menggerakkan motor stepper kita harus memberikan dat yang bergeser
pada pin data, yang tentunya data tersebut adalah kebalikan dari pin common.
Misalnya kita menggunakan common Positif, maka kita harus memberikan data:
0111            ; data pertama
1011
1101
1110            ; data ke empat
Keempat data tersebut harus urut, untuk mengatur kecepatanyya kita harus memberikan delay
pada pergantian antara data pertama dan data berikutnya.

Untuk hardware nya kita bisa mengguanakan konfigurasi saklar dasar seperti gambar 11 dengan
memberikan empat buah saklar, kemudian kita menghubungkannya ke kaki data motor stepper,
yang perlu diingat sklar diatas adalah saklar untuk orus yang kecil, sehingga untuk arus yang
besar kita harus menambahkan penguatberupa transistor yng disusun secara darlington.

Di bawah ini adalh contoh program untuk menggerakkan motor stepper.

ORG   00H
MULAI:


                                                              Pelatihan Mikrokontroler AT89S51
                                                                                         45

      MOV      P1,#11110111B
      ACALL    LDELAY
      MOV      P1,#11111011B
      ACALL    LDELAY
      MOV      P1,#11111101B
      ACALL    LDELAY
      MOV      P1,#11111110B
      ACALL    LDELAY
WAIT: AJMP     MULAI


;======================================
; SUB ROUTINE DELAY
;=======================================
LDELAY: MOV R1,#75            ; DELAY INI TERGANTUNG DARI X-TAL
DELAY:      MOV   R0,#0H      ; YANG DIPASANG
      DJNZ        R0,$        ;
      DJNZ R1,DELAY
      RET                     ;
      END


                            ANTAR MUKA DENGAN LCD 16x2




                                    Gambar 27. Interface LCD
Untuk mengakses Lcd kita harus memenuhi beberpa tahapan-tahapan. Dibawah ini adalah contoh
sub rutin untuk bekerja dengan lcd.

;----------------------------------------------------
; Inisialisasi LCD
;----------------------------------------------------
Init_Lcd:                     ; Inisialisasi Lcd
            Clr   Rs          ; Kirim Instruksi
            Mov   P1,#38H     ; Mode pengalamatan 8 bit
            Setb En           ; Signal Clock Enable
            Clr   En
            Call Wait_Lcd     ; Tunggu beberapa saat (≥4.1 mS)
            Clr    Rs         ; Kirim Instruksi
            Mov    P1,#0CH    ; Display On/Off Control
            Setb En


                                                            Pelatihan Mikrokontroler AT89S51
                                                                                 46

             Clr    En
             Call   Wait_Lcd1    ; Tunggu beberapa saat (≥100μS)
             Clr    Rs
             Mov    P1,#06H      ; Entry Mode Set
             Setb   En
             Clr    En
             Call   Wait_Lcd1
             Ret

;------------
;DELAY LCD
;------------
WAIT_LCD:               ;DELAY LCD ( >4mS )
      MOV   R0,#25
DELAY1:     MOV   R5,#0
      DJNZ R5,$
      DJNZ R0,DELAY1
      RET

WAIT_LCD1:                 ;DELAY LCD
      MOV    R0,#3
DELAY3:      MOV   R5,#0
      DJNZ   R5,$
      DJNZ   R0,DELAY3
      RET

;---------------
;HAPUS TAMPILAN
;---------------
CLEAR_LCD:                 ;HAPUS KARAKTER TOTAL

      CLR   RS
      MOV   P1,#01h
      SETB EN
      CLR   EN
      CALL WAIT_LCD1
      RET
;----------------
;TULIS TEXT
;----------------
WRITE_TEXT:                ;MENULISKAN KARAKTER

      SETB   RS
      MOV    P1,A
      SETB   EN
      CLR    EN
      CALL   WAIT_LCD1
      RET

CURSOR:      CLR   RS           ;POSISI CURSOR
      MOV    P1,TEXT
      SETB   EN
      CLR    EN
      CALL   WAIT_LCD1
      RET



                                                    Pelatihan Mikrokontroler AT89S51
                                                                                              47


Sebagai contoh, untuk penulisan karakter pada LCD, dapat diberikan program sebagai berikut;


MULAI:
      ACALL            INIT_LCD                ; Panggil sub rutin inisialisasi
      ACALL            CLEAR_LCD               ; Hapus semua karakter

        MOV   A,#'A'                           ; isi A dgn huruf A (format ASCI)
        ACALL WRITE_TEXT                       ; Panggil sub rutin
                                               ; menulis karakter
        MOV     A,#'G'
        ACALL   WRITE_TEXT
        MOV     A,#'U'
        ACALL   WRITE_TEXT
        MOV     A,#'N'
        ACALL   WRITE_TEXT
        MOV     A,#'G'
        ACALL   WRITE_TEXT

        MOV     40H,#0C0H              ; Pindah posisi cursor di 0C0H
        ACALL   CURSOR
        MOV     A,#'U'
        ACALL   WRITE_TEXT
        MOV     A,#'G'
        ACALL   WRITE_TEXT
        MOV     A,#'M'
        ACALL   WRITE_TEXT

WAIT: AJMP      $

END



RELAY




                              Gambar 28. Interface dengan relay

Di atas adalah contoh antar muka dengan relay, untuk mengakifkan relay, berikan logika 0. Untuk
mematikan relay berikan logika 1

                                                               Pelatihan Mikrokontroler AT89S51
                                                                                         48


                                        LAMPIRAN

Petunjuk penggunaaan Program simulasi

   1. TS Control Emulator
   Program ini mampu memantau status register dalam mikrokontroler, kita tinggal memasukkan
   file program kita yang ber ekstensi HEX.
   Dengan cara Fille - - - , Load Hex File…..,
   Setelah itu kita akan melihat file hexa yang kita masukkan tadi menjadi asm code, dalam
   diasembled code.
   Untuk debuging program kita tinggal menekan F10 atau F11, maka pgram akan berjalan per
   step, dan kita bisa melihat status reguster




                                                            Pelatihan Mikrokontroler AT89S51
                                                                                        49



2. 535 Simulaor
Pada simulator ini sudah dilengkapi dengan tampilan visual pada port, untuk mengisi program
kita harus mengisikan file .LST. Untuk debuging, kita tinggal menekan tombol 7 atau F8




                                                           Pelatihan Mikrokontroler AT89S51

				
DOCUMENT INFO
Shared By:
Stats:
views:9630
posted:7/30/2010
language:Indonesian
pages:50
Description: AT89S51 mikrokontroler