LAMPIRAN KODE PROGRAM
#include "p16f877a.inc"__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON &
_HS_OSC & _WRT_OFF & _LVP_OFF &
_CPD_OFF
cblock 0x20 ;deklarikasikan variable dari alamat 20h cacah1,cacah2 ,offsetL1,offsetH1, offsetL,offsetH
tmp1,cacah,kecepatan,test1, test2 endc
cblock 0x30 ;buat array 72 mulai 30h temp:72
endc
;rutin awal program mengatur PORTD,PORTC sebagai keluaran ;membersihkan array
start org 0x00 ;start awal program bsf STATUS,RP0 ; pilih bank 1 movlw 0x00
movwf TRISD ;PortD sebagai keluaran movwf TRISC ;PortC sebagai keluaran bcf STATUS,RP0 ; kembali ke bank 0 call bersihkan ; panggil rutin bersihkan ;membersihkan pointer-pointer dan array
sapu clrf offsetL1 ;clear offsetL1 clrf offsetH1 ;clear offsetH1 clrf offsetL
clrf offsetH clrf PORTC clrf PORTD
call bersihkan ;panggil rutin bersihkan ;rutin untuk mengambil karakter dari string ASCII Ambil_String
call String_Tabel ;panggil rutin String_Table xorlw 0x00 ;cek apakah akhir tabel dari string btfsc STATUS, Z
goto sapu ;jika ya, pergi ke rutin sapu movwf tmp1 ;jika tidak, kirim W ke temp1 movlw 0x20 ;isi W dengan 20h
subwf tmp1, W ;temp1-W, untuk mendapatkan tabel asciinya call Ambil_Char ;panggil rutin Ambil_Char
incf offsetL1,1 ;naikkan offselL1, untuk alamat selanjutnya btfsc STATUS , Z ;lihat apakah terjadi hasilnya nol
incf offsetH1,1 ;jika ya, naikkan offsetH1
goto Ambil_String ;jika tidak pergi ke ruitn Ambil_String ;rutin mengambil data untuk karakter yang didapat pada
;pengambilan alamat data dengan mengurangi nilai hexadesimal ; karakter ASCII dengan 21 lalu di multiply 6
Ambil_Char
movwf offsetL ;copy isi W ke oofsetL movwf test1 ;copy isi W ke test1
clrf offsetH ;clear offsetH bcf STATUS, C ;clear STATUS C rlf offsetL, 1 ;geser offsetL btfsc STATUS,C ; apakah ada Carry incf offsetH,1 ;jika ada naikkan offselH bcf STATUS, C ;clear STATUS C rlf offsetL, 1 ;
btfsc STATUS,C incf offsetH, 1 bcf STATUS, C
movf test1, 0 ;copy isi test1 ke W
addwf offsetL, 1 ;tambahkan isi W dengan offsetL btfsc STATUS,C ;apakah ada Carry
incf offsetH, 1 ;ya, naikkan offselH bcf STATUS,C ;clear STATUS C movf test1, 0
addwf offsetL, 1 btfsc STATUS,C incf offsetH, 1 movlw 0x06
movwf cacah ; cacah=6
;rutin untuk merubah karakter ASCII menjadi font 5x7 LED matriks ;pada rutin ini juga memanggil rutin Geser untuk menggeser nilai pada ;arra,y juga memanggil rutin Tampil
next call Geser ;panggil rutin Geser
call ASCII_Table ;panggil rutin ASCII_Table movwf temp+.72 ;copy isi W ke temp72 call Tampil ;panggil rutin Tampil incf offsetL, 1 ;naikkan offsetL btfsc STATUS, Z ;apakah ada Carry incf offsetH, 1 ;ya, naikkan offsetH
decfsz cacah, 1 ;cacah-1 dan apakah cacah=0? goto next ;tidak, pergi ke next
return ; kembali pada rutin Ambil_string ;rutin untuk megirim data array temp ke PORTD untuk mendapatkan ;penampilan pada LED matriks secara berulang-ulang
Tampil bsf PORTC,1 ;reset pengendali kolom nop
bcf PORTC,1
movlw temp+.0
movwf FSR ;FSR = alamat array 1 Loop movf INDF, 0 ;copy isi INDF ke W
movwf PORTD ;kirim ke PORTD call tunda ;panggil rutin tunda incf FSR, 1 ;FSR+1
movf FSR, 0 ;copy FSR ke W
xorlw temp+.72 ;bandingkan dengan temp72 btfss STATUS,Z ;apakah alamat FSR=temp72? goto Loop ;tidak, ulangi Loop
return ;ya, kembali ke rutin Ambil_Char
;menggeser isi dari data arrya register temp Geser movlw temp+.0
movwf FSR ;FSR = temp awal Loop2 incf FSR,1 ;FSR+1
movf INDF, 0 ; copy INDF ke W decf FSR, 1 ;FSR-1
movwf INDF ;copy W ke INDF incf FSR, 1 ;FSR +1
movf FSR,W
xorlw temp+.72 ;FSR=temp terakhir?
btfss STATUS,Z ;
goto Loop2 ;tidak, pergi ke Loop2 return ;ya, kembali ke Ambil_Char
;mengambil string String_Tabel
movlw High(String) ;W= alamat tinggi string addwf offsetH1, w ;W = offsetH1 + W movwf PCLATH ;copy W ke PCLATH movlw Low(String) ; W= alamat rendah string addwf offsetL1,w ;W= offsetL1 + W btfsc STATUS,C ;apakah STATUS C =0 incf PCLATH, 1 ;ya, naikkan PCLATH movwf PCL ;PCL =W
;mengambil data tabel ASCII_Table
movlw High(Table) ;W= alamat tinggi tabel addwf offsetH, w ;W = offsetH + W movwf PCLATH ;copy W ke PCLATH movlw Low(Table) ; W= alamat rendah tabel addwf offsetL,w ;W= offsetL + W
btfsc STATUS,C ;apakah STATUS C =0 incf PCLATH, 1 ;ya, naikkan PCLATH movwf PCL ;PCL = W
;tundaan untuk nyala/mati LED
;juga sebagai penabuh untuk pengendali kolom tunda
movlw .185 movwf cacah1 delay1
decfsz cacah1,1 ; kurangi nilai cacah1, periksa apakah nol goto delay1
movlw 0x00 ;
clock bsf PORTC,0 ;bandar C pin 1 buat tinggi nop
bcf PORTC,0 ;bandar C pin 1 buat rendah. return
;membersihkan register array Bersihkan movlw temp+.0 movwf FSR bersih clrf INDF incf FSR, 1 movf FSR, 0 xorlw temp+.72 btfss STATUS,Z goto bersih return ; tabel karakter 5x7 Table dt 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ;space dt 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, ;! dt 0x18, 0x60, 0x00, 0x60, 0x18, 0x00, ;" dt 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, ;# dt 0x32, 0x49, 0x7F, 0x46, 0x26, 0x00, ;$ dt 0x32, 0x34, 0x08, 0x16, 0x26, 0x00, ;% dt 0x36, 0x49, 0x4d, 0x52, 0x25, 0x00, ;& dt 0x00, 0x08, 0x78, 0x70, 0x00, 0x00, ;' dt 0x00, 0x3E, 0x41, 0x41, 0x00, 0x00, ;( dt 0x00, 0x41, 0x41, 0x3E, 0x00, 0x00, ;) dt 0x22, 0x14, 0x7F, 0x14, 0x22, 0x00, ; * dt 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, ;+ dt 0x02, 0x06, 0x1C, 0x18, 0x00, 0x00, ;, dt 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, ;- dt 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, ;. dt 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, ; / dt 0x3E, 0x61, 0x59, 0x47, 0x3E, 0x00, ;0 dt 0x00, 0x21, 0x7F, 0x01, 0x00, 0x00, ;1 dt 0x21, 0x43, 0x45, 0x49, 0x41, 0x00, ;2 dt 0x22, 0x41, 0x49, 0x49, 0x3E, 0x00, ;3 dt 0x18, 0x68, 0x08, 0x08, 0x7F, 0x00, ;4 dt 0x7A, 0x49, 0x49, 0x49, 0x46, 0x00, ;5 dt 0x3E, 0x49, 0x49, 0x49, 0x46, 0x00, ;6 dt 0x43, 0x44, 0x48, 0x50, 0x60, 0x00, ;7 dt 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, ;8 dt 0x32, 0x49, 0x49, 0x49, 0x3E, 0x00, ;9 dt 0x00, 0x36, 0x36, 0x00, 0x00, 0x00, ;: dt 0x02, 0x36, 0x34, 0x00, 0x00, 0x00, ;; dt 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, ;< dt 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, ;= dt 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, ;> dt 0x20, 0x45, 0x48, 0x48, 0x30, 0x00, ;?
dt 0x3E, 0x59, 0x65, 0x7D, 0x3A, 0x00, ;@ dt 0x3F, 0x48, 0x48, 0x48, 0x3F, 0x00, ;A dt 0x7F, 0x49, 0x49, 0x49, 0x3e, 0x00, ;B dt 0x3E, 0x41, 0x41, 0x41, 0x32, 0x00, ;C dt 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, ;D dt 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, ;E dt 0x7F, 0x48, 0x48, 0x48, 0x40, 0x00, ;F dt 0x3E, 0x41, 0x49, 0x49, 0x2F, 0x00, ;G dt 0x7F, 0x48, 0x48, 0x48, 0x7F, 0x00, ;H dt 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, ;I dt 0x02, 0x01, 0x41, 0x7E, 0x40, 0x00, ;J dt 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, ;K dt 0x7F, 0x01, 0x01, 0x01, 0x01, 0x00, ;L dt 0x7F, 0x20, 0x10, 0x20, 0x7F, 0x00, ;M dt 0x7F, 0x30, 0x08, 0x06, 0x7F, 0x00, ;N dt 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, ;O dt 0x7F, 0x48, 0x48, 0x48, 0x30, 0x00, ;P dt 0x3C, 0x4A, 0x46, 0x42, 0x3D, 0x00, ;Q dt 0x7F, 0x48, 0x4C, 0x4A, 0x31, 0x00, ;R dt 0x32, 0x49, 0x49, 0x49, 0x36, 0x00, ;S dt 0x40, 0x40, 0x7F, 0x40, 0x40, 0x00, ;T dt 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x00, ;U dt 0x7C, 0x02, 0x01, 0x02, 0x7C, 0x00, ;V dt 0x7E, 0x01, 0x0E, 0x01, 0x7E, 0x00, ;W dt 0x41, 0x38, 0x08, 0x36, 0x41, 0x00, ;X dt 0x40, 0x20, 0x1F, 0x20, 0x40, 0x00, ;Y dt 0x43, 0x45, 0x49, 0x51, 0x61, 0x00, ;Z dt 0x00, 0x7F, 0x41, 0x41, 0x00, 0x00, ;[ dt 0x21, 0x10, 0x08, 0x04, 0x02, 0x00, ;\ dt 0x00, 0x41, 0x41, 0x7F, 0x00, 0x00, ;] dt 0x10, 0x20, 0x40, 0x20, 0x10, 0x00, ;^ dt 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, ;_ dt 0x00, 0x40, 0x70, 0x30, 0x00, 0x00 , ;` dt 0x26, 0x49, 0x49, 0x49, 0x3E, 0x00, ;a dt 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, ;b dt 0x1E, 0x21, 0x21, 0x21, 0x12, 0x00, ;c dt 0x06, 0x09, 0x09, 0x09, 0x7F, 0x00, ;d dt 0x1E, 0x29, 0x29, 0x29, 0x1A, 0x00, ;e dt 0x10, 0x3F, 0x50, 0x50, 0x40, 0x00, ;f dt 0x1A, 0x25, 0x25, 0x25, 0x1E, 0x00, ;g dt 0x7F, 0x08, 0x10, 0x10, 0x0F, 0x00, ;h dt 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, ;i dt 0x00, 0x02, 0x11, 0x5E, 0x00, 0x00, ;j dt 0x7F, 0x0C, 0x12, 0x21, 0x00, 0x00, ;k dt 0x00, 0x7F, 0x01, 0x02, 0x00, 0x00, ;l dt 0x1F, 0x20, 0x1C, 0x20, 0x1F, 0x00, ;m dt 0x1F, 0x20, 0x20, 0x20, 0x1F, 0x00, ;n dt 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, ;o dt 0x1F, 0x24, 0x24, 0x24, 0x18, 0x00, ;p dt 0x30, 0x48, 0x48, 0x48, 0x7F, 0x00, ;q dt 0x7F, 0x20, 0x40, 0x40, 0x20, 0x00, ;r dt 0x1A, 0x25, 0x25, 0x25, 0x12, 0x00, ;s dt 0x10, 0x7E, 0x11, 0x01, 0x02, 0x00, ;t
dt 0x3E, 0x01, 0x01, 0x01, 0x3E, 0x00, ;u dt 0x3C, 0x02, 0x01, 0x02, 0x3C, 0x00, ;v dt 0x3C, 0x02, 0x0E, 0x02, 0x3C, 0x00, ;w dt 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, ;x dt 0x00, 0x32, 0x09, 0x09, 0x3E, 0x00, ;y dt 0x22, 0x26, 0x2A, 0x32, 0x22, 0x00, ;z dt 0x08, 0x36, 0x41, 0x41, 0x00, 0x00, ;{ dt 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, ;| dt 0x00, 0x41, 0x41, 0x36, 0x08, 0x00, ;} dt 0x08, 0x10, 0x08, 0x04, 0x08, 0x00, ; dt 0x10, 0x38, 0x54, 0x10, 0x10, 0x00, ; String
dt "SELAMAT DATANG DIDEPARTEMEN TEKNIK ELEKTRO dt " UNIVERSITAS SUMATERA UTARA
dt " running text by ARIS KANDAR 040402064 dt " perangkat ini masih dalam tahap pengembangan
dt " masih banyak kekurangan yang terdapat dalam perangkat ini dt " terutama sarana komunikasi dengan komputer belum tersedia dt " untuk merubah teks yang ditampilkan perangkat perlu dt " diprogram ulang.
dt " !@#$%^&*()_-++~`<>,.?/1233456789 dt 0x00