Tutorial Microcontroller MCS-51 ATMEL ISP


Microcontroller Kits

Programmer and Target 89s51

Simple Mikrokontroller 89s51 Trainer


Standart
Mikrokontroller 89s51 Trainer

Super Mikrokontroller Trainer 89s51

Dot matrix Trainer
ATMEGA8

All Kits
+
Programmer via USB Port

 

 

Percobaan 5.3. Aplikasi program komparator dengan memanfaatkan instruksi aritmatika dan instruksi lompatan untuk pengaturan suhu dengan display LCD Karakter

Dalam dunia elektronika, rangkaian komparator, umumnya diwujudkan dengan memanfaatkan rangkaian op-amp yang dibangun sebagai komparator. Sesuai dengan prinsip kerja komparator, membandingkan dua buah tegangan yang masuk pada input INV dan NON INV, untuk menghasilkan suatu output tegangan saturasi. Dengan memanfaatkan instruksi aritmatika SUBB dan instruksi lompatan JZ dan JC, maka rangkaian analog ini dapat digantikan dengan menggunakan pemrograman assembly.


Gambar 5.10 Rangkaian komparator analog dengan IC OP-AMP

Apabila tegangan yang masuk pada VREF lebih besar daripada tegangan yang masuk pada VIN maka VOUT akan mengeluarkan tegangan ~0 volt. Dan sebaliknya bila tegangan yang masuk pada VREF lebih kecil dari pada VIN maka VOUT akam mengeluarkan tegangan VSAT.

ControlSuhu:
    mov a,dataSetting ; contoh dataSetting=50
    mov b,dataADC ; contoh dataADC=30
    clr c
    subb a,b 
    jnz OnHeater
    ret
OnHeater:
    jc OffHeater
    call HeaterOn ;Instruksi hidupkan heater
    ret
OffHeater:
    Call HeaterOff ;Instruksi matikan heater
    ret
;

Pada instruksi tersebut diambil selisih antara dataSetting dan dataADC dengan menggunakan instruksi SUBB, pengurangan ini akan menghasilkan tiga keadaan yaitu: NOL, NEGATIF atau POSITIF. Hasil-hasil inilah yang harus dideteksi, keadaan NEGATIF dapat dideteksi dengan memantau bit C (carry ), keadaan NOL dapat dideteksi dengan memantau register A (accumulator).

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:
A=dataSetting=50
B=dataADC=30
SUBB A,B
A=50-30 =20 (keadaan POSITIF)
Sesuai dengan instruksi diatas maka program akan menuju ke Ret OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan POSITIF maka C=0 (clear) sehingga program akan memanggil HeaterOn

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:
A=dataSetting=50
B=dataADC=50
SUBB A,B
A=50-50 =00 (keadaan NOL)
Sesuai dengan instruksi diatas maka program akan menuju ke Ret.

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:
A=dataSetting=50
B=dataADC=51
SUBB A,B
A=50-51 =-1 (keadaan NEGATIF)
Sesuai dengan instruksi diatas maka program akan menuju ke OnHeater, pada baris ini dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan NEGATIF maka C=1 (clear) sehingga program akan memanggil label OffHeater

Pada percobaan 5.3. ini indikator heater On dan Off, ditunjukkan pada layar LCD Karakter pada baris 1. seperti yang ditunjukkan pada pemrograman berikut ini:

1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG
2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program (download file prog53a.asm)

Gambar 5.11. Diagram alir (a) rutin utama (b) subrutin kontrol suhu pada percobaan 5.3.

dataSetting equ 30h
dataADC equ 31h
ratusan equ 32h
puluhan equ 33h
satuan equ 34h
      org 0h
      mov dataSetting,#50d; contoh datasetting=50
      call init_lcd
start:call ADC
      call ControlSuhu
      call bin2dec
      call Display2LCD
      sjmp start
           ;
ControlSuhu:
      mov a,dataSetting ; contoh dataSetting=50
      mov b,dataADC ; contoh dataADC=30
      clr c
      subb a,b 
      jnz OnHeater
      ret
OnHeater:
      jc OffHeater
      call HeaterOn ;Instruksi hidupkan heater
      ret
