Timer/Counter dan Interupsi

 

 

 

 

 

Timer/Counter

Timer berfungsi untuk mengatur waktu kerja yang dibutuhkan AT89S51/52, tersedia  dua buah timer yaitu Timer 0 dan Timer 1, masing-masing timer terdiri dari 16 bit counter yang dapat diprogram.

Timer/Counter yang dioperasikan sebagai timer dapat digunakan untuk menghitung waktu dari sebuah kejadian.  Nilai timer bertambah tiap machine cyle (12 pulsa clock) sehingga kecepatan bertambahnya ialah 1/12 dari frekwensi osilator. Dengan menggunakan Timer/Counter sebagai counter, maka Kit mikrokontroler akan selalu menghitung munculnya kejadian yang ditandai dengan adanya trigger. User tinggal memeriksa nilai counter pada saat yang ditentukan.  Register-register Timer yang tersedia ialah :

 

TMOD (Timer Mode Register)

Register yang digunakan untuk mengatur timer/counter terdapat pada Timer Mode (TMOD) dan Timer Control (TCON).  TMOD   tidak dapat diakses secara bit (not bit addressable), beralamat di 89H.  Gambar dibawah ini memperlihatkan alamat dan pembagian register TMOD

 

   

                                          Gambar 4.1  Register TMOD

Penjelasan dari gambar di atas ialah :

 

Ø      Gate: Timer akan berjalan bila bit ini set dan INT0 (untuk Timer 0) atau INT1 (untuk Timer 1) berkondisi high

Ø      C/T: 1 = Counter 0 = Timer

Ø      M1 & M0: Untuk memilih mode timer, seperti pada Tabel 4.1:

 

                Tabel 4.1  Mode Operasi Timer /Counter

M1

M0

Mode Operasi

0

0

0

Timer/Counter 13 bit

0

1

1

Timer /Counter 16 bit

1

0

2

Timer/Counter 8 bit auto reload

1

1

3

Split timer mode untuk timer/counter 0

1

1

3

Timer/Counter 1 berhenti

 

4.1.2  THx dan TLx

THx dan TLx (x adalah nomor Timer).Merupakan Register yang menunjukkan nilai dari timer di mana masing-masing Timer mempunyai dua buah register yaitu:

- THx untuk high byte

- TLx untuk low byte

·         TH0 : Timer 0 High Byte terletak pada alamat 8AH

·         TL0 : Timer 0 Low Byte terletak pada alamat 8BH

·         TH1 : Timer 1 High Byte terletak pada alamat 8CH

·         TL1 : Timer 1 Low Byte terletak pada alamat 8DH

 

Misal register Timer/Counter 0 diisi dengan nilai 814AH dan register Timer/Counter 1 diisi dengan  nilai 0CF32H, maka instruksinya sebagai berikut :

            MOV      TH0,#81H

                MOV      TL0,#4AH

                MOV      TH1,#0CFH

                MOV      TL1,#32H

 

4.1.3   TCON (Timer Control Register)

Pada register ini, hanya 4 bit saja yaitu TCON.4, TCON.5, TCON.6 dan TCON.7 saja yang mempunyai fungsi berhubungan dengan timer.

 

 

   

Gambar 4.2  Register TCON

 

Tabel 4.2 menampilkan penjelasan dari Timer control .

 

 

Tabel 4.2  Timer Control

 

Bit

Alamat bit

Simbol

Penjelasan

TCON.7

8FH

TF1

Timer/Counter 1 overflow flag

TCON.6

8EH

TR1

Timer 1 Run Control Bit

TCON.5

8DH

TF0

Timer /Counter 0 overflow flat

TCON.4

9CH

TR0

Timer 0 Run Control Bit

TCON.3

8BH

IE1

External Interrupt 1 Edge flag

TCON.2

8AH

IT1

External interrupt 1 type control bit

TCON.1

89H

IE0

External Interrupt 0 Edge flag

TCON.0

88H

IT0

External interrupt 0 Type control bit

 

Penjelasan dari gambar dan tabel  diatas ialah :

 

