แกนหลักของไมโครโปรเซสเซอร์: ตัวนับแบบ 8 บิต
ก่อนจะมี seven-segment display หรือหน้าจอ LCD คอมพิวเตอร์สื่อสารกันด้วยโค้ด Binary อย่างแท้จริง โปรเจกต์ 8-Bit Binary Counter นี้ใช้ LED ธรรมดา 8 ตัวเรียงกัน เพื่อแสดงให้เห็นภาพว่าชิป ATmega328P (Arduino Uno) แบบ 8-bit คิดและประมวลผลตัวเลขของมันอย่างไร

การจัดการ Register
ผู้เริ่มต้นจะเขียนโค้ด digitalWrite() ถึง 8 บรรทัดเพื่อเปิดและปิด LED
- ผู้เชี่ยวชาญใช้ Direct Port Manipulation
- แทนที่จะจัดการแต่ละ pin แยกกัน คุณจะจัดการกลุ่มของ pin ทั้งหมดเป็น "Port" แบบ 8-bit ตัวเดียว เช่น PORTD (pin 0 ถึง 7)
- คุณสร้างตัวแปร integer:
int counter = 0; - ภายใน loop คุณจะเขียน:
PORTD = counter;และcounter++; - Arduino จะแปลงตัวเลขเป็นรูปแบบ Binary ทันที (เช่น ถ้า
counterคือ 5 จะกลายเป็น0b00000101และเปิด LED ดวงที่ 1 และ 3 พร้อมกัน)
เกิน 255 (การ Overflow)
Register แบบ 8-bit มีแค่ 8 ช่อง
- ตัวเลขสูงสุดที่สามารถเก็บได้คือ
11111111ในรูปแบบ Binary ซึ่งเท่ากับ255ในฐานสิบ - เมื่อตัวแปร
counterถึง 255 และloop()ทำงานcounter++อีกครั้ง พื้นที่หน่วยความจำกายภาพก็จะหมดลง - Register จะเกิดการ Overflow กลับไปที่
00000000(ทำให้ LED ทั้ง 8 ดวงดับลงทันที) และเริ่มนับใหม่จากศูนย์ นี่คือแนวคิดที่สำคัญในการจัดการหน่วยความจำ
การจัดหาส่วนประกอบ
- Arduino Uno/Nano
- LED 8 ตัว (สีใดก็ได้) และ Resistor 8 ตัว (220-Ohm)
- Breadboard และสาย jumper wiring จำนวนมาก
- (การอัปเกรดเสริม): 74HC595 Shift Register เพื่อควบคุม LED ทั้ง 8 ตัวโดยใช้เพียง 3 data pin แทนที่จะกินพื้นที่ 8 pin บนบอร์ด!