[Port ÀÔ·Â ¿¹Á¦ : PORTB¿¡ ÀÔ·Â ¹ß»ý ½Ã LED Äѱâ]

MCUÀÇ PORT¿¡ Àü±â ½ÅÈ£¸¦ Ãâ·ÂÇϱâ À§ÇØ DDRx ·¹Áö½ºÅ͸¦ Ãâ·Â¸ðµå·Î ¼³Á¤ÇÑ ÈÄ, 
PORTx ·¹Áö½ºÅ͸¦ »ç¿ëÇß¾ú½À´Ï´Ù.

¹Ý´ë·Î Àü±â ½ÅÈ£¸¦ ÀԷ¹ޱâ À§Çؼ± DDRx ·¹Áö½ºÅÍÀÇ °ªÀ» ÀԷ¸ðµå·Î ¼³Á¤ÇÑ ÈÄ,
PINx ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. Áö¡µÈ ÇÉ¿¡ 5vÀÇ Àü±â°¡ È带 °æ¿ì ÇØ´ç PINx·Î Àо
ÇÉÀÇ °ªÀº 1, ¹Ý´ë·Î 0vÀÇ Àü±â°¡ È带 °æ¿ì ÇØ´ç ÇÉÀÇ °ªÀº 0ÀÌ µË´Ï´Ù.

´ÙÀ½Àº PB0¹ø ÇÉ¿¡ Àü±â ½ÅÈ£ ÀÔ·ÂÀÌ ¹ß»ýÇÒ °æ¿ì, PA0¿¡ Àü±â ½ÅÈ£¸¦ Ãâ·ÂÇÏ´Â ¿¹Á¦ ÄÚµåÀÔ´Ï´Ù.


