Anda di halaman 1dari 14

Jalur # 6 sampai 8 mengonfigurasi port dan menginisialisasi STKPTR Jalur #9

menginisialisasi tampilan tujuh segmen dengan mengeluarkan 0.


Baris # 10 hingga 14 periksa untuk melihat apakah ada tombol yang ditekan. Ini
dilakukan dengan mengeluarkan 0 ke semua baris melalui PORTC, dan kemudian
memasukkan PORTD. Jika semua kunci terbuka, data di PORTD akan menjadi
0xF0. Oleh karena itu, OxFO yang disimpan dalam alamat memori data 0x30
dikurangi dari data di PORT WREG. Jika Z=0, program menunggu dalam sebuah
loop dengan label KEY_OPEN hingga sebuah kunci menjadi nanah Ketika sebuah
kunci ditutup, Z = 1, dan program keluar dari loop. Baris #15 CALL DELAY rutin
untuk mendebounce kunci dengan memberikan penundaan 20 ms.
Baris # 16 sampai 18 mendeteksi penutupan kunci. Program memasukkan PORTD
ke dalam WREG dan, mengurangi 0xF0 yang disimpan dalam 0x30 dari [WREG].
Jika Z=1, program menunggu dalam satu lingkaran dengan label KEY CLOSE
hingga kunci ditutup. Jika Z = 0, program keluar dari loop. Baris #19
MEMANGGIL rutinitas DELAY untuk melakukan debounce segera setelah
penutupan kunci terdeteksi. Penting untuk menentukan dengan tepat tombol mana
yang ditekan. Ini dilakukan dengan mengeluarkan '0' ke satu baris sambil
mengeluarkan I ke tiga baris lainnya. Oleh karena itu, urutan kode kontrol baris
(0xFE, 0xFD, 0xFB, dan 0xF7, di mana 4 bit atas 'F' tidak peduli dalam kasus ini)
dikeluarkan melalui PORTC. Baris # 20 hingga 22 menginisialisasi 0x35 ke semua
I, menghapus C-bit ke 0, dan memutar [0x35] melalui carry sekali ke kiri untuk
memuat kode kontrol baris yang sesuai.
Misalnya, setelah RLCF pertama di baris #22, 0x35 akan berisi 11111110 (0xFE).
Perhatikan bahwa 4 bit rendah adalah kode kontrol-baris (4 bit atas tidak peduli)
untuk lintasan pertama dalam loop, berlabel BARIS BERIKUTNYA. Baris # 23
dan 24 mengeluarkan data ini ke PORTC untuk membuat baris atas keyboard
menjadi nol. Kode baris-kolom dimasukkan melalui PORTD untuk menentukan
apakah kode kolom berubah sesuai dengan setiap kode baris yang berbeda. Baris #
25 dan 20 memasukkan PORTD ke 0x31 melalui WREG.
Baris 27 sampai 32 membuat 4 bit rendah menjadi 0 dan mempertahankan 4 bit
atas. Jika kode kolom tidak 0xF0 (diubah), kunci input diidentifikasi. Program
kemudian melewati tabel pencarian untuk mencocokkan kode baris-kolom yang
disimpan dalam 0x33. Jika kode ditemukan, nilai indeks yang sesuai, yang sama
dengan nilai kunci masukan (0-9, dan simbol untuk A-F), akan ditampilkan.
Namun, jika tidak ada kunci di baris atas yang ditekan, 0 dikeluarkan ke baris
kedua, dan proses berlanjut. Program ini ditulis sedemikian rupa sehingga akan
terus memindai kunci input dan memperbarui tampilan untuk setiap input baru.
Misalkan kunci 9 didorong ketika program bercabang ke DECODE pada baris #33.
Baris # 33 sampai 35 menginisialisasi alamat memori data 0x32, dan 0x33 dengan
16 (jumlah total digit hex), pengurangan [0x33] dengan 1 yang awalnya akan
menampung 9, dan pada akhirnya akan berisi digit BCD yang akan ditampilkan.
Baris #35 akan memuat alamat awal 0x50 dari tabel dekode ke dalam FSRO untuk
digunakan sebagai penunjuk tidak langsung. Baris #36 memindahkan kode baris
0xDB (untuk 9) yang tersimpan di alamat memori data 0x31 (Baris #26) ke dalam
WREG, Instruksi CMPSEQ POSTINCO' pada baris 37 akan membandingkan kode
untuk 9 pada alamat 0x50 (alamat awal tabel) dengan [WREG. Karena
diasumsikan '9' didorong, akan ada kecocokan, dan instruksi pada baris #40 akan
dilewati. Instruksi "MOVFF Ox33, PORTB" pada baris #39 akan dijalankan yang
akan menampilkan 1001 ke masukan DCBA dari 7447 melalui PORTB, dan angka
9 akan ditampilkan pada tampilan tujuh segmen. Instruksi "BRA NEXTI" pada
baris #40 akan bercabang ke fabel NEXTI (Baris #41) yang, pada gilirannya, akan
kembali, dan mengulangi prosesnya
Program bahasa C untuk antarmuka keyboard/tampilan Gambar 9.21 menunjukkan
antarmuka keyboard hex ke PIC18F4321. Komentar disertakan dalam program
untuk menjelaskan logika program. Karena 74LS47 digunakan untuk tampilan,
angka 0-9 akan ditampilkan

Halaman 267
dengan benar sedangkan A-F akan ditampilkan sesuai Gambar 9.20. Misalnya, jika
tombol 'F' ditekan, maka semua segmen LED akan DIMATIKAN.
C-program untuk antarmuka PIC18F4321-Keyboard disediakan di bawah ini:
#termasuk <P18F4321.h>
#definisikan BENAR 1
#definisikan SALAH 0
#define setbit(var,bit) ((var) = (1<<(bit)))
// #1 atur bit var = var I (1 <<<bit)
#define clearbit (var,bit)((var) &= ~(1<<(bit))) #define testbit(var,bit) ((var) &
(1<<(bit)))
// #2 clear a bit var = var & ~(1<<bit) // #3 test a bit return var & (1<<bit) // #4
semua baris awalnya tinggi
baris karakter yang tidak ditandatangani = 0x0F:
int i=0,j=0;
unsigned char Matrix[4][4] =
#1 #5 membuat matriks untuk menyimpan // nomor kunci Hex yang sesuai
(0x0F, 0x0E, 0x0D, 0x0C), [0x0B, 0x0A, 0x09, 0x08), (0x07, 0x06, 0x05, 0x04).
(0x03, 0x02, 0x01, 0x00]]; void delay_ms(waktu int tidak ditandatangani); void
main()
// fungsi delay #6 untuk memberikan delay 2ms
{
OSCCON=0x60;
ADCON1 = 0x0F;
TRISB = 000;
TRISC=0x00;
TRISD = 0xFF:
PORTB=0x00;
sementara (1) {
PORTC= 0x00;
while(PORTD! = 0x0F);
while(PORTD == 0x0F);
untuk(i=0; i<4; i++)
untuk(j=0; j<4;j++)
clearbit(baris.j);
PORTC= baris:
jika(testbit(PORTD,i)==0)
// jam 4MHz
// #8 ANO-AN12 semua masukan digital
// #9 konfigurasikan PORTB sebagai keluaran untuk dekoder 7 seg
// #10 konfigurasikan PORTC sebagai output untuk keyboard matriks // #11
konfigurasikan PORTD sebagai input untuk tombol yang ditekan ##12 output
awalnya disetel ke 0 pada PORTB
// keluaran #13 awalnya disetel ke 0 di PORTC
// #14 tunggu dalam while loop jika tombol ditekan
// #15 tunggu while loop jika tidak ada tombol yang ditekan // #16 Scan keyboard
FOR COLUMN
##17 Pindai BARIS
// #18 Hapus sedikit untuk baris yang sesuai j
##19 Menghasilkan rendah untuk baris itu
// #20 Mendeteksi jika tombol ditekan di colunin i
{
delay_ms(20);
// #21 Penundaan selama 20ms
jika(testbit(PORTD,i) == 0)
// #22 Periksa lagi untuk debouncing
PORTB = Matriks[j][i];
// #23 hasil keluaran dari tabel pencarian ke PORTB
}
}
setbit(baris,j);
// #24 Atur bit nol kembali ke variabel baris
}
Halaman 268
}
}
}
void delay_ms(unsigned int time) // fungsi delay #25 2ms
}

