<Ãʺ¸ÀÚ¸¦ À§ÇÑ 8051 Á¦ 3ȸ °­ÁÂ>

µåµð¾î °­ÁÂÀÇ 1/2ÁöÁ¡ÀÎ 3ȸ °­Á°¡ ¿Ã¶ú½À´Ï´Ù.

À̰÷±îÁö Àγ»½ÉÀ» °¡Áö°í ÀÐ¾î ºÁ ÁֽŠºÐµé²² Áø½ÉÀ¸·Î °¨»ç ÇÕ´Ï´Ù.

ÀÌ°í¿¡¼­ Interrupt¸¦ ¹è¿ì°Ú½À´Ï´Ù. ¿ì¼± Interrupt°¡ ¹«¾ùÀÎÁö Àß ¸ð¸£´Â »ç¶÷À» À§Çؼ­ ¾à°£ÀÇ ¼³¸íÀ» link½ÃÄѳõ¾Ò´Ù.

½±°Ô ¾ê±â Çϸé ÀÎÅÍ·´Æ®(Interrupt) ¶ó´Â °ÍÀº ÇöÀç ½ÇÇà ÁßÀÎ ÇÁ·Î±×·¥À» ÀϽÃÀûÀ¸·Î Áß´ÜÇÏ°í ±ä±ÞÀ» ¿äÇÏ´Â ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î

Á¦¾î¸¦ ¿Å±â´Â ¹æ¹ýÀ¸·Î¼­, ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ¸é ±× ÀÎÅÍ·´Æ®¿¡ ´ëÇÑ ¼­ºñ½º ÇÁ·Î±×·¥Àº ƯÁ¤ ¹øÁöºÎÅÍ ½ÃÀÛÇÏ°Ô µÈ´Ù.

¿ì¼± ÀÎÅÍ·´Æ®¿Í Æú¸µ¿¡ ´ëÇÑ °³³äÀ» È®½ÇÈ÷ ¼¼¿ì°í ´ÙÀ½ °­Á¸¦ º¸ÀÚ.

@ÀÎÅÍ·´Æ® ±¸Á¶

8051¿¡¼­´Â ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏ´Â Çϵå¿þ¾î ±¸Á¶°¡ 5 Á¾·ù°¡ ÀÖÀ¸¸ç, ±× Á¾·ù´Â ¿ÜºÎ ÀÎÅÍ·´Æ® (0, 1), ŸÀ̸Ó/Ä«¿îÅÍ (0, 1), ½Ã¸®¾ó

Æ÷Æ® °¡ ÀÖ´Ù.

ÀÌÁß¿¡ ŸÀ̸Ó/Ä«¿îÅÍ (0, 1)Àº  2ȸ °­Á¸¦ ÂüÁ¶ Çϱ⠹ٶó°í ½Ã¸®¾ó Æ÷Æ®´Â 4ȸ °­Á¸¦ ÂüÁ¶ Çϱ⠹ٶõ´Ù. 3ȸ °­Á¸¦ ¹è¿ì°í ÀÖ´Â

»ç¶÷Àº ŸÀ̸Ó/Ä«¿îÅÍ¿¡ ´ëÇØ¼­´Â Á» ¾Ë°í ÀÖ°ÚÁã....

¿©±â¼­´Â ¿ÜºÎ ÀÎÅÍ·´Æ®¿Í ÀüüÀûÀÎ ÀÎÅÍ·´Æ® °³³äÀ» Áß½ÉÀ¸·Î ¼³¸íÇϰڴÙ.(½Ã¸®¾ó Åë½Å´Â 4ȸ¶§ ¼³¸íÇϰھî¿ë~)

¿ì¼± ÀÎÅÍ·´Æ®ÀÇ Á¾·ù¸¦ Ç¥¸¦ »ç¿ëÇØ¼­ »ìÆìº¸°í C¸¦ »ç¿ëÇÑ Ã³¸® ÇÔ¼ö ÀÛ¼ºÀÇ ¿¹¸¦ º¸°Ú´Ù.

    *ÀÎÅÍ ·´Æ® ó¸® ÇÔ¼ö ÀÛ¼º ¿¹ *

  void int1(void) interrupt 2

 {

 /*ÀÎÅÍ·´Æ® ¼­ºñ½º ·çƾ */

 }

 interrupt 2¸¦ »ç¿ëÇÏ´Â °É·Î ºÁ¼­ ¿ì¼± ¿ÜºÎ ÀÎÅÍ·´Æ® 1¹øÀ» »ç¿ë

 ÇÏ´Â °ÍÀ» ¾Ë¼ö ÀÖ°Ú±º¿ä.

 int1Àº ¿ÜºÎ ÀÎÅÍ·´Æ® 1¹øÀÇ ÇÔ¼ö¸¦ ³ªÅ¸³»´Â °ÍÀ̱¸¿ä.

{} °¡·Î ¾È¿¡ µé¾î°¥ ³»¿ëÀº ÀÎÅÍ·´Æ® ¼­ºñ½º ·çƾ, Áï

 ÀÎÅÍ·´Æ®°¡ °É·ÈÀ» ¶§ ¼öÇà ÇÏ°í ½ÍÀº °ÍÀ»  ÇÁ·Î±×·¥ Çϸé

 ³¡À̶ó°í ÇÒ¼ö ÀÖÁã.

 À§ÀÇ ¼­ºñ½º ·çƾÀ» ¼öÇàÇϱâ À§Çؼ­´Â ¿ì¼± ÀÎÅÍ·´Æ® ÃʱâÈ­¸¦ ½ÃÄÑ

 ¾ß µÈ´Ù.

 

°£·«ÇÑ ÇÁ·Î±×·¥À» ŸÀ̸ӷΠ¿¹¸¦ º¸À̸é...

/* ÀÎÅÍ·´Æ® ÃʱâÈ­ */

/* timer setup */

void timer0_init(void)

{

TMOD = 0X01;      // ¿ì¼± ŸÀÌ¸Ó ¸ðµå¸¦ ¼±ÅÃ

ET0 = 1;              //  Å¸ÀÌ¸Ó Àο¡À̺í

TH0 = 0XAA        //  Å¸ÀÌ¸Ó »óÀ§ ºñÆ® 0XAA·Î ¼±ÅÃ

TL0 = 0X00         //  Å¸ÀÌ¸Ó ÇÏÀ§ ºñÆ® 0X00·Î ¼±ÅÃ

0xAA00¿¡¼­ºÎÅÍ 0xffff ±îÁö ¼ÀÀ» ÇÏ°Ô µÇ¸ç overflow°¡ ÀϾ¸é interrupt °¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù.

TR0 = 1;             //  Å¸ÀÌ¸Ó START

}

ŸÀÌ¸Ó 0¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. À§ ó·³ ÃʱâÈ­¸¦ ½ÃÄѳõ°í ÇÔ¼ö¸¦ mainÇÔ¼ö ¾È¿¡´Ù°¡ Àû¾î ³õ´Â´Ù.

void main(void)

{

timer0_init();

}

´ÙÀ½¿¡´Â ŸÀÌ¸Ó ¼­ºñ½º ·çƾÀ» ¸¸µé¸é µÇ´Â °ÍÀÌ´Ù.

@ IE (Interrupt Enable) ·¹Áö½ºÅÍ

          7                   6                    5                  4                  3                    2                  1                     0            <== ºñÆ® ¹øÈ£

EA

-

-

ES

ET1

EX1

ET0

EX0

 

.EA (Enable All interrupt)  :  "1" ¸ðµç ÀÎÅÍ·´Æ® Àο¡À̺í

 

 * ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇϱâ Àü¿¡ Ç×»ó  EA = 1; ·Î ÇØ¾ß ÇÑ´Ù.

 

.ES (Enable Serial interrupt)  :  "1" ½Ã¸®¾ó ÀÎÅÍ·´Æ® Àο¡À̺í

 

.ET1 (Enable Timer 1 interrupt)  :  "1"ŸÀ̸Ó/Ä«¿îÅÍ 1 ÀÎÅÍ·´Æ® Àο¡À̺í

 

.EX1 (Enable eXternal 1 interrupt)  :  "1" ¿ÜºÎ ÀÎÅÍ·´Æ® 1  Àο¡À̺í

 

.ET0 (Enable Timer 0 interrupt)  :  "1"À̸Ó/Ä«¿îÅÍ 0 ÀÎÅÍ·´Æ® Àο¡À̺í

 

.EX0 (Enable eXternal 0 interrupt)  :  "1" ¿ÜºÎ ÀÎÅÍ·´Æ® 0  Àο¡À̺í

 

* 5,6 ºñÆ®´Â ÀÇ¹Ì ¾ø´Â ºñÆ®ÀÌ´Ù.

 

TCON¿¡¼­ IE0 , IE1 Àº(external interrupt 0 edge flag) ¿ÜºÎ ÀÎÅÍ·´Æ® edgeÆ®¸®°Å¸¦ ¼±ÅÃÇÏ´Â °ÍÀÌ´Ù.

 

"1"·Î ÇÏ¸é ¿ÜºÎ ÀÎÅÍ·´Æ® INT0¿Í INT1Àº ÀÔ·Â ÆÞ½ºÀÇ Çϰ­ ¸ð¼­¸®¿¡¼­ ÀÎÅÍ·´Æ®¸¦ ¹ß»ý½Ã۰í "0"À¸·Î Çϸé ÀÔ·Â ÆÞ½ºÀÇ "L" ·¹º§¿¡¼­

 

ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÑ´Ù.

 

@ SCON (Serial CONtrol register)

 

