Daftar Isi:

Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino): 7 Langkah (dengan Gambar)
Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino): 7 Langkah (dengan Gambar)

Video: Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino): 7 Langkah (dengan Gambar)

Video: Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino): 7 Langkah (dengan Gambar)
Video: Belajar Pemrograman Mikrokontroler dengan Bahasa Assembly | Cara Memprogram Mikrokontroler AT89S51 2024, November
Anonim
Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino)
Pengenalan Pemrograman 8051 Dengan AT89C2051 (Dibintangi Tamu: Arduino)

8051 (juga dikenal sebagai MCS-51) adalah desain MCU dari tahun 80-an yang tetap populer hingga saat ini. Mikrokontroler modern yang kompatibel dengan 8051 tersedia dari beberapa vendor, dalam segala bentuk dan ukuran, dan dengan berbagai periferal. Dalam instruksi ini kita akan melihat AT89C2051 MCU dari Atmel.

AT89C2051 adalah mikrokontroler kecil (2Kbyte Flash, 128byte RAM), murah (~$1,40 per chip). Fitur:

  • 2.7-6V operasi
  • 15 jalur I/O
  • 2 timer (16 bit)
  • Interupsi internal dan eksternal
  • UART
  • Komparator analog dalam chip
  • Hingga 2MIPS dengan jam 24MHz

Langkah 1: Persyaratan

Persyaratan
Persyaratan

Persyaratan:

  • PC Linux (perangkat lunak yang diperlukan: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Chip AT89C2051 (paket DIP20)
  • Soket ZIF 20-pin
  • Optocoupler (lebih disukai keluaran MOSFET)
  • Perisai prototipe Arduino
  • catu daya 12V
  • catu daya 5V
  • Osilator kristal 16MHz
  • 2x 30pF kapasitor
  • kapasitor 100nF
  • Dioda (misalnya: 1N400X)
  • Resistor (1K, 3K3)
  • Protoboard
  • jumper
  • Kawat tembaga

Periksa perangkat lunak yang diperlukan:

python3 yang mana

yang membuat sdcc yang mana git

Langkah 2: Membangun Programmer

Membangun Programmer
Membangun Programmer
Membangun Programmer
Membangun Programmer
Membangun Programmer
Membangun Programmer

Bagian ini akan singkat, karena saya membuat perisai pemrograman saya beberapa waktu lalu. Saya telah melampirkan skema dan gambar papan rakitan. PDF skema dapat ditemukan di repositori.

Anda harus memprogram papan pemrogram:

1. Mengkloning repositori.

git clone

2. Buka file AT89C2051_programmer/AT89_prog/AT89_prog.ino di Arduino IDE.

3. Bangun dan unggah sketsa dari Arduino IDE.

Langkah 3: Menginstal Perangkat Lunak Pemrogram

Menginstal Perangkat Lunak Pemrogram
Menginstal Perangkat Lunak Pemrogram
Menginstal Perangkat Lunak Pemrogram
Menginstal Perangkat Lunak Pemrogram

1. Buat lingkungan virtual python.

python3 -m venv venv

. venv/bin/aktifkan

2. Instal di89overlord. at89overlord adalah programmer Open Source untuk chip AT89C2051 yang ditulis oleh saya. Kode sumbernya dapat ditemukan di sini.

instal pip di89overlord

3. Verifikasi instalasi.

at89overlord -h

Langkah 4: Memprogram Chip

Memprogram Chip
Memprogram Chip
Memprogram Chip
Memprogram Chip
Memprogram Chip
Memprogram Chip
Memprogram Chip
Memprogram Chip

1. Mengkloning proyek kedipan sederhana.

cd ~

git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051/

2. Membangun aplikasi.

membuat

3. Hubungkan Arduino ke PC, sambungkan supply 12V, tempatkan chip AT89C2051 pada soket ZIF.

4. Temukan port serial Arduino.

ls /dev/tty*

5. Unggah file IntelHex bawaan ke chip. Jika port Arduino Anda berbeda dari /dev/ttyACM0 Anda harus memberikan nilai yang benar dengan parameter baris perintah -p.

at89overlord -f./hello.ihx

Langkah 5: Perakitan

perakitan
perakitan
perakitan
perakitan
perakitan
perakitan

Merakit sirkuit sesuai dengan skema. Versi PDF dapat ditemukan di repositori.

Anda akan melihat lampu kilat LED hijau dengan frekuensi sekitar 0,5Hz.

Langkah 6: Penjelasan Kode

Penjelasan Kode
Penjelasan Kode

#termasuk

#termasuk

Kita mulai dengan memasukkan header AT89X051 dari sdcc. Ini berisi makro untuk berinteraksi dengan register seolah-olah mereka adalah variabel. Kami juga menyertakan stdint.h yang berisi definisi tipe integer uint8_t dan uint16_t.

// Dengan asumsi osilator adalah 16MHz

#define INTERRUPTS_PER_SECOND 5208

Interupsi terjadi ketika Timer0 meluap. Ini dikonfigurasi sebagai timer 8bit tunggal, jadi ini terjadi setiap 2^8 siklus prosesor. Satu siklus prosesor membutuhkan 12 siklus clock, dan dengan demikian kita sampai pada 16000000/12/2^8 = 5208.33333.

volatil uint8_t led_state = 0;

volatile uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Kami mendeklarasikan kontrol keadaan yang dipimpin dan variabel penghitung interupsi.

void Timer0_ISR(void) _interrupt (1) {

timer_counter--; if(timer_counter == 0) { led_state = !led_state; timer_counter = INTERRUPTS_PER_SECOND; } }

Setiap kali Timer0 meluap, penghitung berkurang. Jika sama dengan nol itu direset, dan status led berubah. Ini terjadi sekitar sekali per detik, menghasilkan frekuensi kedipan LED ~ 0,5Hz.

int utama() {

TMOD = 0x3; // Mode pengatur waktu - 8 bit, tanpa prescaler. freq = OSCFREQ/12/2^8 TL0 = 0; // Hapus penghitung TH0 = 0; // Hapus register TR0 = 1; // Atur timer untuk dijalankan. ET0 = 1; // Setel interupsi. EA = 1; // Setel interupsi global. while(1) { if (led_state) { P1 = 0xFF; } else { P1 = 0x00; } } }

Kami mengonfigurasi modul pengatur waktu dan menunggu perubahan dalam variabel kontrol status yang dipimpin. TMOD adalah register kontrol mode pengatur waktu. TL0 dan TH0 adalah register kontrol Timer0. ET0 adalah bit enable-timer0 dalam register kontrol timer (TCON). TR0 dan EA adalah bit dalam register pengaktifan interupsi (IE).

Langkah 7: Sumber Daya Tambahan

  • Lembar data AT89C2051:
  • Kompilator Perangkat C Kecil (sdcc):
  • 8051 sumber daya:
  • Repositori programmer AT89C2051:
  • halo-8051 repositori:

Direkomendasikan: