Mục lục:

Giới thiệu về Lập trình 8051 Với AT89C2051 (Khách mời: Arduino): 7 bước (có Hình ảnh)
Giới thiệu về Lập trình 8051 Với AT89C2051 (Khách mời: Arduino): 7 bước (có Hình ảnh)

Video: Giới thiệu về Lập trình 8051 Với AT89C2051 (Khách mời: Arduino): 7 bước (có Hình ảnh)

Video: Giới thiệu về Lập trình 8051 Với AT89C2051 (Khách mời: Arduino): 7 bước (có Hình ảnh)
Video: Lập Trình 8051-Bài 5-Lập Trình Với Nút Nhấn (Button) 2024, Tháng mười một
Anonim
Giới thiệu về Lập trình 8051 với AT89C2051 (Khách mời: Arduino)
Giới thiệu về Lập trình 8051 với AT89C2051 (Khách mời: Arduino)

8051 (còn được gọi là MCS-51) là một thiết kế MCU từ những năm 80 vẫn còn phổ biến cho đến ngày nay. Các bộ vi điều khiển hiện đại tương thích với 8051 có sẵn từ nhiều nhà cung cấp, ở mọi hình dạng và kích cỡ, và với nhiều loại thiết bị ngoại vi. Trong hướng dẫn này, chúng ta sẽ xem xét MCU AT89C2051 của Atmel.

AT89C2051 là một bộ vi điều khiển nhỏ (2Kbyte Flash, 128byte RAM), giá rẻ (~ $ 1,40 mỗi chip).

  • Hoạt động 2.7-6V
  • 15 dòng I / O
  • 2 bộ hẹn giờ (16 bit)
  • Ngắt bên trong và bên ngoài
  • UART
  • Bộ so sánh tương tự trên chip
  • Lên đến 2MIPS với xung nhịp 24MHz

Bước 1: Yêu cầu

Yêu cầu
Yêu cầu

