สารบัญ:

ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)
ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การเขียนไฟวิ่งอย่างง่ายด้วย ไมโครคอนโทรเลอร์AT89C2051 2024, ธันวาคม
Anonim
ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino)
ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino)

8051 (หรือที่เรียกว่า MCS-51) คือการออกแบบ MCU จากยุค 80 ที่ยังคงได้รับความนิยมในปัจจุบัน ไมโครคอนโทรลเลอร์รุ่นใหม่ที่เข้ากันได้กับ 8051 มีจำหน่ายจากผู้จำหน่ายหลายราย ในรูปทรงและขนาดทั้งหมด และมีอุปกรณ์ต่อพ่วงที่หลากหลาย ในคำแนะนำนี้เราจะดู AT89C2051 MCU จาก Atmel

AT89C2051 เป็นไมโครคอนโทรลเลอร์ขนาดเล็ก (2Kbyte Flash, 128byte RAM) ราคาถูก (~ 1.40 เหรียญต่อชิป) ไมโครคอนโทรลเลอร์ คุณสมบัติ:

  • 2.7-6V การทำงาน
  • 15 สาย I/O
  • 2 ตัวจับเวลา (16 บิต)
  • การขัดจังหวะภายในและภายนอก
  • UART
  • เครื่องเปรียบเทียบอนาล็อกบนชิป
  • สูงสุด 2MIPS พร้อมนาฬิกา 24MHz

ขั้นตอนที่ 1: ข้อกำหนด

ความต้องการ
ความต้องการ

ความต้องการ:

  • Linux PC (ซอฟต์แวร์ที่จำเป็น: Arduino IDE, git, make, sdcc)
  • Arduino UNO
  • ชิป AT89C2051 (แพ็คเกจ DIP20)
  • ซ็อกเก็ต ZIF 20 พิน
  • ออปโตคัปเปลอร์ (ควรเป็นเอาต์พุต MOSFET)
  • ชิลด์สร้างต้นแบบ Arduino
  • แหล่งจ่ายไฟ 12V
  • แหล่งจ่ายไฟ 5V
  • คริสตัลออสซิลเลเตอร์ 16MHz
  • ตัวเก็บประจุ 2x 30pF
  • ตัวเก็บประจุ 100nF
  • ไดโอด (เช่น: 1N400X)
  • ตัวต้านทาน (1K, 3K3)
  • โปรโตบอร์ด
  • จัมเปอร์
  • ลวดทองแดง

ตรวจสอบซอฟต์แวร์ที่จำเป็น:

ซึ่ง python3

ซึ่งทำให้ sdcc ใดที่ git

ขั้นตอนที่ 2: การสร้างโปรแกรมเมอร์

การสร้างโปรแกรมเมอร์
การสร้างโปรแกรมเมอร์
การสร้างโปรแกรมเมอร์
การสร้างโปรแกรมเมอร์
การสร้างโปรแกรมเมอร์
การสร้างโปรแกรมเมอร์

ส่วนนี้จะสั้น ๆ เนื่องจากฉันได้สร้างเกราะป้องกันการเขียนโปรแกรมมาระยะหนึ่งแล้ว ฉันได้แนบแผนผังและรูปภาพของบอร์ดที่ประกอบแล้ว PDF ของแผนผังสามารถพบได้ในที่เก็บ

คุณจะต้องตั้งโปรแกรมบอร์ดโปรแกรมเมอร์:

1. โคลนที่เก็บ

โคลน git

2. เปิดไฟล์ AT89C2051_programmer/AT89_prog/AT89_prog.ino ใน Arduino IDE

3. สร้างและอัปโหลดภาพร่างจาก Arduino IDE

ขั้นตอนที่ 3: การติดตั้งซอฟต์แวร์โปรแกรมเมอร์

การติดตั้งซอฟต์แวร์โปรแกรมเมอร์
การติดตั้งซอฟต์แวร์โปรแกรมเมอร์
การติดตั้งซอฟต์แวร์โปรแกรมเมอร์
การติดตั้งซอฟต์แวร์โปรแกรมเมอร์

1. สร้างสภาพแวดล้อมเสมือนของหลาม

python3 -m venv venv

. venv/bin/เปิดใช้งาน

2. ติดตั้ง at89overlord at89overlord เป็นโปรแกรมเมอร์โอเพ่นซอร์สสำหรับชิป AT89C2051 ที่เขียนโดยฉัน สามารถดูซอร์สโค้ดได้ที่นี่

pip ติดตั้งที่89overlord

3. ตรวจสอบการติดตั้ง

at89overlord -h

ขั้นตอนที่ 4: การเขียนโปรแกรมชิป

การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป
การเขียนโปรแกรมชิป

1. โคลนโครงการกะพริบตาอย่างง่าย

ซีดี ~

