¸¶ÇÏÀüÀÚ±â¼ú¿¬±¸¼Ò LOGO

Á¦Ç°°Ë»ö °í°´¼¾ÅÍ053-604-2355
±â¼úÀÚ·á½Ç

Home > ±â¼úÀÚ·á½Ç ±â¼úÀÚ·á½Ç

Á¦ ¸ñ 6. ÇÁ·Î±×·¥ EEPROM¿¡ÀÇ Read/WriteÀÇ ¹æ
÷ºÎÆÄÀÏ


ÇÁ·Î±×·¥ EEPROM¿¡ÀÇ Read/Write ¹æ¹ý

¡¼°³¿ä¡½

PIC16F877¿¡ »õ·Ó°Ô Ãß°¡µÈ ±â´ÉÀ¸·Î, ÀÇ¿Ü·Î ¾Ë·ÁÁöÁö ¾ÊÀº °ÍÀÌ, ÇÁ·Î±×·¥
±×¸®°í ÇÁ·Î±×·¥ ³»¿ë ±× ÀÚü¸¦ °³¼­¸¦ ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù.
Áï, Áö±Ý±îÁö´Â, PIC16F84¸¦ ½ÃÀÛÇطμ­ ÇÁ·Î±×·¥ Àڽſ¡¼­´Â, µ¥ÀÌŸ¸Þ¸ð¸®
¹Û¿¡ °³¼­¸¦ ÇÒ ¼ö°¡ ¾ø¾ú½À´Ï´Ù¸¸, PIC16F8xx ½Ã¸®Áî¿¡¼­´Â,
ÇÁ·Î±×¶÷¸Þ¸ð¸®°¡ Ç÷¡½¬ ¸Þ¸ð¸®À̸ç, ÇÑÆí ÇÁ·Î±×·¥À¸·Î, ÀÌ ¸Þ¸ð¸®¿¡ ½á
Æ÷ÇÔÀ» ÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.

ÀÌ°ÍÀ» »ç¿ëÇϸé(ÀÚ), Áö±Ý±îÁö 256¹ÙÀÌÆ® ¹Û¿¡ ¾ø¾ú´ø µ¥ÀÌÅÍ EEPROM°¡, ÇѲ¨¹ø¿¡ ÃÖ´ë
8 k¿öµå(14ºñÆ®Æø)±îÁö È®´ëÇÏ°Ô µË´Ï´Ù.
(¿ìµµ ÇÁ·Î±×·¥ ÀÚ½ÅÀÌ ÀÖÀ¸¹Ç·Î À̰ͺ¸´Ù ÀûÁö´Â µË´Ï´Ù¸¸)

ÇÁ·Î±×¶÷¸Þ¸ð¸®¿¡ÀÇ Read/Write ¼ø¼­´Â, EEPROM µ¥ÀÌŸ¸Þ¸ð¸®¿Í À¯»çÇÑ ¼ø¼­¿Í
µÇ¾î ÀÖ½À´Ï´Ù¸¸, ±âÀÔ ¿Ï·á ±â´Ù¸®´Â ¹æ¹ýÀÌ Å©°Ô Â÷ÀÌ°¡ ³³´Ï´Ù.
Áï, ÀÏ´Ü ±âÀÔÇØ Áö·ÉÀ» ³»¸®¸é(ÀÚ), PIC ÀÚ½ÅÀÌHALT ¸ðµå, Áï Á¤Áö»óÅÂÅÂ
µÇ¾î, ¸Þ¸ð¸®¿¡ÀÇ ±âÀÔÀÌ ¿Ï·áÇϸé(ÀÚ) ÀÚµ¿ÀûÀ¸·Î Á¤ÁöÇÑ ´ÙÀ½ÀÇ ¸í·ÉÀ¸·ÎºÎÅÍ ÇÁ·Î±×¶ó
¹«ÀÇ ½ÇÇàÀ» Àç°³ÇÕ´Ï´Ù.

ÀÌ°Í¿¡ ´ëÇØ Àб⠼ø¼­´Â EEPROM µ¥ÀÌŸ¸Þ¸ð¸®¿Í °°Àº ¼ø¼­°¡ µÇ°í ÀÖ½À´Ï´Ù.
±×·¯³ª ÁÖ¼Òµµ µ¥ÀÌÅ͵µ 1¹ÙÀÌÆ® ÀÌ»óÀÇ ÆøÀÌ ÀÖÀ¸´Ï±î, °Å±âÀÇ °÷ÀÌ Á¶±Ý
Â÷ÀÌ°¡ ³³´Ï´Ù.

