Friday, March 4, 2011

The Lost Microcontrol Tutorial

Sekitar tahun 2004 saya menemukan web site yang berisi tutorial tentang mikrokontrol 8051 buatan Sekolah Tinggi Teknologi Surabaya (STTS), alamat webnya kalau tidak salah http://alds.stts.edu. Isinya sangat bagus sekali dan banyak di kopi paste blogger lain, sayang nya website tsb sudah tidak aktif lagi.
Untungnya Saya sempat mengkopi sebagian besar materi tentang mikrokontrol, yaitu:

Applikasi - Emulator AT89C2051
Pengetahuan Dasar AT89Cx051 bagian I & II
Instruksi MCS51 û Bagian I, II, & III
Port Parelel MCS51
Port Seri MCS51
Sistem Interupsi MCS51
Timer dan Counter dalam MCS51
Teknik Pemrograman 1 - Pengetahuan Dasar Program Assembly
Teknik Pemrograman 2 - Struktur Program Assembly
Teknik Pemrograman 3 - Pembentukan Variable secara Assembly
Teknik Pemrograman 4 - Pembentukan konstanta secara Assembly
Sistem Interface Input-Output
Teknik Interface 1 - Keyboard IBM PC
Teknik Interface 1a - Keypad heksadesimal
Teknik Interface 2A - Epson SED1200 LCD Module
Teknik Interface 2B - Seiko Instrument M1632 LCD Module
Teknik Interface 3A - Dual Tone Multiple Frequency
Teknik Interface 3B - Anti Interlokal & Pemantau nada DTMF
Teknik Interface 4A - I2C Serial EEPROM
Teknik Interface 4B - I2C Serial EEPROM Copier
Teknik Interface 5 - Komunikasi Seri Asinkron
Teknik Interface 5 - Komunikasi Seri Asinkron (C) - Remote
Teknik Interface 5 - Komunikasi Seri Asinkron (D) - RS232
Teknik Interface 5 - Komunikasi Seri Asinkron (E) - RS485
Teknik Interface 5 - Komunikasi Seri Asinkron B
Teknik interface 6 Menghubungkan AD-C dan DA-C ke MCS51
Teknik interface 7 Mengatur daya secara æphase controlÆ den~1
Teknik interface 8 AT89Cx051
Jam Digital
Matrix Led Display for BMP Picture
Applikasi - Pengukur Jarak dengan Ultra Sonic
Super Sonic Range Meter
BASIC-52 Single Board Computer
Berbahasa C dengan MCS51

File-file tsb diatas saya upload dan bisa di donlot di:
http://www.4shared.com/file/H6qdq4x8/mikrokontrol_8051_part_1-_4.html
http://www.4shared.com/file/gLmDEv-p/mikrokontrol_8051_part_57.html

Sebagian lagi masih saya cari cari karena ada file yang ke "move". atau ada dari pembaca atau penulis aslinya yang mau share?

Ps: Jika ada penulis asli dari artikel tersebut merasa keberatan karena tulisannya saya sebarkan, silahkan tulis koment agar bisa saya remove.

Monday, October 27, 2008

Abi in actions

Selasa, 14 October 2008, pukul 13:46, telah lahir putra pertama kami bernama:

Jenthoro Abiromo Wibowo Reksoprodjo





Tuesday, September 16, 2008

KEYPAD DAN 7 SEGMENT


Bill Of Material:

Keypad:

  • mikro switch atau push button 16bh

  • J1 konektor SIP/M 8 pin 1 bh

Modul 7 Segment:

  • 7Segment Common Anode 4bh

  • IC 74LS247

  • Resistor 220 4bh

  • Transistor 557 4bh

Keypad SW1 disusun dari 16 buah mikro switch dan untuk melihat tampilan dari Keypad, kita memakai modul 7segmen. Prinsip dasarnya P1.0-p1.3 (baris) dijadikan input dan di program bernilai high untuk dapat bekerja. sedangkan p1.4-p1.7 (kolom) dijadikan output dan dibuat low secara berurutan sehingga ketika ada tombol yang ditekan, port 1 selalu memiliki 2 bit yang bernilai low. Baris bisa juga di beri high dengan cara menyambungkan pin p1.0-p1.3 ke vcc melalui resistor 220 ohm.


