APLIKASI COUNTER 8 BIT
Gambar 4.4. Blok diagram Timer-Counter sebagai counter 8 bit mode 3
Agar mikrokontroler dapat bekerja sebagai counter 8 bit, maka TMOD harus dikonfigurasikan dengan mengisi data sebagai berikut:
TIMER-COUNTER 1 | TIMER-COUNTER 0 | ||||||
GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
GATE = 0 | :Menyatakan bahwa interupsi eksternal INT1 tidak difungsikan, sehingga satu-satunya BIT yang mengendalikan saklar S2 adalah TR1, agar register counter dapat bekerja, maka TR1 harus diset sama dengan 1 |
C/T = 1 | :Untuk mengkonfigurasikan mikrokontroler sebagai counter |
M1=1 M0=1 | :Pemilihan mode 3 |
Pada contoh aplikasi tersebut, clock yang akan dihitung diumpankan pada pin T1( P3.5 ) untuk dihitung oleh counter 8 bit. Overflow dari counter ini dapat ditangkap oleh flag TF1, hasil cacahan yang dilakukanoleh counter 8 bit dapat dilihat pada LED yang terkoneksi ke port P1.
Gambar 4.5. Aplikasi sebagai counter 8 bit dengan output ke LED
; Percobaan 4.2.
;Listing Program output data counter 8 bit mode 3 pada LED untuk timer 1
Org 0h
Start: Mov TMOD,#01110000b ; mode 3 counter 8 bit timer 1
Setb TR1 ; TR1 = 1, start counting
Ulang: Mov A, TL1 ; A = TL1
Mov P1, A ; P1 = A
Sjmp Ulang ; Disinilah awal dari Looping Forever
End
; Percobaan 4.2.b
;Kerjakan Program output data counter 8 bit mode 3 pada LED untuk timer 0
Gambar 4.6. Aplikasi counter 8 bit dengan output ke LCD Character
D | a | t | a | C | o | u | n | t | e | r | : | 2 | 1 | 4 | |
; Percobaan 4.3.
; Rencanakan Program untuk mengeluarkan data counter pada LCD Character
dispclr equ 00000001b
funcset equ 00111000b
entrmod equ 00000110b
dispon equ 00001100b
Org 0h
Mulai: Mov TMOD,#01110000b
Setb TR1
acall init_lcd
acall tulis
Again: Mov A, TL1
acall konversi
acall printoutchar
sjmp again
;
konversi:
mov b,#100d
div ab
mov Ratusan,a
mov a,b
mov b,#10d
div ab
mov Puluhan,a
mov Satuan,b
ret
;
Printoutchar:
mov r1,#0c9h
acall write_inst
mov a,Ratusan
add a,#30h
mov r1,a
acall write_data
mov r1,#0cah
acall write_inst
mov a,puluhan
add a,#30h
mov r1,a
acall write_data
mov r1,#0cbh
acall write_inst
mov a,satuan
add a,#30h
mov r1,a
acall write_data
ret
;
Tulis: mov dptr,#tulisan1
mov r3,#8
mov r1,#0c0h
acall write_inst
Tulis1: clr a
movc a,@a+dptr
mov r1,A
inc dptr
acall write_data
djnz r3,tulis1
ret
;
Write_inst:
Clr P1.0 ; RS = P1.0 = 0, mode tulis instruksi ke LCD
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P1.1 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr P1.1 ; EN = 0 = P1.1
ret
;
Write_data:
Setb P1.0 ; RS = P1.0 = 1, mode tulis data ke LCD
Mov P0,R1 ; D7 s/d D0 = P0 = R1
Setb P1.1 ; EN = 1 = P1.1
Acall delay ; panggil waktu tunda
Clr p1.1 ; EN = 0 = P1.1
ret
;
init_lcd:
mov r1,#dispclr
acall write_inst
mov r1,#funcset
acall write_inst
mov r1,#dispon
acall write_inst
mov r1,#entrmod
acall write_inst
ret
;
Tulisan1: DB 'Data counter :'
end
Gambar 4.7. Aplikasi counter 8 bit dengan output ke 7 Segmen
; Percobaan 4.4.
Org 0h
Mulai: Mov TMOD,#01110000b
Setb TR1
Again: Mov A, TL1
acall konversi
acall display7Segmen
sjmp again
;
Konversi:
mov b,#100d
div ab
mov Ratusan,a
mov a,b
mov b,#10d
div ab
mov Puluhan,a
mov Satuan,b
ret
;
Display7segmen:
Mov P1,#11111111b
mov A, Ratusan
mov DPTR,#Data7segmen
movc A,@A+DPTR
mov P0,A
clr P1.5
Acall delay
;
mov A,Puluhan
mov DPTR,#Data7segmen
movc A,@A+DPTR
setb P1.5
mov P0,A
clr P1.6
Acall delay
;
mov A,Satuan
mov DPTR,#Data7segmen
movc A,@A+DPTR
setb P1.6
mov P0,A
clr P1.7
Acall delay
;
ret
Data7segmen:
db11000000b,11111001b,10100100b,10110000b,10011001b,
db10010010b,10000010b,11111000b,10000000b,10010000b
No comments:
Post a Comment