Minggu, 31 Desember 2023

Catatan Pemrograman Assembly mcs51

 -kesalahan sepele yg sulit dicari dari lookup

kadang terjadi kesalahan program yg sulit dicari berjam jam  belum ketemu padahal semua serasa sudah benar , hal ini dapat disebabkan karena kurang teliti dalam penulisan kode dalam lookup yaitu menulis string dan kode hexa

misalkan sbb:

STR1:

DB ‘abcde’;


KODE: (benar bagi compiler , salah bagi programer)

DB ‘001H,002H,003H’;


perhatikan pada contoh diatas pada label STR1 adalah benar , sedangkan pada label KODE adalah salah , sedangkan compiler asm51 tidak menganggap itu salah tetapi menganggap itu adalah string, sedangkan yg kita maksudkan adalah membuat kode hexa, jadi yg benar adalah pada label kode tidak boleh menggunakan tanda petik tunggal (‘) sbb:

STR1:

DB ‘abcde’;


KODE: (benar bagi compiler , benar bagi programer)

DB 001H,002H,003H;


-perbandingan nilai lebih besar atau sama dengan

seringkali kita membuat perbandingan dengan menggunakan perintah CJNE , tetapi perintah ini memliki kelemahan yaitu jika data yg dibandingkan tidak benar2 sama maka akan ditolak sedangkan yg kita butuhkan adalah nilai dalam suatu range data, misal kan jika sebuah data memiliki nilai 0-5 maka data tersebut dianggap tidak valid maka solusinya gunakan perintah SUBB A kemudian cek status C


contoh lebih besar atau sama dengan:

MOV A,ALAMATX ; isi A dengan nilai dari suatu alamat X

SUBB A,#5

JNC DATA_VALID

;berarti nilai dari ALAMATX < 5

...


DATA_VALID:

;berarti nilai dari ALAMATX >= 5

...



-teknik mengisi TMOD

dalam microcontroller (AT89s51) terdapat 2 timer yaitu timer 0 dan timer 1 yg pengaturan menjadi satu dalam satu register TMOD, agar pengaturan masing2 tidak saling mempengaruhi gunakan teknik berikut:


MOV A,TMOD

ORL A,#00000001B ; membuat timer 0 mode 1 tanpa mempengaruhi timer 0

MOV TMOD,A


-hati hati dengan loop DJNZ

jika membuat looping dengan menggunakan DJNZ pastikan jumlah nilai maksimal dalam hitungan benar yaitu nol tidak termasuk dihitung , karena saat hitungan sudah mencapai nilai nol maka proses loop akan berhenti dan melanjutkan instruksi selanjutnya