Counter 7Segment dengan AVR Assembler dari 00 – 99

Kali ini saya akan memberikan tutorial untuk menampilkan display angka pada Seven Segment dengan program AVR Studio atau winAVR.
Rangkaian Skematiknya sbb:
cara untuk menampilkan tulisan pada Seven Segment dengan AVR Studio ini, cara pertama listing programnya sebagai berikut:
;Program pencacah dari 00 s/d 99 dengan tampilan 7-segment
.include “m8535def.inc”
.def angka =r18
.org 0×0000
rjmp utama
utama:
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, 0xff                      ;inisialisasi port A dan Port B sebagai output
out DDRB, r16
out portb,r16
out DDRA, r16
out portA,r16
atas2:
clr r25                              ;inisialisasi counter=0
atas:
mov r4,r25
ulangi:
rcall bagi
push r16              ;simpan sementara “hasilbagi” pada stack
mov angka,r4    ;salin “sisa hasilbagi” ke “angka”
rcall konversi    ;konversi “sisa bagi” menjadi “kode tampilan” 7-segmen
mov r9,r0           ;simpan “kode tampilan” ke r9
pop angka           ;ambil kembali “hasilbagi” dari stack ke “angka”
rcall konversi    ;konversi “hasilbagi” menjadi “kode tampilan” 7-segmen
mov r10,r0        ;simpan “kode tampilan” ke r10
tunda:
ldi r20,$3
tunda1:      ldi r21,255
tunda2:
out PORTB,r9                ;Keluarkan ke Port B –> 7-segmen
ldi r19,0b01111111    ; nyalakan 7-segmen
out PORTA,r19
rcall delayscan             ;Panggil rutin delay
out PORTB,r10             ;Keluarkan ke Port B –> 7-segmen
ldi r19,0b10111111    ;nyalakan 7-segmen
out PORTA,r19
rcall delayscan             ;Panggil rutin delay
dec r21
brne tunda2
dec r20
brne tunda1
inc r25
cpi r25,100
brne atas
rjmp atas2
konversi:
clr r2
ldi zh,high(Numerik<<1)    ;Isikan r31:r30 dengan alamat Numerik
ldi zl,low(Numerik<<1)
add zl,angka                              ;Tambahkan z dengan angka
adc zh, r2
lpm                                               ;salin data numerik ke r0 yang ditunjuk oleh z
ret
delayscan:
ldi r16,20
loop1:
ldi r17,100
loop2:
dec r17
brne loop2
dec r16
brne loop1
ret
bagi:
;r4 = bilangan yang akan dibagi (dividend)
;r3 = bilangan pembagi (divisor)
ldi r16,10
mov r3,r16
ldi r16,0                          ;inisialisasi hasilbagi
lagi:    cp r4,r3              ;r4 = dividend/sisa dan r3 = pembagi
brlo ENDWHILE
inc r16                              ;r16 = hasilbagi
sub r4,r3
rjmp lagi
ENDWHILE:
ret
Numerik:    ;Tabel konversi kode 7-segmen
.db    0xc0,    0xf9,    0xa4,    0xb0,    0×99,    0×92,    0×82,    0xf8,    0×80,    0×90
;     0     1     2     3     4     5    6     7    8    9

Program di atas fungsinya yaitu untuk menampilkan angka 00 sampai 99 pada 7 segment display menggunakan AVR Assembler.
Selamat Mencoba :D

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s