Contoh Program 1, bila keypad di tekan, nilainya akan tampil pada 7 segment paling kanan saja. bila tombol A,B,C,D,E dan F yang ditekan, yang terlihat pada 7 segmennya tidak seperti huruf tsb. karena IC 74LS247 mendefinisikan huruf2 tsb dalam bentuk lain.

#include

;KEYPAD KE PORT 1

;7SEGMEN KE PORT 2

;+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:
; KEYPAD TO 7SEGMENT :
; KEYPAD KE P1 :
; 7SEGMENT KE P2 :
;+:+:+:+:+:+:+:+:+:+:+:+:+:+:+:

org 0

UTAMA:
ACALL BACAKEYPAD
MOV A,R2
ACALL SEGMEN1

SJMP UTAMA

SEGMEN1: ;+:+:+:+ SUB RUTIN MENGHIDUPKAN 7SEGMENT :+:+:+:+:+:
clr p2.4
acall delay
setb p2.4
acall delay
ORL A,#0E0H
MOV P2,A
ACALL DELAY
RET


BACAKEYPAD: ;+:+:+:+: SUB RUTIN BACA KEYPAD :+:+:+:+:+:+:+:

MOV A,#11111110B ; aktifkan output kolom(MSB) 1, input Baris(LSB) dibuat high
MOV P1,A
CJNE A,P1,Periksa
MOV A,#11111101B ; aktifkan output kolom(MSB) 2, input Baris(LSB) dibuat high
MOV P1,A
CJNE A,P1,Periksa
MOV A,#11111011B ; aktifkan output kolom(MSB) 3, input Baris(LSB) dibuat high
MOV P1,A
CJNE A,P1,Periksa
MOV A,#11110111B
MOV P1,A ; aktifkan output kolom(MSB) 4, input Baris(LSB) dibuat high
CJNE A,P1,Periksa ;A<>P1 : Ada Tombol Ditekan
CLR C ;Tombol tidak ditekan
RET

Periksa:
MOV B,P1 ;Simpan P1 ke B
MOV R2,#0 ;Mulai No 0 sampai 16

Lainnya:
MOV A,R2
ACALL BacaKombinasi ;Ambil Isi Tabel ke A
CJNE A,B,TidakSama ;
MOV A,R2 ;Ya, A := No Tombol
acall delay
SETB C ;Ada Tombol ditekan
RET

TidakSama:
INC R2 ;No Tombol Lainnya
CJNE R2,#16,Lainnya ;Sudah semua tombol?
CLR C ;Ya, tidak ada Tombol ditekan
RET



BacaKombinasi:

INC A ;‘melompati’ instruksi RET
MOVC A,@A+PC ;ambil isi Tabel Kombinasi Baris/Kolom
RET

;+:+:+:+:+:+:+:+:+: Tabel Kombinasi Baris dan Kolom :+:+:+:+:+:+:+:

db 7dh ;01111101B ; 0
db eeh ;11101110B ; 1
db edh ;11101101B ; 2
db ebh ;11101011B ; 3
db DEH ;11011110B ; 4
db DDH ;11011101B ; 5
db DBH ;11011011B ; 6
db BEH ;10111110B ; 7
db BDH ;10111101B ; 8
db BBH ;10111011B ; 9
db 7EH ;01111110B ; A
db 7BH ;01111011B ; B
db E7H ;11100111B ; C
db D7H ;11010111B ; D
db B7H ;10110111B ; E
db 77H ;01110111B ; F

;+:+:+:+:+:+:+:+:+:+: SUB RUTIN DELAY :+:+:+:+:+:++:++:++:++:
delay: mov 30h,#50 ;nilai 30h, 31h, 32h adalah internal RAM
loop03: mov 31h,#50 ;nilai2 tsb bisa di ganti dengan q1,q2,q3 caranya:
loop04: djnz 31h,loop04 ;q1 equ 30h
djnz 30h,loop03 ;q2 equ 31h
ret ; q3 equ 32h

Relay, Optocoupler dan Speaker


Bill Of Material:

  • Relay 5v 2 bh

  • R 22k 8bh

  • R 10k 2bh

  • Optocoupler 817 2bh

  • Tr 1815 2bh

  • Tr 1015 1bh

  • LED 1bh

  • Bohlam12v 1bh

  • Batere12v 1bh

  • Speaker 8 ohm atau buzzer handphone 1bh

  • Sakelar SPST 1bh

