c51manual

Page 1

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

1

¤Ù Á×Í¡ÒÃà¢Õ¹â»Ãá¡ÃÁ ÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Getting start manual of C programming for MCS-51 microcontroller

¸ÕúÙÅ ËÅ ÍÇÔàªÕÂÃÃا ¹¤Ã ÀÑ¡´ÕªÒµÔ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ (C) Innovative Experiment Co.,Ltd.


2

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

Getting start manual of C programming for MCS-51 Microcontroller

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ISBN 974 - 90511- 9 -X

¸ÕúÙÅ ËÅ ÍÇÔàªÕÂÃÃا ¹¤Ã ÀÑ¡´ÕªÒµÔ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ

ʧǹÅÔ¢ÊÔ·¸Ôµì ÒÁ ¾.Ã.º. ÅÔ¢ÊÔ·¸Ôì ¾.È. 2521 Ë ÒÁ¡ÒÃÅÍ¡àÅÕ¹äÁ ÇÒ Ê Ç¹Ë¹Ö§è Ê Ç¹ã´¢Í§Ë¹Ñ§Ê×ÍàÅ Á¹Õé ¹Í¡¨Ò¡¨Ðä´ ÃºÑ Í¹Ø­Òµ ã¤Ã¤ÇÃ㪠˹ѧÊ×ÍàÅ Á¹Õé 1. ¹Ñ¡àÃÕ¹ ¹ÔÊµÔ ¹Ñ¡ÈÖ¡ÉÒ áÅкؤ¤Å·ÑÇè ä»·ÕÁè ¤Õ ÇÒÁʹã¨ã¹¡ÒÃàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ÂÀÒÉÒ C 2. ʶҺѹ¡ÒÃÈÖ¡ÉÒ âçàÃÕ¹ ÇÔ·ÂÒÅÑ ÁËÒÇÔ·ÂÒÅÑ ·ÕÁè ¡Õ ÒÃà» ´¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒÍÔàÅç¡·ÃÍ¹Ô¡Ê ËÃ×Í ÀÒ¤ÇÔªÒÇÔÈÇ¡ÃÃÁÍÔàÅç¡·ÃÍ¹Ô¡Ê áÅФÍÁ¾ÔÇàµÍà 3. ¤³Ò¨Òà·ÁÕè ¤Õ ÇÒÁµ ͧ¡ÒÃÈÖ¡ÉÒ áÅÐàµÃÕÂÁ¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒäÁâ¤Ãâ»Ãà«Êà«Íà - äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹ÃдѺ¡ÅÒ§·Õµè Í §¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ¤ÍÁ¾ÔÇàµÍà ÀÒÉÒÊÙ§ 4. ˹ ǧҹàÍ¡ª¹·ÕÁè ¡Õ ÒþѲ¹Ò¼ÅÔµÀѳ± ´Ò ¹ÍÔàÅç¡·ÃÍ¹Ô¡Ê áÅФÍÁ¾ÔÇàµÍà ´íÒà¹Ô¹¡ÒèѴ¾ÔÁ¾ áÅШíÒ˹ ÒÂâ´Â ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ 3133/53 «.ÊØ¢ÁØ ÇÔ· 101/2 ¶.ÊØ¢ÁØ ÇÔ· á¢Ç§ºÒ§¹Ò ࢵºÒ§¹Ò ¡ÃØ§à·¾Ï 10260 â·ÃÈѾ· 0-2747-7001-4 â·ÃÊÒà 0-2747-7005

ÃÒÂÅÐàÍÕ´·Õ»è ÃÒ¡¯ã¹Ë¹Ñ§Ê×ͤÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¼ Ò¹ ¡ÒõÃǨ·Ò¹Í ҧÅÐàÍÕ´áÅж ǹ¶Õè à¾×Íè ãË Á¤Õ ÇÒÁÊÁºÙó áÅж١µ ͧÁÒ¡·ÕÊè ´Ø ÀÒÂãµ à§×Íè ¹ä¢áÅÐàÇÅÒ·Õ¾è §Ö ÁÕ¡Í ¹ ¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡ ¡ÒùíÒ¢ ÍÁÙÅã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé »ãª ·Ò§ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔä´ ÁÀÕ ÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ »ÃСÒÃã´ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×Íè ¹·ÕÍè Ò¨ÁÕáÅÐä´ ÃºÑ ¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ÍÍ¡ä»¹Ñ¹é ·Ò§ºÃÔÉ·Ñ Ï ¨Ð¾ÂÒÂÒÁªÕáé ¨§áÅÐá¡ ä¢ã¹¡ÒèѴ¾ÔÁ¾ ¤ÃÑ§é µ Íä»


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

3

ÊÒúѭ º··Õè 1 ¤ÇÒÁÃÙà º×Íé §µ ¹à¡ÕÂè ǡѺÀÒÉÒ C ..........................................................................5 1.1 ·ÕÁè ҢͧÀÒÉÒ C 1.2 ËÑÇã¨ÊíҤѭ¤×Í ¤ÍÁä¾àÅÍà 1.3 â¤Ã§Êà ҧ¾×¹é °Ò¹¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

º··Õè 2 á¹Ð¹íÒáÅÐ㪠§Ò¹ Rkit-51 ªØ´«Í¿µ áÇà C ¤ÍÁä¾àÅÍà ..................................11 2.1 à¡ÃÔ¹è ¹íÒ Rkit-51 2.2 àÃÔÁè µ ¹¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C ¡Ñº Rkit-51 2.3 à¨ÒÐÅÖ¡â»Ãá¡ÃÁ RIDE 2.4 ÃÙ¨ ¡Ñ áÅÐࢠÒã¨ä¿Å ÅÊÔ µÔ§é áÅÐÅÔ§¡ à¡Íà áÁ» 2.5 µÑ§é ¤ Ò·íÒ§Ò¹ãË ¤ÍÁä¾àÅÍà 㹠RIDE

º··Õè 3 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹â´Â㪠ªÍ¿µ áÇà RIDE ...........................51 3.1 â¤Ã§Êà ҧÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC51 3.2 ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC51 3.3 ¡ÒáíÒ˹´ª¹Ô´¢Í§¤ Ò¤§·Õáè ÅеÑÇá»Ã 3.4 µÑÇ´íÒà¹Ô¹¡ÒÃã¹â»Ãá¡ÃÁÀÒÉÒ C (Operators) 3.5 µÑÇá»ÃÍÐààáÅо͹ àµÍà ã¹ÀÒÉÒ C 3.6 ¤íÒÊÑ§è ¤Çº¤ØÁµ Ò§æ ã¹ÀÒÉÒ C ·Õãè ª 㹤ÍÁä¾àÅÍà RC51 3.7 ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè áÅÐ㪠§Ò¹¿ §¡ ª¹Ñè ã¹â»Ãá¡ÃÁÀÒÉÒ C 3.8 ÀÒÉÒ C ¡ÑºË¹ ǤÇÒÁ¨íÒã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 3.9 àÃ×Íè §¢Í§¿ §¡ ª¹Ñè 3.10 ¡ÒÃ㪠á¾Ãç¡Á Ò (pragma)

º··Õè 4 äźÃÒÃբͧ«Í¿µ áÇà RIDE áÅСÒÃÊà ҧäźÃÒÃÕÊÒí ËÃѺâ»Ãá¡ÃÁÀÒÉÒC.......109 4.1 äźÃÒÃÕã¹ RC-51 4.2 µÑÇÍ ҧ¡ÒÃÊà ҧäźÃÒÃÕäÇ ãª §Ò¹

º··Õè 5 á¹Ç·Ò§¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè Êà ҧÃкº¤Çº¤ØÁÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51.............................125 5.1 ¡ÒÃàµÃÕÂÁ«Í¿µ áÇà Rkit-51 ÊíÒËÃѺ¡ÒþѲ¹ÒÃкº 5.2 ¢Ñ¹é µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺÃкºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  ªØ´«Í¿µ áÇà Rkit-51


4

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

5

º··Õè 1

¤ÇÒÁÃÙà º×Íé §µ ¹¢Í§ÀÒÉÒ C 1.1 ·ÕÁè ҢͧÀÒÉÒ C ÃÒ¡°Ò¹¢Í§ÀÒÉÒ C àÃÔÁè µ ¹¨Ò¡ÀÒÉÒâ»Ãá¡ÃÁ·Õàè ÃÕÂ¡Ç Ò BCPL «Ö§è ä´ ÃºÑ ¡ÒþѲ¹Ò¢Ö¹é ã¹» ¤.È. 1967 â´ÂÁÒà µ¹Ô ÃÔªÒà ´ (Martin Richards) µ ÍÁÒã¹» ¤.È. 1970 ह ¸ÍÁ» Ê¹Ñ (Ken Thompson) ä´ à¾ÔÁè àµÔÁ¤ÇÒÁÊÒÁÒö¢Í§ÀÒÉÒ BCPL ¾Ñ²¹ÒÁÒà» ¹ÀÒÉÒ B â´Â㪠ÀÒÉÒ B ¹Õãé ¹¡ÒÃÊà ҧÃкº »¯ÔºµÑ ¡Ô Òà UNIX ÊíÒËÃѺà¤Ã×Íè §¤ÍÁ¾ÔÇàµÍà DEC PDP-7 ã¹àºÅ áÅ纺ÍÃÒ·ÍÃÕè (Bell Laboratories) ·Ñ§é ÀÒÉÒ BCPL áÅÐ B µ Ò§¡çà» ¹ÀÒÉÒâ»Ãá¡ÃÁ·ÕÃè ¨Ù ¡Ñ ¢ ÍÁÙÅà¾Õ§ÃٻẺà´ÕÂǤ×Í à» ¹¢ ÍÁÙÅ àÇÔà ´ (word) ÂѧäÁ ÊÒÁÒö¨Ñ´¡ÒáѺ¢ ÍÁÙÅẺµÑÇÍÑ¡ÉÃä´ ã¹¢³Ðà´ÕÂǡѹ¼Ù à¢Õ¹â»Ãá¡ÃÁËÃ×Í â»Ãá¡ÃÁàÁÍà µ Ò§¡çÂѧÁÕ¤ÇÒÁµ ͧ¡ÒÃÀÒÉÒâ»Ãá¡ÃÁ¤ÍÁ¾ÔÇàµÍà ·Õèâ¤Ã§Êà ҧÊÒÁÒö¨Ñ´¡ÒáѺ ¢ ÍÁÙÅ (data) áÅеÑÇá»Ã (variable)ã¹ÃٻẺµ Ò§æ ä´ à¾ÔèÁÁÒ¡¢Öé¹ ·Ñ駢 ÍÁÙÅ·Õèà» ¹àÅ¢¨íҹǹàµçÁ (integer), µÑÇàÅ¢·È¹ÔÂÁ (floating-point) ËÃ×͵ÑÇÍÑ¡Éà (character) ¨Ö§ÁÕ¡ÒÃà¾ÔÁè àµÔÁ¤ÇÒÁÊÒÁÒöàËÅ Ò ¹ÕÅé §ã¹ÀÒÉÒ B áÅСíÒ˹´ª×Íè ãËÁ à» ¹ ÀÒÉÒ C ¼Ù¾ ² Ñ ¹ÒÀÒÉÒ C ¢Ö¹é ¤×Í à´¹¹ÔÊ ÃÔµªÕè (Dennis Ritchie) ¨Ò¡àºÅ áÅ纺ÍÃÒ·ÍÃÕè â´ÂÁÕ¡ÒÃ㪠§Ò¹¤Ãѧé ááã¹à¤Ã×Íè §¤ÍÁ¾ÔÇàµÍà DEC PDP-11 ã¹» ¤.È. 1972 â´ÂÀÒÉÒ C ·ÕÊè à ҧ¢Ö¹é ¹ÕÂé §Ñ ¤§ÃÑ¡ÉÒ ¤Ø³ÊÁºÑµ·Ô ÊÕè Òí ˤѭ¢Í§ÀÒÉÒ BCPL áÅÐ B àÍÒäÇ áÅÐÁÕ¡ÒÃà¾ÔÁè ¤ÇÒÁÊÒÁÒö㹡ÒèѴ¡ÒáѺ¢ ÍÁÙÅ ä´ ËÅÒÂÃٻẺÁÒ¡¢Ö¹é ´Ñ§¹Ñ¹é ÀÒÉÒ C ã¹ÂؤáÃ¡æ ¨Ö§¶Ù¡¹íÒÁÒ㪠Êà ҧÃкº»¯ÔºµÑ ¡Ô Òà UNIX á·¹ ·ÕÀè ÒÉÒ B 㹪 ǧ»ÅÒ·ÈÇÃÃÉ 1970 ÀÒÉÒ C àÃÔÁè ä´ ÃºÑ ¤ÇÒÁ¹ÔÂÁÍ ҧá¾Ã ËÅÒ áÅÐä´ Â¡Â Í§ÀÒÉÒ C ·ÕÃè µÔ ªÕÊè à ҧ¢Ö¹é Ç Òà» ¹ ÀÒÉÒ C µ ¹¡íÒà¹Ô´ (traditional C) ã¹» ¤.È. 1978 ÁÕ¡ÒõվÁÔ ¾ ˹ѧÊ×Í The C Programming Language ¢Öé¹ â´ÂÊíҹѡ¾ÔÁ¾ à¤Íà ¹Ô᡹áÅÐÃÔµªÕè (Kernighan and Ritchie) áÅÐä´ ÃºÑ ¤ÇÒÁ¹ÔÂÁÍ ҧÁÒ¡ ¨¹¡ÅÒÂà» ¹Ë¹Ñ§Ê×Í´ Ò¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤ÍÁ¾ÔÇàµÍà ·¢Õè Ò´շÊÕè ´Ø àÅ Á˹Ö觵ÅÍ´¡ÒÅ


6

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ËÅѧ¨Ò¡¹Ñ¹é ÀÒÉÒ C ä´ ÃºÑ ¡ÒþѲ¹Òà¾×Íè ãË ÊÒÁÒö㪠§Ò¹ã¹ÃٻẺµ Ò§æ ¡Ñº¤ÍÁ¾ÔÇàµÍà Ẻµ Ò§æ ¨¹·íÒãË ÀÒÉÒ C ÁÕû٠Ẻᵡµ Ò§ËÅÒ¡ËÅÒ ´Ñ§¹Ñ¹é ã¹» ¤.È. 1983 ¨Ö§ä´ Á¡Õ ÒûÃЪØÁ à ÇÁ¡Ñ¹¢Í§¹Ñ¡¾Ñ²¹Òâ»Ãá¡ÃÁ·Õàè ÃÕÂ¡Ç Ò X3J11 technical committee à¾×Íè ¡íÒ˹´Áҵðҹ¢Í§ÀÒÉÒ C â´ÂÁÕÁµÔãË ¨´Ñ ÃٻẺÀÒÂãµ Áҵðҹ¢Í§ American National Standards Committee on Computers and Information Processing ¨¹¡Ãзѧè áÅ ÇàÊÃç¨ã¹» ¤.È. 1988 ¨Ö§ä´ û٠ẺÁҵðҹ¢Í§ÀÒÉÒ C à» ¹ ANSI-C µ ÍÁÒä´ Á¡Õ ÒûÃЪØÁà¾×Íè »ÃѺ»Ãا¤Ãѧé Å ÒÊØ´ã¹» ¤.È. 1999 ÁÕàÍ¡ÊÒÃÍ Ò§ÍÔ§Áҵðҹ ¢Í§ÀÒÉÒ C ¤×Í INCITS/ISO/IEC9899-1999 ´ÙÃÒÂÅÐàÍÕÂ´ä´ ·àÕè Ǻྨ www.ansi.org áµ Í ҧäáçµÒÁ ÀÒÉÒ C ã¹ÂؤáÃ¡æ ¹Ñ¹é ÂѧäÁ ÊÒÁÒöÃͧÃѺ¡Ò÷íҧҹẺ੾ÒÐà¨ÒШ§ËÃ×Í object oriented ä´ ¨Ö§ÁÕ¤ÇÒÁ¾ÂÒÂÒÁ㹡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ãË ÊÒÁÒöÃͧÃѺ¤ÇÒÁµ ͧ¡Òà ´Ñ§¡Å ÒÇ ¨Ö§·íÒãË ÀÒÉÒ C àÃÔÁè ÁÕ¡ÒÃᵡ˹ Í áÅÐÁÕ¤ÇÒÁËÅÒ¡ËÅÒÂÁÒ¡¢Ö¹é ËÒ¡áµ ·¡Ø â»Ãá¡ÃÁÂѧ¤§ µ ͧÊÒÁÒöÃͧÃѺâ»Ãá¡ÃÁÀÒÉÒ C µÒÁÁҵðҹ ANSI-C ¨¹¡Ãзѧè à¡Ô´à» ¹ÀÒÉÒ C ẺãËÁ ·àÕè ÃÕ¡ Ç Ò C with Classes «Ö§è µ ÍÁÒä´ Á¡Õ ÒþѲ¹Òµ ͨ¹¡Ãзѧè à¡Ô´à» ¹ÀÒÉÒ C++ ã¹àÇÅÒµ ÍÁÒâ´Â¼Ù¤ ¹ ¤Ô´ ÀÒÉÒ C++ ¤×Í ºÕ¨Òà ¹ Êà·ÃÒÊ ·ÃÑ» (Bjarne Stroustrup) ¨Ò¡àºÅ áÅ纺ÍÃÒ·ÍÃÕè ¨ÐàËç¹ä´ ÇÒ ÀÒÉÒ C ¹Ñ¹é ä´ ÃºÑ ¡ÒÃÍ͡ẺÁÒãË ·Òí §Ò¹¡Ñº¤ÍÁ¾ÔÇàµÍà áÅÐà¢Õ¹â»Ãá¡ÃÁ ´ ǤíÒÊÑ§è ·ÕÊè ÒÁÒö·íÒ¤ÇÒÁࢠÒã¨ä´ äÁ ÂÒ¡ ¨Ö§¨Ñ´â»Ãá¡ÃÁÀÒÉÒ C Ç Òà» ¹ ÀÒÉÒ¤ÍÁ¾ÔÇàµÍà ÃдѺ ¡ÅÒ§ (medium language programming) ´Ñ§¹Ñ¹é àÁ×Íè ¹íÒÁÒ·íÒ§Ò¹¡ÑºäÁâ¤Ãâ»Ãà«Êà«Íà ··Õè Òí §Ò¹´ Ç ÀÒÉÒà¤Ã×Íè §ËÃ×ÍáÁªÕ¹â¤ ´ ¨Ö§¨íÒà» ¹Í ҧÂÔ§è ¨Ðµ ͧÁÕ µÑÇá»ÅÀÒÉÒ à¾×Íè á»ÅÀÒÉÒ C ¹Ñ¹é à» ¹ÀÒÉÒ à¤Ã×Íè § ¹Ñ¹è ¨Ö§à» ¹·ÕÁè Ңͧâ»Ãá¡ÃÁ·Õàè ÃÕÂ¡Ç Ò ¤ÍÁä¾àÅÍà (compiler) ´Ñ§¹Ñ¹é 㹡ÒþѲ¹ÒÃкº§Ò¹´ ÇÂâ»Ãá¡ÃÁÀÒÉÒÃдѺ¡ÅÒ§áÅÐÊÙ§·Ø¡µÑÇ äÁ ÇÒ ¨Ðà» ¹ÀÒÉÒ àºÊÔ¡, C, C++, Visual C ËÃ×Í¡Ãзѧè Delhpi ¨Ðµ ͧÁÕ¡ÒÃá»Å§ÀÒÉÒàËÅ Ò¹Ñ¹é ´ ǤÍÁä¾àÅÍà à¾×Íè ãË à» ¹ÀÒÉÒà¤Ã×Íè §¡ ͹àÊÁÍ ¨Ò¡¹Ñ¹é «Õ¾ÂÕ ¨Ù §Ö ¨ÐÊÒÁÒö¹íÒ¢ ÍÁÙźã¹â»Ãá¡ÃÁàËŠҹѹé ä»»ÃÐÁÇÅ ¼ÅáÅзíÒ§Ò¹µ Íä» ËÒ¡áµ à¾Õ§㹪ش¢Í§«Í¿µ áÇà àËŠҹѹé ä´ ¨´Ñ ¡ÒÃãË ¢¹Ñé µÍ¹·Õ«è ºÑ « ͹໠¹¡ÃÐ ºÒ¹¡ÒÃÀÒÂã¹·ÕèäÁ ¨íÒà» ¹µ ͧáÊ´§ÃÒÂÅÐàÍÕ´ãË ¼Ù à¢Õ¹â»Ãá¡ÃÁ·ÃÒº ËÃ×Ͷ Ò¨ÐÁÕ¡ÒÃáÊ´§¡ç ¨Ðᨠ§à¾Õ§ʶҹТͧ¡Ò÷íÒ§Ò¹Êѹé æ ෠ҹѹé

1.2 ËÑÇã¨ÊíҤѭ¤×Í ¤ÍÁä¾àÅÍà 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ´ ÇÂÀÒÉÒ C à¾×è͹íÒä»ãª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·Ã ÅàÅÍà ¹¹Ñé ã¹·Ò§»¯ÔºµÑ ¨Ô ÃÔ§æ äÁ 㪠à¹×Íé ⤠´¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õ¶è ¡Ù ¹íÒŧ仺ÃèØã¹Ë¹ ǤÇÒÁ ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÑÇÃËÑÊ¢ ÍÁÙÅ·Õãè ª §Ò¹¨ÃÔ§¹Ñ¹é ä´ ÁÒ¨Ò¡¡ÒÃá»ÅÀÒÉÒ C à» ¹ ÃËÑÊÀÒÉÒà¤Ã×Íè §ËÃ×ÍáÁªÕ¹â¤ ´´ Ç«Ϳµ áÇà ·àÕè ÃÕ¡¡Ñ¹Ç Ò ¤ÍÁä¾àÅÍà (compiler)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

7

¡ÒþѲ¹ÒÃкº§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç Ââ»Ãá¡ÃÁÀÒÉÒ C ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ»´Ñ§¹Õé (1) à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ´ ÇÂà·ç¡« àÍ´ÔàµÍà ËÃ×Í¾×¹é ·ÕÊè Òí ËÃѺà¢Õ¹â»Ãá¡ÃÁã¹¡Ã³Õ ·Õ«è Í¿µ áÇà ¹¹Ñé ¨Ñ´ÁÒà» ¹ªØ´ã¹áºº IDE (2) ¤ÍÁä¾Å ËÃ×Íá»Å§ÀÒÉÒ C à» ¹ÀÒÉÒáÍÊà«ÁºÅբͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÇÑ ¹Ñ¹é æ (3) áÍÊà«ÁàºÅÍà ¨Ò¡ÀÒÉÒáÍÊà«ÁºÅÕà» ¹ÀÒÉÒà¤Ã×Íè §ã¹ÃÙ»¢Í§àÅ¢°Ò¹ÊԺˡ (4) ´Òǹ âËÅ´«Íà Ê⤠´·Õèä´ ¨Ò¡¡ÒÃáÍÊà«ÁàºÅÍà ŧÊ٠˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (5) ·´ÅͧáÅеÃǨÊͺ¡Ò÷íÒ§Ò¹ ËÒ¡ÂѧäÁ ÊÁºÙó ãË ¡ÅѺä»á¡ 䢵ѧé áµ ¢¹Ñé µÍ¹ (1) Í ҧäáçµÒÁ ã¹¢Ñ鹵͹ (2) áÅÐ (3) ¼Ù 㪠§Ò¹¨ÐäÁ àË繶֧¡Ãкǹ¡Ò÷íÒ§Ò¹ à¹×èͧ¨Ò¡ «Í¿µ áÇà á»ÅÀÒÉÒËÃ×ͤÍÁä¾àÅÍÃ ä´ ÃÇÁ¡Ò÷íҧҹ㹠2 ¢Ñ¹é µÍ¹¹Õäé Ç ´Ç ¡ѹ

1.3 â¤Ã§Êà ҧ¾×¹é °Ò¹¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ã¹ÃÙ»·Õè 1-1 à» ¹µÑÇÍ ҧâ»Ãá¡ÃÁÀÒÉÒ C ·Õè¹íÒÁÒ㪠á¹Ð¹íÒ¶Ö§Ê Ç¹»ÃСͺ·ÕèÊíҤѭ¢Í§ â»Ãá¡ÃÁ ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé

1.3.1 ¡ÒûÃСÒÈÊ Ç¹ Preprocessor ¼Ù¾ ² Ñ ¹Òâ»Ãá¡ÃÁµ ͧ»ÃСÒÈÊ Ç¹¹Õàé » ¹Ê ǹááã¹â»Ãá¡ÃÁÀÒÉÒ C â´Â¢Ö¹é µ ¹´ ÇÂà¤Ã×Íè § ËÁÒªÒà » (#) áŠǵÒÁ´ ÇÂä´àÃ硵տ include ËÃ×Í define à¾×Íè ãË ¤ÍÁä¾àÅÍà ¹Òí ä»ãª µ¤Õ ÇÒÁ àÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·àÕè ËÁÒÐÊÁ ·íÒãË ¤ÍÁä¾àÅÍà è٠¡Ñ ¡ÑºÃÕ¨ÊÔ àµÍà áÅкԵ¤Çº¤ØÁµ Ò§æ ÀÒ ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè ´Ô µ Í´ Ç ¨Ò¡ÃÙ»·Õè 1-1 »ÃСÒÈà» ¹ #include<C51rd2.h> ËÁÒ¤ÇÒÁÇ Ò ÁÕ¡ÒÃàÃÕ¡㪠ä¿Å c51rd2.h Íѹ໠¹ä¿Å ·ºÕè ÃèØÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89C51RD2 ÊíÒËÃѺ㪠§Ò¹¡Ñº C ¤ÍÁä¾àÅÍà ¼Ùà ¢Õ¹â»Ãá¡ÃÁ¨Ðµ ͧÁÕ¡ÒûÃСÒÈ㪠·ÃѾÂҡâͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àÊÕ¡ ͹ à¾×Íè ãË ¤ÍÁä¾àÅÍà ÊÒÁÒöࢠҶ֧·ÃѾÂÒ¡ÃàËŠҹѹé ä´ â´ÂäÁ ·Òí ãË à¡Ô´¢ ͼԴ¾ÅÒ´ ¨¹à¡Ô´¡ÒÃᨠ§àµ×͹㹠¢Ñ¹é µÍ¹¢Í§¡ÒÃá»Å«Íà Êâ»Ãá¡ÃÁ (source program) ä»à» ¹ÀÒÉÒà¤Ã×Íè § â´Â·ÃѾÂÒ¡Ãã¹·Õ¹è ËÕé ÁÒ ¶Ö§ ¤ÇÒÁ¨Ø¢Í§Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ, ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ, ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ áÅкԵ¤Çº¤ØÁ «Ö§è ¢Öé¹ÍÂÙ ¡ÑºàºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Õè㪠§Ò¹´ ÇÂÇ ÒÁÕ¤ÇÒÁÊÒÁÒö¾ÔàÈÉà¾ÔèÁàµÔÁÁÒ¡à¾Õ§äà â´Â»¡µÔáÅ ÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 áµ ÅÐàºÍà ÁÃÕ ¨Õ ÊÔ àµÍà ¾¹×é °Ò¹àËÁ×͹¡Ñ¹ Ê Ç¹ã¹ºÒ§Ãع ·ÕÁè ¡Õ ÒÃà¾ÔÁè àµÔÁ¤ÇÒÁÊÒÁÒö¾ÔàÈÉࢠÒä» àÁ×Íè µ ͧ¡ÒÃ㪠¤ÇÒÁÊÒÁÒö¾ÔàÈÉàËŠҹѹé ÍÒ¨¨Ðµ ͧÁÕ¡Òà ¤Çº¤ØÁâ´Â¡ÒÃࢠҶ֧ÃÕ¨ÊÔ àµÍà ੾ÒзÕÁè ¡Õ ÒÃà¾ÔÁè àµÔÁࢠÒÁҾà ÍÁ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ Ã¹Ø ´Ñ§¡Å ÒÇ


8

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

Ê Ç¹»ÃСÒÈ Preprocessor

»ÃСÒÈ¿ §¡ ª¹Ñè ª×Íè sum

Ê Ç¹»ÃСÒȵÑÇá»Ãà ÇÁ ·Ñ§é â»Ãá¡ÃÁËÃ×Íâ¡ÅºÍÅ (global)

Ê Ç¹¢ ͤÇÒÁ¡íҡѺËÃ×ͤÍÁàÁ¹µ (à» ¹¢ ͤÇÒÁ·Ñé§ËÁ´·ÕèÍÂÙ ËÅѧ à¤Ã×èͧËÁÒ // ËÃ×Í /* ) Ê Ç¹»ÃСÒȵÑÇá»ÃẺ· ͧ¶Ô¹è (local) ÀÒÂ㹿 §¡ ª¹Ñè

¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ ¤íÒÊѧè ÀÒÂ㹿 §¡ ª¹Ñè ËÅÑ¡ ·Õ¨è зíÒ§Ò¹àÃÕ§ÅíҴѺ ¨Ò¡ºÃ÷Ѵº¹Å§Å Ò§

à¤Ã×Íè §ËÁÒ ; 㪠»´ ºÃ÷ѴËÃ×ͤíÒÊѧè

ÃÙ»·Õè 1-1 áÊ´§Ê ǹ»ÃСͺËÅÑ¡¢Í§â»Ãá¡ÃÁÀÒÉÒ C 㹡ÒûÃСÒÈ㪠·ÃѾÂҡâͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¼Ùà ¢Õ¹â»Ãá¡ÃÁ¨Ðµ ͧ»ÃСÒÈ´ Ç ä´àÃ硵տ #include ·ÕÊè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ áŠǵÒÁ´ Ǫ×Íè ä¿Å äźÃÒÃÕ·µÕè Í §¡ÒÃࢠҶ֧ µÑÇÍ ҧä¿Å äźÃÒÃբͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà ·äÕè ´ ÃºÑ ¤ÇÒÁ¹ÔÂÁ㪠§Ò¹Í ҧá¾Ã ËÅÒÂ ä´ á¡ #include <reg51.h> 㪠»ÃСÒÈãË ¤ÍÁä¾àÅÍà ÃÙ ¨Ñ¡ÃÕ¨ÔÊàµÍà áÅкԵ¤Çº¤ØÁ ¾×é¹°Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Áҵðҹ Ê Ç¹ãË­ 㪠§Ò¹¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà AT89C51/ AT891051/ AT892051/ AT894051 ÏÅÏ ¢Í§ Atmel «Ö§è äÁ ÁäÕ ·àÁÍà 2 #include <c51ac2.h> 㪠»ÃСÒÈãË ¤ÍÁä¾àÅÍà è Ù ¡Ñ ÃÕ¨ÊÔ àµÍà áÅкԵ¤Çº¤ØÁ·Ñ§é ËÁ´·ÕÁè ÍÕ ÂÙã ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà T89C51AC2 ¢Í§ Atmel #include <C51rd2.h> 㪠»ÃСÒÈãË ¤ÍÁä¾àÅÍà è Ù ¡Ñ ÃÕ¨ÊÔ àµÍà áÅкԵ¤Çº¤ØÁ·Ñ§é ËÁ´·ÕÁè ÍÕ ÂÙã ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà P89C51RD2 ¢Í§ Phillips ¹Í¡¨Ò¡¹ÕÂé §Ñ ÊÒÁÒö㪠»ÃСÒÈà¾×Íè àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ͹×è ä´ ´Ç  ¨Ò¡ÃÙ»·Õè 1-1 ÁÕ ¡ÒÃàÃÕ¡㪠¿ §¡ ªÑè¹ printf ¨Ò¡äźÃÒÃÕ·Õèª×èÍ stdio.h â´Â¡ÒûÃСÒÈ #include<stdio.h> áÅÐ㪠㹠¡ÒáíÒ˹´¢ ͤÇÒÁá·¹¤ Ò¤§·ÕËè Ã×͹Ծ¨¹ ä´ Ê §¼ÅãË à¡Ô´¤ÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁÂÔ§è ¢Ö¹é ¨Ò¡ÃÙ»·Õè 1-1 ÁÕ¡ÒáíÒ˹´ãË pi á·¹´ ǵÑÇàÅ¢ 3.14159 ´ Ç¡ÒûÃСÒÈ #define pi 3.14159


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

9

1.3.2 Ê Ç¹»ÃСÒÈäźÃÒÃբͧâ»Ãá¡ÃÁ äźÃÒÃÕ¤Í× ä¿Å ·ÁÕè ¿Õ § ¡ ª¹Ñè ºÃèØÍÂÙ ä¿Åì äźÃÒÃբͧÀÒÉÒ C ÁÕ¹ÒÁÊ¡ØÅà» ¹ .h ¨ÐÁÕÊÇ ¹Ë¹Ö§è ·ÕÁè Ҿà ÍÁµÑǤÍÁä¾àÅÍà àÁ×Íè µÔ´µÑ§é â»Ãá¡ÃÁ ÊÒÁÒöµÃǨÊÍºä´ ¨Ò¡¤ÙÁ Í× ¡ÒÃ㪠ËÃ×ͨҡä¿Å Help 㹡ÒûÃСÒȨÐ㪠ä´àÃ硵տ #include µ Í´ ÇÂä¿Å äźÃÒÃÕ¹ÒÁÊ¡ØÅ .h ´Ñ§µÑÇÍ ҧ #include <stdio.h> 㪠»ÃСÒÈà¾×Í è 㪠§Ò¹¿ §¡ ª¹Ñè µÔ´µ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ (à¹×Íè § ¨Ò¡ C ¤ÍÁä¾àÅÍà ¹àÕé » ¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ä¿Å äźÃÒÃÕ stdio.h ¨Ö§à» ¹äźÃÒÃբͧ ¾Íà µÍ¹Ø¡ÃÁ «Ö§è ᵡµ Ò§¨Ò¡ä¿Å äźÃÒÃբͧ C ¤ÍÁä¾àÅÍà ·ÇÑè ä») #include <math.h> 㪠»ÃСÒÈà¾×Í è 㪠§Ò¹¿ §¡ ª¹Ñè ¤íҹdz·Ò§¤³ÔµÈÒʵà #include <string.h> 㪠»ÃСÒÈà¾×Í è 㪠§Ò¹¿ §¡ ª¹Ñè ¨Ñ´¡ÒõÑÇá»ÃẺµÑÇÍÑ¡Éà #include <absacc.h> 㪠»ÃСÒÈà¾×Í è 㪠§Ò¹¿ §¡ ª¹Ñè ࢠҶ֧˹ ǤÇÒÁ¨íҢͧäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¹Í¡¨Ò¡¹Ñé¹¼Ù ¾Ñ²¹Òâ»Ãá¡ÃÁÊÒÁÒöÊà ҧäźÃÒÃÕä´ àͧ â´Âà¢Õ¹¿ §¡ ªÑè¹·Õèµ Í§¡ÒÃáÅ Ç ºÑ¹·Ö¡à» ¹ä¿Å .h à¡çºäÇ ·âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å ¼§Ñ §Ò¹ËÃ×Íâ»Ãà¨ç¡ (project) ·ÕÁè ¡Õ ÒÃàÃÕ¡㪠§Ò¹ËÃ×Í ·Õâè ¿Åà´Íà ·ãÕè ª à¡çºäźÃÒÃÕ·ÁÕè Ҿà ÍÁ¡Ñº¤ÍÁä¾àÅÍà ¡äç ´ àÁ×Íè µ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÀÒÂã¹äź ÃÒÃÕ㴨е ͧ㪠ä´àÃ硵տ #include à¾×Íè »ÃСÒÈä¿Å äźÃÒÃÕ·µÕè Í §¡ÒÃäÇ ·ÊÕè Ç ¹ËÑÇâ»Ãá¡ÃÁ

1.3.3 Ê Ç¹»ÃСÒȤ Ò¤§·Õãè ¹â»Ãá¡ÃÁ ä´àÃ硵տ #define 㪠»ÃСÒÈ¢ ͤÇÒÁá·¹¤ Ò¤§·Õãè ¹â»Ãá¡ÃÁ «Ö§è ÁÑ¡¨Ð»ÃСÒȵ Í· Ò ºÃ÷Ѵ #include ¡ÒÃ㪠§Ò¹ä´àÃ硵տ #define ÍÒ¨ÁÕËÃ×ÍäÁ ¡äç ´ ÁÕû٠Ẻ¡ÒûÃСÒȴѧ¹Õé #define xxx sss

â´Â·Õè

xxx sss

¤×Í ¢ ͤÇÒÁ·Õµè Í §¡ÒÃ㪠᷹¤ Ò sss ã¹â»Ãá¡ÃÁ ¤×Í µÑÇàÅ¢¤ Ò¤§·Õè µÑÇÍÑ¡¢ÃÐ ¢ ͤÇÒÁ ËÃ×͹Ծ¨¹ ·Õµè Í §¡ÒÃãË ãª xxx Í Ò§Íԧ᷹

µÑÇÍ ҧ·Õè 1-1 #include<reg51.h>

// //

#define pi 3.14159

//

#define ON 1

//

void main(void) {

//

}

float x = 0;

//

x = pi + ON;

//

while(1);

//

»ÃСÒÈãË ¤ÍÁä¾àÅÍà è٠¡Ñ ÃÕ¨ÊÔ àµÍà áÅкԵ¤Çº¤ØÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà ¾¹×é °Ò¹ ãË pi á·¹µÑÇàÅ¢ 3.14159 ãË ON á·¹µÑÇàÅ¢ 1 ¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ·ÕÁè ¡Õ Ò÷íÒ§Ò¹ÍÂÙÀ ÒÂã¹ »ÃСÒȵÑÇá»Ã· ͧ¶Ô¹è x à» ¹µÑÇá»Ãª¹Ô´¨íҹǹ¨ÃÔ§ ¼ÅÅѾ¸ ¤Í× x=4.14159 (à·Õº෠ҡѺ x = 3.14159 + 1 ) ǹÍÂÙ¡ ºÑ ·Õµè ÅÍ´àÇÅÒ


10

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

1.3.4 Ê Ç¹»ÃСÒÈ¡ÒÃ㪠§Ò¹Ã ÇÁ·Ñ§é â»Ãá¡ÃÁ (global declarations) à» ¹Ê ǹ·ÕÁè ¡Õ ÒûÃСÒȵÑÇá»ÃáººÊ Ç¹ÃÇÁËÃ×ÍẺâ¡ÅºÍÅ (global) ¡Å ÒǤ×Í ãª »ÃСÒÈ µÑÇá»Ã·ÕÊè ÒÁÒöàÃÕ¡㪠§Ò¹ä´ ·¡Ø ·Õãè ¹â»Ãá¡ÃÁËÃ×ÍÀÒÂ㹢ͧ·Ø¡æ ¿ §¡ ª¹Ñè (¨Ò¡ÃÙ»·Õè 1-1 µÑÇá»Ã i à» ¹µÑÇá»ÃẺâ¡ÅºÍÅ) áÅÐà» ¹Ê ǹ»ÃСÒÈ¿ §¡ ª¹Ñè ·Õµè Í §¡ÒÃãË ¶¡Ù àÃÕÂ¡ãª ä´ ·¡Ø ·Õãè ¹â»Ãá¡ÃÁ (function prototypes) à¾×èÍ»ÃСÒÈãË ¿ §¡ ªÑè¹Í×è¹æ ÁͧàËç¹áÅÐàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹¹Õéä´ â´ÂäÁ à¡Ô´ ¢ ͼԴ¾ÅÒ´à¹×èͧ¨Ò¡ÅíҴѺ¡ÒûÃСÒÈ¿ §¡ ªÑè¹

1.3.5 Ê Ç¹»ÃСÒÈ¿ §¡ ª¹Ñè à» ¹Ê ǹ·Õãè ª »ÃСÒÈ¿ §¡ ª¹Ñè ËÅÑ¡ËÃ×Í¿ §¡ ª¹Ñè main áÅп §¡ ª¹Ñè µ Ò§æ ·Õ·è Òí §Ò¹Ã ÇÁ¡Ñ¹ â´Â ¿ §¡ ª¹Ñè main ¨ÐÁÕä´ à¾Õ§µÑÇà´ÕÂÇ෠ҹѹé ã¹Ë¹Ö§è â»Ãá¡ÃÁ ÀÒÂ㹿 §¡ ª¹Ñè main ÊÒÁÒöàÃÕ¡㪠§Ò¹ ¿ §¡ ª¹Ñè Í×¹è æ ·Õ¿è § ¡ ª¹Ñè main ÁͧàËç¹ä´ ·¡Ø ¿ §¡ ª¹Ñè ÃÇÁ·Ñ§é ¿ §¡ ª¹Ñè ã´æ ·ÕÁè ¡Õ ÒûÃСÒÈäÇ ¡Í ¹Ë¹ Ò ËÃ×Í¿ §¡ ª¹Ñè ·ÕÁè ¡Õ ÒûÃСÒÈã¹áººÊ ǹÃÇÁäÇ áÅ Ç ¨Ò¡ÃÙ»·Õè 1-1 ÁÕ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè sum áÅÐ main µÒÁÅíҴѺ ¨Ö§·íÒãË ¿ §¡ ª¹ Ñè main ÁͧàË繿 §¡ ª¹Ñè sum áÅÐÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè sum ä´ â´ÂäÁ ¨Òí à» ¹µ ͧ»ÃСÒÈ¿ §¡ ª¹Ñè sum ã¹áººÊ ǹÃÇÁ ¹Í¡¨Ò¡¹ÕéÀÒÂ㹿 §¡ ªÑè¹·Õèà¢Õ¹¢Öé¹ÁÒ㪠§Ò¹ã¹ºÒ§¤ÃÑ駨íÒà» ¹·Õè¨Ðµ ͧÁÕµÑÇá»ÃÁÒÃѺ¤ Ò ËÃ×͹íÒÁÒ㪠ÀÒÂ㹿 §¡ ª¹Ñè ¹Í¡¨Ò¡¨Ð㪠µÇÑ á»Ã·ÕÁè ¡Õ ÒûÃСÒÈáººÊ Ç¹ÃÇÁáÅ Ç ¼Ùà ¢Õ¹â»Ãá¡ÃÁ ÊÒÁÒö¡íÒ˹´µÑÇá»Ã¢Ö¹é àͧÀÒÂ㹿 §¡ ª¹Ñè áÅÐ㪠§Ò¹µÑÇá»Ã·Õ¡è Òí ˹´¢Ö¹é ÁÒ¹Õàé ©¾Òп §¡ ª¹Ñè ˹֧è æ à· Ò¹Ñ¹é ¨ÐàÃÕ¡¡ÒûÃСÒȵÑÇá»Ã´Ñ§¡Å ÒÇÇ Ò à» ¹µÑÇá»ÃẺ· ͧ¶Ô¹è ËÃ×ÍâŤÑÅ (local) µÑÇÍ ҧ¨Ò¡ÃÙ»·Õè 1-1 j à» ¹µÑÇá»ÃẺ· ͧ¶Ô¹è ·Õãè ª §Ò¹ÀÒÂ㹿 §¡ ª¹Ñè sum ä´ à· Ò¹Ñ¹é dat à» ¹µÑÇá»ÃẺ· ͧ¶Ô¹è ·Õãè ª §Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ä´ à· Ò¹Ñ¹é

1.3.6 Ê Ç¹¢ ͤÇÒÁ¡íҡѺËÃ×ͤÍÁàÁ¹µ (comment) à» ¹Ê ǹ·Õè㪠¡íҡѺÃÒÂÅÐàÍÕ´à¡ÕèÂǡѺâ»Ãá¡ÃÁà¾×èÍ¢ÂÒ¤ÇÒÁËÃ×ͨش»ÃÐʧ¤ ¡Ò÷íÒ§Ò¹ ¢Í§â»Ãá¡ÃÁ à¾×Íè ãË ÊÒÁÒö·íÒ¤ÇÒÁࢠÒ㨡Ѻâ»Ãá¡ÃÁ·Õàè ¢Õ¹¢Ö¹é ä´ §Ò  áÅЪ ÇÂãË ãª àÇÅÒ㹡Òà ·íÒ¤ÇÒÁࢠÒã¨ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁŴŧ ÊÒÁÒöà¢ÕÂ¹ä´ ËÅÒÂÃٻẺ «Ö§è 㪠à¤Ã×Íè §ËÁÒ // ËÃ×Í /* à ÇÁ¡Ñº */ 㹡ÒáíҡѺ ઠ¹ Ẻ·Õè 1 // ¢ ͤÇÒÁ¡íҡѺ Ẻ·Õè 2 /* ¢ ͤÇÒÁ¡íҡѺ */ Ẻ·Õè 3 /* ¢ ͤÇÒÁ¡íҡѺ ¢ ͤÇÒÁ¡íҡѺ ¢ ͤÇÒÁ¡íҡѺ ¢ ͤÇÒÁ¡íҡѺ */


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

11

º··Õè 2

á¹Ð¹íÒáÅÐ㪠§Ò¹ Rkit-51 ªØ´«Í¿µ áÇà C ¤ÍÁä¾àÅÍà à¾×Íè ãË ¡ÒÃ͸ԺÒÂÃÒÂÅÐàÍÕ´¢Í§¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 à» ¹ä»Í ҧÁÕÃкº ¨Ö§µ ͧÁÕ«Í¿µ áÇà C ¤ÍÁä¾àÅÍà 㹡ÒÃÍ Ò§ÍÔ§à¾×Íè ͸ԺÒ ã¹Ë¹Ñ§Ê×Í àÅ Á¹Õ¨é Ð㪠«Í¿µ áÇà C ¤ÍÁä¾àÅÍà ¢Í§ Raisonance ·Õ¨è ´Ñ ÁÒà» ¹ªØ´â»Ãá¡ÃÁª×Íè Rkit-51 à¹×Íè §¨Ò¡ 1. à» ¹ªØ´â»Ãá¡ÃÁ·Õºè ÃèØà¤Ã×Íè §Á×Í·Õ¨è Òí à» ¹äÇ Í ҧÊÁºÙó ·Ñ§é Ê Ç¹ IDE (Integrated Development Environment) ·Õè㪠µÔ´µ ͡Ѻ¼Ù à¢Õ¹â»Ãá¡ÃÁ ÁÕâ»Ãá¡ÃÁ C ¤ÍÁä¾àÅÍà ·ÕèÃͧÃѺ â»Ãá¡ÃÁÀÒÉÒ C µÒÁÁҵðҹ ANSI-C ä´ Í ҧÊÁºÙó ÊÒÁÒöá»Åâ»Ãá¡ÃÁÀÒÉÒ C áÅ ÇãË ¼ÅÅѾ¸ ÍÍ¡ÁÒà» ¹ä¿Å ¹ÒÁÊ¡ØÅ .hex «Öè§à» ¹ÀÒÉÒà¤Ã×èͧ ÊÒÁÒö¹íÒä»à¢Õ¹ŧã¹Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ ·Ñ¹·Õ áÅÐÂѧÊÒÁÒöµÃǨÊͺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁä´ ´ Ç¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹º¹¤ÍÁ¾ÔÇàµÍà ¡ ͹´ Ç 2. ÁÕ¿§ ¡ ª¹Ñè áÅÐäźÃÒÅÕ·è ãÕè ª §Ò¹ä´ ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ä´ ËÅÒÂàºÍà äÁ ÇÒ ¨Ðà» ¹ AT89xxx ¢Í§ Atmel, P89C51Rxx ¡Ñº P89LPC9xx ¢Í§ Philips ËÃ×Í ADuC8xx ¢Í§ Analog Device à» ¹µ ¹ 3. ÁÕàÇÍà ªÑè¹·´Åͧ㪠(Evaluation version) ·Õè´ÕÁÒ¡æ ¡Å ÒǤ×Í ÊÒÁÒö·íÒ§Ò¹ä´ ÊÁºÙó àËÁ×͹¡ÑºÃع Áҵðҹ â´ÂäÁ Á¢Õ Í ¨íÒ¡Ñ´àÃ×Íè §àÇÅÒ㹡Ò÷´Åͧ㪠(¹Ñº¶Ö§ª ǧàÇÅÒ·Õàè ¢Õ¹ ˹ѧÊ×ÍàÅ Á¹Õ)é ¢ ͨíÒ¡Ñ´ÁÕà¾Õ§¢¹Ò´¢Í§â»Ãá¡ÃÁ·Õ¶è ¡Ù ¨íÒ¡Ñ´äÇ ·Õè 4 ¡ÔâÅ亵 «Ö§è à¾Õ§¾ÍÊíÒËÃѺ¡Òà ·´ÅͧËÃ×Í㪠§Ò¹à¾×è;Ѳ¹ÒÃкº§Ò¹·ÕèäÁ «Ñº« ͹¹Ñ¡ 4. ÃҤҢͧ«Í¿µ áÇà ©ºÑºÊÁºÙó ÍÂÙã ¹ÃдѺ·Õ¹è ¡Ñ ¾Ñ²¹Òä·ÂÊÒÁÒö¨Ñ´«×Íé ä´ ¼ÙÊ ¹ã¨ÊÒÁÒö´Òǹ âËÅ´àÇÍà ª¹Ñ ·´ÅͧËÃ×ÍÊÑ§è «×Íé Ãع ÊÁºÙó ä´ ·Õè www.raisonance.com


12

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.1 à¡ÃÔ¹è ¹íÒ Rkit-51 ªØ´«Í¿µ áÇà Rkit-51 à» ¹ªØ´«Í¿µ áÇà ·ÃÕè ÇÁàÍÒà¤Ã×Íè §Á×Í㹡ÒþѲ¹ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 äÇ Í ҧ¤Ãº¶ ǹ »ÃСͺ´ ÇÂâ»Ãá¡ÃÁÍÕ¡ 5 â»Ãá¡ÃÁ ´Ñ§¹Õé 1. RC-51 â»Ãá¡ÃÁ¤ÍÁä¾Å ËÃ×Íá»ÅÀÒÉÒ C µÒÁ Áҵðҹ ANSI-C ¾Ã ÍÁ¡ÑºäźÃÒÃÕ 2. MA-51 â»Ãá¡ÃÁáÍÊà«ÁàºÅÍà ÊÒí ËÃѺá»ÅÀÒÉÒáÍÊá«ÁºÅÕà» ¹ÀÒÉà¤Ã×Íè § 3. LX-51 â»Ãá¡ÃÁÊà ҧÍͻਡä¿Å (objetc file) áÅÐàª×Íè Áá¿ ÁÍ×¹è ·ÕÍè Ò §ÍÔ§¶Ö§¡Ñ¹ 4. KR-51 Ê Ç¹ªÑé¹â»Ãá¡ÃÁÃÕÅä·Á à¤Íà à¹Å (real-time kernel) ·ÕèÊÒÁÒöà¢Õ¹ â»Ãá¡ÃÁã¹ÅѡɳÐÁÑŵԷÒÊ¡ ¡§Ôé (multi-tasking) 5. RIDE (Raisonance s Integrated Development Environment) â»Ãá¡ÃÁÊ Ç¹ ¡ÅÒ§·Õãè ª µ´Ô µ ͡Ѻ¼Ùã ª «Í¿µ áÇà ·íÒãË ÊÒÁÒöàÃÕ¡㪠â»Ãá¡ÃÁ RC-51, MA-51, LX-51 áÅÐ KR-51 â´Â¼ Ò¹ RIDE à¾Õ§µÑÇà´ÕÂÇ RIDE àÍ´ÔàµÍà ä¿Å ÀÒÉÒ C (.c)

¤ÍÁä¾àÅÍÃ

ä¿Å ÀÒÉÒáÍÊà«ÁºÅÕ (.a51)

áÍÊà«ÁàºÅÍÃ

Íͺà¨ç¡ä¿Å (.obj)

ä¿Å äźÃÒÃÕ (.lib)

Ê Ç¹àª×Íè Áâ§ËÃ×ÍÅÔ§à¡ÍÃ

Íͺà¨ç¡ä¿Å (.obj)

Ê Ç¹¨Ñ´¡ÒÃäźÃÒÃÕ ä¿Å äźÃÒÃÕ (.lib)

ä¿Å .obf Ê Ç¹á»Å§Íͺà¨ç¡ä¿Å à» ¹ä¿Å .hex Ê Ç¹¨íÒÅͧ¡Ò÷íÒ§Ò¹áÅдպѡà¡ÍÃ

ä¿Å ÀÒÉÒà¤Ã×èͧ (.hex)

ÃÙ»·Õè 2-1 ¼Ñ§¡Ò÷íÒ§Ò¹¢Í§«Í¿µ áÇà Rkit-51 ¢Í§ Raisonance


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

13

ÊÒÁÒöà¢Õ¹໠¹¼Ñ§¡ÒÃàÃÕ¡㪠§Ò¹ã¹áµ ÅÐâ»Ãá¡ÃÁä´ ´§Ñ ÃÙ»·Õè 2-1 ¹Í¡¨Ò¡¹ÕÂé §Ñ ÁÕà¤Ã×Íè §Á×Í ã¹¡ÒõÃǨÊͺᡠä¢â»Ãá¡ÃÁ (debugging) ´ Ç¡ÒÃà½ Ò´Ù¤Ò µÑÇá»ÃáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ä´ Í¡Õ ´ Ç ´Ñ§¹Ñ¹é 㹪ش«Í¿µ áÇà Rkit-51 ¹Õ¨é §Ö 㪠§Ò¹§ Ò â´ÂàÃÕ¡㪠¼Ò ¹ RIDE à¾Õ§¨Ø´à´ÕÂÇ¡çÊÒÁÒö㪠§Ò¹ ¿ §¡ ª¹Ñè â»Ãá¡ÃÁ§Ò¹Í×¹è æ ä´ ËÁ´

2.2 àÃÔÁè µ ¹¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C ¡Ñº Rkit-51 2.2.1 µÔ´µÑ§é â»Ãá¡ÃÁ Rkit-51 ¡ÒõԴµÑ§é ªØ´â»Ãá¡ÃÁ Rkit-51 㹡óշÁÕè áÕ ¼ ¹«Õ´âÕ »Ãá¡ÃÁÍÂÙ ÊÒÁÒöÊÑ§è µÔ´µÑ§é â»Ãá¡ÃÁ â´ÂàÅ×Í¡¨Ò¡ä¿Å ª×èÍ INSTALL.EXE µÑÇâ»Ãá¡ÃÁ¨Ð¡ÃзíÒ¡ÒõԴµÑé§áÅеÑ駤 Òâ»Ãá¡ÃÁâ´Â Íѵâ¹ÁÑµÔ â´Â»¯ÔºÑµÔµÒÁ¤íÒÊÑ觷ÕèáÊ´§º¹Ë¹ Ò¨Í ÊÒÁÒöà»ÅÕ蹤 ÒµÑÇàÅ×Í¡áÅÐâ¿Åà´Íà ·Õèà¡çºªØ´ â»Ãá¡ÃÁ Rkit-51 ¹Õéä´ µÒÁ¤ÇÒÁµ ͧ¡Òà ÅѡɳÐઠ¹à´ÕÂǡѺ¡ÒõԴµÑé§â»Ãá¡ÃÁ»ÃÐÂØ¡µ ¢Í§ ÇÔ¹â´ÇÊ ·ÑèÇä» ÊíÒËÃѺ¤Ø³ÊÁºÑµ¢Ô ͧà¤Ã×Íè §¤ÍÁ¾ÔÇàµÍà ·ãÕè ª §Ò¹ªØ´â»Ãá¡ÃÁ Rkit-51 ä´ ÁÕ¤³ Ø ÊÁºÑµ´Ô §Ñ ¹Õé l

«Õ¾ÂÕ àÙ ¾¹àµÕÂÁ 200MHz ËÃ×ÍÊÙ§¡Ç Ò

l

à¹×Íé ·ÕÇè Ò §ã¹ÎÒà ´´ÔÊ¡ Í ҧ¹ Í 30 àÁ¡Ð亵

l

˹ ǤÇÒÁ¨íÒáÃÁÍ ҧ¹ Í 16 àÁ¡Ð亵

l

µÔ´µÑ§é Ãкº»¯ÔºµÑ ¡Ô ÒÃÇÔ¹â´ÇÊ 98/ME/2000/XP

¡Ã³Õ·äÕè Á ÁáÕ ¼ ¹«Õ´âÕ »Ãá¡ÃÁ ÊÒÁÒö´Òǹ âËÅ´â»Ãá¡ÃÁä´ ·Õè http:/ www.raisonance.com â´Â¨Ðà» ¹ä¿Å µ´Ô µÑ§é ·Õ¶è ¡Ù ºÕºÍÑ´ÍÂÙã Ë áµ¡ä¿Å µ´Ô µÑ§é ¹Õäé Ç ã¹â¿Åà´Íà ªÇÑè ¤ÃÒÇ áÅ ÇÊÑ§è µÔ´µÑ§é â»Ãá¡ÃÁ ¨Ò¡ä¿Å ªÍ×è INSTALL.EXE ¨Ò¡â¿Åà´Íà ªÇÑè ¤ÃÒǹÕé

2.2.2 àÃÕ¡㪠§Ò¹ Rkit-51 â´Â¤ÅÔ¡àÅ×Í¡¨Ò¡»ØÁ Start Program à Raisonance Kit 6.1 à Ride IDE ˹ Òµ Ò§ËÅÑ¡¢Í§ â»Ãá¡ÃÁ RIDE ¨Ð»ÃÒ¡¯¢Ö¹é ÁҴѧã¹ÃÙ»·Õè 2-2 ¡Ã³Õ·µÕè Í §¡ÒÃÍÍ¡¨Ò¡â»Ãá¡ÃÁ ÊÒÁÒö·íÒä´ â´Â àÅ×Í¡¨Ò¡àÁ¹Ù File à Exit ËÃ×Í» ´â»Ãá¡ÃÁ¨Ò¡ Window bar ä´ àª ¹¡Ñ¹

2.2.3 ·´ÅͧÊà ҧâ»Ãà¨ç¡µ xyz à¾×Íè à» ¹¡ÒÃÊà ҧ¤ÇÒÁ¤Ø¹ à¤ÂáÅФÇÒÁࢠÒã¨àº×Íé §µ ¹ã¹¡ÒþѲ¹Òâ»Ãá¡ÃÁ¼ Ò¹ RIDE ¨ÐàÃÔÁè ´ Ç¡Ò÷´ÅͧÊà ҧ¼Ñ§§Ò¹ËÃ×Íâ»Ãà¨ç¡µ §Ò Âæ ¢Ö¹é ÁÒ â´Â¡íÒ˹´ª×Íè à» ¹ xyz.prj µÒÁ¢Ñ¹é µÍ¹´Ñ§¹Õé


14

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ÃÙ»·Õè 2-2 ˹ Òµ Ò§ËÅÑ¡¢Í§ RIDE àÍ´ÔàµÍà ÊÒí ËÃѺ㪠㹡ÒÃÊà ҧ¼Ñ§§Ò¹¢Í§â»Ãá¡ÃÁÀÒÉÒ C

ÃÙ»·Õè 2-3 áÊ´§¡ÒÃàÃÔÁè µ ¹Êà ҧ¼Ñ§§Ò¹ËÃ×Íâ»Ãà¨ç¡µ ¢Í§â»Ãá¡ÃÁÀÒÉÒ C (1) Êà ҧâ»Ãà¨ç¡µ ãËÁ â´Â¤ÅÔ¡àÅ×Í¡¨Ò¡àÁ¹Ù Project à New ´Ñ§ÃÙ»·Õè 2-3 㹡óշÁÕè Õ â»Ãà¨ç¡µ à¡ Ò¢Ö¹é ÁÒãË ÍµÑ â¹ÁѵãÔ Ë Ê§Ñè » ´â»Ãà¨ç¡µ à¡ ÒàÊÕ¡ ͹ â´Â¤ÅÔ¡ÊÑ§è » ´¨Ò¡àÁ¹Ù Project à Close (2) ãË ¡Òí ˹´ª×Íè â¿Åà´Íà áÅÐä¿Å ¢Í§â»Ãà¨ç¡µ ·µÕè Í §¡ÒèѴà¡çº ã¹·Õ¹è ãÕé Ë »Í ¹µÒÁ µÑÇÍ ҧ໠¹ C:\ride\bin\xyz.prj ´Ñ§ÃÙ»·Õè 2-4 áŠǤÅÔ¡ OK


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

15

ÃÙ»·Õè 2-5 ˹ Òµ Ò§àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÃÙ»·Õè 2-4 ˹ Òµ Ò§ÊíÒËÃѺ¡íÒ˹´ª×Íè ¢Í§â»Ãà¨ç¡µ MCS-51 ·Õµè Í §¡Òà â´ÂẠ§á¡µÒÁª×Íè ¢Í§¼Ù¼ ÅÔµ ã¹â»Ãá¡ÃÁ RIDE ã¹â»Ãá¡ÃÁ RIDE (3) àÅ×Í¡àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Õè˹ Òµ Ò§ Device ãË àÅ×Í¡ Phillip à P89C51RX2 ´Ñ§ÃÙ»·Õè 2-5 (4) ¨Ò¡¹Ñ¹é RIDE ¾Ã ÍÁ·Õ¨è оѲ¹Òâ»Ãá¡ÃÁã¹â»Ãà¨ç¡µ ªÍ×è xyz ãË ¤ÅÔ¡ä»·Õàè Á¹Ù File à New à C Files à¾×Í è à¢Õ¹â»Ãá¡ÃÁ ´Ñ§ã¹ÃÙ»·Õè 2-6 ãË »Í ¹â»Ãá¡ÃÁ´Ñ§¹Õé

ÃÙ»·Õè 2-6 áÊ´§¤ÇÒÁ¾Ã ÍÁ㹡ÒþѲ¹Òâ»Ãá¡ÃÁã¹â»Ãà¨ç¡µ xyz


16

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

#include <reg51.h> int x,y,z; void main() { x=50; y=120; z=x+y; P0=z; /* out ‘z’ value to Port#0 (P0, 8051) */ }

áŠǺѹ·Ö¡ã¹ª×Íè xyz.c (5) ¨Ò¡¹Ñ¹é ãË ¡Òí ˹´â¹´µ ¹©ºÑºËÃ×ÍáÍ»¾ÅÔपѹè (Node Source/Application) à¾×Íè ãË ä¿Å µ¹ ©ºÑºâ»Ãá¡ÃÁÀÒÉÒ C ª×Íè xyz.c ·ÕÊè à ҧ¢Ö¹é ãËÁ ¹¼Õé ¹Ç¡à¢ Òã¹â»Ãà¨ç¡µ xyz.prj â´Â¤ÅÔ ¡àÅ×Í¡·Õàè Á¹Ù Project à add node Source/Application ´Ñ§ÃÙ»·Õè 2-7 áÅ ÇàÅ×Í¡ä¿Å xyz.c ã¹â¿Åà´Íà xyz ¤ÅÔ¡ OK à¾×Íè Â×¹Âѹ (6) ¨Ò¡¹Ñé¹·´ÅͧÊÑ觨íÒÅͧ¡Ò÷íÒ§Ò¹â´Â¤ÅÔ¡àÅ×Í¡·ÕèàÁ¹Ù Debug à Start xyz.aof ËÃ×Í¡´»Ø Á Ctrl+D ËÃ×ͤÅÔ¡àÅ×Í¡äͤ͹ â»Ãá¡ÃÁ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧ Í Debug option ãË ¤ÅÔ¡àÅ×Í¡ Virtual Machine (Simulator) ´Ñ§ã¹ÃÙ»·Õè 2-8 áÅ ÇàÅ×Í¡ OK

ÃÙ»·Õè 2-7 áÊ´§¡Òü¹Ç¡ä¿Å â»Ãá¡ÃÁÀÒÉÒ C ࢠҡѺâ»Ãà¨ç¡µ ¢Í§«Í¿µ áÇà RIDE


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

17

ÃÙ»·Õè 2-8 ˹ Òµ Ò§¡íÒ˹´¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁÀÒÉÒ C 㹫Ϳµ áÇà RIDE

ÃÙ»·Õè 2-9 áÊ´§¤ÇÒÁ¾Ã ÍÁ㹡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ËÅѧ¨Ò¡¡ÒäÍÁä¾Å â»Ãá¡ÃÁÀÒÉÒ VC ¢Í§ «Í¿µ áÇà RIDE ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧ Í Application option ãË àÅ×Í¡ OK Í ҧà´ÕÂÇ áÅФÅÔ¡ OK ÍÕ¡¤Ãѧé ã¹Ë¹ Òµ ҧ Í Debug option â»Ãá¡ÃÁ¨Ð·íÒ¡ÒäÍÁä¾Å áÅÐÊà ҧ⤠´¤íÒÊÑ§è ¾Ã ÍÁࢠÒÊÙâ ËÁ´¨íÒÅͧ¡Ò÷íÒ§Ò¹ ´Ñ§ã¹ÃÙ»·Õè 2-9 (7) ãË ¤ÅÔ¡àÁ¹Ù Debug|add Watch ËÃ×Í¡´»ØÁ ¿ §¡ ª¹Ñè F6 ËÃ×ͤÅÔ¡àÅ×Í¡äͤ͹ ãË »Í ¹µÑÇÍÑ¡Éà x áÅ Ç¡´ OK ´Ñ§ã¹ÃÙ»·Õè 2-10 ¨ÐÁÕ¡ÒÃà¾ÔÁè µÑÇá»Ã x ã¹Ê ǹ Watches ¡Ãͺ xyz µíÒá˹ §« Ò´ ҹŠҧ ¨Ò¡¹Ñ¹é ãË à¾ÔÁè µÑÇá»Ã y, z áÅÐ P0 µÒÁÅíҴѺ´ ÇÂ¢Ñ¹é µÍ¹à´ÕÂǡѹ¹Õ¨é ¹¤Ãº


18

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ÃÙ»·Õè 2-10 áÊ´§¡ÒÃà¾ÔÁè µÑÇá»Ãà¾×Íè µÃǨÊͺ¼Å¡Ò÷íҧҹŧã¹Ë¹ Òµ Ò§ Watch ¢Í§¡ÒèíÒÅͧ ¡Ò÷íÒ§Ò¹´ Ç«Ϳµ áÇà RIDE (8) ãË ·´ÅͧÊÑè§Ãѹâ»Ãá¡ÃÁẺ«Ô§à¡ÔÅÊàµç» â´Â¤ÅÔ¡àÁ¹Ù Debug|Step into ËÃ×Í ·ÕÅФÃѧé ãË Ê§Ñ à¡µ¤ ÒµÑÇá»Ã x,y,z áÅÐ P0 㹡Ãͺ ¡´»ØÁ ¿ §¡ ª¹Ñè F7 ËÃ×ͤÅÔ¡àÅ×Í¡äͤ͹ xyz Ê Ç¹¢Í§ Watches ¨ÐàËç¹Ç ÒÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§µÒÁºÃ÷Ѵã¹â»Ãá¡ÃÁ áÅÐàÁ×Íè ¨ºâ»Ãá¡ÃÁËÒ¡ ÂѧÊѧè Single Step ¤ Òã¹ x,y,z ¨ÐÁÕ¤Ò à» ¹ 0 (0x0) ¡àÇ ¹ P0 ·ÕÁè ¤Õ Ò 170 (0xAA) ¤ Ò§äÇ µÅÍ´ áÅÐ ËÒ¡µ ͧ¡ÒÃÃÕ૵¤ Ò P0 ãË à» ¹ 255 (0xFF) ãË ¤ÅÔ¡àÁ¹Ù Debug|Reset ËÃ×Í¡´»Ø Á Alt+F2 ËÃ×ͤÅÔ ¡àÅ×Í¡äͤ͹ (9) ËÒ¡µ ͧ¡ÒÃÍÍ¡¨Ò¡¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ ãË ¤ÅÔ¡àÅ×Í¡·Õàè Á¹Ù Debug à Terminate xyz.aof ËÃ×Í¡´»Ø Á Ctrl+D ËÃ×ͤÅÔ¡àÅ×Í¡äͤ͹ â»Ãá¡ÃÁ¨ÐࢠÒÊÙ âËÁ´à¢Õ¹â»Ãá¡ÃÁ (editor) ÍÕ¡¤ÃÑ§é ¹Õ¤è Í× µÑÇÍ ҧ¡ÒÃÊà ҧâ»Ãà¨ç¡µ áÅÐà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ã¹ RIDE Í ҧ§ Ò «Ö§è ËÒ¡Åͧ à» ´ÅÔʵ ä¿Å ·ªÕè Í×è xyz.lst ¡ç¨ÐàËç¹Ç Ò RIDE ä´ á»Åâ»Ãá¡ÃÁ xyz.c à» ¹ÀÒÉÒáÍÊá«ÁºÅվà ÍÁ·Ñ§é áÊ´§ÃËÑʤíÒÊѧè áÅж Òµ ͧ¡ÒôÙÃÒÂÅÐàÍÕ´¢Í§ä¿Å ÀÒÉÒà¤Ã×Íè §ËÃ×Í hex file ÊÒÁÒö´Ùä´ ¨Ò¡ä¿Å xyz.hex â´Âä¿Å ÀÒÉà¤Ã×Íè §¹Ñ¹é ¨ÐÍÂÙã ¹ÃٻẺ OMF-51 (object format for the generated code)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

19

2.3 à¨ÒÐÅÖ¡â»Ãá¡ÃÁ RIDE ã¹ËÑÇ¢ ͹ըé Ð๠¹ÃÒÂÅÐàÍÕ´·ÕÊè Òí ¤Ñ­ÊíÒËÃѺ¡ÒÃ㪠§Ò¹ªØ´â»Ãá¡ÃÁ Rkit-51 ¼ Ò¹â»Ãá¡ÃÁ RIDE «Ö§è à» ¹â»Ãá¡ÃÁàÃÔÁè µ ¹·ÕÊè ÒÁÒöࢠÒÊÙâ »Ãá¡ÃÁÍ×¹è æ ã¹ Rkit-51 ä´ ¨Ò¡¨Ø´à´ÕÂÇ äÁ ÇÒ ¨Ðà» ¹ à·ç¡« àÍ´ÔàµÍà (text editor), Ê Ç¹¨Ñ´¡ÒÃâ»Ãà¨ç¡µ (project manager), Ê Ç¹¨Ñ´¡ÒÃà¤Ã×Íè §Á×Í¡ÒÃÊà ҧ â»Ãá¡ÃÁ (programming tools manager), Ê Ç¹á»ÅÃËÑÊâ»Ãá¡ÃÁ (code translation) áÅдպ¡Ñ à¡Íà (debugger) ¨Ò¡¡Ò÷´ÅͧÊà ҧâ»Ãà¨ç¡µ § ÒÂæ ã¹ËÑÇ¢ Í·Õè¼ Ò¹ÁÒ ¨ÐàËç¹Ç Òâ»Ãá¡ÃÁ RIDE Ạ§ ¡ÒõԴµ ͡Ѻ¼Ùã ª §Ò¹à» ¹ 2 ÀÒ¤ ¤×Í (¡) ÀÒ¤Êà ҧâ»Ãà¨ç¡µ (Project development) (¢) ÀҤᡠä¢â»Ãà¨ç¡µ áÅШíÒÅͧ¡Ò÷íÒ§Ò¹ (Debugging and Simulation) 㹵͹µ ¹ â»Ãá¡ÃÁ RIDE µÔ´µ ͼ٠㪠§Ò¹ã¹ÀÒ¤Êà ҧâ»Ãà¨ç¡µ áÅÐàÁ×èÍÊÑ觤ÍÁä¾Å â»Ãá¡ÃÁáÅÐÊѧè ãË ¨Òí Åͧ¡Ò÷íÒ§Ò¹´Ù¨ÐࢠÒÊÙã ¹ÀҤᡠä¢â»Ãà¨ç¡µ µÒÁÅíҴѺ àÁ×Íè Êѧè ËÂØ´¨íÒÅͧ¡Òà ·íÒ§Ò¹ â»Ãá¡ÃÁ RIDE ¨Ð¡ÅѺࢠÒÊÙÀ Ò¤Êà ҧâ»Ãà¨ç¡µ µÒÁà´ÔÁ ǹ·íÒ§Ò¹ÍÂÙà ÐËÇ Ò§ 2 ÀÒ¤¹Õé áÅÐ àÁ×è;Ѳ¹Òâ»Ãá¡ÃÁàÊÃç¨ÊÁºÙó áÅ Ç ÊÒÁÒö¹íÒä¿Å .hex ·Õèä´ ¹Ñé¹ä»à¢Õ¹ŧã¹Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¨ÃÔ§µ Íä» ´Ñ§¹Ñé¹ã¹ËÑÇ¢ ͹Õé¨Ð¡Å ÒǶ֧ÀÒ¾ÃÇÁ㹡ÒÃÊà ҧáÅÐá¡ ä¢â»Ãà¨ç¡µ ੾ÒÐã¹Ê ǹ·ÕèÊíҤѭ ෠ҹѹé ÍÒ¨äÁ ä´ ¡Å ÒǶ֧ÃÒÂÅÐàÍÕ´·Ø¡¨Ø´¢Í§â»Ãá¡ÃÁ «Ö§è à» ¹¢ ÍÁÙÅ·ÕÁè Ò¡à¡Ô¹¤ÇÒÁ¨íÒà» ¹ ËÒ¡¼Ù 㪠§Ò¹ÁÕ¤ÇÒÁʹ㨷չè Í¡à˹×ͨҡ·Õ¡è Å ÒÇäÇ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õé ÊÒÁÒö´Ùä´ ¨Ò¡¤ÙÁ Í× ãª §Ò¹©ºÑºÀÒÉÒ Íѧ¡ÄÉä´ ·âÕè ¿Åà´Íà C:\RIDE\DOC (¡Ã³Õµ´Ô µÑ§é ã¹ä´Ã ¿ C) «Ö§è ¨ÐÁÕä¿Å ¤ÁÙ Í× áÅÐÃÒÂÅÐàÍÕÂ´Ê Ç¹ à¾ÔèÁàµÔÁäÇ ÁÒ¡ÁÒÂ

2.3.1 ÀÒ¤Êà ҧâ»Ãà¨ç¡µ ˹ Ҩͧ͢ÀÒ¤Êà ҧâ»Ãà¨ç¡µ »ÃСͺ´ ÇÂàÁ¹ÙºÒà (menu bar), ·ÙźÒà (tool bar), ˹ Òµ Ò§ àÍ´ÔàµÍà (Editor window), ˹ Òµ Ò§â»Ãà¨ç¡µ (Project window), ˹ Òµ ҧᨠ§¢ ͤÇÒÁ (Message window) áÅкÒà áÊ´§Ê¶Ò¹Ð (Status bar) ÊÒÁÒö͸ԺÒÂã¹áµ ÅÐÊ Ç¹ä´ ´§Ñ ¹Õé ᶺ¤íÒÊѧè ËÃ×ÍàÁ¹ÙºÒà ઠ¹à´ÕÂǡѺâ»Ãá¡ÃÁº¹ÇÔ¹â´ÇÊ ·ÇÑè ä» ã¹ RIDE àͧÁÕàÁ¹Ùà¾×Íè àÃÕ¡㪠§Ò¹àº×Íé §µ ¹¨Ò¡ËÑÇ ¢ ͤíÒÊÑ觼 Ò¹àÁ¹ÙºÒÃ


20

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ᶺà¤Ã×Íè §Á×ÍËÃ×Í·ÙźÒà ໠¹á¶ÇºÒà ¶Ñ´Å§ÁÒ¨Ò¡àÁ¹ÙºÒà «Öè§ÁÕÅѡɳÐà» ¹á¶Ç¢Í§»Ø Áäͤ͹ (icon button) á·¹ ¤íÒÊÑ§è ·Õãè ª §Ò¹º ÍÂæã¹àÁ¹Ù â´Â¼Ùã ª ÊÒÁÒöà¾ÔÁè ËÃ×ÍÅ´äͤ͹¤íÒÊѧè àËÅ Ò¹Õãé ¹áµ ÅСÅØÁ µÒÁµ ͧ¡ÒÃ ä´ ¨Ò¡àÁ¹Ù Window à Set control buttons áÅÐáµ ÅСÅØÁ ¢Í§»ØÁ äͤ͹ÊÒÁÒöÊÅѺ ÒµíÒá˹ § ËÃ×ÍãË Å͵ÑǺ¹Ë¹ Ҩ͡çä´ ¤Å ÒÂã¹àÁ¹ÙºÒà ¢Í§â»Ãá¡ÃÁäÁâ¤Ã«Í¿µ àÍç¡à«Å (MS-Excel) ˹ Òµ Ò§àÍ´ÔàµÍÃ

ã¹Ê ǹ¹Õé¶×Íà» ¹¾×é¹·ÕèÊíÒËÃѺà¢Õ¹â»Ãá¡ÃÁ ¨ÐÁÕ¡ÒÃ㪠§Ò¹àª ¹à´ÕÂǡѺàÍ´ÔàµÍà ·ÑèÇä» ã¹ à·ç¡« àÍ´ÔàµÍà ¢Í§ RIDE ÊÒÁÒö໠´ä¿Å µ¹ ©ºÑº« ͹¡Ñ¹ä´ ËÅÒÂä¿Å áÅШÐÃкØÊáÕ ººµÑÇÍÑ¡Éà ãË áµ¡µ Ò§à¾×Íè Êдǡ㹡ÒõÃǨᡠ䢵ÑÇá»ÃáÅФíÒÊÑ§è ¹Í¡¨Ò¡¹ÕÊé ÒÁÒöÊѧè undo ËÃ×Í¡àÅÔ¡¡Òà ¡ÃзíÒ¡ ͹˹ Òä´ ËÅÒªÑé¹ã¹¡Ã³Õ¾ÔÁ¾ ¼Ô´¾ÅÒ´ ˹ Òµ Ò§â»Ãà¨ç¡µ áÅÐᨠ§¢ ͤÇÒÁ

˹ Òµ Ò§·Ñ§é Êͧ¹Õ¶é Í× à» ¹¡ÒÃᨠ§¢ ͤÇÒÁáÅÐáÊ´§¢ ÍÁÙŵ Ò§æ ·Õàè ¡Ô´¢Ö¹é ã¹â»Ãà¨ç¡µ «Ö§è ˹ Ò µ Ò§â»Ãà¨ç¡µ ๠¹ãË ¢Í ÁÙÅÃÒÂÅÐàÍÕ´·Õàè ¡Ô´¢Ö¹é ¡Ñºâ»Ãà¨ç¡µ ¡ºÑ ´Õº¡Ñ à¡Íà áÅÐ˹ Òµ ҧᨠ§¢ ͤÇÒÁ๠¹ ãË ¢Í ÁÙÅ㹡ÒÃá»ÅÃËÑÊâ»Ãá¡ÃÁáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ «Ö§è ˹ Òµ Ò§·Ñ§é Êͧ¹ÕÂé §Ñ ÊÒÁÒöà¤Å×Íè ¹Â Ò ÊÅѺµíÒá˹ §ËÃ×ÍãË Å͵ÑÇ¡çä´ àª ¹¡Ñ¹ ºÒà áÊ´§Ê¶Ò¹Ð à» ¹ºÒà áÊ´§Ê¶Ò¹Ð¢Í§àÍ´ÔàµÍà äÁ Ç Ò¨Ðà» ¹µíÒá˹ §ºÃ÷ѴáÅФÍÅÑÁ¹ à¾×èÍãË ÊÒÁÒö µÃǨÊͺ¢ ͼԴ¾ÅÒ´ä´ § ÒÂàÁ×èÍÊÑè§á»ÅËÃ×ͤÍÁä¾Å â»Ãá¡ÃÁ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

21

2.3.2 ÀҤᡠä¢â»Ãá¡ÃÁáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ àÁ×èͼ٠à¢Õ¹â»Ãá¡ÃÁÊÑ觤ÍÁä¾Å áÅШíÒÅͧ¡Ò÷íÒ§Ò¹´ ÇÂ»Ø Áäͤ͹ ¨Ò¡·ÙźÒà â»Ãá¡ÃÁ RIDE ¨ÐࢠÒÊÙÀ Ҥᡠä¢â»Ãá¡ÃÁáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ ÁÕÊÇ ¹»ÃСͺ·Õàè ¾ÔÁè ¨Ò¡ÀÒ¤Êà ҧ â»Ãà¨ç¡µ ´Ñ§¹Õé ᶺ¤íÒÊѧè ËÃ×ÍàÁ¹ÙºÒÃ

¨ÐÁÕ»Ø Áäͤ͹à¾ÔèÁàµÔÁà¾×èÍ㪠§Ò¹ã¹¡ÒèíÒÅͧáÅеÃǨ´ÙʶҹСÒ÷íÒ§Ò¹ äÁ Ç Òà» ¹¡Òà àÃÕÂ¡à½ Ò´Ù¤Ò (watch) ´ Ç»ØÁ äͤ͹ ËÃ×Í¡ÒÃÊѧè ÃÕ૵¡ÒèíÒÅͧ ´ Ç»ØÁ äͤ͹ «Ö§è àËÅ Ò¹ÕÂé §Ñ ÊÒÁÒö àÃÕ¡¤íÒÊÑè§àËÅ Ò¹Õé¼ Ò¹ºÒà àÁ¹Ùä´ àª ¹¡Ñ¹ ˹ Òµ Ò§ Watch

㪠àÅ×Í¡µÑÇá»Ã·Õèµ Í§¡ÒÃའҴ٤ Ò·Õèà¡Ô´¢Öé¹ã¹¢³Ð¨íÒÅͧ¡Ò÷íÒ§Ò¹ ´Ñ§ã¹µÑÇÍ ҧâ»Ãà¨ç¡µ xyz.prj ·Õäè ´ ·´Åͧ¾Ñ²¹Òâ»Ãá¡ÃÁáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ÁÒº Ò§áÅ Ç Ë¹ Òµ Ò§áÊ´§¤ Òã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ, ÃÕ¨ÊÔ àµÍà , ÃËÑÊâ»Ãá¡ÃÁ ˹ Òµ Ò§áÊ´§¤ Òµ Ò§æ àËÅ Ò¹Õé ÊÒÁÒöàÃÕ¡¨Ò¡Ë¹ Òµ Ò§â»Ãà¨ç¡µ ã¹á·çº¢Í§´Õº¡Ñ à¡Íà ´Ñ§ã¹ ÃÙ»·Õè 2-11 ¼Ùà ¢Õ¹â»Ãá¡ÃÁÊÒÁÒöàÅ×Í¡¨Ò¡ÃÒ¡ÒÃáÊ´§ã¹Ë¹ Òµ Ò§´Õº¡Ñ à¡Íà ¹Õé ઠ¹ àÃÕ¡´ÙÃËÑÊ â»Ãá¡ÃÁ·ÕèÃÒ¡Òà Disassembly code ËÃ×ÍàÃÕ¡´Ù Main registres à¾×èÍ´Ù¤ ÒÃÕ¨ÔÊàµÍà ¿ §¡ ªÑè¹¾ÔàÈÉ ËÃ×ÍàÃÕ¡´Ù Timer0 ã¹ Peripherals à¾×Íè ´Ù¤Ò ã¹ÃÕ¨ÊÔ àµÍà Timer0 à» ¹µ ¹


22

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ÃÙ»·Õè 2-11 áÊ´§Ë¹ Òµ Ò§·Õãè ª 㹡ÒÃáÊ´§¤ Òã¹¾×¹é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒ, ÃÕ¨ÊÔ àµÍà áÅÐÃËÑÊâ»Ãá¡ÃÁ (code program) 㹡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹´ Ç«Ϳµ áÇà RIDE ·ÕËè ¹ Òµ Ò§ Project «Ö§è ÍÂÙ· Ò§Ê Ç¹Å Ò§ ¢Í§Ë¹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ RIDE


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

23

ºÒà áÊ´§Ê¶Ò¹Ð ÁÕÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¨Ò¡ÀÒ¤Êà ҧâ»Ãà¨ç¡µ ઠ¹ àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·¾Õè ² Ñ ¹Òã¹ â»Ãà¨ç¡µ , ¤ ÒàÇÅÒã¹¢³Ð¨íÒÅͧ¡Ò÷íÒ§Ò¹ËÅѧÃÕ૵â»Ãá¡ÃÁ à» ¹µ ¹ ¹Í¡¨Ò¡¹Õé ÂѧÁÕà¤Ã×èͧÁ×Í·Õè¹ Òʹã¨ã¹¡ÒõÃǨའҴ٨íÒÅͧ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ઠ¹ ¡ÒÃÊѧè ãË àáÊ´§¡ÒÃà¤Å×Íè ¹äËǢͧ¡Ò÷íÒ§Ò¹´ Ç»ØÁ äͤ͹ ËÃ×ÍàÃÕ¡㪠¿§ ¡ ª¹Ñè Trace à¾×Íè ´Ù¤Ò ¢Í§µÑÇá»ÃẺàÊ ¹¡ÃÒ¿ ËÃ×Í¡ÒÃÊÑ§è » ͹¤ ÒÊÁÁµÔä»Âѧ˹ ǤÇÒÁ¨íÒ, ¢Ò¾Íà µ ËÃ×ÍÃÕ¨ÊÔ àµÍà â´ÂµÃ§à¾×èʹټŢͧâ»Ãá¡ÃÁ·Õèà¡Ô´¢Öé¹ â´Â¨Ð͸ԺÒ¡ÒûÃÐÂØ¡µ 㪠§Ò¹ã¹¡Ò÷´Åͧâ»Ãà¨ç¡µ tsim.prj ã¹ËÑÇ¢ Í¶Ñ´ä» à¾×Íè ãË à¡Ô´¤ÇÒÁࢠÒã¨·Õ´è ¡Õ Ç Ò¡ÒÃ͸ԺÒµÒÁ¿ §¡ ª¹Ñè à¾Õ§ÅíҾѧ

2.3.3 ·´ÅͧÊà ҧâ»Ãà¨ç¡µ tsim.prj ã¹â»Ãà¨ç¡µ tsim.prj à» ¹â»Ãá¡ÃÁ¨íÒÅͧ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ áÅÐ㪠§Ò¹ä·àÁÍà 0 â´Âà¾ÔÁè ¤ Ò µÑÇá»Ã counter ¢Ö¹é µ Íà¹×Íè § àÁ×Íè ¤ Òä·àÁÍà Á¤Õ Ò à· Ò¡ÑºµÑÇá»Ã toggler «Ö§è ÁÕ¤Ò à· Ò¡Ñº 0xFF (ËÃ×Í FFH) ¨ÐǹÅÙ»·íÒ§Ò¹ãËÁ Í¡Õ ¤ÃÑ§é µÒÁà§×Íè ¹ä¢¢Í§ while ÁÕ¢¹Ñé µÍ¹¡Ò÷´ÅͧÊà ҧâ»Ãà¨ç¡µ tsim.prj ´Ñ§¹Õé (1) Êà ҧâ»Ãà¨ç¡µ ãËÁ â´Â¤ÅÔ¡àÅ×Í¡¨Ò¡àÁ¹Ù Project à New 㹡óշÁÕè âÕ »Ãà¨ç¡µ à¡ Ò ¢Ö¹é ÁÒ ãË Ê§Ñè » ´â»Ãà¨ç¡µ à¡ Ò·Õ¢è ¹Öé ÁÒãË àÊÕ¡ ͹ â´ÂàÅ×Í¡¨Ò¡àÁ¹Ù Projectà Close (2) ãË ¡Òí ˹´ª×Íè â¿ÇÅ à´Íà áÅÐä¿Å ¢Í§â»Ãà¨ç¡µ ·µÕè Í §¡ÒèѴà¡çº ã¹·Õ¹è ãÕé Ë »Í ¹µÒÁ µÑÇÍ ҧ໠¹ c:\ride\sample\tsim\tsim.prj áŠǤÅÔ¡ OK (3) àÅ×Í¡ Device â´ÂàÅ×Í¡ Phillip à P89C51RX2 (4) ¨Ò¡¹Ñ¹é RIDE ¾Ã ÍÁ·Õ¨è оѲ¹Òâ»Ãá¡ÃÁã¹â»Ãà¨ç¡µ ªÍ×è tsim ãË ¤ÅÔ¡ä»·Õàè Á¹Ù File à New à C Files à¾×Íè à¢Õ¹â»Ãá¡ÃÁâ´Âà» ´Êà ҧä¿Å ÀÒÉÒ C ãË »Í ¹â»Ãá¡ÃÁ´Ñ§¹Õé #include <reg51.h> unsigned char counter = 0, toggler = 0; void timerisr(void) interrupt 1 { TF0 = 0; // clear overflow flag counter++; toggler = 0xFF - toggler; } void init(void) { TMOD = 0x02; // 8-bit auto-reload timer ET0 = 1; // enable timer interrupt EA = 1; // global interrupt enable TR0 = 1; // run timer } void main (void) { init(); while(1); }

¨Ò¡¹Ñ¹é ºÑ¹·Ö¡ã¹ª×Íè main.c


24

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(5) ¡íÒ˹´â¹´µ ¹©ºÑºËÃ×ÍáÍ»¾ÅÔपѹè (node Source/Application) à¾×Íè ãË ä¿Å µ¹ ©ºÑºmain.c ·ÕèÊà ҧ¢Öé¹ãËÁ ¹Õ鼹ǡࢠÒã¹â»Ãà¨ç¡µ tsim.prj â´Â¤ÅÔ¡àÅ×Í¡·ÕèàÁ¹Ù Project|add node Source/Application áÅ ÇàÅ×Í¡ä¿Å tsim.c ã¹â¿Åà´Íà c:\ride\sample\tsim ¤ÅÔ¡ OK à¾×Íè Â×¹Âѹ (6) ¢Ñ鹵͹µ Í仹Õé ¤×Í¡ÒôպѡáÅШíÒÅͧ¡Ò÷íÒ§Ò¹ ¤ÅÔ¡àÅ×Í¡·ÕèàÁ¹Ù DebugStart tsim.aof ËÃ×Í¡´»ØÁ Ctrl+D ËÃ×ͤÅÔ¡àÅ×Í¡äͤ͹ â»Ãá¡ÃÁ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧ Í Debug option ãË àÅ×Í¡ Virtual Machine (Simulator) áÅ ÇàÅ×Í¡ OK â»Ãá¡ÃÁ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧ Í Application option ãË àÅ×Í¡ OK Í ҧà´ÕÂÇ áÅФÅÔ¡ OK ÍÕ¡¤Ãѧé ã¹Ë¹ Òµ ҧ Í Debug option ¨Ðà¡Ô´¡ÒäÍÁä¾Å â»Ãá¡ÃÁ áÅÐÊà ҧÃËÑʤíÒÊÑ§è ¾Ã ÍÁࢠÒÊÙâ ËÁ´¨íÒÅͧ¡Ò÷íÒ§Ò¹ ËÒ¡à¡Ô´¢ ͤÇÒÁᨠ§¢ ͼԴ¾ÅÒ´ã¹â»Ãá¡ÃÁ áÊ´§Ç ÒÁÕ¢Í ¼Ô´¾ÅÒ´ã¹â»Ãá¡ÃÁ·Õàè ¢Õ¹¢Ö¹é ãË µÃǨ´Ù¤Òí Êѧè ã¹â»Ãá¡ÃÁÇ Ò¶Ù¡µ ͧËÃ×ÍäÁ (7) àÁ×èÍâ»Ãá¡ÃÁ¶Ù¡µ ͧ ã¹Ë¹ Òµ ҧᨠ§¢ ͤÇÒÁ¨ÐáÊ´§¢ ͤÇÒÁÇ ÒÊÒÁÒöâËÅ´ â»Ãá¡ÃÁࢠÒÊÙ¡ Ò÷íÒ§Ò¹¨íÒÅÍ§ä´ ´Ñ§ÃÙ»·Õè 2-12 (8) ã¹ÀÒ¤´ÕºÑ¡à¡Íà ¢Í§ RIDE ÊÒÁÒö¡íÒ˹´¡ÒÃÊÑ觨íÒÅͧ·íÒ§Ò¹ä´ â´Â¡ÒÃÃѹ â»Ãá¡ÃÁẺÊàµç»´ Ç»ØÁ äͤ͹ ´Ñ§ã¹â»Ãà¨ç¡µ xyz.prj ·Õäè ´ ·´ÅͧÊà ҧä»ã¹µÍ¹µ ¹ ËÃ×Í ãË Ã¹Ñ â»Ãá¡ÃÁÍ ҧµ Íà¹×Íè §´ Ç»ØÁ äͤ͹ ¹Í¡ áÅÐÊѧè ËÂØ´¡Ò÷íÒ§Ò¹´ Ç»ØÁ äͤ͹ ¨Ò¡¹Ñ¹é ÂѧÊÒÁÒö»ÃѺ¤ÇÒÁàÃçÇ㹡ÒèíÒÅͧâ»Ãá¡ÃÁä´ ´Ç ÂÊäÅ´ äͤ͹ áÅÐ Âѧ¡íÒ˹´¨Ø´ËÂØ´·íÒ§Ò¹(breakpoint) ä´ â´Â¡ÒäÅÔ¡àÁÒÊ »ÁØ « ÒÂÂѧºÃ÷Ѵ¢Í§â»Ãá¡ÃÁ·Õµè Í §¡ÒÃãË ËÂØ´·íÒ§Ò¹ àÁ×Íè Êѧè Ãѹâ»Ãá¡ÃÁ ˹ Òµ ҧᨠ§¢ ͤÇÒÁ¨ÐáÊ´§ª ǧ¢Í§¡Ò÷íÒ§Ò¹ ´Ñ§ã¹ÃÙ»·Õè 2-13 ÊíÒËÃѺ ¡Ò÷´Åͧã¹â»Ãà¨ç¡µ ¹¨Õé ÐãË ·´ÅͧÃѹâ»Ãá¡ÃÁµ Íà¹×Íè §áÅÐÊѧè ãË áÊ´§¡ÒÃà¤Å×Íè ¹äËǢͧ¡Ò÷íÒ §Ò¹´ Ç ·íÒä´ â´Â¤ÅÔ¡àÅ×Í¡·Õ·è ÅÙ ºÒà »ÁØ äͤ͹ ¡ ͹ áÅ ÇãË Ê§Ñè Ãѹâ»Ãá¡ÃÁ´ Ç»ØÁ äͤ͹ RIDE ¨ÐÃѹâ»Ãá¡ÃÁ·ÕÅкÃ÷Ѵ ¾Ã ÍÁ¡ÑºáÊ´§á¶ºÊÕ¹Òéí à§Ô¹à¤Å×Íè ¹·Õµè ÒÁºÃ÷Ѵ¤íÒÊѧè ã¹â»Ãá¡ÃÁ ¹Í¡¨Ò¡¹Ñ¹é ÂѧÊÒÁÒöÊѧࡵ¨Ò¡á¶ºáÊ´§àÇÅÒ·íÒ§Ò¹ä´ ´Ç Â

ÃÙ»·Õè 2-12 áÊ´§¼Å¡ÒäÍÁä¾Å áÅСÒÃâËÅ´â»Ãá¡ÃÁࢠÒÊÙ¡ ÒèíÒÅͧ¡Ò÷íÒ§Ò¹¢Í§«Í¿µ áÇà RIDE


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

25

(9) 㹡ÒèíÒÅͧ·íÒ§Ò¹¢Í§â»Ãá¡ÃÁÊ Ç¹ãË­ Á¡Ñ µ ͧ¡Ò÷ÃÒº¤ Ò·Õàè ¡Ô´¢Ö¹é Ç Ò ÁÕ¡Òà à»ÅÕÂè ¹á»Å§µÒÁ·Õàè ¢Õ¹äÇ ã¹â»Ãá¡ÃÁËÃ×ÍäÁ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧ´Ù¤Ò ¢Í§µÑÇá»Ã, ÃÕ¨ÊÔ àµÍà ËÃ×Í˹ ǤÇÒÁ¨íÒ ã¹â»Ãá¡ÃÁ RIDE ÊÒÁÒö´Ù¤Ò µÑÇá»Ã·ÕÊè ¹ã¨¼ ҹ˹ Òµ Ò§ Watch ´ Ç»ØÁ äÍ ¤Í¹ ¨Ò¡·ÙźÒà ËÃ×ͤÅÔ¡àÁÒÊ »Ø Á¢ÇÒ·Õè¾×é¹·Õèã¹Ë¹ Òµ Ò§ Watch â´Â㹵͹¹ÕéãË ËÂØ´Ãѹ â»Ãá¡ÃÁ´ Ç»ØÁ äͤ͹ áÅ ÇãÊ µÇÑ á»Ã counter áÅÐ toggler ࢠÒä»ã¹Ë¹ Òµ Ò§ Watch (10) ¨Ò¡¹Ñé¹ä»Âѧ˹ Òµ Ò§ÃÕ¨ÔÊàµÍà àÅ×Í¡á·ç» Debugger áŠǴѺàºÔŤÅÔ¡·Õè Main registers à¾×Íè ´Ù¤Ò ¢Í§ÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´ ¨Ò¡¹Ñ¹é àÅ×Í¡ timer0 ¨Ò¡ËÑÇ¢ Í Peripherals ã¹Ë¹ Òµ Ò§à´ÕÂÇ ¡Ñ¹ ¨Ð·íÒãË Ë¹ Ò¨Í㹵͹¹Õé ÁÕ˹ Òµ Ò§¢Í§ Main registers áÅÐ Timer0 (11) àÅ×Í¡¡ÒÃáÊ´§¼Å¡Ò÷íҧҹẺà¤Å×Íè ¹äËÇ â´ÂࢠÒä»·Õè debug à Animate mode ËÃ×Í¡´·Õ»è ÁØ (12) Êѧè Ãѹâ»Ãá¡ÃÁãËÁ Í¡Õ ¤Ãѧé â´Â¤ÅÔ¡»ØÁ äͤ͹ Êѧࡵ¤ Òã¹Ë¹ Òµ Ò§ Watch, Main registers áÅÐ Timer0 ¨Ðà¾ÔÁè ¢Ö¹é áÅйѺ¤ Òä»àÃ×Íè Âæ µÒÁºÃ÷Ѵ¤íÒÊÑ§è ·ÕÃè ¹Ñ â»Ãá¡ÃÁ¢³Ð¹Ñ¹é

ÃÙ»·Õè 2-13 áÊ´§¼Å¡ÒÃÃѹâ»Ãá¡ÃÁ´ ÇÂᶺà¤Å×Íè ¹äËÇÊÕ¹Òéí à§Ô¹¢Í§«Í¿µ áÇà RIDE


26

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(13) 㹺ҧ¤ÃÑ§é ¼Ùã ª §Ò¹Ê¹ã¨ÍÂÒ¡·ÃÒºÇ ÒµÑÇá»Ã·Õãè ª §Ò¹¹Ñ¹é ¶Ù¡¡íÒ˹´ãË ãª §Ò¹ ¨ÃÔ§·Õµè Òí á˹ §ã´¢Í§Ë¹ ǤÇÒÁ¨íÒ ã¹ RIDE ÊÒÁÒöáÊ´§ãË ´äÙ ´ ´Ç ¡ÒÃàÃÕ¡˹ Òµ Ò§ Data view ¨Ò¡á·ç» Debugger ઠ¹à´ÕÂǡѺ Main registers áÅÐ Timer0 ¨Ò¡ã¹â»Ãà¨ç¡µ µÇÑ Í ҧ tsim.prj µ ͧ ¡Ò÷ÃÒºÇ ÒµÑÇá»Ã counter ÍÂÙ· µÕè Òí á˹ §ã´ã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ãË ¾ÁÔ ¾ ¤Òí Ç Ò counter 㹪 ͧ¤ ¹ ËÒ· ÒÂ˹ Òµ Ò§áÅС´¤Õ Enter ¨Ð»ÃÒ¡®à¤Íà à«Íà 㹵íÒá˹ §Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ·Õàè ¡çº¤ ҢͧµÑÇ á»Ã counter äÇ ã¹µÑÇÍ ҧ¹Õàé ¡çºäÇ ã¹áÍ´à´ÃÊ 0x08 ´Ñ§¢ ͤÇÒÁᨠ§Ê¶Ò¹Ð· ÒÂ˹ Òµ Ò§ ´Ñ§ã¹ÃÙ» ·Õè 2-14 ¹Í¡¨Ò¡¹Ñ¹é ÂѧÊÒÁÒö¡íÒ˹´¤ Òà¾×Íè à¢Õ¹â´ÂµÃ§ä´ â´Â¤ÅÔ¡»ØÁ ·ÕÍè ÂÙÁ ÁØ · Ò´ Ò¹¢ÇҢͧ ˹ Òµ 񤊫 ÍÕ¡´ Ç (14) ã¹ RIDE ÂѧÁÕà¤Ã×Íè §Á×Íà¾×Íè µÃǨÊͺ¡Ò÷íÒ§Ò¹â»Ãá¡ÃÁ·Õ¹è Ò Ê¹ã¨ÍÕ¡µÑÇË¹Ö§è ¹Ñ¹è ¤×Í ¡ÒáÇÒ´¤ Ò¢ ÍÁÙÅáÅÐáÊ´§¼Åã¹ÅѡɳТͧ¡ÃÒ¿àÇÅÒ (trace) â´ÂàÃÕ¡˹ Òµ Ò§¹Õäé ´ ¨Ò¡àÁ¹Ù View à Trace à view 㹡Ò÷´Åͧ¡Ñºâ»Ãà¨ç¡µ tsim.prj ãË ËÂØ´¨íÒÅͧâ»Ãá¡ÃÁáÅФÅÔ¡àÁ¹Ù View à Trace à Options à¾×Íè ¡íÒ˹´àÅ×Í¡¤ Ò¼ ҹ㹡ÒáÇÒ´¤ Ò¢ ÍÁÙÅ ã¹·Õ¹è ãÕé Ë àÅ×Í¡âËÁ´à» ¹ On Changes áÅÐà»ÅÕÂè ¹¤ Ò Maximum number of record: ¤ Ò෠ҡѺ 50 ´Ñ§ã¹ÃÙ»·Õè 2-15 (15) ¨Ò¡¹Ñ¹é ãË ¤ÅÔ¡µÑÇá»Ã·Õµè Í §¡ÒÃáÊ´§¤ Òã¹Ë¹ Òµ Ò§ Trace â´Â¡ÒäÅÔ¡àÁÒÊ »ÁØ ¢ÇÒ ·Õªè Íè §µÑÇá»Ãã¹Ë¹éÒµèÒ§ Watch ´Ñ§ã¹µÑÇÍÂèÒ§ ãËé¤ÅÔ¡àÁÒÊì»ÁèØ ¢ÇÒ·Õªè Íè §µÑÇá»Ã toggler ã¹Ë¹éÒµèÒ§ Watch áÅÐàÅ×Í¡ãË Add/Delete from Trace List ´Ñ§ÃÙ»·Õè 2-16 «Ö§è 㹪 ͧµÑÇá»Ã toggler ¨ÐÁÕà¤Ã×Íè §ËÁÒ à¾ÔÁè ÍÂÙË ¹ ÒµÑÇá»Ã áÊ´§Ç ÒµÑÇá»Ã toggler ä´ à¾ÔÁè ࢠÒã¹ÃÒ¡Òà Trace List áÅ Ç áÅÐàÁ×Íè Êѧè Ãѹâ»Ãá¡ÃÁ Ẻà¤Å×Íè ¹äËÇ ã¹Ë¹ Òµ Ò§ Trace ¨ÐáÊ´§¤íÒÊѧè áÍÊá«ÁºÅվà ÍÁ¤ ÒµÑÇá»Ã toggler ·Õàè ¡Ô´¢Ö¹é ã¹áµ ÅкÃ÷Ѵ¤íÒÊѧè áÅÐËÒ¡µ ͧ¡ÒÃãË áÊ´§¡ÃÒ¿àÇÅҨе ͧ令ÅÔ¡àÅ×Í¡·Õºè ÃÔàdz»ØÁ ã¹Ë¹ Òµ Ò§ Trace ¨Ö§ÊÒÁÒöáÊ´§¡ÃÒ¿àÇÅÒä´ áÅÐàÁ×Íè Ãѹâ»Ãá¡ÃÁ ¨Ð»ÃÒ¡¯¡ÃÒ¿´Ñ§ã¹ÃÙ»·Õè 2-17

ÃÙ»·Õè 2-14 áÊ´§µíÒá˹ §¢Í§µÑÇá»Ã·Õãè ª §Ò¹ã¹â»Ãá¡ÃÁ´ ÇÂ˹ Òµ Ò§ Data view ã¹á·ç» Debugger


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

27

ÃÙ»·Õè 2-16 ¡ÒÃàÅ×Í¡µÑÇá»Ã·Õµè Í §¡ÒÃãË Á¡Õ ÒÃáÊ´§ ¤ Òã¹Ë¹ Òµ Ò§ Trace áÅÐáÊ´§¼Å¡ÒÃà»ÅÕÂè ¹á»Å§ ã¹ÃÙ»¢Í§¡ÃÒ¿ ÃÙ»·Õè 2-15 ¡ÒÃàÅ×Í¡âËÁ´áÅФ Ò¼ ҹ㹡Òà ¡ÇÒ´¢ ÍÁÙÅà¾×Íè áÊ´§¡ÃÒ¿¢Í§Ë¹ Òµ Ò§ Trace

ÃÙ»·Õè 2-17 ¡ÒÃáÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§µÑÇá»Ã·Õ¡è Òí ˹´ã¹ÃÙ»¢Í§¡Ãҿ㹫Ϳµ áÇà RIDE


28

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(16) ¹Í¡¨Ò¡¹Õé ã¹ RIDE ÂѧãË ¼ãÙ ª §Ò¹ÊÒÁÒö» ͹¤ ÒÃÙ»¤Å×¹è ËÃ×ÍÊÁ¡Òä Ò¤³ÔµÈÒʵà ã¹ÅѡɳÐàËÁ×͹㪠à¤Ã×Íè §¡íÒà¹Ô´ÊÑ­­Ò³ËÃ×Í¿ §¡ ª¹Ñè à¨à¹ÍàÃàµÍà »Í ¹à¢ Ò·Õ¢è Ò¾Íà µã´æ ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ·¨Õè Òí ÅͧÍÂÙä ´ Í¡Õ ´ Ç â´Â¡íÒ˹´¤ Ò¿ §¡ ª¹Ñè ä´ ¨Ò¡àÁ¹Ù View à Function Generators áÅÐàÅ×Í¡·Õè Option â»Ãá¡ÃÁ RIDE ¨ÐáÊ´§Ë¹ Òµ Ò§à¾×Íè ¡íÒ˹´ª×Íè ¢Í§¿ §¡ ª¹Ñè áÅÐÊÁ¡Òà ãË ¡´»ØÁ New ¨Ò¡¹Ñ¹é ¡íÒ˹´ª×Íè ¿ §¡ ª¹Ñè à» ¹ square wave áÅÐàÅ×Í¡ª¹Ô´¢Í§¿ §¡ ª¹Ñè à» ¹ Wave Form ãÊ ¤Ò ÊÁ¡Òà ¤³ÔµÈÒʵà 㹪 ͧ Expression to evaluate à» ¹ (L100u,H250u) áÅÐÊ §¤ Ò¡ÅѺ໠¹áºººÙÅ¹Õ ´Ñ§ã¹ÃÙ» ·Õè 2-18 «Ö§è à» ¹¡ÒáíÒ˹´¿ §¡ ª¹Ñè ÃÙ»¤Å×¹è ÊÕàè ËÅÕÂè Á·ÕÁè ªÕ Ç §àÇÅÒ on ෠ҡѺ 250 äÁâ¤ÃÇÔ¹Ò·Õ áÅЪ ǧàÇÅÒ off ෠ҡѺ 100 äÁâ¤ÃÇÔ¹Ò·Õ (17) µ ͨҡ¹Ñ¹é ãË àª×Íè Áࢠҷբè Ò¾Íà µ·Õµè Í §¡ÒÃÊ §¤ Ò¿ §¡ ª¹Ñè ¹Ñ¹é â´Â¤ÅÔ¡àÅ×Í¡·Õàè Á¹Ù View à Nets «Ö§è ¨Ò¡â»Ãà¨ç¡µ µÇÑ Í ҧ ãË Êà ҧ¨Ø´µ ÍãËÁ â´Â¤ÅÔ¡»ØÁ áÅСíÒ˹´ª×Íè ¨Ø´µ ÍãËÁ ¹Õé Ç Ò Net0 â´Âµ ͧ¡ÒÃãË ·¢Õè Ò¾Íà µ P0.0 ÁÕ¡Ò÷íÒ§Ò¹µÒÁ¿ §¡ ª¹Ñè square wave ãË ¤ÅÔ¡àÅ×Í¡¢Ò¾Íà µ P0.0 ¨Ò¡¡Ãͺ˹ Òµ Ò§ÃÒ¡ÒâҾÍà µã¹«Õ¡« Ò áÅФÅÔ¡»Ø Á à¾×èÍãË ¢Ò¾Íà µ P0.0 »ÃÒ¡¯ã¹ ¡Ãͺ˹ Òµ ҧ㹫ա¢ÇÒ áÅÐãË àÅ×Í¡ square wave ¨Ò¡¡Ãͺ«Õ¡« Ò ¤ÅÔ¡»ØÁ äͤ͹ à¾×Íè »ÃÒ¡¯ 㹡Ãͺ˹ Òµ Ò§«Õ¡¢ÇÒ ´Ñ§ã¹ÃÙ»·Õè 2-19

ÃÙ»·Õè 2-18 ¡ÒÃµÑ§é ¤ ÒÊíÒËÃѺ¡íÒ˹´ÃÙ»ÊÑ­­Ò³ã¹ ÃÙ»·Õè 2-19 ˹ Òµ Ò§ÊíÒËÃѺàÅ×Í¡¡ÒÃàª×Íè Áµ Í¢Ò Ë¹ Òµ Ò§¿ §¡ ª¹Ñè à¨à¹Íà¹àµÍà 㹫Ϳµ áÇà RIDE ÊÑ­­Ò³à¢ ҡѺ¿ §¡ ª¹Ñè à¨à¹ÍàÃàµÍà 㹠RIDE


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

29

ÃÙ»·Õ2-20 è ¡ÃÒ¿áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§µÑÇá»Ã P0.0 ·Õ¡è Òí ˹´ãË µÍ ¡Ñº¿ §¡ ª¹Ñè à¨à¹ÍàµÃàµÍà ÀÒÂã¹ RIDE (18) ·íÒ¡ÒÃà¾ÔÁè µÑÇá»Ã P0.0 ã¹Ë¹ Òµ Ò§ Watch â´Â¤ÅÔ¡àÁÒÊ »ÁØ ¢ÇÒà¾×Íè à¾ÔÁè µÑÇá»Ã P0.0 äÇ ã¹ Trace List ¨Ò¡¹Ñ¹é Êѧè Ãѹâ»Ãá¡ÃÁẺà¤Å×Íè ¹äËÇ áŠǤÅÔ¡»ØÁ äͤ͹ ã¹Ë¹ Òµ Ò§à·Ã« à¾×Íè àÃÕ¡ áÊ´§¤ Ңͧ P0.0 㹡ÃÒ¿àÇÅÒä´ ´Ñ§ã¹ÃÙ»·Õè 2-20 ·Ñé§ËÁ´·Õè¡Å ÒÇÁÒ¹Õéà» ¹à¤Ã×èͧÁ×ÍËÅÑ¡·ÕèÁѡ㪠§Ò¹·Ñé§ã¹Ê ǹ¾Ñ²¹ÒÊà ҧâ»Ãà¨ç¡µ áÅÐã¹ Ê Ç¹´Õº¡Ñ áÅШíÒÅͧ¡Ò÷íÒ§Ò¹ ¼Ùã ª §Ò¹¤§ÊÒÁÒö¹íÒä»»ÃÐÂØ¡µ 㪠§Ò¹ãË àËÁÒÐÊÁ¡Ñº¤ÇÒÁµ ͧ¡ÒÃä´ ã¹áµ ÅÐʶҹ¡Òó «Ö§è à˹×͹͡¨Ò¡¹Õé à» ¹ÃÒÂÅÐàÍÕ´¢Í§áµ ÅÐàÁ¹Ùáµ ÅФíÒÊѧè ÊÒÁÒÃ¶Í Ò¹ÃÒ ÅÐàÍÕ´à¾ÔÁè àµÔÁä´ ¨Ò¡ä¿Å ¤ÁÙ Í× ¡ÒÃ㪠§Ò¹ä´ ´§Ñ ·Õäè ´ ¡Å ÒÇäÇ ã¹µÍ¹µ ¹

2.4 ÃÙ¨ ¡Ñ áÅÐࢠÒã¨ä¿Å ÅÊÔ µÔ§é áÅÐÅÔ§¡ à¡Íà áÁ» àÁ×èÍÁÕ¡ÒÃÊÑè§ãË ¤ÍÁä¾àÅÍà á»Åâ»Ãá¡ÃÁãË à» ¹ÃËÑʤíÒÊÑè§ ã¹¤ÍÁä¾àÅÍà ·ÑèÇ仨ÐÊà ҧ ä¿Å ÅÊÔ µÔ§é (listing file) áÅÐä¿Å ÃÒ§ҹ¡ÒÃàª×Íè Áâ§ËÃ×ÍÅÔ§à¡Íà áÁ» (Linker Map) «Ö§è ËÒ¡¼Ùã ª §Ò¹ ÁÕ¤ÇÒÁࢠÒã¨ÊÔ§è ·Õ¤è ÍÁä¾àÅÍà ¡ÃзíÒ¡ÒÃá»ÅÃËÑÊáÅÐÃÒ§ҹÍÍ¡ÁÒ ¨Ðà» ¹»ÃÐ⪹ Í ҧÂÔ§è µ Í¡Òà ¤ ¹ËÒ¢ ͼԴ¾ÅÒ´áÅÐá¡ ä¢â»Ãá¡ÃÁ

2.4.1 ä¿Å ÅÊÔ µÔ§é ¡ÒÃàÃÕ¡´Ùä¿Å ÅÊÔ µÔ§é ÊÒÁÒöàÃÕ¡¨Ò¡àÁ¹Ù View à Listing from Compiler «Ö§è â»Ãá¡ÃÁ RIDE ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§áÊ´§ä¿Å ÅÊÔ µÔ§é ¨Ò¡â¿Åà´Íà â»Ãà¨ç¡µ ·¾Õè ² Ñ ¹ÒÍÂÙ «Ö§è ÁÕ¹ÒÁÊ¡ØÅä¿Å *.lst ´Ñ§µÑÇÍ ҧ main.lst ¨Ò¡â»Ãà¨ç¡µ tsim.prj â´Âä¿Å ÅÊÔ µÔ§é ¹Õáé º §ÃÒÂÅÐàÍÕ´ÍÍ¡à» ¹ 6 Ê Ç¹ ´Ñ§¹Õé (1) ¤íÒÊÑ§è ·Õãè ª àÃÕ¡¤ÍÁä¾àÅÍà ໠¹ºÃ÷Ѵª ǧµ ¹¢Í§ä¿Å ·áÕè Ê´§àÇÍà ª¹Ñè ¢Í§¤ÍÁä¾àÅÍà , â¿Åà´Íà ·àÕè ¡çºÍÍ»à¨ç¡ ä¿Å (object file) áÅФíÒÊÑ§è ·Õãè ª àÃÕ¡¤ÍÁä¾àÅÍà ¾Ã ÍÁ¤ Ò¾ÒÃÒÁÔàµÍà ¾Ç §· Ò¤íÒÊѧè


30

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

QCW(0x00002F32) MAIN WIN32 RC51 COMPILER V03.03.27, COMPILATION OF MODULE OBJECT MODULE PLACED IN c:\rideprj\tsim\main.obj COMPILER INVOKED BY: RC51.EXE C:\RIDEPRJ\TSIM\MAIN.C OBJECT(C:\RIDEPRJ\TSIM\MAIN -.OBJ) PIN(C:\RIDE\INC) NOAM PR(C:\RIDEPRJ\TSIM\MAIN.LST) CD SB OE(1 -) INTXD PHILIPSDDPTR SM FP(NOFLOAT) PW(80) NOIS UNSIGNEDCHAR ET(CHA -R)

¤íÒÊÑ§è ·Õãè ª àÃÕ¡¤ÍÁä¾àÅÍÃ

stmt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

level

source #include <reg51.h>

â»Ãá¡ÃÁµ ¹©ºÑº

unsigned char counter = 0, toggler = 0;

1 1 1 1 1

void timerisr(void) interrupt 1 { TF0 = 0; // counter++; toggler = 0xFF - toggler; } void init(void) { TMOD = 0x02; // ET0 = 1; // EA = 1; // TR0 = 1; // }

1 1 1

void main (void) { init(); while(1); }

1 1 1 1

clear overflow flag

8-bit auto-reload timer enable timer interrupt global interrupt enable run timer

ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION timerisr (BEGIN) ; SOURCE LINE # 9 0000 C0E0 0002 C0D0

PUSH PUSH

ACC PSW

0004 C28D

CLR

TF0

; SOURCE LINE # 7 ; SOURCE LINE # 8 0006 0500 0008 000A 000B 000D 000F 0011 0013

74FF C3 9500 F500 D0D0 D0E0 32

R

R R

INC

counter

; SOURCE LINE # 9 MOV A,#0FFH CLR C SUBB A,toggler ! MOV toggler,A POP PSW POP ACC RETI ; FUNCTION timerisr (END)

Ê Ç¹à·ÕºÃËÑʤíÒÊѧè ÀÒÉÒáÍÊà«ÁºÅÕ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

31

; FUNCTION init (BEGIN) ; SOURCE LINE # 13 0000 758902

MOV

TMOD,#002H ; SOURCE LINE # 14

0003 D2A9

SETB

ET0

0005 D2AF

SETB

EA

0007 D28C 0009 22

SETB RET

TR0

; SOURCE LINE # 15 ; SOURCE LINE # 16

!

Ê Ç¹à·ÕºÃËÑʤíÒÊѧè ÀÒÉÒáÍÊà«ÁºÅÕ

; FUNCTION init (END) ; FUNCTION main (BEGIN) ; SOURCE LINE # 21 0000 120000 R LCALL 0003 ?WHILE1:

init

0003 80FE

?WHILE1

; SOURCE LINE # 22 SJMP

; FUNCTION main (END)

NAME " ==== counter. . toggler. . timerisr . init . . . main . . .

µÒÃÒ§µÑÇá»ÃáÅп §¡ ª¹Ñè . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

MODULE INFORMATION: STATIC CODE SIZE = 35 CONSTANT SIZE = ______ XDATA SIZE = ______ PDATA SIZE = ______ DATA SIZE = 2 IDATA SIZE = ______ BIT SIZE = ______ END OF MODULE INFORMATION.

RC51 COMPILATION COMPLETE.

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

CLASS ===== PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC

OVERLAYABLE ______ ______ ______ ______ ______ ______ ______

0 WARNING,

0 ERROR

MSPACE ====== DATA DATA CODE CODE CODE

#

TYPE ==== U_CHAR U_CHAR PROC PROC PROC

OFFSET ====== 0000H 0001H —— —— —— —— —— ——

SIZE ==== 1 1

¢ ÍÁÙÅ¡ÒÃ㪠˹ ǤÇÒÁ¨íÒ

$

¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹


32

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(2) â»Ãá¡ÃÁµ ¹©ºÑº à» ¹ª ǧºÃ÷Ѵä¿Å ·áÕè Ê´§â»Ãá¡ÃÁµ ¹©ºÑº·Õàè ¢Õ¹¢Ö¹é 㹺Ã÷Ѵ¤íÒÊѧè ÁÕµÇÑ àÅ¢ÍÂÙ 2 µÑÇ µÑÇàÅ¢áá¤×Í ËÁÒÂàÅ¢ºÃ÷Ѵ¢Í§â»Ãá¡ÃÁ áÅеÑÇàÅ¢·ÕÊè ͧ¤×Í ÃдѺªÑ¹é ¢ ÒÂà ÇÁ¢Í§ÃËÑÊ ¤íÒÊѧè ã¹Ê ǹ¹ÕÂé §Ñ ¡íÒ˹´µÑ§é ¤ ÒãË ¤ÍÁä¾àÅÍà à¾ÔÁè â»Ãá¡ÃÁµ ¹©ºÑº¨Ò¡ä¿Å àδà´ÍÃ ä´ â´ÂÊÒÁÒö ¡íÒ˹´µÑ駤 Òä´ ¼ Ò¹µÑÇàÅ×Í¡ (3) Ê Ç¹à·ÕºÃËÑʤíÒÊѧè áÍÊá«ÁºÅÕ à» ¹ÃËÑʤíÒÊÑè§áÍÊá«ÁºÅÕ·Õè¤ÍÁä¾àÅÍà á»Åà·ÕºµÒÁºÃ÷Ѵ¤íÒÊÑè§ã¹â»Ãá¡ÃÁ µ ¹©ºÑº «Ö§è Êѧࡵ¤ÍÁàÁ¹µ ËÁÒÂàÅ¢ºÃ÷Ѵâ»Ãá¡ÃÁ·Õµè Í · ÒºÃ÷Ѵ ઠ¹ ; SOURCE LINE # 13 0000 758902

MOV

TMOD,#002H

·íÒãË ÊÒÁÒöµÃǨÊͺÃËÑʤíÒÊÑè§áÍÊá«ÁºÅÕ·Õèä´ ¨Ò¡¤ÍÁä¾àÅÍà ÅѡɳкÃ÷Ѵµ ͺÃ÷Ѵ (4) µÒÃÒ§µÑÇá»ÃáÅп §¡ ª¹Ñè à» ¹¡ÅØÁ ºÃ÷Ѵ·Õáè Ê´§ÃÒ¡ÒõÑÇá»ÃáÅп §¡ ª¹Ñè ¾Ã ÍÁáÊ´§¢Íºà¢µ, ¾×¹é ·Õàè ¡çºã¹ ˹ ǤÇÒÁ¨íÒ, ª¹Ô´¢ ÍÁÙÅ, ¤ ÒÍͿ૵ áÅТ¹Ò´¢Í§µÑÇá»ÃáÅп §¡ ª¹Ñè ·Õãè ª §Ò¹ã¹â»Ãá¡ÃÁ (5) ¢ ÍÁÙÅ¡ÒÃ㪠˹ ǤÇÒÁ¨íÒ à» ¹¡ÅØÁ ºÃ÷Ѵ·Õàè ÃÕ§ÅíҴѺᵠÅÐ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íҢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS51 «Ö§è ¨ÐáÊ´§¨íҹǹµÑÇá»ÃËÃ×Í¿ §¡ ª¹Ñè ·Õ¾è ºã¹Ë¹ ǤÇÒÁ¨íÒáµ ÅÐÊ Ç¹ (6) ¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹ à» ¹¡ÅØÁ ºÃ÷Ѵ· ÒÂä¿Å ·ÍÕè Ò¨áÊ´§¢ ͤÇÒÁᨠ§¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹ËÅѧ¨Ò¡á»Å â»Ãá¡ÃÁ ÁÑ¡ãË ÃÒÂÅÐàÍÕ´·ÕÁè Ò¡¡Ç Ò¢ ͤÇÒÁã¹Ë¹ Òµ ҧᨠ§¢ ͤÇÒÁ (message window) ·Õáè Ê´§º¹ â»Ãá¡ÃÁ RIDE ¨Ö§à» ¹»ÃÐ⪹ Í ҧÂÔ§è àÁ×Íè µ ͧ¡ÒÃËÒ¢ ͼԴ¾ÅÒ´ ¹Í¡¨Ò¡¹Õáé Å Ç ã¹ºÃ÷Ѵáá¢Í§ä¿Å ÅÊÔ µÔ§é «Ö§è áÊ´§µÑÇÍÑ¡ÉÃáÅЪشµÑÇàÅ¢°Ò¹ÊԺˡ QCW(0x00002F32) à» ¹ÃËÑÊ·Õè¤ÍÁä¾ÅàÅÍà RC-51 Êà ҧ¢Öé¹ÁÒ áÅÐ㪠§Ò¹ÀÒÂã¹ÊíÒËÃѺ Raisonance à· Ò¹Ñ¹é ¨Ö§ÅÐàŤ Ò¢ ÍÁÙÅ㹺Ã÷Ѵáá¹Õäé »ä´

2.4.2 ÅÔ§à¡Íà áÁ» ã¹àÃ×Íè §¢Í§ÅÔ§à¡Íà áÁ» ¹Ñ¡¾Ñ²¹Òâ»Ãá¡ÃÁÁÑ¡Áͧ¢ ÒÁ㹡Ò÷íÒ¤ÇÒÁࢠÒ㨡Ѻ¢ ÍÁÙÅ·Õµè ÇÑ àª×Íè Á â§ËÃ×ÍÅÔ§à¡Íà ·Òí àÍÒäÇ ÍҨ໠¹à¾ÃÒÐäÁ àËç¹Ç Òã¹ä¿Å Å§Ô à¡Íà áÁ»¨Ðᨠ§¡ÒÃᡠ䢢 ͼԴ¾ÅÒ´ËÃ×ͺѡ ¢Í§â»Ãá¡ÃÁáµ Í ҧ㴠ᷠ¨ÃÔ§áÅ Çã¹ä¿Å Å§Ô à¡Íà áÁ»¹ÕÁé ¢Õ Í ÁÙÅ·Õàè » ¹»ÃÐ⪹ µÍ ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ ãË à¡Ô´»ÃÐÊÔ·¸ÔÀÒ¾ä´ ´àÕ » ¹Í ҧÂÔ§è ¡ÒÃàÃÕ¡´Ùä¿Å Å§Ô à¡Íà áÁ»¹ÕÊé ÒÁÒöàÃÕÂ¡ä´ ¨Ò¡àÁ¹Ù VIEW à Map


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

33

Report from Linker ઠ¹¡Ñ¹ â»Ãá¡ÃÁ RIDE ¨ÐáÊ´§Ë¹ Òµ Ò§ä¿Å Å§Ô à¡Íà áÁ»¢Í§â»Ãá¡ÃÁ·Õ¾è ² Ñ ¹Ò ÍÂÙ «Ö§è ÁÕ¹ÒÁÊ¡ØÅä¿Å *.obj ´Ñ§µÑÇÍ ҧ main.obj ¨Ò¡â»Ãà¨ç¡µ tsim.prj â´Âä¿Å ŧÔé à¡Íà áÁ»¹ÕÊé ÒÁÒö Ạ§ÃÒÂÅÐàÍÕ´ÍÍ¡à» ¹ 8 Ê Ç¹ ä´ ´§Ñ ¹Õé (1) ¤íÒÊÑ§è ·Õãè ª àÃÕ¡ÅÔ§à¡Íà ໠¹ºÃ÷Ѵª ǧµ ¹¢Í§ä¿Å ·ÕèáÊ´§àÇÍà ªÑ¹¢Í§ÅÔ§à¡Íà áÅФíÒÊÑ觷Õè㪠àÃÕ¡ÅÔ§à¡Íà ¾Ã ÍÁ¤ Ò¾ÒÃÒÁÔàµÍà ¾Ç §· Ò¤íÒÊÑ§è ·íÒãË ·ÃÒºÇ ÒÁÕ¡ÒáíÒ˹´¤ Ò¾ÒÃÒÁÔàµÍà ÊÒí ËÃѺÅÔ§é à¡ÍÃ ä´ àËÁÒÐ ¡ÑºáÍ»¾ÅÔपÑ蹢ͧâ»Ãà¨ç¡µ (2) âÁà´Å¢Í§Ë¹ ǤÇÒÁ¨íÒ áÊ´§âÁà´Å¢Í§Ë¹ ǤÇÒÁ¨íÒ·ÕèàÅ×Í¡ÊíÒËÃѺâ»Ãà¨ç¡µ ·Õè¾Ñ²¹ÒÍÂÙ ÂéíÒàµ×͹ÍÕ¡¤ÃÑé§Ç Ò ÅÔ§à¡Íà 㪠âÁà´Å˹ ǤÇÒÁ¨íҵçµÒÁ·ÕèàÅ×Í¡äÇ ËÃ×ÍäÁ (3) ÃÒ¡ÒÃâÁ´ÙÅâ»Ãá¡ÃÁ áÊ´§ÃÒÂÅÐàÍÕ´¢Í§âÁ´ÙÅ·Õãè ª ¡ºÑ â»Ãà¨ç¡µ ·¾Õè ² Ñ ¹ÒÍÂÙ ·Ñ§é ã¹Ê ǹâÁ´ÙŢͧâ»Ãá¡ÃÁ áÅÐäźÃÒÃÕ·ãÕè ª ¾Ã ÍÁÃкØâ¿Åà´Íà ¢Í§âÁ´ÙÅ´ Ç (4) ¼Ñ§Ë¹ ǤÇÒÁ¨íÒ áÊ´§ÃÒÂÅÐàÍÕ´¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íҢͧâ»Ãà¨ç¡µ ·¾Õè ² Ñ ¹ÒÍÂÙ ã¹Ê ǹ¹Õäé ´ Ạ§¡ÅØÁ ¢Í§ ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ (Data /Idata Memory) áÅÐ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ (Code Memory) ¾Ã ÍÁ¡Ñ¹Âѧ ä´ ÃкػÃÐàÀ·, µíÒá˹ §·ÕÍè ÂÙ㠹˹ ǤÇÒÁ¨íÒ, ¨íҹǹ亵 , ˹ Ò·Õè áÅЪ×Íè ¢Í§à«¡àÁ¹µ «Ö§è à» ¹¡Òà ¡íÒ˹´¨Ò¡ÅÔ§à¡Íà ãË ¼¾Ù ² Ñ ¹Ò·ÃÒºÇ Ò ã¹áµ ÅÐ¾×¹é ·Õ¢è ͧ˹ ǤÇÒÁ¨íҹѹé ÁÕ¡ÒÃ㪠§Ò¹Í ҧäà ª×Íè ¢Í§à«¡àÁ¹µ Ạ§à» ¹ 2 »ÃÐàÀ· ¤×Í (¡) à«¡àÁ¹µ ¿§ ¡ ª¹Ñè (function segment) ÁÕû٠Ẻ¢Í§ª×Íè à«¡àÁ¹µ à» ¹ memorytyp?functionname?modulename

(¢) à«¡àÁ¹µ ¢Í ÁÙÅ (data segment) ÁÕû٠Ẻ¢Í§ª×Íè à«¡àÁ¹µ à» ¹ memorytyp? modulename

ᵠ㹺ҧ¤ÃÑ§é ª×Íè à«¡àÁ¹µ ÍÒ¨ÁÕû٠ẺäÁ µÃ§¡Ñº·Õ¡è Å ÒÇäÇ ãË ¶Í× à» ¹à«¡àÁ¹µ ¾àÔ ÈÉ ÊíÒËÃѺ¤ÍÁä¾àÅÍà ¡ºÑ ÅÔ§à¡Íà ¢ ÍÁÙÅã¹Ê ǹ¹Õ¨é Ъ ÇÂãË ¼¾Ù ² Ñ ¹Òâ»Ãá¡ÃÁÊÒÁÒöµÃǨÊͺ¡ÒÃ㪠¾×é¹·Õè˹ ǤÇÒÁ¨íҢͧâ»Ãà¨ç¡µ áÅÐÇÔà¤ÃÒÐË » ­ËÒ·ÕèÍÒ¨à¡Ô´¨Ò¡¡ÒÃàÃÕ¡㪠˹ ǤÇÒÁ¨íÒ«éíÒ« ͹ ËÃ×ͼԴµíÒá˹ §ä´ ªÑ´à¨¹¢Öé¹


34

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

WIN32 LX51 CODE BANKING LINKER/LOCATOR V05.01.16, INVOKED BY: LX51 c:\rideprj\tsim\main.obj TO(c:\rideprj\tsim\tsim.AOF) PR(c:\rideprj\tsim& \tsim.m51) PW(80) XSIZE(65536) CSIZE(65536) RS(256) RSI(256) IX MAP

âÁà´Å¢Í§Ë¹ ǤÇÒÁ¨íÒ

MEMORY MODEL: SMALL WITHOUT ANY FLOATING POINT ARITHMETIC

INPUT MODULES INCLUDED C:\RIDEPRJ\TSIM\MAIN.OBJ(MAIN) c:\RIDE\Lib\RC51IXS.LIB(C3S) c:\RIDE\Lib\RC51S.LIB(_C_IDATALEN)

LINK MAP OF MODULE: C:\RIDEPRJ\TSIM\TSIM.AOF (MAIN) TYPE BASE LENGTH RELOCATION ———— ———— —————— —————————— * * * * * * * DATA/IDATA M E M O R Y * * * REG 0000H 0008H ABSOLUTE DATA 0008H 0002H UNIT IDATA 000AH 0001H * * STACK * * * * * * * * * CODE 0000H CODE 0003H 0008H CODE 000BH CODE 000EH CODE 001AH CODE 002EH

CODE 0003H 0005H 0003H 0003H 000CH 0014H 000AH

M E M O R Y ABSOLUTE UNIT

¤íÒÊÑ觷Õè㪠àÃÕ¡ÅÔ§à¡ÍÃ

SEGMENT NAME ———————————— * * * * “REG BANK 0” ?DT?MAIN _STACK

!

ÃÒ¡ÒÃâÁ´ÙÅ

"

¼Ñ§Ë¹ ǤÇÒÁ¨íÒ

#

ÃÒ¡ÒÃÊÃØ»

$

¼Ñ§Í Ò§ÍÔ§

* * * * * * *

ABSOLUTE UNIT UNIT UNIT

?PR?main?MAIN *** GAP *** ?PR?C51_STARTUP? ?PR?timerisr?MAIN ?PR?init?MAIN

EXECUTABLE SUMMARY: ——————————————————— Total INTERNAL RAM storage requirement: 000AH (10) Total EXTERNAL RAM storage requirement: 0000H (0) Total CODE storage requirement: 0035H (53) Note: Summary does not include dynamic stack requirements

REFERENCE MAP OF MODULE: C:\RIDEPRJ\TSIM\TSIM.AOF (MAIN)

SEGMENT BI_GROUP DT_GROUP ID_GROUP XD_GROUP +—> CALLED SEGMENT START LENGTH START LENGTH START LENGTH START LENGTH ——————————————————————————————————————————————————————————————————————————————————————————————————————————— ?PR?timerisr?MAIN ————— —————— ————— —————— ————— ——————— ————— ————————— ?PR?main?MAIN +—> ?PR?init?MAIN

—————

——————

—————

——————

—————

———————

—————

—————————

?PR?init?MAIN

—————

——————

—————

——————

—————

———————

—————

—————————

SYMBOL TABLE FOR C:\RIDEPRJ\TSIM\TSIM.AOF(MAIN) —————————————————————————————————————————————————— VALUE TYPE NAME ————— ———— ———— ————— MODULE main C:0000H SYMBOL _ICE_DUMMY_ C:0000H SYMBOL _51RD_LIKE_DUMMY_ C:0003H PUBLIC main C:002EH PUBLIC init C:001AH PUBLIC timerisr D:0009H PUBLIC toggler D:0008H PUBLIC counter B:0098H SYMBOL RI B:0099H SYMBOL TI B:009AH SYMBOL RB8 B:009BH SYMBOL TB8 B:009CH SYMBOL REN B:009DH SYMBOL SM2 B:009EH SYMBOL SM1 B:009FH SYMBOL SM0 B:00B0H SYMBOL RXD B:00B1H SYMBOL TXD B:00B2H SYMBOL INT0 B:00B3H SYMBOL INT1 B:00B4H SYMBOL T0 B:00B5H SYMBOL T1

%

µÒÃÒ§áÊ´§ÃÒ¡ÒÃÊÑ­Åѡɳ

¡Ãͺá¡·Õè 2-1 áÊ´§Ê ǹ»ÃСͺ¢Í§ä¿Å Å§Ô à¡Íà ·àÕè ¡Ô´¢Ö¹é ¨Ò¡ LX-51 (ÁÕµÍ )


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 B:00B6H B:00B7H B:00B8H B:00B9H B:00BAH B:00BBH B:00BCH B:00A8H B:00A9H B:00AAH B:00ABH B:00ACH B:00AFH B:0088H B:0089H B:008AH B:008BH B:008CH B:008DH B:008EH B:008FH B:00D0H B:00D2H B:00D3H B:00D4H B:00D5H B:00D6H B:00D7H D:0099H D:0098H D:00B8H D:00A8H D:008DH D:008CH D:008BH D:008AH D:0089H D:0088H D:0087H D:0083H D:0082H D:0081H D:00F0H D:00E0H D:00D0H D:00B0H D:00A0H D:0090H D:0080H ——————— C:001AH C:001EH C:001EH C:0020H C:0022H C:002DH C:002DH ——————— ——————— C:002EH C:002EH C:002EH C:0031H C:0033H C:0035H C:0037H C:0037H ——————— ——————— C:0003H C:0003H C:0003H C:0006H C:0006H ——————— ——————— C:000EH N:00FFH

SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL SYMBOL PROC LINE# LINE# LINE# LINE# LINE# LINE# LINE# ENDPROC PROC LINE# LINE# LINE# LINE# LINE# LINE# LINE# LINE# ENDPROC PROC LINE# LINE# LINE# LINE# LINE# ENDPROC ENDMOD PUBLIC PUBLIC

LINK/LOCATE RUN COMPLETE,

WR RD PX0 PT0 PX1 PT1 PS EX0 ET0 EX1 ET1 ES EA IT0 IE0 IT1 IE1 TR0 TF0 TR1 TF1 P OV RS0 RS1 F0 AC CY SBUF SCON IP IE TH1 TH0 TL1 TL0 TMOD TCON PCON DPH DPL SP B ACC PSW P3 P2 P1 0 timerisr 5 5 7 8 9 10 10 timerisr init 11 11 13 14 15 16 17 17 init main 19 19 21 22 23 main main ?C_START3 _INITP2?

NO ERROR FOUND.

%

&

l

µÒÃÒ§áÊ´§ÃÒ¡ÒÃÊÑ­Åѡɳ

¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹

¡Ãͺá¡·Õè 2-1 áÊ´§Ê ǹ»ÃСͺ¢Í§ä¿Å Å§Ô à¡Íà ·àÕè ¡Ô´¢Ö¹é ¨Ò¡ LX-51 (¨º)

35


36

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(5) ÃÒ¡ÒÃÊÃØ» áÊ´§ÃÒ¡ÒÃÊÃØ»¨íҹǹ亵 ¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹, ÀÒ¹͡ áÅÐ˹ ǤÇÒÁ ¨íÒâ»Ãá¡ÃÁ¢Í§â»Ãà¨ç¡µ ·¾Õè ² Ñ ¹ÒÍÂ٠¡àÇ ¹¾×¹é ·Õ¢è ͧÊáµç¡ (6) ¼Ñ§Í Ò§ÍÔ§ à» ¹µÒÃÒ§áÊ´§à«¡àÁ¹µ ··Õè Òí §Ò¹ÍÂÙã ¹â»Ãà¨ç¡µ µÒ §æ ¹Ñ¹é Ç ÒÁÕ¡ÒÃàÃÕ¡㪠ૡàÁ¹µ ͹×è ã¹Ê ǹ㴺 Ò§ «Ö§è à» ¹»ÃÐ⪹ Í ҧÂÔ§è 㹡óշÍÕè Ò¨ÁÕ¡ÒÃàÃÕ¡㪠ºÒ§à«¡àÁ¹µ ·Ò§Í ÍÁâ´ÂÅÔ§à¡Íà (7) µÒÃÒ§áÊ´§ÃÒ¡ÒÃÊÑ­Åѡɳ à» ¹µÒÃÒ§áÊ´§ÃÒ¡ÒÃÊÑ­Åѡɳ ·ÕèÍÂÙ ã¹Ë¹ ǤÇÒÁ¨íÒ·Ñé§ËÁ´¢Í§·Ø¡µÑÇá»Ã, ¿ §¡ ª¹Ñè áÅÐÃËÑÊâ»Ãá¡ÃÁÇ ÒÍÂÙ· ãÕè ´ã¹â»Ãà¨ç¡µ «Ö§è à» ¹»ÃÐ⪹ Í ҧÂÔ§è 㹡ÒÃ´Ù¤Ò ·Õàè ¡Ô´¢Ö¹é ÃÐËÇ Ò§ ¨íÒÅͧ¡Ò÷íÒ§Ò¹ «Ö觺 ͤÃÑé§äÁ ·ÃÒºÇ ÒµÑÇá»ÃËÃ×Í¿ §¡ ªÑè¹¹Ñé¹æ ÍÂÙ ³ µíÒá˹ §ã´¢Í§â»Ãà¨ç¡µ à¾ÃÒÐÍҨ໠¹¡ÒáíÒ˹´µíÒá˹ §¨Ò¡¤ÍÁä¾àÅÍà áÅÐÅÔ§¡ à¡Íà 㹺ҧ¤ÃÑé§ÅÔ§à¡Íà ÍÒ¨ÅÐàÅ¡Òà áÊ´§áÍ´à´ÃʢͧµÑÇá»ÃºÒ§µÑÇã¹â»Ãà¨ç¡µ ¹Ñ¹è à¾ÃÒÐÅÔ§à¡Íà ÍÒ¨àËç¹Ç Òà» ¹»ÃÐ⪹ ã¹´ Ò¹¡Òà ¨Ñ´ÊÃõÑÇá»ÃºÒ§µÑÇËÃ×ÍºÒ§Ê Ç¹ãË ä»ãª ã¹Ë¹ ǤÇÒÁ¨íÒÊáµç¡ä´ áÅÐÂѧª ÇÂãË ¢¹Ò´¢Í§ÃËÑÊ â»Ãá¡ÃÁ¡ÃЪѺäÁ ãË­ ÁÒ¡ÍÕ¡´ Ç ¨Ö§äÁ µÍ §¡Ñ§ÇÅÇ Òà» ¹¢ ͼԴ¾ÅÒ´¢Í§ÅÔ§à¡Íà 㹡óշÕèµ Í§¡ÒÃãË µÑÇá»Ã·Õè¶Ù¡ÅÐàŹÕéáÊ´§ã¹µÒÃÒ§à¾×èÍ㪠㹡ÒõÃǨ¤ Ò¢ ÍÁÙÅ ã¹¢³Ð¨íÒÅͧ¡Ò÷íÒ§Ò¹ µ ͧÃкؤÒí ¾ÔàÈÉ volatile äÇ ã¹ºÃ÷Ѵ¡íÒ˹´µÑÇá»Ã ´Ñ§µÑÇÍ ҧ volatile unsigned char foo;

à» ¹¡ÒÃᨠ§ãË ÅÔ§à¡Íà ¡íÒ˹´µíÒá˹ §·ÕèÍÂ٠˹ ǤÇÒÁ¨íÒãË ¡ÑºµÑÇá»Ã·ÕèÁÕ¤íÒ¾ÔàÈÉ volatile ¹Õãé ¹µÒÃÒ§ áÅÐÍ ÒÅ×Áà¾×Íè ãË ¢¹Ò´¢Í§ÃËÑÊâ»Ãá¡ÃÁ¡ÃЪѺ ÁÕ¢¹Ò´·Õàè Åç¡Í ҧÁÕ»ÃÐÊÔ·¸Ô ÀÒ¾ ¤ÇõѴ¤íÒ¾ÔàÈÉ volatile ¹ÕÍé Í¡ËÅѧ¨Ò¡¨íÒÅͧ¡Ò÷íÒ§Ò¹àÃÕºà ÍÂáÅ Ç (8) ¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹ à» ¹¡ÅØ ÁºÃ÷Ѵ· ÒÂä¿Å ·ÕèÊÃØ»¨íҹǹ¢ ͼԴ¾ÅÒ´áÅФíÒàµ×͹ËÅѧ¨Ò¡¼ Ò¹¢Ñ鹵͹ ¢Í§ÅÔ§à¡Íà ෠ҹÑé¹ äÁ ä´ áÊ´§ÃÒÂÅÐàÍÕ´ÊÒà˵آ ͼԴ¾ÅÒ´ËÃ×ͤíÒàµ×͹㴠æãË ¼Ù ¾Ñ²¹Ò·ÃÒº ¨Ö§µ ͧÇÔà¤ÃÒÐË àͧ¨Ò¡¢ ÍÁÙÅÍ×è¹ã¹ä¿Å ÅÔ§à¡Íà áÁ»¹Õé


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

37

2.5 µÑ§é ¤ Ò·íÒ§Ò¹ãË ¤ÍÁä¾àÅÍà 㹠RIDE ¡ÒþѲ¹Òâ»Ãá¡ÃÁã¹â»Ãà¨ç¡µ ˹Öè§æ ÁÕ¤ÇÒÁ¨íÒà» ¹Í ҧÂÔ觷Õè¨Ðµ ͧµÑ駤 Ò·íÒ§Ò¹ãË ¡Ñº ¤ÍÁä¾àÅÍà , áÍÊá«ÁàºÅÍà áÅÐÅÔ§¡ à¡Íà ãË Êà ҧÃËÑʤíÒÊѧè Í ҧàËÁÒÐÊÁ¡ÑºÎÒà ´áÇà ໠ÒËÁÒ·Õäè ´ Í͡ẺäÇ ËÃ×ÍàËÁÒСѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 áµ ÅÐàºÍà µÒÁáµ ¼¼Ù ÅÔµ Í ҧ¹ Í·ÕÊè ´Ø ¼Ù¾ ²Ñ ¹Ò â»Ãá¡ÃÁµ ͧÃкØâÁà´Å˹ ǤÇÒÁ¨íÒãË ¡ºÑ ¤ÍÁä¾àÅÍà à¾×Íè á»ÅÃËÑʤíÒÊѧè ãË µÃ§¡Ñº¾×¹é ·ÕËè ¹ ǤÇÒÁ ¨íҢͧÎÒà ´áÇà ໠ÒËÁÒ ã¹â»Ãá¡ÃÁ RIDE ¼Ùã ª §Ò¹ÊÒÁÒöµÑ§é ¤ Ò¡Ò÷íÒ§Ò¹¢Í§¤ÍÁä¾àÅÍà , áÍÊá«ÁàºÅÍà áÅÐ ÅÔ§¡ à¡Íà ãË ¡ºÑ â»Ãà¨ç¡µ ä´ â´Â¡ÒÃ㪠¤Òí Êѧè Pragma ¹Í¡¨Ò¡¹Ñ¹é ÂѧÊÒÁÒö¡íÒ˹´ä´ â´Â¡ÒäÅÔ¡ àÅ×Í¡¼ Ò¹àÁ¹Ù Option à Project â»Ãá¡ÃÁ¨ÐáÊ´§Ë¹ Òµ Ò§ Options â´ÂÁÕ¡Ãͺ˹ Òµ Ò§àÅç¡« Ò Á×ÍáÊ´§ÃÒ¡ÒÃàÅ×Í¡ «Öè§ÍÂÙ 5 ÃÒ¡Òà ¤×Í Environment, Directories, RC51, MA51, LX51 áÅÐ CodeCompressor51 ´Ñ§ã¹ÃÙ»·Õè 2-21 Environment 㪠¡Òí ˹´ã¹Ê ǹ¢Í§à·ç¡« àÍ´ÔàµÍà Directories 㪠¡Òí ˹´â¿Åà´Íà ·ãÕè ª à¡çºä¿Å »ÃÐàÀ·µ Ò§æ ·Õãè ª ã¹ RIDE ઠ¹ Include file, Library file, Object file áÅÐ Listing file RC51 㪠µ§Ñé ¤ Ò·íÒ§Ò¹ã¹Ê ǹ¤ÍÁä¾àÅÍà MA51 㪠µ§Ñé ¤ Ò·íÒ§Ò¹ã¹Ê ǹáÍÊà«ÁàºÅÍà LX51 㪠µ§Ñé ¤ ҢͧÅÔ§à¡Íà Í ҧäáçµÒÁã¹Ãع ·´Åͧ㪠¤ÇáíÒ˹´¤ ÒÁҵðҹµÒÁ·Õâè »Ãá¡ÃÁµÑ§é äÇ ËÃ×ͤ Ò Default

ÃÙ»·Õè 2-21 áÊ´§Ë¹ Òµ Ò§ÊíÒËÃѺàÅ×Í¡µÑ§é ¤ Ò¡Ò÷íÒ§Ò¹¢Í§¤ÍÁä¾àÅÍà , áÍÊá«ÁàºÅÍà áÅÐÅÔ§¡ à¡ÍÃ


38

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.1 ¡ÒÃµÑ§é ¤ ÒÀÒÂã¹ RC51

àÁ×Íè àÅ×͡ࢠÒä»µÑ§é ¤ Òã¹ RC51 â»Ãá¡ÃÁ¨ÐáÊ´§ÃÒ¡ÒàÍÂÍÕ¡ 10 µÑÇàÅ×Í¡Â Í ´Ñ§¹Õé

2.5.1.1 Source

¡íÒ˹´ËÅÑ¡äÇÂҡó ¢Í§ä¿Å µ ¹©ºÑºáÅСÒÃ͹حҵ㪠µÑÇá»Ãâ¤Ã§Êà ҧẺ structure/ union/enum ã¹â»Ãà¨ç¡µ «Ö§è ÁÕÃÒÂÅÐàÍÕ´µÑÇàÅ×Í¡´Ñ§¹Õé

µÑÇàÅ×Í¡ ANSI C 80C51 Specific Language Extensions 'struct/union/enum' optional

ÃÒÂÅÐàÍÕ´ ËÃ×Í㪠¤Òí Êѧè #pragma NOEXTEND ͹حҵãË ãª ¤Òí ÊÑ§è ¢ÂÒ·Õàè ¾ÔÁè àµÔÁ¨Ò¡·Õ¡è Òí ˹´ã¹ ANSI-C ËÃ×Í㪠¤Òí Êѧè #pragma EXTEND Specific Language Extensions ËÃ×Í㪠¤Òí Êѧè #pragma SUE_OPT

Tolerant for pointer assignment

ÂÍÁãË ¡Òí ˹´¤ ÒµÑǪբé Í ÁÙÅẺ¡Ç Ò§æ ä´

Strict for pointer assignment

µ ͧ¡íÒ˹´¤ ÒµÑǪբé Í ÁÙÅÍ ҧà¤Ã §¤ÃÑ´ ¨Ðµ ͧàÅ×Í¡Í ҧã´Í ҧ˹֧è ÃÐËÇ Ò§ Tolerant for pointer assignment ¡Ñº Strict for pointer assignment


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.1.2. Floating Point ¡íÒ˹´ÃٻẺ¡ÒÃ㪠µÇÑ á»Ã·È¹ÔÂÁÊíÒËÃѺ RC51

µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

No floating point

äÁ Á¡Õ ÒÃ㪠µÇÑ á»Ã·È¹ÔÂÁã¹â»Ãà¨ç¡µ ·µèÕ Í §¡ÒþѲ¹Ò ËÃ×Í㪠¤Òí Êѧè #pragma FP(NOFLOAT)

IEEE : Standard

㪠µÇÑ á»Ã·È¹ÔÂÁµÒÁÁҵðҹ IEEE-754 ËÃ×Í㪠¤Òí Êѧè #pragma FP(IEEE,STANDARD)

IEEE : Reverse (251 compatible)

㪠µÇÑ á»Ã·È¹ÔÂÁµÒÁÁҵðҹ IEEE-754 ¡ÅѺ¤ Òª¹Ô´ 251 ËÃ×Í㪠¤Òí Êѧè #pragma FP(IEEE,FP251)

BCD : All types

㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ä´ ·§éÑ áºº 32, 48 áÅÐ 56 ºÔµ ËÃ×Í㪠¤Òí Êѧè #pragma FP(BCD,ALL)

BCD : "float" only

㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ä´ à©¾ÒÐẺ 32 ºÔµà· ҹѹé ËÃ×Í㪠¤Òí Êѧè #pragma FP(BCD,FLOAT)

BCD : "double" only

㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ä´ à©¾ÒÐẺ 48 ºÔµà· ҹѹé ËÃ×Í㪠¤Òí Êѧè #pragma FP(BCD,DOUBLE)

BCD " "long double" only

㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ä´ à©¾ÒÐẺ 56 ºÔµà· ҹѹé ËÃ×Í㪠¤Òí Êѧè #pragma FP(BCD,LONG)

l

39


40

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.1.3 Code Generation ¡íÒ˹´ÃٻẺ¡ÒÃÊà ҧÃËÑʤíÒÊѧè ÊíÒËÃѺ RC51

µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Enable ANSI Integer Promotion Rules

¡íÒ˹´ãË µÇÑ á»ÃẺ chars á»Å§à» ¹áºº integer ¡ ͹ µÒÁÁҵðҹ ANSI ËÃ×Í㪠¤Òí Êѧè #pragma IP ËÃ×Í NOIP

Stack Automatic Variables

ãË µÇÑ á»Ã·Ñ§é ËÁ´ãª §Ò¹ã¹Êáµç¡á·¹¡ÒáíÒ˹´µíÒá˹ §µÒµÑÇ ËÃ×Í㪠¤Òí Êѧè #pragma AUTO ËÃ×Í NOAUTO

Initialize static variables to zero

ËÃ×Í㪠¤Òí Êѧè #pragma IS ËÃ×Í NOIS

Generic

¡íÒ˹´µÑÇá»Ã¾Í¹ àµÍà ໠¹áºº·ÑÇè ä» ËÃ×Í㪠¤Òí Êѧè #pragma GENERIC ËÃ×Í NOGENERIC

Unsigned characters ¡íÒ˹´ãË µÑÇá»ÃẺ chars à» ¹áºº unsigned

ËÃ×Í㪠¤íÒÊÑè§ #pragma UNSIGNEDCHAR ËÃ×Í NOUNSIGNEDCHAR

'enum' interpreted as 'int'

¡íÒ˹´ãË µÇÑ á»Ã enum à» ¹áººàÅ¢¨íҹǹàµçÁ

'enum' interpreted as 'char'

¡íÒ˹´ãË µÇÑ á»Ã enum à» ¹áººµÑÇÍÑ¡Éà (chars)

Generate safe code for monitor

Êà ҧ⤠´ÊíÒËÃѺµÃǨÊͺ¡Ò÷íÒ§Ò¹


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

41

2.5.1.4 Defines ã¹Ê ǹ¹Õé͹حҵãË » ͹¤ Ò¡íÒ˹´·ÕèÁÕà§×è͹䢵 ͤÍÁä¾àÅÍà ÊÒÁÒö㪠¤íÒÊÑè§ #pragma DEFINE(text)

2.5.1.5 Listing

¡íÒ˹´ÃٻẺä¿Å ÅÊÔ µ µ§Ôé ÊíÒËÃѺ RC51

µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Generate listing (.LST)

àÅ×Í¡ãË ¤ÍÁä¾àÅÍà Êà ҧä¿Å ÅÊÔ µÔ§é (.LST) ËÃ×Í㪠¤Òí Êѧè #pragma PR(filename) ËÃ×Í NOPR

Show lines omitted from compilation

àÅ×Í¡ãË áÊ´§â»Ãá¡ÃÁ·Ø¡ºÃ÷Ѵ·Õ¼è Ò ¹¡Ãкǹ¡ÒäÍÁä¾Å ËÃ×Í㪠¤Òí Êѧè #pragma CO ËÃ×Í NOCO

Display the contents of the include files

áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ä¿Å ÃÇ Á (included file) ã¹ä¿Å ÅÊÔ µÔ§é ´ Ç ËÃ×Í㪠¤Òí Êѧè #pragma LC ËÃ×ÍäÁ ÃкØ

Generate Preprocessor listing file

Êà ҧáÅÐáÊ´§ÃÒÂÅÐàÍÕ´¢Í§Ê ǹ¾ÃÕâ»Ãà«Êà«Íà ËÃ×Í㪠¤Òí Êѧè #pragma PP(filename) ËÃ×ÍäÁ ÃкØ

Append assembly mnemonics list

áÊ´§ºÃ÷Ѵ¤íÒÊѧè ÀÒÉÒáÍÊà«ÁºÅÕã¹ä¿Å ÅÊÔ µÔ§é ËÃ×Í㪠¤Òí Êѧè #pragma CD ËÃ×Í NOCD

Generate a list of symbols

áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÊÑ­Åѡɳ ã¹ä¿Å ÅÊÔ µÔ§é ËÃ×Í㪠¤Òí Êѧè #pragma SB ËÃ×Í NOSB

Insert form feeds at the end of pages

á·Ã¡¤íÒÊѧè àÃÔÁè ˹ ÒãËÁ ·µèÕ Í¹· Ò¢ͧᵠÅÐ˹ Òã¹ä¿Å ÅÊÔ µÔ§é

Number of lines printed per page

¡íÒ˹´¨íҹǹºÃ÷Ѵµ Í˹ Ò ËÃ×Í㪠¤Òí Êѧè #pragma PL(lines)

Number of characters printed per line

¡íÒ˹´¨íҹǹµÑÇÍÑ¡Éõ ͺÃ÷Ѵ ËÃ×Í㪠¤Òí Êѧè #pragma PW(characters)


42

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.1.6 Object ¡íÒ˹´¡Ò÷íÒ§Ò¹ÊíÒËÃѺâ»Ãá¡ÃÁµ ¹©ºÑºáÅÐä¿Å ÍÍ»à¨ç¡µ ã¹ RC51 µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Generate an assembler source file

Êà ҧä¿Å *.src ·Õºè ÃèØâ»Ãá¡ÃÁÀÒÉÒáÍÊà«ÁºÅÕ à¾×Íè àµÃÕÂÁ¡ÒÃáÍÊà«ÁàºÅÍà ËÃ×Í㪠¤Òí Êѧè #pragma SRC

Generate an object file

Êà ҧä¿Å Íͺà¨ç¡µ ËÃ×Í㪠¤Òí Êѧè #pragma OBJECT(filename)

Debugging information -no information

äÁ µÍ §áÊ´§ÃÒÂÅÐàÍÕ´¡Òôպ¡Ñ ËÃ×Í㪠¤Òí Êѧè #pragma NODB

-Standard

áÊ´§ÃÒÂÅÐàÍÕ´¡Òôպ¡Ñ µÒÁÁҵðҹµ ¹©ºÑº¢Í§ Intel OMF-51 ËÃ×Í㪠¤Òí Êѧè #pragma DB

- Extended

áÊ´§ÃÒÂÅÐàÍÕ´¡Òôպ¡Ñ â´ÂÁÕÊÇ ¹¢ÂÒ¤ÇÒÁà¾ÔÁè àµÔÁ ËÃ×Í㪠¤Òí Êѧè #pragma OE(1)

- Extended 1997 version

áÊ´§ÃÒÂÅÐàÍÕ´¡Òôպ¡Ñ â´ÂÁÕÊÇ ¹¢ÂÒ â´ÂÃÇÁµÑÇá»Ã·Õ¡è Òí ˹´ µíÒá˹ §àͧÍѵâ¹ÁÑµÔ ËÃ×Í㪠¤Òí Êѧè #pragma OE(2)

Generate interrupt vectors

Êà ҧÍÔ¹àµÍÃ Ã»Ñ µ àÇ¡àµÍà ËÃ×Í㪠¤Òí Êѧè #pragma INTVECTOR(offset) ËÃ×Í NOINTVECTOR

Interval for interrupt vectors

¡íÒ˹´¨íҹǹ亵 ¢Í§ÍÔ¹àµÍÃ Ã»Ñ µ àÇ¡àµÍà ËÃ×Í㪠¤Òí Êѧè #pragma INTERVAL(bytes)

Offset for interrupt vectors

¡íÒ˹´µíÒá˹ §ÍÔ¹àµÍÃ Ã»Ñ µ àÇ¡àµÍà ËÃ×Í㪠¤Òí Êѧè #pragma INTVECTOR(offset)

Compile via assembler (.C to .SRC to .OBJ)

àÅ×Í¡ãË ¡Ãкǹ¡ÒäÍÁä¾Å ¼Ò ¹¡ÒÃáÍÊà«ÁàºÅÍÃ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

2.5.1.7 Memory Model ¡íÒ˹´âÁà´Å˹ ǤÇÒÁ¨íÒÊíÒËÃѺ RC51 µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Memory model Tiny

àÅ×͡˹ ǤÇÒÁ¨íÒà» ¹áºº Tiny ËÃ×Í㪠¤Òí Êѧè #pragma TINY

Small

àÅ×͡˹ ǤÇÒÁ¨íÒà» ¹áºº Small (äÁ à¡Ô¹ 2KB) ËÃ×Í㪠¤Òí Êѧè #pragma SMALL

Compact

àÅ×͡˹ ǤÇÒÁ¨íÒà» ¹áºº Compact (äÁ à¡Ô¹ 64KB ¢¹Ò´¿ §¡ ª¹èÑ äÁ à¡Ô¹ 2KB) ËÃ×Í㪠¤Òí Êѧè #pragma COMPACT

Large

àÅ×͡˹ ǤÇÒÁ¨íÒà» ¹áºº Large (äÁ à¡Ô¹ 64KB) ËÃ×Í㪠¤Òí Êѧè #pragma LARGE

Huge

àÅ×͡˹ ǤÇÒÁ¨íÒà» ¹áºº Huge ËÃ×Í㪠¤Òí Êѧè #pragma HUGE

External Stack

ã¹ÃØ ¹·´Åͧ㪠ÊÒÁÒöàÅ×Í¡ Memory model ä´ à¾Õ§ 3 Ẻ¤×Í Tiny, Small áÅÐ Compact â´Â»¡µÔ¨ÐàÅ×Í¡·Õè Small ¡àÇ ¹ã¹¡Ã³Õ㪠¡ºÑ T89C51AC2 áÅÐ ÁÕµÍ §¡ÒÃ㪠§Ò¹Ë¹ ǤÇÒÁ¨íÒáÃÁÊ Ç¹ ¢ÂÒ (ERAM) ¨Ö§àÅ×͡Ẻ Compact

Use external stack

㪠Êáµç¡¨Ò¡Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡ ËÃ×Í㪠¤Òí Êѧè #pragma EXTSTK ËÃ×ÍäÁ ÃкØ

Special features Component with XRAM

àÃÔÁè ÃËÑʤíÒÊÑ§è ·ÕËè ¹ ǤÇÒÁ¨íÒ XRAM ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÃ×Í㪠¤Òí Êѧè #pragma INTXD ËÃ×ÍäÁ ÃкØ

Advance features None

àÅ×͡㪠¤³ Ø ÊÁºÑµÁÔ ÒµÃ°Ò¹¢Í§ MCS-51

Philips component with Dual DPTR

㪠¤³ Ø ÊÁºÑµ¾Ô àÔ ÈÉã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¢Í§ Philips ËÃ×Í㪠¤Òí Êѧè #pragma PHILIPSDDPTR

Dual DPTR Dallas/TI

㪠¤³ Ø ÊÁºÑµÔ DPTR ¤Ùã ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¢Í§ Dallas ËÃ×Í TI ËÃ×Í㪠¤Òí Êѧè #pragma MODAMD(DP2)

80C517

㪠¤Ø³ÊÁºÑµÔ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà 80C517

Dual DPTR ATMEL

㪠¤³ Ø ÊÁºÑµÔ DPTR ¤Ùã ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¢Í§ Atmel ËÃ×Í㪠¤Òí Êѧè #pragma MODATM

ËÃ×Í㪠¤Òí Êѧè #pragma MOD517(DP8,otherparam) ËÃ×Í MOD517(NODP8,otherparam)

2.5.1.8 Registers ¡íÒ˹´¡ÒÃ㪠¾¹×é ·ÕÃè ¨Õ ÊÔ àµÍà ÊÒí ËÃѺ RC51 µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Use absolute register address for R0-R7

ÂÍÁãË ¤ÍÁä¾àÅÍà 㪠¾¹é× ·Õãè ¹ÃÕ¨ÊÔ àµÍà ầ¡ R0-R7 ä´ ËÃ×Í㪠¤Òí Êѧè #pragma AREGS ËÃ×Í NOAREGS

Pass function agrument in registers

͹حҵãË ¿§ ¡ ª¹èÑ ¼ Ò¹¤ ÒµÑÇá»Ã´ ÇÂÃÕ¨ÊÔ àµÍÃ ä´ ËÃ×Í㪠¤Òí Êѧè #pragma REGPARMS ËÃ×Í NO REGPARMS

Register bank

àÅ×͡ầ¡ ¢Í§ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺ㪠§Ò¹¡Ñº¿ §¡ ª¹èÑ ËÃ×Í㪠¤Òí Êѧè #pragma RB(bank number)

43


44

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.1.9 Optimizer ¡íÒ˹´ÃٻẺ¡ÒèѴÃËÑʤíÒÊÑè§ãË àËÁÒÐÊÁ¡Ñºâ»Ãà¨ç¡µ µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Optimize for tight code

á»ÅÃËÑʤíÒÊÑè§ãË â»Ãá¡ÃÁ¡ÃЪѺ ÁÕ¢¹Ò´àÅç¡ ËÃ×Í㪠¤íÒÊÑè§ #pragma OT(otherparam,SIZE)

Optimize for fast code

á»ÅÃËÑʤíÒÊÑè§ãË â»Ãá¡ÃÁ·íÒ§Ò¹àÃçÇ äÁ ๠¹àÃ×èͧ¢¹Ò´¢Í§â»Ãá¡ÃÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma OT(otherparam,SPEED)

Optimize level

¡íÒËôÃдѺ¢Í§¡ÒèѴÃËÑʤíÒÊÑè§ãË àËÁÒÐÊÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma OT(level, otherparam)

Generate post-optimizing information

áÊ´§¢ ÍÁÙÅ㹡ÒèѴÃËÑʤíÒÊÑè§ ËÃ×Í㪠¤íÒÊÑè§ #pragma POSTOPT ËÃ×ÍäÁ ÃкØ

2.5.1.10 Messages ¡íÒ˹´ÃٻẺ¢ ͤÇÒÁᨠ§àµ×͹¨Ò¡ RC51 µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Warning level

¡íÒ˹´ÃдѺ¡ÒÃᨠ§àµ×͹¢ ͼԴ¾ÅҴ㹡ÒäÍÁä¾Å ËÃ×Í㪠¤íÒÊÑè§ #pragma WL(level)

Stop after n errors

¡íÒ˹´¨íҹǹ¢ ͼԴ¾ÅÒ´·Õè·íÒãË ¤ÍÁä¾àÅÍà ËÂØ´¡ÒäÍÁä¾Å ËÃ×Í㪠¤íÒÊÑè§ #pragma MAXERR(errornum)

Stop after n warning

¡íÒ˹´¨íҹǹ¢ ͤÇÒÁᨠ§àµ×͹¤ÇÒÁ¼Ô´¾ÅÒ´·Õè·íÒãË ¤ÍÁä¾àÅÍà ËÂØ´¡ÒäÍÁä¾Å ËÃ×Í㪠¤íÒÊÑè§ #pragma MAXWAR(warningnum)

2.5.2 µÑ§é ¤ Ò·íÒ§Ò¹ãË áÍÊá«ÁàºÅÍà MA-51 ã¹ RIDE »ÃСͺ´ ÇÂÃÒ¡ÒàÍÂÍÕ¡ 4 µÑÇ ´Ñ§¹Õé

2.5.2.1 Source µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Define symbols for the 8051 function registers

¡íÒ˹´ãË áÍÊà«ÁàºÅÍà 㪠ʭ Ñ Åѡɳ ÁÒµÃ°Ò¹á¡ Ã¨Õ ÊÔ àµÍà ¢Í§ 8051 ËÃ×Í㪠¤Òí Êѧè #pragma MOD51 ËÃ×Í NOMOD51

Accept Intel MPL

¡íÒ˹´ãË áÍÊà«ÁàºÅÍà ÂÍÁÃѺÁÒâ¤Ã¢Í§ Intel MPL ËÃ×Í㪠¤Òí Êѧè #pragma MACRO(MPL) ËÃ×ÍäÁ ÃкØ

Syntax ASM-51 Syntax

¡íÒ˹´ãË áÍÊà«ÁàºÅÍà ÂÍÁÃѺ¤íÒÊѧè áÍÊà«ÁºÅբͧ Intel ËÃ×Í㪠¤Òí Êѧè #pragma SYNTAX(ASM51)

Raisonance Syntax

¡íÒ˹´ãË áÍÊà«ÁàºÅÍà ÂÍÁÃѺ¤íÒÊѧè áÍÊà«ÁºÅբͧ Raisonance ËÃ×Í㪠¤Òí Êѧè #pragma SYNTAX(EMA)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

45

2.5.2.2 Set à» ¹¡Òû ͹¢ ͤÇÒÁ´ ÇÂÃٻẺ ´Ñ§¹Õé symbol [ = value]

[,symbol [ = value]]

¤ Ò value ¹ÕéÊÒÁÒö¡íÒ˹´à» ¹¤ ҢͧÊÑ­Åѡɳ ¶ ÒäÁ ¡íÒ˹´ÊÑ­Åѡɳ ¹Ñé¹ ¨ÐÁÕ¤ Òà» ¹ 0xFFFF ËÃ×Í㪠¤Òí Êѧè #pragma SET(text)

2.5.2.3 Listing µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Generate listing

¡íÒ˹´ãË áÍÊà«ÁàºÅÍà Êà ҧä¿Å ÅÊÔ µÔ§é ËÃ×Í㪠¤Òí Êѧè #pragma PRINT(filename) ËÃ×Í NOPRINT

Include the program source text

ÃÇÁâ»Ãá¡ÃÁµ ¹©ºÑºäÇ ã¹ä¿Å ÅÊÔ µÔ§é ËÃ×Í㪠¤Òí Êѧè #pragma LIST ËÃ×Í NOLIST

Display the contents of the include files

áÊ´§¡ÅØÁ ä¿Å ¼¹Ç¡·Õãè ª ÃÇ Á¡Ñºâ»Ãá¡ÃÁ ËÃ×Í㪠¤Òí Êѧè #pragma LC ËÃ×ÍäÁ ÃкØ

Show unassembled lines of conditional constructs

áÊ´§ºÃ÷Ѵ¢Í§â»Ãá¡ÃÁ·Õäè Á ä´ ¼Ò ¹¡ÒÃáÍÊà«ÁàºÅÍà ËÃ×Í㪠¤Òí Êѧè #pragma COND ËÃ×Í NOCOND

Expand assembly instructions of macros

¢ÂÒ¡ÒÃáÍÊà«ÁàºÅÍà ãË ÃͧÃѺ¡ÑºÁÒâ¤Ã ËÃ×Í㪠¤Òí Êѧè #pragma GEN ËÃ×Í NOGEN

Generate a table of the symbols

¡íÒ˹´ãË Êà ҧµÒÃÒ§áÊ´§ÃÒ¡ÒÃÊÑ­Åѡɳ ËÃ×Í㪠¤Òí Êѧè #pragma SB ËÃ×Í NOSB

Insert form feeds at the end of pages

á·Ã¡¤íÒÊѧè àÃÔÁè ˹ ÒãËÁ ·µèÕ Í¹· Ò¢ͧᵠÅÐ˹ Òã¹ä¿Å ÅÊÔ µÔ§é ËÃ×Í㪠¤Òí Êѧè #pragma EJECT ËÃ×ÍäÁ ÃкØ

Generate a cross reference table of the symbols

¡íÒ˹´ãË Êà ҧµÒÃÒ§à»ÃÕºà·Õºä¢Ç ¡ºÑ ÊÑ­Åѡɳ ËÃ×Í㪠¤Òí Êѧè #pragma XR ËÃ×Í NOXR

Number of lines printed per page

¡íÒ˹´¨íҹǹºÃ÷Ѵµ Í˹ Ò ËÃ×Í㪠¤Òí Êѧè #pragma PL(lines)

Number of characters printed per line

¡íÒ˹´¨íҹǹµÑÇÍÑ¡Éõ ͺÃ÷Ѵ ËÃ×Í㪠¤Òí Êѧè #pragma PW(characters)

2.5.2.4 Object µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

General information Generate an object file

¡íÒ˹´ãË Êà ҧä¿Å Íͺà¨ç¡µ ËÃ×Í㪠¤Òí Êѧè #pragma OBJECT(filename) ËÃ×Í NOOBJECT

Generate post optimizing information

áÊ´§¢ ÍÁÙÅ㹡ÒèѴÃËÑʤíÒÊÑ§è ·Õàè ¡Ô´¢Ö¹é ËÃ×Í㪠¤Òí Êѧè #pragma POSTOPT ËÃ×ÍäÁ ÃкØ

Debugging information No information

äÁ µÍ §áÊ´§ÃÒÂÅÐàÍÕ´¢Í§¡Òôպ¡Ñ

Standard

áÊ´§ÃÒÂÅÐàÍÕ´¢Í§¡Òôպ¡Ñ Áҵðҹ ËÃ×Í㪠¤Òí Êѧè #pragma DB

Extended

äÁ µÍ §áÊ´§ÃÒÂÅÐàÍÕ´¢Í§¡Òôպ¡Ñ ¢ÂÒ¤ÇÒÁ ËÃ×Í㪠¤Òí Êѧè #pragma OE

Register bank used

àÅ×Í¡ÃÕ¨ÊÔ àµÍà ầ¡ ÊÒí ËÃѺ§Ò¹áÍÊà«ÁàºÅÍà ËÃ×Í㪠¤Òí Êѧè #pragma RB(registerbank[,registerbank])


46

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.3 µÑ§é ¤ Ò·íÒ§Ò¹ãË Å§Ôé ¡ à¡Íà LX51 ã¹ RIDE

ÊíÒËÃѺ¡ÒÃµÑ§é ¤ Ò·íÒ§Ò¹ã¹Ê ǹÅÔ§é à¡Íà ¨ÐÍÂÙã ¹ÃÒ¡Òà LX51 ÁÕ 7 µÑÇàÅ×Í¡Â Í ´Ñ§¹Õé

2.5.3.1 Linker

µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Libraries RC51xLIB

àÅ×Í¡ä¿Å äźÃÒÃÕ ËÃ×Í㪠¤íÒÊÑè§ #pragma NLIB ËÃ×ÍäÁ ÃкØ

Miscellaneous Ram size

¡íÒ˹´¢¹Ò´Ë¹ ǤÇÒÁ¨íÒáÃÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma RS(size)

Initialized Ram size

¡íÒ˹´¤ÇÒÁ¨ØàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒáÃÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma RSI(size)

(s)printf buffer size

¡íÒ˹´¢¹Ò´ºÑ¿à¿Íà ÊíÒËÃѺ¤íÒÊÑè§ printf áÅÐ sprintf ¡íÒ˹´¢¹Ò´Êáµç¡¢Í§Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡

External stack size Maximim code size Maximum Xdata size Generate an Intel Hex file

Generate a Binary file

¡íÒ˹´¢¹Ò´¢Í§Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ¡íÒ˹´¢¹Ò´¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒ¹͡ ãË Êà ҧä¿Å Intel Hex àÁ×èÍàÊÃç¨ÊÔ鹡Ãкǹ¡ÒÃÅÔ§à¡Íà ãË Êà ҧä¿Å 亹ÒÃÕàÁ×èÍàÊÃç¨ÊÔ鹡Ãкǹ¡ÒÃÅÔ§à¡ÍÃ

Include Debug Info

¼¹Ç¡ÃÒÂÅÐàÍÕ´¢Í§¡ÒôպѡäÇ ´ Ç ËÃ×Í㪠¤íÒÊÑè§ #pragma DL+DP+DS ËÃ×Í NODL+NODP+NODS

Include PostOpti Info

¼¹Ç¡ÃÒÂÅÐàÍÕ´¢Í§¡ÒèѴÊÃäíÒÊÑè§äÇ ´ Ç ¡íÒ˹´¤ ÒàÃÔèÁµ ¹ãË Timer1

Initial value of Timer1 Starting addresses Code

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma CODE(address)

Xdata

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒ¹͡ ËÃ×Í㪠¤íÒÊÑè§ #pragma XDATA(address)

Idata

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹ ËÃ×Í㪠¤íÒÊÑè§ #pragma IDATA(address)

Data

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒÀÒÂã¹â´ÂµÃ§ ËÃ×Í㪠¤íÒÊÑè§ #pragma DATA(address)

Bit

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÃдѺºÔµ ËÃ×Í㪠¤íÒÊÑè§ #pragma BDATA(address)

Absolute segments offset code

ÃкØÃÐÂÐÍͿ૵ÊíÒËÃѺૡàÁ¹µ ¢Í§Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ 㪠㹡óյ ͧ¡ÒÃá¡ 2 â»Ãà¨ç¡µ ·ÕèâËÅ´¤íÒÊÑè§äÇ ã¹Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁà´ÕÂǡѹ ËÃ×Í㪠¤íÒÊÑè§ #pragma ABSCODEOFFS(offset)

3.5.3.2 Listing µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Include the memory map of the application

¼¹Ç¡¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íҢͧÃкº§Ò¹·Õè¡íÒÅѧ¾Ñ²¹ÒäÇ ´ ÇÂ

Insert the cross references table XREF

¡íÒ˹´ãË Êà ҧµÒÃÒ§à»ÃÕºà·Õºä¢Ç ÃÇÁäÇ ã¹ä¿Å ÅÔʵÔ駴 Ç ËÃ×Í㪠¤íÒÊÑè§ #pragma IX ËÃ×Í NOIX

Insert Form feeds at the end of pages

á·Ã¡¤íÒÊÑè§àÃÔèÁ˹ ÒãËÁ ·ÕèµÍ¹· Ò¢ͧᵠÅÐ˹ Òã¹ä¿Å ÅÔʵÔé§ ËÃ×Í㪠¤íÒÊÑè§ #pragma EJECT ËÃ×ÍäÁ ÃкØ

Number of lines printed per page

¡íÒ˹´¨íҹǹºÃ÷Ѵµ Í˹ Ò ËÃ×Í㪠¤íÒÊÑè§ #pragma PL(lines)

Number of characters printed per line

¡íÒ˹´¨íҹǹµÑÇÍÑ¡Éõ ͺÃ÷Ѵ ËÃ×Í㪠¤íÒÊÑè§ #pragma PW(characters)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

47

2.5.3.4 Bank Switching

µÑÇàÅ×Í¡

ÃÒÂÅÐàÍÕ´

Banking tab Use Bank switching mode

¡íÒ˹´ãË ÅÔ§à¡Íà àÅ×Í¡à»ÅÕè¹ầ¡ ä´ ã¹¾×é¹·Õèâ»Ãá¡ÃÁ 64KB ËÃ×Í㪠¤íÒÊÑè§ #pragma BANKAREAT(start,end)

Maximum number of banks

¡íÒ˹´¨íҹǹầ¡ ⤠´ÁÒ¡·ÕèÊØ´ (µ ͧÁÕ¤ Òà» ¹àŢ¡¡íÒÅѧÊͧ)

Starting address of the code banking

¡íÒ˹´áÍ´à´ÃÊàÃÔèÁµ ¹¢Í§áº§¡ ·ÕèºÃèØâ»Ãá¡ÃÁ (ầ¡ ⤠´) ËÃ×Í㪠¤íÒÊÑè§ #pragma BANKAREA(address,otherparam)

Ending address of the code banking

¡íÒ˹´áÍ´à´ÃÊÊØ´· Ò¢ͧầ¡ ·ÕèºÃèØâ»Ãá¡ÃÁ ËÃ×Í㪠¤íÒÊÑè§ #pragma BANKAREAT(otherparam,address)

Use external stack

㪠Êáµç¡·Õè˹ ǤÇÒÁ¨íÒÀÒ¹͡

Use the macro definition

㪠ÁÒâ¤Ã㹡ÒÃàÅ×͡ầ¡

Evaluate the expression for the currently selected bank

¡íÒ˹´ÊÑ­Åѡɳ ËÃ×Íà¤Ã×èͧËÁÒÂ᷹ầ¡ ⤠´·ÕèàÅ×Í¡ã¹» ¨¨ØºÑ¹

Modules tab

àÅ×͡ầ¡ ⤠´ÊíÒËÃѺ¡ÒÃà»ÅÕ蹤 Òã¹ä¿Å Íͺà¨ç¡µ áÅÐäźÃÒÃÕ

ËÁÒÂà赯 : ⤠´áº§¡ ¡§Ôé à» ¹¾×¹é ·ÕÊè ÅѺ«Ñº« ͹áÅÐÂا à¡ÕÂè Çã¹ËÅÒÂÅѡɳЧҹ¢Í§ÅÔ§é à¡Íà ÊíÒËÃѺ ¢ ÍÁÙÅâ´ÂÃÒÂÅÐàÍÕ´ãË ¤¹ ËÒ¨Ò¡¤ÙÁ Í× ¢Í§ LX51


48

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.3.5 Flash

µÑÇàÅ×Í¡ Use Flash mode

ÃÒÂÅÐàÍÕ´ àÅ×͡㪠˹ ǤÇÒÁ¨íÒã¹âËÁ´á¿Åª

FLS file Locked mode

¡íÒ˹´ãË âÁ´ÙÅàª×Íè Áâ§ÍÂÙã ¹ FlashROM áÅÐà¡çº¤ ÒÍ×¹è ã¹ ROM ËÃ×Í㪠¤Òí Êѧè #pragma REFLASH

Start address

¡íÒ˹´áÍ´à´ÃÊàÃÔÁè µ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒá¿Åª ËÃ×Í㪠¤Òí Êѧè #pragma FLASH(address)

Static Variable in ROM

¡íÒ˹´µÑÇá»ÃẺÊáµµÔ¡ã¹ ROM

Reserve Data Space

¡íÒ˹´¾×¹é ·ÕÊè Òí ÃͧÊíÒËÃѺà¡çº¢ ÍÁÙÅ ËÃ×Í㪠¤Òí Êѧè #pragma RESERVE(DATA,n)

Reserve BData Space

¡íÒ˹´¾×¹é ·ÕÊè Òí ÃͧÊíÒËÃѺà¡çº¢ ÍÁÙÅÃдѺºÔµ ËÃ×Í㪠¤Òí Êѧè #pragma RESERVE(ÚBDATA,n)

Reverse Bit Space

¡íÒ˹´¾×¹é ·ÕÊè Òí ÃͧÊíÒËÃѺ㪠§Ò¹ÃдѺºÔµ ËÃ×Í㪠¤Òí Êѧè #pragma RESERVE(ÚBIT,n)

Object Files to be in Flash

¡íÒ˹´ãË ä¿Å Íͺà¨ç¡µ ÍÂÙã ¹ FLASHROM ËÃ×Í㪠¤Òí Êѧè #pragma FLASH(otherparam,objectfilelist)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

49

2.5.3.6 Kernel

¡íÒ˹´ÃٻẺ¡Ò÷íÒ§Ò¹¢Í§â»Ãà¨ç¡µ ẺÁÑŵԷÒÊ ¡¡Ôé§

µÑÇàÅ×Í¡ Use KR-51 kernel

ÃÒÂÅÐàÍÕ´ àÅ×͡㪠à¤Íà à¹Å KR-51 «Ö§è à» ¹Ãкº»¯ÔºµÑ ¡Ô ÒÃÃÕÅä·Á

Kernel model KR-Tiny

àÅ×Í¡âÁà´Å¢Í§à¤Íà à¹ÅẺ Tiny «Ö§è ·íÒ§Ò¹ä´ Ê§Ù ÊØ´ 8 ·ÒÊ¡

KR-Standard Debug

àÅ×Í¡âÁà´Å¢Í§à¤Íà à¹ÅẺ Huge «Ö§è ·íÒ§Ò¹ä´ Ê§Ù ÊØ´ 256 ·ÒÊ¡ àÅ×Í¡äźÃÒÃÕ¢ÂÒÂã¹´Õº¡Ñ

Semaphores

¡íÒ˹´ãË Á¡Õ ÒèѴÊÃ÷ÃѾÂÒ¡Ãà ÇÁ¡Ñ¹áµ ÅзÒÊ¡ Ẻ«ÔÁÁÒ¿ÍÃ

KR-Huge

Time Use the automatic definitions

¡íÒ˹´¡ÒÃẠ§àÇÅÒẺÍѵâ¹ÁѵÔ

Clock : CPU cycles/tick

¡íÒ˹´¨Ñ§ËÇÐàÇÅÒãË «¾Õ ÂÕ Ù ¡íÒ˹´µÑÇËÒä ÒàÇÅÒÊíÒËÃѺ¤ Ò°Ò¹àÇÅÒ 3 ¡ÅØÁ Group 1 ¡íÒ˹´¤ ÒàÇÅÒÊíÒËÃѺ°Ò¹àÇÅÒ·Õè 1 Group 2 ¡íÒ˹´¤ ÒàÇÅÒÊíÒËÃѺ°Ò¹àÇÅÒ·Õè 2 ¨Ò¡°Ò¹àÇÅÒ·Õ1è Group 3 ¡íÒ˹´¤ ÒàÇÅÒÊíÒËÃѺ°Ò¹àÇÅÒ·Õè 3 ¨Ò¡°Ò¹àÇÅÒ·Õ2è

Dividers

ËÁÒÂà赯 : ÊíÒËÃѺ¡ÒÃ㪠§Ò¹à¾×Íè ãË â»Ãà¨ç¡µ ÊÒÁÒö·íÒ§Ò¹ã¹ÅѡɳÐÁÑŵԷÒÊ ¡¡Ô§é ¹Õé ¤ÇÃÈÖ¡ÉÒ ÃÒÂÅÐàÍÕ´¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾ÔÁè àµÔÁä´ ¨Ò¡¤ÙÁ Í× ¢Í§ KR51


50

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2.5.3.7 ROM-Monitor 㹺ҧ¤ÃÑé§ÍÒ¨ÁÕ¤ÇÒÁµ ͧ¡ÒáíÒ˹´â¿Åà´Íà ¢Í§ÅÔ§à¡Íà «Öè§ÊÒÁÒö» ͹â¿Åà´Íà ·Õèµ Í§ ¡ÒÃ㪠§Ò¹ã¹ª ͧ¢ ͤÇÒÁ¢Í§ More ¹Õé Í ҧäáçµÒÁ¤ÇÃ㪠§Ò¹µÒÁ¤ Ò㪠§Ò¹·ÑÇè 仨ÐàËÁÒÐÊÁ·ÕÊè ´Ø ã¹¡ÒÃ㪠»¡µÔ

µÑÇàÅ×Í¡ Use ROM-Monitor

ÃÒÂÅÐàÍÕ´ ¡íÒ˹´ãË ãª ROM-Monitor «Ö§è à» ¹ÎÒà ´áÇà ¾àÔ ÈÉ

Communications Std UART + Timer1

àÅ×Í¡¾Íà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁÁҵðҹ·Õãè ª ä·àÁÍà 1

Std UART + Timer2

àÅ×Í¡¾Íà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁÁҵðҹ·Õãè ª ä·àÁÍà 2

External UART (XEVA)

àÅ×Í¡¾Íà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁẺÀÒ¹͡

àÅ×Í¡¾Íà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁẺ ROM monitor Crystal Frequency (MHz) ¡íÒ˹´¤ÇÒÁ¶Õ¢è ͧ¤ÃÔʵÍÅ·Õãè ª ¡Òí ˹´¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌÔ¡Ò ROM Monitor (Customized) Communication Baud Rate

¡íÒ˹´ÍѵÃҺʹ㹡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ

Microcontroller without clock prescaler (6 clock mode)

àÅ×Í¡ª¹Ô´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·äèÕ Á ÁµÕ ÇÑ ËÒÃÊÑ­­Ò³¹ÒÌÔ¡Ò ËÃ×Í·íÒ§Ò¹ã¹âËÁ´ 6 ä«à¡ÔÅÊÑ­­Ò³¹ÒÌÔ¡Ò

Dynamically modifiable code

àÅ×Í¡ãË »ÃѺ»Ãا¤ Òä´ ã¹¢³Ð·íÒ§Ò¹


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

51

º··Õè 3

¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ â´Â㪠ªÍ¿µ áÇà RIDE ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ´ Ç RIDE ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Âѧ¤§ÅѡɳеÒÁ Áҵðҹ ANSI-C «Ö§è ·íÒãË ¼·Ù ÁÕè ¤Õ ÇÒÁ¤Ø¹ à¤Â¡ÑºÀÒÉÒ C ÍÂÙá Å ÇÊÒÁÒöࢠÒã¨ä´ ·¹Ñ ·Õ ÁÕà¾Õ§ÃÒÂÅÐàÍÕ´ ºÒ§ËÑÇ¢ Í·Õµè Í §·ÃÒºáÅÐࢠÒã¨ã¹â¤Ã§Êà ҧÀÒÉÒ C à¾×Íè Êà ҧâ»Ãá¡ÃÁÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 㹺·¹Õ¨é §Ö ¢Í͸ԺÒÂÊ Ç¹ÊíҤѭ·Õáè µ¡µ Ò§Í͡仨ҡÀÒÉÒ C Áҵðҹ ANSI-C

3.1 â¤Ã§Êà ҧÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC-51 â¤Ã§Êà ҧÀÒÉÒ C ã¹ RC-51 ÁÕÊÇ ¹»ÃСͺËÅÑ¡æ ઠ¹à´ÕÂǡѺÀÒÉÒ C Áҵðҹ ANSI-C ¤×Í ÁÕÊÇ ¹¾ÃÕâ»Ãà«Êà«Íà (preprocessor), Ê Ç¹áÊ´§â»Ãâµä·» (prototype), Ê Ç¹â»Ãá¡ÃÁËÅÑ¡ (main program), Ê Ç¹»ÃСÒȵÑÇá»Ã (variable declare), ¤íÒÊѧè 㹡ÒäǺ¤ØÁ¡ÒÃäËŢͧâ»Ãá¡ÃÁ (control flow) áÅп §¡ ª¹Ñè (function) ´Ñ§µÑÇÍ ҧâ»Ãá¡ÃÁµ Í仹Õé #include <reg51.h> void func1 (void); int func2 (int x,int y ); void main() { int var1; P0=0xCC; func1(); var1=func2(15,12); P0=var1; } void func1(void) { P0=0x55; } int func2(int x, int y) { return (x*y); }

/* Preprocessor */ /* Prototype */ /* Main Program */ /* Variable Declare */ /* call Function */ /* call Arguments function */


52

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.2 ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC51 ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁÀÒÉÒ C ¡ç¨ÐàËÁ×͹¡Ñº¡ÒûÃСÒȵÑÇá»Ãã¹ÀÒÉÒ C ·ÑÇè æ ä» ¤×ͨÐÁÕû٠Ẻ¡ÒûÃСÒȴѧ¹Õé type variable_name;

â´Â·Õè type ¤×Í ª¹Ô´¢ ÍÁÙżÅÅѾ¸ ·µÕè Í §¡ÒáíÒ˹´ variable_name ¤×Í ª×Íè µÑÇá»Ã·Õ»è ÃСÒÈ ª×Íè ·Õãè ª ÊÒí ËÃѺ¤ Ò¤§·Õ,è µÑÇá»Ã áÅп §¡ ª¹Ñè ã¹ÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC-51 ¨ÐàËÁ×͹¡Ñº Áҵðҹ ANSI-C ¤×Í ÊÒÁÒöµÑ§é ª×Íè ·ÕÁè ·Õ §Ñé µÑÇ˹ѧÊ×ÍáÅеÑÇàÅ¢ä´ â´ÂÍÑ¡ÉõÑÇááµ ͧ໠¹µÑÇ˹ѧÊ×Í ËÃ×͵ÑÇ¢Õ´àÊ ¹ãµ _ (underscore) ෠ҹѹé ÍÒ·Ô date_of_month, _ini64 à» ¹µ ¹ «Ö§è ÁÕ¡¯à¡³± ´§Ñ ¹Õé 1. µ ͧäÁ µ§Ñé ª×Íè «éÒí ¡Ñº¤íÒʧǹ (reserved word) ´Ñ§µ Í仹Õé ¡ÅØÁ ·Õè 1 à» ¹¤íÒʧǹã¹ÀÒÉÒ C µÒÁÁҵðҹ ANSI-C auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while

¡ÅØÁ ·Õè 2 à» ¹¤íÒʧǹ㹠RC-51 àͧ «Ö§è ÁÑ¡à» ¹¤íÒʧǹ㹤ÍÁä¾àÅÍà ÀÒÉÒ C ÊíÒËÃѺ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 µÑÇÍ×¹è æ ´ Ç alien, asm, at, bdata, bit, code, data, generic, idta, interrupt, intrinsic, pdata, sbit, sfr, using, xdata

¡ÅØÁ ·Õè 3 à» ¹¤íÒʧǹ㹡óÕ㪠§Ò¹Ê ǹÃÕÅä·Á à¤Íà à¹Å ËÃ×Í KR-51 ã¹ RIDE istack, group, priority, task, xstack

2. ÍÑ¡ÉõÑÇááµ ͧ໠¹µÑÇ˹ѧÊ×ÍËÃ×͵ÑÇ¢Õ´àÊ ¹ãµ _ (underscore) 3. ÍÑ¡ÉõÑǵ Íä»ÊÒÁÒö໠¹ä´ ·§Ñé µÑÇ˹ѧÊ×Í µÑÇàÅ¢ ËÃ×͵ÑÇ¢Õ´àÊ ¹ãµ ¡çä´ 4. ¢¹Ò´¤ÇÒÁÂÒǪ×Íè äÁ à¡Ô¹ 32 µÑÇÍÑ¡ÉÃ

3.3 ¡ÒáíÒ˹´ª¹Ô´¢Í§¤ Ò¤§·Õáè ÅеÑÇá»Ã ã¹â»Ãá¡ÃÁÀÒÉÒ C ·Õ¤è ÍÁä¾àÅÍà RC-51 ࢠÒã¨ÊÒÁÒö¡íÒ˹´ª¹Ô´¢Í§µÑÇá»ÃáÅФ Ò¤§ ·Õäè ´ ËÅÒÂÅѡɳзѧé ã¹áºººÔµ, 亵 , µÑÇàÅ¢¨íҹǹàµçÁ (integer) áÅеÑÇàÅ¢·È¹ÔÂÁ (floating point) ͸ԺÒÂä´ ´Ñ§¹Õé


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

53

3.3.1 ºÔµ (bit) à» ¹¡ÒáíÒ˹´ª¹Ô´µÑÇá»ÃáÅФ Ò¤§·Õ袹Ҵ 1 ºÔµ ¢ ͤÇÃÃÐÇѧ㹡ÒáíÒ˹´µÑÇá»ÃẺ ºÔµ¤×Í äÁ ÊÒÁÒö¡íÒ˹´à» ¹µÑÇá»ÃÍÐàà(array variable) ä´ ´Ñ§µÑÇÍ ҧµ Í仹Õé bit my_flag;

/*

my_flag=1;

/*

¡íÒ˹´ãË µÇÑ á»Ã my_flag à» ¹µÑÇá»Ã¢¹Ò´ 1 ºÔµ */ ૵¤ ÒµÑÇá»Ã my_flag ÁÕ¤Ò à» ¹ 1 */

3.3.2 µÑÇÍÑ¡ÉÃẺÁÕà¤Ã×Íè §ËÁÒ (signed char) áÅÐäÁ ÁàÕ ¤Ã×Íè §ËÁÒ (unsigned char) à» ¹ª¹Ô´µÑÇá»Ãã¹ÀÒÉÒ C Áҵðҹ ÁÕ¢¹Ò´ 1 亵 (8 ºÔµ) â´Â¡íÒ˹´ª ǧ¤ Ò¨íҹǹµÑÇ àÅ¢ÃÐËÇ Ò§ -128 ¶Ö§ 127 ã¹áºº signed char áÅÐ 0 ¶Ö§ 255 ã¹áºº unsigned char ´Ñ§µÑÇÍ ҧ unsigned char var1,var2; /* ¡íÒ˹´µÑÇá»Ã var1áÅÐ var2 à» ¹µÑÇá»ÃẺ unsigned char */ var1=0xA4; /* ãË µÇÑ á»Ã var1 ÁÕ¤Ò àÅ¢°Ò¹ÊԺˡ ෠ҡѺ A4 */ var2=var1; /*

ãË Ê§ ¤ ҢͧµÑÇá»Ã var1 ä»ÂѧµÑÇá»Ã var2 */

3.3.3 µÑÇàÅ¢¨íҹǹàµçÁẺÁÕà¤Ã×Íè §ËÁÒ (signed int) áÅÐäÁ ÁàÕ ¤Ã×Íè §ËÁÒ (unsigned int) à» ¹ª¹Ô´µÑÇá»Ãã¹ÀÒÉÒ C Áҵðҹ ÁÕ¢¹Ò´ 2 亵 (16 ºÔµ) ¡íÒ˹´ª ǧ¤ ÒµÑÇàÅ¢ÃÐËÇ Ò§ -32,768 ¶Ö§ 32,767 ã¹áºº signed char áÅÐ 0 ¶Ö§ 65,535 ã¹áºº unsigned char ´Ñ§µÑÇÍ ҧ unsigned int n1,n2;

/*

n1=10;

/*

n2=2*n1;

/*

¡íÒ˹´µÑÇá»Ã n1áÅÐ n2 à» ¹áºº unsigned int ãË µÇÑ á»Ã n1 ÁÕ¤Ò à· Ò¡Ñº 10 */ Ê §¤ Ò¤íҹdz¢Í§µÑÇá»Ã n1 ¤Ù³´ Ç 2 ä»Âѧ n2

*/

*/

3.3.4 µÑÇàÅ¢¨íҹǹàµçÁª ǧÂÒÇẺÁÕà¤Ã×Íè §ËÁÒ (signed long) áÅÐäÁ ÁàÕ ¤Ã×Íè § ËÁÒ (unsigned long) à» ¹ª¹Ô´µÑÇá»Ãã¹ÀÒÉÒ C Áҵðҹ ÁÕ¢¹Ò´ 4 亵 (32 ºÔµ) â´Â¡íÒ˹´ª ǧ¤ Ò¨íҹǹµÑÇ àÅ¢ÃÐËÇ Ò§ -2,147,483,648 ¶Ö§ 2,147,483,647 ã¹áºº signed long áÅÐ 0 ¶Ö§ 4,294967295 ã¹áºº unsigned long ´Ñ§µÑÇÍ ҧ unsigned long temp;

/*

temp=250000;

/*

¡íÒ˹´µÑÇá»Ã temp à» ¹áºº unsigned long */ ãË µÇÑ á»Ã temp ÁÕ¤Ò à· Ò¡Ñº 250000 */


54

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.3.5 µÑÇàÅ¢¨íҹǹ·È¹ÔÂÁ (float) ,¨íҹǹàµçÁ¤Ù (double) áÅШíҹǹàµçÁ¤Ùª Ç § ÂÒÇ (long double) à» ¹ª¹Ô´µÑÇá»Ã·Õè ÁÕ¢¹Ò´ 4 亵 (32 ºÔµ) ã¹áººµÑÇàÅ¢¨íҹǹ·È¹ÔÂÁ (float), ¢¹Ò´ 6 亵 (48 ºÔµ) ã¹áººµÑÇàÅ¢¨íҹǹàµçÁ¤Ù (double) áÅТ¹Ò´ 7 亵 (56 ºÔµ) ã¹áººµÑÇàÅ¢¨íҹǹàµçÁ¤Ù ª ǧÂÒÇ (long double) µÑÇÍ ҧઠ¹ float f1,f2; f1=25.4; f2=sqrt(f1);

3.3.6 ºÔµÃÕ¨ÊÔ àµÍà (sbit) à» ¹ª¹Ô´µÑÇá»Ã·ÕÁè ¢Õ ¹Ò´ 1 ºÔµ Ê Ç¹ãË­ ¡Òí ˹´ãª ¡ºÑ ÃÕ¨ÊÔ àµÍà ¿§ ¡ ª¹Ñè ¾ÔàÈÉ (SFR: special function register) ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ËÃ×Í¢ ÍÁÙÅ·ÕÃè кØ˹ ǤÇÒÁ¨íÒ·Õàè ¢ Ò¶Ö§ÃдѺºÔµ ä´ àª ¹ã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ 0x20 ¶Ö§ 0x2F ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´Ñ§µÑÇÍ ҧ sbit port0_1=0x81;

// //

sbit switch=P1^3;

// //

switch=0;

// //

¡íÒ˹´µÑÇá»Ã port0_1 ä»Âѧ¾Íà µ 0 ºÔµ 1 ( P0.1) ¢Í§ MCS-51 ¡íÒ˹´µÑÇá»Ã switch ä»Âѧ¾Íà µ 1 ºÔµ 3 ( P1.3) ¢Í§ MCS-51 ÃÕ૵¤ ÒµÑÇá»Ã switch ·Õ¾è Íà µ 1 ºÔµ 3 ( P1.3) ¢Í§ MCS-51 ãË à· Ò¡Ñº 0

3.3.7 ºÔµ¢ ÍÁÙÅ (bdata) à» ¹¡ÒáíÒ˹´ãË µÑÇá»Ã¨Í§¾×é¹·Õèã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅáÃÁÀÒÂã¹·ÕèáÍ´à´ÃÊ 0x20 ¶Ö§ 0x2F «Ö§è ÊÒÁÒÃ¶à¢ Ò¶Ö§ä´ ã¹ÃдѺºÔµ ´Ñ§µÑÇÍ ҧ bdata unsigned char led;

//

¡íÒ˹´µÑÇá»Ã led ÁÕ¢¹Ò´ 8 ºÔµ ã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒáÃÁÀÒÂã¹áÍ´à´ÃÊ 0x20-0x2F ´Ñ§¹Ñ¹é µÑÇá»Ã led ¨Ö§ÊÒÁÒöࢠҶ֧ã¹ÃдѺºÔµä´

sbit a=led^0;

/*

¡íÒ˹´µÑÇá»Ã a á·¹ºÔµ 0 ¢Í§µÑÇá»Ã led

*/

sbit b=led^3;

/*

¡íÒ˹´µÑÇá»Ã b á·¹ºÔµ 3 ¢Í§µÑÇá»Ã led

*/

sbit c=led^7;

/*

¡íÒ˹´µÑÇá»Ã c á·¹ºÔµ 7 ¢Í§µÑÇá»Ã led

*/

// //


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

55

3.3.8 亵 Ã¨Õ ÊÔ àµÍà (sfr) à» ¹ª¹Ô´µÑÇá»Ã·ÕÁè ¢Õ ¹Ò´ 1 亵 (8 ºÔµ) áÅСíÒ˹´ãª ¡ºÑ ÃÕ¨ÊÔ àµÍà ¿§ ¡ ª¹Ñè ¾ÔàÈÉ (SFR) ã¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 «Ö§è â´Â»¡µÔÁ¡Õ Òí ˹´äÇ áÅ Çã¹ä¿Å Ṻµ ¹â»Ãá¡ÃÁÍ ҧ reg51.h ËÃ×Í reg52.h à» ¹µ ¹ ´Ñ§µÑÇÍ ҧµ Í仹Õé sfr P1=0x90;

/*

¡íÒ˹´µÑÇá»Ã P1 ä»Âѧ¾Íà µ 1 (áÍ´à´ÃÊ 90) ¢Í§ MCS-51 */

sfr P2=0xA0;

/*

¡íÒ˹´µÑÇá»Ã P2 ä»Âѧ¾Íà µ 1 (áÍ´à´ÃÊ A0) ¢Í§ MCS-51*/

unsigned int my_data; /*

¡íÒ˹´µÑÇá»Ã my_data à» ¹áºº¨íҹǹàµçÁ

*/

my_data=P1;

/*

Ê §¢ ÍÁÙÅã¹¾Íà µ P1 ¢Í§ MCS-51 ä»ÂѧµÑÇá»Ã my_data

P2=my_data++;

/*

Ê §¢ ÍÁÙÅã¹µÑÇá»Ã my_data ä»Âѧ¾Íà µ P2 ¢Í§ MCS-51 */

*/

3.3.9 亵 Ã¨Õ ÊÔ àµÍà ¤Ù (sfr16) à» ¹ª¹Ô´µÑÇá»Ã·ÕÁè ¢Õ ¹Ò´ 2 亵 (16 ºÔµ) 㪠¡ºÑ ÃÕ¨ÊÔ àµÍà ¿§ ¡ ª¹Ñè ¤Ùã ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 «Öè§â´Â»¡µÔÁÕ¡íÒ˹´äÇ áÅ Çã¹ä¿Å Ṻµ ¹â»Ãá¡ÃÁÍ ҧ reg51.h ËÃ×Í reg52.h ઠ¹¡Ñ¹ ´Ñ§µÑÇÍ ҧµ Í仹Õé Sfr16 T2=0xCC;

//

¡íÒ˹´µÑÇá»Ã T2 ÊíÒËÃѺä·àÁÍà 2 «Ö§è »ÃСͺ´ Ç ÃÕ¨ÊÔ àµÍà T2L ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0xCC áÅÐ ÃÕ¨ÊÔ àµÍà T2H ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0xCD

//

Ê §¢ ÍÁÙÅ 0xAE01 ä»Âѧä·àÁÍà 2

// //

T2=0xAE01;


56

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.4 µÑÇ´íÒà¹Ô¹¡ÒÃã¹â»Ãá¡ÃÁÀÒÉÒ C (Operators) Ạ§ä´ 3 ¡ÅØÁ ¤×Í µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà (arithmetic operator), µÑÇ´íÒà¹Ô¹¡Ò÷ҧ´ Ò¹ ¤ÇÒÁÊÑÁ¾Ñ¹¸ áÅÐÅͨԡ (relation & logic operation) áÅеÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ (bitwise operation)

3.4.1 µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà »ÃСͺ´ Ç µÑÇ´íÒà¹Ô¹¡Òà + * / % ++ -+= -= *= /= %=

¤ÇÒÁËÁÒ ¡Òúǡ ¡ÒÃź ¡Òäٳ ¡ÒÃËÒà ¡ÒÃËÒÃẺàÍÒàÈÉ ¡ÒÃà¾ÔèÁ¤ Ò¢Öé¹Íա˹Ö觤 Ò ¡ÒÃÅ´¤ ÒŧÍա˹Ö觤 Ò ¡Òúǡ¢Öé¹ÍÕ¡´ Ǥ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃÅ´¤ ÒŧÍÕ¡´ Ǥ Ò·Ò§¢ÇÒÁ×Í ¡Òäٳ´ Ǥ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃËÒô Ǥ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃËÒô Ǥ Ò·Ò§¢ÇÒÁ×ÍẺàÍÒàÈÉ

3.4.1.1 ¡Ò÷íÒ§Ò¹¢Í§¡Òà + áÅÐ - ·Õè¤Ç÷ÃÒº µÑÇÍ ҧ·Õè 3.1 unsigned char a = 12; a = a + 3;

¼ÅÅѾ¸ ¤Í× a = 15 ¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ a ÁÕ¤Ò à» ¹ 12 µ ÍÁÒÊѧè ãË a ºÇ¡¡Ñº 3 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 15 à¡çºäÇ ·Õè a ÍÕ¡¤Ãѧé

µÑÇÍ ҧ·Õè 3.2 unsigned char a = 12; a = a - 3;

¼ÅÅѾ¸ ¤Í× a = 9 ¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ a ÁÕ¤Ò à» ¹ 12 µ ÍÁÒÊѧè ãË a ź¡Ñº 3 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 9 à¡çºäÇ ·Õè a ÍÕ¡¤Ãѧé ˹֧è


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

57

3.4.1.2 ¡ÒÃËÒÃẺ / áÅСÒÃËÒÃẺ % ÁÕ¤ÇÒÁᵡµ Ò§¡Ñ¹µÃ§·Õè (¡) ¡ÒÃËÒÃẺ / à» ¹¡ÒÃËÒÃà¾×Íè à¡çºà©¾ÒмÅÅѾ¸ àÅ¢¨íҹǹàµçÁ (¢) ¡ÒÃËÒÃẺ % à» ¹¡ÒÃËÒÃà¾×Íè à¡çºà©¾ÒмÅÅѾ¸ ·àÕè » ¹àÈɢͧ¡ÒÃËÒà µÑÇÍ ҧ·Õè 3.3 unsigned char x = 10; y = x/3; z = x%3;

x , y , z;

¼ÅÅѾ¸ ¤Í× y = 9 áÅÐ z = 1 ¡Ò÷íÒ§Ò¹ : y = x/3; à y = 10/3 à y = 3 (¨íҹǹ¤ÃÑ§é ·ÕËè ÒÃŧµÑÇ) z = x%3; à z = 10%3 à z = 1 (àÈÉ·Õàè ËÅ×ͨҡ¡ÒÃËÒÃ)

3.4.1.3 ¡ÒÃà¾ÔèÁ¤ ÒẺ ++ áÅСÒÃÅ´¤ ÒẺ - µÑÇÍ ҧ·Õè 2.4 int

y = 5; y++;

¼ÅÅѾ¸ ¤Í× y = 6 ¡Ò÷íÒ§Ò¹ : àÃÔèÁµ ¹ y ÁÕ¤ Òà» ¹ 5 µ ÍÁÒÊÑè§ãË ¤ Ò y ºÇ¡¡Ñº 1 áŠǹíÒ¼ÅÅѾ¸ ·Õèä´ ¤×Í 6 ä»à¡çºäÇ ·Õè y ÍÕ¡¤Ãѧé Ë¹Ö§è ´Ñ§¹Ñ¹é ¤íÒÊѧè y++; ¨Ö§ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y + 1;

µÑÇÍ ҧ·Õè 3.5 int y--;

y = 5;

¼ÅÅѾ¸ ¤Í× y = 4 ¡Ò÷íÒ§Ò¹ : àÃÔèÁµ ¹ y ÁÕ¤ Òà» ¹ 5 µ ÍÁÒÊÑè§ãË ¤ Ò y ź¡Ñº 1 áŠǹíÒ¼ÅÅѾ¸ ·Õèä´ ¤×Í 4 ä»à¡çºäÇ ·Õè y ÍÕ¡¤Ãѧé Ë¹Ö§è ´Ñ§¹Ñ¹é ¤íÒÊѧè y ; ¨Ö§ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y - 1;


58

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.4.1.4 ¡ÒÃà¾ÔèÁ¤ ÒẺ += áÅСÒÃÅ´¤ ÒẺ - = ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y +=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y + a; y -=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y - a; µÑÇÍ ҧ·Õè 3.6 int x = 100; x += 10;

¼ÅÅѾ¸ ¤Í× x = 110

3.4.1.5 ¡Òäٳ¤ ÒẺ *= , ¡ÒÃËÒä ÒẺ /= áÅСÒÃËÒä ÒẺ %= ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y *=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº

y = y * a;

y /=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº

y = y/a;

y %=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº

y = y%a;

µÑÇÍ ҧ·Õè 3.7 int

i , x , y , z;

i = 120; x *= 4; y /= 4; z %= 4;

¼ÅÅѾ¸ ¤Í× x = 480 , y = 30 áÅÐ z = 0


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.4.2 µÑÇ´íÒà¹Ô¹¡Ò÷ҧ´ Ò¹¤ÇÒÁÊÑÁ¾Ñ¹¸ áÅÐÅͨԡ

l

59

¡ÒáÃзíҢͧµÑÇ´íÒà¹Ô¹¡ÒÃ㹡ÅØÁ ¹Õé ¨ÐãË ¼ÅÅѾ¸ ¨Ò¡¡ÒõÃǨÊͺ໠¹ 1 ¶ Òà§×Íè ¹ä¢¹Ñ¹é à» ¹ ¨ÃÔ§ (true) áÅÐà» ¹ 0 àÁ×Íè à§×Íè ¹ä¢à» ¹à·ç¨ (false) ¡Ò÷íÒ§Ò¹¢Í§µÑÇ´íÒà¹Ô¹¡ÒÃ㹡ÅØÁ ¹ÕÊé ÃØ»ä´ ´§Ñ ¹Õé µÑÇ´íÒà¹Ô¹¡Òà == != > < >= <= ! && ||

¤ÇÒÁËÁÒ ෠ҡѺ äÁ ෠ҡѺ ÁÒ¡¡Ç Ò ¹ ÍÂ¡Ç Ò ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ ¹ ÍÂ¡Ç ÒËÃ×Í෠ҡѺ äÁ 㪠(¹Íµ : NOT) áÅÐ (á͹´ : AND) ËÃ×Í (ÍÍà : OR)

µÑÇÍ ҧ·Õè 3.8

¶ Ò¡íÒ˹´ãË a = 10 , b = 4 áÅÐ c = 0x0A à§×èÍ¹ä¢ a>b (a ÁÒ¡¡Ç Ò b) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×èÍ¹ä¢ a>c (a ÁÒ¡¡Ç Ò c) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×èÍ¹ä¢ a>=c (a ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ c) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) (à¾ÃÒÐ 0x0A = 10 °Ò¹ÊÔº) à§×èÍ¹ä¢ a != b (ËÁÒ¶֧ a äÁ ෠ҡѺ b) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×èÍ¹ä¢ a != c (ËÁÒ¶֧ a äÁ ෠ҡѺ c) à§×Íè ¹ä¢à» ¹à·ç¨ (false)

¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0

3.4.2.1 ¡ÒÃ㪠µÇÑ ´íÒà¹Ô¹¡Òà ! , && , || à»ÃÕºà·Õº»ÃÐâ¤à§×Íè ¹ä¢ ¼ÅÅѾ¸ ¢Í§¡Òà ! (NOT) ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·Õèä´ ! false true(1) ! true false(0) ÊÃØ»Ç Ò¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒ´ Ç NOT ¨Ðä´ ¼ÅÅѾ¸ ·µÕè ç¢ ÒÁ¹Ñ¹è àͧ


60

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¼ÅÅѾ¸ ¢Í§¡ÒÃà»ÃÕºà·Õº¢Í§»ÃÐ⤠2 »ÃÐ⤴ Ç¡Òà && (AND) ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·Õèä´ false && false false(0) false && true false(0) true && false false(0) true && true true(1) ÊÃØ»Ç Ò¼ÅÅѾ¸ ¢Í§¡Òà AND ¨Ðà» ¹ false ·Ñ¹·Õ ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ false ¼ÅÅѾ¸ ¡ÒÃà»ÃÕºà·Õº»ÃÐ⤠2 »ÃÐ⤴ Ç¡Òà ||(OR) (|| à» ¹¤Õº ¹¢Í§»ØÁ \) ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·Õèä´ false || false false(0) false || true true(1) true || false true(1) true || true true(1) ÊÃØ»Ç Ò¼ÅÅѾ¸ ¢Í§¡Òà OR ¨Ðà» ¹ true ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ true µÑÇÍ ҧ·Õè 3.9 ¶ Ò¡íÒ˹´ãË a = 10, b = 4 áÅÐ c = 0x0A à§×èÍ¹ä¢ a>b à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×èÍ¹ä¢ a>c à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×èÍ¹ä¢ a>=c à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×èÍ¹ä¢ a != b à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×èÍ¹ä¢ a != c à§×Íè ¹ä¢à» ¹à·ç¨ (false) àÁ×Íè 㪠µÇÑ ´íÒà¹Ô¹¡Òà ! à§×èÍ¹ä¢ !(a>b) à§×èÍ¹ä¢ !(a>c) à§×èÍ¹ä¢ !(a>=c ) à§×èÍ¹ä¢ !(a != b) à§×èÍ¹ä¢ !(a != c)

¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 (à¾ÃÒÐ 0x0A = 10 °Ò¹ÊÔº)\ ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0

à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§(true)

¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

61

àÁ×Íè 㪠µÇÑ ´íÒà¹Ô¹¡Òà && à§×èÍ¹ä¢ !(a>b) && (a>=c) ¼ÅÅѾ¸ à» ¹ false(0) ËÁÒ¶֧ ¡ÅѺ¼ÅÅѾ¸ ¢Í§¡ÒÃá͹´ ÃÐËÇ Ò§ÃÐËÇ Ò§à§×Íè ¹ä¢ a ÁÒ¡¡Ç Ò b ¡Ñº a ÁÒ¡¡Ç ÒËÃ×Í à· Ò¡Ñº c «Ö§è ¼Å¢Í§¡ÒÃá͹´ à» ¹¨ÃÔ§ áµ ¶¡Ù ¡ÅѺãË à» ¹µÃ§¢ ÒÁ´ ǵÑÇ´íÒà¹Ô¹¡Òà ! ¨Ö§ä´ ¼ÅÅѾ¸ à» ¹ false à§×èÍ¹ä¢ (a != b) && (a>=c) ¼ÅÅѾ¸ à» ¹ true(1) à§×èÍ¹ä¢ (a != b) && !(a != b) ¼ÅÅѾ¸ à» ¹ false(0) àÁ×Íè 㪠µÇÑ ´íÒà¹Ô¹¡Òà || à§×èÍ¹ä¢ !(a>b) || (a>=c) à§×èÍ¹ä¢ (a != b) || (a>=c) à§×èÍ¹ä¢ (a != b) || !(a != b) à§×èÍ¹ä¢ !(a>=c) || !(a != b)

¤ Ò¼ÅÅѾ¸ à» ¹ true(1) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) ¤ Ò¼ÅÅѾ¸ à» ¹ false(0)

3.4.3 µÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ ¡ÒáÃзíÒ㹡ÅØÁ ¹Õàé » ¹¡ÒáÃзíÒ·Õàè ¢ Ò¶Ö§¢ ÍÁÙÅã¹ÃдѺºÔµ â´Â·Õ¤è Ò ¢Í§áµ ÅкԵ໠¹ä´ 2 ¤ Ò¤×Í 1 ËÃ×Í 0 à· Ò¹Ñ¹é ¡ÒáÃзíҢͧµÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµÊÃØ»ä´ ´Ñ§¹Õé µÑÇ´íÒà¹Ô¹¡Òà ~ & | ^ << >> <<= >>= &= |= ^=

¤ÇÒÁËÁÒ ¡ÅѺ¤ ҢͧºÔµ¢ ÍÁÙÅ ¡ÒÃá͹´ ºÔµ ¡ÒÃÍÍà ºÔµ ¡ÒÃàÍ硤ÅÙ«¿Õ -ÍÍà ºµÔ àÅ×è͹ºÔµä»·Ò§« Ò àÅ×è͹ºÔµä»·Ò§¢ÇÒ àÅ×è͹ºÔµä»·Ò§« ÒÂáÅ ÇãË à· Ò¡Ñº àÅ×è͹ºÔµä»·Ò§¢ÇÒáÅ ÇãË à· Ò¡Ñº ·íÒ¡ÒÃá͹´ áÅ ÇãË à· Ò¡Ñº ·íÒ¡ÒÃÍÍà áÅ ÇãË à· Ò¡Ñº ·íÒ¡ÒÃàÍ硤ÅÙ«¿Õ -ÍÍà áÅ ÇãË à· Ò¡Ñº


62

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¼ÅÅѾ¸ ¢Í§¡Òà ~ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ~0 ~1

¼ÅÅѾ¸ 1 0

ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒ´ Ç ~ ¨Ðä´ ¤Ò ¢Í§Åͨԡ·Õµè ç¢ ÒÁ ¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ 0&0 0 &1 1&0 1&1

¼ÅÅѾ¸ ·äÕè ´ 0 0 0 1

ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ¨Ðà» ¹ 0 ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ 0 ¼ÅÅѾ¸ ¢Í§¡Òà | ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·äÕè ´ 0|0 0 0|1 1 1|0 1 1|1 1 ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡Òà | ẺºÔµµ ͺԵ ¨Ðà» ¹ 1 ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ 1 ¼ÅÅѾ¸ ¢Í§¡Òà ^ ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·äÕè ´ 0^0 0 0 ^1 1 1^0 1 1^1 0 ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡Òà ^ ẺºÔµµ ͺԵ ¨Ðà» ¹ 0 ·Ñ¹·Õ ËÒ¡·Ñ§é ¤ÙÁ ¤Õ Ò àËÁ×͹¡Ñ¹


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

63

µÑÇÍ ҧ·Õè 3.10 unsigned char a , b , m , n , x , y , z; bit c; a = 0x9C; b = 0x46; c = 0; m = a & c; n = a | (~c); x = a & b; y = a | b; z = a ^ b;

¼ÅÅѾ¸ m = 0

ÇÔ¸Õ¤Ô´

n = 0x85

x = 0x04

y = 0xDE

z = 0xDA

à¹×Íè §¨Ò¡à» ¹¡ÒáÃзíÒẺºÔµµ ͺԵ à¾×Íè ¤ÇÒÁÊдǡ¤ÇÃá»Å§¢ ÍÁÙŨҡàÅ¢°Ò¹ÊԺˡ໠¹àÅ¢°Ò¹Êͧ a = 0x9C à 10011100 b = 0x46 à 01000110 c = 0 à 00000000 ~c = 1 à 00000001 m=a&c

& ¼ÅÅѾ¸

m=a&c

1 0 0 1 1 1 0 0 0x9C

a

0 0 0 0 0 0 0 0 0x00

c

0 0 0 0 0 0 0 0 0x00

m

1 0 0 1 1 1 0 0 0x9C

a

0 0 0 0 0 0 0 1 0x01

c

1 1 1 1 1 1 1 0 0x01

~c

1 1 1 1 1 1 1 0 0xFE

m

1 0 0 1 1 1 0 0 0x9C

a

0 1 0 0 0 1 1 0 0x46

b

0 0 0 0 0 1 0 0 0x04

x

1 0 0 1 1 1 0 0 0x9C

a

0 1 0 0 0 1 1 0 0x46

b

1 1 0 1 1 1 1 0 0xDE

y

1 0 0 1 1 1 0 0 0x9C

a

0 1 0 0 0 1 1 0 0x46

b

1 1 0 1 1 0 1 0 0xDA

z

n = a|(~c)

| ¼ÅÅѾ¸

n = a|(~c)

x=a&b

& ¼ÅÅѾ¸

x=a&b

y=a|b

& ¼ÅÅѾ¸

y=a|b

z=a^b

& ¼ÅÅѾ¸

y=a|b


64

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.4.4 ¡ÒÃ㪠»ÃÐ⪹ ¨Ò¡µÑÇ´íÒà¹Ô¹¡Ò÷ҧÅͨԡ¡Ñº¢ ÍÁÙÅã¹ÃдѺºÔµ 㹺ҧ¤ÃÑ§é ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÍÒ¨ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧµÑ´¢ ÍÁÙÅ·Õäè ´ ºÒ§Ê ǹÍÍ¡ à¾×Íè ¹íÒ¼ÅÅѾ¸ ·Õäè ´ ä»á»Å§¤ ÒËÃ×Í㪠»ÃÐ⪹ Í ҧÍ×¹è ·Õàè Ëç¹ä´ Í ҧªÑ´à¨¹¤×Í ¡ÒÃàÅ×͡੾ÒТ ÍÁÙźҧºÔµ·Õµè Í § ¡ÒÃä»ãª §Ò¹ ã¹·Õ¹è ÁÕ ´Õ Ç Â¡Ñ¹ 3 µÑÇÍ ҧ¤×Í (¡) ¡ÒùíÒ੾ÒТ ÍÁÙÅ 4 ºÔµº¹ä»ãª §Ò¹ ËÒ¡µ ͧ¡ÒùíÒ੾ÒТ ÍÁÙÅ 4 ºÔµº¹ä»ãª â´Â¢ ÍÁÙÅ 4 ºÔµÅ Ò§µ ͧà¤ÅÕÂà ãË à» ¹ 0 ÇÔ¸¡Õ Òà ¤×Í ¹íÒ¢ ÍÁÙŴѧ¡Å ÒÇä»á͹´ ¡ºÑ 0xF0 ´Ñ§¹Õé ºÔµ

4 ºÔµº¹ %

$

#

4 ºÔµÅ Ò§ "

!

¢ ÍÁÙÅàÅ¢ °Ò¹ÊԺˡ

µÑÇá»Ã

1 1 1 1 0 0 0 0 0xF0 &

x

x

x

x

x

x

x

x

x

¼ÅÅѾ¸

x

x

x

x 0 0 0 0 0xx0

@=J @=J

x à» ¹¤ Òà´ÔÁäÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§ àÇ ¹ã¹ª ͧàÅ¢°Ò¹ÊԺˡ x µÑÇ·Õµè Í ¨Ò¡àÅ¢ 0 à» ¹à¤Ã×Íè §ËÁÒ¡íҡѺàÅ¢°Ò¹ÊԺˡ

¨Ò¡¼Å¡Ò÷íÒ§Ò¹ÊÑ§à¡µä´ ÇÒ ¢ ÍÁÙÅ 4 ºÔµº¹¤§·Õè áµ 4 ºÔµÅ Ò§¡ÅÒÂà» ¹ 0 ·´Å᷹ͧ¤ Ò dat à» ¹ 0x52 ¨Ðä´ dat = 0x52; dat = dat & 0xF0;

¼ÅÅѾ¸ ¤Í× dat

= 0x50

(¢) ¡ÒùíÒ੾ÒТ ÍÁÙÅ 4 ºÔµÅ Ò§ä»ãª §Ò¹ ¹íÒ¢ ÍÁÙÅ·Õµè Í §¡ÒÃä»á͹´ ¡ºÑ 0x0F ¨Ð·íÒãË ¤Ò 4 ºÔµÅ Ò§¡ÅÒÂà» ¹ 0 ÁÕû٠Ẻ¡Ò÷íÒ§Ò¹´Ñ§¹Õé ºÔµ

4 ºÔµº¹ %

$

#

4 ºÔµÅ Ò§ "

!

¢ ÍÁÙÅàÅ¢ °Ò¹ÊÔ ºË¡

µÑÇá»Ã

0 0 0 0 1 1 1 1 0x0F &

¼ÅÅѾ¸

x

x

x

x

x

x

x

x

x

0 0 0 0 x

x

x

x 0x0x

@=J @=J

x à» ¹¤ Òà´ÔÁäÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§ àÇ ¹ã¹ª ͧàÅ¢°Ò¹ÊԺˡ x µÑÇ·Õµè Í ¨Ò¡àÅ¢ 0 à» ¹à¤Ã×Íè §ËÁÒ¡íҡѺàÅ¢°Ò¹ÊԺˡ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

65

¨Ò¡¼Å¡Ò÷íÒ§Ò¹ÊÑ§à¡µä´ ÇÒ ¢ ÍÁÙÅ 4 ºÔµÅ Ò§ (ºÔµ 3-0) ¤§·Õè áµ 4 ºÔµº¹ (ºÔµ 7-4) ¡ÅÒÂà» ¹ 0 ·´Å᷹ͧ¤ Ò dat à» ¹ 0x52 ¨Ðä´ dat = 0x52; dat = dat & 0x0F;

¼ÅÅѾ¸ ¤Í× dat

= 0x02

(¤) ¡ÒÃàÅ×Í¡á»Å§¢ ÍÁÙźҧºÔµ ¶ Òµ ͧ¡ÒÃãË ¢Í ÁÙÅ·Õºè µÔ ã´à» ¹ 1 ãË ¹Òí ¢ ÍÁÙŹѹé ä»ÍÍà ¡ºÑ ¤ Ò¤§·Õ¤è Ò Ë¹Ö§è ·ÕÁè ºÕ µÔ µíÒá˹ § ´Ñ§¡Å ÒÇà» ¹ 1 à¹×Íè §¨Ò¡¢ ÍÁÙÅ 1 ÍÍà ¡ºÑ ¤ Òã´æ ¨Ðä´ ¼ÅÅѾ¸ à» ¹ 1 µÑÇÍ ҧ µ ͧ¡ÒÃãË ºµÔ 0,4,7 ¢Í§µÑÇá»Ã dat à» ¹ 1 Ê Ç¹ºÔµÍ×¹è ÂѧÁÕ¤Ò à· Òà´ÔÁ â´Â dat ÁÕ¤Ò à· Ò¡Ñº 0x52 ¤ Ò¤§·Õ·è ¨Õè йíÒÁÒÍÍà ´Ç ¤×Í 10010001B ËÃ×Í 0x91 à¢Õ¹â»Ãá¡ÃÁä´ à» ¹ dat = 0x52; dat = dat | 0x91;

áÊ´§¡Ò÷íÒ§Ò¹ä´ ´Ñ§¹Õé ºÔµ

4 ºÔµº¹ %

$

#

4 ºÔµÅ Ò§ "

!

¢ ÍÁÙÅàÅ¢ °Ò¹ÊԺˡ

µÑÇá»Ã

1 0 0 1 0 0 0 1 0x91 |

¼ÅÅѾ¸

x

x

1 x

x x

x

x

x

x

x 1 x

x

x 1

x

@=J

NF*

@=J

x à» ¹¤ Òà´ÔÁäÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§ àÇ ¹ã¹ª ͧàÅ¢°Ò¹ÊԺˡ x µÑÇ·Õµè Í ¨Ò¡àÅ¢ 0 à» ¹à¤Ã×Íè §ËÁÒ¡íҡѺàÅ¢°Ò¹ÊԺˡ NF* ¡íÒ˹´äÁ ä´


66

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.4.5 ¡ÒÃàÅ×Íè ¹ºÔµ 㹡ÒÃàÅ×Íè ¹ºÔµ¨Ðµ ͧºÍ¡¨íҹǹ¤ÃÑ§é ¡ÒÃàÅ×Íè ¹´ ÇÂÇ Ò µ ͧ¡ÒÃãË Á¡Õ ÒÃàÅ×Íè ¹¡Õ¤è Ãѧé ઠ¹ dat = dat<<4; ËÁÒ¶֧ãË àÅ×Íè ¹ºÔµ¤ Ò¢ ÍÁÙÅ dat ä»·Ò§« Ò 4 ¤Ãѧé áŠǼÅÅѾ¸ ·Õäè ´ à¡çºäÇ ·Õè dat àËÁ×͹à´ÔÁ ËÁÒ¶֧ãË àÅ×Íè ¹ºÔµ¤ Ò¢ ÍÁÙÅ dat ä»·Ò§¢ÇÒ 1 ¤Ãѧé áŠǼÅÅѾ¸

dat = dat>>1;

·Õäè ´ à¡çºäÇ ·Õè dat àËÁ×͹à´ÔÁ µÑÇÍ ҧ·Õè 3.11

unsigned char dat , x1 , x2 , x3 , x4; dat = 0x93; x1 = dat<<1; x2 = dat<<2; x3 = dat<<3; x4 = dat<<4;

¼ÅÅѾ¸ ¤×Í x1 x2 x3 x4

= = = =

0x26 0x4C 0x98 0x30

(¤ ÒäÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§) áÊ´§¡Ò÷íÒ§Ò¹´Ñ§ã¹µÒÃÒ§

dat = 0x93

µÑÇá»Ã

ºÔµ %

$

#

"

!

¼ÅÅѾ¸

dat

1 0 0 1 0 0 0 1 0x91

X1 = dat<<1

0 0 1 0 0 1 1 0 0x26

X2 = dat<<2

0 1 0 0 1 1 0 0 0x4C

X3 = dat<<3

1 0 0 1 1 0 0 0 0x98

X4 = dat<<4

0 0 1 1 0 0 0 0 0x30


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

67

µÑÇÍ ҧ·Õè 3.12 unsigned char a = 0x7A; b = 0x16; c = 0xFD;

a , b , c;

a &= 0x3C; b |= 0x51; c ^= 0xD0;

¼ÅÅѾ¸ ¤×Í a = 0x38 b = 0x57 c = 0x2D

ÇÔ¸Õ¤Ô´ ¡Ã³Õ a &= 0x3C; ¨Ò¡ a &= 0x3C ËÁÒ¶֧ a = a & 0x3C à» ¹¡ÒùíÒ¤ Ңͧ a (¤×Í 0x7A) ä»á͹´ ¡Ñº 0x3C áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ à¡çº·Õè a ÍÕ¡¤Ãѧé ˹֧è áÊ´§¼Å¡Ò÷íÒ§Ò¹ä´ ´§Ñ ¹Õé ºÔµ

%

$

#

"

!

¢ ÍÁÙÅàÅ¢°Ò¹ÊԺˡ

0 1 1 1 1 0 1 0

a = 0x7A

0 0 1 1 1 1 0 0

0x3C

¼ÅÅѾ¸ a 0 0 1 1 1 0 0 0

0x38

&

¡Ã³Õ b|=0x51 ¨Ò¡ b |= 0x51 ËÁÒ¶֧ b = b & 0x51 à» ¹¡ÒùíÒ¤ Ңͧ b (¤×Í 0x16) ä»ÍÍà ¡ºÑ 0x51 áŠǹíÒ ¼ÅÅѾ¸ ·äÕè ´ à¡çº·Õè b ÍÕ¡¤Ãѧé ˹֧è áÊ´§¼Å¡Ò÷íÒ§Ò¹ä´ ´§Ñ ¹Õé ºÔµ

%

$

#

"

!

¢ ÍÁÙÅàÅ¢°Ò¹ÊԺˡ

0 0 0 1 0 1 1 0

b = 0x16

0 1 0 1 0 0 0 1

0x51

¼ÅÅѾ¸ b 0 1 0 1 0 1 1 1

0x57

|


68

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¨Ò¡ c ^= 0xD0; ËÁÒ¶֧ c = c & 0xD0 à» ¹¡ÒùíÒ¤ Ңͧ c (¤×Í 0xFD) ä»á͹´ ¡Ñº 0xD0 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ à¡çº·Õè c ÍÕ¡¤Ãѧé ˹֧è áÊ´§¼Å¡Ò÷íÒ§Ò¹ä´ ´§Ñ ¹Õé ºÔµ

%

$

#

"

!

¢ ÍÁÙÅàÅ¢°Ò¹ÊԺˡ

1 1 1 1 1 1 0 1

c = 0xFD

1 1 0 1 0 0 0 0

0xD0

¼ÅÅѾ¸ b 0 0 1 0 1 1 0 1

0x2D

^

µÑÇÍ ҧ·Õè 3.13 unsigned char dat = 0x86;

dat;

dat = dat & 0xF0;

/*

dat = dat>>4;

/*

dat = dat | 0x30;

/*

¼ÅÅѾ¸ ¤×Í ÇÔ¸¤Õ ´Ô

ºÃ÷Ѵ·Õè 1 ºÃ÷Ѵ·Õè 2 ºÃ÷Ѵ·Õè 3

*/ */ */

dat = 0x38

/* ºÃ÷Ѵ·Õ1è */ dat = dat & 0xF0; à dat = 0x86 & 0xF0 à dat = 0x80

/* ºÃ÷Ѵ·Õ2è */ dat = dat>>4; à dat = 0x80>>4 à dat = 0x08

/* ºÃ÷Ѵ·Õ3è */ dat = dat | 0x30; à dat = 0x08 | 0x30 à dat = 0x38

¨Ò¡¤íÒÊÑ§è ·Ñ§é 3 ºÃ÷Ѵ ÊÒÁÒöà¢Õ¹ãË ÍÂÙà ÇÁ¡Ñ¹à» ¹ºÃ÷Ѵà´ÕÂÇä´ ´§Ñ ¹Õé dat = ((dat & 0xF0)>>4) | 0x30;

¡ç¨ÐãË ¼ÅÅѾ¸ dat = 0x38 ઠ¹¡Ñ¹ áµ ÍÒ¨·íÒãË ´àÙ ¢ Òã¨ÂÒ¡

µÑÇÍ ҧ·Õè 3.14 unsigned char convert = 0; dat = 0x86;

dat ,convert ;

convert = dat & 0xF0;

/*

convert = convert>>4;

/*

convert = convert | 0x30;

/*

ºÃ÷Ѵ·Õè 1 ºÃ÷Ѵ·Õè 2 ºÃ÷Ѵ·Õè 3

*/ */ */


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¼ÅÅѾ¸ ¤×Í convert = 0x38

(µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍ é ¡Ñ ÉÃ

l

69

8 )

dat = 0x86

ÇÔ¸¤Õ ´Ô /*

ºÃ÷Ѵ·Õè 1

*/

convert = dat & 0xF0; à convert = 0x86 & 0xF0 à

/*

ºÃ÷Ѵ·Õè 2

convert = 0x80

*/

convert = convert >>4; à convert = 0x80>>4 à convert = 0x08

/*

ºÃ÷Ѵ·Õè 3

*/

convert = convert | 0x30; à convert = 0x08 | 0x30 à convert = 0x38

ãË Ê§Ñ à¡µÇ Ò ¤ Ңͧ dat ¹Ñ¹é ÁÕ¤Ò à· Ò¡ÑºµÍ¹áá¤×Í 0x86 à¾ÃÒж֧áÁ ÇÒ ¨ÐÁÕ¡ÒáÃзíÒµ Ò§æ ¡Ñº dat áµ äÁ Á¡Õ ÒùíÒ¤ Ò¡ÅѺࢠÒä»à¡çº·Õè dat áµ ¹Òí ¼Å¢Í§¡Ò÷íÒ§Ò¹¹Ñ¹é ä»à¡çºäÇ ·Õè convert á·¹ «Ö§è µ Ò§¨Ò¡ µÑÇÍ ҧ·Õè 2.13 ·Õ¼è Ò ¹ÁÒ ¨Ò¡¤íÒÊÑ§è ·Ñ§é 3 ºÃ÷Ѵ ÊÒÁÒöà¢Õ¹ãË ÍÂÙà ÇÁ¡Ñ¹à» ¹ºÃ÷Ѵà´ÕÂÇä´ ´§Ñ ¹Õé convert = ((dat & 0xF0)>>4) | 0x30;

ãË ¼ÅÅѾ¸ convert = 0x38 ઠ¹¡Ñ¹

µÑÇÍ ҧ·Õè 3.15 unsigned char dat , high , low ; high = low = 0;

°Ò¹ÊԺˡ ºÃ÷Ѵ·Õè 1*/ ºÃ÷Ѵ·Õè 2 */ ºÃ÷Ѵ·Õè 3 */ ºÃ÷Ѵ·Õè 4 */

dat = 0x49;

/* 0x49

high = dat /10;

/*

high = high | 0x30;

/*

low = dat%10;

/*

low = low | 0x30;

/*

à 73

°Ò¹ÊÔº

¼ÅÅѾ¸ ¤×Í high = 0x37 low = 0x33

(µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà 7 ) (µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà 3 )

dat = 0x49

ÇÔ¸¤Õ ´Ô /* ºÃ÷Ѵ·Õè 1 */ high = dat /10;à high = 0x49/10 à high = 0x07

*/


70

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

/* ºÃ÷Ѵ·Õè 2 */ high = high | 0x30; ==> high = 0x07 | 0x30 ==> high = 0x37

/* ºÃ÷Ѵ·Õè 3 */ low = dat%10;==> low =

0x49%10 ==> low = 0x03

/* ºÃ÷Ѵ·Õè 4 */ low = low | 0x30; ==> low = 0x03 | 0x30 ==> low = 0x33

¨Ò¡¤íÒÊÑ§è ºÃ÷Ѵ·Õè 1 áÅÐ 2 ÊÒÁÒöà¢Õ¹ãË ÍÂÙà ÇÁ¡Ñ¹à» ¹ºÃ÷Ѵà´ÕÂÇä´ ´§Ñ ¹Õé high = (dat /10) | 0x30;

áÅШҡ¤íÒÊÑ§è ºÃ÷Ѵ·Õè 3 áÅÐ 4 ÊÒÁÒöà¢Õ¹ãË ÍÂÙà ÇÁ¡Ñ¹à» ¹ºÃ÷Ѵà´ÕÂÇä´ ´§Ñ ¹Õé low = (dat %10) | 0x30;

µÑÇÍ ҧ·Õè 3.16 unsigned char dat , result; result = 0x00; dat = 0xB4; result = (((dat & 0xF0)>>4) - 9) | (0x40);

¼ÅÅѾ¸ ¤×Í result = 0x42

(µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà B )

dat = 0xB4

ÇÔ¸¤Õ ´Ô Ạ§à» ¹¢Ñ¹é æ â´Âµ ͧ¶Í´¡ÒáÃзíÒÀÒÂã¹Ç§àÅ纴 Ò¹ã¹ÊØ´¡ ͹ ´Ñ§¹Õé ¢Ñ¹é ·Õè 1 dat & 0xF0 à 0xB4 & 0xF0 à 0xB0

¢Ñ¹é ·Õè 2 (dat & 0xF0)>>4 à

(0xB0)>>4 à 0x0B

¢Ñ¹é ·Õè 3 ((dat & 0xF0)>>4) - 9 à 0xB0 - 9 à 0x02

(11- 9 = 2 ËÃ×Í 0x02°Ò¹ÊԺˡ)

¢Ñ¹é ·Õè 4 (((dat & 0xF0)>>4) - 9) | (0x40)à 0x02 | 0x40 à 0x42

´Ñ§¹Ñé¹ result = 0x42


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

71

µÑÇÍ ҧ·Õè 3.17 unsigned char dat , x1 , x2 , x3; x1 = x2 = x3 = 0; dat = 0xEE;

/*

0xEE °Ò¹ÊԺˡ à 238 °Ò¹ÊÔº

*/

x1 = (dat/100) | 0x30; x2 = ((dat%100)/10) | 0x30; x3 = ((dat%100)%10) | 0x30;

¼ÅÅѾ¸ ¤×Í x1 = 0x32 x2 = 0x33 x3 = 0x38

(µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà 2 ) (µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà 3 ) (µÃ§¡ÑºÃËÑÊáÍÊ¡ÕÍé ¡Ñ Éà 8 )

dat = 0xEE

3.5 µÑÇá»ÃÍÐààáÅо͹ àµÍà ã¹ÀÒÉÒ C 㹡ÒþѲ¹ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç Ââ»Ãá¡ÃÁÀÒÉÒ C º ͤÃÑ§é ·ÕÁè ¡Ñ ãª µÇÑ á»ÃÍÐààáÅÐ µÑÇá»Ã¾Í¹ àµÍà ࢠÒÁÒ㪠㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ «Ö§è ª ÇÂãË ¡Ò÷íÒ§Ò¹Êдǡ¢Ö¹é

3.5.1 µÑÇá»Ãª¹Ô´ÍÐàà(Array type variables)

µÑÇá»Ãª¹Ô´ÍÐàà¤×Í ¡ÅØÁ ¢Í§µÑÇá»Ã·ÕÁè ªÕ ¹Ô´¢Í§¢ ÍÁÙÅàËÁ×͹¡Ñ¹ áÅÐÁÕ·ÍÕè ÂÙ㠹˹ ǤÇÒÁ ¨íÒËÃ×ÍáÍ´à´ÃÊàÃÕ§µÔ´µ Í¡Ñ¹ä» ÍҨ㪠¾×é¹·Õè¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ (data memory) ËÃ×Í˹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ (program memory) ¡çä´é ¢Ö¹é ÍÂÙ¡ ºÑ ÃٻẺ¡ÒûÃСÒÈ â´ÂÁÕû٠Ẻ´Ñ§¹Õé type name[size];

â´Â·Õè type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙŵÑÇá»ÃÍÐààname ¤×Í ª×Íè ¢Í§µÑÇá»ÃÍÐààsize ¤×Í ¤ ҢͧµÑÇàÅ¢¡íÒ˹´¢¹Ò´¢Í§ÍÐààÍÒ¨¨ÐäÁ ¡Òí ˹´¡çä´ ´Ñ§¹Õé

¡ÒÃࢠҶ֧¢ ÍÁÙŢͧÊÁÒªÔ¡µÑÇ㴢ͧÍÐàà·Òí ä´ â´Â¡ÒáíÒ˹´·Õ´è ªÑ ¹ÕªµÕé Òí á˹ § ÁÕû٠Ẻ name[index]

â´Â·Õè index ¤×Í ¤ ҴѪ¹Õ·ÕèªÕéä»ÂѧÊÁÒªÔ¡µÑÇã´æ ¢Í§ÍÐàà«Öè§ÍҨ໠¹µÑÇàÅ¢ËÃ×ͤ ÒµÑÇá»Ãã´æ ËÃ×Í¡ÒáÃзíҢͧ¹Ô¾¨¹ «Ö§è ·Ñ§é ËÁ´·Õ¡è Å ÒÇÁҨе ͧ໠¹àÅ¢¨íҹǹàµçÁ෠ҹѹé


72

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.18

¶ Ò»ÃСÒÈà» ¹ char arr[4];

ËÁÒ¶֧ µÑÇá»ÃÍÐààªÍ×è arr à» ¹µÑÇá»Ã·Õ»è ÃСͺ´ ÇÂÊÁÒªÔ¡Â Í 4 µÑÇ ÍÒ¨Á꤂ Òà» ¹µÑÇá»Ã 4 µÑÇ¡çä´ áµ àÇÅÒ·Õ¨è ÐÍ Ò§ÍÔ§¶Ö§ÊÁÒªÔ¡¨Ð㪠´ªÑ ¹Õà» ¹µÑǺ §ºÍ¡Ç Ò¡íÒÅѧµÔ´µ Í㪠§Ò¹ÊÁÒªÔ¡µÑÇä˹ ´Ñ§¹Ñ¹é arr ¨ÐÊÒÁÒöᨡᨧÊÁÒªÔ¡ä´ ´§Ñ ¹Õé arr[0] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 1 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 0 arr[1] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 2 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 1 arr[2] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 3 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 2 arr[3] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 4 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 3 â´Â arr[0] , arr[1] , arr[2] áÅÐ arr[3] µ Ò§¡çà» ¹µÑÇá»Ãª¹Ô´ char ÁÕ¢¹Ò´ 1 亵 ´Ñ§¹Ñ¹é ¡ÒûÃСÒȵÑÇ á»Ã arr ¨Ö§ãª à¹×Íé ·Õ·è §Ñé ÊÔ¹é 4 亵

µÑÇÍ ҧ·Õè 3.19

¶ Ò»ÃСÒÈà» ¹ int time[10];

ËÁÒ¶֧ µÑÇá»ÃÍÐààªÍ×è time à» ¹µÑÇá»Ã·Õ»è ÃСͺ´ ÇÂÊÁÒªÔ¡Â Í 10 µÑÇ ´Ñ§¹Ñ¹é time ÊÒÁÒöᨡ ᨧÊÁÒªÔ¡ä´ ´§Ñ ¹Õé time[0] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 1 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 0 time[1] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 2 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 1 time[2] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 3 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 2 time[3] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 4 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 3 time[4] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 5 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 4 time[5] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 6 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 5 time[6] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 7 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 6 time[7] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 8 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 7 time[8] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 9 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 8 time[9] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 10 ÁÕ´ªÑ ¹Õ·ªÕè àÕé » ¹ 9 â´Â time[0]... time[9] ·Ø¡µÑǵ Ò§¡çà» ¹µÑÇá»Ãª¹Ô´ int ÁÕ¢¹Ò´ 2 亵 ´Ñ§¹Ñ¹é ¡ÒûÃСÒȵÑÇá»Ã time ¨Ö§ãª à¹×Íé ·Õ·è §Ñé ÊÔ¹é 20 亵


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

73

µÑÇÍ ҧ·Õè 3.20

¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàà¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ ·íÒä´ ´§Ñ ¹Õé unsigned char dat[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒȵÑÇá»ÃÍÐààª×èÍ dat ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ÑºÊÁÒªÔ¡áµ ÅеÑÇ ËÃ×ÍÍÒ¨àÃÕÂ¡Ç Ò áµ ÅÐà«ÅÊ ¡äç ´ ¼ÅÅѾ¸ ·äÕè ´ ¤Í× dat[0] dat[1] dat[2] dat[3] dat[4] dat[5] dat[6] dat[7]

= = = = = = = =

0x01; 0x02; 0x04; 0x08; 0x10; 0x20; 0x40; 0x80;

㪠¾¹×é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ㹡ÒÃà¡çº à»ÅÕÂè ¹á»Å§¤ Òä´ àÁ×Íè ÁÕ¡ÒáÃзíÒ·Õµè ÇÑ ÊÁÒªÔ¡µÑÇã´æ áµ ¶Ò »ÃСÒÈà» ¹ code unsigned char dat[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;

¤ Ò¢ ÍÁÙŢͧ dat[0]... dat[7] ¨ÐÁÕ¤Ò àª ¹à´ÕÂǡѹ¡ÑºµÑÇÍ ҧµÍ¹µ ¹ µ Ò§¡Ñ¹µÃ§·Õãè ¹¡Ã³Õ¹¨Õé ´Ñ à¡çºà» ¹ ¤ Ò¤§·ÕÅè §ã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁàËÁ×͹¡Ñº¡ÒÃÊà ҧµÒÃÒ§¢ ÍÁÙÅ ÊíÒËÃѺ¡ÒÃàÃÕ¡㪠ÊÁÒªÔ¡ÍÐààËÅѧ¨Ò¡ÁÕ»ÃСÒÈÍÐààà¢Õ¹â»Ãá¡ÃÁä´ ´§Ñ ¹Õé unsigned char i , j ; i = 3; j = dat[i]; // j = dat[i] ==> j = dat[3] ==> j = 0x08

/*¼ÅÅѾ¸ ¤Í× j

= 0x08

*/

µÑÇÍ ҧ·Õè 3.21

¡ÒûÃÐÂØ¡µ 㪠µÇÑ á»ÃÍÐàà¡ºÑ ¤íÒÊѧè for à¢Õ¹â»Ãá¡ÃÁµ Í仹Õé

code unsigned char dat[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ; // »ÃСÒȵÑÇá»ÃÍÐààªÍ ×è dat ÁÕÊÁÒªÔ¡ 8 µÑÇ //

¾Ã ÍÁ¡íÒ˹´¤ Ò¢ ÍÁÙÅ â´Âà¡çºäÇ ·ËÕè ¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ

................ void delay(void) { ................ } void main(void) { unsigned char i; for(i=0;i<8;i++)

//

¿ §¡ ª¹Ñè ˹ ǧàÇÅÒ

//

¿ §¡ ª¹Ñè ËÅÑ¡·Õâè »Ãá¡ÃÁ·íÒ§Ò¹

//

»ÃСÒȵÑÇá»Ãà¾×Íè ¹íÒä»ãª à» ¹´Ñª¹ÕµÇÑ ªÕÍé ÐàÃÂ

//

ǹÃͺ·íÒ¤íÒÊѧè ÀÒÂã¹ 8 Ãͺ

{

} }

P0 = dat[i];

//

delay();

//

¤ Ò¢ ÍÁÙŢͧÊÁÒªÔ¡ÍÐàà·ÁÕè µÕ ÇÑ ªÕµé ç¡Ñº¤ Ңͧ i ¶Ù¡Ê §ä»·Õ¾è Íà µ 0 àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ˹ ǧàÇÅÒ


74

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.22

¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàà¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ »ÃСÒÈà» ¹ unsigned char dat[5] = “ abcde” ;

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒȵÑÇá»ÃÍÐààªÍ×è dat áÅСíÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇ ¼ÅÅѾ¸ ¤Í× dat[0] dat[1] dat[2] dat[3] dat[4]

= = = = =

‘a’; ‘b’; ‘c’; ‘d’; ‘e’;

â´ÂµÑÇá»Ã dat 㪠¾¹×é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ㹡ÒÃà¡çº¤ Ò¢ ÍÁÙÅ áµ ¶Ò »ÃСÒÈà» ¹ code unsigned char dat[5] = “abcde” ;

¤ Ò¢ ÍÁÙŢͧ dat[0]... dat[4] ¨ÐÁÕ¤Ò àª ¹à´ÕÂǡѹ¡Ñº´ Ò¹º¹ µ Ò§¡Ñ¹µÃ§·Õãè ¹¡Ã³Õ¹¨Õé ´Ñ à¡çºà» ¹¤ Ò¤§ ·ÕÅè §ã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁàËÁ×͹¡Ñº¡ÒÃÊà ҧµÒÃÒ§¢ ÍÁÙÅ ¡ÒÃàÃÕ¡㪠ËÅѧ¨Ò¡»ÃСÒÈÍÐààunsigned char i , j ; i = 3; j = dat[i]; // j = dat[i]à j = dat[3]à j = ‘d’ /*¼ÅÅѾ¸ ¤Í × j = ‘d’ */

㹡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐààÊÒÁÒö»ÃСÒÈ㪠§Ò¹à» ¹áººÊ ǹÃÇÁËÃ×ÍẺ· ͧ¶Ôè¹áŠǹíÒä» à» ¹¾ÒÃÒÁÔàµÍà à¾×Íè ÃѺ¡ÒÃÊ §¼ Ò¹¤ Ңͧ¿ §¡ ª¹Ñè ¡çä´

µÑÇÍ ҧ·Õè 3.23 µÑÇÍ ҧâ»Ãá¡ÃÁ·ÕÁè ¡Õ ÒûÃСÒȵÑÇá»ÃẺÍÐàà#include<reg51.h> unsigned char dat1[6];

//

dat2 à» ¹µÑÇá»ÃÍÐàà㪠¾¹×é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ â´Â»ÃСÒȵÑÇá»Ãà» ¹áººÊ ǹÃÇÁËÃ×Íâ¡ÅºÍÅ

// code unsigned char dat2[3]={0x01,0x02,0x04}; // // void func1(int tran[5]) { ................... } void func2(void) {

//

char dat3[10];

// //

................... } void main(void) { ................... }

dat2 à» ¹µÑÇá»ÃÍÐàà㪠¾¹×é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ¾Ã ÍÁ¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇ µÑÇá»ÃÍÐàà··Õè Òí ˹ Ò·Õàè » ¹¾ÒÃÒÁÔàµÍÃ

dat2 à» ¹µÑÇá»ÃÍÐàà㪠¾¹×é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ â´Â»ÃСÒÈà» ¹µÑÇá»ÃẺ· ͧ¶Ô¹è ËÃ×ÍâŤÑÅ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

75

3.5.2 µÑÇá»Ãª¹Ô´¾Í¹ àµÍà (pointer variables)

µÑÇá»Ã¾Í¹ àµÍà ¤×Í µÑÇá»Ã·Õ·è Òí ˹ Ò·Õàè ¡çº¤ ÒáÍ´à´ÃʢͧµÑÇá»Ã·Õ·è Òí ¡ÒêÕËé Ã×ÍáÍ´à´ÃÊ ã´æ ÁÕû٠Ẻ¡ÒûÃСÒÈ㪠§Ò¹´Ñ§¹Õé type * name;

â´Â·Õè type ¤×Í ª¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã¾Í¹ àµÍà name ¤×Í ª×Íè µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª »ÃСÒÈ µÑÇÍ ҧ·Õè 3.24

µÑÇá»Ã x ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0xF2 áÅÐÁÕ¤Ò ¢Í§¢ ÍÁÙÅà» ¹ 0x37 à¢Õ¹â»Ãá¡ÃÁà¾×Íè »ÃСÒȵÑÇá»Ãä´ ´§Ñ ¹Õé

unsigned char dat;

»ÃСÒȵÑÇá»Ã p à» ¹áºº¾Í¹ àµÍà // p à¡çº¤ ÒáÍ´à´ÃʢͧµÑÇá»Ã x (¶Ö§¢Ñ¹ é µÍ¹¹Õé p = 0xF2) // Ê §¤ Ңͧ¢ ÍÁÙÅã¹áÍ´à´ÃÊ·Õè p ªÕÍ é ÂÙä »ÂѧµÑÇá»Ã dat /*¼ÅÅѾ¸ ¤Í × dat = 0x37 */

char *p;

//

p = &x; dat = *p;

µÑÇÍ ҧ·Õè 3.25

µÑÇÍ ҧ¹Õàé » ¹¡ÒÃ㪠µÇÑ á»Ã¾Í¹ àµÍà ÃÇ Á¡ÑºµÑÇá»ÃẺÍÐàÃÂ

int dat[3] = {100,200,300}; int * ptr;

//

ptr à» ¹µÑÇá»Ã¾Í¹ àµÍà à¾×Íè ªÕµé ÇÑ á»Ã¢ ÍÁÙÅẺ integer (2 亵 )

int y1,y2,y3; ptr = &dat[0]; // y1 = *ptr;

//

y2 = *(ptr+1); // y3 = *(ptr+2); // /*

¼ÅÅѾ¸ ¤Í×

*/

/* /* /*

y1 = 100 y2 = 200 y3 = 300

*/ */ */

ãË ptr à¡çº¤ ÒáÍ´à´Ãʢͧ dat[0] (ÊÁÒªÔ¡µÑÇáá¢Í§ÍÐààdat) Ê §¢ ÍÁÙÅ dat[0] ä»ãË y1 à¾ÔÁè áÍ´à´ÃÊ¢Ö¹é 1 µíÒá˹ § ·íÒãË µÃ§¡ÑºáÍ´à´ÃÊ dat[1] áÅ ÇÊ §¤ Ò¢ ÍÁÙÅ y2 à¾ÔÁè áÍ´à´ÃÊ¢Ö¹é 2 µíÒá˹ § ·íÒãË µÃ§¡ÑºáÍ´à´ÃÊ dat[2] áÅ ÇÊ §¤ Ò¢ ÍÁÙÅ y3

¶ ÒµÑÇá»ÃÍÐààdat[0] ¶Ù¡¨Ñ´à¡çº·Õáè Í´à´ÃÊ 0x100 ÁÕ¤Ò ¢ ÍÁÙÅà» ¹ 100 ·íÒãË dat[1] ¶Ù¡¨Ñ´à¡çº·Õè áÍ´à´ÃÊ 0x101 áÅÐÁÕ¤Ò ¢ ÍÁÙÅà» ¹ 200 Ê Ç¹ dat[2] ¶Ù¡¨Ñ´à¡çº·Õáè Í´à´ÃÊ 0x102 ÁÕ¤Ò ¢ ÍÁÙÅà» ¹ 300 ËÁÒÂà赯 ÊíÒËÃѺ¤íÒÊÑ§è ¡ÒÃ㪠µÇÑ á»Ã¾Í¹ àµÍà ª·Õé µÕè Òí á˹ §áá¢Í§µÑÇá»ÃÍÐàà¨Ò¡ ptr = &dat[0];

ÊÒÁÒöà¢Õ¹᷹´ Ç ptr = dat;


76

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.26

µÑÇÍ ҧ¹Õàé » ¹¡ÒÃ㪠µÇÑ á»Ã¾Í¹ àµÍà ª¤Õé Ò áÍ´à´ÃʵÑÇáá¢Í§¡ÅØÁ µÑÇÍÑ¡Éà (string)

unsigned char y1,y2,y3,y4,y5 code unsigned char * ptr = “abcde” ;

ptr ¨ÐªÕäé »·Õáè Í´à´ÃÊ·Õàè ¡çº¤ ÒµÑÇÍÑ¡¢ÃÐ a ¡ÅØÁ ÍÑ¡Éêش¹Õ¶é ¡Ù ¨Ñ´à¡çº // ŧ㹾׹ é ·ÕËè ¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ à¾ÃÒÐ㪠ÃËÑÊ˹ ǤÇÒÁ¨íÒà» ¹ code // ¼ÅÅѾ¸ y1 = ‘a’ // ¼ÅÅѾ¸ y2 = ‘b’ // ¼ÅÅѾ¸ y3 = ‘c’ // ¼ÅÅѾ¸ y4 = ‘d’ // ¼ÅÅѾ¸ y5 = ‘e’ //

y1 = *ptr; y2 = *(ptr+1); y3 = *(ptr+2); y4 = *(ptr+3); y5 = *(ptr+4);

3.6 ¤íÒÊÑ§è ¤Çº¤ØÁµ Ò§æ ã¹ÀÒÉÒ C ·Õãè ª 㹤ÍÁä¾àÅÍà RC51

¤íÒÊѧè ã¹ÀÒÉÒ C ·Õ¤è ÍÁä¾àÅÍà RC51 ÃͧÃѺ Ê Ç¹ãË­ ¨ÐÂÖ´ãË µÃ§¡ÑºÁҵðҹ ANSI-C áµ ¡çÁÕºÒ§Ê Ç¹·Õèà¾ÔèÁàµÔÁáÅж١µÑ´ÍÍ¡ä» à¾×èÍãË àËÁÒÐÊÁ¡Ñº·ÃѾÂҡâͧäÁâ¤Ã¤Í¹â·ÃàÅÍà àͧ â´Â¤íÒÊѧè ã¹ÀÒÉÒ C ËÅÑ¡æ »ÃСͺ´ Ç ¤íÒÊѧè ẺµÃǨÊͺà§×Íè ¹ä¢áÅФíÒÊѧè ǹÅÙ» ´Ñ§¹Õé 1. ¤íÒÊѧè if 2. ¤íÒÊѧè if-else 3. ¤íÒÊѧè switch 4. ¤íÒÊѧè for 5. ¤íÒÊѧè while 6. ¤íÒÊѧè do-while

3.6.1 ¤íÒÊѧè if

à» ¹¤íÒÊÑ§è ·Õãè ª 㹡ÒõÃǨÊͺà§×Íè ¹ä¢ (condition) Ç Òà» ¹¨ÃÔ§ËÃ×Íà·ç¨ ÁÕû٠Ẻ´Ñ§¹Õé if(Condition) { block }

block ËÁÒ¶֧ ªØ´¤íÒÊÑ§è ·ÕÍè ÂÙÀ ÒÂ㹪 ǧǧàÅ纻 ¡¡Ò { } «Ö§è ÍÒ¨ÁÕ 1 ¤íÒÊѧè ËÃ×ÍËÅÒ¤íÒÊÑ§è ¡çä´ ¶ ÒµÃǨÊͺáŠǾºÇ Ò Condition ¹Ñ¹é à» ¹¨ÃÔ§ ¡ç¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block áµ ¶Ò à» ¹ à·ç¨ ¡ç¨Ð¢ ÒÁ仡ÃзíÒ¤íÒÊÑ§è ·ÕÍè ÂÙ¶ ´Ñ ä»ÀÒ¹͡ block áµ ¶Ò ¤íÒÊѧè ã¹ block ÁÕà¾Õ§¤íÒÊѧè à´ÕÂÇ ÍÒ¨¨Ð äÁ µÍ §ãÊ à¤Ã×Íè §ËÁÒ» ¡¡Ò¡çä´ àª ¹


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

77

if(i==4) { if(i==4) y = 46; }

µÑÇÍ ҧ·Õè 3.27 unsigned

char

i , j ;

//

i = 5;

//

j = 3;

//

if(i>=5)

//

»ÃСÒȵÑÇá»ÃãË à» ¹áºº character ÁÕ¤Ò ã¹ª ǧ 0-255 ¡íÒ˹´¤ ÒàÃÔÁè µ ¹¢Í§µÑÇá»Ã i ¡íÒ˹´¤ ÒàÃÔÁè µ ¹¢Í§µÑÇá»Ã j µÃǨÊͺ ¶ Ò i ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 5 ãË ¡ÃзíÒ¤íÒÊѧè ã¹ block

{ j = i +10;

//

i = 7;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} /*—————————result——————————————*/ j = 15 i = 7 /*——————————————————————————*/

¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ à¹×Íè §¨Ò¡ i = 5 (¶Ù¡¡íÒ˹´ à» ¹¤ ÒàÃÔÁè µ ¹) ¨Ö§ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block µÒÁÅíҴѺ

µÑÇÍ ҧ·Õè 3.28 unsigned

char

i , j ;

//

i = j = 2;

//

if(i==5)

//

»ÃСÒȵÑÇá»ÃãË à» ¹áºº character ÁÕ¤Ò ã¹ª ǧ 0-255 ¡íÒ˹´¤ ÒàÃÔÁè µ ¹¢Í§µÑÇá»Ã I áÅÐ j ãË Á¤Õ Ò à· Ò 0 ·Ñ§é ¤Ù µÃǨÊÍºÇ Ò ¶ Ò i ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 5 ãË ·Òí ¤íÒÊѧè ã¹ block

{ j = i +1;

//

i = 0xFF;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

//

¤íÒÊÑ§è ·Õè 3

} if(j==2) j = j+1;

/*—————————result——————————————*/ j = 3 i = 2 /*——————————————————————————*/

¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(i==5) ¾ºÇ Ò à§×Íè ¹ä¢äÁ à» ¹¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§äÁ Á¡Õ Òà ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¼ Ò¹ÁÒ¾º¤íÒÊѧè if(j==2) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ÍÕ¡ ¤Ãѧé áÅоºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ·íÒãË µÍ §ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 (à¹×Íè §¨Ò¡¤íÒÊѧè if(j==2) ÁÕ¤Òí ÊÑ§è µ Í ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢à¾Õ§¤íÒÊѧè à´ÕÂÇ äÁ ¨Òí à» ¹µ ͧ» ´´ ÇÂà¤Ã×Íè §ËÁÒ { } ¡çä´ )


78

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.6.1.1 ¡ÒÃ㪠¤Òí Êѧè if à¾×Íè µÃǨÊͺ¤ Ò¤§·Õè ·Õµè Òí á˹ § Condition ¹Í¡¨Ò¡¨Ð㪠໠¹»ÃÐâ¤à»ÃÕºà·Õº´ ÇÂà¤Ã×Íè §ËÁÒ·ҧ¤³ÔµÈÒʵà áÅÐÅͨԡáÅ Ç ÂѧÊÒÁÒö㪠㹡ÒõÃǨÊͺ¤ Ò¤§·ÕèËÃ×ͤ ҢͧµÑÇá»Ãã´æ ·Õè¹íÒÁÒà» ¹à§×è͹ä¢ä´ ´ Ç â´Â 1. ¶ Ò¤ ÒµÑÇàÅ¢ËÃ×͵ÑÇá»Ãà§×è͹䢴ѧ¡Å ÒÇÁÕ¤ ÒäÁ ෠ҡѺ 0 à§×è͹䢴ѧ¡Å ÒǨÐà» ¹¨ÃÔ§ ¨ÐÁÕ ¡ÒáÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¢Í§¤íÒÊѧè if ¹Ñ¹é æ 2. ¶ Ò¤ ÒµÑÇàÅ¢ËÃ×͵ÑÇá»Ãà§×è͹䢴ѧ¡Å ÒÇÁÕ¤ Ò෠ҡѺ 0 à§×è͹䢴ѧ¡Å ÒǨÐà» ¹à·ç¨ ¨ÐäÁ ÁÕ ¡ÒáÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¢Í§¤íÒÊѧè if ¹Ñ¹é æ µÑÇÍ ҧ·Õè 3.29 unsigned int

j = 8 ;

// //

bit k = 0;

// //

if(6)

// // //

»ÃСÒȵÑÇá»Ã ãË à» ¹áºº character ÁÕ¤Ò ã¹ª ǧ 0-255 ÁÕ¤Ò àÃÔÁè µ ¹·Õè 8 »ÃСÒȵÑÇá»Ã ãË à» ¹áºººÔµ ÁÕ¤Ò ·Õàè » ¹ä»ä´ ¤Í× (0,1) ÁÕ¤Ò àÃÔÁè µ ¹·Õè 0 ·Õµè Òí á˹ §à§×Íè ¹ä¢ÁÕ¤Ò à» ¹ 6 ´Ñ§¹Ñ¹é à§×Íè ¹ä¢¹Õàé » ¹¨ÃÔ§ à¹×Íè §¨Ò¡¤ Òà§×Íè ¹ä¢äÁ ෠ҡѺÈٹ ¨ÐÁÕ¡Ò÷íÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õé (ÁÕ¡Ò÷íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2)

{ j++;

//

k = ~k;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} if(-3)

//

j = j + k;

//

if(0)

// // //

·Õµè Òí á˹ §à§×Íè ¹ä¢ÁÕ¤Ò -3 à§×Íè ¹ä¢à» ¹¨ÃÔ§ ÁÕ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 3 ·Õµè Òí á˹ §à§×Íè ¹ä¢ = 0 à§×Íè ¹ä¢¹Õàé » ¹à·ç¨ äÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õé (äÁ Á¡Õ ÒáÃзíÒ¤íÒÊÑ§è ·Õè 4 áÅÐ 5)

{ j = 0x36;

//

k = ~k;

//

¤íÒÊÑ§è ·Õè 4 ¤íÒÊÑ§è ·Õè 5

} /*—————————result——————————————*/ j = 10 (0x0A) k = 1 /*——————————————————————————*/


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

79

¨Ò¡µÑÇÍ ҧ¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(6) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ ¡ÒÃࢠÒ仡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(-3) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ÍÕ¡ ¤ÃÑ§é ¾ºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ·íÒãË µÍ §ÁÕ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(0) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ ä¢ ¾ºÇ Òà» ¹à·ç¨ ·íÒãË äÁ µÍ §à¢ Ò仡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¨Ö§äÁ Á¡Õ ÒáÃзíÒ¤íÒÊÑ§è ·Õè 4 áÅÐ 5 ¼Å¢Í§¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 : j++; à

j = 9

à» ¹¤íÒÊѧè à¾ÔÁè ¤ ÒµÑÇá»Ã j Íա˹֧è áŠǹíÒ¼ÅÅѾ¸ à¡çº·Õµè ÇÑ á»Ã j ¼ÅÅѾ¸ ¤Í× 9 à¾ÃÒФ ÒàÃÔÁè µ ¹¤×Í 8 ¼Å¢Í§¡ÒáÃзíÒ¤íÒÊѧè 2 : k = ~k;à k = 1

¤íÒÊÑ§è ¡ÅѺÅͨԡ¢Í§µÑÇá»Ã k áŠǹíÒ¼ÅÅѾ¸ à¡çº·Õµè ÇÑ á»Ã k

µÑÇÍ ҧ·Õè 3.30

»ÃСÒȵÑÇá»Ãà» ¹áºººÔµ ÁÕ¤Ò ·Õàè » ¹ä»ä´ ¤Í× 0 áÅÐ 1 unsigned char test; // »ÃСÒȵÑÇá»ÃãË à» ¹áºº character ÁÕ¤Ò ã¹ª ǧ 0-255 m = 1; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË m = 1 test = 0x00; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË test = 0x00 (àÅ¢°Ò¹ÊԺˡ) if(test) // ·ÕèµíÒá˹ §à§×èÍ¹ä¢ test = 0 à§×è͹䢹Õéà» ¹à·ç¨ à¹×èͧ¨Ò¡à· ҡѺ 0 ¨ÐäÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ÀÒÂã¹ Block ¹Õé (ÁÕ¡Ò÷íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2) bit m ;

//

{ test++;

//

m = 0;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

//

·Õµè Òí á˹ §à§×Íè ¹ä¢ m = 1 à§×Íè ¹ä¢¹Õàé » ¹¨ÃÔ§ ÁÕ¡Ò÷íÒ¤íÒÊѧè ã¹ block ÍÕ¡¤Ãѧé

} if(m) { if(test>=0)

//

test = (test | 0xF0)>>4;

//

µÃǨÊͺ test >= 0 ¶ Òà» ¹¨ÃÔ§ ÁÕ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 3

} /*—————————result——————————————*/ m = 1 test = 0x0F /*——————————————————————————*/

¨Ò¡µÑÇÍ ҧ¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(test) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹à·ç¨ à¹×Íè §¨Ò¡ test = 0 ´Ñ§¹Ñ¹é ¨Ö§äÁ Á¡Õ ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(m) ¨Ö§ÁÕ¡Òà µÃǨÊͺà§×Íè ¹ä¢ÍÕ¡¤ÃÑ§é ¾ºÇ Òà» ¹¨ÃÔ§ à¹×Íè §¨Ò¡ m = 1 (äÁ ෠ҡѺ 0) ·íÒãË µÍ §¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block «Ö§è ÀÒÂã¹ block ¨Ð¾º¤íÒÊѧè if(test>=0) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢´Ñ§¡Å ÒÇ ¾ºÇ Ò à» ¹¨ÃÔ§ ·íÒãË äÁ µÍ § ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3


80

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.6.1.2 ¡ÒÃ㪠¤Òí Êѧè if à ÇÁ¡ÑºµÑÇ´íÒà¹Ô¹¡Ò÷ҧÅͨԡà¾×Íè µÃǨÊͺà§×Íè ¹ä¢ ÊÒÁÒö¹íÒ»ÃÐâ¤à§×Íè ¹ä¢ËÅÒÂæ »ÃÐâ¤ÁÒàª×Íè Á¡Ñ¹áººÅͨԡ´ Ç¡ÒÃá͹´ (&&) ËÃ×Í ÍÍà (||) â´ÂÁÕû٠Ẻ¡ÒõÃǨÊͺ´Ñ§¹Õé ¡ÒõÃǨÊͺà§×Íè ¹ä¢·Õàè ª×Íè Á´ Ç¡ÒÃá͹´ ã¹µíÒá˹ § Condition if(

»ÃÐ⤠1

&&

»ÃÐ⤠2)

¡ÒõÃǨÊͺ : ·Ñ§é »ÃÐ⤠1 áÅлÃÐ⤠2 µ ͧ໠¹¨ÃÔ§à· Ò¹Ñ¹é ¨Ö§¨Ð·íÒãË ¤Ò ¼ÅÅѾ¸ à» ¹ ¨ÃÔ§ (Condition à» ¹¨ÃÔ§) ¹Í¡¹Ñ¹é à» ¹à·ç¨ËÁ´ ઠ¹ if(à·ç¨ && à·ç¨ ) à if(à·ç¨) à äÁ ¡ÃзíÒ¤íÒÊѧè ã¹ block if(à·ç¨ && ¨ÃÔ§ ) à if(à·ç¨) à äÁ ¡ÃзíÒ¤íÒÊѧè ã¹ block if(¨ÃÔ§ && à·ç¨ ) à if(à·ç¨) à äÁ ·Òí ¤íÒÊѧè ã¹ block if(¨ÃÔ§ && ¨ÃÔ§ ) à if(¨ÃÔ§) à ·íÒ¤íÒÊѧè ã¹ block ¡ÒõÃǨÊͺà§×Íè ¹ä¢·Õàè ª×Íè Á´ Ç¡ÒÃÍÍà 㹵íÒá˹ § Condition if(

»ÃÐ⤠1

||

»ÃÐ⤠2)

¡ÒõÃǨÊͺ : ·Ñ§é »ÃÐ⤠1 áÅлÃÐ⤠2 Í ҧã´Í ҧ˹֧è à» ¹¨ÃÔ§ ËÃ×Íà» ¹¨ÃÔ§·Ñ§é ¤Ù¡ ç ä´ ¡ç¨Ð·íÒãË ¤ Ò¼ÅÅѾ¸ à» ¹¨ÃÔ§ (Condition à» ¹¨ÃÔ§) áµ ¶ Ò·Ñ駻ÃÐ⤠1 áÅлÃÐ⤠2 à» ¹à·ç¨ ¾Ã ÍÁ¡Ñ¹·Ñ§é ¤Ù ¨Ð·íÒãË ¼Å¡ÒõÃǨÊͺ໠¹à·ç¨ ઠ¹ if(à·ç¨ || à·ç¨ ) à if(à·ç¨) à äÁ ¡ÃзíÒ¤íÒÊѧè ã¹ block if(à·ç¨ || ¨ÃÔ§ ) à if(¨ÃÔ§) à ¡ÃзíÒ¤íÒÊѧè ã¹ block if(¨ÃÔ§ || à·ç¨ ) à if(¨ÃÔ§) à ¡ÃзíÒ¤íÒÊѧè ã¹ block if(¨ÃÔ§ || ¨ÃÔ§ ) à if(¨ÃÔ§) à ¡ÃзíÒ¤íÒÊѧè ã¹ block µÑÇÍ ҧ·Õè 3.31

»ÃСÒȵÑÇá»Ã a áÅÐ b ãË à» ¹áºº character ÁÕ¤Ò ã¹ª ǧ 0-255 // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË a = 0x31 è µ ¹ãË a = 0x0F // ¡íÒ˹´¤ ÒàÃÔÁ b<=0xFF)// ¶ Ò a > 0x20 áÅÐ b <= 0xFF ¨Ð¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ã¹ block

unsigned char a , b; // a = 0x31; b = 0x0F; if(a>0x20 &&


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

81

{ a = 0x77;

//

b = 0x22;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} if(b>0x1F ||

b==0x51)

// //

¶ Ò b > 0x1F ËÃ×Í b = 0x51 ¨Ð¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ã¹ block

{ a = a & 0xF0;

//

b = b & 0x0F;

//

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*—————————result——————————————*/ a = 0x70 b = 0x02 /*——————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 2.31 ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(a>0x20 && b<=0xFF) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ à¹×Íè §¨Ò¡ a = 0x31 ÁÒ¡¡Ç Ò 0x20 ¨ÃÔ§ áÅÐ b = 0x0F ¹ ÍÂ¡Ç Ò 0xFF ¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá ä´ ¼Å´Ñ§¹Õé àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 :

a = 0x77

àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 2 :

b = 0x22

à§×Íè ¹ä¢µ ÍÁÒ if(b>0x1F || b==0x51) ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ ¾ºÇ Òà» ¹¨ÃÔ§ à¾ÃÒÐ b = 0x22 ÁÒ¡¡Ç Ò 0x1F ¨ÃÔ§ (à» ¹¨ÃÔ§à¾Õ§»ÃÐâ¤à´ÕÂÇ¡çãË ¼ÅÅѾ¸ ¢Í§à§×Íè ¹ä¢à» ¹¨ÃÔ§áÅ Ç) ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡Òà ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ÀÒÂã¹ block àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3

a = a & 0xF0; à a = 0x77 & 0xF0 à a = 0x70

àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 4

b = b & 0x0F; à b = 0x22 & 0x0F à b = 0x02

3.6.2 ¤íÒÊѧè if-else

à» ¹¤íÒÊÑ§è ·Õµè ÃǨÊͺà§×Íè ¹ä¢Ç Òà» ¹¨ÃÔ§ËÃ×Íà·ç¨ áÅ ÇàÅ×Í¡¡ÃзíÒÍ ҧã´Í ҧ˹֧è ÃٻẺ¢Í§¤íÒÊÑ觤×Í if(Condition) { block1

//

·íÒã¹Ê ǹ¹Õ¶é Ò à§×Íè ¹ä¢à» ¹ ¨ÃÔ§

block2

//

·íÒã¹Ê ǹ¹Õ¶é Ò à§×Íè ¹ä¢à» ¹ à·ç¨

} else { }


82

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¨Ò¡ÃٻẺ¢Í§¡ÒÃ㪠¤Òí Êѧè ËÒ¡µÃǨÊͺà§×Íè ¹ä¢áŠǾºÇ Ò Condition ¹Ñ¹é à» ¹¨ÃÔ§ ¡ç¨Ðà¢ Ò ä»¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block1 áµ ¶Ò à» ¹à·ç¨ ¨Ð¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block2 á·¹ µÑÇÍ ҧ·Õè 3.32 char m = 2; int x = 0; if(m==1) x = 0x50;

//

µÃǨÊÍºÇ Ò m = 1 ¨ÃÔ§ËÃ×ÍäÁ ¶ Ò ¨ÃÔ§ ¡íÒ˹´ãË x ෠ҡѺ 0x50

//

¶ Ò à·ç¨ ¡íÒ˹´ãË x ෠ҡѺ 0xFF

//

else x = 0xFF;

/*—————————result——————————————*/ x = 0xFF /*——————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 3.32 ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(m==1) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹à·ç¨ à¾ÃÒÐ m = 2 ´Ñ§¹Ñ¹é ¨Ð ¡ÃзíÒ¤íÒÊÑ§è µ Í· Ò·յè Í · Ò¤íÒÊѧè else ¤×Í x = 0xFF; Íѹ໠¹¡ÒáíÒ˹´ãË ¤Ò x ෠ҡѺ 0xFF ËÃ×Í 255 ã¹°Ò¹ÊÔº

µÑÇÍ ҧ·Õè 3.33 if(z>=5)

// //

µÃǨÊÍºÇ Ò z >= 5 ¨ÃÔ§ËÃ×ÍäÁ µÃǨÊͺáÅ Çà§×Íè ¹ä¢à» ¹ ¨ÃÔ§ ¨Ð¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2

{ z += 15;

//

z = z%10;

//

z+= 17;

//

z = z%4 ;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} else {

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*—————————result——————————————*/ z = 5 /*——————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 3.33 ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(z>=5) ¾ºÇ Òà» ¹¨ÃÔ§ à¾ÃÒÐ z = 10 ÁÒ¡¡Ç Ò 5 ´Ñ§¹Ñ¹é ¨Ö§¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá ¹Ñ¹è ¤×Í àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 : z += 15; à Z = Z + 15 à Z = 10 + 15 à Z = 25 àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 2 : z = Z%10; à z = 25%10 à z = 5 ¨Ðä´ ¼ÅÅѾ¸ Z = 5 à» ¹¼ÅÅѾ¸ Ê´Ø · ÒÂ


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.34 if(z<5)

// //

l

83

µÃǨÊÍºÇ Ò z >= 5 ¨ÃÔ§ËÃ×ÍäÁ ¶ ÒµÃǨÊͺáÅ Çà§×Íè ¹ä¢à» ¹ à·ç¨ ¨ÐäÁ ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2

{ z += 15;

//

z = z%10;

//

z+= 17;

//

z = z%4 ;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} else {

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*—————————result——————————————*/ z = 3 /*——————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 3.34 ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(z<5) ¾ºÇ Òà» ¹à·ç¨ à¾ÃÒÐ z = 10 ÁÒ¡¡Ç Ò 5 ´Ñ§¹Ñ¹é ¨Ö§ ÁÕ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ÀÒÂã¹ block ËÅѧ¤íÒÊѧè else á·¹ àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 : z

+= 17; à Z = Z + 17 à Z = 10 + 17 à Z = 27

àÁ×Íè ¡ÃзíÒ¤íÒÊÑ§è ·Õè 4 : z

= Z%4; à z = 27%4 à z = 3

à» ¹¼ÅÅѾ¸ Ê´Ø · ÒÂ

3.6.3 ¤íÒÊѧè switch

à» ¹¤íÒÊÑ§è ·Õãè ª µÃǨÊͺµÑÇá»ÃËÃ×ͤ Ò¤§·Õâè ´Â·íҧҹà ÇÁ¡Ñº¤íÒÊѧè case à¾×Íè ª ÇÂ㹡ÒõѴÊÔ¹ ã¨Ç Ò µÃ§¡Ñº case ËÃ×Í ¡Ã³Õ ã´ ¶ ÒµÑÇá»ÃËÃ×ͤ Ò¤§·Õè·Õè¹íÒÁÒµÃǨÊͺäÁ µÃ§¡Ñº case ã´àÅ â»Ãá¡ÃÁ¨ÐÁͧËÒ¤íÒÊÑè§ default áÅ Ç¡ÃзíÒ¤íÒÊÑè§ã¹Ê ǹ¢Í§ default á·¹ áµ ¶ ÒäÁ ÁÕ¡ÒÃÃкØã¹ ¤íÒÊѧè default ¡ç¨ÐÍÍ¡¨Ò¡¡Ò÷íÒ§Ò¹ã¹Ê ǹ¢Í§¤íÒÊѧè switch ·Ñ¹·Õ ÁÕû٠Ẻ¡ÒÃ㪠§Ò¹¤íÒÊÑ§è ´Ñ§¹Õé switch(variable) { case const1 : case const2 : default :

block1 break; block2 break; blockn break;

}

â´Â·Õè variable ¤×Í µÑÇá»Ã·Õ¹è Òí ÁÒµÃǨÊͺà§×Íè ¹ä¢ const ¤×Í ¤ Ò·Õãè ª à»ÃÕºà·Õº¡ÑºµÑÇá»Ã·Õ¹è Òí ÁÒµÃǨÊͺ ¶ ҵç¡ÑºµÑÇã´¨Ðä»·íҧҹ㹠block ¹Ñ¹é default ¤×Í Ê Ç¹¢Í§â»Ãá¡ÃÁ·Õ¡è Òí ˹´ãË ·Òí §Ò¹ã¹¡Ã³Õ·àÕè »ÃÕºà·Õº¤ ÒáÅ ÇäÁ µÃ§¡Ñº case ã´àÅ «Ö§è äÁ ¨Òí à» ¹µ ͧÁÕàÊÁÍä»


84

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.35 unsigned char key = 0x05; unsigned char j = 0x41; switch(key) { case 0x01 : j = j & 0xFF; break; case 0x03 : j = j & 0xF0; break; case 0x05 :

j = j & 0x0F;

ß

·íÒ¤íÒÊѧè block ¹Õé

break; } /*—————————result——————————————*/ j = 0x01 /*——————————————————————————*/

ã¹â»Ãá¡ÃÁµÑÇÍ ҧ¹Õé à¹×Íè §¨Ò¡¤ Ңͧà§×Íè ¹ä¢ã¹¡ÒõÃǨÊͺ¤×Í 0x05 ´Ñ§¹Ñ¹é ¨ÐÁÕ¡Ò÷íÒ§Ò¹·Õè case ¢Í§ 0x05 ¹Ñ¹è ¤×Í á͹´ ¤Ò ¢Í§ j ´ Ǥ Ò¤§·Õè 0x0F ä´ ¼ÅÅѾ¸ à» ¹ j = 0x01

µÑÇÍ ҧ·Õè 3.36 unsigned char key = ‘b’ ; unsigned char j = 0x41; switch(key) { case ‘a’ : j = j & 0xFF; break; case ‘b’ : j = j & 0xF0;

ß

·íÒ¤íÒÊѧè block ¹Õé

break; case ‘c’ : j = j & 0x0F; break; default : j = 0x00; break; } /*—————————result——————————————*/ j = 0x40 /*——————————————————————————*/

ã¹â»Ãá¡ÃÁµÑÇÍ ҧ¹Õé ¤ Ңͧà§×Íè ¹ä¢ã¹¡ÒõÃǨÊͺ¤×Í b ´Ñ§¹Ñ¹é ¨ÐÁÕ¡Ò÷íÒ§Ò¹·Õè case ¢Í§ b ¹Ñ¹è ¤×Í á͹´ ¤Ò ¢Í§ j ´ Ǥ Ò¤§·Õè 0xF0 ä´ ¼ÅÅѾ¸ à» ¹ j = 0x40


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

85

3.6.4 ¤íÒÊѧè for à» ¹¤íÒÊÑ觷Õè¡íÒ˹´ãË ÁÕ¡Ò÷íҧҹẺǹÃͺ´ Ç¡ÒõÃǨÊͺ¨Ò¡à§×èÍ¹ä¢ â´Â»¡µÔ¨ÐÁÕ ¡ÒáíÒ˹´Ãͺ¢Í§¡Ò÷íҧҹ໠¹¨íҹǹ·Õáè ¹ ¹Í¹ ÁÕÃٻẺ¢Í§¤íÒÊÑ觴ѧ¹Õé for(initialize ; condition ; incremental) { block }

â´Â·Õè initialize ¤×Í ¤ ÒàÃÔÁè µ ¹·Õ¡è Òí ˹´¨Ò¡µÑÇá»Ã·Õ¹è Òí ÁÒà» ¹à§×Íè ¹ä¢ã¹¡Ò÷íҧҹẺǹÃͺ condition ¤×Í à§×Íè ¹ä¢·Õãè ª 㹡ÒõÃǨÊÍºÇ Ò ¨ÐãË ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ËÃ×ÍäÁ ¶ Òà» ¹ ¨ÃÔ§ ¼Å¡ÒõÃǨÊͺÁÕ¤Ò à» ¹ 1 ¨Ð¡ÃзíÒ¤íÒÊѧè ã¹ block áµ ã¹·Ò§¡ÅѺ¡Ñ¹ ¶ Òà» ¹à·ç¨ ¼Å¡Òà µÃǨÊͺÁÕ¤Ò à» ¹ 0 ¨ÐäÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block incremental ¤×Í ¤íÒÊÑ§è ·Õ¡è ÃзíҡѺµÑÇá»Ã«Ö§è ¹íÒÁÒà» ¹à§×Íè ¹ä¢ µÑÇÍ ҧ·Õè 3.37 unsigned char i = 0 , dat = 3; for(i=0;i<8;i++) { dat++; } /*————————————result——————————————*/ dat = 11 (0x0B) /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 2.37 ¤ÇÒÁËÁÒ¢ͧ for(i=0;i<8;i++) ¤×Í ãª i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ ¡íÒ˹´¤ ÒàÃÔÁè µ ¹à» ¹ 0 à§×Íè ¹ä¢¤×Í ¶ Ò i ¹ ÍÂ¡Ç Ò 8 ¨Ð¡ÃзíÒ¤íÒÊѧè ã¹ block ¶ ÒÁÒ¡¡Ç ҨТ ÒÁä» ¤íÒÊÑ§è ¤×Í i++

ËÁÒ¶֧ ¶ Ò¡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨áÅ Ç ¨Ðà¾ÔÁè ¤ Ò i ¢Ö¹é 1 ¤ Ò

¹Ñ¹è ¤×Í ¨ÐÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 8 ¤ÃÑ§é µÑ§é áµ i = 0 ¶Ö§ i = 7 áÊ´§Ç ÒÁÕ¡ÒáÃзíÒ¤íÒÊѧè dat++; ·Ñ§é ËÁ´ 8 ¤ÃÑ§é ·íÒãË ËÅѧ¨Ò¡Ç¹Ãͺ·íÒ¤íÒÊѧè for àÊÃç¨áÅ Ç ¤ Ңͧ dat ¨Ðà» ¹ 11 (à¹×Í è §¨Ò¡ÁÕ¤Ò àÃÔÁè µ ¹·Õè 3)


86

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.38 unsigned char i = 0 , dat = 3; for(i=0;i<8;i+=2) dat++; /*————————————result——————————————*/ dat = 7 (0x07) /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 2.38 ¤ÇÒÁËÁÒ¢ͧ for(i=0;i<8;i+=2) ¤×Í ¤ ÒàÃÔÁè µ ¹¤×Í i = 0 㪠i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ à§×Íè ¹ä¢¤×Í ¶ Ò i ¹ ÍÂ¡Ç Ò 8 ¨Ð¡ÃзíÒ¤íÒÊѧè ã¹ block ¶ ÒÁÒ¡¡Ç ҨТ ÒÁä» ¤íÒÊÑ§è ¤×Í i+=2 ËÁÒ¶֧ àÁ×Í è ¡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨áŠǨÐà¾ÔÁè ¤ Ò i ¢Ö¹é ·ÕÅÐ 2 ¹Ñ¹è ¤×Í ¨ÐÁÕ¡Ò÷íÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 4 ¤ÃÑ§é ¤×Í i = 0 , 2 , 4 , 6 áÊ´§Ç ÒÁÕ¡Ò÷íÒ¤íÒÊѧè dat++; ·Ñ§é ËÁ´ 4 ¤ÃÑ§é ·íÒãË ËÅѧ¨Ò¡Ç¹Ãͺ·íÒ¤íÒÊѧè for àÊÃç¨áÅ Ç ¤ Ңͧ dat ¨ÐÁÕ¤Ò à» ¹ 7 (à¾ÃÒÐÁÕ¤Ò àÃÔÁè µ ¹·Õè 3)

µÑÇÍ ҧ·Õè 3.39 unsigned char i = 0 , dat = 3; for(i=10;i>=5;i—) dat++; /*————————————result——————————————*/ dat = 9 (0x09) /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 2.39 ¤ÇÒÁËÁÒ¢ͧ for(i=10;i>=5;i ) ¤×Í ¤ ÒàÃÔÁè µ ¹¤×Í i = 10 㪠i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ à§×Íè ¹ä¢¤×Í i>=5 ¶ ÒËÒ¡ i ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 5 ¨Ð¡ÃзíÒ¤íÒÊѧè ã¹ block ¶ Ò¹ ÍÂ¡Ç Ò¨Ð¢ ÒÁä» ¤íÒÊÑ§è ¤×Í i - - ËÁÒ¶֧ ¶ Ò¡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨áŠǨÐÅ´¤ Ò i Å§Ë¹Ö§è ¹Ñ¹è ¤×Í ¨ÐÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 6 ¤Ãѧé àÁ×Íè i = 10 , 9 , 8 , 7 , 6 áÅÐ 5 ¨Ö§ÁÕ¡ÒáÃÐ ·íÒ¤íÒÊѧè dat++; ·Ñ§é ËÁ´ 6 ¤ÃÑ§é ·íÒãË ËÅѧ¨Ò¡Ç¹Ãͺ·íÒ¤íÒÊѧè for àÊÃç¨áÅ Ç ¤ Ңͧ dat à» ¹ 9 (à¾ÃÒÐÁÕ¤Ò àÃÔÁè µ ¹·Õè 3)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

87

3.6.5 ¤íÒÊѧè while

à» ¹¤íÒÊÑ§è ¡íÒ˹´ãË ·Òí §Ò¹Ç¹ÃͺẺäÁ è٠º´ Ç¡ÒõÃǨÊͺ¨Ò¡à§×Íè ¹ä¢ ÁÕû٠Ẻ¤íÒÊѧè à» ¹ while(Condition) { block }

â´Â·Õè condition ¤×Í à§×Íè ¹ä¢·Õãè ª 㹡ÒõÃǨÊÍºÇ Ò¨ÐãË ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ËÃ×ÍäÁ ¶ Òà» ¹ ¨ÃÔ§ ¼Å¡ÒõÃǨÊͺ໠¹ 1 ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block áµ ¶Ò à» ¹à·ç¨ ¼Å¡ÒõÃǨÊͺ໠¹ 0 ¨ÐäÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block ઠ¹ while(1) { block }

à» ¹â»Ãá¡ÃÁ·ÕÁè ¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block ẺäÁ è٠º ¨ÐÊѧࡵàËç¹Ç Ò à§×Íè ¹ä¢¨Ð à» ¹¨ÃÔ§µÅÍ´àÇÅÒ à¾ÃÒзյè Òí á˹ §à§×Íè ¹ä¢ (Condition) ÁÕ¤Ò à» ¹ 1 áµ ¶ Òà» ¹ while(0) { block }

à» ¹â»Ãá¡ÃÁǹÅÙ»·Õ¨è ÐäÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block à´ç´¢Ò´ à¾ÃÒÐÇ Òà§×Íè ¹ä¢¨Ð à» ¹à·ç¨µÅÍ´àÇÅÒ à¾ÃÒзյè Òí á˹ §à§×Íè ¹ä¢ (Condition) ÁÕ¤Ò à» ¹ 0 ·Ñ§é ÊͧÃٻẺ¢Í§¡ÒÃ㪠§Ò¹¤íÒÊÑ§è ¨ÐàËÁ×͹¡Ñ¹¤×Í à§×Íè ¹ä¢à» ¹¨ÃÔ§µÅÍ´àÇÅÒ áµ ¨ÐǹÍÂÙ¡ ºÑ ·Õäè Á ÂÍÁ仡ÃзíÒ¤íÒÊÑ§è ¶Ñ´ä» à¾ÃÒÐäÁ Á¤Õ Òí Êѧè ÍÂÙÀ ÒÂã¹ block àÅ ·íÒãË Ç¹µÃǨÊͺà§×Íè ¹ä¢µÑÇàͧ áÅÐà» ¹¨ÃÔ§µÅÍ´àÇÅÒ ¨ÐÊÒÁÒö¡ÃÐⴴ仡ÃзíÒ¤íÒÊÑ§è ·ÕÍè ¹×è ä´ àÁ×Íè à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ áµ ËÅѧ¨Ò¡ ·íÒâ»Ãá¡ÃÁºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÊÃç¨àÃÕºà ÍÂáÅ Ç¡ç¨Ð¡ÃÐâ´´¡ÅѺÁÒÂѧ·Õ¤è Òí Êѧè while ¹Õàé ª ¹à´ÔÁ


88

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.40 ¡ÒÃ㪠¤Òí Êѧè while 㹡ÒõÃǨÊͺ¤ ÒºÔµ

¡íÒ˹´ãË RI ¤×͵ÑÇá»Ã¢ ÍÁÙÅẺºÔµ (ÁÕ¤Ò à» ¹ä»ä´ ¤Í× 0 ËÃ×Í 1 ෠ҹѹé ) ¶ Òà¢Õ¹â»Ãá¡ÃÁà» ¹

while(RI);

¤íÒÊÑ§è ·Õ1è ; ¤íÒÊÑ§è ·Õ2è ; ¨Ò¡â»Ãá¡ÃÁ¢ Ò§µ ¹ ¨Ðà¡Ô´¡ÒÃǹµÃǨÊͺ¤ ҢͧºÔµ RI ¨¹¡Ç Ò¨Ðà» ¹ 0 ¨Ö§¨Ð¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä» áµ ¶Ò à¢Õ¹â»Ãá¡ÃÁà» ¹ while(~RI);

¤íÒÊÑ§è ·Õ1è ; ¤íÒÊÑ§è ·Õ2è ; ¼Å¡Ò÷íÒ§Ò¹¨ÐµÃ§¢ ÒÁ¡Ñº¡Ã³Õáá â´Â¨ÐǹµÃǨÊͺ¤ ҢͧºÔµ RI ¨¹¡Ç Ò¨Ðà» ¹ 1 ¨Ö§´íÒà¹Ô¹ ¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä»

µÑÇÍ ҧ·Õè 3.41 unsigned char count = 10 , j = 0; while(count>0)

//

¶ Ò count ÁÒ¡¡Ç Ò 0 ¨ÃÔ§ ¡ÃзíÒ¤íÒÊѧè ã¹ block

{ count- -;

//

j++;

//

Å´¤ Ò count ŧ 1 à¾ÔÁè ¤ Ò j ¢Ö¹é 1

} /*————————————result——————————————*/ j = 10 (0x0A) /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 3.41 㪠¤Ò ¢Í§ count à» ¹µÑǵÃǨÊͺà§×Íè ¹ä¢Ç ÒÁÒ¡¡Ç Ò 0 ËÃ×ÍäÁ ¶ Ò㪠¨ÐࢠÒ仡ÃзíÒ ¤íÒÊѧè ã¹ block áÅзء¤ÃÑ§é ·Õàè ¢ Ò仡ÃзíÒ¤íÒÊѧè ã¹ block ¢Í§¤íÒÊѧè while ¨ÐÅ´¤ Ò count ŧ 1 ¤ Ò áÅÐà¾ÔÁè ¤ Ò j 1 ¤ Ò ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 10 ¤Ãѧé àÁ×Íè ¤ Ңͧ count = 10, 9, 8, 7, 6, 5, 4, 3, 2,1


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

89

µÑÇÍ ҧ·Õè 3.42 unsigned char test = ‘a’, m = 0; while(test==’a’) { test = ‘b’;

//

m = 0xFF;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} while(test==’b’) { test = ‘a’;

//

m = 0xAA;

//

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*————————————result——————————————*/ test = ‘a’ (0x61) m = 0xAA /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 3.42 ¡íÒ˹´¤ ÒàÃÔÁè µ ¹¢Í§ test = ‘a’ àÁ×Íè â»Ãá¡ÃÁ·íÒ§Ò¹¾º¤íÒÊÑ§è µÃǨÊͺ à§×Íè ¹ä¢ while(test==’a’) áÅоºÇ Òà» ¹¨ÃÔ§ ¨Ö§¡ÃзíÒ¤íÒÊѧè ã¹ block ¤×Í ¤íÒÊÑ§è ·Õè 1 áÅÐ ¤íÒÊÑ§è ·Õè 2 ¼Å¢Í§¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 :

test = ‘b’;

¼Å¢Í§¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 2 :

m = 0xFF;

µ ͨҡ¹Ñ¹é àÁ×Íè ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢¢Í§ test ÍÕ¡¤ÃÑ§é ´ ǤíÒÊѧè while(test==’a’) ¨Ð¾ºÇ Ò äÁ à» ¹¨ÃÔ§ÍÕ¡µ Íä» à¾ÃÒÐËÅѧ¨Ò¡¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 ¤ Ңͧ test ¡ÅÒÂà» ¹ b ä»áÅ Ç ·íÒãË à§×Íè ¹ä¢¡ÒõÃǨ ÊͺäÁ à» ¹¨ÃÔ§ ¨Ö§¢ ÒÁÒÂѧ¤íÒÊÑ§è µÃǨÊͺà§×Íè ¹ä¢ while(test==’b’) áÅоºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ¨Ö§à¢ Ò ä»¡ÃзíÒ¤íÒÊѧè ã¹ block ¤×Í ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 µ Íä» ¼Å¢Í§¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 :

test = ‘a’;

¼Å¢Í§¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 4 :

m = 0xAA;


90

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.6.6 ¤íÒÊѧè do-while à» ¹¤íÒÊÑ觷ÕèÁÕ¡Ò÷íҧҹẺǹÃͺâ´Â¡ÒõÃǨÊͺ¨Ò¡à§×è͹ä¢àËÁ×͹¡Ñº¤íÒÊÑè§ while ᵠᵡµ Ò§¡Ñ¹µÃ§·Õ¨è ÐÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ¡ ͹ 1 ¤Ãѧé áŠǨ֧µÃǨÊͺà§×Íè ¹ä¢ã¹Ê ǹ¢Í§ while ÁÕû٠Ẻ´Ñ§¹Õé do { block }while(Condition);

µÑÇÍ ҧ·Õè 3.43 unsigned char dat = 0 , j = 0; do { dat++; }while(j != 0)

// //

à¾ÔÁè ¤ Ò dat ¢Ö¹é 1 ¤ Ò ¶ ÒËÒ¡ j äÁ ෠ҡѺ 0 ¨ÐࢠÒä»·íÒ¤íÒÊѧè 㹺ÅçÍ¡ (¤íÒÊѧè

dat++;)

/*————————————result——————————————*/ dat = 1 (0x01) /*—————————————————————————————*/

¨Ò¡µÑÇÍ ҧ·Õè 2.43 àÁ×Íè ¾º¤íÒÊѧè do-while â»Ãá¡ÃÁ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block ¡ ͹·Ñ¹·Õ ´Ñ§¹Ñ¹é ¨Ö§¡ÃзíÒ¤íÒÊѧè dat++; ·íÒãË dat ÁÕ¤Ò à» ¹ 1 ¨Ò¡¹Ñ¹é ¨Ö§µÃǨÊÍºÇ Ò j äÁ ෠ҡѺ 0 ¨ÃÔ§ËÃ×ÍäÁ »ÃÒ¡¯Ç Ò äÁ ¨ÃÔ§ ¨Ö§·íÒãË ÍÍ¡¨Ò¡ÅÙ»¢Í§¤íÒÊѧè do-while


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

91

3.7 ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè áÅÐ㪠§Ò¹¿ §¡ ª¹Ñè ã¹â»Ãá¡ÃÁÀÒÉÒ C ã¹ËÑÇ¢ ͹Õàé » ¹¡ÒâÂÒ¤ÇÒÁà¡ÕÂè ǡѺ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè à¾×Íè àÃÕ¡㪠§Ò¹ áÅÐÃǺÃÇÁà¾×Íè Êà ҧ à» ¹äźÃÒÃÕà¡çºäÇ ãª §Ò¹ Íѹ¨Ðª ÇÂãË ¡ÒÃÊà ҧâ»Ãá¡ÃÁÁÕ¤ÇÒÁÊдǡ¢Ö¹é ã¹Í¹Ò¤µ ã¹ÀÒÉÒ C ÁÕ¿§ ¡ ª¹Ñè ËÅÑ¡·Õàè ÃÕÂ¡Ç Ò main ËÃ×ͺҧ¤Ãѧé àÃÕÂ¡Ç Ò Ê Ç¹â»Ãá¡ÃÁËÅÑ¡ à» ¹Ê ǹ·Õè â»Ãá¡ÃÁ¡ÃзíÒ¤íÒÊÑè§ÀÒÂã¹äÅ àÃÕ§¡Ñ¹ä» áÅШÐÁÕ¡ÒáÃÐⴴ仡ÃзíÒ¤íÒÊÑè§ÀÒÂ㹿 §¡ ªÑè¹Í×è¹ ·ÕèÁÕ¡ÒûÃСÒÈäÇ ¡çµ ÍàÁ×èÍÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹¹Ñé¹æ ÀÒÂã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡ ËÃ×Í ÍÒ¨¡ÃÐⴴ仡ÃзíÒ¤íÒÊÑè§à¹×èͧ¨Ò¡à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¨Ò¡áËÅ §¡íÒà¹Ô´ã´æ ÊØ´· Ò¡ç¨Ð¡ÅÑºà¢ Ò ÁÒã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡ÍÂÙ´ Õ ¹Í¡¨Ò¡¹ÕÀé ÒÂ㹿 §¡ ª¹Ñè àͧÂѧÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ä´ ´Ç  ´Ñ§¹Ñ¹é ¡Ò÷íÒ§Ò¹¡Ñº¿ §¡ ª¹Ñè ¨Ö§¶×ÍÇ Òà» ¹Ê ǹ·ÕÁè ºÕ ·ºÒ·ÊíҤѭ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁàÅ·Õà´ÕÂÇ ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè áÅСÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÁÕû٠Ẻ´Ñ§¹Õé return_type function_name(parameter1, parameter2, ...) { command_list; }

â´Â·Õè return_type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙÅ·ÕÁè ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ áÅÐÀÒÂ㹿 §¡ ª¹Ñè ª¹Ô´¹Õ¨é Ð㪠¤íÒÊѧè return(value) à¾×Íè Ê §¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ «Ö§è ª¹Ô´¢Í§¢ ÍÁÙÅ value ·ÕÊè § ÍÍ¡ÁÒ¤ÇèÐà» ¹ª¹Ô´à´ÕÂÇ ¡Ñº return_type à¾×Íè » ͧ¡Ñ¹¤ÇÒÁ¼Ô´¾ÅÒ´·ÕÍè Ò¨à¡Ô´¨Ò¡¡ÒÃÃѺ¢ ÍÁÙÅ ÊíÒËÃѺ¿ §¡ ª¹Ñè ·Õäè Á Á¡Õ Òä׹ ¤ Ò ·Õµè Òí á˹ § return_type µ ͧ»ÃСÒÈà» ¹ void parameter ¤×Í Ê Ç¹·ÕÁè ¡Õ ÒûÃСÒȪ¹Ô´¢ ÍÁÙÅáÅЪ×Íè ¢Í§µÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¤ Ò·ÕÊè § ¼ Ò¹ãË ¡Ñº¿ §¡ ª¹Ñè ÍÒ¨¨ÁÕ 1 µÑÇ, ËÅÒµÑÇ ËÃ×ÍäÁ ÁàÕ Å¡çä´ ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒÃ㪠§Ò¹¢Í§¿ §¡ ª¹Ñè ¹Ñ¹é æ ¶ ÒËÒ¡ ¿ §¡ ª¹Ñè äÁ ÁÕ parameter ÃѺ¤ Ò ÍÒ¨»ÃСÒÈà» ¹ void ËÃ×ÍàÇ ¹Ç Ò§äÁ »ÃСÒÈ¡çä´ command_list ¤×Í ¤íÒÊÑ§è µ Ò§æ ·ÕÁè ÍÕ ÂÙã ¹µÑÇ¿ §¡ ª¹Ñè «Ö§è àÁ×Íè ¨º 1 ¤íÒÊÑ§è ¨Ðµ ͧ» ´· Ò´ ÇÂà¤Ã×Íè § ËÁÒ ; àÊÁÍ ËÁÒÂà赯 : ·Õµè Òí á˹ § value ¹Ñ¹é ÍҨ໠¹¤ Ò¤§·Õè , µÑÇá»Ã , ËÃ×ͼÅÅѾ¸ ¨Ò¡¡ÒáÃзíÒ¤íÒÊѧè ã´æ ¡çä´


92

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.44 #include<reg51.h> unsigned char i,j,x,y; void test1(void)

»ÃСÒÈãË ¤ÍÁä¾àÅÍà è٠¡Ñ ¡ÑºÃÕ¨ÊÔ àµÍà ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà // »ÃСÒȵÑÇá»Ãà¾×Í è 㪠§Ò¹à» ¹áººÊ ǹÃÇÁ // ¿ §¡ ª¹ Ñè ª×Íè test1 à» ¹áººäÁ µÍ §ÁÕ¡ÒÃÊ §¼ Ò¹¤ ÒáÅÐ // äÁ Á¡ Õ Òä׹¤ Ò¼ÅÅѾ¸ (return value) ã´æ ¡ÅѺÁÒ //

{ //

¤íÒÊѧè ÀÒÂ㹿 §¡ ª¹Ñè // ¤íÒÊÑ§è ·Õè 1 ÀÒÂã¹â»Ãá¡ÃÁËÅÑ¡

void test2(void) {

//

¿ §¡ ª¹Ñè test2 à» ¹áººäÁ Á¡Õ ÒÃÊ §¼ Ò¹¤ ÒáÅФ׹¤ Ò¼ÅÅѾ¸ ã´æ

y = i + 10;

//

¤íÒÊѧè ÀÒÂ㹿 §¡ ª¹Ñè test2

//

¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ

x = i + 5; }

} void main(void) { i = j = x = y = 0; test1(); test2(); while(1);

¤íÒÊÑ§è ·Õè 1 ÀÒÂã¹â»Ãá¡ÃÁËÅÑ¡ // ¤íÒÊÑ§è ·Õè 2 ÀÒÂã¹â»Ãá¡ÃÁËÅÑ¡ à» ¹¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹ Ñè test1 // ¤íÒÊÑ§è ·Õè 3 ÀÒÂã¹â»Ãá¡ÃÁËÅÑ¡ à» ¹¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹ Ñè test2 // ¤íÒÊÑ§è ·Õè 4 ÀÒÂã¹â»Ãá¡ÃÁËÅÑ¡ ǹÃͺÍÂÙ· àÕè ´ÔÁäÁ ÁËÕ ÂØ´

//

/*———————————result——————————*/ /*—————————— x = 5, y = 10 ——————————*/ }

¨Ò¡µÑÇÍ ҧ·Õè 3.44 ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁËÅÑ¡¨ÐÍÂÙÀ ÒÂã¹Ê ǹ»ÃСÒÈ void main(void) áÅÐÀÒÂã¹ÁÕ¡ÒáÃзíÒ¤íÒÊѧè 4 ¤íÒÊÑ§è ·Õ¹è Ò Ê¹ã¨¤×Í ¤íÒÊÑ§è ·Õè 2 áÅÐ 3 «Ö§è à» ¹¤íÒÊѧè à¾×Íè àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè test1 áÅÐ test2 µÒÁÅíҴѺ ´Ñ§¹Ñ¹é àÁ×Íè ÁÕ¡ÒÃàÃÕ¡ test1(); ¨Ðà» ¹¡ÒáíÒ˹´ãË ¡ÃзíÒ¤íÒÊѧè x = i + 5; ËÅѧ¨Ò¡¹Ñ¹é ¡ÅѺ ÁÒ¡ÃзíÒ¤íÒÊÑ§è µ Íä»ã¹â»Ãá¡ÃÁËÅÑ¡ «Ö§è ¡ç¤Í× ¤íÒÊÑ§è ·Õè 3 àÁ×Íè ÁÕ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè test2(); ¨Ðà» ¹¡ÒáíÒ˹´ãË ¡ÃзíÒ¤íÒÊѧè y = i + 10; ËÅѧ¨Ò¡¹Ñ¹é ¨Ö§¡ÅѺÁÒ¡ÃзíÒ¤íÒÊÑ§è µ Íä»ã¹â»Ãá¡ÃÁËÅÑ¡ «Ö§è ¡ç¤Í× ¤íÒÊÑ§è ·Õè 4 ¹Í¡¨Ò¡¹ÕÅé Òí ´Ñº¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ÂѧÁÕÊÇ ¹ãË ¿§ ¡ ª¹Ñè Í×¹è æ ÁͧàËç¹áÅÐàÃÕ¡㪠§Ò¹ä´ ´Ç Â


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

93

µÑÇÍ ҧ·Õè 3.45 #include<reg51.h> unsigned char i, j,x, y; void main(void) { i = j = x = y = 0; test1(); test2(); while(1); } void test1(void) { x = i + 5; } void test2(void) { y = i + 10; }

¨Ò¡µÑÇÍ ҧ·Õè 3.45 ¤Å Ò¡ѺµÑÇÍ ҧ·Õè 3.44 à¾Õ§ᤠÁ¡Õ ÒÃÊÅѺãË â»Ãá¡ÃÁËÅÑ¡à» ¹¿ §¡ ª¹Ñè áá·Õ¶è ¡Ù »ÃСÒÈ¡ ͹ àÁ×Íè Ãѹâ»Ãá¡ÃÁ¨Ðà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹é à¹×Íè §¨Ò¡¤ÍÁä¾àÅÍà äÁ è٠¡Ñ ¿ §¡ ª¹Ñè test1 áÅÐ test2 à¾ÃÒÐÂѧäÁ ä´ Á¡Õ ÒûÃСÒÈãË äÇ ¡Í ¹Ë¹ Òâ»Ãá¡ÃÁËÅÑ¡ ·íÒãË â»Ãá¡ÃÁËÅÑ¡äÁ ÊÒÁÒöàË繿 §¡ ª¹Ñè ·Ñ§é ÊÍ§ä´ «Ö§è ÁÕÇ¸Ô áÕ ¡ ä¢â´Â»ÃСÒÈà¾ÔÁè àµÔÁ·ÕÊè Ç ¹ËÑǢͧ¿ §¡ ª¹Ñè ·Ñ§é Êͧ¤Å Ò¡Ѻ¡ÒûÃСÒȵÑÇá»Ã ¨ÐàÃÕ¡ÇÔ¸¹Õ ÇÕé Ò à» ¹ ¡ÒûÃСÒÈẺ¿ §¡ ª¹Ñè â»Ãâµ ä·» (function prototype) ´Ñ§µÑÇÍ ҧµ Í仹Õé #include<reg51.h> unsigned char i , j ,x , y ; void test1(void);

ß

void test2(void);

ß

Ê Ç¹·Õàè ¾ÔÁè ࢠÒÁÒ Ê Ç¹·Õàè ¾ÔÁè ࢠÒÁÒ

void main(void) { i = j = x = y = 0; test1(); test2(); while(1); } void test1(void) { x = i + 5; } void test2(void) { y = i + 10; }

ËÅѧ¨Ò¡¹Õ¶é Ò ·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁãËÁ ¡¨ç ÐäÁ à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´´Ñ§¡Å ÒÇ à¾ÃÒÐâ»Ãá¡ÃÁËÅÑ¡¨ÐÁͧàËç¹ áÅÐàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè test1 áÅÐ test2 áÅ Ç


94

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.46 unsigned char b=0; ........................... void test3(unsigned char dat) { unsigned char a = 2; a +=10;

//

b = a + dat;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

}

¨Ò¡µÑÇÍ ҧ·Õè 3.46 㹡ÒûÃСÒÈ¿ §¡ ª¹Ñè test3 ÁÕµÇÑ á»Ã·ÕÃè ºÑ ¤ Ò¤×Í dat «Ö§è à» ¹¢ ÍÁÙŪ¹Ô´ unsigned char «Ö§è ¶ Òµ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ·é Òí ä´ â´Âà¢Õ¹¤íÒÊѧè test3(5); ËÁÒÂ¶Ö§Ê §¢ ÍÁÙÅ 5 ä»ãË µÇÑ á»Ã dat à¾×Íè ä»ãª ´Òí à¹Ô¹¡Òà ËÅѧ¨Ò¡¡ÒÃàÃÕ¡¤íÒÊѧè áŠǨзíÒãË b ÁÕ¤Ò à» ¹ 17 (à¡Ô´¨Ò¡¡Ò÷íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2)

µÑÇÍ ҧ·Õè 3.47 unsigned char b=0; ........................... void test4(unsigned char dat1, unsigned char dat2) { dat1++;

//

dat2++;

//

b = dat1+dat2;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2 ¤íÒÊÑ§è ·Õè 3

}

¨Ò¡µÑÇÍ ҧ·Õè 3.47 ·Õ¿è § ¡ ª¹Ñè test4 ÁÕµÇÑ á»Ã·Õãè ª ÃºÑ ¤ Ò 2 µÑǤ×Í dat1 áÅÐ dat2 â´Â·Ñ§é ¤Ùà » ¹¢ ÍÁÙÅ ª¹Ô´ unsigned char ¶ Òµ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ·é Òí ä´ â´Âà¢Õ¹¤íÒÊѧè test4(10,20); ËÁÒÂ¶Ö§Ê § ¢ ÍÁÙÅ 10 ä»ãË µÇÑ á»Ã dat1 áÅÐÊ §¢ ÍÁÙÅ 20 ä»ãË µÇÑ á»Ã dat2 à¾×Íè ä»ãª ´Òí à¹Ô¹¡Òà ËÅѧ¨Ò¡¡ÒÃàÃÕ¡¤íÒÊѧè áŠǨзíÒãË b ÁÕ¤Ò à» ¹ 32 (à¡Ô´¨Ò¡¡Ò÷íÒ¤íÒÊÑ§è ·Õ1è , 2 áÅÐ 3)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.48 #include<C51rd2.h>

// //

l

95

ÁÕ¡ÒûÃСÒÃãË ¤ÍÁä¾àÅÍà è٠¡Ñ ¡ÑºÃÕ¨ÊÔ àµÍà áÅкԵµ Ò§æ ÀÒÂã¹µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà P89C51RD2

unsigned char b=0; void test4(unsigned char dat1, unsigned char dat2) //

¿ §¡ ª¹Ñè ÁÕ¡ÒÃÊ §¼ Ò¹¤ Ò 2 µÑÇ áÅÐäÁ Á¡Õ ÒÃÊ §¤ Ò¼ÅÅѾ¸ ¤¹× ¡ÅѺ

{ dat1++; dat2++; b = dat1+dat2; } void test5(void)

//

¿ §¡ ª¹Ñè äÁ Á¡Õ ÒÃÊ §¼ Ò¹¤ ÒáÅÐäÁ Á¡Õ ÒÃÊ §¤ Ò¼ÅÅѾ¸ ¤¹× ¡ÅѺ

//

àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè test4 (ãË ¼ÅÅѾ¸ b = 43)

//

¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ

{ test4(15,26); } void main(void) { test4(6,9);

//

test5();

//

b +=5;

//

while(1);

//

ËÅѧ¨Ò¡àÃÕ¡¤íÒÊÑ§è ¹Õãé Ë ¼ÅÅѾ¸ b = 17 ËÅѧ¨Ò¡àÃÕ¡¤íÒÊÑ§è ¹Õãé Ë ¼ÅÅѾ¸ b = 43 ËÅѧ¨Ò¡àÃÕ¡¤íÒÊÑ§è ¹Õãé Ë ¼ÅÅѾ¸ b = 48 ǹÃͺÍÂÙ· àÕè ´ÔÁẺäÁ ÁËÕ ÂØ´

/*———————————result——————————*/ /*———————————b = 48—————————*/ }

µÑÇÍ ҧ·Õè 3.49 unsigned char result = 0; ........................... unsigned char six(void) { return(6);

//

¿ §¡ ª¹Ñè äÁ Á¡Õ ÒÃÊ §¼ Ò¹¤ Ò áµ Á¡Õ ÒÃÊ §¤ Ò¼ÅÅѾ¸ ¤¹× ¡ÅѺ

//

Ê §¤ Ò¼ÅÅѾ¸ ÍÍ¡ä»ÁÕ¤Ò à» ¹ 6

}

¨Ò¡µÑÇÍ ҧ·Õè 3.49 㹿 §¡ ª¹Ñè six ¨ÐÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ à» ¹ª¹Ô´¢ ÍÁÙÅ unsigned char áÅФ Ò¼ÅÅѾ¸ ·Õ¤è ¹× ¤ ÒÍ͡仨ҡ¿ §¡ ª¹Ñè ¹Õàé » ¹¤ Ò¤§·Õàè · ҡѺ 6 «Ö§è ¶ Òµ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ·é Òí ä´ â´Âà¢Õ¹¤íÒÊѧè result = six();

·íÒãË ä´ ¼ÅÅѾ¸ result = 6 áÅж Òà¢Õ¹µ Íà» ¹ result = six() +3;

¨Ðä´ ¼ÅÅѾ¸ à» ¹ result = 9 ÊÃØ»Ç Ò¶ ÒÁÕ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ·ÕÁè ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ·Õµè Òí á˹ §¢Í§¡ÒÃàÃÕ¡¨Ðà» ¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òà ¤×¹¤ Ңͧ¿ §¡ ªÑè¹¹Ñé¹


96

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.50 unsigned char result = 0; ........................... unsigned char sum(unsigned char a , unsigned char b) //

¿ §¡ ª¹Ñè ÁÕ¡ÒÃÊ §¼ Ò¹¤ Ò áÅÐÁÕ¡ÒÃÊ §¤ Ò¼ÅÅѾ¸ ¤¹× ¡ÅѺ

{ unsigned char dat; dat = a+b;

//

»ÃСÒÈäÇ à¾×Íè à¡çº¢ ÍÁÙŨҡ¡Òäíҹdz໠¹¡ÒûÃСÒȵÑÇá»Ã· ͧ¶Ô¹è

return(dat);

//

Ê §¤ Ңͧ dat ÍÍ¡ä»à» ¹¤ Ò¼ÅÅѾ¸

}

¨Ò¡µÑÇÍ ҧ·Õè 3.50 㹿 §¡ ª¹Ñè sum ÁÕµÇÑ á»Ã a áÅÐ b ÃѺ¤ Ò·ÕÊè § ¼ ҹࢠÒÁÒ㹿 §¡ ª¹Ñè ¹Õé â´ÂÁÕ¡Òä׹ ¤ Ò¼ÅÅѾ¸ à» ¹ª¹Ô´¢ ÍÁÙÅ unsigned char áÅмÅÅѾ¸ ·¤Õè ¹× ¤ ÒÍ͡仨ҡ¿ §¡ ª¹Ñè ¹Õàé » ¹¤ Ò¢ ÍÁÙŢͧ dat ·Õäè ´ ¨Ò¡¼ÅºÇ¡¢Í§ a ¡Ñº b ¶ Òµ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ·é Òí ä´ ´§Ñ ¹Õé result = sum(7,5);

¨Ðä´ ¼ÅÅѾ¸ à» ¹ result = 12

áÅж Òà¢Õ¹໠¹

result = sum(10,14) +3;

¨Ðä´ ¼ÅÅѾ¸ à» ¹ result = 24+3 = 27 Í ҧäáçµÒÁ ÊÒÁÒöà¢Õ¹¿ §¡ ª¹Ñè sum ãË Ê¹Ñé Å§ä´ ´§Ñ ¹Õé unsigned char sum(unsigned char a , unsigned char b) { return(a+b); }


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

97

µÑÇÍ ҧ·Õè 3.51 #include<C51rd2.h>

µÑÇá»Ã result1 à¡çº¤ ÒÍÂÙã ¹ª ǧ 0 ¶Ö§ 255 0; // µÑÇá»Ã result2 à¡çº¤ ÒÍÂÙã ¹ª ǧ 0 ¶Ö§ 255 // µÑÇá»Ã result3 à¡çº¤ ÒÍÂÙã ¹ª ǧ -32768 ¶Ö§ 32767 // µÑÇá»Ã result4 à¡çº¤ ÒÍÂÙã ¹ª ǧ -32768 ¶Ö§ 32767

unsigned char result1 = 0; // unsigned char result2 = int result3 = 0; int result4 = 0;

unsigned char sum(unsigned char a , unsigned char b) { return(a+b); } int mul(int x , int y) { return(x*y); } void main(void)

//

¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ

//

ãË ¤Ò ¼ÅÅѾ¸ àËÁ×͹ 18+7 = 25

{ result1 = sum(18,7);

result2 = sum(12,4)+sum(4,9); //

ãË ¤Ò ¼ÅÅѾ¸ àËÁ×͹ (12+4)+(4+9) = 29

result3 = mul(10,50)+ sum(100,27); //

ãË ¤Ò ¼ÅÅѾ¸ àËÁ×͹ (10x50) + (100+27) = 627

result4 = mul(sum(15,4),sum(8,12)); // while(1);

//

ãË ¤Ò ¼ÅÅѾ¸ àËÁ×͹ (15+4) x (8+12) = 380 ǹÃͺÍÂÙ· àÕè ´ÔÁ

/*———————————result——————————*/ /*—————————result1 = 25———————*/ /*—————————result2 = 29———————*/ /*—————————result3 = 627——————*/ /*—————————result4 = 380——————*/ }

¨Ò¡µÑÇÍ ҧ·Õè 3.51 à» ¹¡Ò÷´Êͺ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ·ÕÁè ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ¨Ò¡¿ §¡ ª¹Ñè sum áÅÐ mul â´Â¿ §¡ ª¹Ñè ·Ñ§é ¤Ù¨ ÐÍÒÈÑ¡ÒÃÊ §¼ Ò¹¤ Ңͧ¢ ÍÁÙÅà¾×Íè ¹íÒ令íҹdz áÅÐãË ¼ÅÅѾ¸ ¤¹× ¤ ÒÍÍ¡ÁÒ ¨Ò¡µÑÇÍ ҧ¹Õ¢é Í ¤ÇÃÃÐÇѧ¤×Í ·Õµè ÇÑ á»Ã result3 áÅÐ result4 ¶ ÒÁÕ¡ÒÃà»ÅÕÂè ¹ä»»ÃСÒȵÑÇá»ÃãËÁ à» ¹ unsigned char result3 = 0; unsigned char result4 = 0;

¨Ð·íÒãË ä´ ¤Ò ¼ÅÅѾ¸ ¢Í§·Ñ§é result3 áÅÐ result4 ¼Ô´ä»¨Ò¡¤ÇÒÁà» ¹¨ÃÔ§ à¾ÃÒСÒûÃСÒȪ¹Ô´¢ ÍÁÙÅ unsigned char ÊÒÁÒöà¡çº¤ Ò㹪 ǧ 0 ¶Ö§ 255 à· Ò¹Ñ¹é ´Ñ§¹Ñ¹é 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁµ ͧÃÐÇѧ¨Ø´¹Õ´é Ç Â


98

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.52 #include<C51rd2.h> bit result1 = 0;

//

bit result2 = 0;

//

bit result3 = 0;

//

µÑÇá»Ã result1 à¡çº¤ ÒẺºÔµ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 ËÃ×Í 1 µÑÇá»Ã result2 à¡çº¤ ÒẺºÔµ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 ËÃ×Í 1 µÑÇá»Ã result3 à¡çº¤ ÒẺºÔµ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 ËÃ×Í 1 µÑÇá»Ã result4 à¡çº¤ ÒẺºÔµ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 ËÃ×Í 1

bit result4 = 0; // unsigned char sum(unsigned char a , unsigned char b) { return(a+b); } int mul(int x , int y) { return(x*y); } Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ void main(void) // ¿ §¡ ª¹ { if(sum(14,6)>=30) result1 = 1; if(sum(100,200)<sum(42,300)) result2 = 1; if(mul(2,2)!=sum(2,2)) result3 = 1; if(mul(6,10)==sum(30,30)) result4 = 1; while(1); // /*—————————result1 /*—————————result2 /*—————————result3 /*—————————result4

ǹÃͺÍÂÙ· àÕè ´ÔÁ = = = =

0————————*/ 1————————*/ 0————————*/ 1————————*/

}

¨Ò¡µÑÇÍ ҧ·Õè 3.52 à» ¹¡Ò÷´Êͺ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè sum áÅÐ mul ·Õµè Òí á˹ §à§×Íè ¹ä¢¢Í§ if à¾×Íè 㪠µÃǨÊͺà§×Íè ¹ä¢ â´ÂÊÒÁÒö͸ԺÒÂä´ ´§Ñ ¹Õé à§×Íè ¹ä¢ if(sum(14,6)>=30) ¨Ðä´ if(20>=30) à§×Íè ¹ä¢à» ¹à·ç¨ à§×Íè ¹ä¢ if(sum(100,200)<sum(42,300)) ¨Ðä´ if(300<342) à§×Íè ¹ä¢à» ¹¨ÃÔ§ à§×èÍ¹ä¢ if(mul(2,2)!=sum(2,2)) ¨Ðä´ if(4!=4) à§×Íè ¹ä¢à» ¹à·ç¨ à§×Íè ¹ä¢ if(mul(6,10)==sum(30,30)) ¨Ðä´ if(60==60) à§×Íè ¹ä¢à» ¹¨ÃÔ§

·Õ¡è Å ÒÇÁҷѧé ËÁ´à» ¹¡ÒÃá¹Ð¹íÒÊÔ§è ·Õ¤è ÇÃÃÙã ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¢Ñ¹é ¾×¹é °Ò¹ ¼Ù· àÕè ÃÔÁè ÈÖ¡ÉÒ ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨íÒà» ¹Í ҧÂÔ§è ·Õ¨è е ͧ·íÒ¤ÇÒÁࢠÒ㨠àÃÕ§ÅíҴѺ໠¹¢Ñ¹é µÍ¹ áÅе ͧáÁ ¹ÂíÒã¹àÃ×Íè § ÃٻẺ¡ÒûÃСÒȵÑÇá»ÃËÃ×Í¡ÒÃ㪠¿§ ¡ ª¹Ñè µÅÍ´¨¹ÃٻẺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ ¡ÒÃ㪠à¤Ã×Íè §ËÁÒ áÅÐÃٻẺµÑÇÍÑ¡Éà «Ö§è ã¹â»Ãá¡ÃÁÀÒÉÒ C µ ͧ㪠µÇÑ ¾ÔÁ¾ àÅç¡à· ҹѹé ã¹Ê ǹ¢Í§à¹×Íé â»Ãá¡ÃÁ ÍÒ¨ µ ͧ㪠àÇÅÒà¾×Íè ·íÒ¤ÇÒÁࢠÒã¨àÅ硹 Í ᵠ¶Ò ËÒ¡ÊÒÁÒö¨´¨íÒáÅÐࢠÒã¨ã¹ÇÔ¸¡Õ Òà ¼ÅÅѾ¸ ·äÕè ´ ¨Ò¡à¢Õ¹ â»Ãá¡ÃÁÀÒÉÒ C ¨Ðª ÇÂãË §Ò¹¾Ñ²¹ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà Êдǡ¢Ö¹é Í ҧṠ¹Í¹


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

99

3.8 ÀÒÉÒ C ¡ÑºË¹ ǤÇÒÁ¨íÒã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ã¹â¤Ã§Êà ҧ·Ò§ÎÒà ´áÇà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¹Ñ¹é ä´ áº §ãª ¾¹×é ·Õáè ÅÐÍ Ò§¶Ö§ µíÒá˹ §ã¹Ë¹ ǤÇÒÁâ»Ãá¡ÃÁ, ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂ㹡ѺÀÒ¹͡, ÃÕ¨ÊÔ àµÍà ÀÒÂã¹ áÅоÍà µ ÀÒ¹͡Í ҧ੾ÒÐà¨ÒШ§ ˹ ǤÇÒÁ¨íÒÀÒÂã¹ºÒ§Ê Ç¹ÊÒÁÒÃ¶Í Ò§ã¹ÃдѺºÔµä´ ËÃ×Í㪠§Ò¹ä´ ·§Ñé à» ¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹ ËÃ×Íà» ¹ÃÕ¨ÊÔ àµÍà ¡äç ´ ¹Ñ¹è ·íÒãË ¡ÒÃ㪠ÀÒÉÒ C ÊíÒËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ ãË á¡ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 µ ͧÊÒÁÒö¡íÒ˹´¡ÒÃ㪠§Ò¹µÑÇá»Ã, ¤ Ò¤§·Õè áÅп §¡ ª¹Ñè µÒÁ¾×¹é ·Õè ˹ ǤÇÒÁ¨íÒ·Õµè Í §¡ÒÃä´ Í ҧ੾ÒÐà¨ÒШ§àª ¹¡Ñ¹ ´Ñ§¹Õé

3.8.1 ¡ÒÃÃкت¹Ô´Ë¹ ǤÇÒÁ¨íÒãË ¡ºÑ µÑÇá»ÃáÅФ Ò¤§·Õãè ¹â»Ãá¡ÃÁÀÒÉÒ C µÑÇá»ÃáÅФ Ò¤§·Õãè ¹â»Ãá¡ÃÁÀÒÉÒ C ·Õ¤è ÍÁä¾àÅÍà RC-51 ¹Ñ¹é ÊÒÁÒöÃкت¹Ô´¢Í§Ë¹ Ç ¤ÇÒÁ¨íÒ·Õ¨è ´Ñ à¡çºä´ «Ö§è äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Ạ§ª¹Ô´¢Í§Ë¹ ǤÇÒÁ¨íÒÍÍ¡à» ¹ 3 Ê Ç¹ ¤×Í Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ (program memory) , ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹ (internal data memory) áÅÐ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒ¹͡ (external data memory) â´ÂÊÒÁÒö¡íÒ˹´ª¹Ô´¢Í§ ˹ ǤÇÒÁ¨íÒãË ¡ºÑ µÑÇá»ÃáÅФ Ò¤§·Õè ä´ ´§Ñ ¹Õé

3.8.1.1 code à» ¹¡ÒÃÃкض֧˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ«Öè§Í Ò¹ä´ Í ҧà´ÕÂÇ äÁ ÊÒÁÒöà¢Õ¹¢ ÍÁÙÅŧä»ä´ ¨Ö§ÁÑ¡¡íÒ˹´ãË ¡ºÑ µÑÇá»Ã·ÕÁè ¤Õ Ò ¤§·Õè ´Ñ§µÑÇÍ ҧµ Í仹Õé code char *p= “Hello!”;

¡íÒ˹´µÑÇá»Ã¾Í¹ àµÍà (pointer) ª×Íè p à¡çºµÑÇÍÑ¡Éà Hello! äÇ ã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ char code HexPattern[]={0x11,0x22,0x33,0x44,0x55};

¡íÒ˹´µÑÇá»ÃÍÒà àà(array) ª×Íè HexPattern à¡çº¤ ÒàÅ¢°Ò¹ÊԺˡ 0x11,0x22,0x33,0x44,0x55 äÇ ã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁµÒÁÅíҴѺ

ÁÕ¢ ÍÊÑ§à¡µÇ Ò ¡ÒÃÃкت¹Ô´¢Í§µÑÇá»ÃáÅФ Ò¤§·Õè¡Ñºª¹Ô´¢Í§Ë¹ ǤÇÒÁ¨íÒ ÊÒÁÒöÊÅѺ µíÒá˹ §¡ ͹-ËÅѧ¡Ñ¹ä´ â´ÂÂѧ¤§¤ÇÒÁËÁÒÂà´ÕÂǡѹ


100

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.8.1.2 data, sfr, bdata áÅÐ idata à» ¹¡ÒÃÃкض§Ö ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹ ÁÕ 4 Ẻ ¤×Í data, sfr, bdata áÅÐ idata â´ÂÁÕÃÒ ÅÐàÍÕ´´Ñ§¹Õé data à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒÂã¹â´ÂµÃ§ (direct data) «Ö§è »¡µÔËÒ¡äÁ Ãкت¹Ô´Ë¹ ǤÇÒÁ¨íÒ ¢Í§µÑÇá»ÃáÅФ Ò¤§·Õè ¤ÍÁä¾àÅÍà RC-51 ¨Ð¡íÒ˹´ãË à» ¹áºº data ¹Õàé ͧÍѵâ¹ÁѵµÔ ÒÁ¤ Ò¡íÒ˹´ 㹤ÍÁä¾àÅÍà RC-51 (·Ñ§é ¹Õé Âѧ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´ª¹Ô´Ë¹ ǤÇÒÁ¨íÒµÑ§é µ ¹ã¹â»Ãá¡ÃÁÀÒÉÒ C ´ Ç ᵠâ´Â·ÑÇè 仨ÐÃкØäÇ à» ¹ data) «Ö§è ¤Ãͺ¤ÅØÁ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒµíÒá˹ § 0x00 ¶Ö§ 0x7F sfr à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒÂã¹â´ÂµÃ§àª ¹¡Ñ¹ â´Â¤Ãͺ¤ÅØÁ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒµíÒá˹ § 0x80 ¶Ö§ 0xFF ´Ñ§µÑÇÍ ҧ·Õáè Ê´§ä»áÅ Çã¹¢ Ò§µ ¹ idata (indirect data) à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒÂã¹â´ÂÍ ÍÁ â´Â¤Ãͺ¤ÅØÁ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ µíÒá˹ § 0x00 ¶Ö§ 0xFF bdata à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒÂã¹â´ÂµÃ§·Õ¡è ÃзíÒµíÒá˹ §Ë¹ ǤÇÒÁ¨íÒã¹ÃдѺºÔµä´ «Ö§è ¨Ð à» ¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒµíÒá˹ § 0x20 ¶Ö§ 0x2F µÑÇÍ ҧ¡ÒÃ㪠§Ò¹ ´Ñ§¹Õé µÑÇÍ ҧ·Õè 3.53 bdata struct { unsigned flag1: 1; unsigned flag2: 2; } Flags;

// //

Flags.flag2 =1;

/*

µÑÇÍ ҧ·Õè 3.54 bdata char c1;

/*

sbit b3=c1^3;

/*

sbit b5=c1^5;

/*

¡íÒ˹´µÑÇá»Ã Flags à» ¹µÑÇá»Ãâ¤Ã§Êà ҧã¹ÃдѺºÔµ·ÕÁè Õ flag1,flag2 à» ¹ºÔµÀÒÂã¹ Êѧè ૵ºÔµã¹µÑÇá»Ã Flags ºÔµ·Õè flag2 ãË Á¤Õ Ò à» ¹ 1 */ ¡íÒ˹´µÑÇá»Ã c1 à» ¹áºº char áÅЪ¹Ô´Ë¹ ǤÇÒÁ¨íÒ bdata */ ¡íÒ˹´µÑÇá»Ã b3 à» ¹áºº sbit ·ÕÁè µÕ Òí á˹ §ºÔµ·Õè 3 ¢Í§µÑÇá»Ã c1 */ ¡íÒ˹´µÑÇá»Ã b5 à» ¹áºº sbit ·ÕÁè µÕ Òí á˹ §ºÔµ·Õè 5 ¢Í§µÑÇá»Ã c1 */

void test_bdata (void) { c1=0; b3=1; b5=1; printf (“c1= %2.2X”,c1); } /*

¼ÅÅѾ¸ c1 ෠ҡѺ 40 ËÃ×ͤ Ò 0x28 ã¹àÅ¢°Ò¹ÊԺˡ à¾ÃÒкԵ·Õè 3 áÅÐ 5 ¢Í§µÑÇá»Ã c1 ÁÕ¤Ò à» ¹ 1

*/


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

101

3.8.1.3 xdata áÅÐ pdata ´Ñ§¹Õé

à» ¹¡ÒÃÃкض§Ö ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒ¹͡ â´ÂÁÕ 2 Ẻ ¤×Í xdata áÅÐ pdata ÁÕÃÒÂÅÐàÍÕ´

xdata à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒ¹͡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¡íÒ˹´Ë¹ ǤÇÒÁ¨íÒ ä´ ¤Ãº·Ñ§é 64 ¡ÔâÅ亵 ¤×Í µÑ§é áµ 0x0000 ¶Ö§ 0xFFFF ¨Ö§àËÁÒÐÊíÒËÃѺ¡ÒÃÍ Ò§Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡ à¾×Íè à» ¹Êáµç¡ Áѡ㪠㹡ÒÃá»Å⤠´âÁà´Å LARGE «Ö§è à» ¹¡ÒáíÒ˹´¡ÒÃá»Å⤠´ãª §Ò¹¢¹Ò´ãË­ ¢Í§¤ÍÁä¾àÅÍà RC-51 â´Âã¹àÃ×Íè §âÁà´Å¡ÒÃá»Å⤠´¤íÒÊÑ§è ¨Ðä´ Í¸ÔºÒÂäÇ ã¹ËÑÇ¢ Í¶Ñ´ä» pdata à» ¹¡ÒÃÃÐºØ¢Í ÁÙÅÀÒ¹͡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ઠ¹¡Ñ¹ áµ ¡Òí ˹´Ë¹ Ç ¤ÇÒÁ¨íÒä´ ¤Ãѧé ÅÐྨ (page) ¡íÒ˹´ä´ 256 亵 µÍ ྨ ¨Ö§àËÁÒСѺ¤íÒÊÑ§è ¡ÒÃâ͹ Ò¢ ÍÁÙÅÀÒ¹͡ â´ÂÍ ÍÁã¹âËÁ´à¾¨ ઠ¹ movx @Ri,A ËÃ×Í movx A,@Ri

3.8.2 âÁà´Å·Õãè ª ¡Òí ˹´¡ÒÃá»Å⤠´ã¹¤ÍÁä¾àÅÍà RC-51 (Memory model) à» ¹·Õ·è ÃÒº¡Ñ¹Ç ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÃСÙÅ MCS-51 ¹ÕÁé ÁÕ Ò¡ÁÒÂËÅÒÂàºÍà ËÅÒ¡¼Ù¼ ÅÔµ ÊÒÁÒö¡íÒ˹´â¤Ã§Êà ҧ·Ò§ÎÒà ´áÇà â´Â੾ÒÐã¹àÃ×Íè §¢Íºà¢µ¢Í§Ë¹ ǤÇÒÁ¨íÒÊÒÁÒö¡ÃзíÒ ä´ ÁÒ¡ÅѡɳÐä´ µÒÁ¤ÇÒÁµ ͧ¡ÒÃ㪠§Ò¹ ÍÒ·Ô äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 8051 ·ÑÇè ä»ÊÒÁÒö㪠˹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁÀÒÂã¹ä´ 4 ¡ÔâÅ亵 ã¹¢³Ð·ÕèäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà 89C2051ÊÒÁÒö㪠˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁÀÒÂã¹ä´ 2 ¡ÔâÅ亵 ËÃ×ÍÍ ҧàºÍà 89C1051 ÊÒÁÒö㪠˹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁÀÒÂã¹ä´ à¾Õ§ 1 ¡ÔâÅ亵 ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧÃкØãË µÇÑ á»ÅÀÒÉÒ C Í ҧ RC-51 ¹ÕéÊÒÁÒö¡íÒ˹´âÁà´Å¡ÒÃá»Å⤠´ãË àËÁÒСѺ¡ÒÃ㪠§Ò¹´ Ç 㹠RC-51 ÊÒÁÒö¡íÒ˹´âÁà´Å¡ÒÃá»Å⤠´ä´ 5 âÁà´Å ¤×Í TINY, SMALL, COMPACT, LARGE áÅÐ HUGE ͸ԺÒÂÃÒÂÅÐàÍÕÂ´ä´ ´§Ñ ¹Õé TINY ¶×Íà» ¹¡ÒáíÒ˹´âÁà´Å¡ÒÃá»Å⤠´à¾×èͧҹ¢¹Ò´àÅç¡àËÁÒСѺäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¢Í§ Philips ͹ءÃÁàºÍà 8x75x ¡íÒ˹´ãË »ÃÐàÀ·Ë¹ ǤÇÒÁ¨íÒà» ¹áºº data áÅÐ µíÒá˹ §¢Í§Êáµç¡ ¤×Í idata âÁà´Å˹ ǤÇÒÁ¨íÒ

TINY

SMALL

COMPACT

LARGE

HUGE

µíÒá˹ §¢Í§Êáµç¡

idata

idata/pdata

idata/pdata

idata/pdata

idata/pdata

µÒÃÒ§·Õè 3-1 áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ¢Í§âÁà´Å˹ ǤÇÒÁ¨íҡѺµíÒá˹ §¾×¹é ·Õ¢è ͧÊáµç¡àÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠¿ §¡ ª¹Ñè àÃÕ¡«éÒí ã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC-51


102

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

SMALL à» ¹¡ÒáíÒ˹´âÁà´Å¡ÒÃá»Å⤠´à¾×èͧҹ¢¹Ò´àÅç¡·ÕèäÁ ÁÕ˹ ǤÇÒÁ¨íÒ ÀÒ¹͡ ¡íÒ˹´ãË »ÃÐàÀ·Ë¹ ǤÇÒÁ¨íÒà» ¹áºº data áÅеíÒá˹ §¢Í§Êáµç¡ ¤×Í idata COMPACT à» ¹¡ÒáíÒ˹´âÁà´Å¡ÒÃá»Å⤠´·Õè㪠§Ò¹Ë¹ ǤÇÒÁ¨íÒÀÒÂ¹Í¡ä´ áÅÐÁÕ¢¹Ò´â¤ ´¤íÒÊѧè äÁ ãË­ ÁÒ¡ä»¡Ç ÒâÁà´Å LARGE ¡íÒ˹´ãË »ÃÐàÀ·Ë¹ ǤÇÒÁ¨íÒà» ¹áºº pdata áÅеíÒá˹ §¢Í§Êáµç¡¤×Í idata ËÃ×Í pdata LARGE à» ¹¡ÒáíÒ˹´âÁà´Å¡ÒÃá»Å⤠´à¾×Íè §Ò¹¢¹Ò´ãË­ ·ãÕè ª ˹ ǤÇÒÁ¨íÒÀÒ ¹Í¡Ã ÇÁ´ Ç ¡íÒ˹´ãË »ÃÐàÀ·Ë¹ ǤÇÒÁ¨íÒà» ¹áºº xdata µíÒá˹ §¢Í§Êáµç¡¤×Í idata ËÃ×Í pdata HUGE à» ¹¡ÒáíÒ˹´âÁà´Å¡ÒÃá»Å⤠´à¾×Íè §Ò¹¢¹Ò´ãË­ ÁÒ¡ÁÕ¤ÇÒÁ«Ñº« ͹áÅР㪠˹ ǤÇÒÁ¨íÒÀÒ¹͡à ÇÁ´ Ç ¡íÒ˹´ãË »ÃÐàÀ·Ë¹ ǤÇÒÁ¨íÒà» ¹áºº pdata áÅеíÒá˹ §¢Í§ Êáµç¡ ¤×Í pdata «Ö§è pdata ¹ÕÊé ÒÁÒÃ¶Ê §¤ ÒáÍ´à´ÃÊ¡ÅѺáÅоÒÃÒÁÔàµÍà ä»Âѧ˹ ǤÇÒÁ¨íÒÀÒ¹͡ Í ҧ xdata ä´ ´Õ ¡ÒáíÒ˹´âÁà´Å㹡ÒÃá»Å⤠´¹Õ¨é СÃзíÒä´ â´Â 3 ÇÔ¸Õ ¤×Í 1. ¡íÒ˹´â´ÂµÃ§ 2. ¡íÒ˹´¼ Ò¹àÁ¹Ùã¹ RIDE 3.㪠¤Òí Êѧè pragma â´ÂÁÕµÑÇÍ ҧã¹áµ ÅÐÇԸմѧ¹Õé 1. ¡íÒ˹´â´ÂµÃ§ ¨Ð㪠ÇÔ¸Õ¹Õé㹡óÕÊÑè§á»Å⤠´¨Ò¡ RC-51 â´ÂµÃ§¼ Ò¹ Dos command prompt ´Ñ§ã¹ºÃ÷Ѵ¤íÒÊÑ§è ¹Õé RC51 xample1.c SMALL

2. ¡íÒ˹´¼ Ò¹àÁ¹Ùã¹ RIDE ÇÔ¸¹Õ ÊÕé дǡ·ÕÊè ´Ø â´Â¡íÒ˹´¼ Ò¹àÁ¹Ù Options|Project ã¹ RIDE «Ö§è à» ¹¡ÒÃµÑ§é ¤ Òµ Ò§æ ÊíÒËÃѺâ»Ãਡ·ÕÊè à ҧ¢Ö¹é ¨ÐÁÕàÁ¹ÙãË àÅ×Í¡ä»·Õè RC-51 áÅÐ Memory model 3. 㪠¤Òí Êѧè #pragma à» ¹¡ÒÃÃкØäÇ ã¹Ê ǹ preprocessor¢Í§â»Ãá¡ÃÁ àËÁ×͹¡Ñº #include, #define ÁÕµÇÑ Í ҧ´Ñ§¹Õé


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 /*

â»Ãá¡ÃÁµÑÇÍ ҧ¡ÒÃ㪠¤Òí Êѧè

l

103

#pragma */

#pragma SMALL void tst1 (void) {

ºÃ÷Ѵ¤íÒÊѧè ; }

ã¹àÃ×Íè §¡ÒÃ㪠¤Òí Êѧè #pragma ¹ÕÂé §Ñ ÁÕÃÒÂÅÐàÍÕ´¨Ðä´ ¡Å ÒÇã¹ËÑÇ¢ Í੾ÒÐàÃ×Íè §µ Íä» ¹Í¡¨Ò¡¹Õé ã¹ÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¨Ò¡¼Ù¼ ÅÔµÍ×¹è Ê Ç¹ãË­ ¨ÐÂÍÁ ãË ÊÒÁÒö¡íÒ˹´âÁà´Å¡ÒÃá»Åã¹ÅѡɳйÕäé ´ ઠ¹¡Ñ¹ áµ ÍҨᵡµ Ò§º ҧ㹻ÃÐàÀ·áÅТͺࢵ ¡ÒÃá»Å⤠´

3.8.3 µÑÇá»ÃẺÍÐààáÅÐʵÃÑ¡à¨Íà ã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC-51

㹡óշâÕè »Ãá¡ÃÁÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧ㪠¡ÅØÁ µÑÇá»ÃÍ ҧÍÐààËÃ×͵ÑÇá»Ãâ¤Ã§Êà ҧÍ ҧ ʵÃÑ¡à¨Íà (structure) 㹤ÍÁä¾àÅÍà RC-51 ä´ ¡Òí ˹´ÃٻẺ¢Í§µÑÇá»ÃàËÅ Òઠ¹à´ÕÂǡѺÁҵðҹ ANSI-C ¤×Í ¡Ã³ÕµÇÑ á»ÃÍÐàà: ª¹Ô´µÑÇá»Ã ª×Íè ÍÐàà[¢¹Ò´¢Í§ÍÐàà] ઠ¹ char arr[8];

/*

¡íÒ˹´µÑÇá»ÃÍÐààªÍ×è arr ¢¹Ò´ 8 ª ͧ໠¹ª¹Ô´µÑÇÍÑ¡Éà */

ËÃ×Í unsigned int table1[]={0xDF,0x2C,0x9F,0xE5,0x3A};

¡íÒ˹´µÑÇá»ÃÍÒà ààªÍ×è table1 à» ¹ª¹Ô´àÅ¢¨íҹǹàµçÁ (2 亵 ) äÁ Ãкآ¹Ò´ 㹡óչÕé ¤ ÒµÑÇá»Ã table1[0] ÁÕ¤Ò à· Ò¡Ñº 0xDF */ /*

¹Í¡¨Ò¡¹ÕÂé §Ñ ÊÒÁÒö¡íÒ˹´ã¹áººÍÐààËÅÒÂÁÔµÔ àª ¹ ¶ Òµ ͧ¡ÒáíÒ˹´ÍÐàà2 ÁÔµÔ ¨ÐÁÕ ÃٻẺ´Ñ§¹Õé ª¹Ô´µÑÇá»Ã ª×Íè ÍÒà àà[¢¹Ò´¢Í§ÍÒà àà] [¢¹Ò´¢Í§ÍÒà àà] àÁ×Íè ÁÕ¡ÒáíÒ˹´µÑÇá»ÃÍÐàࢹÖé ¤ÍÁä¾àÅÍà ¨Ð¨Í§¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒäÇ à¾×Íè Êà ҧª ͧà¡çº ¢ ÍÁÙŵÒÁ¤íÒÊÑ§è ¡ÒáíÒ˹´µÑÇá»ÃÍÐààáÅÐÇÔ¸¡Õ ÒÃÍ Ò§µíÒá˹ §Ë¹ ǤÇÒÁ¨íҡѺ¤ ÒµÑÇá»Ãã¹ÍÐààà¾×Íè Ê §¼ Ò¹¢ ÍÁÙÅ㹿 §¡ ª¹Ñè ÁÑ¡¹ÔÂÁ㪠µÇÑ á»Ã¾Í¹ àµÍà (pointer) «Ö§è ¨Ð¡Å ÒÇã¹ËÑÇ¢ ͵ Íä»


104

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¡Ã³ÕµÇÑ á»ÃʵÃÑ¡à¨Íà : struct {

}

ª¹Ô´¢Í§µÑÇá»Ã·Õ1è

ª×Íè µÑÇá»Ã·Õè 1;

ª¹Ô´¢Í§µÑÇá»Ã·Õ2è

ª×Íè µÑÇá»Ã·Õè 2;

ª¹Ô´¢Í§µÑÇá»Ã·Õ3è

ª×Íè µÑÇá»Ã·Õè 3;

ª×Íè µÑÇá»ÃʵÃÑ¡à¨Íà ;

ઠ¹ struct{ unsigned char r; unsigned int s; unsigned long t; }status;

à» ¹¡ÒáíÒ˹´µÑÇá»ÃʵÃÑ¡à¨Íà ªÍ×è status ¨Í§¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒäÇ 7 亵 ¤×Í ÊíÒËÃѺ char 1 亵 ,int 2 亵 áÅÐ long 4 亵

¡ÒÃÍ Ò§¶Ö§µÑÇá»Ã·ÕÍè ÂÙã ¹µÑÇá»ÃʵÃÑ¡à¨Íà ¡ÃзíÒä´ â´ÂãÊ à¤Ã×Íè §ËÁÒ¨ش (.) äÇ ·Ò µÑÇá»Ã ʵÃÑ¡à¨Íà áÅеÒÁ´ Ǫ×Íè µÑÇá»Ã·Õµè Í §¡ÒÃàÃÕ¡㪠´Ñ§µÑÇÍ ҧ status.r =123

/*

à» ¹¡ÒÃãË ¢Í ÁÙŤ Ò 123 ÂѧµÑÇá»Ã r ·ÕÍè ÂÙã ¹µÑÇá»ÃʵÃÑ¡à¨Íà */

ã¹·Ò§»¯ÔºÑµÔ ÁÑ¡¹ÔÂÁ¡íÒ˹´µÑÇá»ÃʵÃÑ¡à¨Íà äÇ ã¹Ê ǹ preprocessor ¢Í§â»Ãá¡ÃÁ´ Ç ¤íÒÊѧè #define áÅÐ struct stateform

3.8.4 µÑÇá»Ã¾Í¹ àµÍà ã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§¤ÍÁä¾àÅÍà RC-51 àÁ×Íè ¡Å ÒǶ֧µÑÇá»Ã¾Í¹ àµÍà  ÍÁ¹Ö¡¶Ö§¡ÒÃ㪠µÇÑ á»Ãà¾×Íè Í Ò§µíÒá˹ §áÍ´à´ÃʢͧµÑÇá»Ã ÍÐààáÅÐʵÃÑ¡à¨Íà ´Ñ§µÑÇÍ ҧµ Í仹Õé unsigned char *ptr; unsigned char table[10]; ptr = &table[0]; *ptr = 111; *ptr+1= 222;

à» ¹¡ÒáíÒ˹´µÑÇá»Ã¾Í¹ àµÍà ªÍ×è *ptr áÅеÑÇá»ÃÍÐààªÍ×è table ¢¹Ò´ 10 ª ͧ â´ÂÁÕ ºÃ÷Ѵ¤íÒÊѧè ãË ¤Ò áÍ´à´Ãʢͧ table[0] à» ¹µíÒá˹ §à´ÕÂǡѺµÑÇá»Ã ptr â´ÂãË Ê§ ¤ Ò¢ ÍÁÙÅ 111 ä»ÂѧµÑÇá»Ã *ptr «Ö§è ¹Ñ¹è ¤×Í table[0] áÅФ Ò¢ ÍÁÙÅ 222 ä»ÂѧµÑÇá»Ã *ptr+1 «Ö§è ¹Ñ¹è ¤×Í table[1] µÒÁÅíÒ ´Ñº ´Ñ§¹Ñ¹é ËÒ¡ÁÕ¡ÒÃÍ Ò§µÑÇá»Ã *ptr+i ¨ÐËÁÒ¶֧¡ÒÃÍ Ò§ä»·Õµè ÇÑ á»ÃÍÒà ààtable[i]


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

105

µÑÇá»Ã¾Í¹ àµÍà 㹤ÍÁä¾àÅÍà RC-51 ÁÕÍÂÙ 2 Ẻ¤×Í 1. Ẻ·ÑÇè ä» (generic pointer) à» ¹¡ÒáíÒ˹´µÑÇá»Ã¾Í¹ àµÍà ´§Ñ µÑÇÍ ҧ¢ Ò§µ ¹ «Ö§è ¨Ð ¡íÒ˹´µÑÇá»Ã¾Í¹ àµÍà Í ҧÍÔÊÃеÒÁáµ ¤ÍÁä¾àÅÍà ¨´Ñ ÊÃÃãË áÅÐàÊÕÂ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ·Ø¡æ 3亵 µÍ Ë¹Ö§è µÑÇá»Ã¾Í¹ àµÍà «Ö§è »ÃСͺ´ Ǥ ÒÃËÑÊ¾×¹é ·Õè (space code) 1 亵 áÅФ ÒµíÒá˹ § áÍ´à´ÃÊ 2 亵 (亵 ʧ٠áÅÐ亵 µÒèí ) 2. ẺÃкؾ¹×é ·Õè (space qualified pointer) ¨ÐµÃ§¡Ñ¹¢ ÒÁ¡Ñºáºº·ÑÇè ä» ¤×Í ¡ÒáíÒ˹´µÑÇ á»Ã¾Í¹ àµÍà Ẻ¹Õ¨é ÐÃкؾ¹×é ·Õãè ª §Ò¹ ´Ñ§µÑÇÍ ҧµ Í仹Õé code char *cptr; /*

¡íÒ˹´µÑÇá»Ã cptrẺchar㪠ã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ 2 亵

*/

xdata char *xptr; /*

¡íÒ˹´µÑÇá»Ã xptr Ẻ char 㪠ã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒ¹͡ 2 亵

*/

idata char *iptr; /*

¡íÒ˹´µÑÇá»Ã iptrẺchar㪠ã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÀÒÂã¹·Ò§Í ÍÁ 1亵

*/

µÑÇá»Ã¾Í¹ àµÍà ẺÃкؾ×é¹·Õè¹ÕéÁÕ¢¹Ò´¡ÒÃ㪠¾×é¹·Õè˹ ǤÇÒÁ¨íÒ¹ ÍÂ¡Ç Ò ¨Ö§·íÒãË â»Ãá¡ÃÁ·íÒ§Ò¹ä´ àÃçÇ¡Ç Ò à¾ÃÒÐäÁ àÊÕÂàÇÅÒ㹡ÒöʹÃËÑÊ¾×¹é ·Õáè ÅÐä´ â»Ãá¡ÃÁ·ÕÊè ¹Ñé ¡Ç Ò ´Ñ§¹Ñ¹é ¡ÒÃ㪠µÇÑ á»Ã¾Í¹ àµÍà ã¹ÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¨Ö§¤ÇÃ㪠ẺÃкؾ¹×é ·Õè ¨Ðà» ¹¼Å´Õµ Íâ»Ãá¡ÃÁÁÒ¡¡Ç Ò

3.8.5 ¡ÒÃÃкصÒí á˹ §¾Íà µáÅÐ˹ ǤÇÒÁ¨íÒÀÒ¹͡ÊíÒËÃѺµÑÇá»ÃáÅÐ ¿ §¡ ª¹Ñè ´ Ç ¤íÒÊѧè at â´Â»¡µÔ¡ÒáíÒ˹´µíÒá˹ §¾Íà µÀÒ¹͡ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Áѡ㪠µÒí á˹ § ¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒÀÒ¹͡໠¹¡ÒáíÒ˹´µíÒá˹ §¾Íà µ «Ö§è 㹤ÍÁä¾àÅÍà RC-51 ÊÒÁÒö¡íÒ˹´ ä´ â´Â㪠¤Òí Êѧè at ÁÕû٠Ẻ¢Í§¤íÒÊÑ§è ¤×Í ª¹Ô´Ë¹ ǤÇÒÁ¨íÒ at ËÁÒÂàÅ¢µíÒá˹ §(°Ò¹16) ª¹Ô´µÑÇá»Ã ª×Íè µÑÇá»Ã «Ö§è ¤Å Ò¡Ѻ¤íÒÊѧè EQU ã¹ÀÒÉÒáÍÊá«ÁºÅÕ ´Ñ§µÑÇÍ ҧµ Í仹Õé


106

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

µÑÇÍ ҧ·Õè 3.55 typedef struct {unsigned

lcr,dll,dlm,lsr,iir,ier,mcr,msr,rbr,thr;

}UART8250; xdata

at

0xfe00

UART8250

COM1;

xdata

at

0xfe80

UART8250

COM2;

xdata

at

0xff00

UART8250

COM3;

xdata

at

0xff80

UART8250

COM4;

/* ¡íÒ˹´µÑÇá»Ãâ¤Ã§Êà ҧª×Í è UART8250

ÁÕµÇÑ á»ÃẺ unsigned char »ÃСͺÍÂÙ¤ Í× lcr,dll, dlm,lsr,iir,ier,mcr,msr,rbr áÅÐ thr 㹺Ã÷Ѵ¶Ñ´ÁÒ¡íÒ˹´µÑÇá»Ãª×èÍ COM1, COM2,COM3 áÅÐ COM4 µÒÁâ¤Ã§Êà ҧª¹Ô´µÑÇá»Ã¢Í§ UART8250 â´ÂÃкصÒí á˹ §¾Íà µÀÒ¹͡¹Õãé Ë ÁÕ ËÁÒÂàÅ¢¾Íà µà· ҡѺ 0xfe00, 0xfe80, 0xff00 áÅÐ 0xff80 µÒÁÅíҴѺ */

¶ Ò¡íÒ˹´µÑÇá»ÃËÅÒµÑÇ â´Â㪠¤Òí Êѧè at à¾Õ§¤ ÒµíÒá˹ §à´ÕÂÇ «Ö§è ËÁÒ¶֧µíÒá˹ §¢Í§µÑÇ á»Ãáá¤×ͤ Ò·Õ¡è Òí ˹´ áÅÐà¾ÔÁè ¤ ÒµíÒá˹ §àͧÊíÒËÃѺµÑÇá»Ã¶Ñ´ä» ´Ñ§µÑÇÍ ҧ¹Õé µÑÇÍ ҧ·Õè 3.56 at 0x20 data char byte0, byte1;

/* ¡íÒ˹´µÑÇá»Ãª×Íè byte0 ·Õµè Òí á˹ § 0x20 , byte1 ·Õµè Òí á˹ § 0x21 */

¹Í¡¨Ò¡¹Õáé Å Ç ÂѧÊÒÁÒö㪠¤Òí Êѧè at à¾×Íè ¡íÒ˹´µíÒá˹ §â¤ ´¤íÒÊѧè áá¢Í§¿ §¡ ª¹Ñè ä´ Í¡Õ ´ Ç «Ö§è àËÁÒÐ㹡óշµÕè Í §¡ÒèѴÊÃõíÒá˹ §¢Í§Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡àͧ ´Ñ§µÑÇÍ ҧ¹Õé µÑÇÍ ҧ·Õè 3.57 at 0x8000 char HighFunc()

{

¤íÒÊѧè â»Ãá¡ÃÁ;

}

/* ¡íÒ˹´µÑÇá»Ãª×Íè byte0 ·Õµè Òí á˹ § 0x20 áÅеÑÇá»Ãª×Íè byte1 ·Õµè Òí á˹ § 0x21 */


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

107

3.9 àÃ×Íè §¢Í§¿ §¡ ª¹Ñè ¹Í¡¨Ò¡¿ §¡ ª¹Ñè â»Ãá¡ÃÁ·Õàè ¢Õ¹¢Ö¹é µÒÁÁҵðҹ ANSI-C ¨ÐÊÒÁÒÃ¶ãª ä´ ¡ºÑ ¤ÍÁä¾àÅÍà RC-51 áÅ Ç ÂѧÊÒÁÒö¡íÒ˹´àÃÕ¡㪠¿§ ¡ ª¹Ñè ¾ÔàÈÉÍ×¹è ä´ Í¡Õ ´Ñ§ËÑÇ¢ ͵ Í仹Õé

3.9.1 ¿ §¡ ª¹Ñè ÍÔ¹àµÍÃ Ã»Ñ µ 㹤ÍÁä¾àÅÍà RC-51 ÊÒÁÒö¡íÒ˹´â»Ãá¡ÃÁ ÍÂà¾×Íè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ (ISR: interrupt service routines) ãË ÊÒÁÒö¡ÃÐâ´´¡Ò÷íÒ§Ò¹ä´ â´ÂÍѵâ¹ÁѵãÔ ¹â¤ ´¤íÒÊѧè â´Ââ»Ãá¡ÃÁ Í ISR ¹Õ¡é Òí ˹´¤Å Ò¡Ѻ¿ §¡ ª¹Ñè â´ÂÃкØËÁÒÂàÅ¢ÍÔ¹àµÍÃ Ã»Ñ µ à¾ÔÁè ࢠÒä» àª ¹ ¡íÒ˹´â»Ãá¡ÃÁ Í ISR ÊíÒËÃѺä·àÁÍà 1 ·ÕÍè ¹Ô àµÍÃ Ã»Ñ µ ËÁÒÂàÅ¢ 3 à¢Õ¹¤íÒÊѧè ä´ ´§Ñ ¹Õé void timer1() interrupt 3 { counter++;

//ºÃ÷Ѵ¤íÒÊѧè 㪠ºÃÔ¡ÒÃÍÔ¹àµÍà û Ñ µ

}

ËÃ×Í¡íÒ˹´â»Ãá¡ÃÁ Í ISR ÊíÒËÃѺä·àÁÍà 0 ·ÕÍè ¹Ô àµÍÃ Ã»Ñ µ ËÁÒÂàÅ¢ 1 à¢Õ¹¤íÒÊѧè ä´ ´§Ñ ¹Õé void timer0() interrupt 1 {

ºÃ÷Ѵ¤íÒÊѧè â»Ãá¡ÃÁºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ; }

¹Í¡¨Ò¡¹Õé ÂѧÊÒÁÒöÃкØ㪠§Ò¹ÃÕ¨ÊÔ àµÍà ầ¡ ã´¡çä´ à¾×Íè 㪠§Ò¹¡Ñºâ»Ãá¡ÃÁ Í ISR ¹Õé à¾Õ§ÃкؤÒí ¾ÔàÈÉ using à¾ÔÁè · Òª×Íè ¿ §¡ ª¹Ñè áÅÐËÁÒÂàÅ¢ÃÕ¨ÊÔ àµÍà ầ¡ (0 ¶Ö§ 3) ´Ñ§µÑÇÍ ҧ·ÕÃè ÐºØ ãª Ã¨Õ ÊÔ àµÍà ầ¡ 2 ¡Ñº¿ §¡ ª¹Ñè timer0 ·ÕÍè ¹Ô àµÍÃ Ã»Ñ µ ËÁÒÂàÅ¢ 1 à¢Õ¹¤íÒÊѧè ä´ ´§Ñ ¹Õé void timer0() interrupt 1 using 2 {

ºÃ÷Ѵ¤íÒÊѧè â»Ãá¡ÃÁºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ; }

«Ö§è ¤íÒ¾ÔàÈÉ using ·Õàè ¾ÔÁè · Ò¹Õé ÂѧÊÒÁÒö㪠¡ºÑ ¿ §¡ ª¹Ñè ·ÑÇè ä»·Õµè Í §¡ÒÃãª Ã¨Õ ÊÔ àµÍà ầ¡ Í ҧ ã¹ÅѡɳТͧ ISR ¹Õäé ´ Í¡Õ ´ ÇÂ


108

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

3.9.2 ¿ §¡ ª¹Ñè àÃÕ¡«éÒí (reentrant function)

¿ §¡ ª¹Ñè àÃÕ¡«éÒí ¤×Í ¿ §¡ ª¹Ñè ·Õ¶è ¡Ù àÃÕ¡㪠ËÅÒ¤ÃÒÇã¹àÇÅÒà´ÕÂǡѹ â´Â»¡µÔ㹤ÍÁä¾àÅÍà RC-51 ¨ÐäÁ ãË ¿§ ¡ ª¹Ñè ÊÒÁÒöàÃÕ¡㪠¿§ ¡ ª¹Ñè µÑÇàͧ«éÒí ä´ ¨Ö§µ ͧÃкؤÒí ¾ÔàÈÉ reentrant äÇ ·Ò ª×Íè ¿ §¡ ª¹Ñè à¾×Íè à» ¹¡ÒÃ㪠¿§ ¡ ª¹Ñè «éÒí ä´ ´Ñ§µÑÇÍ ҧ¿ §¡ ª¹Ñè á¿¡µÍàÃÕÂŹÕé int factorial (int n) reentrant { if (n==1) return(1) else return (n * factorial (n-1)); }

ÊíÒËÃѺ¿ §¡ ªÑè¹àÃÕ¡«éíÒáµ Åп §¡ ªÑè¹ÁÕ¤ÇÒÁµ ͧ¡ÒÃà¹×éÍ·ÕèÊáµç¡à¾×èÍÊÒÁÒö·´¤íҹdz ä´ «Ö§è ¾×¹é ·Õ¢è ͧÊáµç¡¹Ñ¹é ¨ÐÍÂÙã ¹µíÒá˹ §ã´¢Ö¹é ¡ÑºâÁà´Å¡ÒÃá»Å·Õàè Å×͡㪠´Ñ§µÒÃÒ§·Õè 4-1 ¿ §¡ ª¹Ñè àÃÕ¡«éÒí ¹Õé äÁ ÊÒÁÒö㪠§Ò¹¡Ñº¿ §¡ ª¹Ñè ·Õ·è Òí ¤íÒÊѧè ã¹ÃдѺºÔµä´ áÅСѺ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ¨Ò¡ÀÒÉÒ Í×è¹ ¨Ö§¤ÇÃÃÐÁÑ´ÃÐÇѧ㹡ÒÃàÃÕ¡㪠¿ §¡ ªÑ蹫éíÒ¹Õé´ ÇÂã¹àÃ×èͧ¢Í§¾×é¹·Õè˹ ǤÇÒÁ¨íÒáÅÐÊáµç¤

3.9.3 àÃÕ¡㪠¿§ ¡ ª¹Ñè ¢Í§ÀÒÉÒÍ×¹è 㹺ҧ¤Ãѧé ÁÕ¤ÇÒÁµ ͧ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ·Õàè ¢Õ¹¢Ö¹é ¨Ò¡ÀÒÉÒÍ×¹è ã¹ RC-51 ÊÒÁÒÃ¶Ê §ÃѺ¤ Ò ÃÐËÇ Ò§¿ §¡ ª¹Ñè ÀÒÉÒ C ¡ÑºÀÒÉÒÍ×¹è ä´ ´Ç ¤íÒÊÑ§è ¾ÔàÈÉ alien à¾×Íè ÃкتÍ×è ¿ §¡ ª¹Ñè ·Õàè ¢Õ¹â´ÂÀÒÉÒÍ×¹è ´Ñ§µÑÇÍ ҧµ Í仹Õé extern alien int counter_value(int counter_number);

/* Ãкؿ§ ¡ ª¹Ñè ª×Íè counter_value à» ¹¿ §¡ ª¹Ñè ÀÒÉÒÍ×¹è ã¹·Õ¹è ¤Õé Í× ÀÒÉÒ PL/M-51 */ #define limit 10 int counters(void) { int i; int total = 0; for(i=0; I<10; I++) total +=counter_value(i); return(total); }

/* 㹿 §¡ ª¹Ñè ¹ÕÁé ¡Õ ÒÃàÃÕ¡㪠¿§ ªÑ¹è counter_value «Ö§è à» ¹¿ §¡ ª¹Ñè ÀÒÉÒ PL/M-51 */ alien int end_counter() { return (counters()==limit); }

/* ¿ §¡ ª¹Ñè ¹ÕÍé Ò¨¶Ù¡àÃÕ¡¨Ò¡ÃÙ·¹Õ â»Ãá¡ÃÁÀÒÉÒPL/M-51 */

¢ ͤÇÃÃÐÇѧ㹡ÒÃàÃÕ¡㪠¿ §¡ ªÑè¹ÅѡɳйÕé ¤×Í äÁ ¤ÇÃ㪠¡Ñº¿ §¡ ªÑè¹àÃÕ¡«éíÒ (reentrant functions) «Ö§è ¨ÐãË ¼Å¡Ò÷íÒ§Ò¹â»Ãá¡ÃÁ´ ÍÂŧä»ÁÒ¡ËÃ×ÍÍÒ¨¼Ô´¾ÅÒ´ä´ §Ò Â


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

109

3.9.4 ¡Ò÷íҧҹà ÇÁ¡Ñº¤íÒÊѧè ÀÒÉÒáÍÊá«ÁºÅÕ ã¹ºÒ§¡Ã³ÕÁ¤Õ ÇÒÁ¨íÒà» ¹µ ͧ㪠¤Òí ÊÑ§è ¢Í§ÀÒÉÒáÍÊá«ÁºÅÕÃÇ Áã¹â»Ãá¡ÃÁÀÒÉÒ C ÊÒÁÒö 㪠¤Òí Êѧè asm µÒÁ´ Ç¡ÅØÁ ÃËÑʤíÒÊѧè àÅ¢°Ò¹ÊԺˡ¢Í§ÀÒÉÒáÍÊá«ÁºÅÕ ´Ñ§µÑÇÍ ҧµ Í仹Õé char jump_it_address_LOW = 0x12; char jump_it_address_HIGH = 0x34; void indirect_jump_from_interrupt (void) { asm { 0xC0, &jump_it_address_HIGH }; asm { 0xC0, &jump_it_address_LOW }; asm { 0x32}; //

¡ÃÐâ´´â»Ãá¡ÃÁä»·Õµè Òí á˹ § 1234 áÅÐÃÕ૵¤ Òá¿Åç¡

}

¡ÒÃ㪠¤íÒÊÑè§ asm ¹Õé àËÁÒÐÊíÒËÃѺ¡ÒÃ㪠¤íÒÊÑè§ÀÒÉÒáÍÊá«ÁºÅÕ·ÕèäÁ ÂÒÇ ¹Í¡¨Ò¡¹ÕéÂѧÁÕÇÔ¸Õ àÃÕ¡㪠¤Òí Êѧè ÀÒÉÒáÍÊá«ÁºÅÕÃÇ Á¡ÑºÀÒÉÒ C ´ Ç¡ÒÃ㪠¤Òí Êѧè #pragma ASM áÅÐ ENDASM á·Ã¡ ࢠÒä»ã¹â»Ãá¡ÃÁÀÒÉÒ C ´Ñ§µÑÇÍ ҧµ Í仹Õé main() { printf (“This program will indefinitely loop”) ; #pragma ASM jmp $; #pragma ENDASM }

3.10 ¡ÒÃ㪠á¾Ãç¡Á Ò (pragma) ¤íÒÊѧè pragma à» ¹Ê ǹ¡íÒ˹´¤ ÒµÑ§é µ ¹áÅСÃеع àÃÕ¡¿ §¡ ª¹Ñè ¾ÔàÈÉ㹤ÍÁä¾àÅÍà RC-51 ÁÒ㪠§Ò¹ãË µÃ§¡ÑºÃкº§Ò¹·Õµè Í §¡ÒþѲ¹Ò ÊÒÁÒöẠ§»ÃÐàÀ·¤íÒÊѧè pragma ¹Õäé ´ 2 ¡ÅØÁ ¤×Í ¡ÅØÁ ·Õè 1 à» ¹¤íÒÊÑ§è ¡íÒ˹´ÊÀÒ¾áÇ´Å ÍÁ㹡ÒÃá»ÅÃËÑʤíÒÊÑ§è ¡ÅØÁ ·Õè 2 à» ¹¤íÒÊÑ§è ¡íÒ˹´¼Å¡ÒÃÊà ҧÃËÑʤíÒÊÑ§è ¡ÒÃàÃÕ¡㪠¤Òí Êѧè pragma ¹Õé ÊÒÁÒö¡ÃзíÒä´ 3 ÇÔ¸Õ ä´ á¡ 1. ¡íÒ˹´â´ÂµÃ§ 㹺Ã÷Ѵá»ÅÃËÑʤíÒÊѧè ã¹ DOS command prompt ઠ¹ RC51 xample1.c

LARGE

CODE

PIN(C:\RC\INCLUDE)

à» ¹¡ÒÃÃкØãË á»Åä¿Å xample1.c ã¹âÁà´Å LARGE áÅÐãÊ ÃËÑʤíÒÊѧè áÍÊá«ÁºÅÕ ã¹ list file (xample1.lst) â´ÂàÃÕ¡㪠include file ·Õâè ¿Åà´Íà C:\RC\INCLUDE


110

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

2. ¡íÒ˹´Å§ã¹â»Ãá¡ÃÁ ÁÑ¡¡íÒ˹´ã¹Ê ǹ preprocessor ઠ¹ #pragma SMALL #pragma CODE #pragma PIN(“\include”)

3. ¡íÒ˹´¼ Ò¹àÁ¹Ùã¹ RIDE â´ÂàÃÕ¡¨Ò¡àÁ¹Ù Options à Project ´Ñ§µÑÇÍ ҧ «Ö§è à»ÃÕºà·Õº ä´ à· Ò¡Ñº¡ÒáíÒ˹´¤íÒÊѧè #pragma ŧã¹â»Ãá¡ÃÁ ´Ñ§¹Õé #pragma #pragma #pragma #pragma #pragma #pragma

PRINT COND SYMBOLS CODE PAGEWIDTH(60) PAGELENGTH(80)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

111

º··Õè 4

äźÃÒÃբͧ«Í¿µ áÇà RIDE áÅÐ ¡ÒÃÊÃ Ò §äźÃÒÃÕÊÒí ËÃѺâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ÍíҹǤÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ¤ÍÁä¾àÅÍà RC-51 ä´ àµÃÕÂÁäźÃÒÃÕ äÇ ãË ãª ÁÒ¡ÁÒ ¡ÒÃàÃÕ¡㪠·Òí ä´ â´Â¼¹Ç¡äźÃÒÃÕ·µÕè Í §¡ÒÃäÇ ·ÊÕè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ´ ÇÂä´àÃ硵տ include ã¹ä¿Å äźÃÒÃÕáµ ÅеÑǺÃèؿ§ ¡ ª¹ Ñè ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·íÒãË ¼¾Ù ² Ñ ¹ÒäÁ ¨Òí à» ¹µ ͧÊà ҧ ¿ §¡ ª¹Ñè àËÅ Ò¹Ñ¹é ¢Ö¹é ãËÁ ·§Ñé ËÁ´ Í ҧäáçµÒÁ ËÒ¡µ ͧ¡ÒÃÊà ҧä¿Å äźÃÒÃÕà¾ÔÁè àµÔÁ¡çÊÒÁÒö·íÒä´

4.1 äźÃÒÃÕã¹ RC-51

4.1.1 string.h äźÃÒÃÕ¨´Ñ ¡Òâ ÍÁÙŵÑÇÍÑ¡¢ÃÐ

ÊÒÁÒöÃͧÃѺ¡ÒÃ㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ´ Ç »ÃСͺ´ Ç¿ §¡ ª¹Ñè ÊíÒ¤Ñ­æ ´Ñ§¹Õé

char *strrchr(char *s,int c);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤ ¹ËÒÍÑ¡¢ÃÐ c µÑÇ· ÒÂÊØ´·ÕÍè ÂÙã ¹ÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ¡Òä׹¤ Ò ¤×¹¤ Òà» ¹áÍ´à´ÃʢͧÍÑ¡¢ÃÐ c áµ ¶Ò äÁ ¾º¨Ð¤×¹¤ Òà» ¹ NULL char *strchr(char *s,int c);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤ ¹ËÒÍÑ¡¢ÃÐ c µÑÇááÊØ´·ÕÍè ÂÙã ¹ÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ¡Òä׹¤ Ò ¤×¹¤ Òà» ¹áÍ´à´ÃʢͧÍÑ¡¢ÃÐ c áµ ¶Ò äÁ ¾º¨Ð¤×¹¤ Òà» ¹ NULL char *strcat(char *p1,const char *p2 );

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¹íÒÊÒÂÍÑ¡¢ÃзÕè p2 ªÕÍé ÂÙä »µ Í· ÒÂÂѧµíÒá˹ §·Õªè âÕé ´Â p1 ¡Òä׹¤ Ò ¤×¹¤ Ҿ͹ àµÍà ¢Í§ p1 ¾Ã ÍÁ¡Ñº NULL char *strncat (char *p1,const char *p2,size_t n);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¹íÒÍÑ¡¢ÃзÕè p2 ªÕÍé ÂÙµ Í · ÒµíÒá˹ §·Õªè âÕé ´Â p1 ¡íÒ˹´¨íҹǹÍÑ¡¢Ãзյè Í §¡Òõ Íä´ ´Ç  n ¡Òä׹¤ Ò ¤×¹¤ Ҿ͹ àµÍà ¢Í§ p1 ¾Ã ÍÁ¡Ñº NULL size_t strpos (const char *s,int c);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤ ¹ËÒÍÑ¡¢ÃÐ c µÑÇááÊØ´·ÕÍè ÂÙã ¹ÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ¡Òä׹¤ Ò ¤×¹¤ ҴѪ¹Õ (index) µíÒá˹ §·Õ¾è º¢Í§ÊÒÂÍÑ¡¢Ãоà ÍÁ¡Ñº NULL ¶ ÒäÁ ¾º¨Ð¤×¹¤ Ò -1 ÍÍ¡ÁÒ


112

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

char *strncpy(char *p1, const char *p2,size_t n);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤Ñ´ÅÍ¡ÊÒÂÍÑ¡¢ÃзÕè p2 ªÕÍé ÂÙ ä»ÂѧµíÒá˹ §·Õªè âÕé ´Â p1 ¡íÒ˹´¨íҹǹÍÑ¡¢ÃÐä´ ´Ç  n ¡Òä׹¤ Ò ¤×¹¤ Ҿ͹ àµÍà ¢Í§ p1 ¾Ã ÍÁ¡Ñº NULL char *strcpy (char *p1,const char *p2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤Ñ´ÅÍ¡ÊÒÂÍÑ¡¢ÃзÕè p2 ªÕÍé ÂÙ ä»ÂѧµíÒá˹ §·Õªè âÕé ´Â p1 ¡Òä׹¤ Ò ¤×¹¤ Ҿ͹ àµÍà ¢Í§ p1 ¾Ã ÍÁ¡Ñº NULL char signed strcmp (const char *p1,const char *p2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè à»ÃÕºà·ÕºµÑÇÍÑ¡¢Ãзժè âÕé ´Â p1áÅÐ p2 ¡Òä׹¤ Ò ¶ ÒàËÁ×͹¡Ñ¹¨Ð¤×¹¤ Òà» ¹ 0 áµ ¶Ò ¤ ÒÅíҴѺÍÑ¡¢Ãзժè âÕé ´Â p1>p2 ¤×¹¤ Òà» ¹ºÇ¡ áµ ¶Ò p1<p2 ¨Ð¤×¹¤ Òà» ¹Åº char signed strncmp (const char *p1,const char *p2, size_t n);

˹ Ò·Õ¿ è § ¡ ª¹Ñè à»ÃÕºà·ÕºµÑÇÍÑ¡¢Ãзժè âÕé ´Â p1 áÅÐ p2 ¡íÒ˹´¨íҹǹÍÑ¡¢Ãзյè Í §¡ÒÃà»ÃÕºà·ÕÂºä´ ´Ç  n ¡Òä׹¤ Ò ¶ ÒàËÁ×͹¡Ñ¹¤×¹¤ Òà» ¹ 0 ¶ Ò¤ ÒÅíҴѺÍÑ¡¢Ãзժè âÕé ´Â p1>p2 ¤×¹¤ Òà» ¹ºÇ¡ áµ ¶Ò p1<p2 ¤×¹¤ Òà» ¹Åº size_t strlen (const char *s);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¢¹Ò´¤ÇÒÁÂÒǢͧÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ¡Òä׹¤ Ò ¤ÇÒÁÂÒǢͧÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s #define memcmp(s1, s2, n) strncmp((char*)s1,(char*)s2,n)

˹ Ò·Õ¿ è § ¡ ª¹Ñè à»ÃÕºà·Õº¢ ÍÁÙŨҡºÑ¿à¿Íà s1 áÅÐ s2 ¡íÒ˹´¨íҹǹÍÑ¡¢Ãзյè Í §¡ÒÃà»ÃÕºà·ÕÂºä´ ´Ç  n ¡Òä׹¤ Ò ¶ Ò·Ñ§é ¤Ùà ËÁ×͹¡Ñ¹¤×¹¤ Òà» ¹ 0 áµ ¶Ò ¤ ÒÅíҴѺÍÑ¡¢Ãзժè âÕé ´Â s1>s2 ¤×¹¤ Òà» ¹ºÇ¡ áµ ¶Ò s1<s2 ¤×¹¤ Òà» ¹Åº #define memcpy(dest,src,n) strncpy ((char*)dest,(char*)src,n)

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤Ñ´ÅÍ¡¢ ÍÁÙŨҡºÑ¿à¿Íà src ä»ÂѧµíÒá˹ §ºÑ¿à¿Íà dest ÊÒÁÒö¡íÒ˹´¨íҹǹÍÑ¡¢ÃÐ ·Õµè Í §¡ÒäѴÅÍ¡ä´ ´Ç  n ¡Òä׹¤ Ò ¤×¹¤ Ҿ͹ àµÍà ¢Í§ dest #define memchr(s,c,n)strchr ( (char*) s, c, n)

˹ Ò·Õ¿ è § ¡ ª¹Ñè ¤ ¹ËÒ¢ ÍÁÙÅ c µÑÇááÊØ´·ÕÍè ÂÙã ¹ÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ÊÒÁÒö¡íÒ˹´¨íҹǹ¡ÒÃàÃÕ§µÃǨÊͺ ¨Ò¡ n µÑÇáá¨Ò¡ºÑ¿à¿Íà s ¡Òä׹¤ Ò ¤×¹¤ Òà» ¹áÍ´à´ÃʢͧÍÑ¡¢ÃÐ c áµ ¶Ò äÁ ¾º¨Ð¤×¹¤ Òà» ¹ NULL

µÑÇá»Ã¾Íµ àµÍà ¢Í§µÑÇÍÑ¡É÷ءµÑÇ㹿 §¡ ª¹Ñè ʵÃÔ§ ¨Ð㪠໠¹áºº¾Í¹ àµÍà ·ÇÑè ä» (generic pointers)


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

113

4.1.2 stdio.h äźÃÒÃÕâÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ à» ¹ä¿Å äźÃÒÃÕ·ºÕè Ãèؿ§ ¡ ª¹Ñè ·Õàè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁËÃ×Í UART ÀÒÂã¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ÁÑ¡àÃÕ¡㪠àÁ×Íè µ ͧ¡ÒõԴµ ͡Ѻ¾Íà µÍ¹ØÃÁ ÁÕÃÒÂÅÐàÍÕ´·ÕÊè Òí ¤Ñ­ ´Ñ§¹Õé int _getkey ( void );

˹ Ò·Õ¿ è § ¡ ª¹Ñè Í Ò¹¤ ÒÍÑ¡¢ÃÐ 1 亵 ·àÕè ¢ ÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁ ¡Òä׹¤ Ò ¤×¹¤ ÒÍÑ¡¢ÃзÕÃè ºÑ à¢ ÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁ int getchar ( void );

˹ Ò·Õ¿ è § ¡ ª¹Ñè Í Ò¹¤ ÒÍÑ¡¢ÃÐ 1 亵 ·àÕè ¢ ÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁ ¡Òä׹¤ Ò ¤×¹¤ ÒÍÑ¡¢ÃзÕÃè ºÑ à¢ ÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁ ¾Ã ÍÁ¡ÑºÊ §¡ÅѺÍÍ¡ä»·Ò§¾Íà µÍ¹Ø¡ÃÁËÃ×Íà͡⤠int ungetchar ( int c); char *gets ( char *s );

˹ Ò·Õ¿ è § ¡ ª¹Ñè Í Ò¹¤ ÒÍÑ¡¢ÃзÕàè ¢ ÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁáÅ Çà¡çºäÇ ·µÕè Òí á˹ § s ªÕÍé ÂÙ¨ ¹¡Ç Ò¨Ðä´ ÃºÑ ÍÑ¡¢ÃÐ \n ¡Òä׹¤ Ò ¤×¹¤ ÒÍÑ¡¢ÃзÕÃè ºÑ ÁÒÍÍ¡·Ò§¾Íà µÍ¹Ø¡ÃÁ int putchar ( const int c );

˹ Ò·Õ¿ è § ¡ ª¹Ñè Ê §ÍÑ¡¢ÃÐ 1 µÑÇÍÍ¡ä»·Ò§¾Íà µÍ¹Ø¡ÃÁ ¡Òä׹¤ Ò ¤×¹¤ ÒÍÑ¡¢ÃзÕÊè § ÍÍ¡·Ò§¾Íà µÍ¹Ø¡ÃÁ int puts ( const char *s );

˹ Ò·Õ¿ è § ¡ ª¹Ñè Ê §ÊÒÂÍÑ¡¢Ãзժè âÕé ´Â s ÍÍ¡ä»·Ò§¾Íà µÍ¹Ø¡ÃÁ ¡Òä׹¤ Ò ¤×¹¤ Ò 0 ¶ Ò¡ÒÃÊ §¢ ÍÁÙÅÊíÒàÃç¨ int printf(const char *format, ...);

˹ Ò·Õ¿ è § ¡ ª¹Ñè Ê §¡ÅØÁ ÍÑ¡ÃÐÍÍ¡·Ò§¾Íà µÍ¹Ø¡ÃÁ «Ö§è ¡íÒ˹´ÃÙ»áººä´ int sprintf(char *buffer, const char *format, ...);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§ÃٻẺ¢ ÍÁÙŵÑÇàÅ¢ãË ÍÂÙ㠹ẺÊÒÂÍÑ¡¢ÃÐ áŠǨѴà¡çºÅ§ã¹µíÒá˹ § buffer ªÕÍé ÂÙ ¡Òä׹¤ Ò ¤×¹¤ Ò¨íҹǹ¢ ÍÁÙÅ(¨íҹǹ亵 )㹡ÒÃá»Å§ int scanf(const char *format, ...);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ÃѺ¤ ÒÍÑ¡¢ÃзÕèࢠÒÁÒ·Ò§¾Íà µÍ¹Ø¡ÃÁÍ ҧµ Íà¹×èͧáŠǨѴà¡çºÅ§ã¹µíÒá˹ §·Õè¡íÒ˹´¨Ò¡ ÍСÔÇàÁ¹µ ¨¹¡Ç Ҩоº¢ ÍÁÙÅ , \t , \n ¨Ö§à» ¹¡ÒÃÊÔ¹é ÊØ´¡ÒÃÃѺ¢ ÍÁÙÅ «Ö§è ¡ÒáÃзíÒàËÁ×͹¡Ñº getchar â´Â¡ÒèѴà¡çºÍÑ¡¢ÃÐàËŠҹѹé ÊÒÁÒö¡íÒ˹´ÃÙ»áººä´ ¡Òä׹¤ Ò ¤×¹¤ ÒËÁÒÂàÅ¢ fields ¢Í§ÍÑ¡¢Ãж Ò¡ÒÃá»Å§¶Ù¡µ ͧ áµ ¨Ð¤×¹¤ Ò EOF àÁ×Íè à¡Ô´¢ ͼԴ¾ÅÒ´ int sscanf(char *buffer, const char *format, ...);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙŨҡÊÒÂÍÑ¡¢ÃÐà» ¹µÑÇàÅ¢ª¹Ô´µ Ò§æáŠǨѴà¡çº·Õµè Òí á˹ §·Õè buffer ªÕÍé ÂÙ ¡Òä׹¤ Ò ¤×¹¤ Ò¨íҹǹ¢ ÍÁÙÅ(¨íҹǹ亵 )㹡ÒÃá»Å§


114

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¿ §¡ ªÑè¹àËÅ Ò¹Õé㪠âËÁ´ÍÔ¹¾Øµ/àÍÒµ ¾Øµ·Õè¡íÒ˹´â´Â getchar putchar ungetchar _C_INITIO

âËÁ´ÍÔ¹¾Øµ/àÍÒµ ¾µØ ¢Í§äźÃÒÃÕ stdio.h ¹ÕÃé ºÑ Ê §¢ ÍÁÙż Ò¹¾Íà µÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 «Ö§è ¡íÒ˹´äÇ ã¹¿ §¡ ª¹Ñè _C_INITIO â´ÂãË ¾Íà µÊ×Íè ÊÒÃ͹ءÃÁ·íÒ§Ò¹ ã¹âËÁ´ 8 ºÔµ ÍѵÃҺʹ 2,400 ºÔµµ ÍÇÔ¹Ò·Õ ãª ä·àÁÍà 1 à» ¹µÑÇ¡íÒ˹´ÍѵÃҺʹã¹âËÁ´ÃÕâËÅ´¤ Ò Íѵâ¹ÁÑµÔ «Ö§è ¡íÒ˹´¤ ÒµÑÇá»Ã TIM1_INIT ෠ҡѺ 0xE8 â´ÂµÑÇá»Ã¹ÕÍé ÂÙã ¹ RC51S.LIB (äźÃÒÃÕÊè Òí ËÃѺ âÁà´Å˹ ǤÇÒÁ¨íÒ TINY áÅÐ SMALL) ËÃ×Í RC51L.LIB (äźÃÒÃÕÊÒí ËÃѺâÁà´Å˹ ǤÇÒÁ¨íÒ LARGE ¢Ö¹é ä») ·íÒ§Ò¹·ÕÍè µÑ ÃҺʹ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ ¤ÇÒÁ¶Õ¹è ÒÌ ¡Ò 11.059MHz ¹Í¡¨Ò¡¹ÕÂé §Ñ ÊÒÁÒö ¡íÒ˹´âËÁ´¢Í§ÍÔ¹¾Øµ/àÍÒµ ¾µØ 㹡ÒÃÊà ҧ¡ÅØÁ ¿ §¡ ª¹Ñè getchar,putchar, ungetchar áÅÐ _C_INITIO ãËÁ ä´ â´Âá·¹ä¿Å äźÃÒÃÕè RC51x.LIB ´ ǤíÒÊѧè ÅÔ§à¡Íà ´Ñ§µÑÇÍ ҧ¹Õé : LX51 my_file.obj, my_flux.obj

áÅÐÂѧÊÒÁÒö㪠¤Òí ÊÑ§è ¡Ñº RC-51 â´ÂµÃ§à¾×Íè à»ÅÕÂè ¹¤ Ò¤§·Õ¢è ͧµÑÇá»Ã TIM1_INIT ä´ ´§Ñ ¹Õé RC51 tst.c large defnp=TIM1_INIT/0xD8

·Õ»è ÃѺ¤ Òà» ¹ 0xD8 ÊíÒËÃѺâËÁ´¹Õ·é Òí §Ò¹·ÕÍè µÑ ÃҺʹ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ ·Õ¤è ÇÒÁ¶Õè 18.432 MHz ËÁÒÂà赯 : 㹤ÙÁ Í× RC-51 ÂѧÁÕÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè ËÅÑ¡ã¹ stdio.h ÍÒ·Ô putchar, getchar, ungetchar, _getkey, sprintf, printf, sscanf áÅÐ scanf ´ÙÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁä´ ã¹¤ÙÁ Í× ©ºÑºÀÒÉÒÍѧ¡ÄÉ

4.1.3 stdlib.h äźÃÒÃÕÁҵðҹÊíÒËÃѺ¨Ñ´¡Òâ ÍÁÙŢͧµÑÇá»Ã

ÁÕ¡ÒÃ㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ´ Ç »ÃСͺ´ Ç¿ §¡ ª¹Ñè ·ÕÊè Òí ¤Ñ­ ´Ñ§¹Õé

double atof (const char *s);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÊÒÂÍÑ¡¢ÃзÕè s ªÕÍé ÂÙä »à» ¹¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃԧẺ double ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃԧẺ double ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ int atoi (const char *s);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÊÒÂÍÑ¡¢ÃзÕè s ªÕÍé ÂÙä »à» ¹¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃÔ§àµçÁ int ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃÔ§àµçÁ int ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ long atol (const char *s);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÊÒÂÍÑ¡¢ÃзÕè s ªÕÍé ÂÙä »à» ¹¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃÔ§àµçÁ long ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃÔ§àµçÁ long ·Õäè ´ ¨Ò¡¡ÒÃá»Å§


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

115

double strtod (const char *s, char **endp);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÊÒÂÍÑ¡¢ÃзÕè s ªÕÍé ÂÙä »à» ¹¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃԧẺ double ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃԧẺ double ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ endp ·íÒ˹ Ò·Õàè ¡çº¤ ÒµíÒá˹ § ÍÑ¡¢ÃзÕèäÁ ÊÒÁÒöá»Å§à» ¹µÑÇàÅ¢ä´ long strtol (const char *s, char **endp, int base);

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÊÒª¹Ô´ÍÑ¡¢ÃзÕè s ªÕÍé ÂÙà » ¹¢ ÍÁÙŪ¹Ô´¨íҹǹàµçÁ long áÅСíÒ˹´àÅ¢°Ò¹¨Ò¡ base ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹàµçÁ long ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ áÅÐ endp ·íÒ˹ Òà¡çº¤ ÒµíÒá˹ §ÍÑ¡¢ÃÐ ·ÕèäÁ ÊÒÁÒöá»Å§à» ¹µÑÇàÅ¢ä´ unsigned long strtoul (const char *s, char **endp, int base);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ˹ Ò·Õàè ËÁ×͹¡Ñº¿ §¡ ª¹Ñè strtol ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙŪ¹Ô´¨íҹǹàµçÁẺ unsigned long ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ int rand (void);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ÊØÁ ¤ ÒÃÐËÇ Ò§ 0 ¶Ö§ 32767 ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙÅ·Õäè ´ ¨Ò¡¡ÒÃÊØÁ void srand (unsigned int seed);

˹ Ò·Õè¿ §¡ ªÑè¹ µÑ§é µ ¹¡ÒÃÊØÁ ¤ Ò (㪠ÃÇ Á¡Ñº¿ §¡ ª¹Ñè rand) ¡Òä׹¤ Ò äÁ ¤¹× ¤ Ò int abs (int n);

˹ Ò·Õè¿ §¡ ªÑè¹ ËÒ¤ ÒÊÑÁºÙó ¢Í§ n (ª¹Ô´¢ ÍÁÙÅẺ int) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ ÒÊÑÁºÙó ¢Í§ n long labs (long n);

˹ Ò·Õè¿ §¡ ªÑè¹ ËÒ¤ ÒÊÑÁºÙó ¢Í§ n (ª¹Ô´¢ ÍÁÙÅẺ long) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ ÒÊÑÁºÙó ¢Í§ n


116

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

4.1.4 ctype.h äźÃÒÃÕ¿§ ¡ ª¹Ñè µÃǨÊͺ¢ ÍÁÙŢͧµÑÇá»Ã ÁÕ¡ÒÃ㪠µÇÑ á»Ã·È¹ÔÂÁẺ BCD ´ Ç »ÃСͺ´ Ç¿ §¡ ª¹Ñè ·ÕÊè Òí ¤Ñ­ ´Ñ§¹Õé #define isalnum(c) (_flag1(c) & (_IS_DIG | _IS_UPP | _IS_LOW))

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐ A - Z , a - z , 0'- 9' ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐ A - Z , a - z , 0'- 9' ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isalpha(c) (_flag1(c) & (_IS_UPP | _IS_LOW))

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐ A - Z , a - z ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐ A - Z , a - z ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isascii(c) ((unsigned)(c) < 128)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÃËÑÊáÍÊ¡Õ(é 0x20-0x7E)ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÃËÑÊáÍÊ¡Õ¨é Ф׹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isdigit(c) (_flag1(c) & _IS_DIG)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐ 0 - 9' ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐ 0 - 9' ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isupper(c) (_flag1(c) & _IS_UPP)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐ A - Z (ÍÑ¡ÉõÑǾÔÁ¾ ãË­ ) ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐ A - Z ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define islower(c) (_flag1(c) & _IS_LOW)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐ a - z (ÍÑ¡ÉõÑǾÔÁ¾ àÅç¡) ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐ a - z ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isxdigit(c) (_flag1(c) & (_IS_DIG | _IS_HEX))

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺ c Ç Òà» ¹àÅ¢°Ò¹ÊԺˡ( A - Z , a - z , 0'- 9') ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹àÅ¢°Ò¹ÊԺˡ ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define isspace(c) (_flag2(c) & _IS_SPA)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺ c Ç Òà» ¹ª Í§Ç Ò§( 0x09-0x0D ËÃ×Í 0x20) ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ª Í§Ç Ò§ ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define iscntrl(c) (_flag2(c) & _IS_CNT)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç ÒÁÕ¤Ò ÍÂÙà ÐËÇ Ò§ 0x00 ¶Ö§ 0x7FËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c à» ¹ÃËÑʤǺ¤ØÁ¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

117

#define isprint(c) ((c) >= 0x20 && (c) <= 0x7e)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç ÒÁÕ¤Ò ¢ ÍÁÙÅ㹪 ǧ 0x20-0x7E ËÃ×ÍäÁ ¡Òä׹¤ Ò ¶ Ò c ÁÕ¤Ò ¢ ÍÁÙÅ㹪 ǧ 0x20-0x7E¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define ispunct(c) (_flag2(c) & _IS_P)

˹ Ò·Õ¿ è § ¡ ª¹Ñè µÃǨÊͺÍÑ¡¢ÃÐ c Ç Òà» ¹ÍÑ¡¢ÃÐÇÃäµÍ¹ËÃ×ÍäÁ «Ö§è »ÃСͺ´ ÇÂà¤Ã×Íè §ËÁÒÂà«ÁÔâ¤Ã͹( ;) à¤Ã×Íè §ËÁÒ¤ÍÁÁÒ(,) áÅÐà¤Ã×Íè §ËÁÒªÒà »(#) ¡Òä׹¤ Ò ¶ Ò c à» ¹ÍÑ¡¢ÃÐÇÃäµÍ¹¨Ð¤×¹¤ Òà» ¹ 1 áµ ¶Ò äÁ ¤¹× ¤ Òà» ¹ 0 #define toascii(c) ((c) & 0x7f)

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙŨíҹǹàµçÁä»à» ¹ÃËÑÊáÍÊ¡Õé ¡Òä׹¤ Ò ¤×¹¤ ÒÃËÑÊáÍÊ¡Õé·Õèä´ ¨Ò¡¡ÒÃá»Å§¢ ÍÁÙÅ #define toupper(c) ((c) +(‘A’-’a’))

˹ Ò·Õ¿ è § ¡ ª¹Ñè á»Å§¢ ÍÁÙÅÍÑ¡¢ÃÐ c ¨Ò¡µÑǾÔÁ¾ àÅç¡ ( a - z ) à» ¹µÑǾÔÁ¾ ãË­ ( A - Z ) ¶ Ò¢ ÍÁÙÅÍÑ¡¢ÃÐ c äÁ 㪠µÇÑ ¾ÔÁ¾ àÅ硨ÐäÁ Á¼Õ Å㹡ÒÃá»Å§) ¡Òä׹¤ Ò ¤×¹¤ Ò·Õèä´ ¨Ò¡¡ÒÃá»Å§¢ ÍÁÙÅ

ÁÒâ¤ÃàËÅ Ò¹Õãé ª 2 ¿ §¡ ª¹Ñè (ÁÕ¤Ò -flag1 áÅÐ -flag2) à¾×Íè Ê §¤ Ò¡ÅѺÁÒÂѧ¡ÅØÁ µÑÇá»ÃÍÐàà·Õè Í Ò§äÇ ã¹â»Ãá¡ÃÁ ÍÐàà¹ÁÕé ·Õ §Ñé ËÁ´ 128 亵 ºÅçÍ¡ áµ ÅкÅçÍ¡ÁÕ 2 ¹ÔºàºÔÅ (4 ºÔµ) ¨Ö§ÁÕºÅçÍ¡ ¢Í§ÍÐàà෠ҡѺ 256 ¹ÔºàºÔŠ㹺ÅçÍ¡áá («Ö§è à¡ÕÂè Ç¢ ͧ¡Ñº flag1) ¨ÐµÍºÊ¹Í§¡Ñº¿ §¡ ª¹Ñè ·ÑÇè ä» áÅкÅçÍ¡·Õè 2 ¨Ð¶Ù¡âËŴࢠÒÁÒàÁ×Íè ÁÒâ¤Ã isspace, ispunct ËÃ×Í iscntrl ¶Ù¡àÃÕ¡㪠෠ҹѹé


118

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

4.1.5 math.h äźÃÒÃÕ¿§ ¡ ª¹Ñè ¤íҹdz·Ò§¤³ÔµÈÒʵÃ

à» ¹ä¿Å äźÃÒÃÕ·ÕèºÃèؿ §¡ ªÑ蹡Òäíҹdz·Ò§¤³ÔµÈÒʵà ÁÕ¡ÒÃ㪠µÑÇá»Ã·È¹ÔÂÁẺ BCD »ÃСͺ´ Ç¿ §¡ ª¹Ñè ·ÕÊè Òí ¤Ñ­ ´Ñ§¹Õé

4.1.5.1 ¿ §¡ ª¹Ñè ¤ ÒÊÑÁºÙó int abs (int i1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÊÑÁºÙó ¢Í§ n (ª¹Ô´¢ ÍÁÙÅẺ int) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ ÒÊÑÁºÙó ¢Í§ n

4.1.5.2 ¡ÅØÁ ¿ §¡ ª¹Ñè ¡Òäíҹdz·Ò§¤³ÔµÈÒʵà ·Õãè ª ª¹Ô´¢ ÍÁÙŨíҹǹ¨ÃÔ§ double (¢¹Ò´ 48 ºÔµ) 㹡Òäíҹdz double acos (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò Arc cosine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc cosine double asin (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò Arc sine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc sine double atan (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò Arc tangent ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc tangent double atan2 (double db1, double db2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÍѵÃÒÊ Ç¹ Arc tang ¢Í§ db2/db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc tang ¢Í§ db2/db1 double ceil (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¨Ò¡¡Òû ´¢Ö¹é ¢Í§àÈɷȹÔÂÁdb1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òû ´¢Ö¹é ¢Í§àÈɷȹÔÂÁ db1 double fabs (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÊÑÁºÙó ¢Í§ db1 (ª¹Ô´¢ ÍÁÙÅẺàÅ¢·È¹ÔÂÁ double) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ ÒÊÑÁºÙó ¢Í§ db1 double floor (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¨Ò¡¡Òû ´Å§¢Í§àÈɷȹÔÂÁdb1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òû ´Å§¢Í§àÈɷȹÔÂÁ db1


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 double fmod (double db1, double db2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒàÈɨҡ¡ÒÃËÒÃÃÐËÇ Ò§ db1/db2 (ẺàÅ¢¨íҹǹ¨ÃÔ§) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒÃÃÐËÇ Ò§ db1/db2 double exp (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒàŢ¡¡íÒÅѧ°Ò¹ e ËÃ×Í (edb1 ) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò edb1 double log (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÅÍ¡ÒÃÔ¸ÁÖ °Ò¹ e ËÃ×Í (logedb1) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò logedb1 double log10 (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÅÍ¡ÒÃÔ¸ÁÖ °Ò¹ 10 ËÃ×Í (log db1) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò log db1 double modf (double db1, double *db2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè áÂ¡Ê Ç¹¤ Ò¢ ÍÁÙŨíҹǹ¨ÃÔ§¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Òí ¹Ç¹àµçÁ¢Í§ db1 áÅÐ¤×¹Ê Ç¹·È¹ÔÂÁ·Õµè Òí á˹ § db2 ªÕÍé ÂÙ double sin (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò sine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz sine double cos (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò cosine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz cosine double tan (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò tangent ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz tangent double sinh (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò hyperbolic sine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz hyperbolic sine double cosh (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò hyperbolic cosine ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz hyperbolic cosine

l

119


120

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

double tanh (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò hyperbolic tangent ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz hyperbolic tangent double sqrt (double db1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÃÒ¡·ÕÊè ͧ¢Í§ db1 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒäíҹdzÃÒ¡·ÕÊè ͧ¢Í§ db1 double pow (double db1, double db2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òá¡íÒÅѧ¢Í§ db1db2 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒáÒá¡íÒÅѧ¢Í§ db1db2

4.1.5.3 ¡ÅØÁ ¿ §¡ ª¹Ñè ¡Òäíҹdz·Ò§¤³ÔµÈÒʵà ·Õãè ª ª¹Ô´¢ ÍÁÙŪ¹Ô´¨íҹǹ¨ÃÔ§ float (¢¹Ò´ 32 ºÔµ) 㹡Òäíҹdz acosf (float dfp);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò cos -1 (ÍÒà ¡â¤ä«¹ : arc cosine) ¢Í§ dfp (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc cosine float asinf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò sin -1 (ÍÒà ¡ä«¹ : arc sine) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc sine float atanf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò tan -1 (ÍÒà ¡á·¹à¨¹µ : arc tangent) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz Arc tangent float atan2f (float f1, float f2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÍѵÃÒÊ Ç¹ tan -1 ¢Í§ f2/f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz tan -1 ¢Í§ f2/f1 float ceilf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¨Ò¡¡Òû ´¢Ö¹é ¢Í§àÈɷȹÔÂÁ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òû ´¢Ö¹é ¢Í§àÈɷȹÔÂÁ f1 float fabsf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÊÑÁºÙó ¢Í§ fl (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ ÒÊÑÁºÙó ¢Í§ fl


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 float floorf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¨Ò¡¡Òû ´Å§¢Í§àÈɷȹÔÂÁ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òû ´Å§¢Í§àÈɷȹÔÂÁf1 float fmodf (float f1, float f2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒàÈɨҡ¡ÒÃËÒÃÃÐËÇ Ò§ f1/f2 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒÃÃÐËÇ Ò§ f1/f2 float expf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒàŢ¡¡íÒÅѧ°Ò¹ e ËÃ×Í (ef1) (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò ef1 float logf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÅÍ¡ÒÃÔ¸ÁÖ °Ò¹ e ËÃ×Í (logef1) (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò logef1 float log10f (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÅÍ¡ÒÃÔ¸ÁÖ °Ò¹ 10 ËÃ×Í (log f1) (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃËÒ¤ Ò log f1 float modff (float f1, float *fp2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè áÂ¡Ê Ç¹¤ Ò¢ ÍÁÙŨíҹǹ¨ÃÔ§¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Òí ¹Ç¹àµçÁ¢Í§ f1 áÅÐ¤×¹Ê Ç¹·È¹ÔÂÁ·Õµè Òí á˹ § f2 ªÕÍé ÂÙ float sinf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò䫹 (sine : sin) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò sin float cosf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Òâ¤ä«¹ (cosine : cos) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò cos float tanf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò᷹ਹµ (tangent : tan) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò tan float sinhf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒäÎà»Íà âºÅԡ䫹 (hyperbolic sine : sinh) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò sinh

l

121


122

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

float coshf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒäÎà»Íà âºÅÔ¡â¤ä«¹ (hyperbolic cosine : cosh) ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò cosh float tanhf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒäÎà»Íà âºÅԡ᷹ਹµ (hyperbolic tangent : tanh) ¢Í§ f1(Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¤ Ò tanh float sqrtf (float f1);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ ÒÃÒ¡·ÕÊè ͧ¢Í§ f1 (Ẻ¨íҹǹ¨ÃÔ§ float) ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒäíҹdzÃÒ¡·ÕÊè ͧ¢Í§ f1 float powf (float f1, float f2);

˹ Ò·Õ¿ è § ¡ ª¹Ñè ËÒ¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òá¡íÒÅѧ¢Í§ f1f2 ¡Òä׹¤ Ò ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒáÒá¡íÒÅѧ¢Í§ f1f2

4.1.5.4 ¡ÅØÁ ¿ §¡ ª¹Ñè ¡Òäíҹdz·Ò§¤³ÔµÈÒʵà ·ãÕè ª ª¹Ô´¢ ÍÁÙŨíҹǹ¨ÃÔ§¤ÇÒÁÅÐàÍÕ´ÊÙ§ 㹡Òäíҹdz¤Å Ò¡Ѻ¡ÅØ Á¢ ÍÁÙÅẺ Double áÅÐẺ float áµ ¾ÒÃÒÁÔàµÍà ÃѺ¢ ÍÁÙÅ áÅСÒä׹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäíҹdz¨Ðà» ¹¢ ÍÁÙŪ¹Ô´ long double(¢¹Ò´56 ºÔµ) long long long long long long long long long long long long long long long long long long long long long long

double double double double double double double double double double double double double double double double double double double double double double

acosl (long double ld1); asinl (long double ld1); atanl (long double ld1); atan2l (long double ld1, long double ld2); ceill (long double ld1); fabsl (long double ld1); floorl (long double ld1); fmodll (long double ld1, long double ld2); expl (long double ld1); logl (long double ld1); log10l (long double ld1); modfl (long double ld1, long double *ld2); frexpl (long double ld1, int *pexp); ldexpl (long double ld1, int exp); sinl (long double ld1); cosl (long double ld1); tanl (long double ld1); sinhl (long double ld1); coshl (long double ld1); tanhl (long double ld1); sqrtl (long double ld1); powl (long double ld1, long double ld2);


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

123

4.1.6 reg5x.h äźÃÒÃÕºÃÃ¨Ø¤Ò ¡íÒ˹´µÑÇá»ÃÊíÒËÃѺÃÕ¨ÊÔ àµÍà ¾àÔ ÈÉ áÅеÑÇá»ÃºÔµ ã¹â¤Ã§Êà ҧÎÒà ´áÇà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ä¿Å äźÃÒÃÕ¹¨Õé кÃÃ¨Ø¤Ò ¡íÒ˹´µÑÇá»ÃÊíÒËÃѺÃÕ¨ÊÔ àµÍà ¾àÔ ÈÉ (sfr) áÅеÑÇá»ÃºÔµ (sbit) ã¹ â¤Ã§Êà ҧÎÒà ´áÇà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¨Ðà»ÅÕÂè ¹á»Å§ä»µÒÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ᵠÅÐàºÍà ËÒ¡ÁÕÃ¨Õ ÊÔ àµÍà ËÃ×͵ÑÇá»ÃºÔµã´·Õ¾è àÔ ÈÉà¾ÔÁè ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Áҵðҹ ÂѧÊÒÁÒöà¾ÔÁè àÍ§ä´ ·¹Ñ ·Õ ÍÒ·Ôä¿Å c51ac2.h ·Õ¡è Òí ˹´ÃÕ¨ÊÔ àµÍà ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà T89C51AC2 ¢Í§ Atmel à» ¹µ ¹

4.1.7 ºÃÔËÒÃä¿Å äźÃÒÃÕ´Ç Â Library Manager ã¹â»Ãá¡ÃÁ RIDE ä´ àµÃÕÂÁÊ Ç¹·ÕèãË ¼Ù ¾Ñ²¹ÒÃкºÊÒÁÒö¨Ñ´¡ÒúÃÔËÒûÃѺà»ÅÕè¹ ¿ §¡ ªÑè¹ã¹ä¿Å äźÃÒÃÕä´ ´ Ç Library Manager â´ÂàÃÕÂ¡ä´ ¨Ò¡àÁ¹Ù Tool à Library Manager â»Ãá¡ÃÁ¨Ð»ÃÒ¡®Ë¹ Òµ Ò§´Ñ§ÃÙ»·Õè 4-1 ¡Òä ¹ËÒä¿Å äźÃÒÃÕÃÇÁ·Ñ駡ÒÃÊà ҧäźÃÒÃÕãËÁ ËÃ×Íà¾ÔèÁÅ´¿ §¡ ªÑè¹ã¹äźÃÒÃÕÊÒÁÒö ¡ÃзíÒä´ §Ò ÂÁÒ¡¢Ö¹é «Ö§è ÁÕÃÒÂÅÐàÍÕ´㪠§Ò¹àÅ硹 Í ´Ñ§¹Õé »ØÁ Browse 㪠à¾×Íè ¤ ¹ËÒä¿Å äźÃÒÃÕ »ØÁ Create 㪠à¾×Íè Êà ҧä¿Å äźÃÒÃÕãËÁ »ØÁ Add 㪠à¾×Íè à¾ÔÁè ¿ §¡ ª¹Ñè ã¹äźÃÒÃÕ·àÕè Å×Í¡ÍÂÙ «Ö§è ¿ §¡ ª¹Ñè ·Õàè ¾ÔÁè ¹ÕÍé ÂÙã ¹ÃÙ»¢Í§ä¿Å ÍÍ»à¨ç¡ »ØÁ Delete 㪠à¾×Íè ź¿ §¡ ª¹Ñè ã¹äźÃÒÃÕ·àÕè Å×Í¡ÍÂÙ »ØÁ Close 㪠ÍÍ¡¨Ò¡Ê ǹ Library Manager

ÃÙ»·Õè 4-1 áÊ´§Ë¹ Òµ Ò§ Library Manager ¢Í§â»Ãá¡ÃÁ RIDE


124

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

4.2 µÑÇÍ ҧ¡ÒÃÊà ҧäźÃÒÃÕäÇ ãª §Ò¹ à¹×Íè §¨Ò¡ÀÒÉÒ C ¹Ñ¹é ä´ àµÃÕÂÁäźÃÒÃÕ«§Öè ÁÕ¡ÒèѴËÁÇ´ËÁÙÁ ÒãË ãª §Ò¹áÅ ÇÊ Ç¹Ë¹Ö§è áµ ã¹ ºÒ§¤ÃÑ§é µ ͧÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ËÅÒÂæ ¿ §¡ ª¹Ñè «Ö§è ¡çÊÒÁÒö¨Ñ´¡ÅØÁ ¢Í§¿ §¡ ª¹Ñè àËŠҹѹé áÅ Ç ¹íÒÁÒÊà ҧ໠¹äźÃÒÃÕ à¾×Íè ·ÕÇè Ò ã¹§Ò¹¤ÃÑ§é µ Íæä» ¨ÐÊÒÁÒö¹íÒä»àÃÕ¡㪠§Ò¹ä´ Êдǡ¡Ç ÒäÁ µÍ § à¢Õ¹â»Ãá¡ÃÁãËÁ ·Ñé§ËÁ´ ËÃ×ÍÍÒ¨¨Ðµ ͧÁÕ¡ÒûÃѺ»ÃاÍÕ¡àÅ硹 ÍÂàÁ×èÍÁÕ¡ÒÃÍ͡ẺÎÒà ´áÇà ãËÁ à¾×Íè ãË ·Òí §Ò¹à¢ Ò¡Ñ¹ä´ ¡ÒÃÊà ҧäźÃÒÃÕ¡¤ç Í× ¡ÒÃÊà ҧä¿Å ·ÁÕè ¹Õ ÒÁÊ¡ØÅà» ¹ .h ઠ¹ lcd.h , i2c.h , scankey.h à» ¹µ ¹ Ê Ç¹¡ÒùíÒä»ãª §Ò¹¡çà¾Õ§»ÃСÒÈ´ ÇÂä´àÃ硵տ include ࢠÒä»·ÕÊè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ෠ҹѹé ઠ¹ #include<lcd.h>

//

#include<i2c.h>

//

#include<scankey.h>

//

à¾×Íè ãË ÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÀÒÂã¹ lcd.h ä´ à¾×Íè ãË ÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÀÒÂã¹ i2c.h ä´ à¾×Íè ãË àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÀÒÂã¹ scankey.h ä´

µÑÇÍ ҧ

1. àÃÔÁè µ ¹´ Ç¡ÒÃÊà ҧä¿Å ãËÁ â´Âä»·Õè File à New à C Files ãË à¢Õ¹â»Ãá¡ÃÁ´Ñ§¹Õé

unsigned char sum(unsigned char a , unsigned char b) { return(a+b); } int mul(int x , int y) { return(x*y); }

2. ºÑ¹·Ö¡ä¿Å à» ¹ª×Íè calculate.h â´ÂãË Á¡Õ ÒèѴà¡çºä¿Å ¹·Õé äÕè źÃÒÃբͧâ»Ãá¡ÃÁ·Õè C:\Ride\inc 3. ¶Ö§¢Ñ¹é µÍ¹¹Õàé · Ò¡ÑºÇ Òä´ ·Òí ¡ÒÃÊà ҧäźÃÒÃÕ¢¹Öé ÁÒáÅ Ç 1 ä¿Å ªÍ×è ä¿Å calculate.h «Ö§è ÀÒÂ㹺ÃÃ¨Ø ¿ §¡ ª¹Ñè à¾×Íè àÃÕ¡㪠§Ò¹ 2 ¿ §¡ ª¹Ñè ¤×Í ¿ §¡ ª¹Ñè sum áÅÐ mul 4. à¢Õ¹â»Ãá¡ÃÁµ Í仹Õé áÅ Ç·íÒ¡ÒäÍÁä¾Å ãË àÃÕºà Í #include<C51rd2.h> #include< calculate.h >

// //

bit result1 = 0; bit result2 = 0; bit result3 = 0; bit result4 = 0; void main(void) { if(sum(14,6)>=30)

»ÃСÒÈà¾×Íè ãË àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ÀÒÂã¹ calculate.h ä´ ·íÒãË ÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè sum áÅÐ mul ä´


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 result1 = 1; if(sum(100,200)<sum(42,300)) result2 = 1; if(mul(2,2)!=sum(2,2)) result3 = 1; if(mul(6,10)==sum(30,30)) result4 = 1; while(1); }

àÁ×Íè â»Ãá¡ÃÁ·íÒ§Ò¹ ¨ÐãË ¼ÅÅѾ¸ à´ÕÂǡѺµÑÇÍ ҧ·Õè 2.52 㹺··Õè 2

l

125


126

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

127

º··Õè 5 á¹Ç·Ò§¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè Êà ҧ Ãкº¤Çº¤ØÁÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 㹡ÒþѲ¹ÒÃкº¤Çº¤ØÁ·Õãè ª äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ¹Ñ¹é ¨Ð »ÃСͺ´ Ç 2 Ê Ç¹ËÅÑ¡¤×Í ¡ÒþѲ¹Ò«Í¿µ áÇà áÅÐÎÒà ´áÇà ÊíÒËÃÑºÊ Ç¹¢Í§«Í¿µ áÇà ¹¹Ñé »ÃСͺ ´ Ç 3 Ê Ç¹ËÅÑ¡¤×Í àÍ´ÔàµÍà (Editor) , ¤ÍÁä¾àÅÍà (Compiler) áÅÐâ»Ãá¡ÃÁàÁÍà (Programmer) «Ö§è 㹪ش¢Í§«Í¿µ áÇà ᵠÅеÑÇÍҨᡨҡ¡Ñ¹·Ñ§é ÊÒÁÊ Ç¹ËÃ×ÍÃÇÁ¡Ñ¹ÍÂÙã ¹ªØ´à´ÕÂǡѹ¡çä´ ÊíÒËÃѺ㹡ÒþѲ¹ÒÃкº´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ·Õ¹è Òí ÁÒàʹÍã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¹é ¹Ñé ¨Ðá¡ÍÍ¡ à» ¹ 2 Ê Ç¹ËÅÑ¡¤×Í ãª «Í¿µ áÇà ª´Ø Rkit-51 Ãع ·´Åͧ㪠§Ò¹ã¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ (à» ¹àÍ´ÔàµÍà ) áÅФÍÁä¾Å ¨¹ä´ à» ¹ä¿Å .hex à¾×Íè Ê §µ Íä»Âѧ«Í¿µ áÇÃ Í¡Õ µÑÇË¹Ö§è ¤×Í «Í¿µ áÇà ÊÒí ËÃѺâ»Ãá¡ÃÁ ËÃ×Íà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà «Ö觨Ðᵡµ Ò§¡Ñ¹ä»µÒÁ ¤ÇÒÁµ ͧ¡Òâͧ¼Ùã ª §Ò¹áÅмټ ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÍÒ·Ô Win-ISP (Philips), Flash Magic (Embeded System Academy) áÅÐ Micro-ISP (ºÃÔÉ·Ñ ÍÔ¹ â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´) ÊíÒËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89C51Rxx ¢Í§ Philips FLIP (Atmel) ÊíÒËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ¢Í§ Atmel Flash-X (ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´) ÊíÒËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà AT89Cxxx/AT89Sxxx ¢Í§ Atmel ´Ñ§¹Ñ鹨֧ÊÒÁÒöÊÃØ»¢Ñ鹵͹¡ÒþѲ¹ÒÒÃкº¤Çº¤ØÁ·Õè㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ã¹ÅѡɳЪԻà´ÕÂè Ç (single chip) ´Ñ§¹Õé (1) à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C (2) ·íÒ¡ÒäÍÁä¾Å áÅÐáÍÊà«ÁàºÅÍà ´Ç  RC51 áÅÐ MA51 «Ö§è ÊÒÁÒöÊÑ§è §Ò¹¼ Ò¹ ˹ Òµ Ò§¢Í§â»Ãá¡ÃÁ RIDE ä´ àÅ ¨Ðä´ à» ¹ä¿Å .hex ÍÍ¡ÁÒ (¡Ò÷íÒ§Ò¹¢Í§ RC51 áÅÐ MA51 ¨Ðµ Íà¹×Íè §¡Ñ¹â´ÂÍѵâ¹ÁÑµÔ ´ Ç¡ÒÃÊÑ§è ¤ÍÁä¾Å à¾Õ§¤Ãѧé à´ÕÂÇ)


128

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

(3) ¹íÒä¿Å .hex ·Õäè ´ ¨Ò¡¡ÒÃáÍÊà«ÁàºÅÍà ÁÒà» ´ã¹«Í¿µ áÇà ·ãÕè ª 㹡ÒÃâ»Ãá¡ÃÁ (4) ·íÒ¡ÒÃâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂà¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃâ»Ãá¡ÃÁ ´ Ç¡ÒÃàÅ×Í¡àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ò¡¹Ñé¹Åº¢ ÍÁÙÅÀÒÂã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ áÅ Ç â»Ãá¡ÃÁä¿Å .hex ¹Ñ¹é ŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ÊØ´· ÒµÃǨÊͺ¢ ÍÁÙÅ·Õ·è Òí ¡ÒÃâ»Ãá¡ÃÁŧ㹠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (5) Ãѹâ»Ãá¡ÃÁ áŠǵÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ ´íÒà¹Ô¹¡ÒÃ仨¹¡Ãзѧè Ãкº·íҧҹ͠ҧ ÊÁºÙó

5.1 ¡ÒÃàµÃÕÂÁ«Í¿µ áÇà Rkit-51 ÊíÒËÃѺ¡ÒþѲ¹ÒÃкº Í ҧäáçµÒÁ à¾×Íè ãË ¤Ãº¶ ǹÊÁºÙó ¨§Ö ¢Íá¹Ð¹íÒ¡ÒÃàµÃÕÂÁ¡ÒëͿµ áÇà Rkit-51 à¾×Íè 㪠㹡ÒþѲ¹ÒÃкº¤Çº¤ØÁÍ ҧ໠¹ÃÙ»¸ÃÃÁ «Ö§è ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ»´Ñ§¹Õé (5.1.1) 㪠Window Explorer ࢠÒä»·Õâè ¿Åà´Íà ·µÕè ´Ô µÑ§é â»Ãá¡ÃÁ RIDE â´Â»¡µÔÍÂÙ ·Õè C:\RIDE ¨Ò¡¹Ñ¹é ࢠÒä»·Õâè ¿Åà´Íà INC à 51 à (ª×Íè ¼Ù¼ ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÍÒ·Ô Atmel ËÃ×Í Philips) áŠǤѴÅÍ¡ä¿Å äźÃÒÃÕ·ºÕè ÃÃ¨Ø¢Í ÁÙŢͧÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´·ÕÁè ãÕ ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 áµ ÅÐàºÍà ¢Í§áµ Åмټ ÅÔµ ·Ñ§é ¹ÒÁÊ¡ØÅ .h áÅÐ .inc ËÃ×ͨÐ㪠ä¿Å äźÃÒÃÕÁҵðҹ ઠ¹ reg51.h áÅÐ reg51.inc ¡çä´ ÁÒäÇ ·Õè C:\RIDE\INC ¢Ñ¹é µÍ¹¹Õàé » ¹¡ÒÃàµÃÕÂÁàÃÕ¡㪠ä¿Å (5.1.2) ËÒ¡ÁÕ¡Òü¹Ç¡ä¿Å ã´æ ·Õµè Í §¡ÒÃâ´Â㪠ä´àÃ硵տ INCLUDE ·ÕÊè Ç ¹ËÑǢͧ â»Ãá¡ÃÁà¾×Íè ¤ÇÒÁÊдǡ¤ÇäѴÅÍ¡ÁÒÂѧâ¿Åà´Íà C:\RIDE\INC

5.2 ¢Ñ¹é µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺÃкºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  ªØ´«Í¿µ áÇà Rkit-51 ËÅѧ¨Ò¡àµÃÕÂÁ¡ÒÃáÅ Ç ¡ç¨ÐࢠÒÊÙ¢ ¹Ñé µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁ·´Åͧ â´Âã¹µÑÇÍ ҧ·Õ¹è Òí ÁÒ àʹ͹Õàé Å×͡㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¢Í§ Philips àºÍà P89C51RD2 «Ö§è ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ» ´Ñ§¹Õé à Close

(5.2.1) à» ´â»Ãá¡ÃÁ RIDE ËÒ¡ÁÕâ»Ãà¨ç¡µ ã´à» ´¤ Ò§ÍÂÙã Ë »´ ŧâ´Âä»·Õàè Á¹Ù Project

(5.2.2) Êà ҧâ»Ãà¨ç¡µ ãËÁ â´Âä»·Õàè Á¹Ù Project à New Project.. à New ¨Ð»ÃÒ ¡¯Ë¹ Òµ Ò§ãË µ§Ñé ª×Íè â»Ãà¨ç¡µ ·µÕè Í §¡ÒÃ㹪 ͧ Name ¡íÒ˹´ª×Íè µÒÁ·Õµè Í §¡Òà ¨Ò¡¹Ñ¹é àÅ×Í¡ª¹Ô´¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹪 ͧ Type ãË àÅ×Í¡ 80C51 áÅ Ç¡´»ØÁ OK


¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l

129

(5.2.3) ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 价աè Ãͺ Device ãË àÅ×Í¡ Philips à P89C51RX2 Ê Ç¹·Õ¡è Ãͺ Properties ãË àÅ×Í¡ Harvard Architechture áÅ Ç¡´»ØÁ OK (5.2.4.) ä»·Õàè Á¹Ù File à New à C file ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ÊíÒËÃѺà¢Õ¹â»Ãá¡ÃÁ (5.2.5) ·íÒ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C µÒÁ·Õµè Í §¡Òà ¨Ò¡¹Ñ¹é ºÑ¹·Ö¡à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .c 㹪×Íè à´ÕÂǡѺª×Íè â»Ãà¨ç¡µ ·¡Õè Òí ˹´äÇ áÅ Çã¹¢Ñ¹é µÍ¹·Õè 5.4.2 (5.2.6) ·íÒ¡ÒÃÃÇÁä¿Å ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õàè ¢Õ¹¢Ö¹é ࢠÒäÇ ã¹â»Ãà¨ç¡µ ·íÒä´ 2 ÇÔ¸¤Õ Í× (¡) ä»·Õàè Á¹Ù Project à Add note Source/Application ËÃ×Í¡´¤Õ Alt + Insert

(¢) ä»·Õè˹ Òµ Ò§ Project «Öè§ÍÂÙ ´ ҹŠҧ·Ò§« Ò áŠǤÅÔ¡àÁÒÊ ¢ÇÒ·ÕèºÃ÷Ѵ «Ö§è ÁÕªÍ×è ä¿Å ÍÂÙ ¨Ò¡¹Ñ¹é àÅ×Í¡ Add note Source/Application


130

l

¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÅ×Í¡ä¿Å ¹ÒÁÊ¡ØÅ .c ·Õµè Í §¡ÒÃà¾ÔÁè ࢠÒä»ã¹â»Ãà¨ç¡µ «Ö§è ¡ç¤Í× ä¿Å ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õàè ¢Õ¹¢Ö¹é ¨Ò¡¢Ñ¹é µÍ¹·Õè 5.4.5 (5.2.7) ä»·Õàè Á¹Ù Option Project ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ Option áÅ ÇàÅ×Í¡ Directories ¨Ò¡¹Ñ¹é ä»·Õªè Í § Include (.h, .inc) ãË ¡Òí ˹´à» ¹ %RIDEDIR%\Inc;%RIDEDIR%\Inc ËÃ×Í C:\RIDE\INC (5.2.8) ·íÒ¡ÒäÍÁä¾Å ä¿Å ·§Ñé ËÁ´ â´Â¡´¤Õ F9 ËÃ×Íä»·Õàè Á¹Ù Project à Make All ·ÕËè ¹ Òµ Ò§ Make «Ö§è ÍÂÙ· Ò§¢ÇÒ´ ҹŠҧ¢Í§Ë¹ Òµ Ò§ËÅÑ¡ ¨ÐáÊ´§¢ ͤÇÒÁᨠ§¼Å¡Ò÷íÒ§Ò¹ ËÒ¡ äÁ ÁÍÕ ÐäüԴ¾ÅÒ´ ·Õâè ¿Åà´Íà ¢Í§â»Ãà¨ç¡µ ··Õè Òí ¡ÒÃÊà ҧ¢Ö¹é ¨Ð»ÃÒ¡¯ä¿Å ¹ÒÁÊ¡ØÅ .aof, .dbi, .bak, .lst, .xrf áÅÐ .hex «Öè§ä¿Å ¹ÒÁÊ¡ØÅ .hex ¹Õéàͧ¤×Íä¿Å ·Õè¨Ð¹íÒ¢ ÍÁÙÅä»â»Ãá¡ÃÁŧã¹äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ´ Ç«Ϳµ áÇà ÊíÒËÃѺâ»Ãá¡ÃÁµ Íä»


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.