OffHeater:
      Call HeaterOff ;Instruksi matikan heater
      ret
           ;
HeaterOn:
      mov R1,#80h
      call write_inst
      mov R1,#'O'
      call write_data
           ;
      mov R1,#81h
      call write_inst
      mov R1,#'n'
      call write_data
           ;
      mov R1,#82h
      call write_inst
      mov R1,#' '
      call write_data
      ret
HeaterOff:
      mov R1,#80h
      call write_inst
      mov R1,#'O'
      call write_data
           ;
      mov R1,#81h
      call write_inst
      mov R1,#'f'
      call write_data
           ;
      mov R1,#82h
      call write_inst
      mov R1,#'f'
      call write_data
      ret
;=======================================
;Subrutin ini untuk merubah data biner ke desimal
;menjadi 3 digit = ratusan-puluhan-satuan
;=======================================
Bin2Dec:
      mov A,dataADC
      mov b,#100d
      div ab
      mov ratusan,a
      mov a,b
      mov b,#10d
      div ab
      mov puluhan,a
      mov satuan,b
      ret 
;=================================================
;Subrutin untuk menampilkan data ke LCD character 2 x16
;pada DDRAM 0C9 0CA 0CB untukratusan, puluhan, and satuan
;=================================================
Display2LCD:
           mov r1,#0c0h
           call write_inst
           mov a,ratusan
           add a,#30h
           mov r1,a
           call write_data
           ;
           mov r1,#0c1h
           call write_inst
           mov a,puluhan
           add a,#30h
           mov r1,a
           call write_data
           ;
           mov r1,#0c2h
           call write_inst
           mov a,satuan
           add a,#30h
           mov r1,a
           call write_data 
           ret
;=======================================
;Subrutin ini digunakan untuk mengambil data ADC
;========================================
ADC: clr P3.3
     nop
     nop
     nop
     setb P3.3
eoc: jb P3.2,eoc
     clr P3.4
     mov A,P1
     mov dataADC,A
     setb P3.4
     ret 
           ;
Init_lcd:
   mov r1,#00000001b ;Display clear
   call write_inst 
   mov r1,#00111000b ;Function set,Data 8 bit,2 line font 5x7
   call write_inst 
   mov r1,#00001100b ;Display on, cursor off,cursor blink off
   call write_inst
   mov r1,#00000110b ;Entry mode, Set increment
   call write_inst
   ret
;
write_inst:
           clr P3.6 ; RS = P2.0 = 0, write mode instruction
           mov P0,R1 ; D7 s/d D0 = P0 = R1
           setb P3.7 ; EN = 1 = P2.1 
           call delay ; call delay time
           clr P3.7 ; EN = 0 = P2.1
           ret
           ;
Write_data:
           setb P3.6 ; RS = P2.0 = 1, write mode data
           mov P0,R1 ; D7 s/d D0 = P0 = R1
           setb P3.7 ; EN = 1 = P2.1
           call delay ; call delay time
           clr p3.7 ; EN = 0 = P2.1
           ret
           ;
           delay: mov R0,#0
           delay1:mov R2,#0fh
           djnz R2,$
           djnz R0,delay1
           ret
           end

6. Simpanlah program yang anda ketik dan beri nama : prog53a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2 diikuti dengan data ADC.

 

BACK NEXT

Komentar, pertanyaan dan diskusi tentang topik tersebut. Klik disini

 

 

PERCOBAAN 1
LED

PERCOBAAN 2
SAKLAR

PERCOBAAN 3
7 Segmen

PERCOBAAN 4
LCD Character

PERCOBAAN 5
ADC

PERCOBAAN 6
DAC

PERCOBAAN 7
Keypad

PERCOBAAN 8
Motor Stepper

PERCOBAAN 9
Timer Counter

PERCOBAAN 10
Komunikasi Serial

PERCOBAAN 11
Interupsi

PERCOBAAN 12
Keyboard PC

PERCOBAAN 13
Printer Dot Matr.

PERCOBAAN 14
RTC12C887

PERCOBAAN 15
P W M

APLIKASI