MikroC book

Page 1

à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 1

à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC ¤ÍÁä¾àÅÍà áÅСÒ÷´Åͧàº×éͧµ ¹ Getting started C programming for PIC microcontroller with mikro C compiler

¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ (C) Innovative Experiment Co.,Ltd.

INNOVATIVE EXPERIMENT


2 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

Getting started C programming for PIC microcontroller with mikro C compiler

à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ ISBN 978-974-05-3099-2 ¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäŠʧǹÅÔ¢ÊÔ·¸Ôµì ÒÁ ¾.Ã.º. ÅÔ¢ÊÔ·¸Ôì ¾.È. 2537 Ë ÒÁ¡ÒÃÅÍ¡àÅÕ¹äÁ ÇÒ Ê Ç¹Ë¹Ö§è Ê Ç¹ã´¢Í§Ë¹Ñ§Ê×ÍàÅ Á¹Õé ¹Í¡¨Ò¡¨Ðä´ ÃºÑ Í¹Ø­Òµ ã¤Ã¤ÇÃ㪠˹ѧÊ×ÍàÅ Á¹Õé 1. ¹Ñ¡àÃÕ¹ ¹ÔÊµÔ ¹Ñ¡ÈÖ¡ÉÒ áÅкؤ¤Å·ÑÇè ä»·ÕÁè ¤Õ ÇÒÁʹã¨ã¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ ÇÂÀÒÉÒ C 2. ʶҺѹ¡ÒÃÈÖ¡ÉÒ âçàÃÕ¹ ÇÔ·ÂÒÅÑ ÁËÒÇÔ·ÂÒÅÑ ·ÕÁè ¡Õ ÒÃà» ´¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒÍÔàÅç¡·ÃÍ¹Ô¡Ê ËÃ×ÍÀÒ¤ÇÔªÒ ÇÔÈÇ¡ÃÃÁÍÔàÅç¡·ÃÍ¹Ô¡Ê áÅФÍÁ¾ÔÇàµÍà 3. ¤³Ò¨Òà·ÁÕè ¤Õ ÇÒÁµ ͧ¡ÒÃÈÖ¡ÉÒ áÅÐàµÃÕÂÁ¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹ÃдѺÍÒªÕÇÈÖ¡ÉÒáÅÐ »ÃÔ­­ÒµÃÕ

´íÒà¹Ô¹¡ÒèѴ¾ÔÁ¾ áÅШíÒ˹ ÒÂâ´Â ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ 3133/53 «.ÊØ¢ÁØ ÇÔ· 101/2 ¶.ÊØ¢ÁØ ÇÔ· á¢Ç§ºÒ§¹Ò ࢵºÒ§¹Ò ¡ÃØ§à·¾Ï 10260 â·ÃÈѾ· 0-2747-7001-4 â·ÃÊÒà 0-2747-7005 ÃÒÂÅÐàÍÕ´·Õ»è ÃÒ¡¯ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé ´ ¼Ò ¹¡ÒõÃǨ·Ò¹Í ҧÅÐàÍÕ´áÅж ǹ¶Õè à¾×Íè ãË Á¤Õ ÇÒÁÊÁºÙó áÅж١ µ ͧÁÒ¡·ÕÊè ´Ø ÀÒÂãµ à§×Íè ¹ä¢áÅÐàÇÅÒ·Õ¾è §Ö ÁÕ¡Í ¹¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡ ¡ÒùíÒ¢ ÍÁÙÅ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé »ãª ·Ò§ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔä´ ÁÀÕ ÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ »ÃСÒÃã´ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×Íè ¹·ÕÍè Ò¨ÁÕáÅÐä´ ÃºÑ ¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ÍÍ¡ä»¹Ñ¹é ·Ò§ºÃÔÉ·Ñ Ï ¨Ð¾ÂÒÂÒÁªÕáé ¨§áÅÐ á¡ ä¢ã¹¡ÒèѴ¾ÔÁ¾ ¤ÃÑ§é µ Íä»


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 3

¤íÒ¹íÒ ¡ÒþѲ¹Òâ»Ãá¡ÃÁà¾×Íè ¤Ç¤ºØÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ÂÀÒÉÒÃдѺÊÙ§ ઠ¹ ÀÒÉÒàºÊÔ¡ ËÃ×Í C ÊÔ§è Ë¹Ö§è ·ÕÁè ¤Õ ÇÒÁÊíҤѭÍ ҧÂÔ§è ¤×Í «Í¿µ áÇà ·àÕè ÃÕÂ¡Ç Ò ¤ÍÁä¾àÅÍà (compiler) ËÃ×͵ÑÇá»Åâ»Ãá¡ÃÁ Áѹ¨Ð·íÒ˹ Ò·Õãè ¹ ¡ÒÃá»ÅÀÒÉÒÊÙ§¹Ñé¹ÁÒà» ¹ÀÒÉÒáÍÊà«ÁºÅÕ áŠǨҡ¹Ñ鹨ÐÁÕ«Í¿µ áÇà ÍÕ¡µÑÇ˹Ö觷ÕàÃÕÂ¡Ç Ò áÍÊà«ÁàºÅÍà (assembler) ·íÒ˹ Ò·Õãè ¹¡ÒÃá»ÅÀÒÉÒáÍÊà«ÁºÅÕà» ¹ÀÒÉÒà¤Ã×Íè §ËÃ×ÍáÁªÕ¹â¤ ´ÍÕ¡µ Í˹֧è â´Â·ÑÇè ä»áÅ Ç㹪ش ¢Í§¤ÍÁä¾àÅÍà Á¡Ñ ¨Ð¼¹Ç¡àÍÒáÍÊà«ÁàºÅÍà ࢠÒäÇ ´Ç ¡ѹ à¾×Íè ãË ¡ÒþѲ¹Òâ»Ãá¡ÃÁà» ¹ä»Í ҧÊдǡ áÅÐÅ´ ¢Ñ¹é µÍ¹ã¹¡Ò÷íҧҹŧ mikroC ¤ÍÁä¾àÅÍà ໠¹Ë¹Ö§è 㹤ÍÁä¾àÅÍà ·äÕè ´ ÃºÑ ¤ÇÒÁʹã¨ã¹áǴǧ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¡ÒÃ㪠§Ò¹·Õ§è Ò Â áÅÐÁÕà¤Ã×Íè §Á×ÍʹѺʹع㹡Ò÷íÒ§Ò¹ÁÒ¡ÁÒ ÃÇÁä»·Ñ§é µÑǪ ÇÂÍ ҧä¿Å äźÃÒÃÕ (library) ·ÕÁè ÍÕ ÂÙà » ¹¨íҹǹÁÒ¡ ÃͧÃѺ¡ÑºÍØ»¡Ã³ µÍ ¾ ǧËÅÒ¡ËÅÒ áÅд ÇÂÊ Ç¹¢Í§ «Í¿µ áÇà ·ãÕè ª 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ·Õàè ÃÕÂ¡Ç Ò mikro IDE ¹Ñ¹é ÁÕ¤ÇÒÁÊÁºÙó áÅкÃèØà¤Ã×Íè §Á×Í·Õªè Ç Â㹡ÒÃà¢Õ¹ â»Ãá¡ÃÁäÇ ¾Ã ÍÁ ¨Ñ´ä´ ÇÒ à» ¹à¤Ã×Íè §Á×;Ѳ¹Òâ»Ãá¡ÃÁ·ÕÊè ÒÁÒöàÃÔÁè µ ¹ä´ §Ò ÂÁÒ¡µÑÇ˹֧è ÊíÒËÃѺã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¨é йíÒàʹͶ֧ ¡ÒÃ㪠§Ò¹áÅÐÇÔ¸¡Õ ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ´ Ç mikroC ¤ÍÁ ä¾àÅÍà ÊÒí ËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC â´Â๠¹ä»·Õàè ºÍà PIC16F877 áÅÐ PIC16F887 ÁÕ¤Òí ͸ԺÒ¡ÒÃ㪠§Ò¹ ¿ §¡ ª¹Ñè áÅÐäźÃÒÃÕ·ÊÕè Òí ¤Ñ­ ÃÇÁ¶Ö§¡Ò÷´Åͧ·Ò§ÎÒà ´áÇà ·ÊÕè ÒÁÒöáÊ´§ãË àË繶֧¼Å¡Ò÷íÒ§Ò¹ä´ Í ҧªÑ´à¨¹ áÅШѺµ Í§ä´ â´Âã¹áµ ÅСÒ÷´Åͧ¨ÐÁÕ¤Òí ͸ԺÒ·ÄÉ®Õ Ç§¨Ã µÑÇÍ ҧâ»Ãá¡ÃÁ ¢Ñ¹é µÍ¹¡Ò÷´Åͧ áÅмŠ·Õàè ¡Ô´¢Ö¹é à¾×Íè ãË ¼àÙ ÃÕ¹ÊÒÁÒö·íÒ¤ÇÒÁࢠÒ㨠áÅеÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹à»ÃÕºà·ÕÂºä´ mikroC à» ¹«Í¿µ áÇà ·Ò§¾Ò³ÔªÂ ¨Ðµ ͧÁÕ¡ÒèѴ«×éÍÁÒÍ ҧ¶Ù¡µ ͧ¨Ò¡à¨ ҢͧÅÔ¢ÊÔ·¸Ôì¹Ñ蹤×Í Mikroelektronika ÊÒÁÒöÊÑ§è «×Íé ä´ ·Õè www.mikroe.com Í ҧäáçµÒÁ·Ò§ Mikroelektronika ¡çä´ à» ´âÍ¡ÒÊãË ¼ÙÊ ¹ã¨ÊÒÁÒö´Òǹ âËÅ´ mikroC Ãع 2K ä»·´Åͧ㪠§Ò¹ä´ ¿ÃÕ â´ÂäÁ ¨Òí ¡Ñ´àÇÅÒ ÊÒÁÒö㪠§Ò¹à¤Ã×Íè §Á×Í¾×¹é °Ò¹ä´ ¤Ãº 㪠¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ä´ ·¡Ø àºÍà ·§Ñé 12Fxxx, 16Fxxx áÅÐ 18Fxxxx ËÒ¡áµ ¨Òí ¡Ñ´¢¹Ò´ ¢Í§ä¿Å äÇ ·Õè 2 ¡ÔâÅàÇÔô áÅÐàÁ×Íè ÁÕ¡ÒèѴ«×Íé Ãع ÊÁºÙó ¡¨ç ÐÊÒÁÒö㪠§Ò¹ä´ Í ҧäÁ Á¢Õ Í ¨íÒ¡Ñ´ µÑÇÍ ҧ¡Ò÷´Åͧ·Õ¹è Òí àʹÍã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ·é §Ñé ËÁ´ ÊÒÁÒö·íÒ§Ò¹ÀÒÂãµ mikroC Ãع 2K ä´ Í ҧ ÊÁºÙó ¢Í¢Íº¤Ø³ Mikroelektronika ÊíÒËÃѺ¡ÒÃà¼Âá¾Ã mikroC Ãع 2K à¾×Íè ãË ¹¡Ñ ·´ÅÍ§ä´ ÁâÕ Í¡ÒÊàÃÔÁè µ ¹ ¡ÒþѲ¹Òâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ ÇÂÀÒÉÒ C ÊíÒËÃѺ¼Ùã ª §Ò¹·Õµè Í §¡ÒÃãª Ã¹Ø ÊÁºÙó ÊÒÁÒöʹѺ ʹع¼Ù¾ ² Ñ ¹Òä´ ´Ç ¡ÒèѴ«×Íé ¨Ò¡ Mikroelektronika ·Õè www.mikroe.com ¡ÒÃàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍÃ Ç¹Ñ ¹Õé ÀÒÉÒ C à» ¹» ¨¨ÑÂË¹Ö§è ·Õ¹è ¡Ñ ¾Ñ²¹Òâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÁÑ ãËÁ µÍ §ãË ¤ÇÒÁʹ㨠à¾ÃÒй͡¨Ò¡¨Ðª ÇÂÅ´¤ÇÒÁ«Ñº« ͹áÅÐÂا Âҡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁáÅ Ç Âѧª ÇÂãË ¡Òà µ ÍÂÍ´áÅСÒûÃѺà»ÅÕÂè ¹â»Ãá¡ÃÁã¹Í¹Ò¤µÊÒÁÒö·íÒä´ §Ò Â¢Ö¹é ¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ


4 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ÊÒúѭ º··Õè 1 á¹Ð¹íÒ mikroC..............................................................................................................7 º··Õè 2 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà .....................35 º··Õè 3 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×è͵Դµ ;Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC...................................................................................................................55 »¯ÔºµÑ ¡Ô Ò÷Õè 1 ¢Ñº LED ·Õ¾è Íà µ C....................................................................61 »¯ÔºµÑ ¡Ô Ò÷Õè 2 ¡ÒÃ㪠§Ò¹¾Íà µ A áÅÐ E à» ¹àÍÒµ ¾µØ ........................................65 »¯ÔºµÑ ¡Ô Ò÷Õè 3 ¡ÒÃ㪠§Ò¹¾Íà µ A áÅÐ B à» ¹àÍÒµ ¾µØ ........................................67 »¯ÔºµÑ ¡Ô Ò÷Õè 4 ·´ÊÍºÍ Ò¹¤ Ò¨Ò¡ÊÇÔµª ............................................................69

º··Õè 4 ¡íÒà¹Ô´àÊÕ§´ Ç¿ §¡ ª¹Ñè Sound.................................................................................73 »¯ÔºµÑ ¡Ô Ò÷Õè 5 ¢ÑºàÊÕ§´ Ç¿ §¡ ª¹Ñè Sound.........................................................75

º··Õè 5 ÍÔ¹àµÍÃ Ã»Ñ µ ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¡Ñº mikroC ¤ÍÁä¾àÅÍà ................77 »¯ÔºµÑ ¡Ô Ò÷Õè 6 ÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò RB0/INT...........................................................85

º··Õè 6 ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ...........................87 »¯ÔºµÑ ¡Ô Ò÷Õè 7 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd.........................95 »¯ÔºµÑ ¡Ô Ò÷Õè 8 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd8.....................104 »¯ÔºµÑ ¡Ô Ò÷Õè 9 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd_Custom.........112

º··Õè 7 ¿ §¡ ª¹Ñè µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC.....115 »¯ÔºµÑ ¡Ô Ò÷Õè 10 ·´Êͺ¡ÒÃà¢Õ¹áÅÐÍ Ò¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ................117

º··Õè 8 ¿ §¡ ª¹Ñè Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ¢- ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC...................................................................................119 »¯ÔºµÑ ¡Ô Ò÷Õè 11 ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Adc_Read ¡Ñº PIC16F877..........................125 »¯ÔºµÑ ¡Ô Ò÷Õè 12 Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅ ADC ẺµÔ´µ Íâ´ÂµÃ§.................................131 »¯ÔºµÑ ¡Ô Ò÷Õè 13 Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅ ADC áÊ´§¼Å·Õâè Á´ÙÅ LCD............................133


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 5

º··Õè 9 㪠§Ò¹¿ §¡ ª¹Ñè PWM ¢Í§ mikroC............................................................................137 »¯ÔºµÑ ¡Ô Ò÷Õè 9 ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà ´Ç ¿ §¡ ª¹Ñè PWM.............................140

º··Õè 10 ¡ÒõԴµ Í USART âÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙžÍà µÍ¹Ø¡ÃÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ....................143 »¯ÔºµÑ ¡Ô Ò÷Õè 15 ¡ÒÃÃÑºÊ §¢ ÍÁÙÅÃÐËÇ Ò§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÍÁ¾ÔÇàµÍà .......146 »¯ÔºµÑ ¡Ô Ò÷Õè 16 Ê×Íè ÊÒâ ÍÁÙÅ͹ءÃÁâ´Â㪠¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ..................152 »¯ÔºµÑ ¡Ô Ò÷Õè 17 ¡ÒÃÊ §¢ ÍÁÙÅÍЫԧâ¤Ã¹ÑÊ´ Ç¡ÒáíÒ˹´¤ ÒÃÕ¨ÊÔ àµÍà â´ÂµÃ§........164 »¯ÔºµÑ ¡Ô Ò÷Õè 18 ¡ÒÃÃѺ¢ ÍÁÙÅÍЫԧâ¤Ã¹ÑÊ´ Ç¡ÒáíÒ˹´¤ ÒÃÕ¨ÊÔ àµÍà â´ÂµÃ§........166 »¯ÔºµÑ ¡Ô Ò÷Õè 19 ¡ÒÃÃѺ¢ ÍÁÙÅÍЫԧâ¤Ã¹ÑÊâ´Âãª Í¹Ô àµÍÃ Ã»Ñ µ ................................168

º··Õè 11 ¡ÒõԴµ ÍÍØ»¡Ã³ ÃкººÑÊ I2C ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ..............171 »¯ÔºµÑ ¡Ô Ò÷Õè 20 µÔ´µ ͺÍà ´¢ÑºÃÕàÅ 16 ª ͧ ZX-RELAY16 ´ Ç¿ §¡ ª¹Ñè I2C........177 »¯ÔºµÑ ¡Ô Ò÷Õè 21 µÔ´µ ͡ѺâÁ´ÙÅà¢çÁ·ÔÈ´Ô¨µÔ ÍÅ CMPS03 ´ Ç¿ §¡ ª¹Ñè I2C............183 »¯ÔºµÑ ¡Ô Ò÷Õè 22 µÔ´µ ͺÍà ´¢ÑºÃÕàÅ 16 ª ͧ ZX-RELAY16 ´ Ç¿ §¡ ªÑè¹ Soft_I2C........................................................................192

º··Õè 12 ¡ÒõԴµ ÍÍØ»¡Ã³ Ẻ SPI ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà .....................................................................197 »¯ÔºµÑ ¡Ô Ò÷Õè 23 µÔ´µ ͡Ѻ MCP4922 äÍ«Õá»Å§ÊÑ­­Ò³´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡....204

º··Õè 13 ¡ÒõԴµ ÍÍØ»¡Ã³ ÃкººÑÊ˹֧è ÊÒ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ......209 »¯ÔºµÑ ¡Ô Ò÷Õè 24 Í Ò¹¤ ÒÍسËÀÙÁ¨Ô Ò¡äÍ«Õ DS18B20 ´ Ç¿ §¡ ª¹Ñè onewire............217

ÀÒ¤¼¹Ç¡ : á¹Ð¹íÒà¤Ã×Íè §Á×Í㹡Ò÷´Åͧ·Ò§ÎÒà ´áÇà .....................................................223


6 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 7

º··Õè 1

á¹Ð¹íÒ mikroC

mikroC à» ¹ªØ´«Í¿µ áÇà ¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¼Ù¾ ² Ñ ¹Ò¤×Í mikroElektronika (mikroE : www.mikroe.com) mikroC ä´ ºÃèØà¤Ã×Íè §Á×Íà¾×Íè ÍíҹǠ¤ÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁäÇ ÁÒ¡ÁÒ µÑÇá»Åâ»Ãá¡ÃÁÀÒÉÒ C ËÃ×Í C compiler ÁÕû٠Ẻ ¡Ò÷íÒ§Ò¹·Õàè ¢ Ò¡Ñ¹ä´ ¡ºÑ ANSI C Áҵðҹ ÁÕäźÃÒÃÕÃͧÃѺ¡ÒõԴµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡¨íҹǹ ÁÒ¡ ¾Ã ÍÁ·Ñ§é µÑÇÍ ҧâ»Ãá¡ÃÁ·Õªè Ç ÂÅ´àÇÅÒ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ ¼Ù¾ ² Ñ ¹Òâ»Ãá¡ÃÁÊÒÁÒöµÃǨÊͺ·ÃѾÂҡâͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ µÅÍ´àÇÅÒ «Ö§è à» ¹ »ÃÐ⪹ Áҡ㹡óշÕè㪠ÃØ ¹ÊÒ¸Ôµ ·Ñ駹Õéà¾×èͪ Ç» ͧ¡Ñ¹äÁ ãË à¢Õ¹â»Ãá¡ÃÁÂÒÇà¡Ô¹¡Ç Ò¢ ͨíÒ¡Ñ´ mikroC ÊÒÁÒöãË ä¿Å ¼ÅÅѾ¸ .hex ´ Ç¡ÒäÅÔ¡à¾Õ§»ØÁ à´ÕÂÇ ·íÒãË Å´¢Ñ¹é µÍ¹ã¹¡Ò÷íÒ§Ò¹Å§ä´ Í ҧ ÁÒ¡ áÅÐä¿Å .hex ÊÒÁÒö¹íÒä»ãª ¡ºÑ à¤Ã×Íè §â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÁÒµÃ°Ò¹ä´ ·¡Ø Ãع ÊíÒËÃѺ㹡ÒÃ͸ԺÒ¶֧¡ÒÃ㪠§Ò¹áÅÐÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁ·´Åͧ¨ÐÍ Ò§¶Ö§ mikroC ã¹Ãع 2K ÍѹÁÕ¢Í ¨íÒ¡Ñ´´ Ò¹¢¹Ò´¢Í§ä¿Å ËÅѧ¨Ò¡¤ÍÁä¾Å ËÃ×Íá»Å§à» ¹ÃËÑÊà¤Ã×Íè § (ä¿Å ¹ÒÁÊ¡ØÅ .hex) µ ͧäÁ à¡Ô¹ 2 ¡ÔâÅàÇÔô áµ ¡Áç Ò¡à¾Õ§¾ÍÊíÒËÃѺ¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺ¡Ò÷´Åͧ㪠§Ò¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àº×Íé §µ ¹ ÃÇÁ·Ñ§é â»Ãá¡ÃÁÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ 굄 â¹ÁÑµÔ ¢¹Ò´àÅç¡ä´ à» ¹Í ҧ´Õ ÊíÒËÃѺ¼Ù 㪠§Ò¹·Õè·´Åͧ㪠mikroC áÅ ÇÁÕ¤ÇÒÁʹ㨵 ͧ¡ÒÃÃØ ¹ÊÁºÙó ÊÒÁÒöµÔ´µ ÍÊÑè§ «×éÍä´ ·ÕèàǺ䫵 ¢Í§¼Ù ¼ÅÔµ http://www.mikroe.com

1.1 ¡ÒõԴµÑ§é mikroC ¤ÍÁä¾àÅÍà Ãع 2K ¡ÒÃä´ ÁÒ«Ö§è ä¿Å µ´Ô µÑ§é ¢Í§ mikroC ã¹Ãع ÊÒ¸Ôµ¹Õé ÁÕ 2 ·Ò§¤×Í 1. ¨Ò¡á¼ ¹«Õ´ÃÕ ÍÁ·Õ¨è ´Ñ ÁÒ㹪ش·´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ËÃ×ͪش»ÃСͺ Ëع ¹µ Robo-PICA ¢Í§ inex 2. ´Òǹ âËÅ´àÇÍà ª¹Ñè ãËÁ ÅÒ ÊØ´·ÕÍè Ò¨ÁÕ·Õè www.mikroe.com ¨Ò¡¹Ñé¹·íÒ¡ÒõԴµÑé§àËÁ×͹¡Ñºâ»Ãá¡ÃÁ»ÃÐÂØ¡µ ¢Í§ÇÔ¹â´ÇÊ


8 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.2 mikroC IDE à¤Ã×Íè §Á×ÍÊíÒËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ IDE ÁÒ¨Ò¡ Integrated Development Environment ËÁÒ¶֧ «Í¿µ áÇà ·ÃÕè ǺÃÇÁà¤Ã×Íè §Á×Í áÅÐÊÀÒÇÐáÇ´Å ÍÁ㹡ÒþѲ¹Òâ»Ãá¡ÃÁàÍÒäÇ ã¹·Õàè ´ÕÂǡѹ â´ÂÀÒÂã¹ MikroC IDE »ÃÐ¡Íºä» ´ Ç à¤Ã×Íè §Á×Íà¤Ã×Íè §ãª ·ÍÕè Òí ¹Ç¤ÇÒÁÊдǡ´Ñ§¹Õé 1. ⤠´àÍ´ÔàµÍà (Code editor) à» ¹â»Ãá¡ÃÁàÍ´ÔàµÍà ÊÒí ËÃѺà¢Õ¹áÅÐᡠ䢫ÍÃ Ê â»Ãá¡ÃÁÀÒÉÒ C â´Â⤠´àÍ´ÔàµÍà ¨Ð·íÒ¡ÒÃá¡áÂЪش¤íÒÊѧè , µÑÇá»Ã, ¢ ÍÁÙŵÑÇàÅ¢, ÍÑ¡¢ÃÐ áÅÐ ¤íÒ͸ԺÒ ´ ÇÂÊÕ (color syntax) ÃÇÁ·Ñ§é ÃٻẺµÑÇÍÑ¡Éà ¼Ùã ª §Ò¹ÊÒÁÒöàÅ×Í¡»ÃѺà»ÅÕÂè ¹ÃٻẺ áÅÐÊÕÊѹ¢Í§¢ ÍÁÙÅáµ ÅЪ¹Ô´ä´ àͧ »ØÁ ¤ÍÁä¾Å â»Ãá¡ÃÁ

˹ Ò µ Ò §´Ù ¤ Ò ÃÕ ¨Ô Ê àµÍà (Watch window)

⤠´àÍ´ÔàµÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª

ª ͧ¡íÒ˹´¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

˹ Òµ Ò§¼ÅÅѾ¸

ÃÙ»·Õè 1-1 áÊ´§Ë¹ Òµ Ò§ËÅÑ¡¢Í§ mikroC IDE áÅÐÊ Ç¹»ÃСͺ·ÕÊè Òí ¤Ñ­


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 9

2. äźÃÒÃÕÊÒí àÃç¨ÃÙ» ã¹ mikroC ä´ àµÃÕÂÁäźÃÒÃբͧâ»Ãá¡ÃÁÀÒÉÒ C äÇ ¨Òí ¹Ç¹ ÁÒ¡ à¾×èͪ ÇÂãË ¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÊÒÁÒö·íÒä´ Í ҧÃÇ´àÃçÇ äÁ Ç Ò¨Ðà» ¹äźÃÒÃÕà¡ÕèÂǡѺ¡ÒõԴµ Í˹ ǤÇÒÁ¨íÒ ¡ÒÃáÊ´§¼Å¢ ÍÁÙÅ ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅ ¡ÒáÒà ¨Ñ´à¡çº¢ ÍÁÙŵ Ò§æ áÅÐäºÃÒÃÕÊíÒËÃѺ¡ÒõԴµ ÍÍØ»¡Ã³ ÀÒ¹͡ 3. à¤Ã×Íè §Á×ͪ ÇÂà¢Õ¹â»Ãá¡ÃÁ ·Õªè Ç ÂáÊ´§¼Åâ¤Ã§Êà ҧ¢Í§â»Ãá¡ÃÁ µÑÇá»Ã áÅÐ ¿ §¡ ª¹Ñè µ Ò§ æ ÀÒÂã¹â»Ãá¡ÃÁ 4. C ¤ÍÁä¾àÅÍà 㪠㹡ÒÃá»Åâ»Ãá¡ÃÁÀÒÉÒ C à» ¹ÀÒÉÒáÍÊà«ÁºÅÕ áÅм¹Ç¡ ¡Ñºâ»Ãá¡ÃÁáÍÊà«ÁàºÅÍà à¾×Íè á»Åâ»Ãá¡ÃÁà» ¹áÁªÕ¹â¤ ´¨Ñ´à¡çºã¹ÃٻẺä¿Å Hex Áҵðҹ ÊÒÁÒö㪠¡ºÑ à¤Ã×Íè §â»Ãá¡ÃÁ PIC ÁÒµÃ°Ò¹ä´ ·§Ñé ËÁ´ 5. «ÔÁàÙ ÅàµÍà ໠¹à¤Ã×Íè §Á×ÍʹѺʹع¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ 㪠´¼Ù Å¡Òà ·íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·ÕÅÐÊàµç» áÅÐÂѧ㪠ªÇ ¨ѺàÇÅÒ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·ÕÅЪ ǧ ÃÇÁ¶Ö§´Ù¡Òà à»ÅÕÂè ¹á»Å§¢Í§ÃÕ¨ÊÔ àµÍà µÒ § æ ä´ Í ҧ§ Ò´Ò 6. àÍ¡ÊÒáÒÃ㪠§Ò¹¤Ø³ÀÒ¾ÊÙ§ ¹Í¡¨Ò¡¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ·Õè§ ÒÂáÅ Ç mikroC Âѧ ʹѺʹع¢ ÍÁÙÅàÍ¡ÊÒáÒÃ㪠§Ò¹â»Ãá¡ÃÁ äźÃÒÃÕµ Ò§æ áÅеÑÇÍ ҧâ»Ãá¡ÃÁäÇ Í ҧÁÒ¡ÁÒ ª ÇÂãË ¼àÙ ÃÔÁè µ ¹ÊÒÁÒöàÃÕ¹ÃÙ¡ ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¨Ò¡µÑÇÍÂ Ò§ä´ §Ò ¢ֹé

1.2.1 ÃÒÂÅÐàÍÕ´¢Í§â¤ ´àÍ´ÔàµÍà (Code Editor) ⤠´àÍ´ÔàµÍà ¢Í§ mikroC à» ¹àÍ´ÔàµÍà ·ÁÕè Ҿà ÍÁà¤Ã×Íè §Á×ͪ ÇÂ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ ·íÒãË ¡ÒÃà¢Õ¹·íÒä´ §Ò Â¢Ö¹é ´ ǤسÊÁºÑµµÔ Ò § æ ´Ñ§¹Õé l

»ÃѺᵠ§ÃٻẺÊբͧµÑÇÍÑ¡Éõ Ò§ æ ä´

l àÅ×Í¡áÊ´§ªØ´¤íÒÊѧè ÍÍ¡ÁÒ â´Â¡´»ØÁ CTRL + Space bar l

´ÙÃÒÂÅÐàÍÕ´¤ Ò¾ÒÃÒÁÔàµÍà ¢Í§ªØ´¤íÒÊÑ§è µ Ò§æ ä´

l

ÃͧÃѺ¡ÒÃ㪠§Ò¹à·Áà¾Åµ (template) ËÃ×Í¡ÒÃÊà ҧÃٻẺ⤠´Íѵâ¹ÁѵäÔ ´

l

µÃǨÊͺáÅÐá¡ ä¢â¤ ´·Õàè ¢Õ¹¼Ô´ä´ â´ÂÍѵâ¹ÁѵÔ

l

¡íÒ˹´µíÒá˹ §·Õµè Í §¡ÒáÃÐâ´´ä»ÂѧºÃ÷Ѵ·Õµè Í §¡ÒÃä´

ÊÒÁÒö»ÃѺᵠ§¡ÒÃ㪠§Ò¹ä´ ´Ç ¡ÒÃàÅ×Í¡·Õàè Á¹Ù Tools à Option ËÃ×ͤÅÔ¡»ØÁ ·Õè˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ¡çä´ l


10 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¡ÒÃáÊ´§ªØ´¤íÒÊѧè : Code Assistant [CTRL+SPACE] à¾×Íè Êдǡ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁËÃ×Í㹺ҧ¤ÃÑ§é ¨íҪش¤íÒÊѧè äÁ ä´ ãË ¡´¤ÕÂË ÅÑ¡¢Í§ª×Íè ¤íÒÊѧè áÅ Ç¡´»ØÁ CTRL+ SPACE (ËÁÒ¶֧¡´»ØÁ Ctrl ¤ Ò§äÇ áŠǵÒÁ´ Ç¡Òá´»ØÁ Space bar) ¤íÒÊÑ§è ·ÕÁè Õ ¤Õµ ÇÑ ÍÑ¡É÷Õàè Å×Í¡äÇ ÍÂÙ´ Ò ¹Ë¹ ҨлÃÒ¡¯ÍÍ¡Áҷѧé ËÁ´ à¾Õ§àÅ×Íè ¹à¤Íà à«Íà ä»Âѧ¤íÒÊÑ§è ·Õµè Í §¡Òà áÅ Ç¡´ Enter ¤íÒÊÑ§è ¹Ñ¹é ¨Ð¶Ù¡àÃÕ¡¢Ö¹é ÁÒ㪠§Ò¹

¨Ò¡µÑÇÍ ҧ໠¹¡ÒÃàÅ×Í¡¾ÔÁ¾ ¤Òí Êѧè Lcd áÅ Ç¡´¤Õ CTRL áÅÐ SPACE ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ ¢Í§¤íÒÊÑ§è ·Õ¢è ¹Öé µ ¹´ ǤíÒÇ Ò Lcd ¢Ö¹é ÁÒãË àÅ×Í¡

¡Òê ÇÂáÊ´§¾ÒÃÒÁÔàµÍà : Parameter Assistant [CTRL+SHIFT+SPACE] ÊíÒËÃѺ¤íÒÊÑè§ËÃ×Í¿ §¡ ªÑè¹ã¹ä¿Å äźÃÒÃÕÁҵðҹ¢Í§ mikroC àÁ×èÍ¡íÒ˹´ª×èÍ¿ §¡ ªÑè¹ËÃ×Í ¤íÒÊѧè áŠǵÒÁ´ ÇÂà¤Ã×Íè §ËÁÒÂǧàÅçºà» ´ ( ËÃ×Í¡´¤Õ CTRL+SHIFT+SPACE (¡´¤Õ Ctrl µÒÁ´ Ç Shift áÅÐ Space bar) ¤ Ò¾ÒÃÒÁÔàµÍà ¢Í§ªØ´¤íÒÊÑ§è ¹Ñ¹é æ ¨Ð¶Ù¡áÊ´§¢Ö¹é ÁÒâ´ÂÍѵâ¹ÁѵãÔ Ë ãª §Ò¹ä´ ·Ñ¹·Õ

¨Ò¡µÑÇÍ ҧ໠¹¡ÒÃàÅ×Í¡¾ÔÁ¾ ¤íÒÊÑè§ Lcd_Out_CP( áÅ Ç¡´¤Õ CTRL+SHIFT+SPACE ¨Ð»ÃÒ¡¯¾ÒÃÒÁÔàµÍà unsigned char * text ¢Ö¹é Áҷѹ·Õ à¾×Íè ª ÇÂãË ¼àÙ ¢Õ¹â»Ãá¡ÃÁ·ÃÒºÃÙ» Ẻ¡ÒáíÒ˹´¤ Ò¾ÒÃÒÁÔàµÍà ¢Í§¤íÒÊÑ觹ÕéÍ ҧ¶Ù¡µ ͧ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 11

µÃǨÊͺáÅÐᡠ䢤íÒ¼Ô´Íѵâ¹ÁÑµÔ : Auto Correct à» ¹¤Ø³ÊÁºÑµ¡Ô ÒõÃǨÊͺ¤íÒ¼Ô´â´ÂÍѵâ¹ÁÑµÔ ÁÕ¡Ò÷íÒ§Ò¹¤Å Ò¡Ѻ Microsoft Word áÅÐ Âѧª ÇÂᡠ䢡ÒþÔÁ¾ ¤Òí ÊÑ§è ·Õäè Á ¶¡Ù µ ͧ¢Í§¼Ùã ª §Ò¹ â´Â¤íÒÊÑ§è ·ÕÁè ¡Ñ ¾ÔÁ¾ ¼´Ô º ÍÂæ ¹Ñ¹é ¼Ùã ª ÊÒÁÒöà¾ÔÁè àµÔÁ¤íÒÊѧè ä´ â´Â¡ÒÃàÅ×Í¡àÁ¹Ù Tools à Options ¨Ò¡¹Ñ¹é àÅ×Í¡ä»·ÕËè ÇÑ ¢ Í Auto Correct

¡ÒáíÒ˹´µíÒá˹ § Bookmark 㹡óշÕèâ»Ãá¡ÃÁÁÕ¤ÇÒÁÂÒÇÁÒ¡æ à¾×èÍãË ¡ÒáÃÐâ´´ä»ÂѧµíÒá˹ §µ Ò§æ ¢Í§â»Ãá¡ÃÁ ä´ Í ҧÃÇ´àÃçÇ ¼Ù 㪠§Ò¹ÊÒÁÒö¡íÒ˹´µíÒá˹ §ºÃ÷Ѵ·Õèµ Í§¡ÒÃäÇ ã¹ Bookmark «Öè§ÊÒÁÒö ¡ÃÐâ´´ä»ÂѧµíÒá˹ §¹Ñ¹é æ ä´ Í ҧÃÇ´àÃçÇ ¡íÒ˹´µíÒá˹ § Bookmark ·íÒä´ â´Â ¡´»ØÁ CTRL µÒÁ´ Ç SHIFT áÅФÕµ ÇÑ àÅ¢ ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨ÐáÊ´§µíÒá˹ § bookmark ·Õµè Í §¡Òà ¡´ Ctrl+Shift+1 ¡´ Ctrl+Shift+2 ¡´ Ctrl+Shift+3

¡ÒÃࢠҶ֧µíÒá˹ § Bookmark ·íÒä´ â´Â¡Òá´»ØÁ CTRL+µÑÇàÅ¢áÊ´§µíÒá˹ § Bookmark


12 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¡ÒáÃÐâ´´ä»ÂѧµíÒá˹ §ºÃ÷Ѵ·Õµè Í §¡Òà : GotoLine ¹Í¡¨Ò¡¡ÒÃ㪠bookmark áÅ Ç ¼Ùã ª §Ò¹ÂѧÊÒÁÒö¡ÃÐâ´´ä»ÂѧºÃ÷Ѵµ Ò§æ ¢Í§â»Ãá¡ÃÁ ä´ â´ÂµÃ§ ¼ Ò¹¡Òá´¤Õ CTRL+G ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ GotoLine ¢Ö¹é ÁÒãË »Í ¹àÅ¢ºÃ÷Ѵ·Õµè Í §¡Òà ¡ÃÐâ´´ áŠǤÅÔ¡»ØÁ OK

Code Explorer

¤×ÍÊ Ç¹¢Í§Ë¹ Òµ Ò§·ÕèÇÒ§ÍÂÙ ·Ò§´ Ò¹« ÒÂÁ×ͧ͢â»Ãá¡ÃÁ㪠áÊ´§¿ §¡ ªÑè¹áÅеÑÇá»Ã·Õè㪠§Ò¹ÍÂÙ ã¹â»Ãá¡ÃÁ¢³Ð¹Ñé¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 13

˹ Òµ Ò§¢Í§¢ ÍÁÙŪ ÇÂàËÅ×Íàà §´ ǹ : Quick Help (QHelp) ã¹á·ç»µ ͨҡ Code Explorer à» ¹Ë¹ Òµ Ò§¢ ÍÁÙŪ ÇÂàËÅ×Í à¾×Íè ãË ·ÃÒº¶Ö§¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè ·Õºè ÃèØÍÂÙã ¹â»Ãá¡ÃÁ ઠ¹ ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè µÔ´µ Í˹ ǤÇÒÁ¨íÒ Compact Flash à» ¹µ ¹

ÃÒ¡ÒäÕÂÅ ´Ñ : Keyboard Shotcut ÍÂÙã ¹µíÒá˹ §á·ç»¢ÇÒÊØ´¢Í§Ë¹ Òµ Ò§ Code Explorer àÁ×Íè àÅ×͡ࢠÒÁÒ ¨ÐÁÕÃÒ¡Òâͧ¤ÕÂÅ ´Ñ µ Ò§ æ ·Õãè ª ã¹â»Ãá¡ÃÁ ª ÇÂãË ÊÒÁÒö㪠§Ò¹¤íÒÊÑ§è µ Ò§æ ä´ Í ҧÃÇ´àÃçÇÂÔ§è ¢Ö¹é


14 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

˹ Òµ ҧᨠ§¼ÅÅѾ¸ : Message Window

à» ¹Ë¹ Òµ Ò§ÊíÒËÃѺáÊ´§¼ÅÅѾ¸ ¨Ò¡¡ÒäÍÁä¾Å ¶ Ò¡ÒäÍÁä¾Å Á¢Õ Í ¼Ô´¾ÅÒ´ ˹ Òµ Ò§¹Õé ¨ÐáÊ´§¢ ͼԴ¾ÅÒ´´ ÇÂÍÑ¡ÉÃÊÕá´§ 㹡óÕäÁ ¼´Ô ¾ÅÒ´ ˹ Òµ Ò§¹Õ¨é ÐáÊ´§¢ ͤÇÒÁÊÕÁÇ § ¾Ã ÍÁ·Ñ§é ᨠ§¢¹Ò´Ë¹ ǤÇÒÁ¨íÒ·Õãè ª ä» ¡Ã³ÕÁ¢Õ Í ¼Ô´¾ÅÒ´â»Ãá¡ÃÁ¨ÐäÁ Êà ҧä¿Å hex ¼Ùã ª §Ò¹ÊÒÁÒÃ¶à¢ Ò ¶Ö§ºÃ÷Ѵ·Õèà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ä´ â´Â¡ÒôѺàºÔŤÅÔ¡·ÕèºÃ÷Ѵ·ÕèáÊ´§¢ ͼԴ¾ÅÒ´ â»Ãá¡ÃÁ¨Ð ¡ÃÐâ´´ä»ÂѧµíÒá˹ §·Õèà¡Ô´¢ ͼԴ¾ÅÒ´·Ñ¹·Õ

1.2.2 à¤Ã×Íè §Á×;ÔàÈɪ ÇÂ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ 1.2.2.1 µÒÃÒ§ÃËÑÊáÍÊ¡Õé (ASCII Chart) à» ¹à¤Ã×èͧÁ×Í·Õèª ÇÂ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ·Õèà¡ÕèÂÇ¢ ͧ¡ÑºµÑÇÍÑ¡Éà ËÃ×Í¡ÒèѴ¡Òâ ÍÁÙÅẺ String â´ÂµÒÃÒ§áÍÊ¡Õ¹é ªéÕ Çè ÂãËé¼àéÙ ¢Õ¹â»Ãá¡ÃÁ·ÃÒº¶Ö§ ¤èÒ¢éÍÁÙÅÃËÑÊáÍÊ¡Õ¢é ͧµÑÇÍÑ¡ÉÃËÃ×͵ÑÇàÅ¢ ·Õ¹è ÂÔ Á㪠ÁÒ¡ ¤×Í ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»áÊ´§¼Å·Õâè Á´ÙÅ LCD à» ¹µ ¹ ¡ÒÃàÃÕ¡㪠§Ò¹µÒÃÒ§áÍÊ¡Õé ¨ÐàÃÕ¡¨Ò¡àÁ¹Ù Tools à Ascii Chart


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 15

1.2.2.2 á»Å⤠´â»Ãá¡ÃÁà» ¹ HTML (Export Code to HTML) ËÒ¡ÁÕ¤ÇÒÁµ ͧ¡ÒáÒùíÒàʹͫÍà Êâ»Ãáá¡ÃÁº¹ Blog ËÃ×ͺ¹àǻ䫵 ¹¹Ñé ¶ Ò·íÒ¡ÒäѴ Å͡੾ÒÐ⤠´·Õèà» ¹¢ ͤÇÒÁä»Í ҧà´ÕÂǹÑé¹ ÍÒ¨ãË ¤ÇÒÁÊÁºÙó ä´ äÁ ෠ҡѺ·ÕèáÊ´§ã¹Ë¹ Òµ Ò§ Code Editor ´Ñ§¹Ñ¹é ¶ Òµ ͧ¡ÒÃãË àǻ䫵 áÊ´§«Íà Êâ»Ãá¡ÃÁ·ÕÁè ÃÕ »Ù ẺàËÁ×͹¡Ñºã¹â¤ ´àÍ´ÔàµÍà ÊÒÁÒöàÃÕ¡㪠§Ò¹à¤Ã×Íè §Á×͵ÑǹÕäé ´ â´Âä»·Õàè Á¹Ù Tools à Export Code to HTML

1.2.2.3 ˹ Òµ Ò§Ê×Íè ÊÒâ ÍÁÙż Ò¹¾Íà µÍ¹Ø¡ÃÁ : USART Terminal à¤Ã×èͧÁ×Íà¾×èͪ ÇÂÃѺáÅÐÊ §¢ ÍÁÙÅ͹ءÃÁÃÐËÇ Ò§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÍÁ¾ÔÇàµÍà ¡ÒÃàÃÕ¡㪠§Ò¹·íÒä´ â´Âä»·Õàè Á¹Ù Tools à USART Terminal ËÃ×Í¡´»ØÁ Ctrl+T ¡çä´


16 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.2.2.4 ˹ Òµ Ò§Ê×Íè ÊÒâ ÍÁÙż Ò¹¾Íà µ USB ã¹âËÁ´ HID : HID Terminal à» ¹à¤Ã×Íè §Á×Íà¾×Íè ª ÇÂ㹡ÒõԴµ ÍÃÐËÇ Ò§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¡ºÑ ¤ÍÁ¾ÔÇàµÍà ¼ Ò¹¾Íà µ USB «Ö§è ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ºÒ§àºÍà ¨ÐÁÕâÁ´ÙÅ USB µÔ´µÑ§é ÍÂ٠ઠ¹ PIC18F4550 à» ¹µ ¹ ¡ÒÃàÃÕ¡㪠§Ò¹¨Ðµ ͧ价Õàè Á¹Ù Tools à HID Teminal

1.2.2.5 ˹ Òµ Ò§Ê×Íè ÊÒâ ÍÁÙż Ò¹Ãкºà¹çµàÇÔá : UDP Terminal à» ¹à¤Ã×Íè §Á×ÍÃÑºÊ §á¾ç¡à¡çµ¢ ÍÁÙÅã¹Ãкºà¹çµàÇÔá â´Âä»·Õàè Á¹Ù Tools à UDP Terminal


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 17

1.2.2.6 ˹ Òµ Ò§Ê×Íè ÊÒâ ÍÁÙšѺ¡Òà ´Ë¹ ǤÇÒÁ¨íÒ : MMC Card Terminal à» ¹à¤Ã×Íè §Á×ÍÊíÒËÃѺ¡ÒÃÍ Ò¹áÅÐà¢Õ¹¡Òà ´Ë¹ ǤÇÒÁ¨íÒª¹Ô´ MMC ¼ Ò¹¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ ¡ÒÃàÃÕ¡㪠§Ò¹¨Ðµ ͧ价Õàè Á¹Ù Tools à MMC Card Terminal

1.2.2.7 â»Ãá¡ÃÁ¡íÒ˹´¨Ø´ÀÒ¾ÊíÒËÃѺâÁ´ÙÅ¡ÃÒ¿ ¡ LCD : GLCD Bitmap Editor à» ¹à¤Ã×Íè §Á×ͪ Ç¡íÒ˹´¢ ÍÁÙÅ¡ÒÃÊà ҧÀÒ¾ãË ¡ºÑ ¡ÃÒ¿ ¡ LCD ä»à» ¹â¤ ´ÀÒÉÒ C ÊÒÁÒö 㪠§Ò¹¡Ñº¡ÃÒ¿ ¡ LCD ËÅÒÂàºÍà ÍÒ·Ô KS0108, T6963 ËÃ×Í¡ÃÒ¿ ¡ LCD ¢Í§â·ÃÈѾ· Nokia3110 ¡ÒÃàÃÕ¡㪠§Ò¹¨Ðµ ͧࢠÒä»·Õàè Á¹Ù Tools à GLCD Bitmap Editor

1.2.2.8 â»Ãá¡ÃÁ¡íÒ˹´¢ ÍÁÙÅÊíÒËÃѺ LED µÑÇàÅ¢ 7 Ê Ç¹ : Seven Segment Decoder à» ¹à¤Ã×Íè §Á×ͪ Ç¡íÒ˹´¢ ÍÁÙÅ 1 亵 ÊÒí ËÃѺ¡ÒÃáÊ´§¼Å¢Í§ LED µÑÇàÅ¢ 7 Ê Ç¹ ¡ÒÃàÃÕ¡ 㪠§Ò¹¨Ðµ ͧࢠҷÕàè Á¹Ù Tools à Seven Segment Decoder


18 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.2.2.9 â»Ãá¡ÃÁÊà ҧµÑÇÍÑ¡ÉÃ੾ÒÐÊíÒËÃѺâÁ´ÙÅ LCD : LCD Custom Charactor à» ¹à¤Ã×Íè §Á×ͪ ÇÂÊà ҧµÑÇÍÑ¡ÉþÔàÈÉãË ¡ºÑ âÁ´ÙÅ LCD ẺµÑÇÍÑ¡Éà â´ÂàÁ×Íè Êà ҧµÑÇÍÑ¡Éà àÊÃç¨àÃÕºà ÍÂáÅ Ç¡´»ØÁ Generate â»Ãá¡ÃÁ¨ÐÊà ҧ⤠´ãË â´ÂÍѵâ¹ÁÑµÔ ¡ÒÃàÃÕ¡㪠§Ò¹¨Ðµ Í§à¢ Ò ·Õàè Á¹Ù Tools à LCD Custom Charactor

1.2.2.10 ˹ Òµ ҧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ : EEPROM Editor 㪠áÊ´§¤ ÒáÅÐᡠ䢢 ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 19

1.3 àÃÔÁè µ ¹ãª §Ò¹ mikroC 1.3.1 㪠§Ò¹¨Ò¡µÑÇÍ ҧ mikroC àµÃÕÂÁµÑÇÍ ҧ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¾×¹é °Ò¹ÁÒãË ¼ãÙ ª §Ò¹·´ÅͧËÅÒÂâ»Ãá¡ÃÁ â´Â ËÅѧ¨Ò¡µÔ´µÑé§â»Ãá¡ÃÁ mikroC áÅ Ç µÑÇÍ ҧâ»Ãá¡ÃÁµ Ò§æ ¨Ðà¡çºÍÂÙ ã¹â¿Åà´Íà C:\Program Files\Mikroelektronika\mikroC\Examples\EasyPic4 ÊíÒËÃѺä¿Å â»Ãà¨ç¡µ áá·Õè¨Ðà» ´¢Öé¹à» ¹µÑÇÍ ҧ¹Õé㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877A «Ö§è ¡ç¤Í× ä¿Å ¢Í§â»Ãá¡ÃÁ信оÃÔº (LED Blinking) ¢Ñ鹵͹¡ÒÃà» ´µÑÇÍ ҧâ»Ãà¨ç¡µ ¢Öé¹ÁÒ㪠§Ò¹ ÁÕ¢Ñ鹵͹´Ñ§¹Õé (1) à» ´â»Ãá¡ÃÁ mikroC áÅ Çä»·Õàè Á¹Ù Project à Open Project

(2) ·Õè˹ Òµ Ò§ Open àÅ×Í¡â¿Åà´ÍÃì C:\Program Files\Mikroelektronika\mikroC\ Examples\EasyPic4\P16F877A\LED_Blinking àÃÕ¡໠´ä¿Å LED_Blinking.ppc


20 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

(3) ·ÕËè ¹ Òµ Ò§ Project Setup (ºÃÔàdz´ Ò¹« Ò¢ͧ¨ÍÀÒ¾) ¨ÐáÊ´§àºÍà ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ·Õàè Å×͡㪠¾Ã ÍÁ·Ñ§é ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò ÊÒÁÒöà»ÅÕÂè ¹à» ¹àºÍà ͹×è ·Õµè Í §¡ÒÃä´ ¨Ò¡Ãٻ໠¹¡ÒÃàÅ×Í¡à»ÅÕÂè ¹à» ¹àºÍà PIC16F887 áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò (Clock) ෠ҡѺ 20MHz

(4) ·ÕËè ¹ Òµ ҧᡠä¢â»Ãá¡ÃÁËÃ×Í Code Editor ¨ÐáÊ´§ÃÒÂÅÐàÍÕ´¢Í§«Íà Êâ»Ãá¡ÃÁ LED_Blinking.c ´Ñ§áÊ´§ã¹â»Ãá¡ÃÁ·Õè 1-1 /* * Project name: LED_Blinking (Simple 'Hello World' project) * Copyright: (c) Mikroelektronika, 2005. * Description: This is a simple project. It turns on/off diodes connected to PORTC. It uses bitwise negation to toggle PORTB pins. * Test configuration: MCU: PIC16F877A Dev.Board: EasyPIC4 Oscillator: HS, 08.0000 MHz Ext. Modules: SW: mikroC v7.0 * NOTES: None. */ void main() { PORTC = 0; TRISC = 0; while(1) { PORTC = ~PORTC; Delay_ms(1000); } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ

àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´ãË ¾Íà µ C à» ¹àÍÒµ ¾µØ áÅ Ç˹ ǧàÇÅÒ 500 äÁâ¤ÃÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é Êѧè ãË â»Ãá¡ÃÁ ·íÒ§Ò¹ã¹ÅÙ» While(1) à¾×Íè ¡ÅѺʶҹÐÅͨԡ·Õàè ÍÒµ ¾µØ ¢Í§¾Íà µ C áÅ Ç˹ ǧàÇÅÒ 100 ä«à¡ÔÅ

â»Ãá¡ÃÁ·Õè 1-1 µÑÇÍ ҧâ»Ãá¡ÃÁÀÒÉÒ C ¢Í§ä¿Å LED_Blinking.c ·Õ·è Òí §Ò¹º¹ mikroC ¤ÍÁä¾àÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 21

(5) ·íÒ¡ÒäÍÁä¾Å «Íà Ê⤠´ÀÒÉÒ C ãË à» ¹ÀÒÉÒà¤Ã×Íè § (.hex) â´Â¡´¤Õ CTRL+F9 ·Õºè ÃÔàdzᶺ´ Ò¹º¹¢Í§â»Ãá¡ÃÁ ËÃ×Íä»·Õàè Á¹Ù Project áÅ ÇàÅ×Í¡¤íÒÊѧè ËÃ×ͤÅÔ¡·Õäè ͤ͹ Build ¡çä´ (6) ËÅѧ¨Ò¡¤ÍÁä¾Å ¼ÅÅѾ¸ ·äÕè ´ ¨ÐáÊ´§·ÕËè ¹ Òµ Ò§ Messages ´ ҹŠҧ¢Í§â»Ãá¡ÃÁ «Ö觶 ÒäÁ ÁÕ¢ ͼԴ¾ÅÒ´ã´æ ˹ Òµ Ò§ Messages ¨ÐáÊ´§¢ ͤÇÒÁ Success ÊÕà¢ÕÂÇ áÅÐáÊ´§¨íҹǹ ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁáÅÐ˹ ǤÇÒÁ¨íÒ RAM ·Õ¶è ¡Ù 㪠§Ò¹

1.3.2 µÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¼ Ò¹ Debugger â»Ãá¡ÃÁ Debugger ¢Í§ mikroC ·íÒ§Ò¹àËÁ×͹¡Ñº¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ËÃ×Í«ÔÁàÙ ÅàµÍà à¾×Íè ´Ù¼Å¡ÒÃà»ÅÕÂè ¹á¼Å§·ÕÃè ¨Õ ÊÔ àµÍà µÒ § æ ÀÒÂã¹µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´ÂäÁ ¨Òí à» ¹µ ͧ´Òǹ âËÅ´ â»Ãá¡ÃÁä»ÃѹãË ·Òí §Ò¹¨ÃÔ§ ÁÕ¢¹Ñé µÍ¹¡ÒÃ㪠§Ò¹´Ñ§¹Õé (1) ä»·Õè àÁ¹Ù RUN àÅ×Í¡¤íÒÊѧè Start Debugger ËÃ×ͤÅÔ¡»ØÁ ´ Ò¹º¹¢Í§â»Ãá¡ÃÁ ËÃ×Í¡´¤Õ F9 à¾×Íè àÃÔÁè µ ¹à» ´Ë¹ Òµ Ò§ Debugger

ºÃÔàdzᶺà¤Ã×Íè §Á×Í

ËÁÒÂà赯 ¡ ͹¡ÒÃ㪠Debugger ËÃ×ͨíÒÅͧ¡Ò÷íÒ§Ò¹ µ ͧ·íÒ¡ÒäÍÁä¾Å â»Ãá¡ÃÁ¡ ͹àÊÁÍ


22 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

(2) â»Ãá¡ÃÁ¨Ðà» ´Ë¹ Òµ Ò§ Watch ¢Ö¹é ÁÒ à¾×Íè ´Ù¤Ò µÑÇá»Ãµ Ò§æ ¼ ҹ˹ Òµ Ò§ Watch Window â´Â¨Ðµ ͧàÅ×Í¡ÃÕ¨ÊÔ àµÍà ·µÕè Í §¡ÒõÃǨÊͺ¤ ÒàÊÕ¡ ͹ ÊíÒËÃѺâ»Ãá¡ÃÁ LED_Blinking ÃÕ¨ÊÔ àµÍà ·ãÕè ª §Ò¹¤×Í PORTC áÅÐ TRISC ºÃÔàdzᶺáÊ´§Ê¶Ò¹Ð¨Í§Ë¹ Òµ Ò§ Watch ¨ÐáÊ´§ µíÒá˹ §¢Í§â»Ãá¡ÃÁà¤Ò¹ àµÍà (¢³Ð«ÔÁàÙ ÅàµÍà â»Ãá¡ÃÁ) áÊ´§àÇÅÒ·Õãè ª àÁ×Íè ·íÒ¤íÒÊѧè (Stop watch) áÅÐá¿Å¡áÊ´§Ê¶Ò¹Ð (ÃÕ¨ÊÔ àµÍà Stutus)

à¾ÔÁè µÑÇá»Ã àÅ×Í¡µÑÇá»Ã

µíÒá˹ §â»Ãá¡ÃÁà¤Ò¹ àµÍÃ

á¿Å¡ã¹ÃÕ¨ÊÔ àµÍà STATUS

áÊ´§àÇÅÒàÁ×Íè ·íÒ¤íÒÊѧè

(3) 㹡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ÊÒÁÒö㪠»Ø Áµ Ò§æ ·ÕèÍÂÙ ºÃÔàdz´ Ò¹º¹¢Í§Ë¹ Òµ Ò§ Watch 㹡ÒôټšÒ÷íÒ§Ò¹ä´ ËÃ×Í¡´»ØÁ ¤ÕÂÅ ´Ñ ´Ñ§¹Õé Ãѹâ»Ãá¡ÃÁ·ÕèµíÒá˹ §à¤Íà à«Íà »ÃÒ¡¯ÍÂÙ F4 ËÃ×Í ¡íÒ˹´/¡àÅÔ¡¨Ø´àºÃ¡ F5 ËÃ×Í Ãѹ/ËÂØ´ªÑèǤÃÒÇ¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ F6 ËÃ×Í F7 ËÃ×Í Ãѹ໠¹Êàµç»â´ÂࢠÒä»ã¹â»Ãá¡ÃÁ Í Ãѹ໠¹Êàµç» â´ÂäÁ ࢠÒä»ã¹â»Ãá¡ÃÁ Í F8 ËÃ×Í Ãѹ໠¹Êàµç»¨¹ÍÍ¡¨Ò¡â»Ãá¡ÃÁ Í Ctrl+F8 ËÃ×Í à» ´¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ËÃ×Í«ÔÁÙàÅàµÍà F9 ËÃ×Í » ´¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹ËÃ×Í«ÔÁÙàÅàµÍà Ctrl+F2 ËÃ×Í Alt+D áÊ´§Ë¹ Òµ Ò§´ÔÊáÍÊà«ÁàºÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 23

(4) ¤ÅÔ¡·Õ»è ÁØ ËÃ×Í¡´»ØÁ F8 à¾×Íè Ãѹâ»Ãá¡ÃÁãË ·Òí §Ò¹áººÊàµç» áµ äÁ ࢠÒä» ´Ù¡Ò÷íÒ§Ò¹ã¹â»Ãá¡ÃÁ Í ¡´»ØÁ F8 ä»àÃ×Íè Âæ ¨¹¶Ö§¤íÒÊѧè PORTC = ~PORTC; Êѧࡵ¤ Ңͧ PORTC Ç Ò ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§ â´Â¶ Ò¤ Òà´ÔÁà» ¹ 0x00 ¨Ðà»ÅÕÂè ¹à» ¹ 0xFF áÅж Ò¤ Òà´ÔÁà» ¹ 0xFF ¨Ðà»ÅÕÂè ¹à» ¹ 0x00

1.3.3 ¡ÒõÃǨÇÑ´¤ Òä«à¡ÔÅ¡Ò÷íÒ§Ò¹´ Ç Stopwatch àÅ×Í¡·Õàè Á¹Ù View à Debug WindowsView à Clock ¨Ðà» ¹¡ÒÃà» ´Ë¹ Òµ Ò§ Stopwatch à¾×Íè 㪠´¤Ù Ò àÇÅÒ·Õãè ª 㹡Ò÷íÒ¤íÒÊѧè ËÃ×Í¿ §¡ ª¹Ñè ¨Ò¡¡ÒÃÃѹẺ·ÕÅÐÊàµç» ËÃ×ͨҡÃѹä»ËÂØ´·Õµè Òí á˹ § Breakpoint (¡íÒ˹´µíÒá˹ §ËÂØ´¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ã¹âËÁ´«ÔÁÅÙ àÅàµÍà )

â´Âã¹Ë¹ Òµ Ò§ Stopwatch áÊ´§¢ ÍÁÙŴѧ¹Õé

1. Current Count áÊ´§¨íҹǹä«à¡ÔÅ¡Ò÷íÒ§Ò¹áÅÐàÇÅÒ·Õãè ª µ§Ñé áµ à» ´Ë¹ Òµ Ò§ Debug 2. Delta à» ¹¡ÒÃáÊ´§¨íҹǹä«à¡ÔŢͧ¤íÒÊѧè ËÃ×Í¿ §¡ ª¹Ñè ·Õàè ¾Ô§è ÃѹãË ·Òí §Ò¹ä»Å ÒÊØ´ Reset to Zero

3. Stopwatch à» ¹¡ÒÃáÊ´§¨íҹǹä«à¡ÔÅ¡Ò÷íÒ§Ò¹áÅÐàÇÅÒ·Õè㪠ËÅѧ¨Ò¡¡´»Ø Á


24 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

4. Clock à» ¹Ë¹ Òµ Ò§ÊíÒËÃѺ¡íÒ˹´¤ Ò¤ÇÒÁ·ÕÍè ÍÊ«ÔÅàÅàµÍà ·ãÕè ª «Ö§è äÁ ¨Òí à» ¹µ ͧ໠¹ ¤ Òà´ÕÂǡѺ¤ Ò·Õ¡è Òí ˹´ã¹ä¿Å â»Ãà¨ç¡µ ¡äç ´ â´Â¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò¤ÇÒÁ¶ÕÍè ÍÊ«ÔÅàÅàµÍà ã¹Ë¹ Òµ Ò§ Stopwatch ¨ÐäÁ Á¼Õ šѺ¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò¤ÇÒÁ¶ÕÍè ÍÊ«ÔÅàÅàµÍà ã¹ä¿Å â»Ãà¨ç¡µ 5. »ØÁ 㪠à¾×Íè ÃÕ૵¹ÒÌ ¡Ò¨ÑºàÇÅÒãË ¡ÅѺä»àÃÔÁè ¹Ñº·Õè 0 (áµ ¨ÐäÁ ÁռšѺ¤ Ò Current Count ) 㪠ÊÒí ËÃѺ¡ÒèѺàÇÅÒ੾Òп §¡ ª¹Ñè ·Õµè Í §¡Òà ¤ Ò·ÕèáÊ´§¨ÐáÊ´§·Ñé§ã¹ÃٻẺ¢Í§ä«à¡ÔÅ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФҺ ÃÐÂÐàÇÅÒ·Õè㪠㹡Ò÷íÒ¤íÒÊÑè§ËÃ×Í¿ §¡ ªÑè¹ ËÅѧ¨Ò¡ÃÙ¨ ¡Ñ ¡ÑºÊ ǹ»ÃСͺ¢Í§Ë¹ Òµ Ò§ Stopwatch áŠǵ Íä»à» ¹¡Ò÷´ÅͧÃѹâ»Ãá¡ÃÁ Ẻ«Ô§à¡ÔÅÊàµç» à¾×Íè ´Ù¨Òí ¹Ç¹ä«à¡ÔÅáÅФҺàÇÅÒ·Õâè »Ãá¡ÃÁ㪠â´Â·íÒµÒÁ¢Ñ¹é µÍ¹´Ñ§¹Õé (1) ¡íÒ˹´ÊÑ­­Ò³¹ÒÌ ¡Ò (Clock) ෠ҡѺ 20 MHz (2) à¤ÅÕÂà ¤Ò ä«à¡ÔÅáÅФҺàÇÅÒ â´Â¤ÅÔ¡·Õ»è ÁØ (3) ¤ÅÔ¡·Õ»è ÁØ Step Over «Ö§è àÇÅÒ·Õè Stopwatch 㪠෠ҡѺ 3 ä«à¡ÔÅ

ËÃ×Í¡´»ØÁ F8 Ë¹Ö§è ¤Ãѧé à» ¹¡Ò÷íÒ¤íÒÊѧè PORTC

= 0

(4) ¤ÅÔ¡·Õ»è ÁØ Step Over ÍÕ¡¤Ãѧé à» ¹¡Ò÷íÒ¤íÒÊѧè TRISC = 0 Êѧࡵ·ÕËè ÇÑ ¢ Í Delta ¤ Ò¨ÐÁÕ¤ Òà· Ò 2 ä«à¡ÔÅ áÊ´§Ç Ò¤íÒÊÑè§ TRISC = 0 㪠¤ÒºàÇÅÒ 2 ä«à¡ÔÅáµ ¤ ÒÃÐÂÐàÇÅҢͧ Stopwatch ¨ÐÁÕ¤Ò à· Ò¡Ñº 5 à¹×Íè §¨Ò¡à» ¹¡ÒÃÃÇÁ¤íÒÊÑ§è ¡ ͹˹ Ò¹Õàé ¢ Òä»´ Ç (5) ¤ÅÔ¡·Õ»è ÁØ Step Over ÍÕ¡¤ÃÑ§é ¨Ðà» ¹¡Ò÷íÒ¿ §¡ ª¹Ñè ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ã¹ ¡Ã³Õ·ãÕè ª Step Over â»Ãá¡ÃÁ¨ÐäÁ ࢠÒä»áÊ´§¡Ò÷íҧҹ㹿 §¡ ª¹Ñè ¹Ñ¹é áµ ¨ÐáÊ´§¤ Ò¨íҹǹä«à¡ÔÅ ¢Í§¿ §¡ ª¹Ñè Delay_ms(1000) ÍÍ¡ÁÒ (ÍÒ¨µ ͧ㪠àÇÅÒÃÍÊÑ¡¤ÃÙ ) ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 5,018,507 ä«à¡ÔÅ ËÃ×Íà» ¹ÃÐÂÐàÇÅÒ 1003.70 ÁÔÅÅÔÇ¹Ô Ò·Õ ËÃ×Í 1 ÇԹҷվʹÕ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 25

1.4 ˹ Òµ Ò§áÊ´§Ê¶Ôµ¡Ô ÒÃ㪠˹ ǤÇÒÁ¨íÒ ËÅѧ¨Ò¡¤ÍÁä¾Å â»Ãá¡ÃÁáÅ Ç ¼Ùã ª §Ò¹ÊÒÁÒöàÃÕ¡´ÙʶԵµÔ Ò §æ Íѹ»ÃСͺ仴 Ç 1. Memory usage áÊ´§¡ÒÃ㪠§Ò¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁáÅÐ˹ ǤÇÒÁ¨íÒ RAM «Ö觨ÐáÊ´§·Ñ駻ÃÔÁҳ˹ ǤÇÒÁ¨íÒ·ÕèÇ Ò§ÍÂÙ áÅÐ˹ ǤÇÒÁ¨íÒ·Õè㪠ä»

2.Procedures (sizes) áÊ´§»ÃÔÁÒ³¡ÒÃ㪠˹ ǤÇÒÁ¨íÒẠ§µÒÁ¿ §¡ ª¹Ñè ·Õàè ÃÕ¡ãª


26 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

3.Procedures (locations) áÊ´§µíÒá˹ §¡ÒÃ㪠§Ò¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§ ¿ §¡ ª¹Ñè µ Ò§ æ ÀÒÂã¹â»Ãá¡ÃÁ ÃÇÁ¶Ö§»ÃÔÁÒ³¡ÒÃ㪠˹ ǤÇÒÁ¨íÒã¹áµ Åп §¡ ª¹Ñè ´ ÇÂ

4.Procedures (details) áÊ´§ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ªÑè¹µ Ò§æ â´ÂÁÕ¡ÒÃÃкصíÒá˹ § áÍ´à´ÃÊàÃÔèÁµ ¹áÅÐÊÔé¹ÊØ´¢Í§¿ §¡ ªÑè¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 27

5.RAM à» ¹¡ÒÃáÊ´§ÃÒÂÅÐàÍÕ´¢Í§Ë¹ ǤÇÒÁ¨íÒ RAM áÅÐÃÕ¨ÊÔ àµÍà µÒ §æ â´Â áÊ´§ª×èÍáÅеíÒá˹ §áÍ´à´ÃʢͧÃÕ¨ÔÊàµÍà áÅÐ˹ ǤÇÒÁ¨íÒàËÅ Ò¹Ñé¹

6.ROM à» ¹Ë¹ Òµ Ò§áÊ´§ÃÒÂÅÐàÍÕ´â»Ãá¡ÃÁÀÒÉÒáÍÊá«ÁºÅÕ·àÕè ¡çºÍÂÙ㠹˹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ


28 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.5 ·´Êͺ¡Ò÷íÒ§Ò¹·Ò§ÎÒà ´áÇà 㹡Ò÷´Êͺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õèà¢Õ¹¢Öé¹à¾×èÍãË àË繼šÒ÷íÒ§Ò¹¨ÃÔ§æ ·Ò§ÎÒà ´áÇà ¨Ðµ ͧÁÕ¡ÒôÒǹ âËÅ´ä¿Å .hex «Ö§è à» ¹ä¿Å ¼ÅÅѾ¸ ¢Í§ mirkoC ¤ÍÁä¾àÅÍà ä»Âѧ ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´Ñ§¹Ñ¹é 㹡Ò÷´Êͺ¹Õ¨é ÐÁÕà¤Ã×Íè §Á×Í 2 µÑÇ·Õè à¡ÕèÂÇ¢ ͧ¤×Í ÎÒà ´áÇà ÊíÒËÃѺâ»Ãá¡ÃÁáÅз´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áÅЫͿµ áÇà ÊíÒËÃѺ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ ÎÒà ´áÇà ·Õèá¹Ð¹íÒã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õé»ÃСͺ´ Ç 1. ºÍà ´ÊíÒËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC/dsPIC ¼ Ò¹¾Íà µ USB ª×Íè Ãع PX-200 ¢Í§ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ (www.inex.co.th) 2. ºÍà ´·´ÅͧÃع NX-877 plusII ÊíÒËÃѺ¡Ã³ÕµÍ §¡Ò÷´Åͧ·ÑÇè ä» »¡µÔµ´Ô µÑ§é äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC18F877A äÇ áµ ÊÒÁÒöà»ÅÕÂè ¹à» ¹àºÍà PIC16F887 ËÃ×Í 18F4xxx ã¹Ãع 40 ¢Òä´ 3. RBX-877 V2.0 ºÍà ´¤Çº¤ØÁËع ¹µ Robo-PICA ·Õµè ´Ô µÑ§é äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 áµ ÊÒÁÒöà»ÅÕÂè ¹à» ¹àºÍà PIC16F877A ËÃ×Í 18F4xxx ã¹Ãع 40 ¢Ò ä´ Ê Ç¹«Í¿µ áÇà ·Õè㪠¤×Í PICkit2TM Programming Software ¢Í§ Microchip ¼Ù ¼ÅÔµäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ÒÁÒö´Òǹ âËÅ´ä´ ¿ÃÕ·Õè www.microchip.com

1.5.1 ¡ÒõԴµÑ§é «Í¿µ áÇà PICkit2TM Programming software PICkit2TM Programming Software à» ¹«Í¿µ áÇà ÊÒí ËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áÅÐ dsPIC Ẻá¿Åª·Õµè Í §·íҧҹà ÇÁ¡Ñºà¤Ã×Íè §â»Ãá¡ÃÁ PICkit2TM ¢Í§ Microchip ËÃ×Íà¤Ã×Íè § â»Ãá¡ÃÁÍ×¹è ·ÕÁè ¡Õ Ò÷íÒ§Ò¹µÃ§¡Ñ¹ ã¹·Õ¹è àÕé Å×͡㪠ºÍà ´â»Ãá¡ÃÁÃع PX-200 «Ö§è ¾Ñ²¹Ò¢Ö¹é â´ÂºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ¨Ò¡¢ ÍÁÙÅ·Õàè ¼Âá¾Ã ÊÊÙ Ò¸ÒóТͧà¤Ã×Íè §â»Ãá¡ÃÁ PICkit2TM â´Â Microchip ÊíÒËÃѺ¡ÒÃâ»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¢Í§ºÍà ´ PX-200 ¨Ðà» ¹áººâ»Ãá¡ÃÁã¹Ç§¨Ã¼ Ò¹·Ò§á¨ ¡ ICD2

1.5.1.1 µÔ´µÑ§é ¨Ò¡á¼ ¹«Õ´ÃÕ ÍÁ·ÕÁè ҡѺªØ´ PX-200 «Í¿µ áÇà ·ãÕè ª ¡ºÑ PX-200 ¤×Í PICkit2TM Programming Software â´Âã¹àÇÍÃìª¹Ñ ãËÁèæ ¹Ñ¹é ¾Ñ²¹ÒÁÒ¨Ò¡ Microsoft .NET ´Ñ§¹Ñ¹é ¡ÒõԴµÑ§é â»Ãá¡ÃÁà¾×Íè 㪠§Ò¹ ¼Ùã ª §Ò¹µ ͧÁÕ¡ÒõԴµÑ§é Microsoft .NET Framework àÊÕ¡ ͹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 29

(¡) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà äÁ Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework ÁÒ¡ ͹ µÔ´µÑ§é Microsoft .NET Framework â´ÂàÅ×Í¡µÔ´µÑ§é ¨Ò¡â¿Åà´Íà PICkit 2 Setup v2.01 dotNET à dotnetfx ã¹á¼ ¹«Õ´ÃÕ ÍÁ ´ÑºàºÔŤÅÔ¡·Õäè ¿Å dotnetfx.exe ¨Ð㪠àÇÅÒ㹡ÒõԴµÑ§é ¤ÃÙË ¹Ö§è ¨Ò¡¹Ñ¹é ¨Ö§µÔ´µÑ§é â»Ãá¡ÃÁ PICkit2TM Programming Software â´ÂàÅ×Í¡ä¿Å PICkit2Setup.msi (¢) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework áÅ Ç µÔ´µÑ§é â»Ãá¡ÃÁ PICkit2TM Programming Software â´ÂࢠÒä»·Õâè ¿Åà´Íà PICkit 2 Setup v2.01 ã¹á¼ ¹«Õ´ÃÕ ÍÁ ´ÑºàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi

1.5.1.2 µÔ´µÑ§é ¨Ò¡ä¿Å ·´Õè Òǹ âËÅ´¨Ò¡àǺ䫵 ¢Í§ Microchip ࢠÒä»ÂѧàǺ䫵 ¢Í§ Microchip ·Õè www.microchip.com àÅ×Í¡ËÑÇ¢ Í Development tools à Pickit 2 Programmer/Debugger (¡) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà äÁ Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework ÁÒ¡ ͹ ãË ´Òǹ âËÅ´ä¿Å ¨Ò¡ËÑÇ¢ Í PICkit2V2.01 Install with .NET Framework ¨Ðä´ ä¿Å PICkit 2 Setup v2.01 dotNET.zip (µÑÇàÅ¢àÇÍà ª¹Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§µÒÁÃع ·ÕÁè ¡Õ ÒûÃѺ»ÃاŠÒÊØ´) áÅ Ç ·íÒ¡ÒâÂÒÂä¿Å ·Õè´Òǹ âËÅ´ÁÒ à¡çºäÇ ã¹â¿Åà´Íà PICkit 2 Setup v2.01 dotNET ¨Ò¡¹Ñé¹à¢ Òä» ã¹â¿Åà´Íà PICkit 2 Setup v2.01 dotNET à dotnetfx àÅ×Í¡´ÑºàºÔŤÅÔ¡·Õäè ¿Å dotnetfx.exe ¨Ð㪠àÇÅÒ㹡ÒõԴµÑ§é ¤ÃÙË ¹Ö§è ¨Ò¡¹Ñ¹é ¨Ö§·íÒ¡ÒõԴµÑ§é â»Ãá¡ÃÁ Pickiit2TM Programming Software â´Â ࢠÒä»áŠǴѺàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi (¢) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework áÅ Ç ãË ´Òǹ âËÅ´ä¿Å ¨Ò¡ËÑÇ¢ Í PICkit2V2.01 Install ¨Ðä´ ä¿Å PICkit 2 Setup v2.01.zip (µÑÇàÅ¢àÇÍà ª¹Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§µÒÁÃع ·ÕÁè ¡Õ ÒûÃѺ»ÃاŠÒÊØ´) áÅ Ç·íÒ¡ÒâÂÒÂä¿Å ·´Õè Òǹ âËÅ´ÁÒ à¡çº äÇ ã¹â¿Åà´Íà PICkit 2 Setup v2.01 ¨Ò¡¹Ñ¹é ࢠÒä»ã¹â¿Åà´Íà àÅ×Í¡´ÑºàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi à¾×Íè àÃÔÁè µ ¹µÔ´µÑ§é â»Ãá¡ÃÁ


30 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.5.1.3 ¢Ñ¹é µÍ¹¡ÒõԴµÑ§é â»Ãá¡ÃÁ (1) ´ÑºàºÔŤÅÔ¡ä¿Å µ´Ô µÑ§é PICkit2Setup.msi ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÃÔÁè ¡ÒõԴµÑ§é ¤ÅÔ¡»ØÁ Next

(2) ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧᨠ§µíÒá˹ §â¿Åà´Íà ·¨Õè зíÒ¡ÒõԴµÑ§é ËÒ¡äÁ µÍ §¡ÒÃà»ÅÕÂè ¹á»Å§µíÒ á˹ §â¿Åà´Íà ãË ¤ÅÔ¡»ØÁ Next à¾×Íè ¼ Ò¹¢Ñ¹é µÍ¹¹Õäé »

(3) ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧᨠ§Â×¹Âѹ¡ÒõԴµÑ§é â»Ãá¡ÃÁ ¤ÅÔ¡»ØÁ Next à¾×Íè µÍºµ¡Å§


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 31

(4) ˹ Òµ ҧᨠ§ÅÔ¢ÊÔ·¸ «Í¿µ áÇà »ÃÒ¡¯¢Ö¹é ¤ÅÔ¡ I agree à¾×Íè µÍºÃѺ ¨Ò¡¹Ñ¹é ¤ÅÔ¡»ØÁ Next

(5) ˹ Òµ ҧᨠ§Ê¶Ò¹Ð¡ÒõԴµÑ§é â»Ãá¡ÃÁ»ÃÒ¡¯¢Ö¹é Ãͨ¹¡ÃÐ·Ñ§è ¡ÒõԴµÑ§é àÊÃç¨ÊÁºÙó

¨Ò¡¹Ñ¹é ˹ Òµ ҧᨠ§¡ÒõԴµÑ§é â»Ãá¡ÃÁàÊÃç¨ÊÁºÙó ¨Ð»ÃÒ¡¯¢Ö¹é ãË ¤ÅÔ¡»ØÁ Close à¾×Íè » ´ ˹ Òµ Ò§¹Õé à» ¹ÍѹàÊà ¨ÊÔ¹é ¢Ñ¹é µÍ¹¡ÒõԴµÑ§é â»Ãá¡ÃÁ PICkit2TM Programming Software


32 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

1.5.2 ¡ÒÃàª×Íè Áµ Íà¾×Íè ·´Åͧ·Ò§ÎÒà ´áÇà (1) àÃÔÁè µ ¹´ Ç¡Òõ ÍÊÒ USB ÃÐËÇ Ò§ PX-200 ¡Ñº¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à» ´â»Ãá¡ÃÁ Pickit2TM Programming Software â´ÂàÅ×Í¡·Õè Start à All programs à Microchip à Pickit 2 V201 (àÅ¢àÇÍà ª¹ Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§ä´ µÒÁ¡ÒûÃѺ»ÃاŠÒÊØ´) ã¹ÃÙ»·Õè 1-2 áÊ´§Ë¹ Òµ Ò§ ËÅÑ¡¢Í§â»Ãá¡ÃÁ Pickit2TM Programming Software àÁ¹Ù¤Òí Êѧè ᶺáÊ´§¡Ò÷íÒ§Ò¹

»ØÁ ª ÇÂ㹡Òà ·íÒ§Ò¹

¡Ãͺ Configuration ª ͧáÊ´§Ê¶Ò¹Ð

˹ Òµ Ò§ºÑ¿à¿Íà ¢Í ÁÙŢͧ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ

ᨠ§ ·Õè Á Ңͧ ä¿Å .hex ·ÕÃè ºÑ à¢ ÒÁÒà¡çºäÇ ã¹ ºÑ¿à¿Íà »ØÁ ª ÇÂ㹡Òà ·íÒ§Ò¹

˹ Òµ Ò§ºÑ¿à¿Íà ¢Í ÁÙŢͧ˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ

ÃÙ»·Õè 1-2 ˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Pickiit2TM Programming Software


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 33

(2) µ ÍÊÒ ICD ÃÐËÇ Ò§ºÍà ´â»Ãá¡ÃÁ PX-200 ¡ÑººÍà ´à» ÒËÁÒÂËÃ×ͺÍà ´·´Åͧ (2.1) ¡Ã³Õ㪠¡ºÑ ºÍà ´·´Åͧ NX-877 plusII µ ;Íà µ USB

àª×Íè Áµ ͡ѹ´ ÇÂÊÒ ICD2

¨ ÒÂä¿àÅÕÂé § ¡´ÊÇÔµª àÅ×Í¡âËÁ´ â»Ãá¡ÃÁ (ä¿ÊÕá´§µÔ´ÊÇ Ò§) ¾×¹é ·ÕÊè Òí ËÃѺµ Íǧ¨Ã·´Åͧ

(2.1) ¡Ã³Õ㪠¡ºÑ ºÍà ´¤Çº¤ØÁËع ¹µ RBX-877 Rev.2007) ºÍà ´â»Ãá¡ÃÁ PIC

ÊÒÂ ICD2

4.8-6V

RC7 RxD

DOWNLOAD

POWER

RC6 TxD

RC4 SDA

RC3 SCL LCD back light

ICD2

ON ON

M-1 M-2

S+

SERVO #1 #2

#3

µ ͡Ѻ¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍÃ

Sound RC0

LCD

BATT

RA4

RESET

RB0

Robo - PICARRobotR PICRMicroRobotic RB3 RB0/INT

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2

ÊíÒËÃѺâ»Ãá¡ÃÁµÑÇÍ ҧ LED_Blinking ·ÕÁè Ò¨Ò¡µÑÇÍ ҧã¹â¿Åà´Íà C:\Program Files\Mikroelektronika\mikroC\Examples\EasyPic4\P16F877A\LED_Blinking ÁÕ¡ÒáíÒ˹´¡Òõ Í Ç§¨ÃäÁ µÃ§¡ÑººÍà ´ RBX-877 Rev.2007 ´Ñ§¹Ñ¹é 㹡Ò÷´Êͺ¹Õ¨é ÐÍ Ò§¶Ö§ºÍà ´·´Åͧ NX-877 plus II à» ¹ËÅÑ¡ ÊíÒËÃѺµÑÇÍ ҧ¡Ò÷´Êͺ¡ÑººÍà ´ RBX-877 Rev.200 ´ÙÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁã¹Ë¹Ñ§Ê×Í àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC «Ö§è ¨Ñ´ÁÒã¹Ø´Ëع ¹µ Robo-PICA


34 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

(3) ¨Ò¡¹Ñ鹫Ϳµ áÇà ¨ÐµÃǨÊͺ¡ÒÃàª×èÍÁµ ÍáÅÐàºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õèàª×èÍÁµ Í´ ÇÂÍ ҧÍѵâ¹ÁÑµÔ áŠǨÐᨠ§àºÍà ·Õ辺º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ (4) àÅ×Í¡ä¿Å .hex ·Õèµ Í§¡ÒÃâ»Ãá¡ÃÁ â´Âä»·ÕèàÁ¹Ù File àÅ×Í¡ Import Hex ¨ÐÁÕ˹ Òµ Ò§ ÊíÒËÃѺ໠´ä¿Å *.hex ·Õèµ Í§¡ÒÃâ»Ãá¡ÃÁŧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹷Õè¹ÕéàÅ×Í¡ä»·Õè C:\Program Files\Mikroelektronika\mikroC\Examples\EasyPic4\P16F877A\LED_Blinking àÅ× Í ¡ä¿Å ª×è Í LED_Blinking.hex (5) ¤ÅÔ¡»ØÁ Write à¾×Íè ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC

(6) µ Íǧ¨Ãâ´Âµ Í¢Ò¾Íà µ C ã´æ ࢠҡѺ LED +5V 11

32

C6 0.1PF 50V

+5V

1+! 21+ $.&%%

R5 4k7 SW2 4-5-6

1 R6 1k

MCLR

LED RCx 12 31

13 C2 22pF

XTAL1 20MHz

R1 390

14 C3 22pF

(7) ¡Ã³Õ㪠ºÍà ´ NX-877 plus II ËÅѧ¨Ò¡â»Ãá¡ÃÁáÅ Ç ãË ¡´ÊÇÔµª MODE ÁÒã¹âËÁ´ Run áÅ Ç¡´ÊÇÔµª RESET äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¨ÐàÃÔÁè ·íÒ§Ò¹ LED ·Õµè Í ÍÂÙ¨ еԴ¡Ð¾ÃԺ͠ҧµ Íà¹×Íè §

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 35

º··Õè 2

¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×Íé §µ ¹ ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ´ Ç mikroC ¨Ðµ ͧÊà ҧä¿Å ã¹Åѡɳмѧ§Ò¹ËÃ×Íä¿Å â»Ãà¨ç¡µ (project) «Ö§è ÁÕ¢¹Ñé µÍ¹·Õäè Á 夯 ÂÒ¡ à¹×Íè §¨Ò¡ mikroC ÁÕà¤Ã×Íè §Á×Í·Õªè Ç ÂʹѺʹع¡ÒÃÊà ҧä¿Å áÅÐÅ´ÀÒÃР㹡ÒÃà¢Õ¹â»Ãá¡ÃÁáÅСÒÃàª×Íè Áâ§ä¿Å

2.1 ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ÁÕ¢Ñ鹵͹â´ÂÊÃØ»´Ñ§¹Õé (1) à» ´â»Ãá¡ÃÁ mikroC ä»·Õàè Á¹Ù Project àÅ×Í¡¤íÒÊѧè New Project ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ ¡ÒÃÊà ҧ Project ¢Ö¹é ÁҴѧÃÙ» ¡íÒ˹´ª×Íè â»Ãà¨ç¡µ ¡íÒ˹´µíÒá˹ §â¿Åà´Íà ÃÒÂÅÐàÍÕ´â»Ãà¨ç¡µ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·àÕè Å×͡㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò ª ͧ¡íÒ˹´¤ ҤسÅѡɳзҧ ÎÒà ´áÇà ËÃ×ͤ͹¿ ¡à٠êѹè


36 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¡ÒáíÒ˹´¤ Òµ Ò§æ ã¹Ë¹ Òµ Ò§ New Project ÁÕ´§Ñ ¹Õé (1.1) Project Name à» ¹¡ÒáíÒ˹´ª×Íè ä¿Å â»Ãà¨ç¡µ áÅЪ×Íè «Íà Êâ»Ãá¡ÃÁ ÀÒÉÒ C ´ Ç â´Âä¿Å â»Ãà¨ç¡µ Á¹Õ ÒÁÊ¡ÅØà» ¹ .ppc Ê Ç¹ä¿Å «Íà Êâ»Ãá¡ÃÁÁÕ¹ÒÁÊ¡ØÅà» ¹ .c ã¹·Õè ¹Õ¡é Òí ˹´ª×Íè Ç Ò Project01 (1.2) Project Path à» ¹¡ÒáíÒ˹´µíÒá˹ §â¿Åà´Íà ·ãÕè ª à¡çºä¿Å â»Ãà¨ç¡µ áÅЫÍà Êâ»Ãá¡ÃÁ ã¹·Õ¹è ¡Õé Òí ˹´µíÒá˹ §äÇ ·Õè C:\MikroC_Code ¼Ùã ª §Ò¹ÊÒÁÒö¡´¤Õ à¾×èÍàÅ×Í¡µíÒá˹ §â¿Åà´Íà ´ ǵ¹àÍ§ä´ ¨ÐÃкØËÃ×ÍäÁ ¡äç ´

(1.3) Description à» ¹¾×¹é ·ÕÊè Òí ËÃѺÃкØÃÒÂÅÐàÍÕ´à¡ÕÂè ǡѺâ»Ãà¨ç¡µ ·ÊÕè à ҧ¢Ö¹é

(1.4) Device à» ¹ª ͧÊíÒËÃѺ¡íÒ˹´àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·àÕè Å×͡㪠§Ò¹ à¹×Íè §¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áµ ÅÐàºÍà Á¤Õ ³ Ø ÊÁºÑµäÔ Á àËÁ×͹¡Ñ¹ ¨Ö§µ ͧàÅ×Í¡àºÍà ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ãË ¶¡Ù µ ͧ ã¹·Õ¹è àÕé Å×Í¡à» ¹àºÍà PIC16F887 (1.5) Clock 㪠¡Òí ˹´¤ Ò¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò·Õãè ª ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ˹ ÇÂà» ¹ MHz ã¹·Õ¹è ãÕé ª ¤ÇÒÁ¶Õàè · ҡѺ 20 MHz (2) ¡íÒ˹´¤ ҤسÊÁºÑµÔ·Ò§ÎÒà ´áÇà ËÃ×ͤ͹¿ ¡ÙàêÑè¹ (configuration) ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC àºÍà ·àÕè Å×͡㪠§Ò¹·Õªè Í § Device Flags ÁÕµÇÑ àÅ×Í¡ãË ãª §Ò¹ËÅÒÂÃٻẺઠ¹ _XT_OSC : ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒẺ¤ÃÔʵÍÅ ¤ÇÒÁ¶Õäè Á à¡Ô¹ 4MHz _HS_OSC : ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒẺ¤ÃÔʵÍŤÇÒÁ¶ÕÊè §Ù (4MHz ¢Ö¹é ä») _LP_OSC : ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒẺ¤ÃÔʵÍžÅѧ§Ò¹µèÒí _RC_OSC : ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒẺ㪠µÇÑ µ Ò¹·Ò¹áÅеÑÇà¡çº»ÃÐ¨Ø _LVP_ON,_LVP_OFF : àÍç¹àÍàºÔÅáÅдÔÊàÍàºÔÅ¡ÒÃâ»Ãá¡ÃÁ´ ÇÂáç´Ñ¹µèÒí _WDT_ON ,_WDT_OFF : àÍç¹àÍàºÔÅáÅдÔÊàÍàºÔÅÇ͵ª ´Íç ¡ä·àÁÍà _CP_OFF,_CP_ALL : àÅ×Í¡ËÃ×ÍäÁ àÅ×Í¡» ͧ¡Ñ¹¡ÒÃÍ Ò¹¢ ÍÁÙÅ (Code Protect) ¡ÒáíÒ˹´¤ ÒàËÅ Ò¹Õ¢é ¹Öé ÍÂÙ¡ ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ᵠÅеÑÇ ÃÒÂÅÐàÍÕ´à¾ÔÁè àµÔÁÊÒÁÒöÈÖ¡ÉÒä´ ¨Ò¡´Òµ ÒªÕµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà ¹¹Ñé æ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 37

ÊíÒËÃѺ¡ÒÃÊà ҧâ»Ãà¨ç¡µ ¤ÃÑ駹ÕéãË ¡íÒ˹´¤ Òà» ¹¤ ÒµÑ駵 ¹ â´Â¤ÅÔ¡·Õè»Ø Á ÊíÒËÃѺ PIC16F887 ¤ ÒµÑ§é µ ¹ ¤×Í l

ǧ¨ÃÊÑ­­Ò³¹ÒÌ ¡Òà» ¹áºº HS_OSC

l

´ÔÊàÍàºÔÅÇ͵ª ´Íç ¡ä·àÁÍà (WDT_OFF)

l

´ÔÊàÍàºÔÅ¡ÒÃâ»Ãá¡ÃÁẺ㪠áç´Ñ¹µèÒí (LVP_OFF)

ÊíÒËÃѺ»ØÁ

à» ¹¡ÒáàÅÔ¡à¤Ã×Íè §ËÁÒ¶١˹ ÒËÑÇ¢ Í Config ·Ñ§é ËÁ´

àÁ×Íè ¡íÒ˹´¤ ÒàÃÕºà ÍÂãË ¡´»ØÁ OK à» ¹ÍѹàÊÃç¨ÊÔ¹é ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ãËÁ â»Ãá¡ÃÁ¨ÐÊà ҧä¿Å Project01.c ¢Ö¹é ÁÒãË â´ÂÍѵâ¹ÁÑµÔ (3) ËÅѧ¨Ò¡Êà ҧä¿Å â»Ãà¨ç¡µ àÃÕºà ÍÂáÅ Ç ¼Ù 㪠§Ò¹ÂѧÊÒÁÒöᡠ䢢 ÍÁÙÅ㹡Òà ¡íÒ˹´¤ Òµ Ò§æ ¢Í§ä¿Å â»Ãà¨ç¡µ ä´ â´Âä»·Õàè Á¹Ù Project à Edit Project ËÃ×ͤÅÔ¡äͤ͹ ·Õáè ¶ºà¤Ã×Íè §Á×ͧ͢â»Ãá¡ÃÁ mikroC áµ ¶ Òµ ͧ¡ÒÃà»ÅÕè¹àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÃ×ͤÇÒÁ¶ÕèÊÑ­­Ò³ ¹ÒÌ ¡Ò ¼Ù¾ ² Ñ ¹Òâ»Ãá¡ÃÁÊÒÁÒö¡íÒ˹´¤ Òä´ ¨Ò¡á·ç» Project Setup ·ÕÁè ÁØ Å Ò§´ Ò¹« Ò¢ͧ˹ Òµ Ò§ ËÅÑ¡ä´ ·Ñ¹·Õ

(4) ËÅѧ¨Ò¡á¡ ä¢à»ÅÕè¹á»Å§¢ ÍÁÙÅã¹ä¿Å â»Ãà¨ç¡µ áÅ Ç ¨Ðµ ͧºÑ¹·Ö¡¡ÒÃá¡ ä¢ â´ÂàÅ×Í¡·Õàè Á¹Ù Project à Save Project ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¡çä´


38 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

2.2 â¤Ã§Êà ҧâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà ÃٻẺÀÒÉÒ C ¢Í§ mikroC ÁÕ¤ÇÒÁ¤Å Ò¤ÅÖ§¡Ñºâ»Ãá¡ÃÁÀÒÉÒ C Áҵðҹ ´Ñ§¹Ñ¹é ¼Ù· ÁÕè ¾Õ ¹×é °Ò¹ÀÒÉÒ C ÁÒº Ò§áÅ Ç ÊÒÁÒö·íÒ¤ÇÒÁࢠÒã¨áÅÐà¢Õ¹â»Ãá¡ÃÁ¡Ñº mikroC ä´ ·¹Ñ ·Õ Ê Ç¹·Õµè Í §à¾ÔÁè àµÔÁ¤×Í ¡Ò÷íÒ¤ÇÒÁࢠÒ㨡Ѻ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ·Ò§ÎÒà ´áÇà ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ã¹ÃÙ»·Õè 2-1 à» ¹¡ÒÃáÊ´§Ê ǹ»ÃСͺ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õ¾è ² Ñ ¹Òº¹ mikroC »ÃСͺ ´ Ç µÑÇá»ÃáÅСÒûÃСÒȵÑÇá»Ã, ¿ §¡ ª¹Ñè â»Ãá¡ÃÁËÅÑ¡ (main program), ¿ §¡ ª¹Ñè â»Ãá¡ÃÁ, ªØ´¤íÒÊѧè , ä¿Å àδà´Íà (Header) áÅФíÒ͸ԺÒÂâ»Ãá¡ÃÁ (comment) áµ Í ҧ¹ Í·ÕèÊش㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨Ðµ ͧÁÕâ»Ãá¡ÃÁËÅÑ¡ «Öè§ÁÕÅѡɳдѧ¹Õé void main () {

ªØ´¤íÒÊѧè ; }

ä¿Å Header ¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ µÑÇá»Ã â»Ãá¡ÃÁËÅÑ¡ ¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¤íÒÊѧè

ÃÙ»·Õè 2-1 áÊ´§Ê ǹ»ÃСͺ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õ¾è ² Ñ ¹Òº¹ mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 39

2.3 ¡ÒûÃСÒȵÑÇá»Ãã¹ÀÒÉÒ C ÊíÒËÃѺ mikroC ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ mikroC àËÁ×͹¡ÑºÀÒÉÒ C ·ÑÇè ä» ÁÕû٠Ẻ´Ñ§¹Õé Type VAR_name;

â´Â

Type

¤×Í ª¹Ô´¢Í§¢ ÍÁÙÅ·Õµè Í §¡ÒáíÒ˹´¤ Ò

VAR_name

¤×Í ª×Íè µÑÇá»Ã·Õ»è ÃСÒÈ

ª×Íè ·Õãè ª ÊÒí ËÃѺµÑÇá»ÃËÃ×ͪ×Íè ¿ §¡ ª¹Ñè ã¹ÀÒÉÒ C ÊÒÁÒöµÑ§é ª×Íè ·ÕÁè ·Õ §Ñé µÑÇ˹ѧÊ×ÍËÃ×͵ÑÇàÅ¢ ÃÇÁÍÂÙ´ Ç Â¡Ñ¹ä´ áµ µÇÑ ÍÑ¡ÉÃ¢Ö¹é µ ¹ ¨Ðµ ͧ໠¹µÑÇ˹ѧÊ×Í ËÃ×͵ÑÇ¢Õ´àÊ ¹ãµ _ ෠ҹѹé ઠ¹ _dat1 , mark64 à» ¹µ ¹

2.4 ª¹Ô´µÑÇàÅ¢¢Í§µÑÇá»Ã ª¹Ô´µÑÇàÅ¢¢Í§µÑÇá»Ã·Õè㪠¡Ñº mikroC ¤ÍÁä¾àÅÍà Ạ§à» ¹ÃٻẺËÅÑ¡æ ä´ 2 Ẻ¤×Í µÑÇá»ÃàÅ¢¨íҹǹàµçÁ (integral) áÅеÑÇá»ÃẺàÅ¢·È¹ÔÂÁ (floating)

2.4.1 µÑÇá»ÃẺ¨íҹǹàµçÁ (integral) µÑÇá»ÃẺ¨íҹǹàµçÁÁÕ¤Òí ʧǹ·Õ¹è Òí ÁÒ㪠äÁ ÁÒ¡ »ÃСͺ´ Ç char , int, short, long, signed áÅÐ unsigned â´Âá¡áÂШíҹǹª ǧµÑÇàÅ¢´Ñ§áÊ´§ã¹µÒÃÒ§·Õè 2-1 ¡ÒáíÒ˹´¤ ÒºÒ§ ¤ Ò àª ¹ short ËÃ×Í signed char ÁÕ¢¹Ò´µÑ§é áµ -128 ¶Ö§¤ Ò 127 ෠ҡѹ ´Ñ§¹Ñ¹é àÁ×Íè ¹íÒä»ãª §Ò¹¨ÃÔ§ 㪠short à¾Õ§Í ҧà´ÕÂÇ¡çä´ ª¹Ô´¢Í§µÑÇá»Ã

¨íҹǹ亵

char ËÃ×Í unsigned char signed char short ËÃ×Í signed short int unsigned short ËÃ×Í unsigned short int

int ËÃ×Í signed int unsigned

ËÃ×Í unsigned

int

long ËÃ×Í signed long int unsigned long ËÃ×Í unsigned long int

1 1 1 1 2 2 4 4

ª ǧµÑÇàÅ¢ 0 ¶Ö§ 255 -128 ¶Ö§ 127 -128 ¶Ö§ 127 0 ¶Ö§ 255 -32,768 ¶Ö§ 32,767 0 ¶Ö§ 65,535 -2,147,483,648 ¶Ö§ 2,147,483,647

0 ¶Ö§ 4,294,967,295

µÒÃÒ§·Õè 2-1áÊ´§ª¹Ô´¢Í§µÑÇá»ÃẺ¨íҹǹàµçÁ


40 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

µÑÇÍ ҧ·Õè 2-1 int a,b,c,d ; unsigned height; long size;

¹Í¡¨Ò¡¹Õµé ÇÑ á»Ã·Õ¡è Òí ˹´äÁ ¨Òí à» ¹µ ͧÍÂÙã ¹ºÃ÷Ѵà´ÕÂǡѹ¡çä´ àª ¹ unsigned short tmp, caracter, loop, loop2;

«Ö§è ÊÒÁÒö·íÒ§Ò¹ä´ àª ¹à´ÕÂǡѺ unsigned short

tmp, caracter, loop, loop2;

2.4.2 µÑÇá»ÃẺµÑÇàÅ¢·È¹ÔÂÁ (Floating point) ÊíÒËÃѺâ»Ãá¡ÃÁ mikroC äÁ ÇÒ ¨Ðà» ¹µÑÇá»ÃẺ Float , double ËÃ×͵ÑÇá»ÃẺ long double ¨ÐÁÕ¨Òí ¹Ç¹äºµ ෠ҡѹ¤×Í 4 亵 áÅÐÁÕ¢¹Ò´ª ǧµÑÇàÅ¢µÑ§ é áµ s1.17549435082 x 10-38 ¶Ö§ s6.80564774407 x 1038 ´Ñ§¹Ñ¹é µÑÇá»ÃẺµÑÇàÅ¢·È¹ÔÂÁÍÒ¨¨Ð㪠ªÍ×è Float à¾Õ§Í ҧà´ÕÂÇ¡çä´


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 41

2.5 ª¹Ô´¢Í§µÑÇá»Ã 2.5.1 µÑÇá»ÃáººÇ Ò§ (Void) µÑÇá»ÃẺ Void à» ¹µÑÇá»ÃẺ¾ÔàÈÉ â´Â㪠ÃкØ˹ Ò¿ §¡ ª¹Ñè àÁ×Íè äÁ µÍ §¡ÒÃãË Á¡Õ Òä׹¤ Ò µÑÇÍ ҧ·Õè 2-2 void print_temp(char temp) { Lcd_Out_Cp(“Temperature:”); Lcd_Out_Cp(temp); Lcd_Chr_Cp(223);

// degree character

Lcd_Chr_Cp(‘C’); }

¨Ò¡µÑÇÍ ҧ໠¹¿ §¡ ª¹Ñè áÊ´§¤ Ò¢ ÍÁÙÅ·Õâè Á´ÙÅ LCD «Ö§è ¿ §¡ ª¹Ñè ¹Õäé Á Á¡Õ Òä׹¤ Ò¡ÅѺ

2.5.2 µÑÇá»ÃẺÍÐààµÑÇá»ÃÍÐàà¤Í× ¡ÅØÁ ¢Í§µÑÇá»Ã·ÕÁè ªÕ ¹Ô´¢ ÍÁÙÅà» ¹áººà´ÕÂǡѹ áÅШѴÇÒ§ã¹áÍ´à´ÃÊ·Õàè ÃÕ§ µ ͡ѹ â´ÂÁÕû٠Ẻ¡ÒûÃСÒȵÑÇá»Ã´Ñ§¹Õé type name[size] ;

â´Â·Õè

type name size

¡ÒÃà¡çº¢ ÍÁÙÅ

¤×Í ª¹Ô´¢ ÍÁÙŢͧµÑÇá»ÃÍÐàà¤×Í ª×Íè ¢Í§µÑÇá»ÃÍÐàà¤×Í ¤ ÒµÑÇàÅ¢·Õãè ª ¡Òí ˹´¨íҹǹÍÐààchar A[7]; A[0] A[1] A[2] A[3] A[4] A[5] A[6]

¡ÒÃà¡çº¢ ÍÁÙÅ

(¡) ÍÐàà1 ÁÔµÔ int A[6][4] ; A[0][2]

A[0][3]

A[1][1]

A[1][2]

A[1][3]

A[2][0]

A[2][1]

A[2][2]

A[2][3]

A[3][0]

A[3][1]

A[3][2]

A[3][3]

A[4][0]

A[3][1]

A[3][2]

A[3][3]

A[5][0]

A[4][1]

A[4][2]

A[4][3]

(¢) ÍÐàà2 ÁÔµÔ

ÃÙ»·Õè 2-1 áÊ´§ÃٻẺ¢Í§ÍÐàà1, 2 áÅÐ 3 ÁÔµÔ

¢ Í ÁÙÅ

A[0][1]

A[1][0]

¡ÒÃà¡çº¢ ÍÁÙÅ

¡ÒÃà¡çº¢ ÍÁÙÅ

A[0][0]

¡Ò Ãà¡ çº

¡ÒÃà¡çº¢ ÍÁÙÅ

(¤) ÍÐàà3 ÁÔµÔ


42 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

àÁ×Íè µ ͧ¡ÒÃàÃÕ¡㪠§Ò¹¨Ðµ ͧÃкصÇÑ ªÕµé Òí á˹ §·ÕÃè ÐºØ â´ÂàÃÔÁè ¹ÑºµíÒá˹ §ááµÑ§é áµ 0 仨¹ ¶Ö§µíÒá˹ § size -1 ´Ñ§¹Ñ¹é ¶ Ò¡íÒ˹´µÑÇá»Ã int digit[5] ;

¤ Ò digit ¨ÐÁÕÊÁÒªÔ¡¤×Í digit[0] ,digit[1] , digit[2], digit[3], digit[4]

µÑÇÍ ҧ·Õè 2-3 char i ; char digit[9];

// reserve 9 byte

void main() { for (i=0;i<9;i++)

// Loop 9 times

{ digit[i] = 0xff ;

// Load Memory with 0xff

} }

¨Ò¡µÑÇÍ ҧâ»Ãá¡ÃÁ â»Ãá¡ÃÁ¨Ð¨Í§¾×¹é ·ÕÊè Òí ËÃѺà¡çº¢ ÍÁÙÅäÇ 9 µíÒá˹ § ÊíÒËÃѺµÑÇá»Ã digit áÅ Ç ãª ¤Òí Êѧè for à¾×Íè ǹÅÙ»¨íҹǹ 9 ¤Ãѧé à¾×Íè » ͹¤ Ò 0xFF ãË ¡ºÑ ÊÁÒªÔ¡¢Í§µÑÇá»ÃÍÐàà·§Ñé ËÁ´

2.5.2.1 ¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ µÑÇá»ÃÍÐààmikroC ¨ÐÂÍÁãË » ͹¤ Ò¢ ÍÁÙÅä´ ·Ñ¹·ÕàÁ×èÍÁÕ¡ÒûÃСÒȤ ÒµÑÇá»Ã¤ÃÑé§áá ¹Í¡¨Ò¡¹Õé¡Òà »ÃСÒȤ ÒµÑÇá»ÃÍÒ¨¨Ð¨Í§¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ´ Ç¡ÒÃÃкآ¹Ò´Å§ä»â´ÂµÃ§ËÃ×ÍàÇ ¹Ç Ò§äÇ ¡äç ´ ´Ñ§µÑÇÍ ҧµ Í仹Õé µÑÇÍ ҧ·Õè 2-4 char digit[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

à» ¹¡ÒÃà¡çº¤ Ò¢ ÍÁÙŢͧ LED µÑÇàÅ¢ 7 Ê Ç¹äÇ ·µÕè ÇÑ á»Ã digit ·ÕÁè ¡Õ ÒÃÊíÒÃͧ¾×¹é ·Õäè Ç 10 áÍ´à´ÃÊ char digit[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

à» ¹¡ÒûÃСÒȵÑÇá»Ãà¾×Íè à¡çº¤ Ò¢ ÍÁÙŢͧ LED µÑÇàÅ¢ 7 Ê Ç¹äÇ ·µÕè ÇÑ á»Ã digit ઠ¹¡Ñ¹ áµ Ç¸Ô ¹Õ äÕé Á ÁÕ ¡ÒÃÃкآ¹Ò´¢Í§¾×¹é ·Õè ÊíÒËÃѺ¼Å¡Ò÷íÒ§Ò¹¹Ñ¹é àËÁ×͹¡Ñ¹·Ø¡»ÃСÒÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 43

2.5.3 µÑÇá»ÃÍÐààẺËÅÒÂÁÔµÔ ã¹ºÒ§¤ÃÑ§é ¡ÒÃà¡çº¢ ÍÁÙÅ ¢ ÍÁÙÅÍÒ¨¨ÐÍÂÙã ¹ÃÙ»¢Í§µÒÃÒ§ ¡ÒÃÇÒ§¢ ÍÁÙÅã¹ÍÐààÁµÔ àÔ ´ÕÂÇ¡Òà ¨Ñ´ÇÒ§áÅÐࢠҶ֧¢ ÍÁÙÅÍÒ¨¨Ð·íÒä´ ÂÒ¡ ¡Òèͧ¾×é¹·ÕèÍÐàà¨Ö§ÊÒÁÒö¨Í§¾×é¹·Õèà» ¹áººÊͧÁÔµÔä´ ËÃ×Í 3 ÁÔµäÔ ´ ´Ñ§áÊ´§ã¹ÃÙ»·Õè 2-1 µÑÇÍ ҧ·Õè 2-5 char i,j ; char digit[5][15] ; void main() { for (i=0;i<9;i++)

// Loop 9 times

{ for (j=0;j<5;j++) digit[i][j] = 0xff ;

// Load Memory with 0xff

} }

â»Ãá¡ÃÁ¹Õàé » ¹µÑÇÍ ҧâ»Ãá¡ÃÁà¡çº¤ Ò¢ ÍÁÙÅŧ㹵ÑÇá»ÃÍÐààẺ 2 ÁÔµÔ

2.5.4 µÑÇá»Ãª¹Ô´¾Í¹ àµÍà (Pointer Variables) µÑÇá»Ã¾ÍÂàµÍà ·íÒ˹ Ò·Õèà¡çº¤ ÒáÍ´à´ÃʢͧµÑÇá»Ã·ÕèªÕéµíÒá˹ § à¾×èÍࢠҶ֧˹ ǤÇÒÁ¨íÒ ·Ò§Í ÍÁ â´ÂÁÕû٠Ẻ¡ÒûÃСÒȤ ÒµÑÇá»Ã´Ñ§¹Õé Type

â´Â

*name ; Type name

¤×Í ª¹Ô´¢Í§¢ ÍÁÙŢͧµÑÇá»Ã¾Í¹ àµÍà ¤×Í ª×Íè ¢Í§µÑÇá»Ã¾Í¹ àµÍÃ

¹Í¡¨Ò¡¹Õé¡ÒÃÃкØáÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒËÃ×ÍÃÕ¨ÔÊàµÍà ·Õèà» ¹¤ ÒµÑÇá»Ã¹Ñé¹ÊÒÁÒö㪠ÊÑ­Åѡɳ & ¹íÒ˹ ÒµÑÇá»Ãà¾×Íè ÃкØáÍ´à´ÃʢͧµÑÇá»Ã¹Ñ¹é æ ä´ àª ¹ a = &PORTB ;

µÑÇá»Ã a ÁÕ¤Ò à· Ò¡Ñº 0x06 «Ö§è ¡ç¤Í× ¤ ÒáÍ´à´Ãʢͧ PORTB ¹Ñ¹è àͧ


44 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

µÑÇÍ ҧ·Õè 2-6 char *DAT ; void main() { PORTB = 0 ; PORTC = 0 ; DAT = &PORTB ; *DAT = 0x90 ; DAT = DAT++ ; *DAT = 0x80;

//

¡íÒ˹´¤ ÒµÑÇá»Ãà» ¹µÑÇá»ÃẺ¾ÍÂàµÍÃ

¡íÒ˹´¤ ÒÃÕ¨ÊÔ àµÍà PORTB = 0 // ¡íÒ˹´¤ ÒÃÕ¨Ê Ô àµÍà PORTC = 0 // µÑÇá»Ã DAT à¡çº¤ ÒáÍ´à´Ãʢͧ PORTB «Ö§è ෠ҡѺ 0x06 // Ê §¤ Ò¢ ÍÁÙÅä»ÂѧÃÕ¨Ê Ô àµÍà ·¶Õè ¡Ù ªÕ´é Ç ÂµÑÇá»Ã DAT (PORTB = 0x90) // à¾ÔÁ è ¤ ÒµÑǪբé Í ÁÙÅ ·íÒãË ¤Ò ¢Í§µÑÇá»Ã DAT ෠ҡѺ 0x07 // Ê §¤ Ò¢ ÍÁÙÅä»ÂѧÃÕ¨Ê Ô àµÍà ·ªÕè ´Õé Ç ÂµÑÇá»Ã DAT (PORTC = 0x80) //

}

¨Ò¡â»Ãá¡ÃÁµÑÇÍ ҧ·Õè 2-6 ÊÒÁÒö¹íÒÁÒµÃǨÊͺà¾×Íè ´Ù¼Å¡Ò÷íÒ§Ò¹¢Í§µÑÇá»Ã¾Í¹ àµÍà ´ Ç¡ÒëÔÁàÙ ÅàµÍà ËÃ×Í¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹º¹«Í¿µ áÇà mikroC IDE ä´ â´ÂÁÕ¢¹Ñé µÍ¹´Ñ§¹Õé (1) à» ´â»Ãá¡ÃÁ mikroC Êà ҧâ»Ãà¨ç¡µ ªÍ×è Test_Pointer àÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz ¨Ò¡¹Ñ¹é ¤ÅÔ¡»ØÁ à¾×Íè àÅ×Í¡¤ Ҥ͹¿ ¡à» ¹¤ Ò Áҵðҹ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 45

(2) ¾ÔÁ¾ «Íà Êâ»Ãá¡ÃÁµÒÁµÑÇÍ ҧ·Õè 2-6 ¨Ò¡¹Ñ¹é ·íÒ¡ÒäÍÁä¾Å ¨¹ä´ ä¿Å .hex

(3) à» ´Ë¹ Òµ Ò§ Debugger â´Â¤ÅÔ¡·Õ»è ÁØ ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ Debugger ¢Ö¹é ÁÒ ã¹ª ͧ Select Variable from list ãË àÅ×Í¡ª×Íè µÑÇá»Ã DAT, PORTB áÅÐ PORTC à¾ÔÁè ࢠҷÕËè ¹ Òµ Ò§ Debugger

(4) à»ÅÕÂè ¹ÃٻẺ¡ÒÃáÊ´§¼Å (Value) ãË à» ¹µÑÇàÅ¢°Ò¹ÊԺˡ â´Â´ÑºàºÔŤÅÔ¡·Õªè Í×è µÑÇá»Ã (5) ·ÕËè ¹ Òµ Ò§ Debugger ¤ÅÔ¡·Õ»è ÁØ àÁ×Íè ¶Ö§ºÃ÷Ѵ

à¾×Íè Ãѹ¤íÒÊÑ§è ·ÕÅФíÒÊѧè áÅ Ç´Ù¤Ò µÑÇá»Ã·Õàè »ÅÕÂè ¹á»Å§

DAT = &PORTB ; µÑÇá»Ã

àÁ×Íè ¶Ö§ºÃ÷Ѵ *DAT

DAT ÁÕ¤Ò à· Ò¡Ñºà· Òã´

= 0x90 ; Êѧࡵ¤ Ò·Õè

PORTB à»ÅÕÂè ¹á»Å§ä»Í ҧäÃ

áÅÐàÁ×Íè ¶Ö§ºÃ÷Ѵ *DAT = 0x80; ÍÕ¡¤ÃÑ§é ¤ Ò·Õàè »ÅÕÂè ¹á»Å§·íÒäÁ¶Ö§à¡Ô´¢Ö¹é ·Õè PORTC


46 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

2.6 ÃкºµÑÇàÅ¢·Õãè ª ã¹ mikroC ÃкºàÅ¢°Ò¹·Õè㪠¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÁÕÍÂÙ 4 ª¹Ô´ ä´ á¡ µÑÇàÅ¢°Ò¹Êͧ, °Ò¹á»´, °Ò¹ÊÔº áÅаҹÊԺˡ «Ö§è 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ mikroC ¨ÐÁÕ¡ÒÃẠ§á¡ÃٻẺàÅ¢ °Ò¹â´Â㪠à¤Ã×Íè §ËÁÒ¹íÒ˹ ÒµÑÇàÅ¢ ´Ñ§ÁÕÃÒÂÅÐàÍÕ´µ Í仹Õé 1. µÑÇàÅ¢°Ò¹Êͧ µÑÇàÅ¢·Õ¡è Òí ˹´ãË à» ¹àÅ¢°Ò¹Êͧ¨Ð¢Ö¹é µ ¹´ Ç 0b ËÃ×Í 0B ઠ¹ 0b00010001 â´ÂµÑÇàÅ¢¨Ð¡íÒ˹´ª¹Ô´à» ¹áºº short 2. µÑÇàÅ¢°Ò¹á»´ µÑÇàÅ¢·Õ¡è Òí ˹´à» ¹àÅ¢°Ò¹á»´ ¨Ð¢Ö¹é µ ¹´ Ç o (µÑÇÍÑ¡ÉÃâÍ) ઠ¹ o777 â´ÂµÑÇàÅ¢¨Ð¡íÒ˹´ª¹Ô´à» ¹áºº int 3. µÑÇàÅ¢°Ò¹ÊÔº à¹×èͧ¨Ò¡àÅ¢°Ò¹ÊԺ໠¹¤ ÒµÑÇàÅ¢Áҵðҹ ¨Ö§äÁ ¨Òí à» ¹µ ͧÁÕ¡Òà ¢Ö¹é µé¹´éǵÑÇÍÑ¡ÉÃËÃ×ÍÊÑ­Åѡɳìã´æ â´ÂÊÒÁÒö¡Ó˹´¤èҢͧàÅ¢°Ò¹ÊÔºä´éµ§éÑ áµè -2,147,483,648 ¶Ö§ 4,294,967,295 ¶ Ò¤ Ò·Õ¡è Òí ˹´à¡Ô¹¡Ç Ò¹Õ¨é Ðᨠ§¢ ͼԴ¾ÅÒ´ Out of range 4. µÑÇàÅ¢°Ò¹ÊԺˡ µÑÇàÅ¢°Ò¹ÊԺˡ¨Ð¢Ö¹é µ ¹´ Ç 0x ËÃ×Í 0X ઠ¹ 0xF8, 0xCF30 â´ÂµÑÇàÅ¢°Ò¹ÊԺˡ¨Ð¡íÒ˹´ª¹Ô´µÑÇàŢ໠¹áºº unsigned int

2.7 ¡ÒÃࢠҶ֧¢ ÍÁÙÅÃдѺºÔµ mikroC ¤ÍÁä¾àÅÍà ÂÍÁãË ¼ãÙ ª §Ò¹ÊÒÁÒöࢠҶ֧ÃÕ¨ÊÔ àµÍà µÒ §æ ã¹ÃдѺºÔµä´ â´Â㪠. (¨Ø´) ¤Ñ¹è ÃÐËÇ Ò§¢ ÍÁÙÅáŠǵÒÁ´ Ç Fn «Ö§è n ËÁÒ¶֧ºÔµ·Õµè Í §¡ÒÃࢠҶ֧ ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 7 ¶ Òµ ͧ¡ÒáíÒ˹´ãË ºÔµ 0 ¢Í§ÃÕ¨ÊÔ àµÍà PORTC ÁÕ¤Ò à· Ò¡Ñº 1 à¢ÕÂ¹ä´ à» ¹ PORTC.F0 = 1 ;

¡ÒõÃǨÊͺ¤ Ò ¨Ò¡ºÔµ 1 ¢Í§ÃÕ¨ÊÔ àµÍà PORTC Ç ÒÁÕ¤Ò à· Ò¡Ñº 1 ËÃ×ÍäÁ ¶ Ò㪠ãË PORTB ºÔµ 0 ෠ҡѺ 0 à¢ÕÂ¹ä´ à» ¹ if (PORTC.F1 == 1)

PORTB.F0 = 0 ;

¹Í¡¨Ò¡¹ÕÊé Òí ËÃѺÃÕ¨ÊÔ àµÍà ÊÒí ¤Ñ­¼Ùã ª §Ò¹ÊÒÁÒöÃкتÍ×è ¢Í§ºÔµ¹Ñ¹é æ ä´ àÅ (´ÙÃÒÂÅÐàÍÕ´ à·Õºà¤ÕÂ§ä´ ¨Ò¡´Òµ ÒªÕµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àºÍà ¹¹Ñé æ ) ઠ¹ INTCON.TMR0IF = 0; à» ¹¡ÒÃà¤ÅÕÂà á¿Å¡ÍÔ¹àµÍà û Ñ µ ¨Ò¡ä·àÁÍà 0 ADCON0.Go=1; à» ¹¡ÒÃàÃÔÁ è µ ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 47

2.8 ¤íÒÊѧè à¡ÕÂè ǡѺ¡ÒèѴ¡Òâ ÍÁÙÅẺºÔµ ÊíÒËÃѺ¡ÒÃ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Õèµ Í§ÁÕ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙÅẺºÔµà¢ ÒÁÒ»ÃÐÁÇżŠ¨Ðµ ͧÁÕ¤Òí Êѧè à¾×Íè ¨Ð¨Ñ´¡Òâ ÍÁÙÅàËŠҹѹé ãË ÍÂÙã ¹ÃٻẺ·Õàè ËÁÒÐÊÁ¡ ͹¡ÒûÃÐÁÇżŠઠ¹ ¡ÒáíҨѴ ºÔµ·ÕÁè ÅÕ Í¨Ô¡ 1 ã¹µÑÇá»Ã·Õµè Í §¡Òà ¡ÒÃàÅ×Íè ¹ºÔµ¢ ÍÁÙÅ ¡ÒáÅѺʶҹÐÅͨԡ¢Í§ºÔµ à» ¹µ ¹

2.8.1 ¤íÒÊѧè á͹´ : & (AND) 㪠à¾×Íè à»ÃÕºà·Õº¢ ÍÁÙÅ㹺Ե·Õµè Í §¡Òà ãË ¼Åà» ¹ 1 ¶ ÒºÔµ·Õàè »ÃÕºà·Õº·Ñ§é ¤Ùà » ¹ 1 ¹Í¡ ¹Ñ¹é ãË ¼ÅÅѾ¸ à» ¹ 0 ÁÕµÒÃÒ§¤ÇÒÁ¨ÃÔ§áÊ´§¡Ò÷íÒ§Ò¹´Ñ§¹Õé *

)

:

»ÃÐ⪹ ¢Í§¡Òà & ¤×Í ãª »ÃѺ¤ ÒàÅ¢°Ò¹Êͧ㹺Ե·Õµè Í §¡ÒÃãË à» ¹ 0 µÑÇÍ ҧ·Õè 2-7 int value; void main() { value = 0xAA55 & 0x00FF ; }

// value = 0x0055

¨Ò¡â»Ãá¡ÃÁ ¡Òà AND ¤ Ò´ Ç 0x00FF à» ¹¡Ò÷íÒãË 8 ºÔµº¹¢Í§ 0xAA55 ¡ÅÒÂà» ¹ 0 ãË àËÅ×Í ¤ Ò¢ ÍÁÙÅ੾ÒÐ 8 ºÔµÅ Ò§à· Ò¹Ñ¹é ¤×Í 0x0055 à¾×Íè ¹íÒä»ãª »ÃÐ⪹ µÍ ä»


48 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

2.8.2 ¤íÒÊѧè | (OR) 㪠à¾×Íè à»ÃÕºà·Õº¢ ÍÁÙÅ㹺Ե·Õµè Í §¡Òà â´ÂãË ¼ÅÅѾ¸ à» ¹ 0 àÁ×Íè ºÔµ·Õ¹è Òí ÁÒà»ÃÕºà·Õº ·Ñ§é ¤Ùà » ¹ 0 ¹Í¡¹Ñ¹é ãË ¼ÅÅѾ¸ à» ¹ 1 ÁÕµÒÃÒ§¤ÇÒÁ¨ÃÔ§áÊ´§¡Ò÷íÒ§Ò¹´Ñ§¹Õé *

)

:

»ÃÐ⪹ ¢Í§¡Òà | ¤×Í »ÃѺ¤ Ò㹺Ե·Õµè Í §¡ÒÃãË à» ¹ 1 µÑÇÍ ҧ·Õè 2-8 char value ; void main() { value = 0b00110000 | 0b11000000 ; // value = 0b11110000 }

¨Ò¡â»Ãá¡ÃÁ ¡Òà OR ¤ Òà¾×Íè ·íÒãË ÊͧºÔµº¹¢Í§¤ Ò¢ ÍÁÙÅ 0b00110000 ÁÕÅͨԡ໠¹ 1 äÁ ÇÒ ¤ Òà´ÔÁ ¢Í§ 2 ºÔµº¹¹Ñ¹é ¨Ðà» ¹ 1 ËÃ×Í 0 ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 0b11110000

2.8.3 ¤íÒÊѧè ^ (XOR) 㪠à¾×Íè à»ÃÕºà·Õº¢ ÍÁÙÅ㹺Ե·Õµè Í §¡Òà â´ÂãË ¼ÅÅѾ¸ à» ¹ 0 àÁ×Íè ºÔµ·Õãè ª à»ÃÕºà·Õº໠¹ 0 ·Ñ§é ¤ÙË Ã×Íà» ¹ 1 ·Ñ§é ¤Ù ¹Í¡¨Ò¡¹Õ¨é ÐãË ¼ÅÅѾ¸ à» ¹ 1 ÁÕµÒÃÒ§¤ÇÒÁ¨ÃÔ§áÊ´§¡Ò÷íÒ§Ò¹´Ñ§¹Õé *

)

:

»ÃÐ⪹ ¢Í§¡Òà ^¤×Í ãª ¡ÅѺ¢ ÍÁÙÅàÅ¢°Ò¹Êͧ㹺Ե·Õµè Í §¡ÒÃà» ¹µÃ§¢ ÒÁ àÁ×Íè ^ ´ Ç 1


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 49

µÑÇÍ ҧ·Õè 2-9 void main(){ TRISB = 0x00 ; // while (1){ // PORTB = (PORTB ^ 0xFF) ; // delay_ms(500); // } }

Set PORTB ==> OUTPUT Loop Toggle PORTB Call Delay 500 ms

¨Ò¡â»Ãá¡ÃÁ ¶ Òµ Í¢Ò PORTB ࢠҡѺ LED ¨Ð·íÒãË LED µÔ´¡Ð¾ÃÔº´ ǤÇÒÁ¶Õè 1Hz à¹×Íè §¨Ò¡¡Òà XOR ¤ Òã´æ ´ Ç 1 ·Ñ§é 8 ºÔµ à¢Õ¹ÍÂÙã ¹ÃÙ»µÑÇàÅ¢°Ò¹ÊԺˡ¤×Í 0xFF ¤ Ò¼ÅÅѾ¸ ·äÕè ´ ¨Ðà» ¹µÃ§¢ ÒÁ

2.8.4 ¤íÒÊѧè ~ (NOT) 㪠à¾×èÍ¡ÅѺʶҹÐÅͨԡ¢Í§ºÔµ·Õèµ Í§¡Òà ¶ ÒºÔµà´ÔÁÁÕÅͨԡ໠¹ 1 ¨Ð¡ÅÒÂà» ¹ 0 áÅÐ ¶ ÒÁÕÅͨԡ໠¹ 0 ¨Ð¡ÅÒÂà» ¹ 1 µÑÇÍ ҧ·Õè 2-10 void main() { PORTB = 0x00 ; TRISB = 0x00 ; while (1) { PORTB = (~PORTB) ; delay_ms(500); } }

// Clear PORTB // Set PORTB ==> OUTPUT // Loop // Toggle PORTB // Call Delay 500 ms

â»Ãá¡ÃÁ¹Õ¨é зíÒ§Ò¹ä´ àª ¹à´ÕÂǡѺ¤íÒÊѧè XOR â´Â¨ÐÍ Ò¹¤ Ò¨Ò¡ PORTB ÍÍ¡ÁÒáÅ Ç¡ÅѺÅͨԡãË Ê¶Ò¹Ðà» ¹µÃ§¡Ñ¹¢ ÒÁ áÅ ÇÊ §¡ÅѺä»áÊ´§¼Å·Õè PORTB ÍÕ¡¤Ãѧé


50 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

2.8.5 ¤íÒÊѧè àÅ×Íè ¹¢ ÍÁÙÅ ÁÕ´Ç Â¡Ñ¹ 2 ¤íÒÊÑ§è ¤×Í << à» ¹¤íÒÊѧè à¾×Íè àÅ×Íè ¹ºÔµ¢ ÍÁÙÅä»·Ò§« Ò áÅ Çá·¹ºÔµ´ Ò¹¢ÇÒÊØ´´ ÇÂÅͨԡ 0 >> à» ¹¤íÒÊѧè à¾×Íè àÅ×Íè ¹ºÔµ¢ ÍÁÙÅä»·Ò§¢ÇÒ áÅ Çá·¹ºÔµ´ Ò¹« ÒÂÊØ´´ ÇÂÅͨԡ 0 µÑÇÍ ҧ·Õè 2-11 char i ;

// variable set

void main() { PORTB = 0x00 ;

// Clear PORTB

TRISB = 0x00 ;

// Set PORTB ==> OUTPUT

while (1)

// Loop

{ PORTB = 0x01 ;

// Start PORTB with 00000001

for (i = 0;i<8;i++ )

// 8 Time loop

{ delay_ms(500);

// 500 ms delay

PORTB = PORTB<<1 ; // Shift left 1 bit } PORTB = 0x80 ;

// Start PORTB with 10000000

for (i=0;i<8;i++)

// 8 Time loop

{ delay_ms(500);

// 500 ms delay

PORTB = PORTB>>1 ; // Shift right 1 bit } } }

â»Ãá¡ÃÁ¹Õàé » ¹¡ÒÃÊà ҧä¿ÇÔ§è 仡ÅѺ·Õè PORTB â´ÂÍÒÈÑ¡ÒÃàÅ×Íè ¹¤Ãѧé ÅÐ 1 ºÔµ ÊÒÁÒöµÃǨÊͺ ¡Ò÷íÒ§Ò¹ä´ â´Â㪠¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 51

2.9 ¤íÒÊÑ§è ¡ÒáÃзíÒ·Ò§Åͨԡ ¤íÒÊÑ觷Õè㪠¡ÃзíÒ·Ò§Åͨԡ¹Ñ鹨Ð㪠áÊ´§¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒÍÍ¡ÁÒÇ Òà» ¹¨ÃÔ§ËÃ×Íà·ç¨ ËÃ×Íà» ¹ 0 ËÃ×ÍäÁ 㪠0 ෠ҹѹé â´ÂäÁ ʹ㨤 Ңͧ¼ÅÅѾ¸ ·äÕè ´ ¨Ò¡¡ÒáÃзíÒ·Ò§Åͨԡ¹Ñ¹é æ äÁ àËÁ×͹¡Ñº¡ÒèѴ¡Òâ ÍÁÙÅÃдѺºÔµ â´Â¤íÒÊÑ§è ·Õãè ª ¡ºÑ ¡ÒáÃзíÒ·Ò§Åͨԡ»ÃСͺ仴 ǤíÒÊÑ§è ´Ñ§¹Õé && ( Logical AND) ãË ¼ÅÅѾ¸ à» ¹¨ÃÔ§ àÁ×Íè à§×Íè ¹ä¢·Õ¹è Òí ÁÒµÃǨÊͺ໠¹¨ÃÔ§·Ñ§é ¤Ù || (Logical OR)

ãË ¼ÅÅѾ¸ à» ¹¨ÃÔ§àÁ×èÍà§×è͹ä¢ã´à§×è͹ä¢Ë¹Öè§à» ¹¨ÃÔ§

! (Logical Not)

ãË ¼ÅÅѾ¸ à» ¹¨ÃÔ§àÁ×Íè à§×Íè ¹ä¢à» ¹à·ç¨ áÅÐ ãË ¼ÅÅѾ¸ à» ¹à·ç¨àÁ×èÍà§×è͹ä¢à» ¹¨ÃÔ§

==

෠ҡѺ

!=

äÁ ෠ҡѺ

>

ÁÒ¡¡Ç Ò

<

¹ ÍÂ¡Ç Ò

>=

ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ

<=

¹ ÍÂ¡Ç ÒËÃ×Í෠ҡѺ

µÑÇÍ ҧ·Õè 2-12 char sensor1 ,sensor2 ; // variable set void main() { TRISB =0x00 ; if ((sensor1>300)&&(sensor2>300)) { PORTB.F1 = 0 ; // RB1 = 0 PORTB.F0 = 1 ; // RB0 = 1 } }

¨Ò¡â»Ãá¡ÃÁ µÑÇá»Ã sensor1 áÅÐ sensor2 ¨Ðµ ͧÁÕ¤Ò ÁÒ¡¡Ç Ò 300 ¨Ö§¨Ð·íÒãË à§×Íè ¹ä¢ if à» ¹¨ÃÔ§


52 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

µÑÇÍ ҧ·Õè 2-13 void main() { TRISB =0b11111100 ; // RB0,RB1 = Output while(1) { if ((PORTB.F2==0)||(PORTB.F3==0)) PORTB.F0 = 1 ; // RB0 = 1 else PORTB.F0 = 0 ; // RB0 = 0 } }

¨Ò¡â»Ãá¡ÃÁ ¶ Ò RB2 ËÃ×Í RB3 ºÔµã´ºÔµË¹Ö§è ËÃ×Í·Ñ§é ¤ÙÁ ÅÕ Í¨Ô¡à» ¹ 0 ¢Ò RB0 ¨ÐÁÕÅͨԡ໠¹ 1 áµ ¶Ò RB2 ËÃ×Í RB3 à» ¹ 1 ·Ñ§é ¤Ù RB0 ¨ÐÁÕÅͨԡ໠¹ 0

2.10 ¤íÒÊÑ§è ¤íҹdz·Ò§¤³ÔµÈÒʵà mikroC àµÃÕÂÁ¤íÒÊÑ觷Õè㪠㹡Òäíҹdz·Ò§¤³ÔµÈÒʵà àÍÒäÇ Í ҧ¤Ãº¶ ǹ ·Ñé§ÃٻẺ¢Í§ ¤íÒÊÑ§è »¡µÔÊÒí ËÃѺ¡Òúǡ ź ¤Ù³ ËÒà áÅп §¡ ª¹Ñè ¾ÔàÈÉ·Ò§µÃÕ⡳ÁÔµÔ ´Ñ§¹Õé +

¤íÒÊÑ§è ºÇ¡ ( Addition)

-

¤íÒÊѧè ź ( Subtraction)

*

¤íÒÊÑ§è ¤Ù³ ( Multiplication)

/

¤íÒÊѧè ËÒà (Division)

%

¤íÒÊѧè ËÒÃẺàÍÒàÈÉ (äÁ ÊÒÁÒö㪠¡ºÑ µÑÇàÅ¢·Õàè » ¹·È¹ÔÂÁä´ )

µÑÇÍ ҧ·Õè 2-14 value = 12 / 5 ;

//

¼ÅÅѾ¸ ෠ҡѺ 2 (value à» ¹µÑÇá»ÃẺ char)

value = 6 * 3 / 4 ;

// ¼ÅÅѾ¸ ෠ҡѺ 4 â´Â¨Ð¹íÒ 6 ¤Ù³¡Ñº 3 ¡ ͹ áÅ ÇËÒô Ç 4

value = 12.5 / 2.3;

//

value = 12.5 / 2.3;

// ¡Ã³Õ·Õè value à» ¹µÑÇá»ÃẺ float ¼ÅÅѾ¸ Á¤ Õ Ò à· Ò¡Ñº 5.43478

value = 12 % 4 ;

//

¼ÅÅѾ¸ ·äÕè ´ ¤Í× 0 à¹×Íè §¨Ò¡ 12 ËÒô Ç 4 áÅ ÇäÁ àËÅ×ÍàÈÉ

value = 14 % 5;

//

¼ÅÅѾ¸ ·äÕè ´ ¤Í× 4

value = -14 % 5;

//

¼ÅÅѾ¸ ·äÕè ´ ¤Í× -4 à¹×Íè §¨Ò¡¤ Òà¤Ã×Íè §ËÁÒ¨ФԴ¨Ò¡µÑǵѧé àÊÁÍ

¡Ã³Õ·Õè value à» ¹µÑÇá»ÃẺ char ¼ÅÅѾ¸ Á¤Õ Ò à· Ò¡Ñº 5


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

2.11 ¤íÒÊѧè à¾×Íè 㪠à¾ÔÁè ËÃ×ÍÅ´¤ Ò ++

㪠ÊÒí ËÃѺ¡ÒÃà¾ÔÁè ¤ Ò¢Ö¹é 1 ¤ Ò (increment)

--

㪠ÊÒí ËÃѺ¡ÒÃÅ´¤ Òŧ 1 ¤ Ò (decrement)

µÑÇÍ ҧ·Õè 2-15 int j,k ; void main() { k = 4 ; while(1) { j = k++ ; } }

¨Ò¡â»Ãá¡ÃÁµÑÇÍ ҧ ËÅѧ¨Ò¡·íÒ¤íÒÊѧè j = k++ ¤ Ò k ÁÕ¤Ò à· Ò¡Ñº 5 áµ ¤Ò j ÁÕ¤Ò à· Ò¡Ñº 4 à¹×Íè §¨Ò¡â»Ãá¡ÃÁ·íÒ§Ò¹ â´ÂãË j = k ¡ ͹ ¨Ò¡¹Ñ¹é ¨Ö§¡ÃзíÒ¤íÒÊѧè k++

µÑÇÍ ҧ·Õè 2-16 int j,k ; void main() { k = 4 ; while(1){ j = ++k ; } }

¨Ò¡â»Ãá¡ÃÁµÑÇÍ ҧ ËÅѧ¨Ò¡·íÒ¤íÒÊѧè j = ++k ¤ Ò k ÁÕ¤Ò à· Ò¡Ñº 5 áÅФ Ò j ¡ç෠ҡѺ 5 ´ Ç à¹×Íè §¨Ò¡â»Ãá¡ÃÁ¨Ðà¾ÔÁè ¤ Ò k ¡ ͹·Õ¨è йíÒä»à· ҡѺ¤ Ңͧ j

INNOVATIVE EXPERIMENT

l 53


54 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 55

º··Õè 3

¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×͵Դµ ;Íà µ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹Í¹Ø¡ÃÁ PIC16F8xx ÁÕ¾Íà µãË ãª §Ò¹µÑ§é áµ 3 ¶Ö§ 5 ¾Íà µ ¨íҹǹ 20 ¶Ö§ 35 ºÔµ ¢Ö¹é ÍÂÙ¡ ºÑ àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´ ǤÇÒÁÊÒÁÒö¢Í§¾Íà µã¹ PIC16F8xx ·ÕÊè ÒÁÒö ·íÒ§Ò¹ä´ ËÅÒÂÍ ҧ ¨Ö§¨íÒà» ¹Í ҧÂÔ§è ·Õ¼è ãÙ ª §Ò¹µ ͧ·íÒ¤ÇÒÁࢠÒ㨶֧â¤Ã§Êà ҧ·Ò§ÎÒà ´áÇà áÅСÒà ¡íÒ˹´ËÃ×ÍàÅ×Í¡¿ §¡ ª¹Ñè ¡Ò÷íÒ§Ò¹ãË á¡ ¢Ò¾Íà µáµ ÅТҴ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ·Ñ§é ¹Õàé ¾×Íè ãË ÊÒÁÒö㪠§Ò¹¾Íà µ·Ñ§é ËÁ´¢Í§ PIC16F87x ä´ Í ҧÁÕ»ÃÐÊÔ·¸ÔÀÒ¾ÊÙ§ÊØ´

3.1 ¤ÇÒÁÊÒÁÒö㹡Òè Ò¡ÃÐáʢͧ¢Ò¾Íà µ ¤ÇÒÁÊÒÁÒö㹡Òè Ò¡ÃÐáÊàÍÒµ ¾µØ ¢Í§¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F8xx ·Õäè ¿ àÅÕÂé § +5V ¤×Í 25mA µ Í¢Ò·Ñ§é ¡ÃÐáÊ«Ô§¡ áÅСÃÐáÊ«ÍÃ Ê ã¹¢³Ð·Õ¡è ÃÐáÊàÍÒµ ¾µØ ÃÇÁ·Ñ§é ËÁ´¶Ù¡¨íÒ¡Ñ´ äÇ ·Õè 200mA ´Ñ§¹Ñ¹é 㹡ÒÃÍ͡Ẻà¾×Íè ¢ÑºâËÅ´·Ò§àÍÒµ ¾µØ ¢Í§¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC µ ͧÃÐÇѧàÃ×Íè §¡ÃÐáÊàÍÒµ ¾µØ ÃÇÁ·Õäè Áâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÊÒÁÒö¢Ñºä´ ´Ç  ã¹ÃÙ»·Õè 3-1 áÊ´§¡Òà ¢ÑºâËÅ´·Ñé§áºº¡ÃÐáÊ«Ô§¡ áÅЫÍÃ Ê +5V

PIC16F8xx

Isink

PB1

R1 LED1

PIC16F8xx PB1

R1

Isource

(¡) ¡ÒâѺâËÅ´·Ò§¾Íà µàÍÒµ ¾Øµ Ẻ¡ÃÐáÊ«Ô§¡

(¢) ¡ÒâѺâËÅ´·Ò§¾Íà µàÍÒµ ¾Øµ Ẻ¡ÃÐáÊ«Íà Ê

ÃÙ»·Õè 3-1 ¡ÒâѺâËÅ´¢Í§¾Íà µàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC

LED1


56 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

PORTC

4+ 4+! 4,

TRISC

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

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

ÃÙ»·Õè 3-2 áÊ´§¡ÒáíÒ˹´·ÔÈ·Ò§¢Í§¢Ò¾Íà µ´ ÇÂÃÕ¨ÊÔ àµÍà TRISC

3.2 ÃÕ¨ÊÔ àµÍà TRIS ¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÊÒÁÒö¡íÒ˹´ãË à» ¹¢ÒÍÔ¹¾ØµËÃ×Í¢ÒàÍÒµ ¾µØ ¡çä´ ¡ÒáíÒ˹´¢ÒãË à» ¹ÍÔ¹¾Øµ·íÒä´ â´Â¡Òû ͹Åͨԡ 1 ãË ¡ÑºÃÕ¨ÔÊàµÍà TRIS 㹺Ե·Õèµ Í§¡Òà ¡ÒáíÒ˹´¢ÒãË à» ¹àÍÒµ ¾Øµ·íÒä´ â´Â¡Òû ͹Åͨԡ 0 ãË ¡ÑºÃÕ¨ÔÊàµÍà TRIS 㹺Ե·Õèµ Í§¡Òà ´Ñ§áÊ´§ã¹ÃÙ»·Õè 3-2

3.3 ¢Ò¾Íà µÍйÒÅÍ¡áÅдԨµÔ ÍÅ ÊíÒËÃѺ¾Íà µ A áÅÐ ¾Íà µ E ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F874 ËÃ×Í 16F877(A) àÁ×Íè ¨ ÒÂä¿ãË ¤ÃÑé§áá¨Ð·íÒ˹ Ò·Õèà» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ ¡ÒùíÒ¢ÒàËÅ Ò¹Õé·íÒ˹ Ò·Õèà» ¹ÍÔ¹¾Øµ´Ô¨ÔµÍÅ ËÃ×ÍàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ ¨Ðµ ͧÁÕ¡ÒáíÒ˹´¤ Ò·ÕÃè ¨Õ ÊÔ àµÍà ADCON1 àÊÕ¡ ͹ ã¹ÃÙ»·Õè 3-3 ¨ÐáÊ´§ºÔµ µ Ò§æ ã¹ÃÕ¨ÊÔ àµÍà ADCON1 ¨ÐáÊ´§¤ ÒàÁ×Íè µ ͧ¡ÒáíÒ˹´ãË ¢Ò¾Íà µ·íÒ˹ Ò·Õàè » ¹¢Ò´Ô¨µÔ ÍÅËÃ×Í ÍйÒÅÍ¡ ÊíÒËÃѺ¡ÒáíÒ˹´ãË ¢Ò¾Íà µ A áÅоÍà µ E ·Ñ§é ËÁ´à» ¹¢Ò´Ô¨µÔ ÍÅ ¨Ð» ͹¤ Ò 0x07 ËÃ×Í 0x06 ãË ¡ºÑ ÃÕ¨ÊÔ àµÍà ADCON1 ÊíÒËÃѺ¾Íà µ A ¾Íà µ E áÅÐ ¾Íà µ B ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 àÁ×Íè ¨ ÒÂä¿ ¤Ãѧé áá ¢Ò·Õàè » ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡¨Ð¤§Ê¶Ò¹Ðà» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ÍÂÙ ¡ÒÃà»ÅÕÂè ¹á»Å§Ê¶Ò¹Ð ¢Í§¢ÒãË à» ¹ÍйÒÅÍ¡ËÃ×Í´Ô¨µÔ ÍÅ ¨Ðµ ͧ¡ÃзíÒ¼ Ò¹ÃÕ¨ÊÔ àµÍà ANSEL áÅÐ ANSELH ÃÙ»·Õè 3-4 áÊ´§µíÒá˹ §ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà ANSEL à¾×Íè 㪠à»ÅÕÂè ¹á»Å§¢Ò¾Íà µ A áÅÐ ¾Íà µ E Ê Ç¹ÃÙ»·Õè 3-5 áÊ´§µíÒá˹ §ºÔµã¹ÃÕ¨ÊÔ àµÍà ANSELH à¾×Íè 㪠¡Òí ˹´¤ Ò´Ô¨µÔ ÍÅËÃ×ÍÍйÒÅÍ¡ãË ¡ºÑ ¾Íà µ B


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 7

ADCON1

ADFM

ºÔµ 6

ADCS2*

ºÔµ 5

ºÔµ 4

-

-

R/W -0

ºÔµ 3

ºÔµ 2

ºÔµ 1

l 57

ºÔµ 0

PCFG3

PCFG2

PCFG1

PCFG0

R/W -0

R/W -0

R/W -0

R/W -0

ºÔµ 7 - ADFM (A/D Result Format Select bit - ºÔµ 7) : ºÔµàÅ×Í¡ÃٻẺ¼ÅÅѾ¸ ¢Í§¡ÒÃá»Å§ÊÑ­­Ò³ 0 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´« Ò (left justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ 7

0 7 6 5

0

b b b b b b b b b b 0 0 0 0 0 0

ÃÕ¨ÊÔ àµÍà ADRESH

ÃÕ¨ÊÔ àµÍà ADRESL

1 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´¢ÇÒ (right justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ 7

2 1 0 7

0

> > > > > > > > > >

ÃÕ¨ÊÔ àµÍà ADRESH

ÃÕ¨ÊÔ àµÍà ADRESL

ºÔµ 6 - ADCS2 (A/D Conversion Clock Select bits) : ºÔµàÅ×Í¡¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª 㹡Òà á»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ºÔµ¹ÕÁé àÕ ©¾ÒÐã¹Í¹Ø¡ÃÁ PIC16F87xA µ ͧ㪠ÃÇ Á¡ÑººÔµ ADCS1 áÅÐ ADCS0 ã¹ÃÕ¨ÊÔ àµÍà ADCON0 ADCS2 ADCS1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1

ADCS1 ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Ò 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 2 (FOSC/2) 1 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 8 (FOSC/8) 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 32 (FOSC/32) 1 㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC (FRC) 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 4 (FOSC/4) 1 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 16 (FOSC/16) 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 64 (FOSC/64) 1 㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC (FRC)

ºÔµ 5 áÅÐ 4 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0

ÃÙ»·Õè 3-3 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ADCON1 ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F874/877(A) (ÁÕµÍ )


58 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 3, 2, 1 áÅÐ 0- PCFG3, PCFG2, PCFG1, PCFG0 (A/D Port Configuration Control bits - ) : ºÔµ¡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ·Õãè ª ã¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ÁÕÃÒÂÅÐàÍÕ´ ´Ñ§¹Õé PCFG3:PCFG0

AN7

AN6

AN5

AN4

AN3

AN2

AN1

AN0

VREF+

VREF-

¨íҹǹÍÔ¹¾ØµÍйÒÅÍ¡ : ¨íҹǹÍÔ¹¾Øµáç´Ñ¹Í Ò§ÍÔ§

0000

A

A

A

A

A

A

A

A

VDD

VSS

8:0

0001

A

A

A

A

VREF+

A

A

A

AN3

VSS

7:1

0010

D

D

D

A

A

A

A

A

VDD

VSS

5:0

0011

D

D

D

A

VREF+

A

A

A

AN3

VSS

4:1

0100

D

D

D

D

A

D

A

A

VDD

VSS

3:0

0101

D

D

D

D

VREF+

D

A

A

AN3

VSS

2:1

011x

D

D

D

D

D

D

D

D

-

-

0:0

1000

A

A

A

A

VREF+

VREF-

A

A

AN3

AN2

6:2

1001

D

D

A

A

A

A

A

A

VDD

VSS

6:0

1010

D

D

A

A

VREF+

A

A

A

AN3

VSS

5:1

1011

D

D

A

A

VREF+

VREF-

A

A

AN3

AN2

4:2

1100

D

D

D

A

VREF+

VREF-

A

A

AN3

AN2

3:2

1101

D

D

D

D

VREF+

VREF-

A

A

AN3

AN2

2:2

1110

D

D

D

D

D

D

D

A

VDD

VSS

1:0

1111

D

D

D

D

VREF+

VREF-

D

A

AN3

AN2

1:2

A ¤×Í ÍÔ¹¾ØµÍйÒÅÍ¡, D ¤×Í ¾Íà µ´Ô¨µÔ ÍÅ, VREF+ ¤×Íáç´Ñ¹Í Ò§ÍÔ§¢ÒºÇ¡, VREF- ¤×Íáç´Ñ¹Í Ò§ÍÔ§¢Òź, VDD ¤×Í ä¿àÅÕÂé §, VSS ¤×Í¡ÃÒÇ´ , AN3 ¤×Í ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 3 áÅÐ AN2 ¤×Í ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 2

ÃÙ»·Õè 3-3 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ADCON1 ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F874/877(A) (¨º)


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 59

ÃÕ¨ÊÔ àµÍà ANSEL à» ¹ÃÕ¨ÊÔ àµÍà àÅ×͡˹ Ò·Õãè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 Ç Òµ ͧ¡Òà ãË à» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×ÍÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ â´Â¤ ÒµÑ§é µ ¹¨Ð¡íÒ˹´ãË ·Òí §Ò¹à» ¹ÍÔ¹¾ØµÍйÒÅÍ¡

ºÔµ 7

ANSEL

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

ANS7

ANS6

ANS5

ANS4

ANS3

ANS2

ANS1

ANS0

RE2 R/W -1

RE1 R/W -1

RE0 R/W -1

RA5 R/W -1

RA3 R/W -1

RA2 R/W -1

RA1 R/W -1

RA0 R/W -1

ºÔµ 7 ¶Ö§ 0 - ANS7 ¶Ö§ ANS0 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໠¹ÍÔ¹¾ØµÍйÒÅÍ¡ 0 = ¡íÒ˹´à» ¹¢Ò¾Íà µ´Ô¨µÔ ÍÅ â´ÂÊÒÁÒö¡íÒ˹´à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ¡çä´ 1 = ¡íÒ˹´à» ¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ (à» ¹¤ ÒàÃÔÁè µ ¹àÁ×Íè ÃÕ૵) àÁ×Íè àÅ×Í¡ãË ¢ÒàËÅ Ò¹Õàé » ¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ðà» ¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê ǹ´Ô¨µÔ Íŷѧé ËÁ´ ¹Í¡¨Ò¡ ¹Ñ¹é µ ͧ¡íÒ˹´¤ ҢͧÃÕ¨ÊÔ àµÍà TRIS ãË à» ¹ÍÔ¹¾Øµ´ ÇÂ

ÃÙ»·Õè 3-4 ÃÒÂÅÐàÍÕ´µíÒá˹ §ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà ANSEL ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887

ÃÕ¨ÊÔ àµÍà ANSELH à» ¹ÃÕ¨ÊÔ àµÍà àÅ×͡˹ Ò·Õãè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ RB0 ¶Ö§ RB5 Ç Òµ ͧ¡ÒÃãË à» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ ËÃ×ÍÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ â´Â¤ ÒµÑ§é µ ¹¨Ð¡íÒ˹´ãË ¢Ò¾Íà µàËÅ Ò¹Õ·é Òí §Ò¹à» ¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ ANSELH

.

ºÔµ 7

ºÔµ 6 -

ANS13

ANS12

ANS11

ANS10

ANS9

ANS8

X -0

X -0

RB5 R/W -1

RB0 R/W -1

RB4 R/W -1

RB1 R/W -1

RB3 R/W -1

RB2 R/W -1

-

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

ºÔµ 7 áÅÐ 6 - äÁ 㪠§Ò¹ Í Ò¹¤ Òä´ à» ¹ 0 ºÔµ 5 ¶Ö§ 0 - ANS13 ¶Ö§ ANS8 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໠¹ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ AN13 ¶Ö§ AN8 0 = ¡íÒ˹´à» ¹¢Ò¾Íà µ´Ô¨µÔ ÍÅ â´ÂÊÒÁÒö¡íÒ˹´à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ¡çä´ 1 = ¡íÒ˹´à» ¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ (à» ¹¤ ÒàÃÔÁè µ ¹àÁ×Íè ÃÕ૵) àÁ×Íè àÅ×Í¡ãË ¢ÒàËÅ Ò¹Õàé » ¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ðà» ¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê ǹ´Ô¨µÔ Íŷѧé ËÁ´ ¹Í¡¨Ò¡ ¹Ñ¹é µ ͧ¡íÒ˹´¤ ҢͧÃÕ¨ÊÔ àµÍà TRIS ãË à» ¹ÍÔ¹¾Øµ´ ÇÂ

ÃÙ»·Õè 3-5 ÃÒÂÅÐàÍÕ´µíÒá˹ §ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà ANSEL ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887


60 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ÃÙ»·Õè 3-6 ǧ¨ÃÀÒÂ㹢ͧ¢Ò RA4 à·Õº¤ÇÒÁᵡµ Ò§¡Ñº¢ÒÍÔ¹¾ØµàÍÒµ ¾µØ ¢ÒÍ×¹è æ

3.4 ¢Ò¾Íà µ RA4 : ¾Íà µáººà´Ã¹à» ´ (open drain) ¢Ò¾Íà µâ´Â·ÑÇè 仢ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ¨Ðà» ¹áºº¾Ùª¾ÙÅ ÊÒÁÒö¨ Ò¡ÃÐáÊ ä´ ·§Ñé «Ô§¡ áÅЫÍÃ Ê Â¡àÇ ¹¢Ò RA4 ¨Ðà» ¹¢ÒàÍÒµ ¾µØ Ẻà´Ã¹à» ´ ÊÒÁÒö¨ Ò¡ÃÐáÊ«Ô§¡ ä´ à¾Õ§Í ҧ à´ÕÂÇà· Ò¹Ñ¹é ¶ Òµ ͧ¡ÒÃãË ÁÅÕ Í¨Ô¡ 1 ¨Ðµ ͧµ ͵Ñǵ Ò¹·Ò¹¾ÙÅÍѾãË ¡ºÑ ¢Ò¹Õé ã¹ÃÙ»·Õè 3-6 áÊ´§ÅѡɳÐǧ¨ÃÀÒÂ㹢ͧ¢Ò RA4 à·Õº¡Ñº¢Ò¾Íà µÍ×¹è æ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 61

»¯ÔºµÑ ¡Ô Ò÷Õè 1 ¢Ñº LED ·Õ¾è Íà µ C ¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L1-1 㹡Ò÷´Åͧ ÊÒÁÒö㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC16F877 ËÃ×Í PIC16F887 ¡çä´ áµ µÍ §àÅ×Í¡ãË ¶¡Ù µ ͧàÁ×Íè ·íÒ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ´Ç  l

l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L1-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877

¢Ñ鹵͹¡Ò÷´Åͧ L1.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz +5V

R11 10k

11 Vcc 1

MCLR

RC7 26 RC6 25

SW1 Reset

RC5

24

RC4 23 RC3

18

RC2 17 RC1 16 RC0

12

15

21+ $.&%%

R1-R8 510

GND OSC1

OSC2

13

14

C1 22pF

XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L1-1 ǧ¨Ã·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¾Íà µàÍÒµ ¾µØ ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C â´Â㪠mikroC ¤ÍÁä¾àÅÍÃ


62 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

void main() { TRISC=0x00; while(1) { PORTC=0x00; Delay_ms(500); PORTC=0xFF; Delay_ms(500); } }

// Set PORTC ==> output // loop // LED OFF // LED ON

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´ãË ¾Íà µ C à» ¹àÍÒµ ¾µØ â´Â¡Òû ͹¤ Ò 0 ãË ¡ºÑ ·Ø¡ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà TRISC ¨Ò¡¹Ñ¹é » ͹¤ Ò 0x00 ãË ¡ºÑ PORTC à¾×Íè ãË LED ·Õµè Í ÍÂÙ¡ ºÑ ¾Íà µ C ·Ñ§é ËÁ´´ÑºáÅÐ˹ ǧàÇÅÒ áÅ Ç» ͹¤ Ò FF à¾×Íè ãË LED ·Ñ§é ËÁ´·Õµè Í ÍÂÙ¡ ºÑ ¾Íà µ C µÔ´ÊÇ Ò§ ·íÒÍ ҧ¹ÕÊé ÅѺ¡Ñ¹ä»Í ҧµ Íà¹×Íè §

â»Ãá¡ÃÁ·Õè L1-1 ä¿Å PortTest01.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×èÍ·´Êͺ¡Ò÷íÒ§Ò¹ à» ¹¾Íà µàÍÒµ ¾µØ ¢Í§¾Íà µ C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 L1.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è PortTest01 áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L1-1 L1.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L1.4 Ãѹâ»Ãá¡ÃÁ ¨ÐàËç¹ LED ·Õ·è §Ñé ËÁ´·Õ¾è Íà µ C ¡Ð¾ÃÔºµÔ´áÅдѺÊÅѺ¡Ñ¹ä»Í ҧµ Íà¹×Íè § L1.5 á¡ ä¢â»Ãá¡ÃÁµÒÁ·Õáè Ê´§ã¹â»Ãá¡ÃÁ·Õè L1-2 µÑ§é ª×Íè â»Ãà¨ç¡µ à» ¹ PortTest02.c ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ LED ·Õ¾è Íà µ C ¨Ð¡Ð¾ÃÔºàËÁ×͹¡Ñºâ»Ãá¡ÃÁ·Õè L1-1 ËÒ¡áµ ã¹â»ÃááÁ¨Ð㪠¤ Òí Êѧè NOT (~ ) ࢠÒÁÒ ª ÇÂ㹡ÒÃÊÅѺºÔµ¢ ÍÁÙÅá·¹ void main() { TRISC=0x00; PORTC=0xAA; while(1) { PORTC=~PORTC; Delay_ms(500); } }

// Set PORTC ==> output // Set Start LED // loop // Toggle

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ·íÒ§Ò¹àËÁ×͹¡Ñºâ»Ãá¡ÃÁ·Õè L1-1 à¾Õ§à»ÅÕÂè ¹ÃٻẺ¡ÒÃÊÅѺ¤ Ò´ Ç¡ÒÃ㪠¤Òí Êѧè NOT á·¹

â»Ãá¡ÃÁ·Õè L1-1 ä¿Å PortTest02.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ ¾Íà µàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ void main() { TRISC.F0=0; while(1) { PORTC.F0=1; Delay_ms(200); PORTC.F0=0; Delay_ms(200); } }

l 63

// RC0 ==> Output // Loop // LED on // LED off

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¨é ÐÊѧè ãË LED ·Õºè µÔ RC0 ¡Ð¾ÃÔºà¾Õ§ËÅÍ´à´ÕÂÇ

â»Ãá¡ÃÁ·Õè L1-3 ä¿Å PortTest03.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ ¾Íà µàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 â´ÂàÅ×Í¡¾Íà µ·Õµè Í §¡ÒâѺâËÅ´à¾Õ§ ºÔµà´ÕÂÇ ¹Ñ¹è ¤×Í RC0 ã¹ mikroC ¤ÍÁä¾àÅÍà ¼ãÙ ª §Ò¹ÊÒÁÒöࢠҶ֧ÃÕ¨ÊÔ àµÍà µÒ §æ ã¹ÃдѺºÔµä´ â´Â㪠à¤Ã×Íè §ËÁÒ . (¨Ø´) ¤Ñ¹è ÃÐËÇ Ò§¢ ÍÁÙÅáŠǵÒÁ´ Ç¿ §¡ ª¹Ñè Fn â´Â·Õè n ËÁÒ¶֧ ºÔµ·Õµè Í §¡Òà ࢠҶ֧ ÁÕ¤Ò ÃÐËÇ Ò§ 0 ¶Ö§ 7 L1.6 à¢Õ¹â»Ãá¡ÃÁãË LED ·Õµè Òí á˹ § RC0 ¡Ð¾ÃÔºà¾Õ§ËÅÍ´à´ÕÂÇ â´Âà¢Õ¹â»Ãá¡ÃÁä´ ´§Ñ â»Ãá¡ÃÁ·Õè L1-3 ¡íÒ˹´ª×Íè â»Ãà¨ç¡µ à» ¹ PortTest03.c ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L1.7 ÊíÒËÃѺâ»Ãá¡ÃÁ·Õè L1-4 à» ¹¡ÒâѺ LED ã¹ÃٻẺ·ÕËè ÅÒ¡ËÅÒÂÁÒ¡¢Ö¹é â´Â㪠¤Òí ÊÑ§è ·Ò§¤³ÔµÈÒʵà áÅÐ Åͨԡ·Õè mikroC ¤ÍÁä¾àÅÍà àµÃÕÂÁäÇ ãË ãË ·Òí ¡ÒÃÊà ҧâ»Ãà¨ç¡µ PortTest04 áÅ Ç áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L1-1 L1.8 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹


64 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char i,j; void main() { TRISC=0x00; // PORTC ==> Output while(1) // Loop { // **** Running and fill LED **** for (i=0;i<5;i++) { PORTC=0x01; for (j=1;j<8;j++) { PORTC|=(PORTC*2); Delay_ms(200);} // Use OR for fill "1" for (j=1;j<8;j++) { PORTC&=(PORTC/2); Delay_ms(200);} // Use AND for fill "0" } // **** Running LED From Right to Left **** for (i=0;i<5;i++) { PORTC=0x01; for (j=1;j<8;j++) { PORTC*=2;Delay_ms(200); } // Use Multiply for Rotate Left // **** Running LED From Left to Right **** for (j=1;j<8;j++) { PORTC/=2;Delay_ms(200); } // Use Division for Rotate Right } // **** Blinking LED **** PORTC=0x55; for (i=0;i<10;i++) { PORTC^=0xFF;Delay_ms(200); } } }

// Use XOR For Toggle bit

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¡é Òí ˹´ÃٻẺä¿ÇÔ§è LED ËÅÒÂÃٻẺâ´ÂàÍÒ¤íÒÊÑ§è ¡ÒèѴ¡Òâ ÍÁÙÅÃдѺºÔµáÅФíÒÊÑ§è ¤Ù³áÅÐËÒÃࢠÒÁÒª Ç â´Â (1) 㪠¤Òí ÊÑ§è ¤Ù³¤ Ò´ Ç 2 à¾×Íè àÅ×Íè ¹ºÔµ¢ ÍÁÙÅä»·Ò§« Ò (2) ¤íÒÊѧè ËÒô ÇÂÊͧ à¾×Íè àÅ×Íè ¹ºÔµ¢ ÍÁÙÅä»·Ò§¢ÇÒ (3) ¡Òà OR ¢ ÍÁÙÅ´ ǼŤٳ໠¹¡ÒÃà¾ÔÁè Åͨԡ 1 ãË ¡ºÑ ¢ ÍÁÙÅà´ÔÁ â´Â㪠û٠Ẻ·ÕÇè Ò ¢ ÍÁÙÅ ºÔµã´¶Ù¡ OR ´ Ç 1 ¨Ðà» ¹ 1 àÊÁÍ (4) ¡Òà AND ´ ǼÅËÒà ໠¹¡ÒÃà¾ÔÁè Åͨԡ 0 ãË ¡ºÑ ¢ ÍÁÙÅ ºÔµã´¶Ù¡ AND ´ Ç 0 ¨Ðà» ¹ 0 (5) ¤íÒÊѧè XOR à» ¹¡ÒáÅѺʶҹÐÅͨԡ¢Í§ºÔµ·Õµè Í §¡ÒáÅѺʶҹРËÅÑ¡¡Òä×Í ºÔµã´¶Ù¡ XOR ´ Ç 1 ºÔµ¹Ñ¹é ¨Ð¶Ù¡¡ÅѺÅͨԡ áµ ¶Ò ºÔµã´¶Ù¡ XOR ´ Ç 0 ¤ Ò¨Ðà» ¹¤ Òà´ÔÁ

â»Ãá¡ÃÁ·Õè L1-4 ä¿Å PortTest04.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ ¾Íà µàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 â´Â㪠¤Òí ÊÑ§è ·Ò§¤³ÔµÈÒʵà áÅÐÅͨԡ ÁÒª ÇÂ㹡ÒáíÒ˹´ÃٻẺ¡Ò÷íÒ§Ò¹ mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 65

»¯ÔºµÑ ¡Ô Ò÷Õè 2 ¡ÒÃ㪠§Ò¹¾Íà µ A áÅÐ E ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 à» ¹¾Íà µàÍÒµ ¾Øµ ¾Íà µ A áÅÐ E ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ¨Ð·íÒ˹ Ò·Õàè » ¹ÍÔ¹¾ØµÍйÒÅÍ¡àÁ×Íè àÃÔÁè ¨ ÒÂä¿ ãË ¤Ãѧé áá ´Ñ§¹Ñ¹é ËÒ¡¹íÒÁÒ㪠§Ò¹à» ¹¾Íà µàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ ¨Ö§µ ͧ¡íÒ˹´¤ ÒãË ¡ºÑ ÃÕ¨ÊÔ àµÍà ADCON1 ¡ ͹

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà l

㪠ǧ¨Ãã¹ÃÙ»·Õè L2-1 㹡Ò÷´Åͧ

l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L2-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 +5V

R11 10k

11 Vcc 1

MCLR

RE2 10 RE1 9

SW1 Reset

RE0

8

+5V

RA5 7 RA4

1k

6

RA4

RA3 5

LED1

RA2 4 RA1 RA0

12

3 2

21+ $.&%%

R1-R8 510

GND OSC1

OSC2

13

14

C1 22pF

XTAL1 20MHz

510

C2 22pF

ÃÙ»·Õè L2-1 ǧ¨ÃÊíÒËÃѺ¡Ò÷´Êͺ㪠§Ò¹¾Íà µ A áÅÐ E à» ¹¾Íà µàÍÒµ ¾µØ


66 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

int dat=0,dat1=0; void main() { ADCON1=0x07; TRISA=0x00; TRISE=0x00; PORTE=0x00; PORTA=0x00; while(1) { Delay_ms(100); if (dat<64) { PORTA=dat; dat++; } else { dat=0; if (dat1<8) { dat1++; PORTE=dat1; } else dat1=0; } } }

// // // //

Set PORTA and PORTE ==> Digital PORTA ==> Output PORTE ==> Output OFF all LED

// Loop // Fast speed delay // In Rang of PORTA // Show data on PORTA // Increment Data

// //

Overflow PORTA Check data for PORTE

// Show data on PORTE // Clear data aftr over flow

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÃÔÁè ¨Ò¡¡íÒ˹´ãË ¢Ò¾Íà µ A áÅÐ E à» ¹¢Ò¾Íà µ´Ô¨µÔ ÍÅ¡ ͹ ¨Ò¡¹Ñ¹é ¨Ö§¡íÒ˹´ãË à» ¹¢ÒàÍÒµ ¾µØ ¡ ͹ ·Õ¨è ÐǹÅÙ»à¾×Íè Ê §¤ ÒÍÍ¡ä»áÊ´§¼ÅÂѧ LED ·Õµè Í ÍÂÙ¡ ºÑ ¢Ò¾Íà µ A áÅÐ E

â»Ãá¡ÃÁ·Õè L2-1 ä¿Å PortAEtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Íè ·´Åͧ㪠§Ò¹¾Íà µA áÅÐ E ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 à» ¹¾Íà µàÍÒµ ¾µØ

¢Ñ鹵͹¡Ò÷´Åͧ L2.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

L2.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è PortAEtest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L2-1 L2.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ LED ¨ÐáÊ´§¤ ҢͧàÅ¢°Ò¹Êͧã¹áººà¾ÔÁè ¤ Ò¢Ö¹é ä»Í ҧµ Íà¹×Íè § áµ ·Õè LED ¢Í§¢Ò¾Íà µ RA4 ¨ÐäÁ µÔ´ÊÇ Ò§à¹×Íè §¨Ò¡ PIC16F877 ¢Ò RA4 à» ¹¢ÒẺ¤ÍÅàÅç¡àµÍà ໠´ ¶ ÒËÒ¡µ ͧ¡ÒÃãË LED ·Õè RA4 µÔ´ÊÇ Ò§ ¨Ðµ ͧµ ͵Ñǵ Ò¹·Ò¹¤ Ò»ÃÐÁÒ³ 1k: ¾ÙÅÍÑ»àÍÒäÇ à¾×Íè ãË ä´ àÍÒµ ¾µØ Åͨԡ 1 ´Ñ§ã¹Ç§¡ÅÁ¢Í§ÃÙ»·Õè L2-1

mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 67

»¯ÔºµÑ ¡Ô Ò÷Õè 3 㪠§Ò¹¾Íà µ A áÅÐ B ¢Í§ PIC16F887 à» ¹¾Íà µàÍÒµ ¾µØ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ·Õ¾è Íà µ A áÅÐ B ¨Ð¶Ù¡¡íÒ˹´ãË à» ¹¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ àÊÁÍàÁ×èÍàÃÔèÁ¨ ÒÂä¿ãË ¤ÃÑé§áá ´Ñ§¹Ñé¹ã¹¡ÒùíÒÁÒ㪠§Ò¹à» ¹¾Íà µàÍÒµ ¾Øµ¨Ö§µ ͧÁÕ¡ÒáíÒ˹´¤ ÒãË ÃÕ¨ÔÊàµÍà ADCON1 ¡ ͹àÊÁÍ

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà l

㪠ǧ¨Ãã¹ÃÙ»·Õè L3-1 㹡Ò÷´Åͧ

l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L3-1 áÅ Çà»ÅÕÂè ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F887 +5V

R11 10k

11 Vcc 1

MCLR

RB7 26 RB6 25

SW1 Reset

RB5

24

RB4 23 RB3

18

RB2 17 RB1 16 RB0

21+ $.&&% RA5

15

24

RA4 23 RA3

18

RA2 17 12

RA1 16 GND

RA0

OSC1

OSC2

13

14

C1 22pF

XTAL1 20MHz

15 R1-R14 510

C2 22pF

ÃÙ»·Õè L3-1 ǧ¨Ã·´Êͺ㪠§Ò¹¾Íà µ A áÅÐ B ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à» ¹¾Íà µàÍÒµ ¾µØ


68 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¢Ñ鹵͹¡Ò÷´Åͧ L3.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l àÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F887 ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L3.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è PortTest887 áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L3-1 L3.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L3.4 Ãѹâ»Ãá¡ÃÁ LED ¨ÐµÔ´ÊÇ Ò§¨Ò¡µÃ§¡ÅÒ§á¡ÍÍ¡ä»·Ò§´ Ò¹¢ Ò§·Ñ§é Êͧ´ Ò¹áÅдѺ¨Ò¡µíÒá˹ §µÃ§¡ÅÒ§ÍÍ¡ä» ¨Ð¾ºÇ Ò·Õ¢è Ò¾Íà µ RA4 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¨ÐÊÒÁÒö¢Ñº LED ä´ â´ÂäÁ µÍ §µ ͵Ñǵ Ò¹ ·Ò¹¾ÙÅÍÑ»à¾ÔÁè ·Ñ§é ¹Õàé ¹×Íè §¨Ò¡¢Ò¾Íà µ·Ø¡¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à» ¹áºº¾Øª¾ÙÅ int dat[14] = {0xC0,0x1E0,0x3F0,0x7F8,0xFFC,0x1FFE,0x3FFF, 0x3F3F,0x3E1F,0x3C0F,0x3807,0x3003,0x2001,0x00}; // LED pattern array int buff; char i; void main() { ANSEL=0b11100000; // PORTA ==> digital IO ANSELH=0x00; // PORTB ==> digital IO TRISA=0xC0; // PORTA ==> output TRISB=0x00; // PORTB ==> output while(1) // Loop { for (i=0;i<14;i++) // Loop for get data from array { buff=dat[i]&0x00FF; // Clear high byte PORTB=buff; // Show low byte ==> PORTB buff=(dat[i]&0x3F00)/0xff; // Clear low byte and shift right PORTA=buff; // show high byte ==> PORTA Delay_ms(100); // Fast Delay } } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ

â»Ãá¡ÃÁ¹ÕÊé à ҧµÑÇá»Ã dat ¢Ö¹é ÁÒà» ¹µÑÇá»ÃẺÍÐààà¾×Íè à¡çº¤ ÒÃٻẺ¡ÒÃáÊ´§¼Å¢Í§ LED Ê Ç¹ ¡Ò÷íÒ§Ò¹ËÅÑ¡¨ÐàÃÔÁè ¨Ò¡¡íÒ˹´ãË ¢Ò¾Íà µ A áÅÐ B à» ¹¾Íà µ´Ô¨µÔ ÍÅ â´Â¡íÒ˹´¤ Ò·ÕÃè ¨Õ ÊÔ àµÍà ANSEL áÅÐ ANSELH ¨Ò¡¹Ñ¹é ¡íÒ˹´ãË à» ¹¾Íà µàÍÒµ ¾µØ ¨Ò¡¹Ñ¹é ·íÒ¡ÒÃǹÅÙ»à¾×Íè ¹íÒ¤ Ò¨Ò¡ÍÐààä»Ê §ÍÍ¡·Õ¢è Ò¾Íà µàÍÒµ ¾µØ â´ÂÁÕ¡ÒÃẠ§¢ ÍÁÙÅà» ¹äºµ ÅÒ § 8 ºÔµÊíÒËÃѺáÊ´§¼Å·Õ¾è Íà µ B áÅÐ 6 ºÔµº¹ÊíÒËÃѺáÊ´§¼Å·Õ¾è Íà µ A

â»Ãá¡ÃÁ·Õè L3-1 ä¿Å PortTest887.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè 㪠§Ò¹¾Íà µ A áÅÐ B ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à» ¹¾Íà µàÍÒµ ¾µØ mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 69

»¯ÔºµÑ ¡Ô Ò÷Õè 4 ·´ÊÍºÍ Ò¹¤ Ò¨Ò¡ÊÇÔµª ¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà ã¹ÃÙ»·Õè L4-1 áÊ´§Ç§¨Ã¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ·ÕÁè ¡Õ Òõ ÍÊÇÔµª ¡´µÔ´»Å Í´Ѻࢠҷբè Ò RA4 áÅÐ RB0 áÅÐÁÕ¡Òõ ͵Ñǵ Ò¹·Ò¹¾ÙÅÍÑ»¤ Ò 10k: äÇ à¾×Íè ¡íÒ˹´ÊÀÒÇÐÅͨԡ 1 ã¹¢³Ð·Õäè Á Á ¡Õ Òá´ ÊÇÔµª àÁ×Íè ÁÕ¡Òá´ÊÇÔµª à»ÅÕÂè ¹Ê¶Ò¹Ðà» ¹Åͨԡ 0 Ê Ç¹·Õ¾è Íà µ C ¶Ù¡¡íÒ˹´ãË à» ¹¾Íà µàÍÒµ ¾µØ µ ͡Ѻ LED à¾×Íè 㪠áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹ l 㪠ǧ¨Ãã¹ÃÙ»·Õè L4-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L4-1 +5V

R10 10k

R9 10k

C3 0.1PF

11 32 Vcc 1

MCLR

SW1 RESET

R8

RC6 25

R7

24

R6

RC4 23

R5

RC5

R11 10k 33

RB0

RC3

S1 RB0

18

RC2 17 RC1 16

6 S2 RA4

RC7 26

RA4

12 31

RC0

15

21+ $.&%% )

R4 R3 R2 R1 R1-R8 510:

GND OSC1 13

C1 22pF

OSC2 14

XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L4-1 ǧ¨Ã·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ÀÒÂãµ ¡ÒäǺ¤ØÁ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª mikroC ¤ÍÁä¾àÅÍà 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ


70 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

void main() { TRISC.F0=0; while(1) PORTC.F0=~PORTB.F0; }

// RC0 ==> Output // LED at RC0 On when key press

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´¢Ò RC0 à» ¹àÍÒµ ¾µØ Ê Ç¹¢Ò RB0 ·Õãè ª à» ¹ÊÇÔµª à» ¹ÍÔ¹¾ØµÍÂÙá Å ÇàÁ×Íè ¨ ÒÂ俤Ãѧé áá ¨Ò¡¹Ñ¹é à» ¹¡ÒÃǹÅÙ»à¾×Íè ¹íÒ¤ Ò¨Ò¡¡Òá´ÊÇÔµª RB0 áÊ´§·Õè LED RC0 â´Â¨ÐáÊ´§´ Ç¡ÒáÅѺ¤ Ò Åͨԡ à¾×Íè ãË ¡´ÊÇÔµª áÅ Ç LED µÔ´ÊÇ Ò§

â»Ãá¡ÃÁ·Õè L4-1 ä¿Å BasicSwitch01.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè ·´Êͺ ¡Ò÷íÒ§Ò¹¢Í§¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877

¢Ñ鹵͹¡Ò÷´Åͧ L4.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

L4.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è BasicSwitch01 áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L4-1 L4.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L4.4 Ãѹâ»Ãá¡ÃÁ ·íÒ¡Òá´ÊÇÔµª S1 ·Õµè Í ¡Ñº¢Ò¾Íà µ RB0 Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ LED àÁ×Íè äÁ ¡´ÊÇÔµª LED ·Õµè Í ÍÂÙ¡ ºÑ ¾Íà µ C ´Ñº·Ñ§é ËÁ´ àÁ×Íè ¡´ÊÇÔµª S1 ·Õ¢è Ò¾Íà µ RB0 ·íÒãË LED ·Õµè Òí á˹ §¾Íà µ RC0 µÔ´ÊÇ Ò§ L4.5 Êà ҧâ»Ãà¨ç¡µ ªÍ×è BasicSwitch02 áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L4-2 L4.6 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L4.7 Âѧ¤§ãª ǧ¨Ãã¹ÃÙ»·Õè L4-1 㹡Ò÷´Åͧ ¨Ò¡¹Ñ¹é ·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ ¡´ÊÇÔµª S1 ·Õµè Í ¡Ñº¢Ò¾Íà µ RB0 áÅÐ S2 ·Õµè Í ¡Ñº¾Íà µ RA4 Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ LED àÁ×Íè ¡´ÊÇÔµª S1 ·Õ¾è Íà µ RB0 ·íÒãË LED µÔ´ÊÇ Ò§µÒÁ¤ ҢͧàÅ¢°Ò¹Êͧ â´Â¨Ðà¾ÔÁè ¤ Ò¢Ö¹é àÁ×Íè ÁÕ¡Òà ¡´ÊÇÔµª S1 Í ҧµ Íà¹×Íè § àÁ×Íè ¡´ÊÇÔµª S2 ·Õ¾è Íà µ RA4 ·íÒãË LED µÔ´ÊÇ Ò§µÒÁ¤ ҢͧàÅ¢°Ò¹Êͧ áµ ¤Ò ¨ÐŴŧ àÁ×Íè ÁÕ¡Òà ¡´ÊÇÔµª S2 Í ҧµ Íà¹×Íè §


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ void main() { TRISC=0x00; while(1) { if (PORTB.F0==0) { PORTC++; Delay_ms(200); } if (PORTA.F4==0) { PORTC--; Delay_ms(200); } } }

l 71

// All PORTC ==> Output // // // //

Check SW at RB0 Increment PORTC Check SW at RA4 Decrement PORTC

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õé¨Ð㪠¾Íà µ C ·Ñ駾Íà µà¾×èÍáÊ´§¼Å¢ ÍÁÙÅ·Õèä´ ¨Ò¡¡Òá´ÊÇÔµª â´Â¶ Ò¡´ÊÇÔµª µíÒá˹ § RB0 ¨Ðà» ¹¡ÒÃà¾ÔÁè ¤ Ò¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà ¾Íà µ C áµ ¶Ò ¡´ÊÇÔµª RA4 ¨Ðà» ¹¡ÒÃÅ´¤ Ò¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà ¾Íà µ C ÃÐËÇ Ò§¡Òá´ÊÇÔµª áµ ÅФÃÑ§é ¨ÐÁÕ¡ÒÃ˹ ǧàÇÅÒ 200 ÁÔÅÅÔÇ¹Ô Ò·Õà¾×Íè Å´¼Å¨Ò¡Ë¹ ÒÊÑÁ¼ÑʢͧÊÇÔµª ·Õ·è Òí ãË à¡Ô´¤ Ò¡´ÊÇÔµª «Òéí ¢Ö¹é ËÅÒÂ æ ¤Ãѧé

â»Ãá¡ÃÁ·Õè L4-2 ä¿Å BasicSwitch02.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè ·´Êͺ ¡Ò÷íÒ§Ò¹¢Í§¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 â´Â¡íÒ˹´ãË ¾Íà µ A áÅÐ B à» ¹ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ Ê Ç¹¾Íà µ C à» ¹àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ

INNOVATIVE EXPERIMENT


72 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 73

º··Õè 4

¡íÒà¹Ô´àÊÕ§´ Ç¿ §¡ ª¹Ñè Sound mikroC ä´ àµÃÕÂÁ¿ §¡ ªÑè¹ÊíÒËÃѺ¡ÒáíÒà¹Ô´ÊÑ­­Ò³àÊÕ§à¾×è͢ѺÍÍ¡·ÕèÅíÒ⾧ â´ÂÊÒÁÒö ¡íÒ˹´µíÒá˹ §¢Ò¾Íà µ·Õèµ Í§¡ÒÃàª×èÍÁµ Íä´ µÒÁµ ͧ¡ÒÃ

4.1 ¿ §¡ ª¹Ñè Sound_Init à» ¹¿ §¡ ªÑè¹à¾×èÍ¡íÒ˹´µíÒá˹ §¾Íà µáÅкԵ·Õè㪠㹡ÒâѺÊÑ­­Ò³àÊÕ§ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Sound_Init(unsigned short *port, unsigned short pin);

¾ÒÃÒÁÔàµÍà port

ËÁÒ¶֧ µíÒá˹ §¾Íà µ·Õàè Å×͡㪠ÊÒí ËÃѺµ ÍÅíÒ⾧

pin ËÁÒ¶֧ µíÒá˹ §ºÔµ·Õàè Å×͡㪠ÊÒí ËÃѺµ ÍÅíÒ⾧

µÑÇÍ ҧ·Õè 4-1 Sound_Init(&PORTB, 2);

à» ¹¡ÒáíÒ˹´ãË ¢Ò RB2 à» ¹¢ÒÊíÒËÃѺ¢ÑºàÊÕ§ÍÍ¡ÅíÒ⾧


74 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

4.2 ¿ §¡ ª¹Ñè Sound_Play à» ¹¿ §¡ ªÑ蹡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Sound_Play(unsigned freq_in_hz, unsigned duration_ms);

¾ÒÃÒÁÔàµÍà ໠¹¤ Ò¤ÇÒÁ¶Õ¢è ͧ¡ÒáíÒà¹Ô´àÊÕ§ ˹ ÇÂà» ¹àÎÔõ« à¹×Íè §¨Ò¡à» ¹µÑÇá»ÃẺ unsigned ¨Ö§¡íÒ˹´¤ Òä´ µ§Ñé áµ 0 ¶Ö§ 65535 â´Ââ»Ãá¡ÃÁäÁ ᨠ§¢ ͼԴ¾ÅÒ´áµ ªÇ §¤ÇÒÁ¶Õ·è ÊÕè Ã Ò§ä´ ¨ÃÔ§¹Ñ¹é ¤íÒ¹Ç³ä´ ¨Ò¡ ¤ Ò¤ÇÒÁ¶ÕÊè §Ù ÊØ´ = FOSC/(80x3) = FOSC/240 freq_in_hz

¤ Ò¤ÇÒÁ¶Õµè Òèí ÊØ´ = FOSC/(80x255) = FOSC/20,400 â´Â¤ Ò¤ÇÒÁ¶Õ·è ¶Õè ¡Ù Êà ҧ¢Ö¹é à» ¹¤ Ò»ÃÐÁÒ³·Õ¡è Òí ˹´¨Ò¡¿ §¡ ª¹Ñè Delay_Cyc «Ö§è ÍÒ¨ ᵡµ Ò§¨Ò¡¤ Ò¤ÇÒÁ¶Õ·è áÕè · ¨ÃÔ§àÅ硹 Í ¡Ã³Õ·ãÕè ª ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz ¤ Ò¤ÇÒÁ¶ÕÊè §Ù ÊØ´·ÕÊè Ã Ò§ä´ à· Ò¡Ñº 20,000,000/240 = 83,333 Hz áµ ¤ÇÒÁ¶Õ·è ÊÕè Ã Ò§ä´ áÁ ¹ÂíÒà» ¹ª ǧ·Õµè Òèí ¡Ç Ò 20,000Hz ËÃ×Í 20kHz ¤ Ò¤ÇÒÁ¶Õµè Òèí ÊØ´·ÕÊè Ã Ò§ä´ à· Ò¡Ñº 20,000,000/20,400 = 980 Hz duration_ms 㪠¡Òí ˹´ÃÐÂÐàÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§ ˹ ÇÂà» ¹ÁÔÅÅÔǹ Ô Ò·Õ à» ¹µÑÇá»ÃẺ

unsigned ¨Ö§¡íÒ˹´¤ Òä´ µ§Ñé áµ 0 ¶Ö§ 65,535

µÑÇÍ ҧ·Õè 4-2

µ ͧ¡ÒÃÊà ҧÊÑ­­Ò³¤ÇÒÁ¶Õè 2kHz à» ¹àÇÅÒ 1 ÇÔ¹Ò·Õ ¹íÒÁÒà¢Õ¹໠¹â»Ãá¡ÃÁä´ ´§Ñ ¹Õé Sound_Play(2000,1000)


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 75

»¯ÔºµÑ ¡Ô Ò÷Õè 5 ¢ÑºàÊÕ§´ Ç¿ §¡ ª¹Ñè Sound ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L5-1 㹡Ò÷´Åͧ ÊÒÁÒö㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC16F877 ËÃ×Í PIC16F887 ¡çä´ áµ µÍ §àÅ×Í¡ãË ¶¡Ù µ ͧàÁ×Íè ·íÒ¡ÒÃÊà ҧä¿Å â»Ãਵ硵 ´Ç  l

l

Ëҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö·´ÅÍ§ä´ àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887

l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L5-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877

¢Ñ鹵͹¡Ò÷´Åͧ L5.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ RBX-877 Rev.2007 àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz +5V

R1 10k SW1 RESET

32 1

VDD RC0

12 31

+5V

MCLR

11

SP1 PIEZO

Vss Vss PIC16F887

2

AN0/RA0

CR1 Ceramic Resonator 20MHz

15

RA0/AN0

13

C1 0.1PF C2 10PF

12 31

14

ÃÙ»·Õè L5-1 ǧ¨Ãàª×Íè Áµ ÍÅíÒ⾧໠Â⫡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 (ËÃ×Í PIC16F877A) à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè Sound 㹡ÒáíÒà¹Ô´ÊÑ­­Ò³àÊÕ§¢ÑºÍÍ¡ÅíÒ⾧


76 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

void main() { Sound_Init(&PORTC,0); while(1) { Sound_Play(2000,1000); Delay_ms(1000); } }

// Make pin RC0 ==> Speaker // Make 2kHz every 1 second

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´µíÒá˹ §¢Ò RC0 à» ¹¢ÒàÍÒµ ¾µØ ·Õàè ª×Íè Áµ ͡ѺÅíÒ⾧ ¨Ò¡¹Ñ¹é áÅзíÒ¡ÒÃǹÅÙ»Ê §àÊÕ§ ¤ÇÒÁ¶Õè 2kHz ÍÍ¡ä»·Ø¡æ 1 ÇÔ¹Ò·Õ

â»Ãá¡ÃÁ·Õè L5-1 ä¿Å SoundTest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Íè ¡íÒà¹Ô´àÊÕ§¨Ò¡¢Ò¾Íà µ PC0 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ËÃ×Í PIC16F877A ¢ÑºÍÍ¡ÅíÒ⾧ L5.2 Êà ҧä¿Å â»Ãà¨ç¡µ ªÍ×è SoundTest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L5-1 L5.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L5.4 Ãѹâ»Ãá¡ÃÁ 1 ÇÔ¹Ò·Õ

¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õ¤è Í ¹¢ Ò§ÊÙ§ (à¹×Íè §¨Ò¡ÁÕ¤ÇÒÁ¶Õè 2kHz) ´Ñ§ÍÍ¡¨Ò¡ÅíÒ⾧໠Ââ«à» ¹¨Ñ§ËÇÐã¹·Ø¡æ

L5.5 ·´Åͧᡠä¢â»Ãá¡ÃÁà¾×Íè à»ÅÕÂè ¹¤ Ò¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³àÊÕ§ â´Â¤ÇáíÒ˹´ãË ÁÂÕ Ò ¹¤ÇÒÁ¶ÕÃè ÐËÇ Ò§ 1kHz ¶Ö§ 3kHz à¹×Íè §¨Ò¡ÅíÒ⾧·Õãè ª º¹ºÍà ´ RBX-877 áÅÐ NX-877 à» ¹ÅíÒ⾧໠Ââ«ÁÕ¤Ò ¤ÇÒÁµ Ò¹·Ò¹ 16 ¶Ö§ 32: ÊÒÁÒöµÍºÊ¹Í§ÊÑ­­Ò³Â Ò¹¤ÇÒÁ¶Õàè ÊÕ§㹪 ǧ 1kHz ¶Ö§ 3kHz ËÒ¡¤ÇÒÁ¶ÕÊè §Ù ËÃ×͵èÒí ¡Ç Ò¹Õé ÍÒ¨äÁ ä´ Â¹Ô ËÃ×Íä´ Â¹Ô àºÒŧ

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 77

º··Õè 5

ÍÔ¹àµÍÃ Ã»Ñ µ ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¡Ñº mikroC ¤ÍÁä¾àÅÍà ¡ÒÃÍÔ¹àµÍà ÃÑ»µ (interrupt) ËÃ×Í¡ÒâѴ¨Ñ§ËÇСÒ÷íÒ§Ò¹¢Í§«Õ¾ÕÂÙ ¹Ñºà» ¹¤Ø³ÊÁºÑµÔ·Õèµ Í§ ÁÕã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÁÑÂãËÁ áÅÐà» ¹¤Ø³ÊÁºÑµÔ·ÕèÁÕº·ºÒ·ÊíҤѭÍ ҧÁÒ¡àÁ×è͹íÒäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ÁÒÊà ҧÃкº¤Çº¤ØÁÍѵâ¹ÁÑµÔ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x ÊÒÁÒö ¡íÒà¹Ô´áÅеͺʹͧ¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ä´ ¶§Ö 15 áËÅ §´Ñ§¹Õé l ¨Ò¡ä·àÁÍà 3 áËÅ §¤×Í ¡ÒÃà¡Ô´¤ Òà¡Ô¹ËÃ×ÍâÍàÇÍà â¿ÅÇã¹ä·àÁÍà 0 áÅÐä·àÁÍà 1 ÍÕ¡ áËÅ §Ë¹Ö§è ¨Ò¡¤ Ò·Õàè · ÒËÃ×͵ç¡Ñ¹ã¹ä·àÁÍà 2 l ¨Ò¡¡ÒÃà¢Õ¹˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕ; Õ ÃÍÁàÊÃç¨ÊÁºÙó 1 áËÅ § l ¨Ò¡âÁ´ÙÅà»ÃÕºà·Õº-µÃǨ¨ÑºÊÑ­­Ò³ áÅÐ PWM ËÃ×Í CCP 2 áËÅ § l ¨Ò¡âÁ´ÙÅÊ×Í è ÊÒÃ͹ءÃÁ (USART) 2 áËÅ §¤×Í à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ÃѺáÅÐÊ §¢ ÍÁÙÅÊÁºÙó l ¨Ò¡Ç§¨Ãà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡ 1 áËÅ § (੾ÒÐã¹ PIC16F87xA) l ¨Ò¡¾Íà µ B 2 áËÅ §¤×Í ¨Ò¡ÊÑ­­Ò³ÍÔ¹àµÍà û Ñ µ ÀÒ¹͡·Õ¢è Ò RB0/INT áÅСÒÃà»ÅÕÂè ¹ á»Å§Åͨԡ·Õ¢è Ò RB4 ¶Ö§ RB7 l ¨Ò¡âÁ´ÙÅàª×èÍÁµ Í͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ 2 áËÅ §¤×Í ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅàª×èÍÁµ Í Í¹Ø¡ÃÁẺ«Ô§â¤Ã¹ÑÊ, ¨Ò¡¡Ò깡ѹ¢Í§¢ ÍÁÙÅã¹Ê ǹàª×Íè Áµ ÍÃкººÑÊ I2C l ¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µ Ô ÍÅ 1 áËÅ § l ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§¾Íà µ¢¹Ò¹àÊÃÔÁ (PSP) 1 áËÅ § (੾ÒÐã¹ PIC16F87x Ãع 40 ¢Ò) â´ÂàÁ×Íè à§×Íè ¹ä¢¢Í§¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ à» ¹¨ÃÔ§ ¨ÐÁÕ¡ÒÃ૵á¿Å¡¢Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹¹Ñé æ ¢Ö¹é (ª×Íè ¢Í§á¿Å¡¨Ðŧ· Ò´ ǵÑÇÍÑ¡Éà F) ¨Ò¡¹Ñ¹é ¨ÐµÃǨÊÍºÇ Ò ÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹¹Ñé æ ËÃ×ÍäÁ (ª×Íè ¢Í§¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨ÐàËÁ×͹¡Ñºª×Íè á¿Å¡áµ ŧ· Ò´ ǵÑÇÍÑ¡Éà E) ઠ¹ ËÒ¡à¡Ô´ÊÑ­­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò RB0/INT á¿Å¡ INTF ¨Ð૵ áÅж ÒÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ


78 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

E EIE

E EIF

T 0IE

T 0IF

R B IE

R B IF

IN T E

IN T F

IN T E R R U P T

G IE

ÃÙ»·Õè 5-1 á¹Ç¤Ô´ã¹¡ÒáíÒ˹´¤ Òµ Ò§æ à¾×Íè ÃͧÃѺ¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC Ẻ¹Õé «Ö觵ÃǨÊͺ¨Ò¡ºÔµ INTE áÅÐÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ÃÇÁ (GIE) äÇ ¡ç¨Ð·íÒà¡Ô´ ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ã¹Ãкº ´Ñ§áÊ´§ã¹ÃÙ»·Õè 5-1 ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò ¡ÒèСíÒ˹´ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¢Ö¹é ä´ µ ͧÁÕ¡ÒÃàµÃÕÂÁ¡Òôѧ¹Õé (1) àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÃÇÁ â´Â¡ÒÃ૵ºÔµ GIE ã¹ÃÕ¨ÊÔ àµÍà INTCON ËÒ¡ºÔµ¹Õäé Á ÁÕ ¡ÒÃ૵ ¨ÐäÁ Á·Õ Ò§à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ä´ áÁ ÇÒ à§×Íè ¹ä¢ã¹¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§áËÅ §¡íÒà¹Ô´ µ Ò§æ ¨Ðà» ¹¨ÃÔ§ áÅÐÁÕ¡ÒÃàÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ áÅ Ç¡çµÒÁ (2) àÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ (3) à¢Õ¹¿ §¡ ª¹Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÊíÒËÃѺ mikroC ¡íÒ˹´ª×Íè äÇ à» ¹ void interrupt() (4) ÃͤÍÂãË à§×Íè ¹ä¢¢Í§¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ã¹Åѡɳе Ò§æ à¡Ô´¢Ö¹é (5) àÁ×Íè ¨º¢Ñ¹é µÍ¹ã¹¿ §¡ ª¹Ñ ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ áŠǨе ͧà¤ÅÕÂà á¿Å¡ÍÔ¹àµÍÃ Ã»Ñ µ ´Ç Â

5.1 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÁÕ´Ç Â¡Ñ¹ 5 µÑÇ ¤×Í 1. INTCON à» ¹ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ËÅÑ¡ 2. PIE1 à» ¹ÃÕ¨ÊÔ àµÍà àÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ à¾ÍÃÔà¿ÍÃÑÅ 3. PIE2 à» ¹ÃÕ¨ÊÔ àµÍà àÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ à¾ÍÃÔà¿ÍÃÑŵÑÇ·Õè 2 4. PIR1 à» ¹ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ðà§×Íè ¹ä¢¢Í§áËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ à¾ÍÃÔà¿ÍÃÑÅ·íҧҹà ÇÁ¡Ñº PIE1 5. PIR2 à» ¹ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ðà§×Íè ¹ä¢¢Í§áËÅ §¡íÒà¹Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ µ ; ǧµÑÇ·Õè 2 ·íҧҹà ÇÁ¡Ñº PIE2


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 79

ÊíÒËÃѺÃÒÂÅÐàÍÕ´·Ñ§é ËÁ´¢Í§ÃÕ¨ÊÔ àµÍà ·§Ñé 5 µÑÇÁÕ´§Ñ ¹Õé

5.1.1 ÃÕ¨ÊÔ àµÍà INTCON à» ¹ÃÕ¨ÊÔ àµÍà ·ÁÕè ¹Õ ÂÑ ÊíҤѭÊÙ§ÊØ´ÊíÒËÃѺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÊÒÁÒÃ¶Í Ò¹áÅÐà¢ÕÂ¹ä´ ·¡Ø ºÔµ 㪠àÍç¹ àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÃÇÁáÅСÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¾¹×é °Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé ºÔµ 7 INTCON

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -x

ºÔµ 7 - GIE (Global Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÃÇÁ 0 - àÅ×Í¡äÁ ãË Á¡Õ ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¡Ô´¢Ö¹é ·Ñ§é ËÁ´ 1 - àÅ×Í¡ãË Á¡Õ ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¡Ô´¢Ö¹é ä´ ·§Ñé ËÁ´ ºÔµ 6 - PEIE (Peripheral Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ µÍ ¾ ǧ ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 5 - T0IE (TMR0 Overflow Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡âÍàÇÍà â¿ÅǢͧä·àÁÍà 0 ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 4 - INTE (RBO/INT External Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡·Õ¢è Ò RB0/INT ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 3 - RBIE (Port B Change Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡ÒÃà»ÅÕÂè ¹á»Å§Åͨԡ·Õè ¾Íà µ B ¢Ò RB4-RB7 ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 2 - T0IF (TMR0 Overflow Interrupt Flag bit) : ºÔµáÊ´§¡ÒÃâÍàÇÍà â¿ÅǢͧä·àÁÍà 0 0 - ä·àÁÍà 0 äÁ à¡Ô´âÍàÇÍà â¿ÅÇ 1 - ä·àÁÍà 0 âÍàÇÍà â¿ÅÇ ·íÒãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ËÒ¡àÍç¹àÍàºÔÅäÇ à¤ÅÕÂà ·Ò§«Í¿µ áÇà ºÔµ 1 - INTF (RB0/INT External Interrupt Flag bit) : ºÔµáÊ´§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡·Õ¢è Ò RB0/INT 0 - äÁ ÁÊÕ ­ Ñ ­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡à¡Ô´¢Ö¹é ·Õ¢è Ò RB0/INT 1 - ÁÕÊ­ Ñ ­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡à¡Ô´¢Ö¹é ·Õ¢è Ò RB0/INT ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ËÒ¡ ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ºÔµ 0 - RBIF (Port B Chang Interrupt Flag bit) : ºÔµáÊ´§¡ÒÃà»ÅÕÂè ¹á»Å§ÃдѺÅͨԡ·Õ¢è Ò RB4-RB7 0 - äÁ Á¡Õ ÒÃà»ÅÕÂè ¹á»Å§à¡Ô´¢Ö¹é ·Õ¢è Ò RB4-RB7 1 - ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§ÃдѺÅͨԡà¡Ô´¢Ö¹é ·Õ¢è Ò RB4-RB7 Í ҧ¹ Í 1 ¢Ò ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇÃ


80 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

5.1.2 ÃÕ¨ÊÔ àµÍà PIE1

à» ¹ÃÕ¨ÔÊàµÍà àÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÊÑ­­Ò³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÍØ»¡Ã³ µ ; ǧã¹áËÅ §µ Ò§æ ÊÒÁÒöࢠҶ֧à¾×Íè Í Ò¹áÅÐà¢ÕÂ¹ä´ ã¹ÃдѺºÔµ ÁÕÃÒÂÅÐàÍÕ´¢Í§áµ ÅкԵ´Ñ§¹Õé ºÔµ 7

PIE1

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

PSPIE

ADIE

RCIE

TXIE

SSPIE

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

ºÔµ 2

ºÔµ 1

ºÔµ 0

R/W -0

R/W -0

R/W -0

CCP1IE TMR2IE TMR1IE

ºÔµ 7 - PSPIE (Parallel Slave Port Read/Write Interrupt Enable bit ) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¹×Íè §¨Ò¡ ¡ÒÃÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙŢͧ¾Íà µ¢¹Ò¹àÊÃÔÁËÃ×Í PSP ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 6 - ADIE (A/D Converter Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§âÁ´ÙÅ A/D ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 5 - RCIE (USART Receive Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¡ÒÃÃѺ¢ ÍÁÙŢͧ âÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ (USART) àÊÃç¨ÊÔ¹é ÊÁºÙó ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 4 - TXIE (USART Transmit Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¡ÒÃÊ §¢ ÍÁÙŢͧ âÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ (USART) àÊÃç¨ÊÔ¹é ÊÁºÙó ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 3 - SSPIE (Synchronous Serial Port Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¨Ò¡âÁ´ÙÅ àª×Íè Áµ Í͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ (MSSP) ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 2 - CCP1IE (CCP1 Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡âÁ´ÙÅ CCP1 ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 1 - TMR2IE (TMR2 to PR2 match Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡Ò÷դè Ò ¢Í§ ä·àÁÍà 2 áÅÐÃÕ¨ÊÔ àµÍà ¤ÒºàÇÅÒ 2 (Period register 2) ෠ҡѹ ૵໠¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ ºÔµ 0 - TMR1IE (TMR1 Overflow Interrupt Enable bit ) : ºÔµàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ä·àÁÍà 1 âÍàÇÍà â¿ÅÇ à«µà» ¹ 1 à¾×Íè àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ¶ Òà» ¹ 0 ¨Ðà» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 81

5.1.3 ÃÕ¨ÊÔ àµÍà PIE2 à» ¹ÃÕ¨ÔÊàµÍà àÍç¹àÍàºÔÅáËÅ §¡íÒà¹Ô´ÊÑ­­Ò³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÍØ»¡Ã³ µ ; ǧã¹áËÅ §µ Ò§æ µÑÇ·Õè 2 ÊÒÁÒöࢠҶ֧à¾×Íè Í Ò¹áÅÐà¢ÕÂ¹ä´ ã¹ÃдѺºÔµ ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé ºÔµ 7 PIE2

-

ºÔµ 6

CMIE R/W -0

ºÔµ 5 -

ºÔµ 4

ºÔµ 3

EEIE

BCLIE

R/W -0

R/W -0

ºÔµ 2 -

ºÔµ 1 -

ºÔµ 0

CCP2IE R/W -0

ºÔµ 7 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 6 - CMIE (Comparator Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¨Ò¡âÁ´ÙÅà»ÃÕºà·Õº áç´Ñ¹ÍйÒÅÍ¡ 0 - ´ÔÊàÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé 1 - àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 5 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 4 - EEIE (EEPROM Write Operation Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¡ÒÃà¢Õ¹ ¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁàÊÃç¨ÊÁºÙó 0 - ´ÔÊàÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé 1 - àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 3 - BCLIE (ÚBus Collision Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ª¹¡Ñ¹¢Í§¢ ÍÁÙÅã¹ ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅàª×Íè Áµ Í͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ (SSP) àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ I2C ÁÒÊàµÍà 0 - ´ÔÊàÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé 1 - àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé ºÔµ 2 áÅÐ 1 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 0 - CCP2IE (CCP2 Interrupt Enable bit) : ºÔµàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡âÁ´ÙÅ CCP2 0 - ´ÔÊàÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé 1 - àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õé


82 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

5.1.4 ÃÕ¨ÊÔ àµÍà PIR1 à» ¹ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ðà§×Íè ¹ä¢¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ à¹×Íè §¨Ò¡ÍØ»¡Ã³ µÍ ¾ ǧ ·íҧҹà ÇÁ¡Ñº ÃÕ¨ÊÔ àµÍà PIE1 àÁ×Íè à§×Íè ¹ä¢¢Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à» ¹¨ÃÔ§ ¨Ð૵ºÔµÊ¶Ò¹Ðã¹ÃÕ¨ÊÔ àµÍà PIR1 ¨Ò¡¹Ñ¹é µÃǨÊ꼂 ÒÁÕ¡ÒÃàÍç¹àÍ--àºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹¹Ñé æ ·ÕÃè ¨Õ ÊÔ àµÍà PIE1 ËÃ×ÍäÁ ¶ ÒÁÕ¡¨ç еÃǨÊÍºÇ Ò ºÔµ PEIE áÅÐ GIE ã¹ÃÕ¨ÊÔ àµÍà INTCON ૵äÇ ·§Ñé ¤ÙË Ã×ÍäÁ ¶ ÒËҡ૵äÇ ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé Í ҧÊÁºÙó ÊÒÁÒÃ¶Í Ò¹áÅÐà¢ÕÂ¹ä´ ·¡Ø ºÔµÂ¡àÇ ¹ºÔµ 4 áÅÐ 5 (ºÔµ TXIF áÅÐ RCIF) ·ÕÍè Ò ¹ä´ Í ҧà´ÕÂÇ ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé ºÔµ 7

PIR1

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

PSPIF

ADIF

RCIF

TXIF

SSPIF

R/W -0

R/W -0

R -0

R -0

R/W -0

ºÔµ 2

ºÔµ 1

ºÔµ 0

R/W -0

R/W -0

R/W -0

CCP1IF TMR2IF TMR1IF

ºÔµ 7 - PSPIF (Parallel Slave Port Read/Write Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹ ¢ ÍÁÙŢͧ¾Íà µ¢¹Ò¹àÊÃÔÁ (PSP) 0 - äÁ Á¡Õ ÒÃÍ Ò¹-à¢Õ¹à¡Ô´¢Ö¹é 1 - à¢Õ¹ËÃ×ÍÍ Ò¹¢ ÍÁÙšѺ¾Íà µ¢¹Ò¹àÊÃÔÁàÊÃç¨ µ ͧà¤ÅÕÂà ´Ç ¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ºÔµ 6 - ADIF (A/D Converter Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ A/D 0 - ¡ÒÃá»Å§ÊÑ­­Ò³ÂѧäÁ ÊÁºÙó 1 - ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅàÊÃç¨ÊÁºÙó ºÔµ 5 - RCIF (USART Receive Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃÃѺ¢ ÍÁÙŢͧâÁ´ÙÅ USART 0 - ºÑ¿à¿Íà µÇÑ ÃѺ¢Í§Ç§¨Ã USART Ç Ò§ 1 - ºÑ¿à¿Íà µÇÑ ÃѺ¢Í§Ç§¨Ã USART àµçÁ à¡Ô´¡ÒÃÃѺ¢ ÍÁÙÅÊÁºÙó ºÔµ 4 - TXIF (USART Transmit Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃÊ §¢ ÍÁÙŢͧâÁ´ÙÅ USART 0 - ºÑ¿à¿Íà µÇÑ Ê §¢Í§Ç§¨Ã USART àµçÁ ÂѧäÁ à¡Ô´¡ÒÃÊ §¢ ÍÁÙÅ 1 - ºÑ¿à¿Íà µÇÑ Ê §¢Í§Ç§¨Ã USART Ç Ò§ áÊ´§Ç Ò¡ÒÃÊ §¢ ÍÁÙÅÊÁºÙó ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ ºÔµ 3 - SSPIF (Synchronous Serial Port (SSP) Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SSP 0 - äÁ ÁàÕ §×Íè ¹ä¢ã´ã¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP ·Õ·è Òí ãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à» ¹¨ÃÔ§ 1 - ÁÕà§×è͹䢷Õè·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SSP à» ¹¨ÃÔ§ ·íÒãË à¡Ô´ ÍÔ¹àµÍÃ Ã»Ñ µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ à§×Íè ¹ä¢·Õàè » ¹¨ÃÔ§¢Í§¡Ò÷íҧҹᵠÅÐâËÁ´¤×Í âËÁ´ SPI à¡Ô´¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙÅ¢Ö¹é Í ҧÊÁºÙó


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 83

âËÁ´ I2C ÁÒÊàµÍà - à¡Ô´¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙÅ¢Ö¹é Í ҧÊÁºÙó - à¡Ô´Ê¶Ò¹ÐàÃÔÁè µ ¹¢Ö¹é Í ҧÊÁºÙó º¹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP - à¡Ô´Ê¶Ò¹ÐËÂØ´¢Ö¹é Í ҧÊÁºÙó º¹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP - à¡Ô´Ê¶Ò¹ÐàÃÔÁè µ ¹«éÒí ¢Ö¹é Í ҧÊÁºÙó º¹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP - à¡Ô´Ê¶Ò¹ÐÃѺÃÙ (acknowledge) ¢Ö¹é Í ҧÊÁºÙó º¹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP - à¡Ô´Ê¶Ò¹ÐàÃÔÁè µ ¹¢Ö¹é ã¹¢³Ð·Õâè Á´ÙÅ SSP ÍÂÙã ¹ÊÀÒÇÐÇ Ò§ËÃ×ÍäÍà´ÔÅ (idle) ¡Ã³ÕÊà ҧ໠¹ÃкºÁÑŵÔÁÒÊàµÍà - à¡Ô´Ê¶Ò¹ÐËÂØ´¢Ö¹é ã¹¢³Ð·Õâè Á´ÙÅ SSP ÍÂÙã ¹ÊÀÒÇÐÇ Ò§ËÃ×ÍäÍà´ÔÅ (idle) ¡Ã³Õ Êà ҧ໠¹ÃкºÁÑŵÔÁÒÊàµÍà âËÁ´ I2C ÊàÅ¿ à¡Ô´¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙÅ¢Ö¹é Í ҧÊÁºÙó ºÔµ 2 - CCP1IF (CCP1 Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP1 ÊÒÁÒöẠ§á¡µÒÁâËÁ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP1 ä´ ´§Ñ ¹Õé âËÁ´µÃǨ¨ÑºÊÑ­­Ò³ËÃ×Í᤻à¨Íà (capture mode) 0 - äÁ Á¡Õ ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹é ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 1 - ÁÕ¡ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹é ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 ·íÒãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ä´ ËÒ¡àÍç¹àÍàºÔÅ äÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà âËÁ´à»ÃÕºà·ÕºÊÑ­­Ò³ (compare mode) 0 - ¡ÒÃà»ÃÕºà·Õº¢ ÍÁÙÅ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 äÁ ෠ҡѹËÃ×ÍäÁ àËÁ×͹¡Ñ¹ 1 - ¡ÒÃà»ÃÕ Â ºà·Õ  º¢ Í ÁÙ Å ·Õè ÃÕ ¨Ô Ê àµÍà TMR1 à· Ò ¡Ñ ¹ ËÃ× Í àËÁ× Í ¹¡Ñ ¹ ·í Ò ãË à ¡Ô ´ ¡Òà ÍÔ¹àµÍÃ Ã»Ñ µ ä´ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà äÁ Á¡Õ ÒÃ㪠§Ò¹ºÔµ¹ÕËé Ò¡¡íÒ˹´ãË CCP1 ·íÒ§Ò¹ã¹âËÁ´ PWM ºÔµ 1 - TMR2IF (TMR2 to PR2 match Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ Í¹Ñ à¹×Íè §ÁÒ ¨Ò¡¤ Ңͧä·àÁÍà 2 áÅлÃÕÊà¡ÅàÅÍà 2 ෠ҡѹ 0 - ¤ Ңͧä·àÁÍà 2 áÅÐÃÕ¨ÊÔ àµÍà ¤ÒºàÇÅÒ 2 (Period register 2) äÁ ෠ҡѹ 1 - ¤ Ңͧä·àÁÍà 2 áÅÐÃÕ¨ÊÔ àµÍà ¤ÒºàÇÅÒ 2 (Period register 2) ෠ҡѹ ·íÒãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ä´ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ºÔµ 0 - TMR1IF (TMR1 Overflow Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃà¡Ô´âÍàÇÍà â¿ÅǢͧä·àÁÍà 1 0 - ä·àÁÍà 1 äÁ à¡Ô´âÍàÇÍà â¿ÅÇ 1 - ä·àÁÍà 1 à¡Ô´âÍàÇÍà â¿ÅÇ ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ä´ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ µ ͧà¤ÅÕÂà ໠¹ 0 ´ Ç¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇÃ


84 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

5.1.5 ÃÕ¨ÊÔ àµÍà PIR2

à» ¹ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ðà§×Íè ¹ä¢¡ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ à¹×Íè §¨Ò¡ÍØ»¡Ã³ à¾ÍÃÔà¿ÍÃÑŵÑÇ·Õè 2 ·íÒ§Ò¹ à ÇÁ¡ÑºÃÕ¨ÊÔ àµÍà PIE2 àÁ×Íè à§×Íè ¹ä¢¢Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à» ¹¨ÃÔ§ ¨Ð૵ºÔµÊ¶Ò¹Ðã¹ÃÕ¨ÊÔ àµÍà PIR2 ¨Ò¡¹Ñ¹é µÃǨÊ꼂 ÒÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹¹Ñé æ ·ÕÃè ¨Õ ÊÔ àµÍà PIE2 ËÃ×ÍäÁ ¶ ÒÁÕ¡¨ç еÃǨÊͺ Ç Ò ºÔµ PEIE áÅÐ GIE ã¹ÃÕ¨ÊÔ àµÍà INTCON ૵äÇ ·§Ñé ¤ÙË Ã×ÍäÁ ¶ ÒËҡ૵äÇ ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ºÔµ 7 PIR2

-

ºÔµ 6

CMIF R/W -0

ºÔµ 5 -

ºÔµ 4

ºÔµ 3

EEIF

BCLIF

R/W -0

R/W -0

ºÔµ 2 -

ºÔµ 1 -

ºÔµ 0

CCP2IF R/W -0

ºÔµ 7 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 6 - CMIF (Comparator Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃà»ÃÕºà·Õºáç´Ñ¹ 0 - ÍÔ¹¾Øµ¢Í§Ç§¨Ãà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡äÁ à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§ 1 - ÍÔ¹¾Øµ¢Í§Ç§¨Ãà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§ ºÔµ 5 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 4 - EEIF (EEPROM Write Operation Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ Ç ¤ÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ 0 - ¡ÒÃà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÂѧäÁ ÊÁºÙó ËÃ×ÍÂѧäÁ àÃÔÁè µ ¹à¢Õ¹ 1 - ¡ÒÃà¢Õ¹¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁàÊÃç¨ÊÁºÙó ºÔµ 3 - BCLIF (ÚBus Collision Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò깡ѹ¢Í§¢ ÍÁÙÅ㹡Ò÷íÒ§Ò¹¢Í§ âÁ´ÙÅàª×Íè Áµ Í͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ (SSP) àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ I2C ÁÒÊàµÍà 0 - äÁ Á¡Õ Ò깡ѹ¢Í§¢ ÍÁÙÅ¢Ö¹é 1 - à¡Ô´¡Ò깡ѹ¢Í§¢ ÍÁÙź¹ºÑÊ ºÔµ 2 áÅÐ 1 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 0 - CCP2IF (CCP2 Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP2 ÊÒÁÒöẠ§á¡µÒÁ âËÁ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP1 ä´ ´§Ñ ¹Õé âËÁ´µÃǨ¨ÑºÊÑ­­Ò³ËÃ×Í᤻à¨Íà (capture mode) 0 - äÁ Á¡Õ ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹é ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 1 - ÁÕ¡ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹é ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 à¤ÅÕÂà ´Ç ¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà âËÁ´à»ÃÕºà·ÕºÊÑ­­Ò³ (compare mode) 0 - ¡ÒÃà»ÃÕºà·Õº¢ ÍÁÙÅ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 äÁ ෠ҡѹËÃ×ÍäÁ àËÁ×͹¡Ñ¹ 1 - ¡ÒÃà»ÃÕºà·Õº¢ ÍÁÙÅ·ÕÃè ¨Õ ÊÔ àµÍà TMR1 ෠ҡѹËÃ×ÍàËÁ×͹¡Ñ¹ µ ͧà¤ÅÕÂà ·Ò§«Í¿µ áÇà äÁ Á¡Õ ÒÃ㪠§Ò¹ºÔµ¹ÕËé Ò¡¡íÒ˹´ãË CCP2 ·íÒ§Ò¹ã¹âËÁ´ PWM


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 85

»¯ÔºµÑ ¡Ô Ò÷Õè 6 㪠§Ò¹ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¢Ò RB0/INT ¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà ÃÙ»·Õè L6-1 áÊ´§ãË àËç¹Ç§¨Ã¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ·Õµè Í ÊÇÔµª ࢠҡѺ¢Ò RA4 áÅÐ RB0 â´ÂÁÕ¡Òõ ͵Ñǵ Ò¹·Ò¹¾ÙÅÍÑ»à¾×Íè ¡íÒ˹´ÊÀÒÇÐÅͨԡ໠¹ 1 àÁ×Íè äÁ Á¡Õ Òá´ÊÇÔµª àÁ×Íè ÁÕ¡Òá´ÊÇÔµª ¨Ðà»ÅÕÂè ¹ ʶҹÐà» ¹Åͨԡ 0 Ê Ç¹¾Íà µ C ¡íÒ˹´ãË à» ¹¾Íà µàÍÒµ ¾µØ µ ͡Ѻ LED à¾×Íè áÊ´§ÊÀÒÇСÒ÷íÒ§Ò¹ ¡Òõ ÍÊÇÔµª ࢠҷբè Ò¾Íà µ RB0 à¾×Íè 㪠Êà ҧÊÑ­­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ «Ö§è 㹡Ò÷´Åͧ¹Õ¨é Р㪠¤ÇÒÁÊÒÁÒö¢Í§¡ÒÃà» ¹¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ (INT) ¢Í§¢Ò¾Íà µ RB0 à» ¹ËÅÑ¡ l 㪠ǧ¨Ãã¹ÃÙ»·Õè L6-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L6-1 +5V

R10 10k

R9 10k

11 32 Vcc 1

RC7 26

MCLR

SW1 RESET

33

RB0

R7

24

R6

RC4 23

R5

RC3

S1 RB0

18

RC2 17 RC1 16

6 S2 RA4

RC6 25 RC5

R11 10k

RA4

12 31

C3 0.1PF R8

RC0

15

21+ $.&%% )

R4 R3 R2 R1 R1-R8 510:

GND OSC1 13

C1 22pF

OSC2 14

XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L6-1 ǧ¨Ã·´Êͺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡¼ Ò¹·Ò§¢Ò RB0/INT ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ÀÒÂãµ ¡ÒäǺ¤ØÁ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª mikroC ¤ÍÁä¾àÅÍà 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ


86 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¢Ñ鹵͹¡Ò÷´Åͧ L6.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L6.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è BasicInterrupt áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L6-1 L6.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L6.4 Ãѹâ»Ãá¡ÃÁ àÁ×Íè äÁ ¡´ÊÇÔµª â»Ãá¡ÃÁ¨Ð·íÒ§Ò¹µÒÁâ»Ãá¡ÃÁ»¡µÔ ¤×Í ãË LED µÔ´ÊÅѺ¡Ñ¹ áµ àÁ×Íè ¡´ÊÇÔµª ·¢Õè Ò RB0/ INT ·íÒãË LED ¡Ð¾ÃÔºÍÕ¡ÃÙ»áººË¹Ö§è ·Ñ¹·Õ «Ö§è ËÁÒ¤ÇÒÁÇ Ò äÁ ÇÒ â»Ãá¡ÃÁ¨Ð·íÒ§Ò¹»¡µÔ ´ ǤíÒÊѧè ã´ÍÂÙà Á×Íè ÁÕ ¡ÒÃÍÔ¹àµÍÃÑ»µ «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õâè »Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¹Ñ ·Õ char i; void interrupt() { for(i=0;i<10;i++) { PORTC=0xFF; Delay_ms(100); PORTC=0x00; Delay_ms(100); } INTCON.INTF=0; } void main() { TRISC=0x00; INTCON.INTF=0; INTCON.INTE=1; INTCON.GIE=1; while(1) { PORTC=0x55; Delay_ms(200); PORTC=0xAA; Delay_ms(200); } }

// Interrupt Service Routine // Blinking LED when interrupt

// Clear Interrupt flag // Main program // // // // //

PORTC ==> Output Clear Interrupt flag before use Enable interrupt from INT/RB0 Pin Enable Global interrupt Main program

// Running LED

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ

àÃÔèÁµ ¹â»Ãá¡ÃÁ´ Ç¿ §¡ ªÑè¹ interrupt «Öè§àÁ×èÍà¡Ô´ÍÔ¹àµÍà ÃÑ»µ â»Ãá¡ÃÁ¨Ð¡ÃÐâ´´ÁÒ·íÒ§Ò¹·Õè¹Õè·Ñ¹·Õ â´Ââ»Ãá¡ÃÁã¹Ê ǹ¹Õ¨é Ðà» ¹¡ÒáоÃÔº LED ¤¹ÅÐÃٻẺ¡Ñºâ»Ãá¡ÃÁËÅÑ¡ áÅÐàÁ×Íè ¨º§Ò¹ã¹Ê ǹºÃÔ¡Òà ÍÔ¹àµÍÃ Ã»Ñ µ áŠǨе ͧà¤ÅÕÂà á¿Å¡ÍÔ¹àµÍÃ Ã»Ñ µ ¡Í ¹ÍÍ¡¨Ò¡ÍÔ¹àµÍÃ Ã»Ñ µ àÊÁÍ ÊíÒËÃѺâ»Ãá¡ÃÁËÅÑ¡ ¨ÐàÃÔÁè ¨Ò¡¡ÒÃà¤ÅÕÂà á¿Å¡ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¹Ñ¹é àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¢Ò INT áÅÐàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ÃÇÁ ¡ ͹ä»Ç¹ÅÙ»·íÒ§Ò¹»¡µÔ Ãͨ¹¡Ç Ò¨Ðà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ

â»Ãá¡ÃÁ·Õè L6-1 ä¿Å BasicInterrupt.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè ·´Êͺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A)

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 87

º··Õè 6

¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD ´ Ç ¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà âÁ´ÙÅ LCD à» ¹âÁ´ÙÅáÊ´§¼ÅµÑÇÍÑ¡É÷ÕÁè ¼Õ ¹Ù ÂÔ Á㪠¡¹Ñ ÁÒ¡ à¹×Íè §¨Ò¡ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁ µÔ´µ Íä´ §Ò  áÅÐÊÒÁÒöáÊ´§µÑÇÍÑ¡Éà (ÀÒÉÒÍѧ¡ÄÉ) ä´ ¤Ãº¶ ǹ ·Ñ§é ÂѧÁÕÃÒ¤ÒäÁ ʧ٠¹Ñ¡ âÁ´ÙÅ LCD ẺµÑÇÍÑ¡Éà (character LCD module) ÁÕÊÇ ¹»ÃСͺËÅÑ¡´Ñ§¹Õé 1. Ê Ç¹áÊ´§¼Å à» ¹¼ÅÖ¡àËÅÇ (liquid crystal) ·Õ·è Òí ãË àËç¹µÑÇÍÑ¡¢ÃÐä´ â´ÂÍÒÈÑÂáʧ ¨Ò¡ÀÒ¹͡ ÁÕ¨Òí ¹Ç¹µÑÇÍÑ¡Éõѧé áµ 8 µÑÇÍÑ¡Éà 1 ºÃ÷Ѵ 仨¹¶Ö§ 40 µÑÇÍÑ¡Éà 4 ºÃ÷Ѵ Ãع ·Õ¹è ÂÔ Á 㪠ÁÒ¡·ÕÊè ´Ø à» ¹Ãع 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ 2. Ê Ç¹¤Çº¤ØÁ à» ¹µÑÇÃѺ¢ ÍÁÙŨҡÀÒ¹͡à¾×Íè 㪠¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ઠ¹ ¡ÒÃź¨ÍÀÒ¾ ¡ÒÃáÊ´§µÑÇÍÑ¡Éà ËÃ×Í¡ÒÃàÅ×Íè ¹à¤Íà à«Íà ໠¹µ ¹ µÑǤǺ¤ØÁ¨Ð㪠ª»Ô ¤Çº¤ØÁ â´Â੾ÒÐ àºÍà ·àÕè » ¹Áҵðҹ¤×Í HD44780 ã¹» ¨¨Øº¹Ñ ÁÕ¡ÒÃ㪠àºÍà ͹×è æ ·´á·¹ ᵠû٠Ẻ¡Òà µÔ´µ ÍÂѧµÃ§¡ÑºàºÍà HD44780 ¢Ò 1 : GND ¢Ò 2 : +V ¢Ò 3 : Vo ¢Ò 4 : RS ¢Ò 5 : R/W ¢Ò 6 : E ¢Ò 7 ¶Ö§ 14 : D0 ¶Ö§ D7

ÃÙ»·Õè 6-1 áÊ´§Ãٻà ҧáÅеíÒá˹ §¢Ò¢Í§âÁ´ÙÅ LCD Áҵðҹ ÊíÒËÃѺÃع ·ÕÁè äÕ ¿Ê ͧËÅѧ (back light) ¨ÐÁÕ¢Òà¾ÔÁè ÍÕ¡ 2 ¢Ò (¢Ò 15 áÅÐ 16) ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ä¿Ê ͧËÅѧ


88 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.1 ¢ÒÊÑ­­Ò³¢Í§âÁ´ÙÅ LCD ¢Ò·Õè 1 ¢Ò·Õè 2 ¢Ò·Õè 3 ¢Ò·Õè 4

GND +V Vo RS

µ Íŧ¡ÃÒÇ´ µ ÍࢠҡѺä¿àÅÕÂé § +5V à» ¹¢ÒÃѺÍÔ¹¾Øµáç´Ñ¹à¾×èÍ»ÃѺ¤ÇÒÁÊÇ Ò§ à» ¹¢ÒÍÔ¹¾Øµà¾×èÍᡪ¹Ô´¢Í§¢ ÍÁÙŤíÒÊÑè§ËÃ×Í¢ ÍÁÙÅáÊ´§¼Å ¶ Ò¢Ò¹Õàé » ¹ 0 ¤ Ò·ÕÊè § ÁÒ¨Ðà» ¹¤íÒÊÑ§è ¶ Ò¢Ò¹Õàé » ¹ 1 ¤ Ò·ÕÊè § ÁÒ¨Ðà» ¹¢ ÍÁÙÅáÊ´§¼Å ¢Ò·Õè 5 R/W à» ¹¢ÒÍÔ¹¾Øµ·Õãè ª à¾×Íè àÅ×Í¡¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺâÁ´ÙÅ LCD 0 à» ¹¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 à» ¹¡ÒÃÍ Ò¹¢ ÍÁÙÅ »¡µÔ¡Òí ˹´à» ¹ 0 à¹×Íè §¨Ò¡¡ÒÃ㪠§Ò¹»¡µÔÁ¡Ñ ¨ÐäÁ Á¡Õ ÒÃÍ Ò¹¤ Ò ¢Ò·Õè 6 E à» ¹¢ÒÍÔ¹¾Øµãª à¾×Íè ¡ÒÃàÍç¹àÍàºÔÅ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD ¢Ò·Õè 7 ¶Ö§ 14 D0 ¶Ö§ D7 à» ¹¢Ò¢ ÍÁÙŢͧâÁ´ÙÅ LCD ËÒ¡µ ͧ¡ÒõԴµ ÍẺ 8 ºÔµ ¨Ð㪠¢Ò¢ ÍÁÙŤú·Ñ§é 8 ¢Ò ËÒ¡µ ͧ¡ÒõԴµ ÍẺ 4 ºÔµ ¨Ð㪠¢Ò D4 ¶Ö§ 7 +5V 11

32

C6 0.1PF 50V

+5V

1+! 21+ $.&&% RD2

+5V

RD3

R5 4k7 SW2 RESET

1 R6 1k

MCLR

RD7 RD6 RD5 RD4

JP1

21

4

22

6

30

RS E

DSP1 LCD 16x2

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

BLA +V Vo BLK GND 15 2

R13 16 47

BACK LIGHT ON

1 3 VR1 10k

BRIGHTNESS

29 28 27 12 31

CR1 Ceramic Resonator 20MHz

13

14

ÃÙ»·Õè 6-2 áÊ´§¡ÒÃàª×Íè Áµ ÍâÁ´ÙÅ LCD º¹ºÍà ´ RBX-877 Rev.2007 «Ö§è µÃ§¡Ñº¿ §¡ ª¹Ñè Lcd_Init()


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 89

6.2 ¿ §¡ ª¹Ñè µÔ´µ ͡ѺâÁ´ÙÅ LCD ẺÁҵðҹ ã¹ mikroC ÁÕ¿§ ¡ ª¹Ñè ÁҵðҹÊíÒËÃѺµÔ´µ ͡ѺâÁ´ÙÅ LCD à¾×Íè ÍíҹǤÇÒÁÊдǡ㹡ÒÃÒ ¾Ñ²¹Òâ»Ãá¡ÃÁ â´Â㹿 §¡ ª¹Ñè Áҵðҹ¹Ñ¹é ¨ÐàÅ×Í¡¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD Ẻ 4 ºÔµ ¨Ö§ãª ¢Ò ¢ ÍÁÙÅ D4 ¶Ö§ D7 ෠ҹѹé Ê Ç¹¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃàÅÍà PIC ·Õµè Í ¡ÑºâÁ´ÙÅ LCD ¨Ðµ ͧÍÂÙ ÀÒÂã¹¾Íà µà´ÕÂǡѹ

6.2.1 ¿ §¡ ª¹Ñè ¡ÒÃàµÃÕÂÁ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD 6.2.1.1 ¿ §¡ ª¹Ñè Lcd_Init ¿ §¡ ª¹Ñè ¹Õàé » ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¡ÒõԴµ ÍâÁ´ÙÅ LCD â´Â¡íÒ˹´µíÒá˹ §¢Òµ Ò§ æ àÍÒäÇ áÅ Ç ¡ÒûÃѺà»ÅÕÂè ¹¤ Ò»ÃѺà»ÅÕÂè ¹ä´ à©¾ÒеíÒá˹ §¾Íà µ·Õãè ª àª×Íè Áµ Í෠ҹѹé â´ÂÃÒÂÅÐàÍÕ´ µíÒá˹ §¢Ò·Õãè ª àª×Íè Áµ ÍÃÐËÇ Ò§âÁ´ÙÅ LCD ¡Ñº¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC à» ¹´Ñ§¹Õé D7

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 7

D6

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 6

D5

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 5

D4

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 4

E

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 3

RS

àª×Íè Áµ ͡Ѻ¢Ò¾Íà µºÔµ 2

ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Init(unsigned short *port);

¾ÒÃÒÁÔàµÍà port

ËÁÒ¶֧ µíÒá˹ §¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª àª×Íè Áµ ͡ѺâÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 6-1 Lcd_Init(&PORTB);

à» ¹¡ÒÃ㪠§Ò¹ PORTB 㹡ÒÃàª×Íè Áµ ͡ѺâÁ´ÙÅ LCD


90 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.2.1.2 ¿ §¡ ª¹Ñè Lcd_Config ¡íÒ˹´µíÒá˹ §¾Íà µáÅеíÒá˹ §¢Òµ Ò§æ ·Õè㪠àª×èÍÁµ ͡ѺâÁ´ÙÅ LCD ¾Ã ÍÁ·Ñ駡íÒ˹´ ¿ §¡ ª¹Ñè ¡Ò÷íÒ§Ò¹¾×¹é °Ò¹ãË ¡ºÑ âÁ´ÙÅ LCD â´ÂµíÒá˹ §¢Ò·Ñ§é ËÁ´·Õ¡è Òí ˹´ÊÒÁÒöàÅ×Í¡ä´ Í ҧ ÍÔÊÃÐ áµ ÁàÕ §×Íè ¹ä¢Ç Ò µ ͧÁÒ¨Ò¡¾Íà µà´ÕÂǡѹ «Ö§è ᵡµ Ò§¨Ò¡¿ §¡ ª¹Ñè Lcd_Init() ·Õè¡íÒ˹´¢Ò ¾Íà µäÇ áÅ Çáµ áá ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Config(unsigned short *port, unsigned short RS, unsigned short EN, unsigned short WR, unsigned short D7, unsigned short D6, unsigned short D5, unsigned short D4);

¾ÒÃÒÁÔàµÍÃ

*port ËÁÒ¶֧ ¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õàè ª×Í è Áµ ͡ѺâÁ´ÙÅ LCD â´Â¢Ò¤Çº¤ØÁáÅТÒ

¢ ÍÁÙŷѧé ËÁ´·Õµè Í à¢ Ò¡Ñº¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ðµ ͧÁÒ¨Ò¡¾Íà µà´ÕÂǡѹ RS

à» ¹µíÒá˹ §ºÔµ¢Í§¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ¢Ò RS ¢Í§âÁ´ÙÅ LCD

EN

à» ¹µíÒá˹ §ºÔµ¢Í§¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ¢Ò EN ¢Í§âÁ´ÙÅ LCD

WR

à» ¹µíÒá˹ §ºÔµ¢Í§¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ¢Ò R/W ¢Í§âÁ´ÙÅ LCD

D7,D6,D5,D4

à» ¹µíÒá˹ §ºÔµ¢Í§¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ¢Ò D4 ¶Ö§ D7 ¢Í§âÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 6-2 Lcd_Config(PORTD,1,2,0,3,4,5,6);

à» ¹¡ÒáíÒ˹´ãË PORTD à» ¹¾Íà µ·Õãè ª àª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ¢Ò RD1 µ ͡Ѻ¢Ò RS ¢Í§âÁ´ÙÅ LCD ¢Ò RD2 µ ͡Ѻ¢Ò EN ¢Ò RD0 µ ͡Ѻ¢Ò R/W ¢Ò RD3, RD4, RD5, RD6 µ ͡Ѻ¢Ò D7, D6, D5, D4 µÒÁÅíҴѺ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 91

6.2.2 ¿ §¡ ª¹Ñè Ê §¢ ÍÁÙÅáÊ´§¼Å 6.2.2.1 ¿ §¡ ª¹Ñè Lcd_Out 㪠ÊíÒËÃÑºÊ §¢ ÍÁÙÅÍÍ¡ä»áÊ´§¼Å·ÕèâÁ´ÙÅ LCD â´Â¨Ðµ ͧÃкصíÒá˹ §á¶Ç (row) áÅÐ µíÒá˹ §µÑÇÍÑ¡Éà (col) ¡ ͹·Õ¨è ÐÊ §¢ ÍÁÙÅÍÍ¡ä» â´ÂÃٻẺ¢Í§¢ ÍÁÙŨÐà» ¹µÑÇÍÑ¡ÉõÑÇà´ÕÂÇËÃ×Íà» ¹ ¢ ͤÇÒÁ¡çä´ â´Â¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧÁÕ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè Lcd_Init ËÃ×Í Lcd_Config ¡ ͹ ÃٻẺ¡ÒáÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Out(unsigned short row, unsigned short col, char *text);

¾ÒÃÒÁÔàµÍà ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµ è Í §¡ÒùíÒä»áÊ´§¼Å row

µÑÇÍ ҧ·Õè 6-3 Lcd_Out(1, 3, “Hello!”);

à» ¹¡ÒÃÊ §¢ ͤÇÒÁ Hello ÍÍ¡ä»áÊ´§¼Å·Õ¨è Í LCD 㹺Ã÷Ѵ·Õè 1 àÃÔÁè ·Õµè Òí á˹ §µÑÇÍÑ¡ÉõÑÇ·Õè 3

Hello


92 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.2.2.2 ¿ §¡ ª¹Ñè Lcd_Out_Cp à» ¹¤íÒÊÑ§è ·Õ·è Òí §Ò¹àËÁ×͹¡Ñº¤íÒÊѧè LCD_Out áµ ¤Òí ÊÑ§è ¹Õàé » ¹¡ÒÃÊ §¢ ͤÇÒÁä»áÊ´§·Õµè Òí á˹ § à¤Íà à«Íà » ¨¨ØºÑ¹ ¨Ö§äÁ ¨íÒà» ¹µ ͧÃкصíÒá˹ §à¤Íà à«Íà ¡ ͹㪠¿ §¡ ªÑè¹¹Õé Í ҧäáçµÒÁ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧÁÕ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè Lcd_Init ËÃ×Í Lcd_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Out_Cp(char *text);

¾ÒÃÒÁÔàµÍà *text ËÁÒ¶֧

µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµè Í §¡ÒùíÒä»áÊ´§

µÑÇÍ ҧ·Õè 6-3 Lcd_Out_Cp(“Here!”);

à» ¹¡ÒÃáÊ´§¢ ͤÇÒÁ 0AHA ·Õâè Á´ÙÅ LCD ã¹µíÒá˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ

6.2.2.3 ¿ §¡ ª¹Ñè Lcd_Chr à» ¹¡ÒÃÊ §¢ ÍÁÙÅà¾Õ§亵 à´ÕÂÇÍÍ¡áÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â¡ ͹¡ÒÃÊ §¨Ðµ ͧÁÕ¡ÒáíÒ˹´ µíÒá˹ §á¶Ç (row) áÅÐ µíÒá˹ §µÑÇÍÑ¡Éà (col) ¡ ͹·Õ¨è ÐÊ §¢ ÍÁÙÅÍÍ¡ä» Í ҧäáçµÒÁ¡ ͹㪠§Ò¹ ¿ §¡ ª¹Ñè ¹Õ¨é е ͧÁÕ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè Lcd_Init ËÃ×Í Lcd_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Chr(unsigned short row, unsigned short col, char character);

¾ÒÃÒÁÔàµÍà ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µ Õè Í §¡ÒùíÒä»áÊ´§ row

µÑÇÍ ҧ·Õè 6-4 char i ; void main() { i = 0x30 ; TRISC = 0; Lcd_Init(&PORTC); do { Lcd_Chr(1,1,i);

// Start i with 0x20 in ASCII // PORTC is output // Initial default on PORTC // show i on LCD


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ i++ ; delay_ms(500);

l 93

// Increment i

} while(i < 0x3f) ;

// Loop Until I more than 0x3F

}

à» ¹¡ÒùíÒ¤ Ò i ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD â´ÂÁÕ¡ÒÃà¾ÔÁè ¤ ҢͧµÑÇá»Ã i ¨Ò¡ 0x30 仨¹¶Ö§ ¤ Ò 0x3F µíÒá˹ §¡ÒÃáÊ´§¼Å¨Ð¤§·ÕÍè ÂÙ· áÕè ¶Ç·Õè 1 ¤ÍÅÑÁ¹ ·Õè 1

6.2.2.4 ¿ §¡ ª¹Ñè Lcd_Chr_Cp à» ¹¡ÒÃÊ §¢ ÍÁÙÅ亵 à´ÕÂÇÍÍ¡ä»áÊ´§¼Å·ÕèâÁ´ÙÅ LCD áµ äÁ ÁÕ¡ÒÃÃкصíÒá˹ §·Õèµ Í§¡ÒÃ Ê §¢ ÍÁÙÅ â´Â¨ÐÊ §¢ ÍÁÙÅä»áÊ´§·ÕèµíÒá˹ §à¤Íà à«Íà » ¨¨ØºÑ¹ Í ҧäáçµÒÁ¡ ͹㪠§Ò¹¿ §¡ ªÑè¹¹Õé ¨Ðµ ͧÁÕ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè Lcd_Init ËÃ×Í Lcd_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Chr_Cp(char character);

¾ÒÃÒÁÔàµÍà character

ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µÕè Í §¡ÒùíÒä»áÊ´§

µÑÇÍ ҧ·Õè 6-5 char i ; void main() { i = 0x30 ; TRISD = 0; Lcd_Init(&PORTD); Lcd_Cmd(LCD_SHIFT_RIGHT); do { Lcd_Chr_Cp(i); i++ ; delay_ms(500); } while(i < 0x3f) ; }

// Start i with 0x20 in ASCII // PORTD is output // Initial default on PORTD

// show i on LCD // Increment i

// Loop Until I more than 0x3F

¨Ò¡µÑÇÍ ҧ·íÒ§Ò¹ä´ àª ¹à´ÕÂǡѺ¤íÒÊѧè LCD_Chr áµ ¨ÐàËç¹Ç Ò àÁ×Íè àÅ×Íè ¹à¤Íà à«Íà µÇÑ ÍÑ¡É÷ÕÍè ÂÙº ¹ ˹ Ò¨ÍâÁ´ÙÅ LCD ¡ç¨ÐàÃÕ§µ Íà¹×Íè §¡Ñ¹ä´ ´Ñ§ÃÙ» 01234567890:;<= >


94 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.2.2.5 ¿ §¡ ª¹Ñè Lcd_Cmd à» ¹¤íÒÊѧè à¾×Íè ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ Ò§æ ÃÒÂÅÐàÍÕ´¢Í§¤íÒÊÑ§è µ Ò§ æ áÊ´§ ã¹µÒÃÒ§µ Í仹Õé ª×èͤíÒÊÑè§ LCD_FIRST_ROW LCD_SECOND_ROW LCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_HOME LCD_CURSOR_OFF LCD_UNDERLINE_ON LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT Shift LCD_SHIFT_RIGHT

ÃÒÂÅÐàÍÕ´  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1 à¤ÅÕÂà ˹ Ò¨Í ä»ÂѧµíÒá˹ §àÃÔèÁµ ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ ÍÁÙÅã¹ RAM äÁ à»ÅÕè¹ » ´¡ÒÃáÊ´§¼Åà¤Íà à«Íà áÊ´§à¤Íà à«Íà ໠¹àÊ ¹ªÔ´¢ÍºÅ Ò§¤ Ò§äÇ áÊ´§à¤Íà à«Íà Ẻ¡Ð¾ÃÔº àÅ×è͹à¤Íà à«Íà 价ҧ´ Ò¹« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×è͹à¤Íà à«Íà 价ҧ´ Ò¹¢ÇÒ ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ à» ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD » ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD àÅ×è͹¢ ÍÁÙÅä»·Ò§« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×è͹¢ ÍÁÙÅä»·Ò§¢ÇÒ ¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹

ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Cmd(unsigned short command);

¾ÒÃÒÁÔàµÍà Command

ËÁÒ¶֧ ¤íÒÊѧè à¾×Íè ÊÑ§è §Ò¹ãË âÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ Ò§ æ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 95

»¯ÔºµÑ ¡Ô Ò÷Õè 7 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L7-1 㹡Ò÷´Åͧ ÊÒÁÒö㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC16F877 ËÃ×Í PIC16F887 ¡çä´ áµ µÍ §àÅ×Í¡ãË ¶¡Ù µ ͧàÁ×Íè ·íÒ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ´Ç  l Ëҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö·´ÅÍ§ä´ àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887 l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L7-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L7.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ LDCtest01 áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L7-1 L7.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L7.4 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ ͤÇÒÁº¹¨ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ·Ñ§é 2 ºÃ÷Ѵã¹ÃٻẺµ Ò§æ ËÅÒ¡ËÅÒ äÁ ÇÒ ¨Ðà» ¹¡ÒÃà» ´» ´Ë¹ Ò¨Í àÅ×Íè ¹¢ ÍÁÙÅ àÅ×Íè ¹à¤Íà à«Íà áÊ´§¢ ÍÁŵÑÇÍÑ¡Éà áÊ´§¢ ÍÁÙŵÑÇàÅ¢ +5V 11

32

C6 0.1PF 50V

+5V

1+! 21+ $.&&%

+5V

SW2 4-5-6

RD2 21

4

22

6

RD3

R5 4k7

1 R6 1k

MCLR

JP1

RD7 RD6 RD5 RD4

30

RS E

DSP1 LCD 16x2

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

BLA +V Vo BLK GND 15 2

R13 16 47

BACK LIGHT ON

1 3 VR1 10k

BRIGHTNESS

29 28 27 12 31

CR1 Ceramic Resonator 20MHz

13

14

ÃÙ»·Õè L7-1 ǧ¨Ã·´ÅͧáÊ´§¼Åº¹âÁ´ÙÅ LCD ´ Ç¿ §¡ ª¹Ñè Lcd ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


96 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char *text1 = "Innovative"; char *text2 = "Experiment"; char txt[4]; char i; void main() { Delay_ms(1000); TRISD =0x00; Lcd_init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF) ; for (i=0;i<4;i++) { Lcd_Cmd(LCD_CLEAR); Delay_ms(500); Lcd_Out(1, 3, text1); Lcd_Out(2, 3, text2); Delay_ms(1000); } for (i=0;i<11;i++) { Lcd_Cmd(LCD_SHIFT_LEFT); Delay_ms(200); } for (i=0;i<11;i++) { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } for (i=0;i<4;i++) { Lcd_Cmd(LCD_CLEAR); Delay_ms(300); Lcd_Out(1, 3, text1); Lcd_Out(2, 3, text2); Delay_ms(300); } Lcd_Cmd(LCD_CLEAR); i=0; while(1) { i++; Lcd_Out(1,1,"Counter "); ByteToStr(i,txt); Lcd_Out_cp(txt); Delay_ms(400); } }

// // // // //

Start up Dalay PORTD ==> OUTPUT for LCD Initialize LCD connected to PORTD Turn cursor off Blink lcd

// Clear display // Print text to LCD, 2nd row, 1st column // Print text to LCD, 2nd row, 1st column // Shift data left

// Shift data right

// blink lcd // Clear display // Print text to LCD, 2nd row, 1st column // Print text to LCD, 2nd row, 1st column // Clear Screen

// // // //

Increment Show text Convert Data to String Chow Lcd at cursor

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ 1. ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ áÅ Ç¡íÒ˹´ãË ¾Íà µ D à» ¹àÍÒµ ¾µØ à¾×Íè µÔ´µ ͡ѺâÁ´ÙÅ LCD 2. ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ LCD áÅÐµÑ§é ¤ ÒãË »´ ¡ÒÃáÊ´§¼Å¢Í§à¤Íà à«Íà 3. ǹÅÙ» 4 Ãͺà¾×Íè áÊ´§¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD ¼Ùã ª §Ò¹¨ÐàËç¹¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD µÔ´¡Ð¾ÃÔº 4. ǹÅÙ»à¾×Íè àÅ×Íè ¹¢ ͤÇÒÁä»·Ò§« Ò áÅ ÇÊѧè àÅ×Íè ¹¢ ͤÇÒÁ¡ÅѺÁÒÍÕ¡¤ÃÑ§é ¨Ò¡¹Ñ¹é ÊÑ§è ¡Ð¾ÃÔº¢ ͤÇÒÁ 5. ǹÅÙ»¹íÒ¤ ÒµÑǹѺ·ÕÁè ÒáÊ´§·Õâè Á´ÙÅ LCD à¾×Íè ãË àËç¹Ç ÒâÁ´ÙÅ LCD ÊÒÁÒöáÊ´§¤ ÒµÑÇàÅ¢ä´ áµ ¨Ðµ ͧ à»ÅÕÂè ¹¤ ÒµÑÇàÅ¢ãË ÍÂÙã ¹ÃÙ»¢Í§ÃËÑÊáÍÊ¡Õ¡é Í ¹ â´Â㪠¿§ ¡ ª¹Ñè ByteToStr

â»Ãá¡ÃÁ·Õè L7-1 áÊ´§¡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹ÃٻẺµ Ò§æ

mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 97

6.3 ¿ §¡ ª¹Ñè Lcd8 µÔ´µ ͡ѺâÁ´ÙÅ LCD Ẻ 8 ºÔµ â´Â»¡µÔâÁ´ÙÅ LCD ÁÕ¢Ò·Õãè ª àª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 11 ¢Ò´ Ç¡ѹ¤×Í ¢Ò¢ ÍÁÙÅ D0 ¶Ö§ D7 ÃÇÁ 8 àÊ ¹ ¢Ò R/W ÊíÒËÃѺ¡ÒÃÊѧè Í Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺâÁ´ÙÅ LCD ¢Ò RS ÊíÒËÃѺàÅ×Í¡¡ÒÃà¢Õ¹¢ ÍÁÙÅËÃ×ͤíÒÊÑ§è ¢Ò E ÊíÒËÃѺàÍç¹àÍàºÔÅ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD ´Ñ§¹Ñ¹é ¿ §¡ ª¹Ñè LCD ÊíÒËÃѺ¡ÒõԴµ ͡ѺâÁ´ÙÅ LCD Ẻ 8 ºÔµ¨Ö§áµ¡µ Ò§¨Ò¡¿ §¡ ª¹Ñè LCD Áҵðҹ à¹×Íè §¨Ò¡ÁÕ¡Òõ Í㪠§Ò¹ÊÒÂÊÑ­­Ò³¤Ãº·Ø¡àÊ ¹ +5V +5V

R1 10k

32 1

MCLR

11

0.1PF 50V

+Vcc DSP1 LCD module 16x2

8DD

GND

1+

SW1 RESET

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

21+ $.&%% 12 31

8ss 8ss

Vo

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

30 29 28 27 22 21 20 19

RC0 15 RC2 RC3 OSC1

18

OSC2

4 22pF

17

5 XTAL 20MHz

22pF

ÃÙ»·Õè 6-3 áÊ´§¡ÒÃàª×Íè Áµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¡ÑºâÁ´ÙÅ LCD Ẻ 8 ºÔµ

2 3 1

VR1 10k BRIGHTNESS


98 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.3.1 ¿ §¡ ª¹Ñè Lcd8_Config 㪠ÊÒí ËÃѺ¡íÒ˹´¤ ÒµíÒá˹ §¾Íà µ·Õãè ª àª×Íè Áµ ͡Ѻ LCD áÅеíÒá˹ §¢Òµ Ò§ æ ·Õãè ª àª×Íè Áµ Í ¾Ã ÍÁ·Ñ§é ¡íÒ˹´¿ §¡ ª¹Ñè ¡Ò÷íÒ§Ò¹¾×¹é °Ò¹ãË ¡ºÑ âÁ´ÙÅ â´ÂÊÒÁÒöÊÅѺµíÒá˹ §¢Òä´ µÒÁµ ͧ¡Òà ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Config(unsigned short *ctrlport, unsigned short *dataport, unsigned short RS, unsigned short EN, unsigned short WR, unsigned short D7, unsigned short D6, unsigned short D5, unsigned short D4, unsigned short D3, unsigned short D2, unsigned short D1, unsigned short D0);

¾ÒÃÒÁÔàµÍà *ctrlport

ËÁÒ¶֧ ¾Íà µ·Õãè ª àª×Íè Áµ ͡Ѻ¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD

*dataport

ËÁÒ¶֧ ¾Íà µ·Õãè ª à¾×Íè àª×Íè Áµ ͡Ѻ¢Ò¢ ÍÁÙŢͧâÁ´ÙÅ LCD

RS

ËÁÒ¶֧ ¢Ò¾Íà µ·Õµè Í ¡Ñº¢Ò RS ¢Í§âÁ´ÙÅ LCD

EN

ËÁÒ¶֧ ¢Ò¾Íà µ·Õµè Í ¡Ñº¢Ò EN ¢Í§âÁ´ÙÅ LCD

WR

ËÁÒ¶֧ ¢Ò¾Íà µ·Õµè Í ¡Ñº¢Ò R/W ¢Í§âÁ´ÙÅ LCD

D7-D0

ËÁÒ¶֧ ¢Ò¾Íà µ·Õµè Í ¡Ñº¢Ò¢ ÍÁÙÅ D0 ¶Ö§ D7 ¢Í§âÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 6-5 Lcd8_Config(&PORTC,&PORTD,2,3,0,7,6,5,4,3,2,1,0);

µÑÇÍ ҧ¹Õàé Å×͡㪠PORTC à» ¹¾Íà µÊíÒËÃѺµ ͡Ѻ¢Ò¤Çº¤ØÁ áÅÐ㪠PORTD à» ¹¾Íà µÊíÒËÃѺµ Í ¡Ñº¢Ò¢ ÍÁÙÅ áÅСíÒ˹´¢Òàª×Íè Áµ ͵ÒÁáÊ´§ã¹ÃÙ»·Õè 6-3 ¹Ñ¹è ¤×Í ¢Ò¾Íà µ RC2 µ ͡Ѻ¢Ò RS ¢Í§âÁ´ÙÅ LCD ¢Ò¾Íà µ RC3 µ ͡Ѻ¢Ò E ¢Í§âÁ´ÙÅ LCD ¢Ò¾Íà µ RC0 µ ͡Ѻ¢Ò R/W ¢Í§âÁ´ÙÅ LCD ¢Ò¾Íà µ RD0 ¶Ö§ RD7 µ ͡Ѻ¢Ò D0 ¶Ö§ D7 ¢Í§âÁ´ÙÅ LCD


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 99

6.3.2 ¿ §¡ ª¹Ñè Lcd8_Init 㪠¡Òí ˹´µíÒá˹ §¾Íà µáÅТҢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õãè ª àª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ã¹áºº 8 ºÔµ ¾Ã ÍÁ·Ñ駡íÒ˹´¿ §¡ ªÑ蹡Ò÷íÒ§Ò¹¾×é¹°Ò¹ãË ¡ÑºâÁ´ÙÅ LCD ઠ¹à´ÕÂǡѺ¤íÒÊÑè§ Lcd8_Config áµ äÁ µÍ §¡íÒ˹´µíÒá˹ §¢Ò¾Íà µ·Õãè ª àª×Íè Áµ Í ÃкØà¾Õ§¾Íà µ·Õãè ª 㹡ÒÃàª×Íè Áµ Í ¡ÑºâÁ´ÙÅ LCD ෠ҹѹé ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Init(unsigned short *ctrlport, unsigned short *dataport);

¾ÒÃÒÁÔàµÍÃ

㪠¡Òí ˹´¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª àª×Íè Áµ ͡Ѻ¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD «Ö§è ÁÕ¡ÒáíÒ˹´µíÒá˹ §äÇ ´§Ñ ¹Õé

*ctrlport

¢Ò E ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µ¤Çº¤ØÁºÔµ 6 ¢Ò RS ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µ¤Çº¤ØÁºÔµ 4 ¢Ò R/W ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µ¤Çº¤ØÁºÔµ 5 *dataport

㪠¡Òí ˹´¾Íà µÊíÒËÃѺ¢Ò¢ ÍÁÙÅ â´ÂÁÕ¡ÒáíÒ˹´¡ÒÃàª×Íè Áµ ÍäÇ ´§Ñ ¹Õé

¢Ò D7 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 7 ¢Ò D6 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 6 ¢Ò D5 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 5 ¢Ò D4 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 4 ¢Ò D3 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 3 ¢Ò D2 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 2 ¢Ò D1 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 1 ¢Ò D0 ¢Í§âÁ´ÙÅ LCD µ ͡Ѻ¢Ò¾Íà µäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ºµÔ 0

µÑÇÍ ҧ·Õè 6-6 Lcd8_Init(&PORTC,&PORTD);

µÑÇÍ ҧ¹Õãé ª PORTC µ ͡Ѻ¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD áÅÐ㪠PORTD µ ͡Ѻ¢Ò¢ ÍÁÙÅ ¡ÒÃãÊ à¤Ã×Íè §ËÁÒ & ¹íÒ˹ Ò PORTC áÅÐ PORTD à¹×Íè §¨Ò¡µ ͧ¡ÒÃÃкض§Ö áÍ´à´Ãʢͧ¾Íà µ ǧ¨Ã¡ÒÃàª×Íè Áµ ÍÊíÒËÃѺ¤íÒÊÑ§è ¹Õáé Ê´§ã¹ÃÙ»·Õè 6-3


100 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.3.3 ¿ §¡ ª¹Ñè Lcd8_Out ¿ §¡ ª¹Ñè ¹Õãé ª ÊÒí ËÃÑºÊ §¢ ÍÁÙÅÍÍ¡ä»áÊ´§¼Å·ÕËè ¹ Ò¨Í LCD ¨Ðµ ͧÃкصÒí á˹ §á¶Ç (row) áÅеíÒá˹ §µÑÇÍÑ¡Éà (col) ¡ Í¹Ê §¢ ÍÁÙÅÍÍ¡ä» â´ÂÃٻẺ¢Í§¢ ÍÁÙŨÐà» ¹µÑÇÍÑ¡ÉõÑÇà´ÕÂÇËÃ×Í à» ¹¢ ͤÇÒÁ¡çä´ ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè Lcd8_Init ËÃ×Í Lcd8_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Out(unsigned short row, unsigned short col, char *text);

¾ÒÃÒÁÔàµÍÃ

ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµ è Í §¡ÒùíÒä»áÊ´§¼Å row

µÑÇÍ ҧ·Õè 6-6 Lcd8_Out(1, 3, “Hello!”);

à» ¹¡ÒÃÊ §¢ ͤÇÒÁ Hello ÍÍ¡ä»áÊ´§¼Å·Õ¨è Í LCD 㹺Ã÷Ѵ·Õè 1 àÃÔÁè ·Õµè Òí á˹ §µÑÇÍÑ¡ÉõÑÇ·Õè 3 ´Ñ§ÃÙ»

Hello

6.3.4 ¿ §¡ ª¹Ñè Lcd8_Out_Cp à» ¹¤íÒÊÑ§è ·Õ·è Òí §Ò¹¤Å Ò¡Ѻ¤íÒÊѧè Lcd8_Out áµ ¤Òí ÊÑ§è ¹ÕÊé § ¢ ͤÇÒÁä»áÊ´§ÂѧµíÒá˹ §¢Í§ à¤Íà à«Íà »¨ ¨Øº¹Ñ ¨Ö§äÁ µÍ §ÃкصÒí á˹ §à¤Íà à«Íà ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè Lcd8_Init ËÃ×Í Lcd8_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Out_Cp(char *text);

¾ÒÃÒÁÔàµÍÃ

*text ËÁÒ¶֧

µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµè Í §¡ÒùíÒä»áÊ´§¼Å

µÑÇÍ ҧ·Õè 6-7 Lcd8_Out_Cp(“Here!”);

à» ¹¡ÒÃáÊ´§¢ ͤÇÒÁ 0AHA ·Õâè Á´ÙÅ LCD ã¹µíÒá˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 101

6.3.5 ¿ §¡ ª¹Ñè Lcd8_Chr à» ¹¡ÒÃÊ §¢ ÍÁÙÅ˹֧è 亵 ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ¨Ðµ ͧ¡íÒ˹´µíÒá˹ §á¶Ç (row) áÅÐ µíÒá˹ §µÑÇÍÑ¡Éà (col) ¡ Í¹Ê §¢ ÍÁÙÅÍÍ¡ä» ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè Lcd8_Init ËÃ×Í Lcd8_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Chr(unsigned short row, unsigned short col, char character);

¾ÒÃÒÁÔàµÍÃ

ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µ Õè Í §¡ÒùíÒä»áÊ´§¼Å row

µÑÇÍ ҧ·Õè 6-8 char i=0x30; void main() { Delay_ms(1000); Lcd8_Init(&PORTC,&PORTD); while(i<0x3A) { Lcd8_Chr(1,5,i); Delay_ms(1000); i++; } }

// Start String 0

// Start up Delay // E => RC6 : RS => RC4 : R/W => RC5 // Loop until i > 9 // Show i => LCD // Increment i

¨Ò¡µÑÇÍ ҧ໠¹¡ÒùíÒ¤ Ò i ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD â´ÂÁÕ¡ÒÃà¾ÔÁè ¤ ҢͧµÑÇá»Ã i ¨Ò¡ 0x30 仨¹ ¶Ö§¤ Ò 0x39 Ê Ç¹µíÒá˹ §¡ÒÃáÊ´§¼Å¨Ð¤§·ÕÍè ÂÙ· áÕè ¶Ç·Õè 1 ¤ÍÅÑÁ¹ ·Õè 5

0


102 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.3.6 ¿ §¡ ª¹Ñè Lcd8_Chr_Cp à» ¹¡ÒÃÊ §¢ ÍÁÙÅ˹֧è 亵 ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ·Õµè Òí á˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ ¡ ͹㪠§Ò¹ ¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè Lcd8_Init ËÃ×Í Lcd8_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Chr_Cp(char character);

¾ÒÃÒÁÔàµÍà character

ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µÕè Í §¡ÒùíÒä»áÊ´§¼Å

µÑÇÍ ҧ·Õè 6-9 char i=0x30; void main() { Delay_ms(1000); Lcd8_Init(&PORTC,&PORTD); while(i<0x40) { Lcd8_Chr_Cp(i); Delay_ms(1000); i++; } }

// Start String 0

// Start up Delay // E=RC6:RS=RC4 // Loop until 16 character // Show i => LCD // Increment i

¨Ò¡µÑÇÍ ҧ·íÒ§Ò¹ä´ àª ¹à´ÕÂǡѺ¤íÒÊѧè LCD8_Chr àÁ×Íè àÅ×Íè ¹à¤Íà à«Íà µÑÇÍÑ¡É÷ÕÍè ÂÙº ¹¨ÍáÊ´§¼Å ¡ç¨ÐàÃÕ§µ Íà¹×Íè §¡Ñ¹ä´ ´Ñ§ÃÙ»

0 1 2 3 4 5 6 7 8 9 : ; < = >?


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 103

6.3.7 ¿ §¡ ª¹Ñè Lcd8_Cmd à» ¹¿ §¡ ª¹Ñè ·Õºè ÃèؤÒí ÊÑ§è ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ Ò§æ ´Ñ§áÊ´§ã¹µÒÃÒ§ µ Í仹Õé ÃÙ»ª×èÍẺ¡ÒÃ㪠§Ò¹¤íÒÊÑ§è ¤íÒÊÑè§ LCD_FIRST_ROW LCD_SECOND_ROW LCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_HOME LCD_CURSOR_OFF LCD_UNDERLINE_ON LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT Shift LCD_SHIFT_RIGHT

ÃÒÂÅÐàÍÕ´  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1 à¤ÅÕÂà ˹ Ò¨Í ä»ÂѧµíÒá˹ §àÃÔèÁµ ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ ÍÁÙÅã¹ RAM äÁ à»ÅÕè¹ » ´¡ÒÃáÊ´§¼Åà¤Íà à«Íà áÊ´§à¤Íà à«Íà ໠¹àÊ ¹ªÔ´¢ÍºÅ Ò§¤ Ò§äÇ áÊ´§à¤Íà à«Íà Ẻ¡Ð¾ÃÔº àÅ×è͹à¤Íà à«Íà 价ҧ´ Ò¹« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×è͹à¤Íà à«Íà 价ҧ´ Ò¹¢ÇÒ ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ à» ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD » ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD àÅ×è͹¢ ÍÁÙÅä»·Ò§« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×è͹¢ ÍÁÙÅä»·Ò§¢ÇÒ ¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹

ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd8_Cmd(unsigned short command);

¾ÒÃÒÁÔàµÍà Command

ËÁÒ¶֧ ¤íÒÊѧè à¾×Íè ÊÑ§è §Ò¹ãË âÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ Ò§ æ


104 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 8 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd8 ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L8-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L8-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L8.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ LCD8test áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L8-1 L8.2 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ +5V +5V

R1 10k

32 1

MCLR

11

0.1 F 50V

+Vcc DSP1 LCD module 16x2

8DD

GND

1+

SW1 RESET

8ss 8ss

3 1

VR1 10k BRIGHTNESS

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

21+ $.&%% 12 31

Vo

2

RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

30 29 28 27 22 21 20 19

RC5 38 RC4 RC6 OSC1 4 22pF

37 39

OSC2 5 XTAL 20MHz

22pF

ÃÙ»·Õè L8-1 ǧ¨Ã·´Åͧ¡ÒÃàª×Íè Áµ ÍâÁ´ÙÅ LCD Ẻ 8 ºÔµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 105

char *text1 = "Innovative" ; char *text2 = "Experiment" ; char text3=0x30,i ; void main() { Lcd8_Init(&PORTC,&PORTD); Lcd8_Out(1,1,text1); Lcd8_Out(2,1,text2); Delay_ms(1000); Lcd8_Cmd(LCD_CLEAR); Lcd8_Out_Cp("Show Number 0-9"); Lcd8_Cmd(LCD_SECOND_ROW); while(text3<0x3A) { Lcd8_Chr_Cp(text3); text3++; // Increment number delay_ms(300); } for (i=0;i<16;i++) { Lcd8_Cmd(LCD_SHIFT_LEFT); delay_ms(300); } for (i=0;i<16;i++) { Lcd8_Cmd(LCD_SHIFT_RIGHT); delay_ms(300); } Lcd8_Cmd(LCD_CURSOR_OFF); }

// Initial default on PORTC // Show string from memory // Show string from memory // Clear LCD display // Show text on first row // Set cursor to second row

// Show number 0 to 9

// Shift display left

// Shift display right

// Off cursor

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁẠ§¡Ò÷íÒ§Ò¹´Ñ§¹Õé 1. ¡íÒ˹´¾Íà µ D à» ¹¾Íà µÊíÒËÃѺ¾Íà µ¢ ÍÁÙŢͧâÁ´ÙÅ LCD Ê Ç¹¾Íà µ C à» ¹¾Íà µ¤Çº¤ØÁ 2. ¹íÒ¢ ͤÇÒÁ Innovative

Experiment

áÊ´§·Õâè Á´ÙÅ LCD

3. ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·ÕáÅ Çà¤ÅÕÂà ˹ Ò¨ÍáÊ´§¼Å à¾×Íè áÊ´§¢ ͤÇÒÁ Show

Number 0-9

·Õºè Ã÷Ѵáá

4. ãË à¤Íà à«Íà ä»áÊ´§·Õºè Ã÷Ѵ·Õè 2 (ºÃ÷ѴŠҧ) à¾×Íè ÃÍ¡ÒÃáÊ´§¼Å·Õºè Ã÷Ѵ·Õè 2 5. ǹÅÙ»áÊ´§¤ ÒµÑÇàÅ¢ 0 ¶Ö§ 9 â´ÂáÊ´§áººäÅ ÅÒí ´Ñºä»Í ҧµ Íà¹×Íè § 6. Êѧè àÅ×Íè ¹¢ ͤÇÒÁä»´ Ò¹« ÒÂáÅСÅѺÁÒ·Õµè Òí á˹ §à´ÔÁ ¤ Ò§¢ ÍÁÙÅäÇ áÅ Ç» ´¡ÒÃáÊ´§¼Åà¤Íà à«ÍÃ

â»Ãá¡ÃÁ·Õè L8-1 ä¿Å LCD8test.c â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁ¡ÒÃáÊ´§¼ÅâÁ´ÙÅ LCD ´ Ç¿ §¡ ª¹Ñè Lcd8 ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


106 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

L8.3 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ ͤÇÒÁ

In n o v a t i v e Experiment áÅ Çà»ÅÕè¹໠¹

Show Number 0123456789

0- 9

mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 107

6.4 ¿ §¡ ªÑè¹ Lcd_Custom ÊíÒËÃѺ¡íÒ˹´¡ÒÃàª×èÍÁµ ÍâÁ´ÙÅ LCD âËÁ´ 4 ºÔµ Ẻ¡íÒ˹´¢ÒàÍ§ä´ ÊíÒËÃѺ¡ÒÃÍ͡Ẻǧ¨Ã㹺ҧ¤ÃÑé§äÁ ÊÒÁÒö¡íÒ˹´¢Ò¾Íà µãË µÃ§µÒÁäźÃÒÃÕ LCD »¡µÔä´ mikroC ä´ àµÃÕÂÁ¿ §¡ ªÑè¹ Lcd_Custom à¾×èͪ ÇÂãË ÊÒÁÒö¡íÒ˹´¢Ò¾Íà µ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ãË ÊÒÁÒöàª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ä´ Í ҧÍÔÊÃÐ â´ÂÃͧÃѺ¡ÒÃàª×Íè Áµ ÍẺ 4 ºÔµ ¢Ò¾Íà µ·Õãè ª µÍ ¡Ñº¢Ò¢ ÍÁÙŨе ͧÍÂÙã ¹¾Íà µ¡ÅØÁ à´ÕÂǡѹ Ê Ç¹¢Ò¾Íà µ·Õãè ª µÍ ¡Ñº¢Ò¤Çº¤ØÁ ¢Í§âÁ´ÙÅ LCD ¡çµÍ §ÍÂÙã ¹¾Íà µ¡ÅØÁ à´ÕÂǡѹઠ¹¡Ñ¹ áµ ¢Ò¾Íà µ·Ñ§é 2 ¡ÅØÁ ¹ÕÊé ÒÁÒö㪠¤¹ÅСÅØÁ ä´ àÁ×Íè àÅ×͡㪠¿§ ¡ ª¹Ñé ¹Õé ¢Ò¾Íà µ·Õãè ª ÊÒí ËÃѺµÔ´µ ͡ѺâÁ´ÙÅ LCD ¨Ðµ ͧ¡íÒ˹´ãË à» ¹¢Ò¾Íà µ àÍÒµ ¾µØ ¡ ͹àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õé

6.4.1 ¿ §¡ ª¹Ñè Lcd_Custom_Config ¿ §¡ ª¹Ñè ¹Õãé ª ÊÒí ËÃѺ¡íÒ˹´¾Íà µáÅТҾÍà µ·Õãè ª àª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ¾Ã ÍÁ·Ñ§é ¡íÒ˹´ ¿ §¡ ª¹Ñè ¡Ò÷íÒ§Ò¹¾×¹é °Ò¹ãË ¡ºÑ âÁ´ÙÅ â´ÂÊÒÁÒöÊÅѺµíÒá˹ §¢Ò¾Íà µ·Õãè ª àª×Íè Áµ Íä´ µÒÁµ ͧ¡Òà ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Config(char * data_port, char D7, char D6, char D5, char D4, char * ctrl_port, char RS, char WR, char EN);

¾ÒÃÒÁÔàµÍà *dataport D7-D4

㪠¡Òí ˹´¾Íà µÊíÒËÃѺàª×Íè Áµ ͡Ѻ¢Ò¢ ÍÁÙŢͧâÁ´ÙÅ LCD

ËÁÒ¶֧ µíÒá˹ §ºÔµ¢Í§¢Ò¾Íà µ¢ ÍÁÙÅ·Õãè ª µÍ ¡Ñº¢Ò D7 ¶Ö§ D4 ¢Í§âÁ´ÙÅ LCD

*ctrlport

㪠¡Òí ˹´¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª àª×Íè Áµ ͡Ѻ¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD

RS

ËÁÒ¶֧ µíÒá˹ §ºÔµ¢Í§¢Ò¾Íà µ¤Çº¤ØÁ·Õãè ª ÊÒí ËÃѺ¢Ò RS ¢Í§âÁ´ÙÅ LCD

EN

ËÁÒ¶֧ µíÒá˹ §ºÔµ¢Í§¢Ò¾Íà µ¤Çº¤ØÁ·Õãè ª ÊÒí ËÃѺ¢Ò EN ¢Í§âÁ´ÙÅ LCD

WR

ËÁÒ¶֧ µíÒá˹ §ºÔµ¢Í§¢Ò¾Íà µ¤Çº¤ØÁ·Õãè ª ÊÒí ËÃѺ¢Ò R/W ¢Í§âÁ´ÙÅ LCD

µÑÇÍ ҧ·Õè 6-10 Lcd_Custom_Config(&PORTD,7,6,5,4,&PORTC,4,5,6);

à» ¹¡ÒÃàÅ×͡㪠PORTD à» ¹¾Íà µÊíÒËÃѺ¢Ò¢ ÍÁÙÅ áÅÐ㪠PORTC à» ¹¾Íà µÊíÒËÃѺ¢Ò¤Çº¤ØÁ ÁÕ ¡ÒáíÒ˹´¢Òàª×Íè Áµ ÍáÊ´§ã¹ÃÙ»·Õè 6-4


108 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ +5V +5V

R1 10k

32 1

MCLR

11

0.1 F 50V

8DD

D7 D6 D5 D4 14 13 12 11

21+ $.&%% 12 31

8ss 8ss

Vo GND

1+

SW1 RESET

+Vcc DSP1 LCD module 16x2

RD7 RD6 RD5 RD4

2 3 1

VR1 10k BRIGHTNESS

R/W RS E 4 6 5

30 29 28 27

RC5 38 RC4 RC6

OSC1

39

OSC2

4 22pF

37

5 XTAL 20MHz

22pF

ÃÙ»·Õè 6-4 ¡ÒÃàª×Íè Áµ ÍâÁ´ÙÅ LCD ࢠҡѺ PIC16F877 µÒÁ¿ §¡ ª¹Ñè Lcd_Custom_Config()

6.4.2 ¿ §¡ ª¹Ñè Lcd_Custom_Out à» ¹¿ §¡ ª¹Ñè ¹ÕÊé § ¢ ÍÁÙÅä»áÊ´§¼Å·Õâè Á´ÙÅ LCD µ ͧÃкصÒí á˹ §á¶Ç (row) áÅÐ µíÒá˹ § µÑÇÍÑ¡Éà (col) ¡ Í¹Ê §¢ ÍÁÙÅÍÍ¡ä» ÃٻẺ¢Í§¢ ÍÁÙŨÐà» ¹µÑÇÍÑ¡ÉõÑÇà´ÕÂÇËÃ×Íà» ¹¢ ͤÇÒÁ¡ç ä´ â´Â㹡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Lcd_Custom_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Out(char row, char col, char *text);

¾ÒÃÒÁÔàµÍÃ

ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµ è Í §¡ÒùíÒä»áÊ´§¼Å row

µÑÇÍ ҧ·Õè 6-11 Lcd_Custom_Out(1, 3, “Hello!”);

à» ¹¡ÒÃÊ §¢ ͤÇÒÁ Hello ä»áÊ´§·Õâè Á´ÙÅ LCD 㹺Ã÷Ѵ·Õè 1 (ºÃ÷Ѵº¹) àÃÔÁè ·Õµè Òí á˹ §ÍÑ¡ÉõÑÇ·Õè 3

Hello


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 109

6.4.3 ¿ §¡ ª¹Ñè Lcd_Custom_Out_Cp à» ¹¿ §¡ ªÑè¹·Õè·íÒ§Ò¹¤Å Ò¡Ѻ¿ §¡ ªÑè¹ Lcd_Custom_Out áµ ¤íÒÊÑ觹ÕéÊ §¢ ͤÇÒÁä»áÊ´§·Õè µíÒá˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ 㹡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Lcd_Custom_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Out_Cp(char *text);

¾ÒÃÒÁÔàµÍÃ

*text ËÁÒ¶֧

µÑÇÍÑ¡ÉÃËÃ×Í¢ ͤÇÒÁ·Õµè Í §¡ÒùíÒä»áÊ´§¼Å

µÑÇÍ ҧ·Õè 6-12 Lcd_Custom_Out_Cp(“Here!”);

à» ¹¡ÒÃáÊ´§¢ ͤÇÒÁ 0AHA ·Õâè Á´ÙÅ LCD ã¹µíÒá˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ

6.4.4 ¿ §¡ ª¹Ñè Lcd_Custom_Chr à» ¹¿ §¡ ª¹Ñè Ê §¢ ÍÁÙÅ˹֧è 亵 ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â¡ Í¹Ê §µ ͧ¡íÒ˹´µíÒá˹ §á¶Ç (row) áÅеíÒá˹ §µÑÇÍÑ¡Éà (col) 㹡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Lcd_Custom_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Chr(char row, char col, char character);

¾ÒÃÒÁÔàµÍÃ

ËÁÒ¶֧ µíÒá˹ §á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹ §µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃè ÐºØ character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µ Õè Í §¡ÒùíÒä»áÊ´§¼Å row

µÑÇÍ ҧ·Õè 6-13 char i=0x30; // Start String 0 void main() { TRISC=0b10001111; // Bit 4-6 as OUTPUT TRISD=0x0F; // Bit 4-7 as OUTPUT Delay_ms(1000); // Start up Delay Lcd_Custom_Config(&PORTD,7,6,5,4,&PORTC,4,5,6); while(i<0x3A) // Loop until i > 9 { Lcd_Custom_Chr(1,5,i); // Show i => LCD Delay_ms(1000); i++; // Increment i } }

à» ¹¡ÒùíÒ¤ Ò i ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD áÅ Çà¾ÔÁè ¤ Ңͧ i ¨Ò¡ 0x30 ¶Ö§ ¤ Ò 0x39 â´ÂáÊ´§¼Å·Õáè ¶Ç·Õè 1 (ºÃ÷Ѵº¹) ¤ÍÅÑÁ¹ ·Õè 5


110 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

6.4.5 ¿ §¡ ª¹Ñè Lcd_Custom_Chr_Cp à» ¹¿ §¡ ª¹Ñè Ê §¢ ÍÁÙÅ˹֧è 亵 ä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ·Õµè Òí á˹ §à¤Íà à«Íà »¨ ¨Øº¹Ñ 㹡Òà 㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Lcd_Custom_Config ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Chr_Cp(char character);

¾ÒÃÒÁÔàµÍà character

ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵 ·µÕè Í §¡ÒùíÒä»áÊ´§¼Å

µÑÇÍ ҧ·Õè 6-14 char i=0x30; // Start String 0 void main() { TRISC=0b10001111; // Bit 4-6 as OUTPUT TRISD=0x0F; // Bit 4-7 as OUTPUT Delay_ms(1000); // Start up Delay Lcd_Custom_Config(&PORTD,7,6,5,4,&PORTC,4,5,6); Lcd_Custom_Cmd(LCD_CLEAR); while(i<0x40) // Loop until i > 9 { Lcd_Custom_Chr_Cp(i); // Show i => LCD Delay_ms(1000); i++; // Increment i } }

¨Ò¡µÑÇÍ ҧ·íÒ§Ò¹ä´ àª ¹à´ÕÂǡѺ¤íÒÊѧè LCD_Custom_Chr àÁ×Íè àÅ×Íè ¹à¤Íà à«Íà µÑÇÍÑ¡É÷ÕÍè ÂÙº ¹ ¨ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¡ç¨ÐàÃÕ§µ Íà¹×Íè §¡Ñ¹ä´ ´Ñ§ÃÙ»

0 1 2 3 4 5 6 7 8 9 : ; < = >?


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 111

6.4.6 ¿ §¡ ª¹Ñè Lcd_Custom_Cmd à» ¹¿ §¡ ª¹Ñè ·Õºè ÃèؤÒí ÊÑ§è ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ Ò§æ ´Ñ§áÊ´§ã¹µÒÃÒ§ µ Í仹Õé ª×èͤíÒÊÑè§ LCD_FIRST_ROW LCD_SECOND_ROW LCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_HOME LCD_CURSOR_OFF LCD_UNDERLINE_ON LCD_BLINK_CURSOR_ON LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT Shift LCD_SHIFT_RIGHT

ÃÒÂÅÐàÍÕ´  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1  ÒÂà¤Íà à«Íà ä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµ ¹·Õè¤ÍÅÑÁ¹ ·Õè 1 à¤ÅÕÂà ˹ Ò¨Í ä»ÂѧµíÒá˹ §àÃÔèÁµ ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ ÍÁÙÅã¹ RAM äÁ à»ÅÕè¹ » ´¡ÒÃáÊ´§¼Åà¤Íà à«Íà áÊ´§à¤Íà à«Íà ໠¹àÊ ¹ªÔ´¢ÍºÅ Ò§¤ Ò§äÇ áÊ´§à¤Íà à«Íà Ẻ¡Ð¾ÃÔº àÅ×Íè ¹à¤Íà à«Íà 价ҧ´ Ò¹« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×Íè ¹à¤Íà à«Íà 价ҧ´ Ò¹¢ÇÒ ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ à» ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD » ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD àÅ×Íè ¹¢ ÍÁÙÅä»·Ò§« Ò ¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹ àÅ×Íè ¹¢ ÍÁÙÅä»·Ò§¢ÇÒ ¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ RAM äÁ à»ÅÕè¹

ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Lcd_Custom_Cmd(char out_char);

¾ÒÃÒÁÔàµÍà Command

ËÁÒ¶֧ ¤íÒÊѧè à¾×Íè ÊÑ§è §Ò¹ãË âÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ Ò§ æ


112 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 9 Ê §¢ ÍÁÙÅáÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â㪠¿§ ¡ ª¹Ñè Lcd_Custom ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L9-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L9-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L9.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ LCDcustomTest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ ·Õè L9-1 L9.2 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ +5V +5V

R1 10k

32 1

MCLR

11

0.1 F 50V

+Vcc DSP1 LCD module 16x2

8DD

GND

1+

SW1 RESET

D7 D6 D5 D4 14 13 12 11

21+ $.&%% 12 31

8ss 8ss

Vo

RD7 RD6 RD5 RD4

2 3 1

VR1 10k BRIGHTNESS

R/W RS E 5 4 6

30 29 28 27

RC5 38 RC4 RC6

OSC1

39

OSC2

4 22pF

37

5 XTAL 20MHz

22pF

ÃÙ»·Õè L9-1 ǧ¨Ã·´Åͧ¡ÒÃàª×Íè Áµ ÍâÁ´ÙÅ LCD Ẻ¡íÒ˹´¢Ò¾Íà µÍÔÊÃТͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè Lcd_Custom


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 113

char *text1 = "Innovative" ; char *text2 = "Experiment" ; char text3=0x30,i ; void main() { TRISC=0b10001111; // Bit 4-6 as OUTPUT TRISD=0x0F; // Bit 4-7 as OUTPUT Delay_ms(1000); // Start up Delay Lcd_Custom_Config(&PORTD,7,6,5,4,&PORTC,4,5,6); Lcd_Custom_Cmd(LCD_CLEAR); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Out(1,1,text1); // Show string from memory Lcd_Custom_Out(2,1,text2); // Show string from memory Delay_ms(1000); Lcd_Custom_Cmd(LCD_CLEAR); // Clear LCD display Lcd_Custom_Out_Cp("Show Number 0-9"); // Show text on first row Lcd_Custom_Cmd(LCD_SECOND_ROW); // Set cursor to second row while(text3<0x3A) { Lcd_Custom_Chr_Cp(text3); // Show number 0 to 9 text3++; // Increment number delay_ms(300); } for (i=0;i<16;i++) { Lcd_Custom_Cmd(LCD_SHIFT_LEFT); // Shift display left delay_ms(300); } for (i=0;i<16;i++) { Lcd_Custom_Cmd(LCD_SHIFT_RIGHT); // Shift display right delay_ms(300); } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´ãË ¢Ò¾Íà µ·Õãè ª §Ò¹à» ¹¢ÒàÍÒµ ¾µØ ¨Ò¡¹Ñ¹é ¡íÒ˹´¤ ÒàÃÔÁè µ ¹¡ÑºâÁ´ÙÅ LCD â´Â 㪠¾Íà µ D à» ¹¾Íà µÊíÒËÃѺàª×èÍÁµ Í¢Ò¢ ÍÁÙÅ áÅоÍà µ C µ ͡Ѻ¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD ÅíҴѺµ Íä» â»Ãá¡ÃÁÊ §¤íÒÊÑè§à¤ÅÕÂà ˹ Ò¨Í » ´¡ÒÃáÊ´§¼Åà¤Íà à«Íà áÅ ÇáÊ´§¼Å¢ ͤÇÒÁ Innovative Experiment ·Õ¨è ÍáÊ´§¼Å ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·ÕáÅ Çà¤ÅÕÂà ˹ Ò¨ÍáÊ´§¼Å à¾×Íè áÊ´§¢ ͤÇÒÁ Show Number 0-9 ·Õºè Ã÷Ѵº¹ ¨Ò¡¹Ñ¹é ¡íÒ˹´ãË à¤Íà à«Íà ä»áÊ´§·Õºè Ã÷Ѵ·Õè 2 (ºÃ÷ѴŠҧ) à¾×Íè ÃÍ¡ÒÃáÊ´§¼Å·Õºè Ã÷Ѵ·Õè 2 â»Ãá¡ÃÁ ·íÒ¡ÒÃǹÅÙ»à¾×èÍÊ §¤ ÒµÑÇàÅ¢ 0 ¶Ö§ 9 à¾×èÍáÊ´§º¹âÁ´ÙÅ LCD â´ÂãË áÊ´§áººäÅ ÅíҴѺä»Í ҧµ Íà¹×èͧ ¨Ò¡¹Ñ¹é Êѧè àÅ×Íè ¹¢ ͤÇÒÁä»´ Ò¹« ÒÂáÅСÅѺÁÒ·Õµè Òí á˹ §à´ÔÁ

â»Ãá¡ÃÁ·Õè L9-1 ä¿Å LDCcustomTest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Åͧ¡ÒÃàª×Íè Áµ ÍâÁ´ÙÅ LCD Ẻ¡íÒ˹´¢Ò¾Íà µÍÔÊÃТͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC à¾×èÍ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ªÑè¹ Lcd_Custom ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


114 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

L9.3 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ ͤÇÒÁ

In n o v a t i v e Experiment áÅ Çà»ÅÕè¹໠¹

Show Number 0123456789

0- 9

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 115

º··Õè 7

¿ §¡ ª¹Ñè µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ÍÕÍ¾Õ ÃÍÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC Ê Ç¹ãË­ ¹Í¡¨Ò¡ÁÕ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿Åª ˹ Ç ¤ÇÒÁ¨íÒ¢ ÍÁÙÅáÃÁ ÂѧÁÕ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁà¾×Íè 㪠¾¡Ñ ¢ ÍÁÙÅËÃ×Íà¡çº¤ Òµ Ò§æ ·Õäè Á Ê­ Ù ËÒÂàÁ×Íè äÁ ÁÕä¿àÅÕé§ ´Ñ§¹Ñ鹡ÒõԴµ Íà¾×èÍÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÊ Ç¹¹Õé¨Ö§à» ¹ÊÔ觷Õè ¤ÍÁä¾àÅÍà ª¹Ñé ´Õ¾§Ö ÁÕ áÅÐ mikroC ¡çä´ àµÃÕÂÁä¿Å äźÃÒÃÕÊÒí ËÃѺ¡Ò÷íÒ§Ò¹¹Õäé Ç ´Ç Â

7.1 ¿ §¡ ª¹Ñè Eeprom_Read à» ¹¿ §¡ ªÑè¹ÊíÒËÃÑºÍ Ò¹¤ Ò¢ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁẺÃкصíÒá˹ § ã¹ ÃÐËÇ Ò§¡ÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙŨе ͧ˹ ǧàÇÅÒÍ ҧ¹ Í 20 ÁÔÅÅÔÇ¹Ô Ò·Õ à¾×Íè ãË ¡ÒÃà¢Õ¹¢ ÍÁÙÅàÊÃç¨ ÊÁºÙó ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Eeprom_Read(unsigned int address);

¾ÒÃÒÁÔàµÍà address

ËÁÒ¶֧ áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ·Õµè Í §¡ÒÃÍ Ò¹¤ Ò

¨ÐàËç¹Ç ÒµÑÇá»Ã address à» ¹µÑÇá»Ã int (16 ºÔµ) áÊ´§Ç Ò ¤íÒÊÑ§è ¹ÕÊé ÒÁÒöµÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒ ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁä´ ÁÒ¡¡Ç Ò 256 µíÒá˹ §

µÑÇÍ ҧ·Õè 7-1 unsigned short take; ... take = Eeprom_Read(0x3F);

¨Ò¡µÑÇÍ ҧ໠¹¡ÒÃÍ Ò¹¢ ÍÁÙÅ¢¹Ò´ 1 亵 ã¹Ë¹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁµíÒá˹ § 0x3F áŠǹíÒä» à¡çºäÇ ·µÕè ÇÑ á»Ã take


116 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

7.2 ¿ §¡ ª¹Ñè Eeprom_Write à» ¹¿ §¡ ª¹Ñè ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ â´Â¡ ͹à¢Õ¹¢ ÍÁÙŵ ͧ·íÒ¡Òà ´ÔÊàÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§ÍÔ¹àµÍÃ Ã»Ñ µ àÊÕ¡ ͹ à¾×Íè äÁ ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ÁҢѴ¨Ñ§ËÇСÒÃà¢Õ¹¢ ÍÁÙÅ ä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ ´ Ç¡ÒÃà¤ÅÕÂà ºµÔ GIE ã¹ÃÕ¨ÊÔ àµÍà INTCON ¡ÒÃà¢Õ¹¢ ÍÁÙŨе ͧ˹ ǧàÇÅÒÍ ҧ¹ Í 20 ÁÔÅÅÔÇ¹Ô Ò·Õà¾×Íè ãË ¡ÒÃà¢Õ¹¢ ÍÁÙÅÊÁºÙó ¡ ͹ ·Õè¨ÐÍ Ò¹¤ Ò¢ ÍÁÙÅ¡ÅѺ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Eeprom_Write(unsigned int address, unsigned short data);

¾ÒÃÒÁÔàµÍÃ

ËÁÒ¶֧ áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ·Õµè Í §¡ÒÃà¢Õ¹¢ ÍÁÙÅ ËÁÒ¶֧ ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà¢Õ¹ä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ

address data

µÑÇÍ ҧ·Õè 7-2 EEprom_Write(0x3F,0);

¨Ò¡µÑÇÍ ҧ໠¹¡ÒÃà¢Õ¹¤ Ò 0 ä»Âѧ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ·Õáè Í´à´ÃÊ 0x3F


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 117

»¯ÔºµÑ ¡Ô Ò÷Õè 10 ·´Êͺ¡ÒÃÍ Ò¹áÅÐà¢Õ¹ ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L10-1 㹡Ò÷´Åͧ ÊÒÁÒö㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC16F877 ËÃ×Í PIC16F887 ¡çä´ áµ µÍ §àÅ×Í¡ãË ¶¡Ù µ ͧàÁ×Íè ·íÒ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ´Ç  l Ëҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö·´ÅÍ§ä´ àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887 l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L10-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L10.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ EepromTest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L10-1 L10.2 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ +5V 11

32

C6 0.1PF 50V

+5V

1+! 21+ $.&&% RD2

+5V

RD3

R5 4k7 SW2 4-5-6

1 R6 1k

MCLR

RD7 RD6 RD5 RD4

JP1

21

4

22

6

30

RS E

DSP1 LCD 16x2

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

BLA +V Vo BLK GND 15 2

R13 16 47

BACK LIGHT ON

1 3 VR1 10k

BRIGHTNESS

29 28 27 12 31

CR1 Ceramic Resonator 20MHz

13

14

ÃÙ»·Õè L10-1 ǧ¨Ã·´Åͧ¡ÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


118 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char i,j=0x30; void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CLEAR); Lcd_Cmd(LCD_CURSOR_OFF); for (i=0;i<16;i++) { Lcd_Chr_Cp(j); Eeprom_Write(i,j++); } Delay_ms(20); Lcd_Cmd(LCD_SECOND_ROW); for (i=16;i>0;i--) { j=Eeprom_Read(i-1); Lcd_Chr_Cp(j); Delay_ms(500); } }

// J = Ascii[0]

// // // //

Use LCD show data Clear screen Cursor off 16 Byte writing

// Show writing data on LCD // Write EEPROM // Delay after write // Goto Line 2 // 16 Byte Reading // Read Last byte first // show on LCD

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ·íÒ¡ÒÃǹÅÙ» 16 ¤Ãѧé à¾×Íè à¢Õ¹¢ ÍÁÙŢͧµÑÇàÅ¢µÑ§é áµ 0 ¨¹¤Ãº 16 µÑÇä»Âѧ˹ ǤÇÒÁ¨íÒ ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ ¨Ò¡¹Ñé¹Í Ò¹¤ Ò¡ÅѺ â´ÂàÃÔèÁÍ Ò¹¤ Ò¨Ò¡áÍ´à´ÃÊËÅѧÊØ´¡ ͹ áŠǹíÒ¼ÅÅѾ¸ ä»áÊ´§¼Å·Õè ºÃ÷Ѵ·Õè 2 (ºÃ÷ѴŠҧ) ¢Í§âÁ´ÙÅ LCD

â»Ãá¡ÃÁ·Õè L10-1 ä¿Å EepromTest.c â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡ÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙÅ˹ ǤÇÒÁ¨íÒ ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà L10.3 Ãѹâ»Ãá¡ÃÁ ¡Ò÷´Åͧ¹Õãé ª âÁ´ÙÅ LCD 㹡ÒÃáÊ´§¼Å¢Í§¡ÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙšѺ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ â´ÂºÃ÷Ѵº¹¢Í§âÁ´ÙÅ LCD ¨ÐáÊ´§¢ ÍÁÙÅ·Õàè ¢Õ¹ Ê Ç¹ºÃ÷ѴŠҧ¨ÐáÊ´§¢ ÍÁÙÅ·ÕÍè Ò ¹¡ÅѺÁÒ â´ÂáÊ´§¤ Ò¨Ò¡ 亵 Ê´Ø · Ò¡ ͹

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 119

º··ÕÕè 8

¿ §¡ ªÑè¹Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ËÅÒÂæàºÍà ¨ÐÁÕâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŵԴ µÑ§é ÍÂÙÀ ÒÂã¹ ¡ÒÃÍ Ò¹¤ Ò¼ÅÅѾ¸ Ê­ Ñ ­Ò³ÍйÒÅÍ¡¨Ò¡âÁ´ÙŹÕé ¨Ðµ ͧÁÕ¡ÒáíÒ˹´¤ ÒËÅÒÂ¢Ñ¹é µÍ¹ áµ mikroC ä´ àµÃÕÂÁ¿ §¡ ª¹Ñè Adc_Read() àÍÒäÇ à¾×Íè ãË ÊÒÁÒÃ¶Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅä´ Í ҧ§ Ò æ

8.1 ¿ §¡ ª¹Ñè Adc_Read ¤íÒÊÑ§è ¹Õé ¡íÒ˹´ãË âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ·íÒ§Ò¹´ ÇÂǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³ ¹ÒÌ ¡ÒẺ RC ÀÒÂã¹ ª ͧÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò¹Ñ¹é ¢Ö¹é ÍÂÙ¡ ºÑ àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áµ ÅеÑÇ â´Â´Ùä´ ¨Ò¡´Òµ ÒªÕµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àºÍà ¹¹Ñé æ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned Adc_Read(unsigned short channel);

¾ÒÃÒÁÔàµÍà channel

ËÁÒ¶֧ ª ͧÊÑ­­Ò³ÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò

¡Òä׹¤ Ò

¤×¹¤ Òà» ¹µÑÇàÅ¢¨íҹǹàµçÁ ·Õè¤íҹdzÁÒ¨Ò¡¢ ÍÁÙÅàÅ¢°Ò¹Êͧ 10 ºÔµ«Öè§Í Ò¹ä´ ¨Ò¡âÁ´ÙÅá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧÍÔ¹¾ØµÍйÒÅÍ¡·ÕÃè кبҡµÑÇá»Ã channel

8.1.1 ¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ ¡ ͹㪠§Ò¹äźÃÒÃÕ ADC µ ͧ¡íÒ˹´ãË ¢Ò¾Íà µ·Õãè ª §Ò¹ãË à» ¹ÍÔ¹¾ØµàÊÕ¡ ͹ ¡µÑÇÍ ҧ µ ͧ¡ÒÃ㪠¢Ò AN0 «Ö§è à» ¹¢Ò¾Íà µ A ºÔµ 0 ¨Ö§µ ͧ¡íÒ˹´ãË ¾Íà µ A ºÔµ 0 à» ¹ÍÔ¹¾ØµàÊÕ¡ ͹ (Í ҧ äáçµÒÁ»¡µÔàÁ×Íè 㪠§Ò¹¤Ãѧé áá ¢Ò¹Õ¨é Ðà» ¹ÍÔ¹¾ØµÍÂÙá Å Ç)


120 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

8.1.2 µÑÇÍ ҧ¡ÒÃ㪠§Ò¹àº×Íé §µ ¹ ã¹µÑÇÍ ҧâ»Ãá¡ÃÁµ Í仹Õàé » ¹¡ÒÃÍ Ò¹¤ Ò¨Ò¡ª ͧ AN0 ÁÒà¡çºã¹µÑÇá»Ã temp «Ö§è ¨Í§¾×¹é ·Õè äÇ à» ¹áºº int à¹×Íè §¨Ò¡¢ ÍÁÙżÅÅѾ¸ Á¢Õ ¹Ò´ 10 ºÔµ¨Ö§µ ͧà¡çºã¹µÑÇá»Ã·ÕÁè ¢Õ ¹Ò´ 16 ºÔµ int temp; void main() { temp = Adc_Read(0); }

// read analog value from channel 0

8.2 ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŢͧ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ¡ÒÃ㪠§Ò¹¤íÒÊÑ觷Õèà¡ÕèÂÇ¢ ͧ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŢͧ mikroC ¤ÍÁ ä¾àÅÍà ãË ä´ »ÃÐ⪹ ʧ٠ÊØ´ ¤ÇÃÃÙ¨ ¡Ñ ¡ÑºÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅàÊÕ¡ ͹ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà PIC16F87x áÅÐ PIC16F87xA ÁÕÃÒÂÅÐàÍÕ´â´Â ÊÃØ»´Ñ§¹Õé CHS2:CHS0

ÊÇÔµª ÁÅÑ µÔà¾Åç¡«

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

8AIN áç´Ñ¹ÍйÒÅÍ¡ÍÔ¹¾Øµ

111

RE2/AN7

110

RE1/AN6

101

RE0/AN5

100

RA5/AN4

011

RA3/AN3/VREF+

010

VDD

001 000

8REF+ áç´Ñ¹Í Ò§ÍÔ§ VREF-

RA2/AN2/VREFRA1/AN1 RA0/AN0

PCFG3:PCFG0 PCFG3:PCFG0

áç´Ñ¹Í Ò§ÍÔ§

VSS

ÃÙ»·Õè 8-1 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅã¹ PIC16F87x


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 121

8.2.1 ÃÕ¨ÊÔ àµÍà ADRESH áÅÐ ÃÕ¨ÊÔ àµÍà ADRESL à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ 㪠à¡çº¼ÅÅѾ¸ ·äÕè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Adc_Read() äÁ µÍ §Í Ò§¶Ö§ÃÕ¨ÊÔ àµÍà ¹Õé áµ ËÅѧ¨Ò¡àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè Adc_Read() ¤ Ò·Õäè ´ ¨Ò¡¡ÒÃá»Å§¨Ðà¡çºäÇ ·ÕÃè ¨Õ ÊÔ àµÍà ·§Ñé ÊͧµÑǹÕé

8.2.2 ÃÕ¨ÊÔ àµÍà ADCON0 ÁÕ¢¹Ò´ 8 ºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ËÅÑ¡·Õãè ª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅ ÃÒÂÅÐàÍÕ´¡ÒÃ㪠§Ò¹ÁÕ´§Ñ ¹Õé ºÔµ 7

ADCON0

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ADCS1

ADCS0

CHS2

CHS1

CHS0

GO/DONE

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

ºÔµ 1 -

ºÔµ 0

ADON R/W -0

ºÔµ 7 áÅÐ 6 - ADCS1, ADCS0 (A/D Conversion Clock Select bits) : ºÔµàÅ×Í¡¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ ¹ÒÌ ¡Ò·Õè㪠㹡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ 00 - ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 2 (FOSC/2) 01 - ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 8 (FOSC/8) 10 - ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 32 (FOSC/32) 11 - 㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC (FRC) ¹Í¡¨Ò¡¹Ñ¹é Âѧ㪠ÃÇ Á¡ÑººÔµ ADCS2 (ºÔµ 6 ã¹ÃÕ¨ÊÔ àµÍà ADCON1) ੾ÒÐã¹Í¹Ø¡ÃÁ PIC16F87xA à¾×Íè àÅ×Í¡¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌ ¡Òä´ ÁÒ¡¢Öé¹ ºÔµ 5, 4 áÅÐ 3 - CHS2, CHS1, CHS0 (Analog Channel Select bits) : ºÔµàÅ×Í¡ª ͧÊÑ­­Ò³ ÍйÒÅÍ¡ 000 - ª ͧ 0 (AN0/RA0) 001 - ª ͧ 1 (AN1/RA1) 010 - ª ͧ 2 (AN2/RA2) 011 - ª ͧ 3 (AN3/RA3) 100 - ª ͧ 4 (AN4/RA5) 101 - ª ͧ 5 (AN5/RE0) äÁ ÁãÕ ¹Ãع 28 ¢Ò 110 - ª ͧ 6 (AN6/RE1) äÁ ÁãÕ ¹Ãع 28 ¢Ò 111 - ª ͧ 7 (AN7/RE2) äÁ ÁãÕ ¹Ãع 28 ¢Ò


122 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

ADON

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 2 - GO/DONE (A/D Conversion Status bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃá»Å§ÊÑ­­Ò³ ·íҧҹà ÇÁ¡ÑººÔµ ¡Ã³ÕºµÔ ADON à» ¹ 1 0 - ¡ÒÃá»Å§ÊÑ­­Ò³àÊÃç¨ÊÁºÙó ËÃ×ÍÂѧäÁ àÃÔÁè ¡ÒÃá»Å§ÊÑ­­Ò³ 1 - ÂѧÍÂÙã ¹ÃÐËÇ Ò§¡ÒÃá»Å§ÊÑ­­Ò³ ºÔµ¹ÕÂé §Ñ ÊÒÁÒöà¤ÅÕÂÃ ÍµÑ â¹ÁѵàÔ Á×Íè ¡ÒÃá»Å§àÊÃç¨ÊÁºÙó áÅÐà¤ÅÕÂà à¹×Íè §¨Ò¡à¡Ô´à¾ÒàÇÍà Í͹ÃÕ૵ ºÔµ 1 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0

ºÔµ 0 - ADON (A/D On bit) : ºÔµà» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 0 - » ´¡Ò÷íÒ§Ò¹ 1 - à» ´¡Ò÷íÒ§Ò¹

8.2.3 ÃÕ¨ÊÔ àµÍà ADCON1 à» ¹ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ·Õ·è Òí §Ò¹Ã ÇÁ¡Ñº ADCON0 ÁÕ¢¹Ò´ 8 ºÔµ â´ÂÃÕ¨ÊÔ àµÍà µÇÑ ¹Õãé ª ¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ·Õàè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ áÅÐ㪠àÅ×Í¡ÃٻẺ¢Í§¢ ÍÁÙżÅÅѾ¸ ·äÕè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ ºÔµ 7

ADCON1

ADFM

ºÔµ 6

ºÔµ 5

ADCS2*

-

ºÔµ 4 -

R/W -0

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

PCFG3

PCFG2

PCFG1

PCFG0

R/W -0

R/W -0

R/W -0

R/W -0

ºÔµ 7 - ADFM (A/D Result Format Select bit - ºÔµ 7) : ºÔµàÅ×Í¡ÃٻẺ¼ÅÅѾ¸ ¢Í§¡ÒÃá»Å§ÊÑ­­Ò³ 0 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´« Ò (left justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ 7

0 7 6 5

0

b b b b b b b b b b 0 0 0 0 0 0

ÃÕ¨ÊÔ àµÍà ADRESH

ÃÕ¨ÊÔ àµÍà ADRESL

1 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´¢ÇÒ (right justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ 7

2 1 0 7

0

> > > > > > > > > >

ÃÕ¨ÊÔ àµÍà ADRESH

ÃÕ¨ÊÔ àµÍà ADRESL


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 123

ºÔµ 6 - ADCS2 (A/D Conversion Clock Select bits) : ºÔµàÅ×Í¡¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò·Õãè ª 㹡ÒÃá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ºÔµ¹ÕÁé àÕ ©¾ÒÐã¹Í¹Ø¡ÃÁ PIC16F87xA µ ͧ㪠ÃÇ Á¡ÑººÔµ ADCS1 áÅÐ ADCS0 ã¹ÃÕ¨ÊÔ àµÍà ADCON0 ADCS2 ADCS1 ADCS1 ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Ò 0 0 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 2 (FOSC/2) 0 0 1 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 8 (FOSC/8) 0 1 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 32 (FOSC/32) 0 1 1 㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC (FRC) 1 0 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 4 (FOSC/4) 1 0 1 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 16 (FOSC/16) 1 1 0 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÒà 64 (FOSC/64) 1 1 1 㪠¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC (FRC) ºÔµ 5 áÅÐ 4 : äÁ 㪠§Ò¹ ¡íÒ˹´à» ¹ 0 ºÔµ 3, 2, 1 áÅÐ 0- PCFG3, PCFG2, PCFG1, PCFG0 (A/D Port Configuration Control bits - ) : ºÔµ¡íÒ˹´¡Òà ·íÒ§Ò¹¢Í§¢Ò¾Íà µ·Õãè ª ã¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé PCFG3:PCFG0

AN7

AN6

AN5

AN4

AN3

AN2

AN1

AN0

VREF+

VREF-

¨íҹǹÍÔ¹¾ØµÍйÒÅÍ¡ : ¨íҹǹÍÔ¹¾Øµáç´Ñ¹Í Ò§ÍÔ§

0000

A

A

A

A

A

A

A

A

VDD

VSS

8:0

0001

A

A

A

A

VREF+

A

A

A

AN3

VSS

7:1

0010

D

D

D

A

A

A

A

A

VDD

VSS

5:0

0011

D

D

D

A

VREF+

A

A

A

AN3

VSS

4:1

0100

D

D

D

D

A

D

A

A

VDD

VSS

3:0

0101

D

D

D

D

VREF+

D

A

A

AN3

VSS

2:1

011x

D

D

D

D

D

D

D

D

-

-

0:0

1000

A

A

A

A

VREF+

VREF-

A

A

AN3

AN2

6:2

1001

D

D

A

A

A

A

A

A

VDD

VSS

6:0

1010

D

D

A

A

VREF+

A

A

A

AN3

VSS

5:1

1011

D

D

A

A

VREF+

VREF-

A

A

AN3

AN2

4:2

1100

D

D

D

A

VREF+

VREF-

A

A

AN3

AN2

3:2

1101

D

D

D

D

VREF+

VREF-

A

A

AN3

AN2

2:2

1110

D

D

D

D

D

D

D

A

VDD

VSS

1:0

1111

D

D

D

D

VREF+

VREF-

D

A

AN3

AN2

1:2

A ¤×Í ÍÔ¹¾ØµÍйÒÅÍ¡, D ¤×Í ¾Íà µ´Ô¨µÔ ÍÅ, V REF+ ¤×Íáç´Ñ¹Í Ò§ÍÔ§¢ÒºÇ¡, V REF- ¤×Íáç´Ñ¹Í Ò§ÍÔ§¢Òź, V DD ¤×Í ä¿àÅÕÂé §, VSS ¤×Í¡ÃÒÇ´ , AN3 ¤×Í ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 3 áÅÐ AN2 ¤×Í ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 2


124 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

8.3 ¡ÒÃàÅ×Í¡¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ¡ÒÃàÅ×Í¡¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¢Í§¡ÒÃá»Å§ÊÑ­­Ò³¹ÕÁé ¤Õ ÇÒÁÊíҤѭÁÒ¡ à¹×Íè §¨Ò¡Áռŵ Í ¤ ÒàÇÅÒÃÇÁ㹡ÒÃá»Å§ÊÑ­­Ò³ â´Âã¹âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧ PIC16F87x µ ͧ㪠àÇÅÒá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ 10 ºÔµà· ҡѺ 12TAD â´Â¤ ÒàÇÅÒ TAD ¤×ͤ Ò àÇÅÒ·Õãè ª 㹡ÒÃá»Å§ÊÑ­­Ò³µ ͺԵ áÅФ Ò TAD ·Õ¹è Í Â·ÕÊè ´Ø ·ÕÂè §Ñ ¤§ãË ¼Å¡ÒÃá»Å§ÊÑ­­Ò³·Õ¶è ¡Ù µ ͧ ¤×Í 1.6 äÁâ¤ÃÇÔ¹Ò·Õ ´Ñ§¹Ñ¹é ¡ÒÃàÅ×Í¡¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Òµ ͧ¤íÒ¹Ö§¶Ö§» ¨¨Ñ¹մé Ç Â ¡ÒÃàÅ×Í¡¤ÇÒÁ¶Õ·è Òí ä´ â´Â¡íÒ˹´¢ ÍÁÙÅ㹺Ե ADCS1 áÅÐ ADCS0 ã¹Í¹Ø¡ÃÁ PIC16F87x Áҵðҹ áÅÐÊÒÁÒö㪠ºÔµ ADCS2 à¾ÔèÁ㹡óÕäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ͹ءÃÁ PIC16F87xA ã¹ µÒÃÒ§·Õè 8-1 áÊ´§¶Ö§¤ÇÒÁÊÑÁ¾Ñ¹¸ ¢Í§¡ÒÃàÅ×Í¡¤ÒºàÇÅÒÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍšѺ¤ÇÒÁ¶ÕÊè §Ù ÊØ´¢Í§ÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡à¾×Íè ãË ä´ ¤Ò TAD 1.6 äÁâ¤ÃÇÔ¹Ò·Õ Â¡µÑÇÍ ҧઠ¹·Õ¤è ÇÒÁ¶ÕÍè ÍÊ«ÔÅàÅàµÍà 20 MHz ¤ Ò 64TOSC ÁÕ¤Ò à· Ò¡Ñº 3.2 äÁâ¤ÃÇÔ¹Ò·Õ«§Öè ÁÕ ¤ ÒÁÒ¡·ÕÊè ´Ø ´Ñ§¹Ñ¹é àÁ×Íè 㪠¤ÇÒÁ¶Õè 20 MHz ¤ÇÃ㪠¤Ò 64TOSC ËÃ×Í㪠ÍÍÊ«ÔÅàÅàµÍà Ẻ RC ¤ÒºàÇÅÒÊÑ­­Ò³¹ÒÌԡҢͧâÁ´ÙÅ ADC

ADCS2:ADCS1:ADCS0

¤ÇÒÁ¶ÕèÊÙ§ÊØ´¢Í§ÊÑ­­Ò³¹ÒÌÔ¡ÒËÅÑ¡ (MHz)

6 OSC

000

1.25

"6 OSC

100

2.50

&6 OSC

001

5

$6 OSC

101

10

! 6 OSC

010

20

$"6 OSC

110

20

4+ (1,2)

x11

(2)

੾ÒÐã¹Í¹Ø¡ÃÁ PIC16F87xA à· Ò¹Ñé¹ (1) àÁ×èÍ㪠ǧ¨Ã RC ¤ Ò TAD »¡µÔ¨Ð෠ҡѺ 4 äÁâ¤ÃÇÔ¹Ò·Õ áµ ÊÒÁÒöÁÕ¤ Òä´ ÃÐËÇ Ò§ 2-6 äÁâ¤ÃÇÔ¹Ò·Õ (2) ¶ ÒËÒ¡¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌÔ¡ÒËÅÑ¡ÁÒ¡¡Ç Ò 1MHz ¤ÇÃ㪠ÊÑ­­Ò³¹ÒÌԡҨҡǧ¨Ã RC 㹡óշíÒ§Ò¹ã¹âËÁ´ÊÅÕ»

µÒÃÒ§·Õè 8-1 áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ¢Í§¤ÒºàÇÅÒÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡ à» ¹´Ô¨µÔ ÍÅ ¡Ñº¤ÇÒÁ¶ÕÊè §Ù ÊØ´¢Í§ÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡¢Í§ PIC16F87x(A)


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 125

»¯ÔºµÑ ¡Ô Ò÷Õè 11 ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Adc_Read() ¡Ñº PIC16F877A ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L11-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L11-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L11.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ ADCtest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L11-1 L11.2 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹

ÃÙ»·Õè L11-1 ǧ¨ÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡áÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 â´Â㪠¿§ ¡ ª¹Ñè Adc_Read ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


126 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

unsigned int temp_res; void main() { ADCON1 = 0x80; TRISA = 0xFF; TRISB = 0x3F; TRISD = 0; while(1) { temp_res = Adc_Read(2); PORTD = temp_res; PORTB = temp_res >> 2; } }

// // // //

Configure analog inputs and Vref PORTA is input Pins RB7, RB6 are outputs PORTD is output

// Get results of AD conversion // Send lower 8 bits to PORTD // Send 2 most significant bits to RB7, RB6

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÁ×Íè 㪠§Ò¹âÁ´ÙÅ ADC ¨Ðµ ͧ¡íÒ˹´ãË ¢Ò¾Íà µ·Õãè ª à» ¹ÍÔ¹¾Øµ Ê Ç¹¾Íà µ·Õàè ª×Íè Áµ ͡Ѻ LED ¤×;Íà µ D áÅоÍà µ B ºÔµ 6 áÅкԵ 7 ¹Ñ¹é µ ͧ¡íÒ˹´ãË à» ¹àÍÒµ ¾µØ ¡ÒÃÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŨÐÍ Ò¹¤ ÒÁÒà¡çºäÇ ã¹µÑÇá»Ã temp_res (à» ¹µÑÇá»ÃẺ interger 16 ºÔµ) ¨Ò¡¹Ñ¹é ¹íÒ¤ Ò 8 ºÔµ´ ҹŠҧ» ͹ãË ¡ºÑ ¾Íà µ B áÅ ÇàÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 2 ¤Ãѧé à¾×Íè ãË ºµÔ 8 áÅÐ 9 ¢Í§µÑÇá»Ã temp_res ¶Ù¡àÅ×Íè ¹ÁÒÍÂÙ· µÕè Òí á˹ §ºÔµ 6 áÅÐ 7 ¡ ͹·Õ¨è ÐÊ §ÍÍ¡áÊ´§ ·Õºè µÔ 6 áÅÐ 7 ¢Í§¾Íà µ B ¨Ò¡¹Ñ¹é ǹÅÙ»·íÒ«éÒí Í ҧµ Íà¹×Íè §

â»Ãá¡ÃÁ·Õè L11-1 ä¿Å ADCtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡ ÁÒáÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 â´Â㪠¿§ ¡ ª¹Ñè Adc_Read ¢Í§ mikroC ¤ÍÁä¾àÅÍà L6.3 ·´Åͧ»ÃѺ¤ ÒµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ VR1 Êѧࡵ¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò·Õè LED ¡Ò÷´Åͧ¹Õé¨ÐáÊ´§ãË àË繶֧¡ÒÃÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅá¼Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ áŠǹíÒ¤ Ò·Õè Í Ò¹ä´ áÊ´§¼ÅÍÍ¡·Õè LED ã¹ÃٻẺ¢Í§µÑÇàÅ¢°Ò¹Êͧ â´ÂáÊ´§¤ Ò¢ ÍÁÙÅ 10 ºÔµ´ Ç LED 10 ´Ç§ L6.4 ¤íҹdz¤ ÒàÅ¢°Ò¹Êͧ·ÕÍè ÂÙã ¹ÃÙ» LED ·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã·´ÅͧãË à» ¹¤ ÒµÑÇàÅ¢ÃÐËÇ Ò§ 0 ¶Ö§ 1,023

mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 127

8.4 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŢͧ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¿ §¡ ª¹Ñè Adc_Read()ÁÕ¢Í ¨íÒ¡Ñ´àÁ×Íè 㪠¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà ãËÁ æ ઠ¹ àºÍà PIC 16F887 (ã¹àÇÍà ª¹Ñ ËÅѧ¨Ò¡ 7.0.0.3 ÍÒ¨ÁÕ¡ÒÃá¡ »­ ËÒ¹Õ)é à¾×Íè ãË ÊÒÁÒö㪠§Ò¹¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ ·Ø¡àºÍà ·Ò§·Õè´Õ·ÕèÊØ´¡ç¤×Í¡ÒÃà¢Õ¹â»Ãá¡ÃÁµÔ´µ ͡ѺâÁ´ÙÅ ADC ´ ǵ¹àͧ ¨Ð¹íÒäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà àºÍà PIC16F887 ÁÒà» ¹µÑÇÍ ҧ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ ´Ñ§¹Ñ¹é ¨Ö§µ ͧÁÕ¤ÇÒÁÃÙà ¡ÕÂè ǡѺ ÃÕ¨ÊÔ àµÍà ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ·Õàè ¡ÕÂè Ç¢ ͧ´ ÇÂ

8.4.1 ÃÕ¨ÊÔ àµÍà ADRESH áÅÐ ÃÕ¨ÊÔ àµÍà ADRESL à» ¹ÃÕ¨ÔÊàµÍà ¢¹Ò´ 8 ºÔµ 㪠à¡çº¼ÅÅѾ¸ ·Õèä´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ 㹡ÒÃ㪠§Ò¹¿ §¡ ªÑè¹ Adc_Read() äÁ ¨Òí à» ¹µ Í§Í Ò§¶Ö§ÃÕ¨Ê Ô àµÍà ¹Õé áµ ËÅѧ¨Ò¡àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè Adc_Read() áŠǤ Ò ·Õèä´ ¨Ò¡¡ÒÃá»Å§¨Ðà¡çºäÇ ·ÕèÃÕ¨ÔÊàµÍà ·Ñé§ÊͧµÑǹÕé´ ÇÂ

8.4.2 ÃÕ¨ÊÔ àµÍà ADCON0 ÁÕ¢¹Ò´ 8 ºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ËÅÑ¡·Õãè ª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅ ÃÒÂÅÐàÍÕ´¡ÒÃ㪠§Ò¹ÁÕ´§Ñ ¹Õé ºÔµ 7

ADCON0

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

ADCS1

ADCS0

CHS3

CHS2

CHS1

CHS0

GO/DONE

ADON

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

ºÔµ 7 áÅÐ 6 : ADCS1 áÅÐ ADCS0 ºÔµ¡íÒ˹´ÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª ¡ºÑ âÁ´ÙÅ ADC â´Â 00 - FOSC/2 ÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 2 01 - FOSC/8 ÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 8 10 - FOSC/32 ÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 32 11 - FRC ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC ÀÒÂã¹ ¤ ÒÊÙ§ÊØ´ 500 kHz


128 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 5 ¶Ö§ 2 : CHS3 ¶Ö§ CHS0 ºÔµàÅ×Í¡ª ͧÊÑ­­Ò³ÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò 0000 - AN0 0001 - AN1 0010 - AN2 0011 - AN3 0100 - AN4 0101 - AN5 0110 - AN6 0111 - AN7 1000 - AN8 1001 - AN9 1010 - AN10 1011 - AN11 1100 - AN12 1101 - AN13 1110 - CVREF (áç´Ñ¹Í Ò§ÍԧẺâ»Ãá¡ÃÁä´ ÊÒí ËÃѺâÁ´ÙŤÍÁ¾ÒàÃàµÍà ) 1111 - áç´Ñ¹Í Ò§ÍÔ§¤§·Õè (0.6V) ºÔµ 1 : GO/DONE ºÔµàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC 0 = ¡ÒÃá»Å§¢ ÍÁÙÅàÊÃç¨ÊÔ¹é 1 - à» ¹¡ÒÃàÃÔÁè µ ¹¡ÒÃá»Å§¢ ÍÁÙÅ ÊíÒËÃѺ¡ÒõÃǨÊͺ¢ ÍÁÙÅ ¶ ÒºÔµ¹Õàé » ¹ 1 áÊ´§Ç ÒÍÂÙã ¹ÃÐËÇ Ò§¢Ñ¹é µÍ¹¡ÒÃá»Å¢ ÍÁÙÅ ºÔµ¹Õ¨é Ðà» ¹ 0 ÍѵâÁÁѵàÔ Á×Íè ¢Ñ¹é µÍ¹¡ÒÃá»Å§¢ ÍÁÙÅàÊÃç¨ÊÔ¹é ºÔµ 0 : ADON ºÔµàÍç¹àÍàºÔÅâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 0 - âÁ´ÙÅ ADC ¶Ù¡´ÔÊàÍàºÔÅ 1 - àÍç¹àÍàºÔÅâÁ´ÙÅ ADC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 129

8.4.3 ÃÕ¨ÊÔ àµÍà ADCON1 ÃÕ¨ÊÔ àµÍà ADCON1 㪠à¾×Íè ¡íÒ˹´¤ Òáç´Ñ¹Í Ò§ÍÔ§ãË ¡ºÑ âÁ´ÙÅ ADC áÅСíÒ˹´ÃٻẺ¢Í§ ¼ÅÅѾ¸ àÍÒµ ¾µØ ·ÕÃè ¨Õ ÊÔ àµÍà ADRESH áÅÐ ADRESL ADCON1

ºÔµ 7

ºÔµ 6 -

R/W -0

X -0

ADFM

ºÔµ 5

VCFG1

ºÔµ 4

VCFG0

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

R/W -0

R/W -0

X -0

X -0

X -0

X -0

-

-

ºÔµ 7 : ADFM ¡íÒ˹´ÃٻẺ¼ÅÅѾ¸ ·ÃÕè ¨Õ ÊÔ àµÍà ADRESH áÅÐ ADRESL 0 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´« Ò (left justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ 7

0 7 6 5

0

b b b b b b b b b b 0 0 0 0 0 0

ÃÕ¨ÊÔ àµÍà ADRESH

ÃÕ¨ÊÔ àµÍà ADRESL

1 - àÅ×Í¡¼ÅÅѾ¸ ẺªÔ´¢ÇÒ (right justified) ÁÕû٠Ẻ¢Í§¢ ÍÁÙŴѧ¹Õé ¼ÅÅѾ¸ 10 ºÔµ %

%

> > > > > > > > > >

ÃÕ¨ÊÔ àµÍà ADRESH

ºÔµ 6 : äÁ 㪠§Ò¹ Í Ò¹ä´ à» ¹ 0 ºÔµ 5 : VCFG1 ¢ÒàÅ×Í¡áç´Ñ¹Í Ò§ÍÔ§ (ź) 0 - VSS 1 - ¢Ò VREFºÔµ 4 : VCFG0: ¢ÒàÅ×Í¡áç´Ñ¹Í Ò§ÍÔ§ (ºÇ¡) 0 - VDD 1 - ¢Ò VREF+ ºÔµ 3 ¶Ö§ 0 : äÁ 㪠§Ò¹ Í Ò¹ä´ à» ¹ 0

ÃÕ¨ÊÔ àµÍà ADRESL

-

-


130 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

8.4.4 ÃÕ¨ÊÔ àµÍà ANSEL à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺàÅ×Í¡ãË ¢Ò¾Íà µ RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 ·íҧҹ໠¹¢Ò ¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×Í´Ô¨µÔ ÍÅ »¡µÔ¶Ò äÁ ä´ ¡Òí ˹´¤ Ò ¢ÒàËÅ Ò¹Õ¨é Ðà» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ «Ö§è ᵡµ Ò§¨Ò¡ PIC16F877 ·Õ¨è е ͧ¡íÒ˹´¢ÒàËÅ Ò¹Õ·é ÃÕè ¨Õ ÊÔ àµÍà ADCON1 ºÔµ 7

ANSEL

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

ANS7

ANS6

ANS5

ANS4

ANS3

ANS2

ANS1

ANS0

RE2 R/W -1

RE1 R/W -1

RE0 R/W -1

RA5 R/W -1

RA3 R/W -1

RA2 R/W -1

RA1 R/W -1

RA0 R/W -1

8.4.5 ÃÕ¨ÊÔ àµÍà ANSELH à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺàÅ×Í¡ãË ¢Ò¾Íà µ RB0 ¶Ö§ RB5 ·íҧҹ໠¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×Í ´Ô¨ÔµÍÅ »¡µÔ¶ ÒäÁ ä´ ¡íÒ˹´¤ Ò ¢ÒàËÅ Ò¹Õé¨Ðà» ¹¢ÒÍйÒÅÍ¡ ¢ ÍÃÐÇѧ µíÒá˹ §¢Í§ª ͧÍйÒÅÍ¡ áµ ÅЪ ͧäÁ ä´ àÃÕ§ÅíҴѺµÒÁµíÒá˹ §¢Ò¾Íà µ ઠ¹ ÍÔ¹¾Øµ AN8 ¨Ðà» ¹¢Ò¾Íà µ RB2 à» ¹µ ¹

.

ANSELH

ºÔµ 7

ºÔµ 6 -

ANS13

ANS12

ANS11

ANS10

ANS9

ANS8

X -0

X -0

RB5 R/W -1

RB0 R/W -1

RB4 R/W -1

RB1 R/W -1

RB3 R/W -1

RB2 R/W -1

-

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

8.5 ¢Ñ¹é µÍ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÔ´µ ͡ѺâÁ´ÙÅ ADC (1) ¡íÒ˹´¢Ò¾Íà µ ADC ·Õµè Í §¡ÒõԴµ ÍãË à» ¹¢ÒÍÔ¹¾Øµ â´Â¡íÒ˹´·ÕÃè ¨Õ ÊÔ àµÍà TRIS (2) ¡íÒ˹´¤ ÒãË ¡ºÑ ÃÕ¨ÊÔ àµÍà ANSEL áÅÐ ANSELH à¾×Íè ¡íÒ˹´ãË ¢Ò¾Íà µ·Õµè Í §¡ÒÃà» ¹ ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ (3) ¡íÒ˹´¤ Òáç´Ñ¹Í Ò§ÍÔ§áÅÐÃٻẺ¢Í§¼ÅÅѾ¸ ãË ª´Ô « ÒÂËÃ×Í¢ÇÒ¨Ò¡ÃÕ¨ÊÔ àµÍà ADCON1 (4) àÅ×Í¡ª ͧÍÔ¹¾Øµ·Õµè Í §¡ÒõԴµ Í áÅÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC â´Â¡íÒ˹´¤ Ò ·ÕÃè ¨Õ ÊÔ àµÍà ADCON0 (5) ¡íÒ˹´ºÔµ GO/DONE ã¹ÃÕ¨ÊÔ àµÍà ADCON0 ãË à» ¹ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃá»Å§¢ ÍÁÙÅ (6) Ãͨ¹ºÔµ Go/DONE à» ¹ 0 «Ö§è ËÁÒ¶֧ ¡ÒÃá»Å§¢ ÍÁÙÅÍйÒÅÍ¡àÊÃç¨ÊÔ¹é ¨Ò¡¹Ñ¹é Í Ò¹ ¤ Ò¢ ÍÁÙŨҡÃÕ¨ÊÔ àµÍà ADRESL áÅÐ ADRESH


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 131

»¯ÔºµÑ ¡Ô Ò÷Õè 12 Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅ ADC ´ Ç¡Òà à¢Õ¹â»Ãá¡ÃÁµÔ´µ Íâ´ÂµÃ§ ¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L12-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L12-1 áÅ Çà»ÅÕÂè ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F887 l

+5V

R11 10k

11 1

32 Vcc

C3 0.1PF

MCLR

RB7 40

SW1 RESET

RB6

21+ $.&&%

RD7

RD4 RD3 RD2 VR1 10k

4 12 31

39

LED8-bit7 LED7-bit6

28

LED6-bit5

27

LED5-bit4

22

LED4-bit3

21

LED3-bit2

RD1 20

AN2/RA2

RD0

GND

LED2-bit1

19

LED1-bit0 (LSB) R1-R10 510:

GND OSC1

OSC2

13 C1 22pF

LED9-bit8

30

RD6 29 RD5

+5V

LED10-bit9 (MSB)

14 XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L12-1 ǧ¨ÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡áÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ´ Ç¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÔ´µ ͡ѺâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅâ´ÂµÃ§


132 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¢Ñ鹵͹¡Ò÷´Åͧ L12.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L12.2 Êà ҧä¿Å â»Ãà¨ç¡µ ªÍ×è ADC_Test áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L12-1 L12.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L12.4 ·´Åͧ»ÃѺ¤ ÒµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ VR1 Êѧࡵ¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò·Õè LED LED ·Ñ§é 10 ´Ç§¨Ð㪠᷹¤ÇÒÁËÁÒ¢ͧàÅ¢°Ò¹Êͧ 10 ºÔµ «Ö§è à» ¹¼ÅÅѾ¸ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ â´Â LED10 ·Õµè Í ¡Ñº¾Íà µ RB7 ¨Ðá·¹ºÔµ¼ÅÅѾ¸ ·ÁÕè ¹Õ ÂÑ ÊíҤѭÊÙ§ÊØ´ (MSB) ËÃ×ͺԵ 9 ¨Ò¡¹Ñ¹é äÅ µÒÁÅíҴѺ¨¹¶Ö§ LED1 ·Õµè Í ¡Ñº¾Íà µ RD0 ¨Ðá·¹ºÔµ¼ÅÅѾ¸ ·ÁÕè ¹Õ ÂÑ ÊíҤѭµèÒí ÊØ´ (LSB) ËÃ×ͺԵ 0 L12.5 ¤íҹdz¤ ÒàÅ¢°Ò¹Êͧ·ÕÍè ÂÙã ¹ÃÙ» LED ·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã·´ÅͧãË à» ¹¤ ÒµÑÇàÅ¢ÃÐËÇ Ò§ 0 ¶Ö§ 1,023 void main() { TRISA = 0xFF; TRISB = 0x3F; TRISD = 0; ANSEL = 0xFF; ADCON1 = 0x80; ADCON0=0b11001001; while(1) { ADCON0.GO=1; while(ADCON0.GO); PORTD=ADRESL; PORTB=ADRESH*64; } }

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

PORTA => input Pins RB7, RB6 are outputs PORTD is output PORTA => Analog Select Vref and Right Justify Select Analog1 RC_Mode and ADON

// // // //

Start conversion Waiting conversion done? Load Low Byte to LED Load High Byte and shift left 6 bit to LED

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¨Ð¡íÒ˹´ãË ¾Íà µ A à» ¹ÍÔ¹¾Øµ ÃÇÁ·Ñ§é ¡íÒ˹´¤ ÒãË Ã¨Õ ÊÔ àµÍà ANSEL à¾×Íè ãË ¢Ò¾Íà µ A à» ¹ÍйÒÅÍ¡´ Ç ¨Ò¡¹Ñ¹é ¡íÒ˹´ãË ¾Íà µ D áÅÐ¢Ò RB6 ¡Ñº RB7 à» ¹àÍÒµ ¾µØ à¾×Íè áÊ´§¼Å LED µÒÁ´ Ç ¡ÒáíÒ˹´¤ ÒãË ¡ºÑ ÃÕ¨ÊÔ àµÍà ADCON0 áÅÐ ADCON1 à¾×Íè àÅ×͡㪠§Ò¹ª ͧÍÔ¹¾Øµ AN2 ¨Ò¡¹Ñ¹é ·íÒ¡ÒÃǹÅÙ» àÃÔÁè µ ¹¡ÒÃá»Å§¢ ÍÁÙÅâ´Â૵ºÔµ GO ¢Í§ ADCON0 à» ¹ 1 Ãͨ¹¡ÃÐ·Ñ§è ºÔµ ¹Õ¡é ÅÒÂà» ¹ 0 áÊ´§Ç Ò ¡ÒÃá»Å§àÊÃç¨ÊÁºÙó ãË ¹Òí ¤ Ò¼ÅÅѾ¸ ã¹ÃÕ¨ÊÔ àµÍà ADRESL » ͹ãË ¡ºÑ ÃÕ¨ÊÔ àµÍà PORTD áÅФ Ò¼ÅÅѾ¸ ã¹ÃÕ¨ÊÔ àµÍà ADRESH àÅ×Íè ¹ºÔµ¨Ò¡ºÔµ 0 áÅÐ 1 ä»à» ¹ºÔµ 6 áÅÐ 7 ´ Ç¡Òäٳ´ Ç 64 ¨Ò¡¹Ñ¹é » ͹ä»ÂѧÃÕ¨ÊÔ àµÍà PORTB à¾×Íè áÊ´§¼Å¡Ò÷íÒ§Ò¹·Õ¢è Ò¾Íà µ RB6 áÅÐ RB7

â»Ãá¡ÃÁ·Õè L12-1 ä¿Å ADC_Test1.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡ ÁÒáÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ´ Ç¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÔ´µ Í ¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅâ´ÂµÃ§ mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 133

»¯ÔºÑµÔ¡Ò÷Õè 13 Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅ ADC áÊ´§¼Å ·Õâè Á´ÙÅ LCD ¡Ò÷´Åͧ¹Õàé » ¹µÑÇÍ ҧ㹡ÒùíҼŷÕäè ´ ¨Ò¡¡ÒÃÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÒáÊ´§ÂѧâÁ´ÙÅ LCD â´Â¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÔ´µ ͡ѺâÁ´ÙÅ LCD ¹Ñ¹é àÅ×͡㪠¿§ ¡ ª¹Ñè LCD ¢Í§ mikroC ÊÒÁÒö´ÙÃÒÂÅÐàÍÕ´¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾ÔÁè àµÔÁä´ ¨Ò¡µÑÇÍ ҧ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè LCD ÊíÒËÃѺ¢ ÍÁÙŵÑÇàÅ¢·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³¡ ͹·Õ¨è йíÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ¨Ðµ ͧá»Å§ãË ÍÂÙã ¹ÃÙ» Ẻ¢Í§ÃËÑÊáÍÊ¡Õ¡é Í ¹ â´Â¶ Òà» ¹¤ Ò¨íҹǹàµçÁ¨Ð㪠¿§ ¡ ª¹Ñè WordToStr() 㹡ÒÃá»Å§¤ Ò áÅÐ㪠¿§ ¡ ª¹Ñè FloatToStr() 㹡ÒÃá»Å§¤ Ò¢ ÍÁÙÅ·Õàè » ¹àÅ¢·È¹ÔÂÁ

¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L13-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö·´ÅÍ§ä´ àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887 l

l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L13-1 áÅ Çà»ÅÕÂè ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F887

ÃÙ»·Õè L13-1 ǧ¨Ã·´Åͧ¡ÒÃÍ Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD


134 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

int dat=0; float volts; char txt1[6]; char txt2[13]; char *text1 ="DATA="; char *text2 ="Volt="; void main() { TRISA = 0xFF; ANSEL = 0xFF; ADCON1 = 0x00; ADCON0=0b11001001; Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); while(1) { ADCON0.GO=1; while(ADCON0.GO); dat = (ADRESH*4)+(ADRESL/64); WordToStr(dat,txt1); Lcd_Out(1,1,text1); Lcd_Out(1,6,txt1); volts=(dat*5.0)/1023.0; FloatToStr(volts,txt2); Lcd_Out(2,1,text2); Lcd_out(2,6,txt2); Delay_ms(300); Lcd_Cmd(LCD_CLEAR); } }

// Save ADC // Save String // Show Text

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

PORTA => input PORTA => Analog Select Vref and Right Justify Select Analog1 RC_Mode and ADON Init LCD Port LCD cursor off

// // // // //

Start conversion Waiting conversion done? Sum highbyte and lowbyte Convert Raw Data to String Show Line 1 Text

// Convert to Volt // Convert to String // Show LCD Line 2 // Clear LCD

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ 1.àÅ×Í¡¡Òõ ÍâÁ´ÙÅ LCD à» ¹áººÁҵðҹ¡Ñº¾Íà µ D ¨Ö§äÁ µÍ §ÁÕ¡ÒáíÒ˹´¢Ò¾Íà µ·Õàè ª×Íè Áµ Íã¹â»Ãá¡ÃÁ 2. ¼ÅÅѾ¸ ¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŶ١àÅ×Í¡ãË ÁÃÕ »Ù Ẻ¢ ÍÁÙŪԴ´ Ò¹« Ò (ADCON1 =0x00) 3. ǹÅÙ»Í Ò¹¤ Ò¨Ò¡Á´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¹íÒ¤ Ңͧ ADRESH áÅÐ ADRESL ÁÒÃÇÁ¡Ñ¹ â´Â¡ ͹¡ÒÃÃÇÁ¨Ðµ ͧàÅ×Íè ¹ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà ADRESH ä»·Ò§« Ò 2 ºÔµ (¤Ù³ 4) áÅÐàÅ×Íè ¹ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà ADRESL ä»·Ò§¢ÇÒ 6 ºÔµ (ËÒà 64) 4. ¹íÒ¤ Ò·Õäè ´ á»Å§à» ¹ÃËÑÊáÍÊ¡Õ¼é Ò ¹¿ §¡ ª¹Ñè WordToStr â´Âµ ͧ¨Í§¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ 6 亵 ÊÒí ËÃѺ à¡çº¼ÅÅѾ¸ ¡ ͹¹íÒ¤ Òä»áÊ´§·Õâè Á´ÙÅ LCD 5. ¤íҹdz¤ Ò·ÕÍè Ò ¹ä´ ÍÍ¡ÁÒã¹ÃÙ»¢Í§áç´Ñ¹ 0 ¶Ö§ 5V â´ÂãË ¤Ò ¼ÅÅѾ¸ à» ¹àÅ¢·È¹ÔÂÁ 6. á»Å§àÅ¢·È¹ÔÂÁãË à» ¹ÃËÑÊáÍÊ¡Õ¼é Ò ¹¿ §¡ ª¹Ñè FloatToStr â´Â¨Ðµ ͧ¨Í§¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ 13 亵 ÊíÒËÃѺà¡çº¼ÅÅѾ¸ ¡ ͹¹íÒ¤ ÒáÊ´§·Õâè Á´ÙÅ LCD

â»Ãá¡ÃÁ·Õè L13-1 ä¿Å ADCtestLCD.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÍ Ò¹¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡ ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 135

¢Ñ鹵͹¡Ò÷´Åͧ L13.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L13.2 Êà ҧä¿Å â»Ãà¨ç¡µ ªÍ×è ADCtestLCD áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L13-1 L13.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L13.4 ·´Åͧ»ÃѺ¤ ÒµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ VR1 Êѧࡵ¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò·Õâè Á´ÙÅ LCD àÁ×Íè Ãѹâ»Ãá¡ÃÁ áÅ Ç·´Åͧ»ÃѺ¤ ҢͧµÑǵ Ò¹·Ò¹ ·Õâè Á´ÙÅ LCD áÊ´§¼Å´Ñ§¹Õé

Data= 813 Volts=3.973606

INNOVATIVE EXPERIMENT


136 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 137

º··Õè 9

㪠§Ò¹¿ §¡ ª¹Ñè PWM ¢Í§ mikroC âÁ´ÙÅ CCP (Capture-Compare-PWM) à» ¹âÁ´ÙÅ·ÕÁè ÍÕ ÂÙÀ ÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÃдѺ ¡ÅÒ§ ÁÕ˹ Ò·Õãè ¹¡ÒõÃǨ¨ÑºÊÑ­­Ò³, à»ÃÕºà·ÕºÊÑ­­Ò³ áÅСíÒà¹Ô´ÊÑ­­Ò³ PWM (Pulse Width Modulation) ËÃ×ÍÊÑ­­Ò³Á´ÙàŪÑè¹·Ò§¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ÊíÒËÃѺ㹺·¹Õé¨Ð¡Å ÒǶ֧âÁ´ÙÅ CCP 㹡Ò÷íÒ§Ò¹Êà ҧÊÑ­­Ò³ PWM â´Â㪠¿§ ¡ ª¹Ñè PWM ·ÕÁè ÁÕ Ò¾Ã ÍÁ¡Ñº mikroC ¤ÍÁä¾àÅÍà ã¹ÃÙ»·Õè 9-1 áÊ´§µÑÇÍ ҧ¢Í§ÊÑ­­Ò³ PWM ·ÕÁè ¤Õ ÇÒÁ¡Ç ҧᵡµ Ò§¡Ñ¹ ÍÑ¹Ê §ãË à¡Ô´áç´Ñ¹ à©ÅÕèÂäÁ ෠ҡѹ´ Ç â´Â¶ ÒÂÔè§ÊÑ­­Ò³ PWM ÁÕ¤ÇÒÁ¡Ç ҧ෠Òã´ áç´Ñ¹ä¿µÃ§·Õèä´ ¨ÐÁÒ¡à· Ò¹Ñé¹ ¨Ö§ÊÒÁÒö¹íÒÊÑ­­Ò³ PWM ä»ãª 㹡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÃ ä¿µÃ§ä´ áç´Ñ¹ (V)

áç´Ñ¹ (V)

4.8V

4.8V

áç´Ñ¹à©ÅÕÂè

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

2.4V

(¡) áç´Ñ¹ (V)

áç´Ñ¹à©ÅÕÂè

àÇÅÒ

(¢) áç´Ñ¹ (V)

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

4 .8 V

àÇÅÒ

áç´Ñ¹à©ÅÕÂè ´ÔǵÕäé «à¡ÔÅ 25 %

4 .8 V

3 .6 V 1 .2 V

(¤)

àÇÅÒ

(§)

ÃÙ»·Õè 9-1 áÊ´§¡ÒÃà»ÃÕºà·Õº¤ Òáç´Ñ¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè 㪠PWM (¡) » ͹ÊÑ­­Ò³ä¿µÃ§ (¢) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 50% (¤) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 75% (§) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 25%

àÇÅÒ


138 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

µÑÇÍ ҧ¨Ò¡ÃÙ»·Õè 9-1 (¢) ÁÕ¤Ò ´ÔǵÕäé «à¡ÔÅ 50% ËÁÒ¶֧ ¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ªÇ §ºÇ¡ÁÕ¤ÇÒÁ ¡Ç ҧ໠¹ 50% ¢Í§¤ÇÒÁ¡Ç Ò§·Ñ§é ËÁ´ ´Ñ§¹Ñ¹é áç´Ñ¹à©ÅÕÂè ·Õäè ´ ෠ҡѺ (50 N 4.8) /100 = 2.4V ÊíÒËÃѺ ÃÙ»·Õè 9-1 (¤) áÅÐ (§) à» ¹¡ÒáíÒ˹´¤ Ò´ÔǵÕäé «à¡ÔÅ 75% áÅÐ 25% µÒÁÅíҴѺ 㹡ÒäǺ¤ØÁÁÍàµÍà â´Â»¡µÔ¹¹Ñé ¨Ð» ͹áç´Ñ¹ä¿µÃ§ãË ¡ºÑ ÁÍàµÍà ÁÍàµÍà ¡¨ç зíÒ§Ò¹àµçÁ ¡íÒÅѧ «Ö§è ÍÒ¨¨ÐÁÕ¤ÇÒÁàÃçÇÁÒ¡à¡Ô¹ä» ´Ñ§¹Ñ¹é ¡ÒûÃѺ¤ÇÒÁàÃçǢͧÁÍàµÍà ¨§Ö ãª Ç¸Ô ÅÕ ´áç´Ñ¹ä¿¿ Ò·Õ»è Í ¹ ãË ¡ºÑ ÁÍàµÍà ÇÔ¸·Õ ¹Õè ÂÔ Á¤×Í ¡Òû ͹¾ÑÅÊ ä»¢ÑºÁÍàµÍà ᷹ áÅ Ç»ÃѺ¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡ à¾×Íè ãË ä´ ¤Ò áç´Ñ¹à©ÅÕÂè µÒÁµ ͧ¡Òà ÇÔ¸¡Õ ÒùÕàé ÃÕÂ¡Ç Ò ¾ÑÅÊ Ç´Ô ¸ ÁÍ´ÙàÅàµÍà (PWM) â´Â¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡ àÁ×Íè à·Õº¡Ñº¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ·§Ñé ËÁ´àÃÕÂ¡Ç Ò ´ÔǵÕäé «à¡ÔÅ â´Â¨Ð¤Ô´¤ Ò´ÔǵÕäé «à¡ÔÅà» ¹à»Íà à«ç¹µ ¢Í§¤ Ò¤ÇÒÁ ¡Ç Ò§¾ÑÅÊ ·§Ñé ËÁ´ ã¹ mikroC ¤ÍÁä¾àÅÍÃ ä´ àµÃÕÂÁ¿ §¡ ª¹Ñè PWM äÇ ÃͧÃѺ¡ÒÃ㪠§Ò¹âÁ´ÙÅ CCP ã¹âËÁ´ Êà ҧÊÑ­­Ò³ PWM ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÕâÁ´ÙÅ PWM ÁÒ¡¡Ç Ò 1 ªØ´ ´Ñ§¹Ñ¹é ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè PWM ¨ÐẠ§à» ¹ PWM1 áÅÐ PWM2 ઠ¹ Pwm1_Start() à» ¹µ ¹

9.1 ¿ §¡ ª¹Ñè Pwm_Init à» ¹¤íÒÊÑ§è ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ã¹¡Ò÷íÒ§Ò¹ãË á¡ âÁ´ÙÅ PWM áÅСíÒ˹´¤ Ò´ÔǵÕäé «à¡ÔÅ෠ҡѺ 0 ¿ §¡ ª¹Ñè ¹Õ¨é е ͧ¶Ù¡àÃÕ¡¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè Í×¹è æ ÃٻẺ¡ÒÃ㪠§Ò¹ void Pwm_Init(unsigned long freq);

¾ÒÃÒÁÔàµÍà freq

㪠¡Òí ˹´¤ÇÒÁ¶Õ¢è ͧ PWM ˹ ÇÂà» ¹ Hz

µÑÇÍ ҧ·Õè 9-1 Pwm_Init(5000);

à» ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ PWM ·íÒ§Ò¹·Õ¤è ÇÒÁ¶Õè 5kHz


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 139

9.2 ¿ §¡ ª¹Ñè Pwm_Change_Duty à» ¹¤íÒÊÑ§è ¡íÒ˹´¤ Ò¤ÇÒÁ¡Ç Ò§¢Í§ÊÑ­­Ò³ PWM ËÃ×Í·Õàè ÃÕÂ¡Ç Ò ´ÔǵÕäé «à¡ÔÅ ÃٻẺ¡ÒÃ㪠§Ò¹ void Pwm_Change_Duty(unsigned short duty_ratio);

¾ÒÃÒÁÔàµÍÃ

ÁÕ¤Ò 0 ¶Ö§ 255 ÊíÒËÃѺ¤ Ò´ÔǵÕäé «à¡ÔÅ 0 ¶Ö§ 100% ઠ¹ ¶ Ò¤ Ò෠ҡѺ 0 ´ÔǵÕäé «à¡ÔŨÐà» ¹ 0% ËÒ¡¤ Ò෠ҡѺ 127 ´ÔǵÕäé «à¡ÔÅ෠ҡѺ 50%áÅж Ò෠ҡѺ 255 ¤ Ò´ÔǵÕäé «à¡ÔŨÐà» ¹ 100% ËÃ×ͤíÒ¹Ç³ä´ ¨Ò¡ duty_ratio

% ´ÔǵÕäé «à¡ÔÅ = (duty_ratio x 255)/100

µÑÇÍ ҧ·Õè 9-2 Pwm_Change_Duty(192);

à» ¹¡ÒáíÒ˹´¤ Ò´ÔǵÕäé «à¡ÔÅ 75% ãË á ¡ âÁ´ÙÅÊà ҧÊÑ­­Ò³ PWM

9.3 ¿ §¡ ª¹Ñè Pwm_Start à» ¹¿ §¡ ªÑè¹àÃÔèÁµ ¹¡Ò÷íÒ§Ò¹¢Í§¡ÒÃÊà ҧÊÑ­­Ò³ PWM 㹡ÒÃ㪠§Ò¹µ ͧàÃÕ¡¿ §¡ ªÑè¹ Pwm_Init áÅÐ Pwm_Change_Duty ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹ void Pwm_Start(void);

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

9.4 ¿ §¡ ª¹Ñè Pwm_Stop à» ¹¿ §¡ ª¹Ñè ËÂØ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM ÃٻẺ¡ÒÃ㪠§Ò¹ void Pwm_Stop(void);

µÑÇÍ ҧ·Õè 9-4 Pwm_Stop();


140 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 14 ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà ´Ç ¿ §¡ ª¹Ñè PWM 㹡Ò÷´Åͧ¹Õàé » ¹µÑÇÍ ҧ¡ÒÃÊà ҧÊÑ­­Ò³ PWM à¾×Íè ¹íÒ令Ǻ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà 俵ç â´Â·íҧҹà ÇÁ¡ÑºÇ§¨Ã¢ÑºÁÍàµÍà ·ãÕè ª äÍ«Õ¢ºÑ âËÅ´¡ÃÐáÊÊ٧ẺàͪºÃÔ´¨ (H-bridge) àºÍà L293D

¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L14-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö·´ÅÍ§ä´ àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹àºÍà PIC16F887 l

Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L9-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz ÊíÒËÃѺ LED ·Õãè ª áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ¹Ñ¹é à» ¹ LED 2 ÊÕ (á´§/à¢ÕÂÇ) 2 ¢Ò Ê Ç¹áç´Ñ¹ +Vm à» ¹áç´Ñ¹ä¿àÅÕÂé §ÊíÒËÃѺǧ¨Ã¢ÑºÁÍàµÍà «Ö§è µ ͧá¡ÍÍ¡ ¨Ò¡ä¿àÅÕÂé §¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC

l

K18A-K18B MOTOR-A +5V

11

C7 0.1 F 50V

+5V +Vm

32

C5 0.1 F 50V

RD0 RD1

19

2

20

7 2A

RC2/CCP1 17 RB1 RB2 RC1/CCP2

IC2 PIC16F887

16

1

1A

12EN

34

15 4A

35

10

16

9

8

Vcc1

1Y 3 2Y

+ +

R9 2k2

DIRECT LED3 DIR. #A

6

14 IC3 4Y L293D 11 3Y

LED4 DIR. #B

R10 2k2

3A

INVERT

34EN

13 12 5

4

INVERT

+

C8 0.1 F 50V

+

K19A-K19B MOTOR-B

DIRECT

Motor Driver CR1 Ceramic Resonator 20MHz

13

14

ÃÙ»·Õè L14-1 ǧ¨Ã¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà 俵ç â´Â㪠ʭ Ñ ­Ò³ PWM ·ÕÊè à ҧ¢Ö¹é ¨Ò¡äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC16F87/887 ´ Ç¿ §¡ ª¹Ñè PWM ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ void main() { /* Initial port for control motor */ ANSELH.F0=0; // RB1 ==> ANSELH.F2=0; // RB2 ==> TRISB.F1=0; // Motor B TRISB.F2=0; // Motor B TRISD.F0=0; // Motor A TRISD.F1=0; // MOtor A

l 141

Digital IO Digital IO 2A 2B 1A 1B

/* Initial PWM module freq = 5 kHz */ Pwm1_Init(5000); // Initail PWM 1E Pwm2_Init(5000); // Initail PWM 2E Pwm1_Start(); Pwm2_Start(); Pwm1_Change_Duty(190); // Motor A 75% Speed Pwm2_Change_Duty(190); // Motor B 75% Speed while(1) { PORTD.F0 =0;PORTD.F1 =1; // Motor A Forward PORTB.F1 =0;PORTB.F2 =1; // Motor B Forward Delay_ms(2000); PORTB.F1 =1;PORTB.F2 =0; // Motor B Backward PORTD.F0 =1;PORTD.F1 =0; // Motor A Backward Delay_ms(2000); } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¾ÑÅÊ Ç´Ô ¸ ÁÍ´ÙàŪѹè ËÃ×Í PWM äÇ ·Õè 5kHz ¼ Ò¹¤íÒÊѧè Pwm_Init() ¨Ò¡¹Ñ¹é àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM ´ Ç¡ÒÃÊ §¤íÒÊѧè Pwm_Start() áÅСíÒ˹´¤ Ò¤ÇÒÁ¡Ç Ò§¢Í§ ÊÑ­­Ò³ PWM ´ ǤíÒÊѧè Pwm_Chage_Duty()ã¹·Õ¹è ¡Õé Òí ˹´¤ ÒäÇ à· Ò¡Ñº 190 «Ö§è àÁ×Íè ¤íҹdz¤ ÒÍÍ¡à» ¹ à»Íà ૹµ ¨ÐÁÕ¤Ò »ÃÐÁÒ³ 75% àÁ×Íè ¹íÒ仢ѺÁÍàµÍà ÁÍàµÍà ¨ÐËÁعä»ã¹·ÔÈ·Ò§µÃ§ 2 ÇÔ¹Ò·Õ áÅÐËÁع¡ÅѺ 2 ÇÔ¹Ò·ÕÊÅѺ¡Ñ¹ä»àÃ×Íè  æ

â»Ãá¡ÃÁ·Õè L14-1 ä¿Å PWMtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà 俵ç â´Â㪠ʭ Ñ ­Ò³ PWM ·ÕÊè à ҧ¢Ö¹é ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87/887 ´ Ç¿ §¡ ª¹Ñè PWM ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


142 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¢Ñ鹵͹¡Ò÷´Åͧ L14.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ PWMtest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L9-1 L14.2 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L14.3 ¹íÒÁÍàµÍà 俵ç 6V ¨íҹǹ 2 µÑÇÁÒµ ÍࢠҡѺàÍÒµ ¾µØ ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà L14.4 ¨Ò¡¹Ñ¹é ¨ ÒÂä¿ãË á¡ Ç§¨Ã (¡) ¶ ÒËҡ㪠ºÍà ´ RBX-877 Rev.2007 ÊÒÁÒö¨ ÒÂ俪شà´ÕÂÇáÅ Ç·´ÅÍ§ä´ ·¹Ñ ·Õ (¢) ¶ Ò㪠ºÍà ´·´Åͧ NX-877 plus II ËÃ×͵ Íǧ¨Ã¢Ö¹é àͧ µ ͧËÒáËÅ §¨ ÒÂ俵ç +6V ÊíÒËÃѺǧ¨Ã¢Ñº ÁÍàµÍà ¨Ò Âá¡ãË µÒ §ËÒ¡ ¢Íá¹Ð¹íÒãË ãª áºµàµÍÃÕáè ºº»ÃШØä´ ËÃ×ÍẺµÐ¡ÑÇè -¡Ã´ ¶ ÒËҡ㪠ÍÅÑ ¤ÒäŹ ÍÒ¨ ·´ÅÍ§ä´ ã¹àÇÅÒäÁ ¹Ò¹¹Ñ¡ à¹×Íè §¨Ò¡áºµàµÍÃÕáè ººÍÑŤÒäŹ ÊÒÁÒö¨ Ò¡ÃÐáÊä¿¿ Òä´ äÁ ÁÒ¡¹Ñ¡ àÁ×Íè ¹íÒÁÒ ãª ¡ºÑ ÁÍàµÍà «Ö§è µ ͧ¡ÒáÃÐáÊä¿¿ Ò㹡Ò÷íÒ§Ò¹ÁÒ¡¾ÍÊÁ¤Çà (200mA ¢Ö¹é ä») ËÃ×Ͷ Òµ ͧ¡ÒÃ㪠ÍÐá´» àµÍà 俵ç¤ÇÃàÅ×͡Ẻ·ÕÁè ¤Õ ÇÒÁÊÒÁÒö㹡Òè Ò¡ÃÐáÊä¿¿ Ò 1000mA ¢Ö¹é ä» L14.5 Ãѹâ»Ãá¡ÃÁ áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ÁÍàµÍà ·§Ñé ÊͧµÑǨÐä´ ÃºÑ ¡ÒâѺãË ËÁعä»ã¹·ÔÈ·Ò§µÃ§ 2 ÇÔ¹Ò·Õ â´ÂÊѧ¡µä´ ¨Ò¡ä¿áÊ´§¡Ò÷íÒ§Ò¹ «Ö§è ¨Ðà» ¹ÊÕà¢ÕÂÇ·Ñ§é ¤Ù ¨Ò¡¹Ñ¹é ËÁع¡ÅѺ·ÔÈ·Ò§ 2 ÇÔ¹Ò·Õ ä¿áÊ´§¡Ò÷íÒ§Ò¹¨Ðà»ÅÕÂè ¹à» ¹ÊÕá´§ ËÒ¡äÁ µÃ§µÒÁ ¹ÕéãË ·íÒ¡ÒáÅѺ¢ÑéÇÁÍàµÍà ¨¹¡ÃзÑ觷ÔÈ·Ò§¡ÒÃËÁع¶Ù¡µ ͧ

INNOVATIVE EXPERIMENT


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 143

º··ÕÕè 10

¡ÒõԴµ Í USART âÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ ¾Íà µÍ¹Ø¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ

USART (Universal Synchronous Asynchronous Receiver Transmitter) à» ¹âÁ´ÙÅÊ×Íè ÊÒà ¢ ÍÁÙÅ͹ءÃÁà͹¡»ÃÐʧ¤ ·ÊÕè ÒÁÒö·íҧҹ໠¹µÑÇÃѺËÃ×ÍÊ §¢ ÍÁÙÅã¹áººÍЫԧâ¤Ã¹ÑÊ â´ÂÊÒÁÒö ¡íÒ˹´ÍѵÃÒàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅ (Baudrate) áÅФÇÒÁàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅä´ àÁ×Íè ¡íÒ˹´ãË ·Òí §Ò¹áºº¿ÙÅ´Ùà¾Åç¡« ÍЫԧâ¤Ã¹ÑÊ (full duplex asynchronous) ¨ÐÊÒÁÒöÃѺ Ê §¢ ÍÁÙÅ 2 ·ÔÈ·Ò§ä´ ã¹àÇÅÒà´ÕÂǡѹ ·Ñ§é ¹Õàé ¾×Íè 㪠µ´Ô µ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ËÃ×ÍÍØ»¡Ã³ à·Íà Á¹Ô ÍÅẺÍ×¹è

10.1 ¿ §¡ ª¹Ñè USART à¾×Íè ¡ÒÃÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁẺ¿ÙÅ´Ùà¾Åç¡« ¿ §¡ ª¹Ñè USART ¢Í§ mikroC ¤ÍÁä¾àÅÍà ÊÒÁÒö㪠¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕÁè âÕ Á´ÙÅ USART ÍÂÙÀ ÒÂã¹µÑÇ ÍÒ·Ô PIC16F877(A), PIC16F887 à» ¹µ ¹ â´Â¿ §¡ ª¹Ñè USART ¡íÒ˹´ÃٻẺ ¡ÒÃÊ×Íè ÊÒÃà» ¹áºº 8N1 ¤×Í ¨íҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ ºÔµËÂØ´ËÃ×ͺԵÊÔ¹é ÊØ´ 1 ºÔµ áÅÐäÁ Á¡Õ ÒõÃǨ Êͺ¾ÒÃÔµÕé â´Â¿ §¡ ª¹Ñè USART ÁÕ¤Òí ÊÑ§è ·Õàè ¡ÕÂè Ç¢ ͧ´Ñ§¹Õé

10.1.1 Usart_Init(

)

㪠à¾×Íè ¡íÒ˹´¤ ҢͧÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅËÃ×ͺʹàõ (baud rate) ãË ¡ºÑ ¡ÒÃÊ×Íè ÊÒà ¢ ÍÁÙÅ͹ءÃÁ â´Â¡íÒ˹´¤ Һʹàõŧä»ä´ â´ÂµÃ§ ¤ Һʹàõ¨Ðà» ¹µÑÇá»Ãª¹Ô´ Long (ÁÕ¤Ò 0 ¶Ö§ 4,294,967,295 ) áµ ¡ÒáíÒ˹´¤ ÒµÒÁ¤ÇÒÁà» ¹¨ÃÔ§äÁ ÊÒÁÒö¡íÒ˹´ä´ ¶§Ö ¤ ÒÊÙ§ÊØ´¢Í§µÑÇá»Ã ª¹Ô´ Long à¹×Íè §¨Ò¡¢ ͨíÒ¡Ñ´àÃ×Íè §¤ÇÒÁ¶Õãè ¹¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ


144 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ÃÙ»·Õè 10-1 áÊ´§¢ ͼԴ¾ÅÒ´àÁ×Íè ¤ Һʹàõ·Õ¡è Òí ˹´ äÁ ÊÒÁÒöÊÃ Ò§ä´ à¹×Íè §¨Ò¡¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³ ¹ÒÌ ¡ÒäÁ àËÁÒÐÊÁ ´Ñ§¹Ñ¹é ¤ Ò·Õ¹è ÂÔ Á¹íÒÁÒ㪠§Ò¹¤×Í ¤ Ò 2400, 9600, 19200, 57600 à» ¹µ ¹ àÁ×Íè ¡íÒ˹´¤ Һʹàõ ·Õµè ÇÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹à· Òã´ ·ÕÍè »Ø ¡Ã³ »ÅÒ·ҧ«Ö§è ·íÒ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ´ Ǩе ͧ¡íÒ˹´ ¤ ҺʹàõãË µÃ§¡Ñ¹´ Ç ¶ ÒËÒ¡ÁÕ¡ÒáíÒ˹´¤ Һʹàõ·ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC äÁ ÊÒÁÒö ÃͧÃÑºä´ ËÅѧ¨Ò¡¤ÍÁä¾Å â»Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ¨Ðᨠ§¢ ͼԴ¾ÅÒ´ÍÍ¡ÁҴѧÃÙ»·Õè 10-1 ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Usart_Init( ) ¨Ðµ ͧàÃÕ¡㪠§Ò¹¡ ͹¿ §¡ ª¹Ñè ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒÃ㪠§Ò¹ âÁ´ÙÅ USART µÑÇÍ×¹è æ à¹×Íè §¨Ò¡¿ §¡ ª¹Ñè ¹Õãé ª ÊÒí ËÃѺ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ã¹¡Ò÷íÒ§Ò¹ ÃٻẺ¡ÒÃ㪠§Ò¹ void Usart_Init(const long baud_rate);

µÑÇá»Ã baud_rate

ËÁÒ¶֧ ÍѵÃҺʹ·Õ¡è Òí ˹´¤ ÒãË ¡ºÑ ¡ÒÃÊ×Íè ÊÒÃÃÐËÇ Ò§µ ¹·Ò§áÅлÅÒ·ҧ

µÑÇÍ ҧ·Õè 10-1 Usart_Init(2400);

à» ¹¡ÒáíÒ˹´¤ Һʹàõ 2400 ºÔµµ ÍÇÔ¹Ò·Õ

10.1.2 Usart_Data_Ready ¿ §¡ ª¹Ñè ¹Õãé ª µÃǨÊÍºÇ Ò ¢ ÍÁÙÅ㹺ѿà¿Íà ¾Ã ÍÁÊíÒËÃѺ¡ÒÃÍ Ò¹¤ ÒËÃ×ÍäÁ ¿ §¡ ª¹Ñè ¹Õ¨é Ф׹ ¤ Ò 1 ¶ Ò¢ ÍÁÙÅ㹺ѿà¿Íà ¾Ã ÍÁÊíÒËÃÑºÍ Ò¹¤ Òä´ áÅФ׹¤ Ò 0 ¶ ÒäÁ Á¢Õ Í ÁÙÅÍÂÙã ¹ºÑ¿à¿Íà â´Â ¡ ͹¨Ð㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè Usart_Init() ¢Ö¹é ÁÒ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹ unsigned short Usart_Data_Ready(void);


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 145

10.1.3 Usart_Read ¿ §¡ ªÑè¹¹Õéãª Í Ò¹¤ Ò¢ ÍÁÙŨҡºÑ¿à¿Íà ¢Í§âÁ´ÙÅ USART â´Â¨Ð¤×¹¤ Ò¢ ÍÁÙÅ¢¹Ò´ 1 亵 ÍÍ¡ÁÒ áµ ¶Ò ÂѧäÁ Á¢Õ Í ÁÙÅ ¨Ð¤×¹¤ Ò 0 ¡ÅѺÍÍ¡ÁÒ ¡ ͹¡ÒÃ㪠§Ò¹¤íÒÊÑ§è ¹Õ¨é е ͧ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ ãË ¡ºÑ ¾Íà µÍ¹Ø¡ÃÁ â´Â㪠¤Òí Êѧè Usart_Init() ¡ ͹ áÅÐà¾×Íè ãË ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙŶ١µ ͧ ¤ÇõÃǨ Êͺ¤ Ңͧ¢ ÍÁÙÅ¡ ͹¡ÒÃÍ Ò¹´ Ç¿ §¡ ª¹Ñè Usart_Data_Ready ÃٻẺ¡ÒÃ㪠§Ò¹ unsigned short Usart_Read(void);

µÑÇÍ ҧ·Õè 10-2 if (Usart_Data_Ready()) { PORTB = Usart_Read(); }

¡Ò÷íÒ§Ò¹¤×Í ¶ ÒÁÕ¢Í ÁÙÅà¡çºÍÂÙã ¹ºÑ¿à¿Íà ãË ¹Òí ÁÒáÊ´§·Õè PORTB

10.1.4 Usart_Write ¿ §¡ ª¹Ñè ¹Õãé ª ʧ ¤ ÒÍÍ¡ä»Âѧ¾Íà µÍ¹Ø¡ÃÁ â´Â¢ ÍÁÙÅ data ·Õãè ª ʧ à» ¹¢ ÍÁÙÅ¢¹Ò´ 8 ºÔµ ¡ ͹ 㪠§Ò¹¤íÒÊÑ§è ¹Õ¨é е ͧÁÕ¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¾Íà µÍ¹Ø¡ÃÁ â´Â㪠Usart_Init( ) ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹ void Usart_Write(unsigned short data);

µÑÇá»Ã data

ËÁÒ¶֧ ¤ Ò·Õµè Í §¡ÒÃÊ §ÍÍ¡ä»Âѧ¾Íà µÍ¹Ø¡ÃÁ

µÑÇÍ ҧ·Õè 10-3 Usart_Write(DAT);

// Send data via USART

Ê §¤ Ò¢ ÍÁÙŨҡµÑÇá»Ã DAT ÍÍ¡ä»Âѧ¾Íà µÍ¹Ø¡ÃÁ


146 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 15 ¡ÒÃÃÑºÊ §¢ ÍÁÙÅÃÐËÇ Ò§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÍÁ¾ÔÇàµÍà ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ÁÕ¢Ò¾Íà µÊíÒËÃѺàª×Íè Áµ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ¤×Í¢Ò RC6/TxD áÅÐ¢Ò RC7/RxD àÁ×Íè µ ͧàª×Íè Áµ ͡Ѻ¤ÍÁ¾ÔÇàµÍà «§Öè 㪠Áҵðҹ RS-232 ¨Ðµ ͧÁÕäÍ«Õ··Õè Òí ˹ Ò·Õ»è ÃѺà»ÅÕÂè ¹ ÃдѺáç´Ñ¹ã¹·Õ¹è ¢Õé Íá¹Ð¹íÒàºÍà MAX232 ËÃ×Í ICL232 â´ÂÁÕǧ¨Ãàª×Íè Áµ ÍáÊ´§ã¹ÃÙ»·Õè L15-1

¡ÒÃàª×èÍÁµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L15-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

ÃÙ»·Õè L15-1 ǧ¨Ãàª×Íè Áµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ¡Ñº¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µÍ¹Ø¡ÃÁ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 147

USART Terminal â»Ãá¡ÃÁÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁº¹¤ÍÁ¾ÔÇàµÍà ¢Í§ mikroC ¤ÍÁä¾àÅÍà ÊíÒËÃѺ¤ÍÁ¾ÔÇàµÍà à¾×èÍÃѺáÅÐÊ §¢ ÍÁÙÅ ¨Ðµ ͧÁÕâ»Ãá¡ÃÁ·Õè·íÒ˹ Ò·ÕèÃѺáÅÐÊ §¢ ÍÁÙÅ ËÃ×Í·ÕèàÃÕÂ¡Ç Ò â»Ãá¡ÃÁà·Íà ÁÔ¹ÍÅ (USART Terminal) mikroC ¤ÍÁä¾àÅÍÃ ä´ ¨Ñ´àµÃÕÂÁâ»Ãá¡ÃÁ Terminal àÍÒäÇ áÅ Ç ºÃÔàdzᶺà¤Ã×Íè §Á×Í â´Âä»·Õàè Á¹Ù Tools à USART Terminal ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ·Ò§´ Ò¹¢ÇÒÁ×Í¡çä´ ÊíÒËÃѺ˹ ҵҢͧâ»Ãá¡ÃÁ USART Terminal áÊ´§´Ñ§ÃÙ» ã¹â»Ãá¡ÃÁ·Õè L15-1 ä´ ¡Òí ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ÃºÑ Ê §¢ ÍÁÙÅ´ Ǻʹàõ 9600 ºÔµµ ÍÇÔ¹Ò·Õ, 8 ºÔµ¢ ÍÁÙÅ 8 ºÔµ, äÁ 㪠¾ÒÃÔµÕé áÅÐ 1 ºÔµ» ´· ÒÂËÃ×ͺԵÊÔ¹é ÊØ´ ´Ñ§¹Ñ¹é ·Õâè »Ãá¡ÃÁ USART Terminal ¨Ðµ ͧ¡íÒ˹´ ¾ÒÃÒÁÔàµÍà ·ãÕè ª ã ¹¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅãË µÃ§¡Ñ¹´ ÇÂ

¡íÒ˹´¤ Һʹàõ

» ͹¢ ÍÁÙÅà¾×Íè Ê §

áÊ´§¢ ÍÁÙŠ¡àÅÔ¡¡ÒÃàª×èÍÁµ Í

àª×Íè Áµ Í


148 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¢Ñ鹵͹¡Ò÷´Åͧ L15.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L15.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è USARTtest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L15-1 L15.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L15.4 ·Õâè »Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ໠´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal ºÃÔàdzᶺà¤Ã×Íè §Á×Í·Ò§´ Ò¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹é ·íÒ¡ÒáíÒ˹´µíÒá˹ § ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¾Íà µÍ¹Ø¡ÃÁ áÅСíÒ˹´¤ Һʹàõ෠ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ Á¾Õ ÒÃÔµáÕé ÅШíҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ L15.5 ¡´»ØÁ à¾×Íè à» ´¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ L15.6 ¤ÅÔ¡à¾×Íè ¡Òà¤Ã×Íè §ËÁÒ¶١·ÕËè ¹ ÒËÑÇ¢ Í Send as number à¾×Íè àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅà» ¹µÑÇàÅ¢ L15.7 Ãѹâ»Ãá¡ÃÁ·Ò§½ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ¡ÒÃà» ´» ´ä¿àÅÕÂé §ãËÁ Í¡Õ ¤Ãѧé ËÃ×Í¡´ÊÇÔµª RESET

void main() { Usart_Init(9600); TRISD=0x00; while(1) { if (Usart_Data_Ready()) { Usart_Write('O'); Usart_Write('K'); PORTD = Usart_Read(); } } }

// Initial Serial Commucation [RC6,RC7] // Set PortD==> output // Loop // Check Data From Serial // Send "OK" // Show Data from PC ==> LED

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ (1) ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁà» ¹ 9600 8N1 ´ ǤíÒÊѧè Usart_Init(9600); (2) ¡íÒ˹´ãË ¾Íà µ D à» ¹àÍÒµ ¾µØ (3) ǹÅÙ»µÃǨÊÍºÇ Ò ÁÕ¢Í ÁÙÅ¶Ù¡Ê §ÁÒËÃ×ÍäÁ ´ ǤíÒÊѧè if

(Usart_Data_Ready())

(4) ¶ ÒÁÕ¢Í ÁÙÅÊ §ÁÒ ãË Ê§ ÍÑ¡Éà OK µÍº¡ÅÑºä» (5) ¹íÒ¤ Ò·ÕÃè ºÑ ä´ áÊ´§·Õ¾è Íà µ D

â»Ãá¡ÃÁ·Õè L15-1 ä¿Å USARTtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃ㪠§Ò¹âÁ´ÙÅ USART ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) â´Â㪠¿§ ¡ ª¹Ñè USART ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

L15.8 » ͹µÑÇàÅ¢ 128 ·Õªè Í §» ͹¢ ÍÁÙÅ ¨Ò¡¹Ñ¹é ¡´»ØÁ LED áÅÐ˹ Òµ Ò§ÃѺ¢ ÍÁÙÅ͹ءÃÁ¢Í§ USART Terminal

l 149

à¾×Íè Ê §¢ ÍÁÙÅÍÍ¡ä» Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§

·Õè LED µíÒá˹ § RD7 ¨ÐµÔ´à¾Õ§µíÒá˹ §à´ÕÂÇ෠ҹѹé à¹×Íè §¨Ò¡¤ Ò 128 àÁ×Íè á»Å§à» ¹àÅ¢°Ò¹Êͧ ¨ÐÁÕ¤Ò à» ¹ 10000000 «Ö§è ÁÕà¾Õ§ºÔµ 7 à· Ò¹Ñ¹é ·ÕÁè ¤Õ Ò à» ¹ 1 ·ÕËè ¹ Òµ Ò§ÃѺ¢ ÍÁÙÅ͹ءÃÁ¨ÐáÊ´§¢ ͤÇÒÁ Received: OK ´Ñ§ÃÙ» à¾×Íè ᨠ§Ç Òä´ ÃºÑ ¢ ÍÁÙŵͺ¡ÅѺ¨Ò¡ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅ Ç

L15.9 ·´ÅÍ§Ê §¢ ÍÁÙŤ ÒÍ×¹è æ ઠ¹ 255 ¨Ð·íÒãË LED µÔ´·Ø¡´Ç§ ËÃ×ÍÊ §¤ ÒµÑÇàÅ¢°Ò¹ÊԺˡ â´Â¾ÔÁ¾ 0x ¹íÒ˹ Ò ¤ ÒµÑÇàÅ¢°Ò¹ÊԺˡ·Õµè Í §¡ÒÃÊ § ઠ¹ 0xAA ·íÒãË LED µÔ´´ÑºÊÅѺ¡Ñ¹ à» ¹µ ¹

mikroC


150 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

10.2 ¿ §¡ ª¹Ñè Soft_Usart ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õäè Á ÁâÕ Á´ÙÅ USART ÍÂÙÀ ÒÂã¹µÑÇËÃ×ÍâÁ´ÙÅ USART ·ÕÁè Õ ÍÂÙä ´ ÃºÑ ¡ÒèѴÊÃÃä»áÅ Ç ·íÒãË ¨Òí à» ¹µ ͧ㪠¢Ò¾Íà µ»¡µÔ·ÁÕè ÍÕ ÂÙÁ ҨѴ¡ÒÃà» ¹¢Ò¾Íà µÊíÒËÃѺÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ â´Â㪠¡ÒÃà¢Õ¹â»Ãá¡ÃÁࢠҪ Ç áÅп §¡ ªÑè¹·Õè·íÒ˹ Ò·Õè¤×Í Soft_Usart ÁÕ ¿ §¡ ªÑè¹·Õèà¡ÕèÂÇ¢ ͧ¡Ñº·íÒ§Ò¹´Ñ§¹Õé

10.2.1 Soft_Usart_Init ¤íÒÊÑ§è ¹Õãé ª à¾×Íè ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ â´Âµ ͧàÃÕ¡㪠¤Òí Êѧè Soft_Uart_Init ¹Õé ¡ ͹㪠§Ò¹¤íÒÊѧè ËÃ×Í¿ §¡ ª¹Ñè Í×¹è æ ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒÃÊ×Íè ÊÒâ ÍÁÙż Ò¹¢Ò¾Íà µã´æ ¹Õé ÃٻẺ¡ÒÃ㪠§Ò¹ void Soft_Uart_Init(unsigned short *port, unsigned short rx, unsigned short tx, unsigned short baud_rate, unsigned short inverted);

µÑÇá»Ã

port ËÁÒ¶֧ µíÒá˹ §¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª 㹡ÒÃÊ×Í è ÊÒà â´Â·Ñ§é ¢Ò Tx áÅÐ¢Ò Rx ¨Ðµ ͧ

ÍÂÙº ¹¾Íà µà´ÕÂǡѹ rx

ËÁÒ¶֧ µÑÇàÅ¢·ÕÃè кصÒí á˹ §¢Ò¢Í§¢ÒÃѺ¢ ÍÁÙÅ¡íÒ˹´¤ Òä´ µ§Ñé áµ 0 ¶Ö§ 7

tx

ËÁÒ¶֧ µÑÇàÅ¢·ÕÃè кصÒí á˹ §¢Ò¢Í§¢ÒÊ §¢ ÍÁÙÅ ¡íÒ˹´¤ Òä´ µ§Ñé áµ 0 ¶Ö§ 7 â´Â¢Ò rx áÅÐ tx Ë ÒÁ¡íÒ˹´à» ¹¢Òà´ÕÂǡѹ

baud_rate ËÁÒ¶֧ ¤ ÒÍѵÃÒàÃçÇã¹ÃѺáÅÐÊ §¢ ÍÁÙÅ «Ö§è ¡ÒáíÒ˹´¤ ÒÊÙ§ÊØ´áÅеèÒí ÊØ´¡ç¢¹ Öé ÍÂÙ¡ ºÑ ¤ÇÒÁ

àÃçǢͧÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª ã¹¢³Ð¹Ñ¹é ´ Ç ¤ Ò·ÕÁè ¡Ñ ¨Ð㪠§Ò¹¤×Í ¤ Ò 2400 , 9600 , 19200 , 57600 à» ¹µ ¹

ËÁÒ¶֧ à¾×Íè ¡ÅѺʶҹÐÅͨԡ·Õ¨è ÐÊ §ÍÍ¡ä»Âѧ¾Íà µÍ¹Ø¡ÃÁ ¶ Ò¡íÒ˹´à» ¹ 0 ¨ÐäÁ Á¡Õ Ò Ã¡ÅѺʶҹРᵠ¶Ò à» ¹¤ ÒÍ×¹è æ ·Õäè Á 㪠0 ¨Ðà» ¹¡ÒáÅѺʶҹРinverted

µÑÇÍ ҧ·Õè 10-4 Soft_Uart_Init(PORTC, 7, 6, 9600,0);

à» ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ Ê×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ â´Â㪠¢Ò RC7 à» ¹¢ÒÃѺ¢ ÍÁÙÅ (Rx) áÅÐ㪠¢Ò RC6 à» ¹¢ÒÊ §¢ ÍÁÙÅ (Tx) â´ÂºÍ´àõ·Õãè ª 㹡ÒõԴµ ͤ×Í 9600 ºÔµµ ÍÇÔ¹Ò·Õ äÁ Á¡Õ ÒáÅѺʶҹТ ÍÁÙÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 151

10.2.2 Soft_Uart_Read ¿ §¡ ª¹Ñè ¹Õãé ª à¾×Íè ÃѺ¢ ÍÁÙż Ò¹¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ µÑÇá»Ã error ¨ÐÁÕ¤Ò à» ¹ 0 àÁ×Íè ¡ÒÃÃѺ¢ ÍÁÙÅ ÊÁºÙó â´ÂÊÒÁÒöµÃǨÊÍºä´ ÇÒ ä´ ÃºÑ ¢ ÍÁÙÅËÃ×ÍäÁ â´ÂµÃǨÊͺ·Õµè ÇÑ á»Ã error ¡ ͹àÃÕ¡ 㪠¿§ ¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Soft_Uart_Init ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹ unsigned short Soft_Uart_Read(unsigned short *error);

10.2.3 Soft_Uart_Write ¿ §¡ ª¹Ñè ¹Õ¨é ÐÊ §¢ ÍÁÙÅã¹µÑÇá»Ã data ä»Âѧ¾Íà µÍ¹Ø¡ÃÁ ã¹µíÒá˹ §·Õ¶è ¡Ù ¡íÒ˹´¨Ò¡¢Ò Tx ¡ ͹àÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Soft_Uart_Init ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹ void Soft_Uart_Write(char data);


152 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 16 Ê×Íè ÊÒâ ÍÁÙÅ͹ءÃÁâ´Â㪠¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà 㹡Ò÷´Åͧ¹Õ¹é Òí àʹ͡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍà â´ÂäÁ 㪠âÁ´ÙÅ USART ·ÕÁè ãÕ ¹µÑÇäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC áµ ¨Ð㪠¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èÍ¡íÒ˹´¡ÒÃÃÑºÊ §¢ ÍÁÙÅá·¹ËÃ×ÍàÃÕÂ¡Ç Ò Software UART ·Ñ§é ¹Õàé ¾×Íè à» ¹á¹Ç·Ò§ã¹¡ÒÃ㪠§Ò¹¢Ò¾Íà µã´æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC 㹡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁã¹¡Ã³Õ ·Õâè Á´ÙÅ USART ¶Ù¡¨Ñ´ÊÃÃä»ãª §Ò¹Í×¹è áÅÐÂѧ¤§ÁÕ¤ÇÒÁµ ͧ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ¡ÑºÍØ»¡Ã³ ͹×è ËÃ×Íà» ¹á¹Ç ·Ò§ã¹¡ÒÃà¾ÔÁè ¨íҹǹ¢Ò¾Íà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ¹Ñ¹è àͧ char *err ; char DAT ; void main() { Soft_Uart_Init(PORTC,7,6,9600,0); TRISD=0x00; while(1) { DAT = Soft_Uart_Read(&err); if (err==0) { Soft_Uart_Write('O'); Soft_Uart_Write('K'); PORTD=DAT; } } }

// For serial Data Buffer // Save Data // Initial Software serial port // PORTD ==> Output // Read Serial data // Check Data tranfer complete ? // send "OK" To PC // Show Data ==> LED

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ (1) ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁà» ¹ 9600 8N1 ´ ǤíÒÊѧè Soft_Uart_Init(PORTC,7,6,9600,0);

(2) ¡íÒ˹´ãË ¾Íà µ D à» ¹àÍÒµ ¾µØ (3) ǹÅÙ»µÃǨÊÍºÇ Ò ÁÕ¢Í ÁÙÅ¶Ù¡Ê §ÁÒËÃ×ÍäÁ ´ ǤíÒÊѧè DAT

= Soft_Uart_Read(&err);

(4) ¶ ÒÁÕ¢Í ÁÙÅÊ §ÁÒ ãË Ê§ ÍÑ¡Éà OK µÍº¡ÅÑºä» (5) ¹íÒ¤ Ò·ÕÃè ºÑ ä´ áÊ´§·Õ¾è Íà µ D

â»Ãá¡ÃÁ·Õè L16-1 ä¿Å SoftUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃ㪠§Ò¹âÁ´ÙÅ USART ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) â´Â㪠¿§ ¡ ª¹Ñè Soft_Uart ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 153

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà Âѧ¤§ãª ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L15-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L16.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L16.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è SoftUART áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L16-1 L16.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L16.4 ·Õâè »Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ໠´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal ºÃÔàdzᶺà¤Ã×Íè §Á×Í·Ò§´ Ò¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹é ·íÒ¡ÒáíÒ˹´µíÒá˹ § ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¾Íà µÍ¹Ø¡ÃÁ áÅСíÒ˹´¤ Һʹàõ෠ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ Á¾Õ ÒÃÔµáÕé ÅШíҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ à¾×Íè à» ´¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ L16.5 ¡´»ØÁ L16.6 ¤ÅÔ¡à¾×Íè ¡Òà¤Ã×Íè §ËÁÒ¶١·ÕËè ¹ ÒËÑÇ¢ Í Send as number à¾×Íè àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅà» ¹µÑÇàÅ¢ L16.7 Ãѹâ»Ãá¡ÃÁ·Ò§½ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ¡ÒÃà» ´» ´ä¿àÅÕÂé §ãËÁ Í¡Õ ¤Ãѧé ËÃ×Í¡´ÊÇÔµª RESET L16.8 » ͹µÑÇàÅ¢ 128 ·Õªè Í §» ͹¢ ÍÁÙÅ ¨Ò¡¹Ñ¹é ¡´»ØÁ LED áÅÐ˹ Òµ Ò§ÃѺ¢ ÍÁÙÅ͹ءÃÁ¢Í§ USART Terminal

à¾×Íè Ê §¢ ÍÁÙÅÍÍ¡ä» Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§

·Õè LED µíÒá˹ § RD7 ¨ÐµÔ´à¾Õ§µíÒá˹ §à´ÕÂÇ෠ҹѹé à¹×Íè §¨Ò¡¤ Ò 128 àÁ×Íè á»Å§à» ¹àÅ¢°Ò¹Êͧ ¨ÐÁÕ¤Ò à» ¹ 10000000 «Ö§è ÁÕà¾Õ§ºÔµ 7 à· Ò¹Ñ¹é ·ÕÁè ¤Õ Ò à» ¹ 1 ·ÕËè ¹ Òµ Ò§ÃѺ¢ ÍÁÙÅ͹ءÃÁ¨ÐáÊ´§¢ ͤÇÒÁ Received: OK à¾×Íè ᨠ§Ç Òä´ ÃºÑ ¢ ÍÁÙŵͺ¡ÅѺ¨Ò¡äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà áÅ Ç

mikroC


154 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

10.3 ÅÖ¡ÍÕ¡¹Ô´¡ÑºÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅ USART ¹Í¡¨Ò¡¡ÒÃ㪠¿ §¡ ªÑè¹â»Ãá¡ÃÁÀÒÉÒ C ·Õè mikroC ¤ÍÁä¾àÅÍà àµÃÕÂÁÁÒãË áÅ Ç ¼Ù ¾Ñ²¹Ò â»Ãá¡ÃÁÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART ä´ ´Ç µÑÇàͧ áµ ¨Ðµ ͧ·ÃÒº¶Ö§¡Ò÷íÒ§Ò¹áÅСÒáíÒËô¢Í§ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ·Õàè ¡ÕÂè Ç¢ ͧ¡ÑºâÁ´ÙÅ USART àÊÕ¡ ͹ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕÁè âÕ Á´ÙÅ USART ÁÕÃ¨Õ ÊÔ àµÍà ËÅÑ¡·Õãè ª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ 3 µÑÇ áÅÐÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅ 2 µÑÇ ¤×Í 1. TXSTA (Transmit status and control register) 㪠¤Çº¤ØÁáÅÐáÊ´§Ê¶Ò¹Ð¡ÒÃÊ §¢ ÍÁÙÅ 2. RCSTA (Receive status and control register) 㪠¤Çº¤ØÁáÅÐáÊ´§Ê¶Ò¹Ð¡ÒÃÃѺ¢ ÍÁÙÅ 3. SPBRG (Serial port baud rate generator) 㪠¡Òí ˹´ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ 4. TXREG (Transmit data register) 㪠à¡çº¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊ § 5. RCREG (Receive data register) 㪠à¡çº¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ

10.3.1 TXSTA ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹ÐáÅФǺ¤ØÁ¡ÒÃÊ §¢ ÍÁÙÅ ºÔµ 7

TXSTA

CSRC R/W -0

ºÔµ 6

ºÔµ 5

ºÔµ 4

TX9

TXEN

SYNC

R/W -0

R/W -0

R/W -0

ºÔµ 3 -/SENDB

ºÔµ 2

ºÔµ 1

ºÔµ 0

BRGH

TRMT

TX9D

R/W -0

R -1

R/W -0

ºÔµ 7 - CSRS (Clock source select bit) : ºÔµàÅ×Í¡áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ : äÁ ÁãÕ ª §Ò¹ºÔµ¹Õé ã¹âËÁ´«Ô§â¤Ã¹ÑÊ : 0 - ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ àÅ×Í¡áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒÀÒ¹͡ 1 - ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà 㪠áËÅ §¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡Ê ǹ¡íÒà¹Ô´ÍѵÃҺʹËÃ×Í ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà :BRG ºÔµ 6 - TX9 (9-bit transmit enable bit) : ºÔµàÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅẺ 9 ºÔµ 0 - àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅẺ 8 ºÔµ 1 - àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅẺ 9 ºÔµ ºÔµ 5 - TXEN (Transmit enable bit) : ºÔµàÅ×Í¡¡Ò÷íÒ§Ò¹¢Í§µÑÇÊ § 0 - ´ÔÊàÍàºÔŵÑÇÊ §¢ ÍÁÙÅ 1 - àÍç¹àÍàºÔŵÑÇÊ §¢ ÍÁÙÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 155

ºÔµ 4 - SYNC (USART mode select bit) : ºÔµàÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART 0 - àÅ×Í¡âËÁ´ÍЫԧâ¤Ã¹ÑÊ 1 - àÅ×Í¡âËÁ´«Ô§â¤Ã¹ÑÊ ºÔµ 3 - äÁ Á¡Õ ÒÃ㪠§Ò¹ Í Ò¹¤ Òà» ¹ 0 (ÊíÒËÃѺ PIC16F87x) ºÔµ 3 - SENDB: Send Break Character bit : Ê §ºÔµ Break (ÊíÒËÃѺ PIC16F88x) ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ : 1 - Ê § break ÊíÒËÃѺ¡ÒÃÊ §¢ ÍÁÙŤÃÑ§é µ Íä» (ºÔµ¹Õ¨é ж١à¤ÅÕÂà ·Ò§ÎÒà ´áÇà ) 0 - ¡ÒÃÊ §ºÔµ break à¾×Íè «Ô§¡ ¢Í ÁÙÅÊÁºÙó ã¹âËÁ´«Ô§â¤Ã¹ÑÊ : äÁ 㪠§Ò¹ºÔµ¹Õé ºÔµ 2 - BRGH (High baud rate select bit) : ºÔµàÅ×Í¡âËÁ´¢Í§ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ : 0 - àÅ×Í¡ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙŵèÒí (ÍѵÃҺʹËÃ×ͺʹàõµèÒí ) 1 - àÅ×Í¡ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅÊÙ§ (ÍѵÃҺʹËÃ×ͺʹàõÊÙ§) ã¹âËÁ´«Ô§â¤Ã¹ÑÊ : äÁ Á¡Õ ÒÃ㪠§Ò¹ºÔµ¹Õé ºÔµ 1 - TRMT (Transmit shift register status bit : ºÔµ 1) : ºÔµáÊ´§Ê¶Ò¹ÐÃÕ¨ÊÔ àµÍà º¿Ñ à¿Íà ʧ 0 - ÃÕ¨ÊÔ àµÍà º¿Ñ à¿Íà (TSR) àµçÁ ËÃ×ÍäÁ ÇÒ § 1 - ÃÕ¨ÊÔ àµÍà º¿Ñ à¿Íà (TSR) Ç Ò§ ºÔµ 0 - TX9D (9th bit of transmit data) : ºÔµà¡çº¢ ÍÁÙźԵ·Õè 9 ¢Í§¡ÒÃÊ §¢ ÍÁÙÅẺ 9 ºÔµ ºÔµ¹Õãé ª ºÃÃ¨Ø¢Í ÁÙźԵ·Õè 9 㹡óշàÕè Å×Í¡¡ÒÃÊ §¢ ÍÁÙÅẺ 9 ºÔµ â´Â¡ÒÃ૵ºÔµ TX9 áÅÐÂѧÊÒÁÒö 㪠໠¹ºÔµ¾ÒÃÔµ¢Õé ͧ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁä´

10.3.2 RCSTA ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹ÐáÅФǺ¤ØÁ¡ÒÃÃѺ¢ ÍÁÙÅ RCSTA

ºÔµ 7

ºÔµ 6 RX9

SREN

CREN

ADDEN

FERR

OERR

RX9D

R/W -0

R/W -0

R/W -0

R/W -0

R/W -0

R -0

R -0

R -x

SPEN

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

ºÔµ 7 - SPEN (Serial port enable bit) : ºÔµàÅ×Í¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART 0 - ´ÔÊàÍàºÔÅ 1 - àÍç¹àÍàºÔÅà¾×èÍ㪠§Ò¹âÁ´ÙÅ USART ·íÒãË ¢Ò RB7/RxD áÅÐ RB6/TxD 㪠§Ò¹¡ÑºâÁ´ÙÅ USART à¾×Íè Ê×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ àÁ×Íè ºÔµ 7 áÅÐ 6 ¢Í§ÃÕ¨ÊÔ àµÍà TRISC ¶Ù¡à«µà» ¹ 1


156 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 6 - RX9 (9-bit receive enable bit) : ºÔµàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµ 0 - àÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 8 ºÔµ 1 - àÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµ ºÔµ 5 - SREN (Single receive enable bit) : ºÔµàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙŤÃѧé à´ÕÂÇ ¨Ðà¤ÅÕÂà ËÅѧ¨Ò¡ÃѺ¢ ÍÁÙÅÊÁºÙó ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ áÅЫԧâ¤Ã¹ÑÊ-ÊàÅ¿ : äÁ 㪠§Ò¹ºÔµ¹Õé ã¹âËÁ´«Ô§â¤Ã¹ÑÊ-ÁÒÊàµÍà : 0 - ´ÔÊàÍàºÔÅ¡ÒÃÃѺ¢ ÍÁÙŤÃѧé à´ÕÂÇ 1 - àÍç¹àÍàºÔÅ¡ÒÃÃѺ¢ ÍÁÙŤÃѧé à´ÕÂÇ ºÔµ 4 - CREN (Continous receive enable bit) : ºÔµàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙŵ Íà¹×Íè § 0 - ´ÔÊàÍàºÔÅ¡ÒÃÃѺ¢ ÍÁÙŵ Íà¹×Íè § 1 - àÍç¹àÍàºÔÅ¡ÒÃÃѺ¢ ÍÁÙŵ Íà¹×Íè § ºÔµ 3 - ADDEN (Address detect enable bit) : ºÔµàÅ×Í¡¡ÒõÃǨ¨ÑºáÍ´à´ÃÊ ãª ã¹¡Ã³ÕàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµà· ҹѹé 0 - ´ÔÊàÍàºÔÅ¡ÒõÃǨ¨ÑºáÍ´à´ÃÊ ¢ ÍÁÙŨж١ÃѺ·Ñ§é ËÁ´ áÅкԵ·Õè 9 㪠໠¹ºÔµ¾ÒÃÔµäÕé ´ 1 - àÍç¹àÍàºÔÅ¡ÒõÃǨ¨ÑºáÍ´à´ÃÊ Ê §¼ÅãË à¡Ô´¡ÒÃàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ áÅÐÁÕ¡Òö Ò·ʹ ¢ ÍÁÙÅä»ÂѧºÑ¿à¿Íà àÁ×Íè ºÔµ RSR ¶Ù¡à«µ ºÔµ 2 - FERR (Framing error bit) : ºÔµá¨ §¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ ÍÁÙŠ૵໠¹ 1 àÁ×Íè ÁÕ¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ ÍÁÙÅà¡Ô´¢Ö¹é ºÔµ 1 - OERR (Overrun error bit) : ºÔµá¨ §¤ÇÒÁ¼Ô´¾ÅÒ´à¹×Íè §¨Ò¡¡Ò깡ѹ¢Í§¢ ÍÁÙÅ 0 - äÁ Á¤Õ ÇÒÁ¼Ô´¾ÅÒ´à¡Ô´¢Ö¹é 1 - à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹é ÊÒÁÒöà¤ÅÕÂà ºµÔ ¹Õäé ´ ´Ç ¡ÒÃà¤ÅÕÂà ºµÔ CREN ºÔµ 0 - RX9D (9th bit of received data) : ºÔµà¡çº¢ ÍÁÙźԵ·Õè 9 ¢Í§¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµ ºÔµ¹Õãé ª ºÃÃ¨Ø¢Í ÁÙźԵ·Õè 9 㹡óշàÕè Å×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµ â´Â¡ÒÃ૵ºÔµ RX9 áÅÐÂѧÊÒÁÒö 㪠໠¹ºÔµ¾ÒÃÔµ¢Õé ͧ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁä´


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 157

10.3.3 Ê Ç¹¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅËÃ×ͺʹàõà¨à¹ÍàÃàµÍà ã¹âÁ´ÙÅ USART 㪠ÊÇ ¹¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅËÃ×ͺʹàõà¨à¹ÍààµÍà à¾Õ§ ªØ´à´ÕÂÇ ÊÒÁÒöÃͧÃѺ·Ñ§é ¡Ò÷íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊáÅЫԧâ¤Ã¹ÑÊ â´ÂÁÕ¤ÇÒÁÅÐàÍÕ´ 8 ºÔµ ÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¤×Í SPBRG â´Â¨Ð¤Çº¤ØÁ¤ÒºàÇÅҢͧä·àÁÍà ÍÔÊÃТ¹Ò´ 8 ºÔµà¾×èÍ ¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹Ñʵ ͧ·íҧҹà ÇÁ¡Ñº¢ ÍÁÙÅ·Õºè µÔ BRGH (ºÔµ 2 ¢Í§ÃÕ¨ÊÔ àµÍà TXSTA) à¾×Íè ¡íÒ˹´Â Ò¹¢Í§ÍѵÃÒàÃçÇà» ¹áººµèÒí áÅÐÊÙ§ ´Ñ§áÊ´§¤ÇÒÁ ÊÑÁ¾Ñ¹¸ ã¹µÒÃÒ§·Õè 3.4.1 «Ö§è ã¹µÒÃ񤊫 áÊ´§ÊÙµÃÊíÒËÃѺ¤íҹdzËÒ¤ ÒÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ ËÃ×ͺʹàõã¹áµ ÅÐà§×è͹ä¢äÇ ´ Ç ÊíÒËÃѺ¤ Ңͧ¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà SPBRG «Ö§è 㪠㹡ÒáíÒ˹´ÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ ÊÒÁÒö¤íÒ¹Ç³ä´ ¨Ò¡Êٵ÷ÕÃè кØã¹µÒÃÒ§·Õè 10-1 áµ ¨ÐÁÕ¤Ò ¼Ô´¾ÅÒ´à¡Ô´¢Ö¹é ´Ñ§µÑÇÍ ҧµ Í仹Õé ¡íÒ˹´ãË ¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡ (ËÃ×ͤÇÒÁ¶Õè¢Í§¤ÃÔʵÍÅ) ෠ҡѺ 16MHz µ ͧ¡Òà ºÍ´àõ෠ҡѺ 9,600 ºÔµµ ÍÇÔ¹Ò·Õ àÅ×Í¡Â Ò¹ºÍ´àõµèÒí ·íҧҹ໠¹áººÍЫԧâ¤Ã¹ÑÊ ÊÒÁÒöÊÃØ» ¤ÇÒÁÊÑÁ¾Ñ¹¸ ·Ò§¤³ÔµÈÒÊµÃ ä´ ´Ñ§¹Õé ¤ Һʹàõ = 9,600

fOSC 64 ( X 1)

16 x106 64( X 1)

X 25.042

â´Â·Õ¤è Ò X ¤×ͤ ҢͧÃÕ¨ÊÔ àµÍà SPBRG áµ à¹×Íè §¨Ò¡¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà SPBRG µ ͧ à» ¹àÅ¢¨íҹǹàµçÁ ¤ Ңͧ SPBRG ¨Ö§à» ¹ 25 ¹íÒ¤ Ò 25 á·¹¡ÅѺࢠÒä»ã¹ÊÙµÃËÒ¤ Һʹàõ ¨Ðä´ SYNC

ºÔµ BRGH = 0 (ÍѵÃÒàÃçǵíèÒ)

0

ºÍ´àõ (ÍЫԧâ¤Ã¹ÑÊ) =

1

ºÍ´àõ («Ô§â¤Ã¹ÑÊ) =

fOSC 64 X 1

ºÔµ BRGH = 1 (ÍѵÃÒàÃçÇÊÙ§) ºÍ´àõ =

fOSC 16 X 1

fOSC 4X 1

µÒÃÒ§·Õè 10-1 áÊ´§ÊٵáÒäíҹdzËÒ¤ ÒÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅËÃ×ͺʹàõ â´Â¤ Ңͧ X ¤×ͤ ҢͧÃÕ¨ÊÔ àµÍà SPBRG


158 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÍ´àõ =

16 x106 64(25 1)

= 9,615 ºÔµµ ÍÇÔ¹Ò·Õ

¹Ñ¹è ¤×Íà¡Ô´¤ Ò¼Ô´¾ÅÒ´ 15 ºÔµµ ÍÇÔ¹Ò·Õ ÊÒÁÒö¤íҹdz໠¹à»Íà à«ç¹µ ¤ÇÒÁ¼Ô´¾ÅÒ´ä´ ¨Ò¡ % ¤ÇÒÁ¼Ô´¾ÅÒ´ = (ºÍ´àõ·Õ¤è Òí ¹Ç³-ºÍ´àõ·Õµè Í §¡ÒÃ)/ ºÍ´àõ·Õµè Í §¡Òà x100% = 0.15625% Í ҧäáçµÒÁ 㹺ҧ¡Ã³ÕÊÒÁÒöŴ¤ÇÒÁ¼Ô´¾ÅÒ´ä´ â´Â¡ÒáíÒ˹´ãË Êà ҧºÍ´àõµèÒí ´ Ç ¤ÇÒÁàÃçÇÊ٧᷹ â´Â¡íÒ˹´ºÔµ BRGH à» ¹ 1 f

= 20MHz

f

= 10MHz

OSC OSC ºÍ´àõ (kbps) ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ ·Õàè ¡Ô´¨ÃÔ§ (%) SPBRG ·Õàè ¡Ô´¨ÃÔ§ (%) SPBRG

0.3 1.2 2.4 9.6 19.2 76.8 96 300 500 ÊÙ§ÊØ´ µíÒè ÊØ´

N/A 1.221 2.404 9.469 19.53 78.13 104.2 312.5 N/A 312.5 1.221

+1.73 +0.16 -1.36 +1.73 +1.73 +8.51 +4.17 -

255 129 32 15 3 2 0 0 255

N/A 1.202 2.404 9.766 19.53 78.13 N/A N/A N/A 156.3 0.6104

+0.16 +0.16 +1.73 +1.73 +1.73 -

129 64 15 7 1 0 255

fOSC = 4MHz

ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ ·Õàè ¡Ô´¨ÃÔ§ (%) SPBRG

0.3005 1.202 2.404 10.42 20.83 N/A N/A N/A N/A 62.500 0.244

-0.17 +1.67 +1.67 +8.54 +8.50 -

207 51 25 5 2 0 255

fOSC = 3.579545MHz

fOSC = 32.768kHz

ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ ·Õàè ¡Ô´¨ÃÔ§ (%) SPBRG ·Õàè ¡Ô´¨ÃÔ§ (%) SPBRG

0.301 1.190 2.432 9.322 18.64 N/A N/A N/A N/A 55.93 0.2185

+0.23 -0.83 +1.32 -2.90 -2.90 -

185 46 22 5 2 0 255

0.256 N/A N/A N/A N/A N/A N/A N/A N/A 0.512 0.0020

-14.67 -

1 0 255

µÒÃÒ§·Õè 10-2 áÊ´§ÃÒÂÅÐàÍÕ´¤ ҢͧÃÕ¨ÔÊàµÍà SPBRG, ¤ Һʹàõ¨ÃÔ§ áÅÐà»Íà à«ç¹µ ¤ÇÒÁ ¼Ô´¾ÅÒ´àÁ×Íè ¡íÒ˹´ãË âÁ´ÙÅ USART ·íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊÍѵÃÒàÃçǵèÒí ( BRGH = 0 ) f

= 20MHz

f

= 10MHz

f

= 4MHz

f

= 3.579545MHz

OSC OSC OSC OSC ºÍ´àõ ºÍ´àõ ¼Ô ´ ¾ÅÒ´ ¤ Ò ¢Í§ ºÍ´àõ ¼Ô ´ ¾ÅÒ´ ¤ Ò ¢Í§ ºÍ´àõ ¼Ô ´ ¾ÅÒ´ ¤ Ò ¢Í§ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤ Ңͧ (kbps) ·Õèà¡Ô´¨ÃÔ§ (%) SPBRG ·Õèà¡Ô´¨ÃÔ§ (%) SPBRG ·Õèà¡Ô´¨ÃÔ§ (%) SPBRG ·Õèà¡Ô´¨ÃÔ§ (%) SPBRG

9.6 9.615 19.2 19.230 38.4 37.878 57.6 56.818 115.2 113.636 250 250 625 625 1250 1250

+0.16 +0.16 -1.36 -1.36 -1.36 0 0 0

129 64 32 21 10 4 1 0

9.615 18.939 39.062 56.818 125 312.50 625 N/A

+0.16 -1.36 +1.7 -1.36 +8.51 +28.6 0 -

64 32 15 10 4 1 0 -

9.615 19.230 41.667 62.5 125.0 250 N/A N/A

+0.16 +0.16 +8.51 +8.51 +8.51 0 -

25 12 5 3 1 0 -

9.727 +1.32 18.643 -2.90 37.286 -2.90 55.930 -2.90 111.860 -2.90 223.721 -10.51 N/A N/A -

22 11 5 3 1 0 -

µÒÃÒ§·Õè 10-3 áÊ´§ÃÒÂÅÐàÍÕ´¤ ҢͧÃÕ¨ÔÊàµÍà SPBRG, ¤ Һʹàõ¨ÃÔ§ áÅÐà»Íà à«ç¹µ ¤ÇÒÁ ¼Ô´¾ÅÒ´àÁ×Íè ¡íÒ˹´ãË âÁ´ÙÅ USART ·íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊÍѵÃÒàÃçÇÊÙ§ ( BRGH = 1 )


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 159

·Ø¡¤ÃÑ§é ·Õ¡è Òí ˹´¤ ҺʹàõãËÁ â´Âà¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà SPBRG ¨Ð·íÒãË ¤Ò ¢Í§ä·àÁÍà ÍÔÊÃÐÀÒÂã¹Ê ǹ¡íÒà¹Ô´ºÍ´àõ¶Ù¡ÃÕ૵ à¤ÅÕÂà ¤Ò à» ¹Èٹ ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡ÒáíÒ˹´ÍѵÃÒàÃçÇ㹡Òö Ò ·Í´¢ ÍÁÙÅËÃ×ͺʹàõãËÁ ¤ÇÃËÂØ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART ¹Õ¡é Í ¹ àÁ×Íè ¡íÒ˹´¤ ÒãËÁ àÃÕºà Í áŠǨ֧àÃÔÁè µ ¹·íÒ§Ò¹ãËÁ à¾×Íè ¤ÇÒÁÊдǡ㹡ÒÃ㪠§Ò¹¨Ö§ä´ ÊÃØ»¤ ҢͧÃÕ¨ÊÔ àµÍà SPBRG ·Õºè Í´àõ µ Ò§æ ÃÇÁ·Ñ§é ¤ Ò¤ÇÒÁ¼Ô´¾ÅÒ´ àÁ×Íè ·íÒ§Ò¹·Ñ§é ã¹âËÁ´«Ô§â¤Ã¹ÑÊáÅÐÍЫԧâ¤Ã¹ÑÊäÇ ã¹µÒÃÒ§·Õè 10-2 áÅÐ 10-3 ¼Ùã ª §Ò¹ÊÒÁÒö¹íÒ¤ Òã¹µÒÃÒ§ä»ãª ä´ àÅÂâ´ÂäÁ µÍ §àÊÕÂàÇÅÒ¤íҹdzãËÁ

10.4 ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ 10.4.1 ¡ÒÃÊ §¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ

ã¹ÃÙ»·Õè 10-2 áÊ´§ä´ÍÐá¡ÃÁ¡ÒÃÊ §¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ ËÑÇã¨ÊíҤѭ¢Í§¡Ò÷íÒ§Ò¹ÍÂÙ ·Õªè ¿Ô µ Ã¨Õ ÊÔ àµÍà µÇÑ Ê § (transmit shift register : TSR) â´Â㹪Կµ Ã¨Õ ÊÔ àµÍà ºÃÃ¨Ø¢Í ÁÙÅ·Õäè ´ ÁÒ¨Ò¡ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅÊíÒËÃѺ¡ÒÃÊ §ËÃ×Í TXREG ¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊ §¨Ð¶Ù¡à¢Õ¹ÁÒÂѧ TXREG ¨Ò¡¹Ñ¹é ¨Ð¶ Ò·ʹ µ Íä»ÂѧªÔ¿µ Ã¨Õ ÊÔ àµÍà TSR àÁ×Íè ÁÕ¡ÒÃÊ §ºÔµ» ´· Ò¢ͧ¢ ÍÁÙÅ㹪ش¡ ͹˹ ÒÍÍ¡ä»áÅ Ç ËÅѧ¨Ò¡·ÕÁè ¡Õ ÒÃÊ §ºÔµ» ´· ÒÂÍÍ¡ä» TSR ¨Ðä´ ÃºÑ ¢ ÍÁÙÅãËÁ ¨Ò¡ÃÕ¨ÊÔ àµÍà TXREG «Ö§è à¡Ô´¢Ö¹é ÀÒÂã¹ä«à¡ÔÅ¡Ò÷íÒ§Ò¹à´ÕÂÇ ÃÕ¨ÊÔ àµÍà TXREG ¨ÐÇ Ò§ áÅкԵ TXIF (ºÔµ 4 ¢Í§ÃÕ¨ÊÔ àµÍà PIR1) ¨Ð૵ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ äÇ ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ºÔµ TXIF ¨Ðà¤ÅÕÂÃ ä´ ¡µç Í àÁ×Íè ÁÕ¡Òö Ò ·Í´¢ ÍÁÙÅãËÁ ŧã¹ÃÕ¨ÊÔ àµÍà TXREG Ê Ç¹Ê¶Ò¹Ð¢Í§ªÔ¿µ Ã¨Õ ÊÔ àµÍà TSR ¨ÐáÊ´§¼ Ò¹ºÔµ TRMT (ºÔµ 1 ¢Í§ÃÕ¨ÊÔ àµÍà TXSTA) àÁ×Íè TSR Ç Ò§¨Ð૵ºÔµ¹Õé ´Ñ§¹Ñ¹é ¼Ùã ª §Ò¹ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁµÃǨ¨Ñº¡Òà à»ÅÕÂè ¹á»Å§·Õºè µÔ ¹Õàé ¾×Íè àÃÔÁè µ ¹¡ÒÃÊ §¢ ÍÁÙÅ¡çä´ ºÑÊ¢ ÍÁÙÅ 8 ºÔµ TXIF

TXREG

TXIE (8)

(0)

TSR

ºÑ¿à¿Íà áÅÐ Ê Ç¹¤Çº¤ØÁ¢Ò¾Íà µ

RC6/TxD/CK

ÍÔ¹àµÍà ÃÑ»µ TXEN

TRMT

ÊÑ­­Ò³¹ÒÌÔ¡Ò ¢Í§ºÍ´àõ SPBRG

Ê Ç¹¡íÒà¹Ô´ºÍ´àõ

SPEN

TX9 TX9D

ÃÙ»·Õè 10-2 ä´ÍÐá¡ÃÁ¡ÒÃÊ §¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x


160 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ÊÑ­­Ò³¹ÒÌÔ¡Ò ¢Í§ºÍ´àõ ÊÑ­­Ò³·Õ¢è Ò RC6/TxD/CK

ºÔµàÃÔÁè µ ¹

ºÔµ 0

ʶҹТͧ ºÔµá¿Å¡ TXIF

ºÔµ 7 ËÃ×Í 8

ºÔµ» ´· ÒÂ

¢ ÍÁÙÅàÇÔà ´·Õè 1 àÃÔèÁàÅ×è͹¢ ÍÁÙÅàÇÔà ´·Õè 1

~

ʶҹТͧ ºÔµá¿Å¡ TRMT

ºÔµ 1

~ ~~~~

ÊÑ­­Ò³à¢Õ¹ ÃÕ¨ÊÔ àµÍà TXREG

ÃÙ»·Õè 10-3 ä´ÍÐá¡ÃÁàÇÅÒ¡ÒÃÊ §¢ ÍÁÙÅâËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x ¡ÒÃàÃÔèÁµ ¹Ê §¢ ÍÁÙÅÍÍ¡¨Ò¡âÁ´ÙÅ USART à¡Ô´¢Öé¹àÁ×èÍ૵ºÔµ TXEN (ºÔµ 5 ¢Í§ÃÕ¨ÔÊàµÍà TXSTA) áµ ¡ÒÃàÃÔÁè µ ¹¨Ãԧ㹷ҧ»¯ÔºµÑ ¨Ô Ðà¡Ô´¢Ö¹é ËÅѧ¨Ò¡·ÕÃè ¨Õ ÊÔ àµÍà TXREG ä´ ÃºÑ ¡ÒÃà¢Õ¹¢ ÍÁÙÅ áÅкʹàõà¨à¹ÍàÃàµÍà Êà ҧÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§¡Òö Ò·ʹ¢ ÍÁÙÅ¢Ö¹é (´Ùû٠·Õè 10-2 »ÃСͺ) ¢ ÍÁÙÅ ¨Ò¡ TXREG ¨ÐÊ §ä»ÂѧªÔ¿µ Ã¨Õ ÊÔ àµÍà TSR áÅ Ç·ÂÍÂÊ §ÍÍ¡ä»·Ò§¢Ò¾Íà µ RC6/TxD/CK â´Â·Õè ¢Ò¾Íà µÂѧÁÕǧ¨ÃºÑ¿à¿Íà áÅÐÊÑ­­Ò³¤Çº¤ØÁÍÕ¡ 1 àÊ ¹¤×Í ºÔµ SPEN (ºÔµ 7 ¢Í§ÃÕ¨ÊÔ àµÍà RCSTA) «Ö§è µ ͧ૵ºÔµ¹Õé ÁÔ©Ð¹Ñ¹é ¢ ÍÁÙŨÐäÁ ÊÒÁÒÃ¶Ê §ÍÍ¡ä»ä´ ¡ÒÃàÅ×Íè ¹¢ ÍÁÙŨÐàÃÔÁè µ ¹´ ǺԵàÃÔÁè µ ¹µ Í´ Ç¢ ÍÁÙźԵ 0 ¨¹¶Ö§¢ ÍÁÙźԵ 7 ËÃ×Í 8 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´¢¹Ò´¢Í§¢ ÍÁÙÅÇ Òµ ͧ¡ÒÃÊ §áºº 8 ËÃ×Í 9 ºÔµ áÅÐÊ §ºÔµ» ´· ÒÂÍÕ¡ 1 ºÔµÊØ´· Ò ໠¹ Íѹ¤Ãº 1 ªØ´¢Í§¢ ÍÁÙÅ ºÔµ TRMT ¨Ðᨠ§Ç ÒªÔ¿µ Ã¨Õ ÊÔ àµÍà äÁ ÇÒ §µÑ§é áµ àÃÔÁè Ê §ºÔµàÃÔÁè µ ¹ áÅШÐ૵ à¾×Íè ᨠ§Ç ÒÇ Ò§ËÅѧ¨Ò¡·ÕÊè § ¢ ÍÁÙźԵÊØ´· Ò ¡ Í¹Ê §ºÔµ» ´· Ò ÊÒÁÒö´Ùû٠·Õè 10-3 »ÃСͺ ÊÃØ»¢Ñ¹é µÍ¹¡ÒáíÒ˹´ãË âÁ´ÙÅ USART Ê §¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊä´ ´§Ñ ¹Õé BRGH ´ ÇÂ

(1) ¡íÒ˹´¢ ÍÁÙÅÊà ҧºÍ´àõŧ㹠SPBRG Ëҡ㪠ºÍ´àõ¤ÇÒÁàÃçÇÊÙ§µ ͧ૵ºÔµ

(2) àÅ×Í¡¿ §¡ ª¹Ñè ¡ÒõԴµ ͼ Ò¹¾Íà µÍ¹Ø¡ÃÁáÅСíÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ â´Â¡ÒÃ૵ºÔµ SPEN áÅÐà¤ÅÕÂà ºµÔ SYNC (3) ¶ Òµ ͧ¡ÒÃãË à¡Ô´ÍÔ¹àµÍ Ã»Ñ µ µ ͧ·íÒ¡ÒÃ૵ºÔµ TXIE (4) àÍç¹àÍàºÔÅ¡ÒÃÊ §¢ ÍÁÙÅâ´Â૵ºÔµ TXEN Ê §¼ÅãË á¿Å¡ TXIF ¶Ù¡à«µµÒÁä»´ Ç (5) ¡íÒ˹´¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà TXREG à¾×Íè àÃÔÁè µ ¹Ê §¢ ÍÁÙÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 161

10.4.2 ¡ÒÃÃѺ¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹áÊ´§ã¹ÃÙ»·Õè 10-4 ¡íÒ˹´ãË µÇÑ ÃѺ¢ ÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊã¹âÁ´ÙÅ USART ·íÒ§Ò¹ µ ͧ૵ºÔµ CREN (ºÔµ 4 ¢Í§ÃÕ¨ÊÔ àµÍà RCSTA) Ê Ç¹¢ ÍÁÙÅ¨Ð¶Ù¡Ê §à¢ ÒÁÒ·Ò§¢Ò¾Íà µ RC7/RxD/DT ·ÕÅкԵ ¼ ҹǧ¨ÃºÑ¿à¿Íà ࢠÒÊÙÊ Ç ¹àÃÕ¡¤×¹¢ ÍÁÙÅ (data recovery) «Ö§è ÀÒÂã¹à» ¹µÑÇàÅ×Íè ¹ ¢ ÍÁÙŤÇÒÁàÃçÇÊÙ§ ·íÒ§Ò¹·Õ¤è ÇÒÁàÃçÇ 16 ෠ҢͧºÍ´àõ ·Ñ§é ¹Õàé ¾×Íè ãË âÁ´ÙÅ USART ÊÒÁÒöÃѺ¢ ÍÁÙÅà¢ Ò ÁÒáÅж Ò·ʹµ Íä»ÂѧªÔ¿µ Ã¨Õ ÊÔ àµÍà µÇÑ ÃѺËÃ×Í RSR (receive shift register) ä´ àÃçÇ¢Ö¹é Ê §¼ÅãË ÊÒÁÒö ÃѺ¢ ÍÁÙÅä´ Í ҧ·Ñ¹· ǧ·ÕáÅФú¶ ǹ ¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ¨ÐàÃÔÁè ¨Ò¡ºÔµàÃÔÁè µ ¹ µ Í´ Ç¢ ÍÁÙźԵ 0 ¨¹¶Ö§ºÔµ 7 ËÃ×Í 8 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒÃàÅ×Í¡áÅÐÊØ´· Ò¤×ͺԵ» ´· Ò OERR

ÊÑ­­Ò³¹ÒÌԡҢͧ ºÍ´àõ x64

FERR

CREN 64

SPBRG

RSR

MSB

16

STOP

Ê Ç¹¡íÒà¹Ô´ºÍ´àõ

(8)

7

LSB

1

0

56)46

RX9

ºÑ¿à¿Íà áÅÐ Ê Ç¹¤Çº¤ØÁ¢Ò¾Íà µ

Ê Ç¹àÃÕ¡¤×¹¢ ÍÁÙÅ (data recovery) ºÑÊ¢ ÍÁÙÅ 8 ºÔµ

RC7/RxD/CK

SPEN

àÍç¹àÍàºÔÅãË ºÑ¿à¿ÍÃ ÃºÑ ¢ ÍÁÙÅ

RX9

ºÑÊ¢ ÍÁÙÅ 8 ºÔµ

ADEN RX9 ADEN RSR <8>

4+1.

ÍÔ¹àµÍÃ Ã»Ñ µ

4+1-

TX9D

RCRE

TX9D

RCRE

ºÑÊ¢ ÍÁÙÅ 8 ºÔµ

ÃÙ»·Õè 10-4 ä´ÍÐá¡ÃÁ¡ÒÃÃѺ¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x

FIFO


162 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ËÑÇ㨢ͧ¡ÒÃÃѺ¢ ÍÁÙŤ×ͪԿµ Ã¨Õ ÊÔ àµÍà RSR ËÅѧ¨Ò¡·Õµè ÃǨ¨ÑººÔµ» ´· Ò¢ͧ¡ÒÃÃѺ¢ ÍÁÙÅ ä´ ¢ ÍÁÙÅã¹ RSR ¨ÐÊ §ä»ÂѧÃÕ¨ÊÔ àµÍà ¢Í ÁÙŵÑÇÃѺ RCREG ËÅѧ¨Ò¡·Õ¶è Ò Â·Í´¢ ÍÁÙÅàÊÃç¨ÊÁºÙó ºÔµá¿Å¡ RCIF (ºÔµ 5 ¢Í§ ÃÕ¨ÊÔ àµÍà PIR1) ¨Ð¶Ù¡à«µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ äÇ ¡¨ç Ðà¡Ô´ ÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé á¿Å¡ RCIF ¨Ðà¤ÅÕÂà àÁ×Íè ¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà RCREG ¶Ù¡Í Ò¹ÍÍ¡ä»áÅÐÇ Ò§Å§ ÃÕ¨ÊÔ àµÍà ¢Í ÁÙŵÑÇÃѺ RCREG ÁÕ 2 ªØ´ à» ¹áºº FIFO ¤×Í¢ ÍÁÙÅ·Õàè ¢ Ò¡ ͹¨Ð¶Ù¡Ê §ÍÍ¡¡ ͹ ·íÒãË ÃѺ¢ ÍÁÙÅä´ ÃÇ´àÃçÇ à¾ÃÒÐÃѺ¢ ÍÁÙÅ 3 亵 ä´ µÍ à¹×Íè § ã¹¢³Ð·Õ¡è Òí Åѧ¶ Ò·ʹ¢ ÍÁÙŷѧé 2 亵 ¨Ò¡ÃÕ¨ÊÔ àµÍà RCREG ¢ ÍÁÙÅã¹äºµ ·ÊÕè ÒÁ ÊÒÁÒöࢠÒÊÙâ Á´ÙÅ USART ä´ ·¹Ñ ·Õ â´Â¢ ÍÁÙŨж١à¡çºäÇ ·Õè RSR ¡ ͹ 㹡óշÊÕè ÒÁÒöµÃǨ¨ÑººÔµ» ´· ÒÂä´ áµ ã¹ÃÕ¨ÊÔ àµÍà RCREG ÂѧÁÕ¢Í ÁÙÅÍÂÙ ¨Ðà¡Ô´à˵ءÒó ª¹¡Ñ¹¢Í§¢ ÍÁÙÅ àÃÕÂ¡Ç Ò âÍàÇÍÃ Ã¹Ñ (overrun error) ºÔµ OERR ¨Ð¶Ù¡à«µà¾×Íè ᨠ§¤ÇÒÁ¼Ô´¾ÅÒ´´Ñ§¡Å ÒÇ Ê §¼ÅãË ¢Í ÁÙÅã¹ RSR ËÒÂä» áÅСÒö Ò·ʹ¢ ÍÁÙŨҡ RSR ä»ÂѧÃÕ¨ÊÔ àµÍà RCREG ¨Ð¶Ù¡ÂѺÂѧé äÇ µÃÒºà· Ò·Õºè µÔ OERR Âѧ¤§à«µÍÂÙ ºÔµ OERR ÊÒÁÒöà¤ÅÕÂÃ ä´ ´Ç ¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ¤ÇÒÁ¼Ô´¾ÅÒ´ÍÕ¡áººË¹Ö§è ·ÕÍè Ò¨à¡Ô´¢Ö¹é ä´ ¤Í× ¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ ÍÁÙÅ (framing error) ¨Ðà¡Ô´¢Ö¹é àÁ×Íè ¡ÒõÃǨ¨ÑººÔµ» ´· Ò¾ºÇ Òà» ¹Åͨԡ 0 «Ö§è µÃ§¡ÑºÊ¶Ò¹Ð¢Í§ºÔµàÃÔÁè µ ¹¢Í§¢ ÍÁÙÅã¹ ªØ´¶Ñ´ä» Ê §¼ÅãË äÁ ÊÒÁÒöµÕ¤ÇÒÁä´ ÇÒ ä´ ÃºÑ ¢ ÍÁÙÅÍ ҧÊÁºÙó ¡Í ¹Ë¹ Ò¹ÕËé Ã×ÍäÁ àÁ×Íè ¡ÒõÃǨ ¨Ñº¾ºÇ Ò à» ¹Åͨԡ 0 ¡ÒÃÃѺ¢ ÍÁÙŢͧµÑÇÃѺ¡ç¨ÐàÃÔÁè µ ¹µ Íä» Ê §¼ÅãË à¡Ô´¡ÒÃÍ Ò¹¢ ÍÁÙźԵáá໠¹ 0 «Ö§è á· ·¨Õè ÃÔ§áÅ ÇÁѹ¤×ͺԵàÃÔÁè µ ¹¢Í§¢ ÍÁÙŪشµ Íä» ·íÒãË ¢Í ÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ¼Ô´¾ÅÒ´ ºÔµ FERR ¨Ð¶Ù¡ ૵à¾×Íè ᨠ§¤ÇÒÁ¼Ô´¾ÅÒ´´Ñ§¡Å ÒÇ àÁ×Íè ÁÕ¡ÒÃÍ Ò¹¤ ҢͧÃÕ¨ÊÔ àµÍà RCREG ºÔµ FERR ¨Ð¶Ù¡»ÃѺ»Ãاâ´Â Íѵâ¹ÁÑµÔ ¶ ÒËÒ¡¡ÒÃÃѺ¢ ÍÁÙŤÃѧé ãËÁ ¶¡Ù µ ͧ ºÔµ FERR ¨Ð¡ÅÒÂà» ¹ 0 â´ÂÍѵâ¹ÁÑµÔ Í ҧäáçµÒÁ ËÒ¡à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ ÍÁÙÅ¢Ö¹é áÅÐàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµ ¨íÒà» ¹Í ҧÂÔ§è ·Õ¨è е ͧ·íÒ¡ÒÃ Í Ò¹¢ ÍÁÙŨҡ RCSTA ¢Ö¹é ÁÒ¡ ͹à¾×Íè ÃÑ¡ÉÒ¢ ÍÁÙźԵ·Õè 9 àÍÒäÇ ¨Ò¡¹Ñ¹é ¨Ö§Í Ò¹¤ ҢͧÃÕ¨ÊÔ àµÍà RCREG à¾×Íè Í Ò¹¢ ÍÁÙÅã¹ 8 ºÔµ·Õàè ËÅ×Í ¾Ã ÍÁ¡Ñº»ÃѺ»Ãا¤ ҢͧºÔµ FERR ´ Ç ÊÃØ»¢Ñ¹é µÍ¹¡ÒáíÒ˹´ãË âÁ´ÙÅ USART ÃѺ¢ ÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊä´ ´§Ñ ¹Õé (1) ¡íÒ˹´¢ ÍÁÙÅÊà ҧºÍ´àõŧ㹠SPBRG Ëҡ㪠ºÍ´àõ¤ÇÒÁàÃçÇÊÙ§µ ͧ૵ºÔµ BRGH (2) àÅ×Í¡¿ §¡ ª¹Ñè ¡ÒõԴµ ͼ Ò¹¾Íà µÍ¹Ø¡ÃÁáÅСíÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ â´Â¡ÒÃ૵ºÔµ SPEN áÅÐà¤ÅÕÂà ºµÔ SYNC (3) ¶ Òµ ͧ¡ÒÃãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ µ ͧ૵ºÔµ RCIE (4) ¶ ÒàÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙÅẺ 9 ºÔµãË à«µºÔµ RX9


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 163

(5) àÍç¹àÍàºÔÅ¡ÒÃÃѺ¢ ÍÁÙÅâ´Â¡ÒÃ૵ºÔµ CREN (6) ºÔµá¿Å¡ RCIF ¶Ù¡à«µàÁ×Íè ÃѺ¢ ÍÁÙÅàÊÃç¨ÊÔ¹é ¨Ðà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ËÒ¡àÍç¹àÍàºÔÅäÇ (7) Í Ò¹¢ ÍÁÙŢͧÃÕ¨ÊÔ àµÍà RCSTA à¾×Íè Í Ò¹¢ ÍÁÙźԵ·Õè 9 ¶ ÒËÒ¡àÅ×Í¡¡ÒÃÃѺ¢ ÍÁÙŠẺ 9 ºÔµ áÅеÃǨÊͺ¤ÇÒÁ¼Ô´¾ÅÒ´·ÕÍè Ò¨à¡Ô´¢Ö¹é ÃÐËÇ Ò§¡ÒÃÃѺ¢ ÍÁÙÅ (8) Í Ò¹¢ ÍÁÙÅ 8 ºÔµ·ÕÃè ºÑ à¢ ÒÁÒ â´ÂÍ Ò¹¼ Ò¹·Ò§ÃÕ¨ÊÔ àµÍà RCREG (9) ¶ Òà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹é ãË à¤ÅÕÂà ºµÔ ᨠ§¤ÇÒÁ¼Ô´¾ÅÒ´ËÃ×ͺԵ CREN

10.5 ¡ÒÃãª Í¹Ô àµÍÃ Ã»Ñ µ à¾×Íè ÃѺ¢ ÍÁÙÅ ¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁẺ㪠ÇÔ¸Õ¡ÒÃǹÅÙ»Ãͨ¹¡Ç Ò¨ÐÁÕ¢ ÍÁÙÅ¶Ù¡Ê §ÍÍ¡ÁÒ ÁÕ¨Ø´Í Í¹µÃ§·Õè ¶ Òâ»Ãá¡ÃÁÁÕ¡ÒáÃÐâ´´ä»·íÒ§Ò¹Ê Ç¹Í×¹è æ áÅ Ç¡ÅѺÁÒÃѺ¢ ÍÁÙÅäÁ ·¹Ñ ¢ ÍÁÙÅ·ÕÊè § ÁÒÍÒ¨ÊÙ­ËÒÂä´ ·Ò§á¡ 䢤×Í ãª ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ࢠÒÁÒª Ç ·íÒãË â»Ãá¡ÃÁäÁ ¨Òí à» ¹µ ͧÁÕ¡ÒõÃǨÊͺ¡Òà ÃѺ¢ ÍÁÙÅ ÊÒÁÒö价íÒ§Ò¹ã¹Ê ǹÍ×¹è æ ä´ Ãͨ¹¡Ç Ò¨ÐÁÕ¡ÒáÃеع ¨Ò¡ÍÔ¹àµÍÃ Ã»Ñ µ ¤Ãѧé Ë¹Ö§è ¨Ö§ ¡ÃÐâ´´ÁÒ·íÒ§Ò¹ã¹â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¢Í§¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁ Ê §¼ÅãË ¡ÒÃÃѺ ¢ ÍÁÙÅÁÕ¤ÇÒÁ¶Ù¡µ ͧÁÒ¡ÂÔ觢Öé¹ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ä´ àµÃÕÂÁÊ Ç¹ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ÊÒí ËÃѺâÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙŠ͹ءÃÁ USART äÇ áÅ Ç â´ÂãË ·Òí ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹´Õé Ç Â¡ÒÃ૵ºÔµ RCIE ã¹ÃÕ¨ÊÔ àµÍà PIE1 àÁ×Íè ÁÕ¢Í ÁÙÅ¶Ù¡Ê §à¢ ÒÁÒ ºÔµ RCIF ¨Ð¶Ù¡à«µ àÁ×Íè à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ «Õ¾ÂÕ Ù¨Ð¡ÃÐâ´´ä»Âѧ¿ §¡ ª¹Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¹Ñ ·Õ áÅзíÒ§Ò¹ã¹â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨¹àÊÃ稡 ͹·Õ¨è СÅѺÁÒ·íÒ§Ò¹ â»Ãá¡ÃÁ»¡µÔµÍ ä» ã¹¿ §¡ ª¹Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ðµ ͧÁÕ¤Òí Êѧè Í Ò¹¤ Ò¨Ò¡ÃÕ¨ÊÔ àµÍà RCREG «Ö§è àÁ×Íè Í Ò¹¤ ÒáŠǨР໠¹¡ÒÃà¤ÅÕÂà á¿Å¡ÍÔ¹àµÍÃ Ã»Ñ µ RCIF â´ÂÍѵâ¹ÁѵÔ


164 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 17 ¡ÒÃÊ §¢ ÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ áºº¡íÒ˹´¤ ÒÃÕ¨ÔÊàµÍà â´ÂµÃ§ 㹡Ò÷´Åͧ¹Õéà» ¹¡ÒùíÒàʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×èͤǺ¤ØÁãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÊÒÁÒöÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µÍ¹Ø¡ÃÁä´ â´ÂäÁ 㪠¿§ ¡ ª¹Ñè ËÃ×ÍäźÃÒÃÕ¾àÔ Èɢͧ mikroC ¤ÍÁä¾àÅÍà ᵠ¨Ðà» ¹¡ÒÃà¢Õ¹¤ Òŧã¹ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ᷹ͧ ÊíÒËÃѺ㹡Ò÷´Åͧ¹Õàé » ¹¡Ò÷´ÅÍ§Ê §¢ ÍÁÙÅ͹ءÃÁ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ä»áÊ´§ ¼Å·ÕËè ¹ Òµ Ò§ UART Terminal ¢Í§ mirkoC ¤ÍÁä¾àÅÍÃ

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà Âѧ¤§ãª ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L15-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L17.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz char dat ; void main() { SPBRG = 129; TXSTA.BRGH = 1 ; TXSTA.TXEN = 1 ; RCSTA.SPEN = 1 ; while(1) { dat = 'A' ; while(PIR1.TXIF) { TXREG = dat ; delay_ms(500); dat = dat++ ; } } }

// // // //

9600 bps Baudrate mode set High Enble Transmitter Enable Serial Port

// First Character // Test Buffer Blank // Send dat // Delay 500 ms // Increment dat

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ à» ¹â»Ãá¡ÃÁ¹íÒ¤ ÒµÑÇÍÑ¡Éà (ÃËÑÊáÍÊ¡Õ)é ¢Í§µÑÇÍÑ¡Éà A à» ¹µ ¹ä»Ê §ä»áÊ´§¼Å¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ â´Â àÇ ¹ª ǧµÑÇÍÑ¡ÉÃÅÐ 0.5 ÇÔ¹Ò·Õ â´Â¤íҹdz¤ ҺʹàõäÇ à· Ò¡Ñº 9,600 ºÔµµ ÍÇÔ¹Ò·Õ

â»Ãá¡ÃÁ·Õè L17-1 ä¿Å TxUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÊ §¢ ÍÁÙż Ò¹âÁ´ÙÅ USART ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ´ Ç¡ÒáíÒ˹´¤ Òä»ÂѧÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹â´ÂµÃ§


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 165

L17.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è TxUART áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L17-1 L17.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L17.4 ·Õâè »Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ໠´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal ºÃÔàdzᶺà¤Ã×Íè §Á×Í·Ò§´ Ò¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹é ·íÒ¡ÒáíÒ˹´µíÒá˹ § ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¾Íà µÍ¹Ø¡ÃÁ áÅСíÒ˹´¤ Һʹàõ෠ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ Á¾Õ ÒÃÔµáÕé ÅШíҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ à¾×Íè à» ´¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ L17.5 ¡´»ØÁ L17.6 Ãѹâ»Ãá¡ÃÁ·Ò§½ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ¡ÒÃà» ´» ´ä¿àÅÕÂé §ãËÁ Í¡Õ ¤Ãѧé ËÃ×Í¡´ÊÇÔµª RESET ·ÕËè ¹ Òµ Ò§ÃѺ¢ ÍÁÙÅ͹ءÃÁ¨ÐáÊ´§¢ ͤÇÒÁ Received: A áÅ Ç¢Ö¹é ºÃ÷ѴãËÁ à¾×Íè ᨠ§¡ÒÃÃѺÍÑ¡Éà B, C, D,... ä»Í ҧµ Íà¹×Íè § ´Ñ§ÃÙ»

mikroC


166 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 18 ¡ÒÃÃѺ¢ ÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ áºº¡íÒ˹´¤ ÒÃÕ¨ÔÊàµÍà â´ÂµÃ§ 㹡Ò÷´Åͧ¹Õéà» ¹¡ÒùíÒàʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×èͤǺ¤ØÁãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÃѺ¢ ÍÁÙÅ͹ءÃÁ¨Ò¡¤ÍÁ¾ÔÇàµÍà ·ÊÕè § ÁÒ¨Ò¡â»Ãá¡ÃÁ UART Terminal ¢Í§ mirkoC ¤ÍÁä¾àÅÍà à¾×Íè áÊ´§¼Å ¼ Ò¹ LED ·Õµè Í ÍÂÙ¡ ºÑ ¾Íà µ D â´Â¡ÒõԴµ ͡ѺâÁ´ÙÅ USART ¹Ñ¹é ¨Ðà» ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ¡íÒ˹´¤ Òä»Âѧ ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¢Í§âÁ´ÙÅ USART â´ÂµÃ§

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà Âѧ㪠ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L15-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L18.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz char dat; void main() { TRISD = 0 ; SPBRG = 129; TXSTA.BRGH = 1 ; RCSTA.SPEN = 1 ; RCSTA.CREN = 1 ; dat = RCREG ; dat = RCREG ; dat = RCREG ; while(1) { while(!PIE1.RCIF) { PORTD = RCREG } } }

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

PORTB ==> output 9600 bps Baudrate mode set High Enable Serial Port Enable Continuous receive clear buffer data clear buffer data clear buffer data

// Test Received data ;

// Show data on PORTB

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ à» ¹â»Ãá¡ÃÁÃÍÃѺ¢ ÍÁÙŨҡ¾Íà µÍ¹Ø¡ÃÁ´ Ç¡ÒõÃǨÊͺºÔµ RCIF àÁ×Íè ÁÕ¢Í ÁÙÅࢠÒÁÒ㹺ѿà¿Íà ºÔµ¹Õ¨é Ðà» ¹ 1 ¨Ò¡¹Ñ¹é ¹íÒ¢ ÍÁÙÅ·ÕÃè ºÑ ä´ Ê§ ä»Âѧ¾Íà µ D 㹡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¹Ñ¹é ¹Í¡¨Ò¡¡Òà àÍç¹àÍàºÔÅ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁáÅСíÒ˹´¤ ҺʹàõáÅ Ç ¨Ðµ Í§Í Ò¹¢ ÍÁÙÅ 3 ¤Ãѧé à¾×Íè à¤ÅÕÂà ¤Ò 㹺ѿà¿ÍÃ

â»Ãá¡ÃÁ·Õè L18-1 ä¿Å RxUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ ÍÁÙż Ò¹âÁ´ÙÅ USART ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ´ Ç¡ÒáíÒ˹´¤ Òä»ÂѧÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹â´ÂµÃ§


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 167

L18.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è RxUART áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L18-1 L18.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L18.4 ·Õâè »Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ໠´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal ºÃÔàdzᶺà¤Ã×Íè §Á×Í·Ò§´ Ò¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹é ·íÒ¡ÒáíÒ˹´µíÒá˹ § ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¾Íà µÍ¹Ø¡ÃÁ áÅСíÒ˹´¤ Һʹàõ෠ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ Á¾Õ ÒÃÔµáÕé ÅШíҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ à¾×Íè à» ´¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ L18.5 ¡´»ØÁ L18.6 ¤ÅÔ¡à¾×Íè ¡Òà¤Ã×Íè §ËÁÒ¶١·ÕËè ¹ ÒËÑÇ¢ Í Send as number à¾×Íè àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅà» ¹µÑÇàÅ¢ L18.7 Ãѹâ»Ãá¡ÃÁ·Ò§½ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ¡ÒÃà» ´» ´ä¿àÅÕÂé §ãËÁ Í¡Õ ¤Ãѧé ËÃ×Í¡´ÊÇÔµª RESET L18.8 » ͹µÑÇàÅ¢ 65 ·Õªè Í §» ͹¢ ÍÁÙÅ ¨Ò¡¹Ñ¹é ¡´»ØÁ

à¾×Íè Ê §¢ ÍÁÙÅÍÍ¡ä» Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§ LED

·Õè LED µíÒá˹ §ºÔµ 6 áÅкԵ 0 ¨ÐµÔ´ «Ö§è ෠ҡѺàÅ¢°Ò¹Êͧ໠¹ 01000001 ËÃ×Í 0x41 ¢Í§àÅ¢°Ò¹ ÊԺˡ à¹×Íè §¨Ò¡¤ Ò 65 ·ÕÊè § ÍÍ¡Áҹѹé à» ¹àÅ¢°Ò¹ÊÔº àÁ×Íè äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ÃºÑ ä´ ¨ÐµÕ¤ÇÒÁà» ¹àÅ¢°Ò¹Êͧ ËÃ×Í°Ò¹ÊԺˡ «Ö§è ¤ Ò 65 °Ò¹ÊÔº¨Ð෠ҡѺ 01000001 °Ò¹Êͧ áÅÐ 0x41 °Ò¹ÊԺˡ

ÃÙ» LED ´ Ò¹º¹à» ¹Ê Ç¹Ë¹Ö§è ¢Í§ LED Á͹ÔàµÍà º¹ºÍà ´·´Åͧ NX-877 plus II ·Õãè ª ÍÒ §Íԧ㹡Òà ·´Åͧ¹Õé

mikroC


168 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 19 ¡ÒÃÃѺ¢ ÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ â´Â㪠ÍÔ¹àµÍà ÃÑ»µ ¡Ò÷´Åͧ¹Õ¹é Òí àʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Ç¤ºØÁãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÃѺ¢ ÍÁÙÅ͹ءÃÁ Ẻ㪠¡ ÒÃÍÔ¹àµÍÃ Ã»Ñ µ â´Â¡íÒ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¢Ñº LED ·Õ¢è Ò¾Íà µ RD7 µÔ´¡Ð¾ÃԺ͠ҧµ Íà¹×Íè § ã¹ÊÀÒÇл¡µÔ·äÕè Á Á¡Õ ÒÃÃѺ¢ ÍÁÙÅ áÅÐàÁ×Íè ÁÕ¡ÒÃÃѺ¢ ÍÁÙÅࢠÒÁÒ ¡ç¨ÐáÊ´§¤ Ңͧ¢ ÍÁÙŹѹé Á·Õ¾è Íà µ D á·¹

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà Âѧ㪠ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L15-1 áÅ ÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ PIC16F877 l

¢Ñ鹵͹¡Ò÷´Åͧ L19.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L19.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è InterruptUART áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L19-1 L19.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L19.4 ·Õâè »Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍà ໠´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal ºÃÔàdzᶺà¤Ã×Íè §Á×Í·Ò§´ Ò¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹é ·íÒ¡ÒáíÒ˹´µíÒá˹ § ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäè ͤ͹ ¾Íà µÍ¹Ø¡ÃÁ áÅСíÒ˹´¤ Һʹàõ෠ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ Á¾Õ ÒÃÔµáÕé ÅШíҹǹºÔµ¢ ÍÁÙÅ 8 ºÔµ à¾×Íè à» ´¡ÒÃÊ×Íè ÊÒÃ͹ءÃÁ L19.5 ¡´»ØÁ L19.6 ¤ÅÔ¡à¾×Íè ¡Òà¤Ã×Íè §ËÁÒ¶١·ÕËè ¹ ÒËÑÇ¢ Í Send as number à¾×Íè àÅ×Í¡¡ÒÃÊ §¢ ÍÁÙÅà» ¹µÑÇàÅ¢ L19.7 Ãѹâ»Ãá¡ÃÁ·Ò§½ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ¡ÒÃà» ´» ´ä¿àÅÕÂé §ãËÁ Í¡Õ ¤Ãѧé ËÃ×Í¡´ÊÇÔµª RESET Êѧࡵ ¡ÒÃáÊ´§¼Å¢Í§ LED LED ·Õ¾è Íà µ RD7 µÔ´¡Ð¾ÃÔº L19.8 » ͹µÑÇàÅ¢ 65 ·Õªè Í §» ͹¢ ÍÁÙÅ ¨Ò¡¹Ñ¹é ¡´»ØÁ

à¾×Íè Ê §¢ ÍÁÙÅÍÍ¡ä» Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§ LED

·Õè LED µíÒá˹ §ºÔµ 6 áÅкԵ 0 ¨ÐµÔ´ «Ö§è ෠ҡѺàÅ¢°Ò¹Êͧ໠¹ 01000001 ËÃ×Í 0x41 ¢Í§àÅ¢°Ò¹ ÊԺˡ à¹×Íè §¨Ò¡¤ Ò 65 ·ÕÊè § ÍÍ¡Áҹѹé à» ¹àÅ¢°Ò¹ÊÔº àÁ×Íè äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ÃºÑ ä´ ¨ÐµÕ¤ÇÒÁà» ¹àÅ¢°Ò¹Êͧ ËÃ×Í°Ò¹ÊԺˡ «Ö§è ¤ Ò 65 °Ò¹ÊÔº¨Ð෠ҡѺ 01000001 °Ò¹Êͧ áÅÐ 0x41 °Ò¹ÊԺˡ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char dat ; void interrupt() { PORTD = RCREG ; } void enable_int() { PIE1.RCIE = 1 ; INTCON.PEIE = 1 ; INTCON.GIE = 1 ; } void main() { TRISD = 0 ; SPBRG = 129; enable_int() ; TXSTA.BRGH = 1 ; RCSTA.SPEN = 1 ; RCSTA.CREN = 1 ; dat = RCREG ; dat = RCREG ; dat = RCREG ; while(1) { PORTD.F7 =0; delay_ms(500); PORTD.F7 = 1; delay_ms(500); } }

l 169

// Receive Interrupt

// Enable receive interrupt // Enable peripheral interrupt // Enable Global interrupt

// PORTD ==> output // 9600 bps // // // // // //

Baudrate mode set High Enable Serial Port Enable Continuous receive clear buffer data clear buffer data clear buffer data

// Blinking LED // ON RD7

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ¨Ò¡â»Ãá¡ÃÁà» ¹¡ÒÃãª Í¹Ô àµÍÃ Ã»Ñ µ ࢠÒÁÒª ÇÂ㹡ÒõÃǨÊͺ¡ÒÃÃѺ¢ ÍÁÙÅ àÁ×Íè ÁÕ¡ÒÃÃѺ¢ ÍÁÙÅࢠÒÁÒ ¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ áÅ Ç«Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹µÒÁ¿ §¡ ª¹Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ «Ö§è ¨ÐÊ §¤ Ңͧ¢ ÍÁÙÅ·Õè ÃÑºä´ ä»Âѧ·Õ¾è Íà µ D Ê Ç¹ã¹¢³Ð·Õäè Á Á¡Õ ÒÃÍÔ¹àµÍÃ Ã»Ñ µ â»Ãá¡ÃÁ¨Ð¡íÒ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¢ ÍÁÙÅ 1 áÅÐ 0 ä»Âѧ¢Ò¾Íà µ RD7 «Ö§è µ Í LED äÇ ·íÒãË LED à¡Ô´¡ÒáоÃÔº ¿ §¡ ª¹Ñè enable_int() 㪠¡Òí ˹´¤ ÒàÃÔÁè µ ¹ÊíÒËÃѺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ â´Â¨ÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§ ÍÔ¹àµÍÃ Ã»Ñ µ 3 µÑǤ×Í àÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁ àÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÍØ»¡Ã³ µÍ ¾ ǧ áÅÐ àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ËÅÑ¡

â»Ãá¡ÃÁ·Õè L19-1 ä¿Å InterruptUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ ÍÁÙż Ò¹âÁ´ÙÅ USART ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ´ Ç¡ÒÃãª Í¹Ô àµÍÃ Ã»Ñ µ

INNOVATIVE EXPERIMENT


170 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 171

º··ÕÕè 11

¡ÒõԴµ ÍÍØ»¡Ã³ ÃкººÑÊ I2C ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ¡ÒõԴµ ͡ѺÍØ»¡Ã³ ¼Ò ¹ÃкººÑÊ I2C à» ¹ÍÕ¡Ë¹Ö§è ¤ÇÒÁÊÒÁÒö·Õäè Áâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÃͧÃÑºä´ áÅÐ mirkoC ¤ÍÁä¾àÅÍà ¡Áç äÕ ÅºÃÒÃÕáÅп §¡ ª¹Ñè ·ÕÊè ¹ÑºÊ¹Ø¹¡Ò÷íÒ§Ò¹´ Ç â´ÂẠ§ÍÍ¡ à» ¹ 2 Ẻ¤×Í äźÃÒÃÕÊÒí ËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕÁè âÕ Á´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ I2C (Master MSSP) áÅÐäźÃÒÃÕÊÒí ËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õäè Á ÁâÕ Á´ÙŴѧ¡Å ÒÇËÃ×͡óբҾÍà µ¢Í§âÁ´ÙźÑÊ I2C äÁ à¾Õ§¾Íµ ͤÇÒÁµ ͧ¡ÒÃ㪠§Ò¹

11.1 äźÃÒÃÕÃкººÑÊ I2C 11.1.1 ¿ §¡ ª¹Ñè I2C_Init 㪠¡Òí ˹´¤ ÒàÃÔÁè µ ¹áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò¢Í§ÃкººÑÊ I2C àÁ×Íè µ ͧ¡ÒõԴµ ÍâÁ´ÙźÑÊ I2C ¨Ðµ ͧàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¡é Í ¹àÊÁÍ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void I2C_Init(unsigned long clock);

µÑÇá»Ã

¤×Í ¤ÇÒÁ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª 㹡ÒÃÊ×Íè ÊÒâ ÍÁÙŠ˹ ÇÂà» ¹ Hz ÊíÒËÃѺºÑÊ I2C ÁҵðҹÁÕ 2 âËÁ´ ¤×Í âËÁ´¤ÇÒÁàÃçǵèÒí 100kHz áÅÐâËÁ´¤ÇÒÁàÃçÇÊÙ§ 400 kHz clock

µÑÇÍ ҧ·Õè 11-1 I2C_Init(100000);

à» ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ I2C áÅСíÒ˹´ÊÑ­­Ò³¹ÒÌ ¡Òà» ¹âËÁ´¤ÇÒÁàÃçǵèÒí 100kHz


172 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

11.1.2 ¿ §¡ ª¹Ñè I2C_Start 㪠¡Òí ˹´ãË ºÊÑ Ç Ò§ áÅÐÊ §ÊÑ­­Ò³ Start ÍÍ¡ä» ¡ ͹㪠§Ò¹µ ͧàÃÕ¡¿ §¡ ª¹Ñè I2C_Init ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short I2C_Start(void);

¡Òä׹¤ Ò

¶ ÒäÁ Á¢Õ Í ¼Ô´¾ÅÒ´¿ §¡ ª¹Ñè ¹Õ¨é Ф׹¤ Ò 0 ¡ÅѺÁÒ

µÑÇÍ ҧ·Õè 11-2 I2C_Start();

11.1.3 ¿ §¡ ª¹Ñè I2C_Repeated_Start ¿ §¡ ª¹Ñè ¹Õ¨é ÐÊ §ÊÑ­­Ò³àÃÔÁè µ ¹ËÃ×Í Start ¤ÃÑ§é ·Õè 2 ÍÍ¡ä» â´ÂÂѧäÁ Á¡Õ ÒÃÊ §ÊÑ­­Ò³ËÂØ´ËÃ×Í Stop ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void I2C_Repeated_Start(void);

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

11.1.4 ¿ §¡ ª¹Ñè I2C_Is_Idle à» ¹¿ §¡ ª¹Ñè ·´ÊͺÃкººÑÊ I2C Ç Ò Ç Ò§¾Ã ÍÁ·ÕÃè ºÑ Ê §¢ ÍÁÙÅÍÍ¡ä»ËÃ×ÍäÁ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short I2C_Is_Idle(void);

¡Òä׹¤ Ò

¶ ÒºÑÊÇ Ò§ ¨Ð¤×¹¤ Ò 1 ¡ÅѺÁÒ ¡Ã³Õ͹×è æ ¨Ð¤×¹¤ Ò 0

µÑÇÍ ҧ·Õè 11-4 if (I2C_Is_Idle()) { I2C_Start(); ... }


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 173

11.1.5 ¿ §¡ ª¹Ñè I2C_Rd

㪠ÍÒ ¹¢ ÍÁÙÅ¢¹Ò´ 1 亵 ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ I2C â´Â¨Ðµ ͧÁÕ¡ÒÃÊ §ÊÑ­­Ò³ ÃѺÃÙ (Acknowledge : ACK) ËÃ×Í äÁ ÃºÑ ÃÙ (Not Acknowledge : NACK) ÍÍ¡ä»´ Ç ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õé ¨Ðµ ͧàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè I2C_Init áÅÐ I2C_Start ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short I2C_Rd(unsigned short ack);

µÑÇá»Ã ack

¶ Òà» ¹ 0 ¨ÐäÁ ʧ Acknowledge ¶ Òà» ¹¤ ÒÍ×¹è æ ¨ÐÊ §ÊÑ­­Ò³ÃѺÃÙË Ã×Í Acknowledge

µÑÇÍ ҧ·Õè 11-5 unsigned short take; ... take = I2C_Rd(0);

11.1.6 ¿ §¡ ª¹Ñè I2C_Wr à» ¹¿ §¡ ªÑè¹ÊíÒËÃÑºÊ §¢ ÍÁÙÅ¢¹Ò´ 1 亵 ÍÍ¡ä»ÂѧÃкººÑÊ I2C ¡ ͹㪠§Ò¹¿ §¡ ªÑè¹¹Õé¨Ð µ ͧàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè I2C_Init áÅÐ I2C_Start ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short I2C_Wr(unsigned short data);

µÑÇá»Ã data

¤×Í¢ ÍÁÙÅ¢¹Ò´ 1 亵 ·µÕè Í §¡ÒÃà¢Õ¹ä»ÂѧÃкººÑÊ I2C

¡Òä׹¤ Ò

¤×¹¤ Ò 0 ¶ ÒäÁ Á¢Õ Í ¼Ô´¾ÅÒ´à¡Ô´¢Ö¹é

µÑÇÍ ҧ·Õè 11-6 I2C_Write(0xA3);

11.1.7 ¿ §¡ ª¹Ñè I2C_Stop à» ¹¿ §¡ ª¹Ñè ÊíÒËÃÑºÊ §ÊÑ­­Ò³ Stop ãË ¡ºÑ ÃкººÑÊ I2C ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void I2C_Stop(void);

µÑÇÍ ҧ·Õè 11-7 I2C_Stop();


174 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

¡Ãͺá¡·Õè 11-1 : ¤ÇÒÁÃÙà º×Íé §µ ¹¢Í§ÃкººÑÊ I2C I2C  ÍÁÒ¨Ò¡ Inter-IC Communication ËÁÒ¶֧ ¡ÒõԴµ ÍÊ×Íè ÊÒÃÃÐËÇ Ò§äÍ«Õ â´ÂºÑÊ I2C ä´ ÃºÑ ¡ÒþѲ¹Ò¢Ö¹é â´Â¿ Å»Ô Ê (Philips) ´ ǨشÁا ËÁÒÂËÅÑ¡¤×Í µ ͧ¡ÒÃãË äÍ«ÕËÃ×ÍâÁ´ÙÅÊÒÁÒöµÔ´µ Í ÊÑ§è §Ò¹ áÅФǺ¤ØÁÀÒÂãµ ÊÒÂÊÑ­­Ò³ à¾Õ§ 2 àÊ ¹ àÊ ¹Ë¹Ö§è ¤×Í ÊÒ¢ ÍÁÙÅ ÍÕ¡àÊ ¹Ë¹Ö§è ¤×Í ÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª 㹡ÒáíÒ˹´¨Ñ§ËÇСÒ÷íÒ§Ò¹ ¡Òõ Íà ÇÁ ¡Ñ¹¢Í§ÍØ»¡Ã³ º¹ºÑÊ I2C ·íÒä´ §Ò ÂÁÒ¡ à¾Õ§µ ÍÊÒ¢ ÍÁÙÅáÅÐÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§ÍØ»¡Ã³ áµ ÅеÑÇ¢¹Ò¹¡Ñ¹ä» Ê Ç¹ ¡ÒáíÒ˹´áÍ´à´ÃÊÊíÒËÃѺµÔ´µ ÍÍØ»¡Ã³ áµ ÅеÑÇ ¨Ð㪠ÃËÑÊ¢ ÍÁÙÅà ÇÁ¡Ñº¡ÒáíÒ˹´ÊÀÒÇÐÅͨԡ·Õ¢è ÒáÍ´à´ÃÊ ÊÒ¢ ÍÁÙź¹ºÑÊ I2C ÁÕªÍ×è àÃÕ¡Í ҧ໠¹·Ò§¡ÒÃÇ Ò ÊÒ¢ ÍÁÙÅ͹ءÃÁ ËÃ×Í SDA (Serial Data line) Ê Ç¹ÊÒ ÊÑ­­Ò³¹ÒÌ ¡ÒÁÕªÍ×è àÃÕÂ¡Ç Ò ÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò͹ءÃÁ ËÃ×Í SCL (Serial Clock line) 㹡ÒÃ͸ԺÒµ Í仹ըé Ð àÃÕ¡ÊÒÂÊÑ­­Ò³·Ñ§é ÊÍ§Ç Ò ÊÒ SDA áÅÐ SCL

¤Ø³ÊÁºÑµâÔ ´Â·ÑÇè 仢ͧºÑÊ I2C ÊÒ SDA áÅÐ SCL à» ¹ÊÒÂÊÑ­­Ò³ 2 ·ÔÈ·Ò§ (bi-directional line) µ ͧÁÕ¡Òõ ͵Ñǵ Ò¹·Ò¹¾ÙÅÍÑ»¡Ñºáç´Ñ¹ +5V äÇ µÅÍ´àÇÅÒ à¾×Íè ãË ÊÒÂÁÕʶҹÐÅͨԡÊ٧㹢³Ð·Õäè Á Á¡Õ ÒõԴµ Í㪠§Ò¹ ·Ñ§é Âѧª ÇÂ㹡Òû ͧ¡Ñ¹ÊÑ­­Ò³Ãº¡Ç¹·Õè ÍÒ¨ÁÕࢠÒÁÒã¹ÊÒÂÊÑ­­Ò³·Ñ§é Êͧǧ¨ÃàÍÒµ ¾µØ ¢Í§ÍØ»¡Ã³ ·µÕè Í ÍÂÙº ¹ºÑÊ I2C µ ͧÁÕÅ¡Ñ É³Ðà» ¹Ç§¨Ãà´Ã¹à» ´ (opendrain) ËÃ×ͤÍÅàÅç¡àµÍà ໠´ (open-collector) ´Ñ§áÊ´§ÃÒÂÅÐàÍÕ´ã¹ÃÙ»·Õè A3-1 ÍѵÃÒ¡Òö Ò·ʹ¢ ÍÁÙź¹ºÑÊ I2C ÊÙ§¶Ö§ 100 ¡ÔâźԵµ ÍÇÔ¹Ò·Õã¹âËÁ´»¡µÔ (standard mode) áÅÐÊÙ§¶Ö§ 400 ¡ÔâźԵµ ÍÇÔ¹Ò·Õã¹âËÁ´¤ÇÒÁàÃçÇÊÙ§ (fast mode) (µÒÁ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤·Õè Philips ¡íÒ˹´) ÍØ»¡Ã³ ·µÕè Í Ã ÇÁÍÂÙº ¹ ºÑÊ I2C ¨Ðµ ͧÁÕ¤Ò ¤ÇÒÁ¨Øä¿¿ ÒÃÇÁ·Õàè ¡Ô´¢Ö¹é ÃÐËÇ Ò§ÊÒ SDA áÅÐ SCL äÁ à¡Ô¹ 400pF ¡ÒÃࢠҶ֧ÍØ»¡Ã³ º¹ºÑÊ I2C 㪠¢Í ÁÙÅÊíÒËÃѺ¡ÒÃࢠҶ֧ 2 ¤ Ò¤×Í 7 ºÔµ (7-bit addressing) ËÃ×Í 10 ºÔµ (10-bit addressing)

ËÅÑ¡¡ÒâͧºÑÊ I2C ºÑÊ I2C »ÃСͺ´ ÇÂÊÒÂÊÑ­­Ò³ 2 àÊ ¹ ´Ñ§·Õäè ´ ¡Å ÒÇÁÒáŠǤ×Í SDA áÅÐ SCL ÍØ»¡Ã³ ·µÕè Í ¾ ǧº¹ºÑÊÊÒÁÒö ÁÕä´ ÁÒ¡ÁÒ ´Ñ§¹Ñ¹é ¨Ö§µ ͧÁÕ¡ÒáíÒ˹´ÃٻẺ¢Í§¡ÒõԴµ ͺ¹ºÑÊ ËÃ×ÍàÃÕÂ¡Ç Ò â»ÃⵤÍÅ (protocol) à¾×Íè ãË ¼ãÙ ª §Ò¹ ·ÃÒºÇ Ò ¢³Ð¹ÕÍé »Ø ¡Ã³ ã´µÔ´µ ͡ѹÍÂÙ áÅÐÍØ»¡Ã³ µÇÑ ã´à» ¹µÑÇÃѺËÃ×͵ÑÇÊ § µ Í仹ըé ТÍ͸ԺÒÂÅѡɳР˹ Ò·Õè áÅйÔÂÒÁ ¢Í§ÍØ»¡Ã³ ·µÕè Í ÍÂÙº ¹ºÑÊ I2C à¾×Íè à» ¹¢ ͵¡Å§¾×¹é °Ò¹¡ ͹·Õ¨è Ð͸ԺÒ¡Ò÷íÒ§Ò¹¢Í§ºÑÊ I2C µ Íä» ÍØ»¡Ã³ ·àÕè » ¹¼ÙÊ Ã Ò§¢ ÍÁÙÅËÃ×ÍÊ §¢ ÍÁÙÅ àÃÕÂ¡Ç Ò µÑÇÊ § (transmitter) ÍØ»¡Ã³ ·àÕè » ¹¼Ùà ºÑ ¢ ÍÁÙÅ àÃÕÂ¡Ç Ò µÑÇÃѺ (receiver) ã¹ÍØ»¡Ã³ º¹ºÑÊ I2C ÊÒÁÒö໠¹ä´ ·§Ñé µÑÇÃѺáÅеÑÇÊ § ºÒ§ÍØ»¡Ã³ ·Òí ˹ Ò·Õàè » ¹µÑÇÃѺà¾Õ§Í ҧà´ÕÂÇ ¨ÐäÁ ÁÕ ÍØ»¡Ã³ ã´º¹ºÑÊ I2C ·Õ·è Òí ˹ Ò·Õàè » ¹µÑÇÊ §à¾Õ§Í ҧà´ÕÂÇ ÍØ » ¡Ã³ ·Õè ·í Ò Ë¹ Ò ·Õè ¤ Ǻ¤Ø Á ¨Ñ § ËÇСÒ÷í Ò §Ò¹ ËÃ×Í¡ÒõԴµ ͺ¹ºÑÊ I2C àÃÕÂ¡Ç Ò ÁÒÊàµÍà (master) ÍØ»¡Ã³ ·Õè¶Ù¡¤Çº¤ØÁËÃ×ÍÍØ»¡Ã³ ·Õèµ Í¾ ǧࢠÒä» º¹ºÑÊ I2C àÃÕÂ¡Ç Ò ÊàÅ¿ (slave) ¢ Í¡íÒ˹´¢Í§¡ÒõԴµ ͺ¹ºÑÊ I2C ¤×Í (1) ¡Òö Ò·ʹ¢ ÍÁÙŨÐà¡Ô´¢Ö¹é àÁ×Íè ºÑÊÇ Ò§à· Ò¹Ñ¹é (2) ã¹ÃÐËÇ Ò§¡Òö Ò·ʹ¢ ÍÁÙÅ àÁ×Íè ã´¡çµÒÁ·ÕÊè Ò ÍØ»¡Ã³ ºÑÊ µÑÇ·Õè 1 ÍØ»¡Ã³ ºÑÊ µÑÇ·Õè 2 SCL ÁÕʶҹÐà» ¹ÅͨԡÊÙ§ ÊÒ¢ ÍÁÙŵ ͧÃÑ¡ÉÒ¢ ÍÁÙÅäÇ ÍÂ Ò ÃÙ»·Õè A11-1 â¤Ã§Êà ҧǧ¨Ã·Ò§àÍÒµ ¾µØ ¢Í§ÍØ»¡Ã³ ãË à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§¢Ö¹é à´ç´¢Ò´ Áԩйѹé ÊÑ­­Ò³·Õàè ¡Ô´¢Ö¹é ¨Ðä´ ÃºÑ ¡ÒÃá»Å¤ÇÒÁËÁÒÂà» ¹ÊÑ­­Ò³¤Çº¤ØÁá·¹ ÃкººÑÊ I2C +5V

R2

SDA (Serial Data line)

R2

SCL (Serial Clock line)

SCLKN1 OUT

DATAN1 OUT

SCLKN2 OUT

DATAN2 OUT

SCLK IN

DATA IN

SCLK IN

DATA IN

IC

IC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 175

ÊÀÒÇзÕàè ¡Ô´¢Ö¹é º¹ºÑÊ I2C ÁÕ´Ç Â¡Ñ¹ 5 ÊÀÒÇÐ ´Ñ§¹Õé (1) ºÑÊÇ Ò§ (Bus not busy) ÊÀÒÇйÕàé ¡Ô´¢Ö¹é àÁ×Íè ʶҹÐÅͨԡº¹ÊÒ SDA áÅÐ SCL à» ¹ÅͨԡÊÙ§·Ñ§é ¤Ù ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò ¡Òö Ò·ʹ¢ ÍÁÙÅÊÒÁÒöàÃÔÁè µ ¹¢Ö¹é ä´ (2) àÃÔÁè µ ¹¡Òö Ò·ʹ¢ ÍÁÙÅ (start data transfer) à¡Ô´¢Ö¹é àÁ×Íè ÊÒ SDA ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§ÃдѺÅͨԡ¨Ò¡ Ê٧仵èÒí ã¹¢³Ð·ÕÊè Ò SCL ÁÕʶҹÐÅͨԡÊÙ§ àÃÕ¡ÊÀÒÇзÕàè ¡Ô´¢Ö¹é ¹ÕÇé Ò ÊÀÒÇÐàÃÔÁè µ ¹ (START) (3) ¢ ÍÁÙÅ´íÒçÍÂÙº ¹ºÑÊ (data valid) ÊÀÒÇйÕàé ¡Ô´¢Ö¹é ¶Ñ´¨Ò¡ÊÀÒÇÐàÃÔÁè µ ¹ â´ÂʶҹÐÅͨԡ·Õàè ¡Ô´¢Ö¹é º¹ÊÒ SDA ¡ç¤Í× ¢ ÍÁÙÅ·Õ·è Òí ¡Òö Ò·ʹ àÁ×Íè ÊÒ SCL à» ¹ÅͨԡÊÙ§ ʶҹзÕÊè Ò SDA µ ͧ¤§·Õè à¾×Íè ãË Í»Ø ¡Ã³ ÃºÑ ÃÙ¢ Í ÁÙÅã¹ ¨Ñ§ËÇйѹé Ç Ò à» ¹ 0 ËÃ×Í 1 ¢ ÍÁÙÅÍÒ¨à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§ä´ ã¹¢³Ð·ÕÊè Ò SCL à» ¹ÅͨԡµèÒí áµ àÁ×Íè ã´¡çµÒÁ·Õµè Í § ¡ÒÃãË à¡Ô´¡Òö Ò·ʹ¢ ÍÁÙÅÍ ҧÊÁºÙó ʶҹÐÅͨԡ·Õ¢è Ò SDA µ ͧ¤§·Õµè ÅÍ´ª ǧàÇÅÒ·ÕÊè Ò SCL ÁÕʶҹÐÅͨԡÊÙ§ ËÒ¡à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§Ê¶Ò¹ÐÅͨԡ㹢³Ð·ÕÊè Ò SCL ÁÕÅͨԡÊÙ§ÍÂÙ¹ ¹Ñé ÍØ»¡Ã³ ÁÒÊàµÍà ··Õè Òí ¡ÒäǺ¤ØÁ¡Òö Ò·Í´ ¢ ÍÁÙŨÐá»Å¤ÇÒÁËÁÒÂà» ¹ÊÀÒÇÐËÂØ´ËÃ×ÍÊÀÒÇÐàÃÔÁè µ ¹¡çä´ ·íÒãË ¢Í ÁÙÅ·Õ·è Òí ¡Òö Ò·ʹ¹Ñ¹é à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹é (4) ÃѺÃÙ¢ Í ÁÙÅ (acknowledge) à¡Ô´¢Ö¹é ËÅѧ¨Ò¡·Õ¡è Òö Ò·ʹ¢ ÍÁÙŨҡµÑÇÊ §ÁÒÂѧµÑÇÃѺà¡Ô´¢Ö¹é Í ҧÊÁºÙó â´ÂµÑÇÊ §¨Ð·íÒ¡ÒÃÊ §¢ ÍÁÙÅÁÒ 1 ºÔµàÃÕÂ¡Ç Ò ºÔµÃѺÃÙ (acknowledge bit) ÁÕʶҹÐà» ¹ÅͨԡÊÙ§ ËÅѧ¨Ò¡Ê §¢ ÍÁÙÅÁҤú ¶ ǹ Ê Ç¹ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒ¡ÒÃÊ §ÊÑ­­Ò³ÃѺÃÙ¾ àÔ ÈÉ«Ö§è ÊÑÁ¾Ñ¹¸ ¡ºÑ ÊÑ­­Ò³¹ÒÌ ¡Ò ÍØ»¡Ã³ ÊàÅ¿·Õ¶è ¡Ù Í Ò§¶Ö§ã¹¡Òà µÔ ´ µ Í ËÃ× Í ¡í Ò ÅÑ § µÔ ´ µ Í ÍÂÙ ã ¹¢³Ð¹Ñé ¹ ¡ç ¨ Сí Ò à¹Ô ´ ºÔ µ ÃÑ º ÃÙ ·Õè ÁÕ Ê ¶Ò¹ÐÅÍ¨Ô ¡ µèí Ò à¾×è Í µÍºÊ¹Í§ãË · ÃÒºÇ Ò ä´ ÃѺ¢ ÍÁÙÅã¹áµ ÅÐ亵 àÃÕºà ÍÂáÅ Ç (5) ËÂØ´¡Òö Ò·ʹ¢ ÍÁÙÅ (stop data transfer) à¡Ô´¢Ö¹é àÁ×Íè ÊÒ SDA ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§ÃдѺÅͨԡ¨Ò¡µèÒí ä»ÊÙ§ ã¹¢³Ð·ÕÊè Ò SCL ÁÕʶҹÐÅͨԡÊÙ§ àÃÕ¡ÊÀÒÇзÕàè ¡Ô´¢Ö¹é ¹ÕÇé Ò ÊÀÒÇÐËÂØ´ (STOP) ã¹ÃÙ»·Õè A11-2 à» ¹ä´ÍÐá¡ÃÁàÇÅÒ·Õáè Ê´§¶Ö§¡ÒÃà¡Ô´ÊÀÒÇе Ò§æ º¹ºÑÊ I2C äÁ ÇÒ ¨Ðà» ¹ÊÀÒÇкÑÊÇ Ò§,àÃÔÁè µ ¹, ¶ Ò·ʹ¢ ÍÁÙÅ, ÃѺÃÙ áÅÐËÂØ´¡Òö Ò·ʹ¢ ÍÁÙÅ

¡Ò÷íÒ§Ò¹º¹ºÑÊ I2C ¡ ͹·Õ¨è ÐàÃÔÁè µ ¹¡Òö Ò·ʹ¢ ÍÁÙÅÃÐËÇ Ò§ÍØ»¡Ã³ µÒ §æ ·Õµè Í ÍÂÙº ¹ºÑÊ µ ͧÁÕ¡ÒÃÍ Ò§¶Ö§ÍØ»¡Ã³ àÊÕ¡ ͹ â´Â¡ÒÃ Í Ò§¶Ö§ÍØ»¡Ã³ º¹ºÑÊ I2C ¹Ñ¹é ¨Ð㪠¡ÒÃÍ Ò§¶Ö§áºº 7 ºÔµËÃ×Í 10 ºÔµ 㹡óշÁÕè ÍÕ »Ø ¡Ã³ µÍ ÍÂÙº ¹ºÑÊäÁ ÁÒ¡ 㪠¡ÒÃÍ Ò§¶Ö§ Ẻ 7 ºÔµ¡çà¾Õ§¾Í áµ ¶Ò ÁÕÍ»Ø ¡Ã³ µÍ ÍÂÙº ¹ºÑÊÁÒ¡¡Ç Ò 127 áÍ´à´ÃÊ ¨íÒà» ¹µ ͧ㪠¡ÒÃÍ Ò§¶Ö§áºº 10 ºÔµ ËÅѧ¨Ò¡ ·Õµè ´Ô µ ÍÍØ»¡Ã³ áµ ÅеÑÇä´ àÃÕºà ÍÂáÅ Ç ¡ç¨ÐàÃÔÁè µ ¹¡Òö Ò·ʹ¢ ÍÁÙšѹµ Íä» SDA à»ÅÕÂè ¹¨Ò¡ "1" à» ¹ "0" ã¹¢³Ð·Õè SCL à» ¹ "1" ¹Õ¤è ×Í ÊÀÒÇÐàÃÔèÁµ ¹

SDA à»ÅÕÂè ¹¨Ò¡ "0" à» ¹ "1" ã¹¢³Ð·Õè SCL à» ¹ "1" ¹Õ¤è ×Í ÊÀÒÇÐËÂØ´

SDA

SCL

SDA à» ¹ "1" SCL à» ¹ "1" ÊÀÒÇкÑÊÇ Ò§

SDA ¤§·Õ·è ÅèÕ Í¨Ô¡ "0" SDA ¤§·Õ·è ÅèÕ Í¨Ô¡ "1" ã¹¢³Ð·Õè SCL à» ¹ "1" ¶×Íà» ¹ ã¹¢³Ð·Õè SCL à» ¹ "1" ¶×Íà» ¹ ¡Òö Ò·ʹ¢ ÍÁÙÅ "0" ¡Òö Ò·ʹ¢ ÍÁÙÅ "1"

ÃÙ»·Õè A11-2 ä´ÍÐá¡ÃÁàÇÅÒáÊ´§Ê¶Ò¹Ðµ Ò§æ º¹ÃкººÑÊ I2C


176 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

ºÔµ 7

ºÔµ 6

ºÔµ 5

ºÔµ 4

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

ºÔµ 3

ºÔµ 2

ºÔµ 1

¡ÒÃÍ Ò§¶Ö§áºº 7 ºÔµ (7-bit addressing)

ºÔµ 0

¢ ÍÁÙÅ亵 áá·Õèà¡Ô´¢Öé¹ËÅѧ¨Ò¡ÊÀÒÇÐàÃÔèÁµ ¹¤×Í ºÔµ¡íÒ˹´áÍ´à´Ãʤ§·Õè ¢ ÍÁÙÅ·Õè㪠㹡ÒÃÍ Ò§¶Ö§ÍØ»¡Ã³ ·Õèµ Í§¡ÒõԴµ Í â´ÂÁÕÃÙ» ẺáÊ´§ã¹ÃÙ»·Õè A11-3 ã¹ 7 ºÔµº¹ÃÇÁ·Ñ§é ºÔµ MSB ´ Ç ÃÙ»·Õè A11-3 ÃٻẺ¢ ÍÁÙÅ㹡ÒÃÍ Ò§áÍ´à´ÃÊ ¨Ðà» ¹¢ ÍÁÙÅáÍ´à´ÃʢͧÍØ»¡Ã³ ÊàÅ¿·Õµè Í §¡ÒõԴµ Í â´Â Ạ§à» ¹ ºÔµ¡íÒ˹´áÍ´à´Ãʤ§·Õè (fixed address bit) ¨íҹǹ 4 ºÔµ «Ö§è ¢ ÍÁÙŹÕÍé »Ø ¡Ã³ áµ ÅеÑǨж١¡íÒ˹´ÁÒ¨Ò¡¼Ù ¼ÅÔµ äÁ ÊÒÁÒöà»ÅÕè¹á»Å§á¡ ä¢ä´ ¶Ñ´ÁÒÍÕ¡ 3 ºÔµà» ¹ºÔµ¡íÒ˹´áÍ´à´ÃÊ·ÕèÊÒÁÒöâ»Ãá¡ÃÁä´ (programmable address bit) â´Â¼Ùã ª §Ò¹µ ͧ¡íÒ˹´Ê¶Ò¹ÐÅͨԡãË á¡ ¢Ò A0-A2 ¢Í§ÍØ»¡Ã³ ·ÁÕè ¡Õ ÒÃàª×Íè Áµ ÍẺºÑÊ I2C Ê Ç¹ã¹ºÔµ LSB à» ¹ºÔµ·Õãè ª ¡Òí ˹´¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺÍØ»¡Ã³ ÊàÅ¿µÑǹѹé æ ËÒ¡ºÔµ LSB à» ¹ 0 ËÁÒ¶֧µ ͧ¡ÒÃà¢Õ¹ ¢ ÍÁÙÅä»ÂѧÍØ»¡Ã³ ¹¹Ñé ¶ Òà» ¹ 1 ¨Ðà» ¹¡ÒÃÍ Ò¹¢ ÍÁÙŨҡÍØ»¡Ã³ ÊàÅ¿ ¢ ÍÁÙÅã¹äºµ µÍ ÁÒ¤×Í ¢ ÍÁÙŤǺ¤ØÁ (control byte) ã¹ÍØ»¡Ã³ áµ ÅеÑÇÁÕ¡ÒáíÒ˹´¢ ÍÁÙŤǺ¤ØÁ·Õáè µ¡µ Ò§¡Ñ¹ ä» Â¡µÑÇÍ ҧ äÍ«Õ¢ÂÒ¾Íà µÁÕ¢Í ÁÙŤǺ¤ØÁ·Õãè ª ¡Òí ˹´Ç Ò ºÔµã´à» ¹ÍÔ¹¾Øµ ºÔµã´à» ¹àÍÒµ ¾µØ ã¹¢³Ð·Õäè Í«Õ ADC/ DAC µ ͧ¡Òâ ÍÁÙŤǺ¤ØÁà¾×Íè ¡íÒ˹´ãË ·Òí §Ò¹à» ¹Ç§¨Ã ADC ËÃ×Í DAC à» ¹µ ¹ ¢ ÍÁÙÅã¹äºµ µÍ ÁÒ¤×Í ¢ ÍÁÙÅ·Õ·è Òí ¡Òö Ò·ʹ¨ÃÔ§ (data) ËÅѧ¨Ò¡·ÕÁè ¡Õ Òö Ò·ʹ¢ ÍÁÙÅã¹áµ ÅÐ亵 ÍØ»¡Ã³ ÊàÅ¿·Õäè ´ ÃºÑ ¡ÒõԴµ ͵ Í§Ê §ÊÑ­­Ò³ÃѺÃÙµ ͺ¡ÅѺÁÒ´ Ç·ء ¤Ãѧé ã¹ÃÙ»·Õè A11-4 áÊ´§ÃٻẺ¢ ÍÁÙÅ͹ءÃÁ·Õàè ¡Ô´¢Ö¹é 㹡ÒõԴµ ͺ¹ºÑÊ I2C ¢Í§¡ÒÃÍ Ò§¶Ö§áºº 7 ºÔµ X

X

X

X

A2

A1

A0

R/W

ºÔµ¡íÒ˹´áÍ´à´ÃÊ â»Ãá¡ÃÁä´

¡ÒÃÍ Ò§¶Ö§áºº 10 ºÔµ ¨ÐÁÕ¢Í ÁÙÅà¾ÔÁè àµÔÁ¢Ö¹é ÁÒàÅ硹 Í â´Âã¹äºµ ááËÅѧ¨Ò¡à¡Ô´ÊÀÒÇÐàÃÔÁè µ ¹ µ ͧ¡íÒ˹´ãË 5 ºÔµº¹ÁÕ¢Í ÁÙÅà» ¹ 11110 Ê Ç¹ÍÕ¡ 2 ºÔµ¶Ñ´ÁÒà» ¹ºÔµáÍ´à´ÃʢͧÍØ»¡Ã³ ·µÕè Í §¡ÒõԴµ Í ã¹ºÔµ LSB ¢Í§¢ ÍÁÙÅ亵 ááÂѧ¤§à» ¹¡ÒáíÒ˹´ Ç Ò µ ͧ¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺÍØ»¡Ã³ ÊàÅ¿µÑÇ·Õµè Í §¡ÒõԴµ Í´ Ç ¢ ÍÁÙÅ亵 µÍ ÁÒà» ¹¢ ÍÁÙÅáÍ´à´ÃÊã¹äºµ ·Õè 2 ¢Í§ÍØ»¡Ã³ ·µÕè Í §¡ÒõԴµ Í´ Ç ¢ ÍÁÙÅ亵 ¶´Ñ 仨֧໠¹¢ ÍÁÙŤǺ¤ØÁ ¢ ÍÁÙÅËÅѧ¨Ò¡¹Ñ¹é ¡ç¨Ðà» ¹¢ ÍÁÙŨÃÔ§·Õãè ª 㹡ÒõԴµ Í àª ¹à´ÕÂǡѺ¡ÒÃÍ Ò§¶Ö§áºº 7 ºÔµ ËÅѧ¨Ò¡¶ Ò·ʹ¢ ÍÁÙŤú·Ø¡äºµ µ ͧÁÕÊÀÒÇÐÃѺÃÙà ¡Ô´¢Ö¹é à¾×Íè ãË ¡Ãкǹ ¡Òö Ò·ʹ¢ ÍÁÙÅÊÒÁÒö´íÒà¹Ô¹µ Íä»ä´ ã¹ÃÙ»·Õè A11-5 áÊ´§ÃٻẺ¢ ÍÁÙÅ͹ءÃÁ¢Í§¡ÒÃÍ Ò§¶Ö§áºº 10 ºÔµ ¢ ÍÁÙÅ亵 ·èÕ 1 àÅ×Í¡áÍ´à´Ãʢͧ ÍØ»¡Ã³ ·µèÕ Í §¡ÒõԴµ Í áÅШشÁا ËÁÒÂ㹡Òà µÔ´µ Í (Í Ò¹ËÃ×Íà¢Õ¹)

àÃÔÁè µ ¹

A6-A0

¢ ÍÁÙÅ亵 ·èÕ 2 Ê §¢ ÍÁÙŤǺ¤ØÁ¡Òà ·íÒ§Ò¹¢Í§ÍØ»¡Ã³ ·Õµè Í §¡ÒõԴµ ÍËÃ×Í control word R/W=0

ÃѺÃÙ

C6-C0

Ê §ÁÒ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿·Õ·è Òí ¡ÒõԴµ Í´ ÇÂ

¢ ÍÁÙÅ亵 µÍ ä» (n 亵 ) ¢ ÍÁÙŨÃÔ§·Õµè Í §¡Òö Ò·ʹ R/W

ÃѺÃÙ

ÃѺÃÙ

D7-D0

ËÂØ´

Ê §ÁÒ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿·Õ·è Òí ¡ÒõԴµ Í´ ÇÂ

ÃÙ»·Õè A11-4 ÃٻẺ¢ ÍÁÙÅ㹡ÒÃÍ Ò§¶Ö§áºº 7 ºÔµ ¢ ÍÁÙÅ亵 ·Õè 1 àÅ×Í¡¡ÒÃÍ Ò§¶Ö§áºº 10 ºÔµ (¢ ÍÁÙŤ×Í 11110xx â´Â xx ¤×Í ºÔµáÍ´à´ÃÊ 2 ºÔµº¹)

àÃÔÁè µ ¹

1 1 1 1 0 A9 A8

R/W=0 ÃѺÃÙ

¢ ÍÁÙÅ亵 ·Õè 3 Ê §¢ ÍÁÙŤǺ¤ØÁ ¡Ò÷íÒ§Ò¹ ¢Í§ÍØ»¡Ã³ ·Õèµ Í§¡Òà µÔ´µ ÍËÃ×Í control word

¢ ÍÁÙÅ亵 ·Õè 2 ¢ ÍÁÙÅáÍ´à´ÃÊ 8 ºÔµÅ Ò§

A7-A0

ÃѺÃÙ

Ê §ÁÒ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ ·Õè·íÒ¡ÒõԴµ Í´ ÇÂ

ÃÙ»·Õè A11-5 ÃٻẺ¢ ÍÁÙÅ㹡ÒÃÍ Ò§¶Ö§áºº 10 ºÔµ

C6-C0

¢ ÍÁÙÅ亵 µ Íä» (n 亵 ) ¢ ÍÁÙŨÃÔ§·Õèµ Í§¡Òà ¶ Ò·ʹ

R/W

ÃѺÃÙ

D7-D0 Ê §ÁÒ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ ·Õè·íÒ¡ÒõԴµ Í´ ÇÂ

ÃѺÃÙ ËÂØ´


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 177

»¯ÔºµÑ ¡Ô Ò÷Õè 20 µÔ´µ ͺÍà ´¢ÑºÃÕàÅ 16 ª ͧ ZX-RELAY16 ´ Ç¿ §¡ ª¹Ñè I2C ZX-RELAY16 à» ¹ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ·Õ¤è Ǻ¤ØÁ¼ Ò¹ÃкººÑÊ I2C â´Âº¹µÑǺÍà ´ãª äÍ«Õ¢ÂÒ¾Íà µ ¼ Ò¹ÃкººÑÊ I2C àºÍà MCP23016 ·íÒ˹ Ò·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹·Ñ§é ËÁ´ ÃÙ»·Õè L20-1 áÊ´§Ë¹ ҵҢͧºÍà ´ ZXRELAY16 Ê Ç¹ÃÙ»·Õè L20-2 à» ¹Ç§¨ÃÊÁºÙó ¢Í§ºÍà ´ ZX-RELAY16 à¹×Íè §¨Ò¡ãª äÍ«Õ··Õè Òí §Ò¹¼ Ò¹ÃкººÑÊ I2C ¨Ö§·íÒãË ÊÒÁÒöµ ; ǧºÍà ´¢ÑºÃÕàÅ ZX-RELAY16 ãË ·Òí §Ò¹Ã ÇÁ¡Ñ¹ä´ ÁÒ¡¶Ö§ 8 ºÍà ´ â´Â㪠ÊÒÂÊÑ­­Ò³ SDA áÅÐ SCL à¾Õ§ªØ´à´ÕÂÇ áÅСíÒ˹´áÍ´à´ÃʢͧᵠÅкÍà ´ãË áµ¡µ Ò§¡Ñ¹´ Ç¡ÒÃàÅ×Í¡¨ÑÁê à»Íà º¹ºÍà ´

¤Ø³ÊÁºÑµ¢Ô ͧºÍà ´ ZX-RELAY16 l

㪠äÍ«Õ MCP23016 ¢Í§ Microchip à» ¹äÍ«Õ¢ÂÒ¾Íà µ 2 ·ÔÈ·Ò§ (ÍÔ¹¾Øµ/àÍÒµ ¾µØ ) ¼ Ò¹ÃкººÑÊ I2C

l

¢ÑºÃÕàÅ 12V ä´ 16 µÑÇ ¾Ã ÍÁä¿áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹

l

µ ; ǧ¡Ñ¹ä´ 8 ºÍà ´ ·íÒãË ÊÒÁÒö¢ÑºÃÕàÅÂ ä´ 128 µÑÇ´ ÇÂÊÒÂÊÑ­­Ò³¤Çº¤ØÁà¾Õ§ÊͧàÊ ¹

¨Ø´µ Í˹ ÒÊÑÁ¼ÑÊÃÕàÅ ໠¹à·Íà Á¹Ô ÍźÅçÍ¡ Áդú·Ñ§é ¨Ø´µ Í»¡µÔà» ´Ç§¨Ã (NO) áÅл¡µÔµÍ ǧ¨Ã (NC) ÊÒÁÒö㪠䢤ǧà¾×Íè µ ÍËÃ×ͻŴÊÒµ Íä´ §Ò  l

l

¾Ô¡´Ñ ˹ ÒÊÑÁ¼ÑʢͧÃÕàÅ 220Vac/5A ¢ÑºâËÅ´ä´ Ê§Ù ÊØ´ 600 Çѵµ µÍ ª ͧ

l

¨Ø´µ ÍÃкººÑÊ I2C Ẻ IDC µÑǼÙ/ µÑÇàÁÕÂáÅÐẺ JST 3 ¢Ò

l

¢¹Ò´ºÍà ´ 15x8 ૹµÔàÁµÃ

¨ÑÁê à»Íà àÅ×Í¡áÍ´à´ÃʢͧºÍà ´

¨Ø´µ ÍẺ IDC µÑǼÙ/ µÑÇàÁÕ SCL ¨Ø´µ ÍẺ JST SDA ¨Ø´µ ÍẺ JST

ÃÙ»·Õè L20-1 áÊ´§Ë¹ ҵҢͧ ZX-RELAY16 ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ¼ Ò¹ÃкººÑÊ I2C


178 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

15 SDA 14 SCL +5V

17 16

RY6

R10 1.5k LED6

RY7

R11 1.5k

9

LED7

IC1 Vss MCP23016 Vss

RY8

R12 1.5k LED8

R4 4.7k*4 18

LED5

RY9 R13 1.5k

A1

LED9

A0

R14 1.5k

RY10

LED10

INT IC3 ULN2803 1 GP1.0 2 GP1.1 3 GP1.2 4 GP1.3 10 GP1.4 11 GP1.5 12 GP1.6 13 GP1.7

R15 1.5k

+VL 10

1 I1 2 I2 3 I3 4 I4 5 I5 6 I6 7 I7 8 I8

RY11

LED11

18 Q1 17 Q2 16 Q3 15 Q4 14 Q5 13 Q6 12 Q7 11 Q8

R16 1.5k LED12 R17 1.5k

RY12

RY13

LED13 R18 1.5k LED14 R19 1.5k

9

LED15 R20 1.5k

RY14

RY15

RY16

LED16

J1 DC INPUT 12Vdc

D5 1N5819

SW1 POWER ON / OFF

D6 1N4001

K21 Supply +12Vdc

IC4 7805

D1-D4 1N4001 x4

C3 220/25V

NO C NC NO C NC NO C NC

K6 RELAY2 K7 RELAY3

+12V A2

JP3 JP2 JP1 A2 A1 A0 6

NO C NC

C4 0.1/63V

C5 47/16V

+VL C7 220/16V

C6 0.1/ 63V

+5V

ÃÙ»·Õè L20-2 ǧ¨ÃÊÁºÙó ¢Í§ºÍà ´ ZX-RELAY16 «Ö§è ÁÕäÍ«ÕàºÍà MCP23016 à» ¹ËÑÇã¨

NO C NC NO C NC NO C NC NO C NC NO C NC NO C NC

K13 RELAY9

8 19

+5V

RY5

K14 RELAY10

K3 SCL

LED4 R9 1.5k

NO C NC

K15 RELAY11

C2 33pF

IC2 ULN2803

CLK

RY4

R8 1.5k

K16 RELAY12

9

18 Q1 17 Q2 16 Q3 15 Q4 14 Q5 13 Q6 12 Q7 11 Q8

K17 RELAY13

R3 3.9k

K2 SDA

1 I1 2 I2 3 I3 4 I4 5 I5 6 I6 7 I7 8 I8

K18 RELAY14

R2 3.9k

10 21 GP0.0 22 GP0.1 23 GP0.2 24 GP0.3 25 GP0.4 26 GP0.5 27 GP0.6 28 GP0.7

NO C NC

NO C NC

K19 RELAY15

R1 4.7k

+5V SDA SCL GND

20 Vdd

LED3

NO C NC

K20 RELAY16

K1A/1B IC EXPANSION

RY3

R7 1.5k

+VL

NO C NC

K8 RELAY4

C1 0.1 F

R21 510

LED2

K9 RELAY5

+5V

LED21 POWER

K10 RELAY6

RY2

R6 1.5k

NO C NC

K11 RELAY7

LED1

K12 RELAY8

RY1 R5 1.5k

K5 RELAY1

+VL


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 179

MCP23016 äÍ«Õ¢ÂÒ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¼ Ò¹ÃкººÑÊ I2C MCP23016 à» ¹äÍ«Õ¢ÂÒ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¢¹Ò´ 16 ºÔµ ¼ Ò¹ÃкººÑÊ I2C ·ÕÊè ÒÁÒö¡íÒ˹´ãË à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ä´ Í ҧÍÔÊÃÐ â´ÂÁÕ¤³ Ø ÊÁºÑµ·Ô ¹Õè Ò Ê¹ã¨´Ñ§¹Õé

¢Ò¾Íà µà» ¹áºº 2 ·ÔÈ·Ò§ ¤Çº¤ØÁà» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ä´ µÅÍ´àÇÅÒ ÊÀÒÇÐàÃÔÁè µ ¹à» ¹ÍÔ¹¾Øµ l Ê×Í è ÊÒô ÇÂÃкººÑÊ I2C ´ ÇÂâËÁ´¤ÇÒÁàÃçÇÊÙ§ä´ l ÁÕ¢ÒàÅ×Í¡áÍ´à´ÃÊ 3 ¢Ò à¾×Í è ãË ÊÒÁÒöµ ; ǧäÍ«Õä´ 8 µÑÇâ´Â㪠ºÊÑ I2C à´ÕÂǡѹ l ¢Ò¾Íà µÊÒÁÒö¢Ñº¡ÃÐáÊ·Ñ§é «Íà ÊáÅЫԧ¡ ä´ 25mA µ Í¢Ò l ÁÕ¢ÒÍÔ¹àµÍà û Ñ µ Ẻà´Ã¹à» ´ ·íÒ§Ò¹àÁ×Íè ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§·Õ¢è Ò¾Íà µÍÔ¹¾Øµ l ÁÕè Õ ÊÔ àµÍà ÊÒí ËÃѺà¡çº¤ Ò¢Ò¾Íà µÍÔ¹¾Øµ·Õàè ¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ l ÊÒÁÒöàª×Í è Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÂÍ´¹ÔÂÁä´ ·¡Ø µÑÇ l

¢Ñ¹é µÍ¹¡ÒõԴµ ͡ѺºÍà ´ ZX-RELAY16 ¡ÒõԴµ ͡ѺºÍà ´ ZX-RELAY16 ¡ç¤Í× ¡ÒõԴµ ͡ѺäÍ«Õ MCP23016 ¹Ñ¹è àͧ â´Âµ ͧà¢Õ¹â»Ãá¡ÃÁà¾×Íè ¡íÒ˹´ãË MCP23016 ·íÒ§Ò¹à¾×Íè ¡íÒ˹´ãË ¾Íà µ·Ñ§é ËÁ´à» ¹àÍÒµ ¾µØ ¨Ò¡¹Ñ¹é ¨Ö§Ê §¢ ÍÁÙÅÍÍ¡ä»Âѧ¢Ò¾Íà µ·Ñ§é ËÁ´¡ç¨Ð·íÒãË ÊÒÁÒö¤Çº¤ØÁÃÕàÅ ·§Ñé 16 µÑÇä´ ÁÕ¢¹Ñé µÍ¹¡ÒõԴµ Íâ´ÂÊÃØ»´Ñ§¹Õé (1) Ê §¤íÒÊÑ§è µÔ´µ ͡ѺäÍ«Õ MCP23016 à¾×Íè ¡íÒ˹´à» ¹âËÁ´à¢Õ¹¢ ÍÁÙÅ (2) Ê §¤íÒÊѧè à¾×Íè µÔ´µ ͡ѺÃÕ¨ÊÔ àµÍà IODIR0 (áÍ´à´ÃÊ 0x06) (3) ¡íÒ˹´ãË ¢Ò¾Íà µ 8 ºÔµÅ ҧ໠¹àÍÒµ ¾µØ â´Âà¢Õ¹¤ Ò 0 ãË ¡ºÑ ·Ø¡ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà IODIR0 (4) Ê §¤íÒÊѧè à¾×Íè µÔ´µ ͡ѺÃÕ¨ÊÔ àµÍà IODIR1 (áÍ´à´ÃÊ 0x07) (5) ¡íÒ˹´ãË ¢Ò¾Íà µ 8 ºÔµº¹ à» ¹àÍÒµ ¾µØ â´Âà¢Õ¹¤ Ò 0 ãË ¡ºÑ ·Ø¡ºÔµ¢Í§ÃÕ¨ÊÔ àµÍà IODIR1 (6) Ê §¤íÒÊѧè à¾×Íè µÔ´µ ÍÊ §¢ ÍÁÙšѺÃÕ¨ÊÔ àµÍà ¢Í§¢Ò¾Íà µäºµ ÅÒ §·Õáè Í´à´ÃÊ 0x00 (7) Ê §¤íÒÊѧè à¾×Íè µÔ´µ ÍÊ §¢ ÍÁÙšѺÃÕ¨ÊÔ àµÍà ¢Í§¢Ò¾Íà µäºµ º¹·Õáè Í´à´ÃÊ 0x01 ¨Ò¡¢Ñ¹é µÍ¹¡ÒõԴµ Í·Õ¡è Å ÒÇÁÒáÅ ÇÊÒÁÒö¹íÒÁÒà¢Õ¹໠¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹ ´Ñ§ã¹â»Ãá¡ÃÁ·Õè L20-1


180 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char I2CInit_=0; char y; int i,j; void Relay16(unsigned int x) { if (I2CInit_==0) { I2C_Init(100000); // I2C_Start(); // I2C_Wr(0x40); // I2C_Wr(0x06); // I2C_Wr(0x00); // I2C_Stop(); // I2C_Start(); I2C_Wr(0x40); I2C_Wr(0x07); I2C_Wr(0x00); I2C_Stop(); I2CInit_=1;

// // // // //

Call initial L2C Start communication Address MCP23016 and Write Command Command for access IODIR0 Set DIR0 to OUTPUT Stop communication Start communication Address MCP23016 and Write Command Command for access IODIR1 Set DIR0 to OUTPUT Stop communication

} y=x%256; I2C_Start(); I2C_Wr(0x40); I2C_Wr(0x00); I2C_Wr(y); I2C_Stop();

// // // //

Issue I2C Send byte Send byte Send byte

start signal via I2C (device address + W) (data address) (data address)

x=x/256; I2C_Start(); I2C_Wr(0x40); I2C_Wr(0x01); I2C_Wr(x); I2C_Stop();

// // // //

Issue I2C Send byte Send byte Send byte

start signal via I2C (device address + W) (data address) (data address)

} void main() { while(1) { i=1; while(i<32768) { Relay16(i); Delay_ms(500); i=i*2; } Relay16(i); Delay_ms(500); } }

// Loop // Start value // End loop value // Send Data to ZX-relay16 // Shift left // Send Last bit

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁËÅÑ¡¨Ð¹íÒ¤ Ò i ÁÒ·íÒ¡ÒÃàÅ×Íè ¹ºÔµä»·Ò§« Ò áÅ ÇÊ §ãË ¡ºÑ ¿ §¡ ª¹Ñè Relay16 () «Ö§è ·íÒ˹ Ò·Õè µÔ´µ ͡ѺºÍà ´ ZX-RELAY16 ÊíÒËÃѺ¿ §¡ ª¹Ñè Relay16() ¨Ð¡íÒ˹´ãË ¢Ò¾Íà µ·Ñ§é ËÁ´à» ¹àÍÒµ ¾µØ ¨Ò¡¹Ñ¹é ÃѺ¤ ÒµÑÇá»Ã x ࢠÒÁÒ á¡໠¹ 8 ºÔµÅ Ò§áÅÐ 8 ºÔµº¹ ¹íÒ¤ Ò 8 ºÔµÅ Ò§Ê §ä»ÂѧáÍ´à´ÃÊ 0x00 à¾×Íè ¢Ñº RELAY1 ¶Ö§ 8 áÅйíÒ¤ Ò 8 ºÔµº¹Ê §ä»ÂѧáÍ´à´ÃÊ 0x01 à¾×Íè Ê §ä»¢Ñº RELAY9 ¶Ö§ 16

â»Ãá¡ÃÁ·Õè L20-1 ä¿Å I2CrelayTest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¡ÒÃ㪠§Ò¹äźÃÒÃÕ i2c ¢Í§ mikroC ¤ÍÁä¾àÅÍà à¾×Íè µÔ´µ ͡ѺâÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 181

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L20-3 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L20-3 l Ëҡ㪠ºÍà ´ RBX-877rev.2007 ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L20-4 l

¢Ñ鹵͹¡Ò÷´Åͧ L20.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

l

¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007 àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO RELAY16 RELAY15 RELAY14 RELAY13 RELAY12 RELAY11 RELAY10 RELAY9 RELAY8 RELAY7 RELAY6 RELAY5 RELAY4 RELAY3 RELAY2 RELAY1

ON

POWER

SDA

SCL

-

SDA SCL

I C EXPANSION A2 A1 A0

ãÊ ¨ÑêÁà»Íà = Åͨԡ "0" +5V

+12V 2A

R9 10k

C3 0.1PF

11 32 Vcc 1

SW1 RESET

R8

MCLR

21+ $.&%% ) 21+ $.&&% RC4/SDA 23 12 31

RC3/SCL

18

GND OSC1

OSC2

13

14

C1 22pF

XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L20-3 ǧ¨Ã·´Åͧ㪠§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887


182 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO RELAY16 RELAY15 RELAY14 RELAY13 RELAY12 RELAY11 RELAY10 RELAY9 RELAY8 RELAY7 RELAY6 RELAY5 RELAY4 RELAY3 RELAY2 RELAY1

ON

POWER

SDA

SCL

-

SDA SCL

I C EXPANSION A2 A1 A0

ãÊ ¨ÁêÑ à»Íà = Åͨԡ "0"

+12V 2A 4.8-6V

Sound RC0

LCD RC7 RxD

BATT DOWNLOAD

RC6 TxD

RC4 SDA

RC3 SCL

POWER

LCD back light

ICD2 ON ON M-1

RESET

RBX - 877 rR ev 2 0 0 7 R PIC16F887 board

M-2 #1

#2

#3

SERVO

S+

RA4

RB0

RB3 RB0/INT

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2

ÃÙ»·Õè L20-4 ǧ¨Ã·´Åͧ㪠§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007 L20.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è I2CrelayTest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L20-1 L20.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L20.4 ¨ ÒÂä¿ãË á¡ ºÍà ´ ZX-RELAY16 áÅкÍà ´·´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà L20.5 Ãѹâ»Ãá¡ÃÁ Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ LED áÅÐÃÕàÅ º¹ºÍà ´ ZX-RELAY16 ÊѧࡵàËç¹ LED ·Õµè Òí á˹ § RELAY1 µÔ´äÅ ÅÒí ´Ñºä»¨¹¶Ö§ RELAY16 áÅÐä´ Â¹Ô àÊÕ§˹ ÒÊÑÁ¼Ñʢͧ ÃÕàÅ µÑ´µ ÍäÅ ÅíҴѺ¡Ñ¹ä»Í ҧµ Íà¹×èͧ

mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 183

»¯ÔºµÑ ¡Ô Ò÷Õè 21µÔ´µ ͡ѺâÁ´ÙÅà¢çÁ·ÔÈ´Ô¨ÔµÍÅ CMPS03 ´ Ç¿ §¡ ª¹Ñè I2C âÁ´ÙÅà¢çÁ·ÔÈ´Ô¨µÔ ÍÅ CMPS03 ÊÒÁÒöÊ×Íè ÊÒáѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ ¼Ò ¹¡ÒõÃǨ¨Ñº¤ÇÒÁ¡Ç Ò§ ¾ÑÅÊ áÅм Ò¹ÃкººÑÊ I2C â´Â ÃкººÑÊ I2C ¨ÐÊÒÁÒÃ¶Ê §¤ Ò¢ ÍÁÙŵíÒá˹ §ÍÍ¡ÁÒ·Õ¤è ÇÒÁÅÐàÍÕ´ÊÙ§ÊØ´ 0.1 ͧÈÒâ´ÂäÁ ¨Òí à» ¹µ ͧÁÕ¡Òäíҹdz¤ ÒËÃ×Í·íÒ¡ÒÃá»Å§¤ Òã´ æ ÍÕ¡ ã¹ÃÙ»·Õè L21-1 áÊ´§Ë¹ ÒµÒáÅСÒèѴ¢Ò¢Í§âÁ´ÙÅ CMPS03 Ê Ç¹ã¹ÃÙ»·Õè L21-2 áÊ´§¢ ÍÁÙŢͧºÍà ´ àª×Íè Áµ Í ADX-CMPS03 «Ö§è Í͡Ẻà¾×Íè ÍíҹǤÇÒÁÊдǡ㹡Òõ Í㪠§Ò¹ ËÒ¡·íÒ¡Ò÷´Åͧ¡ÑººÍà ´ RBX877 rev.2007 ÊÒÁÒöàª×Íè Áµ ÍࢠҡѺ¤Í¹à¹ç¡àµÍà Ẻ JST ä´ ·¹Ñ ·Õ ¶ ÒËÒ¡µ Í·´Åͧ¡ÑººÍà ´·´Åͧ NX877 plus II ãË ãª ÊÒµ Íǧ¨Ãµ Íࢠҷդè ͹à¹ç¡àµÍà IDC µÑÇàÁÕÂ

¢Ñ¹é µÍ¹¡ÒõԴµ ͡ѺâÁ´ÙÅ CMPS03 à¹×Íè §¨Ò¡µ ͧ¡ÒõԴµ ͼ Ò¹ÃкººÑÊ I2C ¨Ö§µ ͧ·ÃÒº¶Ö§áÍ´à´ÃʢͧâÁ´ÙÅ CMPS03 «Ö§è ¡ç¤Í× $C0 ÊíÒËÃѺ¡ÒÃÊ §¢ ÍÁÙÅ áÅÐ $C1 ÊíÒËÃѺ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙÅ â´Â¢Ñ¹é µÍ¹¡ÒõԴµ ͡ѺâÁ´ÙÅ CMPS03 ÁÕ´§Ñ ¹Õé µÑǵÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ KMZ51 äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡ÊíÒËÃѺ»ÃÐÁÇżŠ¡ÃÒÇ´ äÁ µÍ 㪠§Ò¹ äÁ µÍ 㪠§Ò¹ »ÃѺµÑ§é ¤ Ò¡ÒÃÇÑ´ àÍÒµ ¾µØ ¢Í§¡ÒûÃѺᵠ§¤ ÒÇÑ´ àÍÒµ ¾µØ ẺÊÑ­­Ò³¾ÑÅÊ SDA ÊíÒËÃѺàª×Íè Áµ ͼ Ò¹ÃкººÑÊ I2C SCL ÊíÒËÃѺàª×Íè Áµ ͼ Ò¹ÃкººÑÊ I2C +5V

·ÔÈà˹×Í ÃÙ»·Õè L21-1 áÊ´§Ãٻà ҧáÅеíÒá˹ §¢ÒÊíÒËÃѺ¡Òõ Í㪠§Ò¹âÁ´ÙÅ CMPS03


184 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

33.0mm 28.6mm

ADX-CMPS03

R1 4.7k

K1 SCL

R2 4.7k

S1 CAL

K4 I2C BUS

+5V

GND SCL SDA +5V

K3 PWM

31.5mm 26.7mm

>31.5mm

K2 SDA

front +5V CMPS-03 SCL Compass Digital SDA PWM CAL_OUT CAL NC NC GND

GND

PWM

>33.0mm

¨Ø´µ ÍÊÑ­­Ò³¢Í§ÃкººÑÊ I2C ÊíÒËÃѺàÊÕºÊÒµ Íǧ¨Ãà¾×èÍ㪠¡ÑººÍà ´·´ÅͧËÃ×Í á¼§µ Íǧ¨Ã (àºÃ´ºÍà ´)

¤Í¹à¹ç¡àµÍà µÇÑ àÁÕ ÊíÒËÃѺµÔ´µÑ§é âÁ´ÙÅ CMPS03

ÊÇÔµª ¡´µÔ´»Å Í´ѺÊíÒËÃѺ»ÃѺᵠ§à¾×Íè ËÒµíÒá˹ § Í Ò§ÍÔ§ (calibration) ¤Í¹à¹ç¡àµÍà PCB ¢Í§àÍÒµ ¾µØ ÊÑ­­Ò³¾ÑÅÊ

¤Í¹à¹ç¡àµÍà PCB ¢Í§ ÊÑ­­Ò³ÃкººÑÊ I2C

ÃÙ»·Õè L21-2 áÊ´§Ç§¨Ã¢Í§ºÍà ´ ADX-CMPS03 áÅСÒÃàª×Íè Áµ ͡ѺâÁ´ÙÅ CMPS03 S ta rt B it

S ta rt B it

áÍ´à´ÃÊÊíÒËÃÑºÊ §¤ Ò¢ ÍÁÙÅä»Âѧ CMPS03 = $CO 1

1

0

0

0

0

0

A7

A6

A5

A4

A3

A2

A1

1

2

3

4

5

6

7

0 R /W A C K

8

Start bit

¢ ÍÁÙŵíÒá˹ §ÃÕ¨ÊÔ àµÍà ·µÕè Í §¡ÒÃÍ Ò¹¤ Ò

9

áÍ´à´ÃÊÊíÒËÃÑºÍ Ò¹¤ Ò¢ ÍÁÙŨҡ CMPS03 = $C1

D7

D6

D5

D4

D3

D2

D1

D0

ACK

1

2

3

4

5

6

7

8

9

Stop bit

¢ ÍÁÙÅ 8 ºÔµ·ÕÍè Ò ¹ä´ ¨Ò¡ CMPS03

1

1

0

0

0

0

0

1

A7

A6

A5

A4

A3

A2

A1

R /W

ACK

D7

D6

D5

D4

D3

D2

D1

D0

ACK

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

ÃÙ»·Õè L21-3 áÊ´§ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒõԴµ ͡ѺâÁ´ÙÅ CMPS03 ¼ Ò¹ÃкººÑÊ I2C


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 185

(1) Ê §ºÔµàÃÔÁè µ ¹ (Start) à¾×Íè ᨠ§ãË ÃкººÑÊ I2C àµÃÕÂÁ¾Ã ÍÁÃѺ¢ ÍÁÙÅ (2) Ê §¤ ÒáÍ´à´ÃÊ $C0 à¾×Íè ÃкØÇÒ µ ͧ¡ÒõԴµ Íà¾×Íè à¢Õ¹¢ ÍÁÙšѺâÁ´ÙÅ CMPS03 ã¹µÒÃÒ§·Õè L21-1

(3) Ê §¤ ÒµíÒá˹ §ÃÕ¨ÊÔ àµÍà ¢Í§ CMPS03 ·Õµè Í §¡ÒÃÍ Ò¹¤ Ò «Ö§è ÃÒÂÅÐàÍÕ´ÃÕ¨ÊÔ àµÍà µÒ §æ áÊ´§ (4) Ê §¤ ÒáÍ´à´ÃÊ $C1 à¾×Íè ÃкØÇÒ µ ͧ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙŨҡâÁ´ÙÅ CMPS03 (5) Í Ò¹¤ Ò¢ ÍÁÙŨҡâÁ´ÙÅ CMPS03 ÁÒà¡çºäÇ ã¹Ë¹ ǤÇÒÁ¨íÒ (6) Ê §ºÔµËÂØ´ (Stop) à¾×Íè Âص¡Ô ÒÃÊ×Íè ÊÒâ ÍÁÙÅ áÅСíÒ˹´ãË ºÊÑ ÍÂÙã ¹ÊÀÒÇкÑÊÇ Ò§

¨Ò¡¢Ñ¹é µÍ¹¡ÒõԴµ Í·Õ¡è Å ÒÇÁÒáÅ ÇÊÒÁÒö¹íÒÁÒà¢Õ¹໠¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹ ´Ñ§ã¹â»Ãá¡ÃÁ·Õè L21-1

µíÒá˹ §ÃÕ¨ÔÊàµÍà ÃÒÂÅÐàÍÕ´ 0 µÑÇàÅ¢áÊ´§Ãع ¢Í§ºÍà ´ CMP03 1 Ê §¤ ÒµíÒá˹ §áººËÂÒº (0-255) Ê §¤ ÒµíÒá˹ §áººÅÐàÍÕ´´ ǵÑÇàÅ¢ 16 ºÔµ (0-3599) 2,3 ÊÒÁÒöá»Å§¤ Òà¾×Íè áÊ´§Í§ÈÒ 0-359.9 ͧÈÒä´ â´ÂµÃ§ ÊíÒËÃѺµÃǨÊͺ¤ ÒÀÒÂã¹ â´Â¨ÐáÊ´§¤ Ò¤ÇÒÁµ Ò§¢Í§ 4,5 Sensor1 à» ¹µÑÇàÅ¢ 16 ºÔµáºº¤Ô´à¤Ã×èͧËÁÒ ÊíÒËÃѺµÃǨÊͺ¤ ÒÀÒÂã¹ â´Â¨ÐáÊ´§¤ Ò¤ÇÒÁµ Ò§¢Í§ 6,7 Sensor2 à» ¹µÑÇàÅ¢ 16 ºÔµáºº¤Ô´à¤Ã×èͧËÁÒ áÊ´§¤ ÒµÑÇàÅ¢¡ÒûÃѺᵠ§ÀÒÂã¹ (calibration value1) 8,9 à» ¹µÑÇàÅ¢ 16 ºÔµáºº¤Ô´à¤Ã×Íè §ËÁÒ áÊ´§¤ ÒµÑÇàÅ¢¡ÒûÃѺᵠ§ÀÒÂã¹ (calibration value2) 10,11 à» ¹µÑÇàÅ¢ 16 ºÔµáºº¤Ô´à¤Ã×Íè §ËÁÒ 12,13 äÁ 㪠§Ò¹Í Ò¹¤ Òä´ à» ¹ 0 14 äÁ 㪠§Ò¹ äÁ ä´ ¡Òí ˹´¤ ÒäÇ ¤íÒÊѧè ÊíÒËÃѺ¡ÒûÃѺᵠ§¤ Ò â´ÂàÁ×Íè µ ͧ¡ÒûÃѺᵠ§¤ Ò 15 µ ͧà¢Õ¹¢ ÍÁÙÅ 255 ࢠҷÕÃè ¨Õ ÊÔ àµÍà µÒí á˹ §¹Õé

µÒÃÒ§·Õè L21-1 ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´¢Í§âÁ´ÙÅ CMPS03


186 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

int Dat,Dat1,Dat2,High; char Version,Unused,Low; char *Text1="CMPS03 Ver."; char Text[6]; void show() { ByteToSTr(Version,Text); Lcd_Out(1,11,Text); Dat=(HIGH*256)+Low; Dat1=Dat/10; Dat2=(Dat%10)&0x0F; WordToStr(Dat1,Text); Lcd_Out(2,1,Text); Lcd_Out(2,6,"."); Lcd_Chr(2,7,(Dat2+0x30)); Lcd_Out_Cp(" Degree"); } void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text1); while(1) { I2C_Init(100000); I2C_Start(); I2C_Wr(0xC0); I2C_Wr(0x00); I2C_Repeated_Start(); I2C_Wr(0xC1); Version=I2C_Rd(1); Delay_ms(5); Unused=I2C_Rd(1); Delay_ms(5); High=I2C_Rd(1); Delay_ms(5); Low=I2C_Rd(0); I2C_Stop(); Show(); Delay_ms(500);

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

// // // // //

Convert data to string Show LCD line1 Sum low byte + high byte Convert to degree Convert decimal notation Convert to string show compass degree ==> LCD decimal point

issue I2C send byte send byte issue I2C send byte

start signal via I2C to cmps03 addres 0xC0 (register adres) signal repeated start (request data from EEPROM)

// Read revision // Read unused // Read High byte // Read Low byte // Stop I2C // Show on LCD

} }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁẠ§¡Ò÷íҧҹ໠¹ 2 Ê Ç¹ Ê Ç¹áá໠¹¡ÒõԴµ ͡ѺâÁ´ÙÅ CMPS03 ¼ Ò¹ºÑÊ I2C à¾×Íè Í Ò¹ ¤ ÒÃÕ¨ÊÔ àµÍà ᵠÅÐ亵 Í ҧµ Íà¹×Íè § â´ÂàÃÔÁè ÃÕ¨ÊÔ àµÍà áÊ´§Ãع ¢Í§ºÍà ´ ÃÕ¨ÊÔ àµÍà áÊ´§¤ ÒẺËÂÒº (Í Ò¹ÁÒ áµ äÁ ä´ ãª §Ò¹) ÃÕ¨ÊÔ àµÍà ÍÒ ¹¤ ÒͧÈÒẺÅÐàÍÕ´ (16 ºÔµ) Ê Ç¹·Õè 2 à» ¹¡ÒùíÒ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅ CMPS03 ÁÒá»Å§ãË ÍÂÙã ¹ÃÙ»µÑÇÍÑ¡ÉÃà¾×Íè ¹íÒä»áÊ´§¼Å·Õè âÁ´ÙÅ LCD â´ÂÃع ¢Í§ºÍà ´¨Ð¹íÒä»áÊ´§·Õºè Ã÷Ѵº¹¢Í§âÁ´ÙÅ LCD ¨Ò¡¹Ñ¹é ¹íÒ¤ Ңͧ·ÔÈ·Ò§·ÕÍè Ò ¹ä´ 㹠亵 º¹áÅÐÅ Ò§¢Í§ÃÕ¨ÊÔ àµÍà ÍÒ ¹¤ ÒẺÅÐàÍÕ´ÁÒÃÇÁ¡Ñ¹ ËÒô Ç 10 à¾×Íè ãË ä´ ¤Ò ·ÔÈ·Ò§¨ÃÔ§ã¹Ë¹ ÇÂͧÈÒ Ê Ç¹àÈÉ·Õäè ´ ¨Ò¡¡ÒÃËÒùíÒÁÒáÊ´§à» ¹¤ ҷȹÔÂÁ¢Í§Ë¹ ÇÂͧÈÒ

â»Ãá¡ÃÁ·Õè L21-1 ä¿Å CMPS03test.c â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ mikroC ·Õãè ª ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ äźÃÒÃÕ I2C ´ Ç¡ÒõԴµ ͡ѺâÁ´ÙÅ CMPS-03 à¾×Íè Í Ò¹¤ Ңͧ·ÔÈ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 187

¡ÒûÃѺᵠ§¤ Ò·ÔÈ·Ò§Í Ò§ÍԧᡠâÁ´ÙÅ CMPS03 à¾×Íè ãË ¡ÒÃÇÑ´·ÔÈ·Ò§¢Í§âÁ´ÙÅ CMPS03 ÁÕ¤ÇÒÁáÁ ¹ÂíÒÁÒ¡·ÕÊè ´Ø ¨Ö§ÁÕÍ¹Ô ¾ØµÊíÒËÃѺ»ÃѺᵠ§¤ Ò·ÔÈ·Ò§ Í Ò§ÍÔ§ ·Ñ§é ¹Õ¾é Í×è »ÃÐ⪹ 㹡ÒáíÒ˹´·ÔÈ·Ò§Í Ò§Íԧ੾ÒÐÊíÒËÃѺ¼Ùã ª §Ò¹ â´Âµ ͧ» ͹ÊÑ­­Ò³Åͨԡ 0 ࢠҷÕè ¢ÒÍÔ¹¾ØµÊíÒËÃѺ»ÃѺᵠ§âÁ´ÙÅ CMPS03 «Ö§è ¡ç¤Í× ¢Ò 6 Ëҡ㪠ºÍà ´ ADX-CMPS03 ¡ÑºâÁ´ÙÅ CMPS03 ¨ÐÁÕÊÇÔµª ¡´µÔ´»Å Í´ѺµÔ´µÑ§é äÇ ãË áÅ Ç ¡ÒûÃѺᵠ§ÁÕ¢¹Ñé µÍ¹´Ñ§¹Õé (1) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹é Ëѹ´ ҹ˹ ҢͧâÁ´ÙÅä»·Ò§·ÔÈà˹×Í ¡´ÊÇÔµª 1 ¤Ãѧé (2) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹é Ëѹ´ ҹ˹ ҢͧâÁ´ÙÅä»·Ò§·ÔȵÐÇѹÍÍ¡ ¡´ÊÇÔµª (3) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹é Ëѹ´ ҹ˹ ҢͧâÁ´ÙÅä»·Ò§·ÔÈãµ ¡´ÊÇÔµª 1 ¤Ãѧé (4) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹é Ëѹ´ ҹ˹ ҢͧâÁ´ÙÅä»·Ò§·ÔȵÐÇѹµ¡ ¡´ÊÇÔµª à» ¹ÍѹÊÔé¹ÊØ´¡ÒûÃѺµÑ駤 Ò·ÔÈ·Ò§Í Ò§ÍÔ§¢Í§âÁ´ÙÅ CMPS03 â´ÂâÁ´ÙŨÐà¡çº¤ ÒÍ Ò§ÍÔ§¹ÕéäÇ ã¹Ë¹ Ç ¤ÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁáÅÐäÁ µÍ §»ÃѺµÑ§é ¤ ÒãËÁ Í¡Õ àÁ×Íè ¨ ÒÂä¿àÅÕÂé §¤Ãѧé ãËÁ +5V 32

IC3 PIC16F887

RD3

21

4

22

6

+5V RD7

R5 4k7 SW2 RESET

1 R6 1k

MCLR

RD6 RD5 RD4

RC4/SDA RC3/SCL

30

14

E

BLA

DSP1 LCD 16x2

+V Vo

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

BLK GND 15 2

1 3 VR1 10k

BRIGHTNESS

+5V

28 27 23 18

31 13

RS

BACK LIGHT ON

29

12

CR1 Ceramic Resonator 20MHz

JP1

R13 16 47

SCL SDA +5V

RD2

+5V

C6 0.1PF 50V

GND

11

front +5V CMPS-03 SCL Digital Compass SDA PWM CAL_OUT CAL N NC NC GND SDA

SCL

PWM

ÃÙ»·Õè L20-4 ǧ¨Ã·´Åͧ㪠§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 㹡ÒõԴµ Í ¡ÑºâÁ´ÙÅà¢çÁ·ÔÈ CMPS03


C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

GND

SCL SDA +5V

188 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

+

front +5V CMPS-03 SCL Digital Compass SDA PWM CAL_OUT CAL N NC NC GND

+ + +

SDA

SCL

PWM

4.8-6V

Sound RC0

LCD RC7 RxD

BATT DOWNLOAD

RC6 TxD

RC4 SDA

RC3 SCL

POWER

LCD back light

ICD2 ON ON M-1

CMPS03 VR er 1 1 5 7 R P I 3 5 9 . 9 8 D eg r e e d

RESET

M-2 #1

#2

#3

SERVO

S+

RA4

RB0

RB3 RB0/INT

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2

ÃÙ»·Õè L20-4 ǧ¨Ã·´Åͧ㪠§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L21-4 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L21-4 l Ëҡ㪠ºÍà ´ RBX-877rev.2007 ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L21-5 l

¢Ñ鹵͹¡Ò÷´Åͧ L21.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l ¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz l ¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007 àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz L21.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è CMPS03test áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L21-1


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 189

L21.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L21.4 »ÃѺᵠ§·ÔȢͧ¢ÑÇé áÁ àËÅç¡âÅ¡Í Ò§ÍÔ§ãË á¡ âÁ´ÙÅ CMPS03 L21.5 Ãѹâ»Ãá¡ÃÁ ¨Ò¡¹Ñ¹é ·´Åͧ¢ÂѺâÁ´ÙÅ CMPS03 ãË Ë¹Ñ ä»ã¹·ÔÈ·Ò§µ Ò§æ áŠǵÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ ¼ Ò¹·Ò§âÁ´ÙÅ LCD ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§ËÁÒÂàÅ¢àÇÍà ª¹Ñ ¢Í§âÁ´ÙÅ CMPS-03 ·Õºè Ã÷Ѵº¹ ¨Ò¡¹Ñ¹é áÊ´§µíÒá˹ §Í§ÈÒ ¢Í§âÁ´ÙÅ CMPS03 ã¹¢³Ð¹Ñ¹é à·Õº¡Ñº·ÔÈà˹×Í·Õºè Ã÷Ѵ´ ҹŠҧ ´Ñ§ÃÙ»

C M P S 03 3 359.9

Ver 15 D e gr ee

mikroC


190 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

11.2 äźÃÒÃÕè Soft_I2C µÔ´µ ÍÍØ»¡Ã³ ÃкººÑÊ I2C â´ÂäÁ 㪠âÁ´ÙźÑÊ I2C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕèäÁ ÁÕâÁ´ÙÅ I2C ÍÂÙ ÀÒÂ㹡çÊÒÁÒöµÔ´µ ͡ѺÍØ»¡Ã³ ÃкººÑÊ I2C ä´ ´ Ç¡ÒÃ㪠äźÃÒÃÕ Soft_I2C ã¹ mikroC ¤ÍÁä¾àÅÍà â´Â¨Ð·íÒ§Ò¹ã¹âËÁ´ ÁÒÊàµÍà áÅÐäÁ ʹѺʹع¡ÒõԴµ ÍẺÁÑŵÔÁÒÊàµÍà 㹡Ò÷íÒ§Ò¹¢Í§äźÃÒÃÕ¹ãÕé ª °Ò¹àÇÅÒÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà à¾×Íè ¡íÒ˹´àÇÅÒ㹡Òà Êà ҧʶҹе Ò§æ ¢Í§ºÑÊ I2C ´Ñ§¹Ñ¹é ¡ÒÃ㪠§Ò¹äźÃÒÃÕ¹è ¨Õé е ͧ¡àÅÔ¡¡ÒÃ㪠§Ò¹ÍÔ¹àµÍÃ Ã»Ñ µ ¡Í ¹àÊÁÍ

11.2.1 ¿ §¡ ª¹Ñè Soft_I2C_Config 㪠㹡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ ¡ÒõԴµ ͡ѺÃкººÑÊ I2C á¡ ¢Ò¾Íà µ·Õ¹è Òí ÁÒ㪠§Ò¹ ¨Ðµ ͧ àÃÕ¡㪠§Ò¹¡ ͹·Õ¨è Ð㪠§Ò¹¿ §¡ ª¹Ñè Í×¹è æ ¢Í§äźÃÒÃÕ Soft_I2C ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Soft_I2C_Config(unsigned short *port, const unsigned short SDA, const unsigned short SCL);

µÑÇá»Ã port

¤×Í ¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª ¡Òí ˹´à» ¹ SDA áÅÐ SCL

SDA ¤×Í µíÒá˹ §¢Ò¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µ Õè Í §¡ÒÃ㪠§Ò¹à» ¹¢Ò SDA ÁÕ¤Ò 0 ¶Ö§ 7 (¤ Ò¤§·Õàè · ҹѹé ) SCL

¤×Í µíÒá˹ §¢Ò¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè Í §¡ÒÃ㪠§Ò¹à» ¹¢Ò SCL ÁÕ¤Ò 0 ¶Ö§ 7 (¤ Ò¤§·Õàè · ҹѹé )

µÑÇÍ ҧ·Õè 11-8 Soft_I2C_Config(&PORTB, 1, 2);

¡íÒ˹´¤ ÒàÃÔÁè µ ¹á¡ ¾Íà µ B à¾×Íè µÔ´µ ͡ѺºÑÊ I2C â´Â¡íÒ˹´ãË ¢Ò RB1 à» ¹¢Ò SDA áÅÐ¢Ò RB2 à» ¹¢Ò SCL

11.2.2 ¿ §¡ ª¹Ñè Soft_I2C_Start 㪠Êà ҧÊÑ­­Ò³ Start ¡ ͹·íÒ¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺºÑÊ I2C ¡ ͹¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡¿ §¡ ª¹Ñè I2C_Init ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Soft_I2C_Start(void);

µÑÇÍ ҧ·Õè 11-9 Soft_I2C_Start();


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 191

11.2.3 ¿ §¡ ª¹Ñè Soft_I2C_Read

㪠ÍÒ ¹¢ ÍÁÙÅ¢¹Ò´ 1 亵 ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ I2C ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡ 㪠§Ò¹¿ §¡ ª¹Ñè Soft_I2C_Config áÅÐ Soft_I2C_Start ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Soft_I2C_Read(unsigned short ack);

¡Òä׹¤ Ò ¢ ÍÁÙÅ 1 亵 ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿·Õµè ´Ô µ Í´ ÇÂ

µÑÇá»Ã ack

¶ Òà» ¹ 0 ¨ÐäÁ ʧ ÊÑ­­Ò³ÃѺÃÙ (Acknowledge) ¶ Òà» ¹¤ ÒÍ×¹è æ ¨ÐÊ §ÊÑ­­Ò³ÃѺÃÙ

µÑÇÍ ҧ·Õè 11-10 take = Soft_I2C_Read(0);

à» ¹¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙŨҡÍØ»¡Ã³ ÊàÅ¿ÁÒà¡çºäÇ ·µÕè ÇÑ á»Ã take

11.2.3 ¿ §¡ ª¹Ñè Soft_I2C_Write

à» ¹¿ §¡ ª¹Ñè Ê §¢ ÍÁÙÅ¢¹Ò´ 1 亵 ÍÍ¡ä»ÂѧÃкººÑÊ I2C ¡ ͹㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é е ͧàÃÕ¡ 㪠§Ò¹¿ §¡ ª¹Ñè Soft_I2C_Config áÅÐ Soft_I2C_Start ¡ ͹ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Soft_I2C_Write(unsigned short data);

µÑÇá»Ã data

¤×Í¢ ÍÁÙÅ 1 亵 ·µÕè Í §¡ÒÃà¢Õ¹ä»ÂѧÃкººÑÊ I2C

¡Òä׹¤ Ò ¤×¹¤ Ò 0 ¶ ÒäÁ Á¢Õ Í ¼Ô´¾ÅÒ´à¡Ô´¢Ö¹é

µÑÇÍ ҧ·Õè 11-11 Soft_I2C_Write(0xA3);

à¢Õ¹¢ ÍÁÙÅ 0xA3 ŧ仺¹ºÑÊ I2C

11.2.4 ¿ §¡ ª¹Ñè Soft_I2C_Stop

à» ¹¿ §¡ ª¹Ñè Ê §ÊÑ­­Ò³ Stop ãË ¡ºÑ ºÑÊ I2C ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Soft_I2C_Stop(void);

µÑÇÍ ҧ¡ÒÃ㪠§Ò¹ Soft_I2C_Stop();


192 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 22 µÔ´µ Í ZX-RELAY16 ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ´ Ç ¿ §¡ ª¹Ñè Soft_I2C ã¹»¯ÔºµÑ ¡Ô Ò÷Õè 20 à» ¹¡ÒõԴµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877(A) ËÃ×Í PIC16F887 ¡Ñº ZX-RELAY16 ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ¼ Ò¹ÃкººÑÊ I2C â´Â㪠âÁ´ÙźÑÊ I2C ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¼Ò ¹·Ò§¢Ò RC4/SDA áÅÐ¢Ò RC3/SCL áÅ ÇàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè i2c NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO RELAY16 RELAY15 RELAY14 RELAY13 RELAY12 RELAY11 RELAY10 RELAY9 RELAY8 RELAY7 RELAY6 RELAY5 RELAY4 RELAY3 RELAY2 RELAY1

ON

POWER

SDA

SCL

-

SDA SCL

I C EXPANSION A2 A1 A0

ãÊ ¨ÑêÁà»Íà = Åͨԡ "0" +5V

+12V 2A

R9 10k

C3 0.1PF R8

11 32 Vcc 1

SW1 RESET

MCLR

PIC16F877(A) PIC16F887 RC7 12 31

RC6

26 25

GND OSC1 13

C1 22pF

OSC2 14

XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L22-1 ǧ¨Ã·´ÅͧµÔ´µ ͡ѺÍØ»¡Ã³ ÃкººÑÊ I2C â´Â㪠¢Ò¾Íà µã´æ áÅп §¡ ª¹Ñè Soft_i2c ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 193

NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO NC C NO RELAY16 RELAY15 RELAY14 RELAY13 RELAY12 RELAY11 RELAY10 RELAY9 RELAY8 RELAY7 RELAY6 RELAY5 RELAY4 RELAY3 RELAY2 RELAY1

ON

POWER

SDA

SCL

-

SDA SCL

I C EXPANSION A2 A1 A0

ãÊ ¨ÁêÑ à»Íà = Åͨԡ "0"

+12V 2A 4.8-6V

Sound RC0

LCD RC7 RxD

BATT DOWNLOAD

RC6 TxD

RC4 SDA

RC3 SCL

POWER

LCD back light

ICD2 ON ON M-1

RESET

RBX - 877 rR ev 2 0 0 7 R PIC16F887 board

M-2 #1

#2

#3

SERVO

S+

RA4

RB0

RB3 RB0/INT

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2

ÃÙ»·Õè L22-2 ǧ¨Ã·´ÅͧµÔ´µ ͡ѺÍØ»¡Ã³ ÃкººÑÊ I2C â´Â㪠¢Ò¾Íà µã´æ áÅп §¡ ª¹Ñè Soft_i2c ¢Í§ mikroC ¤ÍÁä¾àÅÍà ¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007 ÊíÒËÃѺ㹡Ò÷´Åͧ¹Õ¨é Ðᵡµ Ò§¨Ò¡»¯ÔºµÑ ¡Ô Ò÷Õè 20 µÃ§·Õè 㪠¿§ ¡ ª¹Ñè Soft_I2C á·¹ ·íÒãË ÊÒÁÒö 㪠§Ò¹¢Ò¾Íà µã´æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC 㹡ÒõԴµ ͡ѺÍØ»¡Ã³ ÃкººÑÊ I2C ÊíÒËÃѺ㹡Ò÷´Åͧ ¹Õàé Å×͡㪠¢Ò RC7 à» ¹¢Ò SDA áÅÐ㪠¢Ò RC6 à» ¹¢Ò SCL ´Ñ§áÊ´§Ç§¨Ãàª×Íè Áµ Íã¹ÃÙ»·Õè L22-1 Ê Ç¹µÑÇÍ ҧ â»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª 㹡Ò÷´Êͺ¡Ò÷íÒ§Ò¹áÊ´§ã¹â»Ãá¡ÃÁ·Õè L22-1

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L22-1 㹡Ò÷´Åͧ l Ëҡ㪠ºÍà ´·´Åͧ NX-877 plus II ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L22-1 l Ëҡ㪠ºÍà ´ RBX-877rev.2007 ãË µÍ ǧ¨ÃµÒÁÃÙ»·Õè L22-2 l


194 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

char I2CInit_=0; char y; int i,j; void Relay16(unsigned int x) { if (I2CInit_==0) { Soft_I2C_Config(&PORTC,7,6); Soft_I2C_Start(); // Soft_I2C_Write(0x40); // Soft_I2C_Write(0x06); // Soft_I2C_Write(0x00); // Soft_I2C_Stop(); // Soft_I2C_Start(); Soft_I2C_Write(0x40); Soft_I2C_Write(0x07); Soft_I2C_Write(0x00); Soft_I2C_Stop(); I2CInit_=1; } y=x%256; Soft_I2C_Start(); Soft_I2C_Write(0x40); Soft_I2C_Write(0x00); Soft_I2C_Write(y); Soft_I2C_Stop(); x=x/256; Soft_I2C_Start(); Soft_I2C_Write(0x40); Soft_I2C_Write(0x01); Soft_I2C_Write(x); Soft_I2C_Stop(); } void main() { while(1) { i=1; while(i<32768) { Relay16(i); Delay_ms(500); i=i*2; } Relay16(i); Delay_ms(500); } }

// Call initial L2C Start communication Address MCP23016 and Write Command Command for access IODIR0 Set DIR0 to OUTPUT Stop communication

// // // // //

Start communication Address MCP23016 and Write Command Command for access IODIR1 Set DIR0 to OUTPUT Stop communication

// // // // //

y=low Byte of data Issue I2C start signal Send byte via I2C (device address + W) Send byte (data address) Send byte (data address)

// // // // //

x=high byte Issue I2C start signal Send byte via I2C (device address + W) Send byte (data address) Send byte (data address)

// Loop // Start value // End loop value // Send Data to ZX-relay16 // Shift left // Send Last bit

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁËÅÑ¡¨Ð¹íÒ¤ Ò i ÁÒ·íÒ¡ÒÃàÅ×Íè ¹ºÔµä»·Ò§« Ò áÅ ÇÊ §ãË ¡ºÑ ¿ §¡ ª¹Ñè Relay16 () «Ö§è ·íÒ˹ Ò·Õè µÔ´µ ͡ѺºÍà ´ ZX-RELAY16 ÊíÒËÃѺ¿ §¡ ª¹Ñè Relay16() ¨ÐàÃÕ¡㪠¿§ ¡ ª¹Ñè Soft_i2c à¾×Íè ¡íÒ˹´¡ÒõԴµ Í ¡ÑºÍØ»¡Ã³ ÃкººÑÊ I2C ãË á¡ ¢Ò¾Íà µ·Õàè Å×͡㪠§Ò¹ ¨Ò¡¹Ñ¹é ÃѺ¤ ÒµÑÇá»Ã x ࢠÒÁÒ á¡໠¹ 8 ºÔµÅ Ò§áÅÐ 8 ºÔµº¹ ¹íÒ¤ Ò 8 ºÔµÅ Ò§Ê §ä»ÂѧáÍ´à´ÃÊ 0x00 à¾×Íè ¢Ñº RELAY1 ¶Ö§ 8 áÅйíÒ¤ Ò 8 ºÔµº¹Ê §ä»ÂѧáÍ´à´ÃÊ 0x01 à¾×Íè Ê §ä»¢Ñº RELAY9 ¶Ö§ 16

â»Ãá¡ÃÁ·Õè L20-1 ä¿Å SoftI2CTest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¡ÒÃ㪠§Ò¹äźÃÒÃÕ Soft_i2c ¢Í§ mikroC ¤ÍÁä¾àÅÍà à¾×Íè µÔ´µ ͡ѺÃкººÑÊ I2C ´ Ç¢ҾÍà µã´æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 195

¢Ñ鹵͹¡Ò÷´Åͧ L22.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

l

¡Ã³Õ㪠ºÍà ´ RBX-877 rev.2007 àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

L22.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è SoftI2CTest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L22-1 L22.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L22.4 ¨ ÒÂä¿ãË á¡ ºÍà ´ ZX-RELAY16 áÅкÍà ´·´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà L22.5 Ãѹâ»Ãá¡ÃÁ Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ LED áÅÐÃÕàÅ º¹ºÍà ´ ZX-RELAY16 ÊѧࡵàËç¹ LED ·Õµè Òí á˹ § RELAY1 µÔ´äÅ ÅÒí ´Ñºä»¨¹¶Ö§ RELAY16 áÅÐä´ Â¹Ô àÊÕ§˹ ÒÊÑÁ¼Ñʢͧ ÃÕàÅ µÑ´µ ÍäÅ ÅíҴѺ¡Ñ¹ä»Í ҧµ Íà¹×èͧ


196 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 197

º··ÕÕè 12

¡ÒõԴµ ÍâÁ´ÙÅ SPI ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ

âÁ´ÙÅàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI (Serial Peripheral Interface) à» ¹âÁ´ÙÅ¿ §¡ ª¹Ñè ¾ÔàÈÉ ·Õèª ÇÂãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÊÒÁÒöµÔ´µ ͡ѺÍØ»¡Ã³ ·Õè㪠ÊÒÂÊÑ­­Ò³ 3 ËÃ×Í 4 ÊÒµÒÁ Áҵðҹ Microwire ËÃ×Í SPI ä´ â´Â·íÒ§Ò¹ÀÒÂãµ ÊÇ ¹¤Çº¤ØÁËÅÑ¡·Õªè Í×è Ç Ò âÁ´ÙÅàª×Íè Áµ Í͹ءÃÁ Ẻ«Ô§â¤Ã¹ÑÊ ËÃ×Í MSSP (Master Synchronous Serial Port module) ÀÒÂã¹âÁ´ÙÅ MSSP ºÃÃ¨Ø Ê Ç¹àª×Íè Áµ ÍÍØ»¡Ã³ 2 Ẻ¤×Í SPI (Serial Peripheral Interface) ËÃ×ÍÊ Ç¹àª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁ áÅÐ I2C (Inter-Integrated Circuit) ËÃ×ÍÊ Ç¹àª×Íè Áµ ÍÃкººÑÊ I2C ÊÒÂÊÑ­­Ò³·Õãè ª 㹡ÒõԴµ ÍẺ SPI »ÃСͺ´ Ç ÊÒ¢ ÍÁÙÅà¢ Ò (data in), ÊÒ¢ ÍÁÙÅÍÍ¡ (data out), ÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò (serial clock : SCK) áÅÐÊÒÂàÅ×Í¡ÍØ»¡Ã³ ÊàÅ¿ (slave select : SS) â´Âã¹Ãкº 3 ÊÒ¨ÐÃÇÁ¢Ò¢ ÍÁÙÅࢠҴ Ç¡ѹ µÑÇÍ ҧ¢Í§ÍØ»¡Ã³ ·ãÕè ª ¡ÒõԴµ ÍẺ¹Õäé ´ á¡ äÍ«Õ˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁã¹Í¹Ø¡ÃÁ 25LCxxx, äÍ«Õá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ (ઠ¹ ADS7841 ¢Í§ Texas Instrument), äÍ«Õá»Å§ÊÑ­­Ò³ ´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡ (ઠ¹ MCP4922 ¢Í§ Microchip), äÍ«Õàª×Íè Áµ Íà¤Ã×Í¢ ÒÂÍÕà·Íà à¹çµ (ÍÒ·Ô ECN2862 ¢Í§ Microchip), äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ (ઠ¹ DS1620 ¢Í§ Dallas Semiconductor), äÍ«ÕáÊ´§¼ÅµÑÇàÅ¢ 7 Ê Ç¹ËÅÒÂËÅÑ¡ (ઠ¹ MAX7219 ¢Í§ Maxim) à» ¹µ ¹


198 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

12.1 ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SPI (Serial Peripheral Interface) àÁ×Íè àÍç¹àÍàºÔÅãË âÁ´ÙÅ MSSP ·íÒ§Ò¹ã¹âËÁ´ SPI ¢ÒÊÑ­­Ò³·Õãè ª à» ¹ËÅÑ¡ÁÕ 3 ¢Ò¤×Í 1. ¢Ò¢ ÍÁÙÅÍ͡Ẻ͹ءÃÁ (Serial Data Out : SDO) ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 à» ¹¢Ò·Õè 24 2. ¢Ò¢ ÍÁÙÅࢠÒẺ͹ءÃÁ (Serial Data In : SDI) ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 à» ¹¢Ò·Õè 23 3. ¢ÒÊÑ­­Ò³¹ÒÌ ¡Ò͹ءÃÁ (Serial Clock : SCK) ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 à» ¹¢Ò·Õè 18 ¶ ÒËÒ¡àÅ×Í¡âËÁ´ÊàÅ¿ ¨ÐÁÕ¢ÒÊÑ­­Ò³·Õèµ Í§ãª §Ò¹à¾ÔèÁÍÕ¡ 1 ¢Ò¤×Í ¢ÒàÅ×Í¡ÍØ»¡Ã³ ÊàÅ¿ (Slave Select : SS) ÊíÒËÃѺäÁâ¤Ã¤¤Í¹â·ÃÅàÅÍà PIC16F877/887 à» ¹¢Ò·Õè 7 㹡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP ã¹âËÁ´ SPI ÊÒÁÒöàÅ×Í¡ÃٻẺ·íÒ§Ò¹ä´ ËÅÒ¡ËÅÒ â´Â ¡íÒ˹´ä´ ¨Ò¡ºÔµ¤Çº¤ØÁã¹ÃÕ¨ÊÔ àµÍà SSPCON ºÔµ 0 ¶Ö§ 5 áÅÐÃÕ¨ÊÔ àµÍà SSPSTAT ºÔµ 6 áÅÐ 7 ÊíÒËÃѺÅíҴѺ¡ÒÃàÅ×͡㪠§Ò¹âËÁ´ SPI ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé (1) àÅ×Í¡âËÁ´ÁÒÊàµÍà ËÃ×ÍÊàÅ¿ àÁ×Íè àÅ×Í¡âËÁ´ÁÒÊàµÍà ¢Ò SCK à» ¹¢ÒàÍÒµ ¾µØ ÊÑ­­Ò³¹ÒÌ ¡Ò ¶ Òà» ¹âËÁ´ÊàÅ¿ ¢Ò SCK à» ¹¢ÒÍÔ¹¾ØµÊÑ­­Ò³¹ÒÌ ¡Ò (2) àÅ×Í¡¢ÑÇé ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò (3) àÅ×Í¡¡ÒÃÊØÁ ÊÑ­­Ò³¢ ÍÁÙÅÍÔ¹¾Øµ (¡Ö§è ¡ÅÒ§ËÃ×ͪ ǧ»ÅÒÂ) (4) àÅ×Í¡¢Íº¢ÒÊÑ­­Ò³¹ÒÌ ¡Ò (¢Íº¢Ò¢Ö¹é ËÃ×Íŧ) (5) àÅ×Í¡ÍѵÃÒÊÑ­­Ò³¹ÒÌ ¡Ò 㹡óշÒí §Ò¹ã¹âËÁ´ÁÒÊàµÍà (6) àÅ×Í¡âËÁ´¢Í§ÍØ»¡Ã³ ÊàÅ¿ 㹡óշÒí §Ò¹ã¹âËÁ´ÊàÅ¿ ã¹ÃÙ»·Õè 12-1 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ SPI âÁ´ÙÅ MSSP »ÃСͺ´ ǪԿµ Ã¨Õ ÊÔ àµÍà µÇÑ Ê §áÅÐÃѺ¢ ÍÁÙÅËÃ×Í SSPSR áÅÐÃÕ¨ÊÔ àµÍà º¿Ñ à¿Íà SSPBUF ªÔ¿µ Ã¨Õ ÊÔ àµÍà SSPSR 㪠ÊÒí ËÃѺàÅ×Íè ¹¢ ÍÁÙÅࢠÒÍÍ¡¨Ò¡µÑÇÍØ»¡Ã³ â´ÂàÅ×Íè ¹ºÔµ MSB ¡ ͹ 㹡óÕÃºÑ ¢ ÍÁÙÅ ¢ ÍÁÙÅ͹ءÃÁ¨Ð·ÂÍÂ¶Ù¡Ê §à¢ ÒÁÒ·Ò§¢Ò SDI ࢠÒÊÙ SSPSR ¨¹¤Ãº 8 ºÔµËÃ×Í 1 亵 ¡ç¨Ð¶ Ò·ʹä»ÂѧÃÕ¨ÊÔ àµÍà SSPBUF 㹡óÕʧ ¢ ÍÁÙÅ ¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊ §¨Ò¡ºÑÊ¢ ÍÁÙÅ¨Ð¶Ù¡Ê §ÁÒÂѧ ÃÕ¨ÊÔ àµÍà SSPBUF áÅ ÇÊ §µ ÍÁÒÂѧ SSPSR ¨Ò¡¹Ñ¹é SSPSR ¨ÐàÅ×Íè ¹¢ ÍÁÙÅÍÍ¡·Ò§¢Ò SDO Ẻ͹ءÃÁ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 199

ºÑÊ¢ ÍÁÙÅÀÒÂã¹ ÊÑ­­Ò³à¢Õ¹

ÊÑ­­Ò³Í Ò¹

ÃÕ¨ÔÊàµÍà SSPBUF

ªÔ¿µ ÃÕ¨ÔÊàµÍà SSPSR

RC4/SDI/SDA ºÔµ 0

ÊÑ­­Ò³¹ÒÌÔ¡Ò àÅ×è͹¢ ÍÁÙÅ

RC5/SDO ÊÑ­­Ò³ Peripheral Output Enable

RA5/SS/AN4

SS

àÅ×Í¡ÊÑ­­Ò³¹ÒÌÔ¡Ò

Ê Ç¹àÅ×Í¡ ¢Íº¢ÒÊÑ­­Ò³ ºÔµ SMP : CKE RC3/SCK/SCL

àÍÒµ ¾Øµ¨Ò¡ TMR2 2

Ê Ç¹àÅ×Í¡ ¢Íº¢ÒÊÑ­­Ò³

»ÃÕÊà¡ÅàÅÍà 4, 16, 64 SSPM3 : SSPM0

¢ ÍÁÙÅ·Õè¨ÐÊ §ä»Âѧ SSPSR ºÔµ TRIS ¤Çº¤ØÁ·ÔÈ·Ò§

ÃÙ»·Õè 12-1 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ SPI

TOSC


200 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

àÁ×Íè ¢ ÍÁÙÅ㹺ѿà¿Íà àµçÁ á¿Å¡ BF (ºÔµ 0 ã¹ÃÕ¨ÊÔ àµÍà SSPDAT) ¨Ð૵ ¾Ã ÍÁæ ¡Ñºá¿Å¡ SSPIF (ºÔµ 3 ã¹ÃÕ¨ÊÔ àµÍà PIR1) «Ö§è ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅäÇ ¨Ö§ÊÒÁÒö 㪠»ÃÐ⪹ ¨Ò¡á¿Å¡·Ñ§é Êͧ㹡ÒäǺ¤ØÁ¨Ñ§ËÇСÒÃà¢Õ¹áÅÐÍ Ò¹¢ ÍÁÙÅ à¾×Íè äÁ ãË à¡Ô´¡Ò깡ѹ ¢Í§¢ ÍÁÙÅ¢Öé¹ ´ Ò¹¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Òã¹âËÁ´ SPI ¹ÕÊé ÒÁÒöàÅ×Í¡ä´ ¶§Ö 4 ¤ Ò¤×Í 1. ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡/4 «Ö§è ෠ҡѺ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒÀÒÂã¹ (TCY) 2. ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡/16 3. ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡/64 4. ¤ ҢͧÃÕ¨ÊÔ àµÍà TMR2/2 ´Ñ§¹Ñ¹é ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡ÒÊÙ§ÊØ´ã¹âËÁ´ SPI ¤×Í 5MHz ·Õ¤è ÃÔʵÍÅ 20MHz ¨Ò¡¢ ÍÁÙÅ¢ Ò§µ ¹ ÊÒÁÒöÊÃػ໠¹¢Ñ¹é µÍ¹¡ÒÃ㪠§Ò¹âÁ´ÙÅ MSSP à¾×Íè ·íÒ§Ò¹ã¹âËÁ´ SPI ä´ ´Ñ§¹Õé (1) ¡íÒ˹´ãË ¢Ò RC4/SDI à» ¹ÍÔ¹¾Øµ ¢Ò RC5/SDO áÅÐ RC3/SCK à» ¹àÍÒµ ¾µØ ¾Ã ÍÁ·Ñ駡íÒ˹´ãË ¢Ò¾Íà µ·Õè㪠àÍç¹àÍàºÔÅÍØ»¡Ã³ ÊàÅ¿à» ¹¢Ò¾Íà µàÍÒµ ¾Øµ (2) ¡í Ò Ë¹´¤ÇÒÁ¶Õè ¢ ͧÊÑ ­ ­Ò³¹ÒÌ ¡ Ò·Õè ã ª ¡í Ò Ë¹´¨Ñ § ËÇСÒ÷í Ò §Ò¹¨Ò¡ºÔ µ SSPM3:SSPM0 áÅТÑÇé ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡ºÔµ CKP ã¹ÃÕ¨ÊÔ àµÍà SSPCON ãË µÃ§¡Ñº¤ÇÒÁµ ͧ ¡ÒâͧÍØ»¡Ã³ ÊàÅ¿ ÊíÒËÃѺ¤ÇÒÁ¶Õµè Í §àÅ×Í¡ãË µÒèí ¡Ç Ò¤ÇÒÁ¶Õ·è Òí §Ò¹¢Í§ÍØ»¡Ã³ ÊàÅ¿ (3) àÅ×Í¡à¿Ê¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡ºÔµ CKE ã¹ÃÕ¨ÊÔ àµÍà SSPSTAT ãË µÃ§¡ÑºÍØ»¡Ã³ ÊàÅ¿ (4) àÍç¹àÍàºÔÅÍØ»¡Ã³ ÊàÅ¿ (5) àÍç¹àÍàºÔÅÍØ»¡Ã³ ÁÒÊàµÍà â´Â¡ÒÃ૵ºÔµ SSPEN ã¹ÃÕ¨ÊÔ àµÍà SSPCON (6) à¢Õ¹¢ ÍÁÙÅä»·ÕÃè ¨Õ ÊÔ àµÍà SSPBUF à¾×Íè Êѧè ãË âÁ´ÙÅ SPI àÃÔÁè µ ¹·íÒ§Ò¹ (7) ÃÍãË ¡ÒÃÃѺ-Ê §¢ ÍÁÙÅàÊÃç¨ÊÁºÙó â´Â¡ÒõÃǨÊͺá¿Å¡ BF ã¹ÃÕ¨ÔÊàµÍà SSPSTAT ¶ ÒºÔµ¹Õàé «µà» ¹ 1 áÊ´§Ç Ò¡ÒÃÃÑºÊ §¢ ÍÁÙÅã¹äºµ ¹¹Ñé æ àÊÃç¨ÊÁºÙó áÅ Ç (8) Í Ò¹¢ ÍÁÙÅ·ÕÃè ºÑ ä´ ¨Ò¡ÃÕ¨ÊÔ àµÍà SSPBUF «Ö§è ¡ÒÃÍ Ò¹¢ ÍÁÙÅ·ÕÃè ¨Õ ÊÔ àµÍà µÇÑ ¹Õé ¨Ðà» ¹ ¡ÒÃà¤ÅÕÂà á¿Å¡ BF â´ÂÍѵâ¹ÁÑµÔ (9) ¹íÒ¢ ÍÁÙÅä»»ÃÐÁÇżÅËÃ×Í·íÒ¡ÒÃÃѺ-Ê § ¢ ÍÁÙÅã¹äºµ ¶´Ñ ä»


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

SPI ÁÒÊàµÍà (SSPM3 : SSPM0 = 00xx)

SPI ÊàÅ¿ (SSPM3 : SSPM0 = 010x) SDO

SDI

ÃÕ¨ÊÔ àµÍà SSPBUF

ªÔ¿µ Ã¨Õ ÊÔ àµÍà SSPSR MSB

ÃÕ¨ÊÔ àµÍà SSPBUF

SDI

SDO

LSB

äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 1

l 201

ªÔ¿µ Ã¨Õ ÊÔ àµÍà SSPSR MSB

SCK

SCK

LSB

äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 2

ÃÙ»·Õè 12-2 ¡ÒÃàª×Íè Áµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 2 µÑÇࢠҴ Ç¡ѹâ´Â㪠âÁ´ÙÅ SPI

12.2 ÃٻẺ¡ÒÃàª×Íè Áµ Í ã¹¡Ã³Õ·Õè¡íÒ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/887 ·íÒ§Ò¹ã¹âËÁ´ SPI ÁÒÊàµÍà ÍØ»¡Ã³ ·¹Õè Òí ÁÒàª×Íè Áµ ͷѧé ËÁ´¨Ö§à» ¹ÍØ»¡Ã³ ÊàÅ¿ áÅÐ㪠§Ò¹à¾Õ§ 3 ¢Ò¤×Í SDO, SDI áÅÐ SCK áÅд ǤÇÒÁÊÒÁÒö¢Í§âÁ´ÙÅ MSSP ã¹âËÁ´ SPI ÊÒÁÒö·Õ¨è СíÒ˹´ãË ·Òí §Ò¹ä´ ·§Ñé ÁÒÊàµÍà áÅÐÊàÅ¿ ã¹ÃÙ»·Õè 12-2 áÊ´§¡ÒÃàª×Íè Áµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÃÇ Á¡Ñ¹àÁ×Íè ·íÒ§Ò¹ã¹âËÁ´ SPI â´Â µÑÇ˹Ö觨Ðà» ¹ÍØ»¡Ã³ ÁÒÊàµÍà áÅÐÍÕ¡µÑÇ˹Ö觵 ͧ໠¹ÍØ»¡Ã³ ÊàÅ¿


202 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

12.3 äźÃÒÃÕàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI 12.3.1 ¿ §¡ ª¹Ñè Spi_Init à» ¹¿ §¡ ª¹Ñè ¡íÒ˹´¤ ÒàÃÔÁè µ ¹á¡ ¡ÒÃàª×Íè Áµ ÍẺ SPI Áҵðҹ â´Â¤ ÒÁҵðҹ»ÃСͺ´ Ç 1. ·íҧҹ໠¹âËÁ´ÁÒÊàµÍà 2. ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò Fosc/4 3. ʶҹÐËÂØ´¹Ô§è ¢Í§¢ÒÊÑ­­Ò³¹ÒÌ ¡ÒÅͨԡ 0 4. ¡ÒÃÊ §¢ ÍÁÙÅà¡Ô´¢Ö¹é ·Õ¢è ͺ¢Ò¢Ö¹é 5. µÃǨÃѺÊÑ­­Ò³ÍÔ¹¾Øµà¢ ÒÁÒ·Õµè Òí á˹ §¡Ö§è ¡ÅÒ§¢Í§ÅÙ¡¤Å×¹è ÊíÒËÃѺ¡ÒûÃѺᵠ§¤ Ò·Õäè Á à» ¹µÒÁÁҵðҹ¹Õ¨é е ͧàÃÕ¡㪠¿§ ¡ ª¹Ñè Spi_Init_Advanced ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Spi_Init(void);

µÑÇÍ ҧ·Õè 12-1 Spi_Init();

12.3.2 ¿ §¡ ª¹Ñè Spi_Init_Advanced à» ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ â´Â·íҧҹ໠¹âËÁ´ÁÒÊàµÍà ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò Fosc/4 µÃǨ ÃѺÊÑ­­Ò³ÍÔ¹¾Øµà¢ ÒÁÒ·Õµè Òí á˹ §¡Ö§è ¡ÅÒ§¢Í§ÅÙ¡¤Å×¹è ʶҹÐËÂØ´¹Ô§è ¢Í§¢ÒÊÑ­­Ò³¹ÒÌ ¡ÒÅͨԡ 0 áÅСÒÃÊ §¢ ÍÁÙÅà¡Ô´¢Ö¹é ·Õ¢è ͺ¢Ò¢Ö¹é ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Spi_Init_Advanced(unsigned short master, unsigned short data_sample, unsigned short clock_idle, unsigned short transmit_edge);

µÑÇá»Ã

㪠¡Òí ˹´âËÁ´¡Ò÷íÒ§Ò¹¢Í§ SPI áÅÐÊÑ­­Ò³¹ÒÌ ¡Ò MASTER_OSC_DIV4 // ·íÒ§Ò¹ã¹âËÁ´ÁÒÊàµÍà áÅÐÊÑ­­Ò³¹ÒÌ ¡Ò෠ҡѺ Fosc/4 MASTER_OSC_DIV16 // ·íÒ§Ò¹ã¹âËÁ´ÁÒÊàµÍà áÅÐÊÑ­­Ò³¹ÒÌ ¡Ò෠ҡѺ Fosc/16 MASTER_OSC_DIV64 // ·íÒ§Ò¹ã¹âËÁ´ÁÒÊàµÍà áÅÐÊÑ­­Ò³¹ÒÌ ¡Ò෠ҡѺ Fosc/64 MASTER_TMR2 // ·íÒ§Ò¹ã¹âËÁ´ÁÒÊàµÍà áÅÐ㪠ʭ Ñ ­Ò³¹ÒÌ ¡Ò¨Ò¡ä·àÁÍà 2 SLAVE_SS_ENABLE // àÍç¹àÍàºÔÅ¡ÒÃàÅ×Í¡âËÁ´ÁÒÊàµÍà ËÃ×ÍÊàÅ¿ SLAVE_SS_DIS // ´ÔÊàÍàºÔÅ¡ÒÃàÅ×Í¡âËÁ´ÁÒÊàµÍà ËÃ×ÍÊàÅ¿

master


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 203

à» ¹¡ÒáíÒ˹´µíÒá˹ §ã¹¡ÒõÃǨ¨ÑºÊÑ­­Ò³ÍÔ¹¾Øµ â´Â DATA_SAMPLE_MIDDLE // µÃǨ¨ÑºÊÑ­­Ò³·Õµ è Òí á˹ §¡ÅÒ§¢Í§ÃÙ»¤Å×¹è DATA_SAMPLE_END // µÃǨ¨ÑºÊÑ­­Ò³·Õµ è Òí á˹ §»ÅÒÂÊØ´¢Í§ÃÙ»¤Å×¹è

data_sample

à» ¹¡ÒáíÒ˹´Ê¶Ò¹ÐËÂØ´¹Ô§è ¢Í§¢ÒÊÑ­­Ò³¹ÒÌ ¡Ò CLK_IDLE_HIGH // ÊÀÒÇÐËÂØ´¹Ô§è à» ¹Åͨԡ 1 CLK_IDLE_LOW // ÊÀÒÇÐËÂØ´¹Ô§è à» ¹Åͨԡ 0

clock_idle

à» ¹¡ÒáíÒ˹´¢Íº¢ÒÊíÒËÃѺ¡ÒÃÊ §¢ ÍÁÙÅÍÍ¡ä» LOW_2_HIGH // ¢ ÍÁÙÅ¶Ù¡Ê §àÁ×Í è ÊÑ­­Ò³¹ÒÌ ¡Òà»ÅÕÂè ¹¨Ò¡ 0 ä»à» ¹ 1 HIGH_2_LOW // ¢ ÍÁÙÅ¶Ù¡Ê §àÁ×Í è ÊÑ­­Ò³¹ÒÌ ¡Òà»ÅÕÂè ¹¨Ò¡ 1 ä»à» ¹ 0

transmit_edge

µÑÇÍ ҧ·Õè 12-2 Spi_Init_Advanced(MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH)

3.12.3 ¿ §¡ ª¹Ñè Spi_Read à» ¹¿ §¡ ª¹Ñè Ê §¤ Òã¹µÑÇá»Ã buffer Í͡仾à ÍÁÊÑ­­Ò³¹ÒÌ ¡Ò áÅÐÃÍÃѺ¤ Ò¢ ÍÁÙÅ¡ÅѺÁÒ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Spi_Read(unsigned short buffer);

µÑÇÍ ҧ·Õè 12-3 short take, buffer; ... take = Spi_Read(buffer);

à» ¹¡ÒÃÍ Ò¹¢ ÍÁÙŨҡÍØ»¡Ã³ SPI ÁÒà¡çºäÇ ·µÕè ÇÑ á»Ã take

3.12.4 ¿ §¡ ª¹Ñè Spi_Write à» ¹¿ §¡ ª¹Ñè Ê §¢ ÍÁÙÅä»ÂѧÍØ»¡Ã³ SPI â´Â¢ ÍÁÙÅã¹µÑÇá»Ã data¨Ð¶Ù¡à¢Õ¹ä»ÂѧÃÕ¨ÊÔ àµÍà SSPBUF áÅÐàÃÔÁè µ ¹¡ÒÃÊ §¢ ÍÁÙÅ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Spi_Write(unsigned short data);

µÑÇÍ ҧ·Õè 12-4 Spi_Write(1);

à» ¹¡ÒÃÊ §¢ ÍÁÙŵÑÇàÅ¢ 1 ÍÍ¡ä»ÂѧÍØ»¡Ã³ SPI


204 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

»¯ÔºµÑ ¡Ô Ò÷Õè 23 µÔ´µ ͡Ѻ MCP4922 äÍ«Õá»Å§ ÊÑ­­Ò³´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡ 㹡Ò÷´Åͧ¹Õ¹é Òí àʹͶ֧ÇÔ¸¡Õ ÒÃ㪠§Ò¹áÅеÑÇÍ ҧ¡ÒÃàª×Íè Áµ ͡ѺÍØ»¡Ã³ ·ãÕè ª ¡ÒõԴµ ÍẺ SPI ÍØ»¡Ã³ ·Õ¹è Òí ÁÒ㪠໠¹µÑÇÍ ҧ¤×Í MCP4922 äÍ«Õá»Å§ÊÑ­­Ò³´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡ (DAC) ¤ÇÒÁÅÐàÍÕ´ 12 ºÔµ

¤Ø³ÊÁºÑµ¢Ô ͧ MCP4922 äÍ«Õá»Å§ÊÑ­­Ò³´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡ ¤ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÊÑ­­Ò³ÊÙ§¶Ö§ 12 ºÔµ l ÁÕàÍÒµ ¾µ Ø 2 ª ͧ ÊÒÁÒöàÅ×Í¡ãË ·Òí §Ò¹à¾Õ§ª ͧà´ÕÂÇä´ l µÔ´µ ͼ Ò¹ÃкººÑÊ SPI ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡ÒÊÙ§ÊØ´ 20MHz l ÊÒÁÒöáŵª àÍÒµ ¾µ Ø ä´ l ä¿àÅÕÂ é § +2.7 ¶Ö§ +5.5V ÃÙ»·Õè L23-1 áÊ´§¡ÒèѴ¢ÒáÅÐÃÒÂÅÐàÍÕ´¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Ò÷íÒ§Ò¹ã¹äÍ«Õ MCP4922 l

ºÔµ 15

ºÔµ 14

ºÔµ 13

W -x

W -x

ºÔµ 7

11 VREFB

D7

10 VOUTB

W -x

14 VOUTA

NC 2

13 VREFA

CS 3 SCK 4 SDI 5

MCP4922

VDD 1

12 AVss

NC 6

9 SHDN

NC 7

8 LDAC

A/B

GA

ºÔµ 12

SHDN

ºÔµ 11

ºÔµ 10

ºÔµ 9

ºÔµ 8

W -x

W -0

W -x

W -x

W -x

W -x

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

W -x

W -x

W -x

W -x

W -x

W -x

W -x

BUF

D6

D5

D4

D11

D3

D10

D2

D9

D1

D8

D0

ºÔµ 15 - A/B (DACA/DACB select bit) : ºÔµàÅ×͡ǧ¨Ãá»Å§ÊÑ­­Ò³·Õµè Í §¡ÒõԴµ Í´ Ç 0 = à¢Õ¹¢ ÍÁÙÅä»Âѧ DACA 1 = à¢Õ¹¢ ÍÁÙÅä»Âѧ DACB ºÔµ 14 - BUF (VREF Input Buffer Control bit) : ºÔµàÅ×Í¡ºÑ¿à¿Íà ãË á¡ Í¹Ô ¾Øµáç´Ñ¹Í Ò§ÍÔ§ 0 = äÁ àÅ×͡㪠ǧ¨ÃºÑ¿à¿Íà 1 = àÅ×͡㪠ǧ¨ÃºÑ¿à¿Íà ºÔµ 13 - GA (Output Gain Select bit) : ºÔµàÅ×Í¡ÍѵÃÒ¢ÂÒÂÊÑ­­Ò³àÍÒµ ¾µØ 0 = ¢ÂÒ 2 à· Ò ¹Ñ¹è ¤×Í áç´Ñ¹àÍÒµ ¾µØ ෠ҡѺ 2 x VREF x ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ/4096 1 = äÁ ¢ÂÒ ¹Ñ¹è ¤×Í áç´Ñ¹àÍÒµ ¾µØ ෠ҡѺ VREF x ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ/4096 ºÔµ 12 - SHDN (Output Power Down Control bit) : ºÔµ¤Çº¤ØÁ¡Òè Ò¾Åѧ§Ò¹á¡ ǧ¨ÃàÍÒµ ¾µØ 0 = ´ÔÊàÍàºÔÅǧ¨ÃºÑ¿à¿Íà àÍÒµ ¾µØ ·íÒãË ¢ÒàÍÒµ ¾µØ ÁÕÍÁÔ ¾Õá´¹« ʧ٠1 = ¤Çº¤ØÁãË Á¡Õ ÒÃÁÕ¡Òè Ò¾Åѧ§Ò¹á¡ ǧ¨ÃàÍÒµ ¾µØ ºÔµ 0 ¶Ö§ 11 - D0 ¶Ö§ D11 (DAC Data bits) : ºÔµ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ 12 ºÔµ

ÃÙ»·Õè L23-1 ¡ÒèѴ¢ÒáÅТ ÍÁÙŢͧÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§äÍ«Õ MCP4922


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 205

CS

!

"

#

$

%

&

'

!

"

#

D3

D2

D1

D0

SCK ºÔµ¤Çº¤ØÁ SDI

A/B

BUF

GA

ºÔµ¢ ÍÁÙÅ 12 ºÔµ SHDN

D11

D10

D9

D8

D7

D6

D5

D4

áç´Ñ¹àÍÒµ ¾µØ µÒÁ·Õ¡è Òí ˹´

Vout

ÃÙ»·Õè L23-2 ä´ÍÐá¡ÃÁàÇÅÒ㹡Ò÷íÒ§Ò¹¢Í§äÍ«Õ MCP4922

ÃÕ¨ÊÔ àµÍà à¢Õ¹¤íÒÊÑ§è ¢Í§ MCP4922 MCP4922 ÁÕÃ¨Õ ÊÔ àµÍà ÊÒí ËÃѺ¡íÒ˹´¡Ò÷íÒ§Ò¹áÅÐÃѺ¢ ÍÁÙÅ´Ô¨µÔ ÍÅà¾Õ§µÑÇà´ÕÂÇ ·íÒãË §Ò µ Í¡ÒÃ㪠§Ò¹ ¹Ñ¹è ¤×Í ÃÕ¨ÊÔ àµÍà à¢Õ¹¤íÒÊѧè (WRTE COMMAD) ã¹ÃÙ»·Õè L23-2 áÊ´§ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»ÂѧÃÕ¨ÊÔ àµÍà ¤Òí ÊÑ§è ¢Í§äÍ«Õ MCP4922 ¨ÐàËç¹ ä´ ÇÒ ¡ÒÃàÃÔÁè µ ¹µÔ´µ ͡Ѻ MCP4922 µ ͧ·íÒãË ¢Ò CS à» ¹ 0 ¨Ò¡¹Ñ¹é » ͹ÊÑ­­Ò³¹ÒÌ ¡Òࢠҷբè Ò SCK µ Í´ Ç à¢Õ¹¢ ÍÁÙÅ¡íÒ˹´¡Ò÷íÒ§Ò¹ËÃ×Í Config bit 4 ºÔµº¹ µ Í´ ǺԵ¢ ÍÁÙÅ´Ô¨µÔ ÍÅÍÕ¡ 12 ºÔµ ã¹¢³Ðà´ÕÂǡѹµ ͧ ·íÒãË ¢Ò LDAC à» ¹ 1 ¤ Ò§äÇ ¨¹¡Ç Ò¨ÐÊ §¢ ÍÁÙŤú áÅ Çà»ÅÕÂè ¹à» ¹Åͨԡ 0 ·Õ¢è Ò CS ¡çµÍ §à»ÅÕÂè ¹à» ¹Åͨԡ 1 ´ Ç áç´Ñ¹ÍйÒÅÍ¡¨Ö§¶Ù¡Ê §ÍÍ¡ä»·Ò§ Vout ¨Ò¡ÃٻẺ¡ÒõԴµ Í㪠§Ò¹´Ñ§·Õ¡è Å ÒÇÁÒáÅ Ç ÊÒÁÒö¹íÒ MCP4922 ÁÒ㪠§Ò¹Ã ÇÁ¡Ñº PIC16F877 ä´ ´Ñ§áÊ´§ã¹ÃÙ»·Õè L23-3 â´Â¨Ð㪠¢Ò·Õµè Í ãª §Ò¹à¾Õ§ 3 àÊ ¹à· Ò¹Ñ¹é ¢Ò SDI «Ö§è à» ¹¢ÒÃѺ¢ ÍÁÙÅÊíÒËÃѺ¡ÒõԴµ Í ¡Ñº MCP4922 äÁ ¨Òí à» ¹µ ͧ㪠§Ò¹ ÊíÒËÃѺâ»Ãá¡ÃÁà¾×Íè ÊÑ§è §Ò¹ãË MCP4922 ·íÒ§Ò¹¹Ñ¹é áÊ´§ã¹â»Ãá¡ÃÁ·Õè L23-1 â´Â ¨Ðà» ¹¡ÒÃÊ §¤ Ò¢ ÍÁÙÅä»Âѧ MCP4922 ·Ñ§é ª ͧ A áÅÐ B â´Â¨Ðà¾ÔÁè ¤ Òáç´Ñ¹¢Ö¹é ·Ø¡æ 3 ÇÔ¹Ò·Õ ¡ÒÃà¾ÔÁè áç´Ñ¹à» ¹¡ÒÃà¾ÔÁè Ẻ·ÇÕ¤³ Ù ¤ Ò¢Ö¹é àÃ×Íè Â æ ¡ÒõÃǨÊͺ¼ÅÅѾ¸ ¨Ðãª Ç¸Ô ¡Õ ÒùíÒÁÑŵÔÁàÔ µÍÃ Ç´Ñ ·Õ¢è ÒàÍÒµ ¾µØ ¢Í§ äÍ«Õ MCP4922

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà l

㪠ǧ¨Ãã¹ÃÙ»·Õè L23-3 㹡Ò÷´Åͧ

¢Ñ鹵͹¡Ò÷´Åͧ L23.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz


206 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

#include <built_in.h> char i; int vout; //***********************************' // MCP4922 Configuration Constants ' //***********************************' const char A_B1_G1 = 0x70; //Channel A Buffered x1Gain const char A_B1_G2 = 0x50; //Channel A Buffered x2Gain const char A_B0_G1 = 0x30; //Channel A nonBuffered x1Gain const char A_B0_G2 = 0x10; //Channel A nonBuffered x2Gain const char B_B1_G1 = 0xF0; //Channel B Buffered x1Gain const char B_B1_G2 = 0xD0; //Channel B Buffered x2Gain const char B_B0_G1 = 0xB0; //Channel B nonBuffered x1Gain const char B_B0_G2 = 0x90; //Channel B nonBuffered x2Gain const char SHDN = 0x00; //Channel A & B Output = High Impedance void DAC_OUT(char config,int output) { PORTC.F0=0; // Enable Chip Select SPI_Write(config+Hi(output)); SPI_Write(Lo(output)); PORTC.F0=1; // 'DAC output refreshed at this point } void main() { PORTC=0x00; // clear portC TRISC.F0=0; // Chip select line set to output Spi_Init(); // Initial Spi PORTC.F0=1; // Disable Chip Select DAC_OUT(SHDN,0); while(1) { for (i=1;i<13;i++) { vout=(1<<i)-1; DAC_OUT(A_B0_G1,vout); // Output on channel A DAC_OUT(B_B0_G1,vout); // Output on channel B Delay_ms(3000); // 3 Second delay to watch output on mulltimeter } } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ¿ §¡ ª¹Ñè DAC_OUT ·íÒ˹ Ò·ÕÊè § ¢ ÍÁÙÅ 2 亵 ä»ÂѧäÍ«Õ MCP4922 â´ÂàÃÔÁè ¨Ò¡àÍç¹àÍàºÔÅ¡ÒõԴµ ͡Ѻ MCP4922 ¨Ò¡¹Ñ¹é Ê §¢ ÍÁÙÅ¡íÒ˹´¡Ò÷íҧҹ仾à ÍÁ¡Ñº¢ ÍÁÙÅ 4 ºÔµº¹¢Í§¤ Ò´Ô¨µÔ ÍÅ·Õµè Í §¡ÒÃÊ § µÒÁ´ Ç ¢ ÍÁÙÅ 8 ºÔµÅ Ò§ (¡ÒÃá¡ 4 ºÔµº¹ áÅÐ 8 ºÔµÅ Ò§¨Ð㪠¿§ ¡ ª¹Ñè hi áÅÐ lo ÁÒª Ç â´ÂàÁ×Íè 㪠§Ò¹¿ §¡ ª¹Ñè ¹Õ¨é Ð µ ͧ include ä¿Å build_in.h à¾ÔÁè àµÔÁࢠÒÁÒ´ ÇÂ) ÊíÒËÃѺâ»Ãá¡ÃÁËÅÑ¡ ¨Ð¡íÒ˹´¢Ò¾Íà µ RC0 à» ¹àÍÒµ ¾µØ Ê Ç¹¢ÒÍ×¹è æ ¨Ð¶Ù¡¡íÒ˹´¨Ò¡¿ §¡ ª¹Ñè Spi_Init() ¨Ò¡¹Ñ¹ é Êѧè ãË â»Ãá¡ÃÁÇ¹Ê §¢ ÍÁÙÅä»Âѧ MCP4922 «Ö§è ¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´äÁ 㪠º¿Ñ à¿Íà ÍѵÃÒ¢ÂÒÂ෠ҡѺ 1 â´Â㹡ÒÃÊ §¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õµè Í §¡ÒÃá»Å§¤ Òà» ¹áç´Ñ¹¨Ðà¾ÔÁè ¤ Ò¢Ö¹é ¤Ãѧé ÅÐ 2 à· Ò àª ¹ ¨Ò¡ 0 à» ¹ 2, 4, 8 à» ¹µ ¹

â»Ãá¡ÃÁ·Õè L23-1 ä¿Å SPItest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè µÔ´µ ͡ѺäÍ«Õ MCP4922 â´Â㪠¿§ ¡ ª¹Ñè SPI ¢Í§ mikroC


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

+5V

+5V

11

VDD

1 VDD

32

VDD

VREFB

15 RC0 18 RC3/SCK 24 RC5/SDO

3 CS 4 SCK 5 SDI 8 LDAC

VREFA SHDN VOUTA

IC2 MCP4922

IC1 PIC16F877-20

OSC1 13 C1 22pF

l 207

VOUTB VSS 12

11 13 9 14 DC outputA 10 DC outputB

OSC2 14 XTAL1 20MHz

C2 22pF

ÃÙ»·Õè L23-3 ǧ¨Ã·´Åͧ¡ÒÃàª×Íè Áµ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877 ¡ÑºÍØ»¡Ã³ SPI «Ö§è ã¹·Õ¹è ¤Õé Í× äÍ«ÕàºÍà MCP4922 L23.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è SPITest áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L23-1 L23.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L23.3 àµÃÕÂÁ¡Òõ Í㪠§Ò¹ÁÑŵÔÁàµÍà â´ÂàÅ×Í¡Â Ò¹ÇÑ´áç´Ñ¹ +10Vdc ¢Ö¹é ä» áŠǵ ÍÊÒºǡࢠҷբè Ò 14 ¢Í§äÍ«Õ MCP4922 Ê Ç¹ÊÒÂźµ ͡Ѻ¡ÃÒÇ´ L23.4 Ãѹâ»Ãá¡ÃÁ Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹ÁÑŵÔÁàÔ µÍà ¨ÐÊѧࡵàË繤 Òáç´Ñ¹à¾ÔÁè ¢Ö¹é Í ҧµ Íà¹×Íè § ¨Ò¡ 0 ¨¹¶Ö§ +5Vdc ¨Ò¡¹Ñ¹é ¡ÅѺä»àÃÔÁè µ ¹·Õè 0V ÍÕ¡¤Ãѧé â´Â¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹¨Ðà¡Ô´¢Ö¹é ·Ø¡æ 3 ÇÔ¹Ò·Õ


208 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 209

º··ÕÕè 13

¡ÒõԴµ ÍÍØ»¡Ã³ ÃкººÑÊ 1 ÊÒ ´ Ç¿ §¡ ª¹Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍà ÃкººÑÊ 1 ÊÒ (1-Wire bus) ¼Ù¤ ¹ ¤Ô´¤×Í ´ÑÅÅÑÊà«ÁԤ͹´Ñ¡àµÍà ÃкºÊ×Íè ÊÒâ ÍÁÙÅẺ¹ÕÁé Õ ¤ÇÒÁªÒ­©ÅÒ´áÅÐ㪠ÊÒÂÊÑ­­Ò³à¾Õ§ 1 àÊ ¹à· Ò¹Ñé¹ äÁ µ ͧÁÕÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò¤Çº¤ØÁ¨Ñ§ËÇÐ ¡Òö Ò·ʹ¢ ÍÁÙÅàËÁ×͹¡ÑºÃкºÊ×Íè ÊÒÃ͹ءÃÁẺÍ×¹è æ à¹×Íè §¨Ò¡ÊÒÂÊÑ­­Ò³¹Ñ¹é ¨Ð·íÒ˹ Ò·Õàè » ¹ ÊÒÂÊÑ­­Ò³¹ÒÌ ¡Òã¹µÑÇ Ê Ç¹¤ Ңͧ¢ ÍÁÙžԨÒóҨҡÅѡɳТͧÃÙ»ÊÑ­­Ò³·Õ»è ÃÒ¡¯º¹ÊÒÂã¹ áµ ÅЪ ͧ¢Í§àÇÅÒËÃ×ÍàÃÕÂ¡Ç Ò ä·Á ÊÅç͵ (time-slot) â´Â¤ÒºàÇÅÒµèÒí ÊØ´áÅÐÊÙ§ÊØ´¢Í§Ê¶Ò¹Ðµ Ò§æ 㹡ÒÃÊ×Íè ÊÒâ ÍÁÙÅã¹áµ ÅÐä·Á ÊÅç͵ÁÕ¡ÒáíÒ˹´¢Íºà¢µäÇ Í ҧªÑ´à¨¹ ¡Òö Ò·ʹ¢ ÍÁÙŨÐà¡Ô´ ¢Ö¹é ã¹áµ ÅÐä·Á ÊÅç͵¹Ñ¹é ¡Òö Ò·ʹ¢ ÍÁÙÅà» ¹áººÍЫԧâ¤Ã¹ÑÊã¹ÃдѺºÔµ

13.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤¢Í§ÃкººÑÊ˹֧è ÊÒ ÊÒÂÊÑ­­Ò³º¹ÃкººÑʹÕàé » ¹ÊÒÂÊÑ­­Ò³áººÊͧ·ÔÈ·Ò§ áµ ¢Í ÁÙÅÊÒÁÒöà´Ô¹·Ò§ä´ ã¹·ÔÈ ·Ò§à´ÕÂÇÀÒÂ㹪 ǧàÇÅÒ˹֧è æ ÍØ»¡Ã³ º¹ÃкººÑʵ ͧÁÕ¡ÒÃÃкØÍ ҧªÑ´à¨¹Ç ÒµÑÇã´à» ¹ÁÒÊàµÍà µÑÇã´ à» ¹ ÊàÅ¿ â´ÂÊ Ç ¹ãË­ ÍØ » ¡Ã³ Á ÒÊàµÍà ¤× Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ Ê Ç ¹ÍØ » ¡Ã³ Ê àÅ¿ ä´ á¡ äÍ«ÕÇ´Ñ ÍسËÀÙÁ,Ô Ë¹ ǤÇÒÁ¨íÒáÃÁ à» ¹µ ¹ ÍØ»¡Ã³ ÁÒÊàµÍà ໠¹µÑǨѴàµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁáÅФǺ ¤ØÁ¡Òö Ò·ʹ¢ ÍÁÙź¹ÊÒÂÊÑ­­Ò³¹Ñ¹é ¢ ÍÁÙŷѧé ËÁ´¨Ð¶Ù¡Ê §Å§º¹ÊÒÂÊÑ­­Ò³·ÕÁè ÍÕ ÂÙà ¾Õ§àÊ ¹à´ÕÂÇ ¹Õ·é §Ñé ËÁ´ ã¹ÃÐËÇ Ò§¡Ò÷íÒ§Ò¹ÍØ»¡Ã³ ÁÒÊàµÍà áÅÐÊàÅ¿ÊÒÁÒö໠¹ä´ ·§Ñé µÑÇÊ §áÅеÑÇÃѺ ¢Ö¹é ÍÂÙ¡ ºÑ à§×Íè ¹ä¢¢Í§¡Ò÷íҧҹ㹢³Ð¹Ñ¹é ¡µÑÇÍ ҧ ¶ ÒËÒ¡ÁÕ¡ÒÃà¢Õ¹¢ ÍÁÙŨҡÍØ»¡Ã³ ÁÒÊàµÍà ä»ÂѧÍØ»¡Ã³ ÊàÅ¿ µÑÇÊ §¤×ÍÍØ»¡Ã³ ÁÒÊàµÍà µÑÇÃѺ¤×ÍÍØ»¡Ã³ ÊàÅ¿ ã¹·Ò§µÃ§¢ ÒÁ ËÒ¡à» ¹¡ÒÃÍ Ò¹¢ ÍÁÙŨҡÍØ »¡Ã³ ÊàÅ¿ µÑÇÊ §¨Ð¡ÅÒÂà» ¹ÍØ»¡Ã³ ÊàÅ¿ áÅеÑÇÃѺ¤×ÍÍØ»¡Ã³ ÁÒÊàµÍà ã¹ÃкººÑÊ 1 Ãкºµ ͧ ÁÕÍ»Ø ¡Ã³ ÁÒÊàµÍà à¾Õ§µÑÇà´ÕÂÇ෠ҹѹé ÊÒÂÊÑ­­Ò³¢Í§ÃкººÑʹÕéµ Í§¡íÒ˹´ÊÀÒÇл¡µÔäÇ ·ÕèÅͨԡÊÙ§ ·íÒä´ â´Â¡Òõ ͵Ñǵ Ò¹ ·Ò¹¤ Ò 1 ¶Ö§ 4.7k: ¾ÙÅÍÑ»¡Ñºä¿àÅÕÂé § +5V ´Ñ§¹Ñ¹é ÍØ»¡Ã³ ·¹Õè Òí ࢠÒÁÒµ ͺ¹ÃкººÑÊ¹Õ¨é §Ö µ ͧÍ͡Ẻ ãË àÍÒµ ¾µØ ·Õµè Í §µ ͡ѺÊÒÂÊÑ­­Ò³ÁÕÅ¡Ñ É³Ðà» ¹¤ÍÅàÅç¡àµÍà ໠´ËÃÔÍà´Ã¹à» ´ ã¹ÃÙ»·Õè 13-1 áÊ´§ ä´ÍÐá¡ÃÁ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅẺ˹Öè§ÊÒÂàº×éͧµ ¹


210 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ +5V

4k7

ÍØ»¡Ã³ ÁÒÊàµÍÃ

ÍØ»¡Ã³ ÊàÅ¿ #1

ÍØ»¡Ã³ ÊàÅ¿ #2

ÍØ»¡Ã³ ÊàÅ¿ #n

ÃÙ»·Õè 13-1 ¡ÒÃàª×Íè Áµ ͺ¹ÃкººÑÊ˹֧è ÊÒÂ

13.2 ¤Ø³ÊÁºÑµ¢Ô ͧä·Á ÊÅç͵ ÍØ»¡Ã³ ÁÒÊàµÍà ໠¹ÍØ»¡Ã³ à¾Õ§µÑÇà´ÕÂǺ¹ÃкººÑÊ·ÕÊè ÒÁÒöÍÔ¹àÔ ªÕÂÅÊÒÂÊÑ­­Ò³ä´ â´Â ¨Ð¡íÒà¹Ô´¨Ø´àÃÔÁè µ ¹¢Í§ä·Á ÊÅç͵´ Ç¡Ò÷íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡµèÒí 㹪 ǧàÇÅÒË¹Ö§è ¨Ò¡¹Ñ¹é ·íÒ ãË ¡ÅѺÁÒà» ¹ÅͨԡÊÙ§ ¶ ÒËÒ¡ÍØ»¡Ã³ ÊàÅ¿µ ͧ¡ÒÃÊ §¢ ÍÁÙÅ¡ÅѺÁÒÂѧÁÒÊàµÍà ÍØ»¡Ã³ ÊàÅ¿¨Ðà» ¹ µÑǤǺ¤ØÁÊÀÒÇТͧÊÒÂÊÑ­­Ò³µ Í仨¹àÊÃç¨ÊÔ¹é ¡Ãкǹ¡Òà ᵠ¶Ò ËÒ¡ÍØ»¡Ã³ ÁÒÊàµÍà µÍ §¡ÒÃ Ê §¢ ÍÁÙÅ¡ç¨ÐÊÒÁÒö´íÒà¹Ô¹¡Òõ Íä»ä´ àÅ ¿ §¡ ª¹Ñè ¢Í§ä·Á ÊÅç͵·Õ¡è Òí ˹´â´ÂÍØ»¡Ã³ ÁÒÊàµÍà Á´Õ Ç Â¡Ñ¹ 4 ¿ §¡ ª¹Ñè ¤×Í ä·Á ÊÅç͵¢Í§ ¡ÒÃÃÕ૵ (RESET), ¡ÒÃÍ Ò¹¢ ÍÁÙÅ (READ DATA), ¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 (WRITE ONE) áÅСÒà à¢Õ¹¢ ÍÁÙÅ 0 (WRITE ZERO) ä·Á ÊÅç͵ÃÕ૵㪠㹡ÒÃàÃÔÁè µ ¹µÔ´µ ͡ѺÍØ»¡Ã³ ÊàÅ¿ ã¹¢³Ð ·Õäè ·Á ÊÅç͵¡ÒÃÍ Ò¹¨ÐÊíÒËÃÑºÍ Ò¹¢ ÍÁÙÅ·ÕÊè § ÁÒ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ Ê Ç¹ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 áÅÐ 0 㪠ÊÒí ËÃѺà¢Õ¹¢ ÍÁÙÅä»ÂѧÍØ»¡Ã³ ÊàÅ¿¼ Ò¹ÊÒÂÊÑ­­Ò³¢Í§Ãкº ·Ò§´ Ò¹ÍØ»¡Ã³ ÊàÅ¿ÁÕ¿§ ¡ ª¹Ñè ·Ñ§é ÊÔ¹é 3 ¿ §¡ ª¹Ñè ¤×Í ä·Á ÊÅç͵¢Í§¡Òõͺʹͧ (PRESENCE), ¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 (WRITE ONE) áÅСÒÃà¢Õ¹¢ ÍÁÙÅ 0 (WRITE ZERO) ä·Á ÊÅç͵¢Í§¡Òà µÍºÊ¹Í§ãª ÊÒí ËÃѺµÍºÊ¹Í§¡ÒõԴµ ͨҡÍØ»¡Ã³ ÁÒÊàµÍà â´ÂÍØ»¡Ã³ ÊàÅ¿µÑÇ·Õ¶è ¡Ù àÅ×Í¡¨Ðµ Í§Ê § ÊÑ­­Ò³µÍºÊ¹Í§Å§º¹ÊÒÂÊÑ­­Ò³à¾×Íè ᨠ§ãË Í»Ø ¡Ã³ ÁÒÊàµÍà ·ÃÒºÇ Ò ¢³Ð¹Õµé ´Ô µ Í¡Ñ¹ä´ áÅ Ç Ê Ç¹ ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 áÅÐ 0 㪠ʧ ¢ ÍÁÙÅä»ÂѧÍØ»¡Ã³ ÁÒÊàµÍà ¼Ò ¹ÊÒÂÊÑ­­Ò³¢Í§Ãкº «Ö§è ¨ÐÊÑÁ¾Ñ¹¸ ¡ºÑ ä·Á ÊÅç͵¡ÒÃÍ Ò¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍà ¡ÒÃá¡áÂп §¡ ª¹Ñè ¢Í§áµ ÅÐä·Á ÊÅç͵ ¨Ð㪠¤ÇÒÁÂÒǢͧ¤ÒºàÇÅÒáÅÐÅѡɳТͧÃÙ»ÊÑ­­Ò³à» ¹µÑÇ¡íÒ˹´ áÅзء¤ÃÑ§é ·ÕÁè ¡Õ ÒÃà»ÅÕÂè ¹á»Å§ ¿ §¡ ª¹Ñè µ ͧ·íÒãË ÊÒÂÊÑ­­Ò³ÍÂÙã ¹ÊÀÒÇÐÇ Ò§àÊÁÍ «Ö§è ¡ç¤Í× ¡Ò÷íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡÊ٧͠ҧ¹ Í 1 äÁâ¤ÃÇÔ¹Ò·Õ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ 480-960 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÁÒÊàµÍà ·íÒãË à» ¹ÅͨԡµíèÒ

l 211

60-240 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÁÒÊàµÍà ·íÒãË à» ¹ÅͨԡÊÙ§

ÃÕ૵

µÍºÃѺ 15-60 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÊàÅ¿ ·íÒãË à» ¹ÅͨԡµíèÒ

ÍØ»¡Ã³ ÊàÅ¿ ·íÒãË à» ¹ÅͨԡÊÙ§

ÃÙ»·Õè 13-2 ä·Á ÊÅç͵¡ÒÃÃÕ૵áÅСÒõͺÃѺ¢Í§ÍØ»¡Ã³ º¹ÃкººÑÊ˹֧è ÊÒÂ

13.2.1 ä·Á ÊÅç͵¡ÒÃÃÕ૵áÅеͺʹͧ ÍØ»¡Ã³ ÁÒÊàµÍà ·Òí ãË à¡Ô´¡ÒÃÃÕ૵º¹ÊÒÂÊÑ­­Ò³à¾×Íè ᨠ§á¡ Í»Ø ¡Ã³ ÊàÅ¿ â´Â¡Òà ·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡµèÒí µ Íà¹×Íè §Í ҧ¹ Í 480 äÁâ¤ÃÇÔ¹Ò·Õ áÅШе ͧ·íÒãË ÊÒÂÊÑ­­Ò³¡ÅѺ ÁÒà» ¹ÅͨԡÊÙ§ÀÒÂã¹ 480 äÁâ¤ÃÇÔ¹Ò·ÕËÅѧ¨Ò¡¹Ñé¹ ¶ ÒËÒ¡ÁÕÍØ»¡Ã³ ÊàÅ¿µ ÍÍÂÙ º¹ÊÒÂÊÑ­­Ò³ ¨ÐÁÕ¡ÒõͺʹͧÊÑ­­Ò³ÃÕ૵¹Ñé¹´ ÇÂÊÑ­­Ò³µÍºÊ¹Í§ (PRESENCE) â´Â¡Ò÷íÒãË ÊÒ ÊÑ­­Ò³à» ¹ÅͨԡµèÒí µ Íà¹×Íè §¹Ò¹»ÃÐÁÒ³ 60-240 äÁâ¤ÃÇÔ¹Ò·Õ ËÅѧ¨Ò¡ÊÑ­­Ò³ÃÕ૵»ÃÒ¡¯»ÃÐ ÁÒ³ 15-60 äÁâ¤ÃÇÔ¹Ò·Õ ÃÙ»·Õè 13-2 áÊ´§ä·Á ÊÅç͵¢Í§¡ÒÃÃÕ૵áÅСÒõͺʹͧ

13.2.2 ä·Á ÊÅç͵¡ÒÃÍ Ò¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍà áÅСÒÃà¢Õ¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÊàÅ¿ àÁ×Íè µ ͧ¡ÒÃÍ Ò¹¢ ÍÁÙŨҡÍØ»¡Ã³ ÊàÅ¿ ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡµèÒí ¹Ò¹»ÃÐÁÒ³ 1-15 äÁâ¤ÃÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é µ ͧ·íÒãË Ê¶Ò¹Ð¢Í§ÊÒ¡ÅѺÁÒà» ¹ÅͨԡÊÙ§ ÍØ»¡Ã³ ÊàÅ ¿¨ÐÊ §¢ ÍÁÙÅÁÒãË ÍØ»¡Ã³ ÁÒÊàµÍà â´Â¶ Ò¢ ÍÁÙÅà» ¹ 0 ÍØ»¡Ã³ ÊàÅ¿¨Ð·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ ÅͨԡµèíÒ¹Ò¹»ÃÐÁÒ³ 45 äÁâ¤ÃÇÔ¹Ò·Õ áÅ Ç·íÒãË ¡ÅѺÁÒÊÙ ÊÀÒÇÐÅͨԡÊÙ§ÍÕ¡¤ÃÑé§ áµ ¶ Òà» ¹¢ ÍÁÙÅ 1 ÍØ»¡Ã³ ÊàÅ¿¨Ð·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡÊÙ§µ Íà¹×Íè §ä»ÍÕ¡ 45 äÁâ¤ÃÇÔ¹Ò·Õ ÃÇÁàÇÅҷѧé ËÁ´ ã¹ä·Á ÊÅç͵¹Õ»é ÃÐÁÒ³ 60-120 äÁâ¤ÃÇÔ¹Ò·Õ ¹Ñ¹è ¤×Íã¹ä·Á ÊÅç͵¹Õãé ª àÇÅÒÃÇÁäÁ à¡Ô¹ 120 äÁâ¤Ã ÇÔ¹Ò·Õ ã¹¢³Ð·ÕÍè »Ø ¡Ã³ ÁÒÊàµÍà ¨Ð㪠àÇÅÒ㹡ÒÃÍ Ò¹¢ ÍÁÙÅÍÂÙà ÐËÇ Ò§ 15 áÅÐ 60 äÁâ¤ÃÇÔ¹Ò·ÕËÅѧ ¨Ò¡àÃÔèÁµ ¹ä·Á ÊÅç͵¹Õé ã¹ÃÙ»·Õè 13-3 áÊ´§ÃÙ»ÊÑ­­Ò³¢Í§ä·Á ÊÅç͵¡ÒÃÍ Ò¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍà «§Öè ÁÕÅ¡Ñ É³ÐàËÁ×͹¡Ñº¡ÒÃà¢Õ¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÊàÅ¿ áÅÐä·Á ÊÅç͵·Ñ§é Êͧ¨Ðà¡Ô´¢Ö¹é ã¹ àÇÅÒà´ÕÂǡѹ ¡Å ÒǤ×Í àÁ×Íè ÍØ»¡Ã³ ÁÒÊàµÍà ÍÒ ¹ ÍØ»¡Ã³ ÊàÅ¿¡çµÍ §à¢Õ¹


212 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

60-120 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÁÒÊàµÍà ·Òí ãË à» ¹ÅͨԡµíÒè ÍØ»¡Ã³ ÁÒÊàµÍà ·Òí ãË à» ¹ÅͨԡÊÙ§

ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒ¡ÒÃÍ Ò¹ã¹ª ǧàÇÅÒ¹Õé 1-15 äÁâ¤ÃÇÔ¹Ò·Õ

45 äÁâ¤ÃÇÔ¹Ò·Õ

ÍØ»¡Ã³ ÊàÅ¿µ ͧ·íÒãË à» ¹ ÅͨԡÊÙ§ËÅѧ¨Ò¡Ê §¢ ÍÁÙÅ ¤ÃºáÅ Ç

à» ¹ÅͨԡµíÒè ¶ ÒÍØ»¡Ã³ ÊàÅ¿Ê §¢ ÍÁÙÅ "0" à» ¹ÅͨԡÊÙ§ ¶ ÒÍØ»¡Ã³ ÊàÅ¿Ê §¢ ÍÁÙÅ "1"

ÃÙ»·Õè 13-3 ä·Á ÊÅç͵¡ÒÃÍ Ò¹¢ ÍÁÙŢͧÁÒÊàµÍà «Ö§è µÃ§¡Ñºä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÊàÅ¿

13.2.3 ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍà àÁ×Íè ÍØ»¡Ã³ ÁÒÊàµÍà µÍ §¡ÒÃà¢Õ¹¢ ÍÁÙÅ ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡµèÒí ¹Ò¹»ÃÐÁÒ³ 1-15 äÁâ¤ÃÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é µ ͧ·íÒãË Ê¶Ò¹Ð¢Í§ÊÒ¡ÅѺÁÒà» ¹ÅͨԡÊÙ§ áÅ Çà¢Õ¹¢ ÍÁÙÅ ä´ ã¹·Ñ¹·Õ ¶ Ò¢ ÍÁÙÅ·Õµè Í §¡ÒÃà¢Õ¹ä»ÂѧÍØ»¡Ã³ ÊàÅ¿à» ¹ 0 ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒãË ÊÒÂÊÑ­­Ò³ à» ¹ÅͨԡµèíÒ¹Ò¹»ÃÐÁÒ³ 45 äÁâ¤ÃÇÔ¹Ò·Õ áÅ Ç·íÒãË ÊÒÂÊÑ­­Ò³¡ÅѺÁÒÊÙ ÊÀÒÇÐÅͨԡÊÙ§ÍÕ¡¤ÃÑé§ áµ ¶Ò µ ͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 ÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð·íÒãË ÊÒÂÊÑ­­Ò³à» ¹ÅͨԡÊÙ§µ Íà¹×Íè §ä»ÍÕ¡ 45 äÁâ¤ÃÇÔ¹Ò·Õ ÃÇÁàÇÅҷѧé ËÁ´ã¹ä·Á ÊÅç͵¹Õ»é ÃÐÁÒ³ 60-120 äÁâ¤ÃÇÔ¹Ò·Õ ã¹ÃÙ»·Õè 13-4 áÅÐ13-5 áÊ´§ÃÙ»ÊÑ­­Ò³¢Í§ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍà «§Öè ÁÕÅ¡Ñ É³ÐàËÁ×͹¡Ñº¡ÒÃÍ Ò¹ ¢ ÍÁÙŢͧÍØ»¡Ã³ ÊàÅ¿ áÅÐä·Á ÊÅç͵·Ñé§Êͧ¨Ðà¡Ô´¢Öé¹ã¹ª ǧàÇÅÒà´ÕÂǡѹ ¡Å ÒǤ×Í àÁ×èÍÍØ»¡Ã³ ÁÒÊàµÍà à¢Õ¹ ÍØ»¡Ã³ ÊàÅ¿¡çµÍ §Í Ò¹¢ ÍÁÙÅ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 213

60-120 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÁÒÊàµÍà ·íÒãË à» ¹ÅͨԡµíèÒ ÍØ»¡Ã³ ÁÒÊàµÍà ·íÒãË à» ¹ÅͨԡÊÙ§

ÍØ»¡Ã³ ÊàÅ¿¨Ð·íÒ¡ÒÃÍ Ò¹ã¹ª ǧàÇÅÒ¹Õé 1-15 äÁâ¤ÃÇÔ¹Ò·Õ

45 äÁâ¤ÃÇÔ¹Ò·Õ

ÃÙ»·Õè 13-4 ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 ¢Í§ÍØ»¡Ã³ ÁÒÊàµÍà «Ö§è µÃ§¡Ñºä·Á ÊÅç͵¡ÒÃÍ Ò¹¢ ÍÁÙŢͧ ÍØ»¡Ã³ ÊàÅ¿ 60-120 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ ÁÒÊàµÍà ·Òí ãË à» ¹ÅͨԡµíÒè ÍØ»¡Ã³ ÁÒÊàµÍà ·Òí ãË à» ¹ÅͨԡÊÙ§

15 äÁâ¤ÃÇÔ¹Ò·Õ

45 äÁâ¤ÃÇÔ¹Ò·Õ

ÍØ»¡Ã³ ÊàÅ¿¨Ð·íÒ¡ÒÃÍ Ò¹ã¹ª ǧàÇÅÒ¹Õé

ÃÙ»·Õè 13-5 ä·Á ÊÅç͵¡ÒÃà¢Õ¹¢ ÍÁÙÅ 0 ¢Í§ÍØ»¡Ã³ ÁÒÊàµÍÃ


214 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

13.3 ÃٻẺ¢Í§¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅẺ˹էè ÊÒ (1-WireTM communication protocol) 㹡ÒÃÊ×èÍÊÒâ ÍÁÙÅÃкººÑÊ˹Öè§ÊÒ ÍØ»¡Ã³ ÁÒÊàµÍà ÊÒÁÒöµÔ´µ ÍÍØ»¡Ã³ ÊàÅ¿ä´ ¤ÃÑé§ ÅÐ 1 µÑÇ෠ҹѹé ÍØ»¡Ã³ ÊàÅ¿áµ ÅеÑǨ֧µ ͧÁÕ¢Í ÁÙÅ¡íÒ˹´áÍ´à´ÃÊ੾ÒеÑÇ â´Âà¡çºäÇ ã¹Ë¹ Ç ¤ÇÒÁ¨íÒÃÍÁÀÒÂã¹ÍØ»¡Ã³ ÊàÅ¿µÑǹѹé æ â´Â»¡µÔÍ»Ø ¡Ã³ ÊàÅ¿ã¹ÃкººÑÊẺ¹Õ¨é ÐÁÕ˹ ǤÇÒÁ ¨íÒ¢¹Ò´ 64 ºÔµËÃ×Í 8 亵 ÊíÒËÃѺà¡çº¢ ÍÁÙŵ Ò§æ ·ÕÊè Òí ¤Ñ­¢Í§ÍØ»¡Ã³ áµ ÅеÑÇ «Ö§è »ÃСͺ´ Ç 1. ÃËÑʢͧµÃСÙÅ ¨íҹǹ 8 ºÔµ 2. àÅ¢ËÁÒ»ÃШíÒµÑÇ (serial number) ¨íҹǹ 48 ºÔµ 3. ÃËÑʵÃǨÊͺ¤ÇÒÁ¼Ô´¾ÅÒ´ (CRC : Cyclical Redundancy Check) ¨íҹǹ 8 ºÔµ ¼Ùã ª §Ò¹ÊÒÁÒÃ¶Í Ò¹¢ ÍÁÙÅ»ÃШíÒµÑǢͧÍØ»¡Ã³ ÊàÅ¿ä´ ´ Ç¡ÒÃ㪠¤Òí Êѧè Í Ò¹Ë¹ ǤÇÒÁ¨íÒÃÍÁ (Read ROM : $33) 㹡óշºÕè ¹ºÑÊÁÕÍ»Ø ¡Ã³ ÊàÅ¿µÑÇà´ÕÂÇäÁ ¨Òí à» ¹µ Í§Í Ò§áÍ´à´ÃÊ㹡ÒõԴµ Í ÃٻẺ¡ÒõԴµ ͺ¹ÃкººÑÊ˹Öè§ÊÒ¨ÐàÃÔèÁµ ¹¢Öé¹ àÁ×èÍÍØ»¡Ã³ ÁÒÊàµÍà ·íÒ¡ÒÃÃÕ૵áÅÐ ¡íÒ˹´áÍ´à´ÃʢͧÍØ»¡Ã³ ··Õè Òí ¡ÒõԴµ Í ¶ ÒËÒ¡ÁÕÍ»Ø ¡Ã³ ÊàÅ¿à¾Õ§µÑÇà´ÕÂÇÊÒÁÒö¢ ÒÁ¢Ñ¹é µÍ¹ ¡ÒõԴµ ͡Ѻ˹ ǤÇÒÁ¨íÒÃÍÁã¹ÍØ»¡Ã³ ÊàÅ¿ä´ ¨ÐàÃÕ¡ÇÔ¸¡Õ Òôѧ¡Å ÒÇ ¡ÒÃäÁ µ´Ô µ Í˹ ǤÇÒÁ ¨íÒÃÍÁ ËÃ×Í Ê¤Ô»ÃÍÁ (Skip ROM : $CC) ¨Ò¡¹Ñ¹é ÃÍ¡ÒõͺÃѺ¨Ò¡ÍØ»¡Ã³ ÊàÅ¿ àÁ×Íè ¡ÒõͺÃѺ ÊÁºÙó ¡ç¨ÐÊÒÁÒöàÃÔèÁµ ¹¢Ñ鹵͹¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙÅä´ µ Íä»

13.4 äźÃÒÃÕÃкººÑÊ˹֧è ÊÒ (onewire) äźÃÒÃÕ onewire Í͡ẺÁÒà¾×Íè Ê×Íè ÊÒáѺÃкººÑÊ 1 ÊÒ áÅÐÁÕ¢Í ¡íÒ˹´ã¹àÃ×Íè §¤ÇÒÁ¶Õè ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC µ ͧäÁ ¹Í Â¡Ç Ò 4MHz ÁÕ¿§ ¡ ª¹Ñè µ Ò§æ ã¹äźÃÒÃÕ onewire ãË ãª §Ò¹´Ñ§¹Õé


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 215

13.4.1 ¿ §¡ ª¹Ñè Ow_Reset 㪠ÊÒí ËÃѺÃÕ૵ÍØ»¡Ã³ onewire ·Õàè ª×Íè Áµ ÍÍÂÙ¡ ºÑ ¢Ò¾Íà µ·Õ¡è Òí ˹´ áµ ¿§ ¡ ª¹Ñè ¹Õ¨é Ðãª ä´ à©¾ÒÐ ¡ÑºäÍ«Õ DS1820 ෠ҹѹé ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Ow_Reset(unsigned short *port, unsigned short pin);

µÑÇá»Ã port pin

à» ¹µíÒá˹ §¾Íà µ·Õãè ª àª×Íè Áµ ͺÑÊ˹֧è ÊÒÂ

à» ¹µíÒá˹ §¢Ò¾Íà µ·Õàè ª×Íè Áµ ͡ѺºÑÊ˹֧è ÊÒÂ

¡Òä׹¤ Ò ¤×¹¤ Òà» ¹ 0 ¶ ÒµÃǨ¾ºÍØ»¡Ã³ onewire ¤×¹¤ Òà» ¹ 1 ¶ ÒäÁ ¾ºÍØ»¡Ã³ onewire

µÑÇÍ ҧ·Õè 13-1 Ow_Reset(&PORTA, 5);

ÃÕ૵ÍØ»¡Ã³ ºÊÑ Ë¹Ö§è ÊÒ·յè Í ÍÂÙ¡ ºÑ ¢Ò¾Íà µ RA5

13.4.2 ¿ §¡ ª¹Ñè Ow_Read à» ¹¿ §¡ ªÑè¹Í Ò¹¢ ÍÁÙŨҡÍØ»¡Ã³ º¹ÃкººÑÊ˹Öè§ÊÒ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè unsigned short Ow_Read(unsigned short *port, unsigned short pin);

µÑÇá»Ã port pin

à» ¹µíÒá˹ §¾Íà µ·Õãè ª àª×Íè Áµ ͺÑÊ˹֧è ÊÒÂ

à» ¹µíÒá˹ §¢Ò¾Íà µ·Õàè ª×Íè Áµ ͡ѺºÑÊ˹֧è ÊÒÂ

¡Òä׹¤ Ò

¤×¹¤ Ò¢ ÍÁÙÅ 1 亵 ·ÍÕè Ò ¹ä´ ¨Ò¡ÍØ»¡Ã³ º¹ÃкººÑÊ

µÑÇÍ ҧ·Õè 13-2 unsigned short tmp; ... tmp = Ow_Read(&PORTA, 5);

à» ¹¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙÅ 1 亵 ¨Ò¡ºÑÊ˹֧è ÊÒ·բè Ò¾Íà µ RA5 â´Âà¡çº¤ Ò·ÕÍè Ò ¹ä´ äÇ ·µÕè ÇÑ á»Ã tmp


216 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

3.13.3 ¿ §¡ ª¹Ñè Ow_Write à» ¹¿ §¡ ªÑè¹Ê §¢ ÍÁÙÅä»ÂѧÃкººÑÊ˹Öè§ÊÒ ÃٻẺ¡ÒÃ㪠§Ò¹¤íÒÊѧè void Ow_Write(unsigned short *port, unsigned short pin, unsigned short par);

µÑÇá»Ã port

à» ¹µíÒá˹ §¾Íà µ·Õãè ª àª×Íè Áµ ͺÑÊ˹֧è ÊÒÂ

pin

à» ¹µíÒá˹ §¢Ò¾Íà µ·Õàè ª×Íè Áµ ͡ѺºÑÊ˹֧è ÊÒÂ

par

à» ¹¢ ÍÁÙÅ 1 亵 ·µÕè Í §¡ÒÃÊ §ä»º¹ºÑÊ˹֧è ÊÒÂ

µÑÇÍ ҧ·Õè 13-3 Ow_Write(&PORTA, 5, 0xCC);

à» ¹¡ÒÃÊ §¤ Ò 0xCC ä»ÂѧÃкººÑÊ˹֧è ÊÒÂ«Ö§è µ ͡Ѻ¢Ò¾Íà µ RA5


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 217

»¯ÔºµÑ ¡Ô Ò÷Õè 24 Í Ò¹¤ ÒÍسËÀÙÁ¨Ô Ò¡äÍ«Õ DS18B20 ´ Ç¿ §¡ ª¹Ñè onewire ¢ ÍÁÙŷҧ෤¹Ô¤â´ÂÊÃØ»¢Í§äÍ«ÕµÃǨ¨ÑºÍسËÀÙÁÔ DS18B20 à» ¹äÍ«ÕµÃǨ¨ÑºÍسËÀÙÁ·Ô ãÕè ª ¡ÒõԴµ ÍẺÃкººÑÊ˹֧è ÊÒ ÁÕ¢Òµ Í㪠§Ò¹ 3 ¢Ò ¤×Í DQ à» ¹¢Òàª×Íè Á µ ÍÃкººÑÊ, ¢Òµ Íä¿àÅÕÂé §ÀÒ¹͡ áÅТҡÃÒÇ´ ÁÕ¤ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÍسËÀÙÁÍÔ ÂÙ· Õè 12 ºÔµ â´Â㪠àÇÅÒ ã¹¡ÒÃá»Å§¤ ÒÍسËÀÙÁÊÔ §Ù ÊØ´ 750 ÁÔÅÅÔÇ¹Ô Ò·Õ ÃٻẺ¢ ÍÁÙŢͧ DS18B20 à» ¹´Ñ§¹Õé ºÔµ 15 ºÔµ 14 ºÔµ 13 ºÔµ 12 ºÔµ 11 ºÔµ 10 ºÔµ 9 ºÔµ 8 ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 5

5

5

5

5

6

5

4

3

2

1

¢ ÍÁÙÅ亵 ʧÙ

0

-1

-2

-3

¢ ÍÁÙÅ亵 µÒèí

ã¹µÒÃÒ§·Õè L24-1 áÊ´§ºÔµ¢ ÍÁÙÅ¢¹Ò´ 12 ºÔµ ¢Í§ÍسËÀÙÁ·Ô ÍÕè Ò ¹ä´ ¨Ò¡ DS18B20

ÍسËÀÙÁÔ (ͧÈÒà«Åà«ÕÂÊ)

¢ ÍÁÙÅàÍÒµ ¾µØ (àÅ¢°Ò¹Êͧ)

¢ ÍÁÙÅàÍÒµ ¾µØ (àÅ¢°Ò¹ÊԺˡ)

+125

0000 0111 1101 0000

07D0H

+85

0000 0101 0101 0000

0550H

+25.0625

0000 0001 1001 0001

0191H

+10.125

0000 0000 1010 0010

00A2H

+0.5

0000 0000 0000 1000

0008H

0

0000 0000 0000 0000

0000H

-0.5

1111 1111 1111 1000

FFF8H

-10.125

1111 1111 0101 1101

FF5EH

-25.0625

1111 1101 0110 1111

FE6FH

-55

1111 1100 1001 0000

FC90H

µÒÃÒ§·Õè L24-1 ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õ¤è ÇÒÁÅÐàÍÕ´ 12 ºÔµ¡Ñº¤ ÒÍسËÀÙÁ·Ô ÇÕè ´Ñ ä´ ¢Í§ DS18B20

-4


218 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

˹ ǤÇÒÁ¨íÒÊá¤Ã絪 á¾´ 亵 0 亵 1

¤ ÒÍسËÀÙÁäÔ ºµ µÒèí ¤ ÒÍسËÀÙÁäÔ ºµ ʧÙ

˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ

亵 2 亵 3

ÃÕ¨ÔÊàµÍà TH ËÃ×Í¢ ÍÁÙÅ亵 1

ÃÕ¨ÔÊàµÍà TH ËÃ×Í¢ ÍÁÙÅ亵 1

ÃÕ¨ÔÊàµÍà TL ËÃ×Í¢ ÍÁÙÅ亵 2

ÃÕ¨ÔÊàµÍà TL ËÃ×Í¢ ÍÁÙÅ亵 2

亵 4

ÃÕ¨ÔÊàµÍà Configuration

ÃÕ¨ÔÊàµÍà Configuration

亵 5 亵 6

ÊíÒÃͧäÇ (FFH) ÊíÒÃͧäÇ (0CH)

亵 7 亵 8

ÊíÒÃͧäÇ (10H) CRC

ÃÙ»·Õè L24-1 áÊ´§¡ÒèѴÊÃÃ¾×¹é ·Õ¢è ͧ˹ ǤÇÒÁ¨íÒÀÒÂã¹ DS18B20

¡ÒèѴ˹ ǤÇÒÁ¨íÒã¹ DS18B20 ã¹ÃÙ»·Õè L24-1 áÊ´§¡ÒèѴ˹ ǤÇÒÁ¨íÒÊá¤Ã絪 á¾´ã¹ DS18B20 ¨ÐàËç¹ä´ ÇÒ ÁÕ˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁ ·Õãè ª 㹡ÒÃà¡çº¤ ҢͺࢵÍسËÀÙÁ´Ô Ò ¹ÊÙ§ (TH), ¤ ҢͺࢵÍسËÀÙÁ´Ô Ò ¹µèÒí (TL) áÅФ ҢͧÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Òà ·íÒ§Ò¹ (configuration register) â´ÂàÁ×Íè àÃÔÁè µ ¹¨ ÒÂä¿ãË á¡ DS18B20 ¤ Ңͧ TH, TL áÅФ ÒÃÕ¨ÊÔ àµÍà ¡Òí ˹´ ¡Ò÷íÒ§Ò¹¨Ð¶Ù¡Í Ò¹ÍÍ¡ÁҨҡ˹ ǤÇÒÁ¨íÒÍÕÍ¾Õ ÃÍÁâ´ÂÍѵâ¹ÁÑµÔ ¼Ùã ª §Ò¹ÊÒÁÒöᡠä¢áÅÐà¢Õ¹¡ÅѺࢠÒä»ãËÁ à¾×Íè ¡íÒ˹´¤ ÒÊíÒËÃѺ¡ÒÃàÃÔÁè µ ¹·íÒ§Ò¹ãËÁ ä´

Configuration register : ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Ò÷íÒ§Ò¹ 㪠ÊÒí ËÃѺàÅ×Í¡¤ Ò¤ÇÒÁÅÐàÍÕ´¢Í§ÍسËÀÙÁ·Ô Õè DS18B20 Í Ò¹ä´ ÁÕû٠Ẻ¡ÒèѴ¢ ÍÁÙŴѧ¹Õé ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0

4

4

Ê Ç¹¡ÒÃàÅ×Í¡¤ Ò¤ÇÒÁÅÐàÍÕ´¨Ð¡ÃзíÒ¼ Ò¹ºÔµ R1 áÅÐ R0 ´Ñ§¹Õé R1

R0

¤ÇÒÁÅÐàÍÕ´

¤ ÒàÇÅÒÊÙ§Êش㹡ÒÃá»Å§¤ Ò

0

0

9 ºÔµ

93.75 ÁÔÅÅÔÇ¹Ô Ò·Õ (tconv/8)

0

1

10 ºÔµ

187.5 ÁÔÅÅÔÇ¹Ô Ò·Õ (tconv/4)

1

0

11 ºÔµ

375 ÁÔÅÅÔÇ¹Ô Ò·Õ (tconv/2)

1

1

12 ºÔµ

750 ÁÔÅÅÔÇ¹Ô Ò·Õ (tconv)


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 219

IC2 +5V

R1 4.7k

11

32

1

SW1 RESET

RD2 21

4

22

6

RD3

R3 2.2k

IC1 PIC16F877 15

RC0

+5V

C1 0.1PF 50V

,5 &*

RD7 RD6 RD5 RD4

JP1

E

+V Vo

D7 30

BLA

DSP1 LCD 16x2 (back light option)

RS

14

D6 D5 13

12

D4 11

D3 D2 10

9

D1

D0

8

7

R/W 5

BLK GND 15

2

R2 16 47

BACK LIGHT ON

1 3 VR1 10k

BRIGHTNESS

29 28 27

OSC1 OSC2 13 C2 22pF

14 XTAL1 20MHz C3 22pF

ÃÙ»·Õè L24-2 ǧ¨Ã·´Åͧ¡ÒõԴµ ÍÍØ»¡Ã³ ÃкººÑÊ˹֧è ÊÒ¢ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877/ 887 ´ Ç¿ §¡ ª¹Ñè onewire ¢Í§ mikroC ¤ÍÁä¾àÅÍÃ

¡ÒÃàª×Íè Áµ Í·Ò§ÎÒà ´áÇà 㪠ǧ¨Ãã¹ÃÙ»·Õè L24-2 㹡Ò÷´Åͧ â´Âµ ÍäÍ«Õ DS18B20 ࢠҡѺ¢Ò¾Íà µ RC0 «Ö§è ·Õµè Òí á˹ §¢Ò¹Õ¨é е ͧµ Í µÑǵ Ò¹·Ò¹ 2.2k: àÍÒäÇ ´Ç  ÊíÒËÃѺ¡ÒÃáÊ´§¼Å¨ÐáÊ´§¼ Ò¹âÁ´ÙÅ LCD «Ö§è µ ͡Ѻ¾Íà µ D

l

¢Ñ鹵͹¡Ò÷´Åͧ L24.1 à» ´â»Ãá¡ÃÁ mikroC Êà ҧä¿Å â»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅФÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò´Ñ§¹Õé l

¡Ã³Õ㪠ºÍà ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 20MHz

L24.2 Êà ҧâ»Ãà¨ç¡µ ªÍ×è DS18B20Test áÅоÔÁ¾ â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L24-1 L24.3 ·íÒ¡ÒäÍÁä¾Å áÅдÒǹ âËÅ´â»Ãá¡ÃÁà¾×Íè ·´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹ L24.4 Ãѹâ»Ãá¡ÃÁ ´Ù¼Å¡Ò÷íÒ§Ò¹·Õâè Á´ÙÅ LCD ·Õâè Á´ÙÅ LCD áÊ´§¤ ÒÍسËÀÙÁ·Ô ÍÕè Ò ¹ä´ ¨Ò¡ DS18B20 ´Ñ§¹Õé

Temp= 26.18 75 L24.5 ãË ¤ÇÒÁà ͹ᡠäÍ«Õ DS18B20 à¾×Íè ´Ù¡ÒÃà»ÅÕÂè ¹á»Å§¤ ÒÍسËÀÙÁÔ


220 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

int Temp; char Temp1; void Display(int Dat) { int Dat1; char text[6];

// Save temperature // Save lowbyte temperature // Function display temp on LCD // Internal variable

Dat1=Dat/16; Dat%=16; Dat*=625; if (Dat==0) Lcd_Out(1,13,"0000"); else if(Dat==625) Lcd_Out(1,13,"0625"); else { WordToStr(Dat,text); Lcd_Out(1,12,text); } WordToStr(Dat1,text); Lcd_Out(1,7,text); Lcd_Out(1,12,"."); Lcd_Out(1,4,"TEMP=");

// // // // //

Integer value Decimal point value Convert to 4 digit point value Leading zero Leading zero if namber < 4 digit

// Convert decimal point to String // Show string on LCD // Convert Integer value to String // Show string on LCD

// Show Text } void main() { // Initialize LCD on PORTD and prepare for output Lcd_Init(&PORTD); Lcd_Cmd(Lcd_CURSOR_OFF); while(1) // main loop { Ow_Reset(&PORTC,0); // Onewire reset signal Ow_Write(&PORTC,0,0xCC); // Issue command SKIP_ROM Ow_Write(&PORTC,0,0x44); // Issue command CONVERT_T Delay_us(120); Ow_Reset(&PORTC,0); Ow_Write(&PORTC,0,0xCC); Ow_Write(&PORTC,0,0xBE); Delay_ms(400);

// Issue command SKIP_ROM // Issue command READ_SCRATCHPAD

//Format DS18B20 [S][S][S][S][S][D6][D5][D4]==[D3][D2][D1][D0][D-1][D-2][D-3][D-4] Temp1= Ow_Read(&PORTC,0); // Get temperature LSB Temp = Ow_Read(&PORTC,0); // Get temperature MSB Temp <<= 8; // Shift to highbyte Temp += Temp1; // Form the result Display(Temp); // Format and display result on LCD Delay_ms(500); } }

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ

¡Ò÷íÒ§Ò¹ã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡àÃÔÁè ¨Ò¡ 1. ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ LCD ã¹·Õ¹è àÕé Å×͡㪠¾Íà µ D

â»Ãá¡ÃÁ·Õè L24-1 ä¿Å DS18B20Test.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè ·´Êͺ ¡ÒÃ㪠¿§ ¡ ª¹Ñè onewire 㹡ÒõԴ¤ ͡ѺÍØ»¡Ã³ ÃкººÑÊ˹֧è ÊÒ¢ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 221

2. µÔ´µ ͡ѺºÑÊ˹֧è ÊÒ â´ÂÊ §ÊÑ­­Ò³ÃÕ૵ä»Âѧ DS18B20 3. à¢Õ¹¤íÒÊѧè SKIP ROM à¾×Íè ¢ ÒÁ¡ÒÃÍ Ò¹ºÔµáÍ´à´Ãʢͧ DS18B20 4. Ê §¤íÒÊѧè CONVERT à¾×Íè ãË DS18B20 àÃÔÁè ¢Ñ¹é µÍ¹¡ÒÃá»Å§¤ ÒÍسËÀÙÁÔ 5. àÃÔèÁµ ¹¢Ñ鹵͹ãËÁ à¾×èÍÊ §¤íÒÊÑè§á¨ § DS18B20 Ç Ò µ ͧ¡ÒÃÍ Ò¹¤ Ҩҡ˹ ǤÇÒÁ¨íÒ SCRATCHPAD «Ö§è à¡çº¤ ÒÍسËÀÙÁ·Ô áÕè »Å§¤ ÒàÊÃç¨áÅ ÇàÍÒäÇ 6. àÃÔÁè ¢Ñ¹é µÍ¹¡ÒÃÍ Ò¹¤ ÒÍسËÀÙÁÔ â´ÂÍ Ò¹¤ Ò亵 µÒèí ¡ ͹ áŠǵÒÁ´ Ç¢ ÍÁÙÅ亵 ʧ٠7. ¹íÒ¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ à¡çºäÇ ã¹µÑÇá»Ã temp ¨Ò¡¹Ñ¹é àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè Display() à¾×Íè ¹íÒ ¤ ÒáÊ´§¼Å·ÕËè ¹ Ò¨Í LCD ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè Display() ÁÕ´§Ñ ¹Õé 1. ¹íÒ¤ ÒÍسËÀÙÁÁÔ Òá¡໠¹¤ ÒÍسËÀÙÁ¨Ô Òí ¹Ç¹àµçÁ¡Ñº¤ ÒÍسËÀÙÁ·Ô àÕè » ¹àÅ¢·È¹ÔÂÁ 2. á»Å§¤ ÒµÑÇàÅ¢·È¹ÔÂÁ¡ ͹ â´Â¤Ù³´ Ç 625 «Ö§è ¨Ðä´ ¤Ò µÑÇàÅ¢·È¹ÔÂÁ¢¹Ò´ 4 ºÔµ¾Í´Õ 3. ·íÒ¡ÒÃá»Å§¤ ÒãË ÍÂÙã ¹ÃÙ»¢Í§µÑÇÍÑ¡ÉÃà¾×Íè ¹íÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD 4. ¶ Ò¤ Ò·Õäè ´ ¨Ò¡¡ÒÃá»Å§à» ¹ 0 ¤íÒÊѧè á»Å§¤ Ò (WordToStr) ¨ÐãË ¤Ò à» ¹ 0 «Ö§è àÁ×Íè ¹íÒä» áÊ´§¼Å¨Ðà¡Ô´à» ¹ª Í§Ç Ò§ ¨Ö§µ ͧ㪠¤Òí Êѧè if ÁÒª Ç áÅÐàµÔÁàÅ¢Èٹ 㹡óշ¤Õè Ò ·Õäè ´ à» ¹ 0 ËÃ×Í 625 5.¹íÒ¤ Ò¨íҹǹàµçÁÁÒá»Å§à» ¹µÑÇÍÑ¡Éà áŠǹíÒä»áÊ´§¼Å·Õâè Á´ÙÅLCD

â»Ãá¡ÃÁ·Õè L24-1 ä¿Å DS18B20Test.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍà à¾×Íè ·´Êͺ ¡ÒÃ㪠¿§ ¡ ª¹Ñè onewire 㹡ÒõԴ¤ ͡ѺÍØ»¡Ã³ ÃкººÑÊ˹֧è ÊÒ¢ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F877


222 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 223

ÀÒ¤¼¹Ç¡ A

á¹Ð¹íÒà¤Ã×Íè §Á×Í㹡Ò÷´Åͧ·Ò§ÎÒà ´áÇà A.1 NX-877 PlusII ªØ´·´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x

à» ¹à¤Ã×Íè §Á×ͪ ÇÂ㹡Ò÷´ÅͧÅíҴѺáá·Õáè ¹Ð¹íÒ à¹×Íè §¨Ò¡à» ¹ºÍà ´·´Åͧ·Õäè ´ ÃºÑ ¡ÒÃÍÍ¡ ẺãË ÃͧÃѺ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x Í ҧàËÁÒÐÊÁ â´Âº¹ºÍà ´ÁÕÊÇ ¹â»Ãá¡ÃÁ˹ Ç ¤ÇÒÁ¨íÒ â´ÂàÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹´ ÇÂÊÇÔµª ¡´à¾Õ§µÑÇà´ÕÂÇ ÃͧÃѺ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x ·Ñ§é ¢¹Ò´ 40 ¢Ò ¤Ãͺ¤ÅØÁ¤Ãº·Ø¡àºÍà äÁ ÇÒ ¨Ðà» ¹ PIC16F870/871/874/874A/877/877A Ãٻà ҧ˹ ҵҢͧºÍà ´·´ÅͧáÅÐÍØ»¡Ã³ »ÃСͺ·Õ¨è ´Ñ ÁҾà ÍÁ¡Ñ¹ã¹ªØ´áÊ´§ã¹ÃÙ»·Õè A-1

NX-877 PlusII

PIC16F87x/18F Microcontroller Experiment Board ªØ´·´ÅͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x/18F

㹪شÁÕºÍà ´·´Åͧ, ¤ÙÁ Í× , ÍÐá´»àµÍà , «Í¿µ áÇà , ÊÒµ Í PC, âá´ÙÅ LCD 16x2 áÅÐÊÒµ Íǧ¨Ã l ãª ä´ ¡º Ñ PIC16F87x Ãع 40 ¢Òä´ ·¡Ø àºÍà º¹ºÍà ´àµÃÕÂÁ PIC16F877-20/P ¤ÇÒÁ¶Õè 20MHz l áËÅ §¨ ÒÂ俵ç +5V 500mA l â»Ãá¡ÃÁ˹ ǤÇÒÁ¨íÒ¼ Ò¹¾Íà µ USB ´ ǺÍà ´â»Ãá¡ÃÁ PX-200 (¨Ñ´ÁҾà ÍÁ㹪ش) l ǧ¨Ãàª×Í è Áµ Í ¾Íà µÍ¹Ø¡ÃÁà¾×Íè Ê×Íè ÊÒâ ÍÁÙÅ l àÅ×Í¡âËÁ´ RUN áÅÐ PROGRAM ´ ÇÂÊÇÔµª ¾Ã ÍÁä¿áÊ´§Ê¶Ò¹Ð l ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¾ÑÅÊ ¤ÇÒÁ¶Õè 1Hz- 1kHz l ÊÇÔµª ¡´µÔ´»Å Í´Ѻ 4 µÑÇ l LED Á͹ÔàµÍà 32 ª ͧ l áËÅ §¨ ÒÂáç´Ñ¹»ÃѺ¤ Òä´ 0-5V ÊíÒËÃѺ·´Åͧǧ¨Ã A/D 4 ªØ´ l ÅíÒ⾧໠Ââ« l ǧ¨Ãàª×Í è Áµ ÍâÁ´ÙÅ LCD l ἧµ Íǧ¨Ã¢¹Ò´ 2.5x7 ¹ÔÇé ¨íҹǹ¨Ø´µ Í 800 ¨Ø´ l LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ l ǧ¨ÃÊÇÔµª àÁµÃÔ¡« 4x3 ¨Ø´

ÃÙ»·Õè A-1 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ªØ´·´Åͧ NX-877 PlusII


224 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

SW1 POWER

+V

D1-D4 1N4001x4

IC1 7805

J1 DC input

C3 47/16V

C2 0.1/50V

DC input : 16-20Vdc

+5V

C1 220/25V

K1 ICD2 (RJ11-6)

PORT B RB7

RB7

RB6 40

RB6

39 Vpp +5V

R1 1k

R2 1k

RB7

RB6

LED1 RUN

SW3 MODE

R4 1k

1 13

RE0/AN5/RD

RB0/INT

C6 22pF

XTAL1 20MHz

RA5 RA4 RA3 RA2 RA1 RA0

RE2 RE1 RE0

ÃÙ»·Õè A-2 ǧ¨ÃÊ Ç¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

C5 0.1/50V

MCLR

PORT C

OSC1 OSC2

C7 22pF 7 RA5 6 RA4 5 RA3 4 RA2 3 RA1 2 RA0

PORT E RE2/AN7/CS RE1/AN6/WR

RB4 RB3/LVP RB2 RB1

31

14

RA0/AN0

RB6 RB5

11

12

PORT A

RB7

32

SW2 RESET

RA4/T0CKI RA3/AN3/Vref+ RA2/AN2/VrefRA1/AN1

37 RB4 36 RB3 35 RB2 34 RB1 33 RB0/INT

IC2 PIC16F877

+5V

RA5/AN4/SS

RB5

38

+5V

LED2 PROG.

R3 4k7

C4 0.1/50

10 RE2 9 RE1 8 RE0

26 RC7 25 RC6 24 RC5 23 RC4 18 RC3 17 RC2 16 RC1 15 RC0

RC7/RxD/DT* RC6/TxD/CK* RC5/SDO RC4/SDI/SDA RC3/SCK/SCL RC2/CCP1 RC1/T1OSI/ CCP2 RC0/T1OSO/T1C

PORT D 30

RD7 29 RD6 28 RD5 27 RD4 22 RD3 21 RD2 20 RD1 19 RD0

RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 225

A.1.1 ÃÒÂÅÐàÍÕ´¢Í§Ê ǹ»ÃСͺµ Ò§æ º¹ºÍà ´·´Åͧ NX-877 PlusII A.1.1.1 Ê Ç¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

ËÑÇã¨ÊíҤѭÍÂÙ· äÕè Áâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F87x »ÃШíÒºÍà ´ «Ö§è ä´ ÃºÑ ¡ÒÃâ»Ãá¡ÃÁ¼ Ò¹ ·Ò§á¨ ¡ ICD2 «Ö§è µ ͧ㪠ºÍà ´â»Ãá¡ÃÁ PX-200 ·Õàè ª×Íè Áµ ͡Ѻ¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà (´ÙÃÒ ÅÐàÍÕ´ã¹ËÑÇ¢ Í A1.2) ÊÒÁÒöàÅ×Í¡âËÁ´ÃѹËÃ×Íâ»Ãá¡ÃÁ´ ÇÂÊÇÔµª MODE à¾Õ§µÑÇà´ÕÂÇ ¾Íà µ·Õ¨è ´Ñ àµÃÕÂÁãË ÊÒí ËÃѺ¡Ò÷´ÅͧÁդú·Ñ§é 5 ¾Íà µ (㹡óÕãª Ã¹Ø 40 ¢Ò) ¤×Í ¾Íà µ A 6 ºÔµ (RA0-RA5), ¾Íà µ B 8 ºÔµ (RB0-RB7), ¾Íà µ C 8 ºÔµ (RC0-RC7), ¾Íà µ D 8 ºÔµ (RD0-RD7) áÅоÍà µ E 3 ºÔµ (RE0-RE2) Ëҡ㪠ã¹Ãع 28 ¢Ò ¨ÐäÁ ÊÒÁÒö㪠§Ò¹¨Ø´µ ;Íà µ D áÅÐ E ä´ Ê Ç¹Ç§¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò㪠¤ÃÔʵÍŤÇÒÁ¶Õè 20 MHz ´Ñ§¹Ñ¹é 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁµ ͧ ¡íÒ˹´ª¹Ô´¢Í§Ç§¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Òà» ¹áºº HS ÊíÒËÃѺáËÅ §¨ ÒÂ俺¹ºÍà ´ NX-877 PlusII ÁÕáËÅ §¨ ÒÂä¿ÊíÒËÃѺ·´Åͧ 1 ªØ´¤×Í +5V ·Ñ§é Âѧ㪠ä¿àÅÕé§ãË ÍØ»¡Ã³ ·Ñé§ËÁ´º¹ºÍà ´·´Åͧ´ ÇÂ

A.1.1.2 LED Á͹ÔàµÍà 16 ª ͧ à¤Ã×Íè §Á×Íáá·Õ¢è Íá¹Ð¹íÒº¹ºÍà ´·´Åͧ¤×Í LED Á͹ÔàµÍà «§Öè ÁÕ¶§Ö 32 ª ͧ â´ÂẠ§à» ¹ 2 Ê Ç¹ Ê Ç¹ÅÐ 16 ª ͧ ´Ñ§Ç§¨ÃÃÙ»·Õè A-3 ·Ø¡ª ͧµ ͵Ñǵ Ò¹·Ò¹à¾×Íè ¨íÒ¡Ñ´¡ÃÐáÊäÇ àÃÕºà ÍÂáÅ Ç

A.1.1.3 ǧ¨ÃáÊ´§¼Å LED µÑÇàÅ¢ 7 Ê Ç¹ º¹ºÍà ´·´Åͧ¨Ñ´àµÃÕÂÁÊ Ç¹áÊ´§¼ÅµÑÇàÅ¢ 7 Ê Ç¹äÇ 3 ËÅÑ¡ à» ¹áººá¤â·´Ã ÇÁ ¹Ñ¹è ¤×Í µ ͧ» ͹Åͨԡ 0 ࢠҷբè Òà ÇÁ¢Í§ LED ¨Ö§¨Ð·íÒãË LED µÔ´ÊÇ Ò§ä´ ¡Òõ Íǧ¨Ã¢Í§áµ ÅÐà«¡àÁ¹µ à» ¹áººÁÑŵÔà¾Åç¡« â´ÂÁÕµÇÑ µ Ò¹·Ò¹¨íÒ¡Ñ´¡ÃÐáʵ Íã¹áµ ÅÐà«¡àÁ¹µ äÇ ãË ´Ç  LED125-LED132 RED x8

LED117-LED124 RED x8

LED109-LED116 RED x8

LED101-LED108 RED x8

D15

D7

D15

D7

D14

D6

D14

D6

D13

D5

D13

D5

D12

D4

D12

D4

D11

D3

D11

D3

D10

D2

D10

D2

D9

D1

D9

D1

D8

D0

D8

R109-R116 510 x8

R101-R108 510 x8

LED Monitor active high 16 bit (UPPER)

ÃÙ»·Õè A-3 ǧ¨Ã LED Á͹ÔàµÍà 32 ª ͧ

D0 R109-R116 510 x8

R101-R108 510 x8

LED Monitor active high 16 bit (LOWER)


226 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

DSP201-DSP203 : LED 7 SEGMENTS COMMON CATHODE P201 SEGMENT

a b c d e f g dp P202 R201-R208 DIGIT 220x8

a b c d e f g dp

DSP203

common

DSP202

DSP201

common

VR404 10k

VR403 10k

VR402 10k

VR401 10k +5V

common

V4

3 2 1

ÃÙ»·Õè A-4 ǧ¨Ã LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅѡẺÁÑŵÔà¾Åç¡«

V3

V2

V1

ÃÙ»·Õè A-5 ǧ¨ÃáËÅ §¨ ÒÂáç´Ñ¹»ÃѺ¤ Ò ä´ 0-5V ÊíÒËÃѺ·´Åͧǧ¨Ã ADC

A.1.1.4 áËÅ §¨ ÒÂáç´Ñ¹»ÃѺ¤ Òä´ ÊÒí ËÃѺǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ

à¾×Íè ãË ¡Ò÷´Åͧà¡ÕÂè ǡѺǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÀÒÂã¹ PIC16F87x ÊÒÁÒö ¡ÃзíÒä´ â´ÂÊдǡ º¹ºÍà ´·´Åͧ NX-877 PlusII ¨Ö§ä´ àµÃÕÂÁáËÅ §¨ ÒÂáç´Ñ¹»ÃѺ¤ Òä´ 0-5V ÊíÒËÃѺ·´Åͧ 4 ª ͧ â´Â㪠µÇÑ µ Ò¹·Ò¹»ÃѺ¤ Òä´ ¤Ò 10k: à» ¹µÑÇ¡íÒ˹´»ÃÔÁÒ³¢Í§áç´Ñ¹

A.1.1.5 ǧ¨ÃÊÇÔµª Í¹Ô ¾Øµ

à» ¹áºº·íÒ§Ò¹·ÕÅè ͨԡ 0 ¢¹Ò´ 4 ª ͧ â´Â㪠ÊÇÔµª ¡´µÔ´»Å Í´Ѻ 4 µÑÇáÅÐÁÕ¡Òõ ͵ÑÇ µ Ò¹·Ò¹¾ÙÅÍÑ»äÇ ·íÒãË ËÒ¡ÊÇÔµª äÁ ¶¡Ù ¡´ ËÃ×ÍäÁ Á¡Õ Òõ Íǧ¨Ã ·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã¨ÐÁÕÅͨԡ 1 àÁ×Íè ÊÇÔµª ¶¡Ù ¡´ËÃ×ÍÁÕ¡Òõ Íǧ¨Ã ¨Ðà¡Ô´Åͨԡ 0 ·Õàè ÍÒµ ¾µØ

A.1.1.6 ǧ¨Ã¾ÑÅÊ à¨à¹ÍàÃàµÍÃ

ÊÒÁÒö¡íÒà¹Ô´ÊÑ­­Ò³¾ÑÅÊ ÊÕèàËÅÕèÂÁ´ÔǵÕéä«à¡ÔÅ 50% àÅ×Í¡¤ÇÒÁ¶Õèä´ 4 ¤ Ò¤×Í 1Hz, 10Hz, 100Hz áÅÐ 1kHz â´ÂÁÕ äÍ«ÕàºÍà PGX4100 ·íÒ˹ Ò·ÕÊè à ҧÊÑ­­Ò³¾ÑÅÊ ¡ÒÃàÅ×Í¡¤ÇÒÁ¶Õ¨è Ð㪠ÊÇÔµª ¡´µÔ´»Å Í´Ѻà¾Õ§µÑÇà´ÕÂÇ ¡ÒÃáÊ´§¤ Ò¤ÇÒÁ¶ÕÁè Õ LED 4 µÑÇ»ÃШíÒ¤ Ò¤ÇÒÁ¶Õè ᨠ§ãË ¼ãÙ ª §Ò¹·ÃÒº S304 ,! S303 , S302 ,

R301 10k*8

S301 ,

FREQUENCY (Hz) 1 10 100 1k

C501 0.1/50V

+5V

R501 10k

,!

R502 510

1 4

, , ,

LED501-504 RED x4

S501 FREQ.

2 IC501 PGX4100

7 6 5 3

P501 OUT

8

ÃÙ»·Õè A-6 ǧ¨ÃÊÇÔµª Í¹Ô ¾Øµ 4 ª ͧ

ÃÙ»·Õè A-7 ǧ¨Ã¾ÑÅÊ à¨à¹ÍàÃàµÍà 1Hz-1kHz


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

VR701 10k RS RW E D0 D1 D2 D3 D4 D5 D6 D7

SP601 Piezo Speaker

K701

UIC-LCD RS E D1 D3 D5 D7

+5V

+

RW D0 D2 D4 D6

l 227

-

P602

PIEZO

ÃÙ»·Õè A-8 Ê Ç¹àª×Íè Áµ ÍâÁ´ÙÅ LCD áÅÐÅíÒ⾧໠Ââ«

A.1.1.7 Ê Ç¹àª×Íè Áµ ÍâÁ´ÙÅ LCD áÅÐÅíÒ⾧໠Ââ«

º¹ºÍà ´ä´ ¨´Ñ àµÃÕÂÁ¤Í¹à¹ç¡àµÍà ÊÒí ËÃѺàª×Íè Áµ ÍâÁ´ÙÅ LCD ẺÍÑ¡¢ÃТ¹Ò´µÑ§é áµ 16 ¶Ö§ 20 µÑÇÍÑ¡Éà 1 ¶Ö§ 2 ºÃ÷Ѵ â´ÂÁÕ¡ÒèѴ¢ÒµÒÁÁҵðҹ UIC-LCD áÅÐÁÕµÇÑ µ Ò¹·Ò¹»ÃѺ¤ Òä´ 10k: ÊíÒËÃѺ»ÃѺ¤ÇÒÁªÑ´à¨¹ã¹¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD Ê Ç¹¡ÒâѺÊÑ­­Ò³àÊÕ§ ÁÕÅÒí ⾧໠Ââ« 1 ªØ´ â´ÂÅíÒ⾧໠Â⫹ըé ÐÁÕ¤Ò ¤ÇÒÁ¶Õàè Ãâ«á¹¹« »ÃШíÒµÑÇ ËÒ¡¤ÇÒÁ¶Õè·Õè» Í¹à¢ ÒÁҵç¡Ñº¤ Ò¤ÇÒÁ¶Õè¹Ñé¹ ÊÑ­­Ò³¨ÐÁÕ¤ÇÒÁ´Ñ§ÁÒ¡·ÕèÊØ´ »¡µÔ¨ÐÁÕ¤ Ò »ÃÐÁÒ³ 2 ¶Ö§ 3kHz

R901 2.2k

+5V 3 VCC

P901 DQ

2 DQ GND 1 IC901 DS18B20

+5V C902 10/50V 16 2 C903 K901 10/50V 1 IC902 SERIAL PORT MAX232 3 1 6 7 2 7 3 8 8 4 5 6 15 C905 10/50V

C901 10/50V

4 5

C904 10/50V

10

TxD

9

RxD GND P902 SERIAL DATA

ÃÙ»·Õè A-9 ǧ¨Ãàª×Íè Áµ Í DS18B20 äÍ«ÕÇ´Ñ ÍسËÀÙÁµÔ ´Ô µ ͼ Ò¹ÃкººÑÊ 1 ÊÒ ÃÙ»·Õè A-9 Ê Ç¹àª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ RS-232


228 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

A.1.1.8 Ê Ç¹àª×Íè Áµ ÍÍØ»¡Ã³ ÃкººÑÊ 1 ÊÒ (1-Wire)

º¹ºÍà ´ä´ ¨Ñ´àµÃÕÂÁǧ¨Ãàª×èÍÁµ Í DS18B20 äÍ«ÕÇÑ´ÍسËÀÙÁÔẺ´Ô¨ÔµÍÅ «Öè§à» ¹Ë¹Öè§ã¹ ÍØ»¡Ã³ ·Õè㪠¡ÒõԴµ ͼ Ò¹ÃкººÑÊ˹Öè§ÊÒ (1-Wire) ¢Í§ Dallas Seminconductor â´Âº¹ºÍà ´ àµÃÕÂÁäÍ«Õ DS18B20 äÇ ãË ¾Ã ÍÁ㪠§Ò¹

A1.1.9 Ê Ç¹àª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ RS-232 à¾×Íè ãË ºÍà ´ NX-877 PlusII ÊÒÁÒöÃͧÃѺ¡Ò÷´ÅÍ§ä´ Í ҧ¤Ãº¶ ǹ ¨Ö§ä´ ¨´Ñ àµÃÕÂÁǧ¨Ã àª×Íè Áµ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ RS-232 ¢Í§¤ÍÁ¾ÔÇàµÍà à¾×Íè 㪠»ÃÐ⪹ 㹡ÒÃÊ×Íè ÊÒâ ÍÁÙÅâ´Â㪠äÍ«Õ àºÍà ICL232 ËÃ×Í MAX232 ÁÕ¨´Ø µ ÍÊíÒËÃѺÃѺ¢ ÍÁÙÅẺ͹ءÃÁ (RxD) ࢠÒÁÒ¨Ò¡¤ÍÁ¾ÔÇàµÍà à¾×Íè Ê §µ Íä»ÂѧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅШشµ ÍÊíÒÃÑºÊ §¢ ÍÁÙÅÍ͡Ẻ͹ءÃÁ (TxD) ¨Ò¡äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ä»Âѧ¤ÍÁ¾ÔÇàµÍà ÊíÒËÃѺ¨Ø´àª×Íè Áµ ͡Ѻ¤ÍÁ¾ÔÇàµÍà 㪠¤Í¹à¹ç¡àµÍà DB-9 µÑÇàÁÕÂ

A.1.1.10 ἧµ Íǧ¨Ã

ÁÕ¢¹Ò´ 2.5x7 ¹ÔÇé ÁÕ¨´Ø µ ͷѧé ÊÔ¹é 800 ¨Ø´

A.2 PX-200 ºÍà ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC Ẻá¿Åª¼ Ò¹ ¾Íà µ USB A.2.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤ àª×Íè Áµ ͤÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µ USB 㪠ä¿àÅÕÂé §¨Ò¡¾Íà µ USB l â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC º¹ºÍà ´à» ÒËÁÒ¼ Ò¹·Ò§á¨ ¡ ICD2 l ÁÕ LED áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹ 3 ´Ç§ (POWER, TARGET áÅÐ BUSY) l ÊÒÁÒöÍÑ»à¡Ã´à¿ ÃÁ áÇÃ ä´ ¼ Ò¹·Ò§«Í¿µ áÇà l

l

ÊÒÁÒÃ¶Í Ò¹áÅÐà¢Õ¹˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿ÅªáÅÐ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ

l

àÅ×Í¡¡Òû ͧ¡Ñ¹¡ÒÃÍ Ò¹·Ñ§é ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿ÅªáÅÐ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ

l µ ͡ѺºÍà ´ÍÐá´»àµÍà KX-200plus (¨Ñ´«×Í é á¡) à¾×Íè â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áÅÐ dsPIC

µÑǶѧ DIP ¼ Ò¹·Ò§á¨ ¡ ICD2 l

«Í¿µ áÇà ·Òí §Ò¹º¹Ãкº»¯ÔºµÑ ¡Ô ÒÃÇÔ¹â´ÇÊ 98SE/ME/XP

l

·íÒ§Ò¹â´ÂäÁ µÍ §µ Íä¿àÅÕÂé §ÀÒ¹͡à¾ÔÁè

â´Â¡ÒÃà¾ÔèÁàµÔÁàºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¹Ñé¹ ÊÒÁÒö´Ù¢ ÍÁÙÅà¾ÔèÁàµÔÁ áÅдÒǹ âËÅ´â»Ãá¡ÃÁÃÇÁ·Ñ§é à¿ ÃÁ áÇà ÅÒ ÊØ´ä´ ·Õè www.microchip.com ¤ ¹ËÒ˹ Ò PICkit2TM ã¹ÃÙ»·Õè A-10 áÊ´§Ë¹ ÒµÒáÅÐÊ Ç¹»ÃСͺ·Ñ§é ËÁ´¢Í§ PX-200


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

l 229

¤Í¹à¹ç¡àµÍà µÍ ¾Íà µ USB ˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ ÊíÒËÃѺà¾ÔÁè àµÔÁ¤ÇÒÁÊÒÁÒö 㹡ÒÃ㪠§Ò¹â´ÂÅíҾѧ (à» ¹ÍØ»¡Ã³ àÊÃÔÁ áÅФÇÒÁ ÊÒÁÒö¹Õ¨é ÐÁÕã¹Í¹Ò¤µ) à¿ ÃÁ áÇà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ ÊÒÁÒöÍÑ»à¡Ã´ä´ ´Ç  ä¿áÊ´§ÀÒÇÐä¿àÅÕÂé § ä¿áÊ´§¡Òè Ò Âä¿àÅÕé  §ä»ÂÑ § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠ÒËÁÒ ä¿á¨ §Ê¶Ò¹ÐäÁ ÇÒ § ᨠ¡ ICD2 ¨Ø´µ Í ICSP

ÊÇÔµª PROGRAM 㪠¡´à¾×Íè ·íÒ¡ÒÃâ»Ãá¡ÃÁ ·Ò§ÎÒà ´áÇÃ

ÃÙ»·Õè A-10 áÊ´§Ê ǹ»ÃСͺ·ÕÊè Òí ¤Ñ­¢Í§ PX-200 ºÍà ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC Ẻ ISP ¼ Ò¹¾Íà µ USB


230 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

A.3 RBX-877 rev.2007 ºÍà ´¤Çº¤ØÁÊíÒËÃѺËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡ ºÍà ´ RBX-877 rev.2007 »ÃСͺ´ Ç äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ·íÒ˹ Ò·Õàè » ¹µÑÇ »ÃÐÁÇżÅËÅÑ¡, ǧ¨Ã¢ÑºÁÍàµÍà 俵ç, Ê Ç¹áÊ´§¼Å LCD, Ê Ç¹àª×Íè Áµ Íà¤Ã×Íè §â»Ãá¡ÃÁÀÒ¹͡ áÅÐÊ Ç¹µÔ´µ ͡ѺÍØ»¡Ã³ ÀÒ¹͡·Ñ駵ÑǵÃǨ¨ÑºáÅÐǧ¨ÃÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ â´ÂÃÒÂÅÐàÍÕ´ Ê Ç¹»ÃСͺµ Ò§æ áÊ´§à» ¹ºÅçÍ¡ä´ÍÐá¡ÃÁ´Ñ§ÃÙ»·Õè A-11

A3.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤ 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹·Ñ§é ËÁ´ l ´Òǹ âËÅ´â»Ãá¡ÃÁ¨Ò¡¤ÍÁ¾ÔÇàµÍà ´Ç Âà¤Ã×Íè §â»Ãá¡ÃÁÀÒ¹͡¼ Ò¹·Ò§á¨ ¡ ICD2 l ÁÕǧ¨Ã¢ÑºÁÍàµÍà 俵ç 2 ªØ´¾Ã ÍÁä¿áÊ´§·ÔÈ·Ò§¡ÒÃËÁع l ¢Ñº RC à«Íà âÇÁÍàµÍà ¢¹Ò´àÅç¡ 4.8 ¶Ö§ 6V ä´ 3 µÑÇ l ÁÕÅÒ í ⾧໠Ââ«ÊíÒËÃѺ¢ÑºàÊÕ§ l

¨Ø´µ ÍÊ×Íè ÊÒÃ͹ءÃÁ

ÊÇÔµª à» ´/» ´

¨Ø´µ Íà¤Ã×Íè §â»Ãá¡ÃÁ (µ Í¢Ò RC6 áÅÐ RC7) ¨Ø´µ ÍâÁ´ÙÅ LCD ¨Ø´µ ÍÃкººÑÊ I2C (µ Í¢Ò RD2-RD7)

¨Ø´µ ÍẵàµÍÃÕè

(µ Í¢Ò RC3 áÅÐ RC4)

äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

¨Ø´µ ÍÁÍàµÍà 俵ç

(µ Í¢Ò RC0)

21+ $.&&%

LED áÊ´§¼Å

¨Ø´µ Íà«Íà âÇÁÍàµÍà (µ Í¢Ò RB4,RB5,RC5)

ÅíÒ⾧໠Ââ«

¾Íà µÍÔ¹àµÍÃ Ã»Ñ µ ÊÇÔµª ¡´

(µ Í¢Ò RB0)

(µ Í¢Ò RD0, RD1, RC2 áÅÐ RB1, RB2, RC1) (µ Í¢Ò RA4 áÅÐ RB0)

¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ

(µ Í¢Ò RA0-RA3, RA5, RE0-RE2)

ÃÙ»·Õè A-11 áÊ´§Ê ǹ»ÃСͺ·ÕÊè Òí ¤Ñ­¢Í§ºÍà ´ RBX-877rev.2007

(µ Í¢Ò RB3)


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 231

ÁÕ LED áÊ´§¼Åµ ͵ç¡Ñº¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà l âÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ ẺÁÕä¿Ê ͧËÅѧ l ¨Ø´µ ÍÊíÒËÃѺàª×Í è Áµ ͡ѺÍØ»¡Ã³ ·ÁÕè ¡Õ ÒÃÊ×Íè ÊÒâ ÍÁÙÅẺ͹ءÃÁáÅÐÃкººÑÊ I2C l ÁÕ¨´ Ø µ ÍÍÔ¹¾ØµàÍÒµ ¾µØ Ẻ´Ô¨µÔ ÍÅáÅÐÍÔ¹¾ØµÍйÒÅÍ¡ 9 ª ͧ l ·íÒ§Ò¹´ ÇÂẵàµÍÃÕè AA 4 ¡ ͹ ãª ä´ ·§ Ñé ẺÍÑŤÒäŹ áÅÐẺ»ÃШØä´ l ¢¹Ò´ 2.38 x 6.25 ¹ÔÇ é

l

A3.2 ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã A3.2.1 Ê Ç¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÑÇã¨ÊíҤѭ¤×Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÕ¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ãË µÍ 㪠§Ò¹ä´ ÁÒ¡¶Ö§ 35 ¢Ò ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ Â§Ñ »ÃСͺ仴 ÇÂâÁ´Ùŵ Ò§ æ ÁÒ¡ÁÒ ઠ¹âÁ´ÙÅ PWM à¾×Íè ãË ÊÒÁÒö»ÃѺ¤ÇÒÁàÃçÇÁÍàµÍÃ ä´ µÒÁµ ͧ¡Òà âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ(ADC) «Ö§è PIC16F887 ä´ àµÃÕÂÁ ADC ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµäÇ ÁÒ¡¶Ö§ 14 ª ͧ ´Ñ§¹Ñ¹é ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà à¾Õ§µÑÇà´ÕÂǨ֧µ ͡ѺÍØ»¡Ã³ Í¹Ô ¾ØµàÍÒµ ¾µØ à¾×Íè Êà ҧ໠¹Ëع ¹µ ä´ Í ҧ§ Ò´Ò â´ÂÁÕà«ÃÒÁÔ¡àÃâ« à¹àµÍà 20MHz ¡íÒà¹Ô´¤ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Òà¾×Íè ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Òí §Ò¹ä´ ·¤Õè ÇÒÁàÃçǶ֧ 5 Å Ò¹¤íÒÊÑ觵 ÍÇÔ¹Ò·Õ

A3.2.2 ÀÒ¤¨ ÒÂä¿ ºÍà ´ RBX-877 µ ͧ¡ÒÃáç´Ñ¹ä¿àÅÕÂé §ÍÔ¹¾Øµà» ¹áç´Ñ¹ä¿¿ Ò¡ÃÐáʵç 4.8 ¶Ö§ 6V (äÁ ¤ÇÃà¡Ô¹ +6V) â´Âº¹ºÍà ´ÁÕ¡ÒõԴµÑ§é ¡ÐºÐ¶ Ò¹ AA ¢¹Ò´ 4 ¡ ͹ áÅе ÍÊÒÂÁÒÂѧ¨Ø´µ Íä¿àÅÕÂé § Ẻà·Íà Á¹Ô ÍźÅçÍ¡ 2 ¢ÒµÑÇàÅç¡ àÁ×Íè µ ͧ¡ÒÃ㪠§Ò¹¡çà¾Õ§ºÃèØẵàµÍÃÕ¢è ¹Ò´ AA ¨íҹǹ 4 ¡ ͹ ŧ㹡кж Ò¹


232 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

SW1 ON

+Vm

L1 10uH

D1 1N4001

R1 0.47

D2 1N5819 +5V

K1 BATT. 4.5-6V

C1 100PF 10V

C2 100PF 10V

ZD1 5.1V

IC1 NCP1450 5.0

Q1 FDS6680A

5 4

K2 ISP

CE OUT

GND

C3 1000PF 6.3V

1 2

LED1 ON

ZD2 5.6V

C4 0.01PF 50V

Switching Power Supply

PGC PGD

+5V

R2 1k

+5V

+5V Vpp

11

PGD

40

J1 ICD2

39

PGC GND

32

C5 0.1PF 50V

RB7 RB6

Vpp

+5V

RD2 21

4

22

6

RD3 IC2 PIC16F887

R3 4k7

1 R4 1k

SW2 RESET

MCLR

RD7 RD6 RD5

+5V 23

K3 SDA/RC4

18

K4 SCL/RC3

RD4

RB3

K6 RxD/RC7

26

RC6/TxD RB5

R6 4k7

+5V R8 150

K7 INT/RB0

S2 RB0

+5V

6 33

RB1 RB2 RC1/CCP2

+5V

K15 AN5/RE0

8

K14 AN4/RA5

7

K9 AN3/RA3

5

K13 AN2/RA2

4

K12 AN1/RA1

3

K11 AN0/RA0

2

CR1 Ceramic Resonator 20MHz

BRIGHTNESS

27

36

LED2 RB3

R5 510

37 +Vm

K8 SERVO1

+Vm

K9 SERVO2

+Vm

K10 SERVO3

38

24

K18A-K18B Motor M-1 C7 0.1PF 50V

+5V +Vm

19

2

20

7 2A

RC2/CCP1 17

9

VR1 10k

3

BLK GND 15 2

28

16

RD1

K16 AN6/RE1

1

29

RB0/INT RD0

10

BACK LIGHT ON

1A

1

15 4A

35

10

16

9

RE2/AN7

RC0

15

RE0/AN5

31 RA1/AN1

13

INVERT

+ +

K19A-K19B Motor M-2

DIRECT

Motor Driver +Vm

R9 47k

1 +V RESET GND 2

RA0/AN0

R10 2k2 C8 0.1PF 50V

4

C6 10PF 50V

R8 1k 12

LED4 DIR. #B

3A

RA3/AN3 RA2/AN2

DIRECT LED3 DIR. #A

34EN

SP1 PIEZO

RA5/AN4

+

R9 2k2

6

14 IC3 4Y L293D 11 3Y

13 12 5

RE1/AN6

1Y 3 2Y

12EN

34

8

Vcc1

INVERT

+

RA4

S1 RA4

K17 AN7/RE2

+V Vo

RC7/RxD RC5

R7 4k7

E

R5 16 47

RC3/SCL RB4

25

BLA

DSP1 LCD 16x2 (back light option)

RS

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

30

RC4/SDA

+5V K5 TxD/RC6

+5V JP1

3

LED5 LOW-BAT

Battery Indicator 14

ÃÙ»·Õè A-12 áÊ´§Ç§¨ÃÊÁºÙó ¢Í§ RBX-877 rev.2007 ºÍà ´¤Çº¤ØÁÊíÒËÃѺËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 233

º¹ºÍà ´ä´ ºÃèØǧ¨ÃÀÒ¤¨ ÒÂä¿ÊÇÔµª ªÔè§áºº»ÃѺ¢Öé¹ (step up) à¾×èÍ¡íÒ˹´ÃдѺáç´Ñ¹ ä¿àÅÕé§ǧ¨Ã·Ñé§ËÁ´äÇ ·Õè +5V ·Ñ駹Õéà¹×èͧ¨Ò¡àÁ×èÍàÃÔèÁµ ¹¨ ÒÂä¿ãË á¡ Ç§¨Ã ÃдѺ¢Í§áç´Ñ¹·Õè ẵàµÍÃÕ¨è Ф ÍÂæ Ŵŧ ´ Ç¡ÒÃ㪠ǧ¨Ã¨ ÒÂä¿ÊÇÔµª ª§Ôè Ẻ»ÃѺ¢Ö¹é ¹Õ·é Òí ãË áç´Ñ¹ä¿àÅÕÂé §Ç§¨ÃÃÇÁ Âѧ¤§ÃÑ¡ÉÒÃдѺÍÂÙ· Õè +5V ÍÂÙä ´ ¨¹¡Ç ÒÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕ¨è ÐŴŧµèÒí ÁÒ¡¨ÃÔ§æ (»ÃÐÁÒ³ 1.5V) ¨Ö§äÁ ÊÒÁÒöÃÑ¡ÉÒÃдѺáç´Ñ¹äÇ ä´ ÊíÒËÃѺ㹡óշáÕè ç´Ñ¹¨Ò¡áºµàµÍÃÕÅè ´µèÒí ¡Ç Ò 4V ǧ¨ÃµÃǨ¨Ñºáç´Ñ¹áºµàµÍÃÕ¨è зíÒ§Ò¹ áÅÐᨠ§àµ×͹ÍÍ¡ÁÒ·Õè LED ÊÕàËÅ×ͧµíÒá˹ § BATT. ¼Ùã ª §Ò¹¤ÇÃà»ÅÕÂè ¹áºµàµÍÃÕãè ËÁ ·¹Ñ ·Õ

A3.2.3 Ê Ç¹áÊ´§¼Å ÁÕ´Ç Â¡Ñ¹ 3 Ê Ç¹ »ÃСͺ´ Ç (1) âÁ´ÙÅ LCD ÊíÒËÃѺáÊ´§¼Å¢ ͤÇÒÁ ºÍà ´ RBX-877 ÁÕâÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵàª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´Âµ Í¢Ò RD4 ¶Ö§ RD7 ¢Í§ PIC16F887 ࢠҡѺ¢Ò D4 ¶Ö§ D7 ¢Í§âÁ´ÙÅ LCD à¾×Íè à¢Õ¹¢ ÍÁÙÅáÊ´§¼ÅáÅФíÒÊѧè , µ Í¢Ò RD3 ¡Ñº¢Ò E à¾×Íè » ͹ÊÑ­­Ò³¾ÑÅÊ ÊíÒËÃѺàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅе Í¢Ò RD2 ࢠҡѺ¢Ò RS ¢Í§âÁ´ÙÅ LCD à¾×Íè àÅ×Í¡ ¡ÒÃà¢Õ¹¢ ÍÁÙÅËÃ×ͤíÒÊѧè ä»ÂѧâÁ´ÙÅ LCD ÁÕµÇÑ µ Ò¹·Ò¹»ÃѺ¤ Òä´ VR1 ¤ Ò 10k: ·íÒ˹ Ò·Õ»è ÃѺ¤ÇÒÁ ࢠÁ¢Í§¨ÍáÊ´§¼Å ¶ ÒËÒ¡µ ͧ¡ÒÃãË à» ´ä¿Ê ͧËÅѧ¢Í§âÁ´ÙÅ LCD ãË ·Òí ¡Òõ ͨÑÁê à»Íà ·ÍÕè ÂÙ´ Ò ¹ ¢ÇÒÁ×ͧ͢âÁ´ÙÅ LCD (»¡µÔ¨Ðµ ÍäÇ áÅ Ç) ¶ Òµ ͧ¡Òû ´à¾×Íè »ÃÐËÂÑ´¾Åѧ§Ò¹ãË »Å´¨ÑÁê à»Íà ¹ÍÕé Í¡

(2) LED 㪠áÊ´§Ê¶Ò¹Ðàº×Íé §µ ¹ºÍà ´ RBX-877 â´Âµ Í LED äÇ 1 ´Ç§à¢ ҡѺ¢Ò ¾Íà µ RB3 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887


234 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

(3) ÅíÒ⾧ 㪠áÊ´§¼Å¡Ò÷íÒ§Ò¹´ ÇÂÊÑ­­Ò³àÊÕ§ â´Âµ ÍÅíÒ⾧໠Ââ«à¢ Ò·Õ¢è Ò¾Íà µ RC0 ¤ÇÒÁ¶Õàè Ãâ«á¹¹« ¢Í§ÅíÒ⾧໠Â⫹ÕÍé ÂÙà ÐËÇ Ò§ 1 ¶Ö§ 3kHz

LED áÊ´§Ê¶Ò¹ÐẵàµÍÃÕè

ÊÇÔµª à» ´/» ´

A3.2.4 Ê Ç¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¡ÒÃÃѺÊÑ­­Ò³ÍÔ¹¾ØµËÃ×͢ѺÍØ»¡Ã³ àÍÒµ ¾µØ ÀÒ¹͡ÊÒÁÒö¡ÃзíÒä´ â´ÂµÃ§¼ Ò¹¢Ò RB0 , RA0 ¶Ö§ RA3, RA5, RE0 ¶Ö§ RE2 áÅÐ RC3 ¶Ö§ RC7 ¢Ò¾Íà µàËÅ Ò¹ÕÊé ÒÁÒö¡íÒ˹´¡Ò÷íÒ§Ò¹ä´ ËÅÒÂÃٻẺ ´Ñ§¹Õé

(1) RB0 , RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2

¡ÒèѴ¢Ò¢Í§ ¨Ø´µ Í 3 ¢Ò

(1.1) ÍÔ¹¾ØµÍйÒÅÍ¡ à¾×Íè ÃѺÊÑ­­Ò³ÍÔ¹¾ØµáººÍйÒÅÍ¡Ê §à¢ Òä»»ÃÐÁÇżÅÂѧ ǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ¢¹Ò´ 10 ºÔµÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 (1.2) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 235

(1.3) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (1.4) ÍÔ¹¾ØµÍÔ¹àµÍÃ Ã»Ñ µ ÊíÒËÃѺ¡Ò÷íҧҹẺ¹Õ¨é ÐÃͧÃѺ੾ÒТҾÍà µ RB0/INT ෠ҹѹé àÁ×Íè àÍç¹àÍàºÔÅ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ áÅÐÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§Ê¶Ò¹Ð·ÕÅè ͨԡ à¡Ô´¢Ö¹é ·Õ¢è Ò¾Íà µ RB0 ¹Õé «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õâè »Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¹Ñ ·Õ â´Â¤ ÒµÑ§é µ ¹¨Ð¡íÒ˹´ãË ¢Ò¾Íà µ·Ñ§é 9 ¢Ò¹Õ·é Òí §Ò¹à» ¹ÍÔ¹¾ØµÍйÒÅÍ¡

(2) RC3 áÅÐ RC4

(2.1) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡ (2.2) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (2.3) ¢Òàª×Íè Áµ ÍÃкººÑÊ I2C â´Â¡íÒ˹´ãË RC3 à» ¹¢ÒÊÑ­­Ò³¹ÒÌ Í¡Ò͹ءÃÁ (SCL) áÅÐ¢Ò RC4 à» ¹¢Ò¢ ÍÁÙÅ͹ءÃÁ (SDA) ÊíÒËÃѺàª×Íè Áµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡¼ Ò¹ÃкººÑÊ I2C µÑÇÍ ҧ¢Í§ÍØ»¡Ã³ ÃкººÑÊ I2C ä´ á¡ CMPS03 âÁ´ÙÅà¢çÁ·ÔÈÍÔàÅç¡·ÃÍ¹Ô¡Ê , DS1307 äÍ«Õ °Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ (ÃÕÅä·Á ¤ÅçÍ¡), 24Cxx äÍ«Õ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ, ZX-RELAY16 ºÍà ´ ¢ÑºÃÕàÅ 16 ª ͧ , DS1621 äÍ«ÕÇ´Ñ ÍسËÀÙÁ,Ô SHT11 âÁ´ÙÅÇÑ´¤ÇÒÁª×¹é ÊÑÁ¾Ñ·¸ à» ¹µ ¹

ZX-RELAY16 ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ¼ Ò¹ÃкººÑÊ I2C CMPS03 âÁ´ÙÅà¢çÁ·ÔÈ´Ô¨µÔ ÍÅ


236 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

(3) RC6 áÅÐ RC7

(3.1) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡ (3.2) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑ­­Ò³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (3.3) ¢ÒÊíÒËÃѺÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ â´Â¢Ò¾Íà µ¹Õéàª×èÍÁµ ͡ѺâÁ´ÙÅÊ×èÍÊÒâ ÍÁÙŠ͹ءÃÁËÃ×Í USART ÀÒÂã¹ PIC16F887 ´Ñ§¹Ñ¹é ¨Ö§ÊÒÁÒö¹íÒä»ãª àª×Íè Áµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡ÃÇÁ ·Ñ駾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà à¾×èÍÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁÃÐËÇ Ò§¡Ñ¹áÅСѹ â´Â¢Ò RC6 à» ¹¢Ò ÃѺ¢ ÍÁÙÅ͹ءÃÁ (RxD) áÅÐ¢Ò RC7 à» ¹¢ÒÊ §¢ ÍÁÙÅ͹ءÃÁ (TxD) 㹡óշÕèµ Í§¡ÒÃàª×èÍÁµ ͡Ѻ ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ¨Ðµ ͧµ ͢ҷѧé Êͧ¹Õ¼é Ò ¹Ç§¨Ãá»Å§ÃдѺÊÑ­­Ò³´ ÇÂäÍ«Õ·ÃÒ¹«Õ¿ àÇÍà àºÍà MAX232 à» ¹µ ¹ ¹Í¡¨Ò¡¹Ñé¹ÂѧÊÒÁÒöµ Í¢Ò¾Íà µ·Ñé§Êͧ¹Õé¡ÑºÍØ»¡Ã³ Ê×èÍÊÒâ ÍÁÙŠ͹ءÃÁẺäà ÊÒ ÍÒ·Ô ZX-BLUETOOTH à¾×èÍÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍà ËÃ×Íâ·ÃÈѾ· à¤Å×Íè ¹·Õ¼è Ò ¹ÃкººÅÙ·¸Ù , âÁ´ÙÅ XBee áÅÐ XBee PRO ¾×Íè ÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ¼ Ò¹Ãкº ZIGBEE, ZX-SERVO16 ºÍà ´¢Ñºà«Íà âÇàµÍà 16 ª ͧ, ZX-17 ºÍà ´°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃԧẺ͹ءÃÁ, ZX-19 ºÍà ´ºÑ¹·Ñ¡áÅÐàÅ ¹¡ÅѺàÊÕ§Ẻ͹ءÃÁ, ZX-44 ºÍà ´ÊÇÔµª àÁµÃÔ¡« 4x4 ¨Ø´ à» ¹µ ¹

ZX-BLUETOOTH âÁ´ÙÅÊ×Íè ÊÒà ¢ ÍÁÙÅäà ÊÒ¼ Ò¹ºÅÙ·¸Ù ZX-44 ºÍà ´ÊÇÔµª àÁµÃÔ¡« 4x4 ¨Ø´ XBee-PRO

ZX-SERVO16ºÍà ´ ¢Ñ º à«Íà âÇÁÍàµÍà 16 ª ͧ


à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹ l 237

A3.2.5 ǧ¨Ã¢ÑºÁÍàµÍà 俵ç

¡ÒâѺÁÍàµÍà 俵ç¢Í§ºÍà ´ RBX-877 㪠äÍ«ÕàºÍà L293D ÊÒÁÒö¢ÑºÁÍàµÍÃ ä¿µÃ§ä´ 2 ª ͧ â´Â¡íÒ˹´à» ¹ª ͧ M-1 áÅÐ M-2 â´Âǧ¨Ã¢ÑºÁÍàµÍà ªÍ § M-1 ä´ ÃºÑ ¡ÒäǺ¤ØÁ¨Ò¡¢Ò RD0 ¡Ñº RD1 áÅÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹´ ÇÂ¢Ò RC2 ã¹¢³Ð·Õªè Í § M-2 ä´ ÃºÑ ¡ÒäǺ¤ØÁ¨Ò¡¢Ò¾Íà µ RB1 ¡Ñº RB2 áÅÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹´ Ç¢ҾÍà µ RC1 ·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ·§Ñé Êͧª ͧÁÕ LED 2 ÊÕ áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà (ÊÕà¢ÕÂÇᨠ§¡Òè ÒÂ俵ç¢ÑÇé áÅÐÊÕᴧᨠ§¡Òè Ò¡ÅѺ¢ÑÇé ) ÊíÒËÃѺ¢ÒàÍç¹àÍàºÔÅ¹Ñ¹é ¹Í¡¨Ò¡¹íÒÁÒ㪠àÍç¹àÍàºÔÅËÃ×Íà» ´» ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ᵠÅеÑÇáÅ Ç Âѧ㪠¤Çº¤ØÁ¤ÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍÃ ä´ ´Ç  â´Â» ͹ÊÑ­­Ò³ PWM ࢠҷբè Ò àÍç¹àÍàºÔŹÕéá·¹

A3.2.6 Ê Ç¹¢Ñºà«Íà âÇÁÍàµÍÃ

¢Ò RB4, RB5 áÅÐ RC5 㪠ÊÒí ËÃѺ¢Ñºà«Íà âÇÁÍàµÍà â´Âä¿àÅÕÂé §¢Í§à«Íà âÇÁÍàµÍÃ ä´ ÁÒ â´ÂµÃ§¨Ò¡áºµàµÍÃÕè à¾×Íè ãË Á¡Õ ÃÐáÊÁÒ¡¾Í·Õãè ª ¢ºÑ ÁÍàµÍà ઠ¹à´ÕÂǡѺÁÍàµÍà 俵ç ¡ÒÃÊÑ§è §Ò¹ ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㪠¡Òû ͹ÊÑ­­Ò³¾ÑÅÊ à¾×èͤǺ¤ØÁ¡ÒÃËÁع¢Í§á¡¹à«Íà âÇÁÍàµÍÃ


238 l à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ

C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC áÅСÒ÷´Åͧàº×Íé §µ ¹

A3.2.7 ǧ¨ÃÊÇÔµª º¹ºÍà ´ RBX-877 ÁÕǧ¨ÃÊÇÔµª ¡´µÔ´»Å Í´Ѻ 2 ª ͧ «Ö§è µ ÍࢠҡѺ¢Ò¾Íà µ RA4 áÅÐ RB0 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÊíÒËÃѺ¢Ò RB0 ¹Ñ¹é ¨Ðà» ¹µíÒá˹ §¢Òà´ÕÂǡѺ¢Ò¾Íà µÍÔ¹¾Øµ ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ö§·íÒãË ÊÇÔµª ·¢Õè Ò RB0 ÊÒÁÒö㪠Êà ҧÊÑ­­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¡´ÊÇÔµª ä´ ´Ç  º¹ºÍà ´ RBX-877 ÂѧÁÕÊÇÔµª ¡´µÔ´»Å Í´ѺÍÕ¡Ë¹Ö§è µÑÇ ¹Ñ¹è ¤×Í ÊÇÔµª RESET «Ö§è µ ÍࢠҡѺ¢Ò RE3/MCLR â´Â»¡µÔ¨Ð㪠§Ò¹à» ¹¢ÒÃÕ૵¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ᵠ¼ãÙ ª §Ò¹ÊÒÁÒö ¡íÒ˹´¤ Ҥ͹¿ ¡ãËÁ à¾×Íè 㪠§Ò¹¢Ò¹Õàé » ¹¢ÒÍÔ¹¾Øµ´Ô¨µÔ ÍÅä´ â´Â¢Ò¹Õ¨é СÅÒÂà» ¹¢Ò¾Íà µ RE3 á·¹ ÊÇÔµª RESET ËÃ×Í RE3

A3.2.8 ᨠ¡ ICD2 : ¨Ø´µ Íà¤Ã×Íè §â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÀÒ¹͡ 㹡ÒÃ㪠§Ò¹ºÍà ´ RBX-877 ¨Ðµ ͧÁÕ¡ÒþѲ¹Òâ»Ãá¡ÃÁº¹¤ÍÁ¾ÔÇàµÍà à¾×Íè ãË ä´ ä¿Å ¼ÅÅѾ¸ ¹ÒÁÊ¡ØÅ .hex ¨Ò¡¹Ñ¹é ¹íÒä¿Å .hex â»Ãá¡ÃÁŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 â´ÂºÍà ´â»Ãá¡ÃÁ¹Ñé¹µ ͧ·íÒ§Ò¹¡Ñº¤ÍÁ¾ÔÇàµÍà â´Âµ ÍࢠҡѺ¾Íà µ USB áÅ Ç㪠«Í¿µ áÇà PICkit2 Programming 㹡ÒÃâ»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 â´Â¡ÒõԴµ ÍÃÐËÇ Ò§ºÍà ´â»Ãá¡ÃÁ¡ÑººÍà ´ RBX-877 ¹Ñ¹é ¨Ð¡ÃзíÒ¼ ҹᨠ¡ ICD2 ´Ñ§ÃÙ» ºÍà ´â»Ãá¡ÃÁ PIC

ÊÒÂ ICD2

4.8-6V

Sound RC0

LCD RC7 RxD

BATT

RC6 TxD

RC4 SDA

RC3 SCL

DOWNLOAD

POWER

Robo - PICARRobotR PICRMicroRobotic

ON M-1 M-2

S+

SERVO #1 #2

#3

µ ͡Ѻ¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍÃ

LCD back light

ICD2

ON

RA4

RESET

RB0

RB3 RB0/INT

INNOVATIVE EXPERIMENT

RA0

RA1

RA2

RA3

RA5

RE0

RE1

RE2


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.