Relay, OptoCoupler dan Speaker pada rangkaian ini dimaksudkan untuk pengalamatan bit (masing-masing pin di atur secara individual) untuk memberikan gambaran variasi apa saja yang bisa dibuat dengan relay dan optocoupler, sedangkan Speaker sebagai tambahan untuk output saja.

  • Port P2.1 menjadi input dan bernilai high jika Saklar S1 hidup.


Contoh Program 1, membunyikan Speaker pada port P2.0. sebenarnya sama saja dengan program untuk membuat sebuah LED menyala kedap-kedip. dimana tinggi rendahnya suara ditentukan dari subrutin tunda.

#include

START:
SETB P2.0
ACALL TUNDA

CLR P2.0
ACALL Tunda

SJMP START

;Subrutin tunda

tunda: mov 30h,#10 ;nilai 30h, 31h, 32h adalah internal RAM
loop03: mov 31h,#20 ;nilai2 tsb bisa di ganti dengan q1,q2,q3 caranya:
loop04: djnz 31h,loop04 ; q1 equ 30h
djnz 30h,loop03 ; q2 equ 31h
ret ; q3 equ 32h
end

Contoh Program 2, menghidupkan dan mematikan Relay 5V selama 1 detik. lampu dan LED akan kedap-kedip tiap 1 detik.

Tegangan high pada P2.7, akan membuat Q1 1815 bekerja menghidupkan relay, sehingga kaki 1 akan terhubung ke kaki 2 pada relay untuk menyalakan lampu L1 yang di beri tegangan 12v. LED juga akan menyala bersamaan dengan L1.

; menghidupkan Relay di Port P2.7
#include

;Program utama ---------------------------------------------;
main:
clr p2.7
acall delay

setb p2.7
acall delay

;delay 1 detik----------------------------------------------;
;DGN XTAL 11,05 = 2 SEC

delay: mov 32h,#200
loop3: mov 31h,#100
loop2: mov 30h,#50
loop1: djnz 30h,loop1
djnz 31h,loop2
djnz 32h,loop3
ret

end

Ganti P2.7 dengan P2.6 pada program diatas, akan membuat p2.4 dan p2.5 mendapat pulsa high - low tiap 1 detik. Tegangan high pada P2.6, membuat relay menyambungkan P2.5 dan P2.4 ke ground.

 

Interfacing Komunikasi Serial PC dengan AT89S52


Bill of material :

  • IC MAX232 1bh

  • Elko 10uF/16v 5bh

  • DB9/M 1bh

  • Koneltor SIL/M 4pin

Untuk mempermudah pembahasan, komunikasi serial berikut diatur secara Asinkron (mode 1,2 dan 3), dimana Mikrokontrol mengirim data melalui pin TX, dan menerima melalui pin RX. Tetapi Rangkaian berikut ini bisa juga bekerja pada mode 0 (Mengirim dan menerima melalui pin RX dan sinyal Clock melalui pin TX).

  • AT89S52 mengirim data di TX port 3.0 lalu ke PC melalui pin RX (2) konektor DB9/F

  • AT89S52 menerima data di RX port 3.0 dari PC melalui pin TX (2) konektor DB9/F

  • Pin RTS dan CTS hanya sebagai cadangan, bisa di koneksikan ke port I/O mikrokontroller yang kita inginkan.

Karena level tegangan Port Comm Rs232 pada PC adalah logic inverse yaitu low = -12 dan high = +12, diperlukan konverter perubah tegangan menjadi TTL (low= 0 dan High = 5) dengan IC MAX232. Jangan lupa pilih Elko yang kemampuan tegangannya lebih besar dari 12v, karena walau di beri tegangan 5v, MAX mampu memompa jadi 12v (itu gunanya c3 dan c4).


Program yang dipakai untuk melihat data pada PC, bisa memakai Hyperterminal, Lync, Xtalk dsb. yang perlu diperhatikan adalah pengaturan kecepatan Baudrate, Data Bits, Parity, Stop Bits dan Flow control pada program tersebut harus sama dengan pengaturan pada mikrokontrol yang di atur oleh program asembler (lihat Komunikasi dengan Port Serial (Rs 232)).

contoh program 1, mengirim data ke PC, Coba experiment dengan mengganti kata "start" (warna ungu) dengan "$".

