½Ã¸®¾ó Åë½ÅÁ¦¾î ¹æ¹ý
1. ½Ã¸®¾ó Åë½ÅÀ̶õ?
"½Ã¸®¾ó Åë½Å"À̶õ ÀϹÝÀûÀ¸·Î ÄÄÇ»ÅÍ ±â±â¸¦ Á¢¼ÓÇÏ´Â ¹æ¹ýÀÇ Çϳª·Î, Á¢¼ÓÇÏ´Â ¼±ÀÇ ¼ö¸¦ »è°¨Çϰí,
¶ÇÇÑ ¿ø°Å¸®±îÁö ½ÅÈ£¸¦ º¸³¾ ¼ö ÀÖµµ·Ï ÇÑ ¹æ½ÄÀ» ¸»ÇÑ´Ù. À̶§ ½ÅÈ£°¡ 1ºñÆ®¸¶´Ù ½Ã¸®¾ó(Á÷·Ä)·Î
º¸³»Áö±â ¶§¹®¿¡ ½Ã¸®¾ó Åë½ÅÀ̶ó ºÎ¸¥´Ù.
2. ÆÛ½º³ÎÄÄÇ»ÅÍ¿ÍÀÇ Á¢¼Ó
¿©±â¼´Â Åë½Å Á¢¼Ó »ó´ë¹æÀ» ÆÛ½º³ÎÄÄÇ»ÅÍ·Î ÇÑ´Ù. ±×·¯³ª, ÀÌ ½Ã¸®¾ó Åë½ÅÀÇ Á¢¼ÓÀº Ç¥ÁØÈµÇ¾î
ÀÖÀ¸¸ç, "RS-232C"¶ó ºÎ¸£°í Àִµ¥, ´ëºÎºÐÀÇ ÆÛ½º³ÎÄÄÇ»Åͳª ¸ðµ©ÀÌ ÀÌ ±Ô°Ý¿¡ µû¸£°í Àֱ⠶§¹®¿¡
°°Àº ¹æ¹ýÀ¸·Î Á¢¼ÓÇÒ ¼ö ÀÖ´Ù.
ÀÌ Á¢¼Ó¿¡´Â "25ÇÉ DSUB Ä¿³ØÅÍ"³ª "9ÇÉ ¹Ì´Ï DSUB Ä¿³ØÅÍ"¶ó ºÎ¸£´Â Ä¿³ØÅͰ¡ ÀϹÝÀûÀ¸·Î »ç¿ëµÇ°í
ÀÖÀ¸¹Ç·Î, ±×°ÍÀ» ÀüÁ¦·Î ¼³¸íÇÑ´Ù.
Ä¿³ØÅÍÀÇ ÇÉ ¹øÈ£¿Í ½ÅÈ£ ¹× °£ÀÌÀûÀÎ »ç¿ë¹ýÀº ¾Æ·¡ Ç¥¿Í °°´Ù.
¹Ì´ÏDSUB
Ä¿³ØÅÍ |
25ÇÉ
DSUB |
½ÅÈ£ ¸íĪ |
°£´ÜÇÑ »ç¿ë¹ý |
1 |
8 |
CD(Data Carrier Detect) |
ÀÔ·Â, »ç¿ëÇÏÁö ¾Ê´Â´Ù |
2 |
3 |
RD(Receive Data) |
ÀÔ·Â, »ó´ë¹æ TD¿¡ Á¢¼Ó |
3 |
2 |
TD(Transmit Data) |
Ãâ·Â, »ó´ë¹æ RD¿¡ Á¢¼Ó |
4 |
20 |
DTR(Data Terminal Ready) |
Ãâ·Â, »ç¿ëÇÏÁö ¾Ê´Â´Ù |
5 |
7 |
SG(Signal Ground) |
±×¶ó¿îµå, »ó´ë¹æ SG¿¡ Á¢¼Ó |
6 |
6 |
DSR(Data Set Ready) |
ÀÔ·Â, »ç¿ëÇÏÁö ¾Ê´Â´Ù |
7 |
4 |
RTS(Request to Send) |
Ãâ·Â, »ó´ë¹æ CTS¿Í Á¢¼Ó |
8 |
5 |
CTS(Clear to Send) |
ÀÔ·Â, »ó´ë¹æ RTS¿Í Á¢¼Ó |
9 |
22 |
RI(Ring Indicate) |
ÀÔ·Â, »ç¿ëÇÏÁö ¾Ê´Â´Ù |
3. ½Ã¸®¾ó Åë½Å Á¦¾î ÇÁ·Î±×·¥ÀÇ ±¸¼º
¿©±â¼ ¼Ò°³ÇÏ´Â Åë½Å¿ë ÇÁ·Î±×·¥Àº ŸÀÌ¸Ó ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇϰí ÀÖ´Ù. ÀÌ ÀÎÅÍ·´Æ®¸¦ »ç¿ëÇÔÀ¸·Î½á °¢
ºñÆ®ÀÇ ½ÅÈ£¸¦ ±â´Ù¸®°í ÀÖ´Â µ¿¾È, ÄÄÇ»ÅÍ¿¡´Â ´Ù¸¥ ÀÛ¾÷À» ½Ãų ¼ö ÀÖ´Ù. µû¶ó¼, Åë½ÅÀ» ÇÏ¸é¼ ´Ù¸¥
ÀÏÀ» ÇÏ·Á´Â °æ¿ì, ¿¹¸¦ µé¸é Ç¥½Ã¸¦ Çϰųª ¸ðÅ͸¦ µ¿ÀÛ½ÃŰ´Â ÀÏÀÌ °¡´ÉÇØÁø´Ù.
Àüü´Â 3°³ÀÇ ÇÁ·Î±×·¥ ¸ðµâ°ú ÇϳªÀÇ º¯¼ö Á¤ÀÇ ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
(1) º¯¼ö Á¤ÀÇ ºÎºÐ
Åë½Å ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÏ´Â º¯¼ö³ª Á¤¼ö¸¦ Á¤ÀÇÇϰí ÀÖ´Ù. ¿©±â¼ Áß¿äÇÑ °ÍÀº Åë½Å¼Óµµ¸¦ º¯°æÇϱâ
À§ÇÑ ÆÄ¶ó¹ÌÅÍÀÌ´Ù. ¼Óµµ¸¦ ¹Ù²Ù±â À§Çؼ´Â 2°³ÀÇ ÆÄ¶ó¹ÌÅÍÀÇ °ªÀ» º¯°æÇÏ°í ¾î¼ÀºíÇÏ¿© °íÄ£´Ù.
(2) ÀÎÅÍ·´Æ® ó¸® ¸ðµâ(INTERRUPT)
À̰ÍÀº ÀÎÅÍ·´Æ®°¡ µé¾î¿ÔÀ» ¶§, ±×¶§ÀÇ ·¹Áö½ºÅ͸¦ º¸Á¸ÇÑ ÈÄ, °¢ Ç÷¡±×¸¦ º¸°í ¾î¶² »óÅÂÀÇ
ÀÎÅÍ·´Æ®ÀÎÁö¸¦ ÆÇÁ¤Çϰí ÇÊ¿äÇÑ Ã³¸®·Î Á¡ÇÁÇÑ´Ù. ¶ÇÇÑ °¢ 󸮰¡ Á¾·áµÈ ÈÄ ÀÎÅÍ·´Æ®°¡ µé¾î°£ °÷À¸·Î
µ¹¾Æ°¡±â À§ÇØ º¸Á¸ÇØ µÐ ·¹Áö½ºÅ͸¦ ¿ø·¡´ë·Î µÇµ¹·Á ¸®ÅÏÇÑ´Ù.
(3) ¼Û½Å ÇÁ·Î±×·¥ ¸ðµâ(PUTCHAR)
¼Û½ÅÀº ºñ±³Àû ´Ü¼øÇϸç, ¼Û½Å ¿ä±¸°¡ ÀÖÀ¸¸é ¿ì¼± start bitÀ» Ãâ·ÂÇÏ¿© ÀÏÁ¤½Ã°£ÀÇ Å¸À̸Ӹ¦
½ºÅ¸Æ®½ÃŲ´Ù. ŸÀ̸ÓÀÇ ÀÎÅÍ·´Æ®°¡ µé¾î¿ÔÀ¸¸é ¼øÂ÷ µ¥ÀÌÅ͸¦ 1ºñÆ®¾¿ ½ÃÇÁÆ®ÇÏ¸é¼ Ãâ·ÂÇÑ´Ù.
¸¶Áö¸·À¸·Î stop bit¸¦ ¼Û½ÅÇÏ¿© ¿Ï·áÇÑ´Ù.
(4) ¼ö½Å ÇÁ·Î±×·¥ ¸ðµâ(GETCHAR)
¼ö½Å ó¸®ÀÇ ºÎºÐ¿¡¼, ¿ì¼± ½ºÅ¸Æ® ÆÞ½º¸¦ ¼ö½ÅÇÒ ¼ö ÀÖµµ·Ï ŸÀ̸Ӹ¦ Ǯī¿îÆ®¿¡¼ Çϳª ÀûÀº »óÅ·Î
¼³Á¤ÇØ µÐ´Ù.
±×·¡¼ ½ºÅ¸Æ® ºñÆ®¿¡ ÀÇÇØ +1 Ä«¿îÆ®Çϸé ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇϰí, ½ºÅ¸Æ® ºñÆ®ÀÇ °ËÃâÀ» ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
´ÙÀ½Àº ÀÏÁ¤½Ã°£¸¶´Ù ŸÀÌ¸Ó ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇϵµ·Ï ÇÏ¿© ±× ¶§¸¶´Ù µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÑ´Ù.
À̰ÍÀ» ±×¸²À¸·Î ³ªÅ¸³»¸é ¾Æ·§ ±×¸²°ú °°ÀÌ µÈ´Ù.

