Z82E54FDAT.TXT - โปรแกรมตัวอย่างการใช้ Flash-Data ของชิพ 82E54AE2 (Megawin 28 Pin) (พฤศจิกายน 2550 โดย เกรียงศักดิ์ บุญเสริมสุวงศ์) ชิพ 82E54AE2 ของ Megawin ตัวเล็กก็จริง แต่คุณภาพใหญ่โตมาก คุณสมบัติหนึ่งที่น่าสนใจมากก็คือ สามารถใช้พื้นที่ของ Flash Memory ภายใน เป็น IAP หรือ In-Application Program ได้ คือนำมาใช้ เก็บข้อมูลต่าง ๆ แทนตัว EEProm โดยเฉพาะอย่างยิ่ง ข้อมูลที่เป็นค่า Setup ต่าง ๆ ที่ไม่ได้มีการเปลี่ยน แปลงบ่อย ๆ ซึ่งเรียกพื้นที่นี้ว่า Flash-Data โปรแกรมตัวอย่างนี้จะแสดงการใช้งาน Flash-Data อย่าง ง่าย ๆ เพื่อเป็นแนวทางไปต่อยอดอีกที โดยมีข้อมูลพื้นฐานดังนี้ พื้นที่ Flash Memory ในตัว MCU จะกำหนดเป็นส่วน ๆ ได้คือ AP=Application Program IAP= In-Application Program หรือ Flash-Data และ ISP=In-System Programming ทั้งนี้จะกำหนดได้ ด้วย Nonvolatile Option Registers คือ OR0 และ OR1 ... โดยการกำหนดนี้จะทำได้ผ่านเครื่องโปรแกรม ชิพแบบขนานเท่านั้น (เช่น ALL-11 ของ Hi-lo) ไม่สามารถกำหนดผ่านการโปรแกรมแบบ ISP ได้ อย่างไร ก็ตาม ค่า OR ได้ถูกกำหนดจากโรงงานผู้ผลิตชิพแล้ว ดังนี้ พื้นที่ AP = 6K (0x0000-0x17FF) พื้นที่ IAP = 8K (0x1800-0x37FF) พื้นที่ ISP = 1.5K (0x3800-0x3DFF) ในกรณีพื้นที่ AP ถ้าจำเป็นต้องใส่โปรแกรมที่ใหญ่กว่า 6K ก็ไม่ต้องห่วง สามารถโหลดลงชิพและใช้งาน ครอบคลุมพื้นที่ IAP ไปได้เลย แต่การใช้พื้นที่ IAP จะใช้ได้เฉพาะช่วง 8K ที่กำหนดเท่านั้น และต้องระวัง ไม่ให้ไปทับซ้อนกับบริเวณของโปรแกรม AP ด้วย การใช้งาน Flash-Data จะต้องรู้ถึง SFR ที่เกี่ยวข้องคือ (เป็น SFR เพิ่มเติมของชิพ 82E54AE2 ที่ไม่ใช่ SFR พื้นฐานของ MCS-51) ISPCR (0xe7) ... กำหนดการใช้งาน และค่า Wait time ตามความถี่ Clock ที่ใช้ IFMT (0xe5) ... กำหนดโหมดการทำงาน อ่าน (read) , เขียน (write) หรือ ล้าง (erase) IFD (0xe2) ... อ่านเขียนข้อมูล Data IFADRH (0xe3) ... กำหนด Address (High Byte) IFADRL (0xe4) ... กำหนด Address (Low Byte) SCMD (0xe6) ... สำหรับการสั่งให้ทำงาน ด้วยการใส่ค่า 0x46 และ 0xB9 ต่อเนื่องกัน พื้นที่ Flash-Data ก่อนจะทำการเขียน จะต้องทำการล้างก่อนเสมอ โดยการล้างของ 82E54AE2 นี้ จะทำได้เป็น Page โดยมีพื้นที่ 512 ฺByte โดยการล้างก็คือการทำให้พื้นที่ทั้ง 512 Byte มีค่าเป็น 0xFF รายละเอียดต่าง ๆ ขอให้ทำความเข้าใจจากตัวโปรแกรมอีกที โดยมี Function หลัก ๆ ที่เกี่ยวข้องดังนี้ void e54er (unsigned int addr) ... สำหรับล้างพื้นที่ใน Flash-Data (512 Byte) เริ่มต้นที่ addr void e54wr (unsigned int addr,unsigned char dat) ... เขียนข้อมูล 1 Byte ที่ addr ด้วยค่า dat unsigned char e54rd (unsigned int addr) ... อ่านข้อมูล 1 Byte ที่ตำแหน่ง addr การ read ข้อมูลจาก Flash-Data ... นอกจากการเรียกใช้งานผ่าน function e54rd แล้ว ผู้ใช้อาจจะ ใช้คำสั่ง MOVC (ในภาษา Assembly) หรือตัวอ้างอิง CBYTE[ ] (ในภาษา C) ก็ได้เหมือนกัน ... 82E54AE2 หรือ 82E54AS2 (ตัวถัง Smd) ชิพตัวเก่งนี้ ... ถ้าลองได้ใช้ละก็ หลงรักเลยล่ะ ...