½Ã¸®¾ó Åë½Å¿¡¼­ »ç¿ëµÇ´Â ·¹Áö½ºÅÍÀÌ´Ù. À̰÷¿¡¼­ 0 °ú 1 ºñÆ®´Â ÀÎÅÍ·´Æ®¿¡ °ü·ÃµÈ ºñÆ®±â ¶§¹®¿¡ À̰÷¿¡¼­ ¼³¸íÇÏ°í ³Ñ¾î °¡°Ú´Ù.

 

          7                   6                     5                   4                    3                   2                    1                    0      <== ºñÆ® ¹øÈ£

SM0

SM1

SM2

REN

TB8

RB8

TI

EI

 

. TI (transmit interrupt flag) : ¼Û½Å ¿Ï·á ÀÎÅÍ·´Æ® Ç÷¡±×ÀÌ´Ù. Áï, TI ºñÆ®¸¦ ¼¼ÆÃÇÔÀ¸·Î½á ¸¶Áö¸· ¹ÙÀÌÆ®°¡ "clocked out"µÆ´Â Áö¸¦

 

 ÇÁ·Î±×·¥¿¡°Ô ¾Ë·ÁÁØ´Ù. TIºñÆ®°¡ ¼ÂµÇ¾î ÀÖ´Ù¸é ÇÁ·Î±×·¥Àº ½Ã¸®¾ó Æ÷Æ®°¡ "free"¶ó°í ÃßÃøÇÏ°í ´ÙÀ½ ¹ÙÀÌÆ®¸¦ º¸³¾ Áغñ¸¦ ÇÑ´Ù.

 

 ÀÌ ºñÆ®´Â ¹Ýµå½Ã ¼Û½Å ÈÄ ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î '0'À» ¸¸µé¾î ÁÖ¾î¾ß ÇÑ´Ù.

 

  TI = 0;

 

. RI (Receive interrupt flag) : ¼ö½Å ¿Ï·á ÀÎÅÍ·´Æ® Ç÷¡±×ÀÌ´Ù. Áï, ¿ÏÀüÇÑ ÇÑ ¹ÙÀÌÆ®¸¦ ¹ÞÀ» ¶§¸¶´Ù, ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ¹ÙÀÌÆ®¸¦ Àбâ

 

  Àü¿¡ °ªÀ» »¡¸® ÀÐÀ» Çʿ䰡 ÀÖ´Ù´Â °ÍÀ» ÇÁ·Î±×·¥¿¡°Ô ¾Ë·ÁÁÙ ¼ö ÀÖµµ·Ï RIºñÆ®¸¦ Æ®¸®°Å ÇÒ °ÍÀÌ´Ù. ¹Ýµå½Ã ¼ö½Å ÈÄ '0'À¸·Î ¸¸µé

 

  ¾î ÁÖ¾î¾ß ÇÑ´Ù.

 

  RI = 0;

 

SCON register ´Â 4Àå¿¡¼­ ´õ ÀÚ¼¼ÇÏ°Ô ´Ù·ç°Ú´Ù.

 

ÀÎÅÍ·´Æ®¿¡´Â ¿ì¼±¼øÀ§°¡ Á¤ÇØÁ® ÀÖ´Ù.±×°ÍÀ» Á¤ÀÇ ÇØ ³õÀº °ÍÀÌ IP (Interrupt Priority control) ·¹Áö½ºÅÍÀÌ´Ù.

 

ÀÎÅÍ·´Æ® ¹øÈ£°¡ ±× ¼ø¼­¿¡ ÇØ´ç µÈ´Ù. ¿ÜºÎ ÀÎÅÍ·´Æ® 0 ÀÌ ¹øÈ£ 0, ŸÀ̸Ó/Ä«¿îÅÍ 0  ÀÎÅÍ·´Æ®°¡ 1¹øÀÌ´Ù.

 

À§ Ç¥¸¦ ÂüÁ¶ÇÏ¸é µÉ °ÍÀÌ´Ù.

 

ÀÌ·±°Ô Á¤ÇØÁ® ÀÖ´Â ¿ì¼±¼øÀ§¸¦ user°¡ ¿øÇÏ´Â µ¥·Î ¹Ù²Ü¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ IP ÀÌ´Ù.

 

       7            6            5             4           3            2             1            0          <== ºñÆ® ¹øÈ£

-

-

-

PS

PT1

PX1

PT0

PX0

 

.PS (serial port priority control) : "1" ; ½Ã¸®¾ó Æ÷Æ® ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.

 

.PT1 (timer 1 priority control) : "1" ; ŸÀ̸Ó/Ä«¿îÅÍ 1 ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.

 

.PX1 (external interrupt 1 priority control) : "1" ; ¿ÜºÎ ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.

 

.PT0 (timer 0 priority control) : "1" ; ŸÀ̸Ó/Ä¿¿îÅÍ 0 ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.

 

.PX0 (external interrupt 0 priority control) : "1" ; ¿ÜºÎ ÀÎÅÍ·´Æ® 1ÀÇ ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.

1