¿©±â¼ ¾à°£ ¿¬±¸µÇ¾î ÀÖ´Â °ÍÀº ¿ì¼± ½ºÅ¸Æ® ºñÆ®ÀÇ ÀÎÅÍ·´Æ®°¡ µé¾î¿Ô´Ù¸é, È®ÀÎÇϱâ À§ÇØ 10¥ìs
±â´Ù¸° ´ÙÀ½, ´Ù½Ã Çѹø ÀÔ·ÂÀ» Àоîµé¿© º¸°í, °°Àº ½ÅÈ£¿´´Ù¸é ½ºÅ¸Æ® ºñÆ®·Î °£ÁÖÇÑ´Ù.
´Ù¸£¸é ³ëÀÌÁî·Î ÀÎÅÍ·´Æ®°¡ µé¾î¿Â °ÍÀ¸·Î °£ÁÖÇÏ¿© ¹«½ÃÇϰí, ´ÙÀ½ ½ºÅ¸Æ® ºñÆ®ÀÇ ÀÎÅÍ·´Æ®¸¦
±â´Ù¸°´Ù.
È®½ÇÈ÷ ½ºÅ¸Æ® ºñÆ®¸¦ ¹Þ¾Æµé¿´´Ù¸é ´ÙÀ½ÀÇ Å¸À̸Ӵ 1.5ºñÆ®ºÐÀÇ ½Ã°£À¸·Î ½ºÅ¸Æ®ÇÑ´Ù.
±×¸®°í time upÀÇ ÀÎÅÍ·´Æ®°¡ µé¾î¿À¸é µ¥ÀÌÅÍ·Î ÀÔ·ÂÀ» ÀоîµéÀδÙ. À̰ÍÀ¸·Î Ʋ¸²¾øÀÌ È®½ÇÇÑ
µ¥ÀÌÅ͸¦ ÀоîµéÀÌ°Ô µÈ´Ù. ÀÌÇÏ, 1ºñÆ®ºÐ ½Ã°£ÀÇ Å¸À̸ӷΠ°è¼ÓÇÑ´Ù.
4. º¯¼ö, Á¤¼öÀÇ Á¤ÀÇ
(1) Åë½Å¼Óµµ¿ë ÆÄ¶ó¹ÌÅÍ
Åë½Å¼Óµµ¸¦ °¡º¯À¸·Î Çϱâ À§ÇØ 2°³ÀÇ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇϰí ÀÖ´Ù. ±× °ªÀ» ±¸ÇÏ´Â ¹æ¹ýÀº ¾Æ·¡¿Í °°ÀÌ
ÇÑ´Ù.
¿ì¼±, Åë½Å¼Óµµ·ÎºÎÅÍ 1ºñÆ®ÀÇ ÆÞ½ºÆøÀ» ±¸ÇÑ´Ù. ´ÙÀ½¿¡ ¸¶ÀÌÅ©·ÎÄÄÇ»ÅÍÀÇ Å¬·ÏÀ¸·Î ±×°ÍÀ» ³ª´©¾î
Ä«¿îÅÍÀÇ °ªÀ» ±¸ÇÑ´Ù(1Ä«¿îÆ®´Â 4Ŭ·ÏºÐ). ±×¸®°í ±× Ä«¿îÆ®°ªÀ» ½ÇÇöÇÏ´Â prescaler¿Í TMR0ÀÇ °ªÀ»
±¸ÇÑ´Ù.
¾Æ·¡ Ç¥´Â ½ÇÁ¦ÀÇ ¿¹À̸ç, Ŭ·ÏÀº 10MHzÀÇ °æ¿ìÀÌ´Ù.
BaudRate |
PulseWidth |
Counter |
prescale |
TMR0(BITTMR) |
width |
300bps |
3333.33usec |
8333 |
64(5) |
130(7E) |
3328usec |
1200 |
833.33 |
2083 |
16(3) |
130(7E) |
832 |
2400 |
416.67 |
1041 |
8(2) |
128(80) |
409 |
4800 |
208.33 |
521 |
4(1) |
124(84) |
198 |
9600 |
104.17 |
260 |
2(0) |
122(86) |
99 |
¿©±â¼ 4800, 9600bpsÀÇ °æ¿ì¿¡´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇà½Ã°£¿¡ ÀÇÇÑ Áö¿¬ºÐÀ» °øÁ¦ÇÑ °ªÀ¸·Î
µÇ¾î ÀÖ´Ù(¾à 6¥ìsºÐ).
¶ÇÇÑ »ó±â prescaleÀÇ °ýÈ£¼ÓÀÇ °ªÀÌ ÇÁ¸®½ºÄÉÀÏ·¯ ¼³Á¤¿ëÀÇ °ªÀ¸·Î µÇ¸ç, À̰ÍÀ»
BAUDRATEÀÇ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.
ÇÁ·Î±×·¥ ¸®½ºÆ®»óÀº ¾Æ·¡¿Í °°ÀÌ µÇ¾î ÀÖ´Ù.
;
;BAUDRATE: boud rate 300 to 9600 at 10MHz clock.
; 5=300bps 3=1200bps 2=2400bps 1=4800bps 0=9600bps
;
BAUDRATE SET 0 ;¿©±â¿¡ ÇÁ¸®½ºÄÉÀÏ·¯°ªÀ» ÁöÁ¤ÇÑ´Ù
BITTMR SET 086H ;TMR0¿¡ ¼³Á¤ÇÏ´Â °ªÀ¸·Î À§ÀÇ Ç¥¿¡ ³ªÅ¸³½ °ªÀ» ÁöÁ¤ÇÑ´Ù
BITTMR1 SET 050H ;½ºÅ¸Æ® ºñÆ®ÀÏ ¶§ÀÇ ¾à 1.5ºñÆ®ºÐÀÇ °ª |
(2) ±âŸ º¯¼ö
±âŸ ¹ü¿ëÀ¸·Î »ç¿ëÇÏ´Â º¯¼ö¿Í, Ç÷¡±×·ù´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.
;*************************************
; Define constant module
;*************************************
#DEFINE TXBUSY RESULT,0 ;sending
#DEFINE RXBUSY RESULT,2 ;receiving
#DEFINE RECV RESULT,3 ;receive end
#DEFINE ERROR RESULT,4 ;error bit
;**** Define Variables *****
RESULT EQU 0CH ;current status
WREG EQU 0DH ;wreg save area
SREG EQU 0EH ;status reg save area
BITCNT EQU 0FH ;send bit counter
EXTRA EQU 10H ;stop bit flag
TXREG EQU 11H ;send data buffer
RXREG EQU 12H ;receive data buffer
CNT2 EQU 13H ;counter for delay |
5. ÀÎÅÍ·´Æ® ó¸® ÇÁ·Î±×·¥
ÀÎÅÍ·´Æ®°¡ µé¾î°¬À» ¶§¿¡ ¿ì¼± ½ÇÇàÇϴ ó¸®ÀÌ´Ù. ¿©±â¼´Â ·¹Áö½ºÅÍÀÇ ´ëÇÇ, º¹±¸¿Í °¢Á¾ Ç÷¡±×¸¦
º¸°í ¾î¶² ÀÎÅÍ·´Æ®ÀÎÁö¸¦ ÆÇÁ¤ÇÏ¿© °¢°¢ÀÇ Ã³¸®·Î ºÐ±âÇÑ´Ù.
ÀÌ Ã³¸®ÀÇ ¸®½ºÆ®´Â ´ÙÀ½°ú °°´Ù.
;****************************************
; Interrupt process module
;****************************************
INTERRUPT ;4¹øÁö¿¡¼ ¿©±â·Î Á¡ÇÁÇÑ´Ù
BTFSS INTCON,T0IF ;TMR0ÀÇ ÀÎÅÍ·´Æ®ÀÎÁö È®ÀÎ
RETFIE ;´Ù¸£¸é ¾Æ¹« Àϵµ ÇÏÁö ¾Ê°í ¸®ÅÏÇÑ´Ù
BCF INTCON,T0IF ;TMR0ÀÇ ÀÎÅÍ·´Æ® Ç÷¡±× Ŭ¸®¾î
;**** W register & status register¸¦ ´ëÇÇ
MOVWF WREG ;W reg¸¦ ´ëÇÇ
SWAPF STATUS,W ;status¸¦ wreg¿¡ À̵¿
MOVWF SREG ;status¸¦ ´ëÇÇ
BTFSC TXBUSY ;¼Û½ÅÁßÀΰ¡?
GOTO TXNEXT ;¼Û½ÅÁßÀ̶ó¸é ´ÙÀ½ ºñÆ® ¼Û½ÅÀ¸·Î
BTFSC RXBUSY ;¼ö½ÅÁßÀΰ¡?
GOTO RXNEXT ;¼ö½ÅÁßÀ̶ó¸é ´ÙÀ½ ºñÆ® ¼ö½ÅÀ¸·Î
GOTO STARTBIT ;½ºÅ¸Æ® ºñÆ® ÀÎÅÍ·´Æ® 󸮷Î
;**** register¸¦ º¹±Í½ÃÄÑ ÀÎÅÍ·´Æ®°¡ µé¾î°£ Àå¼Ò·Î µ¹¾Æ°£´Ù
RESTORE SWAPF SREG,W ;status ²¨³¿
MOVWF STATUS ;status º¹±Í
SWAPF WREG,F ;wreg ²¨³¿
SWAPF WREG,W ;wreg º¹±Í
RETFIE ;´ÙÀ½ ÀÎÅÍ·´Æ® Çã°¡ ¸®ÅÏ |
6. ¼Û½Å ó¸® ÇÁ·Î±×·¥
¼Û½ÅÀº ŸÀ̸ӷΠÀÏÁ¤½Ã°£¸¶´Ù ÀÎÅÍ·´Æ®¸¦ ³»°í, ±× ¶§¸¶´Ù ¼Û½Å µ¥ÀÌÅÍÀÇ ºñÆ®¸¦ ¼øÂ÷ ¼ÛÃâÇÑ´Ù.
¼ÛÃâÇÏ´Â °÷Àº Ç×»ó RA3ÀÇ Æ÷Æ®ÀÌ´Ù.
¾Æ·¡ ¸®½ºÆ®·Î ¼³¸íÇÑ´Ù.
- ¿ì¼±, ¼Û½Å ¿ä±¸°¡ CALLµÇ¸é PUTCHAR 󸮷ΠTXBUSY Ç÷¡±×¸¦ ¼¼Æ®ÇÏ¿© ¼Û½ÅÁßÀ¸·Î Çϸç, °è¼ÓÇØ¼
½ºÅ¸Æ® ºñÆ®¸¦ ¼Û½ÅÇÏ¿© ŸÀ̸Ӹ¦ 1ºñÆ®ºÐÀÇ ½Ã°£¿¡ ¼¼Æ®ÇÑ ´ÙÀ½, ½ºÅ¸Æ®½ÃŰ°í³ª¼ ÀÎÅÍ·´Æ® ´ë±â·Î
ÇÑ´Ù(TXSTART).
- ŸÀ̸Ӱ¡ count upÇÏ¿© ³¢¾îµé¸é TXNEXT 󸮷ΠºÐ±âÇÏ¿© µ¥ÀÌÅÍÀÇ ¼Û½ÅÀ» 1ºñÆ®¸¶´Ù ÇÑ´Ù. ±×
ºñÆ®¸¶´Ù ŸÀ̸Ӹ¦ ¼¼Æ®ÇÏ¿© ÀÎÅÍ·´Æ®¸¦ ±â´Ù¸°´Ù.
- ÃÖÈÄÀÇ µ¥ÀÌÅÍ ¼Û½ÅÈÄ¿¡´Â stop bitÀÇ ¼Û½Å(STOPBIT)À¸·Î ºÐ±âÇÏ¿© 1ºñÆ®ºÐÀÇ ½ºÅéºñÆ®¸¦ Ãâ·ÂÇÑ´Ù.
- ´ÙÀ½ ÀÎÅÍ·´Æ®·Î ¸ðµÎ Á¾·áÇϰí DONE·Î ºÐ±âÇÏ¿© ÀÎÅÍ·´Æ®¸¦ ±ÝÁö·Î Çϰí Á¾·áÇÑ´Ù.
;************************************
; Transmission process module
;************************************
;¼Û½Å °³½Ã ó¸®
PUTCHAR
BSF TXBUSY ;¼Û½ÅÁß Ç÷¡±×¸¦ ¼¼Æ®
MOVLW 8 ;¼Û½Å µ¥ÀÌÅÍ ºñÆ®¼ö¸¦ 8·Î Çϰí
MOVWF BITCNT ;ºñÆ® Ä«¿îÅÍ¿¡ ¼¼Æ®
MOVLW 1 ;½ºÅéºñÆ®¼ö¸¦ 1·Î Çϰí
MOVWF EXTRA ;Ä«¿îÅÍ¿¡ ¼¼Æ®
CALL TXSTART ;½ºÅ¸Æ® ºñÆ® ¼Û½Å
BCF INTCON,T0IF ;ÀÎÅÍ·´Æ® Ç÷¡±× Ŭ¸®¾î
BSF INTCON,T0IE ;ŸÀÌ¸Ó ÀÎÅÍ·´Æ® Çã°¡
RETFIE
;**** ½ºÅ¸Æ® ºñÆ® ¼Û½Åó¸® ****
TXSTART
CLRF TMR0 ;ŸÀÌ¸Ó ¼¼Æ®
BSF STATUS,RP0 ;page 1
CLRWDT
MOVLW BAUDRATE ;ÇÁ¸®½ºÄÉÀÏ·¯ ¼¼Æ®
MOVWF OPTION_REG
BCF STATUS,RP0 ;page 0
BCF PORTA,3 ;½ºÅ¸Æ® ºñÆ® ¼¼Æ®
MOVLW BITTMR ;ŸÀ̸Ӱª ²¨³¿
MOVWF TMR0 ;ŸÀÌ¸Ó ½ºÅ¸Æ®
RETURN
;****** µ¥ÀÌÅÍ ºñÆ®ÀÇ ¼Û½Åó¸® *****
TXNEXT
MOVLW BITTMR ;ŸÀÌ¸Ó Àç ½ºÅ¸Æ®
MOVWF TMR0
MOVF BITCNT ;Àüü ºñÆ® Á¾·áÀΰ¡?
BTFSC STATUS,Z
GOTO STOPBIT ;Á¾·á½Ã ½ºÅéºñÆ® ¼Û½ÅÀ¸·Î
NEXTTXBIT
DECF BITCNT,F ;ºñÆ® Ä«¿îÅÍ-1
BSF STATUS,C ;µ¥ÀÌÅÍ ºñÆ®¸¦ ½ÃÇÁÆ®
RRF TXREG ;
BTFSS STATUS,C ;µ¥ÀÌÅÍ ºñÆ®ÀÇ 0, 1¿¡ ÀÇÇØ
;RA3¿¡ 0, 1À» Ãâ·Â
BCF PORTA,3 ;0 out
BTFSC STATUS,C
BSF PORTA,3 ;1 out
GOTO RESTORE ;return
;**** ½ºÅéºñÆ® ¼Û½Åó¸® ****
STOPBIT
MOVF EXTRA,W ;½ºÅéºñÆ® ¼Û½ÅÀÌ ³¡³µ´Â°¡?
BTFSC STATUS,Z ;
GOTO DONE ;¼Û½Å³¡ Á¾·á·Î
DECF EXTRA,F ;½ºÅéºñÆ® Ä«¿îÅÍ-1
BSF PORTA,3 ;½ºÅéºñÆ® Ãâ·Â
GOTO RESTORE ;return
;*** Àüü µ¥ÀÌÅÍ ¼Û½Å¿Ï·á, Á¾·áó¸® ****
DONE
BCF INTCON,T0IE ;ŸÀÌ¸Ó ÀÎÅÍ·´Æ® ±ÝÁö
BCF TXBUSY ;¼Û½ÅÁß Ç÷¡±× Ŭ¸®¾î
GOTO RESTORE ;return |
7. ¼ö½Å ó¸® ÇÁ·Î±×·¥
¼ö½ÅÀº ¾à°£ ó¸® ³»¿ëÀÌ º¹ÀâÇÏÁö¸¸, È帧Àº ´Ü¼øÇÏ´Ù.
- ¸ÕÀú ¼ö½Å ¿ä±¸°¡ ÀÖÀ¸¸é GETCHAR·Î ½ºÅ¸Æ® ºñÆ®ÀÇ ¼ö½ÅÁغñ 󸮸¦ ½ÇÇàÇÑ´Ù. À̰Ϳ¡´Â ŸÀ̸Ӹ¦
Ǯī¿îÆ® Çϳª ¹Ù·Î Àü¿¡ ÀÎÅÍ·´Æ® ´ë±â·Î ÇÑ´Ù.
- ½ºÅ¸Æ® ºñÆ® ÀԷ¿¡ ÀÇÇØ ŸÀ̸ÓÀÇ ÀÎÅÍ·´Æ®°¡ µé¾î°¡¸é STARTBIT·Î ºÐ±âÇÏ¿© 10¥ìs ±â´Ù¸° ÈÄ, ´Ù½Ã
Çѹø µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÏ¿© ½ºÅ¸Æ® ºñÆ®ÀÓÀ» È®ÀÎÇÑ´Ù.
¸¸ÀÏ ±×·¸Áö ¾Ê¾Ò´Ù¸é ³ëÀÌÁî¿¡ ÀÇÇÑ ¿À·ù ÀÎÅÍ·´Æ®·Î °£ÁÖÇÏ°í ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀ¸¸ç, ´ÙÀ½ ½ºÅ¸Æ®
ºñÆ® ´ë±â·Î ÇÏ°í ¸®ÅÏÇÑ´Ù(NOISE). È®½ÇÈ÷ ½ºÅ¸Æ® ºñÆ®¿´´Ù¸é ¼ö½ÅÁß Ç÷¡±×(RXBUSY)¸¦ ¼¼Æ®Çϰí,
ŸÀ̸ӿ¡ 1.5ºñÆ®ÆøºÐÀÇ Å¸À̸ӰªÀ» ¼¼Æ®Çϸç ÀÎÅÍ·´Æ® ´ë±â·Î ÇÑ´Ù.
- ´ÙÀ½ºÎÅÍÀÇ ÀÎÅÍ·´Æ®´Â µ¥ÀÌÅÍ ºñÆ®·Î¼ µ¥ÀÌÅÍ ¼ö½Å(RXNEXT)À¸·Î ºÐ±âÇÑ´Ù.
¿©±â¼´Â 1ºñÆ®ºÐ ÆøÀÇ ½Ã°£¿¡ ŸÀ̸Ӹ¦ ¸®ÅÏÇÏ°í ¼øÂ÷ µ¥ÀÌÅÍ ºñÆ®ÀÇ ¼ö½ÅÀ¸·Î RXREG¿¡ ÀúÀåÇØ
°£´Ù(NEXTRXBIT). ÃÖÈÄÀÇ µ¥ÀÌÅÍ ºñÆ®ÀÇ ´ÙÀ½Àº stop bitÀÇ ¼ö½ÅÀÏ °ÍÀ̹ǷΠ±×°ÍÀ» È®ÀÎÇÑ´Ù. ¸¸ÀÏ
½ºÅéºñÆ®°¡ ¾Æ´Ï¸é ¿À·ù·Î ERROR Ç÷¡±×¸¦ ¼¼Æ®Çϰí Á¾·áÇÑ´Ù. Á¾·á½Ã¿¡´Â ¼ö½ÅÁß Ç÷¡±×(RXBUY)¸¦
Ŭ¸®¾îÇÑ´Ù. ¶ÇÇÑ Á¤»óÀ¸·Î µ¥ÀÌÅ͸¦ ¼ö½ÅÇÒ ¼ö ÀÖ¾úÀ» ¶§¿¡´Â µ¥ÀÌÅÍ ¼ö½Å Ç÷¡±×(RECV)¸¦ ¼¼Æ®ÇÑ´Ù.
;*************************************
; Receiving process module
;*************************************
GETCHAR
BSF RECV ;µ¥ÀÌÅÍ ¼ö½Å Ç÷¡±× Ŭ¸®¾î
MOVLW 9 ;µ¥ÀÌÅÍ ºñÆ®¼ö¸¦ 8·ÎÇϰí
MOVWF BITCNT ;ºñÆ® Ä«¿îÅÍ¿¡ ¼¼Æ®
CLRF RXREG ;µ¥ÀÌÅÍ ¹öÆÛ Ŭ¸®¾î
BCF ERROR ;¿¡·¯ Ç÷¡±× Ŭ¸®¾î
;**** ½ºÅ¸Æ® ºñÆ® ¼ö½Å Áغñó¸® ****
CLRF TMR0 ;ŸÀ̸Ӹ¦ Ãʱ⠼¼Æ®
BSF STATUS,RP0 ;page 1
CLRWDT ;clear WDT
MOVLW 038H ;watchdog timer ¸ðµå
MOVWF OPTION_REG ;·Î prescaler¸¦ 1·Î ¼¼Æ®
BCF STATUS,RP0 ;page 0
MOVLW OFFH ;ŸÀ̸Ӹ¦ FF·Î ¼¼Æ®
MOVWF TMR0 ;ŸÀÌ¸Ó ½ºÅ¸Æ®
BCF INTCON,T0IF ;ŸÀÌ¸Ó ÀÎÅÍ·´Æ® Ç÷¡±× Ŭ¸®¾î
BSF INTCON,T0IE ;ŸÀÌ¸Ó ÀÎÅÍ·´Æ® Çã°¡
RETFIE ;ÀÎÅÍ·´Æ® ´ë±â·Î
;**** ½ºÅ¸Æ® ºñÆ® ÀÎÅÍ·´Æ® ó¸® ****
STARTBIT
CLRWDT ;
CALL TIME10 ;10¥ìs ´ë±â
BTFSC PORTA,4 ;Àç Àб⠽ºÅ¸Æ® ºñÆ®Àΰ¡?
GOTO NOISE ;´Ù¸¦ ¶§
BSF RXBUSY ;¼ö½ÅÁß Ç÷¡±× ON
;µ¥ÀÌÅÍ ¼ö½ÅÁغñ
CLRF TMR0 ;ŸÀÌ¸Ó ÀçÂ÷ ¼¼Æ®
BSF STATUS,RP0 ;page 1
MOVLW BAUDRATE ;ÇÁ¸®½ºÄÉÀÏ·¯ ¼¼Æ®
MOVWF OPTION_REG
BCF STATUS,RP0 ;page 0
MOVLW BITTMR1 ;1.5ºñÆ®ÆøÀÇ ½Ã°£À¸·Î ¼¼Æ®
MOVWF TMR0 ;ŸÀÌ¸Ó ½ºÅ¸Æ®
GOTO RESTORE ;return
;*** ½ºÅ¸Æ® ºñÆ®°¡ ¾Æ´Ò ¶§ÀÇ Ã³¸® ****
NOISE
MOVLW OFFH ;ŸÀÌ¸Ó ÀçÂ÷ ¼¼Æ®
MOVWF TMR0
GOTO RESTORE ;return
;**** µ¥ÀÌÅÍ ºñÆ® ¼ö½Åó¸® ****
RXNEXT
BSF STATUS,RP0 ;page 1
CLRWDT ;ŸÀÌ¸Ó ÀçÂ÷ ¼¼Æ®
MOVLW BAUDRATE
MOVWF OPTION_REG
BCF STATUS, RP0 ;page 0
MOVLW BITTMR ;1ºñÆ®ÆøÀÇ ½Ã°£À¸·Î ¼¼Æ®
MOVWF TMR0 ;ŸÀÌ¸Ó ÀçÂ÷ ½ºÅ¸Æ®
DECFSZ BITCNT,F ;ºñÆ® Ä«¿îÅÍ-1, Á¾·áÀΰ¡?
GOTO NEXTRXBIT ;´ÙÀ½ µ¥ÀÌÅÍ ¼ö½ÅÀ¸·Î
;*** ½ºÅéºñÆ® ¼ö½Åó¸® ***
BTFSS PORTA,4 ;µ¥ÀÌÅÍ ÀÔ·ÂÇÏ°í ½ºÅéºñÆ® È®ÀÎ?
BSF ERROR ;½ºÅéºñÆ®°¡ ¾Æ´Ò ¶§ ¿¡·¯
BCF INTCON,T0IE ;ÀÎÅÍ·´Æ® ±ÝÁö
BCF RXBUSY ;¼ö½ÅÁß Ç÷¡±× ¸®¼Â
BCF RECV ;µ¥ÀÌÅÍ ¼ö½Å Ç÷¡±× ¼¼Æ®
;
;**** ÀÎÅÍ·´Æ® º´·Ä󸮸¦ ½ÇÇàÇÒ ¶§´Â ¿©±â¿¡ ¼ö½Å ¿Ï·á½ÃÀÇ Ã³¸®¸¦ ***
; Ãß°¡Çϰí, ó¸® ½ÇÇàÈÄ ÀÎÅÍ·´Æ® 󸮷Πµ¹¾Æ°£´Ù.
; CALL RECEIVEPROCESS
GOTO RESTORE
;**** µ¥ÀÌÅÍ ºñÆ® ¼ö½Åó¸® ***
NEXTRXBIT
BCF STATUS,C ;µ¥ÀÌÅÍÀÇ 0, 1¿¡ ÀÇÇØ RXREG
BTFSC PORTA,4 ;¿¡ 0, 1À» ¼¼Æ®ÇÑ´Ù
BSF STATUS,C ;1 case
RRF RXREG,F ;set data to RXREG
GOTO RESTORE
;***** 10¥ìs Áö¿¬ ŸÀÌ¸Ó *****
TIME10 ;10¥ìs
MOVLW 7H
MOVWF CNT2
T_LP2 DECFSZ CNT2,F ;2+3*7-1=22
GOTO T_LP2
RETURN ;22+1=23 |
´ÙÀ½ È¸é ¸ñÂ÷ ȸé