¡¼·¹Áö½ºÅÍÀÇ »ó¼¼ ³»¿ë¡½

ÇÁ·Î±×¶÷¸Þ¸ð¸®ÀÇ Read/Write¿¡ °ü·ÃÇÏ´Â ·¹Áö½ºÅÍ¿¡´Â ¾Æ·¡¿Í °°ÀÌ°¡ ÀÖ½À´Ï´Ù.

¡¡¡¡EECON1¡¡£ºRead/Write Á¦¾î ·¹Áö½ºÅÍ
¡¡¡¡EECON2¡¡£ºRead/Write ¼ø¼­ Á¦¾î ·¹Áö½ºÅÍ
¡¡¡¡EEDATA¡¡£ºµ¥ÀÌÅÍ ÇÏÀ§ ¾Æ¸£¹ÙÀÌÆ®
¡¡¡¡EEDATH¡¡£ºµ¥ÀÌÅÍ »óÀ§ ¾Æ¸£¹ÙÀÌÆ®(µ¥ÀÌÅÍ´Â 14ºñÆ®Æø)
¡¡¡¡EEADR¡¡ £ºÁÖ¼Ò ÇÏÀ§ ¾Æ¸£¹ÙÀÌÆ®
¡¡¡¡EEADRH¡¡£ºÁÖ¼Ò »óÀ§ ¾Æ¸£¹ÙÀÌÆ®(ÁÖ¼Ò´Â 13ºñÆ®Æø)

¡ìEECON1 ·¹Áö½ºÅÍÀÇ »ó¼¼¡í
¡¡Á¦¾î¿ë ·¹Áö½ºÅÍ¿¡¼­´Â EECON1°¡ Áß¿äÇÑ ±â´ÉÀ» ÇÏ°í ÀÖ½À´Ï´Ù. ±× ³»¿ëÀº
¹Ø±×¸²°ú °°ÀÌ µÇ¾î ÀÖ¾î, EEPGD ºñÆ®°¡ EEPROMÀÇ µ¥ÀÌŸ¸Þ¸ð¸®¿Í ÇÁ·Î±×·¥
¸Þ¸ð¸®ÀÇ ±¸º°À» ½Ç½ÃÇÏ´Â ºñÆ®°¡ µÇ°í ÀÖ½À´Ï´Ù.




¡¼Read/Writte ¼ø¼­ »ó¼¼¡½

½ÇÁ¦·Î ÇÁ·Î±×¶÷¸Þ¸ð¸®¿¡ Read/Write ÇÏ´Â ¼ø¼­´Â ¾Æ·¡¿Í °°Àº Ç÷ο쵵¿Í °°ÀÌ
ÇÕ´Ï´Ù.
µ¶¹æÆíÀº °í¼ÓÀ¸·Î 1 ¸í·ÉÀÇ ½ÇÇà ½Ã°£³»¿¡ ÀÐ¾î µ¿ÀÛÀ» ¿Ï·áÇϹǷÎ, ¾à¼Ó
µîÀ» ÇÒ ÇÊ¿ä´Â ÀüÇô ¾ø½À´Ï´Ù.
±×·¯³ª ±â·ÏÀº,
4~10msecÁ¤µµÀÇ ½Ã°£À» ÇÊ¿ä·Î ÇØ, ÀÌ ¾à¼ÓÀÇ »çÀÌ
(Àº)´Â, PIC´Â Á¤Áö»óÅÂÅ°¡ µÇ±â ¶§¹®¿¡, »ç¿ë¹ý¿¡ ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù.
ƯÈ÷ °í¼Ó 󸮷Î, ÀÏÁ¤½Ã°£³»ÀÇ ½ÇÇàÀ» ÇÊ¿ä·Î ÇÏ´Â °Í °°Àº ó¸®Áß¿¡¼­ ±â·ÏÀ» ½Ç½ÃÇÑ´Ù
ÀÇ´Â À§ÇèÇÕ´Ï´Ù.




¡¼C¾ð¾î ÇÁ·Î±×·¥¿¹¡½

½ÇÁ¦·Î CCS»çÀÇ C¾ð¾î¿¡ ÀÇÇÑ ÇÁ·Î±×·¥À¸·Î ÇÁ·Î±×¶÷¸Þ¸ð¸®¿¡ Read/Write ÇÑ´Ù
¿¡´Â ¾Æ·¡¿Í °°ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.

Æí¼º ÇÔ¼ö ¼­½Ä

±â´É ³»¿ë

long data = READ_PROGRAM_EEPROM(long adrs) ÇÁ·Î±×¶÷¸Þ¸ð¸®ÀÇ adrs ¹øÁöÀÇ ³»¿ëÀ» Àоî data¿¡ ´ëÀÔÇÑ´Ù.
adrs, data´Â ¸ðµÎ long³ª long int·Î Á¤Àǵǰí ÀÖ´Â °Í.
WRITE_PROGRAM_EEPROM (long adrs, long data) ÇÁ·Î±×¶÷¸Þ¸ð¸®ÀÇ adrs ¹øÁö¿¡ data¶ó°í ÇÏ´Â µ¥ÀÌÅ͸¦ ±âÀÔÇÑ´Ù.
adrs¿Í data´Â ¸ðµÎ long³ª long int·Î Á¤Àǵǰí ÀÖ´Â °Í.

¡ìÇÁ·Î±×·¥¿¹¡í
¡¡¾Æ·¡¿Í °°Àº ¸®½ºÆ®´Â ½ÇÁ¦ÀÇ ÇÁ·Î±×·¥¿¹·Î, 0 x1E00 ¹øÁö·ÎºÎÅÍ ¼ø¼­¿¡ ÁÖ¼Ò¿Í °°Àº µ¥ÀÌÅÍ
¡¡(À»)¸¦ 256¹ÙÀÌÆ® ½á ³Ö¾î, ±× ÈÄ ±×°ÍÀ» Àо ¾×Á¤ Ç¥½Ã±â¿¡ Ç¥½ÃÇÑ´Ù°í ÇÑ´Ù¡¡
¡¡µ¿ÀÛÀ» ÇÕ´Ï´Ù.
¡¡ÀÌ ¿¹ÀÇ È¸·Î´Â ¹Ø±×¸²°ú °°ÀÌ µÇ¾î ÀÖ¾î, ¾×Á¤ Ç¥½Ã±â´Â Àü¿ëÀÇ ¶óÀ̺귯¸®¿Í
¡¡µÇ¾î ÀÖ½À´Ï´Ù.



////////////////////////////////////////////////////////////
//¡¡This program is program memory read/write test program.
//¡¡This test executed on PIC16F877 that is flash memory.
///////////////////////////////////////////////////////////
#include¡¡¡¡<16f877.h>
#use delay(CLOCK=10000000)¡¡¡¡¡¡¡¡¡¡¡¡¡¡//10MHz

//////// Port define and link LCD library
#include

////////////// main routine
main() {
¡¡¡¡long¡¡¡¡adrs, data;
¡¡¡¡lcd_init();¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ //initialize LCD
¡¡¡¡////main process
¡¡¡¡printf(lcd_data, "Start EEPROM test");
¡¡¡¡for (adrs=0x1E00;adrs<0x1F00;adrs++) {
¡¡¡¡¡¡¡¡data=adrs;
¡¡¡¡¡¡¡¡write_program_eeprom(adrs, data);
¡¡¡¡}
¡¡¡¡lcd_clear();
¡¡¡¡for(adrs=0x1E00;adrs<0x1F00;adrs++) {
¡¡¡¡¡¡¡¡data=read_program_eeprom(adrs);
¡¡¡¡¡¡¡¡lcd_cmd(2);¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ //cursor at home
¡¡¡¡¡¡¡¡printf(lcd_data, "%4LX %4LX", adrs, data);
¡¡¡¡¡¡¡¡delay_ms(500);
¡¡¡¡}
}



¡¼¾î¼Àºí·¯ ÇÁ·Î±×·¥¿¹¡½

»ó±âÀÇ C¾ð¾îÀÇ ¿¹¿Í °°Àº ±â´ÉÀ» ¾î¼Àºí·¯¾ð¾î·Î ÀÛ¼ºÇÑ ¿¹ÀÔ´Ï´Ù.
¾×Á¤ Ç¥½Ã±âÀÇ ½áºê·çƾÀº Àü¿ëÀÌ µÇ°í ÀÖ½À´Ï´Ù.
ÀÌ ¾×Á¤ Ç¥½Ã±â¸¦ Æ÷Åä D·Î »ç¿ëÇÒ ¶§¿¡ ÁÖÀÇ°¡ ÇÊ¿äÇÑ °ÍÀº, Æ÷Åä E
¿¡ Æ÷Åä DÀÇ »ç¿ë¹ýÀ» ¼³Á¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Â °ÍÀ» ÀØÁö ¾Ê°Ô ÇÑ´Ù
ÀÏÀÔ´Ï´Ù.

ÀüüÀÇ ¸®½ºÆ®´Â ¾Æ·¡¿Í °°ÀÌ·Î ´Ù¿î·ÎµåÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

¡¡¡¡
¡Ú ÇÁ·Î±×·¥ EEPROM¡¡Read/write Å×½ºÆ® ÇÁ·Î±×·¥ ¸®½ºÆ®

ÀÌ ¾È¿¡¼­, EEPROMÀÇ Read/Write¸¦ ÇÏ´Â ½áºê·çƾÀÇ ºÎºÐÀº ¾Æ·¡¿Í °°ÀÌ
¸®½ºÆ®¿Í °°ÀÌ µÇ¾î ÀÖ¾î, »ó±âÀÇ Ç÷ÎÂ÷Æ®(flow chart)´ë·ÎÀÇ ¼ø¼­¿Í
µÇ¾î ÀÖ½À´Ï´Ù.
(ÁÖ) ¾Æ·¡¿Í °°ÀÌ ¸®½ºÆ®¿¡´Â ÇÑÀÚ ½ºÆäÀ̽º°¡ ¼¯ÀÌ°í Àֱ⠶§¹®¿¡ ±×´ë·Î´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

(1) º¯¼ö Á¤ÀǺÎ
¡¡¡¡´Ã¾î³õ´Â ¼ø¼­´Â ÀÌ ´ë·Î°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.

ADRH¡¡EQU¡¡020H¡¡¡¡;EEPROM address upper
ADRS¡¡EQU¡¡021H¡¡¡¡;EEPROM address lower
DATH¡¡EQU¡¡022H¡¡¡¡;EEPROM data upper
DATL¡¡EQU¡¡023H¡¡¡¡;EEPROM data lower


(2) Read ½áºê·çƾ
¡¡¡¡½áºê·çƾ³»¿¡¼­ ¸î¹øÀ̳ª ¹ðÅ©ÀÇ ÀüȯÀ» Çϱ⠶§¹®¿¡, º¯¼ö ÁöÁ¤
¡¡¡¡(Àº)´Â °£Á¢ Áּҷμ­ ²¨³»°í ÀÖ½À´Ï´Ù. µû¶ó¼­ º¯¼öÀÇ ÁÙ ¼ø¼­
¡¡¡¡(Àº)´Â(1) ´ë·Î·Î µÇÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.


;*****************************************
; program memory read subroutine
; address set in ADRH, ADRS
; return with set data in DATH, DATL
;*****************************************
READ_EEMEM
¡¡¡¡BCF¡¡¡¡STATUS, IRP¡¡¡¡;bank0 for indirect address
¡¡¡¡MOVLW¡¡ADRH¡¡¡¡¡¡¡¡¡¡;start from 0CH
¡¡¡¡MOVWF¡¡FSR¡¡¡¡¡¡¡¡¡¡ ;set indirect pointer
¡¡¡¡BSF¡¡¡¡STATUS, RP1
¡¡¡¡BCF¡¡¡¡STATUS, RP0¡¡¡¡;bank2
¡¡¡¡MOVF¡¡ INDF, W¡¡¡¡¡¡¡¡;get address upper
¡¡¡¡MOVWF¡¡EEADRH¡¡¡¡¡¡¡¡;set EEPROM address upper
¡¡¡¡INCF¡¡ FSR, F¡¡¡¡¡¡¡¡ ;next
¡¡¡¡MOVF¡¡ INDF, W
¡¡¡¡MOVWF¡¡EEADR¡¡¡¡¡¡¡¡ ;set EEPROM address lower
¡¡¡¡INCF¡¡ FSR, F
¡¡¡¡BSF¡¡¡¡STATUS, RP0¡¡¡¡;bank3
¡¡¡¡BSF¡¡¡¡EECON1, EEPGD¡¡;set program memory
¡¡¡¡BSF¡¡¡¡EECON1, RD¡¡¡¡ ;start read
¡¡¡¡NOP¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;HALT dumy
¡¡¡¡NOP
¡¡¡¡BCF¡¡¡¡STATUS, RP0¡¡¡¡;bank2
¡¡¡¡MOVF¡¡ EEDATH, W¡¡¡¡¡¡;get upper data
¡¡¡¡MOVWF¡¡INDF¡¡¡¡¡¡¡¡¡¡;save to DATH
¡¡¡¡INCF¡¡ FSR, F¡¡¡¡¡¡¡¡ ;next
¡¡¡¡MOVF¡¡ EEDATA, W¡¡¡¡¡¡;get lower data
¡¡¡¡MOVWF¡¡INDF
¡¡¡¡BCF¡¡¡¡STATUS, RP1¡¡¡¡;bank0
¡¡¡¡RETURN


(3) Write ½áºê·çƾ
¡¡¡¡±Û½áºê·çƾ¿¡¼­´Â, µµÁßÀÇ NOP ¸í·ÉÀÇ °÷¿¡¼­ ¼ömsecÀÇ »çÀÌ
¡¡¡¡HALT(Á¤Áö) ¸ðµå°¡ µÇ±â ¶§¹®¿¡ ½ÇÇà ½Ã°£À¸·Î´Â ÁÖÀÇ°¡ ÇÊ¿ä
¡¡¡¡ÀÔ´Ï´Ù.

;********************************************
; program memory write subroutine
; address set in ADRH, ADRS
; data set in DATH, DATL
;********************************************
WRITE_EEMEM
¡¡¡¡BCF¡¡¡¡STATUS, IRP¡¡¡¡;set bank0 for indirect
¡¡¡¡MOVLW¡¡ADRH
¡¡¡¡MOVWF¡¡FSR¡¡¡¡¡¡¡¡¡¡ ;set indirect
¡¡¡¡BSF¡¡¡¡STATUS, RP1¡¡¡¡;bank2
¡¡¡¡BCF¡¡¡¡STATUS, RP0
¡¡¡¡MOVF¡¡ INDF, W¡¡¡¡¡¡¡¡;get upper address
¡¡¡¡MOVWF¡¡EEADRH¡¡¡¡¡¡¡¡;set upper address
¡¡¡¡INCF¡¡ FSR, F¡¡¡¡¡¡¡¡ ;next
¡¡¡¡MOVF¡¡ INDF, W¡¡¡¡¡¡¡¡;get lower address
¡¡¡¡MOVWF¡¡EEADR¡¡¡¡¡¡¡¡ ;set lower address
¡¡¡¡INCF¡¡ FSR, F¡¡¡¡¡¡ ¡¡;next
¡¡¡¡MOVF¡¡ INDF, W¡¡¡¡¡¡¡¡;get upper data
¡¡¡¡MOVWF¡¡EEDATH¡¡¡¡¡¡¡¡;set upper data
¡¡¡¡INCF¡¡ FSR, F¡¡¡¡¡¡¡¡ ;next
¡¡¡¡MOVF¡¡ INDF, W¡¡¡¡¡¡¡¡;get lower data
¡¡¡¡MOVWF¡¡EEDATA¡¡¡¡¡¡¡¡;set lower data

¡¡¡¡BSF¡¡¡¡STATUS, RP0¡¡¡¡;bank3
¡¡¡¡BSF¡¡¡¡EECON1, EEPGD¡¡;program memory
¡¡¡¡BSF¡¡¡¡EECON1, WREN ¡¡;write enable
¡¡¡¡MOVLW¡¡0x55¡¡¡¡¡¡¡¡¡¡;write sequence
¡¡¡¡MOVWF¡¡EECON2
¡¡¡¡MOVLW¡¡0xAA
¡¡¡¡MOVWF¡¡EECON2
¡¡¡¡BSF¡¡¡¡EECON1, WR¡¡¡¡ ;write start
¡¡¡¡NOP¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;HALT NOP
¡¡¡¡NOP
¡¡¡¡BCF¡¡¡¡EECON1, WREN¡¡ ;write disable
¡¡¡¡BCF¡¡¡¡STATUS, RP0
¡¡¡¡BCF¡¡¡¡STATUS, RP1¡¡¡¡;bank0
¡¡¡¡RETURN

¸ñ·Ïº¸±â

www.1chip.com, www.1chip.co.kr
www.micom114.com
ÀÚ·á½Ç¹Ù·Î°¡±â

´ë±¸±¤¿ª½Ã ºÏ±¸ »ê°Ý2µ¿ 1629 »ê¾÷¿ëÀç°ü 10µ¿ 13È£ (2Ãþ) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com