unsigned int i, j;
untuk(i=0; i<waktu; i++)
untuk(j=0; j<255; j++);
}
Pada Gambar 9.21, empat baris dan empat kolom keyboard hex dihubungkan ke
PIC18F4321 melalui PORTC dan PORTD. Baris atas (baris 0) keyboard
disambungkan ke RCO, baris berikutnya (baris 1) ke RCI, baris berikutnya (baris
2) ke RC2, dan baris berikutnya (baris 3) ke C3. Di sisi lain, kolom paling kanan
(kolom 0) terhubung. ke RD3, kolom berikutnya ke kiri (kolom 1) ke RD2, kolom
berikutnya ke kiri (kolom 2) ke RD1, dan kolom berikutnya ke kiri (kolom 3) ke
RDO. Pada gambar, kolom keyboard yang terhubung ke +5V, biasanya TINGGI.
Matriks kunci pada baris #5 pada program disusun berbeda dengan Keyboard pada
Gambar 9.21. Misalnya, dalam program Kunci 'P' terletak di baris 0 dan kolom 0.
Oleh karena itu, kunci 'F' terletak di paling kanan baris atas matriks kunci.

Untuk mendeteksi aktuasi kunci. O dikeluarkan pada empat baris menggunakan


"PORTC = 0x00;" (Baris #13). Jika kunci ditekan, kunci itu akan menempatkan '0'
pada kolom TINGGI yang biasanya terhubung dengannya. Jadi, tombol yang
ditekan akan membuat salah satu kolom yang terhubung dengannya menjadi '0',
dan tiga kolom lainnya akan menjadi TINGGI.

Baris #18 mengosongkan sedikit untuk baris j, dan baris #19 menampilkan
RENDAH pada baris tersebut. Baris #20 mendeteksi jika kunci ditekan di kolom i
yang terhubung ke baris itu. Setelah kunci ditemukan, kunci tersebut didebounce
(Baris #21). Dengan i dan j. kunci diperoleh dari matriks kunci [i][i], dan
kemudian dikeluarkan ke PORTB pada tampilan tujuh segmen (Baris #23).
Layar 7-seg anoda umum
Sebagai contoh, coba tekan tombol nomor 2. Perhatikan bahwa "2" terletak di baris
3(-3) dan di kolom 1 (i = 1). Dalam program, j = 0 dan i = 0 pada awalnya. Fungsi
"clearbit" (Baris #1) menghapus sedikit, lalu "PORTC= baris;" (Baris #19)
menampilkan '0' pada baris. Ini berarti bahwa untuk j = 0 dan i = 0, PORTC
mengeluarkan OxE (1110). Fungsi "testbit" (Baris #20) memeriksa apakah input
pada PORTD adalah 0. Jika 0, kunci ditemukan. Kuncinya dilepas (Baris #21) dan
kemudian dikeluarkan ke PORTB. Dengan demikian, tombol yang ditekan akan
ditampilkan pada tampilan tujuh segmen. Jika tombol '2' ditekan, kuncinya belum
ditemukan. Oleh karena itu, proses berlanjut sampai j = 3 dan i = 1.

Ketika j=3 dan i = 1, fungsi "clearbit" pada baris #18 menghapus sedikit untuk
baris 3 = 3) dan menghasilkan 0x7 (0111) pada PORTC empat bit rendah. Ketika
pernyataan "if" dengan fungsi "testbit" dijalankan (Baris #20), kolom 1 (i = 1)
diperoleh. Koordinat dengan j = 3 (baris 3) dan i = 1 (kolom 1) menyediakan
tombol "2" yang ditekan. Kunci tersebut kemudian dilepas dan dikeluarkan ke
PORTB. Oleh karena itu, tampilan tujuh segmen akan menampilkan "2"

PERTANYAAN DAN MASALAH


9.1 Apakah vektor alamat interupsi saat power-on reset?

9.2 Identifikasi interupsi eksternal PIC18F4321 sebagai maskable atau


nonmaskable.
9.3 Apakah vektor alamat interupsi untuk interupsi prioritas tinggi dan prioritas
rendah?
9.4 Apa tingkat prioritas untuk interupsi eksternal INTO hingga INT2 dari
PIC18F4321 setelah power-on reset?
9.5 (a) Tulis urutan instruksi PIC18F dalam bahasa rakitan PIC18F untuk
menetapkan prioritas interupsi INTI sebagai level tinggi, dan prioritas interupsi
untuk level INT2 sebagai level rendah.
(b) Tulis program bahasa C untuk menetapkan prioritas interupsi INTI adalah level
tinggi dan prioritas interupsi untuk level INT2 sebagai level rendah.
96 Apa tingkat prioritas interupsi INTO
9.7 Apa tingkat pemicu (tepi naik atau turun) dari INTO - INT2 setelah power-on
reset? Tulis program bahasa rakitan PIC18F untuk mengaktifkan level pemicu
INTO dengan tepi naik, dan, INT1 dan INT2 menginterupsi dengan tepi jatuh.
9.8 Berapa banyak pin Interrupt-on-Change yang disediakan pada PIC18F4321?
Apakah mereka diaktifkan dengan tepi naik atau turun?
9.9Pada Gambar P9.9, PIC18F4321 diperlukan untuk menyalakan LED yang
terhubung ke bit 1 PORTD jika output komparator yang terhubung ke bit 0 PORTC
adalah satu (Vx > Vy); jika tidak, LED akan dimatikan.
(a) Tulis program bahasa rakitan PIC18F di alamat 0x200 untuk melakukannya
dengan menggunakan 1/0 kondisional atau polling.
(b) Tulis program-C untuk melakukannya.

9.10 (a) Ulangi Soal 9.9 menggunakan Interrupt I/O dengan menghubungkan
output komparator ke INTI. Perhatikan bahwa RBI juga dimultipleks dengan INTI.
Tulis program utama pada 0x80 dan rutin layanan interupsi pada 0x150 dalam
bahasa rakitan PIC18F. Program utama akan mengonfigurasi port I/O,
mengaktifkan interupsi INTI, menginisialisasi STKPTR ke 0x10, mematikan LED,
dan kemudian menunggu interupsi. Rutin layanan interupsi akan menyalakan LED
dan kembali ke program utama di lokasi yang sesuai sehingga LED menyala terus
hingga interupsi berikutnya.
(b) Ulangi (a) menggunakan C kecuali inisialisasi STKPTR tidak diperlukan dan
juga alamat awal untuk rutin utama dan layanan tidak perlu ditetapkan.
9.11 Pada Gambar P9.11, jika VM > 12 V. hidupkan LED yang terhubung pada bit
3 dari PORTA. Jika VM < 11 V, matikan LED. Menggunakan port, register, dan
lokasi memori sesuai kebutuhan dan interupsi INTO:
(a) Gambarlah diagram blok rapi yang menunjukkan mikrokontroler PIC18F4321
dan koneksi ke port dalam diagram yang ditunjukkan pada Gambar P9.11.
(b) Tulis program utama pada 0x150 dan service routine pada 0x200 dalam bahasa
rakitan PICISE. Program utama akan menginisialisasi port dan menunggu
interupsi. Rutinitas layanan akan menyelesaikan tugas dan berhenti.
Ulangi (b) menggunakan bahasa C. Perhatikan bahwa alamat awal untuk program
utama dan rutinitas layanan seperti dalam bahasa rakitan tidak diperlukan.
9.12 Apa kegunaan pin RS, R/W, dan EN pada LCD Hitachi HD44780 Jelaskan
secara singkat bagaimana sinyal ini digunakan untuk menampilkan data pada LCD
melalui pin D0-D7
9.13 Asumsikan antarmuka LCD PIC181-4321- Hitachi HD4-1780 dari Gambar
9.1-4
(a) Tulis program dalam program bahasa rakitan PIC18F untuk menampilkan frasa
"PIC18F" pada LCD segera setelah empat sakelar input yang terhubung ke PORT
C semuanya TINGGI.
(b) Ulangi (a) menggunakan C.

9.14 Apa faktor yang harus dipertimbangkan untuk menghubungkan keyboard hex
ke mikrokontroler?
9.15 Diinginkan untuk menerapkan sistem berbasis PIC18F4321 seperti yang
ditunjukkan pada Gambar P9.15. Sistem akan memindai keyboard hex dengan 16
tombol, dan menggerakkan tiga layar tujuh segmen. PIC18F4321 akan
memasukkan setiap tombol yang ditekan, dan menggulirnya dari sisi kanan layar,
dan terus menggulir saat setiap tombol ditekan. Digit paling kiri dibuang begitu
saja. Sistem berlanjut tanpa batas waktu. Tulis program bahasa C untuk mencapai
hal di atas.
9.16 Rancang sistem berbasis PIC18F4321 (Gambar P9.16) sebagai berikut:
Sistem akan menggerakkan dua digit tujuh segmen dan memantau dua sakelar
kunci. Sistem akan mulai menampilkan 00. Jika tombol pertambahan ditekan,
maka akan menambah tampilan satu per satu. Demikian pula, jika tombol
pengurangan ditekan, tampilan akan berkurang satu. Tampilan akan berubah dari
00 menjadi 99, dan sebaliknya. Tulis program bahasa C untuk mencapai hal di atas.
Gunakan jam internal 4MHz. Hubungkan Sakelar kenaikan ke INTI (RBI) dan
Sakelar penurunan ke INT2 (RB2). Konfigurasikan INTI sebagai prioritas tinggi
dan INT2 sebagai Prioritas Rendah. Hubungkan tampilan 7-segmen tinggi melalui
RC3-RCO dari PORTC sementara tampilan 7-segmen Rendah melalui RD3-RDO
dari PORTD. Gunakan dua 7447 untuk tampilan.

BAB 10TIMER PIC18F DAN ANTARMUKA ANALOG


Dalam bab ini kami menjelaskan dasar-dasar pemrograman periferal on-chip
PIC18F seperti pengatur waktu dan ADC menggunakan rakitan dan C. Topik
meliputi pengatur waktu perangkat keras PIC18F dan ADC (Analog to Digital
Converter). Terakhir, DAC (Digital to Analog Converter) eksternal dihubungkan ke
PIC18F, dan pemrograman DAC menggunakan C disertakan.
10.1Timer PIC18F
Mikrokontroler PIC18F4321 mencakup empat timer, yaitu Timer0 (8-bit atau 16-
bit), Timer1 (16-bit), Timer2 (8-bit), dan Timer3 (16-bit). Timer ini dapat
digunakan untuk menghasilkan waktu tunda menggunakan perangkat keras on-
chip. Karena pengatur waktu ini adalah perangkat keras on-chip, mereka secara
akurat menjaga waktu di latar belakang sementara fungsi lain dilakukan oleh
PIC18F4321
Perangkat keras dasar di dalam masing-masing penghitung waktu ini adalah
register yang dapat ditambah atau dikurangi pada sisi naik atau turun jam. Register
dapat dimuat dengan hitungan untuk waktu tunda tertentu. Penundaan waktu
dihitung dengan mengurangkan hitungan awal awal dari hitungan akhir dalam
register, dan kemudian mengalikan hasil pengurangan dengan frekuensi jam

Penghitung waktu ini juga dapat digunakan sebagai penghitung acara. Perhatikan
bahwa penghitung peristiwa pada dasarnya adalah register dengan jam yang
diganti dengan peristiwa seperti sakelar. Penghitung bertambah atau berkurang
setiap kali sakelar diaktifkan. Dengan demikian, berapa kali sakelar diaktifkan
(terjadinya peristiwa) dapat ditentukan.
Timero dapat beroperasi sebagai timer 8-hit atau timer 16-bit. Timero
memanfaatkan jam internal saat digunakan sebagai pengatur waktu, dan jam
eksternal saat digunakan sebagai penghitung. Timeri hanya dapat digunakan
sebagai timer 16-bit atau pencacah 16-bit, tidak dapat digunakan sebagai timer 8-
bit atau pencacah 8-bit.
Seperti Timer, Timer1 menggunakan jam internal saat digunakan sebagai pengatur
waktu, dan jam eksternal saat digunakan sebagai penghitung. Timer2 dapat
digunakan sebagai timer 8-bit menggunakan jam internal. Itu tidak dapat
digunakan sebagai penghitung. Terakhir, Timer3 dapat beroperasi sebagai timer 16-
bit atau pencacah 16-bit. Itu tidak dapat digunakan sebagai timer 8-bit atau
penghitung 8-bit.Di bagian ini, topik yang terkait dengan bagaimana Timero
melalui Timer3 dapat digunakan sebagai pengatur waktu untuk memberikan
penundaan waktu akan dibahas. Penggunaan pengatur waktu ini sebagai
penghitung tidak akan disediakan. Timer1, Timer2, dan Timer3 digunakan untuk
operasi CCP (Capture/Compare/Pulse Width Modulation). Misalnya, PIC18F4321
menggunakan Timer1 atau Timer3 untuk mode tangkap dan bandingkan, dan
Timer2 untuk mode PWM. Perhatikan bahwa Timer tidak digunakan oleh modul
CCP. Topik-topik ini akan dibahas nanti dalam bab ini
Singkatnya, timer pada dasarnya adalah pencacah biner (register Timer) yang dapat
diprogram untuk menghitung pulsa clock. Setelah register timer mencapai nilai
maksimum (0xFF untuk 8-bit, 0xFFFF untuk 16-bit), itu akan kembali ke 0
mengatur bendera luapan ke satu pada siklus berikutnya, dan juga menghasilkan
interupsi jika diaktifkan. Berikut ini, fitur dasar timer PIC18F akan dibahas.
Polling Timer menandai Timer menghitung hingga nilai maksimum 0xFF saat
beroperasi sebagai timer 8-bit dan kemudian meluap ke 0. Selain itu, Timer0 atau
Timer1 atau Timer3 menghitung hingga nilai maksimum 0xFFFF saat beroperasi
sebagai timer 16-bit , dan kemudian meluap ke 0.

PIC18F4321 Timer2 berisi register timer 8-bit (TMR2) dan register periode 8-bit
(PR2). Timer2 meluap ke 0 untuk pertandingan TMR2-ke-PR2. Overflow
ditunjukkan secara otomatis oleh PIC18F4321 dengan menyetel bit flag (bit
TMRxIF di mana x = 0, 1, 2, 3) yang terkait dengan masing-masing pengatur
waktu ini. Bit bendera ini dapat disurvei dalam perangkat lunak untuk
menyediakan fungsi terkait waktu. Keempat pengatur waktu menyertakan bit
bendera
10.1Timer PIC18F4321 beserta fitur dasarnya dirangkum dalam TABEL
Timer menyela Masalah dengan polling bit flag timer adalah bahwa PIC18F4321
harus menunggu dalam satu lingkaran untuk memeriksa bit TMRXIF menjadi
TINGGI. Dalam hal ini, PIC18F4321 tidak akan dapat melakukan tugas lainnya.
Oleh karena itu, interupsi pengatur waktu dapat digunakan. Konsep ini mirip
dengan keuntungan menggunakan I/O interupsi dibandingkan I/O yang disurvei.
Karena pengatur waktu dianggap sebagai perangkat periferal, satu bit interupsi
periferal (PEIE) disediakan dalam register INTCON untuk keempat pengatur
waktu. Setiap pengatur waktu (TMRx dengan x=0.1.2.3) juga dilengkapi dengan
bit pengaktif interupsi (TMRXIE dengan x = 0,1,2,3) dan bit bendera interupsi
(TMRXIF dengan x = 0,1,2,3) .
Selanjutnya, untuk mendapatkan interupsi yang digerakkan oleh timer dengan
salah satu dari empat timer (Timer) melalui Timer 3), diperlukan inisialisasi
register tertentu. Misalnya, perhatikan Gambar 10.1 untuk Timero. Bit berikut
terkait dengan Timer dapat diinisialisasi melalui pemrograman sebagai berikut:
TMROIF 0, TMROIE 1, PEIE = 1, GIE = 1 Hal ini dapat dilakukan dengan
menggunakan perakitan PIC18F sebagai berikut:
BCF
INTCON, TMROIF
INTCON, TMROIE
BSF
BSF
INTCON, PEIE
BSF
INTCON, GIE
Kode-C yang setara disediakan di bawah ini:

Register
Timer Size Counter register
(Enable and Flag bits)
TMR0IE, TMR0IF TMR0L for 8-bit
Timer0 8-bit or 16-bit in
INTCON TMR0H:TMR0L for 16-bit
TMR1IE in PIE1
Timer1 16-bit TMR1H:TMR1L
TMR1IF in PIR1
TMR2IE in PIE1
Timer2 8-bit TMR2IF in PIR1 TMR2
TMR3IE in PIE2
Timer3 16-bit TMR3H:TMR3L
TMR3IF in PIR2
GAMBAR 10.1 Interupsi Timero
INTCONbits.TMROIF = 0;
INTCONbits TMROIE = 1; INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;
Segera setelah Timero menyela PIC18F4321, mikrokontroler menyelesaikan
eksekusi instruksi saat ini dan memuat PC dengan alamat 0x000008 (dengan
asumsi mode default). Rutin layanan dapat ditulis di alamat ini untuk melakukan
fungsi yang berhubungan dengan pengatur waktu. Perhatikan bahwa pengatur
waktu yang digerakkan interupsi menggunakan Timer1 hingga Timer3 bekerja
dengan cara yang sama.
Timer Prescaler dan Postscaler disediakan dengan opsi prescaler dan postscaler
yang dapat diprogram melalui register kontrol pengatur waktu. Opsi prescaler
membagi jam PIC18F dengan bilangan bulat, dan mengurangi periode jam.
Pengurangan periode jam ini memberikan penundaan waktu yang lebih tinggi pada
pengatur waktu. Misalnya, pertimbangkan jam internal 4 MHz. Karena timer
PIC18F bekerja dengan kristal bagi-oleh-4, frekuensi timer = (4 MHz/4) = 1 MHz.
Menggunakan nilai prescaler 1:4, Frekuensi clock pengatur waktu (IMHz/4) =0,25
MHz= 250 kHz. Oleh karena itu, frekuensi clock yang lebih rendah akan
meningkatkan periode clock yang memberikan waktu tunda yang lebih tinggi.
Perhatikan bahwa prescaler berarti frekuensi clock pengatur waktu dibagi sebelum
frekuensi digunakan oleh pengatur waktu. Pada PIC18F4321, Timero, Timer1, dan
Timer3 dilengkapi dengan prescaler. Timer ini tidak memiliki opsi postscaler.
Postscaler juga membagi jam dengan bilangan bulat setelah timer digunakan. Jam
ini kemudian digunakan untuk memperlambat pengaturan bit bendera interupsi
pengatur waktu. Dalam PIC18F4321, Timer2 dilengkapi dengan opsi prescaler dan
postscaler. Seperti yang akan ditunjukkan nanti. Opsi prescaler Timer2 dapat
digunakan untuk mendapatkan lebih banyak waktu tunda sedangkan opsi
postscaler Timer2 dapat diprogram untuk menunda pembuatan TMR2IF (Timer
Interrupt Flag).
0.1.1 Timer0
Timer dapat beroperasi sebagai pengatur waktu atau sebagai penghitung dalam
mode 8-bit atau 16-bit. Timer menggunakan clock internal saat digunakan sebagai
timer, dan clock eksternal (TOCK1) saat digunakan sebagai counter.
Timero sebagai timer Timero dapat digunakan sebagai timer dengan menyetel
TMROON (bit 7 dari TOCON register Gambar 10.2) ke 1 menggunakan instruksi
perakitan PIC18F "BSF TOCON, TMOON" atau setara dengan C
"TOCONbits.TMROON=1 ;". Setelah Timer dimulai, ia menghitung dengan
menambah isi register (TMROL untuk mode pengatur waktu 8-bit atau
TMROH:TMROL untuk mode pengatur waktu 16-bit) dengan 1 pada setiap siklus
instruksi. TMROL menghitung hingga TMROL mencapai 0xFF dalam mode 8-bit.
TMROIF (interupsi saat luapan)

Anda mungkin juga menyukai