     ;*********
     ; TEMPLATE PEMBUATAN PROGRAM DST-52 DENGAN ALDS
 0000                 .DATA 
     ;RAM Internal yang digunakan DST-52
     ;30H - 38H digunakan oleh Program Monitor DDT-52 namun tetap dapat digunakan
     ;pada program aplikasi anda.
     ;39H digunakan oleh variabel delay, bebas digunakan bila rutin2 delay tidak
     ;dipanggil
     ;3AH dan 3BH digunakan oleh variabel Serial EEPROM, bebas digunakan bila rutin2
     ;Serial EEPROM tidak dipanggil
     ;3CH - 4CH digunakan oleh Program Monitor DDT-52 namun tetap bebas anda gunakan
     ;selama proses trace dan breakpoint tidak dilakukan
     ;4DH - 4EH digunakan oleh LCD Grafik, namun bebas digunakan selama rutin-rutin
     ;LCD Grafik tidak dipanggil
     ;50H - 5FH digunakan oleh Program Monitor DDT-52 namun tetap dapat digunakan
     ;pada program aplikasi anda

 0060                 ORG   60H

 0000                 .CODE 


 002E=Hex_ASCII2      EQU   002EH
     ;Konversi Hexa ke 2 byte ASCII
     ;- Akumulator diisi bilangan hexa yang akan dikonversi
     ;Hasil:
     ;- Akumulator menyimpan nibble atas
     ;- Register B menyimpan nibble bawah

 003A=Hex_ASCII1      EQU   003AH
     ;Konversi Hexa ke 1 byte ASCII
     ;- Akumulator diisi bilangan hexa yang akan dikonversi
     ;Hasil:
     ;- Akumulator  menyimpan nibble bawah

 0047=ASCII_HEX       EQU   0047H
     ;Konversi 2 byte ASCII ke hexa
     ;- Akumulator diisi nibble atas
     ;- Register B diisi nibble bawah
     ;Hasil:
     ;- Akumulator menyimpan hasil konversi

 0064=Dec_DPTR        EQU   0064H
     ;Mengurangi isi dari Register DPTR

 0070=Capitalize      EQU   0070H
     ;Mengubah semua jenis huruf kecil menjadi huruf besar

 0082=SPACE_CODE      EQU   0082H
     ;Mengirim kode spasi ke port serial

 008B=Writeext_Memory EQU   008BH
     ;Menulis data ke memori EEPROM
     ;- Akumulator berisi data yang akan ditulis
     ;- DPTR berisi alamat dari data yang akan ditulis

 0090=Delay_1detik    EQU   0090H
     ;Menunda waktu selama 1 detik (timer 0 digunakan)

 0099=Delay_500mS     EQU   0099H
     ;Menunda waktu selama 500 mS (timer 0 digunakan)

 00A2=Delay_100mS     EQU   00A2H
     ;Menunda waktu selama 100 mS (timer 0 digunakan)

 00AB=Delay_75mS      EQU   00ABH
     ;Menunda waktu selama 75 mS (timer 0 digunakan)

 00B4=Delay_5mS       EQU   00B4H
     ;Menunda waktu selama 5 mS (timer 0 digunakan)

 00CB=ASCII_Out       EQU   00CBH
     ;Mengirim data ke port serial dalam 2 byte ASCII
     ;- Akumulator diisi dengan data yang akan dikirim

 00D4=Out_DPTR        EQU   00D4H
     ;Mengirim nilai DPTR dalam bentuk 4 byte ASCII ke port serial

 00DF=Enter_Code      EQU   00DFH
     ;Mengirim kode <CR> ke port serial

 00EC=Init_Serial     EQU   00ECH
     ;Inisialisasi Port Serial 9600 bps

 00FC=Serial_Out      EQU   00FCH
     ;Kirim nilai akumulator ke port serial

 0104=Serial_In       EQU   0104H
     ;Ambil data dari port serial dan simpan di akumulator

 010C=KirimPesan_SeriaEQU   010CH
     ;Kirim data di alamat yang ditunjuk oleh DPTR hingga data 0F
     ;- DPTR diisi dengan alamat dari data yang akan dikirim
     ;- Memori yang diakses adalah memori CODE/PROGRAM

 0118=Filter          EQU   0118H
     ;Menentukan besaran data apakah berada di dalam atau di luar nilai setpoint
     ;- R7 diisi nilai max
     ;- R6 diisi nilai min
     ;- besaran data di akumulator
     ;Hasil:
     ;- Carry flag akan set bila besaran berada di luar nilai setpoint

     ;===================
     ; SERIAL EEPROM
     ;===================
 01A0=Tulis_SEE16b    EQU   01A0H
     ;Menulis data ke Serial EEPROM 16 bit
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- R6 diisi Word Address 2
     ;- Variabel DataSEE diisi data yang akan ditulis

 01B7=Tulis_SEE8b     EQU   01B7H
     ;Menulis data ke Serial EEPROM 8 bit
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- Variabel DataSEE diisi data yang akan ditulis

 01CE=Baca_SEE16b     EQU   01CEH
     ;Membaca data ke Serial EEPROM 16 bit
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- Akumulator berisi data yang telah dibaca

 01E5=Baca_SEE8b      EQU   01E5H
     ;Membaca data ke Serial EEPROM 8 bit
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- Akumulator berisi data yang telah dibaca

 02E3=DPTRSEE8bit     EQU   02E3H
     ;Membaca data dari Serial EEPROM 8 bit
     ;- DPTR sebagai pointer
     ;- Akumulator berisi data yang telah dibaca

 02E8=DPTRSEE16bit    EQU   02E8H
     ;Membaca data dari Serial EEPROM 16 bit
     ;- DPTR sebagai pointer
     ;- Akumulator berisi data yang telah dibaca

 027C=PageSEE8bWrite  EQU   027CH
     ;Menulis data ke Serial EEPROM 8 bit secara page mode (Flag F0 digunakan)
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- Akumulator diisi data yang akan ditulis

 0285=PageSEE16bWrite EQU   0285H
     ;Menulis data ke Serial EEPROM 16 bit secara page mode (Flag F0 digunakan)
     ;- R7 diisi Device Address
     ;- Register B diisi Word Address 1
     ;- Akumulator diisi data yang akan ditulis

 02F2=TulisDPTRSEE8b  EQU   02F2H
     ;Menulis data ke Serial EEPROM dengan menggunakan DPTR sebagai pointer
     ;- DPTR diisi alamat yang akan ditulis
     ;- Variabel DataSEE diisi data yang akan ditulis

 02F7=TulisDPTRSEE16b EQU   02F7H
     ;Menulis data ke Serial EEPROM dengan menggunakan DPTR sebagai pointer
     ;- DPTR diisi alamat yang akan ditulis
     ;- Variabel DataSEE diisi data yang akan ditulis

 003B=DataSEE         EQU   3BH

 039C=Perbandingan16biEQU   039CH
     ;Membandingkan data 16 bit
     ; DPTR = PTR, A = 0
     ; DPTR < PTR, C = 1
     ; DPTR > PTR, C = 0
     ;Untuk Built In Routine
     ; PTR+1 = 3EH
     ; PTR = 3FH

     ;=============
     ;HD44780
     ;=============
 15EA=GeserDisplay_KanEQU   15EAH
     ;Menggeser tampilan LCD HD44780 ke kanan

 15F1=GeserDisplay_KirEQU   15F1H
     ;Menggeser tampilan LCD HD44780 ke kiri

 15F8=Posisi_Awal     EQU   15F8H
     ;Mengatur posisi cursor LCD ke posisi awal

 15FF=GeserCursor_KiriEQU   15FFH
     ;Menggeser Cursor LCD ke kiri

 1606=GeserCursor_KanaEQU   1606H
     ;Menggeser Cursor LCD ke kanan

 160D=KirimPesan_LCD  EQU   160DH
     ;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
     ;- DPTR diisi dengan alamat awal data yang dikirim
     ;- Akhir data adalah 0FH

 1619=Init_LCD        EQU   1619H
     ;Inisialisasi LCD

 1658=Kirim_Perintah  EQU   1658H
     ;Mengirim data ke register perintah LCD
     ;- Data diisi di akumulator

 1677=Kirim_Karakter  EQU   1677H
     ;Mengirim data ke register data LCD
     ;- Data diisi di akumulator

 1681=Baris2          EQU   1681H
     ;Memindah posisi cursor ke baris 2

     ;========== LCD GRAFIK =========
 16A5=InitLCDGRP      EQU   16A5H
     ;Inisialisasi LCD Grafik

 16E4=SetTextHome     EQU   16E4H
     ;Mengatur posisi awal teks
     ;- Akumulator diisi nibble tinggi alamat memori text
     ;- Register B diisi nibble rendah alamat memori text

 16EA=SetGrafikHome   EQU   16EAH
     ;Mengatur posisi awal tampilan grafik
     ;- Akumulator diisi nibble tinggi alamat memori grafik
     ;- Register B diisi nibble rendah alamat memori grafik

 16F0=SetGrafikArea   EQU   16F0H
     ;Mengatur area tampilan Grafik
     ;- Akumulator diisi baris dari LCD grafik
     ;- Register B diisi kolom dari LCD Grafik

 16F6=SetTextArea     EQU   16F6H
     ;Mengatur area tampilan Text
     ;- Akumulator diisi jumlah baris text
     ;- Register B diisi jumlah kolom text

 1708=TextON          EQU   1708H
     ;Mengaktifkan tampilan teks

 1711=GrafikON        EQU   1711H
     ;Mengaktifkan tampilan grafik

 171A=CursorONBlinkON EQU   171AH
     ;Mengaktifkan Cursor dan blinking

 173D=CursorONBlinkOFFEQU   173DH
     ;Mengaktifkan cursor dan no blink

 1747=TextOFF         EQU   1747H
     ;Menonaktifkan teks

 1751=GrafikOFF       EQU   1751H
     ;Menonaktifkan grafik

 175B=TulisDataLCD    EQU   175BH
     ;Menulis data ke memori LCD grafik
     ;- Register B diisi nibble tinggi dari alamat memori LCD
     ;- Akumulator diisi nibble rendah dari alamat memori LCD
     ;- Panggil subroutine SetPointerAlamat
     ;- R7 diisi data yang akan ditulis

 176F=BacaDataLCD     EQU   176FH
     ;Membaca data dari memori LCD Grafik
     ;- Register B diisi nibble tinggi dari alamat memori LCD
     ;- Akumulator diisi nibble rendah dari alamat memori LCD
     ;- Panggil subroutine SetPointerAlamat

 177F=KirimPerintah   EQU   177FH
     ;Mengirim data ke register perintah dari LCD Grafik
     ;==== DATA-DATA PERINTAH ======
 0040=TXHOME          EQU   40H
 0041=TXAREA          EQU   41H
 0042=GRHOME          EQU   42H
 0043=GRAREA          EQU   43H
 0021=SETCURSOR       EQU   21H
 0022=OFFSET          EQU   22H
 0024=ADPSET          EQU   24H
 00B0=AWRON           EQU   0B0H
 00B2=AWROFF          EQU   0B2H
 00B1=ARON            EQU   0B1H
 00B2=AROFF           EQU   AWROFF


 17A7=TungguStatus1   EQU   17A7H
     ;Menunggu status penulisan data ke LCD grafik selesai

 17BD=TungguStatusAWR EQU   17BDH
     ;Menunggu status penulisan data secara otomatis ke LCD Grafik selesai

 17D3=TungguStatusAR  EQU   17D3H
     ;Menunggu status membaca data secara otomatis ke LCD Grafik selesai

 17E9=SetPolaCursor   EQU   17E9H
     ;Mengatur pola cursor LCD
 00A0=Cursor1Line     EQU   0A0H
 00A1=Cursor2Line     EQU   0A1H
 00A2=Cursor3Line     EQU   0A2H
 00A3=Cursor4Line     EQU   0A3H
 00A5=Cursor5Line     EQU   0A5H
 00A6=Cursor6Line     EQU   0A6H
 00A7=Cursor7Line     EQU   0A7H

 17F3=SetPosisiCursor EQU   17F3H
     ;Mengatur posisi cursor LCD
     ;- Register B diisi baris
     ;- Akumulator diisi kolom

 17FC=SetPointerAlamatEQU   17FCH
     ;- Register B diisi alamat nibble tinggi
     ;- Akumulator diisi alamat nibble rendah

 1805=HapusMemori     EQU   1805H
     ;Menghapus memori teks dan memori grafik

 004F=CommandKarakter EQU   4FH
     ; Konstanta Command Karakter di RAM Internal alamat 4FH

 1837=KirimKarakterLCDEQU   1837H
     ;Mengirim karakter ke LCD Grafik
     ;- R7 diisi data karakter
     ;- Akumulator diisi alamat nibble tinggi
     ;- Register B diisi alamat nibble rendah
     ;- Panggil subroutine set pointer alamat
     ;- Tulis CommandKarakter dengan data

 00C0=TulisADPplus    EQU   0C0H
 00C1=BacaADPplus     EQU   0C1H
 00C2=TulisADPminus   EQU   0C2H
 00C3=BacaADPminus    EQU   0C3H
 00C4=TulisADP        EQU   0C4H
 00C5=BacaADP         EQU   0C5H

 8200=CMDP            EQU   8200H
 8000=DP              EQU   8000H

 1844=KirimPesanLCD   EQU   1844H
     ;Mengirim data di alamat yang ditunjuk oleh DPTR ke LCD hingga data 0F
     ;- DPTR diisi dengan alamat awal data yang dikirim
     ;- Akhir data adalah 0FH
     ;- Data di memori data (sinyal RD)

 185E=BacaMemoriLCD   EQU   185EH
     ;Membaca data dari memori LCD dengan DPTR sebagai pointer
     ;- DPTR sebagai pointer alamat
     ;- Data yang dibaca disimpan di akumulator

 1878=TulisMemoriLCD  EQU   1878H
     ;Menulis data dari memori LCD dengan DPTR sebagai pointer
     ;- DPTR sebagai pointer alamat
     ;- Akumulator sebagai data yang akan ditulis


 2000=ROM             EQU   2000H

 2000                 ORG   ROM                    ;Reset Vector
2000  01 24    =2024  AJMP  Start                  ;
 2003                 ORG   ROM+3H                 ;External Interrupt 0 Vector
2003  32              RETI                         ;
 200B                 ORG   ROM+0BH                ;Timer 0 Interrupt Vector
200B  32              RETI                         ;
 2013                 ORG   ROM+13H                ;External Interrupt 1 Vector
2013  32              RETI                         ;
 201B                 ORG   ROM+1BH                ;Timer 1 Interrupt Vector
201B  32              RETI                         ;
 2023                 ORG   ROM+23H                ;Serial Interrupt Vector
2023  32              RETI                         ;
2024             Start:
***** Successfull