; PROGRAM UNTUK MENGIRIM KATA "ACe"
#include
;-----------------------;
;PROGRAM UTAMA ;
;-----------------------;

START:
ACALL INIT ; MOV R1, "B"

MOV R1,#'A'
MOV A,R1
ACALL KIRIM

MOV R1,#'C'
MOV A,R1
ACALL KIRIM

MOV R1,#'e'
MOV A,R1
ACALL KIRIM

SJMP Start ; Ganti "Start" dengan "$" artinya kirim jika di reset

;----------------------------------------;
;PROGRAM KOMUNIKASI SERIAL ;
;----------------------------------------;

INIT: ;INISIALISASI U/ MENENTUKAN MODEnya
MOV SCON,#50H ;SERIAL PORT MODE1 0101-0000
MOV TMOD,#20H ;TIMER1 DI MODE2 #20H
MOV TH1,#0FDH ;KEC BAUDRATE 9600 BPS = #FDH
SETB TR1 ;START TIMER
RET

KIRIM:
MOV SBUF,A ;DATA YANG DIKIRIM MASUK KE A
JNB TI,$
CLR Ti
RET

END

Contoh Program 2 dengan pengaturan CRLF (Ganti baris). Kec Baudratenya sama dengan diatas. cobalah hapus tanda ";" di awal baris "lcall lfeed" pada bagian label "start" (warna kuning).

#include

start:
lcall init
mov a,#'Z'
lcall kirim
mov a,#'O'
lcall kirim
mov a,#'N'
lcall kirim
mov a,#'E'
lcall kirim
mov a,#' '
lcall kirim
lcall crlf
;lcall lfeed ;sekarang coba hapus tanda ";" di awal baris ini
sjmp start ;loop 4 ever

init: ; pengaturan mode dan kec.
mov scon,#50h
mov tmod,#20h
mov th1,#0fdh
setb tr1
ret

kirim: ;Kirim data serial
mov sbuf,a
jnb ti,$
clr ti
ret

crlf: ; ini subrutin crlf
mov a,#0dh
lcall kirim

lfeed: ; yang ini subrutin lfeed (gampang yah)

mov a,#0ah
lcall kirim
ret


end
 

Contoh program3 mengirim kata dengan db

#include
UTAMA:
ACALL INIT_SERIAL
mov dptr,#kata
lcall kirimStr
acall kirim
lcall crlf
lcall lfeed
SJMP $

INIT_SERIAL: ;INISIALISASI U/ MENENTUKAN MODEnya
MOV SCON,#50H ;SERIAL PORT MODE1 0101-0000
MOV TMOD,#20H ;TIMER1 DI MODE2 #20H
MOV TH1,#0FDH ;KEC BAUDRATE 9600 BPS = #FDH
SETB TR1 ;START TIMER
ret

KIRIM: ;kirim ke serial
MOV SBUF,A
JNB TI,$
CLR TI
RET

kirimStr: ;kirim karakter string dalam kode memori
clr a
movc a, @a+dptr
jz _ss01
lcall kirim
inc dptr
sjmp kirimStr
_ss01:
ret

crlf: ;mengatur pindah baris
mov a,#0dh ;tulis ke baris itu juga (niban)
lcall kirim
lfeed: mov a,#0ah ;pindah baris
lcall kirim
ret

KATA:
db "hello "
db "world"
END

ADC 8bit 0804


Bill of Material ADC 0804:

  • IC ADC0804

  • Resistor 10k 2 bh

  • Resistor 1k 2 bh

  • Kapasitor 150p 1bh

  • Potongan Soket IC 3pin 1 bh

  • konektor SIL 8 pin/M 1 bh

  • Kabel Flat + konektor SIL 8 pin/F 2 bh

  • VR 10k Ohm 1 bh

Untuk merubah tegangan analog ke Digital dalam rangkaian ini dipakai ADC 0804 dengan ketelitian 8 bit. artinya:

tegangan input Vin berasal dari "sensor" (dalam rangkaian ini di ganti dengan VR 10k Ohm) akan memberikan tegangan berkisar 0 sampai 5 volt .

Ketelitian = (Tegangan Max - Tegangan Min) / 2 Pangkat 8

= 5/256

=20 mv

Jadi setiap kenaikan tegangan pada Vin sebesar 20 mv, outputnya akan naik 1 digit.

Tegangan (v) Bits
0 0000 0000
0,02 0000 0001
0,04 0000 0010
... ...
5 1111 1111

