à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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