Ø      TCON.7 atau TF1: Timer 1 Overflow Flag yang akan set bila timer overflow. Bit ini dapat di-clear oleh software atau oleh devais pada saat program menuju ke alamat yang ditunjuk oleh interrupt vektor.

Ø      TCON.6 atau TR1: 1 = Timer 1 aktif, 0 = Timer 1 non aktif

Ø      TCON.5 atau TF0: Sama dengan TF1

Ø      TCON.4 atau TR0: Sama dengan TR1

 

Jika Timer/Counter yang diprogram akan digunakan sebagai sumber interrupt, maka IE dan /atau IP juga harus diatur.  Misal kedua Timer/Counter digunakan sebagai sumber interrupt dengan prioritas Timer/Counter 1, maka instruksinya :

 

            MOV      IP,#80H

                MOV      IE,#8AH

                                atau

                SETB      PT1

                SETB      ET1

                SETB      ET0

                SETB      EA

 

Mode Timer

Mode Timer terdiri dari:

 

 Mode 0 Timer 13 bit

Pada Mode 0, disediakan terutama untuk menjaga kompatibilitas dengan prosesor 8048.  pada Mode 0, register TLx (TL0 atau TL1) hanya digunakan 5 bit terendah saja sedangkan register THx (TH0 atau TH1) tetap selebar 8 bit.  TLx akan terus bertambah hingga bernilai 1FH.  Overflow akan terjadi jika ada perubahan dari FF1FH ke 0000H.  Nilai THx dan TLx dapat diubah oleh user setiap saat dalam program.

 

  Mode 1 Timer 16 bit

 

Mode 1 pada 89C51 semua bit TLx digunakan, sehingga mode 1 merupakan timer/counter 16 bit. TLx akan bertambah hingga bernilai FFH.  Pada saat ada perubahan nilai TLx dari FFh ke 00H, THx akan bertambah 1.  Nilai maksimal THx dan TLx ialah FFFFH (THx=FFH dan TLx =FFH).  Overflow akan terjadi jika ada perubahan dari FFFFH ke 0000H.

            Gambar 4.3  Timer/Counter Mode 1

 

 

 

 

Misalnya Timer/Counter 0 digunakan sebagai timer dalam mode 2 dengan external control dan Timer/Counter 1 digunakan sebagai counter dalam mode 1 dengan internal control, maka instruksinya :

 

            MOV TMOD,#5AH

 

Sedangkan untuk menjalankan kedua timer, instruksinya :

 

            MOV TCON, #50H

                                atau

                SETB      TR0

                SETB      TR1

 

 Mode 2 Timer 16 bit di 89S52

Mode 2 ialah timer/counter 16 bit yang dapat beroperasi sebagai timer atau event counter. Timer 2 mempunyai 3 mode yaitu capture, auto-reload  dan baud rate generator. Timer 2 terdiri dari 2 buah register 8 bit yaitu TH2 dan TL2.  Berikut table Mode  2  pada 89S52.

 

Tabel 4.3 Timer  Mode 2 89S52

RCLK+TCLK

CP/RL2

TR2

MODE

0

0

1

16 bit auto reload

0

1

1

18 bit capture

1

x

1

Baud Rate Generator

x

x

0

Off

 

Pada mode capture, 2 pilihan dipilih oleh bit EXEN2 di T2CON. Jika EXEN2=0, Timer 2 menjadi 16 bit timer atau counter dimana tergantung dari overflow set bit TF2 di T2CON.  Bit ini dapat digunakan untuk membuat sebuah interupsi. 

                                   

 

                                    Gambar 4.4 Mode Capture

 

 

Timer 2 dapat diprogram untuk menghitung naik/mundur ketika dikonfigurasikan sebagai mode 16 bit auto-reload.  Fitur ini dipanggil oleh bit DCEN (Down Counter Enable)  yang berada di SFR T2MOD.

                      Gambar 4.5  Timer 2 Mode Auto reload (DCEN=0)

 

