- Bahan yang Diperlukan:
- Apa yang mengganggu dan di mana menggunakannya:
- Rajah dan Penjelasan Litar:
- Simulasi Gangguan dalam Pengawal Mikro PIC:
- Penjelasan Kod:
- Mengendalikan PIC16F877A Gangguan:
Dalam tutorial ini kita akan belajar bagaimana menggunakan Interternal Interrupt di PIC Microcontroller dan mengapa / di mana kita memerlukannya. Ini adalah bahagian urutan Tutorial PIC di mana kami mula belajar PIC Microcontroller dari awal; oleh itu tutorial ini mengandaikan bahawa anda sudah biasa dengan cara memprogram PIC MCU menggunakan MPLABX dan bagaimana untuk menghubungkan LCD dengan PIC. Sekiranya tidak, silakan kembali ke pautan masing-masing dan baca melalui laman web ini, kerana saya akan melangkau sebahagian besar maklumat yang telah diliputi di sana.
Bahan yang Diperlukan:
- PIC16F877A Perf Board
- Paparan LCD 16x2
- Tekan butang
- Wayar Penyambung
- Papan Roti
- PicKit 3
Apa yang mengganggu dan di mana menggunakannya:
Sebelum mengetahui cara memprogram gangguan mikrokontroler PIC, marilah kita memahami apa sebenarnya Interrupt dan di mana kita perlu menggunakannya. Selanjutnya, terdapat banyak jenis gangguan pada Mikrokontroler dan PIC16F877A mempunyai sekitar 15 daripadanya. Jangan sampai sekarang kita mengelirukan semuanya.
Jadi! apakah gangguan dalam Mikrokontroler?
Seperti yang kita semua ketahui mikrokontroler digunakan untuk melakukan satu set pengaktifan yang telah ditentukan (diprogramkan) yang memicu output yang diperlukan berdasarkan input. Tetapi, semasa Mikrokontroler anda sibuk dengan melaksanakan satu kod, mungkin terdapat situasi kecemasan di mana bahagian kod anda yang lain perlu diberi perhatian segera. Bahagian kod lain yang memerlukan perhatian segera harus dianggap sebagai gangguan.
Sebagai contoh: Mari kita anggap bahawa anda bermain permainan kegemaran anda di telefon bimbit anda dan pengawal (andaian) di dalam telefon anda sibuk membuang semua grafik yang diperlukan untuk anda menikmati permainan ini. Tetapi, tiba-tiba teman wanita anda memanggil nombor anda. Sekarang, perkara terburuk yang berlaku ialah pengawal telefon bimbit anda untuk mengabaikan panggilan teman wanita anda kerana anda sibuk bermain permainan. Untuk mengelakkan mimpi buruk ini berlaku, kami menggunakan sesuatu yang disebut gangguan.
Gangguan ini akan selalu menjadi penyenaraian aktif untuk beberapa tindakan tertentu yang berlaku dan apabila ia berlaku, mereka menjalankan sekeping kod dan kemudian kembali ke fungsi normal. Bahagian kod ini disebut sebagai rutin perkhidmatan gangguan (ISR). Salah satu projek praktikal yang memerlukan gangguan adalah "Speedometer Digital dan Odometer Circuit menggunakan PIC Microcontroller"
Dalam Mikrokontroler terdapat dua jenis gangguan utama. Mereka adalah gangguan luaran dan gangguan dalaman. Gangguan dalaman berlaku di dalam Pengawal Mikro untuk menjalankan tugas, misalnya Gangguan Waktu, Gangguan ADC dll. Gangguan ini dipicu oleh perisian untuk menyelesaikan operasi Pemasa atau operasi ADC masing-masing.
Gangguan luaran adalah yang boleh dicetuskan oleh pengguna. Dalam program ini kita akan belajar bagaimana menggunakan gangguan Luar dengan menggunakan butang tekan untuk memicu gangguan. Kami akan menggunakan LCD untuk memaparkan angka yang meningkat dari 0 hingga 1000 dan apabila gangguan dicetuskan, kami harus memberitahukannya dari Interrupt Service ISR Rutin dan kemudian terus menambah angka.
Rajah dan Penjelasan Litar:
Gambarajah litar untuk menggunakan gangguan PIC16F877 diberikan pada gambar di atas. Anda hanya perlu menyambungkan LCD ke PIC seperti yang kita lakukan dalam menghubungkan LCD tutorial.
Sekarang untuk menyambungkan pin interrupt, kita harus melihat lembar data untuk mengetahui pin PIC mana yang digunakan untuk gangguan luaran. Dalam kes kami i n PIC16F877A 33 rd pin RBO / INT digunakan untuk sampukan luaran. Anda tidak boleh menggunakan pin lain selain pin ini. Sambungan Pin untuk rajah litar ini ditunjukkan dalam jadual di bawah.
S.No: |
Nombor PIN |
Nama Pin |
Berhubung dengan |
1 |
21 |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E dari LCD |
3 |
27 |
RD4 |
D4 dari LCD |
4 |
28 |
RD5 |
D5 dari LCD |
5 |
29 |
RD6 |
D6 dari LCD |
6 |
30 |
RD7 |
D7 dari LCD |
7 |
33 |
RBO / INT |
Tekan butang |
Kami telah mengaktifkan perintang penarik dalaman pada PORT B, oleh itu kami dapat menghubungkan pin RB0 ke tanah secara langsung melalui butang Push. Oleh itu, setiap kali pin ini menjadi RENDAH, gangguan akan dicetuskan.
Sambungan boleh dibuat di papan Roti seperti gambar di bawah.
Sekiranya anda mengikuti tutorial kami, anda semestinya sudah biasa dengan Perf Board ini yang telah saya gunakan di sini. Sekiranya tidak, anda tidak perlu memikirkannya hanya mengikut gambarajah litar dan anda akan berjaya.
Simulasi Gangguan dalam Pengawal Mikro PIC:
Simulasi untuk projek ini dibuat menggunakan Proteus.
Semasa anda mensimulasikan projek, anda akan melihat urutan nombor bertambah pada paparan LCD. Ini berlaku di dalam gelung utama dan setiap kali butang tekan ditekan LCD harus menunjukkan bahawa ia telah memasuki ISR. Anda boleh membuat pengubahsuaian dalam kod dan mencubanya di sini.
Penjelasan Kod:
Kod lengkap untuk projek ini boleh didapati di akhir tutorial ini. Walau bagaimanapun, program ini dibahagikan kepada bahagian penting dan dijelaskan di bawah untuk pemahaman anda yang lebih baik.
Seperti semua program, kita harus memulakan kodnya dengan menentukan konfigurasi pin untuk pin yang kita gunakan dalam program kita. Di sini juga kita perlu menentukan bahawa kita menggunakan RB0 / INT sebagai pin gangguan luaran dan bukan sebagai pin input atau output. Garis kod di bawah ini membolehkan perintang penarik dalaman pada portB dengan menjadikan bit ke- 7 sebagai 0.
PILIHAN_REG = 0b00000000;
Kemudian kami mengaktifkan gangguan Global / Periferal dan menyatakan bahawa kami menggunakan RB0 sebagai pin gangguan luaran.
GIE = 1; // Dayakan Global Interrupt PEIE = 1; // Aktifkan INTE Periferal Interrupt = 1; // Aktifkan RB0 sebagai pin Interrupt luaran
Setelah pin RB0 ditakrifkan sebagai pin interupsi luaran, setiap kali tanda rendah, INTF bendera gangguan luaran akan menjadi 1 dan kod di dalam fungsi interrupt void akan dilaksanakan sejak Interrupt Service Routine (ISR) akan dipanggil.
batal gangguan ISR_contoh () {if (INTF == 1) // Gangguan luaran dikesan {Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Memasukkan ISR"); INTF = 0; // kosongkan bendera gangguan setelah selesai dengannya __delay_ms (2000); Lcd_Clear (); }}
Seperti yang anda lihat, saya telah menamakan fungsi interrupt sebagai contoh ISR_. Anda boleh menamakannya mengikut kehendak anda. Di dalam fungsi gangguan, kami akan memeriksa apakah bendera INTF tinggi dan melakukan tindakan yang diperlukan. Sangat penting untuk membersihkan bendera interrupt setelah anda selesai dengan rutin. Hanya dengan itu program akan kembali ke fungsi utama yang tidak berfungsi. Penjelasan ini harus dilakukan oleh perisian menggunakan garis
INTF = 0; // kosongkan bendera interrupt setelah selesai dengannya
Di dalam fungsi utama, kami hanya menambah angka untuk setiap 500 ms dan memaparkannya di layar LCD. Kami tidak mempunyai garis khusus untuk memeriksa status pin RB0. Selang akan sentiasa aktif dan setiap kali butang tekan ditekan, ia akan keluar dari kekosongan utama dan menjalankan garis di ISR.
Lcd_Set_Cursor (2,1); Lcd_Print_String ("Di dalam Gelung Utama"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Nombor:"); Lcd_Print_Char (ch1 + '0'); Lcd_Print_Char (ch2 + '0'); Lcd_Print_Char (ch3 + '0'); Lcd_Print_Char (ch4 + '0'); __delay_ms (500); nombor ++;
Mengendalikan PIC16F877A Gangguan:
Sebaik sahaja anda memahami bagaimana gangguan berfungsi, anda boleh mencubanya pada perkakasan dan bermain-main di sekelilingnya. Program ini yang diberikan di sini adalah contoh asas gangguan luaran di mana ia hanya menukar paparan skrin LCD apabila gangguan terganggu.
Kerja-kerja projek yang lengkap dapat dilihat dalam video yang diberikan di bawah ini. Harap anda memahami tentang gangguan dan di mana / bagaimana menggunakannya. Sekiranya anda mempunyai keraguan, anda boleh menghubungi saya melalui forum atau bahagian komen.