สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนด
- ขั้นตอนที่ 2: การสร้างโปรแกรมเมอร์
- ขั้นตอนที่ 3: การติดตั้งซอฟต์แวร์โปรแกรมเมอร์
- ขั้นตอนที่ 4: การเขียนโปรแกรมชิป
- ขั้นตอนที่ 5: การประกอบ
- ขั้นตอนที่ 6: คำอธิบายโค้ด
- ขั้นตอนที่ 7: แหล่งข้อมูลเพิ่มเติม
วีดีโอ: ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรม 8051 ด้วย AT89C2051 (แขกรับเชิญ: Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
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:
แนะนำ:
วิธีการตั้งค่า OSMC ด้วย Hyperion บน Raspberry Pi ด้วย WS2812b Led Strip: 8 ขั้นตอน
วิธีการตั้งค่า OSMC ด้วย Hyperion บน Raspberry Pi ด้วย WS2812b Led Strip: บางครั้งฉันพูดภาษาอังกฤษได้ดีมาก บางครั้งก็ไม่มี… สิ่งแรกเลย นี่เป็นการสอนครั้งแรกของฉันและภาษาอังกฤษไม่ใช่ภาษาแม่ของฉัน ดังนั้นโปรดอย่ากดดันฉันมากเกินไป นี่จะไม่เกี่ยวกับวิธีการสร้างเฟรมที่ง่าย มันเกี่ยวกับการติดตั้ง
นับจาก 0 ถึง 9999 ด้วย 8051 โดยใช้ 7 Segment Display: 5 Steps
การนับตั้งแต่ 0 ถึง 9999 ด้วย 8051 การใช้จอแสดงผล 7 ส่วน: สวัสดีทุกคน ในบทช่วยสอนนี้ เราจะบอกคุณเกี่ยวกับวิธีการนับจาก 0 ถึง 9999 โดยใช้การแสดงผล 7 ส่วนสี่ส่วนโดยใช้พอร์ตเดียวและหมุดดิจิทัล 4 ตัว
วิธีสร้าง CubeSat ด้วย Arduino ด้วย Arducam: 9 ขั้นตอน
วิธีสร้าง CubeSat ด้วย Arduino ด้วย Arducam: ในรูปแรก เรามี Arduino และเรียกว่า "Arduino Uno"ในรูปที่สอง เรามี Arducam และเรียกว่า "Arducam OV2640 มินิ 2MP"พร้อมกับภาพที่สอง มีวัสดุที่คุณต้อง
การควบคุม LED Matrix Array ด้วย Arduino Uno (หน้าหุ่นยนต์ที่ขับเคลื่อนด้วย Arduino): 4 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมอาร์เรย์เมทริกซ์ LED ด้วย Arduino Uno (หน้าหุ่นยนต์ขับเคลื่อนด้วย Arduino): คำแนะนำนี้แสดงวิธีควบคุมอาร์เรย์ของเมทริกซ์ LED 8x8 โดยใช้ Arduino Uno คู่มือนี้อาจใช้เพื่อสร้างการแสดงผลที่เรียบง่าย (และค่อนข้างถูก) สำหรับโครงการของคุณเอง วิธีนี้ทำให้คุณสามารถแสดงตัวอักษร ตัวเลข หรือแอนิเมชั่นที่กำหนดเอง
การแสดงหมายเลขปุ่มกดใน LCD 16 X 2 ด้วย 8051: 4 ขั้นตอน
การแสดงหมายเลขปุ่มกดใน LCD ขนาด 16 X 2 ด้วย 8051: ในโครงการนี้ เราจะเชื่อมต่อปุ่มกดและจอแอลซีดีกับ 8051 ขณะที่เรากดปุ่มบนปุ่มกด เราก็จะได้รับหมายเลขการติดต่อในจอ LCD ของเรา