1 $regfile = "m16def.dat"
2
$crystal =
11059200
3
Const Ticks =
5
4
Dim Count As
Byte , Kiri As Byte , I As Byte
5
Config Timer0
= Counter , Edge = Falling
6
Load Timer0 ,
Ticks
7
On Timer0 Tes
8
Config Portc
= Output
9
Kiri =
&B00000001
10 Reset Ddrb.0
11 Enable Timer0
12 Enable Interrupts
13 Do
14 Portc =
0
15 Loop
16 Tes:
17 Load
Timer0 , Ticks
18 Gosub
Main
19 Return
20 Main:
21 For I = 1 To 8
22 Portc =
Kiri
23 Waitms
200
24 Rotate
Kiri , Left , 1
25 Next I
26 Return
27 End
Baris 1: deklarasi
MCU yang digunakan, yaitu ATmega16
Baris 2:
deklarasi nilai crystal yang digunakan, yaitu 11.059200 MHz
Baris 3:
banyaknya sinyal external yang akan di hitung sebagai pencacah, yaitu 5
Baris 4:
deklarasi variable yang digunakan pada program
Baris 5:
configurasi mode timer0 difungsikan sebagai counter, pembacaan sinyal masukkan
ketika falling atau ketika sinyal dari 1 ke 0
Baris 6: copy
nilai ticks ke timer0 sebagai set value counter sampai 5
Baris 7: ketika
ada interupsi pada timer0 program secara langsung pindah ke sub routine Tes
Baris 8:
konfigurasi Portc sebagai output
Baris 9: mengisi
variable kiri dengan $B00000001
Baris 10: reset
portb.0
Baris 11: enable
timer0 / mengaktifkan timer0
Baris 12: enable
interrupts/ mengaktifkan interrupt
Baris 13-15:
jika belum ada interrupt, program akan mengulangi secara terus menerus portc=0
Baris 16-19:
program sub routine Tes, yaitu ketika sinyal yang dimasukkan telah mencapai 5
kali maka program beralih ke sub routine Main, kemudian return (kembali)
Baris 20-26:
program sub routine Main yaitu setiap bit pada portc bergeser 1 bit ke kiri
sebanyak 8 kali kemudian return (kembali ke program dimana program dilompati).
Baris 27: End
Pada program
counter yang terpenting adalah pada saat menggunakan fungsi counter harus
mengetahui interupsi vector yang harus di configurasi, seperti program diatas
pada baris ke 3, 5, 6, 11, dan 12. Kemudian masukkan sinyal eksternal harus
pada portb.0
No comments:
Post a Comment