Timer 2 sebagai baud rate generator dengan menset TCLK dan/atau RCLK di T2CON.  Sbeagai catatan, baud rate untuk mengirim dan menerima dapat berbeda jika Timer 2 digunakan untuk mengirim atau memancarkan dan Timer 1 digunakan untuk fungsi lainnya. Menset RCLK dan /atau TCLK membantu Timer 2 berada pada mode baud rate generator

 

                        Gambar 4.6  Mode baud rate generator

 Mode 3

Pada Mode 3 di 89C51, Timer/Counter 0 akan menjadi 2 timer/counter 8 bit, sedangkan Timer/Counter 1 akan berhenti. TL0 akan menjadi timer/counter 8 bit yang dikendalikan oleh bit control Timer/Counter 0 (meliputi GATE, C/T’, TR0, INT0, dan TF0).   TH0 akan menjadi timer 8 bit (bukan counter) yang dikendalikan oleh bit control timer/counter 1 (meliputi TR1 dan TF1).Timer /Counter 1 masih dapat dioperasikan dalam mode selain mode 3. 

 

 

Penerapan Timer/Counter

Timer bekerja memerlukan sumber detak  dengan menghubungkan pin T0 (P3.4) sebagai input detak. Jika digunakan sumber detak internal, input detak berasal dari osilator yang telah dibagi 12. Untuk pengaturan Timer dengan software maka bit penentu keaktifan ialah Rtx sedangkan kondisi dari Bit Gate harus berlogika 0. Pengaturan Timer dengan hadware, penentu keaktifan ialah INTx sedangkan kondisi Bit Gate dan TRx harus berlogika 1.

Timer ini sering digunakan untuk mengatur baud rate dari port serial. Dengan mengubah bit SMOD yang terletak pada register PCON menjadi set (kondisi awal pada saat sistem reset adalah clear) maka baud rate pada Mode 1, 2 dan 3 akan berubah menjadi dua kali lipat.

 

Contoh program berikut ialah penggunaan fasilitas  Timer pada mikrokontroler .  Untuk menggunakan Timer/Counter 0 sebagai timer mode 1, maka GATE, C/T dan M1 untuk Timer 0 pada TMOD berlogika 0 dan M0 berlogika 1 sehingga TMOD bernilai 01H. Sedangkan untuk menjalankan Timer 0, maka TR0 (TCON.4) berlogika 1 sehingga TCON bernilai 10H. Pada contoh dibawah ini Timer 0 diberi nilai awal 2CH untuk TH0 dan 00H untuk TL0 sehingga Timer 0 akan selalu dimulai dari nilai 2C00H. Karena frekwensi timer tinggi, maka digunakan faktor pengali 10H yang berada pada R0.

Langkah-langkah :

·         Hubungkan Port 1 DT-51 dengan “PORT OUTPUT” DT-51 Trainer Board

·         Hubungkan “CONTROL” DT-51 dengan “CONTROL“ DT-51 Trainer Board

·         Buat program berikut :

 

Program timer untuk Led berkedip (timer.asm)

$MOD51

                                                CSEG

                                                ORG        4000H

                                                LJMP      START

                                                ORG        400BH

                COUNT: INC         R0

                                                CJNE      R0,#10H,OUT1

                                                SETB      P1.5

                LOOP:                    MOV      R6,#0FFH

                                                DJNZ      R6,$

                                                DJNZ      R7,LOOP

                                                CLR        P1.5

                                                MOV      R0,#00H

                OUT1:                    MOV      TH0,#2CH

                                                MOV      TL0,#00H

                                                RET1

                ;inisialisasi

                                                ORG        4200H

                START: MOV      SP,#30H

                                                MOV      R0,#00H

                                                MOV      TMOD,#01H

                                                MOV      TH0,#2CH

                                                MOV      TL0,#00H

                                                MOV      TCON,#10H

                                                MOV      P1,#00H

                                                MOV      IE,#82H

                                                SJMP      $

                                                END

 

