<Ãʺ¸ÀÚ¸¦ À§ÇÑ 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ÀÇ ÀÎÅÍ·´Æ®¸¦ ³ôÀº ·¹º§·Î ¼³Á¤.