------- Á¦Ç°¼±Åà -------
-
- °³¹ßÄÜÆ®·ÑPCB
ioT¸¶½ºÅÍ ¸±·¹ÀÌ4Æ÷Æ®...
´Ù±â´ÉâÀÇÇнÀÀνķκ¿
·¹ÀÌÀú °Ç ¼¹ÙÀ̹ú °ÔÀÓ...
¸®¸ðÄÁ Á¦¾î 20ä³Î
¹«¼±Ã¶±âÁ¦º»±â
¹ß °ü¸® µðÅ彺
À½¼º ¹æ¼Û±â
Â÷·® CCTV CONTROL...
ÄÞºñ400
Ŭ·¹ÀÌ»ç°Ý~
Åäµðº¯±â
- CONTROL PCBÆǸÅ
LCD Áß°í ÆǸÅ
- ÃÊÀú°¡ ÀüÀÚºÎÇ° Àç°í ÆǸÅ
74HCTLS74N
ATMEL 93C46SC
CQ 33-455D 455...
D4SB 80 2D (80...
IR ¸®¸ðÄÁ 32keyÁ¦¾î...
JRC 2902
KA2263
KA723D
ODS-H4056KDM
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