AVR ต้องกำหนดทิศทางของ port ก่อนค่ะ ว่าเป็น input หรือ output โดยใช้คำสั่ง DDx (ความเห็นที่ 2 และ 5 ค่ะ) หลังจากนั้นถึงจะมีการ set ค่าที่รับหรือส่งที่หลัง
เช่นถ้ากำหนดขานั้น ๆ เป็น Input ก็มากำหนดว่าจะรับค่าที่เป็นไฟบวกหรือเช็คว่าขานั้นมีสถานะเป็น GND หรือยัง
หรือว่ากำหนดให้เป็น output ก็มากำหนดว่าจะให้ส่งไฟบวกออกไปทำให้ LED ติด หรือทำให้ขานั้นมีสถานะเป็น GND เช่นกันค่ะ (LED ก็สามารถติดได้เหมือนกัน ถ้ามีแหล่งจ่ายไฟจากข้างนอกรอการมาลง GND ใน MCU ค่ะ) 
AVR ที่เราเรียนอยู่เป็น 8 BIT ค่ะ จะสังเกตุเห็นได้ว่า ATmega16 มีขาในหมวด A, B, C, D ในแต่ละหมวดก็มี 8 ขา จาก 0 - 7 ค่ะ
แต่ถ้ามาดูที่ ATmega8 จะมีแค่หมวด B, C, D สำหรับหมวด B, D ในแต่ละหมวดก็มี 8 ขา จาก 0 - 7 เหมือนกันค่ะ แต่หมวด C มีไม่ครบอ่ะ นอกจากนี้ถ้าเราไปกำหนด DDRA = 0xFF ใน ATmega 8 มันก็จะไม่ทำงานด้วยนะคะ เพราะมันไม่มีหมวดนี้อ่ะ
คุยกันเรื่องบิต เห็นว่าเป็นหน่วยข้อมูล และถ้าดูตำแหน่งในรีจิสเตอร์ต่าง ๆ เห็นแล้วนึกถึงห้องแถว 8 ห้อง ห้องแรกทำงานแบบนี้ (เป็นร้านทอง) ห้องที่สองทำงานอีกอย่าง (เป็นร้านก๋วยเตี๋ยว) ส่วนห้องที่สามก็ทำงานอีกอย่าง (เป็นร้านซ่อมรถ) อะไรประมาณนั้น
ต้นหอมอยากทราบว่า ถ้าเป็น MCU พวก 16 บิต 32 บิต จะเขียนกำหนด PORT ต่างจากพวก 8 บิต ที่เรากำลังเรียนอยู่อย่างไรคะ? 
แก้ไขเมื่อ 09 ส.ค. 51 11:10:51