Jika program dijalankan, akan menampilkan nyala LED Bit 5 berkedip dimana baru akan dinyalakan atau dipadamkan setelah interupsi oleh Timer 0 sebanyak 16 x. Perhatikan pada saat interupsi, program akan melompat ke alamat vector 000BH tetapi oleh DT51 akan langsung dipindah ke alamat 400BH.

 

Contoh berikut menggunakan Timer/Counter 0 Counter Mode 2, langkah-langkahnya :

 

Program Counter Mode 2 (mode2.asm)

$MOD51

                CSEG

                ORG        4000H

                LJMP      START

                ORG        400BH

                MOV      P1,  #00H

                SETB      P1.5

                PUSH     5

                PUSH     6

                PUSH     7

                MOV      R7,#0FH

LUPA:    MOV      R6,#0FFH

LUPB:     MOV      R5,#0FFH

                DJNZ      R5,$

                DJNZ      R6,LUPB

                DJNZ      R7,LUPA

                POP        7

                POP        6

                POP        5

                RETI

                ORG        4100H

DELAY:MOV        R7,#04H

LUP1:     MOV      R6,#0FFH

LUP2:     MOV      R5,#0FFH

                DJNZ      R5,$

                DJNZ      R6,LUP2

                DJNZ      R7,LUP1

                RET

;inisialisasi

START: MOV      SP,#30H

                MOV      TMOD,#06H

                MOV      TH0,#0FAH

                MOV      TL0,#0F6H

                SETB      TR0

                CLR        TF0

                MOV      IE,#82H

;Program Utama

LOOP1:  MOV      P1,#00110011B

                ACALL  DELAY

                MOV      P1,#11001100B

                ACALL  DELAY

                SJMP      LOOP1

END

 

Program akan menampilkan nyala LED bergantian antara data 00110011b dengan 11001100b. Pada saat terjadi interupsi, maka LED bit 5 akan menyala sejenak.  Untuk menggunakan Timer/Counter 0 sebagai counter mode 2, maka GATE dan M0 untuk Timer 0 pada TMOD berlogika 0 dan C/T dan M1 berlogika 1, sehingga TMOD bernilai 00000110b atau 06H.  Untuk menjalankan counter 0, maka TR0(TCON.4) berlogika 1, sehingga TCON bernilai 0010000b atau 10H.  Perintah CLR TF0 digunakan untuk memberikan interrupt flag sebelum interupsi diaktifkan.  Untuk  mengaktifkan interrupt counter 0, maka EA (IE.7) dan ET0(IE.1) berlogika 1, sehingga IE bernilai 10000010b atau 82H.  Pada contoh program diatas, counter 0 diberi nilai awal F6H untuk TL0, sehingga membutuhkan 10 x penekakan keypad IS3 untuk menghasilkan interupsi pertama. Dan sebagai nilai reload pada TH0 diberi nilai FAH, sehingga hanya membutuhkan 6 x penekanan keypad IS3.

 

Penerapan lainnya, misal jika kita ingin membuat bunyi dengan frekwensi 1Hz, periodanya ialah T=1/f, perioda yang dihasilkan ialah 1 detik. Dengan demikian perioda port tinggi ialah 0.5 detik dan perioda port rendah ialah 0.5 detik.

 

Gambar 4.7  Rangkaian driver speaker

 

Assumsikan bahwa frekwensi detak 12 MHz, maka tundaan maksimum yang dicapai ialah 65535 x 1 uS =0.065 detik. Untuk itu timer digunakan sebagai penghasil tundaan selama 0.01 detik (10.000 x 1 uS). Dengan pembagi 50 akan didapat tundaan 0.01 detik x 50 =0.5 detik. Nilai untuk TH0 dan TL0 ialah :

 

            65535 -10.000=55535D=D8EFH

 

Nilai untuk TH0 ialah D8H dan untuk TL0 ialah EFH. Berikut contoh program penghasil bunyi di speaker:

 

Listing Program 6. Penghasil bunyi di speaker (bunyi.asm)

$MOD51

ORG 00H  ; MENGGUNAKAN ALAMAT AWAL MIKRO

 