โคลน git https://github.com/piotrb5e3/hello-8051.git cd hello-8051/

2. สร้างแอปพลิเคชัน

ทำ

3. เชื่อมต่อ Arduino กับพีซี ต่อแหล่งจ่ายไฟ 12V วางชิป AT89C2051 ลงในซ็อกเก็ต ZIF

4. ค้นหาพอร์ตอนุกรมของ Arduino

ls /dev/tty*

5. อัปโหลดไฟล์ IntelHex ที่สร้างขึ้นไปยังชิป หากพอร์ต Arduino ของคุณแตกต่างจาก /dev/ttyACM0 คุณต้องส่งค่าที่ถูกต้องด้วยพารามิเตอร์บรรทัดคำสั่ง -p

at89overlord -f./hello.ihx

ขั้นตอนที่ 5: การประกอบ

การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ

ประกอบวงจรตามแผนผัง เวอร์ชัน PDF สามารถพบได้ในที่เก็บ

คุณควรเห็นไฟ LED สีเขียวกะพริบที่ความถี่ประมาณ 0.5Hz

ขั้นตอนที่ 6: คำอธิบายโค้ด

คำอธิบายรหัส
คำอธิบายรหัส

#รวม

#รวม

เราเริ่มต้นด้วยการรวมส่วนหัว AT89X051 จาก sdcc มันมีมาโครสำหรับการโต้ตอบกับรีจิสเตอร์ราวกับว่าเป็นตัวแปร นอกจากนี้เรายังรวม stdint.h ซึ่งมีคำจำกัดความของประเภทจำนวนเต็ม uint8_t และ uint16_t

// สมมติว่าออสซิลเลเตอร์เป็น 16MHz

#define INTERRUPTS_PER_SECOND 5208

การขัดจังหวะเกิดขึ้นเมื่อ Timer0 ล้น มันถูกกำหนดค่าเป็นตัวจับเวลา 8 บิตตัวเดียว ดังนั้นสิ่งนี้จะเกิดขึ้นทุกๆ 2^8 รอบโปรเซสเซอร์ รอบโปรเซสเซอร์หนึ่งรอบใช้เวลา 12 รอบสัญญาณนาฬิกา ดังนั้นเราจึงมาถึง 16000000/12/2 ^ 8 = 5208.33333

ระเหย uint8_t led_state = 0;

ระเหย uint16_t timer_counter = INTERRUPTS_PER_SECOND;

เราประกาศการควบคุมสถานะนำและตัวแปรตัวนับขัดจังหวะ

โมฆะ Timer0_ISR (เป็นโมฆะ) _ ขัดจังหวะ (1) {

timer_counter--; ถ้า (timer_counter == 0) { led_state = !led_state; timer_counter = INTERRUPTS_PER_SECOND; } }

ทุกครั้งที่ Timer0 ล้น ตัวนับจะลดลง หากมีค่าเท่ากับศูนย์ ระบบจะรีเซ็ต และสถานะนำจะเปลี่ยนไป สิ่งนี้เกิดขึ้นประมาณหนึ่งครั้งต่อวินาที ส่งผลให้ความถี่ LED กะพริบ ~0.5Hz

int หลัก () {

TMOD = 0x3; // โหมดจับเวลา - 8 บิต, ไม่มีพรีสเกลเลอร์ ความถี่ = OSCFREQ/12/2^8 TL0 = 0; // ล้างตัวนับ TH0 = 0; // ล้างการลงทะเบียน TR0 = 1; // ตั้งเวลาให้ทำงาน ET0 = 1; // ตั้งค่าอินเตอร์รัปต์ อีเอ = 1; // ตั้งค่าอินเตอร์รัปต์ทั่วโลก ในขณะที่ (1) { ถ้า (led_state) { P1 = 0xFF; } อื่นๆ { P1 = 0x00; } } }

เรากำหนดค่าโมดูลตัวจับเวลาและรอการเปลี่ยนแปลงในตัวแปรควบคุมสถานะนำ TMOD คือการลงทะเบียนควบคุมโหมดตัวจับเวลา TL0 และ TH0 เป็นรีจิสเตอร์ควบคุม Timer0 ET0 เป็นบิต enable-timer0 ในการลงทะเบียนควบคุมตัวจับเวลา (TCON) TR0 และ EA เป็นบิตในการลงทะเบียนเปิดใช้งานการขัดจังหวะ (IE)

ขั้นตอนที่ 7: แหล่งข้อมูลเพิ่มเติม

  • เอกสารข้อมูล AT89C2051:
  • คอมไพเลอร์ C อุปกรณ์ขนาดเล็ก (sdcc):
  • แหล่งข้อมูล 8051:
  • ที่เก็บโปรแกรมเมอร์ AT89C2051:
  • ที่เก็บ hello-8051:

แนะนำ: