Gunakan MimeTex/LaTex untuk menulis simbol dan persamaan matematika.

Welcome to Forum Sains Indonesia. Please login or sign up.

April 23, 2024, 03:12:00 PM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 139
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 137
Total: 137

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

bantuan dong...

Dimulai oleh erik hardianto, April 15, 2009, 03:58:08 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

erik hardianto

bahasa assembly pake AT89C51

1. cara program buat keluarin data dari port.
2. cara terima input ke port. (data paralel)
3. inisialisasi port I/O. programnya kaya apa ya?
4. contoh prog, LCD
makasih,,,

kuin

$mod51
Org   00h      ;alamat awal program
ljmp    isidata
org     0003h           ; vektor external interrupt 0
   rs      bit     p3.6
   en      bit     p3.7
   dispclr equ     00000001b          ; display clear
   funcset equ     00111000b          ; interface data length 8-bit
   entrmod equ     00000110b          ; increment, no display shift
   dispon  equ     00001100b          ; display on cursor off blink off
   cursor  equ     00001110b          ; display on cursor on  blink off
   blink   equ     00001101b       ; display on cu
;------------------------------------------
;program utama
;------------------------------------------
isidata:
   lcall   initLCD
        setb    EX0
        setb    ET0
        mov     IP,#00000011b
        mov     sp,#1fh
        mov     tmod,#01h         ;  timer 0 16 bit
        mov     th0,#60             ;  100 kristal 12MHz --> tundaan 0.01 detik
        mov     tl0,#176          ;  0
        setb    tr0
        setb    EA
;-------------------------------------------
   mov    a,#1
   mov    dptr,#judul1
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul2
   lcall   kirimlcd2
   lcall   tunda
   lcall   tunda
;-------------------------------------------
mulai:
   mov    a,p1
cek1:
   cjne    a,#11111110b,cek2
   mov    a,#1
   mov    dptr,#utara
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek2:
   cjne    a,#11111101b,cek3
   mov    a,#1
   mov    dptr,#timurlaut
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek3:
   cjne    a,#11111011b,cek4
   mov    a,#1
   mov    dptr,#timur
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek4:
   cjne    a,#11110111b,cek5
   mov    a,#1
   mov    dptr,#tenggara
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek5:
   cjne    a,#11101111b,cek6
   mov    a,#1
   mov    dptr,#selatan
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek6:
   cjne    a,#10111111b,cek7
   mov    a,#1
   mov    dptr,#baratdaya
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek7:
   cjne    a,#01111111b,cek8
   mov    a,#1
   mov    dptr,#barat
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
cek8:
   cjne    a,#11011111b,ulang
   mov    a,#1
   mov    dptr,#baratlaut
   lcall   kirimlcd1
   mov   a,#1
   mov   dptr,#judul
   lcall   kirimlcd2
ulang:
   ljmp   mulai
;-----------------------------------------
;kirim data ke LCD baris 1 dan 2
;-----------------------------------------
kirimlcd1:
   lcall   wrl1
   lcall   outstr
   ret
kirimlcd2:
   lcall   wrl2
   lcall   outstr1
   ret
;---------------------------------------------
; rutin LCD
;---------------------------------------------
initlcd:
        mov    a,#dispclr
        lcall  wir
        lcall  delaylcd
        mov    a,#funcset
        lcall  wir
        mov    a,#dispon
        lcall  wir
        mov    a,#entrmod
        lcall  wir
        ret
delaylcd:
        mov     r6,#20h
loopdelaylcd:
        mov     r7,#0
        djnz    r7,$
        djnz    r6,loopdelaylcd
        reti
wrl1:
     ;   mov    a,#1
        add    a,#80h
        dec    a
        sjmp   wrline
wrl2:
     ;   mov    a,#1
        add    a,#0c0h
        dec    a
wrline:
        mov    p0,a   ;data LCD dikeluarkan ke port 0
        lcall   wir
        ret

outstr:
        ;push    acc
        sjmp    outstr2
outstrloop:
        lcall   wdr
        inc     dptr
outstr2:
        clr     a
        movc    a,@a+dptr
        jnz     outstrloop
        ;pop     acc
        ret
outstr1:
        ;push    acc
        sjmp    outstr3
outstrloop1:
        lcall   wdr
        inc     dptr
outstr3:
        clr     a
        movc    a,@a+dptr
        jnz     outstrloop1
        ;pop     acc
        ret
wir:
        clr    rs                ; rs = 0 -> write to instruction register
        setb   en
        sjmp   wout
wdr:
        setb   rs
        setb   en
wout:
        mov    p0,a
        mov    r6,#100
        djnz   r6,$
        clr    en
        ret
;---------------------------------------------------
; Program waktu tunda 6 detik
;---------------------------------------------------
Tunda:
   Acall   Delai_3s   ;delai 3 detik
Delai_3s:
   Mov   R1,#8      ;pindahkan data 8 ke alamat R1
LoopA:
   Mov   R2,#250      ;pindahkan data 250 ke alamat R2
LoopB:
   Mov   R3,#250      ;pindahkan data 250 ke alamat R3
LoopC:
   Djnz   R3,LoopC
   Djnz   R2,LoopB
   Djnz   R1,LoopA
   Ret
;------------------------------------------
;tampilan data LCD 8 bit
;------------------------------------------
judul:       db 'speed = 00.00 m/s',0
judul1:      db 'TGA Agustus 2007 ',0
judul2:      db '    Arah angin   ',0
utara:       db 'UTARA        ',0
timurlaut:    db 'TIMUR LAUT       ',0
timur:       db 'TIMUR            ',0
tenggara:    db 'TENGGARA         ',0
selatan:    db 'SELATAN          ',0
baratdaya:    db 'BARAT DAYA       ',0
barat:       db 'BARAT            ',0
baratlaut:    db 'BARAT LAUT       ',0
;-------------------------------------------
end