MULAI: SETB P1.0

                 ACALL TUNDA

                 CLR       P1.0

                 ACALL TUNDA

                 SJMP     MULAI

TUNDA: MOV     R0,#0

LAGI:     MOV     TMOD, #01

                 MOV     TH0, #0D8H

                 MOV     TL0, #0EFH

                 SETB     TR0

ULANG: NOP

                 JBC        TF0, HITUNG

                 SJMP     ULANG

HITUNG: INC     R0

                  CJNE   R0, #100, LAGI

                  RET

 

END

 

 Interupsi

 

Program yang sedang dijalankan oleh mikrokontroler AT89S51/52 dapat dihentikan untuk sementara yang dikenal dengan instilah interupsi. Jika AT89S51/52 mendapat permintaan interupsi maka program counter (PC) akan diisi alamat dari vector interupsi, kemudian AT89S51/52 melaksanakan rutin pelayanan interupsi mulai dari alamat tersebut setelah selesai maka AT89S51/52 akan kembali ke pelaksanaan program utama yang ditinggalkan. Mikrokontroler AT89S51/52 menyediakan 6 sumber interupsi yaitu 2 buah interupsi eksternal (INT 0 dan INT 1), 3 buah interupsi timer (Timer 0, Timer 1, dan Timer 2), dan sebuah interupsi port serial.

Interupsi ialah suatu sela yang terjadi pada saat program sedang berjalan. Mirip halnya dengan interupsi yang terjadi pada saat rapat yang sedang berlangsung.  Interupsi berguna jika terdapat suatu rutin yang dijalankan hanya pada waktu tertentu yang bersifat asinkron.

 

Berikut Interrupt Enable pada MCS-51:

 

Tabel 4.4  Interrupt Enable

Bit

Alamat bit

Simbol

Penjelasan

IE.7

0AFH

EA

Enable All

-

-

-

Reserved

-

-

-

Reserved

IE.4

0ACH

ES

Serial Interrupt Enable Bit

IE.3

0ABH

ET1

Timer/Counter 1 Enable bit

IE.2

0AAH

EX1

External Interrupt 1 enable Bit

IE.1

0A9H

ET0

Timer /Counter 0 Enable Bit

IE.0

0A8H

EX0

External Interrupt 0 Enable Bit

 

 

Jika terjadi interupsi, maka interrupt flag akan bernilai 1 pada bit yang menunjukkan sumber interrupt.  Jika CPU menemukan adanya interrupt pada saat sampling, proses selanjutnya ialah CPU akan menjalankan instruksi LCALL yang akan menyimpan Program Counter (PC)  ke stack dengan urutan 8 bit terendah terlebih dahulu.  Jika sumber interupsi berasal dari Timer/Counter atau External interrupt, interrupt flag yang bersangkutan akan dibersihkan. 

Pastikan juga user mengamankan nilai register dengan menggunakan PSW, ACC, B, R0-R7 dan DPTR. Selain itu, register yang di-PUSH pertama harus di-POP terakhir. Selain itu, gunakan RETI agar fungsi  kembali ke alamat semula.

 

Contoh program berikut merupakan Penggunaan INT0 dengan interrupt enable.

Langkah-langkahnya :

Buat proram berikut :

 

Program Interrupt Enable (ie.asm)

$MOD51

                        CSEG

                        ORG        4000H

                        LJMP      START

                        ORG        4003H

                        RL           A

                        MOV      P1,A

                        MOV      R7,#04H

LOOPA:         MOC      R6, #0FFH

LOOPB:          MOV      R5,#0FFH

                        DJNZ      R5,$

                        DJNZ      R6,LOOPB

                        DJNZ      R7,LOOPA

                        RETI

                        ORG        4200H

;inisialisasi

START:         MOV      SP,#30H

                        MOV      TCON,#01H

                        MOV      P1,#01H

                        MOV       IE,#81H

                        SJMP      $

                        END

 

