ZMCP23008.TXT - โปรแกรมตัวอย่างสำหรับชิพ MCP23008 8-BIT I/O Port (พฤศจิกายน 2548 โดย เกรียงศักดิ์ บุญเสริมสุวงศ์) ชิพ MCP23008 คือชิพขนาด 18 Pin (Dip) สำหรับขยายเป็น 8-BIT I/O Port โดยจะสื่อสารกับ MCU ด้วยขาสัญญานเพียง 2 เส้น แบบ I2C (SCL,SDA) ช่วยเพิ่ม I/O ให้กับ MCU ได้อย่างสะดวก สามารถ ต่อพ่วงกันได้หลายตัวด้วยสายสัญญาน 2 เส้นเท่าเดิม กำหนดให้เป็น In หรือ Out ได้อย่างอิสระ มีขา Interrupt สำหรับส่งสัญญานให้กับ MCU ที่สามารถตั้งให้ใช้กับ I/O ขาใดก็ได้ และที่สำคัญ ... ราคาถูก โปรแกรมตัวอย่างนี้จะต่อทดลองด้วยบอร์ด SLAB-51 พร้อมกับชิพ MCP23008 ที่ต่อลงโปรโตบอร์ดอีกที เนื้อหาของโปรแกรมจะกระทำเป็น 2 ส่วน คือกำหนดให้เป็น Output ก่อน และส่งค่าให้เป็น Low ไล่ไปทีละบิท ถ้าต่อขา I/O ทั้ง 8 BIT เข้ากับ LED ในแบบ Active Low ก็จะเห็นเป็นไฟวิ่งทีละดวงนั่นเอง และต่อจาก นั้นก็จะกำหนดให้เป็น Input และจะอ่านค่าจาก I/O มาแสดงบนจอ PC (คือผ่าน RS232 และใช้โปรแกรม สื่อสาร Sterm บน PC เพื่อดูผลการทำงาน) เป็นตัวอย่างแบบพอสังเขป และไม่มีประเด็นเรื่อง Interrupt การต่อชิพ MCP23008 กับ MCU จะใช้ขาสัญญานดังนี้ ขา SCL ต่อกับ MCU P1.5 ขา SDA ต่อกับ MCU P1.6 ส่วนขา A0,A1,A2 จะต่อลง GND ทั้งหมด และขา /RESET ให้ต่อกับ VCC ไว้ Function ต่าง ๆ ในช่วงต้นของโปรแกรม จะเป็นพื้นฐานทั่วไปสำหรับการสื่อสารแบบ I2C (ไอ สแควร์ ซี) กับเรื่องการหน่วงเวลา ส่วน ip23008wr (unsigned char addr,com,dat) จะเป็นการส่งคำสั่งไปยังชิพ โดย addr จะอ้างอิงตามขาสัญญาน A0,A1,A2 ที่กำหนดไว้ คือถ้าจะส่งคำสั่งไปยังชิพตัวใด (กรณีต่อพ่วง กันหลายตัว) ก็ต้องใส่ค่า addr ให้ตรงกับ Hardware ที่ต่ออยู่จริง ซึ่งจะมีค่าใดตั้งแต่ 0-7 ตัวแปร com คือหมายเลขของ Register ภายในของ MCP23008 (ดูรายละเอียดจาก Data Sheet) คือ Register แต่ละตัว ก็จะเป็นการกำหนดคุณสมบัติต่าง ๆ รวมทั้งสถานะของ I/O ด้วย และสุดท้ายตัวแปร dat คือข้อมูล ที่จะส่งไปยัง Register นั้น ๆ ส่วน unsigned char ip23008rd (unsigned char addr,com) ก็จะเป็น ขบวนการอ่านค่ากับมายัง MCU รวมไปถึงการอ่านค่าจาก Input Port ด้วย ... ทำความเข้าใจโดยละเอียด จากตัวโปรแกรมอีกทีครับ ... ภาษา C ... หมูอยู่แล้ว