Z82G516COM2.TXT - โปรแกรมตัวอย่างการใช้ COM2 ของชิพ 82G516A (Megawin 40 Pin) (พฤศจิกายน 2550 โดย เกรียงศักดิ์ บุญเสริมสุวงศ์) ชิพ 82G516A ของ Megawin เป็น MCU ขนาด 40 Pin ที่สมรรถนะสูงมาก นอกจากทำงานได้รวดเร็ว กว่า 12 เท่าแล้ว (1 Clock 1 คำสั่ง) ยังมี A/D ขนาด 10 Bit อีก 8 Channel ด้วย และที่สำคัญ ยังมี UART ให้อีก 1 ชุด นอกเหนือจากเดิมที่มีอยู่แล้ว 1 ชุด คือใช้เป็นพอร์ทสื่อสารแบบอนุกรม RS232 หรือ RS485 ต่าง ๆ ได้อย่างสะดวกมากขึ้น ซึ่งในที่นี้จะขอเรียกกว่า COM2 ตามรูปแบบเครื่อง PC ที่คุ้นเคย กันดี คือ COM1 หมายถึง UART เดิมที่มีอยู่ ส่วน COM2 หมายถึง UART ที่เพิ่มขึ้นใน 82G516A การมี COM2 เพิ่มขึ้นจะเหมาะสมกับงานประยุกต์ในปัจจุบันมาก เนื่องจากมีโอกาสที่จะต้องสื่อสารกับ อุปกรณ์ต่าง ๆ มากกว่า 1 ตัว ชิพตัวนี้จึงถือว่ามาแรงจริง ๆ ในตระกูล MCS-51 การใช้งาน COM2 ของ 82G516A ถือว่าง่ายมาก เพราะผู้ผลิตได้ออกแบบให้คล้าย ๆ กับโครงสร้างของ COM1 เดิมที่มีอยู่แล้ว ซึ่งจะประกอบด้วย SFR เพิ่มเติมดังนี้ (เป็น SFR เพิ่มเติมของชิพ 82G516A ที่ไม่ใช่ SFR พื้นฐานของ MCS-51) S2CON (0xaa) ... สำหรับกำหนดคุณสมบัติต่าง ๆ ของ COM2 (เหมือน SCON เดิม) S2BUF (0x9a) ... สำหรับเป็น Buffer ข้อมูล (เหมือน SBUF เดิม) S2BRT (0xba) ... สำหรับกำหนดความเร็วการสื่อสาร (คล้าย ๆ TH1 ของ TIMER1 ใน UART ตัวเดิม) AUXR2 (0xa6) ... สำหรับกำหนดการใช้งานเพิ่มเติมต่าง ๆ โปรแกรมตัวอย่างนี้ จะทำงานโดยเสมือนกับต่อ COM1 และ COM2 ผ่านถึงกัน โดยข้อมูลที่วิ่งมาจาก COM1-RX จะไปออกทาง COM2-TX และเพื่อให้แน่ใจว่าผ่านตัว MCU จริง จึงได้ทำการเปลี่ยนข้อมูล โดย +1 ขณะเดียวกันข้อมูลที่วิ่งมาจาก COM2-RX ก็จะไปออกทาง COM1-TX ด้วย และเปลี่ยนข้อมูลเป็น -1 การทดลองอาจจะใช้เครื่อง PC = 2 เครื่องต่อเข้ากับ COM1 และ COM2 และใช้โปรแกรมสื่อสาร (Terminal) ทำการกดคีย์บอร์ดดูได้ เมื่อกดคีย์ A จากเครื่องที่ต่อกับ COM1 ตัวอักษร B ก็จะปรากฎที่เครื่องที่ต่อกับ COM2 หรือเมื่อกด B จากเครื่องที่ต่อกับ COM2 ตัวอักษร A ก็จะปรากฏที่เครื่องที่ต่อกับ COM1 รายละเอียดขอให้ดูแนวทางจากโปรแกรมตัวอย่าง และถ้าต้องการศึกษาเพิ่มเติม ก็ดูได้จาก Data Sheet ของ 82G516A อีกที ในที่นี้จะสรุป Function ที่เกี่ยวข้องดังนี้ void start (void) ... กำหนดคุณสมบัติสำหรับทั้ง COM1 และ COM2 void sbytep (unsigned char x) ... ส่งข้อมูล 1 Byte ออกไปยัง COM1-TX unsigned char rbytep (void) ... รับข้อมูล 1 Byte จาก COM1-RX void sbytep2 (unsigned char x) ... ส่งข้อมูล 1 Byte ออกไปยัง COM2-TX unsigned char rbytep2 (void) ... รับข้อมูล 1 Byte จาก COM2-RX