Program diatas akan menampilkan nyala LED dari Bit 0 dan bergeser ke kiri setiap ada penekanan keypad “IS1”. Untuk mengunakan INT0 dengan falling edge trigger maka INT0 (TCON.0) berlogika 1, sehingga TCON bernilai 00000001b(01H). Untuk mengaktifkan interrupt, maka EX0 (IE.0) dan EA(IE.7) berlogika 1 sehingga IE bernilai 10000001b (81H), terlihat juga bahwa pada saat interupsi program melompat ke alamat vector 0003H yang oleh DT-51 langsung dipindah ke alamat 4003H. Fungsi DJNZ digunakan untuk mengurangi satu dan lompat jika hasilnya bukan nol.

 

Contoh penggunaan interupsi lainnya, program berikut akan menggunakan INT0 dan INT1 dengan Interrupt Priority.

Langkah-langkahnya :

  1. Hubungkan Port 1 DT-51 dengan Port Ouput DT-51 Trainer board menggunakan kabel tipe Y
  2. Hubungkan Control DT-51 MinSys dengan Control DT-51 Trainer board menggunakan kabel tipe X
  3. Hubungkan IS1 dengan INT0 dan IS2 dengan INT1 pada DT-51 trainer board
  4. Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial
  5. Ketik program berikut :

 

Program INT0 dan INT1 (inprio.asm)

$MOD51

                CSEG

                ORG        4000H

                LJMP      START

ORG        4003H

LJMP      INTER0

ORG        4013H

                                LJMP      INTER1

                                ORG        4100H

INTER0:                 MOV      P1,#0H

                                SETB      P1.0

                                LCALL LDELAY

                                CLR        P1.0

RETI

INTER1: MOV      P1,#0H

                                SETB      P1.7

                                LCALL   DELAY

                                CLR        P1.7

                                RETI

                                ORG        4200H

LDELAY:               PUSH     7

                                PUSH     6

                                PUSH     5             

                                MOV      R7, #24H

LUPA:                    MOV      R6, #0FFH

LUPB:                     MOV      R5, #0FFH

                                DJNZ      R5, $

                                DJNZ      R6, LUPB

                                DJNZ      R7, LUPA

                                POP        5

                                POP        6

                                POP        7

                                RET

 

SDELAY:               PUSH     7

                                PUSH     6

                                PUSH     5

                                MOV      R7, #04H

LUP1:                     MOV      R6, #0FFH

LUP2:                     MOV      R5, #0FFH

                                DJNZ      R5, $

                                DJNZ      R6, LUP2

                                DJNZ      R7, LUP1

                                POP        5

                                POP        6

                                POP        7

                                RET

 

;inisialisasi

START:                 MOV      SP,#30H

                                MOV      TCON, #05H

                                MOV      IP, #04H

                                MOV      IE, #85H

;Program Utama

LOOP1:                  MOV      P1,#01010101B

                                ACALL  SDELAY

                                MOV      P1, #10101010B

                                ACALL SDELAY

                                SJMP      LOOP1

END

 

Progam akan menampilkan nyala LED yang bergantian.  Setiap kali ada penekanan keypad IS1, hanya LED bit 0 yang akan menyala.  Setiap kali ada penekanan keypad IS2, hanya led bit 7 yang akan menyala.  Untuk menggunakan INT0 dan INT1 dengan falling edge trigger (transisi dari high ke low), maka IT1(TCON.2) dan IT0 (TCON.0) berlogika 1, sehingga TCON bernilai 00000101b atau 05H.  Untuk memindah INT1 ke tingkat prioritas lebih tinggi, maka PX1 (IP.2) berlogika 1 sehingga IP bernilai 00000100b atau 04H. 

Untuk mengaktifkan INT0 dan INT1, maka EX0(IE.0), EX1(IE.2), dan EA (IE.7) berlogika 1, sehingga IE bernilai 10000101b atau 85H. Rutin interrupt pada alamat vector 4003H dan 4013H dipindah ke alamat lain dengan perintah LJMP.  Hal ini dilakukan agar rutin dapat lebih panjang tanpa khawatir menerjang alamat vector berikutnya.    Perhatikan bahwa penekanan keypad IS2 dapat menginterupsi rutin penekanan keypad IS1, tetapi tidak sebaliknya.  Hal ini dikarenakan INT1 berada pada tingkat prioritas lebih tinggi.  Perhatikan juga bahwa SDELAY menggunakan alamat yang sama dengan LDELAY.  Untuk menghindari kekacauan nilai, maka diperlukan PUSH dan POP.

 

 

