[Print][Back]

จุฬาลงกรณ์มหาวิทยาลัย

คณะวิศวกรรมศาสตร์

ภาควิชาวิศวกรรมคอมพิวเตอร์

2110264 Digital Design & Verification.

ชื่อ ______________________________

เลขประจำตัว ________________________

หมายเลขเครื่อง ______________________

วันที่ ______________________________


2. คำสั่งบวก/ลบ และการอ่านเขียนข้อมูลจาก EEPROM

วัตถุประสงค์

  1. เพื่อให้นิสิตเกิดทักษะในการใช้งานเครื่องมือในชุดการพัฒนาโปรแกรม PIC มากขึ้น

  2. เพื่อให้นิสิตเกิดทักษะในการเขียนโปรแกรมภาษา Assembly มากขึ้น

  3. เพื่อให้นิสิตเข้าใจระบบจำนวนใน PIC

  4. เพื่อให้นิสิตเข้าใจหลักการทำงานของ EEPROM

อุปกรณ์ที่แจกให้

ทฤษฎีที่เกี่ยวข้อง/อ้างอิง

ข้อมูลในหน่วยความจำ EEPROM และ FLASH ของ PIC สามารถอาจและเขียนได้ขณะที่ทำงานอยู่ กรณีการเขียนข้อมูลระบบจะทำการลบก่อนเขียนข้อมูลให้อัตโนมัติ (เราไม่สามารถลบข้อมูลได้ด้วยคำสั่งพิเศษใดๆ) การทำงานทั้งหมดของการอ่านและเขียนข้อมูลจาก EEPROM บน PIC จะกระทำผ่าน Special Function Registers (SFR) 6 ตัว คือ

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 เกิดขึ้น **

 

ADDR	EQU	70h
VALUE	EQU	71h
 ; Change Memory to BANK 2
BSF	STATUS, RP1
BCF	STATUS, RP0
 ; Set Read Address
MOVF	ADDR, W
MOVWF	EEADR
; Change Memory to BANK 3
BSF	STATUS, RP0
 ; ISSUE Read Command from Data Memory
BCF	EECON1, EEPGD
BSF	EECON1, RD
; Change Memory to BANK 2
BCF	STATUS, RP0
 ; Read Data
MOVF	EEDATA, W

โปรแกรมที่ 1 การอ่านข้อมูลจาก EEPROM

ADDR	EQU	70h
VALUE	EQU	71h
 ;
BSF	STATUS, RP1	; Change Memory to BANK 3
BSF	STATUS, RP0
BTFSC	EECON1, WR	; Wait for write to finish
GOTO	$-1
BCF	STATUS, RP0	; Change Memory to BANK 2
MOVF	ADDR, W		; Set Write Address & Data
MOVWF	EEADR
MOVF	VALUE, W
MOVWF	EEDATA
BSF	STATUS, RP0	; Change Memory to BANK 3
BCF	EECON1, EEPGD	; Prepare for  Write Command
BSF	EECON1, WREN
BCF	INTCON, GIE	; Disable Interrupt (if use)
MOVLW	0x55		; Write 0x55 to EECON2
MOVWF	EECON2
MOVLW	0xAA		; Write 0xAA to EECON2
MOVWF	EECON2
BSF	EECON1, WR	; Issue Write Command
BSF	INTCON, GIE	; Enable Interrupt (if use)
BCF	EECON1, WREN	; Clear Write Enable

โปรแกรมที่ 2 การเขียนข้อมูลลง EEPROM

การทดลอง

  1. ให้นิสิตเขียนโปรแกรมเพื่ออ่านข้อมูลจาก EEPROM ตำแหน่งที่ 0x00 และ 0x01 ขนาด 16 บิต (แทนค่าแบบ Little Indian และคิดเครื่องหมายแบบ 2’Compliment) มาทำการบวกและผลต่างกับข้อมูลในตำแหน่งที่ 0x02 และ 0x03 ซึ่งมีขนาด 16 บิตเช่นกัน โดยนำผลลัพธ์ที่ได้จากการบวกมาเก็บที่ EEPROM ตำแหน่ง 0x10 และ 0x11 และเก็บผลต่างที่ตำแหน่ง 0x20 และ 0x21 ตามลำดับพร้อมแสดงการทดสอบการทำงาน

  2. จงเขียนโปรแกรมเพื่อหาค่าเฉลี่ยของข้อมูล 4 ชุดที่อยู่ใน EEPROM ตำแหน่งที่ 0x00-0x03 ตามลำดับ โดยให้นำผลลัพธ์ค่าเฉลี่ยที่ได้มาเก็บที่ EEPROM ตำแหน่ง 0x30 ทั้งนี้ให้ใช้การ SHIFT/ROTATE แทนการหารและไม่ต้องแสดงจุดทศนิยม

[Print][Back]