Saat memulai konversi, pin WR di beri logika 0, setelah selesai ADC akan mengirim sinyal INT.

Cara mengetes ADC:

Sambungkan konektor SIL 8 pin ADC dengan konektor SIL 8 pin ADC memakai Kabel Flat + konektor SIL 8 pin.

Pada saat Resistansi VR Paling besar (10K ohm) atau putar berlawanan jarum jam, lampu LED mati semua.

Pada saat Resistansi VR paling kecil (0 ohm) atau putar searah jarum jam, lampu LED nyala semua.

Contoh program 1:

Pin INT dan WR tidak perlu di hubungkan ke AT89S52, dan Pin RD di hubungkan ke ground

; program mengambil data analog ke ADC (pakaidelay)

; di sambungkan dengan modul 7segment untuk tampilannya

#include


digit0 equ 30h ;inisialisasi internal RAM untuk 7 Segment
digit1 equ 31h
digit2 equ 32h
digit3 equ 33h

org 0
ljmp main

Main:
ACALL ADC_Delay
ACALL Display7 ; panggil DISPLAY 7 untuk di isikan data dari A
sjmp Main


;display
Display7:
MOV Digit3,#0 ;Digit3=7s sebelah kiri
MOV B,#100
DIV AB
MOV Digit2,A ;Digit2=7s ke-2sebelah kiri
MOV A,B
MOV B,#10
DIV AB ;A bagi B Hasilnya di A, sisanya di B-
MOV Digit1,a ;- Cth 125/100 = A=1, B=25
MOV Digit0,B ;Digit0=7s sebelah kanan


MOV A,Digit0
ORL A,#0E0h ;1110 0000b = posisi 7s paling kanan
MOV P2,A
ACALL Delay
MOV A,Digit1
ORL A,#0D0h ;1101 0000b
MOV P2,A
ACALL Delay
MOV A,Digit2
ORL A,#0B0h ;1011 0000b
MOV P2,A
ACALL Delay
MOV A,Digit3
ORL A,#70h ;0111 0000b = posisi 7s paling kiri
MOV P2,A
ACALL Delay
RET


; +:+:+::+:+:+:+:+:+:+:+SUBRUTIN DELAY pakai timer
DELAY:
MOV R0,#00h
LAGI:
MOV TMOD,#01h
MOV TL0,#0dfh ;menentukan besarnya timer
MOV TH0,#0b1h
SETB TR0
Ulang:
NOP
JBC TF0,Hitung
SJMP Ulang
Hitung:
INC R0
CLR TR0
CJNE R0,#01h,Lagi ; 64 kali looping
Ret


;ADC_Delay: - selama menunggu konversi dari analog ke digital
ADC_Delay:
setb p3.6 ;penanda ADC untuk mulai konversi
clr p3.6 ;penanda ADC untuk mulai konversi
setb p3.6 ;penanda ADC untuk mulai konversi
acall delay
setb p3.7
clr p3.7
mov a,p0
setb p3.7
ret
end
 

Contoh program 2:

Pin INT dan di hubungkan ke AT89S52, dan Pin RD di hubungkan ke ground

; program mengambil data analog ke ADC dengan teknik polling
;sama dengan yang pakai
#include


digit0 equ 30h ;INISIALISASI MIS DIGIT 0 ADA DIALAMAT 30H
digit1 equ 31h
digit2 equ 32h
digit3 equ 33h

org 0
ljmp main


Main:
ACALL ADC_poling
ACALL Display7 ; panggil DISPLAY 7 untuk di isikan data dari A
sjmp Main


;display
Display7:
MOV Digit3,#0 ;Digit3=7s sebelah kiri
MOV B,#100
DIV AB
MOV Digit2,A ;Digit2=7s ke-2sebelah kiri
MOV A,B
MOV B,#10
DIV AB ;A bagi B Hasilnya di A, sisanya di B-
MOV Digit1,a ;- Cth 125/100 = A=1, B=25
MOV Digit0,B ;Digit0=7s sebelah kanan


MOV A,Digit0
ORL A,#0E0h ;1110 0000b = posisi 7s paling kanan
MOV P2,A
ACALL Delay
MOV A,Digit1
ORL A,#0D0h ;1101 0000b
MOV P2,A
ACALL Delay
MOV A,Digit2
ORL A,#0B0h ;1011 0000b
MOV P2,A
ACALL Delay
MOV A,Digit3
ORL A,#70h ;0111 0000b = posisi 7s paling kiri
MOV P2,A
ACALL Delay
RET


