[Print][Back] |
จุฬาลงกรณ์มหาวิทยาลัย คณะวิศวกรรมศาสตร์ ภาควิชาวิศวกรรมคอมพิวเตอร์ 2110264 Digital Design & Verification. |
ชื่อ ______________________________ เลขประจำตัว ________________________ หมายเลขเครื่อง ______________________ วันที่ ______________________________ |
2. คำสั่งบวก/ลบ และการอ่านเขียนข้อมูลจาก EEPROM |
วัตถุประสงค์
เพื่อให้นิสิตเกิดทักษะในการใช้งานเครื่องมือในชุดการพัฒนาโปรแกรม PIC มากขึ้น
เพื่อให้นิสิตเกิดทักษะในการเขียนโปรแกรมภาษา Assembly มากขึ้น
เพื่อให้นิสิตเข้าใจระบบจำนวนใน PIC
เพื่อให้นิสิตเข้าใจหลักการทำงานของ EEPROM
อุปกรณ์ที่แจกให้
ทฤษฎีที่เกี่ยวข้อง/อ้างอิง
ข้อมูลในหน่วยความจำ EEPROM และ FLASH ของ PIC สามารถอาจและเขียนได้ขณะที่ทำงานอยู่ กรณีการเขียนข้อมูลระบบจะทำการลบก่อนเขียนข้อมูลให้อัตโนมัติ (เราไม่สามารถลบข้อมูลได้ด้วยคำสั่งพิเศษใดๆ) การทำงานทั้งหมดของการอ่านและเขียนข้อมูลจาก EEPROM บน PIC จะกระทำผ่าน Special Function Registers (SFR) 6 ตัว คือ
EEDATA (10Ch)
EEDATH (10Eh)
EEADR (10Dh)
EEADRH (10Fh)
EECON1 (18Ch)
EECON2 (18Dh)
EECON1 เป็น Register ที่ใช้ควบคุมการเข้าถึงข้อมูลภายใน EEPROM และ EECON2 ใช้สำหรับการเขียนข้อมูล ภายใน EECON1 ประกอบด้วยบิตควบคุมอีก 5 บิต (ดังแสดงในรูปที่1) บิต EEPGD ใช้สำหรับระบุว่าต้องการจะอ้างอิงถึงหน่วยความจำ Program หรือ Data, บิต RD ใช้เพื่อควบคุมการเริ่มต้นอ่านข้อมูล และหากต้องการเขียนข้อมูลบิต WR ใช้ควบคุมการเริ่มต้นเขียนข้อมูล กับ WREN จะใช้ควบคุมการเขียน
รูปที่ 1 Register EECON1
ในการอ่านข้อมูลทำโดยการระบุตำแหน่งของข้อมูลที่ต้องการอ่านใน EEADR จากนั้น Set บิต RD เป็น 1 และอ่านผลลัพธ์ที่ได้จาก EEDATA (กรณีเป็นการอ่านจากหน่วยความจำโปรแกรม Program จะต้องระบุ Address ลงใน EEADRH ด้วย และผลลัพธ์ที่ได้จะเป็นขนาด 16 บิตอยู่ใน EEDATH:EEDATA) สำหรับการเขียนข้อมูลก็กระทำในลักษณะเดียวกัน แต่ให้ Set บิต WREN เป็น 1 ก่อน จึงจะเริ่มการเขียนด้วยการ Set บิต WR ตามลำดับ ดังแสดงได้จากตัวอย่างโปรแกรมที่ 1และ 2 (รายละเอียดเพิ่มเติมสามารถหาอ่านได้จาก Data sheet ของ PIC)
** ข้อควรระวังในขณะที่มีการเขียนข้อความลงใน EEPROM จะต้องไม่มีสัญญาณ Interrupt เกิดขึ้น **
โปรแกรมที่ 1 การอ่านข้อมูลจาก EEPROM |
โปรแกรมที่ 2 การเขียนข้อมูลลง EEPROM |
การทดลอง
ให้นิสิตเขียนโปรแกรมเพื่ออ่านข้อมูลจาก EEPROM ตำแหน่งที่ 0x00 และ 0x01 ขนาด 16 บิต (แทนค่าแบบ Little Indian และคิดเครื่องหมายแบบ 2Compliment) มาทำการบวกและผลต่างกับข้อมูลในตำแหน่งที่ 0x02 และ 0x03 ซึ่งมีขนาด 16 บิตเช่นกัน โดยนำผลลัพธ์ที่ได้จากการบวกมาเก็บที่ EEPROM ตำแหน่ง 0x10 และ 0x11 และเก็บผลต่างที่ตำแหน่ง 0x20 และ 0x21 ตามลำดับพร้อมแสดงการทดสอบการทำงาน
จงเขียนโปรแกรมเพื่อหาค่าเฉลี่ยของข้อมูล 4 ชุดที่อยู่ใน EEPROM ตำแหน่งที่ 0x00-0x03 ตามลำดับ โดยให้นำผลลัพธ์ค่าเฉลี่ยที่ได้มาเก็บที่ EEPROM ตำแหน่ง 0x30 ทั้งนี้ให้ใช้การ SHIFT/ROTATE แทนการหารและไม่ต้องแสดงจุดทศนิยม
[Print][Back] |