LATIHAN :

1.       Jelaskan cara kerja timer/counter di AT89C51 dan AT89S52

2.    Buat tampilan animasi menggunakan 7 segment trainer board, sebagai contoh berikut akan menampilkan angka ‘7’ dan ‘5’ di 7 segment trainer board

 

$MOD51

PORTC           EQU        2002H

CW EQU        2003H

                        CSEG

                        ORG        4000H

                        LJMP      START
DELAY:         MOV      R6,#0FH

LUP:               MOV      R7,#0FFH

                        DJNZ      R7,$

                        DJNZ      R6,LUP

                        RET

START:         MOV      SP,#30H

                        MOV      DPTR,#CW

                        MOV      A,#80H;konfigurasi Port A,B dan C

                        MOVX   @DPTR,A

LOOP:

;menampilkan angka 5 di 7 segment 1

                        MOV         DPTR,#PORTC

                        MOV         A,#80H

                        MOV         @DPTR,A

                        MOV         P1,#6DH

                        LCALL   DELAY 

;menampilkan angka 7 di segment 2

                        MOV         A,#40H

                        MOV        @DPTR,A

                        MOV         P1,#07H

                        LCALL   DELAY

                        SJMP         LOOP

END

 

Jika tidak ada kesalahan, program akan menampilkan angka 7 pada segment 2 dan angka 5 pada segment 1 secara serentak tanpa berkedip.  Pada program tersebut, D01 terhubung dengan Port C bit ke 6 (PC.6) dan D02 terhubung dengan Port C bit ke 7 (PC.7).  Untuk menampilkan angka 7 pada segment 2, maka D02 berlogika 0 dan D01 berlogika 1, jadi data 7 segment yang dikirim bernilai 00000111b atau 07H.

Untuk menampilkan angka 5 pada segment 1, maka D02 bernilai 1 dan D01 berlogika 0, maka data yang dikirim ke port 1 bernilai 01101101b atau 6DH.

 

 

 

 

3.       Jelaskan fungsi interupsi dan efeknya bagi program yang sedang berjalan

4.       Buatlah program untuk menampilkan led di port 1 dengan CO1 yang dihubungkan ke T1 pada DT-51 trainer board dan jumper Pulse Generator pada 1KHz, dengan syarat:

    1. Semua led dimulai dari keadaan padam
    2. Gunakan Timer/Counter 0 sebagai Timer mode 1
    3. Setiap timer 0 berjalan selama 1 detik, register counter 1 ditampilkan ke LED secara bergantian.
    4. Sebelum keluar dari Interrupt Service Routine Timer 0, kembalikan semua register kedua Timer/Counter menjadi 0000H lagi.
    5. Ulangi lagi latihan tersebut dengan jumper “Pulse Generator” pada 10KHz.

5.       Buat program jika P1.1 diberi logika 1, maka Port A akan menampilkan nyala lampu Running LED ke arah kiri, sedangkan jika p1.2 yang diberi logika 1, maka port B akan menampilkan nyala lampu Running LED ke arah kanan.

6.       Buat program untuk menampilkan LED di port B dengan toggle switch di port C untuk kondisi :

a.       Jika toggle switch “bit 2” berlogika “1”, maka semua LED akan padam

b.       Jika toggle switch “Bit 2” berlogika ‘0’, program akan memeriksa kondisi toggle switch “Bit 5”

c.       Jika toggle switch “Bit 2” berlogika ‘0’ dan toggle switch “Bit 5” berlogika ‘0’, led “Bit 2” menyala.

d.       Jika toggle switch “Bit 2” berlogika ‘0’ dan toggle switch “Bit 5” berlogika ‘1’, LED “Bit 5” menyala.