; SUBRUTIN DELAY pakai timer
DELAY:
MOV R0,#00h
LAGI:
MOV TMOD,#01h
MOV TL0,#0dfh ;223 menentukan besarnya timer
MOV TH0,#0b1 ;177
SETB TR0
Ulang:
NOP
JBC TF0,Hitung
SJMP Ulang
Hitung:
INC R0
CLR TR0
CJNE R0,#01h,Lagi ; 64 kali looping
Ret


;ADC_poling
ADC_Poling:
setb p3.6
clr p3.6
setb p3.6
JB INT0,$
setb p3.7
clr p3.7
mov a,p0
setb p3.7
ret
end
 

Wednesday, April 23, 2008

Interfacing 16 LED dengan AT89S52


Bill of Material:

  • Power Supply 5v

  • ISP board

  • LED Merah 8 bh

  • LED Hijau 8 bh

  • R 10k 16 bh

  • Konektor SIL 8 pin/M 2 bh

  • Kabel Flat + konektor SIL 8 pin/F 2 bh


Rangkaian tersebut di sambungkan ke port-port pada AT89S52 dimana pin pin dari 2x 8 bh R 10k ohm di sambungkan dengan port 0 dan port 2 memakai kabel flat yang ujungnya dipasang konektor SIL 8 pin/F.

Led 1 akan menyalah bila Pin pada port 0.0 dibuat low yaitu tegangan 0v (pengalamatan bit / bit) dengan perintah:

setb p0.0

atau dengan pengalamatan byte:

mov p0,#01h

Contoh program 1 (Menggunakan Rigel):

; Port 2.0 kedap-kedip

#include

START:
SETB P2.0
ACALL TUNDA

CLR P2.0
ACALL Tunda

SJMP START

;Subrutin tunda

Tunda:

MOV R7,#ffh
ULANG2:
MOV R6,#ffh

ULANG1:
MOV R5,#00h

ULANG:
INC R5
CJNE R5,#30h,ULANG
INC R6
CJNE R6,#30h,ULANG1
INC R7
CJNE R7,#30h,ULANG2
RET

end

Contoh program 2 (Menggunakan Rigel):

;Port 2 jalan bolak - balik

#include

START:
MOV A,#feh ;Akumulator A diberi =11111110b
Mov p2,A ;isi A di pindahkan ke P2

ACALL TUNDA ;Panggil subrutin tunda

GESER:

RL A ; A digeser kekiri
MOV P2,A ; nilai A diatas di pindahkan ken port 2
ACALL TUNDA
SJMP GESER ; loncat ke GESER


; SUBRUTIN TUNDA
TUNDA:

MOV R7,#0
ULANG2: MOV R6,#0
ULANG1: MOV R5,#0
ULANG: INC R5
CJNE R5,#50h,ULANG
INC R6
CJNE R6,#50h,ULANG1
INC R7
CJNE R7,#50h,ULANG2
ret


END

Contoh Program 3:

Port 0 dan port 2 jalan

#include

START:
MOV A,#fdh
Mov p2,A
mov p0,#ffh
ACALL TUNDA

GESER: RL A
MOV P2,A
ACALL TUNDA
CJNE A,#7Fh,GESER

Mov p2,#ffh
mov p1,#feh

ACALL TUNDA

GESER2: RL A
MOV P0,A
ACALL TUNDA
CJNE A,#7Fh,GESER2
SJMP START



;SUBRUTIN LAMPU BOLAK-BALIK
JAL_BLBK:
MOV R4,#03H
MOV A,#01H
LAGI:
MOV P0,A
ACALL TUNDA
RL A
CJNE A,#01H,LAGI
LAGI2:
RR A
MOV P0,A
ACALL TUNDA
CJNE A,#01H,LAGI2
DJNZ R4,LAGI
sjmp START


; SUBRUTIN TUNDA

TUNDA: MOV R7,#0
ULANG2:
MOV R6,#0
ULANG1: MOV R5,#0
ULANG: INC R5
CJNE R5,#20h,ULANG
INC R6
CJNE R6,#30h,ULANG1
INC R7
CJNE R7,#20h,ULANG2
ret

END