robo-51+

Page 1

àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 1

àÃÕ¹ÃÙ áÅÐÊà ҧËØ ¹Â¹µ Íѵâ¹ÁÑµÔ ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Robot experiment with MCS-51 microcontroller

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


2 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

Robot experiment with MCS-51 microcontroller

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


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 3

ÂؤÊÁÑ¢ͧÊ×Íè ¡ÒÃàÃÕ¹ÃÙ· ªÕè Í×è Ëع ¹µ ¹Ñº¨Ò¡¹Õ¤é Í× ÂؤÊÁÑ¢ͧÊ×Íè ¡ÒÃàÃÕ¹ÃÙ· ªÕè Í×è Ëع ¹µ à» ¹àÇÅҹѺÊÔºæ » áÅ Ç·Õäè Áâ¤Ã¤Í¹â·ÃÅàÅÍà ࢠÒÁÒÁÕº·ºÒ·Í ҧÁҡ㹡ÒþѲ¹ÒÃкº¤Çº¤ØÁÍѵâ¹ÁÑµÔ µÑ§é áµ ¢¹Ò´àÅç¡ äÁ ¡ÍÕè ¹Ô ¾ØµàÍÒµ ¾µØ 仨¹ÃдѺ¡ÅÒ§áÅÐÃдѺ·Õµè Í §ãª ˹ ǤÇÒÁ¨íÒ¢¹Ò´ãË­ ª ͧÊÑ­­Ò³µÔ´µ Í ¨íҹǹÁÒ¡ ÃÇÁ·Ñ§é ¤ÇÒÁËÅÒ¡ËÅÒ¢ͧǧ¨Ãàª×Íè Áµ Í ã¹¢³Ð·Õ¡è ÒÃàÃÕ¹ÃÙÊ Òí ËÃѺ¼Ùà ÃÔÁè µ ¹¨Ðà» ¹ä»µÒÁÃٻẺ ͹ØÃ¡Ñ É ¹ÂÔ Á¹Ñ¹è ¤×Í àÃÔÁè ¨Ò¡ÈÖ¡ÉÒʶһ µÂ¡ÃÃÁ ªØ´¤íÒÊÑ§è ¡ÒÃàª×Íè Áµ ÍÍØ»¡Ã³ Í¹Ô ¾ØµàÍÒµ ¾µØ Í ҧ§ ÒÂæ áÅÐÁÕ¡Òà ¾Ñ²¹Òâ¤Ã§§Ò¹¢Ö¹é à¾×Íè µÃǨÊͺ¤ÇÒÁÃÙ· àÕè ÃÕ¹Áҵѧé áµ µ¹ «Ö§è äÁ ÍÒ¨»¯ÔàÊ¸Ç Ò Ãкº¡ÒÃàÃÕ¹ÃÙã ¹ÃٻẺ¹Ñ¹é ·íÒãË ¼Ùà ÃÕ¹ÁÕÃÒ¡°Ò¹¤ÇÒÁÃÙ· áÕè ¢ç§áç áÅоà ÍÁÊíÒËÃѺ¡ÒÃàµÔºâµà¾×Íè ¾Ñ²¹ÒÃкº·Õãè Ë­ ¢¹Öé «Ñº« ͹¢Ö¹é â´Â·Õ¼è àÙ ÃÕ¹¡ç Âѧ¤§µ ͧ㽠ÃáÙ ÅÐáÊǧËÒͧ¤ ¤ÇÒÁÃÙ» ÃСͺà¾ÔÁè àµÔÁµÒÁ¾Ñ²¹Ò¡Òâͧ෤â¹âÅÂÕÍ»Ø ¡Ã³ Ëع ¹µ 굄 â¹ÁÑµÔ à» ¹ÊÔ§è »ÃдÔÉ° ·áÕè Ê´§¶Ö§ÈÑ¡ÂÀÒ¾¢Í§¡ÒþѲ¹Ò¡ÒÃàÃÕ¹ÃÙ à¹×Íè §¨Ò¡ã¹¡ÒÃÊà ҧËع ¹µ Íѵâ¹ÁѵãÔ Ë ÊÒí àÃç¨Å§ä´ ¹¹Ñé µ ͧ㪠¤ÇÒÁÃÙ· ҧǧ¨Ãä¿¿ ÒáÅÐÍÔàÅç¡·ÃÍ¹Ô¡Ê ¤ÇÒÁࢠÒã¨ã¹àªÔ§¡ÅÈÒʵà ÇÔ·ÂÒÈÒʵà ¼¹Ç¡à¢ ҡѺ¤ÇÒÁÃÙ´ Ò ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ ¨¹·íÒãË Ë¹Ø Â¹µ ·Òí §Ò¹ä´ ã¹·ÕÊè ´Ø ´Ñ§¹Ñé¹ËÒ¡¨ÐÁͧËÒ¤ÇÒÁàª×èÍÁ⧢ͧ ËØ ¹Â¹µ Íѵâ¹ÁÑµÔ ¡Ñº äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ð¾º¨Ø´µ Í àª×Íè ÁÁÒ¡ÁÒ ¨¹ÍÒ¨¡Å ÒÇä´ ÇÒ Áѹ໠¹àÃ×Íè §à´ÕÂǡѹ ´Ñ§¹Ñ¹é ËÒ¡ÊÒÁÒö¼ÊÁ¼ÊÒ¹¤ÇÒÁ¹ Òʹ㨠ʹءʹҹ · Ò·Ò¨ҡ¡ÒÃÊà ҧËع ¹µ ŧä»ã¹¡ÒÃàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ¹ Ò¨Ðà» ¹ÍÕ¡·Ò§àÅ×Í¡¢Í§¡ÒþѲ¹ÒÊ×Íè ¡Òà àÃÕ¹ÃÙ· ¼Õè ÊÁ¼Êҹ͠ҧŧµÑÇ ÃÐËÇ Ò§¡ÒÃàÃÕ¹ÃÙ· àÕè ¢ Áá¢ç§áººÍ¹ØÃ¡Ñ É ¹ÂÔ Á¡Ñº¤ÇÒÁºÑ¹à·Ô§·ÕÁè ÊÕ ÒÃÐáÅоѲ¹Ò ¤ÇÒÁ¤Ô´Êà ҧÊÃä ·äÕè ´ ¨Ò¡Ëع ¹µ ¹Í¡¨Ò¡¹Ñ¹é ÂѧÁÕÍ¡Õ ÊÔ§è Ë¹Ö§è ·Õ¼è àÙ ÃÕ¹¨Ðä´ ¤Í× ¡ÒþѲ¹ÒàªÔ§ÍÒÃÁ³ à¹×Íè §¨Ò¡ã¹ÃÐËÇ Ò§¡ÒÃàÃÕ¹ÃÙá ÅÐ ¡ÒÃÊà ҧËع ¹µ ¼Ùà ÃÕ¹¨Ð¾º¡Ñºº··´Êͺ·Õ·è §Ñé ¤Ò´ËÁÒÂä´ áÅÐà˵ءÒó ·äÕè Á ÍҨŠǧÃÙ Ê §¼ÅãË ä´ ãª »¯ÔÀÒ³ äËǾÃÔº áÅлÃÐʺ¡Òó ¼¹Ç¡¡Ñº¤ÇÒÁáÁ ¹ÂíÒã¹à¹×Íé ËÒ·ÄÉ®Õ à¢ ÒÁÒà ÇÁ¡Ñ¹à¾×Íè ᡠ䢻 ­ËÒáÅлŴà»Å×Íé § ¢ ͨíÒ¡Ñ´ «Ö§è ÊÔ§è àËÅ Ò¹Õ¨é Ðà¡Ô´¢Ö¹é äÁ ä´ àÅ ËÒ¡¼Ùà ÃÕ¹¢Ò´ÊÁÒ¸ÔáÅФǺ¤ØÁÍÒÃÁ³ äÁ ä´ ¡Ò÷íÒ§Ò¹·Õáè µ¡µ Ò§¡Ñ¹ ä»ã¹·Ø¡ª ǧàÇÅҢͧËع ¹µ Íѹà¹×Íè §ÁÒ¨Ò¡ÊÀÒ¾áÇ´Å ÍÁ·Õ¤è Ǻ¤ØÁãË ¤§·Õäè Á ä´ ËÃ×ÍÃдѺ¾Åѧ§Ò¹¢Í§Ëع ¹µ ·ÕÅè ´Å§ËÃ×Íà»ÅÕÂè ¹á»Å§ä»µÅÍ´àÇÅÒ·Õàè ¤Å×Íè ¹·Õè ÊÔ§è àËÅ Ò¹Õ¨é Ðà» ¹Íա˹֧è ˹ Ңͧº·àÃÕ¹·Õ¼è àÙ ÃÕ¹¨Ðµ ͧ¾ºáÅР༪ԭ˹ ÒÍ ҧÁÕÊµÔ´Ç ÂÍÒÃÁ³ ·ÁÕè ¹Ñè ¤§ ´ Ç» ¨¨Ñ·աè Å ÒÇÁҷѧé ËÁ´¹ Ò¨Ðà» ¹ÊÔ§è ·Õªè Ç ÂãË àËç¹´ Ç¡ѺÇÅÕ㹺Ã÷Ѵáá¢Í§º·¹íÒ¹Õé Ëع ¹µ ÁÔ㪠à¾Õ§¢Í§àÅ ¹ ÊÔ§è »ÃдÔÉ° ·àÕè Á×Íè Êà ҧàÊÃ稨ºáÅ Ç¡çáŠǡѹ Ëع ¹µ ÂѧÁÕ¤³Ù»¡ÒÃὧã¹àªÔ§¡ÒÃà» ¹µÑÇá·¹Ê×Íè ¡Òà àÃÕ¹ÃÙ· Ò§ÇÔ·ÂÒÈÒʵà ááÅÐà·¤â¹âÅÂÕ·¼Õè ¤Ù ¹ã¹ÈµÇÃÃɹÕÁé ÍÔ Ò¨»¯ÔàÊ¸ä´ ¤ÇÒÁࢠÁ¢ ¹¹ Òʹã¨ÁÔä´ ÍÂÙ· ÃÕè »Ù Åѡɳ ÀÒ¹͡ ËÒ¡áµ Á¹Ñ ¤×Í à¹×Íé á· ´Ò ¹¡ÒþѲ¹ÒÊÁͧ ʵԻ­ ­Ò áÅÐÍÒÃÁ³ ·ÕÊè ÒÁÒöÊÑÁ¼ÑÊä´ Í ҧ໠¹ÃÙ»¸ÃÃÁ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ


4 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

ÊÒúѭ º··Õè 1 á¹Ð¹íÒªÔ¹é Ê Ç¹/ÍØ»¡Ã³ 㹡ÒÃÊà ҧËع ¹µ áÅÐ «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ .........................................................................7 1.1 ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-51 1.2 à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ 1.3 «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ

º··Õè 2 á¹Ð¹íÒáÅÐ㪠§Ò¹ Flip «Í¿µ ÊÒí ËÃѺâ»Ãá¡ÃÁ¢ ÍÁÙÅŧ㹠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¢Í§ Atmel ã¹áºº ISP .........................................11 2.1 ¡ÒõԴµÑ§é â»Ãá¡ÃÁ 2.2 ¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ Flip

º··Õè 3 Êà ҧËع ¹µ Robo-51 ..........................................................................................19 ¡Ô¨¡ÃÃÁ·Õè 1 : Êà ҧËع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 2 : ÃÙ¨ ¡Ñ ¡Ñºá¼§Ç§¨Ã RBX-51AC2 plus áÅСÒÃàµÃÕÂÁ«Í¿µ áÇà ÊÒí ËÃѺ ¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C 3.1 à¢Õ¹â»Ãá¡ÃÁà¾×Íè áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ LED ¡Ô¨¡ÃÃÁ·Õè 3 : ¢Ñº LED Í ҧ§ Ò 3.2 ¡ÒáíÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ¡Ô¨¡ÃÃÁ·Õè 4 : ¢ÑºÊÑ­­Ò³àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Ââ« 3.3 ¡ÒÃáÊ´§¼Å´ ÇÂâÁ´ÙÅ LCD ¡Ô¨¡ÃÃÁ·Õè 5 : áÊ´§¼Å¼ Ò¹âÁ´ÙÅ LCD 3.4 µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ ¡Ô¨¡ÃÃÁ·Õè 6 : à¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÀÒÂã¹ T89C51AC2 3.5 ¢ÑºÁÍàµÍà 俵ç ¡Ô¨¡ÃÃÁ·Õè 7 : ·´Êͺ¡ÒâѺÁÍàµÍà àº×Íé §µ ¹

º··Õè 4 ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 .................................................................................75 4.1 ä¿Å äźÃÒÃÕËÅÑ¡·Õãè ª 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 4.2 á¹Ç·Ò§¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 8 : ·´Êͺ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 àº×Íé §µ ¹


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 5

ÊÒúѭ º··Õè 5 ¡ÒõԴµ ͡ѺµÑǵÃǨ¨Ñºáººµ Ò§æ ¢Í§Ëع ¹µ Robo-51 ....................................81 5.1 µÑǵÃǨ¨ÑºÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª ¡Ô¨¡ÃÃÁ·Õè 9 : ÃѺ¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª ¢Í§Ëع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 10 : ÃѺ¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª â´Âãª Í¹Ô àµÍÃ Ã»Ñ µ 5.2 ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 11 : ·´Êͺ¡ÒÃÃѺÊÑ­­Ò³ÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51

º··Õè 6 Ëع ¹µ Robo-51 ¡Ñº¡ÒõÃǨ¨ÑºÇѵ¶ØẺäÁ ÊÁÑ ¼ÑÊ´ ÇÂáʧÍÔ¹¿ÃÒàô..............93 6.1 ¤Ø³ÊÁºÑµ¢Ô ͧ GP2D120 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô 6.2 ËÅÑ¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙŵÃǨÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô ¡Ô¨¡ÃÃÁ·Õè 12 : ·´Êͺ¡ÒÃÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅ GP2D120 ¡Ô¨¡ÃÃÁ·Õè 13 : Ëع ¹µ Robo-51 ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ

º··Õè 7 Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ .......................................................................101 7.1 ËÑÇã¨ÊíҤѭ¤×Í á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô 7.2 ¡Ò÷´ÊÍºÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô ¡Ô¨¡ÃÃÁ·Õè 14 : Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô 7.3 ¡ÒõÃǨ¨ÑºàÊ ¹¢Í§Ëع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 15 : Ëع ¹µ Robo-51 ¤ ¹ËÒàÊ ¹ ¡Ô¨¡ÃÃÁ·Õè 16 : Ëع ¹µ Robo-51 ping-pong 7.4 ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁàÊ ¹¢Í§Ëع ¹µ Robo-51 ¡Ô¨¡ÃÃÁ·Õè 17 : ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 仵ÒÁàÊ ¹

º··Õè 8 ¤Çº¤ØÁËع ¹µ Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô....................................119 8.1 ER-4 ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô 4 ª ͧ 8.2 ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz 8.3 Êà ҧäźÃÒÃÕä¿Å ÊÒí ËÃѺÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¡Ô¨¡ÃÃÁ·Õè 18 :·´Êͺ¡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¡Ô¨¡ÃÃÁ·Õè 19 : ¤Çº¤ØÁËØè¹Â¹µì Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ


6 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 7

º··Õè 1 á¹Ð¹íÒªÔ¹é Ê Ç¹/ÍØ»¡Ã³ 㹡ÒÃÊà ҧËع ¹µ áÅЫͿµ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ 㹺·¹Õ¨é йíÒàʹͶ֧¢ ÍÁÙÅã¹àº×Íé §µ ¹¢Í§ªÔ¹é Ê Ç¹µ Ò§æ µÅÍ´¨¹à¤Ã×Íè §Á×Í·Õ¹è Òí ÁÒ㪠㹡Òà Êà ҧËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 «Ö§è µÑ§é ª×Íè Ç Ò Robo-51 â´ÂẠ§ÍÍ¡à» ¹ 3 Ê Ç¹¤×Í 1. ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-51 2. à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ 3. á¹Ð¹íÒ¡ÒÃ㪠§Ò¹«Í¿µ áÇà ·Õè㪠㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ËØ ¹Â¹µ

1.1 ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-51 ÁÕ·§Ñé ÊÔ¹é 3 ¡ÅØÁ ËÅÑ¡ ´Ñ§¹Õé

1.1.1 ªÔ¹é Ê Ç¹·Ò§¡Å

ªØ´à¿ ͧ¢Ñº¾Ã ÍÁÁÍàµÍÃ

ªØ´»ÃСͺŠÍÊÒ¾ҹ ªØ´»ÃСͺ°Ò¹ »ÃСͺ´ Ç ἠ¹ °Ò¹áÅЪÔé ¹ µ Í ¾ÅÒÊµÔ ¡ ẺÁØÁ©Ò¡, á¹ÇµÃ§, ÁØÁ» Ò¹

ªØ´¹Íµ-Ê¡ÃÙ, àÊÒÃͧ, ¢ ͵ Í áÅÐ᡹âÅËТ¹Ò´µ Ò§æ


8 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

1.1.2 ªÔ¹é Ê Ç¹·Ò§ÍÔàÅç¡·Ã͹ԡÊ

ἧǧ¨ÃÊÇÔµª âÁ´ÙÅÇÑ´ÃÐÂзҧ RBX-51AC2 ἧǧ¨Ã¤Çº¤ØÁËÅÑ¡

âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz

ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô

ἧǧ¨ÃµÃǨ¨Ñº áʧÊз ͹ÍÔ¹¿ÃÒàô

1.1.3 ÍØ»¡Ã³ àÊÃÔÁ (¨íÒ˹ ÒÂᡨҡªØ´Áҵðҹ)

à«Íà âÇÁÍàµÍà ¾Ã ÍÁÅ ÍáÅÐÂÒ§

ªØ´»ÃСͺŠÍÍÔÊÃРẵàµÍÃÕè AA (ball caster) SRF-05 ἧǧ¨ÃÇÑ´ÃÐÂзҧ 4 ¡ ͹ ´ ǤÅ×¹è ÍÑŵà Ò⫹ԡ

1.2 à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ

¤ÕÁµÑ´»Í¡ÊÒÂä¿

ÁÕ´¤ÑµàµÍÃ

䢤ǧ»ÅÒÂá©¡

¤ÍÁ¾ÔÇàµÍà µÔ´µÑ§é Ãкº»¯ÔºµÑ ¡Ô ÒÃÇÔ¹â´ÇÊ 98SE ¢Öé¹ä» ÁÕ¾Íà µÍ¹Ø¡ÃÁÇ Ò§ 1 ¾Íà µ ËÃ×͵ ͧ㪠µÇÑ á»Å§ÊÑ­­Ò³¾Íà µ USB à» ¹ RS-232 㹡óÕÁàÕ ©¾ÒÐ ¾Íà µ USB


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 9

1.3 «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ ã¹ËØ ¹Â¹µ Robo-51 ·Õè¨Ð·íÒ¡Ò÷´ÅͧÊà ҧã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õé¤Çº¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà MCS-51 ´Ñ§¹Ñ¹é ¨Ö§ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁä´ ´Ç Ââ»Ãá¡ÃÁÀÒÉÒáÍÊà«ÁºÅÕ ÀÒÉÒàºÊÔ¡â´Â㪠«Í¿µ áÇà àºÊÔ¡¤ÍÁä¾àÅÍà ªÇ  áÅÐÀÒÉÒ C «Ö§è ¡çµÍ §¾Ö§è C ¤ÍÁä¾àÅÍà ઠ¹¡Ñ¹ ÊíÒËÃѺã¹ËØ ¹Â¹µ Robo-51 ·Õèá¹Ð¹íÒãË Êà ҧã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õé¹Ñ鹨Ð㪠â»Ãá¡ÃÁÀÒÉÒ C à» ¹ËÅÑ¡ â´Â«Í¿µ áÇà ·ãÕè ª ÁÕ 2 ªØ´¤×Í ªØ´«Í¿µ áÇà Rkit-51 «Ö§è à» ¹«Í¿µ áÇà C ¤ÍÁä¾àÅÍà ·ÁÕè Ò ¾Ã ÍÁ¡Ñºâ»Ãá¡ÃÁª ǾѲ¹Òã¹ÃٻẺ IDE à¾×Íè Êà ҧä¿Å ¹ÒÁÊ¡ØÅ .hex ÊíÒËÃѺà¢Õ¹ŧã¹Ë¹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹Ëع ¹µ Robo-51 áÅЫͿµ áÇà Flip «Ö§è 㪠㹡Òà ´Òǹ âËÅ´â»Ãá¡ÃÁŧÊÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 Íѹ໠¹ÍØ»¡Ã³ ËÅÑ¡·Õè㪠㹡ÒäǺ ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ÊíÒËÃѺ Rkit-51 ·Õ¹è Òí ÁÒ㪠¹¹Ñé à» ¹¼Å§Ò¹¢Í§ Raisonance ¨Ò¡»ÃÐà·È½Ãѧè àÈÊ ·Õ¹è Òí ÁÒ㪠໠¹ Ãع ·´Åͧ㪠§Ò¹ËÃ×Í evaluation version «Ö§è ÁÕ¢Í ¨íÒ¡Ñ´·Õ¢è ¹Ò´¢Í§ä¿Å .hex ËÅѧ¡ÒäÍÁä¾Å áÅ Ç ÊÙ§ÊØ´äÁ à¡Ô¹ 4 ¡ÔâÅ亵 «Ö§è à¾Õ§¾Íµ Í¡ÒùíÒãª È¡Ö ÉÒáÅФǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ä´ Í ҧ¤Ãº¶ ǹÃͺ´ Ò¹ ÊíÒËÃѺ¼Ù· ÊÕè ¹ã¨ Rkit-51 ã¹Ãع ÊÁºÙó ÊÒÁÒö´ÙÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁáÅÐ µÔ´µ Íä´ ·Õè www.raisonance.com ÃÇÁ件֧¡ÒôÒǹ âËÅ´ÃØ ¹·´Åͧ㪠§Ò¹¹Õé´ ÇÂ

ÃÙ»·Õè 1-1 ˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ RIDE «Ö§è à» ¹Ê Ç¹Ë¹Ö§è ¢Í§ªØ´«Í¿µ áÇà Rkit-51 ·Õãè ª ã ¹¡ÒþѲ¹Ò â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ Robo-51


10 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

ÃÙ»·Õè 1-2 ˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Flip «Ö§è 㪠´Òǹ âËÅ´â»Ãá¡Ã¤Çº¤ØÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 Íѹ໠¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§Ëع ¹µ Robo-51 ¡ÒÃ㪠§Ò¹ªØ´«Í¿µ áÇà Rkit-51 ÃÇÁ¶Ö§¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹¹Ñ¹é äÁ ä´ ÃÇÁ äÇ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õé ÊÒÁÒÃ¶Í Ò¹à¾ÔèÁàµÔÁä´ ¨Ò¡Ë¹Ñ§Ê×Í ¤Ù Á×Í¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×éͧµ ¹ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 «Ö§è ¨Ñ´ÁҾà ÍÁ¡ÑºªØ´Ëع ¹µ Robo-51 ¹Õáé Å Ç Ê Ç¹«Í¿µ áÇà Flip à» ¹«Í¿µ áÇà ·Õè㪠â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹áºº ISP (InSystem Programming) ¢Í§ Atmel «Ö§è à» ¹¼Ù¼ ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ÊÒÁÒö´Òǹ âËÅ´àÇÍà ª¹Ñè Å ÒÊØ´·ÕÍè Ò¨ÁÕä´ ·Õè www.atmel.com ÊíÒËÃѺ¡ÒÃ㪠§Ò¹«Í¿µ áÇà Flip ¹Ñ¹é ÁÕÃÒÂÅÐàÍÕ´ à¾ÔÁè àµÔÁ㹺··Õè 2


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 11

º··Õè 2 á¹Ð¹íÒáÅÐ㪠§Ò¹ Flip «Í¿µ ÊÒí ËÃѺâ»Ãá¡ÃÁ ¢ ÍÁÙÅŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¢Í§ Atmel ã¹áºº ISP (In-System Programming) 㹪شËØ ¹Â¹µ Robo-51 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 㹡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹ ´Ñ§¹Ñé¹ã¹¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¨Ö§µ ͧ㪠«Í¿µ áÇà ੾ÒÐ «Ö§è ã¹·Õ¹è ¤Õé Í× Flip «Ö§è ¾Ñ²¹Ò¢Ö¹é â´Â Atmel ¼Ù¼ ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà T89C51AC2 â´Â Flip ÊÒÁÒöâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ¢Í§ Atmel ã¹ÅѡɳРISP ËÃ×Í In-System Programming ËÃ×ÍẺâ»Ãá¡ÃÁã¹Ç§¨Ãä´ ËÅÒÂàºÍà ÊÒÁÒö´Òǹ âËÅ´ä´ ·Õè www.atmel.com ÊíÒËÃѺàÇÍà ª¹Ñè ·ÕÊè ÒÁÒöâ»Ãá¡ÃÁ T89C51AC2 ä´ ¹¹Ñé µ ͧ໠¹ Flip V1.8 ¢Ö¹é ä» Flip ·íÒ˹ Ò·Õè´Òǹ âËÅ´ä¿Å ¹ÒÁÊ¡ØÅ *.hex ŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà T89C51AC2 ·Õµè ´Ô µÑ§é ÍÂÙº ¹á¼§Ç§¨Ã RBX-51AC2 «Ö§è à» ¹á¼§Ç§¨Ã¤Çº¤ØÁËÅÑ¡¢Í§ Ëع ¹µ Robo-51

2.1 ¡ÒõԴµÑ§é â»Ãá¡ÃÁ 1. ¨Ñ´ËÒä¿Å µ´Ô µÑ§é ¢Í§ Flip «Ö§è ÁÕÍÂÙã¹á¼ ¹«Õ´ÃÕ ÍÁ·Õ¨è ´Ñ ÁҾà ÍÁ¡ÑºªØ´Ëع ¹µ Robo-51 ËÃ×Í ´Òǹ âËÅ´ÁÒ¨Ò¡ www.atmel.com (µ ͧàÅ×Í¡´Òǹ âËÅ´àÇÍà ª¹Ñè 2.2.4) 2. ´ÑºàºÔÅé ¤ÅÔ¡·Õäè ¿Å setup ã¹ä´àÃ硵ÍÃÕ·è àÕè ¡çºâ»Ãá¡ÃÁ Flip ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§¢Í§¡ÒõԴ µÑ§é ãË µÍºÃѺä»Í ҧµ Íà¹×Íè § ¨¹¡ÃÐ·Ñ§è ¡ÒõԴµÑ§é àÊÃç¨ÊÔ¹é ŧ 3. ËÅѧ¨Ò¡·Õ·è Òí ¡ÒõԴµÑ§é â»Ãá¡ÃÁ Flip àÃÕºà ÍÂáÅ Ç Åͧ·´Êͺ໠´µÑÇâ»Ãá¡ÃÁâ´Âä» ·Õè Programs à Atmel à Flip 2.2.4 à Flip (µÑÇàÅ¢¢Í§àÇÍà ª¹Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§ä´ )


12 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

1. »ØÁ ¤íÒÊѧè àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè Í §¡ÒõԴµ Í´ Ç (Select device) 2. »ØÁ ¤íÒÊѧè àÅ×Í¡ª¹Ô´¢Í§¾Íà µã¹¡ÒÃàª×Íè Áµ Í (Set communication) 3. »ØÁ ¤íÒÊѧè ź¢ ÍÁÙÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (Erase device) 4. »ØÁ ¤íÒÊÑ§è µÃǨÊͺ¾×¹é ·ÕÇè Ò §ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (Blank check device) 5. »ØÁ ¤íÒÊÑ§è ´Òǹ âËÅ´â»Ãá¡ÃÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (Program device) 6. »ØÁ ¤íÒÊÑ§è µÃǨÊͺ¤ÇÒÁ¶Ù¡µ ͧ㹡ÒôÒǹ âËÅ´ (Verify device) 7. »ØÁ ¤íÒÊѧè Í Ò¹¢ ÍÁÙŨҡäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÁҾѡäÇ ·ËÕè ¹ ǤÇÒÁ¨íҺѿà¿Íà (Read device) 8. »ØÁ ¤íÒÊÑ§è µÃǨÊͺáÅÐᡠ䢢 ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íҺѿà¿Íà (Edit buffer) 9. »ØÁ ¤íÒÊѧè âËÅ´ä¿Å .hex·Õµè Í §¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (Load HEX file) 10. »ØÁ ¤íÒÊÑ§è ºÑ¹·Ö¡ä¿Å .hex ·Õãè ª §Ò¹ã¹¢³Ð¹Ñ¹é (Save HEX file)

ÃÙ»·Õè 2-1 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁ Flip (ÁÕµÍ )


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 13

11. »ØÁ ¤íÒÊѧè àÃÕ¡´Ù¤ÁÙ Í× ¡ÒÃ㪠§Ò¹·ÕÁè Ҿà ÍÁ¡Ñºâ»Ãá¡ÃÁ Flip (Help) 12. ÃÒ¡ÒäíÒÊÑ§è ·Õµè Í §¡ÒÃãË à¡Ô´¡ÒáÃзíÒÍ ҧµ Íà¹×Íè §â´ÂÍѵâ¹ÁÑµÔ àÅ×Í¡ä´ ââÂ㪠àÁÒÊ ¤ÅÔ¡à¤Ã×Íè §ËÁÒ ¶Ù¡Ë¹ Òª ͧ¢Í§¤íÒÊÑ§è ¹Ñ¹é æ 12.1 àÅ×Í¡¤íÒÊѧè Erase à¾×Íè Êѧè ź¢ ÍÁÙÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 12.2 àÅ×Í¡¤íÒÊѧè Blank check à¾×Íè µÃǨÊͺ¢ ÍÁÙÅÇ Ò§ã¹Ë¹ ǤÇÒÁ¨íҢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 12.3 àÅ×Í¡¤íÒÊѧè Program à¾×Íè ´Òǹ âËÅ´ä¿Å .hex ŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 12.4 àÅ×Í¡¤íÒÊѧè Verify à¾×Íè µÃǨÊͺ¤ÇÒÁ¶Ù¡µ ͧ㹡ÒôÒǹ âËÅ´ ¡ÅØÁ ¤íÒÊÑ§è ·Ñ§é 4 ÃÒ¡ÒÃ·Õ¶è ¡Ù àÅ×Í¡¨Ð¶Ù¡¡ÃзíÒµÒÁÅíҴѺ¨Ò¡º¹Å§Å 񤊫 ¡µç Í× àÁ×Íè ¤ÅÔ¡·Õ»è ÁØ Run áÅÐ ÊÒÁÒöÊѧè ¡àÅÔ¡·Ø¡¤íÒÊÑ§è ¨Ò¡¡ÒäÅÔ¡·Õ»è ÁØ Clear 13. ÅÒàºÅᨠ§ª×Íè ä¿Å ¹ÒÁÊ¡ØÅ .hex ·Õ¶è ¡Ù àÅ×Í¡¾Ã ÍÁ¢¹Ò´¢Í§ä¿Å 14. á¶ºÊ¶Ò¹Ð¢Ñ¹é µÍ¹ã¹¡Ò÷íÒ§Ò¹ÃÐËÇ Ò§â»Ãá¡ÃÁ Flip ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 15. ªèͧáÊ´§¢Õ´ÃдѺ¤ÇÒÁ¡éÒÇ˹éÒ㹡Ò÷ӧҹ¢Í§â»Ãá¡ÃÁ㹤ÓÊÑ§è µèÒ§æ 16. ÅÒàºÅáÊ´§Ê¶Ò¹ÐºÑ¿à¿Íà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 17. ¡ÅØÁ ¢ ÍÁÙÅáÅÐʶҹе Ò§æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·¡Õè Òí ÅѧµÔ´µ Í´ Ç »ÃСͺ´ Ç 17.1 ª ͧÊÕàè ËÅÕÂè Áº¹ÊØ´ à» ¹¡ÒÃᨠ§àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè ´Ô µ Í´ Ç 17.2 Signature 17.3 Device

byte

à» ¹ÃËÑʢͧ¼Ù¼ ÅÔµÃÇÁ¡ÑºàÅ¢ËÁÒ»ÃШíÒµÑǢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

Boot IDs

17.4 Hardware

à» ¹àÅ¢ËÁÒ»ÃШíÒµÑǢͧºÙµâËÅ´à´Íà ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

byte

17.5 Bootloader

Ver.

17.6 BLJB (Bootloader Jump Bit) à» ¹ºÔµ¤Çº¤ØÁ¡ÒÃâ»Ãá¡ÃÁẺ ISP ¼ Ò¹ºÙµâËÅ´à´Íà ÊíÒËÃѺªÔ»Ãع AT89C51AC2 äÁ µÍ §¤ÅÔ¡àÅ×Í¡ áµ ¶Ò à» ¹Ãع T89C51AC2 µ ͧàÅ×Í¡·Ø¡¤Ãѧé 17.7 X2 áÊ´§ÍѵÃÒ¡ÒÃËÒäÇÒÁ¶Õè ¶ Ò¶Ù¡àÅ×Í¡¨Ðà» ¹ 6 ÊÑ­­Ò³¹ÒÌ ¡Òµ Íä«à¡ÔÅ áµ ¶Ò äÁ àÅ×Í¡¨Ð à» ¹ 12 ÊÑ­­Ò³¹ÒÌ ¡Òµ Íä«à¡ÔÅ 17.8

Level 0-2

àÅ×Í¡ºÔµ» ͧ¡Ñ¹ã¹ÃдѺµ Ò§æ ¢Í§¢ ÍÁÙÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

ÃÙ»·Õè 2-1 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁ Flip (¨º)


14 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

2.2 ¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ Flip ã¹ÃÙ»·Õè 2-1 áÊ´§Ë¹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Flip ¾Ã ÍÁ͸ԺÒÂÊ Ç¹»ÃСͺµ Ò§æ ·ÕÊè Òí ¤Ñ­

2.2.1 ¤íÒÊѧè ÀÒÂã¹àÁ¹ÙµÒ §æ·Õãè ª §Ò¹º Í àÁ¹Ù File l Load Hex file àÅ×Í¡ä¿Å .hex ·Õµ è Í §¡ÒôÒǹ âËŴŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà l

Save Hex file ºÑ¹·Ö¡ä¿Å .hex·Õ¶è ¡Ù âËÅ´ã¹¢³Ð¹Ñ¹é

àÁ¹Ù Buffer l Edit µÃǨÊͺáÅÐᡠ䢢 ÍÁÙÅ·Õµ è Òí á˹ §Ë¹ ǤÇÒÁ¨íÒ l Option ¡íÒ˹´ÃÒÂÅÐàÍÕ´à¡ÕÂè ǡѺºÑ¿à¿Íà àÁ¹Ù Device l Select àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µ Õè Í §¡ÒõԴµ Í´ Ç l Erase ź¢ ÍÁÙÅÀÒÂã¹µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà l Blank check µÃǨÊͺ¾×¹ é ·ÕÇè Ò §ÀÒÂã¹µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà l Read Í Ò¹¢ ÍÁÙŨҡäÁâ¤Ã¤ÍÃâ·ÃÅàÅÍà ÁҾѡäÇ ·Ë Õè ¹ ǤÇÒÁ¨íÒ l Program ´Òǹ âËÅ´â»Ãá¡ÃÁŧ㹵ÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà l Verify µÃǨÊͺ¤ÇÒÁ¶Ù¡µ ͧ㹡ÒôÒǹ âËÅ´ àÁ¹Ù Settings l Communication àÅ×Í¡ª¹Ô´¢Í§¾Íà µã¹¡ÒÃàª×Í è Áµ Í l Command Window áÊ´§Ë¹ Òµ Ò§¼ÅÅѾ¸ ¡Ò÷íÒ¤íÒÊÑ§è µ Ò§æ·Õ¼è Ò ¹ÁÒ àÁ¹Ù Help

àÃÕ¡´Ù¤ÁÙ Í× ¡ÒÃ㪠§Ò¹·ÕÁè Ҿà ÍÁ¡Ñºâ»Ãá¡ÃÁ Flip

2.2.2 ¡ÒÃ㪠«Í¿µ áÇà Flip ´Òǹ âËÅ´â»Ãá¡ÃÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 1. ¨ ÒÂä¿àÅÕé§áÅÐàª×èÍÁµ ÍÊÒ´Òǹ âËŴࢠҡѺἧǧ¨Ã·ÕèµÔ´µÑé§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ã¹·Õ¹è ¤Õé Í× á¼§Ç§¨Ã RBX-51AC2 2. àÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¢Í§á¼§Ç§¨ÃãË ÍÂÙã ¹âËÁ´â»Ãá¡ÃÁ â´Â¡´ÊÇÔµª MODE ãË ä¿ ÊÕá´§µíÒá˹ § PGM µÔ´


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 15

3. à» ´â»Ãá¡ÃÁ Flip â´Â¡ÒôѺàºÔéŤÅÔ¡·Õèäͤ͹¢Í§â»Ãá¡ÃÁ ¨Ð»ÃÒ¡¯âÅâ¡ ¢Í§ â»Ãá¡ÃÁ´Ñ§ÃÙ» áÅ ÇࢠÒÊÙË ¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ

4. ·ÕËè ¹ Òµ Ò§â»Ãá¡ÃÁ Flip ¤ÅÔ¡·Õäè ͤ͹ Select device ËÃ×Íä»·Õàè Á¹Ù Device à Select ËÃ×Í ¡´»ØÁ F2 ·Õ¤è ÂÕ º Íà ´ à¾×Íè àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè Í §¡ÒõԴµ Í´ Ç ´Ñ§ÃÙ»


16 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

5. ¤ÅÔ¡»ØÁ ¤íÒÊѧè Set communication ËÃ×Íä»·Õàè Á¹Ù Settings à communication ËÃ×Í¡´»ØÁ F3 »ØÁ 㪠§Ò¹·Õàè ¡ÕÂè Ç¢ ͧ¨Ð»ÃÒ¡¯ËÃ×ÍáÍ¡µÕ¿¢Ö¹é à¾×Íè ãË ÊÒÁÒö㪠§Ò¹ä´ ãË ¤ÅÔ¡áÅ ÇàÅ×Í¡ËÑÇ¢ Í RS232 à¾×Íè àÅ×Í¡¡ÒõԴµ ÍẺ¾Íà µÍ¹Ø¡ÃÁµÒÁÃÙ»

6. ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ãËÁ ªÍ×è RS-232 ãË ¡´»ØÁ Connect à¾×Íè àª×Íè Áµ ÍÃÐËÇ Ò§â»Ãá¡ÃÁ Flip ¡ÑººÍà ´ RBX-51AC2 ¶ Òàª×Íè Áµ Ͷ١µ ͧ ˹ Òµ Ò§â»Ãá¡ÃÁ´ Ò¹¢ÇÒ¨ÐáÍ¡µÕ¿ ËÃ×Íà¡Ô´¡Ò÷íÒ§Ò¹ ¢Ö¹é ´Ñ§ÃÙ» ËÁÒ¤ÇÒÁÇ Ò¢³Ð¹Õé T89C51AC2 ¾Ã ÍÁÊíÒËÃѺ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁáÅ Ç

˹ Òµ Ò§´ Ò¹¢ÇÒáÍ¡µÕ¿¢Ö¹é àÁ×Íè ¡ÒÃàª×Íè Áµ Ͷ١µ ͧ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 17

8. ¡´»ØÁ Load Hex File

¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ãË àÅ×Í¡ä¿Å ¹ÒÁÊ¡ØÅ .hex ·Õµè Í §¡ÒÃ

8. ·Õè˹ Òµ Ò§´ Ò¹« ÒÂ㹪 ͧ Operation Flow ãË àÅ×Í¡¤íÒÊÑè§àÃÕ§ ÅíҴѺ¨Ò¡º¹Å§Å Ò§¤×Í Erase à Balnk Check à Program à Verify ¨Ò¡¹Ñ¹é ¡´»ØÁ Run â»Ãá¡ÃÁ¨Ð·íÒ¡ÒÃź¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ µ Í´ Ç µÃǨÊͺ¢ ÍÁÙÅÇ Ò§, â»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ áÅÐ µÃǨÊͺ¢ ÍÁÙÅã¹Ñ¢¹ ÊØ´· Ò ·Ñ§é ËÁ´¹Õ¨é дíÒà¹Ô¹¡ÒÃÍ ҧµ Íà¹×Íè §ä»ã¹ ¤ÃÒÇà´ÕÂÇ à¾Õ§෠ҹÕéäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¡ç¨Ðä´ ÃѺ¡ÒÃâ»Ãá¡ÃÁ¢ ÍÁÙÅ Í ҧÊÁºÙó ÊÒÁÒö¹íÒä»·´Êͺ¡Ò÷íÒ§Ò¹ä´ µÍ ä» ¹Í¡¨Ò¡¨Ð㪠Operation Flow áÅ Ç ¼Ùã ª §Ò¹ÊÒÁÒöàÅ×Í¡¡ÃзíÒ ¤íÒÊÑ§è ¡ÒÃź, µÃǨÊͺ¢ ÍÁÙÅÇ Ò§, â»Ãá¡ÃÁ áÅеÃǨÊͺ¢ ÍÁÙÅä´ ¨Ò¡ àÁ¹Ù¤Òí ÊÑ§è µÒÁ»¡µÔä´ â´ÂࢠÒä»·Õàè Á¹Ù Device 㹺·µ Í仨ҡ¹Õ¨é Ðä´ ¡Å ÒǶ֧µÑÇÍ ҧ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁáÅÐÊÑ§è ¡Òà ÍØ»¡Ã³ µÒ §æ º¹á¼§Ç§¨Ã RBX-51AC2 áŠǹíÒÁÒÊà ҧ໠¹¿ §¡ ª¹Ñè ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ¨Ñ´à¡çºã¹ ÃÙ»¢Í§äźÃÒÃÕà¾×èͤÇÒÁÊдǡ㹡ÒÃàÃÕ¡㪠¼¹Ç¡ÃÇÁࢠÒà» ¹â»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ Ëع ¹µ Robo-51 à¾×Íè ãË ÊÒÁÒö·íÒ§Ò¹ä´ ã¹ÃٻẺµ Ò§æ µÑ§é áµ ¢ºÑ à¤Å×Íè ¹¸ÃÃÁ´Ò ¨¹¶Ö§¢Ñºà¤Å×Íè ¹ Í ҧÁÕà§×è͹䢨ҡµÑǵÃǨ¨ÑºÊÑ­­Ò³áººµ Ò§æ


18 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 19

º··Õè 3 Êà ҧËØ ¹Â¹µ Robo-51 º·¹Õàé » ¹¡ÒùíÒàʹ͡ÒÃÊà ҧËع ¹µ Robo-51 Íѹ໠¹Ëع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ´ Ç äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 àºÍà T89C51AC2 â´Â¨ÐẠ§ÍÍ¡à» ¹ 2 Ê Ç¹¤×Í á¹Ð¹íÒ¡ÒûÃСͺ µÑÇËØ ¹Â¹µ ã¹Ê ǹáá áÅСÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èÍ·´Êͺ¡Ò÷íÒ§Ò¹¾×é¹°Ò¹¢Í§á¼§Ç§¨Ã¤Çº¤ØÁ Ëع ¹µ Robo-51 㹪 ǧ·ÕÊè ͧ «Ö§è 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¹Ñ¹é ¨Ð㪠ÀÒÉÒ C áÅÐÁÕ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè ÃÇÁ¶Ö§ ä¿Å äźÃÒÃÕà¾×Íè ãË ÊÒÁÒö¹íÒä»ãª 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ 㹺·µ Íæ ä»ä´ Êдǡ¢Ö¹é Robo-51 MCS-51 Microcontroller mobile robot ¢Ñºà¤Å×è͹´ ÇÂ࿠ͧ¢ÑºÁÍàµÍà ¤Ù áÅЪشŠÍÊÒ¾ҹ

l

¤Çº¤ØÁ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 â»Ãá¡ÃÁä´ ã¹µÑÇ

l

l ÊÒÁÒöµÔ´µÑ§é ἧǧ¨ÃµÃǨ¨Ñºáʧ

Êз ͹ÍÔ¹¿ÃÒàôà¾×è͵ÃǨ¨ÑºàÊ ¹, ἧǧ¨ÃÊÇÔµª µÃǨ¨Ñº¡Òê¹, ἧ ǧ¨ÃÃѺáʧÍÔ¹¿ÃÒàôà¾×èͤǺ¤ØÁ ¨Ò¡ÃÐÂÐä¡Å, âÁ´ÙÅÇÑ´ÃÐÂзҧẺ ÍÔ¹¿ÃÒàôà¾×èÍÇÑ´ÃÐÂзҧáÅÐËź ËÅÕ¡ÊÔ觡մ¢ÇҧẺäÁ ÊÑÁ¼ÑÊ

l ÁÕâÁ´ÙÅ LCD ¢¹Ò´ 16 µÑÇÍÑ¡Éà 2

ºÃ÷ѴáÅÐ LED ÊíÒËÃѺáÊ´§¼Å¡Òà ·íÒ§Ò¹

l ÁÕǧ¨Ã¢Ñº RC à«Íà âÇÁÍàµÍà 3 ª ͧ

¨Ö § ÊÒÁÒö»ÃÑ º à»ÅÕè  ¹Ãкº¢Ñ º à¤Å×Íè ¹ áÅÐÊÒÁÒö·íÒ¡ÒõԴµÑ§é ¡Åä¡ à¤Å×è͹äËÇà¾ÔèÁàµÔÁä´


20 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 1

Êà ҧËع ¹µ Robo-51 á¼ ¹°Ò¹¾ÅÒʵԡ x 1 ©Ò¡Âִ᡹ŠÍÊѹé x 2

ºÍà ´ RBX-51 x 1

©Ò¡Âִ᡹ŠÍÂÒÇ x 2

´ØÁÅ Í x 6 Š͢ѺÊÒ¾ҹ x 2 ᡹¡ÅÁ x 3 Å Í»ÃФͧÊÒ¾ҹãË­ x 2

ÊÒ¾ҹ 30 ¢ ͵ Í x 2

ÊÒ¾ҹ 10 ¢ ͵ Í x 4

Ê¡ÃÙ 3x10 ÁÁ. x 15

ªØ´à¿ ͧ¢ÑºÁÍàµÍà x 2

Å Í»ÃФͧÊÒ¾ҹ¡ÅÒ§ x 2 àÊÒÃͧˡàËÅÕÂè Á 30 ÁÁ. x 3

Ê¡ÃÙÁÍ× ËÁع x 3

àÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ. x 2 ªÔ¹é µ ÍÁØÁ©Ò¡ x 3

Ê¡ÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. x 2 Ê¡ÃÙ 3x15 ÁÁ. x 1

á· §µ Í 3 ÃÙ x 2

¹Íµ 3 ÁÁ. x 11

ªÔ¹é µ ÍÁØÁ» Ò¹ x 1

ªÔ¹é µ ͵ç x 1

ἧǧ¨ÃµÃǨ¨Ñº âÁ´ÙÅ GP2D120 x 1 ἧǧ¨ÃâÁ´ÙÅÃѺáʧ áʧÊз ͹ÍÔ¹¿ÃÒàô x 2 ÍÔ¹¿ÃÒàô x 1

ÃÙ»·Õè A1-1 áÊ´§ÍØ»¡Ã³ ÊÒí ËÃѺÊà ҧŠÍÊÒ¾ҹáÅÐâ¤Ã§¢Í§Ëع ¹µ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 21

A1.1 ¹íҪش࿠ͧ¢ÑºÁÍàµÍÃ Â´Ö à¢ Ò¡Ñºá¼ ¹°Ò¹¾ÅÒʵԡ â´ÂÁÍàµÍà µÇÑ ¢ÇÒÁ×ÍãË Ë¹Ñ ´ Ò¹·ÕÁè »Õ ¡ ÍÍ¡ÁÒ´ Ò¹¹Í¡ áÅ Ç㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¨Ò¡´ ҹŠҧ㹵íÒá˹ §´Ñ§áÊ´§ã¹ÃÙ» â´ÂàÇ ¹ÃÙ嫅 ´ ҹ㹢ͧÁÍàµÍà µÇÑ « ÒÂÁ×ÍäÇ ¡ ͹ àÇ ¹äÇ Â§Ñ äÁ Â´Ö Ê¡ÃÙ ´ Ò¹º¹

Ê¡ÃÙ 3x10 ÁÁ.

´ ҹŠҧ

Ëѹ´ Ò¹·ÕÁè »Õ ¡ ÍÍ¡´ Ò¹¹Í¡ ÂÖ´´ ÇÂÊ¡ÃÙ¨Ò¡´ ҹŠҧ

Ê¡ÃÙ 3x10 ÁÁ.

A1.2 ¹íÒŠ͢ѺÊÒ¾ҹËÅÑ¡ÊÇÁࢠҡѺ᡹¢Í§ªØ´à¿ ͧ¢ÑºÁÍàµÍà 㪠ʡÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. ¢Ñ¹ÂÖ´ ·íÒàËÁ×͹ ¡Ñ¹·Ñ§é Êͧ´ Ò¹

´ Ò¹º¹ Š͢ѺÊÒ¾ҹ Ê¡ÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. A1.3 ¤ÇèÒí á¼ ¹°Ò¹Å§ ¹íÒ©Ò¡Âִ᡹ŠÍÂÒÇ»ÃСºà¢ ҡѺἠ¹°Ò¹ã¹µíÒá˹ §µÒÁÃÙ» 㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´ ÂÖ´¡ÑºÃÙ·àÕè ËÅ×ͧ͢» ¡¢Í§ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¨Ò¡¢Ñ¹é µÍ¹·Õè A1.1 ¨Ò¡¹Ñ¹é 㪠ʡÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ¢Ñ¹ÂÖ´ ©Ò¡Âִ᡹ŠÍÂÒÇÍÕ¡Ë¹Ö§è µíÒá˹ § â´ÂÂִࢠҷÕÃè ·Ù Õè 2 ¢Í§©Ò¡Âִ᡹ŠÍÂÒÇ ´Ñ§áÊ´§µíÒá˹ §µÒÁÃÙ» µíÒá˹ §ÃÙÂ´Ö Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ.

´ ҹŠҧ

Ê¡ÃÙ 3x10 ÁÁ. ©Ò¡Âִ᡹ŠÍÂÒÇ


22 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

A1.4 ¹íÒ©Ò¡Âִ᡹ŠÍÂÒÇ·Õàè ËÅ×ÍÂִࢠҡѺἠ¹°Ò¹ áÅ Ç㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¨Ò¡´ Ò¹º¹ áÅÐÂÖ´´ ҹŠҧ ´ ǹ͵ 3 ÁÁ. 2 µíÒá˹ § ´Ñ§áÊ´§ã¹ÃÙ» ¹Íµ 3 ÁÁ.

¹Íµ 3 ÁÁ. ©Ò¡Âִ᡹ŠÍÂÒÇ ´ ҹŠҧ

¹Íµ 3 ÁÁ. A1.5 ¾ÅÔ¡á¼ ¹°Ò¹¡ÅѺÁÒ´ Ò¹º¹ ÂÖ´©Ò¡Âִ᡹ŠÍÊѹé ࢠҡѺ´ ҹ˹ Ңͧἠ¹°Ò¹ã¹µíÒá˹ §µÒÁ·Õáè Ê´§ã¹ ÃÙ» ¢Ñ¹Ê¡ÃÙÂ´Ö à©¾ÒеíÒá˹ §´ ҹ㹠ÃÙ´Ò ¹¹Í¡àÇ ¹äÇ ¹Íµ 3 ÁÁ. àÇ ¹äÇ

´ Ò¹º¹

´ Ò¹º¹

¹Íµ 3 ÁÁ.

©Ò¡Âִ᡹ŠÍÊѹé

A1.6 µÔ´µÑ§é àÊÒâÅËÐË¡àËÅÕÂè Á·Õ´è Ò ¹ËÅѧ¢Í§á¼ ¹°Ò¹ ¤ÇèÒí á¼ ¹°Ò¹Å§ ¢Ñ¹Ê¡ÃÙ 3x10 ÁÁ. ࢠҷÕÃè ãÙ ¹µíÒá˹ §ÁØÁ « Ò¼ ҹἠ¹°Ò¹áÅÐªÔ¹é µ ÍÁØÁ©Ò¡ à¾×Íè ¢Ñ¹ÂÖ´¡ÑºàÊÒâÅËÐË¡àËÅÕÂè Á

Ê¡ÃÙ 3x10 ÁÁ.

´ ҹŠҧ

ªÔ¹é µ ÍÁØÁ©Ò¡ àÊÒâÅËÐË¡àËÅÕÂè Á 30 ÁÁ.

Ê¡ÃÙ 3x10 ÁÁ. ¼ÅÔ¡á¼ ¹°Ò¹´ ҹŠҧ¢Öé¹ ªØ´à¿ ͧ¢Ñº ÁÍàµÍà ¢ÇÒ

á¼ ¹°Ò¹ ´ Ò¹º¹

àÊÒâÅËÐË¡àËÅÕèÂÁ

ÃÙ·ÕèÁØÁ« Ò´ Ò¹ËÅѧ ¢Í§á¼ ¹°Ò¹ ªÔé¹µ ÍÁØÁ©Ò¡


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 23

A1.7 ·Õ´è Ò ¹Ë¹ ÒãË ·Òí ¡ÒõԴµÑ§é àÊÒâËÅÐË¡ààËÅÕÂè Áઠ¹¡Ñ¹ â´Âà ÍÂÊ¡ÃÙ 3x10 ÁÁ. ¼ ҹᷠ§µ Í 3 ÃÙ áÅ Ç¢Ñ¹à¢ Ò ä»ã¹ÃÙ·àÕè Ç ¹äÇ ¢Í§©Ò¡Âִ᡹ŠÍÊÑ¹é ¨Ò¡¢Ñ¹é µÍ¹·Õè A1.5 ¢Ñ¹¼ ҹἠ¹°Ò¹ä»ÂִࢠҡѺàÊÒ´ÅËÐË¡àËÅÕÂè Á 30 ÁÁ. ·íÒઠ¹¹Õ·é §Ñé Êͧ¢ Ò§ â´Âá· §µ Í·Õ¹è Òí ÁÒÂÖ´´ ǹըé Ð㪠µ´Ô µÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôµ Íä» á· §µ Í 3 ÃÙ ´ ҹŠҧ Ê¡ÃÙ 3x10 ÁÁ. ©Ò¡Âִ᡹ŠÍÊѹé àÊÒâÅËÐË¡àËÅÕÂè Á 30 ÁÁ. A1.8 Âѧ¤§¤ÇèÒí á¼ ¹°Ò¹ÍÂÙ ¹íÒ᡹âÅËСÅÁàÊÕºࢠҷթè Ò¡Âִ᡹ŠÍÂÒÇã¹µíÒá˹ §ÃÙ·Õè 2 áÅÐ 6 ´Ñ§ÃÙ» ¡ ͹ ¹íÒÅ Í»ÃФͧÊÒ¾ҹ¡ÅÒ§àÊÕºµÒÁ´ Ç´ØÁÅ Íà¾×Íè ÂÖ´ãË á¹ ¹ ¨Ò¡¹Ñ¹é ¾ÅÔ¡á¼ ¹°Ò¹ãË ¡ÅѺ仴 Ò¹º¹ áŠǹíÒ á¡¹âÅËСÅÁàÊ ¹·Õè 3 àÊÕºࢠҷթè Ò¡Âִ᡹ŠÍÊÑ¹é µ Í´ ǹíÒÅ Í»ÃФͧÊÒ¾ҹãË­ ÊÇÁࢠÒÁÒ áÅ ÇÂÖ´ãË á¹ ¹´ Ç´ØÁÅ Í á¡¹âÅËСÅÁ ´ØÁÅ Í

´ØÁÅ Í

Å Í»ÃФͧÊÒ¾ҹ¡ÅÒ§

Å Í»ÃФͧÊÒ¾ҹãË­ ´ØÁÅ Í á¡¹âÅËСÅÁ

ÃÙ·Õè 6

´ØÁÅ Í ÃÙ·Õè 2


24 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

A1.9 »ÃСͺŠÍÊÒ¾ҹ¨íҹǹ 2 àÊ ¹ ã¹áµ ÅÐàÊ ¹ »ÃСͺ´ Ç ÊÒ¾ҹ 30 ¢ ͵ Í 1 àÊ ¹ ÊÒ¾ҹ 10 ¢ ͵ Í 2 àÊ ¹ ¡Òõ ÍÊÒ¾ҹ¨Ðµ ͧ¡ÅÑ´ÊÒ¾ҹᵠÅд ҹࢠҴ Ç¡ѹÍ ҧÃÐÁÑ´ÃÐÇѧ

A1.10 ¹íÒÊÒ¾ҹ·Õ»è ÃСͺáÅ ÇÊÇÁࢠҡѺŠ͢ѺÊÒ¾ҹáÅÐÅ Í»ÃФͧÊÒ¾ҹ ·íҷѧé Êͧ´ Ò¹

A1.11 ¹íÒẵàµÍÃÕ¢è ¹Ò´ AA ¨íҹǹ 4 ¡ ͹ ºÃèØ㹡кж Ò¹¢Í§ºÍà ´ RBX-51 ¨Ò¡¹Ñ¹é ¹íÒºÍà ´ RBX- 51 µÔ´µÑ§é ŧº¹ªØ´°Ò¹Ëع ¹µ â´ÂµÔ´µÑ§é ãË ´Ò ¹·ÕÁè ÊÕ ÇÔµª à» ´» ´ÍÂÙ´ Ò ¹à´ÕÂǡѺÁÍàµÍà ¨Ò¡¹Ñ¹é 㪠ʡÃÙÁÍ× ËÁع 3 µÑǢѹÂÖ´ºÍà ´¡Ñºâ¤Ã§Ëع ¹µ Ê¡ÃÙÁÍ× ËÁع

Ê¡ÃÙÁÍ× ËÁع ẵàµÍÃÕè AA 4 ¡ ͹


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 25

A1.12 ¹íÒἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ZX-IRM ÂִࢠҡѺªÔ¹é µ ÍÁØÁ» Ò¹ ¢Ñ¹ÂÖ´´ ÇÂÊ¡ÃÙ 3x15 ÁÁ. áÅй͵ 3 ÁÁ. ¹íÒªÔ¹é µ ͵çÁÒàÊÕºࢠҡѺ»ÅÒ´ Ò¹Ë¹Ö§è ¢Í§ªÔ¹é µ ÍÁØÁ» Ò¹ Ê¡ÃÙ 3x15 ÁÁ.

ªÔ¹é µ ÍÁØÁ» Ò¹

ÊÒÂÊÑ­­Ò³ JST3AA-8

ªÔ¹é µ ͵ç

A1.13 µÔ´µÑ§é ªÔ¹é µ ÍÁØÁ©Ò¡à¢ Ò·ÕÃè ãÙ ¹µíÒá˹ §¡Ö§è ¡ÅÒ§¢Í§ºÍà ´ RBX-51 ·Ò§´ Ò¹ÊÇÔµª à» ´» ´ ËÃ×Í´ Ò¹ËÅѧ¢Í§â¤Ã§ Ëع ¹µ Robo-51 â´Â㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¡Ñº¹Íµ 3 ÁÁ. à¾×Íè 㪠໠¹·ÕÂè ´Ö á¼§Ç§¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ªÔ¹é µ ÍÁØÁ©Ò¡

Ê¡ÃÙ 3x10 ÁÁ. A1.14 ¹íÒἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ZX-IRM ·Õµè ´Ô µÑ§é ªÔ¹é µ ÍÁØÁ» Ò¹áÅÐªÔ¹é µ Íá¹ÇµÃ§¨Ò¡¢Ñ¹é µÍ¹·Õè A1.11 àÊÕºࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡ã¹¢Ñ¹é µÍ¹·Õè A1.12 Íѹ໠¹¡ÒõԴµÑ§é ἧǧ¨Ã ZX-IRM ࢠҡѺËع ¹µ Robo-51 ¨Ò¡¹Ñ¹é àÊÕºÊÒÂÊÑ­­Ò³¢Í§ ZX-IRM ࢠҷյè Òí á˹ § P3.2 ZX-IRM

P3.2


26 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

A1.15 àÊÕºÊÒÂÁÍàµÍà ࢠҡѺ¨Ø´µ ÍÁÍàµÍà â´Âµ ÍÁÍàµÍà ¢ÇÒà¢ Ò·Õ¨è ´Ø µ Í M-2 ÊÕ¢ÒÇ áÅÐÁÍàµÍà «Ò ÂࢠҷÕè ¨Ø´µ Í M-1 ÊÕ´Òí Í ҧäáçµÒÁÊÒÁÒöà»ÅÕÂè ¹á»Å§ä´ ËÒ¡¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ äÁ ¶¡Ù µ ͧ

ÁÍàµÍà M-1 ÁÍàµÍà M-2

A1.16 µÔ´µÑ§é ἧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô«Ö§è ¹íÒÁÒ㪠㹡ÒõÃǨ¨ÑºàÊ ¹à¢ Ò·Õ´è Ò ¹Ë¹ ҢͧËع ¹µ â´Â µÔ´µÑ§é ࢠҡѺ»ÅÒ¢ͧᷠ§µ Í 3 Ã٠㹡ÒõԴµÑ§é à¾×Íè Âִἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Ñ§é ÊͧªØ´ãË ãª àÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ. Ãͧ¡ ͹¢Ñ¹ÂÖ´´ ÇÂÊ¡ÃÙ 3x10 ÁÁ.áÅй͵ 3 ÁÁ. µÔ´µÑ§é ·Ñ§é Êͧ´ Ò¹ ´Ñ§ÃÙ» ¹Íµ 3 ÁÁ. ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô àÊÒÃͧ 3 ÁÁ. A1.17 ¹íÒâÁ´ÙÅÇÑ´ÃÐÂзҧ GP2D120 µÔ´µÑ§é ࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡ã¹ÅѡɳдѧáÊ´§ã¹ÀÒ¾ â´Â㪠ʡÃÙ¢¹Ò´ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ¢Ñ¹ÂÖ´ ªÔ¹é µ ÍÁØÁ©Ò¡ GP2D120 ¢Ñ¹Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ.


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 27

A1.18 ·Õ´è Ò ¹Ë¹ Ңͧâ¤Ã§Ëع ¹µ ¹Òí Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. à ÍÂàÍÒäÇ ÂѧäÁ µÍ §¢Ñ¹ãË á¹ ¹ ¨Ò¡¹Ñ¹é ¹íÒ â¤Ã§Êà ҧ¢Í§ GP2D120 ·ÕÊè à ҧäÇ ã¹¢Ñ¹é µÍ¹·Õè A1.16 ÁÒàÊÕºࢠÒä»ÃÐËÇ Ò§¹Íµ¡Ñº°Ò¹ áŠǢѹʡÃÙ嫅 ãË á¹ ¹

¹Íµ 3 ÁÁ.

GP2D120 àÊÕºªÔ¹é Ê Ç¹à¢ Òä»ÃÐËÇ Ò§ ¹ÍµáÅÐá¼ ¹°Ò¹ °Ò¹¢Í§Ëع ¹µ

Ê¡ÃÙ 3x10 ÁÁ.

¢Ñ¹Ê¡ÃÙãË á¹ ¹

A1.19 µ ÍÊÒÂÊÑ­­Ò³¢Í§âÁ´ÙÅ GP2D120 ࢠҡѺª ͧ AN2 áÅе ÍÊÒÂÊÑ­­Ò³¢Í§á¼§Ç§¨ÃµÃǨ¨Ñºáʧ Êз ͹ÍÔ¹¿ÃÒàô (ZX-03) ´ Ò¹« ÒÂࢠҷժè Í § AN5 Ê Ç¹´ Ò¹¢ÇÒµ ͡Ѻª ͧ AN4

ZX-03 ¢ÇÒ ZX--IRM GP2D120

ZX-03 « ÒÂ

A1.20 ¨Ñ´à¡çºÊÒÂÊÑ­­Ò³·Ñ§é ËÁ´ãË àÃÕºà Í ¨Ðä´ Ë¹Ø Â¹µ Robo-51 ·Õ¾ è à ÍÁÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹µ Íä»


28 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 2

ÃÙ¨ ¡Ñ ¡Ñºá¼§Ç§¨Ã RBX-51AC2 áÅСÒÃàµÃÕÂÁ «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C ἧǧ¨Ã¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-51 ¤×Í ºÍà ´ RBX-51AC2 plus «Ö§è ÁÕÊÇ ¹»ÃСͺ µ Ò§æ áÊ´§ã¹ÃÙ»·Õè A2-1 Ê Ç¹Ç§¨ÃÊÁºÙó áÊ´§ã¹ÃÙ»·Õè A2-2 ËÑÇã¨ËÅÑ¡¤×Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ¨Ò¡ Atmel ·ÕÁè ¤Õ ³ Ø ÊÁºÑµ¾Ô àÔ ÈÉàËÁÒе Í¡ÒÃÊà ҧËع ¹µ ¤Í× ÁÕâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍÐ¹Ò ÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¤ÇÁÒÅÐàÍÕ´ 10 ºÔµ ÁÒ¡¶Ö§ 8 ª ͧ ᵠ㹺Íà ´ RBX-51AC2 plus ¨Ñ´ÊÃÃäÇ ãË ãª 6 ª ͧ ¾Ã ÍÁ¡ÑºÇ§¨ÃÅ´·Í¹áç´Ñ¹ÍÔ¹¾Øµ à¹×èͧ¨Ò¡ÍÔ¹¾Øµ¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍŹѹé ÊÒÁÒöÃѺáç´Ñ¹ÍÔ¹¾Øµä´ ʧ٠ÊØ´à¾Õ§ 2.5V ã¹¢³Ð·Õµè ÇÑ µÃǨ¨ÑºÍйÒÅÍ¡·Ñ§é ËÁ´ã¹ªØ´ Ëع ¹µ Robo-51 ãË àÍÒµ ¾µØ à» ¹áç´Ñ¹ÊÙ§ÊØ´ +5V ¨Ö§µ Í §ÁÕǧ¨ÃÁÒÅ´·Í¹áç´Ñ¹Å§ ¾Íà µ ÍÔ ¹ ¾Ø µ /àÍÒµ ¾Ø µ ´Ô ¨Ô µ ÍÅ ¨Ø´µ ÍÃкººÑÊ I2C

(µ Í¢Ò P3.2, P3.3, P3.4, P4.0 áÅÐ P4.1) (µ Í¢Ò P0.0 : SDA áÅÐ P0.1 : SCL)

ÊÇÔµª à» ´/» ´

¨Ø´µ ÍẵàµÍÃÕè ¨Ø´µ ;Íà µÍ¹Ø¡ÃÁ RS-232

ÅíÒ⾧໠Ââ« (µ Í¢Ò P2.7) ÍÔ¹¾ØµÍйÒÅÍ¡

äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 6&'+# )+

¨Ø´µ Íà«Íà âÇÁÍàµÍà ÊÇÔµª àÅ×Í¡âËÁ´ ¨Ø´µ ÍâÁ´ÙÅ LCD (µ Í¢Ò P2.4, P2.5 áÅÐ P2.6) Ãѹ/â»Ãá¡ÃÁ ¨Ø´µ ÍÁÍàµÍà 俵ç (µ Í¢Ò P2.0, P2.1, P1.6 áÅÐ P2.2, P2.3, P1.7)

ÊÇÔµª ÃàÕ «µ

LED áÊ´§¼Å

(µ Í¢Ò P0.2 : RS, P0.3 : E, P0.4-P0.7 : D4-D7)

(µ Í¢Ò P3.5-P3.7)

¨ÑÁê à»Íà àÅ×Í¡à» ´-» ´ LED Ê Í§ËÅѧ¢Í§âÁ´ÙÅ LCD

ÃÙ»·Õè A2-1 Ê Ç¹»ÃСͺ¢Í§ RBX-51AC2 plus ἧǧ¨ÃËÅÑ¡·Õãè ª ¤Çº¤ØÁËع ¹µ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 29 +5V +5V

+5V C7 1/50V

4 8

+5V

R7 100k

LED1 PGM

LED2 RUN

IC3 555

6 7

C6 2.2/50V

2

R5 220

SW2 MODE

R10 1k

11

42

C19 0.1/50V

EA

5 C8 0.01/50V

1

R6 510

R9 10k

R8 150

3

1

IC5 T89C51AC2 44

SW3 RESET R11 4.7

38

43

RESET PSEN

+5V

16 1

C11

IC4 ICL232

3

TxD RxD

-

4 C12

7

10

13

8

9

12

6

LED5

P3.7

Vref

CCW. CW.

P3.6

VR1 10k V.Ref Adjust 2.5V. Nominal

P3.5

P3.7

19

GND

OUT

2

C4 ZD2 1000µF 5.6V 6.3V C5 0.01µF 50V

R37 1k R36 1k

17 P3.5

8

+5V

+5V

P1.5/AN5

P0.2

R22 47k

7

P1.4/AN4

P0.3

R21 47k

32

4

33

RS

6 +5V

RN1/8

R20 47k

6 R19 47k

P1.3/AN3

P0.7 P0.6

R18 47k

5 R17 47k

P1.2/AN2

P0.5 P0.4

DSP1 LCD 16x2 (back light option)

E

+V Vo

D7 D6 D5 D4 D3 D2 D1 D0 R/W 14 13 12 11 10 9 8 7 5

37

16

R35 47

BACK LIGHT ON

1 VR2 10k

3

BRIGHTNESS

BLK GND 15 2

36 35 35 +5V

+

R16 47k

4 R15 47k

P1.1/AN1 P2.7

+5V R14 47k

R26-R28 4.7k x3

3

R26 R27 R28

R13 47k

+5V

P1.0/AN0 P2.0

+5V R29 4.7k

R25 4.7k

21

P2.1 P4.1

P2.2

20 P4.0

P2.3 16

K11 PORT-2

15

K10 PORT-1

14

K9 PORT-0

P3.4

+5V +Vm

22

Q2 KRC102

P1.7/PWM2

P3.3

P2.6

2

28

7 2A 1

27

15

26

10

10

9

23

RN3/3 10k R32 4k7

P3.2

SDA SCL

24

30 31

P0.0

RN2/3 +Vm 10k

K17 SERVO #3

P2.4

40 C15 33pF

XTAL1 11.0592MHz

Q4 BC557 RN2/2 +Vm 10k

K16 SERVO #2

+5V

P0.1

GND

25

41

RN3/1 10k R30 4k7

12EN 4A

1Y 3 2Y

IC7 L293D

Q3 BC557 RN2/1 +Vm 10k

C16 33pF

ÃÙ»·Õè A2-2 ǧ¨ÃÊÁºÙó ¢Í§á¼§Ç§¨Ã RBX-51AC2 plus

K15 SERVO #1

4Y 3Y

+ DIRECT LED6 DIR. #A

6 14

LED7 DIR. #B

11 R34 2k2

34EN

4

INVERT

+

R33 2k2

3A

13 12 5

RN3/2 10k R31 4k7

RN1/2

1A

C17 0.1/63V

8

Vcc1

+5V Q5 BC557

+5V P2.5

RN1/1

16

29

+5V

+5V

K18A-K18B MOTOR-A

SP1 PIEZO

P1.6/PWM1 9

4

K12 PORT-3

K14 I2C bus

BLA

RN1/5

+5V

+5V

JP1

RN1/3, RN1/4

+5V

K13 PORT-4

4

1

+5V

LED4

R23 47k

K3 ANALOG-0

CE

LED3

R24 47k

K4 ANALOG-1

5

Q1 FDS6680

R4 1k

R38 1k

18 P3.6

D4 1N4148

+5V

IC1 KIA7042

C3 100µF 10V

P3.1/TxD

D3 1N4148 IC6 LM336Z -2.5

K5 ANALOG-2

ZD1 5.1V

IC2 NCP1450 5.0

+5V R2 47k

P3.0/RxD

Vref 2.5V

C14 0.1/50V

+5V

D2 MBRA340T3

+5V

2

K6 ANALOG-3

L1 10µH

15

R12 1k

K7 ANALOG-4

GND 2

R3 D1 1N5819 0.47

C13

K2 RS-232 (RJ-11 female)

K8 ANALOG-5

R1 1k

RESET 3

C1 100µF 10V

+4.8~6Vdc

5

1 +V

C2 0.1/50V

K1 DC input

2

C10

LED1 LOW-BAT.

+

C9 C9-C13 10/50V

+Vm

S1 POWER

C18 0.1/63V K19A-K19B MOTOR-B

INVERT

+ + DIRECT

LED1 ON


30 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁ¨Ð¡ÃзíÒ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁâ´Âµ ͧÁÕ¡Òá´ÊÇÔµª MODE ãË ·Òí §Ò¹ã¹âËÁ´¡ÒÃâ»Ãá¡ÃÁ (PROGRAM : PGM) àÊÕ¡ ͹ ¶ ÒËÒ¡Ëع ¹µ Robo-51 ÍÂÙã ¹âËÁ´ Ãѹ ¨Ø´µ ;Íà µÍ¹Ø¡ÃÁ¨Ð㪠㹡ÒÃÊ×Íè ÊÒâ ÍÁÙšѺ¤ÍÁ¾ÔÇàµÍà ᷹

¡ÒÃàµÃÕÂÁ¡ÒÃà¾×Íè ¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ¡ÒÃàµÃÕÂÁ«Í¿µ áÇà Rkit-51 ÊíÒËÃѺ¡Ò÷´Åͧ·Ò§ÎÒà ´áÇà ¡ ͹Êà ҧä¿Å â»Ãà¨ç¡µ ÊíÒËÃѺ¡Ò÷´Åͧ·Ò§ÎÒà ´áÇà ¨Ðµ ͧàµÃÕÂÁ«Í¿µ áÇà à¾×èÍãË ÊÒÁÒöÊà ҧ ä¿Å ä´ Í ҧÊдǡ ¢Ñ¹é µÍ¹â´ÂÊÃØ»ÁÕ´§Ñ ¹Õé 1. 㪠Window Explorer ࢠÒä»·Õâè ¿Åà´Íà ·µÕè ´Ô µÑ§é â»Ãá¡ÃÁ RIDE â´Â»¡µÔÍÂÙ· Õè C:\RIDE ¨Ò¡¹Ñ¹é ࢠÒä»·Õè â¿Åà´Íà INC à 51 à Atmel áŠǤѴÅÍ¡ä¿Å c51ac2.h áÅÐ c51ac2.inc ÁÒäÇ ·Õè C:\RIDE\INC ¢Ñ¹é µÍ¹ ¹Õàé » ¹¡ÒÃàµÃÕÂÁàÃÕ¡㪠ä¿Å äźÃÒÃÕ·ºÕè ÃÃ¨Ø¢Í ÁÙŢͧÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´·ÕÁè ãÕ ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ¢Í§ Atmel à¹×Íè §¨Ò¡Ëع ¹µ Robo-51 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà ¹ãÕé ¹¡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹ 2. ËÒ¡ÁÕ¡Òü¹Ç¡ä¿Å ã´æ ·Õµè Í §¡ÒÃâ´Â㪠ä´àÃ硵տ INCLUDE ·ÕÊè Ç ¹ËÑǢͧâ»Ãá¡ÃÁà¾×Íè ¤ÇÒÁÊдǡ ¤ÇäѴÅÍ¡ÁÒÂѧâ¿Åà´Íà C:\RIDE\INC

¢Ñ鹵͹¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺ·´Åͧ·Ò§ÎÒà ´áÇà ËÅѧ¨Ò¡àµÃÕÂÁ¡ÒÃáÅ Ç ¡ç¨ÐࢠÒÊÙ¢ ¹Ñé µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁ·´Åͧ ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ»´Ñ§¹Õé 1. à» ´â»Ãá¡ÃÁ RIDE ËÒ¡ÁÕâ»Ãà¨ç¡µ ã´à» ´¤ Ò§ÍÂÙã Ë »´ ŧâ´Âä»·Õàè Á¹Ù Project à Close 2. Êà ҧâ»Ãà¨ç¡µ ãËÁ â´Âä»·ÕèàÁ¹Ù Project à New Project.. à New ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ãË µÑ駪×èÍ â»Ãà¨ç¡µ ·µÕè Í §¡ÒÃ㹪 ͧ Name ¡íÒ˹´ª×Íè µÒÁ·Õµè Í §¡Òà ¨Ò¡¹Ñ¹é àÅ×Í¡ª¹Ô´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹪 ͧ Type ãË àÅ×Í¡ 80C51 áÅ Ç¡´»ØÁ OK 3. ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÅ×Í¡àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 价աè Ãͺ Device ãË àÅ×Í¡ Atmel à T89C51AC2 Ê Ç¹·Õ¡è Ãͺ Properties ãË àÅ×Í¡ Harvard Architechture áÅ Ç¡´»ØÁ OK 4. ä»·Õàè Á¹Ù File à New à C file ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ÊíÒËÃѺà¢Õ¹â»Ãá¡ÃÁ 5. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C µÒÁ·Õµè Í §¡Òà ¨Ò¡¹Ñ¹é ºÑ¹·Ö¡à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .c 㹪×Íè à´ÕÂǡѺª×Íè â»Ãà¨ç¡µ ·Õ¡è Òí ˹´äÇ áÅ Çã¹¢Ñ¹é µÍ¹·Õè 2


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 31

6. ·íÒ¡ÒÃÃÇÁä¿Å ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õàè ¢Õ¹¢Ö¹é ࢠÒäÇ ã¹â»Ãà¨ç¡µ ·íÒä´ 2 ÇÔ¸¤Õ Í× (¡) ä»·Õàè Á¹Ù Project à Add note Source/Application ËÃ×Í¡´¤Õ Alt + Insert

(¢) ä»·Õè˹ Òµ Ò§ Project «Öè§ÍÂÙ ´ ҹŠҧ·Ò§« Ò áŠǤÅÔ¡àÁÒÊ ¢ÇÒ·ÕèºÃ÷Ѵ«Öè§ÁÕª×èÍä¿Å ÍÂÙ ¨Ò¡¹Ñ¹é àÅ×Í¡ Add note Source/Application

¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÅ×Í¡ä¿Å ¹ÒÁÊ¡ØÅ .c ·Õèµ Í§¡ÒÃà¾ÔèÁࢠÒä»ã¹â»Ãà¨ç¡µ «Ö觡ç¤×Íä¿Å ¢Í§ â»Ãá¡ÃÁÀÒÉÒ C ·Õàè ¢Õ¹¢Ö¹é ¨Ò¡¢Ñ¹é µÍ¹·Õè 5 7. ä»·Õàè Á¹Ù Option Project ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ Option áÅ ÇàÅ×Í¡ Directories ¨Ò¡¹Ñ¹é ä»·Õªè Í § Include (.h, .inc) ãË ¡Òí ˹´à» ¹ %RIDEDIR%\Inc;%RIDEDIR%\Inc ËÃ×Í C:\RIDE\INC 8. ·íÒ¡ÒäÍÁä¾Å ä¿Å ·§Ñé ËÁ´ â´Â¡´¤Õ F9 ËÃ×Íä»·Õàè Á¹Ù Project à Make All ·ÕËè ¹ Òµ Ò§ Make «Ö§è ÍÂÙ ·Ò§¢ÇÒ´ ҹŠҧ¢Í§Ë¹ Òµ Ò§ËÅÑ¡ ¨ÐáÊ´§¢ ͤÇÒÁᨠ§¼Å¡Ò÷íÒ§Ò¹ ËÒ¡äÁ ÁÍÕ ÐäüԴ¾ÅÒ´ ·Õâè ¿Åà´Íà ¢Í§â»Ãà¨ç¡µ ·Õ·è Òí ¡ÒÃÊà ҧ¢Ö¹é ¨Ð»ÃÒ¡¯ä¿Å ¹ÒÁÊ¡ØÅ .aof, .dbi, .bak, .lst, .xrf áÅÐ .hex «Ö§è ä¿Å ¹ÒÁÊ¡ØÅ .hex ¹Õàé ͧ¤×Íä¿Å ·¨Õè Ð ¹íÒ¢ ÍÁÙÅä»â»Ãá¡ÃÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç Ââ»Ãá¡ÃÁ Flip à¾×Íè ·´Åͧµ Íä» Robo-51


32 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.1 à¢Õ¹â»Ãá¡ÃÁà¾×Íè áÊ´§¼Å¡Ò÷íÒ§Ò¹´ Ç LED

ã¹ËÑÇ¢ ͹աé Å ÒǶ֧¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁ¡ÒõԴ´Ñº¢Í§ LED º¹á¼§Ç§¨Ã ËÅÑ¡ RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ·Ñ§é à¾×Íè àÃÕ¹ÃÙ¡ ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè áÊ´§¼Å¡Ò÷íÒ§Ò¹ ¼ Ò¹ LED ¹Í¡¨Ò¡¹Ñé¹ÂÑ§ä´ àÃÕ¹ÃÙ à¡ÕèÂǡѺ¡ÒÃÊà ҧ¿ §¡ ªÑè¹Ë¹ ǧàÇÅÒáÅШѴà¡çºà» ¹äźÃÒÃÕà¾×èÍ ¤ÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ㹤ÃÑ駵 Íæä»

3.1.1 ¡ÒäǺ¤ØÁ LED ¢Í§á¼§Ç§¨Ã RBX-51AC2 plus ἧǧ¨Ã RBX-51AC2 plus ÁÕ LED áÊ´§¼Å 3 ´Ç§ â´Âàª×èÍÁµ ͡Ѻ¢Ò¾Íà µ P3.5-P3.7 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ´Ñ§áÊ´§Ç§¨Ã¢Í§Ê ǹ¹Õãé ¹ÃÙ»·Õè 3-1 ¨Ò¡Ç§¨Ã·Õáè Ê´§µÒÁÃÙ»·Õè 3-3 à» ¹¡ÒâѺ LED Ẻ¡ÃÐáÊ«Ô§¡ (sink current) â´ÂÁÕµÇÑ µ Ò¹ ·Ò¹ 1kΩ ·íÒ˹ Ò·Õè¨íÒ¡Ñ´¡ÃÐáÊ·ÕèäËż Ò¹ LED «Ö觡íÒ˹´äÇ »ÃÐÁÒ³ 5 mA µ ʹǧ ´Ñ§¹Ñ鹶 Ò µ ͧ¡ÒâѺ LED ´Ç§ã´ãË µ´Ô ·íÒä´ â´Â¡ÒáíÒ˹´ãË ¢Ò¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ LED ´Ç§¹Ñ¹é ÁÕ¤Ò Åͨԡ à» ¹ 0 ã¹·Ò§µÃ§¢ ÒÁ¶ Òµ ͧ¡ÒÃãË ´ºÑ ¡ç¡Òí ˹´ãË à» ¹ 1 ´Ñ§¹Ñ¹é ¨ÐÊÑ§à¡µä´ ÇÒ àÁ×Íè àÃÔÁè µ ¹¨ ÒÂä¿ ãË ¡ºÑ ǧ¨Ã ¢Ò¾Íà µ P3.5-P3.7 ¨ÐÁÕÊÀÒÇÐàÃÔÁè µ ¹à» ¹ 1 ´Ñ§¹Ñ¹é LED ·Ñ§é 3 ´Ç§¨Ö§´ÑºËÁ´ +5V

R10 1k

11

42

C19 0.1/50V

EA

1

IC5 T89C51AC2

43

LED5

P3.7 P3.6 P3.5

P3.7

19 LED4

+5V R38 1k R37 1k

18 P3.6

R36 1k

17 LED3

P3.5

40 C15 33pF

XTAL1 11.0592MHz

41 C16 33pF

ÃÙ»·Õè 3-1 ǧ¨Ã¢Ñº LED º¹á¼§Ç§¨Ã RBX-51AC2 ã¹Ëع ¹µ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 33

ã¹ÅíҴѺµ Í仨Ðà» ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁ LED ·Ñé§ 3 ´Ç§ à¾×èÍãË ä´ àËç¹¼ÅÅѾ¸ ä´ Êдǡ¢Ö¹é ¨Ö§¨íÒà» ¹µ ͧÁÕ¡ÒÃ˹ ǧàÇÅÒáÊ´§¼Å¡ÒõԴ/´Ñº¢Í§ LED ¹Ñ¹è ¤×Í àÁ×Íè Êѧè ãË LED µÔ´¨Ð µ ͧ˹ ǧàÇÅÒãË LED µÔ´¤ Ò§ªÑÇè ¢³ÐË¹Ö§è ¨Ò¡¹Ñ¹é ¨Ö§ÊÑ§è ´Ñº áÅ Ç˹ ǧàÇÅÒÍÕ¡¤ÃÑ§é ´Ñ§¹Ñ¹é ¨Ö§µ ͧÊà ҧ ¿ §¡ ª¹Ñè ˹ ǧàÇÅÒ¢Ö¹é ÁÒáŠǨѴà¡çºã¹ÃÙ»¢Í§äźÃÒÃÕ ÀÒÂãµ ªÍ×è ä¿Å äźÃÒÃÕ delay.h ¡ÒÃÊà ҧä¿Å äźÃÒÃÕ¹Õé¤ÇáÃзíҡѺ¡Ò÷íҧҹ㹷ءẺ·ÕèÊíҤѭáÅÐÁÕ¡ÒÃàÃÕ¡㪠§Ò¹ º Í â´ÂµÑ§é ª×Íè ä¿Å ãË ÊÍ´¤Å ͧ¡ÑºË¹ Ò·Õ¢è ͧ¡ÅØÁ ¿ §¡ ª¹Ñè ·ÕÍè ÂÙã ¹ä¿Å äźÃÒÃÕ¹¹Ñé áŠǺѹ·Ö¡à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .h ·Ñ§é ¹Õàé ¾×Íè »ÃÐ⪹ 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤ÃÑ§é µ Íæ ä»

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

µ Í仹Õéà» ¹¡ÒùíÒàʹ͡ÒÃÊà ҧ¿ §¡ ªÑè¹Ë¹ ǧàÇÅÒ·Õè¨Ð¨Ñ´à¡çºà» ¹ä¿Å äźÃÒÃÕä¿Å ·Õèª×èÍ delay.h ÁÕµÇÑ Í ҧâ»Ãá¡ÃÁáÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-1 â´ÂãË ¾ÁÔ ¾ â»Ãá¡ÃÁáÅкѹ·Ö¡à» ¹ä¿Å ¹ÒÁ Ê¡ØÅ .h áŠǨѴà¡çºä¿Å ãË ÍÂÙ· âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ¾Ñ²¹Ò«Ö§è ¨Ðª ÇÂãË ¡ÒÃàª×Íè Á⧠ä¿Å (ÅÔ§¡ : link) ä´ Êдǡ¢Ö¹é ã¹¢Ñ¹é µÍ¹¢Í§¡ÒäÍÁä¾Å

â»Ãá¡ÃÁ·Õè P3-1 ä¿Å äźÃÒÃÕ delay.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ㪠˹ ǧàÇÅÒã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·Õ (0.1 ÁÔÅÅÔÇ¹Ô Ò·Õ) áÅÐ 1 ÁÔÅÅÔÇ¹Ô Ò·Õ /******************************************************************************/ // Program : Delay 100us and 1 ms per unit // Filename : delay.h // C compiler : RIDE 51 V6.1 /******************************************************************************/ /*************************** Delay 1 ms per unit **************************/ void delay_ms(unsigned int ms) { unsigned int x,a; // Keep for counter loop for(x=0;x<ms;x++) { for(a=0;a<878;a++); // Loop for delay 1 ms per unit } } /*********************** Delay 100 us per unit ********************************/ void delay_100us(unsigned int us) { unsigned int x,a; // Keep for counter loop for(x=0;x<us;x++) { for(a=0;a<75;a++); // Loop for delay 100 us per unit } }


34 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.1.2.1 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè

(1) ¿ §¡ ª¹Ñè delay_ms : ˹ ǧàÇÅÒã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ void delay_ms(unsigned int ms) ¾ÒÃÒÁÔàµÍà ms ¡íÒ˹´¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 65,535 ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè ˹ ǧàÇÅÒã¹Ë¹ ÇÂ˹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ 2. ¿ §¡ ª¹Ñè delay_100us : ˹ ǧàÇÅÒã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·ÕËÃ×Í 0.1 ÁÔÅÅÔÇ¹Ô Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ void delay_100us(unsigned int us) ¾ÒÃÒÁÔàµÍà us ¡íÒ˹´¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·Õ ÁÕ¤Ò 0 ¶Ö§ 65,535 ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè ˹ ǧàÇÅÒã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·Õ

µÑÇÍ ҧ·Õè 3-1 ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ÀÒÂã¹â»Ãá¡ÃÁ delay_100us(5); delay_100us(20); delay_ms(100); delay_ms(2000);

// ˹ ǧàÇÅÒ 500 äÁâ¤ÃÇÔ¹Ò·Õ // ˹ ǧàÇÅÒ 2000 äÁâ¤ÃÇÔ¹Ò·Õ ËÃ×Í 2 ÁÔÅÅÔÇ¹Ô Ò·Õ¹¹Ñè àͧ // ˹ ǧàÇÅÒ 100 ÁÔÅÅÔÇ¹Ô Ò·Õ // ˹ ǧàÇÅÒ 2 ¹Ò·Õ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 35

¡Ô¨¡ÃÃÁ·Õè 3

¢Ñº LED Í ҧ§ Ò A3.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A3-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0301.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A3.2 Ãѹâ»Ãá¡ÃÁ ¨ÐàËç¹ LED µÔ´äÅ à» ¹´Ç§æ ¨Ò¡ LED ¢Í§¢Ò P3.5, P3.6 áÅÐ P3.7 àËÁ×͹ä¿ÇÔ§è 3 ´Ç§

â»Ãá¡ÃÁ·Õè A3-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¢Ñº LED º¹á¼§Ç§¨Ã RBX-51AC2 /*——————————————————————————————————————————————————————————————————————————*/ // Program : LED basic drive // Description : drive LED P3.5 , P3.6 and P3.7 by delay interval 2 seconds // Filename : act0301.c // C compiler : RIDE 51 V6.1 /*——————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Declare T89C51AC2’s register #include <delay.h> // Declare Delay library sbit led1 = P3^5; // Define led1 to P3.5 sbit led2 = P3^6; // Define led2 to P3.6 sbit led3 = P3^7; // Define led3 to P3.7 void main() { while(1) // Endless loop { led1 = 0; // LED at P3.5 on delay_ms(2000); // Delay 2 seconds from delay function of // “delay.h” library led1 = 1; // Turn-off LED at P3.5 led2 = 0; delay_100us(20000); led2 = 1; led3 = 0; delay_100us(20000); led3 = 1;

// // // //

Turn-on LED at P3.6 Delay 2 seconds from delay_100us function from Delay library Turn-off LED at P3.6

// // // //

Turn-on LED at P3.7 Delay 2 seconds from delay_100us function from Delay library Turn-off LED at P3.7

} }

¤íÒ͸ԺÒÂà¾ÔÁè àµÔÁ â´ÂÃÇÁáÅ Çâ»Ãá¡ÃÁ¹Õ¨é ФǺ¤ØÁãË LED µÔ´¤Ãѧé ÅÐ 1 ´Ç§àÃÕ§ÅíҴѺ¨Ò¡ LED ·Õµè Í ¡Ñº P3.5, P3.6 áÅÐ P3.7 áÅ Çǹ¡ÅѺ LED áµ ÅдǧµÔ´¹Ò¹ 2 ÇÔ¹Ò·Õ ¨Ò¡¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ˹ ǧàÇÅÒ delay_ms áÅÐ delay_100us ã¹äźÃÒÃÕ delay.h «Ö§è ä´ Â¡µÑÇÍ ҧ¡ÒÃÊà ҧáÅШѴà¡çºäÇ ¡Í ¹Ë¹ Ò¹Õáé Å Ç Robo-51


36 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.2 ¡ÒáíÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ã¹ËÑÇ¢ ͹աé Å ÒǶ֧¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ã¹Ëع ¹µ Robo-51 ¢ÑºÊÑ­­Ò³àÊÕ§¼ Ò¹ÅíÒ⾧໠Ââ« ÃÇÁ·Ñ§é ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè ¡íÒà¹Ô´àÊÕ§áÅШѴà¡çº à» ¹äźÃÒÃÕà¾×Íè ¤ÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁµ Íä»

3.2.1 ¡ÒâѺÊÑ­­Ò³àÊÕ§´ ÇÂÅíÒ⾧໠Ââ« ÅíÒ⾧໠Ââ«à» ¹ÍØ»¡Ã³ ·Õè·íÒ˹ Ò·Õèà»ÅÕè¹¾Åѧ§Ò¹ä¿¿ Òä»à» ¹¾Åѧ§Ò¹¡Åã¹ÃÙ»¢Í§àÊÕ§ 㹧ҹ´ Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ñ´Ç Òà» ¹ÍØ»¡Ã³ áÊ´§¼Å·ÕèãË àÍÒµ ¾ØµÍÍ¡ÁÒà» ¹ÊÑ­­Ò³àÊÕ§ ·íÒ˹ Ò·Õèᨠ§àµ×͹ʶҹе Ò§æ ÀÒÂã¹Ãкº ´Ñ§·Õèä´ ¡Å ÒÇä»áÅ ÇÇ Ò ÅíÒ⾧໠Ââ«ãË àÍÒµ ¾Øµà» ¹ ÊÑ­­Ò³àÊÕ§ ¨Ö§¨íÒà» ¹µ ͧÁÕÊ­ Ñ ­Ò³ÍÔ¹¾Øµ·Ò§ä¿¿ Ò» ͹ãË ¡ºÑ ÁѹàÊÕ¡ ͹ â´Â¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ àÊÕ§·Õè¶Ù¡¡íÒà¹Ô´ÍÍ¡ÁÒ¨Ò¡ÅíÒ⾧໠Â⫨Ðà» ¹¤ Òà´ÕÂǡѹ¡Ñº¤ÇÒÁ¶ÕèÊÑ­­Ò³ä¿¿ ÒÍÔ¹¾Øµ·Õè» Í¹ãË á¡ Á¹Ñ áµ ´Ç ¢ ͨíҡѴ㹡ÒáíÒà¹Ô´ª ǧ¤ÇÒÁ¶Õàè ÊÕ§¢Í§ÅíÒ⾧໠Ââ«áµ ÅЪ¹Ô´¨Ö§·íÒãË áµ¡µ Ò§¡Ñ¹

3.2.2 ¡ÒâѺÊÑ­­Ò³àÊÕ§º¹á¼§Ç§¨Ã RBX-51AC2 º¹á¼§Ç§¨Ã RBX-51AC2 ÁÕÅÒí ⾧໠Ââ«·ÕÊè ÒÁÒö¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§µÔ´µÑ§é ÁҾà ÍÁ㪠§Ò¹ â´Â㪠¢Ò¾Íà µ P2.7 Ê §ÊÑ­­Ò³àÊÕ§ÍÍ¡ÁÒáŠǵ ÍࢠҡѺǧ¨Ã¢ÂÒÂÊÑ­­Ò³´ Ç·ÃÒ¹«ÔÊàµÍà àºÍà BC547 à¾×Íè ¢ÑºÊÑ­­Ò³àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Ââ« ´Ñ§ÃÙ»·Õè 3-2 +5V

R10 1k 11

42

EA

1

IC5 T89C51AC2

C19 0.1/50V

43

+5V

+

P2.7

40 C15 33pF

XTAL1 11.0592MHz

SP1 PIEZO

22

41

Q2 KRC102

C16 33pF

ÃÙ»·Õè 3-2 ǧ¨Ã¢Ñº LED º¹á¼§Ç§¨Ã RBX-51AC2 ã¹Ëع ¹µ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 37

@J

time

@J 6

ÃÙ»·Õè 3-3 ÅѡɳТͧÃÙ»ÊÑ­­Ò³ ÃÙ»·Õè 3-4 áÊ´§ÃÙ»ÊÑ­­Ò³ÊÕàè ËÅÕÂè Á·Õ¡è Òí à¹Ô´ÍÍ¡ÁÒÍ ҧµ Íà¹×Íè § ÊÕàè ËÅÕÂè ÁÁҵðҹ ¡Òáí Ò à¹Ô ´ ÊÑ ­ ­Ò³àÊÕ Â §¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·í Ò ä´ â ´Â¡ÒÃà¢Õ  ¹â»Ãá¡ÃÁ¡ÅÑ º ÊÀÒÇÐÅͨԡ·Õ¢è Ò¾Íà µ P2.7 ä»ÁÒÃÐËÇ Ò§ÅͨԡÊÙ§áÅеèÒí Ê Ç¹¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³àÊÕ§·Õàè ¡Ô´¢Ö¹é ¨Ð ÊÙ§ËÃ×͵èÒí ¢Ö¹é ÍÂÙ¡ ºÑ ª ǧàÇÅÒ·Õ¶è ¡Ù Ë¹ ǧÃÐËÇ Ò§¡ ͹¡ÒáÅѺÅͨԡ ´Ñ§áÊ´§Ç§¨Ãã¹ÃÙ»·Õè 3-2 ¨Ò¡ÃÙ»·Õè 3-3 áÊ´§¶Ö§ÅѡɳÐÃÙ»ÊÑ­­Ò³ÊÕàè ËÅÕÂè Á«Ö§è »ÃСͺ´ ÇÂÊÀÒÇÐÅͨԡÊ٧໠¹àÇÅÒà· Ò ¡Ñº dt áÅÐÊÀÒÇÐÅͨԡµèÒí à» ¹àÇÅÒ෠ҡѺ dt ઠ¹¡Ñ¹ áÅж Ò¡íÒ˹´ãË dt à» ¹¨íҹǹàµçÁ෠ҢͧàÇÅÒ 100 äÁâ¤ÃÇÔ¹Ò·Õ ¨ÐÊÒÁÒö᷹¤ Òã¹ÊÁ¡ÒäÇÒÁ¶ÕÊè ­ Ñ ­Ò³àÊÕ§â´Â»ÃÐÁÒ³ä´ ´§Ñ ¹Õé f=

1 1 5000 = = −6 T 2 × 100 × 10 × dt dt

«Ö觨Ðä´ à» ¹ dt =

5000 f

......................................................(3.1)

¨Ò¡ÃÙ»·Õè 3-4 áÊ´§¶Ö§ÊÑ­­Ò³àÊÕ§·Õ¶è ¡Ù ¡íÒà¹Ô´Í ҧµ Íà¹×Íè §à» ¹àÇÅÒÂÒǹҹ෠ҡѺ time â´Â ¶ Ò¡íÒ˹´ãË time ¤×ͪ ǧàÇÅÒ·Õµè Í §¡ÒÃãË à¡Ô´ÊÑ­­Ò³àÊÕ§ã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ «Ö§è à¡Ô´¨Ò¡¡ÒáíÒà¹Ô´ ÊÑ­­Ò³ÃÙ»ÊÕèàËÅÕèÂÁËÅÒÂæ ÅÙ¡µÔ´µ ͡ѹ â´ÂÊÔ觷Õèµ Í§¤íҹdzà¾×èÍ㪠㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¡íÒà¹Ô´ ÊÑ­­Ò³àÊÕ§㹪 ǧàÇÅÒ·Õ¡è Òí ˹´¤×Í ¨íҹǹÃÙ»ÊÑ­­Ò³¹Ñ¹è àͧ ´Ñ§¹Ñ¹é ¨ÐÁÕµÇÑ á»Ã dt ࢠÒÁÒà¡ÕÂè Ç¢ ͧ 㹡Òäíҹdz´Ñ§¹Õé ¨íҹǹÃͺËÃ×ͨíҹǹÃÙ»¤Å×¹è =

time ×

10−3 5 × time = −6 2 × 100 × 10 × dt dt

...........(3.2)


38 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.2.3 Êà ҧ¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ µ Í仹Õéà» ¹¡ÒùíÒàʹ͡ÒÃÊà ҧ¿ §¡ ªÑ蹡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§à¾×èͨѴà¡çºà» ¹ä¿Å äźÃÒÃÕ·Õè ª×èÍ sound.h â´ÂÁÕÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁáÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-2 â´ÂãË ¾ÁÔ ¾ áÅкѹ·Ö¡à» ¹ ä¿Å ¹ÒÁÊ¡ØÅ .h áŠǨѴà¡çºä¿Å ãË ÍÂÙ· âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ¾Ñ²¹Ò à¾×Íè ª ÇÂãË ¡Òà àª×èÍÁâ§ËÃ×ÍÅÔ§¡ ä¿Å ä´ Êдǡ¢Öé¹ â»Ãá¡ÃÁ·Õè P3-2 ä¿Å äźÃÒÃÕ sound.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ /*—————————————————————————————————————*/ // Program : Generate sound by frequency // Description : Generate sound function // Filename : sound.h // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ sbit s_bit = P2^7; #pragma DISABLE // for disable all interrupt // before call function delay_sound void delay_sound(unsigned int ms) { unsigned int x,a; // Keep for counter loop for(x=0;x<ms;x++) { for(a=0;a<75;a++); // Loop for delay 100 us per unit } } #pragma DISABLE

void sound(int freq,int time) { int dt=0,m=0; time dt = 5000/freq; time = (5*time)/dt; for(m=0;m<time;m++) { s_bit = 1; delay_sound(dt); s_bit = 0; delay_sound(dt); } } #pragma DISABLE void beep(void) { sound(500,100); }

// for disable all interrupt // before call function sound,beep

// Keep value and keep active logic delay // Keep counter for generating sound

// // // //

P2.7 = high Delay for sound P2.7 = low Delay for sound

// For disable all interrupt // before call function beep

// Generate sound at default frequency

ËÁÒÂà赯 ¿ §¡ ª¹Ñè ã¹äźÃÒÃÕ¹ãÕé ¹¢³Ð¶Ù¡àÃÕ¡㪠§Ò¹¨ÐäÁ ¶¡Ù ¢Ñ´¨Ñ§ËÇШҡ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡áËÅ §ã´æ à¹×Íè § ¨Ò¡¡ ͹ࢠÒ仡ÃзíÒ¤íÒÊѧè ÀÒÂ㹿 §¡ ª¹Ñè ä´ Á¡Õ ÒáíÒ˹´ä´àÃ硵տ #pragma DISABLE äÇ Ë¹ Ò¿ §¡ ª¹Ñè


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 39

3.3.3.1 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè (1) ¿ §¡ ª¹Ñè delay_sound ÃٻẺ¿ §¡ ªÑè¹ void delay_sound(unsigned int ms) ¾ÒÃÒÁÔàµÍà ms ¡íÒ˹´¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 65,535 ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè ˹ ǧàÇÅÒã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·Õ (2) ¿ §¡ ª¹Ñè sound ÃٻẺ¿ §¡ ªÑè¹ ¾ÒÃÒÁÔàµÍà ¡Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ (3) ¿ §¡ ª¹Ñè beep ÃٻẺ¿ §¡ ªÑè¹ ¾ÒÃÒÁÔàµÍà ¡Òä׹¤ Ò ÃÒÂÅÐàÍÕ´

void sound(int freq,int time)

¡íÒ˹´¤ Ò¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³àÊÕ§·Õ¶è ¡Ù ¡íÒà¹Ô´ à» ¹¤ Òâ´Â»ÃÐÁÒ³ time ¡íÒ˹´ª ǧàÇÅҢͧÊÑ­­Ò³àÊÕ§·Õ¶ è ¡Ù ¡íÒà¹Ô´ à» ¹¤ Òâ´Â»ÃÐÁÒ³ äÁ Á¡Õ Òä׹¤ Ò à» ¹¿ §¡ ª¹Ñè ÊíÒËÃѺ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ÀÒÂã¹â»Ãá¡ÃÁ freq

void beep(void) äÁ Á¾Õ ÒÃÒÁÔàµÍà äÁ Á¡Õ Òä׹¤ Ò à» ¹¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 500 Hz ¹Ò¹ 0.1 ÇÔ¹Ò·Õ

µÑÇÍ ҧ·Õè 3-1 ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ÀÒÂã¹â»Ãá¡ÃÁËÅѧ¨Ò¡·Õ»è ÃСÒÈÊ Ç¹â»Ãâµä·» (#include<sound.h>) àÃÕºà ÍÂáÅ Ç sound(700,200);

// ¡íÒà¹Ô´àÊÕ§¤ÇÒÁ¶Õè 700 Hz ¹Ò¹ 200 ÁÔÅÅÔÇ¹Ô Ò·Õ

beep();

// ¡íÒà¹Ô´àÊÕ§¤ÇÒÁ¶Õè 500 Hz ¹Ò¹ 100 ÁÔÅÅÔÇ¹Ô Ò·Õ


40 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 4

¢ÑºÊÑ­­Ò³àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Ââ« A4.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A4-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0401_sound.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç ´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip

â»Ãá¡ÃÁ·Õè A4-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¢Ñº LED áÅСíÒà¹Ô´ÊÑ­­Ò³àÊÕ§¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) /*—————————————————————————————————————*/ // Program : LED and sound // Description : Drive LED P3.5 , P3.6 and P3.7 by delay interval 2 second and // generate sound when change LED // Filename : act0401_sound.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Declare T89C51AC2’s register #include <delay.h> // Declare Delay library #include <sound.h> // Declare Sound generator library sbit led1 = P3^5; // Define led1 to P3.5 sbit led2 = P3^6; // Define led2 to P3.6 sbit led3 = P3^7; // Define led3 to P3.7 void main() { while(1) { sound(1000,400); led1 = 0; delay_ms(2000);

// // // // //

Generate sound at 1000Hz for 0.4 second Turn-on LED at P3.5 Delay 2 seconds (call function from Delay library) Turn-off LED at P3.5

led2 = 1;

// // // // //

Generate sound at 800Hz for 0.2 second Turn-on LED at P3.6 Delay 2 seconds (call function from Delay library) Turn-off LED at P3.6

beep(); led3 = 0; delay_100us(20000); led3 = 1;

// // // //

Generate “beep” signal at 500Hz for 0.1s Turn-on LED at P3.7 Delay 2 seconds Turn-off LED at P3.7

led1 = 1; sound(800,200); led2 = 0; delay_100us(20000);

} }

// Endless loop


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 41

â»Ãá¡ÃÁ·Õè A4-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¢Ñº LED áÅСíÒà¹Ô´ÊÑ­­Ò³àÊÕ§¢Í§Ëع ¹µ Robo-51 (¨º) ¤íÒ͸ԺÒÂà¾ÔÁè àµÔÁ ÊíÒËÃѺâ»Ãá¡ÃÁ¹Õ´é ´Ñ á»Å§à¾ÔÁè àµÔÁ¨Ò¡µÑÇÍ ҧä¿Å act0301_led.c ã¹â»Ãá¡ÃÁ·Õè A3-1 â´Â¤Çº¤ØÁ ãË LED µÔ´¤Ãѧé ÅÐ 1 ´Ç§àÃÕ§ÅíҴѺ¨Ò¡ LED ·Õµè Í ¡Ñº P3.5, P3.6 áÅÐ P3.7 áÅ Çǹ·íÒ§Ò¹ â´Â LED áµ ÅÐ ´Ç§¨ÐµÔ´¹Ò¹ 2 ÇÔ¹Ò·Õ Êèǹ·Õàè ¾ÔÁè àµÔÁ¤×Í â»Ãá¡ÃÁ¡Óà¹Ô´ÊÑ­­Ò³àÊÕ§·Õàè ¡Ô´¢Ö¹é ã¹¢³Ð·Õè LED µÔ´ ÊÑ­­Ò³àÊÕ§·Õ´è §Ñ ¢Ö¹é ¾Ã ÍÁ¡Ñº¡ÒÃáÊ´§¼Å¢Í§ LED áµ Åдǧ¨ÐäÁ ෠ҡѹ â´Â¿ §¡ ª¹Ñè ·Õàè ÃÕ¡㪠à¾×Íè ¢ÑºÊÑ­­Ò³àÊÕ§ ã¹â»Ãá¡ÃÁÁÕ·Ñé§ sound áÅÐ beep â´Â¡ÒâѺÊÑ­­Ò³àÊÕ§¨Ò¡¿ §¡ ªÑè¹·Ñé§Êͧ¹Ñ鹨Ðãª ä´ ¡çµ ÍàÁ×èÍÁÕ¡Òà »ÃСÒÈâ»Ãâµä·» ¢Í§äźÃÒÃÕ sound.h àÊÕ¡ ͹ ÁÔઠ¹¹Ñ¹é ¨Ðà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ÃÐËÇ Ò§¤ÍÁä¾Å A4.2 Ãѹâ»Ãá¡ÃÁ ¨ÐàËç¹ LED µÔ´äÅ à» ¹´Ç§æ ¨Ò¡ LED ¢Í§¢Ò P3.5, P3.6 áÅÐ P3.7 àÁ×Íè LED µÔ´¨Ðä´ Â¹Ô àÊÕ§´Ñ§ÍÍ¡ ·Ò§ÅíÒ⾧໠Ââ« â´Â¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³àÊÕ§¨Ðà»ÅÕÂè ¹ä»µÒÁ¡ÒõԴ¢Í§ LED ¶ Ò LED ·Õè P3.5 µÔ´¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õè 1kHz ¶ Ò LED ·Õè P3.6 µÔ´¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õè 800Hz ¶ Ò LED ·Õè P3.7 µÔ´¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õè 500Hz

Robo-51

3.3 ¡ÒÃáÊ´§¼Å´ ÇÂâÁ´ÙÅ LCD ã¹ËÑÇ¢ ͹ÕÍé ¸ÔºÒ¶֧¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ¹íÒ¢ ͤÇÒÁä»áÊ´§¼Å·Õâè Á´ÙÅ LCD º¹á¼§Ç§¨Ã RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ÃÇÁ·Ñ§é ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè áÊ´§¼Å·Õâè Á´ÙÅ LCD áŠǨѴà¡çº à» ¹äźÃÒÃÕà¾×èͤÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ

3.3.1 ¢Ñ¹é µÍ¹¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD Ẻ 4 ºÔµ ã¹àº×Íé §µ ¹¡ ͹¡ÒÃ㪠§Ò¹âÁ´ÙÅ LCD µ Í§Ê §¤íÒÊÑ§è ¡íÒ˹´ÃٻẺ¡ÒõԴµ Íà» ¹áºº 4 ºÔµ 㹡ÒõԴµ ÍẺ 4 ºÔµ¢ ÍÁÙŹÕÁé àÕ ·¤¹Ô¤·Õµè Í §¡ÃзíÒ¡ ͹àÊÁͤ×Í Ê §¢ ÍÁÙÅ 3H ä»ãË âÁ´ÙÅ LCD 2 ¤ÃÑ§é µ Í´ Ç¢ ÍÁÙÅ 2H ä»ÍÕ¡¤Ãѧé à¾Õ§෠ҹÕâé Á´ÙÅ LCD ¡ç¾Ã ÍÁÊíÒËÃѺ¡ÒõԴµ Íã¹âËÁ´ 4 ºÔµáÅ Ç ÊÒà˵طµÕè Í §Ê §¢ ÍÁÙÅ 3H 仡 ͹ 2 ¤Ãѧé à¾×Íè à» ¹¡Òâ¨Ñ´Ê¶Ò¹Ð¢Í§ÊÑ­­Ò³áÅТ ÍÁÙŤíÒÊÑ§è ·ÕÊè § ä»ÂѧâÁ´ÙÅ LCD ¡ ͹˹ Ò¹Õé «Ö§è ÍÒ¨ÍÂÙã ¹âËÁ´ 8 ºÔµ ËÅѧ¨Ò¡¹Ñ¹é Ê §¢ ÍÁÙÅ 2H à¾×Íè à» ¹¡Òà àµÃÕÂÁãË âÁ´ÙÅ LCD ࢠÒÊÙ¡ Ò÷íÒ§Ò¹ã¹âËÁ´ 4 ºÔµ


42 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

+5V

R10 1k

11

42

C19 0.1/50V

EA

1

IC5 T89C51AC2

43 +5V

+5V JP1

RN1/3, RN1/4

P0.2 P0.3

32

4

33

6 +5V

RN1/8

P0.7 P0.6 P0.5

37

RS E

DSP1 LCD 16x2 (back light option)

RN1/5

BLA +V Vo

D7 D6 D5 D4 D3 D2 D1 D0 R/W 14 13 12 11 10 9 8 7 5

16

R35 47

BACK LIGHT ON

2 3

BLK GND 15 1

VR2 10k

BRIGHTNESS

36 35 35

40 C15 33pF

XTAL1 11.0592MHz

41 C16 33pF

ÃÙ»·Õè 3-5 ǧ¨Ãàª×Íè Áµ ÍâÁ´ÙÅ LCD Ẻ 4 ºÔµ¢Í§á¼§Ç§¨Ã RBX-51AC2plus ã¹Ëع ¹µ Robo-51

3.3.2 Êà ҧä¿Å äźÃÒÃբͧ¿ §¡ ª¹Ñè ¤Çº¤ØÁ¡ÒÃáÊ´§¼ÅâÁ´ÙÅ LCD µÑ駪×èÍä¿Å äźÃÒÃÕ¹ÕéÇ Ò lcd_robo51.h ÁÕÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁáÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-3 â´ÂãË ¾ÁÔ ¾ áÅкѹ·Ö¡à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .h áŠǨѴà¡çºãË ÍÂÙ· âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ ¾Ñ²¹ÒËÃ×Í·Õè C:\RIDE\INC


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 43

¤íÒÊÑ§è ¤Çº¤ØÁâÁ´ÙÅ LCD ẺÁҵðҹ 1. ¤íÒÊѧè à¤ÅÕÂà ¨ÍáÊ´§¼Å ÁÕ¢Í ÁÙŤíÒÊѧè à» ¹ $1 à» ¹¤íÒÊѧè à¢Õ¹¢ ÍÁÙŪ Í§Ç Ò§ËÃ×Í space ࢠÒä»ã¹Ë¹ Ç ¤ÇÒÁ¨íÒ¢ ÍÁÙÅÊíÒËÃѺáÊ´§¼ÅËÃ×Í DDRAM ÀÒÂã¹âÁ´ÙÅ LCD àÁ×Íè à¤ÅÕÂà ¨Í áÊ´§¼ÅáÅ Ç ¨Ð¡íÒ˹´ãË à¤Íà à«Íà (cursor : ÊÑ­Åѡɳ ¾àÔ ÈÉ·Õãè ª 㹡ÒÃáÊ´§ µíÒá˹ §ÊíÒËÃѺáÊ´§µÑÇÍÑ¡ÉâͧâÁ´ÙÅ LCD ºÒ§¤Ãѧé ÁÕÅ¡Ñ É³Ðà» ¹ÃÙ»ÊÕàè ËÅÕÂè Á ¼×¹¼ Ò¢¹Ò´ 5x 7 ¨Ø´ËÃ×Íà» ¹¢Õ´ ÊÒÁÒöÊѧè ãË ¡Ð¾ÃÔºËÃ×ÍäÁ ¡äç ´ ) ¡ÅѺä»ÍÂÙ· Õè µíÒá˹ §« ÒÂÁ×ÍÊØ´¢Í§¨ÍáÊ´§¼Å 2. ¤íÒÊѧè Return Home ÁÕ¤Ò ¢Í§¢ ÍÁÙÅ෠ҡѺ $2 ËÃ×Í $3 ¡çä´ (á¹Ð¹íÒãË ãª $2) à» ¹¡ÒáíÒ˹´ãË à¤Íà à«Íà ä»áÊ´§ÂѧµíÒá˹ §« ÒÂÊØ´¢Í§¨ÍáÊ´§¼Å â´Â¢ ÍÁÙÅ·Õáè Ê´§ÍÂÙã ¹º¹ ¨ÍáÊ´§¼Å¨ÐäÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§ 3. ¤íÒÊѧè àÅ×Í¡âËÁ´¡Òû ͹¢ ÍÁÙÅ (Entry mode set) ÁÕÃٻẺ¤íÒÊÑ觴ѧ¹Õé

ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 0

0

0

0

0

1

I/D

S

ºÔµ I/D 㪠㹡ÒáíÒ˹´Ç Ò àÁ×èÍà¢Õ¹ËÃ×ÍÍ Ò¹¢ ÍÁÙÅáÅ Ç ·íÒãË áÍ´à´Ãʢͧ ˹ ǤÇÒÁ¨íÒáÊ´§¼Å (DDRAM) à¾ÔÁè ËÃ×ÍŴŧ 0 áÍ´à´ÃÊŴŧ 1 áÍ´à´ÃÊ 1 áÍ´à´ÃÊà¾ÔÁè ¢Ö¹é 1 áÍ´à´ÃÊ ºÔµ S 㪠¡Òí ˹´ÅѡɳСÒÃáÊ´§¼Å 0 àÁ×Íè à¡Ô´µÑÇÍÑ¡ÉÃãËÁ à¤Íà à«Íà àÅ×Íè ¹ä»·Ò§¢ÇÒÁ×Í 1 àÁ×Íè à¡Ô´µÑÇÍÑ¡ÉÃãËÁ à¤Íà à«Íà ÍÂÙ· àÕè ´ÔÁ ÍÑ¡ÉÃàÅ×Íè ¹ä»·Ò§« Ò ·Õè¹ÔÂÁ㪠ÁÒ¡·ÕèÊØ´¤×Í ¢ ÍÁÙŤíÒÊÑè§ $6 ËÁÒ¶֧ ¡íÒ˹´ãË àÁ×èÍà¡Ô´¢ ÍÁÙÅãËÁ à¤Íà à«Íà ¨ÐàÅ×Íè ¹ä»·Ò§¢ÇÒÁ×Í áÅÐáÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒÊíÒËÃѺáÊ´§ ¼Å¨Ðà¾ÔÁè ¢Ö¹é 4. ¤íÒÊÑ§è ¤Çº¤ØÁ¡ÒÃáÊ´§¼Å ÁÕÃٻẺ¤íÒÊÑ觴ѧ¹Õé

5. ¤íÒÊÑ§è ¤Çº¤ØÁ¡ÒÃàÅ×Íè ¹à¤Íà à«Íà áÅеÑÇÍÑ¡Éà ÁÕÃٻẺ´Ñ§¹Õé ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 0

0

0

1

S/C

R/L

*

*

¡ÒÃàÅ×Íè ¹à¤Íà à«Íà áÅеÑÇÍÑ¡Éâֹé ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´ºÔµ S/C áÅÐ R/ L «Ö§è ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé S/C R/L ÅѡɳСÒÃàÅ×Íè ¹ ¢ ÍÁÙŤíÒÊѧè 0 0 àÅ×Íè ¹à¤Íà à«Íà 价ҧ« Ò $10-$13 0 1 àÅ×è͹à¤Íà à«Íà 价ҧ¢ÇÒ $14-$17 1 0 àÅ×è͹µÑÇÍÑ¡ÉÃãËÁ ä»·Ò§« Ò $18-$1B 1 1 àÅ×è͹µÑÇÍÑ¡ÉÃãËÁ ä»·Ò§¢ÇÒ $1C-$1F 6. ¤íÒÊÑ§è ¡íÒ˹´¿ §¡ ª¹Ñè ¡Ò÷íÒ§Ò¹ à» ¹¤íÒÊÑ§è ·ÕÁè ¤Õ ÇÒÁÊíҤѭÁÒ¡·ÕÊè ´Ø ÍÕ¡¤íÒÊѧè ˹֧è ÁÕû٠Ẻ¢Í§¢ ÍÁÙŤíÒÊÑ§è ´Ñ§¹Õé

ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 0

0

1

DL

N

F

*

*

ºÔµ DL 㪠㹡ÒáíÒ˹´¨íҹǹºÔµã¹¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD 0 ¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ 4 ºÔµ 1 ¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ 8 ºÔµ ºÔµ N 㪠¡Òí ˹´¨íҹǹºÃ÷Ѵ·Õµè Í §¡ÒÃãË áÊ´§¼Å 0 áÊ´§¼Å 1 ºÃ÷Ѵ 1 áÊ´§¼Å 2 ºÃ÷ѴËÃ×ÍÁÒ¡¡Ç Ò áµ ÊíÒËÃѺâÁ´ÙÅ LCD ¢¹Ò´ 16 µÑÇÍÑ¡Éà 1 ºÃ÷Ѵ·ÕèÁÕ¨íÒ˹ ÒÂã¹ »ÃÐà·Èä·Â µ ͧ¡íÒ˹´ãË ºµÔ ¹Õàé » ¹ 1 à¹×Íè §¨Ò¡Ë¹ ǤÇÒÁ¨íÒÊíÒËÃѺ à¡çº¢ ÍÁÙÅà¾×Íè ¡ÒÃáÊ´§¼ÅäÁ ä´ ÍÂÙµ Í à¹×Íè §¡Ñ¹ ¡Å ÒǤ×Í áº §à» ¹ 2 ª ǧ ¤×Í ·Õáè Í´à´ÃÊ $00-$07 áÅÐ $40-$47 â´Â·Õáè Í´à´ÃÊ $40 ¨Ðà» ¹áÍ´ à´ÃÊàÃÔÁè µ ¹¢Í§Ë¹ ǤÇÒÁ¨íÒÊíÒËÃѺ¡ÒÃáÊ´§¼Å㹺Ã÷Ѵ·ÕÊè ͧ¢Í§ ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 âÁ´ÙÅ LCD ·ÕÁè ÁÕ Ò¡¡Ç Ò 1 ºÃ÷Ѵ ¨Ö§·íÒãË àÁ×Íè µ ͧ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD 1 ºÃ÷Ѵ¨Ö§¨íÒà» ¹µ ͧ¡íÒ˹´ãË à» ¹ 1 0 0 0 0 1 D C B ºÔµ F 㪠àÅ×Í¡¤ÇÒÁÅÐàÍÕ´¢Í§µÑÇÍÑ¡ÉÃ㹡ÒÃáÊ´§¼Å ºÔµ D 㪠¤Çº¤ØÁ¡ÒÃà» ´» ´¨ÍáÊ´§¼Å ¶ Òà» ¹ 0 à» ¹¡Òû ´¨ÍáÊ´§ 0 áÊ´§¼ÅẺ 5x7 ¨Ø´ ¼Å ¶ Òà» ¹ 1 à» ¹¡ÒÃà» ´¨ÍáÊ´§¼Å 1 áÊ´§¼ÅẺ 5x10 ¨Ø´ ºÔµ C 㪠¤Çº¤ØÁ¡ÒÃáÊ´§µÑÇà¤Íà à«Íà º¹¨ÍáÊ´§¼Å ¶ Òà» ¹ 0 à» ¹ ¡Òû ´µÑÇà¤Íà à«Íà ËÃ×ÍäÁ áÊ´§à¤Íà à«Íà ¶ Òà» ¹ 1 à» ¹¡ÒÃáÊ´§µÑÇ à¤Íà à«Íà ºÔµ B 㪠¤Çº¤ØÁ¡ÒáоÃÔº¢Í§à¤Íà à«Íà ¶ Òµ ͧ¡ÒÃãË à¤Íà à«Íà ¡Ð ¾ÃÔº µ ͧ¡íÒ˹´ãË à» ¹ 1 ¤íÒÊÑ觷Õè㪠º ͤ×Í $0C à» ¹¡ÒÃÊÑè§ãË à» ´¨ÍáÊ´§¼Å áµ äÁ áÊ´§ à¤Íà à«Íà áÅÐ $0F à» ¹¡ÒÃÊѧè ãË à» ´¨ÍáÊ´§¼Å áÊ´§à¤Íà à«Íà áÅÐ Êѧè ãË à¤Íà à«Íà ¡Ð¾ÃÔº


44 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè P3-3 ä¿Å äźÃÒÃÕ lcd_robo51.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¤Çº¤ØÁ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) /*—————————————————————————————————————*/ // Program : Module function control LCD display // Description : Call function control LCD display group type 4 bit // Filename : lcd_robo51.h // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #define line1 0x80 // Define constant #define line2 0xC0 // Define constant sbit rs = P0^2; // Bit control command for LCD sbit e = P0^3; // Bit control pulse command for LCD enum{Hex,Dec}; // Format display integer /*****************************************************************************/ /***************** Function delay 1 ms per unit ******************************/ /*****************************************************************************/ void lcd_delay(unsigned int ms) { unsigned int x,a; // Keep for counter loop for(x=0;x<ms;x++) { for(a=0;a<878;a++); // Loop for delay 1 mË per unit } } /*****************************************************************************/ /***************** Function send command to LCD format 4 Bit *****************/ /*****************************************************************************/ void lcd_command(unsigned char com) { unsigned char buff; // For Keep command send to LCD buff = com & 0xF0; // Keep 4 bit high byte before send to LCD rs = 0; // Select send command to LCD e = 1; // Start generate pulse clock LCD P0 = (P0 & 0x0F)|buff; // Send data to LCD port lcd_delay(1); // Delay 1 ms e = 0; // Stop generate pulse clock LCD lcd_delay(1); // Delay 1 ms buff = (com & 0x0F)<<4; rs = 0; e = 1; P0 = (P0 & 0x0F)|buff ; lcd_delay(1); e = 0; lcd_delay(1);

// // // // // // //

Keep 4 bit low byte before send to LCD Select send command to LCD start generate pulse clock LCD Send data to LCD port Delay 1 ms Stop generate pulse clock LCD Delay 1 ms

} /*****************************************************************************/ /*********************** Function send data to LCD format 4 Bit **************/ /*****************************************************************************/ void lcd_text(char text) { unsigned char buff; // For Keep data send to LCD buff = text & 0xF0; // Keep 4 bit high byte before send to LCD


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 45

â»Ãá¡ÃÁ·Õè P3-3 ä¿Å äźÃÒÃÕ lcd_robo51.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¤Çº¤ØÁ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) rs = 1;

// Select send data to LCD

e = 1; P0 = (P0 & 0x0F)|buff ; lcd_delay(1); e = 0; lcd_delay(1);

// // // // //

Start generate pulse clock LCD Send data to LCD port Delay 1 ms Stop generate pulse clock LCD Delay 1 ms

buff = (text & 0x0F)<<4; rs = 1; e = 1; P0 = (P0 & 0x0F)|buff ; lcd_delay(1); e = 0; lcd_delay(1);

// // // // // // //

Keep 4 bit low byte before send to LCD Write Command to LCD start generate pulse clock LCD Send data to LCD port Delay 1 ms Stop generate pulse clock LCD Delay 1 ms

} /*****************************************************************************/ /***************** Function show string message ******************************/ /*****************************************************************************/ void lcd_putstr(unsigned char line,char *p) { lcd_command(0x02); // Set origin address of LCD lcd_command(line); // Set address 00H of LCD while(*p) // Check data pointer = 0? { lcd_text(*p); // Send data to LCD p++; // Increase address 1 time } } /*****************************************************************************/ /***************** Function set initial format LCD 4 Bit ******************/ /*****************************************************************************/ void lcd_init(void) { lcd_delay(500); // Delay 500 ms lcd_command(0x33); // Command set format 4 bit lcd_command(0x32); // Command set format 4 bit lcd_command(0x28); // 2 line ,8 bit display ,5*7 dot lcd_command(0x0C); // Display ON , none cursor lcd_command(0x01); // Clear screen } /*****************************************************************************/ /***************** Function set initial parameter LCD 4 Bit ******************/ /*****************************************************************************/ void inttolcd(unsigned char line_sel,int value,int format) { char index=0,buff[6]; // For keep string send to LCD switch(format) // Select format integer { case Dec : buff[0] = (value/10000) | 0x30;


46 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè P3-3 ä¿Å äźÃÒÃÕ lcd_robo51.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¤Çº¤ØÁ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51 (¨º) // Convert data to ASCII 10000’th buff[1] = ((value%10000)/1000) | 0x30; // Convert data to ascii 1000’th buff[2] = (((value%10000)%1000)/100) | 0x30; // Convert data to ascii 100’th buff[3] = ((((value%10000)%1000)%100)/10) | 0x30; // Convert data to ascii 10’th buff[4] = ((((value%10000)%1000)%100)%10) | 0x30; // Convert data to ascii 1’th buff[5] = 0; // End of data break; // Out block for decimal format case case Hex : buff[0] = (value & 0xF000)>>12; // Filter 4 bit 1’th if(buff[0]<10){buff[0] |= 0x30;} else {buff[0] = (buff[0]-9) | 0x40;} // Convert data to ascii buff[1] = (value & 0x0F00)>>8; // Filter 4 bit 2’th if(buff[1]<10){buff[1] |= 0x30;} else {buff[1] = (buff[1]-9) | 0x40;} // Convert data to ascii buff[2] = (value & 0x00F0)>>4; // Filter 4 bit 3’th if(buff[2]<10){buff[2] |= 0x30;} else {buff[2] = (buff[2]-9) | 0x40;} // Convert data to ascii buff[3] = (value & 0x000F); // Filter 4 bit 4’th if(buff[3]<10){buff[3] |= 0x30;} else {buff[3] = (buff[3]-9) | 0x40;} // Convert data to ascii buff[4] = 0; // End of data break; // Out block for hexadecimal format case default : break; // Out block for default case } if(buff[0]==0x30) // if data 1’th = 0 none display {index = 1;} // Shift to display 2’th if(buff[0]==0x30 && buff[1]==0x30) // if data 1’th = 0 and 2’th = 0 none display {index = 2;} // Shift to display 3’th if(buff[0]==0x30 && buff[1]==0x30 && buff[2]==0x30) // if data 1’th = 0, 2’th = 0 and 3’th = 0 // none display {index = 3;} // Shift to display 4’th if(buff[0]==0x30 && buff[1]==0x30 && buff[2]==0x30 && buff[3]==0x30) // if data 1’th = 0, 2’th = 0, 3’th = 0 and // 4’th = 0 none display {index = 4;} // Shift to display 5’th lcd_putstr(line_sel,&buff[index]); // Send integer to LCD }


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 47

3.3.2 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè (1) ¿ §¡ ª¹Ñè lcd_init : àµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ ÃٻẺ¿ §¡ ªÑè¹ void lcd_init(void) ¾ÒÃÒÁÔàµÍà äÁ ÁÕ ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·Õàè µÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ㹡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD â´Â¡íÒ˹´âËÁ´¡Òà µÔ´µ Íà» ¹áºº 4 ºÔµ, áÊ´§¼Å 2 ºÃ÷Ѵ, ¤ÇÒÁÅÐàÍÕ´ 5*7 ¨Ø´

µÑÇÍ ҧ·Õè 3-3 lcd_init();

// ÍÔ¹àÔ ªÕÂÅâÁ´ÙÅ LCD

(2) ¿ §¡ ª¹Ñè lcd_command : ÃѺ¤íÒÊÑ§è ¤Çº¤ØÁ ÃٻẺ¿ §¡ ªÑè¹ lcd_command(unsigned char com) ¾ÒÃÒÁÔàµÍà com ÃѺ¢ ÍÁÙŤíÒÊÑ§è ¢¹Ò´ 1 亵 ¶ Ò·ʹä»ÂѧâÁ´ÙÅ LCD ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ 㪠ʧ ¤íÒÊÑ§è ¤Çº¤ØÁ¡ÒÃáÊ´§¼Åä»ÂѧâÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 3-3 lcd_command(0x01); lcd_command(0x02); lcd_command(0x80); lcd_command(0xC6);

// à¤ÅÕÂà ¨ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD // ¡ÅѺä»àÃÔÁè ·Õµè Òí á˹ §µÑ§é µ ¹ (home) // ¡ÃÐâ´´ä»ÂѧáÍ´à´ÃÊ 00H // ¡ÃÐâ´´ä»ÂѧáÍ´à´ÃÊ 46H

(3) ¿ §¡ ª¹Ñè lcd_text : Ê §µÑÇÍÑ¡ÉÃä»áÊ´§¼Å ÃٻẺ¿ §¡ ªÑè¹ void lcd_text(char text) ¾ÒÃÒÁÔàµÍà text ÃѺ¢ ÍÁÙÅÃËÑÊáÍÊ¡Õé 1 亵 ¶ Ò·ʹä»ÂѧâÁ´ÙÅ LCD à¾×Íè áÊ´§¢ ͤÇÒÁ ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·ÕÊè § ÍÑ¡¢ÃÐä»áÊ´§¼ÅÂѧâÁ´ÙÅ LCD ¹Õé

µÑÇÍ ҧ·Õè 3-4 lcd_text(‘A’);

// áÊ´§µÑÇÍÑ¡Éà A ·Õâè Á´ÙÅ LCD

lcd_text(0x30);

// áÊ´§µÑÇàÅ¢ 0 ·Õâè Á´ÙÅ LCD


48 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

4. ¿ §¡ ª¹Ñè lcd_putstr : Ê §ªØ´¢ ͤÇÒÁä»áÊ´§¼Å ÃٻẺ¿ §¡ ªÑè¹ void lcd_putstr(unsigned char line,char *p) ¾ÒÃÒÁÔàµÍà line ÃѺ¤íÒÊѧè 1 亵 Ê §ä»ÂѧâÁ´ÙÅ LCD à¾×Íè ¡íÒ˹´áÍ´à´ÃÊàÃÔÁè µ ¹ãË ¡ÅØÁ ¢ ͤÇÒÁ·Õ¨è ÐÊ §ä» p à» ¹¾Í¹ àµÍà ª¢ Õé Í ÁÙŢͧÍÐààÀÒÂ㹿 §¡ ª¹Ñè à¾×Íè ¨Ðä´ ¹Òí ¢ ÍÁÙÅ·ÕÍè ÐààªÕÍé ÂÙ¹ ÊÕé § à» ¹ÍÑ¡¢Ãд Ç¿ §¡ ª¹Ñè lcd_text ÍÕ¡¤Ãѧé Ë¹Ö§è ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·ÕÊè § ªØ´¢ ͤÇÒÁä»áÊ´§¼ÅÂѧâÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 3-5 lcd_putstr(0x81,”hello world”);

// áÊ´§¢ ͤÇÒÁ hello

world ·Õâè Á´ÙÅ LCD

5. ¿ §¡ ª¹Ñè inttolcd : Ê §ªØ´¢ ÍÁÙŵÑÇàÅ¢ä»áÊ´§¼Å ÃٻẺ¿ §¡ ªÑè¹ void inttolcd(unsigned char line_sel,int value,int format) ¾ÒÃÒÁÔàµÍà line_sel ÃѺ¢ ÍÁÙŤíÒÊÑ§è ¢¹Ò´ 1 亵 ¶ Ò·ʹä»ÂѧâÁ´ÙÅ LCD à¾×Íè ¡íÒ˹´ áÍ´à´ÃÊàÃÔÁè µ ¹ãË ¡ÅØÁ ¢ ͤÇÒÁ·Õ¨è ÐÊ §ä» value ÃѺ¢ ÍÁÙŨíҹǹàµçÁ·Õµ è Í §¡ÒùíÒä»áÊ´§·Õâè Á´ÙÅ LCD format 㪠¡Òí ˹´ÃٻẺ¡ÒÃáÊ´§µÑÇàÅ¢ãË à» ¹°Ò¹ÊÔºËÃ×Í°Ò¹ÊԺˡ ¶ Òà» ¹ Dec à» ¹¡ÒÃàÅ×Í¡ãË áÊ´§à» ¹àÅ¢°Ò¹ÊÔº ¶ Ò¡íÒ˹´à» ¹ Hex à» ¹¡ÒÃàÅ×Í¡ãË áÊ´§à» ¹àÅ¢°Ò¹ÊԺˡ ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·ÕÊè § ¢ ͤÇÒÁµÑÇàÅ¢ä»áÊ´§¼ÅÂѧâÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 3-6 inttolcd(0x82,244,Dec); inttolcd(0x82,244,Hex);

// áÊ´§µÑÇàÅ¢ 244 (°Ò¹ÊÔº) ·Õâè Á´ÙÅ LCD â´ÂàÃÔÁè ·Õáè Í´à´ÃÊ 02H // áÊ´§µÑÇàÅ¢ F4 (°Ò¹ÊԺˡ) ·Õâè Á´ÙÅ LCD â´ÂàÃÔÁè ·Õáè Í´à´ÃÊ 02H

µÑÇÍ ҧ·Õè 3-7 int number; inttolcd(0xC5,number,Dec);

// »ÃСÒȵÑÇá»Ã number // áÊ´§¤ Ò¢ ÍÁÙŢͧ number ẺàÅ¢°Ò¹ÊÔº·Õâè Á´ÙÅ LCD // â´ÂàÃÔÁè ·Õáè Í´à´ÃÊ 45H


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 49

¡Ô¨¡ÃÃÁ·Õè 5

áÊ´§¼Å¼ Ò¹âÁ´ÙÅ LCD A5.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A5-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0501.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A5.2 Ãѹâ»Ãá¡ÃÁ ¨ÐàËç¹ LED µÔ´äÅ à» ¹´Ç§æ ¨Ò¡ LED ¢Í§¢Ò P3.5, P3.6 áÅÐ P3.7 ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§ ¢ ͤÇÒÁµÒÁ¡ÒõԴ´Ñº¢Í§ LED

â»Ãá¡ÃÁ·Õè A5-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¡ÒÃ㪠§Ò¹áÅÐáÊ´§¼Å¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD (ÁÕµÍ ) /*—————————————————————————————————————*/ // Program : LCD demonstration // Description : Send message to LCD module in 4-bit mode // Filename : act0501.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Declare T89C51AC2’s register #include <delay.h> // Declare Delay library #include <sound.h> // Declare Sound generator library #include <lcd_robo51.h> // Declare LCD library sbit led1 = P3^5; // Define led1 to P3.5 sbit led2 = P3^6; // Define led2 to P3.6 sbit led3 = P3^7; // Define led3 to P3.7 void main() { lcd_init(); lcd_putstr(line1,” lcd_putstr(line2,”

// Hello!”); // RBX-51AC2"); // // //

delay_ms(4000); while(1) { lcd_command(1); lcd_putstr(line1,”

beep(); led1 = 0; delay_ms(2000); led1 = 1; lcd_command(1); lcd_putstr(line1,”

Initial LCD in 4-bit mode Show message “Hello” on upper line of LCD Show message “RBX-51AC2” on LCD Delay 4 seconds Endless loop

// Clear LCD LED P3.5 ON”); // Show message “LED P3.5 ON” on upper line of LCD // Once sound generator // Turn-on LED at P3.5 // Delay 2 seconds // Turn-off LED at P3.5 // Clear LCD LED P3.6 ON”); // Show message “LED P3.6 ON” on upper line of LCD


50 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A5-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¡ÒÃ㪠§Ò¹áÅÐáÊ´§¼Å¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD (¨º) beep(); led2 = 0; delay_ms(2000); led2 = 1; lcd_command(1); lcd_putstr(line1,” beep(); led3 = 0; delay_ms(2000); led3 = 1;

// // // // // LED // // // // //

Once sound generator Turn-on LED at P3.6 Delay 2 seconds Turn-off LED at P3.6 Clear LCD P3.7 ON”); Show message “ LED P3.7 ON” on upper line Generate beep sound Turn-on LED at P3.7 Delay 2 seconds Turn-off LED at P3.7

} }

Robo-51

3.4 µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ

ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 «Ö§è à» ¹ÍØ»¡Ã³ ËÅѡ㹡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ÁÕ˹ ǤÇÒÁ¨íÒ¾ÔàÈÉà¾ÔÁè àµÔÁ¤×Í Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ ÁÕ¤ÇÒÁ¨Ø 2 ¡ÔâÅ亵 áÅÐ ÊÒÁÒö·íÒ¡ÒÃà¢Õ¹«éÒí Í ҧ¹ Í 100,000 ¤Ãѧé â´Âã¹ËÑÇ¢ ͹ըé Ðá¹Ð¹íÒ¶Ö§¡Ò÷íÒ§Ò¹áÅСÒÃÊà ҧ ¿ §¡ ªÑè¹à¾×èÍÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ¹Õéã¹ÃÙ»¢Í§ä¿Å äźÃÒÃÕà¾×èÍàÃÕ¡ 㪠§Ò¹ã¹â»Ãá¡ÃÁÀÒÉÒ C

3.4.1 ˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁ¤×ÍÍÐäÃ

˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁ (EEPROM : Electrical Erasable Programmable Read-Only Memory) à» ¹Ë¹ ǤÇÒÁ¨íÒẺ˹Ö觷ÕèÊÒÁÒöà¡çºÃÑ¡ÉÒ¢ ÍÁÙÅä´ áÁ Ç Ò¨ÐËÂØ´¨ ÒÂä¿àÅÕé§ãË ¡ÑºµÑÇÁѹËÃ×Í àÃÕÂ¡Ç Ò ¹Í¹-âÇÅÒä·Å (non-volatile) â´Â»¡µÔÊÒÁÒöźáÅÐà¢Õ¹«éÒí ä´ ÁÒ¡¡Ç Ò 100,000 Ãͺ¢Ö¹é ä» â´Â˹ ǤÇÒÁ¨íÒª¹Ô´¹ÕÁé ¡Ñ ¹íÒÁÒ㪠à¡çº¢ ÍÁÙÅÊíҤѭµ Ò§æ ¢Í§Ãкº»ÃÐÁÇżÅ

3.4.2 ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¢Í§ T89C51AC2 ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ÁÕ¤ÇÒÁ¨Ø 2 ¡ÔâÅ亵 â´Â ÁÕáÍ´à´Ãʵѧé áµ 0000H ¶Ö§ 07FFH (0x0000 ¶Ö§ 0x07FF ã¹ÀÒÉÒ C) ä´ ÃºÑ ¡ÒèѴÇÒ§ã¹Ê ǹ¢Í§ â¤Ã§Êà ҧ˹ ǤÇÒÁ¨íÒ·Õàè ÃÕÂ¡Ç Ò XRAM Íѹ໠¹Ê ǹ¢ÂÒ¨ҡâ¤Ã§Êà ҧ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 Áҵðҹ ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ࢠҶ֧˹ ǤÇÒÁ¨íÒ XRAM ¹Ñ¹é ÊíÒËÃѺÀÒÉÒáÍÊà«ÁºÅÕ¨Ð㪠¤Òí Êѧè MOVX à ÇÁ¡Ñº¾ÍÂàµÍà DPTR


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 51

ÊíÒËÃѺÀÒÉÒ C ¨ÐࢠҶ֧áÍ´à´ÃÊã´æ ¢Í§Ë¹ ǤÇÒÁ¨íÒã¹áººÍÐàà´Ç ¤ÕÂà ÇÔô XBYTE[address]

â´Â

address

¤×ÍáÍ´à´ÃÊ·Õµè Í §¡ÒÃࢠҶ֧ ÁÕ¤Ò µÑ§é áµ 0x0000 ¶Ö§ 0x7FFF

¤ÕÂà ÇÔô XBYTE ¶Ù¡¹ÔÂÒÁäÇ ÀÒÂã¹äźÃÒÃÕ absacc ·Õµè ´Ô µÑ§é ÁҾà ÍÁ¡Ñº¤ÍÁä¾àÅÍà àÃÕºà Í áÅ Ç ´Ñ§¹Ñ¹é ¼Ù¾ ² Ñ ¹Ò¨Ðµ ͧ¼¹Ç¡ä¿Å äźÃÒÃÕ absacc.h äÇ ·ÊÕè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ¡ ͹¡ÒÃ㪠§Ò¹ã¹ Ê Ç¹¹Õé

3.4.3 EECON ÃÕ¨ÊÔ àµÍà ·¤Õè Ǻ¤ØÁ¡ÒÃÍ Ò¹/à¢Õ¹˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁã¹ T89C51AC2 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0D2H ËÃ×Í 0xD2 (ã¹ÀÒÉÒ C) ÁÕÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ´§Ñ ¹Õé

ºÔµ 7

EEPL3

ºÔµ 6

EEPL2

ºÔµ 5

EEPL1

ºÔµ 4

EEPL0

ºÔµ 3 -

ºÔµ 2 -

ºÔµ 1 EEE

ºÔµ 0

EEBUSY

EEPL3-0 (ºÔµ 7-4)

㪠¡Òí ˹´¤íÒÊѧè à¢Õ¹¢ ÍÁÙÅä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ «Ö§è ÁÕû٠Ẻ ੾ÒÐâ´Â¡ÒÃà¢Õ¹¢ ÍÁÙÅ 5H (¤Ô´à©¾ÒкԵ EEPL3-EEPL0 à¾Õ§ 4 ºÔµà· ҹѹé ) áŠǵÒÁ´ Ç AH àÁ×Íè ¾Ô¨ÒóÒẺ 8 ºÔµ¨Ö§µ ͧà¢Õ¹¢ ÍÁÙÅãË EECON à» ¹ 5XH áÅÐ AXH â´Â·Õè X à» ¹àÅ¢ÍÐäáçä´ ã¹·Õ¹è ¡Õé Òí ˹´ãË X à» ¹ 0 ¹Ñ¹è ¤×Í àÁ×Íè µ ͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ µ ͧ¡íÒ˹´ãË EECON = 0x50 áÅÐ EECON = 0xA0

ºÔµ 3 áÅÐ 2

äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0

EEE (ºÔµ 1)

㪠¤Çº¤ØÁ¡ÒõԴµ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ 0 - äÁ µ´Ô µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ 1 - µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ (ÊÒÁÒöࢠҶ֧¾×¹é ·ÕËè ¹ Ç ¤ÇÒÁ¨íÒ XRAM ´ ǤíÒÊѧè MOVX ã¹ÀÒÉÒáÍÊà«ÁºÅÕ)

EEBUSY (ºÔµ 0)

à» ¹ºÔµá¿Å¡áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ ¡íÒ˹´´ Ç¡Ãкǹ¡Ò÷ҧÎÒà ´áÇà â´Â 0 - ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¾Ã ÍÁÊíÒËÃѺ¡ÒÃà¢Õ¹ËÃ×ÍÍ Ò¹ 1 - ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÂѧÍÂÙã ¹¡Ãкǹ¡ÒÃà¢Õ¹ËÃ×ÍÍ Ò¹


52 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.4.4 ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÀÒÂã¹ T89C51AC2

ÊÒÁÒöÊÃػ໠¹¢Ñé¹µÍ¹ä´ ´Ñ§¹Õé (1) µÃǨÊͺºÔµ EEBUSY à» ¹ 1 - ¢³Ð¹ÕÂé §Ñ äÁ ¾Ã ÍÁà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒ ãË Ãͨ¹¡Ç Ҩоà ÍÁ à» ¹ 0 - ¢³Ð¹ÕËé ¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¾Ã ÍÁÊíÒËÃѺ¡ÒÃà¢Õ¹¢ ÍÁÙÅáÅ Ç (2) ૵ºÔµ EEE (ºÔµ 1 ¢Í§ÃÕ¨ÊÔ àµÍà EECON) (3) à¢Õ¹¢ ÍÁÙÅŧä»ÂѧáÍ´à´ÃÊ·Õµè Í §¡Òôѧµ Í仹Õé XBYTE[áÍ´à´ÃÊ]

= ¢ ÍÁÙÅ ;

(4) à¤ÅÕÂà ºµÔ EEE (5) µÃǨÊͺºÔµ EEBUSY ÍÕ¡¤Ãѧé à¾×Íè ãË á¹ ã¨Ç ÒÍÂÙã ¹ÊÀÒÇоà ÍÁà¢Õ¹¢ ÍÁÙŨÃÔ§ (6) áŵª ¢Í ÁÙÅ´ Ç¡ÒÃà¢Õ¹¤íÒÊѧè 2 ¤íÒÊÑ§è µ Í仹Õé EECON = 0x50; // áŵª ¢Í ÁÙÅ¢Ñ¹é µÍ¹·Õè 1 EECON = 0xA0; // áŵª ¢Í ÁÙÅ¢Ñ¹é µÍ¹·Õè 2 ¨Ò¡¢Ñ鹵͹·ÕèÊÃØ»ÁÒÊÒÁÒö¹íÒà¢Õ¹໠¹¿ §¡ ªÑè¹ÊíÒËÃѺà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒ ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ 1 亵 ª×Íè eeprom_write_byte â´ÂÃкØáÍ´à´ÃÊŧ㹾ÒÃÒÁÔàµÍà addr áÅТ ÍÁÙÅ ·Õµè Í §¡ÒÃà¢Õ¹ŧ㹾ÒÃÒÁÔàµÍà dat â´ÂÁÕÃÒÂÅÐàÍÕ´áÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-4 â»Ãá¡ÃÁ·Õè P3-4 ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè eeprom_write_byte ·Õãè ª 㹡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 亵 ŧ㹠˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 void eeprom_write_byte(int addr,unsigned char dat) { while((EECON & 0x01)!=0x00); EECON = 0x02; XBYTE[addr] = dat;

EECON = 0x00; while((EECON & 0x01)!=0x00); EECON = 0x50; EECON = 0xA0; }

// µÃǨÊÍºÇ ÒºÔµ EEBUSY = 0 ËÃ×ÍäÁ // ¶ ÒºÔµ EEBUSY ¶Ù¡à¤ÅÕÂà áÅ Ç ãË à«µºÔµ EEE // ¹íÒ¢ ÍÁÙÅ dat à¢Õ¹ä»Âѧ˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁ // ·Õáè Í´à´ÃÊ«Ö§è ¡íÒ˹´â´Â addr // à¤ÅÕÂà ºµÔ EEE // µÃǨÊͺ¡ÒÃà¤ÅÕÂà ºµÔ EEBUSY ÍÕ¡¤Ãѧé // áŵª ¢Í ÁÙÅ¢Ñ¹é µÍ¹·Õè 1 // áŵª ¢Í ÁÙÅ¢Ñ¹é µÍ¹·Õè 2


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 53

E

¡ÒùíÒ¿ §¡ ªÑè¹à¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ¹Õäé »ãª §Ò¹¨ÃÔ§à¾×Íè ãË ¢¹Ñé µÍ¹¡ÒÃÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙšѺã¹Ë¹ ǤÇÒÁ¨íÒà» ¹ ä»Í ҧÊÁºÙó áÅÐá¹ ã¨ä´ ÇÒ ã¹ÃÐËÇ Ò§·ÕÍè ÂÙã ¹¡Ãкǹ¡Òõ ͧäÁ ¶¡Ù ¢Ñ´¨Ñ§ËÇШҡ¡Òà ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ö§¤ÇÃà¢Õ¹â»Ãá¡ÃÁ૵ºÔµ EA à¾×Íè ´ÔÊàÍàºÔÅ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¡ ͹ࢠÒÊÙ¡ Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè ¹Õé â´ÂàÃÕ¡㪠ä´àÃ硵տ #pragma DISABLE

3.4.5 ¡ÒÃÍ Ò¹¢ ÍÁÙŨҡ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁã¹ T89C51AC2 ÊÒÁÒöÊÃػ໠¹¢Ñé¹µÍ¹ä´ ´Ñ§¹Õé (1) µÃǨÊͺºÔµ EEBUSY à» ¹ 1 - ¢³Ð¹ÕÂé §Ñ äÁ ¾Ã ÍÁ·Õ¨è ÐÍ Ò¹¢ ÍÁÙŨҡ˹ ǤÇÒÁ¨íÒ ãË Ãͨ¹¡Ç Ҩоà ÍÁ à» ¹ 0 - áÊ´§Ç Ò¢³Ð¹ÕËé ¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¾Ã ÍÁÊíÒËÃѺ¡ÒÃÍ Ò¹¢ ÍÁÙÅáÅ Ç

(2) ૵ºÔµ EEE(ºÔµ 1 ¢Í§ÃÕ¨ÊÔ àµÍà EECON) (3) Í Ò¹¢ ÍÁÙÅÁÒà¡çºäÇ ã¹µÑÇá»Ã (¢ ÍÁÙŤÇÃà» ¹ª¹Ô´ unsigned char) ·Õ¡è Òí ˹´¢Ö¹é ¨Ò¡áÍ´ à´ÃÊ·Õèµ Í§¡ÒÃâ´Â¡ÒÃÍ Ò§¤íÒÊÑè§ÃٻẺ´Ñ§µ Í仹Õé Variable = XBYTE[addr] ;

(4) à¤ÅÕÂà ºµÔ EEE ¨Ò¡¢Ñ鹵͹·ÕèÊÃØ»ÁÒÊÒÁÒö¹íÒà¢Õ¹໠¹¿ §¡ ªÑ蹡ÒÃÍ Ò¹¢ ÍÁÙŨҡ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ÍÕÍ¾Õ ÃÍÁ 1 亵 ª×Íè eeprom_read_byte â´ÂÃкØáÍ´à´ÃÊŧ㹾ÒÃÒÁÔàµÍà addr áÅеÑÇá»Ã ÊíÒËÃѺà¡çº¢ ÍÁÙÅŧ㹾ÒÃÒÁÔàµÍà dat â´ÂÁÕÃÒÂÅÐàÍÕ´áÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-5 â»Ãá¡ÃÁ·Õè P3-5 ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè eeprom_read_byte ·Õãè ª 㹡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 亵 ŧ㹠˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 unsigned char eeprom_read_byte(int addr) {

// »ÃСÒȵÑÇá»Ã dat ÊíÒËÃѺÃѺ¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ ¨Ò¡Ë¹ ǤÇÒÁ¨íÒ while((EECON & 0x01)!=0x00); // µÃǨÊÍºÇ ÒºÔµ EEBUSY à» ¹ 0 ËÃ×ÍäÁ EECON = 0x02; // ¶ ÒºÔµ EEBUSY à» ¹ 0 áÅ Ç ·íÒ¡ÒÃ૵ºÔµ EEE dat = XBYTE[addr]; // Í Ò¹¤ Ò¢ ÍÁÙŨҡáÍ´à´ÃÊ·Õ¡è Òí ˹´ÁÒà¡çºÂѧµÑÇá»Ã dat EECON = 0x00; // à¤ÅÕÂà ºµÔ EEE return(dat); // ¤×¹¤ Ò¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ ¨Ò¡Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ unsigned char dat=0;

}


54 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.4.6 Êà ҧä¿Å äźÃÒÃÕÊÒí ËÃѺà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ÍÕÍ¾Õ ÃÍÁã¹ T89C51AC2

¨Ò¡¿ § ¡ ªÑè ¹ ¡ÒÃà¢Õ  ¹áÅÐÍ Ò ¹¢ Í ÁÙ Å ¡Ñ º ˹ Ç Â¤ÇÒÁ¨í Ò ¢ Í ÁÙ Å ÍÕ ÍÕ ¾ ÃÍÁ·Õè ä ´ Í ¸Ô º ÒÂä» ¡ ͹˹ Ò¹Õé ÊÒÁÒö¹íÒÁÒ¼¹Ç¡à¢ Ò´ Ç¡ѹà¾×Íè Êà ҧä¿Å äźÃÒÃÕªÍ×è eeprom.h â´ÂÁÕÃÒÂÅÐàÍÕ´¢Í§ ä¿Å áÊ´§ã¹â»Ãá¡ÃÁ·Õè P3-6 ¨Ñ´à¡çºä¿Å äźÃÒÃÕ¹ÕéãË ÍÂÙ ·Õèâ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·Õè¡íÒÅѧ ¾Ñ²¹ÒËÃ×Í·Õè C:\RIDE\INC

â»Ãá¡ÃÁ·Õè P3-6 ä¿Å äźÃÒÃÕ eeprom.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ÍÕÍ¾Õ ÃÍÁã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 Íѹ໠¹ÍØ»¡Ã³ ¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-51 /*—————————————————————————————————————*/ // Program : write/read byte data EEPROM // Description : write/read byte data EEPROM of T89C51ac2 // Filename : eeprom.h // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <absacc.h> // Include file for memory access #pragma DISABLE void eeprom_write_byte(unsigned int addr,unsigned char dat) { while((EECON & 0x01)!=0x00); // Check bit EEBUSY = 0? EECON = 0x02; // Set bit EEE of EECON register XBYTE[addr] = dat; // Write data to EEPROM(access to XRAM) EECON = 0x00; // Clear bit EEE while((EECON & 0x01)!=0x00); // Check bit EEBUSY = 0? again EECON = 0x50; // latch command step 1 EECON = 0xA0; // latch command step 2 } #pragma DISABLE unsigned char eeprom_read_byte(unsigned int addr) { unsigned char dat=0; // For keep data from EEPROM while((EECON & 0x01)!=0x00); // Check bit EEBUSY = 0? EECON = 0x02; // Set bit EEE of EECON register dat = XBYTE[addr]; // Read data from EEPROM(access to XRAM) EECON = 0x00; // Clear bit EEE return(dat); // Return data }


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 55

3.4.6.1 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè ã¹äźÃÒÃÕ eeprom.h (1) ¿ §¡ ª¹Ñè eeprom_write_byte ÃٻẺ¿ §¡ ªÑè¹ void eeprom_write_byte(unsigned int addr,unsigned char dat) ¾ÒÃÒÁÔàµÍà addr ¡íÒ˹´áÍ´à´ÃÊ·Õµè Í §¡ÒÃà¢Õ¹¢ ÍÁÙÅ ÁÕ¤Ò µÑ§é áµ 0x000 - 0x07FF dat ·íÒ˹ ÒÃѺ¤ Ò¢ ÍÁÙÅ·Õµ è Í §¡ÒÃà¢Õ¹ŧÂѧáÍ´ÃÊ·ÕÃè кØâ´Â addr ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè à¢Õ¹¢ ÍÁÙÅŧä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ (2) ¿ §¡ ª¹Ñè eeprom_read_byte ÃٻẺ¿ §¡ ªÑè¹ unsigned char eeprom_read_byte(unsigned int addr) ¾ÒÃÒÁÔàµÍà addr ¡íÒ˹´áÍ´à´ÃÊ·Õµè Í §¡ÒÃÍ Ò¹¢ ÍÁÙÅ ÁÕ¤Ò µÑ§é áµ 0x000 - 0x07FF ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè ÊíÒËÃÑºÍ Ò¹¢ ÍÁÙŨҡ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ

µÑÇÍ ҧ·Õè 3-8 ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ÀÒÂã¹â»Ãá¡ÃÁËÅѧ¨Ò¡·Õ»è ÃСÒÈÊ Ç¹â»Ãâµä·» #include<eeprom.h> àÃÕºà ÍÂáÅ Ç eeprom_write_byte(0x03A,0x25); // à¢Õ¹¢ ÍÁÙÅ 0x25 ŧä»ÂѧáÍ´à´ÃÊ 0x03A ¢Í§ EEPROM a = eeprom_read_byte(0x145); // Í Ò¹¢ ÍÁÙŨҡáÍ´à´ÃÊ 0x145 ÁÒà¡çºÂѧµÑÇá»Ã a

¡Ô¨¡ÃÃÁ·Õè 6

·´Êͺ¡ÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙÅã¹Ë¹ Ç ¤ÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÀÒÂã¹ T89C51AC2 A6.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A6-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0601.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A6.2 Ãѹâ»Ãá¡ÃÁ ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§¼Å¡Ò÷íÒ§Ò¹´Ñ§¹Õé )@@HAII NN ,=J= OO â´Â¤ Ңͧ xx ·Õºè Ã÷Ѵº¹ áÅÐ yy ·Õºè Ã÷ѴŠҧ¨ÐÁÕ¤Ò µÃ§¡Ñ¹ à¹×Íè §¨Ò¡¢ ÍÁÙÅ·Õàè ¢Õ¹ (Data) ¡ç¤Í× ¤ ÒáÍ´à´ÃÊ (Address) ¹Ñ¹è àͧ ÊíÒËÃѺ¡ÒÃáÊ´§¼Å¢ ÍÁÙŢͧᵠÅÐáÍ´à´ÃʨÐáÊ´§¹Ò¹»ÃÐÁÒ³ 2 ÇÔ¹Ò·Õ ËÅѧ¨Ò¡¹Ñ¹é ¡ç¨ÐáÊ´§¼Å¤ Ò¢ ÍÁÙŢͧáÍ´à´ÃÊ¶Ñ´ä» â´Â¡ÒÃà¾ÔÁè ¤ ÒáÍ´à´ÃÊ ¾Ã ÍÁ¡ÑºÁÕàÊÕ§ÊÑ­­Ò³´Ñ§¢Ö¹é 1 ¤ÃÑ§é ¨ÐáÊ´§·Ñ§é ÊÔ¹é 256 µíÒá˹ §¨¹¶Ö§¤ Ò 0xFF


56 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A6-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¡ÒÃÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁ /*—————————————————————————————————————*/ // Program : write/read byte data EEPROM // Description : write/read byte data EEPROM of T89C51ac2 // Filename : act0601.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Declare T89C51AC2’s register #include <delay.h> // Declare Delay library #include <eeprom.h> // Declare EEPROM library #include <lcd_robo51.h> // Declare LCD library #include <sound.h> // Declare Sound library void main() { int i; // Define counter variable lcd_init(); // Call initial LCD function lcd_putstr(line1,” Wait for write”); // Display message in EEPROM writing process lcd_putstr(line2,” data to EEPROM”); for(i=0;i<=0xFF;i++) // Write EEPROM data loop { eeprom_write_byte(i,i); // Write data to EEPROM by address value } lcd_clear(); // Clear LCD display after writing finish lcd_putstr(line1,” Display data”); // Show message about reading verification lcd_putstr(line1,” from EEPROM”); for(i=0;i<=0xFF;i++) // Reading loop from EEPROM address 0 to 0xFF { // Clear LCD display for preparing display address and data lcd_clear(); lcd_putstr(line1,”Address”); // Show “Address” message on line 1 of LCD // Show address value next to “Address” message inttolcd(0x89,i,Hex); lcd_putstr(line2,”Data”); // Show “Data” message on line 2 of LCD inttolcd(0xC9,eeprom_read_byte(i),Hex); // Show data value next to “Data” message delay_ms(2000); // Delay 2 seconds beep(); // Beep 1 time } while(1); // Break program }

¤íÒ͸ԺÒÂà¾ÔÁè àµÔÁ â»Ãá¡ÃÁ¹Õàé » ¹¡Ò÷´Êͺà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¢Í§ T89C51AC2 àÃÔÁè µ ¹´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅŧä»Âѧ˹ ǤÇÒÁ¨íÒ àÃÔÁè µÑ§é áµ áÍ´à´ÃÊ 0x00 ¶Ö§ 0xFF â´Â¢ ÍÁÙÅ·Õàè ¢Õ¹¨Ðà» ¹¤ Ò à´ÕÂǡѺ¤ ÒáÍ´à´ÃÊ ËÅѧ¨Ò¡¹Ñé¹â»Ãá¡ÃÁ¡ç¨ÐǹáÊ´§¼Å¤ ÒáÍ´à´ÃÊ·ÕèºÃ÷Ѵº¹¢Í§âÁ´ÙÅ LCD áÅФ Ò ¢ ÍÁÙÅ·Õºè Ã÷ѴŠҧ àÁ×Íè áÊ´§¼Å¤Ãº¨¹¶Ö§áÍ´à´ÃÊ 0xFF áÅ Ç¡ç¨Ð¶Ù¡àºÃ¡â»Ãá¡ÃÁ´ ǤíÒÊѧè while(1); «Ö§è à» ¹¤íÒÊѧè ÊØ´· Ò¢ͧâ»Ãá¡ÃÁ¹Õé Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 57

3.5 ¢ÑºÁÍàµÍà 俵ç ËÑÇã¨ÊíҤѭ㹡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ ¤Í× Ãкº¢Ñºà¤Å×Íè ¹ ã¹Ëع ¹µ Robo-51 㪠ÁÍàµÍÃ ä¿ µÃ§·ÕÁè ¡Õ Ò÷´¤ÇÒÁàÃçÇáÅÐà¾ÔÁè áç¢Ñº´ Ǫش࿠ͧ 2 µÑÇ ¼¹Ç¡à¢ ҡѺŠÍÊÒ¾ҹ ·íÒãË ÊÒÁÒö¢Ñº à¤Å×Íè ¹Ëع ¹µ Robo-51 ä´ Í ҧÁÑ¹è ¤§áÅÐÁÕàʶÕÂÃÀÒ¾ ¡ÒâѺÁÍàµÍà 俵çã¹ËØ ¹Â¹µ Robo-51 㪠¡ÒâѺ´ ÇÂÊÑ­­Ò³ PWM (Pulse width modulation) ·íÒãË ÊÒÁÒö¤Çº¤ØÁ¡íÒÅѧ俿 Ò·Õè¨ ÒÂãË ¡ÑºÁÍàµÍà ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ËÃ×ÍÍÕ¡¹ÑÂ˹Ö觤×Í ¤Çº¤ØÁÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà ¨Ò¡â»Ãá¡ÃÁ·Õèä´ ¡íÒ˹´äÇ ÃÇÁ¶Ö§ ÊÒÁÒö¤Çº¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍÃ ä´ ´ ÇÂ

3.5.1 ¢ÑºÁÍàµÍà 俵ç´ ÇÂÊÑ­­Ò³ PWM ¡ÒâѺÁÍàµÍà ´Ç ÂÊÑ­­Ò³ PWM ¤×Í ¡Òè ÒÂÊÑ­­Ò³¾ÑÅÊ ·ÊÕè ÅѺ¡Ñ¹ÃÐËÇ Ò§ª ǧàÇÅÒ ON áÅÐ OFF ¢Í§ÁÍàµÍà ¨Ø´»ÃÐʧ¤ ¡çà¾×èÍÅ´·Í¹¡íÒÅѧ俿 Ò·Õè¨ ÒÂãË ¡ÑºµÑÇÁÍàµÍà áÅÐàÁ×èÍ¡íÒÅѧ ä¿¿ Ò·ÕèÁÍàµÍÃ ä´ ÃѺÁÕ¤ Ò¹ ÍÂŧ ÍÁÊ §¼ÅãË ÁÍàµÍà ËÁعª Òŧ仴 Ç ¨Ò¡ÃÙ»·Õè 3-6 áËÅ §¨ ÒÂä¿ Vs ·íÒ˹ Ò·Õ¨è Ò ÂÊÑ­­Ò³ PWM ã¹ÅѡɳзÕàè » ¹¾ÑÅÊ ÊàÕè ËÅÕÂè Á ·íÒãË ÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà ¢¹Öé ÍÂÙÊ ´Ñ Ê Ç¹¢Í§ª ǧàÇÅÒ Ton (ª ǧàÇÅÒ·ÕÁè ¡Õ ÃÐáʢѺÁÍàµÍà ãË ËÁع) «Ö§è ¡ç¤Í× ª ǧàÇÅÒ·ÕÁè ÍàµÍÃ ä´ ÃºÑ áç´Ñ¹· ҡѺ Vm áÅж Ò¾Ô¨ÒóҪ ǧàÇÅÒ 1 ¤Òº·ÕÁè ÍàµÍÃ ä´ ÃѺ¡ÃÐáʵÒÁÃÙ»·Õè 3-6 ¨Ð¾ºÇ ÒÁÍàµÍà ·íҧҹ㹪 ǧ Ton ´Ñ§¹Ñ鹶 Òª ǧàÇÅÒ Ton ÁÒ¡¡ç¨Ð·íÒãË ÁÍàµÍÃ ä´ ÃºÑ áç´Ñ¹ÁÒ¡ ¨Ö§ËÁØ¹ä´ àÃçÇ ¤ ÒÊÑ´Ê Ç¹¢Í§ª ǧàÇÅÒ Ton àÁ×Íè ¤Ô´à» ¹à»Íà à«ç¹µ à·Õº¨Ò¡ ª ǧàÇÅÒ 1 ¤Òº (T) àÃÕÂ¡Ç Ò ´ÔǵÕäé «à¡ÔÅ â´Âà¢Õ¹໠¹¤ÇÒÁÊÑÁ¾Ñ¹¸ ä´ ´§Ñ ¹Õé Rs

Vs

Vm

M

Vm

t Ton Toff

T

ÃÙ»·Õè 3-6 ¡Ò÷íÒ§Ò¹¢Í§ÊÑ­­Ò³ PWM ·ÕÁè µÕ Í ¡ÒâѺÁÍÍàµÍà 俵ç


58 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

%´ÔǵÕäé «à¡ÔÅ =

100 ×

¤ÇÒÁ¶Õ¢è ͧ¾ÑÅÊ =

Ton Ton + Toff

MCS-51

.................................................(3.3)

1 1 = .................................................(3.4) Ton + Toff T

áç´Ñ¹à©ÅÕÂè µ¡¤Ã ÍÁÍàµÍà = áç´Ñ¹ä¿àÅÕÂé § x ¤ Ò´ÔǵÕäé «à¡ÔÅ (%) .......(3.5)

¶Ö§áÁ ÇÒ ¤ Ò´ÔǵÕäé «à¡ÔŢͧÊÑ­­Ò³ PWM ¨Ðà» ¹µÑÇ¡íÒ˹´ÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà ¡çµÒÁ áµ ÁÍàµÍà 俵ç¹Ñ¹é ÁÕ¢´Õ ¨íҡѴ㹡ÒÃÃѺÊÑ­­Ò³¾ÑÅÊ ·¤Õè ÇÒÁ¶ÕÊè §Ù ÊØ´ÍÂÙ¤ Ò Ë¹Ö§è à· Ò¹Ñ¹é ¶ Òà¡Ô¹ ¤ Ҵѧ¡Å ÒÇáŠǨзíÒãË ÁÍàµÍà ËÂØ´ËÁعà¹×Íè §¨Ò¡à¡Ô´¡ÒÃÍÔÁè µÑÇ ´Ñ§¹Ñ¹é ¨Ö§µ ͧÃÐÇѧ㹨ش¹Õ´é Ç Â ã¹ÃÙ» ·Õè 3-7 áÊ´§¼Å¢Í§¡ÒÃà»ÅÕè¹á»Å§¤ Ò´ÔǵÕéä«à¡ÔÅ·ÕèÁÕµ Íáç´Ñ¹µ¡¤Ã ÍÁÁÍàµÍà áÅШҡÊÑ­­Ò³ PWM µÑÇÍ ҧ·Õ¹è Òí ÁÒ͸ԺÒÂã¹ÃÙ»·Õè 3-7 ÁÕ¤ÒºàÇÅÒ෠ҡѺ 20 ÁÔÅÅÔÇ¹Ô Ò·Õ ´Ñ§¹Ñ¹é ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ PWM ¨Ö§à· ҡѺ 50Hz Vm (V)

(¡)

t (ms)

4 x 100% = 20% ´ÔǵÕéä«à¡ÔÅ = 20 áç´Ñ¹à©ÅÕè·ÕèÁÍàµÍà =4.5 x 20% = 0.9V

t (ms)

´ÔǵÕéä«à¡ÔÅ = 10 20 x 100% = 50% áç´Ñ¹à©ÅÕè·ÕèÁÍàµÍà = 4.5 x 50% = 2.25V

4.5

4 8 12 16 20 24 28 32 Vm (V) 10ms

(¢)

4.5

4 8 12 16 20 24 28 32 Vm (V)

(¤)

18ms 4.5

4 8 12 16 20 24 28 32

t (ms)

´ÔǵÕéä«à¡ÔÅ = 18 20 x 100% = 90% áç´Ñ¹à©ÅÕè·ÕèÁÍàµÍà = 4.5 x 90% = 4.05V

Vm (V)

(§)

4.5

20ms

4 8 12 16 20 24 28 32

t (ms)

´ÔǵÕéä«à¡ÔÅ = 20 20 x 100% = 100% áç´Ñ¹à©ÅÕè·ÕèÁÍàµÍà = 4.5 x 100% = 4.5V

ÃÙ»·Õè 3-7 áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§´ÔǵÕäé «à¡ÔŢͧÊÑ­­Ò³ PWM ¡Ñºáç´Ñ¹·ÕÁè ÍàµÍÃ ä´ ÃºÑ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 59

´Ñ§¹Ñ¹é ¨Ö§ÊÃØ»ä´ ÇÒ ¡ÒâѺÁÍàµÍà â´Â¡Òè ÒÂÊÑ­­Ò³ PWM µÒÁÃÙ»·Õè 3-9 (¡) ¨Ð·íÒãË ÁÍàµÍà ËÁع´ ÇÂÍѵÃÒàÃçǵèÒí ÊØ´à¾ÃÒÐãË ´ÇÔ µÕäé «à¡ÔÅ 20% áç´Ñ¹µ¡¤Ã ÍÁÁÍàµÍà à¾Õ§ 0.9V ¨Ò¡ÃÐ´Ñºä¿ àÅÕÂé §ÊÙ§ÊØ´ 4.5V «Ö§è µèÒí ÊØ´àÁ×Íè à·Õº¡Ñº¡Ã³Õ͹×è æ ·Õ¤è ÇÒÁ¶Õàè ´ÕÂǡѹ Ê Ç¹¡Òû ͹ÊÑ­­Ò³µÒÁÃÙ»·Õè 39 (§) à» ¹¡Òû ͹áç´Ñ¹ä¿µÃ§¤§·Õ¨è Ò ÂãË á¡ ÁÍàµÍà «Ö§è ¶ Òà»ÃÕºà·Õº¡ÑºÊÑ­­Ò³¾ÑÅÊ ·§Ñé 3 Ẻ ¨Ò¡ÃÙ»·Õè 3-9 (¡) ¶Ö§ 3-9 (¤) ¨ÐàÊÁ×Í¹Ç Ò µÅÍ´ª ǧàÇÅÒ 20 ÁÔÅÅÔÇ¹Ô Ò·Õ¹¹Ñé ÍÂÙã ¹ª ǧ Ton µÅÍ´ ¨Ö§ÁÕ¤Ò ´ÔǵÕäé «à¡ÔÅà» ¹ 100% Ê Ç¹¤ÇÒÁ¶Õ¨è Ðà» ¹ 0Hz à¹×Íè §¨Ò¡à» ¹ÊÑ­­Ò³ä¿µÃ§ «Ö§è ¨Ò¡·Õäè ´ ͸ԺÒ¡Òà ¢ÑºÁÍàµÍà 俵ç´ Ç¡Òè ÒÂÊÑ­­Ò³ PWM áŠǨÐàËç¹¢ ʹբͧÇÔ¸¡Õ ÒùÕáé Å ÇÇ Ò à» ¹ÇÔ¸·Õ ÊÕè ÒÁÒö ¤Çº¤ØÁÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍÃ ä´ ¨Ò¡ª ǧàÇÅҢͧ¡Òà ON â´ÂÊÒÁÒöÊà ҧáÅФǺ¤ØÁ ´ÔǵÕéä«à¡ÔŨҡ¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ä´

3.5.2 ǧ¨Ã¢ÑºÁÍàµÍà 俵ç¢Í§á¼§Ç§¨Ã RBX-51AC2 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ´ ÇÂÁÍàµÍà 俵ç¹Ñ¹é ¡ÒäǺ¤ØÁÍѵÃÒàÃçÇ㹡ÒÃËÁعáÅÐ ·ÔÈ·Ò§¨Ðãª Ç¸Ô ¡Õ Òè ÒÂÊÑ­­Ò³ä¿àÅÕÂé §ãË ¡ºÑ ÁÍàµÍà Ẻ PWM â´Â㪠¢Ò¾Íà µ P1.6 áÅÐ P1.7 Ê § ÊÑ­­Ò³ PWM ·ÕÁè ¤Õ ÇÒÁÅÐàÍÕ´¢¹Ò´ 8 ºÔµ «Ö§è Êà ҧ¢Ö¹é ¨Ò¡âÁ´ÙÅ PCA Íѹ໠¹âÁ´ÙžÔàÈÉ·ÕÁè ãÕ ¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 +5V

R10 1k

11

42

K18A-K18B MOTOR-A

C19 0.1/50V

EA

1

IC5 T89C51AC2

+5V +Vm

43

16 P2.0 P2.1

29

2

28

7 2A

9

1

P1.6/PWM1 P2.2 P2.3 P1.7/PWM2 40 C15 33pF

XTAL1 11.0592MHz

1A

27

15 4A

26

10

10

9

41

8

Vcc1

12EN

C17 0.1/63V

1Y 3 2Y

IC7 L293D

4Y 3Y

+ +

R33 2k2

DIRECT LED6 DIR. #A

6 14

LED7 DIR. #B

11 R34 2k2

3A 34EN

13 12 5 C16 33pF

ÃÙ»·Õè 3-8 ǧ¨Ã¢ÑºÁÍàµÍà ¢Í§á¼§Ç§¨Ã RBX-51AC2

4

INVERT

C18 0.1/63V K19A-K19B MOTOR-B

INVERT

+ + DIRECT


60 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

ÊÑ­­Ò³ PWM ·Õ¶è ¡Ù Êà ҧ¢Ö¹é ¹Õ¨é ÐÊ §µ Íä»Âѧǧ¨Ã¢Ñº¡ÃÐáÊ·Õãè ª äÍ«ÕàºÍà L293D ·ÕÊè ÒÁÒö ¢ÑºÁÍàµÍÃ ä´ ¾Ã ÍÁ¡Ñ¹ 2 µÑÇ à¾×Íè ãË ÊÒÁÒö¨ Ò¡ÃÐáÊá¡ ÁÍàµÍÃ ä´ Ê§Ù ¢Ö¹é ·Õàè » ¹àª ¹¹Õ¡é àç ¹×Íè §¨Ò¡ ¤ÇÒÁÊÒÁÒö㹡Òè Ò¡ÃÐáʨҡ¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´ÂµÃ§¹Ñ¹é ¹ ÍÂÁÒ¡ «Ö§è äÁ à¾Õ§ ¾Í ¨Ö§µ ͧÁÕǧ¨Ã¢Ñº¡ÃÐáÊà¾ÔÁè àµÔÁࢠÒÁÒ ã¹ÃÙ»·Õè 3-8 áÊ´§Ê ǹ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ¢Í§á¼§Ç§¨Ã RBX-51AC2 ·Õ¢è ÒàÍÒµ ¾µØ ¢Í§äÍ«Õ L293D àª×Íè Áµ ͡Ѻ LED áÊ´§¼Å·ÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà ·§Ñé 2 µÑÇ â´Â LED ·Õãè ª ¹¹Ñé à» ¹ LED 2 ÊÕ ¤×Í ÊÕá´§áÅÐà¢ÕÂÇ ¨ÐáÊ´§à» ¹ÊÕã´¹Ñ¹é ¢Ö¹é ÍÂÙ¢ ÇÑé ¢Í§áç´Ñ¹·Õàè ¡Ô´ ¢Öé¹·Õè¢ÒàÍÒµ ¾Øµ¢Í§ L293D «Öè§ÍÒ¨¹íÒÁÒ¡íÒ˹´·ÔÈ·Ò§¡ÒÃà¤Å×è͹·Õè¢Í§ËØ ¹Â¹µ ä´ ´ Ç â´Âã¹·Õè¹Õé ÂÖ´ËÅÑ¡Ç Ò LED ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ªÍ §ã´à» ¹ÊÕà¢ÕÂÇ ËÁÒ¶֧ ÁÍàµÍà ËÁع仢 ҧ˹ Ò LED ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ªÍ §ã´à» ¹ÊÕá´§ ËÁÒ¶֧ ÁÍàµÍà ËÁع仢 Ò§ËÅѧ ¶ ÒËÒ¡ÁÍàµÍà ËÁعä»ã¹·Ôȵç¢ ÒÁ¡Ñº¡ÒÃáÊ´§¼Å¢Í§ LED ãË ·Òí ¡ÒÃÊÅѺ¢ÑÇé µ ÍÁÍàµÍà ἧǧ¨Ã RBX-51AC2 à¾×Íè ãË ·ÈÔ ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà µÃ§µÒÁ¡ÒÃáÊ´§¼Å¢Í§ LED

3.5.3 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ¢Í§âÁ´ÙÅ PCA ã¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ¡ÒâѺÁÍàµÍà 俵ç¢Í§Ëع ¹µ Robo-51 ·íÒä´ â´Â¡Òè ÒÂÊÑ­­Ò³ PWM ãË ¡ºÑ ǧ¨Ã¢Ñº â´Â Ê §ÊÑ­­Ò³ PWM ÍÍ¡¨Ò¡¢Ò¾Íà µ P1.6 áÅÐ P1.7 «Ö§è à» ¹¢ÒÊÑ­­Ò³¢Í§âÁ´ÙÅ PCA (Programmable Counter Array) ËÃ×ÍâÁ´ÙÅǧ¨Ã¹Ñºâ»Ãá¡ÃÁä´ ÁÕÃ¨Õ ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧáÅкԵ¤Çº¤ØÁ´Ñ§¹Õé

3.6.3.1 CCAPM ÃÕ¨ÊÔ àµÍà ¡Òí ˹´ÃٻẺ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PCA ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 -

ECOMn

CAPPn

CAPNn

MATn

TOGn

PWMn

ºÔµ 0

ECCFn

ÁÕ´Ç Â¡Ñ¹ 5 µÑÇ෠ҡѺ¨íҹǹ¢Í§âÁ´ÙÅ PCA ·ÕÁè Õ 5 ªØ´ ÁÕáÍ´à´Ãʵѧé áµ 0DAH ¶Ö§ 0DEH â´Â 0DAH ¤×ÍáÍ´à´ÃʢͧÃÕ¨ÊÔ àµÍà CCAPM0 㪠㹡ÒÃàÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PCA «Ö§è ÊÃØ»äÇ áÅ Çã¹µÒÃÒ§·Õè 3-1 â´ÂÃÕ¨ÔÊàµÍà CCAPMn ¹ÕéäÁ ÊÒÁÒÃ¶à¢ Ò¶Ö§ä´ ã¹ÃдѺºÔµ ´Ñ§¹Ñ鹡Òà ¡íÒ˹´¤ Ò¨Ö§µ ͧ¡íÒ˹´à» ¹äºµ á·¹ àÁ×Íè àÅ×Í¡ãË âÁ´ÙÅ PCA Êà ҧÊÑ­­Ò³ PWM äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ÁÕªÍ §¡íÒà¹Ô´ ÊÑ­­Ò³ PWM ·Ñ§é ËÁ´ 5 ª ͧ ¤×Í


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 61 ºÔµ 7

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ

-

ECOMn

CAPPn

CAPNn

MATn

TOGn

PWMn

ECCFn

X

0

0

0

0

0

0

0

äÁ ÁÕ¡Ò÷íÒ§Ò¹

X

X

1

0

0

0

0

X

X

X

0

1

0

0

0

X

µÃǨ¨ÑºÊÑ­­Ò³·Õè¢Íº¢Ò¢Öé¹ µÃǨ¨ÑºÊÑ­­Ò³·Õè¢Íº¢Òŧ

X

X

1

1

0

0

0

X

µÃǨ¨Ñº¡ÒÃà»ÅÕè¹ʶҹТͧÊÑ­­Ò³

X

1

0

0

1

0

0

X

µÑǵÑé§àÇÅÒ·Ò§«Í¿µ áÇà 16 ºÔµ

X

1

0

0

1

1

0

X

Êà ҧÊÑ­­Ò³àÍÒµ ¾Øµ¤ÇÒÁàÃçÇÊÙ§

X

1

0

0

0

0

1

0

Êà ҧÊÑ­­Ò³ PWM ¢¹Ò´ 8 ºÔµ

X

1

0

0

1

X

0

X

Ç͵ª ´çÍ¡ä·àÁÍÃ

µÒÃÒ§·Õè 3-1 ¡ÒáíÒ˹´¤ Ңͧ¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà CCAPM ¢Í§áµ ÅÐâÁ´ÙÅ PCA (n ¤×ÍËÁÒÂàÅ¢ ¢Í§âÁ´ÙÅ PCA ÁÕ¤Ò à· Ò¡Ñº 0 ¶Ö§ 4) P1.3 µÃ§¡Ñºª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM 0 P1.4 µÃ§¡Ñºª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM 1 P1.5 µÃ§¡Ñºª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM 2 P1.6 µÃ§¡Ñºª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM 3 P1.7 µÃ§¡Ñºª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM 4 ÊíÒËÃѺἧǧ¨Ã RBX-51AC2 àÅ×͡㪠à¾Õ§ 2 ª ͧ¤×Í ª ͧ 3 áÅÐ 4 ¨Ö§ÊÒÁÒö¢ÑºÁÍàµÍà ¾Ã ÍÁ¡Ñ¹ä´ 2 µÑÇ ´Ñ§¹Ñ¹é 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ ¨Ðµ ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM ÍÍ¡ÁÒ·Ò§¢Ò¾Íà µ P1.6 áÅÐ P1.7 ´Ñ§¹Ñ鹨֧µ ͧ¡íÒ˹´¤ ÒÀÒÂã¹ÃÕ¨ÔÊàµÍà CCAPM3 áÅÐCCAPM4 ãË ÁÕÃٻẺ¡Òà ·íҧҹ໠¹¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ¹Ñ¹è ¤×͵ ͧ૵ºÔµ PWM áÅÐ ECOM ÀÒÂã¹ÃÕ¨ÊÔ àµÍà CCAPM3 áÅÐCCAPM4 ´ Ç¡ÒÃà¢Õ¹¤íÒÊѧè ÀÒÉÒ C à» ¹ CCAPM3 = 0x42;

// ¡íÒ˹´ÃٻẺ¡Ò÷íÒ§Ò¹ãË âÁ´ÙÅ PCA ª ͧ 3 ¡íÒà¹Ô´ÊÑ­­Ò³ PWM

CCAPM4 = 0x42;

// ¡íÒ˹´ÃٻẺ¡Ò÷íÒ§Ò¹ãË âÁ´ÙÅ PCA ª ͧ 4 ¡íÒà¹Ô´ÊÑ­­Ò³ PWM

3.5.3.2 CCAPn ÃÕ¨ÊÔ àµÍà à¡çº¤ Ò¡ÒùѺ¢Í§âÁ´ÙÅ PCA à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 16 ºÔµ Ạ§ÍÍ¡à» ¹ 2 Ê Ç¹¤×Í CCAPnH ÊíÒËÃѺà¡çº¢ ÍÁÙÅ亵 º¹ áÅÐ CCAPnL ÊíÒËÃѺà¡çº¢ ÍÁÙÅ亵 ÅÒ § â´Â âÁ´ÙÅ PCAáµ ÅЪش¨ÐÁÕ CCAPnH áÅÐCCAPnL Í ҧÅÐ 1 µÑÇ àª ¹ âÁ´ÙÅ PCA ª ͧ 3 ¨ÐÁÕÃ¨Õ ÊÔ àµÍà CCAP3H áÅÐCCAP3L à¡çº¤ Ò¡ÒùѺ ã¹¢³Ð·Õâè Á´ÙÅ PCAª ͧ 4 ¨ÐÁÕÃ¨Õ ÊÔ àµÍà CCAP4H áÅÐ CCAP4L à¡çº¤ Òâ´ÂÃÕ¨ÊÔ àµÍà CCAPn ¹Õàé ͧ¨Ð㪠໠¹µÑÇ ¡íÒ˹´¤ Ò´ÔǵÕäé «à¡ÔŢͧÊÑ­­Ò³ PWM àÁ×Íè âÁ´ÙÅ PCA ·íÒ§Ò¹ã¹âËÁ´Êà ҧÊÑ­­Ò³ PWM


62 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¹Í¡¨Ò¡¹ÕéÀÒÂã¹âÁ´ÙÅ PCA ÂѧÁÕÃÕ¨ÔÊàµÍà ¢¹Ò´ 16 ºÔµ·Õè·íÒ˹ Ò·Õèà¡çº¤ Ò¡ÒùѺ «Öè§áº §à» ¹ÃÕ¨ÔÊàµÍà ¢¹Ò´ 8 ºÔµ 2 µÑǤ×Í ÃÕ¨ÊÔ àµÍà CH áÅÐ CL àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´Êà ҧÊÑ­­Ò³ PWM ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº CL ¨Ð¹Ñº¤ Òà¾ÔÁè ¢Ö¹é ¤Ãѧé ÅÐ 1 ¤ Ò Ê Ç¹ÍѵÃÒ¡ÒùѺÊÒÁÒö¡íÒ˹´ÃÙ»áººä´ ¨Ò¡ÃÕ¨ÊÔ àµÍà CMOD

3.5.3.3 CMOD ÃÕ¨ÊÔ àµÍà ¡Òí ˹´âËÁ´¡ÒùѺ¤ ҢͧâÁ´ÙÅ PCA ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 CIDL

WDTE

-

-

-

CPS1

ºÔµ 1

CPS0

ºÔµ 0 ECF

à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0D9H ÊíÒËÃѺºÔµ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ä´ á¡ ºÔµ CPS1 áÅÐ CPS0 «Ö§è 㪠¡Òí ˹´áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅ PCA â´ÂÁÕ ÃÒÂÅÐàÍÕ´´Ñ§¹Õé CPS1 CPS0 0 0 0 1 1 0 1 1

áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò ÊÑ­­Ò³¹ÒÌ ¡Ò¤ÇÒÁ¶Õàè · ҡѺ 1/6 ෠Ңͧ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡ã¹âËÁ´ 6 ä«à¡ÔÅ ÊÑ­­Ò³·ÕÁè ¤Õ ÇÒÁ¶Õàè · ҡѺ 1/2 ෠Ңͧ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡ã¹âËÁ´ 6 ä«à¡ÔÅ ¡ÒÃâÍàÇÍà â¿ÅǢͧä·àÁÍà 0 ¨Ò¡ÀÒ¹͡¼ Ò¹·Ò§¢Ò P1.2/ECI

3.5.3.4 CCON ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¢Í§âÁ´ÙÅ PCA

ºÔµ 7 CF

ºÔµ 6 CR

ºÔµ 5 -

ºÔµ 4

CCF4

ºÔµ 3

CCF3

ºÔµ 2

CCF2

ºÔµ 1

CCF1

ºÔµ 0

CCF0

ÁÕ¢¹Ò´ 8 ºÔµ ÍÂÙ· áÕè Í´à´ÃÊ 0D8H ÊÒÁÒÃ¶à¢ Ò¶Ö§ä´ ã¹ÃдѺºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁµÑǹѺ áÅÐáÊ´§Ê¶Ò¹Ð¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ áÅÐâÍàÇÍà â¿ÅǢͧâÁ´ÙÅ PCA ºÔµ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒáíÒà¹Ô´ ÊÑ­­Ò³ PWM ÁÕà¾Õ§ºÔµà´ÕÂǤ×Í ºÔµ CR «Ö§è à» ¹ºÔµ 6 㪠໠´-» ´¡Ò÷íÒ§Ò¹¢Í§µÑǹѺã¹âÁ´ÙÅ PCA «Ö§è ¡ç¤Í× ãª àÍç¹àÍàºÔÅ¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ¹Ñ¹è àͧ

3.5.4 ¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ¢Í§âÁ´ÙÅ PCA âÁ´Ùŷѧé 5 ǧ¨Ã¢Í§ PCA ÊÒÁÒöÊà ҧÊÑ­­Ò³ PWM ä´ ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ã¹âËÁ´ ¹Õáé Ê´§ã¹ÃÙ»·Õè 3-9 ¢Ò CEX ¨Ðä´ ÃºÑ ¡ÒáíÒ˹´ãË à» ¹àÍÒµ ¾µØ ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ PWM ¨Ð¢Ö¹é ÍÂÙ ¡ÑºáËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅ PCA áÅФÇÒÁ¶Õ¢è ͧâÁ´Ùŷѧé ËÁ´¨Ð෠ҡѹ à¹×Íè §¨Ò¡ãª áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Òà ÇÁ¡Ñ¹ ã¹¢³Ð·Õ¤è Ò ´ÔǵÕäé «à¡ÔŢͧÊÑ­­Ò³ PWM ã¹áµ ÅÐâÁ´ÙŨÐᵡ µ Ò§¡Ñ¹µÒÁ¤ ҢͧÃÕ¨ÊÔ àµÍà CCAPnL ¡ÒÃàÍç¹àÍàºÔÅãË ·Òí §Ò¹ã¹âËÁ´¹Õ·é Òí ä´ â´Â¡ÒÃ૵ºÔµ PWM áÅÐ ECOM ã¹ÃÕ¨ÊÔ àµÍà CCAPM


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 63

CCAPnH

CCAPnL "0"

àÍç¹àÍàºÔÅ

¢Ò¾Íà µ¢Í§âÁ´ÙÅ PCA

CL<CCAPnL

Ê Ç¹à»ÃÕºà·Õº ¢ ÍÁÙÅ 8 ºÔµ

CEXn CL>=CCAPnL

"1" CL

âÍàÇÍà â¿ÅÇ

-

ECOMn

µÑǹѺã¹âÁ´ÙÅ PCA

CAPPn

CAPNn

MATn

TOGn

0

0

0

0

PWMn

ECCFn

CCAPMn, n=0-4 (0C2H-0C6H)

0

ÃÙ»·Õè 3-9 ä´ÍÐá¡ÃÁ¡ÒáíÒà¹Ô´ÊÑ­­Ò³ PWM ¢Í§âÁ´ÙÅ PCA ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 àÁ×Íè ¤ ҢͧÃÕ¨ÊÔ àµÍà CL ¹ ÍÂ¡Ç Ò¤ Ңͧ CCAPnL ¨Ðà¡Ô´ÊÑ­­Ò³àÍÒµ ¾µØ ÅͨԡµèÒí áµ ¶Ò àÁ×Íè ã´ÁÕ¤Ò à· Ò¡Ñ¹ËÃ×ͤ Òã¹ CL ÊÙ§¡Ç Ò ¨Ðä´ Ê­ Ñ ­Ò³àÍÒ¤µ ¾µØ ÅͨԡÊÙ§ àÁ×Íè ¤ Ңͧ CL à¡Ô´âÍàÇÍà â¿ÅÇ à»ÅÕÂè ¹¨Ò¡ 0FFH à» ¹ 00H ÃÕ¨ÊÔ àµÍà CCAPnL ¨Ð·íÒ¡ÒÃâËÅ´¤ ÒãËÁ ¨Ò¡ CCAPnH ·íÒãË Ê­ Ñ ­Ò³ PWM ·Õäè ´ µÍ à¹×Íè §äÁ à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§ã¹ÅѡɳСÒáÃЪҡ¢Í§ÊÑ­­Ò³ËÃ×Í·Õàè ÃÕÂ¡Ç Ò ¡ÅÔµª (glitch)

3.5.5 ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¢Ñºà¤Å×Íè ¹Ëع ¹µ ǧ¨Ã¢ÑºÁÍàµÍà 俵ç¢Í§á¼§Ç§¨Ã RBX-51AC2 ã¹Ëع ¹µ Robo-51 ÁÕ 2 ª ͧ ¶ ҢѺÁÍàµÍà ¾Ã ÍÁ¡Ñ¹ 2 µÑǨе ͧ㪠ºµÔ ¾Íà µ¤Çº¤ØÁ¾Ã ÍÁ¡Ñ¹·Ñ§é ÊÔ¹é 6 ºÔµ ´Ñ§¹Õé P2.0 áÅÐ P2.1 ¶Ù¡µ ÍࢠҡѺ¢Ò IN1áÅÐ IN2 ¢Í§äÍ«Õ L293D µÒÁÅíҴѺ ÊíÒËÃѺ¤Çº¤ØÁ·ÔÈ ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà µÇÑ ·Õè 1 P1.6 ¶Ù¡µ ÍࢠҡѺ¢Ò ENABLE1 ¢Í§äÍ«Õ L293D ÊíÒËÃѺ¡íÒà¹Ô´ÊÑ­­Ò³ PWM à¾×Íè ¤Çº¤ØÁ ÍѵÃÒàÃçǢͧÁÍàµÍà µÇÑ ·Õè 1 à¾×Íè ¤Çº¤ØÁáç´Ñ¹àÍÒµ ¾µØ ·Õ¢è Ò OUT1 áÅÐ OUT2 ¢Í§ L293D


64 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

P2.2 áÅÐ P2.3 ¶Ù¡µ ÍࢠҡѺ¢Ò IN3 áÅÐ IN4 ¢Í§äÍ«Õ L293D µÒÁÅíҴѺ ÊíÒËÃѺ¤Çº¤ØÁ·ÔÈ ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà µÇÑ ·Õè 2 P1.7 ¶Ù¡µ ÍࢠҡѺ¢Ò ENABLE2 ¢Í§äÍ«Õ L293D ÊíÒËÃѺ¡íÒà¹Ô´ÊÑ­­Ò³ PWM à¾×Íè ¤Çº ¤ØÁÍѵÃÒàÃçǢͧÁÍàµÍà µÇÑ ·Õè 2 à¾×Íè ¤Çº¤ØÁáç´Ñ¹àÍÒµ ¾µØ ·Õ¢è Ò OUT3 áÅÐ OUT4 ¢Í§ L293D ¨Ò¡â¤Ã§Êà ҧ¡Ò÷íÒ§Ò¹¢Í§äÍ«Õ L293D ã¹ÃÙ»·Õè 3-10 ¡ÒäǺ¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع¢Í§ ÁÍàµÍà ªÍ §ã´æ ·íÒä´ â´Â¤Çº¤ØÁÊÀÒÇÐÅͨԡ¢Í§ºÔµ¤Çº¤ØÁ·Ñ§é Êͧ (IN1 ¡Ñº IN2 ÊíÒËÃѺÁÍàµÍà µÑÇ·Õè 1 áÅÐ IN3 ¡Ñº IN4 ÊíÒËÃѺÁÍàµÍà µÇÑ ·Õè 2) ãË ÁÊÕ ÀÒÇеç¢ ÒÁ¡Ñ¹¡ç¨Ð·íÒãË ÁÍàµÍà ªÍ §¹Ñ¹é ËÁعä»ã¹·Ôȷҧ˹֧è áÅÐàÁ×Íè µ ͧ¡ÒÃãË ÁÍàµÍà ËÁع¡ÅѺ·ÔÈ·Ò§¨Ðµ ͧ¡ÅѺÊÀÒÇÐÅͨԡ¢Í§ºÔµ ¤Çº¤ØÁ·Ñ§é ¤Ùà » ¹µÃ§¢ ÒÁ ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ª ͧ¡íÒà¹Ô´ÊÑ­­Ò³ PWM ¢Í§ÁÍàµÍà ª´Ø ¹Ñ¹é ¨Ðµ ͧÁÕ¡Òè Ò ÊÑ­­Ò³´ Ç àÁ×è͵ ͧ¡ÒÃãË ÁÍàµÍà ËÂØ´ËÁعªÑèÇ¢³Ð·íÒä´ â´Â¤Çº¤ØÁÊÀÒÇÐÅͨԡ¢Í§ºÔµ¤Çº¤ØÁ ·Ñ§é ÊͧãË ÁÊÕ ÀÒÇеç¡Ñ¹ «Ö§è ÍÒ¨¨Ðà» ¹Åͨԡ 1 ËÃ×Í 0 ·Ñ§é ¤Ù¡ äç ´ â´Â·ÕÂè §Ñ ÁÕ¡Òè ÒÂÊÑ­­Ò³ PWM ¢Í§ÁÍàµÍà ª´Ø ¹Ñ¹é ÍÂÙ ËÃ×ÍÍÕ¡ÇÔ¸ËÕ ¹Ö§è ¤×Í ËÂØ´¨ ÒÂÊÑ­­Ò³ PWM ¢Í§ÁÍàµÍà ªÍ §¹Ñ¹é «Ö§è ·íÒä´ â´Â ¡ÒÃà¤ÅÕÂà ºµÔ PWM ¢Í§ª ͧÊÑ­­Ò³·Õµè Í §¡ÒÃ

Vs

OUT1

OUT3

Vs

Vss Vs

IN1

ENABLE1

IN3

Vs

Vs

IN2

ENABLE2

IN4

OUT2

OUT4

ÃÙ»·Õè 3-10 áÊ´§â¤Ã§Êà ҧ¡Ò÷íÒ§Ò¹ÀÒÂ㹢ͧäÍ«Õ L293D «Ö§è 㪠¢ºÑ ÁÍàµÍà ã¹Ëع ¹µ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 65 ´ ҹ˹ Ò

Ëع ¹µ Robo-51

ÁÍàµÍà M1

« ÒÂÁ×Í

ÁÍàµÍà M2

¢ÇÒÁ×Í

ÃÙ»·Õè 3-11 áÊ´§¡ÒáíÒ˹´µíÒá˹ §¢Í§ÁÍàµÍà ·ãÕè ª ¢ºÑ à¤Å×Íè ¹Ëع ¹µ Robo-51 ¨Ò¡ËÅÑ¡¡Òôѧ¡Å ÒÇ¢ Ò§µ ¹ÊÒÁÒö¹íÒÁÒÊà ҧ¿ §¡ ªÑè¹ã¹â»Ãá¡ÃÁÀÒÉÒ C â´Â¡íÒ˹´ãË Ç§¨Ã¢ÑºÁÍàµÍà ªÍ § 1 㪠¢ºÑ ÁÍàµÍà ´Ò ¹« ÒÂÁ×Í àÁ×Íè ÁͧËع ¹µ ¨Ò¡´ Ò¹º¹ áÅÐǧ¨Ã¢ÑºÁÍàµÍà ª ͧ 2 㪠¢ºÑ ÁÍàµÍà ´Ò ¹¢ÇÒÁ×Í ´Ñ§ã¹ÃÙ»·Õè 3-11

3.5.5.1 Êà ҧ¿ §¡ ª¹Ñè ¢ÑºÁÍàµÍà ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò ¡ÒâѺà¤Å×Íè ¹ãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò·íÒä´ â´Â¡ÒÃÊѧè ãË ÁÍàµÍà 1 áÅÐ 2 ËÁع仢 ҧ˹ Ò·Ñ§é ¤Ù Ê Ç¹¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ¹¹Ñé ¨Ðµ ͧ¡íÒ˹´ãË âÁ´ÙÅ PCA ·íÒ§Ò¹ã¹âËÁ´ ¡íÒà¹Ô´ÊÑ­­Ò³ PWM ¨ ÒÂÊÑ­­Ò³ÍÍ¡ä»·Ò§¢Ò P1.6 áÅÐ P1.7 à¾×Íè 㪠㹡ÒäǺ¤ØÁÍѵÃÒàÃçǢͧ ÁÍàµÍà áÅÐàÅ×Í¡áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅ PCA ¨Ò¡¾ÑÅÊ âÍàÇÍà â¿ÅǢͧä·àÁÍà 0 ¨Ò¡¹Ñ¹é ·íÒ¡ÒÃÊà ҧ¿ §¡ ª¹Ñè motor_fd à¾×Íè 㪠¢ºÑ à¤Å×Íè ¹Ëع ¹µ Robo-51 ãË à¤Å×Íè ¹·Õäè » ¢ ҧ˹ Ò â´ÂÁÕ¾ÒÃÒÁÔàµÍà 2 µÑÇ·ÕÃè ºÑ ¤ Òà¾×Íè ä»»ÃÐÁÇżÅÀÒÂ㹿 §¡ ª¹Ñè ¤×Í select_fd ÊíÒËÃѺàÅ×Í¡ª ͧ¢ÑºÁÍàµÍà «§ Öè ÁÕ¤Ò à» ¹ 1 ËÃ×Í 2 â´Â 1 ËÁÒ¶֧ÁÍàµÍà ªÍ §·Õè 1 (M-1) 2 ËÁÒ¶֧ ÁÍàµÍà ªÍ §·Õè 2 (M-2) 㪠¡Òí ˹´ÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà «§Öè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255 ¶ Ò¡íÒ˹´ ãË ¾ÒÃÒÁÔàµÍà speed ãË Á¤Õ Ò ÁÒ¡¡ç¨Ð·íÒãË ÁÍàµÍà ËÁعàÃçǵÒÁä»´ Ç speed


66 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè motor_fd ÁÕ´§Ñ ¹Õé #define motor_pulse 115 sbit dir_a1 = P2^0; sbit dir_a2 = P2^1; sbit dir_b1 = P2^2;

// ¡íÒ˹´ãË motor_pulse á·¹µÑÇàÅ¢ 115 // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN1 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN2 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN3 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN4 ¢Í§äÍ«Õ L293D

sbit dir_b2 = P2^3; void motor_fd(unsigned char select_fd, unsigned char speed) { TMOD &= 0xF0; TMOD |= 0x02; TH0 = motor_pulse; TL0 = motor_pulse; TR0 = 1; CMOD = 0x04;

if(select_fd==1) { CCAPM3 = 0x42;

CCAP3L = 255-speed; CCAP3H = 255-speed; dir_a1 = 0; dir_a2 = 1;

// à¤ÅÕÂà ¢Í ÁÙÅ亵 ÅÒ §¢Í§ÃÕ¨ÊÔ àµÍà TMOD à¾×Íè àµÃÕÂÁàÅ×Í¡âËÁ´¢Í§ä·àÁÍà 0 // ¡íÒ˹´âËÁ´¢Í§ä·àÁÍà 0 à» ¹âËÁ´ 2 (8 ºÔµÃÕâËÅ´¤ ÒÍѵâ¹Áѵ)Ô // ¡íÒ˹´¤ ÒÃÕâËÅ´¢Í§ä·àÁÍà 0 à» ¹ 115 // ¡íÒ˹´¤ ÒÃÕâËÅ´¢Í§ä·àÁÍà 0 àÃÔÁè µ ¹à» ¹ 115 // à» ´¡ÒùѺ¢Í§ä·àÁÍà 0 // ¡íÒ˹´ãË CPS1=1 áÅÐ CPS0=0 à¾×Íè ¡íÒ˹´ãË ¾ÅÑ Ê âÍàÇÍà â¿ÅǨҡ // ä·àÁÍà 0 à» ¹áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅ PCA // ¶ ÒàÅ×Í¡¢ÑºÁÍàµÍà ªÍ § 1 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡ // ¡íÒ˹´ãË PWM3=1 áÅÐ ECOM3=1 à¾×Íè ¡íÒà¹Ô´ÊÑ­­Ò³ // PWM ¨ ÒÂÍÍ¡·Õ¢è Ò P1.6 à¾×Íè ¤Çº¤ØÁ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 0 // ¡íÒ˹´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // ¡íÒ˹´¤ ÒÃÕâËÅ´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 ËÁع仢 ҧ˹ Ò // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 ËÁع仢 ҧ˹ Ò

} else if(select_fd==2)

// ¶ ÒàÅ×Í¡¢ÑºÁÍàµÍà ªÍ § 2 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡

{ CCAPM4 = 0x42;

CCAP4L = 255-speed; CCAP4H = 255-speed; dir_b1 = 0; dir_b2 = 1;

// ¡íÒ˹´ãË PWM4=1 áÅÐ ECOM4=1 à¾×Íè ¡íÒà¹Ô´ÊÑ­­Ò³ PWM // ¨ ÒÂÍÍ¡·Õ¢è Ò P1.7 à¾×Íè ¤Çº¤ØÁ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 // ¡íÒ˹´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // ¡íÒ˹´¤ ÒÃÕâËÅ´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 2 ËÁع仢 ҧ˹ Ò // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 2 ËÁع仢 ҧ˹ Ò

} CCON = 0x40; }

// ૵ºÔµ CR à¾×Íè à» ´¡ÒùѺ¢Í§âÁ´ÙÅ PCA


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 67

3.5.5.2 Êà ҧ¿ §¡ ª¹Ñè ¢ÑºÁÍàµÍà ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ãË à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ㹷ÔÈ·Ò§µÃ§¹Ñ¹é ÁÕ¢¹Ñé µÍ¹¤Å Ò¡Ѻ¡Òà à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò ·íÒä´ â´Â¡ÒÃÊѧè ãË ÁÍàµÍà 0 áÅÐÁÍàµÍà 1 ËÁع仢 Ò§ËÅѧ·Ñ§é ¤Ù ¿ §¡ ª¹Ñè ·ÕÊè à ҧ¢Ö¹é à¾×Íè ·íÒ˹ Ò·Õ¹è ¤Õé Í× motor_bk ÁÕ¾ÒÃÒÁÔàµÍà 2 µÑÇÃѺ¤ Òä»»ÃÐÁÇżÅÀÒÂ㹿 §¡ ª¹Ñè ¤×Í select_bk

ÊíÒËÃѺàÅ×Í¡ª ͧ¢ÑºÁÍàµÍà «§Öè ÁÕ¤Ò à» ¹ 1 ËÃ×Í 2 â´Â

1 ËÁÒ¶֧ÁÍàµÍà ªÍ §·Õè 1(M-1) 2 ËÁÒ¶֧ ÁÍàµÍà ªÍ §·Õè 2 (M-2) 㪠¡Òí ˹´ÍѵÃÒàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà «§Öè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255 ¶ Ò¡íÒ˹´ ãË ¾ÒÃÒÁÔàµÍà speed ãË Á¤Õ Ò ÁÒ¡¡ç¨Ð·íÒãË ÁÍàµÍà ËÁعàÃçǵÒÁä»´ Ç speed

ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè motor_bk ÁÕ´§Ñ ¹Õé #define motor_pulse 115 sbit dir_a1 = P2^0; sbit dir_a2 = P2^1; sbit dir_b1 = P2^2;

// ¡íÒ˹´ãË motor_pulse á·¹µÑÇàÅ¢ 115 // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN1 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN2 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN3 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN4 ¢Í§äÍ«Õ L293D

sbit dir_b2 = P2^3; void motor_bk(unsigned char select_bk ,unsigned char speed) { TMOD &= 0xF0;

TMOD |= 0x02; TH0 = motor_pulse; TL0 = motor_pulse; TR0 = 1; CMOD = 0x04;

if(select_bk==1)

// à¤ÅÕÂà ¢Í ÁÙÅ亵 ÅÒ §¢Í§ÃÕ¨ÊÔ àµÍà TMODà¾×Íè àµÃÕÂÁµÑ§é âËÁ´¢Í§ // ä·àÁÍà 0 // ¡íÒ˹´âËÁ´¢Í§ä·àÁÍà 0 à» ¹âËÁ´ 2 (8 ºÔµÃÕâËÅ´¤ ÒÍѵâ¹Áѵ)Ô // ¡íÒ˹´¤ ÒÃÕâËÅ´¢Í§ä·àÁÍà 0 à» ¹ 115 // ¡íÒ˹´¤ ÒÃÕâËÅ´¢Í§ä·àÁÍà 0 àÃÔÁè µ ¹à» ¹ 115 // à» ´¡ÒùѺ¢Í§ä·àÁÍà 0 // ¡íÒ˹´ãË CPS1=1 áÅÐ CPS0=0 à¾×Íè 㪠ãË ¾ÅÑ Ê âÍàÇÍà â¿ÅǨҡ // ä·àÁÍà 0 à» ¹áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅ PCA // ¶ ÒàÅ×Í¡¢ÑºÁÍàµÍà ªÍ § 1 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡

{ CCAPM3 = 0x42;

CCAP3L = 255-speed; CCAP3H = 255-speed;

// ¡íÒ˹´ãË PWM3=1 áÅÐ ECOM3=1 à¾×Íè ¡íÒà¹Ô´ÊÑ­­Ò³ // PWM ¨ ÒÂÍÍ¡·Õ¢è Ò P1.6 à¾×Íè ¤Çº¤ØÁ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 0 // ¡íÒ˹´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // ¡íÒ˹´¤ ÒÃÕâËÅ´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¨Ò¡ speed


68 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

// Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 ËÁع仢 ҧ˹ Ò // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 ËÁع仢 ҧ˹ Ò

dir_a1 = 1; dir_a2 = 0; } else if(select_bk==2)

// ¶ ÒàÅ×Í¡¢ÑºÁÍàµÍà ªÍ § 2 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡

{ CCAPM4 = 0x42;

CCAP4L = 255-speed; CCAP4H = 255-speed; dir_b1 = 0; dir_b2 = 1;

// ¡íÒ˹´ãË PWM4=1 áÅÐ ECOM4=1 à¾×Íè ¡íÒà¹Ô´ÊÑ­­Ò³ PWM ¨ Ò // ÍÍ¡·Õ¢è Ò P1.7 à¾×Íè ¤Çº¤ØÁ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 1 // ¡íÒ˹´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¡íÒ˹´¨Ò¡ speed // ¡íÒ˹´¤ ÒÃÕâËÅ´ duty cycle ¢Í§ÊÑ­­Ò³ PWM ¨Ò¡ speed // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 2 ËÁع仢 ҧ˹ Ò // Í Ò§ÍÔ§·ÔÈ¡ÒÃËÁع¢Í§ÁÍàµÍà ªÍ § 2 ËÁع仢 ҧ˹ Ò

}

// ૵ºÔµ CR à¾×Íè à» ´¡ÒùѺ¢Í§âÁ´ÙÅ PCA

CCON = 0x40; }

3.5.5.3 Êà ҧ¿ §¡ ª¹Ñè ËÂØ´¢ÑºÁÍàµÍà ¡ÒÃËÂØ´¢ÑºÁÍàµÍà ªÍ §ã´æ ·íÒä´ ´Ç ¡ÒäǺ¤ØÁÊÀÒÇÐÅͨԡ¢Í§ºÔµ¤Çº¤ØÁ·Ñ§é ÊͧºÔµãË ÁÕÊÀÒÇÐàËÁ×͹¡Ñ¹ ¡Å ÒǤ×Í ÍÒ¨¨Ðà» ¹Åͨԡ 1 ËÃ×Í 0 ·Ñ§é ¤Ù¡ äç ´ â´Â·ÕÂè §Ñ ¤§ÁÕ¡ÒÃÊ §ÊÑ­­Ò³ PWM ä»ÂѧÁÍàµÍà ÍÂÙ Ê Ç¹ÍÕ¡ÇÕ¸ËÕ ¹Ö§è ¤×ÍËÂØ´¨ ÒÂÊÑ­­Ò³ PWM ¢Í§ÁÍàµÍà ªÍ §¹Ñ¹é ËÃ×Í·íҷѧé Êͧ ÇÔ¸ÕàÅ¡çä´ «Ö觨ÐÁÕ¤ÇÒÁá¹ ¹Í¹ÁÒ¡¡Ç Ò ¿ §¡ ª¹Ñè ËÂØ´¢ÑºÁÍàµÍà ·ÊÕè à ҧ¢Ö¹é µ Í仹ÕÁé ªÕ Í×è Ç Ò motor_stop 㪠㹡ÒÃËÂØ´¢ÑºËÃ×ÍÍÕ¡¹ÑÂ Ë¹Ö§è ¡ç¤Í× ¡ÒÃàºÃ¡ (brake) ËÃ×ͺѧ¤Ñºá¡¹ÁÍàµÍà ¹¹Ñè àͧ ÁÕ¾ÒÃÒÁÔàµÍà 1 µÑǤ×Í select_stop

·ÕÃè ºÑ ¤ Òà¾×Íè àÅ×Í¡ª ͧ¢Í§ÁÍàµÍà ÁÕà§×Íè ¹ä¢´Ñ§¹Õé

select_stop = 1

àÅ×Í¡àºÃ¡ª ͧ 1 à¾Õ§ª ͧà´ÕÂÇ

select_stop = 2

àÅ×Í¡àºÃ¡ª ͧ 2 à¾Õ§ª ͧà´ÕÂÇ

select_stop = 3

àÅ×Í¡àºÃ¡·Ñ§é 2 ª ͧ

ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè motor_stop ÁÕ´§Ñ ¹Õé


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 69 sbit dir_a1 = P2^0; sbit dir_a2 = P2^1; sbit dir_b1 = P2^2;

// ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN1 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 1 µ ÍࢠҡѺ¢Ò IN2 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN3 ¢Í§äÍ«Õ L293D // ºÔµ¤Çº¤ØÁÁÍàµÍà ªÍ § 2 µ ÍࢠҡѺ¢Ò IN4 ¢Í§äÍ«Õ L293D

sbit dir_b2 = P2^3; void motor_stop(char select_stop) { if(select_stop==1) { dir_a1 = 0; dir_a2 = 0; CCAPM3 &= 0xFD;

// ¶ ÒàÅ×Í¡àºÃ¡ÁÍàµÍà ªÍ § 1 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡ // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_a1= dir_a2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 1 // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_a1= dir_a2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 1 // à¤ÅÕÂà ºµÔ PWM3 à¾×Íè ËÂØ´¡Òè ÒÂÊÑ­­Ò³ PWM ÍÍ¡·Õè P1.6

} else if(select_stop==2)

// ¶ ÒàÅ×Í¡àºÃ¡ÁÍàµÍà ªÍ § 2 ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡

{ dir_b1 = 0; dir_b2 = 0; CCAPM4 &= 0xFD;

// ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_b1= dir_b2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 2 // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_b1= dir_b2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 2 // à¤ÅÕÂà ºµÔ PWM4 à¾×Íè ËÂØ´¡Òè ÒÂÊÑ­­Ò³ PWM ÍÍ¡·Õè P1.7

} else if(select_stop==3) { dir_a1 = 0; dir_a2 = 0; CCAPM3 &= 0xFD; dir_b1 = 0; dir_b2 = 0; CCAPM4 &= 0xFD;

// ¶ ÒàÅ×Í¡àºÃ¡ÁÍàµÍà ·§Ñé 2 ª ͧ ¨Ð·íÒ¤íÒÊѧè 㹺ÅçÍ¡ // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_a1= dir_a2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 1 // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_a1= dir_a2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 1 // à¤ÅÕÂà ºµÔ PWM3 à¾×Íè ËÂØ´¡Òè ÒÂÊÑ­­Ò³ PWM ÍÍ¡·Õè P1.6 // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_b1= dir_b2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 2 // ¡íÒ˹´·ÔÈ·Ò§¢Ñº dir_b1= dir_b2=0 à¾×Íè àºÃ¡ÁÍàµÍà ªÍ § 2 // à¤ÅÕÂà ºµÔ PWM4 à¾×Íè ËÂØ´¡Òè ÒÂÊÑ­­Ò³ PWM ÍÍ¡·Õè P1.7

} }

3.5.5.4 ä¿Å äźÃÒÃÕ dc_motor.h ÊíÒËÃѺ¢ÑºÁÍàµÍà ¢Í§Ëع ¹µ Robo-51 ¨Ò¡¿ §¡ ª¹Ñè ¡ÒâѺÁÍàµÍà ·§Ñé 3 ¿ §¡ ª¹Ñè ·Õáè ¹Ð¹íÒãË Êà ҧã¹ËÑÇ¢ Í 3.5.5.1 ¶Ö§ 3.5.5.3 ÊÒÁÒö ¹íÒÁÒ¼¹Ç¡à¢ Ò´ Ç¡ѹà¾×Íè Êà ҧ໠¹ä¿Å äźÃÒÃÕä´ à¾×Íè ¤ÇÒÁÊдǡáÅÐÃÇ´àÃçÇ㹡ÒþѲ¹Ò㹤ÃÑ§é µ Íæä» â´Â¡ÒÃÊà ҧä¿Å äźÃÒÃÕä·íÒä´ § ÒÂÁÒ¡à¾Õ§à¢Õ¹â»Ãá¡ÃÁ·Õè P3-7 áŠǺѹ·Ö¡à» ¹ä¿Å dc_motor.h ¨Ñ´à¡çºä¿Å ãË ÍÂÙ· âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ¾Ñ²¹ÒËÃ×Í·Õè C:\RIDE\INC


70 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè P3-7 ä¿Å äźÃÒÃÕ dc_motor.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¢ÑºÁÍàµÍà 俵ç¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) /*—————————————————————————————————————————————————————————————————————————*/ // Program : Pulse width modulation by PCA module // Description : Generate pulse width modulation signal on CEX3 and CEX4 // : using PCA function // Filename : dc_motor.h // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————————————————————————————————————————*/ #define ch1 1 // Define constant #define ch2 2 // Define constant #define all 3 // Define constant #define motor_pulse 115 // Define constant sbit dir_a1 = P2^0; // bit drive motor0 sbit dir_a2 = P2^1; // bit drive motor0 sbit dir_b1 = P2^2; // bit drive motor1 sbit dir_b2 = P2^3; // bit drive motor1 /*********************** Drive motor backward ********************************/ void motor_bk(unsigned char select_bk ,unsigned char speed) { TMOD &= 0xF0; // Refresh mode timer 0 TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload) TH0 = motor_pulse; // Reload value for timer 0 TL0 = motor_pulse; // Initial value for count of timer 0 TR0 = 1; // Start timer 0 // Set CMOD PCA count freq. by pulse overflow timer0 CMOD = 0x04; if(select_bk==1) { CCAPM3 = 0x42; // Set CCAP Module 3 as 8 bit PWM CCAP3L = 255-speed; // Set CCAP3L initial value by speed variable // (set duty cycle) CCAP3H = 255-speed; // Set CCAP3H reload value by speed variable // (set duty cycle) dir_a1 = 1; // set direction backward dir_a2 = 0; // set direction backward } else if(select_bk==2) { CCAPM4 = 0x42; // Set CCAP Module 3 as 8 bit PWM CCAP4L = 255-speed; // Set CCAP4L initial value by speed variable(set duty cycle) CCAP4H = 255-speed; // Set CCAP4H initial value by speed variable(set duty cycle) dir_b1 = 1; // set direction backward dir_b2 = 0; // set direction backward } CCON = 0x40; // Set PCA counter run } /*********************** Drive motor forward ********************************/ void motor_fd(unsigned char select_fd, unsigned char speed) { TMOD &= 0xF0; // Refresh mode timer 0 TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload) TH0 = motor_pulse; // Reload value for timer 0 TL0 = motor_pulse; // Initial value for count of timer 0


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 71

â»Ãá¡ÃÁ·Õè P3-7 ä¿Å äźÃÒÃÕ dc_motor.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ¢ÑºÁÍàµÍà 俵ç¢Í§Ëع ¹µ Robo-51 (¨º) TR0 = 1; CMOD = 0x04; if(select_fd==1) { CCAPM3 = 0x42; CCAP3L = 255-speed; CCAP3H = 255-speed; dir_a1 = 0; dir_a2 = 1; } else if(select_fd==2) { CCAPM4 = 0x42; CCAP4L = 255-speed; CCAP4H = 255-speed; dir_b1 = 0; dir_b2 = 1; } CCON = 0x40;

// Start timer 0 // Set CMOD PCA count freq. by pulse overflow timer0

// // // // // // //

Set CCAP Module 3 as 8 bit PWM Set CCAP3L initial value by speed variable (set duty cycle) Set CCAP3H initial value by speed variable (set duty cycle) Set direction forward Set direction forward

// // // // // // //

Set CCAP Module 3 as 8 bit PWM Set CCAP4L initial value by speed variable (set duty cycle) Set CCAP4H initial value by speed variable (set duty cycle) Set direction forward Set direction forward

// Set PCA counter run

} /*********************** Break motor *****************************************/ void motor_stop(char select_stop) { if(select_stop==1) { dir_a1 = 0; // Break motor channel 1 dir_a2 = 0; // Break motor channel 1 CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6 } else if(select_stop==2) { dir_b1 = 0; // break motor channel 2 dir_b2 = 0; // Break motor channel 2 CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7 } else if(select_stop==3) { dir_a1 = 0; // Break motor channel 1 dir_a2 = 0; // Break motor channel 1 CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6 dir_b1 = 0; // Break motor channel 2 dir_b2 = 0; // Break motor channel 2 CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7 } }


72 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

3.5.5.5 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè ¢Í§äźÃÒÃÕ dc_motor.h (1) ¿ §¡ ª¹Ñè motor_bk : ¢ÑºÁÍàµÍà ¶ÍÂËÅѧ ÃٻẺ¿ §¡ ªÑè¹ void motor_bk(bit select_bk ,unsigned char speed) ¾ÒÃÒÁÔàµÍà bk ÃѺ¤ Ò¡ÒáíÒ˹´ª ͧ¢ÑºÁÍàµÍà 俵ç ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 1 áÅÐ 2 speed ÃѺ¤ ÒÍѵÃÒàÃçÇ㹡ÒâѺÁÍàµÍà 俵ç ÁÕ¤Ò 0 ¶Ö§ 255 ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·Õ¢è ºÑ ÁÍàµÍà ¶ÍÂËÅѧ (2) ¿ §¡ ª¹Ñè motor_fd : ¢ÑºÁÍàµÍà ËÁع仢 ҧ˹ Ò ÃٻẺ¿ §¡ ªÑè¹ void motor_fd(bit select_fd, unsigned char speed) ¾ÒÃÒÁÔàµÍà fd ÃѺ¤ Ò¡ÒáíÒ˹´ª ͧ¢ÑºÁÍàµÍà 俵ç ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 1 áÅÐ 2 speed ÃѺ¤ ÒÍѵÃÒàÃçÇ㹡ÒâѺÁÍàµÍà 俵ç ÁÕ¤Ò 0 ¶Ö§ 255 ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·Õ¢è ºÑ ÁÍàµÍà 仢 ҧ˹ Ò (3) ¿ §¡ ª¹Ñè motor_stop : ËÂØ´¢ÑºÁÍàµÍà ÃٻẺ¿ §¡ ªÑè¹ void motor_stop(char select_stop) ¾ÒÃÒÁÔàµÍà select_stop ÃѺ¤ Ò¡ÒáíÒ˹´ª ͧ¡ÒÃËÂØ´¢ÑºÁÍàµÍà 俵ç ÁÕ¤Ò 1, 2 ËÃ×Í 3 ËÃ×Í㪠¤Òí Ç Ò all ¡çä´ ¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò ÃÒÂÅÐàÍÕ´ ·íÒ˹ Ò·ÕËè ÂØ´¢ÑºÁÍàµÍà ËÃ×ÍàºÃ¡ËÃ×ͺѧ¤Ñºá¡¹ÁÍàµÍÃ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 73

¡Ô¨¡ÃÃÁ·Õè 7

·´Êͺ¡ÒâѺÁÍàµÍà àº×éͧµ ¹ A7.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A7-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0701.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A7.2 µ ÍÊÒÂÁÍàµÍÃ à¢ Ò·Õ¨è ´Ø µ Í´ ҹ㹠A7.3 ¡ ͹Ãѹâ»Ãá¡ÃÁãË Â¡Ëع ¹µ ¢¹Öé à˹×;׹é Ãѹâ»Ãá¡ÃÁ (LED ÊÕà¢ÕÂÇ·Õµè Òí á˹ § RUN µÔ´ÊÇ Ò§) àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¨Ðä´ Â¹Ô àÊÕ§ µÔ´é ËÅѧ¨Ò¡¹Ñ¹é ᡹¢Í§ÁÍàµÍà ·¶Õè ¡Ù µ ÍࢠҡѺª ͧ M-1 ¨ÐËÁع·Ç¹ à¢çÁ¹ÒÌ ¡Ò¾Ã ÍÁ¡Ñº LED áÊ´§Ê¶Ò¹Ð¢Í§ª ͧ M-1 à»Å §áʧÊÕà¢ÕÂÇ (ÍÒ¨ÁÕÊáÕ ´§»¹ÍÂÙº Ò §) Ê Ç¹á¡¹¢Í§ÁÍàµÍà ·Õ¶è ¡Ù µ ÍࢠҡѺª ͧ M-2 ¨ÐËÁعµÒÁà¢çÁ¹ÒÌ ¡Ò¾Ã ÍÁ¡Ñº LED áÊ´§Ê¶Ò¹Ð¢Í§ª ͧ M-2 à»Å §áʧÊÕá´§ «Ö§è Á ÍàµÍà ·§Ñé ¤Ù¨ ÐËÁعÍÂÙ¹ Ò¹»ÃÐÁÒ³ 10 ÇÔ¹Ò·Õ áÅ ÇËÂØ´¾Ã ÍÁ¡ÑºÁÕÊ­ Ñ ­Ò³àÊÕ§ µÔ´é ´Ñ§¢Ö¹é ÍÕ¡ 1 ¤Ãѧé

â»Ãá¡ÃÁ·Õè A7-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¢ÑºÁÍàµÍà ¢Í§Ëع ¹µ Robo-51 /*————————————————————————————————————————————————————————————————————————*/ // Program : Basic driving motor // Description : Drive motors on forward and backward for checking direction // Filename : act0701.c // C compiler : RIDE 51 V6.1 /*————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Declare T89C51AC2’s register #include <sound.h> // Declare Sound library #include <dc_motor.h> // Declare DC motor library #include <delay.h> // Declare Delay library void main() { beep(); motor_fd(1,100); motor_bk(2,100); delay_ms(10000); motor_stop(all); beep(); while(1); }

// // // // // // //

Beep for beginning Drive motor channel 1 forward Drive motor channel 2 backward Delay 10 seconds for obseration motor turning Stop all motors Beep for finishing Endless loop


74 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 75

º··Õè 4 ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 㹵͹· Ò¢ͧº··Õè 3 ÁÕ¡ÒÃá¹Ð¹íÒáÅз´ÅͧÊà ҧ¿ §¡ ªÑè¹â»Ãá¡ÃÁÀÒÉÒ C à¾×è͢Ѻ ÁÍàµÍà ¢Í§Ëع ¹µ Robo-51 à¾×Íè µÃǨÊͺ·ÔÈ·Ò§¡ÒÃËÁع ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ä´ ÃǺÃÇÁ¿ §¡ ª¹Ñè ·Ñ§é ËÁ´ Êà ҧ໠¹ä¿Å äźÃÒÃÕà¾×Íè àµÃÕÂÁ㪠㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¢Ñºà¤Å×Íè ¹Ëع ¹µ 㹺·¹Õ¨é ÐࢠÒÊÙ¡ ÒÃà¢Õ¹ â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 ã¹Åѡɳе Ò§æ ´ Ç¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ¨Ò¡ä¿Å äźÃÒÃÕµ Ò§æ à¾×èͼ¹Ç¡¡Ñ¹à» ¹â»Ãá¡ÃÁµÒÁ¨Ø´»ÃÐʧ¤ ·Õèµ Í§¡Òà â´ÂäźÃÒÃÕ·ÕèàÃÕ¡㪠§Ò¹à» ¹ ËÅÑ¡¤×Í dc_motor.h, delay.h , sound.h áÅÐ lcd_robo51.h

4.1 ä¿Å äźÃÒÃÕËÅÑ¡·Õãè ª 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 4.1.1 äźÃÒÃÕ dc_motor.h : ¢ÑºÁÍàµÍà motor_fd ·íÒ˹ Ò·Õ¢è ºÑ ÁÍàµÍà ãË ËÁع仢 ҧ˹ Ò â´Â¡ÒáíÒ˹´ª ͧ·Õµè Í §¡ÒâѺ (ª ͧ 1 ËÃ×Í 2) áÅСíÒÅѧ¢Ñº«Ö§è ÁÕ 255 ÃдѺ â´Â¡Òû ͹¤ ÒÍСÔÇàÁ¹µ motor_bk ·íÒ˹ Ò·Õ¢è ºÑ ÁÍàµÍà ãË ¶ÍÂËÅѧâ´Â¡ÒáíÒ˹´ª ͧ·Õµè Í §¡ÒâѺ(ª ͧ 1 ËÃ×Í 2) áÅСíÒÅѧ¢Ñº«Ö§è ÁÕ 255 ÃдѺ â´Â¡Òû ͹¤ ÒÍСÔÇàÁ¹µ motor_stop ·íÒ˹ Ò·Õàè ºÃ¡ÁÍàµÍà â´Â¡íÒ˹´ª ͧ·Õµè Í §¡ÒÃàºÃ¡ (ª ͧ 1, 2 ËÃ×Í 3)

4.1.2 äźÃÒÃÕ delay.h : ˹ ǧàÇÅÒ delay_100us ·íÒ˹ Ò·ÕËè ¹ ǧàÇÅÒã¹Ë¹ Ç 100 äÁâ¤ÃÇÔ¹Ò·Õ (à» ¹¤ Òâ´Â»ÃÐÁÒ³) delay_ms ·íÒ˹ Ò·ÕËè ¹ ǧàÇÅÒã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ (à» ¹¤ Òâ´Â»ÃÐÁÒ³)

4.1.3 äźÃÒÃÕ sound.h : ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ sound ·íÒ˹ Ò·Õè¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§â´ÂÊÒÁÒö¡íÒ˹´¤ÇÒÁ¶Õèä´ ã¹Ë¹ Ç Hz ¾Ã ÍÁª ǧ àÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§ beep ·íÒ˹ Ò·Õ¡è Òí à¹Ô´ÊÑ­­Ò³àÊÕ§·Õ¤è ÇÒÁ¶Õè 500 Hz ª ǧàÇÅÒ㹡ÒáíÒà¹Ô´¤×Í 0.1 ÇÔ¹Ò·Õ


76 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

4.1.4 äźÃÒÃÕ lcd_robo51.h : áÊ´§¼Å·Õâè Á´ÙÅ LCD lcd_command ·íÒ˹ Ò·ÕÊè § 亵 ¤Òí Êѧè ä»ÂѧâÁ´ÙÅ LCD lcd_text ·íÒ˹ Ò·ÕÊè § 亵 ¢Í ÁÙÅÍÑ¡¢ÃÐä»ÂѧâÁ´ÙÅ LCD lcd_init ·íÒ˹ Ò·ÕÍè ¹Ô àÔ ªÕÂÅ¡ÒÃµÑ§é ¤ ÒâËÁ´¡ÒõԴµ ÍâÁ´ÙÅ LCD Ẻ 4 ºÔµ lcd_putstr ·íÒ˹ Ò·ÕÊè § ªØ´¢ ͤÇÒÁ(ÊÒÂÍÑ¡¢ÃÐ)ä»áÊ´§¼ÅÂѧâÁ´ÙÅ LCD inttolcd ·íÒ˹ Ò·Õáè »Å§¢ ÍÁÙŵÑÇàÅ¢áÅ ÇÊ §¢ ͤÇÒÁµÑÇàÅ¢ä»áÊ´§¼ÅÂѧâÁ´ÙÅ LCD

4.2 á¹Ç·Ò§¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ÊíÒËÃѺ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ãË ÊÁºÙó ¨Ðµ ͧ¤Çº¤ØÁãË ÁÍàµÍà ·§Ñé 2 µÑÇ·Õµè Í ¡Ñº ª ͧ M-1 áÅÐ M-2 ·íÒ§Ò¹ÊÑÁ¾Ñ¹¸ ¡¹Ñ à¾×Íè ãË ä´ ¼ÅÅѾ¸ ¢Í§¡ÒâѺà¤Å×Íè ¹Ëع ¹µ ã¹ÅѡɳÐà¤Å×Íè ¹ ·ÕèµÃ§ä»¢ ҧ˹ Ò, ¶ÍÂËÅѧµÃ§, àÅÕéÂÇ« ÒÂ, àÅÕéÂÇ¢ÇÒ áÅÐàºÃ¡ â´ÂÍÒ¨¹íÒ¿ §¡ ªÑè¹ÀÒÂã¹äźÃÒÃÕ dc_motor.h ÁҾѲ¹Òà» ¹¿ §¡ ª¹Ñè ãËÁ à¾×Íè ¢Ñºà¤Å×Íè ¹Ëع ¹µ ·§Ñé 5 ÃٻẺ «Ö§è µ ͧ¡íÒ˹´ãË ÁÍàµÍà ª ͧ M-1 à» ¹ÁÍàµÍà ·ãÕè ª ¢ºÑ Å Í·Ò§´ Ò¹« Ò áÅÐ M-2 à» ¹ÁÍàµÍà ·ãÕè ª ¢ºÑ Å Í·Ò§¢ÇÒ

4.2.1 ¿ §¡ ª¹Ñè ¢Ñºà¤Å×Íè ¹Ëع ¹µ µÃ§ä»¢ ҧ˹ Ò à¡Ô´¨Ò¡¡Ò÷ÕèÁÍàµÍà ·Ñ駤٠¶Ù¡¢Ñºä»¢ ҧ˹ Ò â´ÂµÑ駪×èÍ¿ §¡ ªÑè¹à» ¹ run_fd ÁÕ¾ÒÃÒÁÔàµÍà time_spin ÊíÒËÃѺ ÃѺ¤ ÒàÇÅÒ·Õèµ Í§¡ÒÃ˹ ǧà¾×èÍãË ËØ ¹Â¹µ à¤Å×è͹·ÕèµÃ§ä»¢ ҧ˹ Òà» ¹ÃÐÂÐ àÇÅÒ·Õµè Í §¡Òà ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè ÁÕ´§Ñ ¹Õé

Robo-51

#define pow 200 void run_fd(int time_spin) { motor_fd(2,pow); motor_fd(1,pow); delay_ms(time_spin);

// ¢ÑºÁÍàµÍà M-2 仢 ҧ˹ Ò (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ¢ÑºÁÍàµÍà M-1 仢 ҧ˹ Ò (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ˹ ǧàÇÅÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ delay.h)

}

4.2.2 ¿ §¡ ª¹Ñè ¢Ñºà¤Å×Íè ¹Ëع ¹µ ¶ÍÂËÅѧµÃ§

à¡Ô´¨Ò¡¡Ò÷ÕèÁÍàµÍà ·Ñ駤٠¶Ù¡¢Ñºä»´ Ò¹ËÅѧ â´ÂµÑ駪×èÍ¿ §¡ ªÑè¹à» ¹ run_bk ÁÕ¾ÒÃÒÁÔàµÍà time_spin ÊíÒËÃѺÃѺ¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧà¾×Íè ãË Ëع ¹µ ¶ÍÂËÅѧµÃ§à» ¹ÃÐÂÐàÇÅÒ·Õµè Í §¡Òà ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè ÁÕ´§Ñ ¹Õé

Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 77 #define pow 200 void run_bk(int time_spin) { motor_bk(2,pow); motor_bk(1,pow); delay_ms(time_spin);

// ¢ÑºÁÍàµÍà M-2 仢 Ò§ËÅѧ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ¢ÑºÁÍàµÍà M-1 仢 Ò§ËÅѧ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ˹ ǧàÇÅÒà¾×Íè ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ delay.h)

}

4.2.3 ¿ §¡ ª¹Ñè ¢Ñºà¤Å×Íè ¹Ëع ¹µ àÅÕÂé Ç« Ò à¡Ô´¨Ò¡¡Ò÷ÕÁè ÍàµÍà ·ªÕè Í § M-2 ¶Ù¡¢Ñºä»¢ ҧ˹ ÒáÅÐÁÍàµÍà ·ªÕè Í § M-1 ¶Ù¡¢Ñºä»¢ Ò§ËÅѧ â´ÂµÑ§é ª×Íè ¿ §¡ ª¹Ñè à» ¹ turn_left ÁÕ¾ÒÃÒÁÔàµÍà time_spin ÊíÒËÃѺ ÃѺ¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧà¾×Íè ãË Ë¹Ø Â¹µ àÅÕÂé Ç« ÒÂà» ¹ÃÐÂÐàÇÅÒ·Õµè Í §¡Òà ÃÒ ÅÐàÍÕ´¢Í§¿ §¡ ªÑè¹Áմѧ¹Õé

-51 Robo

#define pow 200 void turn_left(int time_spin) { motor_fd(2,pow); motor_bk(1,pow); delay_ms(time_spin);

// ¢ÑºÁÍàµÍà M-2 仢 ҧ˹ Ò (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ¢ÑºÁÍàµÍà M-1 仢 Ò§ËÅѧ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ˹ ǧàÇÅÒà¾×Íè ãË Ë¹Ø Â¹µ ËÁعµÑÇ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ delay.h)

}

4.2.4 ¿ §¡ ª¹Ñè ¢Ñºà¤Å×Íè ¹Ëع ¹µ àÅÕÂé Ç¢ÇÒ

à¡Ô´¨Ò¡ÁÍàµÍà ·ªÕè Í § M-2 ¶Ù¡¢Ñºä»¢ Ò§ËÅѧáÅÐÁÍàµÍà ·ªÕè Í § M-1 ¶Ù¡¢Ñº 仢 ҧ˹ Ò µÑ§é ª×Íè ¿ §¡ ª¹Ñè à» ¹ turn_right ÁÕ¾ÒÃÒÁÔàµÍà time_spin ÊíÒËÃѺ ÃѺ¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧà¾×Íè ãË Ë¹Ø Â¹µ àÅÕÂé Ç¢ÇÒà» ¹ÃÐÂÐàÇÅÒ·Õµè Í §¡Òà ÃÒ ÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè ÁÕ´§Ñ ¹Õé

Rob o-5 1

#define pow 200 void turn_right(int time_spin) { motor_bk(2,pow); motor_fd(1,pow); delay_ms(time_spin); }

// ¢ÑºÁÍàµÍà M-2 仢 Ò§ËÅѧ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ¢ÑºÁÍàµÍà M-1 仢 ҧ˹ Ò (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ dc_motor.h) // ˹ ǧàÇÅÒà¾×Íè ãË Ë¹Ø Â¹µ ËÁعµÑÇ (àÃÕ¡¿ §¡ ª¹Ñè ¨Ò¡äźÃÒÃÕ delay.h)


78 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

4.2.5 ¿ §¡ ª¹Ñè ËÂØ´Ëع ¹µ Áմѧ¹Õé

à¡Ô´¨Ò¡¡Ò÷Õàè ºÃ¡ÁÍàµÍà ·§Ñé 2 µÑÇ ·íÒãË Ë¹Ø Â¹µ ËÂØ´¡ÒÃà¤Å×Íè ¹·Õè ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñè void stop(void) { motor_stop(3);

// àºÃ¡ÁÍàµÍà ·ªÕè Í § M-1 áÅÐ M-2 (àÃÕ¡¨Ò¡äźÃÒÃÕ dc_motor.h)

}

¨Ò¡¿ §¡ ª¹Ñè ¤Çº¤ØÁ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 àº×Íé µ ¹ ÊÒÁÒö¨Ñ´à¡çºäÇ à» ¹äźÃÒÃÕµÒÁ ¤ÇÒÁÊдǡ¢Í§¼Ù ¾Ñ²¹Òàͧä´

¡Ô¨¡ÃÃÁ·Õè 8

¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 àº×Íé §µ ¹ A8.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A8-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0801.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A8.2 »Å´ÊÒÂàª×Íè Áµ ͤÍÁ¾ÔÇàµÍà ÍÍ¡ áÅ Ç·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õäè »¢ ҧ˹ Òà» ¹àÇÅÒ 2 ÇÔ¹Ò·Õ áŠǶÍÂËÅѧ 2 ÇÔ¹Ò·ÕÊÅѺä»ÁÒ ·Ø¡¤ÃÑ§é ·ÕÁè Õ à»ÅÕÂè ¹·ÔÈ¡ÒÃà¤Å×Íè ¹·Õè ¨ÐÁÕàÊÕ§ÊÑ­­Ò³´Ñ§¢Ö¹é à¾×Íè ᨠ§¡ÒÃà»ÅÕÂè ¹·ÔÈ·Ò§·Ø¡¤Ãѧé ãË áÊ´§àÊÕ§ÊÑ­­Ò³ 1 ¤Ãѧé

ËÒ¡äÁ ä´ µÒÁ¹ÕéáÊ´§Ç Ò ¡Òõ ÍÊÒ¢ͧÁÍàµÍà ÍÒ¨äÁ ¶Ù¡¢ÑéÇ ãË ·íÒ¡ÒÃÊÅѺ¡Òõ ÍÊÒ â´ÂÊѧࡵ¨Ò¡Êբͧ LED ¡çä´ â´Â¶ ÒËع ¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò LED ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ·Ñ§é Êͧª ͧµ ͧ໠¹ÊÕà¢ÕÂÇ áÅÐàÁ×Íè Ëع ¹µ ¶ÍÂËÅѧ LED ¨Ðà»ÅÕÂè ¹à» ¹ÊÕá´§·Ñ§é ¤Ù

àÁ×Íè ÊÅѺÊÒ¨¹¡ÃÐ·Ñ§è ·íÒ§Ò¹ä´ ¶¡Ù µ ͧáÅ Ç ¢ÍãË Â´Ö µíÒá˹ §¡Òõ ͹Õàé ÍÒäÇ à¾ÃÒÐ ¨Ð㪠¡Òõ Í㹡Ԩ¡ÃÃÁ¹Õàé » ¹ËÅѡ㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 ·Ñ§é ËÁ´ A8.3 à¢Õ¹â»Ãá¡ÃÁ·Õè A8-2 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0802.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX51AC2 plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A8.5 »Å´ÊÒÂàª×Íè Áµ ͤÍÁ¾ÔÇàµÍà ÍÍ¡ áÅ Ç·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ Ëع ¹µ Robo-51 ¨Ðà¤Å×Íè ¹·Õàè » ¹ÃٻẺ´Ñ§µ Í仹Õé ¾Ã ÍÁ¡ÑºáÊ´§¢ ͤÇÒÁᨠ§ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õ·è Õè âÁ´ÙÅ LCD ´ ÇÂ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 79

â»Ãá¡ÃÁ·Õè A8-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 ¾×¹é °Ò¹ /*—————————————————————————————————————*/ // Program : Basic Move // Description : Robo-51 movement by simple fuction // Filename : act0801.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd.h> // Module function LCD display #include <dc_motor.h> // Module function drive DC motor #include <sound.h> // Module function drive sound #include <delay.h> // Module function delay time #define pow 200 // Define constant for power drive DC motor void run_fd(int time_spin) { motor_fd(2,pow); // Motor channel 2 forward motor_fd(1,pow); // Motor channel 1 forward delay_ms(time_spin); // Delay time for robot driving forward } void run_bk(int time_spin) { motor_bk(2,pow); // Motor channel 2 backward motor_bk(1,pow); // Motor channel 1 backward delay_ms(time_spin); // Delay time for robot driving backward } void main() { while(1) { run_fd(2000); beep(); run_bk(2000); beep(); } }

// Infinite loop // // // //

Run forward 2 seconds Sound 1 time Run backward 2 seconds Sound 1 time

(1) à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò 2 ÇÔ¹Ò·Õ ¾Ã ÍÁ¡ÑºáÊ´§¢ ͤÇÒÁ Forward ·Õâè Á´ÙÅ LCD (2) ËÁعµÑÇàÅÕÂé Ç« ÒÂà» ¹àÇÅÒ 0.5 ÇÔ¹Ò·Õ ¾Ã ÍÁ¡ÑºáÊ´§¢ ͤÇÒÁ Turn

Left ·Õâè Á´ÙÅ LCD

(3) à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò 2 ÇÔ¹Ò·Õ ¾Ã ÍÁ¡ÑºáÊ´§¢ ͤÇÒÁ Forward ·Õâè Á´ÙÅ LCD (4) ËÁعµÑÇàÅÕÂé Ç¢ÇÒà» ¹àÇÅÒ 0.5 ÇÔ¹Ò·Õ ¾Ã ÍÁ¡ÑºáÊ´§¢ ͤÇÒÁ Turn Right ·Õâè Á´ÙÅ LCD (5) ǹÃͺ·íÒ¢Ñ¹é µÍ¹·Õè 1-4 ¹Õäé »µÅÍ´


80 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A8-2 â»Ãá¡ÃÁ·´Åͧ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 ¾Ã ÍÁáÊ´§¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD /*—————————————————————————————————————————————————————————————————————————*/ // Program : Basic Move -2 // Description : Robo-51 movement by simple fuction with display operation on LCD // Filename : act0802.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <dc_motor.h> // Module function drive DC motor #include <sound.h> // Module function drive sound #include <delay.h> // Module function delay time #define pow 200 // Define constant for power drive DC motor void run_fd(int time_spin) { motor_fd(2,pow); // motor_fd(1,pow); // delay_ms(time_spin); // } void run_bk(int time_spin) { motor_bk(2,pow); // motor_bk(1,pow); // delay_ms(time_spin); // } void turn_left(int time_spin) { motor_fd(2,pow); // motor_bk(1,pow); // delay_ms(time_spin); // } void turn_right(int time_spin) { motor_bk(2,pow); // motor_fd(1,pow); // delay_ms(time_spin); // } void main() { lcd_init(); while(1) { lcd_command(0x01); lcd_putstr(line1,” run_fd(2000);

} }

Motor channel 2 forward Motor channel 1 forward Delay time for robot drive forward

Motor channel 2 backward Motor channel 1 backward Delay time for robot drive backward

Motor channel 2 forward Motor channel 1 backward Delay time for robot spining turn left

Motor channel 2 backward Motor channel 1 forward Delay time for robot spining turn right

// Initial LCD module // Infinite loop Forward”);

// Clear display // Show message // Run forward 2 seconds

lcd_command(0x01); lcd_putstr(line1,” turn_left(500);

Turn Left”);

// Clear display // Show message // Turn left 0.5 second

lcd_command(0x01); lcd_putstr(line1,” run_fd(2000);

Forward”);

// Clear display // Show message // Run forward 2 seconds

lcd_command(0x01); lcd_putstr(line1,” turn_right(500);

Turn Right”);

// Clear display // Show message // Turn Right 0.5 second


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 81

º··Õè 5 ¡ÒõԴµ ͡ѺµÑǵÃǨ¨Ñºáººµ Ò§æ ¢Í§Ëع ¹µ Robo-51 Ê Ç¹»ÃСͺ·ÕèÊíҤѭÍÕ¡»ÃСÒÃ˹Ö觢ͧËØ ¹Â¹µ Íѵâ¹ÁѵԤ×Í µÑǵÃǨ¨ÑºËÃ×Íૹà«Íà (sensor) Ëع ¹µ ¨ÐÊÒÁÒöµÑ´ÊÔ¹ã¨à¤Å×Íè ¹·ÕËè Ã×Í¡ÃзíÒ¡ÒÃã´¡çµÒÁ µ ͧÍÒÈÑ¢ ÍÁÙŨҡÊÀÒ¾áÇ´ Å ÍÁ à¾×Íè ¹íÒÁÒ»ÃÐÁÇżÅáŠǵѴÊԹ㨠µÑǵÃǨ¨ÑºÁÕ´Ç Â¡Ñ¹ËÅÒ¡ËÅÒÂÃٻẺ·Ñ§é µÑǵÃǨ¨Ñº¡Òê¹ áʧ àÊ ¹ ÍسËÀÙÁÔ ÏÅÏ áµ ¶Ò ËÒ¡¹íÒÁҨѴ¡ÅØÁ µÒÁÅѡɳТͧÊÑ­­Ò³áŠǨÐẠ§ÍÍ¡à» ¹ 2 ¡ÅØÁ ¤×Í µÑǵÃǨ¨ÑºÊÑ­­Ò³ÍйÒÅÍ¡ áÅеÑǵÃǨ¨ÑºÊÑ­­Ò³´Ô¨µÔ ÍÅ ÊíÒËÃѺËØ ¹Â¹µ Robo-51 ÊÒÁÒöµÔ´µ ͡ѺµÑǵÃǨ¨Ñºä´ ·Ñé§ÊͧẺ à¹×èͧ¨Ò¡ÀÒÂã¹ T89C51AC2 «Ö§è à» ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡·Õãè ª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ÁÕâÁ´Ù Åá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµÍÂÙ ÀÒÂã¹µÑÇ ¨Ö§·íÒãË ÊÒÁÒöà¢Õ¹ â»Ãá¡ÃÁà¾×Íè ÃѺÃÙÊ ­ Ñ ­Ò³ÍйÒÅÍ¡ä´ §Ò  áÅÐäÁ µÍ §¡ÒÃäÍ«Õá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ à¾ÔÁè àµÔÁ ã¹ÃÙ»·Õè 5-1 áÊ´§¢ ÍÁÙÅâ´ÂÊÃØ»¢Í§á¼§Ç§¨ÃµÃǨ¨Ñºáººµ Ò§æ ·Õãè ª ã¹Ëع ¹µ Robo-51

5.1 µÃǨ¨ÑºÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª ¡ÒõÃǨ¨ÑºÊÑ­­Ò³·Õ§è Ò Â·ÕÊè ´Ø ¢Í§Ëع ¹µ Robo-51 ¤×Í ¡ÒõÃǨ¨ÑºÊÑ­­Ò³´Ô¨µÔ ÍÅ «Öè§ ã¹·Õ¹è ¨Õé Ð㪠ἧǧ¨ÃÊÇÔµª ÁÒ¹íÒàʹÍà» ¹µÑÇÍ ҧ â´Âἧǧ¨ÃÊÇÔµª ÊÒÁÒö¹íÒÁÒ㪠ÊÒí ËÃѺµÃǨ ¨Ñº¡Òê¹ÊÔ§è ¡Õ´¢ÇÒ§ ËÃ×Í»ÃÐÂØ¡µ 㪠໠¹ÊÇÔµª ÊÒí ËÃѺÊÑ§è §Ò¹ÀÒÂ¹Í¡ä´ Ç§¨ÃÊÁºÙó ¢Í§á¼§Ç§¨ÃÊÇÔµª áÊ´§ã¹ÃÙ»·Õè 5-2 ἧǧ¨ÃÊÇÔµª ¨ÐãË àÍÒµ ¾µØ ÍÍ¡ÁÒà» ¹ ÊÀÒÇÐÅͨԡ 1 àÁ×Íè äÁ Á¡Õ Òá´ áÅÐÅͨԡ 0 àÁ×Íè ¡´ÊÇÔµª â´ÂÁÕ LED áÊ´§¼Å¡Òá´ÊÇÔµª ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡ÒÃ㪠§Ò¹Ã ÇÁ¡ÑºËع ¹µ Robo-51 ¨Ö§µ ͧµ ÍࢠҡѺ¾Íà µ´Ô¨µÔ ÍŢͧºÍà ´ RBX-51AC2 «Ö§è ÁÕãË àÅ×Í¡ 5 ª ͧ ¤×Í P3.2, P3.3, P3.4, P4.0 áÅÐ P4.1 ੾ÒТҾÍà µ P3.2 áÅÐ P3.3 ÊÒÁÒöà¢Õ¹ â»Ãá¡ÃÁÃѺ¤ ÒÊÇÔµª â´Â㪠¡ÒõͺʹͧÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÀÒ¹͡ä´


82 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

ZX-01 ἧǧ¨ÃÊÇÔµª µÃǨ¨Ñº¡Òê¹ (Touch sensor) l àÁ×Í è ÊÇÔµª äÁ ¶¡Ù ¡´ ãË ¼Åà» ¹Åͨԡ 1 l àÁ×Í è ÊÇÔµª ¶¡Ù ¡´ ãË ¼Åà» ¹Åͨԡ 0

ÊÒÁÒö㪠¢Ò Data ·íÒ˹ Ò·Õèà» ¹ÍÔ¹¾ØµÊíÒËÃѺ ÊÑ§è ¡Òà LED º¹á¼§Ç§¨ÃãË µ´Ô ´ÑºµÒÁµ ͧ¡ÒÃä´ l

ER-4 ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô ZX-03 ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô l ÃÐÂзíÒ¡Òà 8 ¶Ö§10 àÁµÃã¹ (Infrared reflect sensor) ¾×é¹·ÕèâÅ § l ºÃèØâÁ´ÙÅ TCRT5000 «Ö§è ÃÇÁàÍÒ LED ÍÔ¹¿ÃÒàô

l ÁÕÊÇÔµª ¤Çº¤ØÁ 4 µÑÇ Ê §¢ ÍÁÙÅ áÅÐâ¿âµ ·ÃÒ¹«ÔÊàµÍà äÇ ÀÒÂã¹ ÁÕÃÐÂеÃǨ¨Ñº¡Òà ¢Í§ÊÇÔµª à» ¹ÃËÑÊáÍÊ¡Õé Êз ͹·Õ´è ·Õ ÊÕè ´Ø »ÃÐÁÒ³ 6 ÁÔÅÅÔàÁµÃ l 㪠ä¿àÅÕÂ é § +2.4 ¶Ö§ +3.0V ¨Ò¡ l ãË ¼ÅÅѾ¸ à» ¹áç´Ñ¹ä¿µÃ§ â´Â¤ Ò¨ÐÁÒ¡ËÃ×Í áºµàµÍÃÕè AA 2 ¡ ͹ ¹ Í¡碹Öé ÍÂÙ¡ ºÑ ¤ÇÒÁࢠÁ¢Í§áʧÍÔ¹¿ÃÒàô·Õäè ´ ÃºÑ lÊ §¢ ÍÁÙÅ͹ءÃÁ´ ÇÂÍѵÃҺʹ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ GP2D120 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô l 㪠§Ò¹¡Ñºá¼§Ç§¨ÃâÁ´ÙÅÃѺáʧ (Infrared distance sensor) ÍÔ¹¿ÃÒàô 38kHz l ÇÑ´ÃÐÂзҧã¹Â Ò¹ 4 ¶Ö§ 30 ૹµÔàÁµÃ l ãË ¼ÅÅѾ¸ à» ¹áç´Ñ¹ä¿µÃ§á»Ã¼¡¼Ñ¹¡ÑºÃÐÂÐ ·Ò§·ÕèÇÑ´ä´ ¤×Í ãË áç´Ñ¹ä¿µÃ§àÍÒµ ¾ØµÅ´Å§àÁ×èÍ ÃÐÂзҧ·Õµè ÃǨ¨Ñº¨Ò¡Çѵ¶ØÍÂÙä ¡Å

ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧ ZX-09 ἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áºº ÍÔ¹¿ÃÒàô 38kHz â»à·¹ªÔâÍÁÔàµÍà (Potentiometer) (38kHz IR module)

㪠¡Òí ˹´áç´Ñ¹µÒÁ¡ÒÃËÁع᡹ l 㪠µÃǨ¨ÑºáʧÍÔ¹¿ÃÒàô·Õ¼ è ÊÁ l ãË àÍÒµ ¾µ Ø 2 Ẻ¤×Í áç´Ñ¹ÁÒ¡¢Ö¹é àÁ×Íè ËÁع ÊÑ­­Ò³¾ÒË ¤ÇÒÁ¶Õè 38 kHz ·Ç¹à¢çÁ¹ÒÌ ¡ÒËÃ×Í µÒÁà¢çÁ¹ÒÌ ¡Ò l

¹Í¡¨Ò¡µÑǵÃǨ¨Ñº·ÕÁè ãÕ ¹ªØ´ Robo-51 áÅ Ç Ëع ¹µ Robo-51 ÂѧÊÒÁÒöµÔ´µ ͡ѺµÑǵÃǨ¨Ñºä´ Í¡Õ ËÅÒ¡ËÅÒÂÍÒ·Ô SRF05 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ǤÅ×¹è ÍÑŵà Ò⫹ԡ, CMPS03 âÁ´ÙÅà¢çÁ·ÔÈÍÔàÅç¡·ÃÍ¹Ô¡Ê , SHT11 µÑǵÃǨ¨Ñº¤ÇÒÁª×¹é , MEMSIC2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § 2 ᡹, ZX-TILT âÁ´ÙŵÃǨ¨Ñº¤ÇÒÁàÍÕ§, ZX-SOUND âÁ´ÙŵÃǨ¨ÑºàÊÕ§ ÏÅÏ ´Ù¢Í ÁÙÅà¾ÔÁè àµÔÁ·Õè www.inex.co.th

ÃÙ»·Õè 5-1 ¢ ÍÁÙÅÍ ҧÊÃØ»¢Í§á¼§Ç§¨ÃµÃǨ¨Ñºáººµ Ò§æ ·Õãè ª 㹪شËع ¹µ Robo-51 áÅÐÍØ»¡Ã³ ·Õàè ¡ÕÂè Ç¢ ͧ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 83

+V LED1 R1 510

R2 10k DATA

S1 GND

ÃÙ»·Õè 5-2 ǧ¨Ã¢Í§á¼§Ç§¨ÃÊÇÔµª ·ãÕè ª ã¹Ëع ¹µ Robo-51

¡Ô¨¡ÃÃÁ·Õè 9

ÃѺ¤ ÒÊÑ­­Ò³´Ô¨ÔµÍŨҡἧǧ¨Ã ÊÇÔµª ¢Í§Ëع ¹µ Robo-51 A9.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A9-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act0901.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A9.2 µ ÍÊÒ¨ҡἧǧ¨ÃÊÇÔµª à¢ Ò·Õ¨è ´Ø µ Í P3.2 ¢Í§á¼§Ç§¨Ã¤Çº¤ØÁËع ¹µ Robo-51 A9.3 áÅ Ç·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ áÅ Ç·´Åͧ¡´ÊÇÔµª ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Input P3.2 Read ·Õºè Ã÷Ѵº¹ áÅÐáÊ´§Ê¶Ò¹ÐÍÔ¹¾Øµ´Ô¨µÔ ÍÅ ( 0 ËÃ×Í 1 ) ·Õºè Ã÷ѴŠҧ àÁ×Íè äÁ Á¡Õ Òá´ÊÇÔµª ¨ÐÍ Ò¹¤ Òä´ à» ¹ 1 áÅÐà» ¹ 0 àÁ×Íè ÁÕ¡Òá´ÊÇÔµª


84 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A9-1 â»Ãá¡ÃÁ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª ¢Í§Ëع ¹µ Robo-51 /*—————————————————————————————————————*/ // Program : Reading digital input // Description : Reading digital signal from switch by polling method // Filename : act0901.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <delay.h> // Module function Delay sbit sw1 = P3^2; // Define variable for P3.2 void main(void) { sw1 = 1; // Write logic “1” for setting P3.2 to input lcd_init(); // LCD initialize lcd_putstr(line1,” Input P3.2 Read”); // Show “Input P3.2 Read” on LCD while(1) // Loop { inttolcd(0xC7,sw1,Dec); // Read P3.2 data to convert and send to // LCD for displaying on lower line } }

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ÊíÒËÃѺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õé¨Ðà» ¹¡ÒÃÍ Ò¹¤ Ò¡Òá´ÍÔ¹¾ØµÊÇÔµª ·Õèµ ÍࢠҡѺ P3.2 â´ÂǹÃͺ µÃǨÊͺËÅѧ¨Ò¡¹Ñ¹é ¨Ö§¹íÒ¤ Ò·ÕÍè Ò ¹ä´ «§Öè à» ¹µÑÇàÅ¢¨íҹǹàµçÁä»á»Å§ãË à» ¹ÃËÑÊáÍÊ¡Õàé ¾×Íè Ê §ä»áÊ´§¼Å¤ Ò Åͨԡ·ÕÍè Ò ¹ä´ ·ËÕè ¹ Ò¨ÍâÁ´ÙÅ LCD â´Âª ǧ¡´ÊÇÔµª ¨ÐÍ Ò¹¤ Òä´ à» ¹Åͨԡ 0 áµ ¶Ò ã¹¢³Ð·ÕÂè §Ñ äÁ Á¡Õ Òá´ Robo-51 ÊÇÔµª ¤Ò ·ÕÍè Ò ¹ä´ ¨Ðà» ¹Åͨԡ 1

¡Ô¨¡ÃÃÁ·Õè 10

ÃѺ¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍŨҡἧǧ¨ÃÊÇÔµª ¢Í§Ëع ¹µ Robo-51 â´Â㪠¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ A10.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A10-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1001.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A10.2 µ ÍÊÒ¨ҡἧǧ¨ÃÊÇÔµª à¢ Ò·Õ¨è ´Ø µ Í P3.2 ¢Í§á¼§Ç§¨Ã¤Çº¤ØÁËع ¹µ Robo-51 A10.3 áÅ Ç·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ áÅ Ç·´Åͧ¡´ÊÇÔµª ·Õâè Á´ÙÅ LCD áÊ´§¤ Ò¡ÒùѺà¾ÔÁè ¤ Ò¢Ö¹é Í ҧµ Íà¹×Íè § áÅзء¤ÃÑ§é ·Õ¡è ´ÊÇÔµª ¤ Ңͧ¡ÒùѺ¨Ð¶Ù¡à¤ÅÕÂà ໠¹ 0 áÅ ÇàÃÔÁè µ ¹¹Ñº¤ ÒãËÁ ¡ÒÃÍ Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ´Ô¨µÔ ÍŨÐ㪠¡ÒÃà¢Õ¹â»Ãá¡ÃÁµÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹᷹͡ÇÔ¸¡Õ ÒÃǹµÃǨÊͺã¹áºº·Õãè ª 㹡Ԩ¡ÃÃÁ·Õè 9


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 85

â»Ãá¡ÃÁ·Õè A10-1 â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍÅÍÔ¹¾Øµ¨Ò¡á¼§Ç§¨ÃÊÇÔµª ¢Í§Ëع ¹µ Robo-51 â´Â㪠¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ /*—————————————————————————————————————*/ // Program : Reading digital input // Description : Reading digital signal from switch input board by interrupt // Filename : act1001.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <delay.h> // Module function Delay unsigned int count=0; // Declare count variable void service_external0(void) interrupt 0 // External interrupt service routine { lcd_clear(); // Clear display lcd_putstr(line1,” Count:”); // Show “Count” message count = 0; // Clear counter } void main(void) { EX0 = 1; IT0 = 1; EA = 1; lcd_init(); lcd_putstr(line1,” Count:”); while(1) { inttolcd(0x88,count,Dec); delay_ms(100); count++; }

// // // // // //

Enable external interrupt on P3.2 (EX0) Select active edge of input signal at P3.2 Enable global interrupt LCD initialize Show “ Count:” Loop

// Show counter on LCD // Delay 0.1second // Increase counter

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ÊíÒËÃѺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õ¨é Ðà» ¹¡ÒùѺ¤ Ò¢Ö¹é ¨Ò¡ 0 ¶Ö§ 65,535 ·Ø¡æ 0.1 ÇÔ¹Ò·Õâ´Â»ÃÐÁÒ³ ¨Ò¡¹Ñ¹é à¡çº¤ Ò¡ÒùѺäÇ ·µÕè ÇÑ á»Ã count áŠǹíÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD áµ ¶Ò ÁÕ¡Òá´ÊÇÔµª ·µÕè Í à¢ Ò¡Ñº P3.2 ¨Ð·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ â´Â㹵͹µ ¹¢Í§â»Ãá¡ÃÁä´ ¡Òí ˹´¤ Òà» ´ãª §Ò¹ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ ÀÒ¹͡·Õ¢è Ò P3.2 (EX0) äÇ áÅ Ç «Ö§è ¨Ð·íÒãË â»Ãá¡ÃÁà¡Ô´¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ â´Ââ»Ãá¡ÃÁ¨Ð¡ÃÐâ´´ ä»·íÒ§Ò¹ã¹Ê ǹ¢Í§â»Ãá¡ÃÁºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍÔ¹¾ØµÀÒ¹͡ã¹Ê ǹ¢Í§ service_external0 «Ö§è ÁÕÅÒí ´Ñº ¢Í§àÇ¡àµÍà ÍÔ¹àµÍà ÃÑ»µ à» ¹ 0 (¨Ò¡¡ÒáíÒ˹´ÅíҴѺµ Í· Ò´ ǤՠàÇÔà ´à» ¹ interrupt 0) áÅÐÀÒÂã¹ â»Ãá¡ÃÁµÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ ¹¨Õé ÐàÃÔÁè µ ¹´ ǤíÒÊÑ§è ¡ÒÃà¤ÅÕÂà ˹ Ò¨ÍâÁ´ÙÅ LCD áÅ Çà¢Õ¹¢ ͤÇÒÁ Count: ãËÁ Í¡Õ ¤Ãѧé áŠǵÒÁ´ Ç¡ÒÃà¤ÅÕÂà ¤Ò ¡ÒùѺãË à» ¹ 0 (count = 0) à¾×Íè àÃÔÁè µ ¹¡ÒùѺãËÁ áÅÐàÁ×Íè â»Ãá¡ÃÁ ¡ÃÐâ´´¡ÅѺ价íÒ§Ò¹·Õâè »Ãá¡ÃÁËÅÑ¡¡ç¨Ð·íÒ¡ÒùѺ¤ Ò¢Ö¹é àËÁ×͹»¡µÔ ¨¹¡Ç Ò¨ÐÁÕ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ ¹Í¡ ¨Ö§¨ÐÁÕ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ Í¡Õ ¤Ãѧé ˹֧è ǹ·íҧҹઠ¹¹Õäé »µÅÍ´ Robo-51


86 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

5.2 ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 ã¹Ëع ¹µ Robo-51 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 à» ¹µÑÇ»ÃÐÁÇżŠ«Ö§è ÀÒÂã¹ÁÕ âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµ ¨íҹǹ 8 ª ͧ â´ÂÍÔ¹¾ØµÍйÒÅÍ¡ ¢Í§ T89C51AC2 ÊÒÁÒöÃѺáç´Ñ¹ä¿µÃ§ä´ ÊاÊØ´ 2.5V ¢ ÍÁÙÅ´Ô¨ÔµÍÅ·Õèä´ ¨Ò¡¡ÒÃá»Å§¨ÐÁÕ¤ Ò ÍÂÙã ¹ª ǧ 0 ¶Ö§ 1,023 ÃÇÁ 1,024 ¤ Ò (ä´ ¨Ò¡ 210 = 1024 ¤ Ò) «Ö§è ¡ç¶Í× Ç ÒÁÕ¤ÇÒÁÅÐàÍÕ´ÁÒ¡à¾Õ§¾Í ÊíÒËÃѺËع ¹µ Robo-51 ÁÕªÍ §ÍÔ¹¾ØµÃѺÊÑ­­Ò³ÍйÒÅÍ¡ 6 ª ͧ «Ö§è áµ ÅЪ ͧµ ͵ç¡Ñº ¢Ò¾Íà µ¢Í§ T89C51AC2 ´Ñ§¹Õé ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 0 1 2 3 4 5

¢Ò¾Íà µ P1.0 P1.1 P1.2 P1.3 P1.4 P1.5

ÍÔ¹¾ØµÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 ÊÒÁÒöÃѺáç´Ñ¹ä¿µÃ§ã¹ª ǧ 0-5V à˵ؼŷÕÃè ºÑ ä´ ÊÙ§¶Ö§ +5V ·Ñ駷ÕèµÑÇ T89C51AC2 ÊÒÁÒöÃÑºä´ à¾Õ§ 2.5V ¤×Í ÁÕǧ¨ÃÅ´·Í¹áç´Ñ¹µ ÍäÇ ·Õè ÍÔ¹¾ØµÍйÒÅÍ¡·Ø¡ª ͧ à¾×Íè »ÃѺáç´Ñ¹¨Ò¡ÀÒ¹͡ 0-5V ÁÒà» ¹ 0-2.5V ¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§ Vin (áç´Ñ¹ÍÔ¹¾ØµÍйÒÅÍ¡) ¡Ñº¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ä´ ¨Ò¡ª ͧã´æ ÊÒÁÒö¹íÒÁÒà¢Õ¹໠¹ÊÁ¡ÒÃä´ ´§Ñ ¹Õé Vin = A ×

5 1023

㹡ÒÃ㪠§Ò¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¨íÒà» ¹¨Ðµ ͧ¡íÒ˹´¡Ò÷íÒ§Ò¹¼ Ò¹ ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧÍÂÙ ËÅÒµÑÇ·Õè¨Ðä´ á¹Ð¹íÒã¹ËÑÇ¢ ͵ Íä»

5.2.1 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧ T89C51AC2 5.2.1.1 ADCF ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁÍÔ¹¾ØµÍйÒÅÍ¡ ÁÕáÍ´à´ÃÊÍÂÙ· Õè F6H 㪠¤Çº¤ØÁ¡ÒÃà» ´ãª §Ò¹ª ͧÍÔ¹¾ØµÍйÒÅÍ¡¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧ T89C51AC2 ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé

ºÔµ 7 CH7

ºÔµ 6 CH6

ºÔµ 5 CH5

ºÔµ 4 CH4

ºÔµ 3 CH3

ºÔµ 2 CH2

ºÔµ 1 CH1

ºÔµ 0 CH0

CH 7 - CH 0 (ºÔµ 7-0) : à» ¹ºÔµ¤Çº¤ØÁãË à» ´¡ÒÃ㪠§Ò¹¢Í§ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 0 ¶Ö§ 7 ·íÒ§Ò¹·ÕÅè ͨԡ 1


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 87

5.2.1.2 ADCON ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè F3H ÃÒÂÅÐàÍÕ´¢Í§ºÔµµ Ò§æ ã¹ÃÕ¨ÊÔ àµÍà Á´Õ §Ñ ¹Õé

ºÔµ 7 -

ºÔµ 6

PSIDLE

ºÔµ 5

ADEN

ºÔµ 4

ADEOC

ºÔµ 3

ADSST

ºÔµ 2

SCH2

ºÔµ 1

SCH1

ºÔµ 0

SCH0

PSIDLE (ºÔµ 6) : 㪠¡Òí ˹´ãË âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅãË à¢ ÒÊÙÊ ÀÒÇÐÇ Ò§ËÃ×ÍäÍà´ÔÅ (idle) ·íÒ§Ò¹·ÕÅè ͨԡ 1 ADEN (ºÔµ 5) :

㪠àÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 0 - ´ÔÊàÍàºÔÅËÃ×Í» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 1 - àÍç¹àÍàºÔÅËÃ×Íà» ´¡ÒÃ㪠§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ

ADEOC (ºÔµ 4) : ãª á ¨ § ¤ÇÒÁ¾Ã Í Á㹡ÒÃÍ Ò ¹¤ Ò ÍйÒÅÍ¡¢Í§âÁ´Ù Å á»Å§ÊÑ ­ ­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅ ¶Ù¡à«µâ´ÂÎÒà ´áÇà ᵠÊÒÁÒöà¤ÅÕÂÃ ä´ ´Ç «Íà ¿áÇà 0 - à» ¹¡ÒÃᨠ§Ç Ò ¢³Ð¹Õâé Á´ÙÅá»Å§ÊÑ­­Ò³ÂѧäÁ ¾Ã ÍÁÍ Ò¹¤ Ò 1 - à» ¹¡ÒÃᨠ§Ç Ò ¢³Ð¹Õâé Á´ÙÅá»Å§ÊÑ­­Ò³¾Ã ÍÁÍ Ò¹¤ Ò ºÔµ¹Õé¨Ð૵â´ÂÍѵâ¹ÁѵÔàÁ×èÍâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÍžà ÍÁÊíÒËÃѺ Í Ò¹¤ Ò àÁ×Íè µ ͧ¡ÒÃÍ Ò¹¤ Ò·Õäè ´ ¨Ò¡¡ÒÃá»Å§¨Ðµ ͧà¤ÅÕÂà ºµÔ ¹Õ¡é Í ¹Í Ò¹¤ Ò´ Ç ADSST(ºÔµ 3) :

à» ¹ºÔµ¤Çº¤ØÁ¡ÒÃàÃÔÁè µ ¹á»Å§ÊÑ­­Ò³¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ·íÒ§Ò¹·ÕÅè ͨԡ 1 àÁ×Íè á»Å§ÊÑ­­Ò³àÊÃç¨ ºÔµ¹Õ¨é Ðà¤ÅÕÂà â´ÂÍѵâ¹ÁѵÔ

SCH2:0 (ºÔµ 2-0) : 㪠¡Òí ˹´ª ͧÊÑ­­Ò³ÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò ÁÕ¢Í ÁÙÅâ´ÂÊÃØ»´Ñ§¹Õé SCH2

SCH1

SCH0

ª ͧÍÔ¹¾ØµÍйÒÅÍ¡ ·Õàè Å×Í¡á»Å§ÊÑ­­Ò³

0

0

0

AN0

0

0

1

AN1

0

1

0

AN2

0

1

1

AN3

1

0

0

AN4

1

0

1

AN5

1

1

0

AN6

1

1

1

AN7


88 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

5.2.1.3 IEN1 ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ã¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ÁÕ¢¹Ò´ 8 ºÔµ áÍ´à´ÃÊÍÂÙ· Õè E8H ÁÕ㪠§Ò¹à¾Õ§ 1 ºÔµ¤×Í EADC (ºÔµ 1) à» ¹ºÔµ¤Çº¤ØÁ¡Òà µÍºÊ¹Í§ÍÔ¹àµÍà ÃÑ»µ ÍѹÁÒ¨Ò¡ºÔµá¿Å¡ ADEOC ૵àÁ×èÍ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡ä»à» ¹ ´Ô¨ÔµÍÅàÊÃç¨ÊÔé¹Å§ ËÒ¡µ ͧ¡ÒÃàÍç¹àÍàºÔÅ¡ÒõͺʹͧÍÔ¹àµÍà ÃÑ»µ à¹×èͧ¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡ à» ¹´Ô¨ÔµÍÅ·íÒ§Ò¹àÊÃç¨ÊÔé¹Å§ µ ͧ૵ºÔµ¹ÕéãË à» ¹ 1 ¨Ð·íÒãË â»Ãá¡ÃÁ¡ÃÐâ´´ä»ÂѧàÇ¡àµÍà ÍÔ¹àµÍÃ Ã»Ñ µ ·áÕè Í´à´ÃÊ 0043H àÁ×Íè ÁÕ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¡Ô´¢Ö¹é ÁÕËÁÒÂàÅ¢ÅíҴѺÍÔ¹àµÍÃ Ã»Ñ µ à» ¹ 8 àÁ×Íè à¢Õ¹â»Ãá¡ÃÁµÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ ´Ç ÂÀÒÉÒ C

5.2.1.4 ADDH áÅÐ ADDL ÃÕ¨ÊÔ àµÍÃà¡çº¢ ÍÁÙŨҡ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ÁÕáÍ´à´ÃÊà» ¹ F5H ÊíÒËÃѺ ADDH áÅÐ F4H ÊíÒËÃѺ ADDL â´Â ÃÕ¨ÊÔ àµÍà ADDH 㪠à¡çº¢ ÍÁÙÅ 8 ºÔµº¹ (ºÔµ 9 ¶Ö§ 2) ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ ÃÕ¨ÊÔ àµÍà ADDL 㪠à¡çº¢ ÍÁÙÅ 2 ºÔµÅ Ò§ (ºÔµ 1 ¶Ö§ 0) ·Õäè ´ ¨Ò¡¡ÒÃá»Å§

5.2.2 ¡ÒÃÍ Ò¹¢ ÍÁÙÅ·Õäè ´ ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 5.2.2.1 ¡ÒÃÍ Ò¹¤ ÒẺǹµÃǨÊͺá¿Å¡

à¹×èͧ¨Ò¡ÃÕ¨ÔÊàµÍà ·Õè¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŹÑé¹ Ê Ç¹ãË­ äÁ ÊÒÁÒÃ¶à¢ Ò¶Ö§ä´ ã¹ÃдѺºÔµ ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡ÒÃ૵ËÃ×Íà¤ÅÕÂà ºµÔ ã´æ ¨Ö§¨íÒà» ¹µ ͧ㪠¡ÒáÃзíÒ·Ò§Åͨԡ «Ö§è µ ͧÃÐÁÑ´ÃÐÇѧ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÁÒ¡¢Ö¹é ¡ÒÃÍ Ò¹¢ ÍÁØÅ·Õèä´ ¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅã¹áººÇ¹µÃǨÊͺ á¿Å¡¹Ñé¹ÊÒÁÒöÊÃػ໠¹¢Ñé¹µÍ¹ä´ ´Ñ§¹Õé (1) à» ´¡ÒÃ㪠§Ò¹ª ͧá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ·Õµè Í §¡ÒÃ㪠§Ò¹ â´Â¡ÒáíÒ˹´ ¤ Ò·ÕÃè ¨Õ ÊÔ àµÍà ADCF à¾×Íè ¡íÒ˹´¤ ÒºÔµ CH 7- CH 0 ´Ñ§µÑÇÍ ҧ ADCF = 0x01; ADCF = 0x03; ADCF = 0x84; ADCF = 0xFF;

// à» ¹¡ÒÃà» ´ª ͧ AN0 ãË Á¡Õ ÒÃ㪠§Ò¹ä´ // à» ¹¡ÒÃà» ´ª ͧ AN0 áÅÐ AN1 ãË Á¡Õ ÒÃ㪠§Ò¹ä´ // à» ¹¡ÒÃà» ´ª ͧ AN7 áÅÐ AN2 ãË Á¡Õ ÒÃ㪠§Ò¹ä´ // à» ¹¡ÒÃà» ´ª ͧ AN7-AN0(·Ø¡ª ͧ)ãË Á¡Õ ÒÃ㪠§Ò¹ä´

(2) ૵ºÔµ ADEN à¾×èÍàÍç¹àÍàºÔÅ¡ÒÃ㪠§Ò¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ â´Â ADEN à» ¹ºÔµ 5 ¢Í§ÃÕ¨ÊÔ àµÍà ADCON â´Âà¢Õ¹¤íÒÊѧè ÀÒÉÒ C ä´ à» ¹ ADCON = 0x20;


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 89

(3) àÅ×Í¡ª ͧÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò â´Â¡íÒ˹´·Õºè µÔ SCH2:SCH0 ¢Í§ÃÕ¨ÊÔ àµÍà ADCON ÊÒÁÒöà¢Õ¹¤íÒÊѧè ÀÒÉÒ C ä´ à» ¹ ADCON &= 0xF8; ADCON |= channel;

// à¤ÅÕÂà ¤Ò SCH2:SCH0 ãË à» ¹ 0 ·Ø¡ºÔµ // ¡íÒ˹´ª ͧâ´Â¤ Ңͧ channel ÁÕ¤Ò 0 ¶Ö§ 7

¶ Òµ ͧ¡ÒÃàÅ×Í¡Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ AN3 ¨Ðµ ͧà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ´Ñ§¹Õé ADCON &= 0xF8; ADCON |= 3;

(4) ૵ºÔµ ADSST à¾×Íè ãË âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹ â´Â ADSST à» ¹ºÔµ 3 ¢Í§ÃÕ¨ÊÔ àµÍà ADCON áÅÐàÁ×Íè ¡ÒáÒÃá»Å§¤ ÒàÊÃç¨ÊÔ¹é ºÔµ ADSST ¨Ð¶Ù¡à¤ÅÕÂà â´ÂÍѵâ¹ÁÑµÔ ÊÒÁÒöà¢Õ¹¤íÒÊѧè ÀÒÉÒ C ä´ à» ¹ ADCON |= 0x08;

(5) àÁ×Íè ¼ Ò¹¢Ñ¹é µÍ¹·Õè (4) ÁÒáÅ ÇâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŨе ͧ㪠àÇÅÒª ǧ ˹֧è 㹡Ò÷íÒ§Ò¹à¾×Íè á»Å§¤ ÒÍйÒÅÍ¡ãË à» ¹¤ Ò´Ô¨µÔ ÍÅ áÅÐà¡çº¤ Ò·Õáè »Å§ä´ äÇ ·ÃÕè ¨Õ ÊÔ àµÍà ADDH áÅÐ ADDL àÁ×Íè ¡ÒÃá»Å§ÊÑ­­Ò³àÊÃç¨ÊÔ¹é ŧ ºÔµá¿Å¡ ADEOC (ºÔµ 4 ¢Í§ÃÕ¨ÊÔ àµÍà ADCON) ¨Ð¶Ù¡ ૵â´ÂÍѵâ¹ÁÑµÔ ´Ñ§¹Ñ¹é ËÅѧ¨Ò¡·ÕÊè §Ñè ãË àÃÔÁè µ ¹¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅáÅ Ç ¤ÇÃà¢Õ¹ â»Ãá¡ÃÁµÃǨÊͺºÔµá¿Å¡ ADEOC Ç Ò¶Ù¡à«µáÅ ÇËÃ×ÍÂѧ ¶ Ҷ١૵áÅ Ç áÊ´§Ç Ò ÊÒÁÒöàÃÕÂ¡Í Ò¹ ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³¢Í§ª ͧÍÔ¹¾ØµÍйÒÅÍ¡·Õàè Å×Í¡äÇ ä´ áÅ Ç «Ö§è ¨Ðµ ͧà¤ÅÕÂà ºÔµá¿Å¡ ADEOC ¡ Í¹Í Ò¹¤ ÒàÊÁÍ áµ ¶Ò ºÔµ ADEOC Âѧ໠¹ 0 ¨Ðµ ͧǹÃ͵ Íä» ÊÒÁÒöà¢Õ¹ ¤íÒÊѧè ÀÒÉÒ C ä´ à» ¹ // Ãͨ¹¡ÃÐ·Ñ§è ºÔµá¿Å¡ ADEOC ¶Ù¡à«µ // à¤ÅÕÂà ºµÔ á¿Å¡ ADEOC ¡ Í¹Í Ò¹¤ ÒÍйÒÅÍ¡

while((ADCON & 0x10) != 0x10); ADCON &= 0xEF;

(6) Í Ò¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ «Ö§è ÁÕ¢¹Ò´ 10 ºÔµ¨Ò¡ÃÕ¨ÊÔ àµÍà ADDH áÅÐ ADDL â´Â ¢ ÍÁÙÅ·ÕÍè ÂÙã ¹ÃÕ¨ÊÔ àµÍà ADDH à» ¹¢ ÍÁÙÅ 8 ºÔµº¹ ¹Ñ¹è ¤×ͺԵ 9 ¶Ö§ºÔµ 2 ¢ ÍÁÙÅ·ÕÍè ÂÙã ¹ÃÕ¨ÊÔ àµÍà ADDL ¤×Í¢ ÍÁÙÅ 2 ºÔµÅ Ò§ ¤×ͺԵ 1 áÅÐ 0 㹡ÒÃÍ Ò¹¢ ÍÁÙÅ ¶ Òµ ͧ¡ÒÃÍ Ò¹·Ñ§é 10 ºÔµ µÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¤ Ò¤ÇÃà» ¹ª¹Ô´¨íҹǹàµçÁ¢¹Ò´ 2 亵 ËÃ×Í integer ¹Ñ¹è àͧ ÊÒÁÒöà¢Õ¹¤íÒÊѧè ÀÒÉÒ C ä´ à» ¹ // »ÃСÒȵÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ (ADDH<<2) + ADDL; // Í Ò¹¤ ÒÁÒà¡çº·Õè dat

int data; data =


90 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

5.2.2.2 ¡ÒÃÍ Ò¹¤ ÒẺÍÔ¹àµÍÃ Ã»Ñ µ ÊÒÁÒöÊÃػ໠¹¢Ñé¹µÍ¹ä´ ´Ñ§¹Õé (1) à» ´¡ÒÃ㪠§Ò¹ª ͧá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ·Õµè Í §¡Òà â´Â¡ÒáíÒ˹´¤ Ò·ÕÃè ¨Õ Ô ÊàµÍà ADCF à¾×Íè ¡íÒ˹´¤ ÒºÔµ CH7- CH0 (2) ૵ºÔµ ADEN à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃ㪠§Ò¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ (3) àÍç¹àÍàºÔÅ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ÃкºáÅШҡºÔµá¿Å¡ ADEOC àÁ×Íè ¡ÒÃá»Å§ ÊÑ­­Ò³àÊÃç¨ÊÔ¹é â´Â¡ÒÃ૵ºÔµ EA áÅÐ EADC «Ö§è ÊÒÁÒÃ¶à¢ Ò¶Ö§ä´ ã¹ÃдѺºÔµ ÊÒÁÒöà¢Õ¹¤íÒ Êѧè ÀÒÉÒ C ä´ à» ¹ EA =1;

// àÅ×Í¡ãË ÃкºµÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ

EADC = 1;

// àÅ×Í¡ãË µÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ à¹×Íè §¨Ò¡ºÔµ ADEOC ¶Ù¡à«µ

(4) àÅ×Í¡ª ͧÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Í §¡Òà â´Â¡íÒ˹´·Õºè µÔ SCH2:SCH0 ¢Í§ÃÕ¨ÊÔ àµÍà ADCON (5) ૵ºÔµ ADSST à¾×Íè ãË âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅàÃÔÁè ·íÒ§Ò¹ (6) ËÅѧ¨Ò¡¹ÕéâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŵ ͧ㪠àÇÅÒª ǧ˹Öè§ã¹¡ÒÃá»Å§ ÊÑ­­Ò³ãË à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ áÅÐà¡çº¤ Ò·Õäè ´ äÇ ·ÃÕè ¨Õ ÊÔ àµÍà ADDH áÅÐ ADDL àÁ×Íè ¡ÒÃá»Å§ÊÑ­­Ò³ àÊÃç¨ÊÔé¹Å§¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ à¹×èͧ¨Ò¡ºÔµá¿Å¡ ADEOC ·íÒãË â»Ãá¡ÃÁ¡ÃÐâ´´ä»ÂѧàÇ¡ àµÍà ÍÔ¹àµÍà ÃÑ»µ ·ÕèáÍ´à´ÃÊ 0043H (¡íÒ˹´ËÁÒÂàÅ¢ÅíҴѺÍÔ¹àµÍà ÃÑ»µ à» ¹ 8) 㹡ÒÃà¢Õ¹ â»Ãá¡ÃÁµÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ ã¹ÀÒÉÒ C ¹Ñ¹é ¨Ðµ ͧà¢Õ¹¿ §¡ ª¹Ñè à¾×Íè µÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ºÔµ ADEOC â´Â¤íÒÊÑ觷ÕèÍÂÙ ÀÒÂ㹨Ðà» ¹¡ÒÃà¤ÅÕÂà ºÔµ ADEOC áÅÐÍ Ò¹¤ Ò¢ ÍÁÙÅ·Õèä´ ¨Ò¡¡Òà á»Å§ÊÑ­­Ò³ «Ö§è ÁÕ¢¹Ò´ 10 ºÔµ ´Ñ§µÑÇÍ ҧâ»Ãá¡ÃÁµÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ µÍ 仹Õé int adc_dat; void ADC_service() interrupt 8

// »ÃСÒȵÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¤ ÒÍйÒÅÍ¡·Õ¶è ¡Ù á»Å§áÅ Ç // ËÁÒÂàÅ¢ÅíҴѺÍÔ¹àµÍÃ Ã»Ñ µ à» ¹ 8

{ EADC = 0;

ADCON &= 0xEF; adc_dat = (ADDH<<2)+(ADDL); ADCON |= 0x48; EADC = 1; }

// » ´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¹×Íè §¨Ò¡¤ ÒºÔµ ADEOC ªÑÇè ¤ÃÒÇ // à¾×Íè ·íÒ§Ò¹¤íÒÊѧè Í×¹è æ // à¤ÅÕÂà ºµÔ ADEOC // Í Ò¹¤ ÒÁÒà¡çº·Õè adc_dat // ૵ºÔµ ADEN áÅÐ ADSST à¾×Íè á»Å§¤ Ò㹤ÃÑ§é µ Íä» // à» ´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¾×Íè ¡ÒÃá»Å§¤ Ò¤ÃÑ§é µ Íä»


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51

l 91

5.2.3 ¿ §¡ ª¹Ñè Í Ò¹¢ ÍÁÙŨҡâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¨Ò¡¢Ñ鹵͹â´ÂÊÃØ»¢Í§¡ÒÃÍ Ò¹¢ ÍÁÙŨҡâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ÊÒÁÒö¹í Ò ÁÒ㪠㠹¡ÒÃÊÃ Ò §¿ § ¡ ªÑè ¹ ã¹â»Ãá¡ÃÁÀÒÉÒ C áÅ Ç ¨Ñ ´ à¡ç º à» ¹ ä¿Å ä źÃÒÃÕ ·Õè ª×è Í adc_robo51.h ´Ñ§ÁÕÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁáÊ´§ã¹â»Ãá¡ÃÁ·Õè P5-1 ãË ·Òí ¡ÒÃà¢Õ¹â»Ãá¡ÃÁâ´Â 㪠RIDE (ã¹·Õ¹è ãÕé ª ª´Ø «Í¿µ áÇà ¾² Ñ ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 µÑǹÕ)é áŠǺѹ·Ö¡à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .h áŠǨѴà¡çºãË ÍÂÙ· âÕè ¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ¾Ñ²¹ÒËÃ×Í·Õè C:\RIDE\INC â»Ãá¡ÃÁ·Õè P5-1 ä¿Å äźÃÒÃÕ adc_robo51.h ·ÕÊè à ҧ¢Ö¹é ÊíÒËÃѺ㪠§Ò¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡ à» ¹´Ô¨µÔ ÍÅã¹Ëع ¹µ Robo-51 /*—————————————————————————————————————*/ // Program : Read Analog input // Description : Read Analog input function // Filename : adc_robo51.h // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ int analog(char channel) { int adc_dat = 0; // For keep input analog data ADCF = 0x3F; // Setup config for adc bit input convert(port1) (P1.0-P1.5) ADCON = 0x20; // Enable ADC ADCON &= 0xF8; // clear SCH bit (SCH 0:1:2 = 0) ADCON |= channel; // select convert/read by channel config. ADCON |= 0x08; while((ADCON & 0x10)!= 0x10); ADCON &= 0xEF; adc_dat = (ADDH<<2)+(ADDL); return(adc_dat);

// // // // //

start convert (set bit ADSST) wait for EOF to set clear bit ADEOC read adc data and convert Return result of ADC 10 bit

}

µÑÇÍ ҧ·Õè 5-1 ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè analog à¾×Íè Í Ò¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡ int dat;

// »ÃСÒõÑÇá»ÃẺ integer à¾×Íè ¹íÒÁÒÃѺ¤ Ò·ÕÍè Ò ¹¨Ò¡¿ §¡ ª¹Ñè analog

data = analog(2);

// Í Ò¹¤ ÒÍйÒÅÍ¡ª ͧ·Õè 2(µÃ§¡Ñº¢Ò P1.2) áÅ Çà¡çºäÇ ·µÕè ÇÑ á»Ã dat


92 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 11

·´Êͺ¡ÒÃÃѺÊÑ­­Ò³ÍйÒÅÍ¡ A11.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A11-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1101.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A11.2 µ ÍÊÒ¨ҡἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ (ZX-POTH) à¢ Ò·Õ¨è ´Ø µ Í AN0 ¢Í§á¼§Ç§¨Ã RBX-51AC2 plus A11.3 Ãѹâ»Ãá¡ÃÁ ·´ÅͧËÁع᡹¢Í§µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD º¹á¼§Ç§¨Ã RBX-51AC2 plus ¤ Ңͧ¡ÒÃá»Å§ÊÑ­­Ò³¨Ðà»ÅÕè¹á»Å§ä»µÒÁ¡ÒÃËÁع᡹¢Í§µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ â´ÂÁÕ¤ ÒÍÂÙ ÃÐËÇ Ò§ 0 ¶Ö§ 1,023 Í ҧäáçµÒÁ ¤ ÒÊÙ§ÊØ´ÍÒ¨äÁ 㪠1,023 ·Ñ§é ¹Õ¢é ¹Öé ÍÂÙ¡ ºÑ ÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕãè ¹¢³Ð ·´Êͺ´ Ç áÅж ÒËҡẵàµÍÃÕÁè ÃÕ Ð´Ñºáç´Ñ¹µèÒí ¨ÐÊ §¼ÅãË ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡áÅСÃкǹ¡Òà á»Å§ÊÑ­­Ò³ÁÕ¤ÇÒÁ¤ÅÒ´à¤Å×è͹ÊÙ§

â»Ãá¡ÃÁ·Õè A11-1 â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 /*—————————————————————————————————————*/ // Program : Reading digital data from A/D convertion // Filename : act1101.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <delay.h> // Module function Delay #include <adc_robo51.h> // Module function analog to digital converter void main(void) { unsigned int val; // Declare analog data variable, integer type recommended lcd_init(); // Initial LCD module while(1) // Looping { lcd_putstr(line1,” Analog CH0 Read”); // Show title message val = analog(0); // Read digital data from conversion to variable inttolcd(0xC7,val,Dec); // Convert digital data to show on LCD display delay_ms(1000); // Delay 1 second lcd_clear(); } }

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õàé » ¹¡ÒÃÍ Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡ª ͧ AN0 ·Õµè Í à¢ Ò¡Ñºá¼§Ç§¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ â´ÂÍ Ò¹´ Ç ¿ §¡ ª¹Ñè analog â´ÂàÃÕÂ¡Í Ò¹ÁÒà¡çºäÇ ·µÕè ÇÑ á»Ã val ËÅѧ¨Ò¡¹Ñ¹é ¹íÒ¤ Ò·ÕÍè Ò ¹ä´ «§Öè à» ¹àÅ¢¨íҹǹàµçÁ int ä» á»Å§ãË à» ¹ÃËÑÊáÍÊ¡Õàé ¾×Íè Ê §ä»áÊ´§¼Å¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡·Õâè Á´ÙÅ LCD


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 93

º··Õè 6 Ëع ¹µ Robo-51 ¡Ñº¡ÒõÃǨ¨ÑºÇѵ¶Ø ẺäÁ ÊÁÑ ¼ÑÊ´ ÇÂáʧÍÔ¹¿ÃÒàô ¨Ò¡º··Õè 7 ·Õè¾Ñ²¹Ò¤ÇÒÁÊÒÁÒö¢Í§ËØ ¹Â¹µ Robo-51 ãË ÊÒÁÒöÃѺ¢ ÍÁÙŨҡÃÕâÁµ ¤Í¹â·ÃÅ ER-4 ·Õ¼è ÊÁÁҡѺáʧÍÔ¹¿ÃÒàôà¾×Íè ¹íÒÁÒ¡íÒ˹´ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õè ÁÒ¶Ö§º·¹Õ¹é Òí àÊ¹Í ¡Ò÷íÒ§Ò¹¢Í§ËØ ¹Â¹µ Robo-51 ¡ÑºâÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô à¾×èÍãË ËØ ¹Â¹µ ÊÒÁÒö µÃǨ¨ÑºÇѵ¶ØẺäÁ ÊÁÑ ¼ÑÊ (contact less) ÃÇÁ件֧ÊÒÁÒö¹íÒä»ãª 㹡Òä ¹ËÒÇѵ¶ØËÃ×ÍÊÔ§è ¡Õ´¢ÇÒ§ ä´ Íѹ໠¹¡ÒÃáÊ´§ãË àË繶֧ÈÑ¡ÂÀÒ¾¢Í§Ëع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã ¤Í¹â·ÃÅàÅÍÃ

6.1 ¤Ø³ÊÁºÑµ¢Ô ͧ GP2D120 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô 㪠¡ÒõÃǨ¨ÑºÃÐÂзҧ´ Ç¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô l ÇÑ´ÃÐÂÐ·Ò§ä´ 4 ¶Ö§ 30 ૹµÔàÁµÃ l ä¿àÅÕÂ é § 4.5 ¶Ö§ 5V ¡ÃÐáÊä¿¿ Ò 33 mA l ãË àÍÒµ ¾µ Ø à» ¹áç´Ñ¹ã¹Â Ò¹ 0.4 ¶Ö§ 2.4V ·Õäè ¿àÅÕÂé § +5V GP2D120 à» ¹âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧẺÍÔ¹¿ÃÒàôÁÕ¢Òµ Í㪠§Ò¹ 3 ¢Ò¤×Í ¢Òµ Íä¿àÅÕÂé § (Vcc), ¢Ò¡ÃÒÇ´ (GND) áÅТÒáç´Ñ¹àÍÒµ ¾µØ (Vout) ¡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ò¡ GP2D120 ¨Ðµ ͧÃÍ ãË ¾¹ ª ǧàµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ¢Í§âÁ´ÙÅ¡ ͹ «Ö§è 㪠àÇÅÒ»ÃÐÁÒ³ 32.7 ¶Ö§ 52.9 ÁÔÅÅÔÇ¹Ô Ò·Õ ´Ñ§¹Ñ¹é ã¹ ¡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ö§¤ÇÃÃÍãË ¾¹ ª ǧàÇÅҴѧ¡Å ÒÇ仡 ͹ ´Ñ§áÊ´§¢ ÍÁÙÅàº×Íé §µ ¹ã¹ÃÙ»·Õè 8-1 ¤ Òáç´Ñ¹àÍÒµ ¾µØ ¢Í§ GP2D120 ·ÕÃè ÐÂзҧ 30 ૹµÔàÁµÃ·Õäè ¿àÅÕÂé § +5V ÍÂÙã ¹ª ǧ 0.25 ¶Ö§ 0.55V â´Â¤ Ò¡ÅÒ§¤×Í 0.4V ª ǧ¢Í§¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹àÍÒµ ¾µØ ·ÕÃè ÐÂзҧ 4 ૹµÔàÁµÃ¤×Í 2.25V ±0.3V l


94 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

LED ÍÔ¹¿ÃÒàôµÑÇÊ §

MCS-51

¡ÃÒ¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ GP2D120

µÑÇÃѺáʧÍÔ¹¿ÃÒàô

áç´Ñ¹àÍÒµ ¾Øµ (V) 2.8

/2 ,

2.4 Vout GND

Vcc

2.0 1.6

ä¿àÅÕÂé §

1.2 38.3±9.6

¡ÒÃÇÑ´ÃÐÂÐË Ò§ áç´Ñ¹àÍÒµ ¾µØ

0.8

ÁÔÅÅÔÇ¹Ô Ò·Õ

0.4

ÇÑ´¤ÃÑ駷Õè 1

ÇÑ´¤ÃÑ駷Õè 2

äÁ á¹ ¹Í¹

ÇÑ´¤ÃÑ§é ·Õè n

àÍÒµ ¾µØ ¤ÃÑ§é ·Õè 1 àÍÒµ ¾µØ ¤ÃÑ§é ·Õè 2 5 ÁÔÅÅÔÇ¹Ô Ò·Õ

0

àÍÒµ ¾µØ ¤ÃÑ§é ·Õè n

0

4

8

12

16

20

24

28

ÃÐÂÐË Ò§¨Ò¡Çѵ¶Ø·ÕèµÃǨ¨Ñº (cm)

32

* 㪠¡ÃдÒÉà·Ò¢ÒÇÃع R-27 ¢Í§ Kodak «Ö§è ´ Ò¹¢ÒÇÁÕÍѵÃÒ¡ÒÃÊз ͹áʧ 90% à» ¹ Çѵ¶ØÊíÒËÃѺÊз ͹áʧà¾×èÍÇÑ´ÃÐÂзҧ

ÃÙ»·Õè 6-1 áÊ´§¡ÒèѴ¢Ò ä´ÍÐá¡ÃÁàÇÅҨѧËÇСÒ÷íÒ§Ò¹ áÅСÃÒ¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ GP2D120

6.2 ËÅÑ¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙŵÃǨÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô ¨ÐÊ §áʧÍÔ¹¿ÃÒàô¨Ò¡µÑÇÊ §ä»¡ÃзºÇѵ¶Ø¼Ò ¹àÅ¹Ê ¹Ù¹à¾×Íè â¿¡ÑÊáʧãË Á¤Õ ÇÒÁࢠÁáʧä»Âѧ¨Ø´ã´¨Ø´Ë¹Ö§è àÁ×Íè áʧ仡ÃзºÇѵ¶Ø¨Ðà¡Ô´¡ÒáÃÐà¨Ô§¢Í§ áʧä»ã¹·ÔÈ·Ò§µ Ò§ æ áÊ§Ê Ç¹Ë¹Ö§è ¨Ð¡ÃÐà¨Ô§ä»ÂѧÀÒ¤ÃѺ â´ÂÁÕàÅ¹Ê ÀÒ¤ÃѺ·íÒ˹ Ò·ÕÃè ÇÁáʧáÅÐ ¡íÒ˹´¨Ø´µ¡¡Ãзº áʧ¨Ð¶Ù¡Ê §¼ Ò¹ä»Âѧâ¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Òí ¹Ç¹ÁÒ¡·Õµè Í àÃÕ§µÑǡѹ໠¹Ê ǹ ÃѺáʧ ËÃ×ÍÍÐàÃÂ ÃºÑ áʧ µíÒá˹ §·Õáè ʧµ¡¡Ãзº¹ÕÊé ÒÁÒö¹íÒÁÒ¤íҹdzËÒÃÐÂзҧ (L) ¨Ò¡ÀÒ¤ Ê §ä»ÂѧÇѵ¶Øä´ â´Â㪠ʵ٠ÃËÒÊÒÁàËÅÕÂè Á¤Å Ò´ѧ¹Õé L F = A X

´Ñ§¹Ñ¹é ¤ Ò L ¨ÐÁÕ¤Ò à· Ò¡Ñº L=

F×A X

â´Â¤ Ò·ÕèÇÑ´ÃÐÂÐä´ ¨Ò¡â¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Ð¶Ù¡Ê §ä»Âѧǧ¨Ã»ÃÐÁÇżÅÊÑ­­Ò³¡ ͹¨Ð à»ÅÕÂè ¹¤ Òà» ¹ÃдѺáç´Ñ¹ «Ö§è ãË ¼Å¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹µÒÁÃÐÂзҧ·Õµè ÃǨÇÑ´ä´


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 95

Çѵ¶Ø

L A

F Ê Ç¹ÃѺáʧ

LED ÍÔ¹¿ÃÒàô µÑÇÊ § GP2D120

X

ÃÙ»·Õè 6-2 áÊ´§ÇÔ¸¡Õ ÒÃÇÑ´¤ ÒÃÐÂзҧ´ Ç¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô¢Í§âÁ´ÙÅ GP2D120

6.3 ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙŨҡ GP2D120 ´ ÇÂǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¤ Òáç´Ñ¹àÍÒµ ¾Øµ¨Ò¡ GP2D120 ¨Ðà»ÅÕè¹á»Å§µÒÁÃÐÂзҧ·ÕèµÃǨÇÑ´ä´ àª ¹ ÇÑ´áç´Ñ¹ Vout ෠ҡѺ 0.5V ¨Ðà·Õº໠¹ÃÐÂÐ·Ò§ä´ 26 ૹµÔàÁµÃ ËÃ×Í·Õè Vout ෠ҡѺ 2V ¨Ðà·Õº໠¹ÃÐÂÐ Ë Ò§¨Ò¡Çѵ¶Ø 6 ૹµÔàÁµÃ à» ¹µ ¹ ÊÒÁÒöÊÃØ»¢ ÍÁÙÅ¡ÒÃà·Õº¤ Ò Vout ¡ÑºÃÐÂзҧ㹵ÒÃÒ§·Õè 6-1 àÁ×è͹íÒâÁ´ÙÅ GP2D120 àª×èÍÁµ ͡Ѻǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŢͧäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¶ ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÍÒ ¹¤ Òä´ 307 áÊ´§Ç Ò GP2D120 ÍÂÙË Ò §¨Ò¡Çѵ¶Ø 8 ૹµÔàÁµÃ

6.4 ä¿Å äźÃÒÃÕÊÒí ËÃѺ㪠§Ò¹âÁ´ÙÅ GP2D120 à¹×Íè §¨Ò¡âÁ´ÙÅ GP2D120 ãË ¼Å¡Ò÷íÒ§Ò¹ÍÍ¡ÁÒà» ¹áç´Ñ¹ä¿µÃ§ «Ö§è ÊÒÁÒÃ¶Ê §à¢ Òä»Âѧ ÍÔ¹¾ØµÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 ä´ â´ÂµÃ§ ·Ç Ò ËÒ¡µ ͧ¡Ò÷ÃÒº¶Ö§¤ Ò·ÕÃè ÐÂзҧ·Õµè ÃǨ¨Ñº ä´ ¨Ò¡âÁ´ÙÅ GP2D120 ÁÕ¤ÇÒÁ¨íÒà» ¹Í ҧÂÔ觷Õè¨Ðµ ͧÁÕ¡Òäíҹdzà¾×èÍá»Å§¤ Ҩҡǧ¨Ãá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ÁÒà» ¹¤ ÒÃÐÂзҧ㹠˹ ÇÂૹµÔàÁµÃ


96 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

áç´Ñ¹àÍÒµ ¾Øµ¨Ò¡ GP2D120 (V)

¤ Ҩҡǧ¨Ãá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ 10 ºÔµ

ÃÐÂзҧâ´Â»ÃÐÁÒ³ (ૹµÔàÁµÃ - cm)

0.4 0.5

82 102

32 26

0.6

123

22

0.7

143

19

0.8

164

16

0.9 1.0

184 205

14 13

1.1

225

12

1.2 1.3

246 266

11 10

1.4

287

9

1.5 1.6

307 328

8 8

1.7

348

7

1.8

369

7

1.9

389

6

2.0

410

6

2.1

430

6

2.2

451

5

2.3

471

5

2.4

492

5

2.5 2.6

512 532

5 4

µÒÃÒ§·Õè 6-1 áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§ÃдѺáç´Ñ¹àÍÒµ ¾µØ ¢Í§ GP2D120 ¡Ñº¤ Ҩҡǧ¨Ãá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅáÅÐÃÐÂзҧ·ÕÇè ´Ñ ä´ (ä´ ¨Ò¡¡Òäíҹdz)


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 97

â»Ãá¡ÃÁ·Õè 6-1 ä¿Å äźÃÒÃÕ gp2d120.h ÊíÒËÃÑºÍ Ò¹áÅФíҹdz¤ ÒÃÐÂзҧ¢Í§âÁ´ÙÅ GP2D120 ÊíÒËÃѺËع ¹µ Robo-51 /*—————————————————————————————————————*/ // Filename : gp2d120.h // C compiler : RIDE 51 V6.1 /*————————————————-————————————————————*/ #include <adc_robo51.h>// Module function get analog from AN0-AN5 #define m 2914 #define b 5 #define k 1 /*********** Function get distance from GP2D120 sensor ***********************/ unsigned int dist(char adc_ch) { unsigned int dis; // Variable for keep distance dis = (m/(analog(adc_ch)+b)) - k; // Calculate distance return(dis); // Return distance }

6.4.1 ÃÒÂÅÐàÍÕ´«Íà Êâ»Ãá¡ÃÁ à¾×èͤÇÒÁÊдǡ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨Ö§ä´ ÁÕ¡ÒÃÊà ҧä¿Å äźÃÒÃÕÊíÒËÃѺ¡Òäíҹdz¤ Ò ¢Í§âÁ´ÙÅ GP2D120 ¹Õ¢é ¹Öé â´ÂµÑ§é ª×Íè ä¿Å äźÃÒÃÕà» ¹ gp2d120.h â´ÂÁÕÃÒÂÅÐàÍÕ´«Íà Êâ»Ãá¡ÃÁ áÊ´§ã¹â»Ãá¡ÃÁ·Õè 6-1 ÊÒÁÒö໠´â»Ãá¡ÃÁ RIDE à¾×Íè Êà ҧâ»Ãá¡ÃÁáŠǨѴà¡çºà» ¹ä¿Å ¹ÒÁÊ¡ØÅ .h ãË ÍÂÙã ¹â¿Åà´Íà à´ÕÂǡѺä¿Å â»Ãà¨ç¡µ ·¡Õè Òí Åѧ¾Ñ²¹Ò à¾×Íè ª ÇÂãË ¡ÒÃàª×Íè Áâ§ä¿Å ã¹¢Ñ¹é µÍ¹¡Òà ¤ÍÁä¾Å ÊÒÁÒö´íÒà¹Ô¹¡ÒÃä´ ÊдǡáÅÐÅ´¤ÇÒÁ¼Ô´¾ÅÒ´ä´ Í ҧÁÒ¡

6.4.2 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè ã¹ä¿Å äźÃÒÃÕ gp2d120.h ÁÕ¿§ ¡ªÑ¹è ãË àÃÕ¡㪠§Ò¹à¾Õ§¿ §¡ ª¹Ñè à´ÕÂǤ×Í dist ´Ñ§ÁÕÃÒÂÅÐàÍÕ´ µ Í仹Õé ¿ §¡ ª¹Ñè dist : ·íÒ˹ Ò·ÕÍè Ò ¹¤ ÒÃÐÂзҧ㹪 ǧ 4-32 ૹµÔàÁµÃ ÃٻẺ¿ §¡ ª¹Ñè

unsigned int dist(char adc_ch)

¾ÒÃÒÁÔàµÍÃ

adc_ch

¡Òä׹¤ Ò

¤×¹¤ ÒÃÐÂзҧ·ÕÍè ÂÙã ¹¢Íºà¢µ¡Ò÷íÒ§Ò¹¢Í§ GP2D120 ¹Ñ¹è ¤×Í 4 ¶Ö§ 32 cm

¡íÒ˹´ª ͧÍÔ¹¾ØµÍйÒÅÍ¡¢Í§ºÍà ´ RBX-51AC2 plus ·Õµè Í à¢ Ò ¡ÑºâÁ´ÙÅ GP2D120 ÊÒÁÒöàÅ×Í¡µ ÍࢠҡѺ AN0 ¶Ö§ AN5


98 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 12

·´ÊÍºÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅ GP2D120 A12.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A12-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1201.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A12.2 Ãѹâ»Ãá¡ÃÁ ·´Åͧ¹íÒÇѵ¶ØÁÒÇÒ§¢Çҧ˹ ÒâÁ´ÙÅ GP2D120 «Ö§è µÔ´µÑ§é ÍÂÙ· Ò§´ ҹ˹ ҢͧËع ¹µ Robo51 áÅ Ç»ÃѺà»ÅÕÂè ¹ÃÐÂÐË Ò§ Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD º¹á¼§Ç§¨Ã RBX-51AC2 plus àÁ×Íè àÃÔÁè ·íÒ§Ò¹·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51 áÊ´§¢ ͤÇÒÁ Distance: 5 cm áÊ´§Ç Ò ÁÕÇµÑ ¶ØÍÂÙË Ò §¨Ò¡âÁ´ÙÅ GP2D120 »ÃÐÁÒ³ 5 ૹµÔàÁµÃ áµ ¶Ò ËÒ¡Çѵ¶ØÍÂÙË Ò §¨Ò¡âÁ´ÙÅ GP2D120 ã¹ÃÐÂзÕãè ¡Å ¡Ç Ò 4 ૹµÔàÁµÃËÃ×Íä¡Å¡Ç Ò 32 ૹµÔÁàµÃ ·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51 áÊ´§¢ ͤÇÒÁ Out

of

Range

â»Ãá¡ÃÁ·Õè A12-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃÑºÍ Ò¹¤ ÒÃÐÂзҧ·Õµè ÃǨ¨Ñºä´ ¨Ò¡âÁ´ÙÅ GP2D120 /*—————————————————————————————————————*/ // Program : GP2D120 demo // Description : Get distance from GP2D120 // Filename : act1201.c /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <delay.h> // Module function Delay #include <gp2d120.h> // Module function get distance from GP2D120 void main(void) { unsigned int val; // Declare distance data variable(cm unit), // integer type recommended lcd_init(); // Initial LCD module while(1) // Looping { // Read digital data from conversion to variable val val = dist(1); if(val>=4 && val<=32) { lcd_putstr(line1,”Distance: cm “); // Show message “Distance cm” on LCD module inttolcd(0x8A,val,Dec); // Convert digital data to show on LCD display } else { lcd_putstr(line1,”Out of Range “); // Show message on LCD module } delay_ms(1000); // Delay 0.1 second for display value lcd_clear(); // Clear display } Robo-51 }


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 99

¡Ô¨¡ÃÃÁ·Õè 13

Ëع ¹µ Robo-51 ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇÒ§ ẺäÁ ÊÑÁ¼ÑÊ ¨Ò¡¡Ô¨¡ÃÃÁ·Õè 12 ·Õäè ´ Á¡Õ ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÃǨÊͺ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ GP2D120 ä»áÅ Ç ÁÒ¶Ö§ ¡Ô¨¡ÃÃÁ¹Õ¨é йíҼšÒ÷´Êͺ·Õäè ´ ¹¹Ñé ÁҤǺ¤ØÁ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-51 à¾×Íè ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÑÁ¼ÑÊËÃ×ͪ¹¡ÑºÊÔ§è ¡Õ´¢ÇÒ§¹Ñ¹é A13.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A13-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1301.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip »Å´ÊÒ´Òǹ âËÅ´ÍÍ¡ A13.2 ¹íÒËع ¹µ Robo-51 ÁÒÇÒ§ã¹¾×¹é ·Õ·è µÕè Í §¡Ò÷´Êͺ «Ö§è ¨ÐÁÕʧÔè ¡Õ´¢ÇÒ§ÇÒ§ÍÂÙ Ãѹâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 à» ¹´Ñ§¹Õé àÃÔÁè µ ¹´ Ç¡ÒÃà¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò àÁ×Íè ¾ºÊÔ§è ¡Õ´¢ÇÒ§ Ëع ¹µ Robo-51 ¨Ð¢Ñºà¤Å×Íè ¹¶ÍÂËÅѧáÅ Ç àÅÕÂé Ç¢ÇÒ à¾×Íè à»ÅÕÂè ¹àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ à¾×Íè äÁ ãË ª¹ÊÔ§è ¡Õ´¢ÇÒ§

E

ª ǧ¨Ñ§ËÇÐ㹡ÒÃàÅÕÂé ǢͧËع ¹µ Robo-51 ¨ÐÊÁºÙó ÁÒ¡ËÃ×͹ ͹ѹé Ê Ç¹Ë¹Ö§è ÁÒ¨Ò¡ª ǧàÇÅÒ㹡ÒÃ˹ ǧ «Ö觼٠¾Ñ²¹Òµ ͧ»ÃѺᵠ§à¾×èͤÇÒÁàËÁÒÐÊÁ


100 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A13-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 ãË ÊÒÁÒö ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ´ Ç¡ÒÃ㪠âÁ´ÙÅ GP2D120 /*—————————————————————————————————-——————-————————-—-———————*/ // Program : Robo-51 escape object by GP2D120 sensor // Description : Robo-51 move by dc motor and detect object by GP2D120 sensor // Filename : act1301.c // C compiler : RIDE 51 V6.1 /*———————————————————————————-——————-————————-————-——————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h> // Module function LCD display #include <dc_motor.h> // Module function drive DC motor #include <gp2d120.h> // Module function drive DC motor #include <delay.h> // Module function delay time #define pow 200 // Define constant for power drive DC motor /***************** Function drive robot forward ******************************/ void run_fd(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot backward ******************************/ void run_bk(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot turn left ****************************/ void turn_left(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot turn right ***************************/ void turn_right(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /****************************** Main function ********************************/ void main() { unsigned int val; // Variable for keep distance while(1) // Looping { val = dist(1); // Get distance from GP2D120 if(val<15) // Distance less than 15 cm? { run_bk(1000); // Backward 1 sec turn_right(500); // Turn right 0.5 sec } else { run_fd(10); // Forward 10 ms } } }


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 101

º··Õè 7 Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ 㹡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ä´ ¹¹Ñé ÁÕËÅÑ¡ ¡Òä×Í ËØ ¹Â¹µ ·íÒ¡ÒõÃǨÇÑ´¤ ÒÍйÒÅÍ¡¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô (IR reflector) «Ö§è ¹íÒÁÒ»ÃÐÂØ¡µ 㪠໠¹µÑǵÃǨ¨ÑºàÊ ¹ ¤ Ò·ÕÍè Ò ¹ä´ ¨Ð¹íÒä»á»Å¤ÇÒÁËÁÒÂáÅ Çà»ÃÕºà·Õº ¡Ñº¤ ÒÍ Ò§ÍÔ§à¾×Íè µÕ¤ÇÒÁÇ Ò ³ ¢³Ð¹Ñ¹é µíÒá˹ §¢Í§µÑǵÃǨ¨ÑºµÃǨ¾ºàÊ ¹·Õ¡è Òí ˹´ËÃ×ÍäÁ ¼Å·Õäè ´ ¨Ò¡ ¡ÒõÃǨÊͺ¹Õ¨é ж١¹íÒä»ÊÑ§è ¡ÒÃãË ¢ºÑ à¤Å×Íè ¹Ëع ¹µ ä»ã¹·ÔÈ·Ò§ã´æ à¾×Íè µÍºÊ¹Í§µÒÁ¨Ø´»ÃÐʧ¤ ¢Í§¼Ù¾ ² Ñ ¹Ò ઠ¹ àÁ×Íè µÃǨ¾ºàÊ ¹áÅ ÇãË à¤Å×Íè ¹·Õäè »µÒÁàÊ ¹ ËÃ×ÍËÂØ´ ËÃ×Íà¤Å×Íè ¹·Õ¶è ÍÂË Ò§¨Ò¡àÊ ¹

7.1 ËÑÇã¨ÊíҤѭ¤×Í á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô à» ¹á¼§Ç§¨Ã·Õè㪠㹡ÒõÃǨÊͺ¡ÒÃÊз ͹¢Í§áʧÍÔ¹¿ÃÒàô¢Í§µÑǵÃǨ¨Ñºáʧ Êз ͹ÍÔ¹¿ÃÒàô«Ö§è ÃÇÁµÑÇÊ §áÅеÑÇÃѺäÇ ã¹µÑǶѧà´ÕÂǡѹ â´Â µÑǵÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Õè ¹íÒÁÒ㪠¤Í× TCRT5000 ã¹ÃÙ»·Õè 7-1 áÊ´§Ç§¨Ã¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô àÁ×Íè ¨ Ò ä¿àÅÕÂé § LED ÍÔ¹¿ÃÒàôÀÒÂã¹Ç§¨Ã¨Ðà»Å §áʧÍÍ¡ÁÒµÅÍ´àÇÅÒ Ê Ç¹µÑÇÃѺ«Ö§è à» ¹â¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Ðä´ ÃºÑ áʧÍÔ¹¿ÃÒàô¨Ò¡¡ÒÃÊз ͹¡ÅѺ «Ö§è ¨ÐÁÒ¡ËÃ×͹ Í¡碹Öé ÍÂÙ¡ ºÑ Ç Ò ÁÕÇµÑ ¶ØÁÒ¡Õ´¢ÇÒ§ËÃ×ÍäÁ áÅÐÁÕ¤ÇÒÁÊÒÁÒö㹡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàÃ´ä´ ´àÕ ¾Õ§äà «Ö§è ¢Ö¹é ¡ÑºÅÑ¡É³Ð¾×¹é ¼ÔÇáÅÐÊբͧÇѵ¶Ø â´Â Çѵ¶ØÊ¢Õ ÒǼÔÇàÃÕº¨ÐÊз ͹áʧÍÔ¹¿ÃÒàÃ´ä´ ´·Õ ÊÕè ´Ø ·íÒãË µÇÑ ÃѺáʧÍÔ¹¿ÃÒàÃ´ä´ ÃºÑ áʧÊз ͹ÁÒ¡ Ê §¼ÅãË áç´Ñ¹·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨ÃÊÙ§µÒÁä»´ Ç 㹢³Ð·ÕÇè µÑ ¶ØÊ´Õ Òí ËÃ×ÍÊÕࢠÁ¨ÐÊз ͹áʧÍÔ¹¿ÃÒàô ä´ ¹Í ·ÕÊè ´Ø ·íÒãË µÇÑ ÃѺÍÔ¹¿ÃÒàÃ´Ê §áç´Ñ¹ÍÍ¡ÁÒµèÒí ¨Ø´µ ÍÊÑ­­Ò³ +V TCRT5000

OUT GND

10k

510

µÑǵÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô

ÃÙ»·Õè 7-1 Ãٻà ҧáÅÐǧ¨Ã¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Õ¹è Òí ÁÒ㪠µÃǨ¨ÑºàÊ ¹


102 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

7.2 ¡Ò÷´ÊÍºÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô¢Í§ Ëع ¹µ Robo-51 ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô¶Ù¡µÔ´µÑ§é äÇ ´Ò ¹Å Ò§¢Í§Ëع ¹µ µ§Ñé áµ ã¹¢Ñ¹é µÍ¹¡Òà Êà ҧáÅ Ç ¨Ö§·´ÊÍºä´ ·¹Ñ ·Õ à¹×Íè §¨Ò¡á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôãË ¼Å¡Ò÷íҧҹ໠¹áç ´Ñ¹ä¿µÃ§àª ¹à´ÕÂǡѺἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ «§Öè ä´ ¡Å ÒǶ֧ä»áÅ Ç㹺··Õè 5 ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡Òà 㪠§Ò¹¡ÑºËع ¹µ Robo-51 ¨Ö§µ ͧµ ÍࢠҡѺª ͧÍÔ¹¾ØµÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 «Ö§è ÁÕãË àÅ×Í¡·Ñ§é ÊÔ¹é 6 ª ͧ¤×Í ª ͧ AN0 ¶Ö§ AN5 ¨Ò¡¹Ñ¹é 㪠¤ÇÒÁÃÙ¨ Ò¡¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅ͡㹺··Õè 5 à¾×Íè Í Ò¹ ¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô «Ö§è ¹íÒä»ÊÙ¡ ÒõÃǨ¨ÑºàÊ ¹µ Íä»

¡Ô¨¡ÃÃÁ·Õè 14

Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô¢Í§Ëع ¹µ Robo-51 A14.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A12-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1201.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A14.2 µ ÍÊÒ¨ҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôࢠҨشµ Í AN5 áÅÐ AN4 («Ö§è µ ÍäÇ áŠǵѧé áµ ¢¹Ñé µÍ¹ ¡ÒÃÊà ҧËع ¹µ Robo-51 㹺··Õè 3) A14.3 ¹íÒËØ ¹Â¹µ ä»ÇÒ§º¹¾×é¹·ÕèÊÕ´íÒáÅ Ç·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ ÊѧࡵáÅкѹ·Ö¡¤ Ò·ÕèáÊ´§º¹âÁ´ÙÅ LCD ¢Í§ Ëع ¹µ Robo-51 ¨Ò¡¹Ñ¹é à»ÅÕÂè ¹ä»ÇÒ§º¹¾×¹é ·ÕÊè ¢Õ ÒÇ ÊѧࡵáÅкѹ·Ö¡àª ¹à´ÕÂǡѹ ·ÕèâÁ´ÙÅ LCD áÊ´§¤ Ò·ÕèÍ Ò¹ä´ ¨Ò¡ª ͧÍÔ¹¾ØµÍйÒÅÍ¡ AN4 áÅж ÒËÒ¡¤ Ò·ÕèÍ Ò¹ä´ ÁÒ¡¡Ç Ò¤ Ò Í Ò§ÍÔ§ «Ö§è ¡íÒ˹´äÇ à· Ò¡Ñº 400 ¨Ðä´ Â¹Ô àÊÕ§ µÔ´é ¨Ò¡ÅíÒ⾧໠Â⫢ͧËع ¹µ Robo-51 «Ö§è ¨Ð㪠¼Å¨Ò¡¡Ô¨¡ÃÃÁ ¹Õãé ¹¡ÒõÃǨ¨ÑºàÊ ¹µ Íä»


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 103

â»Ãá¡ÃÁ·Õè A14-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÊÍºÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô¢Í§Ëع ¹µ Robo-51 /*————————————————————————————————————————————————————————————————————————*/ // Program : Reading IR reflect sensor // Description : Reading white and black surface from IR reflect sensor // Filename : act1401.c // C compiler : RIDE 51 V6.1 /*————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <lcd_robo51.h>// Module function LCD display #include <delay.h> // Module function Delay #include <adc_robo51.h>// Module function Analog to digital converter #include <sound.h> // Module function Sound #define ref 400 // Define reference value as 400 void main(void) { unsigned int reflect_dat;

// Declare reflect_dat for keeping analog // data from IR reflector lcd_init(); // Initailize LCD module lcd_putstr(line1,"Reflect CH4"); // Show message "Reflect CH4" on LCD module while(1) // Looping { reflect_dat = analog(4); // Read analog value from IR reflect sensor //and collect data at reflect_dat inttolcd(0xC7,reflect_dat,Dec); // Display analog value on LCD module if(reflect_dat>ref) // Compare analog value with reference beep(); // Beep if reflect_dat > reference delay_ms(500); // Delay 0.5 second }

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õéà» ¹¡ÒÃÍ Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡ª ͧ AN4 ·Õèµ ÍࢠҡѺἧǧ¨ÃµÃǨ¨Ñº¡Òà Êз ͹áʧÍÔ¹¿ÃÒàô â´ÂàÃÕÂ¡Í Ò¹´ Ç¿ §¡ ª¹Ñè analog áŠǹíÒÁÒà¡çºäÇ ·µÕè ÇÑ á»Ã reflect_dat áÅÐ ¹íÒ¤ Ò·ÕÍè Ò ¹ä´ «§Öè à» ¹µÑÇàÅ¢¨íҹǹàµçÁ int ä»á»Å§à» ¹ÃËÑÊáÍÊ¡Õàé ¾×Íè Ê §ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨Ð¹íÒ¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ä´ ä»à»ÃÕºà·Õº¡Ñº¤ Ò ref (ÁÕ¤Ò à» ¹ 400) Ç ÒÁÒ¡¡Ç ÒËÃ×ÍäÁ ¶ Ò㪠¨Ð Ê §àÊÕ§ µÔ´é áŠǨ֧ǹ¡ÅѺä»àÃÔÁè µ ¹Í Ò¹¤ ÒãËÁ áÅÐǹ´íÒà¹Ô¹¡ÒõÒÁ¢Ñ¹é µÍ¹ä»µÅÍ´ Robo-51


104 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

7.3 ¡ÒõÃǨ¨ÑºàÊ ¹¢Í§Ëع ¹µ Robo-51 ã¹ËÑÇ¢ ͹չé Òí àʹÍá¹Ç·Ò§ã¹¡ÒõÃǨ¨ÑºàÊ ¹ÊÕ´Òí ¢Í§Ëع ¹µ Robo-51 â´Âµ ͧ·íÒ¡ÒÃÍ Ò¹ ¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡¨Ò¡á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô«Ö§è ¹íÒÁÒ㪠µÃǨ¨ÑºàÊ ¹ â´Â¤íҹdz ËÒ¤ ҢͧÊÑ­­Ò³ÍйÒÅÍ¡·ÕèÊÒÁÒöᡤÇÒÁᵡµ ҧ㹡ÒÃÊз ͹áʧ·ÕèàÊ ¹ÊÕ´íÒáÅкÃÔàdz ʹÒÁ·Õàè » ¹ÊÕ¢ÒÇ â´ÂÍÒ¨à¢Õ¹â»Ãá¡ÃÁÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Ñ§é ÊͧµÑǢͧËع ¹µ Robo-51 ä´ ´§Ñ ¹Õé µÑÇÍ ҧ·Õè 7-1 ¡íÒ˹´ãË á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Õµè Í ¡Ñºª ͧ AN4 à» ¹µÑǵÃǨ¨Ñº·Ò§´ Ò¹« Ò áÅÐἧ ǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Õµè Í ¡Ñºª ͧ AN5 à» ¹µÑǵÃǨ¨Ñº·Ò§´ Ò¹¢ÇÒ #include <C51ac2.h> #include <delay.h> #include <adc_robo51.h> #include <lcd_robo51.h> void main() { lcd_init(); while(1) { lcd_command(1);

// »ÃСÒÈÃÕ¨ÊÔ àµÍà ÀÒÂã¹µÑÇ T89C51AC2 ãË ¤ÍÁä¾àÅÍà è٠¡Ñ // »ÃСÒÈäźÃÒÃÕà¡ÕÂè ǡѺ¡ÒÃ˹ ǧàÇÅÒãË ¤ÍÁä¾àÅÍà è٠¡Ñ // »ÃСÒÈäźÃÒÃÕ¡ÒÃÍ Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡¢Í§Ëع ¹µ Robo-51 // »ÃСÒÈäźÃÒÃÕ¡ÒÃáÊ´§¼Å·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-51

lcd_putstr(0x80,”L”); inttolcd(0x82,analog(5),Dec); lcd_putstr(0xC0,”R”); inttolcd(0xC2,analog(4),Dec); delay_ms(100);

// áÊ´§µÑÇÍÑ¡Éà L ¡íҡѺµÑǵÃǨ¨ÑºàÊ ¹´ Ò¹« Ò // Í Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡µÑǵÃǨ¨ÑºàÊ ¹´ Ò¹« Ò // áÊ´§µÑÇÍÑ¡Éà R ¡íҡѺµÑǵÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ // Í Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡µÑǵÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ // ˹ ǧàÇÅÒà¾×Íè áÊ´§¼Å

} }

¨Ò¡¡Ò÷´ÅͧÇÑ´¤ Òä´ ¼ÅÅѾ¸ ¤Í× àÁ×Íè ¾ºàÊ ¹ÊÕ´Òí ¨ÐÍ Ò¹¤ Òä´ ªÇ § 30 ¶Ö§ 100 ã¹¢³Ð·Õè¾¹×é ÊÕ¢ÒÇÍ Ò¹ä´ 600 ¶Ö§ 800 ´Ñ§¹Ñ¹é ¨Ö§àÅ×Í¡¤ ÒÍ Ò§Íԧ㹡ÒõÃǨ¨ÑºàÊ ¹ÊÕ´Òí à» ¹ 400 ¡Å ÒǤ×Í ¶ ÒÍ Ò¹¤ Ҩҡἧǧ¨Ã µÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàôµÑÇã´áŠǾºÇ Ò ÁÕ¤Ò ¹ ÍÂ¡Ç Ò 400 ãË ¶Í× Ç Òἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàôµÑǹѹé ÍÂÙº ÃÔàdzàÊ ¹ËÃ×Í¾×¹é ·ÕÊè ´Õ Òí áµ ¶Ò Í Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 áÊ´§Ç Òἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹ áʧÍÔ¹¿ÃÒàôµÑǹÑé¹ÍÂÙ ºÃÔàdz¾×é¹·ÕèÊÕ¢ÒÇ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 105

¡Ô¨¡ÃÃÁ·Õè 15

Ëع ¹µ Robo-51 ¤ ¹ËÒàÊ ¹ 㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àʹ͡ÒäǺ¤ØÁËع ¹µ Robo-51 ãË ¤¹ ËÒàÊ ¹ËÃ×Í¾×¹é ·ÕÊè ´Õ Òí â´Â㪠ἧǧ¨ÃµÃǨ¨Ñº áʧÊз ͹ÍÔ¹¿ÃÒàô·Ñé§ 2 µÑÇ·ÕèµÔ´µÑé§ÍÂÙ ´ ҹ㵠¢Í§ËØ ¹Â¹µ â´Âµ ÍÊÒ¢ͧἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô´ Ò¹« ÒÂࢠҡѺª ͧ AN5 áÅÐἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô´ Ò¹¢ÇÒµ ͡Ѻª ͧ AN4 ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¨ÐÊѧè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ ÒµÅÍ´àÇÅÒáÅÐËÂØ´àÁ×Íè µÃǨ¾ºàÊ ¹ËÃ×Í¾×¹é ·ÕÊè Õ ´íÒ ¾Ã ÍÁ¡Ñºá¨ §¼Å¡ÒõÃǨ¾º´ ÇÂàÊÕ§ÊÑ­­Ò³ 1 ¤Ãѧé ÅѡɳСÒ÷íÒ§Ò¹áÊ´§ä´ µÒÁÃÙ»·Õè A15-1

àÁ×èÍäÁ ¾ºàÊ ¹ÊÕ´íÒ

Ëع ¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô ·Õ¹è Òí ÁÒ㪠໠¹ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ Robo-51

ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô ·Õ¹è Òí ÁÒ㪠໠¹ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ Robo-51

àÁ×è;ºàÊ ¹ÊÕ´íÒ

Ëع ¹µ ËÂØ´à¤Å×Íè ¹·Õè

ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô ·Õ¹è Òí ÁÒ㪠໠¹ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ Robo-51

ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô ·Õ¹è Òí ÁÒ㪠໠¹ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ Robo-51

àÁ×èÍἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§« Ò ¾ºàÊ ¹ÊÕ´íÒ

àÁ×èÍἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§¢ÇÒ ¾ºàÊ ¹ÊÕ´íÒ

Ëع ¹µ ËÂØ´à¤Å×Íè ¹·Õè

Ëع ¹µ ËÂØ´à¤Å×Íè ¹·Õè

ÃÙ»·Õè A15-1 ÃٻẺ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 à¾×Íè ¤ ¹ËÒàÊ ¹ÊÕ´Òí 㹡Ԩ¡ÃÃÁ¹Õé


106 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A15-1 â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡Òä ¹ËÒàÊ ¹ÊÕ´Òí ¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) /*—————————————————————————————————————*/ // Program : Detect black line // Description : Drive robot for finding the black line by IR reflect sensor // Filename : act1501.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of T89C51AC2 #include <lcd_robo51.h> // Module function LCD #include <dc_motor.h> // Module function drive DC motor #include <sound.h> // Module function drive sound #include <delay.h> // Module function delay process #include <adc_robo51.h> // Module function read input analog #define pow 100 // Define constant power drive robot #define ref 400 // Define constant reference compare track line /***************** Function drive robot forward ******************************/ void run_fd(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot backward ******************************/ void run_bk(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot void turn_left(int time_spin) { motor_fd(2,pow); // Drive motor_bk(1,pow); // Drive delay_ms(time_spin); // Delay } /***************** Function drive robot void turn_right(int time_spin) { motor_bk(2,pow); // Drive motor_fd(1,pow); // Drive delay_ms(time_spin); // Delay }

turn left ****************************/

left motor forward right motor backward for robot spin

turn right ***************************/

left motor backward right motor forward for robot spin

/****************************** Main function ********************************/ void main() { int left=0,right=0; // Define variable for keep input analog value lcd_init(); // Initial LCD module beep(); // Sound beep 1 time while(1) // Infinite loop


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 107

â»Ãá¡ÃÁ·Õè A15-1 â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡Òä ¹ËÒàÊ ¹ÊÕ´Òí ¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) { left = analog(5); right = analog(4);

// Read input analog channel 5 (connect left sensor) // Read input analog channel 4 (connect right sensor)

if(left<ref || right<ref) // If any sensor detect black line { motor_stop(all); // Stop robot beep(); // Beep after any sensor detect line lcd_clear(); // Clear LCD display if(left<ref) { lcd_putstr(line1,”Left:>> Line”); // Left sensor detects line } else { lcd_putstr(line1,”Left:>> Floor”); // Left sensor detects floor } if(right<ref) { lcd_putstr(line2,”Right:>> Line”); // Right sensor detects line } else { lcd_putstr(line2,”Right:>> Floor”); // Right sensor detects floor } while(1); // Break program } else { run_fd(10); // Drive robot forward } }

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ àÁ×Íè àÃÔÁè Ãѹâ»Ãá¡ÃÁ¨ÐÁÕÊ­ Ñ ­Ò³àÊÕ§ 1 ¤Ãѧé à¾×Íè ᨠ§¡ÒÃàÃÔÁè µ ¹·íÒ§Ò¹ ËÅѧ¨Ò¡¹Ñ¹é Ëع ¹µ ¨ÐÇ¹Í Ò¹ ¤ ÒÍйÒÅÍ¡¨Ò¡á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é ÊͧµÑÇáŠǹíÒÁÒà»ÃÕºà·ÕÂºÇ Ò ¾ºàÊ ¹ËÃ×ÍÂѧ ¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ ä´ ¨Ðà¡çºäÇ ·µÕè ÇÑ á»Ã left (ÊíÒËÃѺἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂ«Ö§è µ ÍࢠҡѺª ͧ AN5) áÅÐ right (ÊíÒËÃѺ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ«Ö§è µ ͡Ѻª ͧ AN4) ¨Ò¡¹Ñ¹é ¹íÒä»à»ÃÕºà·Õº¤ ÒÍ Ò§ÍÔ§ ref «Ö§è ¤ÇÒÁËÁÒ¢ͧ ¡ÒõÃǨ¨ÑºàÊ ¹àÁ×Íè á»Å¨Ò¡à§×Íè ¹ä¢â»Ãá¡ÃÁÁÕ´§Ñ ¹Õé l ¶ Òà§×Í è ¹ä¢ left<ref ¨ÃÔ§ áÊ´§Ç Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒµÃǨ¾ºàÊ ¹ÊÕ´Òí äÁ ¨ÃÔ§ áÊ´§Ç Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒµÃǨ¾º¾×¹é ÊÕ¢ÒÇ l

¶ Òà§×Íè ¹ä¢ right<ref ¨ÃÔ§ áÊ´§Ç Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒµÃǨ¾ºàÊ ¹ÊÕ´Òí äÁ ¨ÃÔ§ áÊ´§Ç Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒµÃǨ¾º¾×¹é ÊÕ¢ÒÇ


108 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A15-1 â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡Òä ¹ËÒàÊ ¹ÊÕ´Òí ¢Í§Ëع ¹µ Robo-51 (¨º) ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ã¹Ê ǹ¢Í§ if(left<ref ËÁÒ¶֧

|| right<ref)

¡Ã³Õ·Õè 1

reft<ref ¨ÃÔ§

Ê Ç¹ right<ref à·ç¨

¡Ã³Õ·Õè 2

left<ref à·ç¨

Ê Ç¹ right<ref ¨ÃÔ§

¡Ã³Õ·Õè 3

left<ref ¨ÃÔ§

Ê Ç¹ right<ref ¨ÃÔ§

¶ Ò¾ºÇ Òà» ¹ ¨ÃÔ§ ÍÒ¨

Ëع ¹µ Robo-51 ¨ÐËÂØ´à¤Å×Íè ¹·Õáè ÅÐÊ §ÊÑ­­Ò³àÊÕ§ÍÍ¡ÁÒ 1 ¤ÃÑ§é ¾Ã ÍÁ¡ÑºÃÒ§ҹà˵ؼŢͧ¡Òà ËÂØ´à¤Å×è͹·ÕèÇ Òà¡Ô´¨Ò¡¡Ã³Õã´¨Ò¡·Ñé§ 3 ¡Ã³Õ¢ Ò§µ ¹¼ Ò¹·Ò§âÁ´ÙÅ LCD â´Â·ÕèºÃ÷Ѵº¹¢Í§âÁ´ÙÅ LCD ¨ÐÃÒ§ҹ¼Å¨Ò¡¡Òä ¹ËÒÇ Ò ¾ºàÊ ¹ËÃ×;׹é ʹÒÁ¨Ò¡á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò áÅкÃ÷ѴŠҧÊíÒËÃѺ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ ËÅѧ¨Ò¡¹Ñ¹é ¨Ö§àºÃ¡â»Ãá¡ÃÁ´ ǤíÒÊѧè while(1); Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 109

¡Ô¨¡ÃÃÁ·Õè 16

Ëع ¹µ Robo-51 ping-pong 㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àʹ͡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁËع ¹µ Robo-51 ãË à¤Å×Íè ¹·Õãè ¹ÅѡɳР«Ô¡á«¡ä»-ÁÒËÃ×ÍÊÅѺ¿ ¹»ÅÒ â´Â㪠àÊ ¹ÊÕ´Òí à» ¹µÑÇ¡íÒ˹´¡ÒÃà»ÅÕÂè ¹·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·Õµè ÒÁÃÙ»·Õè A14-1 â´Â Ëع ¹µ Robo-51 ¨Ðà¤Å×Íè ¹·Õãè ¹·ÔÈ·Ò§µÃ§¨¹¡ÃÐ·Ñ§è ¾ºàÊ ¹Ê¹ÒÁÊÕ´Òí ´ ҹ㴴 Ò¹Ë¹Ö§è ¡ç¨Ðà»ÅÕÂè ¹·ÔÈ·Ò§¡Òà à¤Å×Íè ¹·Õâè ´ÂËѹµÑÇàÅÕÂé ÇáÅ Çà¤Å×Íè ¹·Õµè çµ Íä» àÁ×Íè ¾ºàÊ ¹ÊÕ´Òí ¡ç¨Ðà»ÅÕÂè ¹·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·ÕÍè ¡Õ ¤Ãѧé ǹ·íÒ§Ò¹ ઠ¹¹Õäé »µÅÍ´ ᵠ㹡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ ¨ÐÍÂÙÀ ÒÂã¹ÃÐËÇ Ò§àÊ ¹ÊÕ´Òí ·Ñ§é 2 ½ §

Ro bo -5 1

ÃÙ»·Õè A16-1 áÊ´§àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-51 Ping-Pong àÁ×Íè Áͧ¨Ò¡´ Ò¹º¹ á¹Ç¤Ô´ã¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ µ Íἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Õ¹è Òí ÁÒ㪠໠¹µÃǨ¨ÑºàÊ ¹·Ñ§é ÊͧµÑÇã¹ÅѡɳÐà´ÔÁ¤×Í á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Òµ ͡Ѻª ͧ AN5 áÅÐἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒµ ͡Ѻª ͧ AN4 ´Ñ§¹Ñ¹é ¢Ñ¹é µÍ¹ ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà» ¹´Ñ§¹Õé (1) ·´ÊͺËÒ¤ Òà»ÃÕºà·ÕºÃÐËÇ Ò§¾×¹é ʹÒÁÊÕ¢ÒÇáÅÐàÊ ¹ÊÕ´Òí (2) Í Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡ª ͧ AN4 áÅÐ AN5 áÅ Çà¡çº¤ Òà¾×Íè àµÃÕÂÁà»ÃÕºà·Õº (3) à»ÃÕºà·Õºà§×Íè ¹ä¢´Ñ§¹Õé ¡Ã³Õ·Õè 1 ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂáÅТÇÒ¾º¾×¹é ÊÕ¢ÒÇ µÍºÊ¹Í§â´Â¡ÒâѺãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò ¡Ã³Õ·Õè 2 ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾ºàÊ ¹ÊÕ´Òí Ê Ç¹´ Ò¹¢ÇÒ¾º¾×¹é ÊÕ¢ÒÇ µÍºÊ¹Í§â´Â¡ÒÃËÁعµÑÇËØ ¹Â¹µ ä»·Ò§´ Ò¹¢ÇÒã¹ÃÐÂÐàÇÅÒ·ÕèàËÁÒÐÊÁà¾×èÍãË ·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Ë¹Ñ à¢ ÒÊÙà Ê ¹ÊÕ´Òí ½ § µÃ§¢ ÒÁ


110 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ã³Õ·Õè 3 ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾º¾×¹é ÊÕ¢ÒÇ Ê Ç¹´ Ò¹¢ÇÒ¾ºàÊ ¹ÊÕ´Òí µÍºÊ¹Í§â´Â¡ÒÃËÁعµÑÇËع ¹µ ä»·Ò§´ Ò¹« ÒÂà» ¹ª ǧàÇÅÒÃÐÂÐàÇÅÒµÒÁ¤ÇÒÁ àËÁÒÐÊÁà¾×Íè ãË ·ÈÔ ·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Ë¹Ñ à¢ ÒÊÙà Ê ¹ÊÕ´Òí ½ § µÃ§¢ ÒÁ ¡Ã³Õ·Õè 4 ¹Í¡à˹×ͨҡ¡Ã³Õ·§Ñé ÊÒÁ µÍºÊ¹Í§â´Â¡ÒâѺà¤Å×Íè ¹ãË Ë¹Ø Â¹µ ¢ºÑ à¤Å×Íè ¹µÒÁ¨Ø´»ÃÐʧ¤ ¢Í§¼Ù¾ ² Ñ ¹Ò «Ö§è ÍÒ¨ ¨ÐãË ËÂØ´ËÃ×ͶÍÂËÅѧ¡çä´ (4) ¡ÅѺä»àÃÔÁè µ ¹ã¹¢Ñ¹é µÍ¹·Õè (2) ãËÁ

¡ÒÃÊà ҧʹÒÁ·´Êͺ ¨Ñ´àµÃÕÂÁ¾×¹é ·Õàè ÃÕºÊÕ¢ÒÇËÃ×ÍÊÕÍÍ ¹·ÕÊè ÒÁÒöÊз ͹áÊ§ä´ ´Õ ¨Ò¡¹Ñ¹é ¹íÒà·»¾Ñ¹ÊÒÂä¿ÊÕ´Òí ÁÒµÔ´º¹¾×¹é 2 àÊ ¹ÂÒÇ»ÃÐÁÒ³ 2 àÁµÃ¢¹Ò¹¡Ñ¹ (ÊíÒËÃѺ¤ÇÒÁÂÒÇÊÒÁÒöà»ÅÕÂè ¹ä´ µÒÁ¤ÇÒÁµ ͧ¡ÒÃ) ÃÐÂÐË Ò§ÃÐËÇ Ò§ àÊ ¹äÁ ¹Í Â¡Ç Ò 40 ૹµÔàÁµÃ à¾×Íè ãË Á¾Õ ¹×é ·ÕÊè Òí ËÃѺãË Ë¹Ø Â¹µ ËÁعµÑÇä´ à¾Õ§¾Í Ê Ç¹µíÒá˹ §àÃÔÁè µ ¹ÊíÒËÃѺ»Å ͵ÑÇËع ¹µ Robo-51 ãË Ë¹Ñ Ë¹ Òà©Õ§·íÒÁØÁ»ÃÐÁÒ³ 45 ͧÈÒࢠÒËÒ àÊ ¹´ ҹ㴴 Ò¹Ë¹Ö§è «Ö§è ´ÙµÇÑ Í ҧµíÒá˹ §àÃÔÁè µ ¹¢Í§Ëع ¹µ ´§Ñ ã¹ÃÙ»·Õè A16-1

¡Ò÷´Êͺ A16.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A14-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1401.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A16.2 µ ÍÊÒ¨ҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàôࢠҨشµ Í AN5 áÅÐ AN4 («Ö§è µ ÍäÇ áŠǵѧé áµ ¢¹Ñé µÍ¹¡ÒÃÊà ҧËع ¹µ Robo-51 㹺··Õè 3) A16.3 ¹íÒËع ¹µ ä»ÇÒ§º¹¨Ø´àÃÔÁè µ ¹ ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª à¾×Íè ãË Ë¹Ø Â¹µ Robo-51 ·íÒ§Ò¹ Êѧࡵ¡ÒÃà¤Å×Íè ¹·Õ·è àÕè ¡Ô´ ¢Ö¹é Ç Ò à» ¹ä»µÒÁ·Õµè Í §¡ÒÃËÃ×ÍäÁ


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 111

â»Ãá¡ÃÁ·Õè A16-1 â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õãè ¹¾×¹é ·Õ·è ¡Õè Òí ˹´ã¹ÅѡɳР» §»Í§ (Ping-Pong) (ÁÕµÍ ) /*————————————————————————————————————————————————————————*/ // Program : Ping-Pong Robot // Description : Drive robot by black line reflection // Filename : act1601.c // C compiler : RIDE 51 V6.1 /*————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Header include register of T89C51AC2 #include <dc_motor.h> // Module function drive DC motor #include <sound.h> // Module function drive sound #include <delay.h> // Module function delay process #include <adc_robo51.h>// Module function read input analog #define pow 250 // Define constant power drive robot #define ref 400 // Define constant reference compare track line int left=0,right=0; // Define variable for keep input analog value /***************** Function drive robot forward ******************************/ void run_fd(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot backward ******************************/ void run_bk(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot void turn_left(int time_spin) { motor_fd(2,pow); // Drive motor_bk(1,pow); // Drive delay_ms(time_spin); // Delay } /***************** Function drive robot void turn_right(int time_spin) { motor_bk(2,pow); // Drive motor_fd(1,pow); // Drive delay_ms(time_spin); // Delay }

turn left ****************************/ left motor forward right motor backward for robot spin turn right ***************************/ left motor backward right motor forward for robot spin

/****************************** Main function ********************************/ void main() { beep(); // Sound beep 1 time while(1) // Infinite loop { left = analog(5); // Read input analog channel 5(connect left sensor) // Read input analog channel 4(connect right sensor) right = analog(4); if(left>ref && right>ref) // if left sensor and right sensor detect white


112 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A14-1 â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õãè ¹¾×¹é ·Õ·è ¡Õè Òí ˹´ã¹ÅѡɳР» §»Í§ (Ping-Pong) (¨º) { run_fd(20); // Drive forward } else if(left<ref && right>ref) // Left sensor detect black, right sensor detect white { turn_right(1000); // Drive turn right } else if(left>ref && right<ref) // Left sensor detect white, right sensor detect black { turn_left(1000); // Turn left } else if(left<ref && right<ref) // Both sensor detect black { run_bk(20); // Move backward } }

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ¤íÒÊÑ§è ¤Çº¤ØÁ¡ÒÃËÁعµÑǢͧËع ¹µ ä»·Ò§´ Ò¹« ÒÂáÅТÇÒã¹â»Ãá¡ÃÁ㪠àÇÅÒ 1 ÇÔ¹Ò·Õ ¨Ðä´ ÁÁØ φ ¤ Ò˹֧è àÁ×Íè à·Õº¡ÑºÃÙ»·Õè A16-2 ´Ù¤Å ÒÂ¡ÑºÇ ÒàÊ ¹ÊÕ´Òí à» ¹¡íÒᾧ ´Ñ§¹Ñ¹é ÁØÁ φ ¨ÐÁÒ¡ËÃ×͹ ֧ͨ¢Ö¹é ÍÂÙ¡ ºÑ ª ǧ àÇÅÒ·Õ¶è ¡Ù Ë¹ ǧ ¼Ù¾ ² Ñ ¹ÒÊÒÁÒö»ÃѺᵠ§ä´ µÒÁ¤ÇÒÁàËÁÒÐÊÁ ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò¶ Ò˹ ǧàÇÅÒ㹡ÒÃËÁعµÑÇÁÒ¡ ¨Ð·íÒãË ÁÁØ φ ᤺ŧ áµ ¶Ò ÁÒ¡à¡Ô¹ä»ÍÒ¨·íÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·ÕÂè Í ¹¡ÅѺ·Ò§à´ÔÁä´ áµ ¶Ò ¹ ÍÂà¡Ô¹ä»¡çÍÒ¨·íÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ·è ÐÅØÍÍ¡¹Í¡àÊ ¹Ê¹ÒÁÊÕ´Òí ä»àÅ ËÃ×ÍÍÒ¨¨Ðà¤Å×Íè ¹·Õµè çÍÂÙÀ ÒÂã¹ÃÐËÇ Ò§àÊ ¹ÊÕ´Òí áµ äÁ Á¡Õ ÒáÃзº¢Íºà¢µ (ËÃ×͵ÃǨ¾ºàÊ ¹) ¡çà» ¹ä´

φ Ro bo -5 1

ÃÙ»·Õè A14-2 áÊ´§ÁØÁ㹡ÒÃà»ÅÕÂè ¹àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-51 Ping-Pong àÁ×Íè Áͧ¨Ò¡ ´ Ò¹º¹ Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 113

7.4 ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁàÊ ¹¢Í§Ëع ¹µ Robo-51 ¡ÒâѺÁÍàµÍà à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ ÁÕà˵ءÒó à¡Ô´¢Ö¹é ËÅÒÂ¡Ã³Õ ÍÂÙ ¡ÑºÊÀÒ¾áÇ´Å ÍÁáÅÐʹÒÁ ¡Ã³Õ·Õè 1 Ëع ¹µ Robo-51 ÍÂÙã ¹á¹ÇàÊ ¹¢Í§Ê¹ÒÁ ¹Ñ¹è ¤×Í á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂÍ Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 ¨Ö§ÍÂÙº ÃÔàdz¾×¹é ·ÕÊè ¢Õ ÒÇ á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒÍ Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 ¨Ö§ÍÂÙº ÃÔàdz¾×¹é ·ÕÊè ¢Õ ÒÇ ¡ÒäǺ¤ØÁ : Êѧè ãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè çµ Íä»áÅ Ç˹ ǧàÇÅÒ㹡ÒÃà¤Å×Íè ¹ ·ÕèµÃ§à» ¹ª ǧàÇÅÒÊÑé¹æ

àÁ×Íè äÁ ¾ºàÊ ¹ÊÕ´Òí

Ëع ¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô ·Õ¹è Òí ÁÒ㪠໠¹ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ Robo-51

¡Ã³Õ·Õè 2 Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õàè ÍÕ§¨Ò¡àÊ ¹ä»·Ò§¢ÇÒ ¹Ñ¹è ¤×Í á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂÍ Ò¹¤ Òä´ ¹Í Â¡Ç Ò 400 ¨Ö§µÃǨ¾ºàÊ ¹ÊÕ´Òí ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒÍ Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 ¨Ö§ÍÂÙº ÃÔàdz¾×¹é ·ÕÊè ¢Õ ÒÇ ¡ÒäǺ¤ØÁ : Êѧè ãË Ë¹Ø Â¹µ àÅÕÂé Ç« ÒÂáÅ Ç˹ ǧàÇÅÒà» ¹ª ǧàÇÅÒÊѹé æ

Rob o-5 1

Robo-51


114 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ã³Õ·Õè 3 Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õàè ÍÕ§¨Ò¡àÊ ¹ä»·Ò§« Ò ¹Ñ¹è ¤×Í á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂÍ Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 ¨Ö§ÍÂÙº ÃÔàdz¾×¹é ·ÕÊè ¢Õ ÒÇ á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒÍ Ò¹¤ Òä´ ¹Í Â¡Ç Ò 400 ¨Ö§µÃǨ¾ºàÊ ¹ÊÕ´Òí ¡ÒäǺ¤ØÁ : Êѧè ãË Ë¹Ø Â¹µ àÅÕÂé Ç¢ÇÒáÅ Ç˹ ǧàÇÅÒà» ¹ª ǧàÇÅÒÊѹé æ

-51 Robo

Robo-51

¡Ã³Õ·Õè 4 Ëع ¹µ Robo-51 ¾º·Ò§á¡ ¹Ñ¹è ¤×Í á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂÍ Ò¹¤ Òä´ ¹Í Â¡Ç Ò 400 ¨Ö§µÃǨ¾ºàÊ ¹ÊÕ´Òí ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒÍ Ò¹¤ Òä´ ¹Í Â¡Ç Ò 400 ¨Ö§µÃǨ¾ºàÊ ¹ÊÕ´Òí ¡ÒäǺ¤ØÁ : ¼Ù¾ ² Ñ ¹ÒÍÒ¨àÅ×Í¡ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç,àÅÕÂé Ç« Ò ËÃ×Í¢ÇÒ µÒÁµ ͧ¡ÒÃ

Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 115

¡Ô¨¡ÃÃÁ·Õè 17

¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-51 仵ÒÁàÊ ¹ 㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àʹ͡ÒäǺ¤ØÁËع ¹µ Robo-51 ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí «Ö§è à» ¹Ê¹ÒÁ·´Êͺ·Õ¶è ¡Ù Êà ҧ ¢Ö¹é â´ÂËع ¹µ Robo-51 ÁÕÁÍàµÍà 俵çáÅЪش࿠ͧ¢ÑºÅ Í 2 ªØ´ ÊÒÂÊÑ­­Ò³¢ÑºÁÍàµÍà ªÍ §·Õè 2 ¶Ù¡µ Íàª×Íè Á ࢠҷÕÁè ÍàµÍà ÅÍ ´ Ò¹¢ÇÒ Ê Ç¹ÊÒÂÊÑ­­Ò³¢ÑºÁÍàµÍà ªÍ §·Õè 1 ¶Ù¡µ Íàª×Íè ÁࢠҷÕÁè ÍàµÍà ÅÍ ´ Ò¹« ÒÂ Ê Ç¹´ Ò¹ ãµ ¢Í§Ëع ¹µ Robo-51 ÁÕἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô«Ö§è ¹íÒÁÒµÃǨ¨ÑºàÊ ¹µÔ´µÑ§é äÇ 2 µÑÇ â´Â·Õ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§« Òµ ÍࢠҡѺÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ AN5 ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§¢ÇÒµ ÍࢠҡѺÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ AN4 A17.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A17-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1501.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A17.2 ¹íÒËع ¹µ ä»ÇÒ§¤Ã ÍÁàÊ ¹ ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª à¾×Íè ãË Ë¹Ø Â¹µ Robo-51 ·íÒ§Ò¹ Êѧࡵ¡ÒÃà¤Å×Íè ¹·Õ·è àÕè ¡Ô´¢Ö¹é Ç Ò à» ¹ä»µÒÁ·Õµè Í §¡ÒÃËÃ×ÍäÁ


116 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A17-1 â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ẺàÅÕÂé Ç« Ò àÁ×Íè ¾º·Ò§á¡ (ÁÕµÍ ) /*——————————————————————————————————————————————————————————————————————————*/ // Program : Tracking line robot V1 // Description : Drive robot to tracking the black line by dual IR reflect sensor // Filename : act1701.h // C compiler : RIDE 51 V6.1 /*——————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Header include register of T89C51AC2 #include <dc_motor.h> // Module function drive DC motor #include <sound.h> // Module function drive sound #include <delay.h> // Module function delay process #include <adc_robo51.h> // Module function read input analog #define pow 250 // Define constant power drive robot #define ref 400 // Define constant reference compare track line int left=0,right=0; // Define variable for keep input analog value /***************** Function drive robot forward ******************************/ void run_fd(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot backward ******************************/ void run_bk(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot turn left ****************************/ void turn_left(int time_spin) { motor_fd(2,pow); // Drive left motor forward motor_bk(1,pow); // Drive right motor backward delay_ms(time_spin); // Delay for robot spin } /***************** Function drive robot turn right ***************************/ void turn_right(int time_spin) { motor_bk(2,pow); // Drive left motor backward motor_fd(1,pow); // Drive right motor forward delay_ms(time_spin); // Delay for robot spin } /****************************** Main function ********************************/ void main() { beep(); // Sound beep at once while(1) // Infinite loop { left = analog(5); // Read input analog channel 5(connect left sensor) right = analog(4); // Read input analog channel 4(connect right sensor)


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 117

â»Ãá¡ÃÁ·Õè A15-1 â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ẺàÅÕÂé Ç« Ò àÁ×Íè ¾º·Ò§á¡ (ÁÕµÍ ) if(left>ref && right>ref) // Both sensors detect white { run_fd(20); // Move forward } else if(left<ref && right>ref) // Left sensor detects black and // Right sensor detects white { turn_left(20); // Turn left } else if(left>ref && right<ref) // Left sensor detects white and // Right sensor detects black { turn_right(20); // Turn right } else if(left<ref && right<ref) // Both sensors detect black { run_fd(20); // Move forward turn_left(20); // Turn left } }

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁËØ ¹Â¹µ à¤Å×è͹·ÕèµÒÁàÊ ¹ÍÒÈÑ¡ÒõÃǨÊͺ»ÃÔÁÒ³¡ÒÃÃѺáʧÊз ͹¢Í§ ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é « ÒÂáÅТÇÒ ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡¨Ð¶Ù¡¹íÒä»à»ÃÕºà·Õº¡Ñºà§×Íè ¹ä¢áÅеդÇÒÁà¾×Íè ãË ä´ ¼ÅÅѾ¸ 令Ǻ¤ØÁ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ Í¡Õ ¤Ãѧé ˹֧è â´Â¡ ͹˹ Ò¹Õäé ´ ͸ԺÒµÑÇÍ ҧ¡ÒûÃÐÁÒ³¤ ÒÍ Ò§ÍÔ§ ¢Í§àÊ ¹ÊÕ´Òí ෠ҡѺ 400 (¤ Ò¹ÕÍé Ò¨à»ÅÕÂè ¹á»Å§ä´ ã¹ÊÀÒ¾áÇ´Å ÍÁ·Õáè µ¡µ Ò§¡Ñ¹ ÃÇÁ¶Ö§ÃٻẺ¡ÒõԴµÑ§é ἧ ǧ¨ÃµÃǨ¨ÑºàÊ ¹´ ÇÂ) ´Ñ§¹Ñ¹é ã¹â»Ãá¡ÃÁ¨Ö§¡íÒ˹´¤ ÒÍ Ò§Íԧ㹡ÒÃà»ÃÕºà·Õºà¾×Íè á¡ÃÐËÇ Ò§àÊ ¹ÊÕ´Òí áÅÐ ¾×¹é ÊÕ¢ÒÇä»ÂѧµÑÇá»Ã ref ãË à·Õº෠ҡѺ 400 ¨Ò¡¡ÒûÃСÒÈ #define ref 400 àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¨ÐÁÕÊ­ Ñ ­Ò³àÊÕÂ§Ë¹Ö§è ¤Ãѧé ËÅѧ¨Ò¡¹Ñ¹é ࢠÒÊÙ¡ ÒÃǹµÃǨÊͺà§×Íè ¹ä¢áÅÐ µÕ¤ÇÒÁ¨Ò¡¡ÒÃÍ Ò¹¤ ÒÍйÒÅÍ¡¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂáÅТÇÒÀÒÂãµ à§×Íè ¹ä¢¢Í§ while(1){ } à¾×Íè µÃǨÊÍºÇ Ò á¼§Ç§¨ÃµÃǨ¨Ñºáµ ÅеÑǾºàÊ ¹ÊÕ´Òí ËÃ×;׹é ÊÕ¢ÒÇ â´ÂẠ§à§×Íè ¹ä¢´Ñ§¹Õé l

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹µÑÇã´Í Ò¹¤ Òä´ ¹Í Â¡Ç Ò 400 ¶×ÍÇ Ò á¼§Ç§¨ÃµÃǨ¨Ñº¹Ñ¹é ¾ºàÊ ¹ÊÕ´Òí

l

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹µÑÇã´Í Ò¹¤ Òä´ ÁÒ¡¡Ç Ò 400 ¶×ÍÇ Ò á¼§Ç§¨ÃµÃǨ¨Ñº¹Ñ¹é ¾º¾×¹é ÊÕ¢ÒÇ

ÊÒÁÒÃ¶Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò·յè Í ¡Ñºª ͧ AN5 áÅÐἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ ·Õµè Í ¡Ñºª ͧ AN4) ´ ǤíÒÊѧè left = analog(5); // Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« ÒÂà¡çºäÇ ·Õè left right = analog(4); // Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒà¡çºäÇ ·Õè right ´Ñ§¹Ñ¹é à§×Íè ¹ä¢¡ÒõÃǨÊͺ¢Í§â»Ãá¡ÃÁ¹Õ¨é §Ö Ạ§à» ¹ 4 ¡Ã³Õ ´Ñ§¹Õé


118 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

â»Ãá¡ÃÁ·Õè A17-1 â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-51 à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ẺàÅÕÂé Ç« Ò àÁ×Íè ¾º·Ò§á¡ (¨º) if(left>ref && right>ref)

// ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹¾º¾×¹é ¢ÒÇ·Ñ§é ¤Ù

{ run_fd(20); Robo-51

// à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò 20 ÁÔÅÅÔÇ¹Ô Ò·Õ

}

else if(left<ref && right>ref)

// ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾ºàÊ ¹ÊÕ´Òí ᵠἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ¾º¾×¹é { turn_left(20);

Rob o-5 1

// àÅÕÂé Ç« Ò 20 ÁÔÅÅÔÇ¹Ô Ò·Õ // à¾×Íè »ÃѺãË á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é Êͧ¤Ã ÍÁàÊ ¹ÊÕ´Òí

} else if(left>ref && right<ref)

// ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾º¾×¹é ¢ÒÇ áµ á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ¾ºàÊ ¹ÊÕ´Òí { turn_right(20); 51 Robo-

// àÅÕÂé Ç¢ÇÒ 20 ÁÔÅÅÔÇ¹Ô Ò·Õ // à¾×Íè »ÃѺãË á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é Êͧ¤Ã ÍÁàÊ ¹ÊÕ´Òí

} else if(left<ref && right<ref)

// ¶ Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é Êͧ¾º·Ò§á¡ËÃ×;ºàÊ ¹ÊÕ´Òí ·Ñ§é ¤Ù { run_fd(20); Robo-51

turn_left(20);

// à¤Å×Íè ¹·Õµè ç仢 ҧ˹ ÒàÅ硹 Í (20 ÁÔÅÅÔÇ¹Ô Ò·Õ) // àÅÕÂé Ç« ÒÂàÁ×Íè ¾º·Ò§á¡

}

Robo-51


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 119

º··Õè 8 ¤Çº¤ØÁËع ¹µ Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô Ëع ¹µ Robo-51 ÊÒÁÒö·Õ¨è зíÒ§Ò¹ä´ ´Ç µÑÇàͧ â´ÂÍÒÈÑÂἧǧ¨ÃµÃǨ¨Ñºáººµ Ò§æ Ê § ¢ ÍÁÙÅÁÒãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡µÑ´ÊԹ㨠¹Í¡¨Ò¡¹Ñ¹é ÂѧÊÒÁÒöÃѺ¢ ÍÁÙÅà¾×Íè ¤Çº¤ØÁẺàÇÅÒ ¨ÃÔ§¨Ò¡ÀÒ¹͡´ ÇÂÍØ»¡Ã³ ¤Çº¤ØÁ¨Ò¡ÃÐÂÐä¡Å¼ Ò¹áʧÍÔ¹¿ÃÒàÃ´ä´ ã¹º·¹Õé¹íÒàʹ͡Òà »ÃÐÂØ¡µ Ë¹Ø Â¹µ Robo-51 ãË ÊÒÁÒö·íҧҹà ÇÁ¡ÑºÍØ»¡Ã³ ʧ ÊÑ­­Ò³¤Çº¤ØÁÃÐÂÐä¡ÅËÃ×ÍÃÕâÁµ ¤Í¹â·ÃÅä´

8.1 ER-4 Easy Remote4 : ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô 4 ª ͧ à» ¹ÃÕâÁµ¤Í¹â·ÃÅẺÍÔ¹¿ÃÒàô·ÕèÍ͡ẺãË ãª §Ò¹ä´ à͹¡»ÃÐʧ¤ â´Â㹡ÒÃÊ § ÊÑ­­Ò³ÍÍ¡¹Ñ¹é ¨Ðà» ¹¢ ÍÁÙÅ͹ءÃÁ·Õ¼è ÊÁ¡Ñº¤Å×¹è ¾ÒË 38kHz â´Â¡Ãкǹ¡Ò÷ѧé ËÁ´ä´ ÃºÑ ¡Òà ¤Çº¤ØÁ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà º¹µÑÇÃÕâÁµ¤Í¹â·ÃÅà¾Õ§µÑÇà´ÕÂÇ ¤Ø³ÊÁºÑµÔ·Ò§à·¤¹Ô¤

㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¤Çº¤ØÁ¡ÒÃÊà ҧáÅÐÊ §ÊÑ­­Ò³¢ ÍÁÙÅ l 㪠LED ÍÔ¹¿ÃÒàô 3 ÁÔÅÅÔàÁµÃ ÃÐÂзíÒ¡Òà 8-10 àÁµÃã¹¾×¹ é ·Õâè Å § l ÁÕÊÇÔµª ¤Çº¤ØÁÍÔÊÃÐ 4 ª ͧ l ¡Ô¹¡íÒÅѧ§Ò¹µèÒí â´ÂࢠÒÊÙâ ËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹·Ñ¹·ÕàÁ×Í è Ê §¢ ÍÁÙÅàÊÃç¨ l 㪠ä¿àÅÕÂ é §ã¹Â Ò¹ 2.4 ¶Ö§ 3.0V ¨Ò¡áºµàµÍÃÕè AA 2 ¡ ͹ ãª ä´ ·§Ñé Ẻ ¸ÃÃÁ´ÒáÅÐẺ»ÃШØä´ l Ê §¢ ÍÁÙÅÍ͡Ẻ͹ءÃÁ´ ÇÂÁҵðҹ RS-232 ÍѵÃҺʹ 1,200 ºÔµ µ ÍÇÔ¹Ò·Õ ã¹ÃٻẺ 8N1 (ºÔµ¢ ÍÁÙÅ 8 ºÔµ äÁ Á¡Õ ÒõÃǨÊͺ¾ÒÃÔµÕé áÅÐ ºÔµ» ´· Ò 1 ºÔµ) l

ÃÙ»·Õè 8-1 ˹ ÒµÒáÅФسÊÁºÑµ¢Ô ͧ ER-4 ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô


120 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

+3-5V

7

SW1 "B"

GP0

V,, GP5

6

SW2 "C"

5

"D"

3

SW3

SW3

K A IR-LED

2

GP1

IC1 ER-04FW

R1 1k

Easy remote4

"A"

LED1 IR-LED

1

Q1 BC338

GP2

GP4

2-5V

, +

GND 8

ÃÙ»·Õè 8-2 ǧ¨ÃÊÁºÙó ¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4

8.1.1 ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã

* )

ÃÙ»·Õè 8-3 áÊ´§¢ ÍÁÙŵÑÇÍÑ¡Éâͧ ÊÇÔµª áµ ÅеÑǺ¹ÃÕâÁµ¤Í¹â·ÃÅ

ǧ¨Ã¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4 áÊ´§ã¹ÃÙ»·Õè 8-2 ÁÕÊÇÔµª 4 µÑÇ·Õµè Í à¢ Ò¡Ñº¢Ò GP0, GP1, GP2 áÅÐ GP4 ¢Í§ IC1 «Ö§è 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC12F629 â´ÂäÁ ¨Òí à» ¹µ ͧµ ͵Ñǵ Ò¹·Ò¹ ¾ÙÅÍÑ»ÀÒ¹͡à¹×èͧ¨Ò¡ÊÒÁÒö¡íÒ˹´ãË ÁÕ¡ÒþÙÅÍÑ»ä´ ¼ Ò¹·Ò§«Í¿µ áÇÃ Ê Ç¹¡ÒâѺ LED ÍÔ¹¿ÃÒàô (LED1) à¾×Íè ãË Á¡Õ Òí ÅÑ§Ê §ÊÙ§ ÊÒÁÒÃ¶Ê §ä´ ä¡Å ¨Ö§µ ͼ ҹǧ¨Ã ¢ÂÒÂâ´Â㪠·ÃÒ¹«ÔÊàµÍà Q1

8.1.2 ÃٻẺ¡ÒÃÊ §¢ ÍÁÙŢͧÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾×Íè ãË ·Ò§ÀÒ¤ÃѺÊÒÁÒÃ¶Í Ò¹¤ Ò¢ ÍÁÙÅ¡Òá´ÊÇÔµª ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅä´ â´Â§ Ò 㹡ÒÃÊ § ¢ ÍÁÙŢͧÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¨Ö§ãª ¡ÒÃÊ §¢ ÍÁÙÅẺ͹ءÃÁ µÒÁÁҵðҹ RS-232 ´ ÇÂÍѵÃҺʹ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ ã¹ÃٻẺ 8N1 ¤ Ò¢ ÍÁÙÅ·ÕÊè § ¹Ñ¹é à» ¹µÑÇÍÑ¡Éâֹé ÍÂÙ¡ ºÑ ¡Òá´ÊÇÔµª µÇÑ ã´ ´Ñ§áÊ´§ µíÒá˹ §¢Í§ÊÇÔµª ã¹ÃÙ»·Õè 7-3 l

¡´ÊÇÔµª A Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà A µÑǾÔÁ¾ ãË­ ÊÅѺµÑǾÔÁ¾ àÅç¡

l

¡´ÊÇÔµª B Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà B µÑǾÔÁ¾ ãË­ ÊÅѺµÑǾÔÁ¾ àÅç¡

l

¡´ÊÇÔµª C Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà C µÑǾÔÁ¾ ãË­ ÊÅѺµÑǾÔÁ¾ àÅç¡

l

¡´ÊÇÔµª D Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà D µÑǾÔÁ¾ ãË­ ÊÅѺµÑǾÔÁ¾ àÅç¡


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 121

0.1µF 50V 1

+ S

3

2

Infrared Module Out GND

!

! Vcc

ÃÙ»·Õè 7-4 áÊ´§ÅѡɳТͧâÁ´ÙÅÃѺáʧÍÔ¹¿Òàô, µíÒá˹ §¢Ò áÅÐǧ¨Ã¢Í§á¼§Ç§¨ÃâÁ´ÙÅÃѺáʧ ÍÔ¹¿ÃÒàô 38kHz ÊÒà˵ط¡Õè ÒÃÊ §ÊÅѺµÑǾÔÁ¾ ãË­ ¡ºÑ µÑǾÔÁ¾ àÅç¡à¾×Íè ãË µÇÑ ÃѺ·ÃÒºÇ Ò ¡Òá´ÊÇÔµª ¹¹Ñé à» ¹¡Òà ¡´áºº¤ Ò§µ Íà¹×èͧ ËÃ×Íà» ¹¡ÒᴻŠÍÂà» ¹¨Ñ§ËÇÐ «Ö觨ÐãË ¼ÅÅѾ¸ 㹡ÒäǺ¤ØÁ·Õèᵡµ Ò§¡Ñ¹ ¹Ñ¹è ¤×Ͷ Ò¡´ÊÇÔµª à» ¹¨Ñ§ËÇÐ ¤Ãѧé áá¨ÐÊ §¢ ÍÁÙŵÑÇÍѡɳẺµÑǾÔÁ¾ ãË­ ¶ Ò¡´µÑÇà´ÔÁ㹤ÃÑ§é µ Í ÁÒ ¢ ÍÁÙÅ·ÕÊè § ÍÍ¡¨Ðà» ¹µÑÇÍÑ¡ÉÃẺµÑǾÔÁ¾ àÅç¡ áµ ¶Ò ËÒ¡¡´¤ Ò§µ Íà¹×Íè § ¨ÐÊ §¢ ÍÁÙŵÑÇÍÑ¡ÉÃẺ Å ÒÊØ´¹Ñé¹ÍÍ¡ÁÒµÅÍ´àÇÅÒ

8.2 ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz ÁÕǧ¨ÃáÊ´§ã¹ÃÙ»·Õè 8-4 ËÅÑ¡¡Ò÷íÒ§Ò¹¤×Í àÁ×èͨ ÒÂä¿ãË á¡ Ç§¨ÃáÅ Ç ÂѧäÁ ÁÕ¡ÒÃÊ §áʧ ÍÔ¹¿ÃÒàô·Õ¼è ÊÁÊÑ­­Ò³¾ÒË 38kHz àÍÒµ ¾µØ ¢Í§Ç§¨Ã¨Ðà» ¹Åͨԡ 1 µÅÍ´àÇÅÒ ¨¹¡Ãзѧè àÁ×Íè ÁÕ¡ÒÃÊ §áʧÍÔ¹¿ÃÒàô·ÕèÁÕÊÑ­­Ò³¾ÒË 38kHz ¼ÊÁÍÂÙ ´ Ç âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô¨Ð·íÒ§Ò¹ ãË àÍÒµ ¾µØ à» ¹Åͨԡ 0

8.3 Êà ҧäźÃÒÃÕä¿Å ÊÒí ËÃѺÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾×Íè ãË ÊÒÁÒöµÔ´µ ͡ѺÃÕâÁµ¤Í¹â·ÃÅ ER-4 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ¢Í§Ëع ¹µ Robo-51 ä´ § ÒÂ¢Ö¹é ¨Ö§¤ÇÃÊà ҧä¿Å äźÃÒÃնʹÃËÑʤíÒÊÑ§è ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 â´ÂµÑ§é ª×Íè à» ¹ remote.h à¾×Íè ¹íÒä»»ÃÐÂØ¡µ 㪠à¢Õ¹â»Ãá¡ÃÁãË Ë¹Ø Â¹µ Robo-51 ãË ÊÒÁÒöÃѺ¤íÒÊÑ§è ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾×Íè ·íÒ§Ò¹µ Íä»

8.3.1 ËÅÑ¡¡ÒÃÃѺÊÑ­­Ò³¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¡ÒÃÃѺÊÑ­­Ò³¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¨Ðµ ͧµÔ´µÑé§á¼§Ç§¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz «Ö§è ãË àÍÒµ ¾µØ à» ¹ÊÑ­­Ò³´Ô¨µÔ ÍÅ â´Âµ ÍࢠҡѺª ͧ P3.2 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§


122 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

ËØ ¹Â¹µ Robo-51 «Öè§à» ¹ÍÔ¹¾ØµÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÊÑ­­Ò³ÀÒ¹͡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà T89C51AC2 ´ Ç ·Õè¾Íà µ¹ÕéàÁ×è͵ÃǨ¨ÑºÊÑ­­Ò³ÍÔ¹¿ÃÒàÃ´ä´ â´Â¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ àÁ×è;º ÊÑ­­Ò³¢Íº¢Òŧ·Õ¢è Ò¾Íà µ¹Õé «Ö§è µÃ§¡ÑºÊÑ­­Ò³àÃÔÁè µ ¹¡ÒÃÊ §¢ ÍÁÙÅËÃ×ͺԵàÃÔÁè µ ¹ (start bit) ¹Ñ¹è àͧ áÅ ÇÍÒÈÑ¡ÒÃ˹ ǧàÇÅÒà¾×èÍãË ä´ ÃٻẺµÃ§¡Ñº¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁµÒÁÁҵðҹ RS-232 ¨¹¤Ãº 8 ºÔµ «Ö§è ¡Ãкǹ¡ÒöʹÃËÑÊ¢ ÍÁÙŷѧé 8 ºÔµ«Ö§è à» ¹¤íÒÊÑ§è ·ÕÊè § ÁÒ¹Õ¨é Ðà¡Ô´¢Ö¹é ÀÒÂ㹿 §¡ ª¹Ñè ¡ ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ª ͧ 0 (External interrupt 0 ËÃ×Í INT0) ¨Ò¡ËÅÑ¡¡Ò÷ѧé ËÁ´ÊÒÁÒö¹íÒÁÒÊà ҧ¿ §¡ ª¹Ñè à¾×Íè ¨Ñ´à¡çºà» ¹ä¿Å äźÃÒÃÕ remote.h à¾×Íè àÃÕ¡ 㪠µÍ ä» â´ÂÃÒÂÅÐàÍÕ´¢Í§ remote.h áÊ´§ã¹â»Ãá¡ÃÁ·Õè 8-1

8.3.2 ¤íÒ͸ԺÒ¿ §¡ ª¹Ñè ã¹ remote.h (1) ¿ §¡ ª¹Ñè get_remote : ¶Í´ÃËÑÊ¢ ÍÁÙÅ·ÕÃè ºÑ ä´ ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ÃٻẺ¿ §¡ ªÑè¹ unsigned char get_remote(void) ¾ÒÃÒÁÔàµÍà äÁ ÁÕ ¡Òä׹¤ Ò ¤×¹¤ Ò¢ ÍÁÙÅà» ¹¤íÒÊÑ§è ·Õäè ´ ¨Ò¡¡ÒöʹÃËÑʢͧÃÕâÁµ¤Í¹â·ÃÅ ER-4 ã¹ÃٻẺ µÑÇÍÑ¡Éà a , A , b , B , c , C , d , D «Ö§è ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒÃàÅ×Í¡¡´»ØÁ ¨Ò¡µÑÇÊ § ÃÒÂÅÐàÍÕ´ à» ¹¿ §¡ ª¹Ñè ·ÕÊè § ¤ Ò¢ ÍÁÙŢͧµÑÇá»Ã ir_command «Ö§è à¡çº¤ Ò¤íÒÊÑ§è ¨Ò¡¡Òà ¶Í´ÃËÑʢͧÃÕâÁµ¤Í¹â·ÃÅ ER-4 (2) ¿ §¡ ª¹Ñè clear_remote : à¤ÅÕÂà ¤Ò à¾×Íè àÃÔÁè µ ¹·íÒ§Ò¹ ÃٻẺ¿ §¡ ªÑè¹

void clear_remote(void)

¾ÒÃÒÁÔàµÍÃ

äÁ ÁÕ

¡Òä׹¤ Ò

äÁ Á¡Õ Òä׹¤ Ò

ÃÒÂÅÐàÍÕ´ à¤ÅÕÂà ¤Ò à¾×Íè ãË àÃÔÁè µ ¹

à» ¹¿ §¡ ª¹Ñè à¤ÅÕÂà ¤Ò ¢ ÍÁÙŢͧµÑÇá»Ã ir_command Ê Ç¹ãË­ àÃÕ¡㪠§Ò¹à¾×Íè

ËÁÒÂàËµØ ã¹¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹ã¹äźÃÒÃÕ remote.h ¹Ñ鹨е ͧµÔ´µÑé§áÅе Íἧǧ¨ÃâÁ´ÙÅÃѺáʧ ÍÔ¹¿ÃÒàô 38kHz ࢠҷժè Í § P3.2


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 123

â»Ãá¡ÃÁ·Õè 8-1 ä¿Å äźÃÒÃÕ remote.h ÊíÒËÃѺ¶Í´ÃËÑÊ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô ER-4 /*———————————————————————————————————————————————————————————————————*/ // Program : Decode command from Easy remote // Description : Receive command from Easy remote to control the robot // Filename : remote.h // C compiler : RIDE 51 V6.1 /*———————————————————————————————————————————————————————————————————*/ sbit irm_data = P3^2; // Define port input remote sensor unsigned char ir_command=0; // Define for buffer command from Easy remote /****************** Function Delay for baudrate 1200 *************************/ void delay_baud1200() // Delay baudrate 1200 bps { unsigned int x,a; // Keep for counter loop for(x=0;x<1;x++) { for(a=0;a<731;a++); // Loop for delay 833 us } } /****************** Function Delay for 1200 baudrate (for start bit) **********/ void start_1200() // Delay baudrate 1200 while start bit { unsigned int x,a; // Keep for counter loop for(x=0;x<1;x++) { for(a=0;a<365;a++); // Loop for delay 416 us } } /************* Service interrupt routine for receive command ******************/ void service_ex0(void) interrupt 0 { unsigned char i; // Define for counter loop if(irm_data==0) // Check start bit true? { start_1200(); // Delay for start bit for(i=0;i<8;i++) // For loop count 8 time(for receive data 8 bit) { delay_baud1200(); // Delay for data 1 bit ir_command = ir_command>>1; // Shift data bit to right 1 time if(irm_data) // If data bit = high ir_command = ir_command | 0x80; // Config data bit = “1” } delay_baud1200(); // Delay for stop bit } } /************** Function read Command from Easy remote ***********************/ unsigned char get_remote(void) { return(ir_command); // Return command } /*********************** Function clear command ******************************/ void clear_remote() { ir_command = 0; // Clear command } /*********************** Function initial for Easy remote ********************/ void remote_init(void) { irm_data = 1; // Configuration input P3.2 EX0 = 1; // Enable External interrupt0 IT0 = 1; // Detect falling edge EA = 1; // Enable interrupt all }


124 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 18

·´ÊͺÃѺ¢ ÍÁÙÅÃÕâÁµ¤Í¹â·ÃÅ ER-4 A18.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A18-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1801.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2 ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip A18.2 ¹íÒẵàµÍÃÕè AA ¨íҹǹ 2 ¡ ͹ãÊ ãË á¡ ÃâÕ Áµ¤Í¹â·ÃÅ ER4 A18.3 Ãѹâ»Ãá¡ÃÁ ·´Åͧ¡´»ØÁ µ Ò§æ º¹ÃÕâÁµ¤Í¹â·ÃÅ ER-4 Êѧࡵ¼ÅÅѾ¸ ·àÕè ¡Ô´¢Ö¹é

â»Ãá¡ÃÁ·Õè A18-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒõԴµ ͡ѺÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¢Í§Ëع ¹µ Robo-51 (ÁÕµÍ ) /*————————————————————————————————————————————————————————————————————————*/ // Program : Test Infrared receiving // Description : Control LED at P3.5 P3.6, P3.7 and sound by ER-4 Remote control // Filename : act1801.c // C compiler : RIDE 51 V6.1 /*————————————————————————————————————————————————————————————————————————*/ #include <C51ac2.h> // Header include register of P89C51AC2 #include <delay.h> // Module function Delay #include <remote.h> // Module function ER-4 Remote control #include <sound.h> // Module function Sound sbit led1 = P3^5; // Define LED on P3.5 port sbit led2 = P3^6; // Define LED on P3.6 port sbit led3 = P3^7; // Define LED on P3.7 port void main() { remote_init(); // Initialize ER-4 remote control while(1) // Looping { switch(get_remote()) // Check command from ER-4 remote control { case ‘a’ : led1 = 0; // LED P3.5 on clear_remote(); // Clear command break; // Out of from case case ‘A’ : led1 = 1; // LED P3.5 off clear_remote(); // Clear command break; // Out of from case case ‘b’ : led2 = 0; // LED P3.6 on clear_remote(); // Clear command break; // Out of from case case ‘B’ : led2 = 1; // LED P3.6 off clear_remote(); // Clear command break; // Out of from case case ‘c’ : led3 = 0; // LED P3.7 on clear_remote(); // Clear command break; // Out of from case


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 125

â»Ãá¡ÃÁ·Õè A18-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒõԴµ ͡ѺÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¢Í§Ëع ¹µ Robo-51 (¨º) case ‘C’ : led3 = 1; clear_remote(); break; case ‘d’ : beep(); clear_remote(); break; case ‘D’ : beep(); clear_remote(); break;

// // // // // // // // //

LED P3.7 off Clear command Out of from case Beep 1 time Clear command Out of from case Beep 1 time Clear command Out of from case

} } }

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ ÊíÒËÃѺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õàé » ¹¡Ò÷´Êͺ¡ÒÃÃѺ¤íÒÊÑ§è ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 áŠǹíÒµÑÇÍÑ¡Éà »ÃШíÒ»ØÁ ¤íÒÊѧè ã¹áµ ÅФÕ· ¶Õè ¡Ù ¡´ÁҤǺ¤ØÁàÍÒµ ¾µØ «Ö§è ä´ á¡ LED ¢Í§ P3.5-P3.7 áÅСíÒà¹Ô´ÊÑ­­Ò³àÊÕ§ 1 ¤ÃÑ§é «Ö§è ÀÒÂã¹â»Ãá¡ÃÁ¨ÐÁÕ¡ÒûÃСÒÈ #include <remote.h> äÇ µÍ¹àÃÔÁè µ ¹à¾×Íè ãË ÊÒÁÒöàÃÕ¡ 㪠§Ò¹¿ §¡ ª¹Ñè get_remote áÅÐ clear_remote ä´ ¹¹Ñè àͧ ¹Í¡¨Ò¡¹Õãé ¹Ê Ç¹áá¢Í§ main ÁÕ¡ÒÃÍÔ¹àÔ ªÕÂÅ¡ÒÃ㪠§Ò¹¢Í§äźÃÒÃÕ¹´Õé Ç Â¿ §¡ ª¹Ñè remote_init ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¡ç¨ÐÍ Ò¹¤íÒÊÑ§è ¨Ò¡¡Òá´»ØÁ ÃÕâÁµ¨Ò¡¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè get_remote ´ ǤíÒÊѧè switch-case ÊÑ§à¡µÇ Ò ÀÒÂã¹â»Ãá¡ÃÁáµ ÅÐ case ¡ ͹¨º¡Ò÷íÒ§Ò¹´ ǤíÒÊѧè break ¨Ð·íÒ¡ÒÃà¤ÅÕÂà ¤íÒÊÑ§è ·Õ¤è Ò §ã¹ºÑ¿à¿Íà ´Ç ¿ §¡ ª¹Ñè clear_remote à¾×Íè ·ÕÇè Ò ã¹ÃÐËÇ Ò§·ÕÂè §Ñ äÁ Á¡Õ Òá´»ØÁ ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 â»Ãá¡ÃÁ¨Ðä´ äÁ ǹࢠÒä»·íÒ§Ò¹ã¹Ê ǹà´ÔÁ ª ÇÂãË ¡Ò÷íÒ§Ò¹¶Ù¡µ ͧÁÒ¡¢Ö¹é ¡µÑÇÍ ҧ àÁ×Íè ¡´»ØÁ D ·ÕÃè âÕ Áµ¤Í¹â·ÃÅ ER-4 ¤ Ò·Õäè ´ ÍҨ໠¹ d ËÃ×Í D ·íÒãË à¡Ô´ÊÑ­­Ò³àÊÕ§ ´Ñ§¢Ö¹é 1 ¤ÃÑ§é ¶ ÒäÁ Á¡Õ Òá´µ Í¡ç¨ÐäÁ à¡Ô´ÊÑ­­Ò³àÊÕ§´Ñ§¡Å ÒÇ ËÒ¡á¡ â»Ãá¡ÃÁã¹Ê ǹ¢Í§¡ÒõÃǨÊͺ case d áÅÐ case D ¨Ò¡ case ‘d’ : beep(); clear_remote(); break; case ‘D’ : beep(); clear_remote();

break;

à» ¹ case ‘d’ : beep(); break; case ‘D’ : beep(); break;

¨Ð¾ºÇ ÒàÁ×Íè ¡´»ØÁ D ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¼Å·Õäè ´ ¤Í× àÁ×Íè ¡´»ØÁ º¹ÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾Õ§¤Ãѧé à´ÕÂÇáŠǻŠÍ àÊÕ§¨Ð´Ñ§¢Ö¹é µÅÍ´àÇÅÒ à¾ÃÒФíÒÊѧè à´ÔÁ·Õ¤è Ò §ÍÂÙã ¹ºÑ¿à¿ÍÃ Â§Ñ äÁ ä´ ¶¡Ù à¤ÅÕÂà ´Ç ¡ÒÃàÃÕ¡ Robo-51 ¿ §¡ ª¹Ñè clear_remote ¹Ñ¹è àͧ


126 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

¡Ô¨¡ÃÃÁ·Õè 19

¤Çº¤ØÁËع ¹µ Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ A19.1 à» ´â»Ãá¡ÃÁ RIDE áÅ Çà¢Õ¹â»Ãá¡ÃÁ·Õè A19-1 ºÑ¹·Ö¡ã¹ª×Íè ä¿Å act1901.c ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ä¿Å ÊáÙ ¼§Ç§¨Ã RBX-51AC2plus ¢Í§Ëع ¹µ Robo-51 ´ ÇÂâ»Ãá¡ÃÁ Flip

â»Ãá¡ÃÁ·Õè A19-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁËع ¹µ Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ ER-4 (ÁÕµÍ ) /*—————————————————————————————————————*/ // Program : Remote control robot // Description : Robot controlled by ER-4 remote control Robot receive command // : from remote control by serial communication at baud 1200 bps // Filename : act1901.c // C compiler : RIDE 51 V6.1 /*—————————————————————————————————————*/ #include <C51ac2.h> // Header include register of T89C51AC2 #include <delay.h> // Module function delay process #include <dc_motor.h> // Module function drive DC motor #include <remote.h> // Module function for remote #include <sound.h> // Module function drive sound #include <lcd_robo51.h>// Module function LCD #define pow 200 // Define constant for power drive DC motor void run_fd(int time_spin) { motor_fd(2,pow); // Motor channel 2 forward motor_fd(1,pow); // Motor channel 1 forward delay_ms(time_spin); // Delay time for robot drive forward } void run_bk(int time_spin) { motor_bk(2,pow); // Motor channel 2 backward motor_bk(1,pow); // Motor channel 1 backward delay_ms(time_spin); // Delay time for robot drive backward } void turn_left(int time_spin) { motor_fd(2,pow); // Motor channel 2 forward motor_bk(1,pow); // Motor channel 1 backward delay_ms(time_spin); // Delay time for robot spin turn left } void turn_right(int time_spin) { motor_bk(2,pow); // Motor channel 2 backward motor_fd(1,pow); // Motor channel 1 forward delay_ms(time_spin); // Delay time for robot spin turn right } void main() { beep(); // Sound beep 1 time remote_init(); // Initial remote while(1) // Infinite loop


àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 l 127

â»Ãá¡ÃÁ·Õè A17-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁËع ¹µ Robo-51 ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ ER-4 (¨º) { switch(get_remote()) // Check command for receive { case ‘a’ : run_bk(100); // Drive robot backward when receive command “a” clear_remote(); // Clear command break; // Out from case case ‘A’ : run_bk(100);// Drive robot backward when receive command “A” clear_remote(); // Clear command break; // Out from case case ‘b’ : turn_right(100); // Turn right when receive command “b” motor_stop(all); // Robot stop clear_remote(); // Clear command break; // Out from case case ‘B’ : turn_right(100); motor_stop(all); clear_remote(); break;

// // // //

Turn right when receive command “B” Robot stop Clear command Out from case

case ‘c’ : turn_left(100); motor_stop(all); clear_remote(); break;

// // // //

Turn right when receive command “c” Robot stop Clear command Out from case

case ‘C’ : turn_left(100); motor_stop(all); clear_remote(); break;

// // // //

Turn right when receive command “C” Robot stop Clear command Out from case

case ‘d’ : run_fd(100); clear_remote(); break;

// Turn right when receive command “d” // Clear command // Out from case

case ‘D’ : run_fd(100); clear_remote(); break;

// Turn right when receive command “D” // Clear command // Out from case

default }

// Out from case

: break;

}

}

ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁ¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õàé » ¹¡ÒäǺ¤ØÁËع ¹µ ãË à¤Å×Íè ¹·Õµè ÒÁ¤íÒÊÑ§è ¨Ò¡¡Òá´ÊÇÔµª ·ÃÕè âÕ Áµ¤Í¹â·ÃÅ ER-4 «Ö§è ã¹ ¡ÒâѺà¤Å×Íè ¹ãË µÃ§ä»¢ ҧ˹ Ò, ¶ÍÂËÅѧ, àÅÕÂé Ç« Ò áÅÐàÅÕÂé Ç¢ÇÒ ¹Í¡¨Ò¡¹Ñ¹é ã¹â»Ãá¡ÃÁ¹Õ¡é ÒÃ˹ ǧàÇÅÒ㹡ÒÃËÁعµÑÇáÅСíÒ˹´¡íÒÅѧ¢Ñºà¤Å×Íè ¹¢Í§Ëع ¹µ ÊÒÁÒö »ÃѺà»ÅÕè¹ãË àËÁÒÐÊÁ¡ÑºÊÀÒ¾¡ÒÃà¤Å×è͹·Õè¢Í§ËØ ¹Â¹µ â´ÂÍÒ¨·´Åͧ»ÃѺà»ÅÕ蹡ÒÃ˹ ǧàÇÅÒ㹪 ǧ ¨Ñ§ËÇÐËÁعµÑÇ·Ò§« Ò 90 ͧÈÒ (àÁ×Íè ¡´»ØÁ C à¾Õ§¤Ãѧé à´ÕÂÇ) áÅÐËÁعµÑÇ·Ò§¢ÇÒ 90 ͧÈÒ (àÁ×Íè ¡´»ØÁ B à¾Õ§¤Ãѧé à´ÕÂÇ)


128 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

MCS-51

A19.2 Ãѹâ»Ãá¡ÃÁ ·´Åͧ¡´»ØÁ µ Ò§æ º¹ÃÕâÁµ¤Í¹â·ÃÅ ER-4 Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ Robo-51 ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-51 à» ¹´Ñ§¹Õé l àÁ×Í è ¡´»ØÁ D

Ëع ¹µ Robo-51 à¤Å×Íè ¹·Õµè çä»Í ҧµ Íà¹×Íè §

l àÁ×Í è ¡´»ØÁ A

Ëع ¹µ Robo-51 ¶ÍÂËÅѧÍ ҧµ Íà¹×Íè §

àÁ×Íè ¡´»ØÁ C

Ëع ¹µ Robo-51 ËÁعµÑÇä»·Ò§« Ò ¶ Ò¡´ÊÇÔµª º¹ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¤ Ò§ ¨ÐàÅÕÂé ÇÍ ҧµ Íà¹×Íè §¨¹¡Ç ҨлŠÍ»ØÁ

l àÁ×Í è ¡´»ØÁ B

Ëع ¹µ Robo-51 ËÁعµÑÇä»·Ò§¢ÇÒ ¶ Ò¡´ÊÇÔµª º¹ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¤ Ò§ ¨ÐàÅÕÂé ÇÍ ҧµ Íà¹×Íè §¨¹¡Ç ҨлŠÍ»ØÁ

l


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.