#include <avr/io.h> int main(void) { DDRA = 0xff; DDRB = 0x00; while(1) { if(PINB & 0x01) PORTA = 0x01; else PORTA = 0x00; } }
[¼Ò½º ¼³¸í] - PORTB´Â ÀԷ¸ðµå·Î »ç¿ëÇÒ °ÍÀ̹ǷΠDDRB¸¦ 0x00À¸·Î ¼³Á¤ÇØ ÁÖ¾ú½À´Ï´Ù. - PINB ·¹Áö½ºÅÍ´Â PINB·Î µé¾î¿À´Â ÀԷ°ªÀ» µ¹·ÁÁÝ´Ï´Ù. - PINB & 0x01Àº AND ¿¬»êÀ» ÅëÇØ PB0ÀÌ 1ÀÎÁö 0ÀÎÁö¸¦ È®ÀÎÇϱâ À§ÇÔÀÔ´Ï´Ù. - ¸¸¾à PB0¿¡ ÀÔ·ÂÀÌ È®ÀεǸé, PA0¿¡ ¿¬°áµÈ LED¿¡ ºÒÀ» ÄÕ´Ï´Ù. - ±×¸®°í ±× ¹Ý´ë¶ó¸é LEDÀÇ ºÒÀ» ²ü´Ï´Ù. ´ÙÀ½Àº À§ ¼Ò½º¿¡ ÇØ´çÇϴ ȸ·Î¸¦ ±¸¼ºÇÑ ¸ð½ÀÀÔ´Ï´Ù. ½½¶óÀÌµå ½ºÀ§Ä¡ÀÇ °¡¿îµ¥ ÇÉ¿¡ PB0À» ¿¬°áÇÏ¿´À¸¸ç, °¡Àå À­ ÇÉÀº ±×¶ó¿îµå¿¡ ±×¸®°í °¡Àå ¾Æ·§ ÇÉÀº JMOD-128 ¿ÞÂÊ Çɵé Áß °¡Àå ¾Æ·¡¼­ µÎ ¹ø°ÀÎ RSTN ÇÉ¿¡ ¿¬°áÇÏ¿´½À´Ï´Ù. ¿©±â¼­ RSTN ÇÉÀ» »ç¿ëÇÑ ÀÌÀ¯´Â, ÀÌ RSTN ÇÉÀÌ Ç×»ó 5v Àü±â ½ÅÈ£¸¦ Ãâ·ÂÇÏ°í Àֱ⠶§¹®ÀÔ´Ï´Ù. Áï, PB0 ÇÉ¿¡ ÀÔ·ÂÀ» ÁÖ±â À§Çؼ± ¾îµð¼±°¡ Àü±â ½ÅÈ£¸¦ ²ø¾î¿Í ½á¾ß Çϴµ¥, ÀÌ ¿¹Á¦¿¡¼± RSTN ÇÉÀ» »ç¿ëÇÑ °ÍÀÔ´Ï´Ù. RSTNÀº Atmega128ÀÇ RESET ÇÉÀ¸·Î¼­, ATmega128À» ¸®¼Â(Áï, ÀçºÎÆÃ) ½ÃÅ°´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ ÇÉÀº Ư¼º»ó 0v°¡ ÀÔ·ÂµÉ ¶§ ¸®¼ÂÀÌ µÇ±â ¶§¹®¿¡ Æò»ó½Ã¿£ Ç×»ó 5v°¡ È帣°í ÀÖ°Ô µË´Ï´Ù. (ÀÌ·¯ÇÑ ¹æ½ÄÀ» Active Low¶ó°í ÇÕ´Ï´Ù.) ÀÌÁ¦ ÄÄÆÄÀÏ µÈ ÇÁ·Î±×·¥À» ´Ù¿î·Îµù ÇÑ ÈÄ, ½ºÀ§Ä¡¸¦ ¾Æ·¡·Î ³»¸®¸é LED°¡ ÄÑÁö°í, ´Ù½Ã À§·Î ¿Ã¸®¸é LED°¡ ²¨Áú °ÍÀÔ´Ï´Ù. * http://bit.ly/12VX8XR ½ºÀ§Ä¡¸¦ ¾Æ·¡·Î ³»·ÈÀ» ¶§¿£ ´ÙÀ½°ú °°ÀÌ RSTN ÇÉÀ¸·ÎºÎÅÍ Èê·¯¿Â 5v Àü·ù°¡ PB0ÀÇ ÀÔ·ÂÀ¸·Î Àü´ÞµÇ±â ¶§¹®¿¡ PB0ÀÇ °ªÀÌ 1ÀÌ µÇ¸ç, ¹Ý´ë·Î ½ºÀ§Ä¡¸¦ ¿Ã·ÈÀ» ¶§¿£ ´ÙÀ½°ú °°ÀÌ PB0ÀÇ Àü·ù°¡ ±×¶ó¿îµå·Î ºüÁ®³ª°¡ 0v°¡ µÇ±â ¶§¹®¿¡ PBÀÇ °ªÀº 0ÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ±×·±µ¥ ¿©±â¼­ °¡Áú ¼ö ÀÖ´Â Àǹ®Á¡Àº '²À ±×¶ó¿îµå ÀÔ·ÂÀÌ ÇÊ¿äÇÑ°¡?'ÀÏ °ÍÀÔ´Ï´Ù. PB0¿¡ ¾Æ¹« °Íµµ ÀÔ·ÂÇÏÁö ¾Ê´Â´Ù¸é ÀÚ¿¬½º·´°Ô 0v°¡ µÉ °Í °°´Ù´Â »ý°¢ÀÌ µé±â ¶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¸¸¾à ±×¶ó¿îµå ÀÔ·ÂÀ» ÇÏÁö ¾ÊÀº »óÅ¿¡¼­ ½ºÀ§Ä¡¸¦ ¿Ã¸®°Ô µÇ¸é, PB0Àº 5vµµ ¾Æ´Ï°í 0vµµ ¾Æ´Ñ "Ç÷ÎÆÃ(floating)"À̶ó°í ºÒ¸®´Â ºÒ¾ÈÁ¤ÇÑ »óÅ°¡ µÇ¾î¹ö¸³´Ï´Ù. Áï, floatingÀ̶ó´Â ´Ü¾îÀÇ ¶æ ±×´ë·Î ºØ ¶°ÀÖ´Â »óÅ°¡ µÇ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¶§¿£ PB0¿¡ ÀÜ·ùÀü·ù°¡ ³²¾Æ ÀÖ´Â »óÅ°¡ µÇ±âµµ Çϸç, ÁÖº¯ ȸ·ÎÀÇ ¿µÇâÀ» ¹Þ¾Æ °ªÀÌ À¯µ¿ÀûÀ¸·Î ¹Ù²î±âµµ ÇÕ´Ï´Ù. ±×·¡¼­ ÀÌ·Î ÀÎÇØ ¿ÀÀÛµ¿À» ÇÏ°í, ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ¾ø°Ô µË´Ï´Ù. ±×·¸±â ¶§¹®¿¡ ¿¹Á¦¿Í °°ÀÌ ±×¶ó¿îµå ¿¬°áÀ» ÅëÇØ È®½ÇÇÑ 0v¸¦ ¸¸µé¾î ÁÖ´Â °ÍÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ´Â Ãʺ¸½ÃÀý ½±°Ô ¹üÇÒ ¼ö ÀÖ´Â ½Ç¼öÀ̹ǷΠ²À ±â¾ïÇϵµ·Ï ÇսôÙ. ¸¶Áö¸·À¸·Î, Ȥ½Ã PORTA Çϳª¸¸À¸·Î ÀԷ°ú Ãâ·ÂÀ» ¸ðµÎ ó¸®ÇÒ ¼ö´Â ¾øÀ»±î¿ä? ÀÌ ¿ª½Ã °¡´ÉÇÕ´Ï´Ù.
#include <avr/io.h> int main(void) { DDRA = 0x00000001; while(1) { if(PINA & 0b00000010) PORTA = 0x01; else PORTA = 0x00; } }
À§ Äڵ带 º¸¸é, PA0¿¡ ÇØ´çÇÏ´Â LSB´Â Ãâ·Â¸ðµåÀÎ 1·Î, ±×¸®°í PA1¿¡ ÇØ´çÇÏ´Â ±× ´ÙÀ½ ¿ÞÂÊ ºñÆ®´Â ÀԷ¸ðµåÀÎ 0À¸·Î ¼³Á¤ÇÏ¿´½À´Ï´Ù. ±×¸®°í PINA °ªÀ» È®ÀÎÇÒ ¶§¿£ ÀԷ¸ðµå·Î ¼³Á¤ÇÑ ºñÆ®¸¦ ÂüÁ¶ÇÕ´Ï´Ù. ÀÌ¿¡ ¸Â°Ô ½ºÀ§Ä¡ÀÇ À§Ä¡¸¦ ¿Å±ä ȸ·Î´Â ´ÙÀ½°ú °°½À´Ï´Ù.