Yêu cầu:

  • PC Linux (phần mềm bắt buộc: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • Chip AT89C2051 (gói DIP20)
  • Ổ cắm ZIF 20 chân
  • Optocoupler (tốt nhất là đầu ra MOSFET)
  • Lá chắn tạo mẫu Arduino
  • Nguồn điện 12V
  • Nguồn điện 5V
  • Bộ dao động tinh thể 16MHz
  • Tụ điện 2x 30pF
  • Tụ điện 100nF
  • Diode (ví dụ: 1N400X)
  • Điện trở (1K, 3K3)
  • Protoboard
  • Người nhảy
  • Dây đồng

Kiểm tra phần mềm được yêu cầu:

con trăn nào3

cái nào tạo ra sdcc nào git

Bước 2: Xây dựng Lập trình viên

Xây dựng Lập trình viên
Xây dựng Lập trình viên
Xây dựng Lập trình viên
Xây dựng Lập trình viên
Xây dựng Lập trình viên
Xây dựng Lập trình viên

Phần này sẽ ngắn gọn, vì tôi đã xây dựng lá chắn lập trình của mình cách đây một thời gian. Tôi đã đính kèm sơ đồ và hình ảnh của bảng đã lắp ráp. Bản PDF của giản đồ có thể được tìm thấy trong kho lưu trữ.

Bạn sẽ phải lập trình bảng lập trình viên:

1. Sao chép kho lưu trữ.

git clone

2. Mở tệp AT89C2051_programmer / AT89_prog / AT89_prog.ino trong Arduino IDE.

3. Xây dựng và tải lên bản phác thảo từ Arduino IDE.

Bước 3: Cài đặt phần mềm lập trình viên

Cài đặt phần mềm lập trình viên
Cài đặt phần mềm lập trình viên
Cài đặt phần mềm lập trình viên
Cài đặt phần mềm lập trình viên

1. Tạo môi trường ảo python.

python3 -m venv venv

. venv / bin / kích hoạt

2. Cài đặt at89overlord. at89overlord là một lập trình viên Mã nguồn mở cho chip AT89C2051 do tôi viết. Bạn có thể tìm thấy mã nguồn của nó tại đây.

pip cài đặt at89overlord

3. Xác minh cài đặt.

at89overlord -h

Bước 4: Lập trình chip

Lập trình chip
Lập trình chip
Lập trình chip
Lập trình chip
Lập trình chip
Lập trình chip
Lập trình chip
Lập trình chip

1. Sao chép một dự án nhấp nháy đơn giản.

cd ~

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

2. Xây dựng ứng dụng.

chế tạo

3. Kết nối Arduino với PC, kết nối nguồn cung cấp 12V, đặt chip AT89C2051 vào ổ cắm ZIF.

4. Xác định vị trí cổng nối tiếp của Arduino.

ls / dev / tty *

5. Tải tệp IntelHex đã xây dựng lên chip. Nếu cổng Arduino của bạn khác với / dev / ttyACM0, bạn phải chuyển giá trị chính xác với tham số dòng lệnh -p.

at89overlord -f./hello.ihx

Bước 5: Lắp ráp

cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp

Lắp ráp mạch theo sơ đồ. Có thể tìm thấy phiên bản PDF trong kho lưu trữ.

Bạn sẽ thấy đèn LED nhấp nháy màu xanh lục với tần số khoảng 0,5Hz.

Bước 6: Giải thích mã

Giải thích mã
Giải thích mã

#bao gồm

#bao gồm

Chúng tôi bắt đầu bằng cách bao gồm tiêu đề AT89X051 từ sdcc. Nó chứa các macro để tương tác với các thanh ghi như thể chúng là các biến. Chúng tôi cũng bao gồm stdint.h chứa định nghĩa của các kiểu số nguyên uint8_t và uint16_t.

// Giả sử bộ dao động là 16MHz

#define INTERRUPTS_PER_SECOND 5208

Ngắt xảy ra khi tràn Timer0. Nó được định cấu hình như một bộ đếm thời gian 8bit duy nhất, vì vậy điều này xảy ra sau mỗi 2 ^ 8 chu kỳ xử lý. Một chu kỳ xử lý mất 12 chu kỳ xung nhịp, và do đó chúng tôi đến 16000000/12/2 ^ 8 = 5208.33333.

dễ bay hơi uint8_t led_state = 0;

dễ bay hơi uint16_t timer_counter = INTERRUPTS_PER_SECOND;

Chúng tôi khai báo các biến điều khiển trạng thái dẫn và bộ đếm ngắt.

void Timer0_ISR (void) _interrupt (1) {

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

Mỗi khi Timer0 tràn bộ đếm được giảm xuống. Nếu nó bằng 0, nó sẽ được đặt lại và trạng thái dẫn được thay đổi. Điều này xảy ra khoảng một lần mỗi giây, dẫn đến tần số nhấp nháy của đèn LED ~ 0,5Hz.

int main () {

TMOD = 0x3; // Chế độ hẹn giờ - 8bits, không có bộ đếm trước. freq = OSCFREQ / 12/2 ^ 8 TL0 = 0; // Xóa bộ đếm TH0 = 0; // Xóa thanh ghi TR0 = 1; // Đặt hẹn giờ để chạy. ET0 = 1; // Đặt ngắt. EA = 1; // Đặt ngắt toàn cục. while (1) {if (led_state) {P1 = 0xFF; } else {P1 = 0x00; }}}

Chúng tôi cấu hình mô-đun hẹn giờ và chờ đợi những thay đổi trong biến điều khiển trạng thái dẫn. TMOD là thanh ghi điều khiển chế độ hẹn giờ. TL0 và TH0 là các thanh ghi điều khiển Timer0. ET0 là bit enable-timer0 trong thanh ghi điều khiển bộ định thời (TCON). TR0 và EA là các bit trong thanh ghi cho phép ngắt (IE).

Bước 7: Tài nguyên bổ sung

  • Biểu dữ liệu AT89C2051:
  • Trình biên dịch C cho thiết bị nhỏ (sdcc):
  • Tài nguyên của 8051:
  • Kho lập trình AT89C2051:
  • kho lưu trữ hello-8051:

Đề xuất: