Uploaded on

Thai version …

Thai version
How to use PIC16F887 with Micro C Compiler

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,766
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
133
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ l 1 é à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC ¤ÍÁä¾àÅÍÏ áÅСÒ÷´Åͧàº×éͧµŒ¹ Getting started C programming for PIC microcontroller with mikro C compiler ¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁ¾Ã¨ÔµÃÇÔäÅ é (C) Innovative Experiment Co.,Ltd. INNOVATIVE EXPERIMENT
  • 2. 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 ÃÒÂÅÐàÍÕ´·Õ»ÃÒ¡¯ã¹Ë¹Ñ§Ê×ÍàŋÁ¹Õ䴌¼Ò¹¡ÒõÃǨ·Ò¹Í‹ҧÅÐàÍÕ´áÅжŒÇ¹¶Õè à¾×ÍãˌÁ¤ÇÒÁÊÁºÙóáÅж١ è é ‹ è Õ µŒÍ§ÁÒ¡·ÕÊ´ÀÒÂ㵌à§×͹ä¢áÅÐàÇÅÒ·Õ¾§Áա͹¡ÒèѴ¾ÔÁ¾à¼Âá¾Ã‹ ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡ ¡ÒùíÒ¢ŒÍÁÙÅ èØ è è Ö ‹ ã¹Ë¹Ñ§Ê×ÍàŋÁ¹Õä»ãªŒ ·Ò§ºÃÔÉ· ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔ䴌ÁÀÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ‹»ÃСÒÃã´ é Ñ Õ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×͹·ÕÍÒ¨ÁÕáÅÐ䴌ú¡ÒèѴ¾ÔÁ¾à¼Âá¾Ã‹Í͡仹ѹ ·Ò§ºÃÔÉ·Ï ¨Ð¾ÂÒÂÒÁªÕᨧáÅÐ è è Ñ é Ñ é ᡌä¢ã¹¡ÒèѴ¾ÔÁ¾¤Ãѧµ‹Íä» é
  • 3. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ l 3 é ¤íÒ¹íÒ ¡ÒþѲ¹Òâ»Ãá¡ÃÁà¾×ͤǤºØÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ´ÇÂÀÒÉÒÃдѺÊÙ§ ઋ¹ ÀÒÉÒàºÊÔ¡ ËÃ×Í C Êԧ˹֧ è Œ è è ·ÕÁ¤ÇÒÁÊíҤѭÍ‹ҧÂÔ§¤×Í «Í¿µáÇÏ·àÕè ÃÕÂ¡Ç‹Ò ¤ÍÁä¾àÅÍÏ (compiler) ËÃ×͵ÑÇá»Åâ»Ãá¡ÃÁ Áѹ¨Ð·íÒ˹ŒÒ·Õã¹ è Õ è è ¡ÒÃá»ÅÀÒÉÒÊÙ§¹Ñé¹ÁÒ໚¹ÀÒÉÒáÍÊà«ÁºÅÕ áŌǨҡ¹Ñ鹨ÐÁÕ«Í¿µáÇÏÍÕ¡µÑÇ˹Ö觷ÕàÃÕÂ¡Ç‹Ò áÍÊà«ÁàºÅÍÏ (assembler) ·íÒ˹ŒÒ·Õ㹡ÒÃá»ÅÀÒÉÒáÍÊà«ÁºÅÕ໚¹ÀÒÉÒà¤Ã×ͧËÃ×ÍáÁªÕ¹â¤Œ´ÍÕ¡µ‹Í˹֧ â´Â·ÑÇä»áŌÇ㹪ش è è è è ¢Í§¤ÍÁä¾àÅÍÏÁ¡¨Ð¼¹Ç¡àÍÒáÍÊà«ÁàºÅÍÏࢌÒänj´Ç¡ѹ à¾×Íãˌ¡ÒþѲ¹Òâ»Ãá¡ÃÁ໚¹ä»Í‹ҧÊдǡ áÅÐÅ´ Ñ Œ è ¢Ñ¹µÍ¹ã¹¡Ò÷íҧҹŧ é mikroC ¤ÍÁä¾àÅÍÏ໚¹Ë¹Ö§ã¹¤ÍÁä¾àÅÍϷ䴌ú¤ÇÒÁʹã¨ã¹áǴǧ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C è Õè Ñ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ¡ÒÃ㪌§Ò¹·Õ§Ò áÅÐÁÕà¤Ã×ͧÁ×ÍʹѺʹع㹡Ò÷íÒ§Ò¹ÁÒ¡ÁÒ ÃÇÁ价ѧ è‹ è é µÑǪ‹ÇÂÍ‹ҧä¿ÅäźÃÒÃÕ (library) ·ÕÁÍÂÙà‹ »š¹¨íҹǹÁÒ¡ ÃͧÃѺ¡ÑºÍØ»¡Ã³µÍ¾‹Ç§ËÅÒ¡ËÅÒ áÅдŒÇÂʋǹ¢Í§ è Õ ‹ «Í¿µáÇϷ㪌㹡ÒþѲ¹Òâ»Ãá¡ÃÁ·Õàè ÃÕÂ¡Ç‹Ò mikro IDE ¹Ñ¹ÁÕ¤ÇÒÁÊÁºÙóáÅкÃèØà¤Ã×ͧÁ×Í·ÕªÇÂ㹡ÒÃà¢Õ¹ Õè é è è‹ â»Ãá¡ÃÁänj¾ÃŒÍÁ ¨Ñ´ä´ŒÇÒ໚¹à¤Ã×ͧÁ×;Ѳ¹Òâ»Ãá¡ÃÁ·ÕÊÒÁÒöàÃÔÁµŒ¹ä´Œ§ÒÂÁÒ¡µÑÇ˹֧ ‹ è è è ‹ è ÊíÒËÃѺã¹Ë¹Ñ§Ê×ÍàŋÁ¹Õ¨Ð¹íÒàʹͶ֧ ¡ÒÃ㪌§Ò¹áÅÐÇÔ¸¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ´ŒÇ mikroC ¤ÍÁ é Õ ä¾àÅÍÏÊÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC â´Â์¹ä»·Õàè ºÍÏ PIC16F877 áÅÐ PIC16F887 ÁÕ¤Ò͸ԺÒ¡ÒÃ㪌§Ò¹ í í ¿˜§¡ª¹áÅÐäźÃÒÃÕ·ÊҤѭ ÃÇÁ¶Ö§¡Ò÷´Åͧ·Ò§ÎÒÏ´áÇÏ·ÊÒÁÒöáÊ´§ãˌàË繶֧¼Å¡Ò÷íҧҹ䴌Í‹ҧªÑ´à¨¹ Ñè Õè í Õè áÅШѺµŒÍ§ä´Œ â´Âã¹áµ‹ÅСÒ÷´Åͧ¨ÐÁÕ¤Ò͸ԺÒ·ÄÉ®Õ Ç§¨Ã µÑÇÍ‹ҧâ»Ãá¡ÃÁ ¢Ñ¹µÍ¹¡Ò÷´Åͧ áÅмŠí é ·Õàè ¡Ô´¢Ö¹ à¾×Íãˌ¼àٌ ÃÕ¹ÊÒÁÒö·íÒ¤ÇÒÁࢌÒ㨠áÅеÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹à»ÃÕºà·Õº䴌 é è mikroC ໚¹«Í¿µáÇÏ·Ò§¾Ò³ÔªÂ ¨ÐµŒÍ§ÁÕ¡ÒèѴ«×éÍÁÒÍ‹ҧ¶Ù¡µŒÍ§¨Ò¡à¨ŒÒ¢Í§ÅÔ¢ÊÔ·¸Ôì¹Ñ蹤×Í Mikroelektronika ÊÒÁÒöÊѧ«×Í䴌·èÕ www.mikroe.com Í‹ҧäáçµÒÁ·Ò§ Mikroelektronika ¡ç䴌ແ´âÍ¡ÒÊãˌ è é ¼Ùʹã¨ÊÒÁÒö´ÒǹâËÅ´ mikroC Ãع 2K ä»·´Åͧ㪌§Ò¹ä´Œ¿ÃÕ â´ÂäÁ‹¨Ò¡Ñ´àÇÅÒ ÊÒÁÒö㪌§Ò¹à¤Ã×ͧÁ×;׹ Œ ‹ í è é °Ò¹ä´Œ¤Ãº 㪌¡ºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC 䴌·¡àºÍÏ·§ 12Fxxx, 16Fxxx áÅÐ 18Fxxxx Ëҡᵋ¨Ò¡Ñ´¢¹Ò´ Ñ Ø Ñé í ¢Í§ä¿Åänj·Õè 2 ¡ÔâÅàÇÔô áÅÐàÁ×ÍÁÕ¡ÒèѴ«×ÍÃعÊÁºÙ󏡨ÐÊÒÁÒö㪌§Ò¹ä´ŒÍ‹ҧäÁ‹Á¢Í¨íÒ¡Ñ´  è é ‹ ç Ռ µÑÇÍ‹ҧ¡Ò÷´Åͧ·Õ¹ÒàʹÍã¹Ë¹Ñ§Ê×ÍàŋÁ¹Õ·§ËÁ´ ÊÒÁÒö·íÒ§Ò¹ÀÒÂ㵌 mikroC Ãع 2K 䴌Í‹ҧ è í é Ñé ‹ ÊÁºÙó ¢Í¢Íº¤Ø³ Mikroelektronika ÊíÒËÃѺ¡ÒÃà¼Âá¾Ã‹ mikroC Ãع 2K à¾×Íãˌ¹¡·´Åͧ䴌ÁâÍ¡ÒÊàÃÔÁµŒ¹ ‹ è Ñ Õ è ¡ÒþѲ¹Òâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇÂÀÒÉÒ C ÊíÒËÃѺ¼Ù㪌§Ò¹·ÕµÍ§¡ÒÃ㪌ùÊÁºÙóÊÒÁÒöʹѺ Œ è Œ ‹Ø ʹع¼Ù¾²¹Ò䴌´Ç¡ÒèѴ«×ͨҡ Mikroelektronika ·Õè www.mikroe.com Œ Ñ Œ é ¡ÒÃàÃÕ¹ÃÙäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏǹ¹Õé ÀÒÉÒ C ໚¹»˜¨¨ÑÂ˹֧·Õ¹¡¾Ñ²¹Òâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏÊÁÑ Œ Ñ è è Ñ ãËÁ‹µÍ§ãˌ¤ÇÒÁʹ㨠à¾ÃÒй͡¨Ò¡¨Ðª‹ÇÂÅ´¤ÇÒÁ«Ñº«ŒÍ¹áÅÐÂاÂҡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁáÅŒÇ Âѧª‹ÇÂãˌ¡Òà Œ ‹ µ‹ÍÂÍ´áÅСÒûÃѺà»ÅÕ¹â»Ãá¡ÃÁã¹Í¹Ò¤µÊÒÁÒö·íÒ䴌§Ò¢ֹ è ‹ é ¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁ¾Ã¨ÔµÃÇÔäÅ é
  • 4. 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 Ñ Ô è
  • 5. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ l 5 é º··Õè 9 㪌§Ò¹¿˜§¡ª¹ PWM ¢Í§ mikroC............................................................................137 Ñè »¯Ôºµ¡Ò÷Õè 9 ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÏ´Ç¿˜§¡ª¹ PWM.............................140 Ñ Ô Œ èÑ º··Õè 10 ¡ÒõԴµ‹Í USART âÁ´ÙÅÊ×ÍÊÒâŒÍÁÙžÍϵ͹ءÃÁ¢Í§ è äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ¿˜§¡ª¹¢Í§ mikroC ¤ÍÁä¾àÅÍÏ....................143 Ñè »¯Ôºµ¡Ò÷Õè 15 ¡ÒÃÃѺʋ§¢ŒÍÁÙÅÃÐËNjҧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÍÁ¾ÔÇàµÍÏ.......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. 6 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 7. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 7 º··Õè 1 á¹Ð¹íÒ mikroC mikroC ໚¹ªØ´«Í¿µáÇϾѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ¼Ù¾²¹Ò¤×Í mikroElektronika (mikroE : www.mikroe.com) mikroC 䴌ºÃèØà¤Ã×ͧÁ×Íà¾×ÍÍíҹǠŒ Ñ è è ¤ÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁänjÁÒ¡ÁÒ µÑÇá»Åâ»Ãá¡ÃÁÀÒÉÒ 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. 8 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 1.2 mikroC IDE à¤Ã×ͧÁ×ÍÊíÒËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ è IDE ÁÒ¨Ò¡ Integrated Development Environment ËÁÒ¶֧ «Í¿µáÇÏ·ÃǺÃÇÁà¤Ã×ͧÁ×Í Õè è áÅÐÊÀÒÇÐáǴŌÍÁ㹡ÒþѲ¹Òâ»Ãá¡ÃÁàÍÒänj㹷Õàè ´ÕÂǡѹ â´ÂÀÒÂã¹ MikroC IDE »ÃÐ¡Íºä» ´ŒÇ à¤Ã×ͧÁ×Íà¤Ã×ͧ㪌·ÍҹǤÇÒÁÊдǡ´Ñ§¹Õé è è èÕ í 1. ⤌´àÍ´ÔàµÍÏ (Code editor) ໚¹â»Ãá¡ÃÁàÍ´ÔàµÍÏÊÒËÃѺà¢Õ¹áÅÐᡌ䢫ÍÃÊ í â»Ãá¡ÃÁÀÒÉÒ C â´Â⤌´àÍ´ÔàµÍϨзíÒ¡ÒÃá¡áÂЪش¤íÒÊѧ, µÑÇá»Ã, ¢ŒÍÁÙŵÑÇàÅ¢, ÍÑ¡¢ÃÐ áÅÐ è ¤íÒ͸ԺÒ ´ŒÇÂÊÕ (color syntax) ÃÇÁ·Ñ§ÃٻẺµÑÇÍÑ¡Éà ¼Ù㪌§Ò¹ÊÒÁÒöàÅ×Í¡»ÃѺà»ÅÕ¹ÃٻẺ é Œ è áÅÐÊÕÊѹ¢Í§¢ŒÍÁÙÅᵋÅЪ¹Ô´ä´Œàͧ »ØÁ¤ÍÁä¾Åâ»Ãá¡ÃÁ † ˹Œ Ò µ‹ Ò §´Ù ¤‹ Ò ÃÕ ¨Ô Ê àµÍÏ (Watch window) ⤌´àÍ´ÔàµÍÏ äÁâ¤Ã¤Í¹â·ÃÅàÅÍϷ㪌 Õè ª‹Í§¡íÒ˹´¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò è Ñ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ ˹ŒÒµ‹Ò§¼ÅÅѾ¸ ÃÙ»·Õè 1-1 áÊ´§Ë¹ŒÒµ‹Ò§ËÅÑ¡¢Í§ mikroC IDE áÅÐʋǹ»ÃСͺ·ÕÊҤѭ èí
  • 9. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 9 2. äźÃÒÃÕÊÒàÃç¨ÃÙ» ã¹ mikroC 䴌àµÃÕÂÁäźÃÒÃբͧâ»Ãá¡ÃÁÀÒÉÒ C änj¨Ò¹Ç¹ í í ÁÒ¡ à¾×èͪ‹ÇÂãˌ¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÊÒÁÒö·íÒ䴌Í‹ҧÃÇ´àÃçÇ äÁ‹Ç‹Ò¨Ð໚¹äźÃÒÃÕà¡ÕèÂǡѺ¡ÒõԴµ‹Í˹‹Ç¤ÇÒÁ¨íÒ ¡ÒÃáÊ´§¼Å¢ŒÍÁÙÅ ¡ÒÃÊ×èÍÊÒâŒÍÁÙÅ ¡ÒáÒà ¨Ñ´à¡çº¢ŒÍÁÙŵ‹Ò§æ áÅÐäºÃÒÃÕÊíÒËÃѺ¡ÒõԴµ‹ÍÍØ»¡Ã³ÀÒ¹͡ 3. à¤Ã×ͧÁ×ͪ‹ÇÂà¢Õ¹â»Ãá¡ÃÁ ·ÕªÇÂáÊ´§¼Åâ¤Ã§ÊÌҧ¢Í§â»Ãá¡ÃÁ µÑÇá»Ã áÅÐ è è‹ ¿˜§¡ª¹µ‹Ò§ æ ÀÒÂã¹â»Ãá¡ÃÁ Ñè 4. C ¤ÍÁä¾àÅÍÏ 㪌㹡ÒÃá»Åâ»Ãá¡ÃÁÀÒÉÒ C ໚¹ÀÒÉÒáÍÊà«ÁºÅÕ áÅм¹Ç¡ ¡Ñºâ»Ãá¡ÃÁáÍÊà«ÁàºÅÍÏà¾×Íá»Åâ»Ãá¡ÃÁ໚¹áÁªÕ¹â¤Œ´¨Ñ´à¡çºã¹ÃٻẺä¿Å Hex Áҵðҹ è ÊÒÁÒö㪌¡ºà¤Ã×ͧâ»Ãá¡ÃÁ PIC Áҵðҹ䴌·§ËÁ´ Ñ è Ñé 5. «ÔÁàÙ ÅàµÍÏ ໚¹à¤Ã×ͧÁ×ÍʹѺʹع¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ 㪌´¼Å¡Òà è Ù ·íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·ÕÅÐÊàµç» áÅÐÂѧ㪌ªÇ¨ѺàÇÅÒ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·ÕÅЪ‹Ç§ ÃÇÁ¶Ö§´Ù¡Òà ‹ à»ÅÕ¹á»Å§¢Í§ÃÕ¨ÊàµÍϵҧ æ 䴌Í‹ҧ§‹Ò´Ò è Ô ‹ 6. àÍ¡ÊÒáÒÃ㪌§Ò¹¤Ø³ÀÒ¾ÊÙ§ ¹Í¡¨Ò¡¡ÒÃ㪌§Ò¹â»Ãá¡ÃÁ·Õ觋ÒÂáÅŒÇ mikroC Âѧ ʹѺʹع¢ŒÍÁÙÅàÍ¡ÊÒáÒÃ㪌§Ò¹â»Ãá¡ÃÁ äźÃÒÃÕµ‹Ò§æ áÅеÑÇÍ‹ҧâ»Ãá¡ÃÁänjÍ‹ҧÁÒ¡ÁÒ ª‹ÇÂãˌ¼àٌ ÃÔÁµŒ¹ÊÒÁÒöàÃÕ¹ÃÙ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¨Ò¡µÑÇÍ‹ҧ䴌§Ò¢ֹ è Œ ‹ é 1.2.1 ÃÒÂÅÐàÍÕ´¢Í§â¤Œ´àÍ´ÔàµÍÏ (Code Editor) ⤌´àÍ´ÔàµÍϢͧ mikroC ໚¹àÍ´ÔàµÍÏ·ÁҾÌÍÁà¤Ã×ͧÁ×ͪ‹ÇÂ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ ·íÒãˌ Õè è ¡ÒÃà¢Õ¹·íÒ䴌§Ò¢ֹ´ŒÇ¤سÊÁºÑµµÒ§ æ ´Ñ§¹Õé ‹ é ԋ l »ÃѺᵋ§ÃٻẺÊբͧµÑÇÍÑ¡Éõ‹Ò§ æ 䴌 l àÅ×Í¡áÊ´§ªØ´¤íÒÊѧÍÍ¡ÁÒ â´Â¡´»ØÁ CTRL + Space bar è † l ´ÙÃÒÂÅÐàÍÕ´¤‹Ò¾ÒÃÒÁÔàµÍϢͧªØ´¤íÒÊѧµ‹Ò§æ 䴌 è l ÃͧÃѺ¡ÒÃ㪌§Ò¹à·Áà¾Åµ (template) ËÃ×Í¡ÒÃÊÌҧÃٻẺ⤌´Íѵâ¹Áѵ䴌 Ô l µÃǨÊͺáÅÐᡌä¢â¤Œ´·Õàè ¢Õ¹¼Ô´ä´Œâ´ÂÍѵâ¹ÁÑµÔ l ¡íÒ˹´µíÒá˹‹§·ÕµÍ§¡ÒáÃÐâ´´ä»ÂѧºÃ÷Ѵ·ÕµÍ§¡ÒÃ䴌 èŒ èŒ l ÊÒÁÒö»ÃѺᵋ§¡ÒÃ㪌§Ò¹ä´Œ´Ç¡ÒÃàÅ×Í¡·Õàè Á¹Ù Tools à Option ËÃ×ͤÅÔ¡»ØÁ Œ † ·Õè˹ŒÒµ‹Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ¡ç䴌
  • 10. 10 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ¡ÒÃáÊ´§ªØ´¤íÒÊѧ : Code Assistant [CTRL+SPACE] è à¾×ÍÊдǡ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁËÃ×Í㹺ҧ¤Ãѧ¨íҪش¤íÒÊѧäÁ‹ä´Œ ãˌ¡´¤ÕÂËÅÑ¡¢Í§ª×ͤíÒÊѧ è é è  è è áŌǡ´»ØÁ CTRL+ SPACE (ËÁÒ¶֧¡´»ØÁ Ctrl ¤ŒÒ§änjáŌǵÒÁ´ŒÇ¡Òá´»ØÁ Space bar) ¤íÒÊѧ·ÕÁÕ † † † è è ¤ÕµÇÍÑ¡É÷Õàè Å×Í¡änjÍÂٴҹ˹ŒÒ¨Ð»ÃÒ¡¯ÍÍ¡ÁҷѧËÁ´ à¾Õ§àÅ×͹à¤ÍÏà«ÍÏä»Âѧ¤íÒÊѧ·ÕµÍ§¡Òà Ñ ‹Œ é è è èŒ áŌǡ´ 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 ¢Ö¹Áҷѹ·Õ à¾×ͪ‹ÇÂãˌ¼àٌ ¢Õ¹â»Ãá¡ÃÁ·ÃÒºÃÙ» é è Ẻ¡ÒáíÒ˹´¤‹Ò¾ÒÃÒÁÔàµÍϢͧ¤íÒÊÑ觹ÕéÍ‹ҧ¶Ù¡µŒÍ§
  • 11. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 11 µÃǨÊͺáÅÐᡌ䢤íÒ¼Ô´Íѵâ¹ÁÑµÔ : Auto Correct ໚¹¤Ø³ÊÁºÑµ¡ÒõÃǨÊͺ¤íÒ¼Ô´â´ÂÍѵâ¹ÁÑµÔ ÁÕ¡Ò÷íÒ§Ò¹¤ÅŒÒ¡Ѻ Microsoft Word áÅÐ Ô Âѧª‹ÇÂᡌ䢡ÒþÔÁ¾¤ÒÊѧ·ÕäÁ‹¶¡µŒÍ§¢Í§¼Ù㪌§Ò¹ â´Â¤íÒÊѧ·ÕÁ¡¾ÔÁ¾¼´º‹ÍÂæ ¹Ñ¹ ¼Ù㪌ÊÒÁÒöà¾ÔÁ í è è Ù Œ è è Ñ Ô é Œ è àµÔÁ¤íÒÊѧ䴌 â´Â¡ÒÃàÅ×Í¡àÁ¹Ù Tools à Options ¨Ò¡¹Ñ¹àÅ×Í¡ä»·ÕËÇ¢ŒÍ Auto Correct è é è Ñ ¡ÒáíÒ˹´µíÒá˹‹§ Bookmark 㹡óշÕèâ»Ãá¡ÃÁÁÕ¤ÇÒÁÂÒÇÁÒ¡æ à¾×èÍãˌ¡ÒáÃÐâ´´ä»ÂѧµíÒá˹‹§µ‹Ò§æ ¢Í§â»Ãá¡ÃÁ 䴌Í‹ҧÃÇ´àÃçÇ ¼ÙŒãªŒ§Ò¹ÊÒÁÒö¡íÒ˹´µíÒá˹‹§ºÃ÷Ѵ·Õ赌ͧ¡ÒÃänj㹠Bookmark «Öè§ÊÒÁÒö ¡ÃÐâ´´ä»ÂѧµíÒá˹‹§¹Ñ¹æ 䴌Í‹ҧÃÇ´àÃçÇ é ¡íÒ˹´µíÒá˹‹§ Bookmark ·íÒ䴌â´Â ¡´»ØÁ CTRL µÒÁ´ŒÇ SHIFT áÅФÕµÇàÅ¢ ¨Ò¡¹Ñ¹ † Ñ é â»Ãá¡ÃÁ¨ÐáÊ´§µíÒá˹‹§ bookmark ·ÕµÍ§¡ÒÃ èŒ ¡´ Ctrl+Shift+1 ¡´ Ctrl+Shift+2 ¡´ Ctrl+Shift+3 ¡ÒÃࢌҶ֧µíÒá˹‹§ Bookmark ·íÒ䴌â´Â¡Òá´»ØÁ CTRL+µÑÇàÅ¢áÊ´§µíÒá˹‹§ Bookmark †
  • 12. 12 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ¡ÒáÃÐâ´´ä»ÂѧµíÒá˹‹§ºÃ÷Ѵ·ÕµÍ§¡Òà : GotoLine è Œ ¹Í¡¨Ò¡¡ÒÃ㪌 bookmark áÅŒÇ ¼Ù㪌§Ò¹ÂѧÊÒÁÒö¡ÃÐâ´´ä»ÂѧºÃ÷Ѵµ‹Ò§æ ¢Í§â»Ãá¡ÃÁ Œ 䴌â´ÂµÃ§ ¼‹Ò¹¡ÒᴤՏ CTRL+G ¨Ð»ÃÒ¡¯Ë¹ŒÒµ‹Ò§ GotoLine ¢Ö¹ÁÒãˌ»Í¹àÅ¢ºÃ÷Ѵ·ÕµÍ§¡ÒÃ é ‡ èŒ ¡ÃÐâ´´ áŌǤÅÔ¡»ØÁ OK † Code Explorer ¤×Íʋǹ¢Í§Ë¹ŒÒµ‹Ò§·ÕèÇÒ§ÍÂً·Ò§´ŒÒ¹«ŒÒÂÁ×ͧ͢â»Ãá¡ÃÁ㪌áÊ´§¿˜§¡ªÑè¹áÅеÑÇá»Ã·Õè㪌 §Ò¹ÍÂًã¹â»Ãá¡ÃÁ¢³Ð¹Ñé¹
  • 13. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 13 ˹ŒÒµ‹Ò§¢Í§¢ŒÍÁÙŪ‹ÇÂàËÅ×Íà˧´‹Ç¹ : Quick Help (QHelp) ã¹á·ç»µ‹Í¨Ò¡ Code Explorer ໚¹Ë¹ŒÒµ‹Ò§¢ŒÍÁÙŪ‹ÇÂàËÅ×Í à¾×Íãˌ·ÃÒº¶Ö§¡ÒÃ㪌§Ò¹¿˜§¡ª¹ è Ñè ·ÕºÃèØÍÂÙã¹â»Ãá¡ÃÁ ઋ¹ ¡ÒÃàÃÕ¡㪌§Ò¹¿˜§¡ª¹µÔ´µ‹Í˹‹Ç¤ÇÒÁ¨íÒ Compact Flash ໚¹µŒ¹ è ‹ Ñè ÃÒ¡ÒäÕÂÅ´ : Keyboard Shotcut Ñ ÍÂÙã¹µíÒá˹‹§á·ç»¢ÇÒÊØ´¢Í§Ë¹ŒÒµ‹Ò§ Code Explorer àÁ×ÍàÅ×͡ࢌÒÁÒ ¨ÐÁÕÃÒ¡Òâͧ¤ÕÂÅ´ ‹ è Ñ µ‹Ò§ æ ·Õ㪌ã¹â»Ãá¡ÃÁ ª‹ÇÂãˌÊÒÁÒö㪌§Ò¹¤íÒÊѧµ‹Ò§æ 䴌Í‹ҧÃÇ´àÃçÇÂÔ§¢Ö¹ è è è é
  • 14. 14 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ˹ŒÒµ‹Ò§á¨Œ§¼ÅÅѾ¸ : Message Window ໚¹Ë¹ŒÒµ‹Ò§ÊíÒËÃѺáÊ´§¼ÅÅѾ¸¨Ò¡¡ÒäÍÁä¾Å ¶ŒÒ¡ÒäÍÁä¾ÅÁ¢Í¼Ô´¾ÅÒ´ ˹ŒÒµ‹Ò§¹Õé Ռ ¨ÐáÊ´§¢ŒÍ¼Ô´¾ÅÒ´´ŒÇÂÍÑ¡ÉÃÊÕá´§ 㹡óÕäÁ‹¼´¾ÅÒ´ ˹ŒÒµ‹Ò§¹Õ¨ÐáÊ´§¢ŒÍ¤ÇÒÁÊÕÁǧ ¾ÃŒÍÁ·Ñ§ Ô é ‹ é ᨌ§¢¹Ò´Ë¹‹Ç¤ÇÒÁ¨íÒ·ÕãªŒä» ¡Ã³ÕÁ¢Í¼Ô´¾ÅÒ´â»Ãá¡ÃÁ¨ÐäÁ‹ÊÌҧä¿Å hex ¼Ù㪌§Ò¹ÊÒÁÒÃ¶à¢ŒÒ è Ռ Œ ¶Ö§ºÃ÷Ѵ·Õèà¡Ô´¤ÇÒÁ¼Ô´¾ÅҴ䴌â´Â¡ÒôѺàºÔŤÅÔ¡·ÕèºÃ÷Ѵ·ÕèáÊ´§¢ŒÍ¼Ô´¾ÅÒ´ â»Ãá¡ÃÁ¨Ð ¡ÃÐâ´´ä»ÂѧµíÒá˹‹§·Õèà¡Ô´¢ŒÍ¼Ô´¾ÅÒ´·Ñ¹·Õ 1.2.2 à¤Ã×ͧÁ×;ÔàÈɪ‹ÇÂ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ è 1.2.2.1 µÒÃÒ§ÃËÑÊáÍÊ¡Õé (ASCII Chart) ໚¹à¤Ã×èͧÁ×Í·Õ誋ÇÂ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ·Õèà¡ÕèÂÇ¢ŒÍ§¡ÑºµÑÇÍÑ¡Éà ËÃ×Í¡ÒèѴ¡ÒâŒÍÁÙÅẺ String â´ÂµÒÃÒ§áÍÊ¡Õ¹ªÇÂãËé¼àéÙ ¢Õ¹â»Ãá¡ÃÁ·ÃÒº¶Ö§ ¤èÒ¢éÍÁÙÅÃËÑÊáÍʡբͧµÑÇÍÑ¡ÉÃËÃ×͵ÑÇ- é éÕ è é àÅ¢ ·Õ¹ÂÁ㪌ÁÒ¡ ¤×Í ¡ÒÃà¢Õ¹¢ŒÍÁÙÅä»áÊ´§¼Å·ÕâÁ´ÙÅ LCD ໚¹µŒ¹ ¡ÒÃàÃÕ¡㪌§Ò¹µÒÃÒ§áÍÊ¡Õé è Ô è ¨ÐàÃÕ¡¨Ò¡àÁ¹Ù Tools à Ascii Chart
  • 15. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 è à¤Ã×èͧÁ×Íà¾×èͪ‹ÇÂÃѺáÅÐʋ§¢ŒÍÁÙÅ͹ءÃÁÃÐËNjҧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÍÁ¾ÔÇàµÍÏ ¡ÒÃàÃÕ¡㪌§Ò¹·íÒ䴌â´Âä»·Õàè Á¹Ù Tools à USART Terminal ËÃ×Í¡´»ØÁ Ctrl+T ¡ç䴌 †
  • 16. 16 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 1.2.2.4 ˹ŒÒµ‹Ò§Ê×ÍÊÒâŒÍÁÙż‹Ò¹¾Íϵ USB ã¹âËÁ´ HID : HID Terminal è ໚¹à¤Ã×ͧÁ×Íà¾×ͪ‹ÇÂ㹡ÒõԴµ‹ÍÃÐËNjҧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ¡º¤ÍÁ¾ÔÇàµÍÏ ¼‹Ò¹¾Íϵ è è Ñ USB «Ö§ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ºÒ§àºÍϨÐÁÕâÁ´ÙÅ USB µÔ´µÑ§ÍÂً ઋ¹ PIC18F4550 ໚¹µŒ¹ è é ¡ÒÃàÃÕ¡㪌§Ò¹¨ÐµŒÍ§ä»·Õàè Á¹Ù Tools à HID Teminal 1.2.2.5 ˹ŒÒµ‹Ò§Ê×ÍÊÒâŒÍÁÙż‹Ò¹Ãкºà¹çµàÇÔá : UDP Terminal è  ໚¹à¤Ã×ͧÁ×ÍÃѺʋ§á¾ç¡à¡çµ¢ŒÍÁÙÅã¹Ãкºà¹çµàÇÔá â´Âä»·Õàè Á¹Ù Tools à UDP Terminal è 
  • 17. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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
  • 19. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 19 1.3 àÃÔÁµŒ¹ãªŒ§Ò¹ mikroC è 1.3.1 㪌§Ò¹¨Ò¡µÑÇÍ‹ҧ mikroC àµÃÕÂÁµÑÇÍ‹ҧ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¾×¹°Ò¹ÁÒãˌ¼ãªŒ§Ò¹·´ÅͧËÅÒÂâ»Ãá¡ÃÁ â´Â é ٌ ËÅѧ¨Ò¡µÔ´µÑé§â»Ãá¡ÃÁ mikroC áÅŒÇ µÑÇÍ‹ҧâ»Ãá¡ÃÁµ‹Ò§æ ¨Ðà¡çºÍÂًã¹â¿Åà´ÍÏ C:Program FilesMikroelektronikamikroCExamplesEasyPic4 ÊíÒËÃѺä¿Åâ»Ãà¨ç¡µáá·Õè¨Ðແ´¢Öé¹à»š¹µÑÇÍ‹ҧ¹Õé㪌äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877A «Ö§¡ç¤Í ä¿Å¢Í§â»Ãá¡ÃÁ信оÃÔº (LED Blinking) è × ¢Ñ鹵͹¡ÒÃແ´µÑÇÍ‹ҧâ»Ãà¨ç¡µ¢Öé¹ÁÒ㪌§Ò¹ ÁÕ¢Ñ鹵͹´Ñ§¹Õé (1) ແ´â»Ãá¡ÃÁ mikroC áŌÇä»·Õàè Á¹Ù Project à Open Project (2) ·Õè˹ŒÒµ‹Ò§ Open àÅ×Í¡â¿Åà´ÍÃì C:Program FilesMikroelektronikamikroC ExamplesEasyPic4P16F877ALED_Blinking àÃÕ¡ແ´ä¿Å LED_Blinking.ppc
  • 20. 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 ¤ÍÁä¾àÅÍÏ è í
  • 21. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 ËÃ×ͤÅÔ¡»ØÁ è † ºÃÔàdzᶺà¤Ã×ͧÁ×Í è ´ŒÒ¹º¹¢Í§â»Ãá¡ÃÁ ËÃ×Í¡´¤Õ F9 à¾×ÍàÃÔÁµŒ¹à»´Ë¹ŒÒµ‹Ò§ Debugger è è ËÁÒÂà赯 ¡‹Í¹¡ÒÃ㪌 Debugger ËÃ×ͨíÒÅͧ¡Ò÷íÒ§Ò¹ µŒÍ§·íÒ¡ÒäÍÁä¾Åâ»Ãá¡ÃÁ¡‹Í¹àÊÁÍ
  • 22. 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 áÊ´§Ë¹ŒÒµ‹Ò§´ÔÊáÍÊà«ÁàºÅÍÏ
  • 23. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 ໚¹¡ÒÃáÊ´§¨íҹǹä«à¡ÔŢͧ¤íÒÊѧËÃ×Í¿˜§¡ª¹·Õàè ¾Ô§Ãѹãˌ·Ò§Ò¹ä»Å‹ÒÊØ´ è Ñè è í 3. Stopwatch ໚¹¡ÒÃáÊ´§¨íҹǹä«à¡ÔÅ¡Ò÷íÒ§Ò¹áÅÐàÇÅÒ·Õè㪌 ËÅѧ¨Ò¡¡´»Ø†Á Reset to Zero
  • 24. 24 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 4. Clock ໚¹Ë¹ŒÒµ‹Ò§ÊíÒËÃѺ¡íÒ˹´¤‹Ò¤ÇÒÁ·ÕÍÍÊ«ÔÅàÅàµÍϷ㪌 «Ö§äÁ‹¨Ò໚¹µŒÍ§à»š¹ è Õè è í ¤‹Òà´ÕÂǡѺ¤‹Ò·Õ¡Ò˹´ã¹ä¿Åâ»Ãà¨ç¡µ¡ä´Œ â´Â¡ÒÃà»ÅÕ¹á»Å§¤‹Ò¤ÇÒÁ¶ÕÍÍÊ«ÔÅàÅàµÍÏã¹Ë¹ŒÒµ‹Ò§ èí ç è è Stopwatch ¨ÐäÁ‹Á¼Å¡Ñº¡ÒÃà»ÅÕ¹á»Å§¤‹Ò¤ÇÒÁ¶ÕÍÍÊ«ÔÅàÅàµÍÏã¹ä¿Åâ»Ãà¨ç¡µ Õ è è 5. »ØÁ † 㪌à¾×ÍÃÕ૵¹Ò́¡Ò¨ÑºàÇÅÒãˌ¡ÅѺä»àÃÔÁ¹Ñº·Õè 0 (ᵋ¨ÐäÁ‹ è è ÁռšѺ¤‹Ò Current Count ) 㪌ÊÒËÃѺ¡ÒèѺàÇÅÒ੾Ò¡ª¹·ÕµÍ§¡Òà í Ñè è Œ ¤‹Ò·ÕèáÊ´§¨ÐáÊ´§·Ñé§ã¹ÃٻẺ¢Í§ä«à¡ÔÅ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФҺ ÃÐÂÐàÇÅÒ·Õè㪌㹡Ò÷íÒ¤íÒÊÑè§ËÃ×Í¿˜§¡ªÑè¹ ËÅѧ¨Ò¡ÃÙ¨¡¡ÑºÊ‹Ç¹»ÃСͺ¢Í§Ë¹ŒÒµ‹Ò§ Stopwatch áŌǵ‹Íä»à»š¹¡Ò÷´ÅͧÃѹâ»Ãá¡ÃÁ ŒÑ Ẻ«Ô§à¡ÔÅÊàµç» à¾×ʹ٨ҹǹä«à¡ÔÅáÅФҺàÇÅÒ·Õâ»Ãá¡ÃÁ㪌 â´Â·íÒµÒÁ¢Ñ¹µÍ¹´Ñ§¹Õé è í è é (1) ¡íÒ˹´ÊÑ­­Ò³¹Ò́¡Ò (Clock) ෋ҡѺ 20 MHz (2) à¤ÅÕÂϤÒä«à¡ÔÅáÅФҺàÇÅÒ â´Â¤ÅÔ¡·Õ»Á ‹ è ؆ (3) ¤ÅÔ¡·Õ»Á Step Over è ؆ ËÃ×Í¡´»ØÁ F8 ˹֧¤Ãѧ ໚¹¡Ò÷íÒ¤íÒÊѧ PORTC † è é è = 0 «Ö§àÇÅÒ·Õè Stopwatch 㪌෋ҡѺ 3 ä«à¡ÔÅ è (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 ÇÔ¹Ò·Õ¾Í´Õ Ô
  • 25. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 25 1.4 ˹ŒÒµ‹Ò§áÊ´§Ê¶Ôµ¡ÒÃ㪌˹‹Ç¤ÇÒÁ¨íÒ Ô ËÅѧ¨Ò¡¤ÍÁä¾Åâ»Ãá¡ÃÁáÅŒÇ ¼Ù㪌§Ò¹ÊÒÁÒöàÃÕ¡´ÙʶԵµÒ§æ Íѹ»ÃСͺ仴ŒÇ Œ ԋ 1. Memory usage áÊ´§¡ÒÃ㪌§Ò¹Ë¹‹Ç¤ÇÒÁ¨íÒâ»Ãá¡ÃÁáÅÐ˹‹Ç¤ÇÒÁ¨íÒ RAM «Ö觨ÐáÊ´§·Ñ駻ÃÔÁҳ˹‹Ç¤ÇÒÁ¨íÒ·ÕèNjҧÍÂًáÅÐ˹‹Ç¤ÇÒÁ¨íÒ·ÕèãªŒä» 2.Procedures (sizes) áÊ´§»ÃÔÁÒ³¡ÒÃ㪌˹‹Ç¤ÇÒÁ¨íÒẋ§µÒÁ¿˜§¡ª¹·Õàè ÃÕ¡㪌 Ñè
  • 26. 26 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 3.Procedures (locations) áÊ´§µíÒá˹‹§¡ÒÃ㪌§Ò¹Ë¹‹Ç¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§ ¿˜§¡ª¹µ‹Ò§ æ ÀÒÂã¹â»Ãá¡ÃÁ ÃÇÁ¶Ö§»ÃÔÁÒ³¡ÒÃ㪌˹‹Ç¤ÇÒÁ¨íÒã¹áµ‹Å¡ª¹´ŒÇ Ñè Ñè 4.Procedures (details) áÊ´§ÃÒÂÅÐàÍÕ´¢Í§¿˜§¡ªÑè¹µ‹Ò§æ â´ÂÁÕ¡ÒÃÃкصíÒá˹‹§ áÍ´à´ÃÊàÃÔèÁµŒ¹áÅÐÊÔé¹ÊØ´¢Í§¿˜§¡ªÑè¹
  • 27. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 27 5.RAM ໚¹¡ÒÃáÊ´§ÃÒÂÅÐàÍÕ´¢Í§Ë¹‹Ç¤ÇÒÁ¨íÒ RAM áÅÐÃÕ¨ÊàµÍϵҧæ â´Â Ô ‹ áÊ´§ª×èÍáÅеíÒá˹‹§áÍ´à´ÃʢͧÃÕ¨ÔÊàµÍÏáÅÐ˹‹Ç¤ÇÒÁ¨íÒàËŋҹÑé¹ 6.ROM ໚¹Ë¹ŒÒµ‹Ò§áÊ´§ÃÒÂÅÐàÍÕ´â»Ãá¡ÃÁÀÒÉÒáÍÊá«ÁºÅÕ·àèÕ ¡çºÍÂÙã¹Ë¹‹Ç ‹ ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ
  • 28. 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 änj ᵋÊÒÁÒöà»ÅÕ¹໚¹àºÍÏ 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 àÊÕ¡‹Í¹
  • 29. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 (µÑÇàÅ¢àÇÍϪ¹ÍÒ¨à»ÅÕ¹á»Å§µÒÁÃع·ÕÁ¡ÒûÃѺ»ÃاŋÒÊØ´) áÅŒÇ Ñ è ‹ è Õ ·íÒ¡ÒâÂÒÂä¿Å·Õè´ÒǹâËÅ´ÁÒ à¡çºänjã¹â¿Åà´ÍÏ 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 (µÑÇàÅ¢àÇÍϪ¹ÍÒ¨à»ÅÕ¹á»Å§µÒÁÃع·ÕÁ¡ÒûÃѺ»ÃاŋÒÊØ´) áŌǷíÒ¡ÒâÂÒÂä¿Å·´ÒǹâËÅ´ÁÒ à¡çº Ñ è ‹ è Õ Õè änjã¹â¿Åà´ÍÏ PICkit 2 Setup v2.01 ¨Ò¡¹Ñ¹à¢ŒÒä»ã¹â¿Åà´ÍÏ àÅ×Í¡´ÑºàºÔŤÅÔ¡·Õä¿Å PICkit2Setup.msi é è à¾×ÍàÃÔÁµŒ¹µÔ´µÑ§â»Ãá¡ÃÁ è è é
  • 30. 30 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 1.5.1.3 ¢Ñ¹µÍ¹¡ÒõԴµÑ§â»Ãá¡ÃÁ é é (1) ´ÑºàºÔŤÅÔ¡ä¿Åµ´µÑ§ PICkit2Setup.msi ¨Ð»ÃÒ¡¯Ë¹ŒÒµ‹Ò§àÃÔÁ¡ÒõԴµÑ§ ¤ÅÔ¡»ØÁ Next Ô é è é † (2) ¨Ð»ÃÒ¡¯Ë¹ŒÒµ‹Ò§á¨Œ§µíÒá˹‹§â¿Åà´ÍÏ·¨Ð·íÒ¡ÒõԴµÑ§ ËÒ¡äÁ‹µÍ§¡ÒÃà»ÅÕ¹á»Å§µíÒ Õè é Œ è á˹‹§â¿Åà´ÍÏãˌ¤ÅÔ¡»ØÁ Next à¾×ͼ‹Ò¹¢Ñ¹µÍ¹¹Õä» † è é é (3) ¨Ð»ÃÒ¡¯Ë¹ŒÒµ‹Ò§á¨Œ§Â×¹Âѹ¡ÒõԴµÑ§â»Ãá¡ÃÁ ¤ÅÔ¡»ØÁ Next à¾×͵ͺµ¡Å§ é † è
  • 31. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 31 (4) ˹ŒÒµ‹Ò§á¨Œ§ÅÔ¢ÊÔ·¸«Í¿µáÇÏ»ÃÒ¡¯¢Ö¹ ¤ÅÔ¡ I agree à¾×͵ͺÃѺ ¨Ò¡¹Ñ¹¤ÅÔ¡»ØÁ Next é è é † (5) ˹ŒÒµ‹Ò§á¨Œ§Ê¶Ò¹Ð¡ÒõԴµÑ§â»Ãá¡ÃÁ»ÃÒ¡¯¢Ö¹ Ãͨ¹¡Ãзѧ¡ÒõԴµÑ§àÊÃç¨ÊÁºÙó é é è é ¨Ò¡¹Ñ¹Ë¹ŒÒµ‹Ò§á¨Œ§¡ÒõԴµÑ§â»Ãá¡ÃÁàÊÃç¨ÊÁºÙó ¨Ð»ÃÒ¡¯¢Ö¹ ãˌ¤ÅÔ¡»ØÁ Close à¾×Í»´ é é é † è ˹ŒÒµ‹Ò§¹Õé ໚¹ÍѹàĘ̂ÊÔ¹¢Ñ¹µÍ¹¡ÒõԴµÑ§â»Ãá¡ÃÁ PICkit2TM Programming Software é é é
  • 32. 32 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 1.5.2 ¡ÒÃàª×ÍÁµ‹Íà¾×Í·´Åͧ·Ò§ÎÒÏ´áÇÏ è è (1) àÃÔÁµŒ¹´ŒÇ¡Òõ‹ÍÊÒ USB ÃÐËNjҧ PX-200 ¡Ñº¾Íϵ USB ¢Í§¤ÍÁ¾ÔÇàµÍÏ ¨Ò¡¹Ñ¹ è é ແ´â»Ãá¡ÃÁ Pickit2TM Programming Software â´ÂàÅ×Í¡·Õè Start à All programs à Microchip à Pickit 2 V201 (àÅ¢àÇÍϪ¹ÍÒ¨à»ÅÕ¹á»Å§ä´ŒµÒÁ¡ÒûÃѺ»ÃاŋÒÊØ´) ã¹ÃÙ»·Õè 1-2 áÊ´§Ë¹ŒÒµ‹Ò§ Ñ è ËÅÑ¡¢Í§â»Ãá¡ÃÁ Pickit2TM Programming Software àÁ¹Ù¤ÒÊѧ í è ¡Ãͺ Configuration ᶺáÊ´§¡Ò÷íÒ§Ò¹ ª‹Í§áÊ´§Ê¶Ò¹Ð »ØÁª‹ÇÂ㹡Òà † ᨌ § ·Õè Á Ңͧ ·íÒ§Ò¹ ä¿Å .hex ·ÕúèÑ Ë¹ŒÒµ‹Ò§ºÑ¿à¿ÍÏ¢ÍÁÙŢͧ˹‹Ç¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ Œ ࢌÒÁÒà¡çºänj㹠ºÑ¿à¿ÍÏ »ØÁª‹ÇÂ㹡Òà † ·íÒ§Ò¹ ˹ŒÒµ‹Ò§ºÑ¿à¿ÍÏ¢ÍÁÙŢͧ˹‹Ç¤ÇÒÁ¨íÒÍÕ;ÃÍÁ Œ Õ ÃÙ»·Õè 1-2 ˹ŒÒµ‹Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Pickiit2TM Programming Software
  • 33. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 33 (2) µ‹ÍÊÒ ICD ÃÐËNjҧºÍÏ´â»Ãá¡ÃÁ PX-200 ¡ÑººÍϴ໇ÒËÁÒÂËÃ×ͺÍÏ´·´Åͧ (2.1) ¡Ã³Õ㪌¡ººÍÏ´·´Åͧ NX-877 plusII Ñ µ‹Í¾Íϵ USB àª×ÍÁµ‹Í¡Ñ¹´ŒÇÂÊÒ ICD2 è ¨‹ÒÂä¿àÅÕ§ é ¡´ÊÇÔµªàÅ×Í¡âËÁ´ â»Ãá¡ÃÁ (ä¿ÊÕá´§µÔ´ÊNjҧ) ¾×¹·ÕÊÒËÃѺµ‹Íǧ¨Ã·´Åͧ é è í (2.1) ¡Ã³Õ㪌¡ººÍÏ´¤Çº¤ØÁËع¹µ RBX-877 Rev.2007) Ñ ‹ ºÍÏ´â»Ãá¡ÃÁ PIC ÊÒ ICD2 Sound 4.8-6V LCD RC0 BATT RC7 RC6 RC4 RC3 RxD TxD SDA SCL DOWNLOAD LCD back ICD2 light POWER ON ON Robo - PICARRobotR PICRMicroRobotic RESET µ‹Í¡Ñº¾Íϵ USB M-1 M-2 ¢Í§¤ÍÁ¾ÔÇàµÍÏ RB3 #3 #2 #1 RA4 RB0 SERVO RB0/INT RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 S+ ÊíÒËÃѺâ»Ãá¡ÃÁµÑÇÍ‹ҧ LED_Blinking ·ÕÁÒ¨Ò¡µÑÇÍ‹ҧã¹â¿Åà´ÍÏ C:Program è FilesMikroelektronikamikroCExamplesEasyPic4P16F877ALED_Blinking ÁÕ¡ÒáíÒ˹´¡Òõ‹Í ǧ¨ÃäÁ‹µÃ§¡ÑººÍÏ´ RBX-877 Rev.2007 ´Ñ§¹Ñ¹ã¹¡Ò÷´Êͺ¹Õ¨Ð͌ҧ¶Ö§ºÍÏ´·´Åͧ NX-877 plus é é II ໚¹ËÅÑ¡ ÊíÒËÃѺµÑÇÍ‹ҧ¡Ò÷´Êͺ¡ÑººÍÏ´ RBX-877 Rev.200 ´ÙÃÒÂÅÐàÍÕ´à¾ÔÁàµÔÁã¹Ë¹Ñ§Ê×Í è àÃÕ¹ÃÙáÅÐÊÌҧËع¹µÍµâ¹Áѵ¡ºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC «Ö§¨Ñ´ÁÒã¹Ø´Ëع¹µ Robo-PICA Œ ‹ Ñ ÔÑ è ‹
  • 34. 34 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é (3) ¨Ò¡¹Ñ鹫ͿµáÇϨеÃǨÊͺ¡ÒÃàª×èÍÁµ‹ÍáÅÐàºÍϢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ·Õèàª×èÍÁµ‹Í´ŒÇÂÍ‹ҧÍѵâ¹ÁÑµÔ áŌǨÐᨌ§àºÍÏ·èÕ¾ºº¹Ë¹ŒÒµ‹Ò§¢Í§â»Ãá¡ÃÁ (4) àÅ×Í¡ä¿Å .hex ·Õ赌ͧ¡ÒÃâ»Ãá¡ÃÁ â´Âä»·ÕèàÁ¹Ù File àÅ×Í¡ Import Hex ¨ÐÁÕ˹ŒÒµ‹Ò§ ÊíÒËÃѺແ´ä¿Å *.hex ·Õ赌ͧ¡ÒÃâ»Ãá¡ÃÁŧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ ã¹·Õè¹ÕéàÅ×Í¡ä»·Õè C:Program FilesMikroelektronikamikroCExamplesEasyPic4P16F877ALED_Blinking àÅ× Í ¡ä¿Å ª×è Í LED_Blinking.hex (5) ¤ÅÔ¡»ØÁ Write à¾×Í´ÒǹâËÅ´â»Ãá¡ÃÁä»ÂѧºÍÏ´äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC † è (6) µ‹Íǧ¨Ãâ´Âµ‹Í¢Ò¾Íϵ C ã´æ ࢌҡѺ LED +5V 11 32 C6 +5V 0.1 F 50V 1+! 21+$.&%% R5 4k7 1 MCLR LED SW2 R6 1k RCx 4-5-6 12 R1 390 31 13 XTAL1 14 20MHz C2 C3 22pF 22pF (7) ¡Ã³Õ㪌ºÍÏ´ NX-877 plus II ËÅѧ¨Ò¡â»Ãá¡ÃÁáÅŒÇ ãˌ¡´ÊÇÔµª MODE ÁÒã¹âËÁ´ Run áŌǡ´ÊÇÔµª RESET äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ¨ÐàÃÔÁ·íÒ§Ò¹ LED ·ÕµÍÍÂ٨еԴ¡Ð¾ÃԺ͋ҧµ‹Íà¹×ͧ è è‹ ‹ è INNOVATIVE EXPERIMENT
  • 35. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 35 º··Õè 2 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àº×ͧµŒ¹ é ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍÏ ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ´ŒÇ mikroC ¨ÐµŒÍ§ÊÌҧä¿Åã¹Åѡɳмѧ§Ò¹ËÃ×Íä¿Åâ»Ãà¨ç¡µ (project) «Ö§ÁÕ¢¹µÍ¹·ÕäÁ‹Â§ÂÒ¡ à¹×ͧ¨Ò¡ mikroC ÁÕà¤Ã×ͧÁ×Í·ÕªÇÂʹѺʹع¡ÒÃÊÌҧä¿Å áÅÐÅ´ÀÒÃÐ è Ñé è ؋ è è è‹ ã¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁáÅСÒÃàª×ÍÁâ§ä¿Å è 2.1 ¡ÒÃÊÌҧä¿Åâ»Ãà¨ç¡µ ÁÕ¢Ñ鹵͹â´ÂÊÃØ»´Ñ§¹Õé (1) ແ´â»Ãá¡ÃÁ mikroC ä»·Õàè Á¹Ù Project àÅ×Í¡¤íÒÊѧ New Project ¨Ð»ÃÒ¡¯Ë¹ŒÒµ‹Ò§ è ¡ÒÃÊÌҧ Project ¢Ö¹ÁҴѧÃÙ» é ¡íÒ˹´ª×Íâ»Ãà¨ç¡µ è ¡íÒ˹´µíÒá˹‹§â¿Åà´ÍÏ ÃÒÂÅÐàÍÕ´â»Ãà¨ç¡µ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ·àÅ×͡㪌 Õè ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò è Ñ ª‹Í§¡íÒ˹´¤‹Ò¤Ø³Åѡɳзҧ ÎÒÏ´áÇÏËÃ×ͤ͹¿¡àêѹ Ù è
  • 36. 36 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ¡ÒáíÒ˹´¤‹Òµ‹Ò§æ ã¹Ë¹ŒÒµ‹Ò§ New Project ÁÕ´§¹Õé Ñ (1.1) Project Name ໚¹¡ÒáíÒ˹´ª×Íä¿Åâ»Ãà¨ç¡µáÅЪ×Í«ÍÏÊâ»Ãá¡ÃÁ è è ÀÒÉÒ C ´ŒÇ â´Âä¿Åâ»Ãà¨ç¡µÁ¹ÒÁÊ¡ÅØ໚¹ .ppc ʋǹä¿Å«ÍÏÊâ»Ãá¡ÃÁÁÕ¹ÒÁÊ¡ØÅ໚¹ .c ã¹·Õè Õ ¹Õ¡Ò˹´ª×ÍÇ‹Ò Project01 éí è (1.2) Project Path ໚¹¡ÒáíÒ˹´µíÒá˹‹§â¿Åà´ÍϷ㪌à¡çºä¿Åâ»Ãà¨ç¡µ èÕ áÅЫÍÏÊâ»Ãá¡ÃÁ ã¹·Õ¹¡Ò˹´µíÒá˹‹§änj·Õè 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) ¡ÒáíÒ˹´¤‹ÒàËŋҹբ¹ÍÂÙ¡ºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏᵋÅеÑÇ ÃÒÂÅÐàÍÕ´à¾ÔÁ é Öé ‹ Ñ è àµÔÁÊÒÁÒöÈÖ¡ÉÒ䴌¨Ò¡´ÒµŒÒªÕµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏàºÍϹ¹ æ Ñé
  • 37. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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 è Ñ
  • 39. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 1 0 ¶Ö§ 255 signed char 1 -128 ¶Ö§ 127 short ËÃ×Í signed short int 1 -128 ¶Ö§ 127 unsigned shortËÃ×Í unsigned short int 1 0 ¶Ö§ 255 intËÃ×Í signed int 2 -32,768 ¶Ö§ 32,767 unsigned ËÃ×Í unsigned int 2 0 ¶Ö§ 65,535 longËÃ×Í signed long int 4 -2,147,483,648 ¶Ö§ 2,147,483,647 unsigned long ËÃ×Í unsigned long int 4 0 ¶Ö§ 4,294,967,295 µÒÃÒ§·Õè 2-1áÊ´§ª¹Ô´¢Í§µÑÇá»ÃẺ¨íҹǹàµçÁ
  • 40. 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 亵 áÅÐÁÕ¢¹Ò´ª‹Ç§µÑÇàÅ¢µÑ§áµ‹ 1.17549435082 x 10-38 ¶Ö§ í é 6.80564774407 x 1038 ´Ñ§¹Ñ¹µÑÇá»ÃẺµÑÇàÅ¢·È¹ÔÂÁÍÒ¨¨Ð㪌ªÍ Float à¾Õ§Í‹ҧà´ÕÂÇ¡ç䴌 é ×è
  • 41. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 41 2.5 ª¹Ô´¢Í§µÑÇá»Ã 2.5.1 µÑÇá»ÃẺNjҧ (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][0] A[0][1] A[0][2] A[0][3] A[1][0] 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 ÁÔµÔ (¤) ÍÐàÏ 3 ÁÔµÔ ÃÙ»·Õè 2-1 áÊ´§ÃٻẺ¢Í§ÍÐàÏ 1, 2 áÅÐ 3 ÁÔµÔ
  • 42. 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 } } ¨Ò¡µÑÇÍ‹ҧâ»Ãá¡ÃÁ â»Ãá¡ÃÁ¨Ð¨Í§¾×¹·ÕÊÒËÃѺà¡çº¢ŒÍÁÙÅänj 9 µíÒá˹‹§ ÊíÒËÃѺµÑÇá»Ã digit áÅŒÇ é èí 㪌¤ÒÊѧ for à¾×ÍǹÅÙ»¨íҹǹ 9 ¤Ãѧà¾×Í»‡Í¹¤‹Ò 0xFF ãˌ¡ºÊÁÒªÔ¡¢Í§µÑÇá»ÃÍÐàÏ·§ËÁ´ í è è é è Ñ éÑ 2.5.2.1 ¡ÒáíÒ˹´¤‹ÒàÃÔÁµŒ¹ãˌ¡ºµÑÇá»ÃÍÐàÏ è Ñ mikroC ¨ÐÂÍÁãˌ»‡Í¹¤‹Ò¢ŒÍÁÙÅ䴌·Ñ¹·ÕàÁ×èÍÁÕ¡ÒûÃСÒȤ‹ÒµÑÇá»Ã¤ÃÑé§áá ¹Í¡¨Ò¡¹Õé¡Òà »ÃСÒȤ‹ÒµÑÇá»ÃÍÒ¨¨Ð¨Í§¾×¹·Õ˹‹Ç¤ÇÒÁ¨íÒ´ŒÇ¡ÒÃÃкآ¹Ò´Å§ä»â´ÂµÃ§ËÃ×Íànj¹Ç‹Ò§änj¡ä´Œ é è ç ´Ñ§µÑÇÍ‹ҧµ‹Í仹Õé µÑÇÍ‹ҧ·Õè 2-4 char digit[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; ໚¹¡ÒÃà¡çº¤‹Ò¢ŒÍÁÙŢͧ LED µÑÇàÅ¢ 7 ʋǹänj·µÇá»Ã digit ·ÕÁ¡ÒÃÊíÒÃͧ¾×¹·Õänj 10 áÍ´à´ÃÊ Õè Ñ è Õ é è char digit[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; ໚¹¡ÒûÃСÒȵÑÇá»Ãà¾×Íà¡çº¤‹Ò¢ŒÍÁÙŢͧ LED µÑÇàÅ¢ 7 ʋǹänj·µÇá»Ã digit ઋ¹¡Ñ¹ ᵋǸ¹äÁ‹ÁÕ è Õè Ñ Ô Õ Õé ¡ÒÃÃкآ¹Ò´¢Í§¾×¹·Õè ÊíÒËÃѺ¼Å¡Ò÷íÒ§Ò¹¹Ñ¹àËÁ×͹¡Ñ¹·Ø¡»ÃСÒà é é
  • 43. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 44 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é µÑÇÍ‹ҧ·Õè 2-6 char *DAT ; // ¡íÒ˹´¤‹ÒµÑÇá»Ã໚¹µÑÇá»ÃẺ¾ÍÂàµÍÏ void main() { PORTB = 0 ; // ¡íÒ˹´¤‹ÒÃÕ¨ÊàµÍÏ PORTB = 0 Ô PORTC = 0 ; // ¡íÒ˹´¤‹ÒÃÕ¨ÊàµÍÏ PORTC = 0 Ô DAT = &PORTB ; // µÑÇá»Ã DAT à¡çº¤‹ÒáÍ´à´Ãʢͧ PORTB «Ö§à·‹Ò¡Ñº 0x06 è *DAT = 0x90 ; // ʋ§¤‹Ò¢ŒÍÁÙÅä»ÂѧÃÕ¨ÊàµÍÏ·¶¡ªÕ´ÇµÑÇá»Ã DAT (PORTB = 0x90) Ô Õè Ù é Œ DAT = DAT++ ; // à¾ÔÁ¤‹ÒµÑǪբÍÁÙÅ ·íÒãˌ¤Ò¢Í§µÑÇá»Ã DAT ෋ҡѺ 0x07 è éŒ ‹ *DAT = 0x80; // ʋ§¤‹Ò¢ŒÍÁÙÅä»ÂѧÃÕ¨ÊàµÍÏ·ª´ÇµÑÇá»Ã DAT (PORTC = 0x80) Ô Õè Õé Œ } ¨Ò¡â»Ãá¡ÃÁµÑÇÍ‹ҧ·Õè 2-6 ÊÒÁÒö¹íÒÁÒµÃǨÊͺà¾×ʹټšÒ÷íÒ§Ò¹¢Í§µÑÇá»Ã¾Í¹àµÍÏ è ´ŒÇ¡ÒëÔÁàÙ ÅàµÍÏËÃ×Í¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹º¹«Í¿µáÇÏ mikroC IDE 䴌 â´ÂÁÕ¢¹µÍ¹´Ñ§¹Õé Ñé (1) ແ´â»Ãá¡ÃÁ mikroC ÊÌҧâ»Ãà¨ç¡µªÍ Test_Pointer àÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹àºÍÏ ×è PIC16F887 ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz ¨Ò¡¹Ñ¹¤ÅÔ¡»ØÁ èÑ é † à¾×ÍàÅ×Í¡¤‹Ò¤Í¹¿¡à»š¹¤‹Ò è Áҵðҹ
  • 45. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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 ¤ÍÁä¾àÅÍÏÂÍÁãˌ¼ãªŒ§Ò¹ÊÒÁÒöࢌҶ֧ÃÕ¨ÊàµÍϵҧæ ã¹ÃдѺºÔµä´Œ â´Â㪌 . (¨Ø´) ٌ Ô ‹ ¤Ñ¹ÃÐËNjҧ¢ŒÍÁÙÅáŌǵÒÁ´ŒÇ Fn «Ö§ n ËÁÒ¶֧ºÔµ·ÕµÍ§¡ÒÃࢌҶ֧ Áդҵѧᵋ 0 ¶Ö§ 7 è è èŒ ‹ é ¶ŒÒµŒÍ§¡ÒáíÒ˹´ãˌ ºÔµ 0 ¢Í§ÃÕ¨ÊàµÍÏ PORTC ÁÕ¤Ò෋ҡѺ 1 à¢Õ¹䴌໚¹ Ô ‹ PORTC.F0 = 1 ; ¡ÒõÃǨÊͺ¤‹Ò ¨Ò¡ºÔµ 1 ¢Í§ÃÕ¨ÊàµÍÏ PORTC NjÒÁÕ¤Ò෋ҡѺ 1 ËÃ×ÍäÁ‹ ¶ŒÒ㪋 ãˌ PORTB Ô ‹ ºÔµ 0 ෋ҡѺ 0 à¢Õ¹䴌໚¹ if (PORTC.F1 == 1) PORTB.F0 = 0 ; ¹Í¡¨Ò¡¹ÕÊÒËÃѺÃÕ¨ÊàµÍÏÊҤѭ¼Ù㪌§Ò¹ÊÒÁÒöÃкتͧ͢ºÔµ¹Ñ¹æ 䴌àÅ (´ÙÃÒÂÅÐàÍÕ´ é í Ô í Œ ×è é à·Õºà¤Õ§䴌¨Ò¡´ÒµŒÒªÕµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC àºÍϹ¹ æ ) ઋ¹ Ñé INTCON.TMR0IF = 0; ໚¹¡ÒÃà¤ÅÕÂÏá¿Å¡ÍÔ¹àµÍÏûµ¨Ò¡ä·àÁÍÏ 0 Ñ ADCON0.Go=1; ໚¹¡ÒÃàÃÔÁµŒ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅ è Ô
  • 47. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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” èŒ è
  • 49. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 49 µÑÇÍ‹ҧ·Õè 2-9 void main(){ TRISB = 0x00 ; // Set PORTB ==> OUTPUT while (1){ // Loop PORTB = (PORTB ^ 0xFF) ; // Toggle PORTB delay_ms(500); // 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 ; // Clear PORTB TRISB = 0x00 ; // Set PORTB ==> OUTPUT while (1) // Loop { PORTB = (~PORTB) ; // Toggle PORTB delay_ms(500); // Call Delay 500 ms } } â»Ãá¡ÃÁ¹Õ¨Ð·íҧҹ䴌ઋ¹à´ÕÂǡѺ¤íÒÊѧ XOR â´Â¨Ð͋ҹ¤‹Ò¨Ò¡ PORTB ÍÍ¡ÁÒáŌǡÅѺÅͨԡãˌ é è ʶҹÐ໚¹µÃ§¡Ñ¹¢ŒÒÁ áŌÇʋ§¡ÅѺä»áÊ´§¼Å·Õè PORTB ÍÕ¡¤Ãѧé
  • 50. 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 ºÔµ ÊÒÁÒöµÃǨÊͺ è è é ¡Ò÷íҧҹ䴌 â´Â㪌¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹
  • 51. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 51 2.9 ¤íÒÊѧ¡ÒáÃзíÒ·Ò§Åͨԡ è ¤íÒÊÑ觷Õè㪌¡ÃзíÒ·Ò§Åͨԡ¹Ñ鹨Ð㪌áÊ´§¼ÅÅѾ¸¢Í§¡ÒáÃзíÒÍÍ¡ÁÒNjÒ໚¹¨ÃÔ§ËÃ×Íà·ç¨ ËÃ×Í໚¹ “0” ËÃ×ÍäÁ‹ãª‹ “0” ෋ҹѹ â´ÂäÁ‹Ê¹ã¨¤‹Ò¢Í§¼ÅÅѾ¸·ä´Œ¨Ò¡¡ÒáÃзíÒ·Ò§Åͨԡ¹Ñ¹ æ é Õè é äÁ‹àËÁ×͹¡Ñº¡ÒèѴ¡ÒâŒÍÁÙÅÃдѺºÔµ â´Â¤íÒÊѧ·Õ㪌¡º¡ÒáÃзíÒ·Ò§Åͨԡ»ÃСͺ仴ŒÇ¤íÒÊѧ è è Ñ è ´Ñ§¹Õé && ( Logical AND) ãˌ¼ÅÅѾ¸à»š¹¨ÃÔ§ àÁ×Íà§×͹䢷չÒÁÒµÃǨÊͺ໚¹¨ÃÔ§·Ñ§¤Ù‹ è è è í é || (Logical OR) ãˌ¼ÅÅѾ¸à»š¹¨ÃÔ§àÁ×èÍà§×è͹ä¢ã´à§×è͹ä¢Ë¹Öè§à»š¹¨ÃÔ§ ! (Logical Not) ãˌ¼ÅÅѾ¸à»š¹¨ÃÔ§àÁ×Íà§×͹ä¢à»š¹à·ç¨ áÅÐ è è ãˌ¼ÅÅѾ¸à»š¹à·ç¨àÁ×èÍà§×è͹ä¢à»š¹¨ÃÔ§ == ෋ҡѺ != äÁ‹à·‹Ò¡Ñº > ÁÒ¡¡Ç‹Ò < ¹ŒÍÂ¡Ç‹Ò >= ÁÒ¡¡Ç‹ÒËÃ×Í෋ҡѺ <= ¹ŒÍ¡NjÒËÃ×Í෋ҡѺ µÑÇÍ‹ҧ·Õè 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. 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·Ò§¤³ÔµÈÒʵÏàÍÒänjÍ‹ҧ¤Ãº¶ŒÇ¹ ·Ñé§ÃٻẺ¢Í§ ¤íÒÊѧ»¡µÔÊÒËÃѺ¡Òúǡ ź ¤Ù³ ËÒà áÅ¡ª¹¾ÔàÈÉ·Ò§µÃÕ⡳ÁÔµÔ ´Ñ§¹Õé è í Ñè + ¤íÒÊѧºÇ¡ ( 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 ໚¹µÑÇá»ÃẺ char ¼ÅÅѾ¸Á¤Ò෋ҡѺ 5 Õ ‹ value = 12.5 / 2.3; // ¡Ã³Õ·Õè value ໚¹µÑÇá»ÃẺ float ¼ÅÅѾ¸Á¤Ò෋ҡѺ 5.43478 Õ ‹ value = 12 % 4 ; // ¼ÅÅѾ¸·ä´Œ¤Í 0 à¹×ͧ¨Ò¡ 12 ËÒôŒÇ 4 áŌÇäÁ‹àËÅ×ÍàÈÉ Õè × è value = 14 % 5; // ¼ÅÅѾ¸·ä´Œ¤Í 4 Õè × value = -14 % 5; // ¼ÅÅѾ¸·ä´Œ¤Í -4 à¹×ͧ¨Ò¡¤‹Òà¤Ã×ͧËÁÒ¨ФԴ¨Ò¡µÑǵѧàÊÁÍ Õè × è è é
  • 53. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 53 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
  • 54. 54 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 55. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 55 º··Õè 3 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×͵Դµ‹Í¾Íϵ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏã¹Í¹Ø¡ÃÁ PIC16F8xx ÁÕ¾Íϵãˌ㪌§Ò¹µÑ§áµ‹ 3 ¶Ö§ 5 ¾Íϵ ¨íҹǹ 20 é ¶Ö§ 35 ºÔµ ¢Ö¹ÍÂÙ¡ºàºÍϢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ ´ŒÇ¤ÇÒÁÊÒÁÒö¢Í§¾Íϵ㹠PIC16F8xx ·ÕÊÒÁÒö é ‹Ñ è ·íҧҹ䴌ËÅÒÂÍ‹ҧ ¨Ö§¨íÒ໚¹Í‹ҧÂÔ§·Õ¼ãªŒ§Ò¹µŒÍ§·íÒ¤ÇÒÁࢌÒ㨶֧â¤Ã§ÊÌҧ·Ò§ÎÒÏ´áÇÏáÅСÒà è è ٌ ¡íÒ˹´ËÃ×ÍàÅ×Í¡¿˜§¡ª¹¡Ò÷íÒ§Ò¹ãˌᡋ¢Ò¾ÍϵᵋÅТҴŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ ·Ñ§¹Õàé ¾×Íãˌ Ñè é è ÊÒÁÒö㪌§Ò¹¾Íϵ·Ñ§ËÁ´¢Í§ PIC16F87x 䴌Í‹ҧÁÕ»ÃÐÊÔ·¸ÔÀÒ¾ÊÙ§ÊØ´ é 3.1 ¤ÇÒÁÊÒÁÒö㹡Òè‹Ò¡ÃÐáʢͧ¢Ò¾Íϵ ¤ÇÒÁÊÒÁÒö㹡Òè‹Ò¡ÃÐáÊàÍÒµ¾µ¢Í§¢Ò¾Íϵ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F8xx ·Õä¿ Ø è àÅÕ§ +5V ¤×Í 25mA µ‹Í¢Ò·Ñ§¡ÃÐáÊ«Ô§¡áÅСÃÐáÊ«ÍÃÊ ã¹¢³Ð·Õ¡ÃÐáÊàÍÒµ¾µÃÇÁ·Ñ§ËÁ´¶Ù¡¨íÒ¡Ñ´ é é è Ø é änj·Õè 200mA ´Ñ§¹Ñ¹ã¹¡ÒÃÍ͡Ẻà¾×͢ѺâËÅ´·Ò§àÍÒµ¾µ¢Í§¢Ò¾ÍϵäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC é è Ø µŒÍ§ÃÐÇѧàÃ×ͧ¡ÃÐáÊàÍÒµ¾µÃÇÁ·ÕäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÊÒÁÒö¢Ñºä´Œ´Ç ã¹ÃÙ»·Õè 3-1 áÊ´§¡Òà è Ø è Œ ¢ÑºâËÅ´·Ñé§áºº¡ÃÐáÊ«Ô§¡áÅЫÍÃÊ +5V Isink R1 PIC16F8xx PIC16F8xx LED1 R1 PB1 PB1 Isource LED1 (¡) ¡ÒâѺâËÅ´·Ò§¾ÍϵàÍÒµ¾µ Ø (¢) ¡ÒâѺâËÅ´·Ò§¾ÍϵàÍÒµ¾Øµ Ẻ¡ÃÐáÊ«Ô§¡ Ẻ¡ÃÐáÊ«ÍÃÊ ÃÙ»·Õè 3-1 ¡ÒâѺâËÅ´¢Í§¾ÍϵàÍÒµ¾µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC Ø
  • 56. 56 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é PORTC ºÔµ 7 4+ ºÔµ 6 ºÔµ 5 4+!  ºÔµ 4 4,  ºÔµ 3 ºÔµ 2 TRISC ºÔµ 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 Ô è í Ô Ñ
  • 57. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 57 ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ADCON1 ADFM ADCS2* - - PCFG3 PCFG2 PCFG1 PCFG0 R/W -0 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 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-3 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊàµÍÏ ADCON1 ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F874/877(A) (ÁÕµÍ) Ô ‹
  • 58. 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) (¨º) Ô
  • 59. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 59 ÃÕ¨ÊàµÍÏ ANSEL Ô à»š¹ÃÕ¨ÊàµÍÏàÅ×͡˹ŒÒ·Õ㹡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íϵ RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 NjҵŒÍ§¡ÒÃ Ô è ãˌ໚¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×ÍÍÔ¹¾ØµàÍÒµ¾µ´Ô¨µÍÅ â´Â¤‹ÒµÑ§µŒ¹¨Ð¡íÒ˹´ãˌ·Ò§Ò¹à»š¹ÍÔ¹¾ØµÍйÒÅÍ¡ Ø Ô é í ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 ºÔµ 7 ¶Ö§ 0 - ANS7 ¶Ö§ ANS0 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໚¹ÍÔ¹¾ØµÍйÒÅÍ¡ “0” = ¡íÒ˹´à»š¹¢Ò¾Íϵ´Ô¨µÍÅ â´ÂÊÒÁÒö¡íÒ˹´à»š¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ¾µ¡ç䴌 Ô Ø “1” = ¡íÒ˹´à»š¹¢Ò¾ÍϵÍÔ¹¾ØµÍйÒÅÍ¡ (໚¹¤‹ÒàÃÔÁµŒ¹àÁ×ÍÃÕ૵) è è àÁ×ÍàÅ×Í¡ãˌ¢ÒàËŋҹÕàé »š¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ð໚¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê‹Ç¹´Ô¨µÍŷѧËÁ´ ¹Í¡¨Ò¡ è Ô é ¹Ñ¹µŒÍ§¡íÒ˹´¤‹Ò¢Í§ÃÕ¨ÊàµÍÏ TRIS ãˌ໚¹ÍÔ¹¾Øµ´ŒÇ é Ô ÃÙ»·Õè 3-4 ÃÒÂÅÐàÍÕ´µíÒá˹‹§ºÔµ¢Í§ÃÕ¨ÊàµÍÏ ANSEL ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 Ô ÃÕ¨ÊàµÍÏ ANSELH Ô à»š¹ÃÕ¨ÊàµÍÏàÅ×͡˹ŒÒ·Õ㹡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íϵ RB0 ¶Ö§ RB5 NjҵŒÍ§¡ÒÃãˌ໚¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ Ô è ËÃ×ÍÍÔ¹¾ØµàÍÒµ¾µ´Ô¨µÍÅ â´Â¤‹ÒµÑ§µŒ¹¨Ð¡íÒ˹´ãˌ¢Ò¾ÍϵàËŋҹշҧҹ໚¹¢Ò¾ÍϵÍÔ¹¾ØµÍйÒÅÍ¡ Ø Ô é é í ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ANSELH - - ANS13 ANS12 ANS11 ANS10 ANS9 ANS8 . - - RB5 RB0 RB4 RB1 RB3 RB2 X -0 X -0 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 ºÔµ 7 áÅÐ 6 - äÁ‹ãªŒ§Ò¹ ͋ҹ¤‹Ò䴌໚¹ 0 ºÔµ 5 ¶Ö§ 0 - ANS13 ¶Ö§ ANS8 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໚¹ÍÔ¹¾ØµÍйÒÅÍ¡ª‹Í§ AN13 ¶Ö§ AN8 “0” = ¡íÒ˹´à»š¹¢Ò¾Íϵ´Ô¨µÍÅ â´ÂÊÒÁÒö¡íÒ˹´à»š¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ¾µ¡ç䴌 Ô Ø “1” = ¡íÒ˹´à»š¹¢Ò¾ÍϵÍÔ¹¾ØµÍйÒÅÍ¡ (໚¹¤‹ÒàÃÔÁµŒ¹àÁ×ÍÃÕ૵) è è àÁ×ÍàÅ×Í¡ãˌ¢ÒàËŋҹÕàé »š¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ð໚¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê‹Ç¹´Ô¨µÍŷѧËÁ´ ¹Í¡¨Ò¡ è Ô é ¹Ñ¹µŒÍ§¡íÒ˹´¤‹Ò¢Í§ÃÕ¨ÊàµÍÏ TRIS ãˌ໚¹ÍÔ¹¾Øµ´ŒÇ é Ô ÃÙ»·Õè 3-5 ÃÒÂÅÐàÍÕ´µíÒá˹‹§ºÔµ¢Í§ÃÕ¨ÊàµÍÏ ANSEL ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 Ô
  • 60. 60 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ÃÙ»·Õè 3-6 ǧ¨ÃÀÒÂ㹢ͧ¢Ò RA4 à·Õº¤ÇÒÁᵡµ‹Ò§¡Ñº¢ÒÍÔ¹¾ØµàÍÒµ¾µ¢ÒÍ×¹ æ Ø è 3.4 ¢Ò¾Íϵ RA4 : ¾ÍϵẺà´Ã¹à»´ (open drain) ¢Ò¾Íϵâ´Â·ÑÇ仢ͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 ¨Ð໚¹áºº¾Ùª¾ÙÅ ÊÒÁÒö¨‹Ò¡ÃÐáÊ è 䴌·§«Ô§¡áÅЫÍÃÊ Â¡ànj¹¢Ò RA4 ¨Ð໚¹¢ÒàÍÒµ¾µáººà´Ã¹à»´ ÊÒÁÒö¨‹Ò¡ÃÐáÊ«Ô§¡ä´Œà¾Õ§Í‹ҧ Ñé Ø à´ÕÂÇ෋ҹѹ ¶ŒÒµŒÍ§¡ÒÃãˌÁÅͨԡ “1” ¨ÐµŒÍ§µ‹ÍµÑǵŒÒ¹·Ò¹¾ÙÅÍѾãˌ¡º¢Ò¹Õé é Õ Ñ ã¹ÃÙ»·Õè 3-6 áÊ´§ÅѡɳÐǧ¨ÃÀÒÂ㹢ͧ¢Ò RA4 à·Õº¡Ñº¢Ò¾ÍϵÍ×¹ æ è
  • 61. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 61 »¯Ôºµ¡Ò÷Õè 1 ¢Ñº LED ·Õ¾Íϵ C Ñ Ô è ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l 㪌ǧ¨Ãã¹ÃÙ»·Õè L1-1 㹡Ò÷´Åͧ ÊÒÁÒö㪌äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏàºÍÏ PIC16F877 ËÃ×Í PIC16F887 ¡ç䴌 ᵋµÍ§àÅ×Í¡ãˌ¶¡µŒÍ§àÁ×Í·íÒ¡ÒÃÊÌҧä¿Åâ»Ãà¨ç¡µ´Ç Œ Ù è Œ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L1-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L1.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò´Ñ§¹Õé èÑ l ¡Ã³Õ㪌ºÍÏ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ +5V 11 R11 10k Vcc 1 MCLR RC7 26 SW1 RC6 25 Reset 24 RC5 RC4 23 18 RC3 RC2 17 RC1 16 15 RC0 21+$.&%% R1-R8 510 12 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L1-1 ǧ¨Ã·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¾ÍϵàÍÒµ¾µ´ŒÇÂâ»Ãá¡ÃÁÀÒÉÒ C â´Â㪌 mikroC ¤ÍÁä¾àÅÍÏ Ø
  • 62. 62 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é void main() { TRISC=0x00; // Set PORTC ==> output while(1) // loop { PORTC=0x00; // LED OFF Delay_ms(500); PORTC=0xFF; // LED ON Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´ãˌ¾Íϵ C ໚¹àÍÒµ¾µ â´Â¡Òû‡Í¹¤‹Ò 0 ãˌ¡º·Ø¡ºÔµ¢Í§ÃÕ¨ÊàµÍÏ TRISC ¨Ò¡¹Ñ¹ Ø Ñ Ô é »‡Í¹¤‹Ò 0x00 ãˌ¡º PORTC à¾×Íãˌ LED ·ÕµÍÍÂÙ¡º¾Íϵ C ·Ñ§ËÁ´´ÑºáÅÐ˹‹Ç§àÇÅÒ áŌǻ‡Í¹¤‹Ò FF Ñ è è ‹ ‹Ñ é à¾×Íãˌ LED ·Ñ§ËÁ´·ÕµÍÍÂÙ¡º¾Íϵ C µÔ´ÊNjҧ ·íÒÍ‹ҧ¹ÕÊÅѺ¡Ñ¹ä»Í‹ҧµ‹Íà¹×ͧ è é è ‹ ‹Ñ é è â»Ãá¡ÃÁ·Õè 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; // Set PORTC ==> output PORTC=0xAA; // Set Start LED while(1) // loop { PORTC=~PORTC; // Toggle Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ·íÒ§Ò¹àËÁ×͹¡Ñºâ»Ãá¡ÃÁ·Õè L1-1 à¾Õ§à»ÅÕ¹ÃٻẺ¡ÒÃÊÅѺ¤‹Ò´ŒÇ¡ÒÃ㪌¤ÒÊѧ NOT á·¹ è í è â»Ãá¡ÃÁ·Õè L1-1 ä¿Å PortTest02.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Í·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ è ¾ÍϵàÍÒµ¾µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877/887 Ø
  • 63. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 63 void main() { TRISC.F0=0; // RC0 ==> Output while(1) // Loop { PORTC.F0=1; // LED on Delay_ms(200); PORTC.F0=0; // LED off Delay_ms(200); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¨ÐÊѧãˌ LED ·Õºµ RC0 ¡Ð¾ÃÔºà¾Õ§ËÅÍ´à´ÕÂÇ é è è Ô â»Ãá¡ÃÁ·Õè L1-3 ä¿Å PortTest03.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Í·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ è ¾ÍϵàÍÒµ¾µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877/887 â´ÂàÅ×Í¡¾Íϵ·ÕµÍ§¡ÒâѺâËÅ´à¾Õ§ Ø è Œ ºÔµà´ÕÂÇ ¹Ñ¹¤×Í RC0 è ã¹ mikroC ¤ÍÁä¾àÅÍϼ㪌§Ò¹ÊÒÁÒöࢌҶ֧ÃÕ¨ÊàµÍϵҧæ ã¹ÃдѺºÔµä´Œ â´Â㪌 ٌ Ô ‹ à¤Ã×ͧËÁÒ . (¨Ø´) ¤Ñ¹ÃÐËNjҧ¢ŒÍÁÙÅáŌǵÒÁ´ŒÇ¿˜§¡ª¹ Fn â´Â·Õè n ËÁÒ¶֧ ºÔµ·ÕµÍ§¡Òà è è Ñè è Œ ࢌҶ֧ ÁÕ¤ÒÃÐËNjҧ 0 ¶Ö§ 7 ‹ L1.6 à¢Õ¹â»Ãá¡ÃÁãˌ LED ·ÕµÒá˹‹§ RC0 ¡Ð¾ÃÔºà¾Õ§ËÅÍ´à´ÕÂÇ â´Âà¢Õ¹â»Ãá¡ÃÁ䴌´§â»Ãá¡ÃÁ·Õè L1-3 è í Ñ ¡íÒ˹´ª×Íâ»Ãà¨ç¡µà»š¹ PortTest03.c ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è è L1.7 ÊíÒËÃѺâ»Ãá¡ÃÁ·Õè L1-4 ໚¹¡ÒâѺ LED ã¹ÃٻẺ·ÕËÅÒ¡ËÅÒÂÁÒ¡¢Ö¹ â´Â㪌¤ÒÊѧ·Ò§¤³ÔµÈÒʵÏáÅÐ è é í è Åͨԡ·Õè mikroC ¤ÍÁä¾àÅÍÏàµÃÕÂÁänjãˌ ãˌ·Ò¡ÒÃÊÌҧâ»Ãà¨ç¡µ PortTest04 áÅŒÇ áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C í µÒÁâ»Ãá¡ÃÁ·Õè L1-1 L1.8 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è
  • 64. 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
  • 65. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 11 R11 10k Vcc 1 MCLR RE2 10 SW1 RE1 9 Reset 8 +5V RE0 RA5 7 1k 6 510 RA4 RA4 RA3 5 LED1 RA2 4 3 RA1 2 RA0 R1-R8 21+$.&%% 510 12 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L2-1 ǧ¨ÃÊíÒËÃѺ¡Ò÷´Êͺ㪌§Ò¹¾Íϵ A áÅÐ E ໚¹¾ÍϵàÍÒµ¾µ Ø
  • 66. 66 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é int dat=0,dat1=0; void main() { ADCON1=0x07; // Set PORTA and PORTE ==> Digital TRISA=0x00; // PORTA ==> Output TRISE=0x00; // PORTE ==> Output PORTE=0x00; // OFF all LED PORTA=0x00; while(1) // Loop { Delay_ms(100); // Fast speed delay if (dat<64) // In Rang of PORTA { PORTA=dat; // Show data on PORTA dat++; // Increment Data } else { dat=0; // Overflow PORTA if (dat1<8) // Check data for PORTE { dat1++; PORTE=dat1; // Show data on PORTE } else dat1=0; // 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 ¨ÐäÁ‹ è é è µÔ´ÊNjҧà¹×ͧ¨Ò¡ PIC16F877 ¢Ò RA4 ໚¹¢ÒẺ¤ÍÅàÅç¡àµÍÏແ´ ¶ŒÒËÒ¡µŒÍ§¡ÒÃãˌ LED ·Õè RA4 µÔ´ÊNjҧ è ¨ÐµŒÍ§µ‹ÍµÑǵŒÒ¹·Ò¹¤‹Ò»ÃÐÁÒ³ 1k ¾ÙÅÍÑ»àÍÒänj à¾×Íãˌ䴌àÍÒµ¾µÅͨԡ “1” ´Ñ§ã¹Ç§¡ÅÁ¢Í§ÃÙ»·Õè L2-1 è Ø mikroC
  • 67. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 11 R11 10k Vcc 1 MCLR RB7 26 SW1 RB6 25 Reset 24 RB5 RB4 23 18 RB3 RB2 17 RB1 16 15 RB0 21+$.&&% 24 RA5 RA4 23 18 RA3 RA2 17 RA1 16 12 GND 15 RA0 R1-R14 OSC1 OSC2 510 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L3-1 ǧ¨Ã·´Êͺ㪌§Ò¹¾Íϵ A áÅÐ B ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 ໚¹¾ÍϵàÍÒµ¾µ Ø
  • 68. 68 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ¢Ñ鹵͹¡Ò÷´Åͧ L3.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò´Ñ§¹Õé èÑ l àÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F887 ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ L3.2 ÊÌҧâ»Ãà¨ç¡µªÍ PortTest887 áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L3-1 ×è L3.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L3.4 Ãѹâ»Ãá¡ÃÁ LED ¨ÐµÔ´ÊNjҧ¨Ò¡µÃ§¡ÅÒ§á¡ÍÍ¡ä»·Ò§´ŒÒ¹¢ŒÒ§·Ñ§Êͧ´ŒÒ¹áÅдѺ¨Ò¡µíÒá˹‹§µÃ§¡ÅÒ§ÍÍ¡ä» é ¨Ð¾ºÇ‹Ò·Õ¢Ò¾Íϵ 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
  • 69. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 69 »¯Ôºµ¡Ò÷Õè 4 ·´Êͺ͋ҹ¤‹Ò¨Ò¡ÊÇÔµª Ñ Ô ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è ã¹ÃÙ»·Õè L4-1 áÊ´§Ç§¨Ã¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 ·ÕÁ¡Òõ‹ÍÊÇÔµª¡´µÔ´»Å‹ÍÂ´Ñºà¢ŒÒ·Õ¢Ò è Õ è RA4 áÅÐ RB0 áÅÐÁÕ¡Òõ‹ÍµÑǵŒÒ¹·Ò¹¾ÙÅÍÑ»¤‹Ò 10k änjà¾×Í¡íÒ˹´ÊÀÒÇÐÅͨԡ “1” ã¹¢³Ð·ÕäÁ‹Á¡Òá´ è è ‹ Õ ÊÇÔµª àÁ×ÍÁÕ¡Òá´ÊÇÔµªà»ÅÕ¹ʶҹÐ໚¹Åͨԡ “0” ʋǹ·Õ¾Íϵ C ¶Ù¡¡íÒ˹´ãˌ໚¹¾ÍϵàÍÒµ¾µµ‹Í¡Ñº LED è è è Ø à¾×Í㪌áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹ è l 㪌ǧ¨Ãã¹ÃÙ»·Õè L4-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L4-1 ‹ +5V 11 32 C3 R10 R9 0.1 F 10k 10k Vcc R8 1 MCLR RC7 26 R7 SW1 RC6 25 RESET 24 R6 R11 RC5 10k R5 RC4 23 33 R4 RB0 18 RC3 S1 R3 RB0 RC2 17 R2 RC1 16 6 RA4 R1 15 RC0 S2 RA4 12 21+$.&%%) R1-R8 510 31 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L4-1 ǧ¨Ã·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¾ÍϵÍÔ¹¾ØµàÍÒµ¾µ´Ô¨µÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 Ø Ô ÀÒÂ㵌¡ÒäǺ¤ØÁ´ŒÇÂâ»Ãá¡ÃÁÀÒÉÒ C ·Õ㪌 mikroC ¤ÍÁä¾àÅÍÏ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ è
  • 70. 70 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é void main() { TRISC.F0=0; // RC0 ==> Output while(1) PORTC.F0=~PORTB.F0; // LED at RC0 On when key press } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´¢Ò RC0 ໚¹àÍÒµ¾µ ʋǹ¢Ò RB0 ·Õ㪌໚¹ÊÇÔµªà»š¹ÍÔ¹¾ØµÍÂÙáŌÇàÁ×ͨ‹ÒÂ俤Ãѧ Ø è ‹ è é áá ¨Ò¡¹Ñ¹à»š¹¡ÒÃǹÅÙ»à¾×͹íÒ¤‹Ò¨Ò¡¡Òá´ÊÇÔµª RB0 áÊ´§·Õè LED RC0 â´Â¨ÐáÊ´§´ŒÇ¡ÒáÅѺ¤‹Ò é è Åͨԡ à¾×Íãˌ¡´ÊÇÔµªáÅŒÇ LED µÔ´ÊNjҧ è â»Ãá¡ÃÁ·Õè 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 µÔ´ÊNjҧ è è è í L4.5 ÊÌҧâ»Ãà¨ç¡µªÍ BasicSwitch02 áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L4-2 ×è L4.6 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L4.7 Âѧ¤§ãªŒÇ§¨Ãã¹ÃÙ»·Õè L4-1 㹡Ò÷´Åͧ ¨Ò¡¹Ñ¹·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ ¡´ÊÇÔµª S1 ·ÕµÍ¡Ñº¢Ò¾Íϵ RB0 é è ‹ áÅÐ S2 ·ÕµÍ¡Ñº¾Íϵ RA4 Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ LED è ‹ àÁ×Í¡´ÊÇÔµª S1 ·Õ¾Íϵ RB0 ·íÒãˌ LED µÔ´ÊNjҧµÒÁ¤‹Ò¢Í§àÅ¢°Ò¹Êͧ â´Â¨Ðà¾ÔÁ¤‹Ò¢Ö¹àÁ×ÍÁÕ¡Òà è è è é è ¡´ÊÇÔµª S1 Í‹ҧµ‹Íà¹×ͧ è àÁ×Í¡´ÊÇÔµª S2 ·Õ¾Íϵ RA4 ·íÒãˌ LED µÔ´ÊNjҧµÒÁ¤‹Ò¢Í§àÅ¢°Ò¹Êͧ ᵋ¤Ò¨ÐŴŧ àÁ×ÍÁÕ¡Òà è è ‹ è ¡´ÊÇÔµª S2 Í‹ҧµ‹Íà¹×ͧ è
  • 71. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 71 void main() { TRISC=0x00; // All PORTC ==> Output while(1) { if (PORTB.F0==0) // Check SW at RB0 { PORTC++; Delay_ms(200); } // Increment PORTC if (PORTA.F4==0) // Check SW at RA4 { PORTC--; Delay_ms(200); } // Decrement PORTC } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õé¨Ð㪌¾Íϵ C ·Ñ駾Íϵà¾×èÍáÊ´§¼Å¢ŒÍÁÙÅ·Õè䴌¨Ò¡¡Òá´ÊÇÔµª â´Â¶ŒÒ¡´ÊÇÔµªµíÒá˹‹§ RB0 ¨Ð໚¹¡ÒÃà¾ÔÁ¤‹Ò¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍÏ ¾Íϵ C ᵋ¶Ò¡´ÊÇÔµª RA4 ¨Ð໚¹¡ÒÃÅ´¤‹Ò¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍϾÍϵ è Ô Œ Ô C ÃÐËNjҧ¡Òá´ÊÇÔµªáµ‹ÅФÃѧ¨ÐÁÕ¡ÒÃ˹‹Ç§àÇÅÒ 200 ÁÔÅÅÔǹҷÕà¾×ÍÅ´¼Å¨Ò¡Ë¹ŒÒÊÑÁ¼ÑʢͧÊÇÔµª ·Õ·Ò é Ô è è í ãˌà¡Ô´¤‹Ò¡´ÊÇÔµª«Ò¢Ö¹ËÅÒÂ æ ¤Ãѧ íé é é â»Ãá¡ÃÁ·Õè L4-2 ä¿Å BasicSwitch02.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍÏ à¾×Í·´Êͺ è ¡Ò÷íÒ§Ò¹¢Í§¾ÍϵÍÔ¹¾ØµàÍÒµ¾µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 â´Â¡íÒ˹´ãˌ¾Íϵ A Ø áÅÐ B ໚¹ÍÔ¹¾Øµ´Ô¨µÍŠʋǹ¾Íϵ C ໚¹àÍÒµ¾µ´Ô¨µÍÅ Ô Ø Ô INNOVATIVE EXPERIMENT
  • 72. 72 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 73. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 74 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 4.2 ¿˜§¡ª¹ Sound_Play Ñè ໚¹¿˜§¡ªÑ蹡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è void Sound_Play(unsigned freq_in_hz, unsigned duration_ms); ¾ÒÃÒÁÔàµÍÏ freq_in_hz ໚¹¤‹Ò¤ÇÒÁ¶Õ¢Í§¡ÒáíÒà¹Ô´àÊÕ§ ˹‹ÇÂ໚¹àÎÔõ« à¹×ͧ¨Ò¡à»š¹µÑÇá»ÃẺ è è unsigned ¨Ö§¡íÒ˹´¤‹Ò䴌µ§áµ‹ 0 ¶Ö§ 65535 â´Ââ»Ãá¡ÃÁäÁ‹á¨Œ§¢ŒÍ¼Ô´¾ÅҴᵋªÇ§¤ÇÒÁ¶Õ·ÊÌҧ䴌¨ÃÔ§¹Ñ¹ Ñé ‹ è Õè é ¤íҹdz䴌¨Ò¡ ¤‹Ò¤ÇÒÁ¶ÕʧÊØ´ = FOSC/(80x3) = FOSC/240 è Ù ¤‹Ò¤ÇÒÁ¶ÕµÒÊØ´ = 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)
  • 75. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 75 »¯Ôºµ¡Ò÷Õè 5 ¢ÑºàÊÕ§´ŒÇ¿˜§¡ª¹ Sound Ñ Ô Ñè ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L5-1 㹡Ò÷´Åͧ ÊÒÁÒö㪌äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏàºÍÏ PIC16F877 ËÃ×Í PIC16F887 ¡ç䴌 ᵋµÍ§àÅ×Í¡ãˌ¶¡µŒÍ§àÁ×Í·íÒ¡ÒÃÊÌҧä¿Åâ»Ãਵ硵´Ç Œ Ù è Œ 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 C1 R1 0.1 F 10k 32 11 VDD C2 1 MCLR 10 F 15 SW1 RC0 RESET 12 Vss SP1 31 PIEZO Vss +5V PIC16F887 12 2 AN0/RA0 RA0/AN0 31 13 14 CR1 Ceramic Resonator 20MHz ÃÙ»·Õè L5-1 ǧ¨Ãàª×ÍÁµ‹ÍÅíÒ⾧ໂÂ⫡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 (ËÃ×Í PIC16F877A) è à¾×Í·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¿˜§¡ª¹ Sound 㹡ÒáíÒà¹Ô´ÊÑ­­Ò³àÊÕ§¢ÑºÍÍ¡ÅíÒ⾧ è Ñè
  • 76. 76 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é void main() { Sound_Init(&PORTC,0); // Make pin RC0 ==> Speaker while(1) { Sound_Play(2000,1000); // Make 2kHz every 1 second Delay_ms(1000); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¡íÒ˹´µíÒá˹‹§¢Ò RC0 ໚¹¢ÒàÍÒµ¾µ·Õàè ª×ÍÁµ‹Í¡ÑºÅíÒ⾧ ¨Ò¡¹Ñ¹áÅзíÒ¡ÒÃǹÅٻʋ§àÊÕ§ Ø è é ¤ÇÒÁ¶Õè 2kHz ÍÍ¡ä»·Ø¡æ 1 ÇÔ¹Ò·Õ â»Ãá¡ÃÁ·Õè L5-1 ä¿Å SoundTest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC à¾×Í¡íÒà¹Ô´àÊÕ§¨Ò¡¢Ò¾Íϵ è PC0 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 ËÃ×Í PIC16F877A ¢ÑºÍÍ¡ÅíÒ⾧ L5.2 ÊÌҧä¿Åâ»Ãà¨ç¡µªÍ SoundTest áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L5-1 ×è L5.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L5.4 Ãѹâ»Ãá¡ÃÁ ¨Ð䴌¹àÊÕ§¤ÇÒÁ¶Õ¤Í¹¢ŒÒ§ÊÙ§ (à¹×ͧ¨Ò¡ÁÕ¤ÇÒÁ¶Õè 2kHz) ´Ñ§ÍÍ¡¨Ò¡ÅíÒ⾧ໂÂâ«à»š¹¨Ñ§ËÇÐã¹·Ø¡æ Ô è ‹ è 1 ÇÔ¹Ò·Õ L5.5 ·´Åͧᡌä¢â»Ãá¡ÃÁà¾×Íà»ÅÕ¹¤‹Ò¤ÇÒÁ¶Õ¢Í§ÊÑ­­Ò³àÊÕ§ â´Â¤ÇáíÒ˹´ãˌÁÂÒ¹¤ÇÒÁ¶ÕÃÐËNjҧ 1kHz è è è Ջ è ¶Ö§ 3kHz à¹×ͧ¨Ò¡ÅíÒ⾧·Õ㪌º¹ºÍÏ´ RBX-877 áÅÐ NX-877 ໚¹ÅíÒ⾧ໂÂâ«ÁÕ¤Ò¤ÇÒÁµŒÒ¹·Ò¹ 16 ¶Ö§ 32 è è ‹ ÊÒÁÒöµÍºÊ¹Í§ÊÑ­­Ò³Â‹Ò¹¤ÇÒÁ¶Õàè ÊÕ§㹪‹Ç§ 1kHz ¶Ö§ 3kHz ËÒ¡¤ÇÒÁ¶ÕʧËÃ×͵èҡNjҹÕé ÍÒ¨äÁ‹ä´ŒÂ¹ èÙ í Ô ËÃ×Í䴌¹àºÒŧ Ô INNOVATIVE EXPERIMENT
  • 77. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 78 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é E EIE E EIF IN T E R R U P T T 0IE T 0IF R B IE R B IF IN T E IN T F G IE ÃÙ»·Õè 5-1 á¹Ç¤Ô´ã¹¡ÒáíÒ˹´¤‹Òµ‹Ò§æ à¾×ÍÃͧÃѺ¡ÒÃà¡Ô´ÍÔ¹àµÍÏûµã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC è Ñ áºº¹Õé «Ö觵ÃǨÊͺ¨Ò¡ºÔµ INTE áÅÐÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏÃÑ»µÃÇÁ (GIE) änj ¡ç¨Ð·íÒà¡Ô´ ¡ÒÃÍÔ¹àµÍÏûµ¢¹ã¹Ãкº ´Ñ§áÊ´§ã¹ÃÙ»·Õè 5-1 ¹Ñ¹ËÁÒ¤ÇÒÁÇ‹Ò ¡ÒèСíÒ˹´ãˌà¡Ô´ÍÔ¹àµÍÏûµ Ñ Öé è Ñ ¢Ö¹ä´Œ µŒÍ§ÁÕ¡ÒÃàµÃÕÂÁ¡Òôѧ¹Õé é (1) àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµÃÇÁ â´Â¡ÒÃ૵ºÔµ GIE ã¹ÃÕ¨ÊàµÍÏ INTCON ËÒ¡ºÔµ¹ÕäÁ‹ÁÕ Ñ Ô é ¡ÒÃ૵ ¨ÐäÁ‹Á·Ò§à¡Ô´¡ÒÃÍÔ¹àµÍÏûµ¢¹ä´Œ áÁŒÇÒà§×͹ä¢ã¹¡ÒÃà¡Ô´ÍÔ¹àµÍÏûµ¢Í§áËŋ§¡íÒà¹Ô´ Õ Ñ éÖ ‹ è Ñ µ‹Ò§æ ¨Ð໚¹¨ÃÔ§ áÅÐÁÕ¡ÒÃàÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµáŌǡçµÒÁ Ñ (2) àÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµ Ñ (3) à¢Õ¹¿˜§¡ª¹ºÃÔ¡ÒÃÍÔ¹àµÍÏûµ ÊíÒËÃѺ mikroC ¡íÒ˹´ª×Íänj໚¹ void interrupt() èÑ Ñ è (4) ÃͤÍÂãˌà§×͹䢢ͧ¡ÒÃà¡Ô´ÍÔ¹àµÍÏûµã¹Åѡɳе‹Ò§æ à¡Ô´¢Ö¹ è Ñ é (5) àÁ×ͨº¢Ñ¹µÍ¹ã¹¿˜§¡ª¹ºÃÔ¡ÒÃÍÔ¹àµÍÏûµáŌǨеŒÍ§à¤ÅÕÂÏá¿Å¡ÍÔ¹àµÍÏûµ´Ç è é Ñ Ñ Ñ Œ 5.1 ÃÕ¨ÊàµÍÏ·àÕè ¡ÕÂÇ¢ŒÍ§¡Ñº¡ÒÃÍÔ¹àµÍÏûµ Ô è Ñ ÁÕ´Ç¡ѹ 5 µÑÇ ¤×Í Œ 1. INTCON ໚¹ÃÕ¨ÊàµÍϤǺ¤ØÁ¡ÒÃÍÔ¹àµÍÏûµËÅÑ¡ Ô Ñ 2. PIE1 ໚¹ÃÕ¨ÊàµÍÏàÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµ¨Ò¡ÍØ»¡Ã³à¾ÍÃÔà¿ÍÃÑÅ Ô Ñ 3. PIE2 ໚¹ÃÕ¨ÊàµÍÏàÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµ¨Ò¡ÍØ»¡Ã³à¾ÍÃÔà¿ÍÃÑŵÑÇ·Õè 2 Ô Ñ 4. PIR1 ໚¹ÃÕ¨ÊàµÍÏáÊ´§Ê¶Ò¹Ðà§×͹䢢ͧáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµ¨Ò¡ÍØ»¡Ã³ Ô è Ñ à¾ÍÃÔà¿ÍÃÑÅ·íҧҹËÇÁ¡Ñº PIE1 5. PIR2 ໚¹ÃÕ¨ÊàµÍÏáÊ´§Ê¶Ò¹Ðà§×͹䢢ͧáËŋ§¡íÒà¹Ô´ÍÔ¹àµÍÏûµ¨Ò¡ÍØ»¡Ã³ Ô è Ñ µ‹Í¾‹Ç§µÑÇ·Õè 2 ·íҧҹËÇÁ¡Ñº PIE2
  • 79. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 79 ÊíÒËÃѺÃÒÂÅÐàÍÕ´·Ñ§ËÁ´¢Í§ÃÕ¨ÊàµÍÏ·§ 5 µÑÇÁÕ´§¹Õé é Ô Ñé Ñ 5.1.1 ÃÕ¨ÊàµÍÏ INTCON Ô à»š¹ÃÕ¨ÊàµÍÏ·Á¹ÂÊíҤѭÊÙ§ÊØ´ÊíÒËÃѺ¡ÒÃÍÔ¹àµÍÏûµ ÊÒÁÒö͋ҹáÅÐà¢Õ¹䴌·¡ºÔµ 㪌àÍç¹ Ô Õè Õ Ñ Ñ Ø àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµÃÇÁáÅСÒÃÍÔ¹àµÍÏûµ¾¹°Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé Ñ Ñ ×é ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 INTCON 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 âÍàÇÍÏâ¿ÅÇ ·íÒãˌà¡Ô´ÍÔ¹àµÍÏûµËÒ¡àÍç¹àÍàºÔÅänj à¤ÅÕÂÏ·Ò§«Í¿µáÇÏ Ñ ºÔµ 1 - INTF (RB0/INT External Interrupt Flag bit) : ºÔµáÊ´§¡ÒÃÍÔ¹àµÍÏûµ¨Ò¡ÀÒ¹͡·Õ¢Ò RB0/INT Ñ è “0” - äÁ‹ÁÊ­­Ò³ÍÔ¹àµÍÏûµ¨Ò¡ÀÒ¹͡à¡Ô´¢Ö¹·Õ¢Ò RB0/INT Õ Ñ Ñ é è “1” - ÁÕÊ­­Ò³ÍÔ¹àµÍÏûµ¨Ò¡ÀÒ¹͡à¡Ô´¢Ö¹·Õ¢Ò RB0/INT ·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ ËÒ¡ Ñ Ñ é è Ñ ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj µŒÍ§à¤ÅÕÂÏ໚¹ “0” ´ŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ ºÔµ 0 - RBIF (Port B Chang Interrupt Flag bit) : ºÔµáÊ´§¡ÒÃà»ÅÕ¹á»Å§ÃдѺÅͨԡ·Õ¢Ò RB4-RB7 è è “0” - äÁ‹Á¡ÒÃà»ÅÕ¹á»Å§à¡Ô´¢Ö¹·Õ¢Ò RB4-RB7 Õ è é è “1” - ÁÕ¡ÒÃà»ÅÕ¹á»Å§ÃдѺÅͨԡà¡Ô´¢Ö¹·Õ¢Ò RB4-RB7 Í‹ҧ¹ŒÍ 1 ¢Ò ·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏ è é è ÃÑ»µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj µŒÍ§à¤ÅÕÂÏ໚¹ “0” ´ŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ
  • 80. 80 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 5.1.2 ÃÕ¨ÊàµÍÏ PIE1 Ô à»š¹ÃÕ¨ÔÊàµÍÏàÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÊÑ­­Ò³ÍÔ¹àµÍÏÃÑ»µ¨Ò¡ÍØ»¡Ã³µ‹Í¾‹Ç§ã¹áËŋ§µ‹Ò§æ ÊÒÁÒöࢌҶ֧à¾×Í͋ҹáÅÐà¢Õ¹䴌ã¹ÃдѺºÔµ ÁÕÃÒÂÅÐàÍÕ´¢Í§áµ‹ÅкԵ´Ñ§¹Õé è ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 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 - 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” ¨Ð໚¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅ è Ñ
  • 81. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 81 5.1.3 ÃÕ¨ÊàµÍÏ PIE2 Ô à»š¹ÃÕ¨ÔÊàµÍÏàÍç¹àÍàºÔÅáËŋ§¡íÒà¹Ô´ÊÑ­­Ò³ÍÔ¹àµÍÏÃÑ»µ¨Ò¡ÍØ»¡Ã³µ‹Í¾‹Ç§ã¹áËŋ§µ‹Ò§æ µÑÇ·Õè 2 ÊÒÁÒöࢌҶ֧à¾×Í͋ҹáÅÐà¢Õ¹䴌ã¹ÃдѺºÔµ ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé è ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 PIE2 - CMIE - EEIE BCLIE - - CCP2IE R/W -0 R/W -0 R/W -0 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. 82 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 5.1.4 ÃÕ¨ÊàµÍÏ PIR1 Ô à»š¹ÃÕ¨ÊàµÍÏáÊ´§Ê¶Ò¹Ðà§×͹䢡ÒÃà¡Ô´ÍÔ¹àµÍÏûµà¹×ͧ¨Ò¡ÍØ»¡Ã³µÍ¾‹Ç§ ·íҧҹËÇÁ¡Ñº Ô è Ñ è ‹ ÃÕ¨ÊàµÍÏ PIE1 àÁ×Íà§×͹䢢ͧ¡ÒÃÍÔ¹àµÍÏûµà»š¹¨ÃÔ§ ¨Ð૵ºÔµÊ¶Ò¹Ðã¹ÃÕ¨ÊàµÍÏ PIR1 ¨Ò¡¹Ñ¹ Ô è è Ñ Ô é µÃǨÊͺNjÒÁÕ¡ÒÃàÍç¹àÍ--àºÔÅ¡ÒÃÍÔ¹àµÍÏûµ¹¹æ ·ÕèÊàµÍÏ PIE1 ËÃ×ÍäÁ‹ ¶ŒÒÁÕ¡¨ÐµÃǨÊÍºÇ‹Ò ºÔµ Ñ Ñé è Õ Ô ç PEIE áÅÐ GIE ã¹ÃÕ¨ÊàµÍÏ INTCON ૵änj·§¤ÙËÃ×ÍäÁ‹ ¶ŒÒËҡ૵änj ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ¢¹ Ô Ñé ‹ Ñ Öé Í‹ҧÊÁºÙó ÊÒÁÒö͋ҹáÅÐà¢Õ¹䴌·¡ºÔµÂ¡ànj¹ºÔµ 4 áÅÐ 5 (ºÔµ TXIF áÅÐ RCIF) ·ÕÍҹ䴌 Ø è‹ Í‹ҧà´ÕÂÇ ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF R/W -0 R/W -0 R -0 R -0 R/W -0 R/W -0 R/W -0 R/W -0 ºÔµ 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 Njҧ Ñ “1” - ºÑ¿à¿ÍϵÇÃѺ¢Í§Ç§¨Ã USART àµçÁ à¡Ô´¡ÒÃÃѺ¢ŒÍÁÙÅÊÁºÙó Ñ ºÔµ 4 - TXIF (USART Transmit Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃʋ§¢ŒÍÁÙŢͧâÁ´ÙÅ USART “0” - ºÑ¿à¿ÍϵÇʋ§¢Í§Ç§¨Ã USART àµçÁ ÂѧäÁ‹à¡Ô´¡ÒÃʋ§¢ŒÍÁÙÅ Ñ “1” - ºÑ¿à¿ÍϵÇʋ§¢Í§Ç§¨Ã USART Njҧ áÊ´§Ç‹Ò¡ÒÃʋ§¢ŒÍÁÙÅÊÁºÙó ·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏ Ñ ÃÑ»µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj ºÔµ 3 - SSPIF (Synchronous Serial Port (SSP) Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SSP “0” - äÁ‹ÁàÕ §×͹ä¢ã´ã¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP ·Õ·Òãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏûµà»š¹¨ÃÔ§ è è í Ñ “1” - ÁÕà§×è͹䢷Õè·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏÃÑ»µ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SSP ໚¹¨ÃÔ§ ·íÒãˌà¡Ô´ ÍÔ¹àµÍÏûµ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj à§×͹䢷Õàè »š¹¨ÃÔ§¢Í§¡Ò÷íҧҹᵋÅÐâËÁ´¤×Í Ñ è âËÁ´ SPI à¡Ô´¡ÒÃÃѺËÃ×Íʋ§¢ŒÍÁÙŢֹ͋ҧÊÁºÙó é
  • 83. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 83 âËÁ´ I2C ÁÒÊàµÍÏ - à¡Ô´¡ÒÃÃѺËÃ×Íʋ§¢ŒÍÁÙŢֹ͋ҧÊÁºÙó é - à¡Ô´Ê¶Ò¹ÐàÃÔÁµŒ¹¢Ö¹Í‹ҧÊÁºÙ󏺹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP è é - à¡Ô´Ê¶Ò¹ÐËÂØ´¢Ö¹Í‹ҧÊÁºÙ󏺹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP é - à¡Ô´Ê¶Ò¹ÐàÃÔÁµŒ¹«éҢֹ͋ҧÊÁºÙ󏺹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP è í é - à¡Ô´Ê¶Ò¹ÐÃѺÃٌ (acknowledge) ¢Ö¹Í‹ҧÊÁºÙ󏺹ºÑÊ I2C â´ÂâÁ´ÙÅ SSP é - à¡Ô´Ê¶Ò¹ÐàÃÔÁµŒ¹¢Ö¹ã¹¢³Ð·ÕâÁ´ÙÅ SSP ÍÂÙã¹ÊÀÒÇÐNjҧËÃ×ÍäÍà´ÔÅ (idle) è é è ‹ ¡Ã³ÕÊÌҧ໚¹ÃкºÁÑŵÔÁÒÊàµÍÏ - à¡Ô´Ê¶Ò¹ÐËÂØ´¢Ö¹ã¹¢³Ð·ÕâÁ´ÙÅ SSP ÍÂÙã¹ÊÀÒÇÐNjҧËÃ×ÍäÍà´ÔÅ (idle) ¡Ã³Õ é è ‹ ÊÌҧ໚¹ÃкºÁÑŵÔÁÒÊàµÍÏ âËÁ´ I2C ÊàÅ¿ à¡Ô´¡ÒÃÃѺËÃ×Íʋ§¢ŒÍÁÙŢֹ͋ҧÊÁºÙó é ºÔµ 2 - CCP1IF (CCP1 Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP1 ÊÒÁÒöẋ§á¡µÒÁâËÁ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ CCP1 䴌´§¹Õé Ñ âËÁ´µÃǨ¨ÑºÊÑ­­Ò³ËÃ×Í᤻à¨ÍÏ (capture mode) “0” - äÁ‹Á¡ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹·ÕèÊàµÍÏ TMR1 Õ é èÕÔ “1” - ÁÕ¡ÒõÃǨ¨ÑºÊÑ­­Ò³à¡Ô´¢Ö¹·ÕèÊàµÍÏ TMR1 ·íÒãˌà¡Ô´ÍÔ¹àµÍÏûµä´Œ ËÒ¡àÍç¹àÍàºÔÅ é èÕÔ Ñ änj µŒÍ§à¤ÅÕÂÏ໚¹ “0” ´ŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ âËÁ´à»ÃÕºà·ÕºÊÑ­­Ò³ (compare mode) “0” - ¡ÒÃà»ÃÕºà·Õº¢ŒÍÁÙÅ·ÕèÊàµÍÏ TMR1 äÁ‹à·‹Ò¡Ñ¹ËÃ×ÍäÁ‹àËÁ×͹¡Ñ¹ èÕÔ “1” - ¡ÒÃà»ÃÕ Â ºà·Õ  º¢Œ Í ÁÙ Å ·Õè ÃÕ ¨Ô Ê àµÍÏ TMR1 ෋ Ò ¡Ñ ¹ ËÃ× Í àËÁ× Í ¹¡Ñ ¹ ·í Ò ãˌ à ¡Ô ´ ¡Òà ÍÔ¹àµÍÏûµä´Œ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj µŒÍ§à¤ÅÕÂÏ໚¹ “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) ෋ҡѹ ·íÒãˌà¡Ô´ÍÔ¹àµÍÏûµ Ô Ñ ä´Œ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj µŒÍ§à¤ÅÕÂÏ໚¹ “0” ´ŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ ºÔµ 0 - TMR1IF (TMR1 Overflow Interrupt Flag bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃà¡Ô´âÍàÇÍÏâ¿ÅǢͧä·àÁÍÏ 1 “0” - ä·àÁÍÏ 1 äÁ‹à¡Ô´âÍàÇÍÏâ¿ÅÇ “1” - ä·àÁÍÏ 1 à¡Ô´âÍàÇÍÏâ¿ÅÇ ·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏûµä´Œ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj µŒÍ§à¤ÅÕÂÏ Ñ à»š¹ “0” ´ŒÇ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ
  • 84. 84 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 5.1.5 ÃÕ¨ÊàµÍÏ PIR2 Ô à»š¹ÃÕ¨ÊàµÍÏáÊ´§Ê¶Ò¹Ðà§×͹䢡ÒÃà¡Ô´ÍÔ¹àµÍÏûµà¹×ͧ¨Ò¡ÍØ»¡Ã³à¾ÍÃÔà¿ÍÃÑŵÑÇ·Õè 2 ·íÒ§Ò¹ Ô è Ñ è ËÇÁ¡ÑºÃÕ¨ÊàµÍÏ PIE2 àÁ×Íà§×͹䢢ͧ¡ÒÃÍÔ¹àµÍÏûµà»š¹¨ÃÔ§ ¨Ð૵ºÔµÊ¶Ò¹Ðã¹ÃÕ¨ÊàµÍÏ PIR2 Ô è è Ñ Ô ¨Ò¡¹Ñ¹µÃǨÊͺNjÒÁÕ¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµ¹¹æ ·ÕèÊàµÍÏ PIE2 ËÃ×ÍäÁ‹ ¶ŒÒÁÕ¡¨ÐµÃǨÊͺ é Ñ éÑ èÕÔ ç Ç‹Ò ºÔµ PEIE áÅÐ GIE ã¹ÃÕ¨ÊàµÍÏ INTCON ૵änj·§¤ÙËÃ×ÍäÁ‹ ¶ŒÒËҡ૵änj ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ¢¹ Ô Ñé ‹ Ñ Öé ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 PIR2 - CMIF - EEIF BCLIF - - CCP2IF R/W -0 R/W -0 R/W -0 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 Õ é
  • 85. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 11 32 C3 R10 R9 0.1 F 10k 10k Vcc R8 1 MCLR RC7 26 R7 SW1 RC6 25 RESET R6 24 R11 RC5 10k R5 RC4 23 33 R4 RB0 18 RC3 S1 R3 RB0 RC2 17 R2 RC1 16 6 RA4 R1 15 RC0 S2 RA4 12 21+$.&%%) R1-R8 510 31 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L6-1 ǧ¨Ã·´Êͺ¡ÒÃÍÔ¹àµÍÏûµ¨Ò¡ÀÒ¹͡¼‹Ò¹·Ò§¢Ò RB0/INT ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ Ñ PIC16F877 ÀÒÂ㵌¡ÒäǺ¤ØÁ´ŒÇÂâ»Ãá¡ÃÁÀÒÉÒ C ·Õ㪌 mikroC ¤ÍÁä¾àÅÍÏ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ è
  • 86. 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() // Interrupt Service Routine { for(i=0;i<10;i++) // Blinking LED when interrupt { PORTC=0xFF; Delay_ms(100); PORTC=0x00; Delay_ms(100); } INTCON.INTF=0; // Clear Interrupt flag } void main() // Main program { TRISC=0x00; // PORTC ==> Output INTCON.INTF=0; // Clear Interrupt flag before use INTCON.INTE=1; // Enable interrupt from INT/RB0 Pin INTCON.GIE=1; // Enable Global interrupt while(1) // Main program { PORTC=0x55; // Running LED Delay_ms(200); PORTC=0xAA; Delay_ms(200); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÃÔèÁµŒ¹â»Ãá¡ÃÁ´ŒÇ¿˜§¡ªÑè¹ interrupt «Öè§àÁ×èÍà¡Ô´ÍÔ¹àµÍÏûµâ»Ãá¡ÃÁ¨Ð¡ÃÐâ´´ÁÒ·íÒ§Ò¹·Õè¹Õè·Ñ¹·Õ Ñ â´Ââ»Ãá¡ÃÁã¹Ê‹Ç¹¹Õ¨Ð໚¹¡ÒáоÃÔº LED ¤¹ÅÐÃٻẺ¡Ñºâ»Ãá¡ÃÁËÅÑ¡ áÅÐàÁ×ͨº§Ò¹ã¹Ê‹Ç¹ºÃÔ¡Òà é è ÍÔ¹àµÍÏûµáŌǨеŒÍ§à¤ÅÕÂÏá¿Å¡ÍÔ¹àµÍÏûµ¡Í¹ÍÍ¡¨Ò¡ÍÔ¹àµÍÏûµàÊÁÍ ÊíÒËÃѺâ»Ãá¡ÃÁËÅÑ¡ ¨ÐàÃÔÁ Ñ Ñ ‹ Ñ è ¨Ò¡¡ÒÃà¤ÅÕÂÏá¿Å¡ÍÔ¹àµÍÏûµ ¨Ò¡¹Ñ¹àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµ¨Ò¡¢Ò INT áÅÐàÍç¹àÍàºÔÅÍÔ¹àµÍÏûµ Ñ é Ñ Ñ ÃÇÁ ¡‹Í¹ä»Ç¹ÅÙ»·íÒ§Ò¹»¡µÔ Ãͨ¹¡Ç‹Ò¨Ðà¡Ô´ÍÔ¹àµÍÏûµ Ñ â»Ãá¡ÃÁ·Õè L6-1 ä¿Å BasicInterrupt.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC ¤ÍÁä¾àÅÍÏà¾×Í è ·´Êͺ¡ÒÃÍÔ¹àµÍÏûµ¨Ò¡ÀÒ¹͡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877(A) Ñ INNOVATIVE EXPERIMENT
  • 87. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 88 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 6.1 ¢ÒÊÑ­­Ò³¢Í§âÁ´ÙÅ LCD ¢Ò·Õè 1 GND µ‹Íŧ¡ÃÒÇ´ ¢Ò·Õè 2 +V µ‹ÍࢌҡѺä¿àÅÕ§ +5V é ¢Ò·Õè 3 Vo ໚¹¢ÒÃѺÍÔ¹¾Øµáç´Ñ¹à¾×èÍ»ÃѺ¤ÇÒÁÊNjҧ ¢Ò·Õè 4 RS ໚¹¢ÒÍÔ¹¾Øµà¾×èÍᡪ¹Ô´¢Í§¢ŒÍÁÙŤíÒÊÑè§ËÃ×Í¢ŒÍÁÙÅáÊ´§¼Å ¶ŒÒ¢Ò¹Õàé »š¹ “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.1 F 50V +5V 1+! JP1 21+$.&&% BACK LIGHT R13 ON 16 47 BLA 21 4 RD2 RS DSP1 1 +5V +V RD3 22 6 E LCD 16x2 3 Vo R5 D7 D6 D5 D4 D3 D2 D1 D0 R/W BLK GND VR1 4k7 10k 1 14 13 12 11 10 9 8 7 5 15 2 MCLR 30 BRIGHTNESS R6 RD7 SW2 1k RESET 29 RD6 28 RD5 27 RD4 12 31 13 14 CR1 Ceramic Resonator 20MHz ÃÙ»·Õè 6-2 áÊ´§¡ÒÃàª×ÍÁµ‹ÍâÁ´ÙÅ LCD º¹ºÍÏ´ RBX-877 Rev.2007 «Ö§µÃ§¡Ñº¿˜§¡ª¹ Lcd_Init() è è Ñè
  • 89. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 â´Â¡íÒ˹´µíÒá˹‹§¢Òµ‹Ò§ æ Ñè è Ñ àÍÒänjáÅŒÇ ¡ÒûÃѺà»ÅÕ¹¤‹Ò»ÃѺà»ÅÕ¹䴌੾ÒеíÒá˹‹§¾Íϵ·Õ㪌àª×ÍÁµ‹Í෋ҹѹ â´ÂÃÒÂÅÐàÍÕ´ è è è è é µíÒá˹‹§¢Ò·Õ㪌àª×ÍÁµ‹ÍÃÐËNjҧâÁ´ÙÅ 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. 90 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 6.2.1.2 ¿˜§¡ª¹ Lcd_Config Ñè ¡íÒ˹´µíÒá˹‹§¾ÍϵáÅеíÒá˹‹§¢Òµ‹Ò§æ ·Õè㪌àª×èÍÁµ‹Í¡ÑºâÁ´ÙÅ LCD ¾ÃŒÍÁ·Ñ駡íÒ˹´ ¿˜§¡ª¹¡Ò÷íÒ§Ò¹¾×¹°Ò¹ãˌ¡ºâÁ´ÙÅ LCD â´ÂµíÒá˹‹§¢Ò·Ñ§ËÁ´·Õ¡Ò˹´ÊÒÁÒöàÅ×͡䴌Í‹ҧ Ñè é Ñ é èí ÍÔÊÃРᵋÁàÕ §×͹ä¢Ç‹Ò µŒÍ§ÁÒ¨Ò¡¾Íϵà´ÕÂǡѹ «Ö§áµ¡µ‹Ò§¨Ò¡¿˜§¡ª¹ Lcd_Init() ·Õè¡íÒ˹´¢Ò è è Ñè ¾ÍϵänjáŌÇᵋáá ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è 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 µÒÁÅíҴѺ
  • 91. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃкØè *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ŒÍ¤ÇÒÁ·ÕµÍ§¡ÒùíÒä»áÊ´§¼Å è Œ µÑÇÍ‹ҧ·Õè 6-3 Lcd_Out(1, 3, “Hello!”); ໚¹¡ÒÃʋ§¢ŒÍ¤ÇÒÁ Hello ÍÍ¡ä»áÊ´§¼Å·Õ¨Í LCD 㹺Ã÷Ѵ·Õè 1 àÃÔÁ·ÕµÒá˹‹§µÑÇÍÑ¡ÉõÑÇ·Õè 3 è è è í Hello
  • 92. 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃÐºØ è character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵·µÍ§¡ÒùíÒä»áÊ´§ Õè Œ µÑÇÍ‹ҧ·Õè 6-4 char i ; void main() { i = 0x30 ; // Start i with 0x20 in ASCII TRISC = 0; // PORTC is output Lcd_Init(&PORTC); // Initial default on PORTC do { Lcd_Chr(1,1,i); // show i on LCD
  • 93. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 93 i++ ; // Increment i delay_ms(500); } 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 ; // Start i with 0x20 in ASCII TRISD = 0; // PORTD is output Lcd_Init(&PORTD); // Initial default on PORTD Lcd_Cmd(LCD_SHIFT_RIGHT); do { Lcd_Chr_Cp(i); // show i on LCD i++ ; // Increment i delay_ms(500); } while(i < 0x3f) ; // Loop Until I more than 0x3F } ¨Ò¡µÑÇÍ‹ҧ·íҧҹ䴌ઋ¹à´ÕÂǡѺ¤íÒÊѧ LCD_Chr ᵋ¨ÐàËç¹Ç‹Ò àÁ×ÍàÅ×͹à¤ÍÏà«ÍϵÇÍÑ¡É÷ÕÍÂÙº¹ è è è Ñ è ‹ ˹ŒÒ¨ÍâÁ´ÙÅ LCD ¡ç¨ÐàÃÕ§µ‹Íà¹×ͧ¡Ñ¹ä´Œ ´Ñ§ÃÙ» è 01234567890:;<= >
  • 94. 94 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 6.2.2.5 ¿˜§¡ª¹ Lcd_Cmd Ñè ໚¹¤íÒÊѧà¾×ͤǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ‹Ò§æ ÃÒÂÅÐàÍÕ´¢Í§¤íÒÊѧµ‹Ò§ æ áÊ´§ è è è ã¹µÒÃÒ§µ‹Í仹Õé ª×èͤíÒÊÑè§ ÃÒÂÅÐàÍÕ´ LCD_FIRST_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·èÕ 1 LCD_SECOND_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·èÕ 1 LCD_THIRD_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·èÕ 1 LCD_FOURTH_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·èÕ 1 LCD_CLEAR à¤ÅÕÂÏ˹ŒÒ¨Í LCD_RETURN_HOME ä»ÂѧµíÒá˹‹§àÃÔèÁµŒ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ŒÍÁÙÅã¹ RAM äÁ‹à»ÅÕè¹ LCD_CURSOR_OFF »´¡ÒÃáÊ´§¼Åà¤ÍÏà«ÍÏ LCD_UNDERLINE_ON áÊ´§à¤ÍÏà«ÍÏ ໚¹àʌ¹ªÔ´¢ÍºÅ‹Ò§¤ŒÒ§änj LCD_BLINK_CURSOR_ON áÊ´§à¤ÍÏà«ÍÏẺ¡Ð¾ÃÔº LCD_MOVE_CURSOR_LEFT àÅ×è͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_MOVE_CURSOR_RIGHT àÅ×è͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹¢ÇÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_TURN_ON ແ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_TURN_OFF »´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_SHIFT_LEFT Shift àÅ×è͹¢ŒÍÁÙÅä»·Ò§«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_SHIFT_RIGHT àÅ×è͹¢ŒÍÁÙÅä»·Ò§¢ÇÒ ¢ŒÍÁÙÅã¹Ë¹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è void Lcd_Cmd(unsigned short command); ¾ÒÃÒÁÔàµÍÏ Command ËÁÒ¶֧ ¤íÒÊѧà¾×ÍÊѧ§Ò¹ãˌâÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ‹Ò§ æ è è è
  • 95. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 95 »¯Ôºµ¡Ò÷Õè 7 ʋ§¢ŒÍÁÙÅáÊ´§¼Å·ÕâÁ´ÙÅ LCD Ñ Ô è â´Â㪌¿§¡ª¹ Lcd ˜ Ñè ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L7-1 㹡Ò÷´Åͧ ÊÒÁÒö㪌äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏàºÍÏ PIC16F877 ËÃ×Í PIC16F887 ¡ç䴌 ᵋµÍ§àÅ×Í¡ãˌ¶¡µŒÍ§àÁ×Í·íÒ¡ÒÃÊÌҧä¿Åâ»Ãà¨ç¡µ´Ç Œ Ù è Œ l Ëҡ㪌ºÍÏ´ RBX-877 Rev.2007 ÊÒÁÒö·´Åͧ䴌àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹àºÍÏ PIC16F887 l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L7-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L7.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ LDCtest01 áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L7-1 L7.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L7.4 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ŒÍ¤ÇÒÁº¹¨ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ·Ñ§ 2 ºÃ÷Ѵã¹ÃٻẺµ‹Ò§æ ËÅÒ¡ËÅÒ é äÁ‹ÇÒ¨Ð໚¹¡ÒÃແ´»´Ë¹ŒÒ¨Í àÅ×͹¢ŒÍÁÙÅ àÅ×͹à¤ÍÏà«ÍÏ áÊ´§¢ŒÍÁŵÑÇÍÑ¡Éà áÊ´§¢ŒÍÁÙŵÑÇàÅ¢ ‹ è è +5V 11 32 C6 0.1 F 50V +5V 1+! JP1 21+$.&&% BACK LIGHT R13 ON 16 47 BLA RD2 21 4 RS DSP1 1 +5V +V RD3 22 6 E LCD 16x2 3 Vo R5 D7 D6 D5 D4 D3 D2 D1 D0 R/W BLK GND VR1 4k7 10k 1 14 13 12 11 10 9 8 7 5 15 2 MCLR 30 BRIGHTNESS R6 RD7 SW2 1k 4-5-6 29 RD6 28 RD5 27 RD4 12 31 13 14 CR1 Ceramic Resonator 20MHz ÃÙ»·Õè L7-1 ǧ¨Ã·´ÅͧáÊ´§¼Åº¹âÁ´ÙÅ LCD ´ŒÇ¿˜§¡ª¹ Lcd ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ Ñè
  • 96. 96 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é char *text1 = "Innovative"; char *text2 = "Experiment"; char txt[4]; char i; void main() { Delay_ms(1000); // Start up Dalay TRISD =0x00; // PORTD ==> OUTPUT for LCD Lcd_init(&PORTD); // Initialize LCD connected to PORTD Lcd_Cmd(LCD_CURSOR_OFF) ; // Turn cursor off for (i=0;i<4;i++) // Blink lcd { Lcd_Cmd(LCD_CLEAR); // Clear display Delay_ms(500); Lcd_Out(1, 3, text1); // Print text to LCD, 2nd row, 1st column Lcd_Out(2, 3, text2); // Print text to LCD, 2nd row, 1st column Delay_ms(1000); } for (i=0;i<11;i++) // Shift data left { Lcd_Cmd(LCD_SHIFT_LEFT); Delay_ms(200); } for (i=0;i<11;i++) // Shift data right { Lcd_Cmd(LCD_SHIFT_RIGHT); Delay_ms(200); } for (i=0;i<4;i++) // blink lcd { Lcd_Cmd(LCD_CLEAR); // Clear display Delay_ms(300); Lcd_Out(1, 3, text1); // Print text to LCD, 2nd row, 1st column Lcd_Out(2, 3, text2); // Print text to LCD, 2nd row, 1st column Delay_ms(300); } Lcd_Cmd(LCD_CLEAR); // Clear Screen i=0; while(1) { i++; // Increment Lcd_Out(1,1,"Counter "); // Show text ByteToStr(i,txt); // Convert Data to String Lcd_Out_cp(txt); // Chow Lcd at cursor Delay_ms(400); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ 1. ˹‹Ç§àÇÅÒ 1 ÇÔ¹Ò·Õ áŌǡíÒ˹´ãˌ¾Íϵ D ໚¹àÍÒµ¾µ à¾×͵Դµ‹Í¡ÑºâÁ´ÙÅ LCD Ø è 2. ¡íÒ˹´¤‹ÒàÃÔÁµŒ¹ãˌ¡ºâÁ´ÙÅ LCD áÅеѧ¤‹Òãˌ»´¡ÒÃáÊ´§¼Å¢Í§à¤ÍÏà«ÍÏ è Ñ é  3. ǹÅÙ» 4 Ãͺà¾×ÍáÊ´§¢ŒÍ¤ÇÒÁ·ÕâÁ´ÙÅ LCD ¼Ù㪌§Ò¹¨ÐàËç¹¢ŒÍ¤ÇÒÁ·ÕâÁ´ÙÅ LCD µÔ´¡Ð¾ÃÔº è è Œ è 4. ǹÅÙ»à¾×ÍàÅ×͹¢ŒÍ¤ÇÒÁä»·Ò§«ŒÒ áŌÇÊѧàÅ×͹¢ŒÍ¤ÇÒÁ¡ÅѺÁÒÍÕ¡¤Ãѧ ¨Ò¡¹Ñ¹Êѧ¡Ð¾ÃÔº¢ŒÍ¤ÇÒÁ è è è è é é è 5. ǹÅÙ»¹íÒ¤‹ÒµÑǹѺ·ÕÁÒáÊ´§·ÕâÁ´ÙÅ LCD à¾×ÍãˌàËç¹Ç‹ÒâÁ´ÙÅ LCD ÊÒÁÒöáÊ´§¤‹ÒµÑÇàŢ䴌ᵋ¨ÐµŒÍ§ è è è à»ÅÕ¹¤‹ÒµÑÇàÅ¢ãˌÍÂÙã¹ÃÙ»¢Í§ÃËÑÊáÍʡա͹ â´Â㪌¿§¡ª¹ ByteToStr è ‹ é‹ ˜ Ñè â»Ãá¡ÃÁ·Õè L7-1 áÊ´§¡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹ÃٻẺµ‹Ò§æ mikroC
  • 97. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 0.1 F 2 +Vcc R1 50V 10k 32 11 DSP1 3 VR1 LCD module 16x2 Vo 10k 1 MCLR 8DD BRIGHTNESS 1 GND SW1 1+ D7 D6 D5 D4 D3 D2 D1 D0 R/W RS E RESET 21+$.&%% 14 13 12 11 10 9 8 7 5 4 6 12 8ss 30 31 RD7 8ss 29 RD6 28 RD5 27 RD4 22 RD3 21 RD2 20 RD1 19 RD0 RC0 15 17 RC2 18 RC3 OSC1 OSC2 4 5 22pF XTAL 22pF 20MHz ÃÙ»·Õè 6-3 áÊ´§¡ÒÃàª×ÍÁµ‹ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ¡ÑºâÁ´ÙÅ LCD Ẻ 8 ºÔµ è
  • 98. 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
  • 99. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); ¾ÒÃÒÁÔàµÍÏ *ctrlport 㪌¡Ò˹´¾Íϵ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍϷ㪌àª×ÍÁµ‹Í¡Ñº¢Ò¤Çº¤ØÁ¢Í§âÁ´ÙÅ LCD «Ö§ í Õè è è ÁÕ¡ÒáíÒ˹´µíÒá˹‹§änj´§¹Õé Ñ ¢Ò E ¢Í§âÁ´ÙÅ LCD µ‹Í¡Ñº¢Ò¾Íϵ¤Çº¤ØÁºÔµ 6 ¢Ò RS ¢Í§âÁ´ÙÅ LCD µ‹Í¡Ñº¢Ò¾Íϵ¤Çº¤ØÁºÔµ 4 ¢Ò R/W ¢Í§âÁ´ÙÅ LCD µ‹Í¡Ñº¢Ò¾Íϵ¤Çº¤ØÁºÔµ 5 *dataport 㪌¡Ò˹´¾ÍϵÊíÒËÃѺ¢Ò¢ŒÍÁÙÅ â´ÂÁÕ¡ÒáíÒ˹´¡ÒÃàª×ÍÁµ‹Íänj´§¹Õé í è Ñ ¢Ò 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. 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃкØè *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ŒÍ¤ÇÒÁ·ÕµÍ§¡ÒùíÒä»áÊ´§¼Å è Œ µÑÇÍ‹ҧ·Õè 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 ã¹µíÒá˹‹§à¤ÍÏà«ÍÏ»¨¨Øº¹ è ˜ Ñ
  • 101. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃÐºØ è character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵·µÍ§¡ÒùíÒä»áÊ´§¼Å Õè Œ µÑÇÍ‹ҧ·Õè 6-8 char i=0x30; // Start String 0 void main() { Delay_ms(1000); // Start up Delay Lcd8_Init(&PORTC,&PORTD); // E => RC6 : RS => RC4 : R/W => RC5 while(i<0x3A) // Loop until i > 9 { Lcd8_Chr(1,5,i); // Show i => LCD Delay_ms(1000); i++; // Increment i } } ¨Ò¡µÑÇÍ‹ҧ໚¹¡ÒùíÒ¤‹Ò i ä»áÊ´§¼Å·ÕâÁ´ÙÅ LCD â´ÂÁÕ¡ÒÃà¾ÔÁ¤‹Ò¢Í§µÑÇá»Ã i ¨Ò¡ 0x30 仨¹ è è ¶Ö§¤‹Ò 0x39 ʋǹµíÒá˹‹§¡ÒÃáÊ´§¼Å¨Ð¤§·ÕÍÂÙ·á¶Ç·Õè 1 ¤ÍÅÑÁ¹·èÕ 5 è ‹ Õè 0
  • 102. 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; // Start String 0 void main() { Delay_ms(1000); // Start up Delay Lcd8_Init(&PORTC,&PORTD); // E=RC6:RS=RC4 while(i<0x40) // Loop until 16 character { Lcd8_Chr_Cp(i); // Show i => LCD Delay_ms(1000); i++; // Increment i } } ¨Ò¡µÑÇÍ‹ҧ·íҧҹ䴌ઋ¹à´ÕÂǡѺ¤íÒÊѧ LCD8_Chr àÁ×ÍàÅ×͹à¤ÍÏà«ÍÏ µÑÇÍÑ¡É÷ÕÍÂÙº¹¨ÍáÊ´§¼Å è è è è ‹ ¡ç¨ÐàÃÕ§µ‹Íà¹×ͧ¡Ñ¹ä´Œ ´Ñ§ÃÙ» è 0 1 2 3 4 5 6 7 8 9 : ; < = >?
  • 103. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 103 6.3.7 ¿˜§¡ª¹ Lcd8_Cmd Ñè ໚¹¿˜§¡ª¹·ÕºÃèؤÒÊѧ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ‹Ò§æ ´Ñ§áÊ´§ã¹µÒÃÒ§ Ñè è í è µ‹Í仹Õé ÃÙ»èͤíÒÊÑè§ ª× Ẻ¡ÒÃ㪌§Ò¹¤íÒÊѧ è ÃÒÂÅÐàÍÕ´ LCD_FIRST_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_SECOND_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_THIRD_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_FOURTH_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_CLEAR à¤ÅÕÂÏ˹ŒÒ¨Í LCD_RETURN_HOME ä»ÂѧµíÒá˹‹§àÃÔèÁµŒ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ŒÍÁÙÅã¹ RAM äÁ‹à»ÅÕè¹ LCD_CURSOR_OFF »´¡ÒÃáÊ´§¼Åà¤ÍÏà«ÍÏ LCD_UNDERLINE_ON áÊ´§à¤ÍÏà«ÍÏ ໚¹àʌ¹ªÔ´¢ÍºÅ‹Ò§¤ŒÒ§änj LCD_BLINK_CURSOR_ON áÊ´§à¤ÍÏà«ÍÏẺ¡Ð¾ÃÔº LCD_MOVE_CURSOR_LEFT àÅ×è͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_MOVE_CURSOR_RIGHT àÅ×è͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹¢ÇÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_TURN_ON ແ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_TURN_OFF »´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_SHIFT_LEFT Shift àÅ×è͹¢ŒÍÁÙÅä»·Ò§«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ LCD_SHIFT_RIGHT àÅ×è͹¢ŒÍÁÙÅä»·Ò§¢ÇÒ ¢ŒÍÁÙÅã¹Ë¹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è void Lcd8_Cmd(unsigned short command); ¾ÒÃÒÁÔàµÍÏ Command ËÁÒ¶֧ ¤íÒÊѧà¾×ÍÊѧ§Ò¹ãˌâÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ‹Ò§ æ è è è
  • 104. 104 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 8 ʋ§¢ŒÍÁÙÅáÊ´§¼Å·ÕâÁ´ÙÅ LCD Ñ Ô è â´Â㪌¿§¡ª¹ Lcd8 ˜ Ñè ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L8-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L8-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L8.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ LCD8test áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L8-1 L8.2 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è +5V +5V 0.1 F 2 +Vcc R1 50V 10k 32 11 DSP1 3 VR1 LCD module 16x2 Vo 10k 1 8DD BRIGHTNESS MCLR 1 GND SW1 1+ D7 D6 D5 D4 D3 D2 D1 D0 R/W RS E RESET 21+$.&%% 14 13 12 11 10 9 8 7 5 4 6 12 8ss 30 31 RD7 8ss 29 RD6 28 RD5 27 RD4 22 RD3 21 RD2 20 RD1 19 RD0 RC5 38 37 RC4 39 RC6 OSC1 OSC2 4 5 22pF XTAL 22pF 20MHz ÃÙ»·Õè L8-1 ǧ¨Ã·´Åͧ¡ÒÃàª×ÍÁµ‹ÍâÁ´ÙÅ LCD Ẻ 8 ºÔµ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC è
  • 105. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 105 char *text1 = "Innovative" ; char *text2 = "Experiment" ; char text3=0x30,i ; void main() { Lcd8_Init(&PORTC,&PORTD); // Initial default on PORTC Lcd8_Out(1,1,text1); // Show string from memory Lcd8_Out(2,1,text2); // Show string from memory Delay_ms(1000); Lcd8_Cmd(LCD_CLEAR); // Clear LCD display Lcd8_Out_Cp("Show Number 0-9"); // Show text on first row Lcd8_Cmd(LCD_SECOND_ROW); // Set cursor to second row while(text3<0x3A) { Lcd8_Chr_Cp(text3); // Show number 0 to 9 text3++; // Increment number delay_ms(300); } for (i=0;i<16;i++) { Lcd8_Cmd(LCD_SHIFT_LEFT); // Shift display left delay_ms(300); } for (i=0;i<16;i++) { Lcd8_Cmd(LCD_SHIFT_RIGHT); // Shift display right delay_ms(300); } Lcd8_Cmd(LCD_CURSOR_OFF); // Off cursor } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁẋ§¡Ò÷íÒ§Ò¹´Ñ§¹Õé 1. ¡íÒ˹´¾Íϵ D ໚¹¾ÍϵÊíÒËÃѺ¾Íϵ¢ŒÍÁÙŢͧâÁ´ÙÅ LCD ʋǹ¾Íϵ C ໚¹¾Íϵ¤Çº¤ØÁ 2. ¹íÒ¢ŒÍ¤ÇÒÁ Innovative Experiment áÊ´§·ÕâÁ´ÙÅ LCD è 3. ˹‹Ç§àÇÅÒ 1 ÇÔ¹Ò·ÕáŌÇà¤ÅÕÂÏ˹ŒÒ¨ÍáÊ´§¼Å à¾×ÍáÊ´§¢ŒÍ¤ÇÒÁ Show è Number 0-9 ·ÕºÃ÷Ѵáá è 4. ãˌà¤ÍÏà«ÍÏä»áÊ´§·ÕºÃ÷Ѵ·Õè 2 (ºÃ÷Ѵŋҧ) à¾×ÍÃÍ¡ÒÃáÊ´§¼Å·ÕºÃ÷Ѵ·Õè 2 è è è 5. ǹÅÙ»áÊ´§¤‹ÒµÑÇàÅ¢ 0 ¶Ö§ 9 â´ÂáÊ´§áººäŋÅҴѺä»Í‹ҧµ‹Íà¹×ͧ í è 6. ÊѧàÅ×͹¢ŒÍ¤ÇÒÁä»´ŒÒ¹«ŒÒÂáÅСÅѺÁÒ·ÕµÒá˹‹§à´ÔÁ ¤ŒÒ§¢ŒÍÁÙÅänj áŌǻ´¡ÒÃáÊ´§¼Åà¤ÍÏà«ÍÏ è è è í â»Ãá¡ÃÁ·Õè L8-1 ä¿Å LCD8test.c â»Ãá¡ÃÁÀÒÉÒ C à¾×ͤǺ¤ØÁ¡ÒÃáÊ´§¼ÅâÁ´ÙÅ LCD ´ŒÇ¿˜§¡ª¹ è Ñè Lcd8 ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ
  • 106. 106 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é L8.3 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ŒÍ¤ÇÒÁ In n o v a t i v e Experiment áŌÇà»ÅÕè¹໚¹ Show Number 0- 9 0123456789 mikroC
  • 107. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 㪌¡Ò˹´¾ÍϵÊíÒËÃѺàª×ÍÁµ‹Í¡Ñº¢Ò¢ŒÍÁÙŢͧâÁ´ÙÅ LCD í è D7-D4 ËÁÒ¶֧ µíÒá˹‹§ºÔµ¢Í§¢Ò¾Íϵ¢ŒÍÁÙÅ·Õ㪌µÍ¡Ñº¢Ò 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. 108 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é +5V +5V 0.1 F 2 +Vcc R1 50V 10k 32 11 DSP1 3 VR1 LCD module 16x2 Vo 10k 1 MCLR 8DD BRIGHTNESS 1 GND SW1 1+ D7 D6 D5 D4 R/W RS E RESET 21+$.&%% 14 13 12 11 5 4 6 12 8ss 30 31 RD7 8ss 29 RD6 28 RD5 27 RD4 RC5 38 37 RC4 39 RC6 OSC1 OSC2 4 5 22pF XTAL 22pF 20MHz ÃÙ»·Õè 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃкØè *text ËÁÒ¶֧ µÑÇÍÑ¡ÉÃËÃ×Í¢ŒÍ¤ÇÒÁ·ÕµÍ§¡ÒùíÒä»áÊ´§¼Å è Œ µÑÇÍ‹ҧ·Õè 6-11 Lcd_Custom_Out(1, 3, “Hello!”); ໚¹¡ÒÃʋ§¢ŒÍ¤ÇÒÁ Hello ä»áÊ´§·ÕâÁ´ÙÅ LCD 㹺Ã÷Ѵ·Õè 1 (ºÃ÷Ѵº¹) àÃÔÁ·ÕµÒá˹‹§ÍÑ¡ÉõÑÇ·Õè 3 è è è í Hello
  • 109. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); ¾ÒÃÒÁÔàµÍÏ row ËÁÒ¶֧ µíÒá˹‹§á¶Ç¢Í§âÁ´ÙÅ LCD col ËÁÒ¶֧ µíÒá˹‹§µÑÇÍÑ¡ÉÃã¹á¶Ç·ÕÃÐºØ è character ËÁÒ¶֧ µÑÇÍÑ¡Éà 1 亵·µÍ§¡ÒùíÒä»áÊ´§¼Å Õè Œ µÑÇÍ‹ҧ·Õè 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. 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 : ; < = >?
  • 111. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 111 6.4.6 ¿˜§¡ª¹ Lcd_Custom_Cmd Ñè ໚¹¿˜§¡ª¹·ÕºÃèؤÒÊѧ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD ã¹âËÁ´µ‹Ò§æ ´Ñ§áÊ´§ã¹µÒÃÒ§ Ñè è í è µ‹Í仹Õé ª×èͤíÒÊÑè§ ÃÒÂÅÐàÍÕ´ LCD_FIRST_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 1 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_SECOND_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 2 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_THIRD_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 3 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_FOURTH_ROW ŒÒÂà¤ÍÏà«ÍÏä»Âѧá¶Ç·Õè 4 áÅÐàÃÔèÁµŒ¹·Õè¤ÍÅÑÁ¹·Õè 1 LCD_CLEAR à¤ÅÕÂÏ˹ŒÒ¨Í LCD_RETURN_HOME ä»ÂѧµíÒá˹‹§àÃÔèÁµŒ¹ (á¶Ç 1 ¤ÍÅÑÁ¹ 1 ) ¢ŒÍÁÙÅã¹ RAM äÁ‹à»ÅÕè¹ LCD_CURSOR_OFF »´¡ÒÃáÊ´§¼Åà¤ÍÏà«ÍÏ LCD_UNDERLINE_ON áÊ´§à¤ÍÏà«ÍÏ ໚¹àʌ¹ªÔ´¢ÍºÅ‹Ò§¤ŒÒ§änj LCD_BLINK_CURSOR_ON áÊ´§à¤ÍÏà«ÍÏẺ¡Ð¾ÃÔº LCD_MOVE_CURSOR_LEFT àÅ×͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ è LCD_MOVE_CURSOR_RIGHT àÅ×͹à¤ÍÏà«ÍÏ价ҧ´ŒÒ¹¢ÇÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ è LCD_TURN_ON ແ´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_TURN_OFF »´¡ÒÃáÊ´§¼Å¢Í§¨Í LCD LCD_SHIFT_LEFT Shift àÅ×͹¢ŒÍÁÙÅä»·Ò§«ŒÒ ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ è LCD_SHIFT_RIGHT àÅ×͹¢ŒÍÁÙÅä»·Ò§¢ÇÒ ¢ŒÍÁÙÅã¹Ë¹‹Ç¤ÇÒÁ¨íÒ RAM äÁ‹à»ÅÕè¹ è ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è void Lcd_Custom_Cmd(char out_char); ¾ÒÃÒÁÔàµÍÏ Command ËÁÒ¶֧ ¤íÒÊѧà¾×ÍÊѧ§Ò¹ãˌâÁ´ÙÅ LCD ·íÒ§Ò¹ã¹âËÁ´µ‹Ò§ æ è è è
  • 112. 112 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 9 ʋ§¢ŒÍÁÙÅáÊ´§¼Å·ÕâÁ´ÙÅ LCD Ñ Ô è â´Â㪌¿§¡ª¹ Lcd_Custom ˜ Ñè ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L9-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L9-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L9.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ LCDcustomTest áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ ·Õè L9-1 L9.2 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è +5V +5V 0.1 F 2 +Vcc R1 50V 10k 32 11 DSP1 3 VR1 LCD module 16x2 Vo 10k 1 8DD BRIGHTNESS MCLR 1 GND SW1 1+ D7 D6 D5 D4 R/W RS E RESET 21+$.&%% 14 13 12 11 5 4 6 12 8ss 30 31 RD7 8ss 29 RD6 28 RD5 27 RD4 RC5 38 37 RC4 39 RC6 OSC1 OSC2 4 5 22pF XTAL 22pF 20MHz ÃÙ»·Õè L9-1 ǧ¨Ã·´Åͧ¡ÒÃàª×ÍÁµ‹ÍâÁ´ÙÅ LCD Ẻ¡íÒ˹´¢Ò¾ÍϵÍÔÊÃТͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ è PIC à¾×Í·´Êͺ¡Ò÷íÒ§Ò¹¢Í§¿˜§¡ª¹ Lcd_Custom è Ñè
  • 113. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 114 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é L9.3 Ãѹâ»Ãá¡ÃÁ ¨ÐàË繡ÒÃáÊ´§¼Å¢ŒÍ¤ÇÒÁ In n o v a t i v e Experiment áŌÇà»ÅÕè¹໚¹ Show Number 0- 9 0123456789 INNOVATIVE EXPERIMENT
  • 115. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 115 º··Õè 7 ¿˜§¡ª¹µÔ´µ‹Í¡ÑºË¹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅ Ñè ÍÕ;ÃÍÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC Õ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ʋǹãË­‹¹Í¡¨Ò¡ÁÕ˹‹Ç¤ÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿Åª ˹‹Ç ¤ÇÒÁ¨íÒ¢ŒÍÁÙÅáÃÁ ÂѧÁÕ˹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕ;ÃÍÁà¾×Í㪌¾¡¢ŒÍÁÙÅËÃ×Íà¡çº¤‹Òµ‹Ò§æ ·ÕäÁ‹Ê­ËÒÂàÁ×Í Õ è Ñ è Ù è äÁ‹ÁÕä¿àÅÕé§ ´Ñ§¹Ñ鹡ÒõԴµ‹Íà¾×èÍ͋ҹáÅÐà¢Õ¹¢ŒÍÁÙšѺ˹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅʋǹ¹Õé¨Ö§à»š¹ÊÔ觷Õè ¤ÍÁä¾àÅÍϪ¹´Õ¾§ÁÕ áÅÐ mikroC ¡ç䴌àµÃÕÂÁä¿ÅäźÃÒÃÕÊÒËÃѺ¡Ò÷íÒ§Ò¹¹Õänj´Ç Ñé Ö í é Œ 7.1 ¿˜§¡ª¹ Eeprom_Read Ñè ໚¹¿˜§¡ªÑè¹ÊíÒËÃѺ͋ҹ¤‹Ò¢ŒÍÁÙÅã¹Ë¹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕÍÕ¾ÃÍÁẺÃкصíÒá˹‹§ ã¹ ÃÐËNjҧ¡ÒÃà¢Õ¹áÅÐ͋ҹ¢ŒÍÁÙŨеŒÍ§Ë¹‹Ç§àÇÅÒÍ‹ҧ¹ŒÍ 20 ÁÔÅÅÔÇ¹Ò·Õ à¾×Íãˌ¡ÒÃà¢Õ¹¢ŒÍÁÙÅàÊÃç¨ Ô è ÊÁºÙó ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è unsigned short Eeprom_Read(unsigned int address); ¾ÒÃÒÁÔàµÍÏ address ËÁÒ¶֧ áÍ´à´Ãʢͧ˹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕ;ÃÍÁ·ÕµÍ§¡ÒÃ͋ҹ¤‹Ò Õ è Œ ¨ÐàËç¹Ç‹ÒµÑÇá»Ã address ໚¹µÑÇá»Ã int (16 ºÔµ) áÊ´§Ç‹Ò ¤íÒÊѧ¹ÕÊÒÁÒöµÔ´µ‹Í¡ÑºË¹‹Ç¤ÇÒÁ¨íÒ è é ¢ŒÍÁÙÅÍÕ;ÃÍÁ䴌ÁÒ¡¡Ç‹Ò 256 µíÒá˹‹§ Õ µÑÇÍ‹ҧ·Õè 7-1 unsigned short take; ... take = Eeprom_Read(0x3F); ¨Ò¡µÑÇÍ‹ҧ໚¹¡ÒÃ͋ҹ¢ŒÍÁÙÅ¢¹Ò´ 1 亵ã¹Ë¹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕ;ÃÍÁµíÒá˹‹§ 0x3F áŌǹíÒä» Õ à¡çºänj·µÇá»Ã take Õè Ñ
  • 116. 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 Õ è
  • 117. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 117 »¯Ôºµ¡Ò÷Õè 10 ·´Êͺ¡ÒÃ͋ҹáÅÐà¢Õ¹ Ñ Ô Ë¹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕÍÕ¾ÃÍÁ ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·ÕèL10-1 㹡Ò÷´Åͧ ÊÒÁÒö㪌äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏàºÍÏ PIC16F877 ËÃ×Í PIC16F887 ¡ç䴌 ᵋµÍ§àÅ×Í¡ãˌ¶¡µŒÍ§àÁ×Í·íÒ¡ÒÃÊÌҧä¿Åâ»Ãà¨ç¡µ´Ç Œ Ù è Œ l Ëҡ㪌ºÍÏ´ RBX-877 Rev.2007 ÊÒÁÒö·´Åͧ䴌àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹àºÍÏ PIC16F887 l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L10-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L10.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ EepromTest áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L10-1 L10.2 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è +5V 11 32 C6 0.1 F 50V +5V 1+! JP1 21+$.&&% BACK LIGHT R13 ON 16 47 BLA 21 4 RD2 RS DSP1 1 +5V +V RD3 22 6 E LCD 16x2 3 Vo R5 D7 D6 D5 D4 D3 D2 D1 D0 R/W BLK GND VR1 4k7 10k 1 14 13 12 11 10 9 8 7 5 15 2 MCLR 30 BRIGHTNESS R6 RD7 SW2 1k 4-5-6 29 RD6 28 RD5 27 RD4 12 31 13 14 CR1 Ceramic Resonator 20MHz ÃÙ»·Õè L10-1 ǧ¨Ã·´Åͧ¡ÒÃà¢Õ¹áÅÐ͋ҹ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕ;ÃÍÁÁÒáÊ´§¼Å·ÕâÁ´ÙÅ LCD Õ è ´ŒÇ¿˜§¡ª¹¢Í§ mikroC ¤ÍÁä¾àÅÍÏ Ñè
  • 118. 118 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é char i,j=0x30; // J = Ascii[0] void main() { Lcd_Init(&PORTD); // Use LCD show data Lcd_Cmd(LCD_CLEAR); // Clear screen Lcd_Cmd(LCD_CURSOR_OFF); // Cursor off for (i=0;i<16;i++) // 16 Byte writing { Lcd_Chr_Cp(j); // Show writing data on LCD Eeprom_Write(i,j++); // Write EEPROM } Delay_ms(20); // Delay after write Lcd_Cmd(LCD_SECOND_ROW); // Goto Line 2 for (i=16;i>0;i--) // 16 Byte Reading { j=Eeprom_Read(i-1); // Read Last byte first Lcd_Chr_Cp(j); // show on LCD Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ·íÒ¡ÒÃǹÅÙ» 16 ¤Ãѧà¾×Íà¢Õ¹¢ŒÍÁÙŢͧµÑÇàÅ¢µÑ§áµ‹ 0 ¨¹¤Ãº 16 µÑÇä»Âѧ˹‹Ç¤ÇÒÁ¨íÒ é è é ¢ŒÍÁÙÅÍÕÍÕ¾ÃÍÁ ¨Ò¡¹Ñé¹Í‹Ò¹¤‹Ò¡ÅѺ â´ÂàÃÔèÁ͋ҹ¤‹Ò¨Ò¡áÍ´à´ÃÊËÅѧÊØ´¡‹Í¹ áŌǹíÒ¼ÅÅѾ¸ä»áÊ´§¼Å·Õè ºÃ÷Ѵ·Õè 2 (ºÃ÷Ѵŋҧ) ¢Í§âÁ´ÙÅ LCD â»Ãá¡ÃÁ·Õè L10-1 ä¿Å EepromTest.c â»Ãá¡ÃÁÀÒÉÒ C ·´Êͺ¡ÒÃà¢Õ¹áÅÐ͋ҹ¢ŒÍÁÙÅ˹‹Ç¤ÇÒÁ¨íÒ ¢ŒÍÁÙÅÍÕ;ÃÍÁã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ¿˜§¡ª¹¢Í§ mikroC ¤ÍÁä¾àÅÍÏ Õ Ñè L10.3 Ãѹâ»Ãá¡ÃÁ ¡Ò÷´Åͧ¹Õ㪌âÁ´ÙÅ LCD 㹡ÒÃáÊ´§¼Å¢Í§¡ÒÃà¢Õ¹áÅÐ͋ҹ¢ŒÍÁÙšѺ˹‹Ç¤ÇÒÁ¨íÒ¢ŒÍÁÙÅÍÕ;ÃÍÁ é Õ â´ÂºÃ÷Ѵº¹¢Í§âÁ´ÙÅ LCD ¨ÐáÊ´§¢ŒÍÁÙÅ·Õàè ¢Õ¹ ʋǹºÃ÷Ѵŋҧ¨ÐáÊ´§¢ŒÍÁÙÅ·ÕÍÒ¹¡ÅѺÁÒ â´ÂáÊ´§¤‹Ò¨Ò¡ è‹ äºµÊ´·ŒÒ¡‹Í¹ Ø INNOVATIVE EXPERIMENT
  • 119. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 119 º··ÕÕè 8 ¿˜§¡ªÑè¹Í‹Ò¹¤‹Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ ÍйÒÅ͡໚¹´Ô¨µÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC Ô ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ËÅÒÂæàºÍϨÐÁÕâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍŵԴ Ô µÑ§ÍÂÙÀÒÂã¹ ¡ÒÃ͋ҹ¤‹Ò¼ÅÅѾ¸Ê­­Ò³ÍйÒÅÍ¡¨Ò¡âÁ´ÙŹÕé ¨ÐµŒÍ§ÁÕ¡ÒáíÒ˹´¤‹ÒËÅÒ¢ѹµÍ¹ é ‹ Ñ é ᵋ mikroC 䴌àµÃÕÂÁ¿˜§¡ª¹ Adc_Read() àÍÒänjà¾×ÍãˌÊÒÁÒö͋ҹ¤‹Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ Ñè è ÍйÒÅ͡໚¹´Ô¨µÍÅ䴌Í‹ҧ§‹Ò æ Ô 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. 120 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 8.1.2 µÑÇÍ‹ҧ¡ÒÃ㪌§Ò¹àº×ͧµŒ¹ é ã¹µÑÇÍ‹ҧâ»Ãá¡ÃÁµ‹Í仹Õàé »š¹¡ÒÃ͋ҹ¤‹Ò¨Ò¡ª‹Í§ AN0 ÁÒà¡çºã¹µÑÇá»Ã temp «Ö§¨Í§¾×¹·Õè è é änj໚¹áºº 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 ÊÇÔµªÁŵÔà¾Åç¡« Ñ 111 RE2/AN7 110 RE1/AN6 101 RE0/AN5 100 RA5/AN4 8AIN 011 RA3/AN3/VREF+ ǧ¨Ãá»Å§ÊÑ­­Ò³ áç´Ñ¹ÍйÒÅÍ¡ÍÔ¹¾Øµ 010 ÍйÒÅ͡໚¹´Ô¨ÔµÍÅ VDD RA2/AN2/VREF- 001 10 ºÔµ RA1/AN1 000 RA0/AN0 8REF+ áç´Ñ¹ÍŒÒ§ÍÔ§ PCFG3:PCFG0 PCFG3:PCFG0 VREF- áç´Ñ¹ÍŒÒ§ÍÔ§ VSS ÃÙ»·Õè 8-1 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅã¹ PIC16F87x Ô
  • 121. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 121 8.2.1 ÃÕ¨ÊàµÍÏ ADRESH áÅÐ ÃÕ¨ÊàµÍÏ ADRESL Ô Ô à»š¹ÃÕ¨ÊàµÍÏ 8 ºÔµ 㪌à¡çº¼ÅÅѾ¸·ä´Œ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ ¡ÒÃ㪌§Ò¹¿˜§¡ª¹ Adc_Read() Ô Õè Ñè äÁ‹µÍ§ÍŒÒ§¶Ö§ÃÕ¨ÊàµÍϹÕé ᵋËÅѧ¨Ò¡àÃÕ¡㪌§Ò¹¿˜§¡ª¹ Adc_Read() ¤‹Ò·Õ䴌¨Ò¡¡ÒÃá»Å§¨Ðà¡çºänj Œ Ô Ñè è ·ÕèÊàµÍÏ·§ÊͧµÑǹÕé èÕÔ Ñé 8.2.2 ÃÕ¨ÊàµÍÏ ADCON0 Ô ÁÕ¢¹Ò´ 8 ºÔµ ໚¹ÃÕ¨ÊàµÍÏËÅÑ¡·Õ㪌¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹ Ô è ´Ô¨µÍÅ ÃÒÂÅÐàÍÕ´¡ÒÃ㪌§Ò¹ÁÕ´§¹Õé Ô Ñ ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ADCON0 ADCS1 ADCS0 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 ºÔµ 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. 122 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ºÔµ 2 - GO/DONE (A/D Conversion Status bit) : ºÔµáÊ´§Ê¶Ò¹Ð¡ÒÃá»Å§ÊÑ­­Ò³ ·íҧҹËÇÁ¡ÑººÔµ ADON ¡Ã³Õºµ ADON ໚¹ “1” Ô “0” - ¡ÒÃá»Å§ÊÑ­­Ò³àÊÃç¨ÊÁºÙó ËÃ×ÍÂѧäÁ‹àÃÔÁ¡ÒÃá»Å§ÊÑ­­Ò³ è “1” - ÂѧÍÂÙã¹ÃÐËNjҧ¡ÒÃá»Å§ÊÑ­­Ò³ ‹ ºÔµ¹Õ§ÊÒÁÒöà¤ÅÕÂÏ͵â¹ÁѵàÔ Á×Í¡ÒÃá»Å§àÊÃç¨ÊÁºÙó áÅÐà¤ÅÕÂÏà¹×ͧ¨Ò¡à¡Ô´à¾ÒàÇÍÏÍ͹ÃÕ૵ éÑ Ñ è è ºÔµ 1 : äÁ‹ãªŒ§Ò¹ ¡íÒ˹´à»š¹ “0” ºÔµ 0 - ADON (A/D On bit) : ºÔµà»´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅ Ô “0” - »´¡Ò÷íÒ§Ò¹ “1” - ແ´¡Ò÷íÒ§Ò¹ 8.2.3 ÃÕ¨ÊàµÍÏ ADCON1 Ô à»š¹ÃÕ¨ÊàµÍϤǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍŷշҧҹËÇÁ¡Ñº Ô Ô è í ADCON0 ÁÕ¢¹Ò´ 8 ºÔµ â´ÂÃÕ¨ÊàµÍϵǹÕ㪌¡Ò˹´¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íϵ·Õàè ¡ÕÂÇ¢ŒÍ§¡ÑºâÁ´ÙÅá»Å§ Ô Ñ é í è ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅ áÅÐ㪌àÅ×Í¡ÃٻẺ¢Í§¢ŒÍÁÙżÅÅѾ¸·ä´Œ¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³ Ô Õè ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ADCON1 ADFM ADCS2* - - PCFG3 PCFG2 PCFG1 PCFG0 R/W -0 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 Ô
  • 123. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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 äÁâ¤ÃÇÔ¹Ò·Õ áµ‹ÊÒÁÒöÁÕ¤‹Ò䴌ÃÐËNjҧ 2-6 äÁâ¤ÃÇÔ¹Ò·Õ (2) ¶ŒÒËÒ¡¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌÔ¡ÒËÅÑ¡ÁÒ¡¡Ç‹Ò 1MHz ¤ÇÃ㪌ÊÑ­­Ò³¹ÒÌԡҨҡǧ¨Ã RC 㹡óշíÒ§Ò¹ã¹âËÁ´ÊÅÕ» µÒÃÒ§·Õè 8-1 áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸¢Í§¤ÒºàÇÅÒÊÑ­­Ò³¹Ò́¡Ò¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡ ໚¹´Ô¨µÍÅ ¡Ñº¤ÇÒÁ¶ÕʧÊØ´¢Í§ÊÑ­­Ò³¹Ò́¡ÒËÅÑ¡¢Í§ PIC16F87x(A) Ô èÙ
  • 125. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 125 »¯Ôºµ¡Ò÷Õè 11 ¡ÒÃ㪌§Ò¹¿˜§¡ª¹ Adc_Read() ¡Ñº Ñ Ô Ñè PIC16F877A ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L11-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L11-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L11.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ ADCtest áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L11-1 L11.2 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è ÃÙ»·Õè L11-1 ǧ¨Ã͋ҹ¤‹ÒÊÑ­­Ò³ÍйÒÅÍ¡áÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 â´Â㪌¿§¡ª¹ Adc_Read ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ ˜ Ñè
  • 126. 126 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é unsigned int temp_res; void main() { ADCON1 = 0x80; // Configure analog inputs and Vref TRISA = 0xFF; // PORTA is input TRISB = 0x3F; // Pins RB7, RB6 are outputs TRISD = 0; // PORTD is output while(1) { temp_res = Adc_Read(2); // Get results of AD conversion PORTD = temp_res; // Send lower 8 bits to PORTD PORTB = temp_res >> 2; // Send 2 most significant bits to RB7, RB6 } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÁ×Í㪌§Ò¹âÁ´ÙÅ ADC ¨ÐµŒÍ§¡íÒ˹´ãˌ¢Ò¾Íϵ·Õ㪌໚¹ÍÔ¹¾Øµ ʋǹ¾Íϵ·Õàè ª×ÍÁµ‹Í¡Ñº LED ¤×;Íϵ è è è D áÅоÍϵ B ºÔµ 6 áÅкԵ 7 ¹Ñ¹ µŒÍ§¡íÒ˹´ãˌ໚¹àÍÒµ¾µ é Ø ¡ÒÃ͋ҹ¤‹Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍŨÐ͋ҹ¤‹ÒÁÒà¡çºänj㹵ÑÇá»Ã 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 ·Õàè ÍÒµ¾µ¢Í§Ç§¨Ã·´Åͧãˌ໚¹¤‹ÒµÑÇàÅ¢ÃÐËNjҧ 0 ¶Ö§ 1,023 è ‹ Ø mikroC
  • 127. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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() áŌǤ‹Ò í Ô Ñè ·Õè䴌¨Ò¡¡ÒÃá»Å§¨Ðà¡çºänj·ÕèÃÕ¨ÔÊàµÍÏ·éѧÊͧµÑǹÕ鴌Ç 8.4.2 ÃÕ¨ÊàµÍÏ ADCON0 Ô ÁÕ¢¹Ò´ 8 ºÔµ ໚¹ÃÕ¨ÊàµÍÏËÅÑ¡·Õ㪌¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹ Ô è ´Ô¨µÍÅ ÃÒÂÅÐàÍÕ´¡ÒÃ㪌§Ò¹ÁÕ´§¹Õé Ô Ñ ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ADCON0 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. 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” áÊ´§Ç‹ÒÍÂÙã¹ÃÐËNjҧ¢Ñ¹µÍ¹¡ÒÃá»Å¢ŒÍÁÙÅ ºÔµ¹Õ¨Ð໚¹ ‹ é é “0” ÍѵâÁÁѵàÔ Á×͢ѹµÍ¹¡ÒÃá»Å§¢ŒÍÁÙÅàÊÃç¨ÊÔ¹ è é é ºÔµ 0 : ADON ºÔµàÍç¹àÍàºÔÅâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅ Ô “0” - âÁ´ÙÅ ADC ¶Ù¡´ÔÊàÍàºÔÅ “1” - àÍç¹àÍàºÔÅâÁ´ÙÅ ADC
  • 129. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 129 8.4.3 ÃÕ¨ÊàµÍÏ ADCON1 Ô ÃÕ¨ÊàµÍÏ ADCON1 㪌à¾×Í¡íÒ˹´¤‹Òáç´Ñ¹ÍŒÒ§ÍÔ§ãˌ¡ºâÁ´ÙÅ ADC áÅСíÒ˹´ÃٻẺ¢Í§ Ô è Ñ ¼ÅÅѾ¸àÍÒµ¾µ·ÕèÊàµÍÏ ADRESH áÅÐ ADRESL Ø èÕÔ ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ADCON1 ADFM - VCFG1 VCFG0 - - - - R/W -0 X -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 Ô ÃÕ¨ÊàµÍÏ ADRESL Ô ºÔµ 6 : äÁ‹ãªŒ§Ò¹ ͋ҹ䴌໚¹ “0” ºÔµ 5 : VCFG1 ¢ÒàÅ×Í¡áç´Ñ¹ÍŒÒ§ÍÔ§ (ź) “0” - VSS “1” - ¢Ò VREF- ºÔµ 4 : VCFG0: ¢ÒàÅ×Í¡áç´Ñ¹ÍŒÒ§ÍÔ§ (ºÇ¡) “0” - VDD “1” - ¢Ò VREF+ ºÔµ 3 ¶Ö§ 0 : äÁ‹ãªŒ§Ò¹ ͋ҹ䴌໚¹ “0”
  • 130. 130 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 8.4.4 ÃÕ¨ÊàµÍÏ ANSEL Ô à»š¹ÃÕ¨ÊàµÍÏÊÒËÃѺàÅ×Í¡ãˌ¢Ò¾Íϵ RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 ·íҧҹ໚¹¢Ò Ô í ¾ÍϵÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×Í´Ô¨µÍÅ »¡µÔ¶ÒäÁ‹ä´Œ¡Ò˹´¤‹Ò ¢ÒàËŋҹըÐ໚¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ «Ö§ Ô Œ í é è ᵡµ‹Ò§¨Ò¡ PIC16F877 ·Õ¨ÐµŒÍ§¡íÒ˹´¢ÒàËŋҹշèÊàµÍÏ ADCON1 è é Õè Õ Ô ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 8.4.5 ÃÕ¨ÊàµÍÏ ANSELH Ô à»š¹ÃÕ¨ÊàµÍÏÊÒËÃѺàÅ×Í¡ãˌ¢Ò¾Íϵ RB0 ¶Ö§ RB5 ·íҧҹ໚¹¢Ò¾ÍϵÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×Í Ô í ´Ô¨ÔµÍÅ »¡µÔ¶ŒÒäÁ‹ä´Œ¡íÒ˹´¤‹Ò ¢ÒàËŋҹÕé¨Ð໚¹¢ÒÍйÒÅÍ¡ ¢ŒÍÃÐÇѧ µíÒá˹‹§¢Í§ª‹Í§ÍйÒÅÍ¡ ᵋÅЪ‹Í§äÁ‹ä´ŒàÃÕ§ÅíҴѺµÒÁµíÒá˹‹§¢Ò¾Íϵ ઋ¹ ÍÔ¹¾Øµ AN8 ¨Ð໚¹¢Ò¾Íϵ RB2 ໚¹µŒ¹ ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ANSELH - - ANS13 ANS12 ANS11 ANS10 ANS9 ANS8 . - - RB5 RB0 RB4 RB1 RB3 RB2 X -0 X -0 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 R/W -1 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 Ô
  • 131. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 131 »¯Ôºµ¡Ò÷Õè 12 ͋ҹ¤‹Ò¨Ò¡âÁ´ÙÅ ADC ´ŒÇ¡ÒÃ Ñ Ô à¢Õ¹â»Ãá¡ÃÁµÔ´µ‹Íâ´ÂµÃ§ ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L12-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L12-1 áŌÇà»ÅÕ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F887 ‹ è +5V 11 32 C3 R11 0.1 F 10k Vcc 1 MCLR RB7 40 LED10-bit9 (MSB) SW1 RESET 39 RB6 LED9-bit8 30 RD7 LED8-bit7 21+$.&&% RD6 29 LED7-bit6 28 RD5 LED6-bit5 27 RD4 LED5-bit4 +5V 22 RD3 LED4-bit3 21 RD2 LED3-bit2 VR1 4 10k AN2/RA2 RD1 20 LED2-bit1 19 LED1-bit0 (LSB) 12 RD0 GND 31 R1-R10 GND 510 OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L12-1 ǧ¨Ã͋ҹ¤‹ÒÊÑ­­Ò³ÍйÒÅÍ¡áÊ´§¼Å·Õè LED 10 ´Ç§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 ´ŒÇ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×͵Դµ‹Í¡ÑºâÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅâ´ÂµÃ§ è Ô
  • 132. 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 ·Õàè ÍÒµ¾µ¢Í§Ç§¨Ã·´Åͧãˌ໚¹¤‹ÒµÑÇàÅ¢ÃÐËNjҧ 0 ¶Ö§ 1,023 è ‹ Ø void main() { TRISA = 0xFF; // PORTA => input TRISB = 0x3F; // Pins RB7, RB6 are outputs TRISD = 0; // PORTD is output ANSEL = 0xFF; // PORTA => Analog ADCON1 = 0x80; // Select Vref and Right Justify ADCON0=0b11001001; // Select Analog1 RC_Mode and ADON while(1) { ADCON0.GO=1; // Start conversion while(ADCON0.GO); // Waiting conversion done? PORTD=ADRESL; // Load Low Byte to LED PORTB=ADRESH*64; // 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
  • 133. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 133 »¯ÔºÑµÔ¡Ò÷Õè 13 ͋ҹ¤‹Ò¨Ò¡âÁ´ÙÅ ADC áÊ´§¼Å ·ÕâÁ´ÙÅ LCD è ¡Ò÷´Åͧ¹Õàé »š¹µÑÇÍ‹ҧ㹡ÒùíҼŷÕ䴌¨Ò¡¡ÒÃ͋ҹ¤‹Ò¨Ò¡âÁ´ÙÅá»Å§ÊÑ­­Ò³ÍйÒÅ͡໚¹´Ô¨µÍÅ è Ô ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 ÁÒáÊ´§ÂѧâÁ´ÙÅ LCD â´Â¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×͵Դµ‹Í¡ÑºâÁ´ÙÅ LCD ¹Ñ¹ è é àÅ×͡㪌¿§¡ª¹ LCD ¢Í§ mikroC ÊÒÁÒö´ÙÃÒÂÅÐàÍÕ´¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾ÔÁàµÔÁ䴌¨Ò¡µÑÇÍ‹ҧ¡ÒÃ㪌§Ò¹¿˜§¡ª¹ ˜ Ñè è Ñè LCD ÊíÒËÃѺ¢ŒÍÁÙŵÑÇàÅ¢·Õ䴌¨Ò¡¡ÒÃá»Å§ÊÑ­­Ò³¡‹Í¹·Õ¨Ð¹íÒä»áÊ´§¼Å·ÕâÁ´ÙÅ LCD ¨ÐµŒÍ§á»Å§ãˌÍÂÙã¹ÃÙ» è è è ‹ Ẻ¢Í§ÃËÑÊáÍʡա͹ â´Â¶ŒÒ໚¹¤‹Ò¨íҹǹàµçÁ¨Ð㪌¿§¡ª¹ WordToStr() 㹡ÒÃá»Å§¤‹Ò áÅÐ㪌¿§¡ª¹ é‹ ˜ Ñè ˜ Ñè FloatToStr() 㹡ÒÃá»Å§¤‹Ò¢ŒÍÁÙÅ·Õ໚¹àÅ¢·È¹ÔÂÁ è ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L13-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´ RBX-877 Rev.2007 ÊÒÁÒö·´Åͧ䴌àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹àºÍÏ PIC16F887 l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L13-1 áŌÇà»ÅÕ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F887 ‹ è ÃÙ»·Õè L13-1 ǧ¨Ã·´Åͧ¡ÒÃ͋ҹ¤‹ÒÍйÒÅÍ¡¨Ò¡µÑǵŒÒ¹·Ò¹»ÃѺ¤‹Ò䴌ÁÒáÊ´§¼Å·ÕâÁ´ÙÅ LCD è
  • 134. 134 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é int dat=0; // Save ADC float volts; char txt1[6]; // Save String char txt2[13]; char *text1 ="DATA="; // Show Text char *text2 ="Volt="; void main() { TRISA = 0xFF; // PORTA => input ANSEL = 0xFF; // PORTA => Analog ADCON1 = 0x00; // Select Vref and Right Justify ADCON0=0b11001001; // Select Analog1 RC_Mode and ADON Lcd_Init(&PORTD); // Init LCD Port Lcd_Cmd(LCD_CURSOR_OFF); // LCD cursor off Lcd_Cmd(LCD_CLEAR); while(1) { ADCON0.GO=1; // Start conversion while(ADCON0.GO); // Waiting conversion done? dat = (ADRESH*4)+(ADRESL/64); // Sum highbyte and lowbyte WordToStr(dat,txt1); // Convert Raw Data to String Lcd_Out(1,1,text1); // Show Line 1 Text Lcd_Out(1,6,txt1); volts=(dat*5.0)/1023.0; // Convert to Volt FloatToStr(volts,txt2); // Convert to String Lcd_Out(2,1,text2); Lcd_out(2,6,txt2); // Show LCD Line 2 Delay_ms(300); Lcd_Cmd(LCD_CLEAR); // 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 è
  • 135. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 136 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 137. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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) áç´Ñ¹à©ÅÕÂ è ´ÔǵÕä«à¡ÔÅ 50% é 4.8V 4.8V 2.4V àÇÅÒ àÇÅÒ (¡) (¢) áç´Ñ¹ (V) áç´Ñ¹à©ÅÕ è áç´Ñ¹ (V) ´ÔǵÕä«à¡ÔÅ 75% é áç´Ñ¹à©ÅÕ ´ÔǵÕä«à¡ÔÅ 25 % è é 4 .8 V 4 .8 V 3 .6 V 1 .2 V àÇÅÒ àÇÅÒ (¤) (§) ÃÙ»·Õè 9-1 áÊ´§¡ÒÃà»ÃÕºà·Õº¤‹Òáç´Ñ¹·Õà¡Ô´¢Ö¹àÁ×Í㪌 PWM (¡) »‡Í¹ÊÑ­­Ò³ä¿µÃ§ è é è (¢) PWM ÁմǵÕä«à¡ÔÅ 50% (¤) PWM ÁմǵÕä«à¡ÔÅ 75% (§) PWM ÁմǵÕä«à¡ÔÅ 25% Ô é Ô é Ô é
  • 138. 138 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é µÑÇÍ‹ҧ¨Ò¡ÃÙ»·Õè 9-1 (¢) ÁÕ¤Ò´ÔǵÕä«à¡ÔÅ 50% ËÁÒ¶֧ ¤ÇÒÁ¡ÇŒÒ§¢Í§¾ÑÅʏªÇ§ºÇ¡ÁÕ¤ÇÒÁ ‹ é ‹ ¡ÇŒÒ§à»š¹ 50% ¢Í§¤ÇÒÁ¡ÇŒÒ§·Ñ§ËÁ´ ´Ñ§¹Ñ¹áç´Ñ¹à©ÅÕ·Õ䴌෋ҡѺ (50 N 4.8) /100 = 2.4V ÊíÒËÃѺ é é è è ÃÙ»·Õè 9-1 (¤) áÅÐ (§) ໚¹¡ÒáíÒ˹´¤‹Ò´ÔǵÕä«à¡ÔÅ 75% áÅÐ 25% µÒÁÅíҴѺ é 㹡ÒäǺ¤ØÁÁÍàµÍÏâ´Â»¡µÔ¹¹¨Ð»‡Í¹áç´Ñ¹ä¿µÃ§ãˌ¡ºÁÍàµÍÏ ÁÍàµÍÏ¡¨Ð·íÒ§Ò¹àµçÁ Ñé Ñ ç ¡íÒÅѧ «Ö§ÍÒ¨¨ÐÁÕ¤ÇÒÁàÃçÇÁÒ¡à¡Ô¹ä» ´Ñ§¹Ñ¹¡ÒûÃѺ¤ÇÒÁàÃçǢͧÁÍàµÍϨ§ãªŒÇ¸Å´áç´Ñ¹ä¿¿‡Ò·Õ»Í¹ è é Ö ÔÕ è ‡ ãˌ¡ºÁÍàµÍÏ ÇÔ¸·¹ÂÁ¤×Í ¡Òû‡Í¹¾ÑÅʏ仢ѺÁÍàµÍÏ᷹ áŌǻÃѺ¤ÇÒÁ¡ÇŒÒ§¾ÑÅʏªÇ§ºÇ¡ à¾×Íãˌ Ñ Õ Õè Ô ‹ è 䴌¤Òáç´Ñ¹à©ÅÕµÒÁµŒÍ§¡Òà ÇÔ¸¡ÒùÕàé ÃÕÂ¡Ç‹Ò ¾ÑÅʏǴ¸ÁÍ´ÙàÅàµÍÏ (PWM) â´Â¤ÇÒÁ¡ÇŒÒ§¾ÑÅʏªÇ§ºÇ¡ ‹ è Õ Ô ‹ àÁ×Íà·Õº¡Ñº¤ÇÒÁ¡ÇŒÒ§¾ÑÅʏ·§ËÁ´àÃÕÂ¡Ç‹Ò ´ÔǵÕä«à¡ÔÅ â´Â¨Ð¤Ô´¤‹Ò´ÔǵÕä«à¡ÔÅ໚¹à»ÍÏà«ç¹µ¢Í§¤‹Ò¤ÇÒÁ è Ñé é é ¡ÇŒÒ§¾ÑÅʏ·§ËÁ´Ñé ã¹ mikroC ¤ÍÁä¾àÅÍÏ䴌àµÃÕÂÁ¿˜§¡ª¹ PWM änjÃͧÃѺ¡ÒÃ㪌§Ò¹âÁ´ÙÅ 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 è Ñ è
  • 139. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 139 9.2 ¿˜§¡ª¹ Pwm_Change_Duty Ñè ໚¹¤íÒÊѧ¡íÒ˹´¤‹Ò¤ÇÒÁ¡ÇŒÒ§¢Í§ÊÑ­­Ò³ PWM ËÃ×Í·Õàè ÃÕÂ¡Ç‹Ò ´ÔǵÕä«à¡ÔÅ è é ÃٻẺ¡ÒÃ㪌§Ò¹ void Pwm_Change_Duty(unsigned short duty_ratio); ¾ÒÃÒÁÔàµÍÏ duty_ratio ÁÕ¤Ò 0 ¶Ö§ 255 ÊíÒËÃѺ¤‹Ò´ÔǵÕä«à¡ÔÅ 0 ¶Ö§ 100% ઋ¹ ¶ŒÒ¤‹Ò෋ҡѺ 0 ´ÔǵÕä«à¡ÔŨÐ໚¹ 0% ‹ é é ËÒ¡¤‹Ò෋ҡѺ 127 ´ÔǵÕä«à¡ÔÅ෋ҡѺ 50%áÅжŒÒ෋ҡѺ 255 ¤‹Ò´ÔǵÕä«à¡ÔŨÐ໚¹ 100% ËÃ×ͤíҹdz䴌¨Ò¡ é é % ´ÔǵÕä«à¡ÔÅ = (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. 140 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 14 ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÏ´Ç¿˜§¡ª¹ PWM ÑÔ Œ Ñè 㹡Ò÷´Åͧ¹Õàé »š¹µÑÇÍ‹ҧ¡ÒÃÊÌҧÊÑ­­Ò³ PWM à¾×͹íÒ令Ǻ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÏ è 俵ç â´Â·íҧҹËÇÁ¡ÑºÇ§¨Ã¢ÑºÁÍàµÍϷ㪌äÍ«Õ¢ºâËÅ´¡ÃÐáÊÊ٧ẺàͪºÃÔ´¨ (H-bridge) àºÍÏ Õè Ñ L293D ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L14-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´ RBX-877 Rev.2007 ÊÒÁÒö·´Åͧ䴌àÅ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹àºÍÏ PIC16F887 l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L9-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz ÊíÒËÃѺ LED ·Õ㪌áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢ÑºÁÍàµÍÏ èÑ è ¹Ñ¹à»š¹ LED 2 ÊÕ (á´§/à¢ÕÂÇ) 2 ¢Ò ʋǹáç´Ñ¹ +Vm ໚¹áç´Ñ¹ä¿àÅÕ§ÊíÒËÃѺǧ¨Ã¢ÑºÁÍàµÍÏ «Ö§µŒÍ§á¡ÍÍ¡ é é è ¨Ò¡ä¿àÅÕ§¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC é K18A-K18B MOTOR-A INVERT +5V +5V +Vm C7 + 0.1 F 50V 11 32 C5 0.1 F 16 + 8 R9 50V DIRECT Vcc1 2k2 19 2 1Y 3 LED3 RD0 1A DIR. #A 20 7 2A 6 RD1 2Y LED4 RC2/CCP1 17 1 12EN IC3 14 DIR. #B 4Y 34 L293D 15 4A RB1 11 3Y 35 10 R10 RB2 3A INVERT 2k2 16 9 RC1/CCP2 34EN C8 + 0.1 F 50V IC2 13 12 5 4 + PIC16F887 K19A-K19B DIRECT MOTOR-B Motor Driver 13 14 CR1 Ceramic Resonator 20MHz ÃÙ»·Õè L14-1 ǧ¨Ã¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÏ俵ç â´Â㪌ʭ­Ò³ PWM ·ÕÊÌҧ¢Ö¹¨Ò¡äÁâ¤Ã Ñ è é ¤Í¹â·ÃÅàÅÍÏ PIC16F87/887 ´ŒÇ¿˜§¡ª¹ PWM ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ Ñè
  • 141. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 141 void main() { /* Initial port for control motor */ ANSELH.F0=0; // RB1 ==> Digital IO ANSELH.F2=0; // RB2 ==> Digital IO TRISB.F1=0; // Motor B 2A TRISB.F2=0; // Motor B 2B TRISD.F0=0; // Motor A 1A TRISD.F1=0; // MOtor A 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 änj·Õè 5kHz ¼‹Ò¹¤íÒÊѧ Pwm_Init() è Ô è è ¨Ò¡¹Ñ¹àÃÔÁµŒ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM ´ŒÇ¡ÒÃʋ§¤íÒÊѧ Pwm_Start() áÅСíÒ˹´¤‹Ò¤ÇÒÁ¡ÇŒÒ§¢Í§ é è è ÊÑ­­Ò³ PWM ´ŒÇ¤íÒÊѧ Pwm_Chage_Duty()ã¹·Õ¹¡Ò˹´¤‹Òänj෋ҡѺ 190 «Ö§àÁ×ͤíҹdz¤‹ÒÍ͡໚¹ è è Õé í è è à»ÍÏૹµ ¨ÐÁÕ¤Ò»ÃÐÁÒ³ 75% àÁ×͹íÒ仢ѺÁÍàµÍÏ ÁÍàµÍϨÐËÁعä»ã¹·ÔÈ·Ò§µÃ§ 2 ÇÔ¹Ò·Õ áÅÐËÁع¡ÅѺ ‹ è 2 ÇÔ¹Ò·ÕÊÅѺ¡Ñ¹ä»àÃ×Í æ è â»Ãá¡ÃÁ·Õè L14-1 ä¿Å PWMtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÏ 俵ç â´Â㪌ʭ­Ò³ PWM ·ÕÊÌҧ¢Ö¹¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F87/887 ´ŒÇ¿˜§¡ª¹ PWM Ñ è é Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ
  • 142. 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
  • 143. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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 ËÁÒ¶֧ ÍѵÃҺʹ·Õ¡Ò˹´¤‹Òãˌ¡º¡ÒÃÊ×ÍÊÒÃÃÐËNjҧµŒ¹·Ò§áÅлÅÒ·ҧ èí Ñ è µÑÇÍ‹ҧ·Õè 10-1 Usart_Init(2400); ໚¹¡ÒáíÒ˹´¤‹ÒºÍ´àõ 2400 ºÔµµ‹ÍÇÔ¹Ò·Õ 10.1.2 Usart_Data_Ready ¿˜§¡ª¹¹Õ㪌µÃǨÊÍºÇ‹Ò ¢ŒÍÁÙÅ㹺ѿà¿ÍϾÌÍÁÊíÒËÃѺ¡ÒÃ͋ҹ¤‹ÒËÃ×ÍäÁ‹ ¿˜§¡ª¹¹Õ¨Ð¤×¹ Ñè é Ñè é ¤‹Ò “1” ¶ŒÒ¢ŒÍÁÙÅ㹺ѿà¿ÍϾÌÍÁÊíÒËÃѺ͋ҹ¤‹Ò䴌 áÅФ׹¤‹Ò “0” ¶ŒÒäÁ‹Á¢ÍÁÙÅÍÂÙ㹺ѿà¿ÍÏ â´Â Ռ ‹ ¡‹Í¹¨Ð㪌§Ò¹¿˜§¡ª¹¹Õ¨ÐµŒÍ§àÃÕ¡¿˜§¡ª¹ Usart_Init() ¢Ö¹ÁÒ¡‹Í¹ Ñè é Ñè é ÃٻẺ¡ÒÃ㪌§Ò¹ unsigned short Usart_Data_Ready(void);
  • 145. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 146 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 15 ¡ÒÃÃѺʋ§¢ŒÍÁÙÅÃÐËNjҧ ÑÔ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÍÁ¾ÔÇàµÍÏ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877(A) ÁÕ¢Ò¾ÍϵÊíÒËÃѺàª×ÍÁµ‹Í¡Ñº¾Íϵ͹ءÃÁ¤×Í¢Ò RC6/TxD è áÅÐ¢Ò RC7/RxD àÁ×͵ŒÍ§àª×ÍÁµ‹Í¡Ñº¤ÍÁ¾ÔÇàµÍÏ«§ãªŒÁҵðҹ RS-232 ¨ÐµŒÍ§ÁÕäÍ«Õ··Ò˹ŒÒ·Õ»ÃѺà»ÅÕ¹ è è Öè èÕ í è è ÃдѺáç´Ñ¹ã¹·Õ¹¢Íá¹Ð¹íÒàºÍÏ MAX232 ËÃ×Í ICL232 â´ÂÁÕǧ¨Ãàª×ÍÁµ‹ÍáÊ´§ã¹ÃÙ»·Õè L15-1 è Õé è ¡ÒÃàª×èÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ l 㪌ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L15-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ÃÙ»·Õè L15-1 ǧ¨Ãàª×ÍÁµ‹ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 ¡Ñº¤ÍÁ¾ÔÇàµÍϼҹ¾Íϵ͹ءÃÁ è ‹
  • 147. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 147 USART Terminal â»Ãá¡ÃÁÃѺʋ§¢ŒÍÁÙÅ͹ءÃÁº¹¤ÍÁ¾ÔÇàµÍϢͧ mikroC ¤ÍÁä¾àÅÍÏ ÊíÒËÃѺ¤ÍÁ¾ÔÇàµÍÏà¾×èÍÃѺáÅÐʋ§¢ŒÍÁÙÅ ¨ÐµŒÍ§ÁÕâ»Ãá¡ÃÁ·Õè·íÒ˹ŒÒ·ÕèÃѺáÅÐʋ§¢ŒÍÁÙÅ ËÃ×Í·ÕèàÃÕÂ¡Ç‹Ò â»Ãá¡ÃÁà·ÍÏÁÔ¹ÍÅ (USART Terminal) mikroC ¤ÍÁä¾àÅÍÏ䴌¨Ñ´àµÃÕÂÁâ»Ãá¡ÃÁ Terminal àÍÒänjáÅŒÇ â´Âä»·Õàè Á¹Ù Tools à USART Terminal ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í è ·Ò§´ŒÒ¹¢ÇÒÁ×Í¡ç䴌 ÊíÒËÃѺ˹ŒÒµÒ¢Í§â»Ãá¡ÃÁ USART Terminal áÊ´§´Ñ§ÃÙ» ã¹â»Ãá¡ÃÁ·Õè L15-1 䴌¡Ò˹´ãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏúʋ§¢ŒÍÁÙÅ´ŒÇºʹàõ 9600 ºÔµµ‹ÍÇÔ¹Ò·Õ, 8 í Ñ ºÔµ¢ŒÍÁÙÅ 8 ºÔµ, äÁ‹ãªŒ¾ÒÃÔµÕé áÅÐ 1 ºÔµ»´·ŒÒÂËÃ×ͺԵÊÔ¹ÊØ´ ´Ñ§¹Ñ¹·Õâ»Ãá¡ÃÁ USART Terminal ¨ÐµŒÍ§¡íÒ˹´ é é è ¾ÒÃÒÁÔàµÍϷ㪌㹡ÒÃÊ×ÍÊÒâŒÍÁÙÅãˌµÃ§¡Ñ¹´ŒÇ èÕ Œ è ¡íÒ˹´¤‹ÒºÍ´àõ »‡Í¹¢ŒÍÁÙÅà¾×Íʋ§ è áÊ´§¢ŒÍÁÙŠ¡àÅÔ¡¡ÒÃàª×èÍÁµ‹Í àª×ÍÁµ‹Í è
  • 148. 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 è ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í·Ò§´ŒÒ¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹·íÒ¡ÒáíÒ˹´µíÒá˹‹§ è é ¾Íϵ͹ءÃÁ áÅСíÒ˹´¤‹ÒºÍ´àõ෋ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ‹Á¾ÒÃÔµáÅШíҹǹºÔµ¢ŒÍÁÙÅ 8 ºÔµ Õ Õé L15.5 ¡´»ØÁ † à¾×Íແ´¡ÒÃÊ×ÍÊÒÃ͹ءÃÁ è è L15.6 ¤ÅÔ¡à¾×Í¡Òà¤Ã×ͧËÁÒ¶١·Õ˹ŒÒËÑÇ¢ŒÍ Send as number à¾×ÍàÅ×Í¡¡ÒÃʋ§¢ŒÍÁÙÅ໚¹µÑÇàÅ¢ è è è è L15.7 Ãѹâ»Ãá¡ÃÁ·Ò§½˜§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ´Ç¡ÒÃແ´»´ä¿àÅÕ§ãËÁ‹Í¡¤Ãѧ ËÃ×Í¡´ÊÇÔµª RESET › Œ é Õ é void main() { Usart_Init(9600); // Initial Serial Commucation [RC6,RC7] TRISD=0x00; // Set PortD==> output while(1) // Loop { if (Usart_Data_Ready()) // Check Data From Serial { Usart_Write('O'); // Send "OK" Usart_Write('K'); PORTD = Usart_Read(); // 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 ¤ÍÁä¾àÅÍÏ ˜ Ñè
  • 149. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 149 L15.8 »‡Í¹µÑÇàÅ¢ 128 ·ÕªÍ§»‡Í¹¢ŒÍÁÙÅ ¨Ò¡¹Ñ¹¡´»ØÁ è‹ é † à¾×Íʋ§¢ŒÍÁÙÅÍÍ¡ä» Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§ è LED áÅÐ˹ŒÒµ‹Ò§ÃѺ¢ŒÍÁÙÅ͹ءÃÁ¢Í§ USART Terminal ·Õè LED µíÒá˹‹§ RD7 ¨ÐµÔ´à¾Õ§µíÒá˹‹§à´ÕÂÇ෋ҹѹ à¹×ͧ¨Ò¡¤‹Ò 128 àÁ×Íá»Å§à»š¹àÅ¢°Ò¹Êͧ é è è ¨ÐÁÕ¤Ò້¹ 10000000 «Ö§ÁÕà¾Õ§ºÔµ 7 ෋ҹѹ·ÕÁ¤Ò໚¹ “1” ‹ š è é è Õ ‹ ·Õ˹ŒÒµ‹Ò§ÃѺ¢ŒÍÁÙÅ͹ءÃÁ¨ÐáÊ´§¢ŒÍ¤ÇÒÁ Received: OK ´Ñ§ÃÙ» à¾×Íᨌ§Ç‹Ò䴌ú¢ŒÍÁÙŵͺ¡ÅѺ¨Ò¡ è è Ñ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅŒÇ L15.9 ·´Åͧʋ§¢ŒÍÁÙŤ‹ÒÍ×¹æ ઋ¹ 255 ¨Ð·íÒãˌ LED µÔ´·Ø¡´Ç§ ËÃ×Íʋ§¤‹ÒµÑÇàÅ¢°Ò¹ÊԺˡ â´Â¾ÔÁ¾ 0x ¹íÒ˹ŒÒ è ¤‹ÒµÑÇàÅ¢°Ò¹ÊԺˡ·ÕµÍ§¡ÒÃʋ§ ઋ¹ 0xAA ·íÒãˌ LED µÔ´´ÑºÊÅѺ¡Ñ¹ ໚¹µŒ¹ è Œ mikroC
  • 150. 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 ໚¹µŒ¹ è é è Ñ inverted ËÁÒ¶֧ à¾×Í¡ÅѺʶҹÐÅͨԡ·Õ¨Ðʋ§ÍÍ¡ä»Âѧ¾Íϵ͹ءÃÁ ¶ŒÒ¡íÒ˹´à»š¹ 0 ¨ÐäÁ‹Á¡Ò è è Õ Ã¡ÅѺʶҹРᵋ¶Ò໚¹¤‹ÒÍ×¹ æ ·ÕäÁ‹ãª‹ 0 ¨Ð໚¹¡ÒáÅѺʶҹРŒ è è µÑÇÍ‹ҧ·Õè 10-4 Soft_Uart_Init(PORTC, 7, 6, 9600,0); ໚¹¡ÒáíÒ˹´¤‹ÒàÃÔÁµŒ¹ãˌ¡ºÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ â´Â㪌¢Ò RC7 ໚¹¢ÒÃѺ¢ŒÍÁÙÅ (Rx) áÅÐ㪌¢Ò RC6 è Ñ è ໚¹¢Òʋ§¢ŒÍÁÙÅ (Tx) â´ÂºÍ´àõ·Õ㪌㹡ÒõԴµ‹Í¤×Í 9600 ºÔµµ‹ÍÇÔ¹Ò·Õ äÁ‹Á¡ÒáÅѺʶҹТŒÍÁÙÅ è Õ
  • 151. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 152 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 16 Ê×ÍÊÒâŒÍÁÙÅ͹ءÃÁâ´Â㪌 Ñ Ô è ¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ 㹡Ò÷´Åͧ¹Õ¹Òàʹ͡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍÏâ´ÂäÁ‹ãªŒâÁ´ÙÅ USART ·ÕÁã¹µÑÇäÁâ¤Ã é í è è Õ ¤Í¹â·ÃÅàÅÍÏ PIC ᵋ¨Ð㪌¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èÍ¡íÒ˹´¡ÒÃÃѺʋ§¢ŒÍÁÙÅá·¹ËÃ×ÍàÃÕÂ¡Ç‹Ò Software UART ·Ñ§¹Õàé ¾×Í໚¹á¹Ç·Ò§ã¹¡ÒÃ㪌§Ò¹¢Ò¾Íϵã´æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC 㹡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁã¹¡Ã³Õ é è è ·ÕâÁ´ÙÅ USART ¶Ù¡¨Ñ´ÊÃÃä»ãªŒ§Ò¹Í×¹ áÅÐÂѧ¤§ÁÕ¤ÇÒÁµŒÍ§¡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ¡ÑºÍØ»¡Ã³Í¹ ËÃ×Í໚¹á¹Ç è è è è× ·Ò§ã¹¡ÒÃà¾ÔÁ¨íҹǹ¢Ò¾ÍϵÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ¹Ñ¹àͧ è è è char *err ; // For serial Data Buffer char DAT ; // Save Data void main() { Soft_Uart_Init(PORTC,7,6,9600,0); // Initial Software serial port TRISD=0x00; // PORTD ==> Output while(1) { DAT = Soft_Uart_Read(&err); // Read Serial data if (err==0) // Check Data tranfer complete ? { Soft_Uart_Write('O'); // send "OK" To PC Soft_Uart_Write('K'); PORTD=DAT; // 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 ¤ÍÁä¾àÅÍÏ ˜ Ñè
  • 153. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 153 ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l Âѧ¤§ãªŒÇ§¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L15-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ 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 è ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í·Ò§´ŒÒ¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹·íÒ¡ÒáíÒ˹´µíÒá˹‹§ è é ¾Íϵ͹ءÃÁ áÅСíÒ˹´¤‹ÒºÍ´àõ෋ҡѺ 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. 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 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 TXSTA CSRC TX9 TXEN SYNC -/SENDB BRGH TRMT TX9D R/W -0 R/W -0 R/W -0 R/W -0 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” - àÍç¹àÍàºÔŵÑÇʋ§¢ŒÍÁÙÅ
  • 155. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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) Njҧ Ô Ñ ºÔµ 0 - TX9D (9th bit of transmit data) : ºÔµà¡çº¢ŒÍÁÙźԵ·Õè 9 ¢Í§¡ÒÃʋ§¢ŒÍÁÙÅẺ 9 ºÔµ ºÔµ¹Õ㪌ºÃèآÍÁÙźԵ·Õè 9 㹡óշàÕè Å×Í¡¡ÒÃʋ§¢ŒÍÁÙÅẺ 9 ºÔµ â´Â¡ÒÃ૵ºÔµ TX9 áÅÐÂѧÊÒÁÒö é Œ 㪌໚¹ºÔµ¾ÒÃÔµ¢Í§¡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ䴌 Õé è 10.3.2 RCSTA ÃÕ¨ÊàµÍÏáÊ´§Ê¶Ò¹ÐáÅФǺ¤ØÁ¡ÒÃÃѺ¢ŒÍÁÙÅ Ô ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 RCSTA SPEN 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 ºÔµ 7 - SPEN (Serial port enable bit) : ºÔµàÅ×Í¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART “0” - ´ÔÊàÍàºÔÅ “1” - àÍç¹àÍàºÔÅà¾×èÍ㪌§Ò¹âÁ´ÙÅ USART ·íÒãˌ¢Ò RB7/RxD áÅÐ RB6/TxD 㪌§Ò¹¡ÑºâÁ´ÙÅ USART à¾×ÍÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ àÁ×ͺԵ 7 áÅÐ 6 ¢Í§ÃÕ¨ÊàµÍÏ TRISC ¶Ù¡à«µà»š¹ “1” è è è Ô
  • 156. 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 áÅÐÂѧÊÒÁÒö é Œ 㪌໚¹ºÔµ¾ÒÃÔµ¢Í§¡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ䴌 Õé è
  • 157. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 157 10.3.3 ʋǹ¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅËÃ×ͺʹàõà¨à¹ÍàÃàµÍÏ ã¹âÁ´ÙÅ USART 㪌Êǹ¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅËÃ×ͺʹàõà¨à¹ÍààµÍÏà¾Õ§ ‹ ªØ´à´ÕÂÇ ÊÒÁÒöÃͧÃѺ·Ñ§¡Ò÷íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊáÅЫԧâ¤Ã¹ÑÊ â´ÂÁÕ¤ÇÒÁÅÐàÍÕ´ 8 ºÔµ é ÃÕ¨ÔÊàµÍϤǺ¤ØÁ¡Ò÷íÒ§Ò¹¤×Í SPBRG â´Â¨Ð¤Çº¤ØÁ¤ÒºàÇÅҢͧä·àÁÍÏÍÔÊÃТ¹Ò´ 8 ºÔµà¾×èÍ ¡íÒà¹Ô´ÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅ àÁ×Í·íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑʵŒÍ§·íҧҹËÇÁ¡Ñº¢ŒÍÁÙÅ·Õºµ è è Ô BRGH (ºÔµ 2 ¢Í§ÃÕ¨ÊàµÍÏ TXSTA) à¾×Í¡íÒ˹´Â‹Ò¹¢Í§ÍѵÃÒàÃçÇ໚¹áººµèÒáÅÐÊÙ§ ´Ñ§áÊ´§¤ÇÒÁ Ô è í ÊÑÁ¾Ñ¹¸ã¹µÒÃÒ§·Õè 3.4.1 «Ö§ã¹µÒÃҧ䴌áÊ´§ÊÙµÃÊíÒËÃѺ¤íҹdzËÒ¤‹ÒÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅ è ËÃ×ͺʹàõã¹áµ‹ÅÐà§×è͹ä¢änj´ŒÇ ÊíÒËÃѺ¤‹Ò¢Í§¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍÏ SPBRG «Ö§ãªŒã¹¡ÒáíÒ˹´ÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅ Ô è ÊÒÁÒö¤íҹdz䴌¨Ò¡Êٵ÷ÕÃкØã¹µÒÃÒ§·Õè 10-1 ᵋ¨ÐÁÕ¤Ò¼Ô´¾ÅÒ´à¡Ô´¢Ö¹ ´Ñ§µÑÇÍ‹ҧµ‹Í仹Õé è ‹ é ¡íÒ˹´ãˌ¤ÇÒÁ¶ÕèÊÑ­­Ò³¹Ò́¡ÒËÅÑ¡ (ËÃ×ͤÇÒÁ¶Õè¢Í§¤ÃÔʵÍÅ) ෋ҡѺ 16MHz µŒÍ§¡Òà ºÍ´àõ෋ҡѺ 9,600 ºÔµµ‹ÍÇÔ¹Ò·Õ àÅ×͡‹ҹºÍ´àõµèÒ ·íҧҹ໚¹áººÍЫԧâ¤Ã¹ÑÊ ÊÒÁÒöÊÃØ» í ¤ÇÒÁÊÑÁ¾Ñ¹¸·Ò§¤³ÔµÈÒʵÏ䴌´Ñ§¹Õé fOSC ¤‹ÒºÍ´àõ = 64 ( X 1) 16 x106 9,600 64( X 1) X 25.042 â´Â·Õ¤Ò X ¤×ͤ‹Ò¢Í§ÃÕ¨ÊàµÍÏ SPBRG ᵋà¹×ͧ¨Ò¡¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍÏ SPBRG µŒÍ§ è‹ Ô è Ô à»š¹àÅ¢¨íҹǹàµçÁ ¤‹Ò¢Í§ SPBRG ¨Ö§à»š¹ 25 ¹íÒ¤‹Ò 25 á·¹¡ÅѺࢌÒä»ã¹ÊÙµÃËÒ¤‹ÒºÍ´àõ ¨Ð䴌 SYNC ºÔµ BRGH = 0 (ÍѵÃÒàÃçǵíèÒ) ºÔµ BRGH = 1 (ÍѵÃÒàÃçÇÊÙ§) fOSC fOSC 0 ºÍ´àõ (ÍЫԧâ¤Ã¹ÑÊ) = ºÍ´àõ = 64 X 1 16 X 1 fOSC 1 ºÍ´àõ («Ô§â¤Ã¹ÑÊ) = 4X 1 µÒÃÒ§·Õè 10-1 áÊ´§ÊٵáÒäíҹdzËÒ¤‹ÒÍѵÃÒàÃçÇ㹡Òö‹Ò·ʹ¢ŒÍÁÙÅËÃ×ͺʹàõ â´Â¤‹Ò¢Í§ X ¤×ͤ‹Ò¢Í§ÃÕ¨ÊàµÍÏ SPBRG Ô
  • 158. 158 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 16 x106 ºÍ´àõ = 64(25 1) = 9,615 ºÔµµ‹ÍÇÔ¹Ò·Õ ¹Ñ¹¤×Íà¡Ô´¤‹Ò¼Ô´¾ÅÒ´ 15 ºÔµµ‹ÍÇÔ¹Ò·Õ ÊÒÁÒö¤íҹdz໚¹à»ÍÏà«ç¹µ¤ÇÒÁ¼Ô´¾ÅҴ䴌¨Ò¡ è % ¤ÇÒÁ¼Ô´¾ÅÒ´ = (ºÍ´àõ·Õ¤Ò¹Ç³-ºÍ´àõ·ÕµÍ§¡ÒÃ)/ ºÍ´àõ·ÕµÍ§¡Òà x100% èí èŒ èŒ = 0.15625% Í‹ҧäáçµÒÁ 㹺ҧ¡Ã³ÕÊÒÁÒöŴ¤ÇÒÁ¼Ô´¾ÅҴ䴌â´Â¡ÒáíÒ˹´ãˌÊÌҧºÍ´àõµèÒ´ŒÇÂ í ¤ÇÒÁàÃçÇÊ٧᷹ â´Â¡íÒ˹´ºÔµ BRGH ໚¹ “1” f = 20MHz f = 10MHz fOSC = 4MHz fOSC = 3.579545MHz fOSC = 32.768kHz ºÍ´àõ OSC OSC (kbps) ºÍ´àõ ¼Ô´¾ÅÒ´ ¤‹Ò¢Í§ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤‹Ò¢Í§ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤‹Ò¢Í§ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤‹Ò¢Í§ ºÍ´àõ ¼Ô´¾ÅÒ´ ¤‹Ò¢Í§ ·Õà¡Ô´¨ÃÔ§ è (%) SPBRG ·Õà¡Ô´¨ÃÔ§ è (%) SPBRG ·Õà¡Ô´¨ÃÔ§ è (%) SPBRG ·Õà¡Ô´¨ÃÔ§ è (%) SPBRG ·Õà¡Ô´¨ÃÔ§ è (%) SPBRG 0.3 N/A - - N/A - - 0.3005 -0.17 207 0.301 +0.23 185 0.256 -14.67 1 1.2 1.221 +1.73 255 1.202 +0.16 129 1.202 +1.67 51 1.190 -0.83 46 N/A - - 2.4 2.404 +0.16 129 2.404 +0.16 64 2.404 +1.67 25 2.432 +1.32 22 N/A - - 9.6 9.469 -1.36 32 9.766 +1.73 15 10.42 +8.54 5 9.322 -2.90 5 N/A - - 19.2 19.53 +1.73 15 19.53 +1.73 7 20.83 +8.50 2 18.64 -2.90 2 N/A - - 76.8 78.13 +1.73 3 78.13 +1.73 1 N/A - - N/A - - N/A - - 96 104.2 +8.51 2 N/A - - N/A - - N/A - - N/A - - 300 312.5 +4.17 0 N/A - - N/A - - N/A - - N/A - - 500 N/A - - N/A - - N/A - - N/A - - N/A - - ÊÙ§ÊØ´ 312.5 - 0 156.3 - 0 62.500 - 0 55.93 - 0 0.512 - 0 µíÒÊØ´ è 1.221 - 255 0.6104 - 255 0.244 - 255 0.2185 - 255 0.0020 - 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 +0.16 129 9.615 +0.16 64 9.615 +0.16 25 9.727 +1.32 22 19.2 19.230 +0.16 64 18.939 -1.36 32 19.230 +0.16 12 18.643 -2.90 11 38.4 37.878 -1.36 32 39.062 +1.7 15 41.667 +8.51 5 37.286 -2.90 5 57.6 56.818 -1.36 21 56.818 -1.36 10 62.5 +8.51 3 55.930 -2.90 3 115.2 113.636 -1.36 10 125 +8.51 4 125.0 +8.51 1 111.860 -2.90 1 250 250 0 4 312.50 +28.6 1 250 0 0 223.721 -10.51 0 625 625 0 1 625 0 0 N/A - - N/A - - 1250 1250 0 0 N/A - - N/A - - N/A - - µÒÃÒ§·Õè 10-3 áÊ´§ÃÒÂÅÐàÍÕ´¤‹Ò¢Í§ÃÕ¨ÔÊàµÍÏ SPBRG, ¤‹ÒºÍ´àõ¨ÃÔ§ áÅÐà»ÍÏà«ç¹µ¤ÇÒÁ ¼Ô´¾ÅÒ´àÁ×Í¡íÒ˹´ãˌâÁ´ÙÅ USART ·íÒ§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊÍѵÃÒàÃçÇÊÙ§ ( BRGH = “1”) è
  • 159. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 159 ·Ø¡¤Ãѧ·Õ¡Ò˹´¤‹ÒºÍ´àõãËÁ‹â´Âà¢Õ¹¢ŒÍÁÙÅŧã¹ÃÕ¨ÊàµÍÏ SPBRG ¨Ð·íÒãˌ¤Ò¢Í§ä·àÁÍÏ é èí Ô ‹ ÍÔÊÃÐÀÒÂã¹Ê‹Ç¹¡íÒà¹Ô´ºÍ´àõ¶Ù¡ÃÕ૵ à¤ÅÕÂϤÒ໚¹Èٹ ´Ñ§¹Ñ¹àÁ×͵ŒÍ§¡ÒáíÒ˹´ÍѵÃÒàÃçÇ㹡Òö‹Ò ‹ é è ·Í´¢ŒÍÁÙÅËÃ×ͺʹàõãËÁ‹ ¤ÇÃËÂØ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART ¹Õ¡Í¹ àÁ×Í¡íÒ˹´¤‹ÒãËÁ‹àÃÕºÌÍÂ é‹ è áŌǨ֧àÃÔÁµŒ¹·íÒ§Ò¹ãËÁ‹ à¾×ͤÇÒÁÊдǡ㹡ÒÃ㪌§Ò¹¨Ö§ä´ŒÊÃØ»¤‹Ò¢Í§ÃÕ¨ÊàµÍÏ SPBRG ·ÕºÍ´àõ è è Ô è µ‹Ò§æ ÃÇÁ·Ñ§¤‹Ò¤ÇÒÁ¼Ô´¾ÅÒ´ àÁ×Í·íÒ§Ò¹·Ñ§ã¹âËÁ´«Ô§â¤Ã¹ÑÊáÅÐÍЫԧâ¤Ã¹ÑÊänj㹵ÒÃÒ§·Õè 10-2 áÅÐ é è é 10-3 ¼Ù㪌§Ò¹ÊÒÁÒö¹íÒ¤‹Òã¹µÒÃÒ§ä»ãªŒä´ŒàÅÂâ´ÂäÁ‹µÍ§àÊÕÂàÇÅÒ¤íҹdzãËÁ‹ Œ Œ 10.4 ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ USART ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ 10.4.1 ¡ÒÃʋ§¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ ã¹ÃÙ»·Õè 10-2 áÊ´§ä´ÍÐá¡ÃÁ¡ÒÃʋ§¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ ËÑÇã¨ÊíҤѭ¢Í§¡Ò÷íÒ§Ò¹ÍÂً ·Õª¿µÃ¨ÊàµÍϵÇʋ§ (transmit shift register : TSR) â´Â㹪ԿµÃ¨ÊàµÍϺÃèآÍÁÙÅ·Õ䴌ÁÒ¨Ò¡ÃÕ¨ÊàµÍÏ èÔ ÕÔ Ñ ÕÔ Œ è Ô à¡çº¢ŒÍÁÙÅÊíÒËÃѺ¡ÒÃʋ§ËÃ×Í TXREG ¢ŒÍÁÙŷյͧ¡ÒÃʋ§¨Ð¶Ù¡à¢Õ¹ÁÒÂѧ TXREG ¨Ò¡¹Ñ¹¨Ð¶‹Ò·ʹ èŒ é µ‹Íä»ÂѧªÔ¿µÃ¨ÊàµÍÏ TSR àÁ×ÍÁÕ¡ÒÃʋ§ºÔµ»´·ŒÒ¢ͧ¢ŒÍÁÙÅ㹪ش¡‹Í¹Ë¹ŒÒÍÍ¡ä»áÅŒÇ ÕÔ è ËÅѧ¨Ò¡·ÕÁ¡ÒÃʋ§ºÔµ»´·ŒÒÂÍÍ¡ä» TSR ¨Ð䴌ú¢ŒÍÁÙÅãËÁ‹¨Ò¡ÃÕ¨ÊàµÍÏ TXREG «Ö§à¡Ô´¢Ö¹ è Õ Ñ Ô è é ÀÒÂã¹ä«à¡ÔÅ¡Ò÷íÒ§Ò¹à´ÕÂÇ ÃÕ¨ÊàµÍÏ TXREG ¨ÐNjҧ áÅкԵ TXIF (ºÔµ 4 ¢Í§ÃÕ¨ÊàµÍÏ PIR1) ¨Ð૵ Ô Ô ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅÍÔ¹àµÍÏûµänj ¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ¢¹ ºÔµ TXIF ¨Ðà¤ÅÕÂÏ䴌¡µÍàÁ×ÍÁÕ¡Òö‹ÒÂ Ñ Ñ Öé ç‹ è ·Í´¢ŒÍÁÙÅãËÁ‹Å§ã¹ÃÕ¨ÊàµÍÏ TXREG ʋǹʶҹТͧªÔ¿µÃ¨ÊàµÍÏ TSR ¨ÐáÊ´§¼‹Ò¹ºÔµ TRMT (ºÔµ Ô ÕÔ 1 ¢Í§ÃÕ¨ÊàµÍÏ TXSTA) àÁ×Í TSR Njҧ¨Ð૵ºÔµ¹Õé ´Ñ§¹Ñ¹¼Ù㪌§Ò¹ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁµÃǨ¨Ñº¡ÒÃ Ô è é Œ à»ÅÕ¹á»Å§·Õºµ¹Õàé ¾×ÍàÃÔÁµŒ¹¡ÒÃʋ§¢ŒÍÁÙÅ¡ç䴌 è è Ô è è ºÑÊ¢ŒÍÁÙÅ 8 ºÔµ TXIF TXREG TXIE RC6/TxD/CK (8) (0) ºÑ¿à¿ÍÏáÅÐ TSR ʋǹ¤Çº¤ØÁ¢Ò¾Íϵ ÍÔ¹àµÍÏÃÑ»µ ÊÑ­­Ò³¹ÒÌÔ¡Ò TRMT SPEN TXEN ¢Í§ºÍ´àõ SPBRG TX9 ʋǹ¡íÒà¹Ô´ºÍ´àõ TX9D ÃÙ»·Õè 10-2 ä´ÍÐá¡ÃÁ¡ÒÃʋ§¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x
  • 160. 160 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ÊÑ­­Ò³à¢Õ¹ ÃÕ¨ÊàµÍÏ TXREG Ô ~ ~~~~ ~ ~~~~ ÊÑ­­Ò³¹ÒÌÔ¡Ò ¢Í§ºÍ´àõ ÊÑ­­Ò³·Õ¢Ò è RC6/TxD/CK ºÔµàÃÔÁµŒ¹ è ºÔµ 0 ºÔµ 1 ºÔµ 7 ËÃ×Í 8 ºÔµ»´·ŒÒ ʶҹТͧ ºÔµá¿Å¡ TXIF ¢ŒÍÁÙÅàÇÔÏ´·Õè 1 àÃÔèÁàÅ×è͹¢ŒÍÁÙÅàÇÔÏ´·Õè 1 ʶҹТͧ ºÔµá¿Å¡ TRMT ~ ~ ÃÙ»·Õè 10-3 ä´ÍÐá¡ÃÁàÇÅÒ¡ÒÃʋ§¢ŒÍÁÙÅâËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x ¡ÒÃàÃÔèÁµŒ¹Ê‹§¢ŒÍÁÙÅÍÍ¡¨Ò¡âÁ´ÙÅ USART à¡Ô´¢Öé¹àÁ×èÍ૵ºÔµ TXEN (ºÔµ 5 ¢Í§ÃÕ¨ÔÊàµÍÏ TXSTA) ᵋ¡ÒÃàÃÔÁµŒ¹¨Ãԧ㹷ҧ»¯Ôºµ¨Ðà¡Ô´¢Ö¹ËÅѧ¨Ò¡·ÕèÊàµÍÏ TXREG 䴌ú¡ÒÃà¢Õ¹¢ŒÍÁÙÅ è ÑÔ é èÕÔ Ñ áÅкʹàõà¨à¹ÍàÃàµÍÏÊÌҧÊÑ­­Ò³¹Ò́¡Ò¢Í§¡Òö‹Ò·ʹ¢ŒÍÁÙÅ¢Ö¹ (´Ùû·Õè 10-2 »ÃСͺ) ¢ŒÍÁÙÅ é Ù ¨Ò¡ TXREG ¨Ðʋ§ä»ÂѧªÔ¿µÃ¨ÊàµÍÏ TSR áŌǷÂÍÂʋ§ÍÍ¡ä»·Ò§¢Ò¾Íϵ RC6/TxD/CK â´Â·Õè ÕÔ ¢Ò¾ÍϵÂѧÁÕǧ¨ÃºÑ¿à¿ÍÏáÅÐÊÑ­­Ò³¤Çº¤ØÁÍÕ¡ 1 àʌ¹¤×Í ºÔµ SPEN (ºÔµ 7 ¢Í§ÃÕ¨ÊàµÍÏ RCSTA) Ô «Ö§µŒÍ§à«µºÔµ¹Õé Áԩйѹ¢ŒÍÁÙŨÐäÁ‹ÊÒÁÒöʋ§ÍÍ¡ä»ä´Œ è é ¡ÒÃàÅ×͹¢ŒÍÁÙŨÐàÃÔÁµŒ¹´ŒÇºԵàÃÔÁµŒ¹µ‹Í´ŒÇ¢ŒÍÁÙźԵ 0 ¨¹¶Ö§¢ŒÍÁÙźԵ 7 ËÃ×Í 8 ¢Ö¹ÍÂÙ¡º è è è é ‹Ñ ¡ÒáíÒ˹´¢¹Ò´¢Í§¢ŒÍÁÙÅNjҵŒÍ§¡ÒÃʋ§áºº 8 ËÃ×Í 9 ºÔµ áÅÐʋ§ºÔµ»´·ŒÒÂÍÕ¡ 1 ºÔµÊØ´·ŒÒ ໚¹ Íѹ¤Ãº 1 ªØ´¢Í§¢ŒÍÁÙÅ ºÔµ TRMT ¨Ðᨌ§Ç‹ÒªÔ¿µÃ¨ÊàµÍÏäÁ‹ÇÒ§µÑ§áµ‹àÃÔÁʋ§ºÔµàÃÔÁµŒ¹ áÅШÐ૵ ÕÔ ‹ é è è à¾×Íᨌ§Ç‹ÒNjҧËÅѧ¨Ò¡·Õʧ¢ŒÍÁÙźԵÊØ´·ŒÒ ¡‹Í¹Ê‹§ºÔµ»´·ŒÒ ÊÒÁÒö´Ùû·Õè 10-3 »ÃСͺ è è ‹ Ù ÊÃØ»¢Ñ¹µÍ¹¡ÒáíÒ˹´ãˌâÁ´ÙÅ USART ʋ§¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ䴌´§¹Õé é Ñ (1) ¡íÒ˹´¢ŒÍÁÙÅÊÌҧºÍ´àõŧ㹠SPBRG Ëҡ㪌ºÍ´àõ¤ÇÒÁàÃçÇÊÙ§µŒÍ§à«µºÔµ BRGH ´ŒÇ (2) àÅ×Í¡¿˜§¡ª¹¡ÒõԴµ‹Í¼‹Ò¹¾Íϵ͹ءÃÁáÅСíÒ˹´ãˌ·Ò§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ Ñè í â´Â¡ÒÃ૵ºÔµ SPEN áÅÐà¤ÅÕÂϺµ SYNC Ô (3) ¶ŒÒµŒÍ§¡ÒÃãˌà¡Ô´ÍÔ¹àµÍÃ»µ µŒÍ§·íÒ¡ÒÃ૵ºÔµ TXIE Ñ (4) àÍç¹àÍàºÔÅ¡ÒÃʋ§¢ŒÍÁÙÅâ´Â૵ºÔµ TXEN ʋ§¼Åãˌá¿Å¡ TXIF ¶Ù¡à«µµÒÁä»´ŒÇ (5) ¡íÒ˹´¢ŒÍÁÙÅŧã¹ÃÕ¨ÊàµÍÏ TXREG à¾×ÍàÃÔÁµŒ¹Ê‹§¢ŒÍÁÙÅ Ô è è
  • 161. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 FERR ÊÑ­­Ò³¹ÒÌԡҢͧ CREN ºÍ´àõ x64 64 SPBRG MSB RSR LSB 16 STOP (8) 7 1 0 56)46 ʋǹ¡íÒà¹Ô´ºÍ´àõ RX9 RC7/RxD/CK ºÑ¿à¿ÍÏáÅРʋǹàÃÕ¡¤×¹¢ŒÍÁÙŠʋǹ¤Çº¤ØÁ¢Ò¾Íϵ (data recovery) ºÑÊ¢ŒÍÁÙÅ 8 ºÔµ SPEN àÍç¹àÍàºÔÅãˌ RX9 ºÑ¿à¿ÍÏú¢ŒÍÁÙÅ Ñ ADEN ºÑÊ¢ŒÍÁÙÅ 8 ºÔµ RX9 ADEN RSR <8> 4+1. TX9D RCRE FIFO ÍÔ¹àµÍÏûµ Ñ TX9D RCRE 4+1- ºÑÊ¢ŒÍÁÙÅ 8 ºÔµ ÃÙ»·Õè 10-4 ä´ÍÐá¡ÃÁ¡ÒÃÃѺ¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑʢͧâÁ´ÙÅ USART ã¹ PIC16F87x
  • 162. 162 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ËÑÇ㨢ͧ¡ÒÃÃѺ¢ŒÍÁÙŤ×ͪԿµÃ¨ÊàµÍÏ RSR ËÅѧ¨Ò¡·ÕµÃǨ¨ÑººÔµ»´·ŒÒ¢ͧ¡ÒÃÃѺ¢ŒÍÁÙÅ ÕÔ è 䴌 ¢ŒÍÁÙÅã¹ RSR ¨Ðʋ§ä»ÂѧÃÕ¨ÊàµÍÏ¢ÍÁÙŵÑÇÃѺ RCREG ËÅѧ¨Ò¡·Õ¶Ò·ʹ¢ŒÍÁÙÅàÊÃç¨ÊÁºÙó Ô Œ è‹ ºÔµá¿Å¡ RCIF (ºÔµ 5 ¢Í§ ÃÕ¨ÊàµÍÏ PIR1) ¨Ð¶Ù¡à«µ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅÍÔ¹àµÍÏûµänj¡¨Ðà¡Ô´ Ô Ñ ç ÍÔ¹àµÍÏûµ¢¹ á¿Å¡ RCIF ¨Ðà¤ÅÕÂÏàÁ×Í¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍÏ RCREG ¶Ù¡Í‹Ò¹ÍÍ¡ä»áÅÐNjҧŧ Ñ Öé è Ô ÃÕ¨ÊàµÍÏ¢ÍÁÙŵÑÇÃѺ RCREG ÁÕ 2 ªØ´ ໚¹áºº FIFO ¤×Í¢ŒÍÁÙÅ·Õàè ¢ŒÒ¡‹Í¹¨Ð¶Ù¡Ê‹§ÍÍ¡¡‹Í¹ ·íÒãˌ Ô Œ ÃѺ¢ŒÍÁÙÅ䴌ÃÇ´àÃçÇ à¾ÃÒÐÃѺ¢ŒÍÁÙÅ 3 亵ä´ŒµÍà¹×ͧ ã¹¢³Ð·Õ¡ÒÅѧ¶‹Ò·ʹ¢ŒÍÁÙŷѧ 2 亵¨Ò¡ÃÕ¨ÊàµÍÏ ‹ è èí é Ô RCREG ¢ŒÍÁÙÅã¹äºµ·ÊÒÁ ÊÒÁÒöࢌÒÊÙâÁ´ÙÅ USART 䴌·¹·Õ â´Â¢ŒÍÁÙŨж١à¡çºänj·Õè RSR ¡‹Í¹ Õè ‹ Ñ ã¹¡Ã³Õ·ÊÒÁÒöµÃǨ¨ÑººÔµ»´·ŒÒÂ䴌 ᵋã¹ÃÕ¨ÊàµÍÏ RCREG ÂѧÁÕ¢ÍÁÙÅÍÂً ¨Ðà¡Ô´à˵ءÒó èÕ Ô Œ ª¹¡Ñ¹¢Í§¢ŒÍÁÙÅ àÃÕÂ¡Ç‹Ò âÍàÇÍÏù (overrun error) ºÔµ OERR ¨Ð¶Ù¡à«µà¾×Íᨌ§¤ÇÒÁ¼Ô´¾ÅÒ´´Ñ§¡Å‹ÒÇ Ñ è ʋ§¼Åãˌ¢ÍÁÙÅã¹ RSR ËÒÂä» áÅСÒö‹Ò·ʹ¢ŒÍÁÙŨҡ RSR ä»ÂѧÃÕ¨ÊàµÍÏ RCREG ¨Ð¶Ù¡ÂѺÂѧänj Œ Ô é µÃҺ෋ҷպµ OERR Âѧ¤§à«µÍÂً ºÔµ OERR ÊÒÁÒöà¤ÅÕÂÏ䴌´Ç¡Ãкǹ¡Ò÷ҧ«Í¿µáÇÏ è Ô Œ ¤ÇÒÁ¼Ô´¾ÅÒ´ÍաẺ˹֧·ÕÍÒ¨à¡Ô´¢Ö¹ä´Œ¤Í ¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ŒÍÁÙÅ (framing error) è è é × ¨Ðà¡Ô´¢Ö¹àÁ×Í¡ÒõÃǨ¨ÑººÔµ»´·ŒÒ¾ºÇ‹Ò໚¹Åͨԡ “0” «Ö§µÃ§¡ÑºÊ¶Ò¹Ð¢Í§ºÔµàÃÔÁµŒ¹¢Í§¢ŒÍÁÙÅã¹ é è è è ªØ´¶Ñ´ä» ʋ§¼ÅãˌäÁ‹ÊÒÁÒöµÕ¤ÇÒÁ䴌ÇÒ ä´ŒÃº¢ŒÍÁÙÅÍ‹ҧÊÁºÙó¡Í¹Ë¹ŒÒ¹ÕËÃ×ÍäÁ‹ àÁ×Í¡ÒõÃǨ ‹ Ñ ‹ é è ¨Ñº¾ºÇ‹Ò ໚¹Åͨԡ “0” ¡ÒÃÃѺ¢ŒÍÁÙŢͧµÑÇÃѺ¡ç¨ÐàÃÔÁµŒ¹µ‹Íä» Ê‹§¼Åãˌà¡Ô´¡ÒÃ͋ҹ¢ŒÍÁÙźԵáá໚¹ è “0” «Ö§á·Œ·¨ÃÔ§áŌÇÁѹ¤×ͺԵàÃÔÁµŒ¹¢Í§¢ŒÍÁÙŪشµ‹Íä» ·íÒãˌ¢ÍÁÙÅ·ÕúࢌÒÁÒ¼Ô´¾ÅÒ´ ºÔµ FERR ¨Ð¶Ù¡ è Õè è Œ èÑ à«µà¾×Íᨌ§¤ÇÒÁ¼Ô´¾ÅÒ´´Ñ§¡Å‹ÒÇ àÁ×ÍÁÕ¡ÒÃ͋ҹ¤‹Ò¢Í§ÃÕ¨ÊàµÍÏ RCREG ºÔµ FERR ¨Ð¶Ù¡»ÃѺ»Ãاâ´Â è è Ô Íѵâ¹ÁÑµÔ ¶ŒÒËÒ¡¡ÒÃÃѺ¢ŒÍÁÙŤÃѧãËÁ‹¶¡µŒÍ§ ºÔµ FERR ¨Ð¡ÅÒÂ໚¹ “0” â´ÂÍѵâ¹ÁÑµÔ Í‹ҧäáçµÒÁ é Ù ËÒ¡à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ŒÍÁÙÅ¢Ö¹ áÅÐàÅ×Í¡¡ÒÃÃѺ¢ŒÍÁÙÅẺ 9 ºÔµ ¨íÒ໚¹Í‹ҧÂÔ§·Õ¨ÐµŒÍ§·íÒ¡Òà é è è ͋ҹ¢ŒÍÁÙŨҡ RCSTA ¢Ö¹ÁÒ¡‹Í¹à¾×ÍÃÑ¡ÉÒ¢ŒÍÁÙźԵ·Õè 9 àÍÒänj ¨Ò¡¹Ñ¹¨Ö§Í‹Ò¹¤‹Ò¢Í§ÃÕ¨ÊàµÍÏ RCREG é è é Ô à¾×Í͋ҹ¢ŒÍÁÙÅã¹ 8 ºÔµ·Õàè ËÅ×Í ¾ÃŒÍÁ¡Ñº»ÃѺ»Ãا¤‹Ò¢Í§ºÔµ FERR ´ŒÇ è ÊÃØ»¢Ñ¹µÍ¹¡ÒáíÒ˹´ãˌâÁ´ÙÅ USART ÃѺ¢ŒÍÁÙÅã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ䴌´§¹Õé é Ñ (1) ¡íÒ˹´¢ŒÍÁÙÅÊÌҧºÍ´àõŧ㹠SPBRG Ëҡ㪌ºÍ´àõ¤ÇÒÁàÃçÇÊÙ§µŒÍ§à«µºÔµ BRGH (2) àÅ×Í¡¿˜§¡ª¹¡ÒõԴµ‹Í¼‹Ò¹¾Íϵ͹ءÃÁáÅСíÒ˹´ãˌ·Ò§Ò¹ã¹âËÁ´ÍЫԧâ¤Ã¹ÑÊ Ñè í â´Â¡ÒÃ૵ºÔµ SPEN áÅÐà¤ÅÕÂϺµ SYNC Ô (3) ¶ŒÒµŒÍ§¡ÒÃãˌà¡Ô´ÍÔ¹àµÍÏûµ µŒÍ§à«µºÔµ RCIE Ñ (4) ¶ŒÒàÅ×Í¡¡ÒÃÃѺ¢ŒÍÁÙÅẺ 9 ºÔµãˌ૵ºÔµ RX9
  • 163. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 163 (5) àÍç¹àÍàºÔÅ¡ÒÃÃѺ¢ŒÍÁÙÅâ´Â¡ÒÃ૵ºÔµ CREN (6) ºÔµá¿Å¡ RCIF ¶Ù¡à«µàÁ×ÍÃѺ¢ŒÍÁÙÅàÊÃç¨ÊÔ¹ ¨Ðà¡Ô´ÍÔ¹àµÍÏûµËÒ¡àÍç¹àÍàºÔÅänj è é Ñ (7) ͋ҹ¢ŒÍÁÙŢͧÃÕ¨ÊàµÍÏ RCSTA à¾×Í͋ҹ¢ŒÍÁÙźԵ·Õè 9 ¶ŒÒËÒ¡àÅ×Í¡¡ÒÃÃѺ¢ŒÍÁÙÅ Ô è Ẻ 9 ºÔµ áÅеÃǨÊͺ¤ÇÒÁ¼Ô´¾ÅÒ´·ÕÍÒ¨à¡Ô´¢Ö¹ÃÐËNjҧ¡ÒÃÃѺ¢ŒÍÁÙÅ è é (8) ͋ҹ¢ŒÍÁÙÅ 8 ºÔµ·ÕúࢌÒÁÒ â´Â͋ҹ¼‹Ò¹·Ò§ÃÕ¨ÊàµÍÏ RCREG èÑ Ô (9) ¶ŒÒà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹ ãˌà¤ÅÕÂϺµá¨Œ§¤ÇÒÁ¼Ô´¾ÅÒ´ËÃ×ͺԵ CREN é Ô 10.5 ¡ÒÃ㪌͹àµÍÏûµà¾×ÍÃѺ¢ŒÍÁÙÅ Ô Ñ è ¡ÒÃÃѺ¢ŒÍÁÙÅ͹ءÃÁẺ㪌ÇÔ¸Õ¡ÒÃǹÅÙ»Ãͨ¹¡Ç‹Ò¨ÐÁÕ¢ŒÍÁÙŶ١ʋ§ÍÍ¡ÁÒ Áըش͋͹µÃ§·Õè ¶ŒÒâ»Ãá¡ÃÁÁÕ¡ÒáÃÐâ´´ä»·íҧҹʋǹÍ×¹ æ áŌǡÅѺÁÒÃѺ¢ŒÍÁÙÅäÁ‹·¹ ¢ŒÍÁÙÅ·ÕʧÁÒÍÒ¨ÊÙ­ËÒÂ䴌 è Ñ è ‹ ·Ò§á¡Œä¢¤×Í ãªŒ¡ÒÃÍÔ¹àµÍÏûµà¢ŒÒÁÒª‹Ç ·íÒãˌâ»Ãá¡ÃÁäÁ‹¨Ò໚¹µŒÍ§ÁÕ¡ÒõÃǨÊͺ¡ÒÃ Ñ í ÃѺ¢ŒÍÁÙÅ ÊÒÁÒö价íÒ§Ò¹ã¹Ê‹Ç¹Í×¹ æ 䴌 Ãͨ¹¡Ç‹Ò¨ÐÁÕ¡ÒáÃеع¨Ò¡ÍÔ¹àµÍÏûµ¤Ãѧ˹֧¨Ö§ è Œ Ñ é è ¡ÃÐâ´´ÁÒ·íÒ§Ò¹ã¹â»Ãá¡ÃÁ‹ÍºÃÔ¡ÒÃÍÔ¹àµÍÏÃÑ»µ¢Í§¡ÒÃÃѺ¢ŒÍÁÙÅ͹ءÃÁ ʋ§¼Åãˌ¡ÒÃÃѺ ¢ŒÍÁÙÅÁÕ¤ÇÒÁ¶Ù¡µŒÍ§ÁÒ¡ÂÔ觢Öé¹ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC 䴌àµÃÕÂÁʋǹºÃÔ¡ÒÃÍÔ¹àµÍÏûµÊÒËÃѺâÁ´ÙÅÊ×ÍÊÒâŒÍÁÙÅ Ñ í è ͹ءÃÁ USART änjáÅŒÇ â´Âãˌ·Ò¡ÒÃàÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµ¹´Ç¡ÒÃ૵ºÔµ RCIE ã¹ÃÕ¨ÊàµÍÏ í Ñ Õé Œ Ô PIE1 àÁ×ÍÁÕ¢ÍÁÙŶ١ʋ§à¢ŒÒÁÒ ºÔµ RCIF ¨Ð¶Ù¡à«µ àÁ×Íà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ «Õ¾Â٨СÃÐâ´´ä»Âѧ¿˜§¡ª¹ è Œ è Ñ Õ Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÏûµ·¹·Õ áÅзíÒ§Ò¹ã¹â»Ãá¡ÃÁ‹ÍºÃÔ¡ÒÃÍÔ¹àµÍÏûµ¨¹àÊÃ稡‹Í¹·Õ¨Ð¡ÅѺÁÒ·íÒ§Ò¹ Ñ Ñ Ñ è â»Ãá¡ÃÁ»¡µÔµÍä» ‹ 㹿˜§¡ª¹ºÃÔ¡ÒÃÍÔ¹àµÍÏûµ¨ÐµŒÍ§ÁÕ¤ÒÊѧ ͋ҹ¤‹Ò¨Ò¡ÃÕ¨ÊàµÍÏ RCREG «Ö§àÁ×Í͋ҹ¤‹ÒáŌǨРÑè Ñ í è Ô è è ໚¹¡ÒÃà¤ÅÕÂÏá¿Å¡ÍÔ¹àµÍÏûµ RCIF â´ÂÍѵâ¹ÁÑµÔ Ñ
  • 164. 164 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 17 ¡ÒÃʋ§¢ŒÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ Ñ Ô áºº¡íÒ˹´¤‹ÒÃÕ¨ÔÊàµÍÏâ´ÂµÃ§ 㹡Ò÷´Åͧ¹Õé໚¹¡ÒùíÒàʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×èͤǺ¤ØÁãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÊÒÁÒöÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍϼҹ¾Íϵ͹ءÃÁ䴌 â´ÂäÁ‹ãª‹¿§¡ª¹ËÃ×ÍäźÃÒÃÕ¾àÔ Èɢͧ mikroC è ‹ ˜ Ñè ¤ÍÁä¾àÅÍÏ ᵋ¨Ð໚¹¡ÒÃà¢Õ¹¤‹Òŧã¹ÃÕ¨ÊàµÍÏ·àÕè ¡ÕÂÇ¢ŒÍ§á·¹ Ô è ÊíÒËÃѺ㹡Ò÷´Åͧ¹Õàé »š¹¡Ò÷´Åͧʋ§¢ŒÍÁÙÅ͹ءÃÁ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 ä»áÊ´§ ¼Å·Õ˹ŒÒµ‹Ò§ UART Terminal ¢Í§ mirkoC ¤ÍÁä¾àÅÍÏ è ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l Âѧ¤§ãªŒÇ§¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L15-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L17.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò´Ñ§¹Õé èÑ l ¡Ã³Õ㪌ºÍÏ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ char dat ; void main() { SPBRG = 129; // 9600 bps TXSTA.BRGH = 1 ; // Baudrate mode set High TXSTA.TXEN = 1 ; // Enble Transmitter RCSTA.SPEN = 1 ; // Enable Serial Port while(1) { dat = 'A' ; // First Character while(PIR1.TXIF) // Test Buffer Blank { TXREG = dat ; // Send dat delay_ms(500); // Delay 500 ms dat = dat++ ; // Increment dat } } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ໚¹â»Ãá¡ÃÁ¹íÒ¤‹ÒµÑÇÍÑ¡Éà (ÃËÑÊáÍÊ¡Õ) ¢Í§µÑÇÍÑ¡Éà A ໚¹µŒ¹ä»Ê‹§ä»áÊ´§¼Å¼‹Ò¹¾Íϵ͹ءÃÁ â´Â é ànj¹ª‹Ç§µÑÇÍÑ¡ÉÃÅÐ 0.5 ÇÔ¹Ò·Õ â´Â¤íҹdz¤‹ÒºÍ´àõänj෋ҡѺ 9,600 ºÔµµ‹ÍÇÔ¹Ò·Õ â»Ãá¡ÃÁ·Õè L17-1 ä¿Å TxUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃʋ§¢ŒÍÁÙż‹Ò¹âÁ´ÙÅ USART ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877(A) ´ŒÇ¡ÒáíÒ˹´¤‹Òä»ÂѧÃÕ¨ÊàµÍϤǺ¤ØÁ¡Ò÷íÒ§Ò¹â´ÂµÃ§ Ô
  • 165. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 165 L17.2 ÊÌҧâ»Ãà¨ç¡µªÍ TxUART áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L17-1 ×è L17.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L17.4 ·Õâ»Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍÏ ແ´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal è ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í·Ò§´ŒÒ¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹·íÒ¡ÒáíÒ˹´µíÒá˹‹§ è é ¾Íϵ͹ءÃÁ áÅСíÒ˹´¤‹ÒºÍ´àõ෋ҡѺ 9600 ºÔµ ʵçÍ» 1 ºÔµ äÁ‹Á¾ÒÃÔµáÅШíҹǹºÔµ¢ŒÍÁÙÅ 8 ºÔµ Õ Õé L17.5 ¡´»ØÁ † à¾×Íແ´¡ÒÃÊ×ÍÊÒÃ͹ءÃÁ è è L17.6 Ãѹâ»Ãá¡ÃÁ·Ò§½˜§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ´Ç¡ÒÃແ´»´ä¿àÅÕ§ãËÁ‹Í¡¤Ãѧ ËÃ×Í¡´ÊÇÔµª RESET › Œ é Õ é ·Õ˹ŒÒµ‹Ò§ÃѺ¢ŒÍÁÙÅ͹ءÃÁ¨ÐáÊ´§¢ŒÍ¤ÇÒÁ Received: A áŌǢֹºÃ÷ѴãËÁ‹à¾×Íᨌ§¡ÒÃÃѺÍÑ¡Éà B, è é è C, D,... ä»Í‹ҧµ‹Íà¹×ͧ ´Ñ§ÃÙ» è mikroC
  • 166. 166 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 18 ¡ÒÃÃѺ¢ŒÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ Ñ Ô áºº¡íÒ˹´¤‹ÒÃÕ¨ÔÊàµÍÏâ´ÂµÃ§ 㹡Ò÷´Åͧ¹Õé໚¹¡ÒùíÒàʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×èͤǺ¤ØÁãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÃѺ¢ŒÍÁÙÅ͹ءÃÁ¨Ò¡¤ÍÁ¾ÔÇàµÍϷʧÁÒ¨Ò¡â»Ãá¡ÃÁ UART Terminal ¢Í§ mirkoC ¤ÍÁä¾àÅÍÏ à¾×ÍáÊ´§¼Å Õè ‹ è ¼‹Ò¹ LED ·ÕµÍÍÂÙ¡º¾Íϵ D â´Â¡ÒõԴµ‹Í¡ÑºâÁ´ÙÅ USART ¹Ñ¹¨Ð໚¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Í¡íÒ˹´¤‹Òä»Âѧ è ‹ ‹Ñ é è ÃÕ¨ÊàµÍϤǺ¤ØÁ¢Í§âÁ´ÙÅ USART â´ÂµÃ§ Ô ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l Âѧ㪌ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L15-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L18.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò´Ñ§¹Õé èÑ l ¡Ã³Õ㪌ºÍÏ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ char dat; void main() { TRISD = 0 ; // PORTB ==> output SPBRG = 129; // 9600 bps TXSTA.BRGH = 1 ; // Baudrate mode set High RCSTA.SPEN = 1 ; // Enable Serial Port RCSTA.CREN = 1 ; // Enable Continuous receive dat = RCREG ; // clear buffer data dat = RCREG ; // clear buffer data dat = RCREG ; // clear buffer data while(1) { while(!PIE1.RCIF) // Test Received data { PORTD = RCREG ; // Show data on PORTB } } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ໚¹â»Ãá¡ÃÁÃÍÃѺ¢ŒÍÁÙŨҡ¾Íϵ͹ءÃÁ´ŒÇ¡ÒõÃǨÊͺºÔµ RCIF àÁ×ÍÁÕ¢ÍÁÙÅࢌÒÁÒ㹺ѿà¿ÍÏ è Œ ºÔµ¹Õ¨Ð໚¹ “1” ¨Ò¡¹Ñ¹¹íÒ¢ŒÍÁÙÅ·Õú䴌ʧä»Âѧ¾Íϵ D 㹡ÒáíÒ˹´¤‹ÒàÃÔÁµŒ¹¡Ò÷íÒ§Ò¹¹Ñ¹ ¹Í¡¨Ò¡¡Òà é é èÑ ‹ è é àÍç¹àÍàºÔÅ¡ÒÃÊ×ÍÊÒâŒÍÁÙÅ͹ءÃÁáÅСíÒ˹´¤‹ÒºÍ´àõáÅŒÇ ¨ÐµŒÍ§Í‹Ò¹¢ŒÍÁÙÅ 3 ¤Ãѧà¾×Íà¤ÅÕÂϤÒ㹺ѿà¿ÍÏ è é è ‹ â»Ãá¡ÃÁ·Õè L18-1 ä¿Å RxUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ŒÍÁÙż‹Ò¹âÁ´ÙÅ USART ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877(A) ´ŒÇ¡ÒáíÒ˹´¤‹Òä»ÂѧÃÕ¨ÊàµÍϤǺ¤ØÁ¡Ò÷íÒ§Ò¹â´ÂµÃ§ Ô
  • 167. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 167 L18.2 ÊÌҧâ»Ãà¨ç¡µªÍ RxUART áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L18-1 ×è L18.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L18.4 ·Õâ»Ãá¡ÃÁ mikroC ¤ÍÁä¾àÅÍÏ ແ´â»Ãá¡ÃÁ USART Terminal â´Âä»·Õàè Á¹Ù Tools à USART Terminal è ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í·Ò§´ŒÒ¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹·íÒ¡ÒáíÒ˹´µíÒá˹‹§ è é ¾Íϵ͹ءÃÁ áÅСíÒ˹´¤‹ÒºÍ´àõ෋ҡѺ 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. 168 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 19 ¡ÒÃÃѺ¢ŒÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊ Ñ Ô â´Â㪌ÍÔ¹àµÍÏÃÑ»µ ¡Ò÷´Åͧ¹Õ¹Òàʹ͡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×ͤǤºØÁãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ÃѺ¢ŒÍÁÙÅ͹ءÃÁ é í è Ẻ㪌¡ÒÃÍÔ¹àµÍÏûµ â´Â¡íÒ˹´ãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ¢Ñº LED ·Õ¢Ò¾Íϵ RD7 µÔ´¡Ð¾ÃԺ͋ҧµ‹Íà¹×ͧ Œ Ñ è è ã¹ÊÀÒÇл¡µÔ·äÁ‹Á¡ÒÃÃѺ¢ŒÍÁÙÅ áÅÐàÁ×ÍÁÕ¡ÒÃÃѺ¢ŒÍÁÙÅࢌÒÁÒ ¡ç¨ÐáÊ´§¤‹Ò¢Í§¢ŒÍÁÙŹѹÁ·Õ¾Íϵ D á·¹ Õè Õ è é è ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l Âѧ㪌ǧ¨Ãã¹ÃÙ»·Õè L15-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L15-1 áŌÇàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ໚¹ PIC16F877 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ 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 è ËÃ×Í¡´»ØÁ CTRL+T ËÃ×ͤÅÔ¡·Õäͤ͹ † è ºÃÔàdzᶺà¤Ã×ͧÁ×Í·Ò§´ŒÒ¹¢ÇÒÁ×Í ¨Ò¡¹Ñ¹·íÒ¡ÒáíÒ˹´µíÒá˹‹§ è é ¾Íϵ͹ءÃÁ áÅСíÒ˹´¤‹ÒºÍ´àõ෋ҡѺ 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 °Ò¹ÊԺˡ è
  • 169. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 169 char dat ; void interrupt() { PORTD = RCREG ; // Receive Interrupt } void enable_int() { PIE1.RCIE = 1 ; // Enable receive interrupt INTCON.PEIE = 1 ; // Enable peripheral interrupt INTCON.GIE = 1 ; // Enable Global interrupt } void main() { TRISD = 0 ; // PORTD ==> output SPBRG = 129; // 9600 bps enable_int() ; TXSTA.BRGH = 1 ; // Baudrate mode set High RCSTA.SPEN = 1 ; // Enable Serial Port RCSTA.CREN = 1 ; // Enable Continuous receive dat = RCREG ; // clear buffer data dat = RCREG ; // clear buffer data dat = RCREG ; // clear buffer data while(1) { PORTD.F7 =0; // Blinking LED delay_ms(500); // ON RD7 PORTD.F7 = 1; delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ¨Ò¡â»Ãá¡ÃÁ໚¹¡ÒÃ㪌͹àµÍÏûµà¢ŒÒÁÒª‹ÇÂ㹡ÒõÃǨÊͺ¡ÒÃÃѺ¢ŒÍÁÙÅ àÁ×ÍÁÕ¡ÒÃÃѺ¢ŒÍÁÙÅࢌÒÁÒ Ô Ñ è ¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ áŌǫվ¨СÃÐâ´´ä»·íÒ§Ò¹µÒÁ¿˜§¡ª¹ºÃÔ¡ÒÃÍÔ¹àµÍÏûµ «Ö§¨Ðʋ§¤‹Ò¢Í§¢ŒÍÁÙÅ·Õè Ñ ÕÙ Ñè Ñ è ÃѺ䴌ä»Âѧ·Õ¾Íϵ D ʋǹ㹢³Ð·ÕäÁ‹Á¡ÒÃÍÔ¹àµÍÏûµ â»Ãá¡ÃÁ¨Ð¡íÒ˹´ãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏʧ¢ŒÍÁÙÅ è è Õ Ñ ‹ “1” áÅÐ “0” ä»Âѧ¢Ò¾Íϵ RD7 «Ö§µ‹Í LED änj ·íÒãˌ LED à¡Ô´¡ÒáоÃÔº è ¿˜§¡ª¹ enable_int() 㪌¡Ò˹´¤‹ÒàÃÔÁµŒ¹ÊíÒËÃѺ¡ÒÃÍÔ¹àµÍÏûµ â´Â¨ÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§ Ñè í è Ñ ÍÔ¹àµÍÏûµ 3 µÑǤ×Í àÍç¹àÍàºÔÅÍÔ¹àµÍÏûµ¡ÒÃÃѺ¢ŒÍÁÙÅ͹ءÃÁ àÍç¹àÍàºÔÅÍÔ¹àµÍÏûµ¨Ò¡ÍØ»¡Ã³µÍ¾‹Ç§ áÅÐ Ñ Ñ Ñ ‹ àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÏûµËÅÑ¡ Ñ â»Ãá¡ÃÁ·Õè L19-1 ä¿Å InterruptUART.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ŒÍÁÙż‹Ò¹âÁ´ÙÅ USART ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877(A) ´ŒÇ¡ÒÃ㪌͹àµÍÏûµ Ô Ñ INNOVATIVE EXPERIMENT
  • 170. 170 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 171. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); µÑÇá»Ã clock ¤×Í ¤ÇÒÁ¤ÇÒÁ¶Õ¢Í§ÊÑ­­Ò³¹Ò́¡Ò·Õ㪌㹡ÒÃÊ×ÍÊÒâŒÍÁÙŠ˹‹ÇÂ໚¹ Hz ÊíÒËÃѺºÑÊ I2C è è è ÁҵðҹÁÕ 2 âËÁ´ ¤×Í âËÁ´¤ÇÒÁàÃçǵèÒ 100kHz áÅÐâËÁ´¤ÇÒÁàÃçÇÊÙ§ 400 kHz í µÑÇÍ‹ҧ·Õè 11-1 I2C_Init(100000); ໚¹¡ÒáíÒ˹´¤‹ÒàÃÔÁµŒ¹ãˌ¡ºâÁ´ÙÅ I2C áÅСíÒ˹´ÊÑ­­Ò³¹Ò́¡Ò໚¹âËÁ´¤ÇÒÁàÃçǵèÒ 100kHz è Ñ í
  • 172. 172 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 11.1.2 ¿˜§¡ª¹ I2C_Start Ñè 㪌¡Ò˹´ãˌºÊNjҧ áÅÐʋ§ÊÑ­­Ò³ 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); ¡Òä׹¤‹Ò ¶ŒÒºÑÊNjҧ ¨Ð¤×¹¤‹Ò “1” ¡ÅѺÁÒ ¡Ã³ÕÍ¹æ ¨Ð¤×¹¤‹Ò “0” ×è µÑÇÍ‹ҧ·Õè 11-4 if (I2C_Is_Idle()) { I2C_Start(); ... }
  • 173. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 174 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ¡Ãͺá¡·Õè 11-1 : ¤ÇÒÁÃÙàº×ͧµŒ¹¢Í§ÃкººÑÊ I2C Œ é I2C ‹ÍÁÒ¨Ò¡ Inter-IC Communication ËÁÒ¶֧ ¡ÒõԴµ‹ÍÊ×ÍÊÒÃÃÐËNjҧäÍ«Õ â´ÂºÑÊ I2C 䴌ú¡ÒþѲ¹Ò¢Ö¹ è Ñ é â´Â¿Å»Ê (Philips) ´ŒÇ¨شÁاËÁÒÂËÅÑ¡¤×Í µŒÍ§¡ÒÃãˌäÍ«ÕËÃ×ÍâÁ´ÙÅÊÒÁÒöµÔ´µ‹Í Êѧ§Ò¹ áÅФǺ¤ØÁÀÒÂ㵌ÊÒÂÊÑ­­Ò³ Ô ‹ è à¾Õ§ 2 àʌ¹ àʌ¹Ë¹Ö§¤×Í ÊÒ¢ŒÍÁÙÅ ÍÕ¡àʌ¹Ë¹Ö§¤×Í ÊÒÂÊÑ­­Ò³¹Ò́¡Ò·Õ㪌㹡ÒáíÒ˹´¨Ñ§ËÇСÒ÷íÒ§Ò¹ ¡Òõ‹ÍËÇÁ è è è ¡Ñ¹¢Í§ÍØ»¡Ã³º¹ºÑÊ I2C ·íÒ䴌§ÒÂÁÒ¡ à¾Õ§µ‹ÍÊÒ¢ŒÍÁÙÅáÅÐÊÒÂÊÑ­­Ò³¹Ò́¡Ò¢Í§ÍØ»¡Ã³áµ‹ÅеÑÇ¢¹Ò¹¡Ñ¹ä» ʋǹ ‹ ¡ÒáíÒ˹´áÍ´à´ÃÊÊíÒËÃѺµÔ´µ‹ÍÍØ»¡Ã³áµ‹ÅеÑÇ ¨Ð㪌ÃËÑÊ¢ŒÍÁÙÅËÇÁ¡Ñº¡ÒáíÒ˹´ÊÀÒÇÐÅͨԡ·Õ¢ÒáÍ´à´ÃÊ è ÊÒ¢ŒÍÁÙź¹ºÑÊ I2C ÁÕªÍàÃÕ¡Í‹ҧ໚¹·Ò§¡ÒÃÇ‹Ò ÊÒ¢ŒÍÁÙÅ͹ءÃÁ ËÃ×Í SDA (Serial Data line) ʋǹÊÒ ×è ÊÑ­­Ò³¹Ò́¡ÒÁÕªÍàÃÕÂ¡Ç‹Ò ÊÒÂÊÑ­­Ò³¹Ò́¡Ò͹ءÃÁ ËÃ×Í SCL (Serial Clock line) 㹡ÒÃ͸ԺÒµ‹Í仹ըР×è é àÃÕ¡ÊÒÂÊÑ­­Ò³·Ñ§ÊÍ§Ç‹Ò ÊÒ SDA áÅÐ SCL é ¤Ø³ÊÁºÑµâ´Â·ÑÇ仢ͧºÑÊ I2C Ô è ÊÒ SDA áÅÐ SCL ໚¹ÊÒÂÊÑ­­Ò³ 2 ·ÔÈ·Ò§ (bi-directional line) µŒÍ§ÁÕ¡Òõ‹ÍµÑǵŒÒ¹·Ò¹¾ÙÅÍÑ»¡Ñºáç´Ñ¹ +5V änjµÅÍ´àÇÅÒ à¾×ÍãˌÊÒÂÁÕʶҹÐÅͨԡÊ٧㹢³Ð·ÕäÁ‹Á¡ÒõԴµ‹Í㪌§Ò¹ ·Ñ§Âѧª‹ÇÂ㹡Òû‡Í§¡Ñ¹ÊÑ­­Ò³Ãº¡Ç¹·Õè è è Õ é ÍÒ¨ÁÕࢌÒÁÒã¹ÊÒÂÊÑ­­Ò³·Ñ§Êͧǧ¨ÃàÍÒµ¾µ ¢Í§ÍØ»¡Ã³·µÍÍÂÙº¹ºÑÊ I2C µŒÍ§ÁÕšɳÐ໚¹Ç§¨Ãà´Ã¹à»´ (open- é Ø Õè ‹ ‹ Ñ drain) ËÃ×ͤÍÅàÅç¡àµÍÏແ´ (open-collector) ´Ñ§áÊ´§ÃÒÂÅÐàÍÕ´ã¹ÃÙ»·Õè A3-1 ÍѵÃÒ¡Òö‹Ò·ʹ¢ŒÍÁÙź¹ºÑÊ I2C ÊÙ§¶Ö§ 100 ¡ÔâźԵµ‹ÍÇÔ¹Ò·Õã¹âËÁ´»¡µÔ (standard mode) áÅÐÊÙ§¶Ö§ 400 ¡ÔâźԵµ‹ÍÇÔ¹Ò·Õã¹âËÁ´¤ÇÒÁàÃçÇÊÙ§ (fast mode) (µÒÁ¤Ø³ÊÁºÑµ·Ò§à·¤¹Ô¤·Õè Philips ¡íÒ˹´) ÍØ»¡Ã³·µÍËÇÁÍÂÙº¹ Ô Õè ‹ ‹ ºÑÊ I2C ¨ÐµŒÍ§ÁÕ¤Ò¤ÇÒÁ¨Øä¿¿‡ÒÃÇÁ·Õà¡Ô´¢Ö¹ÃÐËNjҧÊÒ 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 ·Õ·Ò˹ŒÒ·Õ໚¹µÑÇʋ§à¾Õ§Í‹ҧà´ÕÂÇ è í è +5V ÍØ » ¡Ã³ ·Õè ·í Ò Ë¹Œ Ò ·Õè ¤ Ǻ¤Ø Á ¨Ñ § ËÇСÒ÷í Ò §Ò¹ ËÃ×Í¡ÒõԴµ‹Íº¹ºÑÊ I2C àÃÕÂ¡Ç‹Ò ÁÒÊàµÍÏ (master) R2 R2 ÍØ»¡Ã³·Õè¶Ù¡¤Çº¤ØÁËÃ×ÍÍØ»¡Ã³·Õ赋;‹Ç§à¢ŒÒä» SDA (Serial Data line) SCL (Serial Clock line) º¹ºÑÊ I2C àÃÕÂ¡Ç‹Ò ÊàÅ¿ (slave) ¢ŒÍ¡íÒ˹´¢Í§¡ÒõԴµ‹Íº¹ºÑÊ I2C ¤×Í SCLKN1 OUT DATAN1 OUT SCLKN2 OUT DATAN2 OUT (1) ¡Òö‹Ò·ʹ¢ŒÍÁÙŨÐà¡Ô´¢Ö¹àÁ×ͺÑÊNjҧ෋ҹѹ é è é SCLK IN DATA IN SCLK IN DATA IN (2) ã¹ÃÐËNjҧ¡Òö‹Ò·ʹ¢ŒÍÁÙÅ àÁ×Íã´¡çµÒÁ·ÕÊÒ è è ÍØ»¡Ã³ ºÑÊ µÑÇ·Õè 1 IC ÍØ»¡Ã³ ºÑÊ µÑÇ·Õè 2 IC SCL ÁÕʶҹÐ໚¹ÅͨԡÊÙ§ ÊÒ¢ŒÍÁÙŵŒÍ§ÃÑ¡ÉÒ¢ŒÍÁÙÅänj ÍÂ‹Ò ÃÙ»·Õè A11-1 â¤Ã§ÊÌҧǧ¨Ã·Ò§àÍÒµ¾µ¢Í§ÍØ»¡Ã³ ãˌà¡Ô´¡ÒÃà»ÅÕ¹á»Å§¢Ö¹à´ç´¢Ò´ Áԩйѹ ÊÑ­­Ò³·Õàè ¡Ô´¢Ö¹ Ø è é é é ÃкººÑÊ I2C ¨Ð䴌ú¡ÒÃá»Å¤ÇÒÁËÁÒÂ໚¹ÊÑ­­Ò³¤Çº¤ØÁá·¹ Ñ
  • 175. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 175 ÊÀÒÇзÕà¡Ô´¢Ö¹º¹ºÑÊ I2C è é ÁÕ´Ç¡ѹ 5 ÊÀÒÇÐ ´Ñ§¹Õé Œ (1) ºÑÊNjҧ (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) ÁÕʶҹÐ໚¹ÅͨԡÊÙ§ ËÅѧ¨Ò¡Ê‹§¢ŒÍÁÙÅÁҤú ¶ŒÇ¹ ʋǹÍØ»¡Ã³ÁÒÊàµÍϨзíÒ¡ÒÃʋ§ÊÑ­­Ò³ÃѺÃÙ¾àÈÉ«Ö§ÊÑÁ¾Ñ¹¸¡ºÊÑ­­Ò³¹Ò́¡Ò ÍØ»¡Ã³ÊàÅ¿·Õ¶¡ÍŒÒ§¶Ö§ã¹¡Òà Œ Ô è Ñ è Ù µÔ ´ µ‹ Í ËÃ× Í ¡í Ò ÅÑ § µÔ ´ µ‹ Í ÍÂً ã ¹¢³Ð¹Ñé ¹ ¡ç ¨ Сí Ò à¹Ô ´ ºÔ µ ÃÑ º Ãٌ ·Õè ÁÕ Ê ¶Ò¹ÐÅÍ¨Ô ¡ µèí Ò à¾×è Í µÍºÊ¹Í§ãˌ · ÃҺNj Ò ä´Œ ÃѺ¢ŒÍÁÙÅã¹áµ‹ÅÐ亵àÃÕºÌÍÂáÅŒÇ (5) ËÂØ´¡Òö‹Ò·ʹ¢ŒÍÁÙÅ (stop data transfer) à¡Ô´¢Ö¹àÁ×ÍÊÒ SDA ÁÕ¡ÒÃà»ÅÕ¹á»Å§ÃдѺÅͨԡ¨Ò¡µèÒ é è è í ä»ÊÙ§ ã¹¢³Ð·ÕÊÒ SCL ÁÕʶҹÐÅͨԡÊÙ§ àÃÕ¡ÊÀÒÇзÕà¡Ô´¢Ö¹¹ÕÇÒ ÊÀÒÇÐËÂØ´ (STOP) è è é é‹ ã¹ÃÙ»·Õè A11-2 ໚¹ä´ÍÐá¡ÃÁàÇÅÒ·ÕáÊ´§¶Ö§¡ÒÃà¡Ô´ÊÀÒÇе‹Ò§æ º¹ºÑÊ I2C äÁ‹ÇÒ¨Ð໚¹ÊÀÒÇкÑÊNjҧ,àÃÔÁµŒ¹, è ‹ è ¶‹Ò·ʹ¢ŒÍÁÙÅ, ÃѺÃٌ áÅÐËÂØ´¡Òö‹Ò·ʹ¢ŒÍÁÙÅ ¡Ò÷íÒ§Ò¹º¹ºÑÊ I2C ¡‹Í¹·Õ¨ÐàÃÔÁµŒ¹¡Òö‹Ò·ʹ¢ŒÍÁÙÅÃÐËNjҧÍØ»¡Ã³µÒ§æ ·ÕµÍÍÂÙº¹ºÑÊ µŒÍ§ÁÕ¡ÒÃ͌ҧ¶Ö§ÍØ»¡Ã³àÊÕ¡‹Í¹ â´Â¡Òà è è ‹ è ‹ ‹ ͌ҧ¶Ö§ÍØ»¡Ã³º¹ºÑÊ I é2C ¹Ñ¹¨Ð㪌¡ÒÃ͌ҧ¶Ö§áºº 7 ºÔµËÃ×Í 10 ºÔµ 㹡óշÁÍ»¡Ã³µÍÍÂÙº¹ºÑÊäÁ‹ÁÒ¡ 㪌¡ÒÃ͌ҧ¶Ö§ Õè Õ Ø ‹ ‹ Ẻ 7 ºÔµ¡çà¾Õ§¾Í ᵋ¶ÒÁÕÍ»¡Ã³µÍÍÂÙº¹ºÑÊÁÒ¡¡Ç‹Ò 127 áÍ´à´ÃÊ ¨íÒ໚¹µŒÍ§ãªŒ¡ÒÃ͌ҧ¶Ö§áºº 10 ºÔµ ËÅѧ¨Ò¡ Œ Ø ‹ ‹ ·Õµ´µ‹ÍÍØ»¡Ã³áµ‹ÅеÑÇ䴌àÃÕºÌÍÂáÅŒÇ ¡ç¨ÐàÃÔÁµŒ¹¡Òö‹Ò·ʹ¢ŒÍÁÙšѹµ‹Íä» è Ô è SDA à»ÅÕ¹¨Ò¡ "1" ໚¹ "0" è SDA à»ÅÕ¹¨Ò¡ "0" ໚¹ "1" è ã¹¢³Ð·Õè SCL ໚¹ "1" ¹Õ¤×Í è ã¹¢³Ð·Õè SCL ໚¹ "1" ¹Õ¤×Í è ÊÀÒÇÐàÃÔèÁµŒ¹ ÊÀÒÇÐËÂØ´ SDA SCL SDA ໚¹ "1" SDA ¤§·Õ·Åͨԡ "1" è èÕ SDA ¤§·Õ·Åͨԡ "0" è èÕ SCL ໚¹ "1" ã¹¢³Ð·Õè SCL ໚¹ "1" ¶×Í໚¹ ã¹¢³Ð·Õè SCL ໚¹ "1" ¶×Í໚¹ ÊÀÒÇкÑÊNjҧ ¡Òö‹Ò·ʹ¢ŒÍÁÙÅ "1" ¡Òö‹Ò·ʹ¢ŒÍÁÙÅ "0" ÃÙ»·Õè A11-2 ä´ÍÐá¡ÃÁàÇÅÒáÊ´§Ê¶Ò¹Ðµ‹Ò§æ º¹ÃкººÑÊ I2C
  • 176. 176 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ¡ÒÃ͌ҧ¶Ö§áºº 7 ºÔµ (7-bit addressing) X X X X A2 A1 ¢ŒÍÁÙÅ亵áá·Õèà¡Ô´¢Öé¹ËÅѧ¨Ò¡ÊÀÒÇÐàÃÔèÁµŒ¹¤×Í A0 R/W ºÔµ¡íÒ˹´áÍ´à´ÃÊ ºÔµ¡íÒ˹´áÍ´à´Ãʤ§·Õè ¢ŒÍÁÙÅ·Õè㪌㹡ÒÃ͌ҧ¶Ö§ÍØ»¡Ã³·Õ赌ͧ¡ÒõԴµ‹Í â´ÂÁÕÃÙ» â»Ãá¡ÃÁ䴌 ẺáÊ´§ã¹ÃÙ»·Õè 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 ºÔµ é è é ¡ÒÃ͌ҧ¶Ö§áºº 10 ºÔµ ¨ÐÁÕ¢ÍÁÙÅà¾ÔÁàµÔÁ¢Ö¹ÁÒàÅ硹ŒÍ â´Âã¹äºµááËÅѧ¨Ò¡à¡Ô´ÊÀÒÇÐàÃÔÁµŒ¹ µŒÍ§¡íÒ˹´ãˌ 5 ºÔµº¹ÁÕ¢ÍÁÙÅ໚¹ Œ è é è Œ 11110 ʋǹÍÕ¡ 2 ºÔµ¶Ñ´ÁÒ໚¹ºÔµáÍ´à´ÃʢͧÍØ»¡Ã³·µÍ§¡ÒõԴµ‹Í 㹺Ե LSB ¢Í§¢ŒÍÁÙÅ亵ááÂѧ¤§à»š¹¡ÒáíÒ˹´ Õè Œ Ç‹Ò µŒÍ§¡ÒÃ͋ҹËÃ×Íà¢Õ¹¢ŒÍÁÙšѺÍØ»¡Ã³ÊàÅ¿µÑǷյͧ¡ÒõԴµ‹Í´ŒÇ ¢ŒÍÁÙÅ亵µÍÁÒ໚¹¢ŒÍÁÙÅáÍ´à´ÃÊã¹äºµ·Õè 2 è Œ ‹ ¢Í§ÍØ»¡Ã³·µÍ§¡ÒõԴµ‹Í´ŒÇ ¢ŒÍÁÙÅ亵¶´ä»¨Ö§à»š¹¢ŒÍÁÙŤǺ¤ØÁ ¢ŒÍÁÙÅËÅѧ¨Ò¡¹Ñ¹¡ç¨Ð໚¹¢ŒÍÁÙŨÃÔ§·Õ㪌㹡ÒõԴµ‹Í Õè Œ Ñ é è ઋ¹à´ÕÂǡѺ¡ÒÃ͌ҧ¶Ö§áºº 7 ºÔµ ËÅѧ¨Ò¡¶‹Ò·ʹ¢ŒÍÁÙŤú·Ø¡äºµ µŒÍ§ÁÕÊÀÒÇÐÃѺÃÙà¡Ô´¢Ö¹ à¾×Íãˌ¡Ãкǹ Œ é è ¡Òö‹Ò·ʹ¢ŒÍÁÙÅÊÒÁÒö´íÒà¹Ô¹µ‹Íä»ä´Œ ã¹ÃÙ»·Õè A11-5 áÊ´§ÃٻẺ¢ŒÍÁÙÅ͹ءÃÁ¢Í§¡ÒÃ͌ҧ¶Ö§áºº 10 ºÔµ ¢ŒÍÁÙÅ亵·èÕ 1 ¢ŒÍÁÙÅ亵·èÕ 2 àÅ×Í¡áÍ´à´Ãʢͧ ʋ§¢ŒÍÁÙŤǺ¤ØÁ¡Òà ÍØ»¡Ã³·µÍ§¡ÒõԴµ‹Í èÕ Œ ·íÒ§Ò¹¢Í§ÍØ»¡Ã³ ¢ŒÍÁÙÅ亵µÍä» (n 亵) ‹ áÅШشÁاËÁÒÂ㹡Òà ‹ ·ÕµÍ§¡ÒõԴµ‹ÍËÃ×Í è Œ ¢ŒÍÁÙŨÃÔ§·ÕµÍ§¡Òö‹Ò·ʹ è Œ µÔ´µ‹Í (͋ҹËÃ×Íà¢Õ¹) control word àÃÔÁµŒ¹ è A6-A0 R/W=0 ÃѺÃٌ C6-C0 R/W ÃѺÃٌ D7-D0 ÃѺÃٌ ËÂØ´ ʋ§ÁÒ¨Ò¡ÍØ»¡Ã³ÊàÅ¿·Õ·Ò¡ÒõԴµ‹Í´ŒÇ è í ʋ§ÁÒ¨Ò¡ÍØ»¡Ã³ÊàÅ¿·Õ·Ò¡ÒõԴµ‹Í´ŒÇ è í ÃÙ»·Õè A11-4 ÃٻẺ¢ŒÍÁÙÅ㹡ÒÃ͌ҧ¶Ö§áºº 7 ºÔµ ¢ŒÍÁÙÅ亵·Õè 1 ¢ŒÍÁÙÅ亵·Õè 3 ʋ§¢ŒÍÁÙŤǺ¤ØÁ ¢ŒÍÁÙÅ亵µ‹Íä» àÅ×Í¡¡ÒÃ͌ҧ¶Ö§áºº 10 ºÔµ ¢ŒÍÁÙÅ亵·Õè 2 (n 亵) (¢ŒÍÁÙŤ×Í 11110xx â´Â xx ¤×Í ¢ŒÍÁÙÅáÍ´à´ÃÊ ¡Ò÷íÒ§Ò¹ ¢Í§ÍØ»¡Ã³·Õ赌ͧ¡Òà ¢ŒÍÁÙŨÃÔ§·Õ赌ͧ¡Òà ºÔµáÍ´à´ÃÊ 2 ºÔµº¹) 8 ºÔµÅ‹Ò§ µÔ´µ‹ÍËÃ×Í control word ¶‹Ò·ʹ àÃÔÁµŒ¹ è 1 1 1 1 0 A9 A8 R/W=0 ÃѺÃٌ A7-A0 ÃѺÃٌ C6-C0 R/W ÃѺÃٌ D7-D0 ÃѺÃٌ ËÂØ´ ʋ§ÁÒ¨Ò¡ÍØ»¡Ã³ÊàÅ¿ ʋ§ÁÒ¨Ò¡ÍØ»¡Ã³ÊàÅ¿ ·Õè·íÒ¡ÒõԴµ‹Í´ŒÇ ·Õè·íÒ¡ÒõԴµ‹Í´ŒÇ ÃÙ»·Õè A11-5 ÃٻẺ¢ŒÍÁÙÅ㹡ÒÃ͌ҧ¶Ö§áºº 10 ºÔµ
  • 177. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 177 »¯Ôºµ¡Ò÷Õè 20 µÔ´µ‹ÍºÍÏ´¢ÑºÃÕàŏ 16 ª‹Í§ Ñ Ô ZX-RELAY16 ´ŒÇ¿˜§¡ª¹ I2C Ñè ZX-RELAY16 ໚¹ºÍÏ´¢ÑºÃÕàŏ 16 ª‹Í§·Õ¤Çº¤ØÁ¼‹Ò¹ÃкººÑÊ I2C â´Âº¹µÑǺÍϴ㪌äÍ«Õ¢ÂÒ¾Íϵ è ¼‹Ò¹ÃкººÑÊ I2C àºÍÏ MCP23016 ·íÒ˹ŒÒ·Õ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹·Ñ§ËÁ´ ÃÙ»·Õè L20-1 áÊ´§Ë¹ŒÒµÒ¢Í§ºÍÏ´ ZX- è é RELAY16 ʋǹÃÙ»·Õè L20-2 ໚¹Ç§¨ÃÊÁºÙó¢Í§ºÍÏ´ ZX-RELAY16 à¹×ͧ¨Ò¡ãªŒäÍ«Õ··Ò§Ò¹¼‹Ò¹ÃкººÑÊ I2C è èÕ í ¨Ö§·íÒãˌÊÒÁÒöµ‹Í¾‹Ç§ºÍÏ´¢ÑºÃÕàŏ ZX-RELAY16 ãˌ·Ò§Ò¹Ã‹ÇÁ¡Ñ¹ä´ŒÁÒ¡¶Ö§ 8 ºÍÏ´ â´Â㪌ÊÒÂÊÑ­­Ò³ í SDA áÅÐ SCL à¾Õ§ªØ´à´ÕÂÇ áÅСíÒ˹´áÍ´à´ÃʢͧᵋÅкÍÏ´ãˌᵡµ‹Ò§¡Ñ¹´ŒÇ¡ÒÃàÅ×Í¡¨ÑÁà»ÍϺ¹ºÍÏ´ ê ¤Ø³ÊÁºÑµ¢Í§ºÍÏ´ ZX-RELAY16 Ô l 㪌äÍ«Õ MCP23016 ¢Í§ Microchip ໚¹äÍ«Õ¢ÂÒ¾Íϵ 2 ·ÔÈ·Ò§ (ÍÔ¹¾Øµ/àÍÒµ¾µ) ¼‹Ò¹ÃкººÑÊ I2C Ø l ¢ÑºÃÕàŏ 12V 䴌 16 µÑÇ ¾ÃŒÍÁä¿áÊ´§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹ l µ‹Í¾‹Ç§¡Ñ¹ä´Œ 8 ºÍÏ´ ·íÒãˌÊÒÁÒö¢ÑºÃÕàŏ䴌 128 µÑÇ´ŒÇÂÊÒÂÊÑ­­Ò³¤Çº¤ØÁà¾Õ§Êͧàʌ¹ l ¨Ø´µ‹Í˹ŒÒÊÑÁ¼ÑÊÃÕàŏ໚¹à·ÍÏÁ¹ÍźÅçÍ¡ Áդú·Ñ§¨Ø´µ‹Í»¡µÔແ´Ç§¨Ã (NO) áÅл¡µÔµÍǧ¨Ã (NC) Ô é ‹ ÊÒÁÒö㪌䢤ǧà¾×͵‹ÍËÃ×ͻŴÊÒµ‹Í䴌§ÒÂ è ‹ l ¾Ô¡´Ë¹ŒÒÊÑÁ¼ÑʢͧÃÕàŏ 220Vac/5A ¢ÑºâËŴ䴌ʧÊØ´ 600 ÇѵµµÍª‹Í§ Ñ Ù ‹ l ¨Ø´µ‹ÍÃкººÑÊ I2C Ẻ IDC µÑǼÙ/Œ µÑÇàÁÕÂáÅÐẺ JST 3 ¢Ò l ¢¹Ò´ºÍÏ´ 15x8 ૹµÔàÁµÃ ¨ÑÁà»ÍÏàÅ×Í¡áÍ´à´ÃʢͧºÍÏ´ ê ¨Ø´µ‹ÍẺ IDC µÑǼÙ/Œ µÑÇàÁÕ SCL ¨Ø´µ‹ÍẺ JST SDA ¨Ø´µ‹ÍẺ JST ÃÙ»·Õè L20-1 áÊ´§Ë¹ŒÒµÒ¢Í§ ZX-RELAY16 ºÍÏ´¢ÑºÃÕàŏ 16 ª‹Í§¼‹Ò¹ÃкººÑÊ I2C
  • 178. 178 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é +VL RY1 R5 NO RELAY1 1.5k C K5 LED1 NC RY2 R6 NO RELAY2 1.5k C K6 +5V LED21 LED2 NC R21 POWER RY3 510 R7 NO RELAY3 +VL 1.5k C K7 C1 LED3 NC 0.1 F 20 10 RY4 K1A/1B Vdd R8 NO RELAY4 IC 21 1 18 1.5k C GP0.0 I1 Q1 K8 EXPANSION 22 2 17 NC R1 R2 GP0.1 I2 Q2 4.7k 3.9k 23 3 16 LED4 RY5 +5V GP0.2 I3 Q3 R9 NO RELAY5 15 24 4 15 1.5k SDA SDA GP0.3 I4 Q4 C K9 14 25 5 14 SCL SCL GP0.4 I5 Q5 LED5 NC GND 26 6 13 +5V GP0.5 I6 Q6 RY6 R10 NO RELAY6 27 7 12 1.5k K10 GP0.6 I7 Q7 C R3 28 8 11 NC K2 GP0.7 I8 Q8 LED6 3.9k RY7 SDA 9 R11 NO RELAY7 CLK IC2 1.5k 9 K11 C2 ULN2803 C 33pF NC K3 8 LED7 SCL Vss IC1 RY8 R12 NO RELAY8 +5V 19 Vss MCP23016 1.5k K12 C R4 LED8 NC 4.7k*4 +12V 18 A2 RY9 17 R13 NO RELAY9 A1 1.5k K13 C 16 LED9 A0 NC RY10 RELAY10 JP3 JP2 JP1 R14 NO 1.5k K14 A2 A1 A0 C LED10 NC 6 RY11 INT RELAY11 R15 NO +VL 1.5k K15 IC3 C LED11 NC ULN2803 10 RY12 RELAY12 R16 NO 1 1 18 1.5k K16 GP1.0 I1 Q1 C 2 2 17 NC GP1.1 I2 Q2 3 3 16 LED12 RY13 GP1.2 I3 Q3 RELAY13 R17 NO 4 4 15 1.5k GP1.3 I4 Q4 C K17 10 5 14 LED13 NC GP1.4 I5 Q5 11 6 13 GP1.5 I6 Q6 RY14 RELAY14 R18 NO 12 7 12 1.5k K18 GP1.6 I7 Q7 C 13 8 11 NC GP1.7 I8 Q8 LED14 RY15 RELAY15 R19 NO 9 1.5k K19 C NC LED15 RY16 RELAY16 R20 NO 1.5k K20 C LED16 NC D5 1N5819 J1 SW1 +VL DC INPUT POWER 12Vdc ON / OFF D6 C7 1N4001 220/16V K21 IC4 Supply 7805 +5V +12Vdc C6 0.1/ C5 63V C4 47/16V D1-D4 C3 0.1/63V 1N4001 x4 220/25V ÃÙ»·Õè L20-2 ǧ¨ÃÊÁºÙó¢Í§ºÍÏ´ ZX-RELAY16 «Ö§ÁÕäÍ«ÕàºÍÏ MCP23016 ໚¹ËÑÇ㨠è
  • 179. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 179 MCP23016 äÍ«Õ¢ÂÒ¾ÍϵÍÔ¹¾ØµàÍÒµ¾µ¼‹Ò¹ÃкººÑÊ I2C Ø MCP23016 ໚¹äÍ«Õ¢ÂÒ¾ÍϵÍÔ¹¾ØµàÍÒµ¾µ¢¹Ò´ 16 ºÔµ ¼‹Ò¹ÃкººÑÊ I2C ·ÕÊÒÁÒö¡íÒ˹´ãˌ Ø è ໚¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ¾µä´ŒÍ‹ҧÍÔÊÃÐ â´ÂÁÕ¤³ÊÁºÑµ·¹Òʹ㨴ѧ¹Õé Ø Ø Ô Õè ‹ l ¢Ò¾Íϵ໚¹áºº 2 ·ÔÈ·Ò§ ¤Çº¤ØÁ໚¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ¾µä´ŒµÅÍ´àÇÅÒ ÊÀÒÇÐàÃÔÁµŒ¹à»š¹ÍÔ¹¾Øµ Ø è l Ê×ÍÊÒôŒÇÂÃкººÑÊ I2C ´ŒÇÂâËÁ´¤ÇÒÁàÃçÇÊ٧䴌 è l ÁÕ¢ÒàÅ×Í¡áÍ´à´ÃÊ 3 ¢Ò à¾×ÍãˌÊÒÁÒöµ‹Í¾‹Ç§äÍ«Õ䴌 8 µÑÇâ´Â㪌ºÊ I2C à´ÕÂǡѹ è Ñ l ¢Ò¾ÍϵÊÒÁÒö¢Ñº¡ÃÐáʷѧ«ÍÏÊáÅЫԧ¡ä´Œ 25mA µ‹Í¢Ò é 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. 180 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é char I2CInit_=0; char y; int i,j; void Relay16(unsigned int x) { if (I2CInit_==0) { I2C_Init(100000); // Call initial L2C I2C_Start(); // Start communication I2C_Wr(0x40); // Address MCP23016 and Write Command I2C_Wr(0x06); // Command for access IODIR0 I2C_Wr(0x00); // Set DIR0 to OUTPUT I2C_Stop(); // Stop communication I2C_Start(); // Start communication I2C_Wr(0x40); // Address MCP23016 and Write Command I2C_Wr(0x07); // Command for access IODIR1 I2C_Wr(0x00); // Set DIR0 to OUTPUT I2C_Stop(); // Stop communication I2CInit_=1; } y=x%256; I2C_Start(); // Issue I2C start signal I2C_Wr(0x40); // Send byte via I2C (device address + W) I2C_Wr(0x00); // Send byte (data address) I2C_Wr(y); // Send byte (data address) I2C_Stop(); x=x/256; I2C_Start(); // Issue I2C start signal I2C_Wr(0x40); // Send byte via I2C (device address + W) I2C_Wr(0x01); // Send byte (data address) I2C_Wr(x); // Send byte (data address) I2C_Stop(); } void main() { while(1) // Loop { i=1; // Start value while(i<32768) // End loop value { Relay16(i); // Send Data to ZX-relay16 Delay_ms(500); i=i*2; // Shift left } Relay16(i); // Send Last bit Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁËÅÑ¡¨Ð¹íÒ¤‹Ò 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 è
  • 181. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 181 ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l 㪌ǧ¨Ãã¹ÃÙ»·Õè L20-3 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L20-3 ‹ l Ëҡ㪌ºÍÏ´ RBX-877rev.2007 ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L20-4 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ 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 I C EXPANSION SDA SCL A2 SDA SCL - POWER A1 A0 ãʋ¨ÑêÁà»ÍÏ = Åͨԡ "0" +5V 11 32 C3 +12V 0.1 F R9 2A 10k Vcc R8 1 MCLR SW1 RESET 21+$.&%%) 21+$.&&% RC4/SDA 23 12 18 RC3/SCL 31 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L20-3 ǧ¨Ã·´Åͧ㪌§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877/887
  • 182. 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 I C EXPANSION SDA SCL A2 SDA SCL - POWER A1 A0 ãʋ¨Áà»ÍÏ = Åͨԡ "0" êÑ +12V 2A Sound 4.8-6V LCD RC0 BATT RC7 RC6 RC4 RC3 RxD TxD SDA SCL DOWNLOAD LCD back ICD2 light POWER ON ON RBX - 877 rRv2007R e RESET M-1 PIC16F887 board M-2 RB3 #3 #2 #1 RA4 RB0 RB0/INT RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 SERVO S+ ÃÙ»·Õè 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
  • 183. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 183 »¯Ôºµ¡Ò÷Õè 21µÔ´µ‹Í¡ÑºâÁ´ÙÅà¢çÁ·ÔÈ´Ô¨ÔµÍÅ Ñ Ô CMPS03 ´ŒÇ¿˜§¡ª¹ I2C èÑ âÁ´ÙÅà¢çÁ·ÔÈ´Ô¨µÍÅ CMPS03 ÊÒÁÒöÊ×ÍÊÒáѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ䴌¼Ò¹¡ÒõÃǨ¨Ñº¤ÇÒÁ¡ÇŒÒ§ Ô è ‹ ¾ÑÅʏáÅм‹Ò¹ÃкººÑÊ I 2C â´Â ÃкººÑÊ I2C ¨ÐÊÒÁÒöʋ§¤‹Ò¢ŒÍÁÙŵíÒá˹‹§ÍÍ¡ÁÒ·Õ¤ÇÒÁÅÐàÍÕ´ÊÙ§ÊØ´ 0.1 è ͧÈÒâ´ÂäÁ‹¨Ò໚¹µŒÍ§ÁÕ¡Òäíҹdz¤‹ÒËÃ×Í·íÒ¡ÒÃá»Å§¤‹Òã´ æ ÍÕ¡ í ã¹ÃÙ»·Õè L21-1 áÊ´§Ë¹ŒÒµÒáÅСÒèѴ¢Ò¢Í§âÁ´ÙÅ CMPS03 ʋǹã¹ÃÙ»·Õè L21-2 áÊ´§¢ŒÍÁÙŢͧºÍÏ´ àª×ÍÁµ‹Í ADX-CMPS03 «Ö§Í͡Ẻà¾×ÍÍíҹǤÇÒÁÊдǡ㹡Òõ‹Í㪌§Ò¹ ËÒ¡·íÒ¡Ò÷´Åͧ¡ÑººÍÏ´ RBX- è è è 877 rev.2007 ÊÒÁÒöàª×ÍÁµ‹ÍࢌҡѺ¤Í¹à¹ç¡àµÍÏẺ JST 䴌·¹·Õ ¶ŒÒËÒ¡µ‹Í·´Åͧ¡ÑººÍÏ´·´Åͧ NX- è Ñ 877 plus II ãˌ㪌ÊÒµ‹Íǧ¨Ãµ‹Íࢌҷդ͹à¹ç¡àµÍÏ IDC µÑÇàÁÕÂ è ¢Ñ¹µÍ¹¡ÒõԴµ‹Í¡ÑºâÁ´ÙÅ CMPS03 é à¹×ͧ¨Ò¡µŒÍ§¡ÒõԴµ‹Í¼‹Ò¹ÃкººÑÊ I2C ¨Ö§µŒÍ§·ÃÒº¶Ö§áÍ´à´ÃʢͧâÁ´ÙÅ CMPS03 «Ö§¡ç¤Í $C0 è è × ÊíÒËÃѺ¡ÒÃʋ§¢ŒÍÁÙÅ áÅÐ $C1 ÊíÒËÃѺ¡ÒÃ͋ҹ¤‹Ò¢ŒÍÁÙÅ â´Â¢Ñ¹µÍ¹¡ÒõԴµ‹Í¡ÑºâÁ´ÙÅ CMPS03 ÁÕ´§¹Õé é Ñ µÑǵÃǨ¨ÑºÊ¹ÒÁáÁ‹àËÅç¡ KMZ51 äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏËÅÑ¡ÊíÒËÃѺ»ÃÐÁÇżŠ¡ÃÒÇ´ äÁ‹µÍ㪌§Ò¹ ‹ äÁ‹µÍ㪌§Ò¹ ‹ »ÃѺµÑ§¤‹Ò¡ÒÃÇÑ´ é àÍÒµ¾µ¢Í§¡ÒûÃѺᵋ§¤‹ÒÇÑ´ Ø àÍÒµ¾µáººÊÑ­­Ò³¾ÑÅʏ Ø SDA ÊíÒËÃѺàª×ÍÁµ‹Í¼‹Ò¹ÃкººÑÊ I2C è SCL ÊíÒËÃѺàª×ÍÁµ‹Í¼‹Ò¹ÃкººÑÊ I2C è +5V ·ÔÈà˹×Í ÃÙ»·Õè L21-1 áÊ´§ÃٻËҧáÅеíÒá˹‹§¢ÒÊíÒËÃѺ¡Òõ‹Í㪌§Ò¹âÁ´ÙÅ CMPS03
  • 184. 184 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ADX-CMPS03 33.0mm 28.6mm R1 R2 4.7k 4.7k front K1 +5V CMPS-03 SCL SCL K2 SDA Digital Compass >31.5mm SDA PWM 26.7mm 31.5mm S1 CAL_OUT CAL K3 CAL PWM NC NC GND K4 +5V GND SDA +5V SCL I2C BUS GND PWM >33.0mm ¨Ø´µ‹ÍÊÑ­­Ò³¢Í§ÃкººÑÊ I2C ÊíÒËÃѺàÊÕºÊÒµ‹Íǧ¨Ãà¾×èÍ㪌¡ÑººÍÏ´·´ÅͧËÃ×Í ¤Í¹à¹ç¡àµÍϵÇàÁÕÂ Ñ á¼§µ‹Íǧ¨Ã (àºÃ´ºÍÏ´) ÊíÒËÃѺµÔ´µÑ§âÁ´ÙÅ é ÊÇÔµª¡´µÔ´»Å‹Í´ѺÊíÒËÃѺ»ÃѺᵋ§à¾×ÍËÒµíÒá˹‹§ è CMPS03 ͌ҧÍÔ§ (calibration) ¤Í¹à¹ç¡àµÍÏ PCB ¢Í§àÍÒµ¾µÊÑ­­Ò³¾ÑÅʏ Ø ¤Í¹à¹ç¡àµÍÏ PCB ¢Í§ ÊÑ­­Ò³ÃкººÑÊ I2C ÃÙ»·Õè L21-2 áÊ´§Ç§¨Ã¢Í§ºÍÏ´ ADX-CMPS03 áÅСÒÃàª×ÍÁµ‹Í¡ÑºâÁ´ÙÅ CMPS03 è S ta rt B it áÍ´à´ÃÊÊíÒËÃѺʋ§¤‹Ò¢ŒÍÁÙÅä»Âѧ CMPS03 = $CO Start bit ¢ŒÍÁÙŵíÒá˹‹§ÃÕ¨ÊàµÍÏ·µÍ§¡ÒÃ͋ҹ¤‹Ò Ô Õè Œ 1 1 0 0 0 0 0 0 A7 A6 A5 A4 A3 A2 A1 R /W A C K 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 S ta rt B it áÍ´à´ÃÊÊíÒËÃѺ͋ҹ¤‹Ò¢ŒÍÁÙŨҡ CMPS03 = $C1 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
  • 185. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 185 (1) ʋ§ºÔµàÃÔÁµŒ¹ (Start) à¾×Íᨌ§ãˌÃкººÑÊ I2C àµÃÕÂÁ¾ÃŒÍÁÃѺ¢ŒÍÁÙÅ è è (2) ʋ§¤‹ÒáÍ´à´ÃÊ $C0 à¾×ÍÃкØÇÒ µŒÍ§¡ÒõԴµ‹Íà¾×Íà¢Õ¹¢ŒÍÁÙšѺâÁ´ÙÅ CMPS03 è ‹ è (3) ʋ§¤‹ÒµíÒá˹‹§ÃÕ¨ÊàµÍϢͧ CMPS03 ·ÕµÍ§¡ÒÃ͋ҹ¤‹Ò «Ö§ÃÒÂÅÐàÍÕ´ÃÕ¨ÊàµÍϵҧæ áÊ´§ Ô è Œ è Ô ‹ ã¹µÒÃÒ§·Õè L21-1 (4) ʋ§¤‹ÒáÍ´à´ÃÊ $C1 à¾×ÍÃкØÇÒ µŒÍ§¡ÒÃ͋ҹ¤‹Ò¢ŒÍÁÙŨҡâÁ´ÙÅ CMPS03 è ‹ (5) ͋ҹ¤‹Ò¢ŒÍÁÙŨҡâÁ´ÙÅ CMPS03 ÁÒà¡çºänjã¹Ë¹‹Ç¤ÇÒÁ¨íÒ (6) ʋ§ºÔµËÂØ´ (Stop) à¾×ÍÂص¡ÒÃÊ×ÍÊÒâŒÍÁÙÅ áÅСíÒ˹´ãˌºÊÍÂÙã¹ÊÀÒÇкÑÊNjҧ è Ô è Ñ ‹ ¨Ò¡¢Ñ¹µÍ¹¡ÒõԴµ‹Í·Õ¡Å‹ÒÇÁÒáŌÇÊÒÁÒö¹íÒÁÒà¢Õ¹໚¹â»Ãá¡ÃÁÀÒÉÒ 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 äÁ‹ãªŒ§Ò¹ äÁ‹ä´Œ¡Ò˹´¤‹Òänj í ¤íÒÊѧÊíÒËÃѺ¡ÒûÃѺᵋ§¤‹Ò â´ÂàÁ×͵ŒÍ§¡ÒûÃѺᵋ§¤‹Ò è è 15 µŒÍ§à¢Õ¹¢ŒÍÁÙÅ 255 ࢌҷÕèÊàµÍϵÒá˹‹§¹Õé èÕÔ í µÒÃÒ§·Õè L21-1 ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊàµÍÏ·§ËÁ´¢Í§âÁ´ÙÅ CMPS03 Ô Ñé
  • 186. 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); // Convert data to string Lcd_Out(1,11,Text); // Show LCD line1 Dat=(HIGH*256)+Low; // Sum low byte + high byte Dat1=Dat/10; // Convert to degree Dat2=(Dat%10)&0x0F; // Convert decimal notation WordToStr(Dat1,Text); // Convert to string Lcd_Out(2,1,Text); // show compass degree ==> LCD Lcd_Out(2,6,"."); // decimal point 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(); // issue I2C start signal I2C_Wr(0xC0); // send byte via I2C to cmps03 addres 0xC0 I2C_Wr(0x00); // send byte (register adres) I2C_Repeated_Start(); // issue I2C signal repeated start I2C_Wr(0xC1); // send byte (request data from EEPROM) Version=I2C_Rd(1); // Read revision Delay_ms(5); Unused=I2C_Rd(1); // Read unused Delay_ms(5); High=I2C_Rd(1); // Read High byte Delay_ms(5); Low=I2C_Rd(0); // Read Low byte I2C_Stop(); // Stop I2C Show(); // Show on LCD Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁẋ§¡Ò÷íҧҹ໚¹ 2 ʋǹ ʋǹáá໚¹¡ÒõԴµ‹Í¡ÑºâÁ´ÙÅ CMPS03 ¼‹Ò¹ºÑÊ I2C à¾×Í͋ҹ è ¤‹ÒÃÕ¨ÊàµÍÏᵋÅÐ亵Í‹ҧµ‹Íà¹×ͧ â´ÂàÃÔÁÃÕ¨ÊàµÍÏáÊ´§Ãع¢Í§ºÍÏ´ ÃÕ¨ÊàµÍÏáÊ´§¤‹ÒẺËÂÒº (͋ҹÁÒ Ô è è Ô ‹ Ô áµ‹äÁ‹ä´ŒãªŒ§Ò¹) ÃÕ¨ÊàµÍÏÍÒ¹¤‹ÒͧÈÒẺÅÐàÍÕ´ (16 ºÔµ) Ô ‹ ʋǹ·Õè 2 ໚¹¡ÒùíÒ¤‹Ò·ÕÍҹ䴌¨Ò¡âÁ´ÙÅ CMPS03 ÁÒá»Å§ãˌÍÂÙã¹ÃÙ»µÑÇÍÑ¡ÉÃà¾×͹íÒä»áÊ´§¼Å·Õè è‹ ‹ è âÁ´ÙÅ LCD â´ÂÃع¢Í§ºÍÏ´¨Ð¹íÒä»áÊ´§·ÕºÃ÷Ѵº¹¢Í§âÁ´ÙÅ LCD ¨Ò¡¹Ñ¹¹íÒ¤‹Ò¢Í§·ÔÈ·Ò§·ÕÍҹ䴌㹠‹ è é è‹ äºµº¹áÅÐŋҧ¢Í§ÃÕ¨ÊàµÍÏÍÒ¹¤‹ÒẺÅÐàÍÕ´ÁÒÃÇÁ¡Ñ¹ ËÒôŒÇ 10 à¾×Íãˌ䴌¤Ò·ÔÈ·Ò§¨ÃÔ§ã¹Ë¹‹ÇÂͧÈÒ Ô ‹ è ‹ ʋǹàÈÉ·Õ䴌¨Ò¡¡ÒÃËÒùíÒÁÒáÊ´§à»š¹¤‹Ò·È¹ÔÂÁ¢Í§Ë¹‹ÇÂͧÈÒ è â»Ãá¡ÃÁ·Õè L21-1 ä¿Å CMPS03test.c â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ mikroC ·Õ㪌·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ è äźÃÒÃÕ I2C ´ŒÇ¡ÒõԴµ‹Í¡ÑºâÁ´ÙÅ CMPS-03 à¾×Í͋ҹ¤‹Ò¢Í§·ÔÈ è
  • 187. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 187 ¡ÒûÃѺᵋ§¤‹Ò·Ôȷҧ͌ҧÍԧᡋâÁ´ÙÅ CMPS03 à¾×Íãˌ¡ÒÃÇÑ´·ÔÈ·Ò§¢Í§âÁ´ÙÅ CMPS03 ÁÕ¤ÇÒÁáÁ‹¹ÂíÒÁÒ¡·ÕÊ´ ¨Ö§ÁÕ͹¾ØµÊíÒËÃѺ»ÃѺᵋ§¤‹Ò·ÔÈ·Ò§ è èØ Ô ÍŒÒ§ÍÔ§ ·Ñ§¹Õ¾Í»ÃÐ⪹ã¹¡ÒáíÒ˹´·Ôȷҧ͌ҧÍԧ੾ÒÐÊíÒËÃѺ¼Ù㪌§Ò¹ â´ÂµŒÍ§»‡Í¹ÊÑ­­Ò³Åͨԡ “0” ࢌҷÕè é é ×è Œ ¢ÒÍÔ¹¾ØµÊíÒËÃѺ»ÃѺᵋ§âÁ´ÙÅ CMPS03 «Ö§¡ç¤Í¢Ò 6 Ëҡ㪌ºÍÏ´ ADX-CMPS03 ¡ÑºâÁ´ÙÅ CMPS03 ¨ÐÁÕÊÇÔµª è × ¡´µÔ´»Å‹Í´ѺµÔ´µÑ§änjãˌáÅŒÇ ¡ÒûÃѺᵋ§ÁÕ¢¹µÍ¹´Ñ§¹Õé é Ñé (1) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹ Ëѹ´ŒÒ¹Ë¹ŒÒ¢Í§âÁ´ÙÅä»·Ò§·ÔÈà˹×Í ¡´ÊÇÔµª 1 ¤Ãѧ é é (2) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹ Ëѹ´ŒÒ¹Ë¹ŒÒ¢Í§âÁ´ÙÅä»·Ò§·ÔȵÐÇѹÍÍ¡ ¡´ÊÇÔµª é (3) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹ Ëѹ´ŒÒ¹Ë¹ŒÒ¢Í§âÁ´ÙÅä»·Ò§·ÔÈ㵌 ¡´ÊÇÔµª 1 ¤Ãѧ é é (4) ÇÒ§âÁ´ÙÅ CMPS03 ¢¹Ò¹¡Ñº¾×¹ Ëѹ´ŒÒ¹Ë¹ŒÒ¢Í§âÁ´ÙÅä»·Ò§·ÔȵÐÇѹµ¡ ¡´ÊÇÔµª é ໚¹ÍѹÊÔé¹ÊØ´¡ÒûÃѺµÑ駤‹Ò·Ôȷҧ͌ҧÍÔ§¢Í§âÁ´ÙÅ CMPS03 â´ÂâÁ´ÙŨÐà¡çº¤‹Ò͌ҧÍÔ§¹Õéänjã¹Ë¹‹Ç ¤ÇÒÁ¨íÒÍÕ;ÃÍÁáÅÐäÁ‹µÍ§»ÃѺµÑ§¤‹ÒãËÁ‹Í¡àÁ×ͨ‹ÒÂä¿àÅÕ§¤ÃѧãËÁ‹ Õ Œ é Õ è é é +5V 11 32 C6 +5V 0.1 F 50V JP1 IC3 BACK LIGHT PIC16F887 R13 ON 16 47 BLA 21 4 RD2 RS DSP1 1 +V RD3 22 6 E LCD 16x2 3 Vo +5V D7 D6 D5 D4 D3 D2 D1 D0 R/W BLK GND VR1 10k 14 13 12 11 10 9 8 7 5 15 2 BRIGHTNESS 30 R5 RD7 4k7 29 1 RD6 MCLR 28 +5V R6 RD5 SW2 1k 27 RESET RD4 23 RC4/SDA +5V SDA GND SCL 18 RC3/SCL front 12 +5V CMPS-03 SCL SDA Digital Compass 31 PWM CAL_OUT CAL N 13 14 NC CR1 NC GND Ceramic Resonator SDA SCL PWM 20MHz ÃÙ»·Õè L20-4 ǧ¨Ã·´Åͧ㪌§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877 㹡ÒõԴµ‹Í ¡ÑºâÁ´ÙÅà¢çÁ·ÔÈ CMPS03
  • 188. 188 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é +5V SDA GND SCL + front +5V CMPS-03 SCL + SDA Digital Compass PWM CAL_OUT + CAL N NC NC GND + SDA SCL PWM Sound 4.8-6V LCD RC0 BATT RC7 RC6 RC4 RC3 RxD TxD SDA SCL DOWNLOAD LCD back ICD2 light POWER ON ON CMPS03 VRr1157R e RESET P I 3 5 9 . 9 8 D eg r e e d M-1 M-2 RB3 #3 #2 #1 RA4 RB0 RB0/INT SERVO RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 S+ ÃÙ»·Õè L20-4 ǧ¨Ã·´Åͧ㪌§Ò¹âÁ´ÙÅÃкººÑÊ I2C ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F887 ¡Ã³Õ㪌ºÍÏ´ RBX-877 rev.2007 ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l 㪌ǧ¨Ãã¹ÃÙ»·Õè L21-4 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L21-4 ‹ l Ëҡ㪌ºÍÏ´ RBX-877rev.2007 ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L21-5 ‹ ¢Ñ鹵͹¡Ò÷´Åͧ L21.1 ແ´â»Ãá¡ÃÁ mikroC ÊÌҧä¿Åâ»Ãà¨ç¡µ â´ÂàÅ×Í¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏáÅФÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò´Ñ§¹Õé èÑ l ¡Ã³Õ㪌ºÍÏ´ NX-877 plus II àÅ×Í¡ PIC16F877 ËÃ×Í PIC16F877A ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ l ¡Ã³Õ㪌ºÍÏ´ RBX-877 rev.2007 àÅ×Í¡ PIC16F887 ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡Ò 20MHz èÑ L21.2 ÊÌҧâ»Ãà¨ç¡µªÍ CMPS03test áÅоÔÁ¾â»Ãá¡ÃÁÀÒÉÒ C µÒÁâ»Ãá¡ÃÁ·Õè L21-1 ×è
  • 189. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 189 L21.3 ·íÒ¡ÒäÍÁä¾ÅáÅдÒǹâËÅ´â»Ãá¡ÃÁà¾×Í·´Êͺ¼ÅÅѾ¸¡Ò÷íÒ§Ò¹ è L21.4 »ÃѺᵋ§·ÔȢͧ¢ÑÇáÁ‹àËÅç¡âš͌ҧÍÔ§ãˌᡋâÁ´ÙÅ CMPS03 é L21.5 Ãѹâ»Ãá¡ÃÁ ¨Ò¡¹Ñ¹·´Åͧ¢ÂѺâÁ´ÙÅ CMPS03 ãˌ˹ä»ã¹·ÔÈ·Ò§µ‹Ò§æ áŌǵÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ é Ñ ¼‹Ò¹·Ò§âÁ´ÙÅ LCD ·ÕâÁ´ÙÅ LCD ¨ÐáÊ´§ËÁÒÂàÅ¢àÇÍϪ¹¢Í§âÁ´ÙÅ CMPS-03 ·ÕºÃ÷Ѵº¹ ¨Ò¡¹Ñ¹áÊ´§µíÒá˹‹§Í§ÈÒ è Ñ è é ¢Í§âÁ´ÙÅ CMPS03 ã¹¢³Ð¹Ñ¹à·Õº¡Ñº·ÔÈà˹×Í·ÕºÃ÷Ѵ´ŒÒ¹Å‹Ò§ ´Ñ§ÃÙ» é è C M P S 03 3 Ver 15 359.9 D e gr ee mikroC
  • 190. 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();
  • 191. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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); ໚¹¡ÒÃ͋ҹ¤‹Ò¢ŒÍÁÙŨҡÍØ»¡Ã³ÊàÅ¿ÁÒà¡çºänj·µÇá»Ã 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. 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 I C EXPANSION SDA SCL A2 SDA SCL - POWER A1 A0 ãʋ¨ÑêÁà»ÍÏ = Åͨԡ "0" +5V 11 32 C3 +12V 0.1 F R9 2A 10k Vcc R8 1 MCLR SW1 RESET PIC16F877(A) PIC16F887 26 RC7 25 12 RC6 31 GND OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè L22-1 ǧ¨Ã·´ÅͧµÔ´µ‹Í¡ÑºÍØ»¡Ã³ÃкººÑÊ I2C â´Â㪌¢Ò¾Íϵã´æ áÅ¡ª¹ Soft_i2c Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ
  • 193. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 I C EXPANSION SDA SCL A2 SDA SCL - POWER A1 A0 ãʋ¨Áà»ÍÏ = Åͨԡ "0" êÑ +12V 2A Sound 4.8-6V LCD RC0 BATT RC7 RC6 RC4 RC3 RxD TxD SDA SCL DOWNLOAD LCD back ICD2 light POWER ON ON RBX - 877 rRv2007R e RESET M-1 PIC16F887 board M-2 RB3 #3 #2 #1 RA4 RB0 RB0/INT RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 SERVO S+ ÃÙ»·Õè L22-2 ǧ¨Ã·´ÅͧµÔ´µ‹Í¡ÑºÍØ»¡Ã³ÃкººÑÊ I2C â´Â㪌¢Ò¾Íϵã´æ áÅ¡ª¹ Soft_i2c Ñè ¢Í§ mikroC ¤ÍÁä¾àÅÍÏ ¡Ã³Õ㪌ºÍÏ´ RBX-877 rev.2007 ÊíÒËÃѺ㹡Ò÷´Åͧ¹Õ¨Ðᵡµ‹Ò§¨Ò¡»¯Ôºµ¡Ò÷Õè 20 µÃ§·Õè 㪌¿§¡ª¹ Soft_I2C á·¹ ·íÒãˌÊÒÁÒö é Ñ Ô ˜ Ñè 㪌§Ò¹¢Ò¾Íϵã´æ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC 㹡ÒõԴµ‹Í¡ÑºÍØ»¡Ã³ÃкººÑÊ I2C ÊíÒËÃѺ㹡Ò÷´Åͧ ¹Õàé Å×͡㪌¢Ò RC7 ໚¹¢Ò SDA áÅÐ㪌¢Ò RC6 ໚¹¢Ò SCL ´Ñ§áÊ´§Ç§¨Ãàª×ÍÁµ‹Íã¹ÃÙ»·Õè L22-1 ʋǹµÑÇÍ‹ҧ è â»Ãá¡ÃÁÀÒÉÒ C ·Õ㪌㹡Ò÷´Êͺ¡Ò÷íÒ§Ò¹áÊ´§ã¹â»Ãá¡ÃÁ·Õè L22-1 è ¡ÒÃàª×ÍÁµ‹Í·Ò§ÎÒÏ´áÇÏ è l 㪌ǧ¨Ãã¹ÃÙ»·Õè L22-1 㹡Ò÷´Åͧ l Ëҡ㪌ºÍÏ´·´Åͧ NX-877 plus II ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L22-1 ‹ l Ëҡ㪌ºÍÏ´ RBX-877rev.2007 ãˌµÍǧ¨ÃµÒÁÃÙ»·Õè L22-2 ‹
  • 194. 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); // Call initial L2C Soft_I2C_Start(); // Start communication Soft_I2C_Write(0x40); // Address MCP23016 and Write Command Soft_I2C_Write(0x06); // Command for access IODIR0 Soft_I2C_Write(0x00); // Set DIR0 to OUTPUT Soft_I2C_Stop(); // Stop communication Soft_I2C_Start(); // Start communication Soft_I2C_Write(0x40); // Address MCP23016 and Write Command Soft_I2C_Write(0x07); // Command for access IODIR1 Soft_I2C_Write(0x00); // Set DIR0 to OUTPUT Soft_I2C_Stop(); // Stop communication I2CInit_=1; } y=x%256; // y=low Byte of data Soft_I2C_Start(); // Issue I2C start signal Soft_I2C_Write(0x40); // Send byte via I2C (device address + W) Soft_I2C_Write(0x00); // Send byte (data address) Soft_I2C_Write(y); // Send byte (data address) Soft_I2C_Stop(); x=x/256; // x=high byte Soft_I2C_Start(); // Issue I2C start signal Soft_I2C_Write(0x40); // Send byte via I2C (device address + W) Soft_I2C_Write(0x01); // Send byte (data address) Soft_I2C_Write(x); // Send byte (data address) Soft_I2C_Stop(); } void main() { while(1) // Loop { i=1; // Start value while(i<32768) // End loop value { Relay16(i); // Send Data to ZX-relay16 Delay_ms(500); i=i*2; // Shift left } Relay16(i); // Send Last bit Delay_ms(500); } } ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁËÅÑ¡¨Ð¹íÒ¤‹Ò 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 è
  • 195. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 196 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 197. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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. 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 Ẻ͹ءÃÁ Ô é è
  • 199. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 199 ºÑÊ¢ŒÍÁÙÅÀÒÂã¹ ÊÑ­­Ò³à¢Õ¹ ÊÑ­­Ò³Í‹Ò¹ ÃÕ¨ÔÊàµÍÏ SSPBUF RC4/SDI/SDA ªÔ¿µÃÕ¨ÔÊàµÍÏ SSPSR ºÔµ 0 ÊÑ­­Ò³¹ÒÌÔ¡Ò àÅ×è͹¢ŒÍÁÙÅ RC5/SDO ÊÑ­­Ò³ Peripheral Output Enable àÅ×Í¡ÊÑ­­Ò³¹ÒÌÔ¡Ò RA5/SS/AN4 SS ʋǹàÅ×Í¡ ¢Íº¢ÒÊÑ­­Ò³ ºÔµ SMP : CKE àÍÒµ¾Øµ¨Ò¡ TMR2 2 ʋǹàÅ×Í¡ RC3/SCK/SCL ¢Íº¢ÒÊÑ­­Ò³ »ÃÕÊà¡ÅàÅÍÏ TOSC 4, 16, 64 SSPM3 : SSPM0 ¢ŒÍÁÙÅ·Õè¨Ðʋ§ä»Âѧ SSPSR ºÔµ TRIS ¤Çº¤ØÁ·ÔÈ·Ò§ ÃÙ»·Õè 12-1 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ MSSP àÁ×Í·íÒ§Ò¹ã¹âËÁ´ SPI è
  • 200. 200 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é àÁ×Í¢ŒÍÁÙÅ㹺ѿà¿ÍÏàµçÁ á¿Å¡ BF (ºÔµ 0 ã¹ÃÕ¨ÊàµÍÏ SSPDAT) ¨Ð૵ ¾ÃŒÍÁæ ¡Ñºá¿Å¡ è Ô SSPIF (ºÔµ 3 ã¹ÃÕ¨ÊàµÍÏ PIR1) «Ö§·íÒãˌà¡Ô´¡ÒÃÍÔ¹àµÍÏûµ¢¹ ËÒ¡ÁÕ¡ÒÃàÍç¹àÍàºÔÅänj ¨Ö§ÊÒÁÒö Ô è Ñ Öé 㪌»ÃÐ⪹¨Ò¡á¿Å¡·Ñ§Êͧ㹡ÒäǺ¤ØÁ¨Ñ§ËÇСÒÃà¢Õ¹áÅÐ͋ҹ¢ŒÍÁÙÅ à¾×ÍäÁ‹ãˌà¡Ô´¡Ò깡ѹ é è ¢Í§¢ŒÍÁÙÅ¢Öé¹ ´ŒÒ¹¤ÇÒÁ¶Õ¢Í§ÊÑ­­Ò³¹Ò́¡Òã¹âËÁ´ 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) ¹íÒ¢ŒÍÁÙÅä»»ÃÐÁÇżÅËÃ×Í·íÒ¡ÒÃÃѺ-ʋ§ ¢ŒÍÁÙÅã¹äºµ¶´ä» Ñ
  • 201. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 201 SPI ÁÒÊàµÍÏ (SSPM3 : SSPM0 = 00xx) SPI ÊàÅ¿ (SSPM3 : SSPM0 = 010x) SDO SDI ÃÕ¨ÊàµÍÏ SSPBUF Ô ÃÕ¨ÊàµÍÏ SSPBUF Ô SDI SDO ªÔ¿µÃ¨ÊàµÍÏ SSPSR Õ Ô ªÔ¿µÃ¨ÊàµÍÏ SSPSR Õ Ô MSB LSB MSB LSB SCK SCK äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ 1 äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ 2 ÃÙ»·Õè 12-2 ¡ÒÃàª×ÍÁµ‹ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ 2 µÑÇࢌҴŒÇ¡ѹâ´Â㪌âÁ´ÙÅ SPI è 12.2 ÃٻẺ¡ÒÃàª×ÍÁµ‹Í è 㹡óշÕè¡íÒ˹´ãˌäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC16F877/887 ·íÒ§Ò¹ã¹âËÁ´ SPI ÁÒÊàµÍÏ ÍØ»¡Ã³·¹ÒÁÒàª×ÍÁµ‹Í·Ñ§ËÁ´¨Ö§à»š¹ÍØ»¡Ã³ÊàÅ¿ áÅÐ㪌§Ò¹à¾Õ§ 3 ¢Ò¤×Í SDO, SDI áÅÐ SCK Õè í è é áÅдŒÇ¤ÇÒÁÊÒÁÒö¢Í§âÁ´ÙÅ MSSP ã¹âËÁ´ SPI ÊÒÁÒö·Õ¨Ð¡íÒ˹´ãˌ·Ò§Ò¹ä´Œ·§ÁÒÊàµÍÏ è í éÑ áÅÐÊàÅ¿ ã¹ÃÙ»·Õè 12-2 áÊ´§¡ÒÃàª×ÍÁµ‹ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏÃÇÁ¡Ñ¹àÁ×Í·íÒ§Ò¹ã¹âËÁ´ SPI â´Â è ‹ è µÑÇ˹Ö觨Ð໚¹ÍØ»¡Ã³ÁÒÊàµÍÏáÅÐÍÕ¡µÑÇ˹Ö觵ŒÍ§à»š¹ÍØ»¡Ã³ÊàÅ¿
  • 202. 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); µÑÇá»Ã master 㪌¡Ò˹´âËÁ´¡Ò÷íÒ§Ò¹¢Í§ 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 // ´ÔÊàÍàºÔÅ¡ÒÃàÅ×Í¡âËÁ´ÁÒÊàµÍÏËÃ×ÍÊàÅ¿
  • 203. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 203 data_sample ໚¹¡ÒáíÒ˹´µíÒá˹‹§ã¹¡ÒõÃǨ¨ÑºÊÑ­­Ò³ÍÔ¹¾Øµ â´Â DATA_SAMPLE_MIDDLE // µÃǨ¨ÑºÊÑ­­Ò³·ÕµÒá˹‹§¡ÅÒ§¢Í§ÃÙ»¤Å×¹ è í è DATA_SAMPLE_END // µÃǨ¨ÑºÊÑ­­Ò³·ÕµÒá˹‹§»ÅÒÂÊØ´¢Í§ÃÙ»¤Å×¹ è í è clock_idle ໚¹¡ÒáíÒ˹´Ê¶Ò¹ÐËÂØ´¹Ô§¢Í§¢ÒÊÑ­­Ò³¹Ò́¡Ò è CLK_IDLE_HIGH // ÊÀÒÇÐËÂØ´¹Ô§à»š¹Åͨԡ “1” è CLK_IDLE_LOW // ÊÀÒÇÐËÂØ´¹Ô§à»š¹Åͨԡ “0” è transmit_edge ໚¹¡ÒáíÒ˹´¢Íº¢ÒÊíÒËÃѺ¡ÒÃʋ§¢ŒÍÁÙÅÍÍ¡ä» LOW_2_HIGH // ¢ŒÍÁÙŶ١ʋ§àÁ×ÍÊÑ­­Ò³¹Ò́¡Òà»ÅÕ¹¨Ò¡ “0” ä»à»š¹ “1” è è HIGH_2_LOW // ¢ŒÍÁÙŶ١ʋ§àÁ×ÍÊÑ­­Ò³¹Ò́¡Òà»ÅÕ¹¨Ò¡ “1” ä»à»š¹ “0” è è µÑÇÍ‹ҧ·Õè 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 ÁÒà¡çºänj·µÇá»Ã take Õè Ñ 3.12.4 ¿˜§¡ª¹ Spi_Write Ñè ໚¹¿˜§¡ª¹Ê‹§¢ŒÍÁÙÅä»ÂѧÍØ»¡Ã³ SPI â´Â¢ŒÍÁÙÅã¹µÑÇá»Ã data¨Ð¶Ù¡à¢Õ¹ä»ÂѧÃÕ¨ÊàµÍÏ Ñè Ô SSPBUF áÅÐàÃÔÁµŒ¹¡ÒÃʋ§¢ŒÍÁÙÅ è ÃٻẺ¡ÒÃ㪌§Ò¹¤íÒÊѧ è void Spi_Write(unsigned short data); µÑÇÍ‹ҧ·Õè 12-4 Spi_Write(1); ໚¹¡ÒÃʋ§¢ŒÍÁÙŵÑÇàÅ¢ 1 ÍÍ¡ä»ÂѧÍØ»¡Ã³ SPI
  • 204. 204 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é »¯Ôºµ¡Ò÷Õè 23 µÔ´µ‹Í¡Ñº MCP4922 äÍ«Õá»Å§ Ñ Ô ÊÑ­­Ò³´Ô¨µÍÅ໚¹ÍйÒÅÍ¡ Ô ã¹¡Ò÷´Åͧ¹Õ¹ÒàʹͶ֧ÇÔ¸¡ÒÃ㪌§Ò¹áÅеÑÇÍ‹ҧ¡ÒÃàª×ÍÁµ‹Í¡ÑºÍØ»¡Ã³·ãªŒ¡ÒõԴµ‹ÍẺ SPI ÍØ»¡Ã³ é í Õ è Õè ·Õ¹ÒÁÒ㪌໚¹µÑÇÍ‹ҧ¤×Í MCP4922 äÍ«Õá»Å§ÊÑ­­Ò³´Ô¨µÍÅ໚¹ÍйÒÅÍ¡ (DAC) ¤ÇÒÁÅÐàÍÕ´ 12 ºÔµ è í Ô ¤Ø³ÊÁºÑµ¢Í§ MCP4922 äÍ«Õá»Å§ÊÑ­­Ò³´Ô¨µÍÅ໚¹ÍйÒÅÍ¡ Ô Ô l ¤ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÊÑ­­Ò³ÊÙ§¶Ö§ 12 ºÔµ l ÁÕàÍÒµ¾µ 2 ª‹Í§ ÊÒÁÒöàÅ×Í¡ãˌ·Ò§Ò¹à¾Õ§ª‹Í§à´ÕÂÇ䴌 Ø í l µÔ´µ‹Í¼‹Ò¹ÃкººÑÊ SPI ¤ÇÒÁ¶ÕÊ­­Ò³¹Ò́¡ÒÊÙ§ÊØ´ 20MHz èÑ l ÊÒÁÒöáŵªàÍÒµ¾µä´Œ Ø l ä¿àÅÕ§ +2.7 ¶Ö§ +5.5V é ÃÙ»·Õè L23-1 áÊ´§¡ÒèѴ¢ÒáÅÐÃÒÂÅÐàÍÕ´¢ŒÍÁÙÅã¹ÃÕ¨ÊàµÍÏ¡Ò˹´¡Ò÷íÒ§Ò¹ã¹äÍ«Õ MCP4922 Ô í ºÔµ 15 ºÔµ 14 ºÔµ 13 ºÔµ 12 ºÔµ 11 ºÔµ 10 ºÔµ 9 ºÔµ 8 VDD 1 14 VOUTA A/B BUF GA SHDN D11 D10 D9 D8 W -x W -x W -x W -0 W -x W -x W -x W -x NC 2 13 VREFA ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 MCP4922 CS 3 12 AVss SCK 4 11 VREFB D7 D6 D5 D4 D3 D2 D1 D0 SDI 5 10 VOUTB W -x W -x W -x W -x W -x W -x W -x W -x NC 6 9 SHDN ºÔµ 15 - A/B (DACA/DACB select bit) : ºÔµàÅ×͡ǧ¨Ãá»Å§ÊÑ­­Ò³·ÕµÍ§¡ÒõԴµ‹Í´ŒÇÂ è Œ NC 7 8 LDAC “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 Ô í
  • 205. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 205 CS   ! " # $ % & '    ! " # SCK ºÔµ¤Çº¤ØÁ ºÔµ¢ŒÍÁÙÅ 12 ºÔµ SDI A/B BUF GA SHDN D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 Vout áç´Ñ¹àÍÒµ¾µµÒÁ·Õ¡Ò˹´ Ø è í ÃÙ»·Õè L23-2 ä´ÍÐá¡ÃÁàÇÅÒ㹡Ò÷íÒ§Ò¹¢Í§äÍ«Õ MCP4922 ÃÕ¨ÊàµÍÏà¢Õ¹¤íÒÊѧ¢Í§ MCP4922 Ô è MCP4922 ÁÕèÊàµÍÏÊÒËÃѺ¡íÒ˹´¡Ò÷íÒ§Ò¹áÅÐÃѺ¢ŒÍÁÙÅ´Ô¨µÍÅà¾Õ§µÑÇà´ÕÂÇ ·íÒãˌ§Òµ‹Í¡ÒÃ㪌§Ò¹ ÕÔ í Ô ‹ ¹Ñ¹¤×Í ÃÕ¨ÊàµÍÏà¢Õ¹¤íÒÊѧ (WRTE COMMAD) è Ô è ã¹ÃÙ»·Õè L23-2 áÊ´§ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃà¢Õ¹¢ŒÍÁÙÅä»ÂѧÃÕ¨ÊàµÍϤÒÊѧ¢Í§äÍ«Õ MCP4922 ¨ÐàËç¹ Ô í è 䴌ÇÒ ¡ÒÃàÃÔÁµŒ¹µÔ´µ‹Í¡Ñº MCP4922 µŒÍ§·íÒãˌ¢Ò CS ໚¹ “0” ¨Ò¡¹Ñ¹»‡Í¹ÊÑ­­Ò³¹Ò́¡Òà¢ŒÒ·Õ¢Ò SCK µ‹Í´ŒÇ ‹ è é è à¢Õ¹¢ŒÍÁÙÅ¡íÒ˹´¡Ò÷íÒ§Ò¹ËÃ×Í Config bit 4 ºÔµº¹ µ‹Í´ŒÇºԵ¢ŒÍÁÙÅ´Ô¨µÍÅÍÕ¡ 12 ºÔµ ã¹¢³Ðà´ÕÂǡѹµŒÍ§ Ô ·íÒãˌ¢Ò LDAC ໚¹ “1” ¤ŒÒ§änj¨¹¡Ç‹Ò¨Ðʋ§¢ŒÍÁÙŤú áŌÇà»ÅÕ¹໚¹Åͨԡ “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. 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 ˜ Ñè
  • 207. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 207 +5V +5V 1 11 32 VDD VDD VDD 11 VREFB 15 3 13 RC0 CS VREFA 18 4 RC3/SCK SCK 24 5 9 RC5/SDO SDI SHDN 8 LDAC 14 VOUTA IC2 DC outputA MCP4922 10 VOUTB IC1 VSS DC outputB PIC16F877-20 12 OSC1 OSC2 13 14 C1 C2 22pF XTAL1 22pF 20MHz ÃÙ»·Õè 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. 208 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é
  • 209. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 209 º··ÕÕè 13 ¡ÒõԴµ‹ÍÍØ»¡Ã³ÃкººÑÊ 1 ÊÒ ´ŒÇ¿˜§¡ª¹¢Í§ mikroC ¤ÍÁä¾àÅÍÏ Ñè ÃкººÑÊ 1 ÊÒ (1-Wire bus) ¼Ù¤¹¤Ô´¤×Í ´ÑÅÅÑÊà«ÁԤ͹´Ñ¡àµÍÏ ÃкºÊ×ÍÊÒâŒÍÁÙÅẺ¹ÕÁÕ ŒŒ è é ¤ÇÒÁªÒ­©ÅÒ´áÅÐ㪌ÊÒÂÊÑ­­Ò³à¾Õ§ 1 àʌ¹à·‹Ò¹Ñé¹ äÁ‹µŒÍ§ÁÕÊÒÂÊÑ­­Ò³¹Ò́¡Ò¤Çº¤ØÁ¨Ñ§ËÇÐ ¡Òö‹Ò·ʹ¢ŒÍÁÙÅàËÁ×͹¡ÑºÃкºÊ×ÍÊÒÃ͹ءÃÁẺÍ×¹æ à¹×ͧ¨Ò¡ÊÒÂÊÑ­­Ò³¹Ñ¹¨Ð·íÒ˹ŒÒ·Õàè »š¹ è è è é ÊÒÂÊÑ­­Ò³¹Ò́¡Òã¹µÑÇ Ê‹Ç¹¤‹Ò¢Í§¢ŒÍÁÙžԨÒóҨҡÅѡɳТͧÃÙ»ÊÑ­­Ò³·Õ»ÃÒ¡¯º¹ÊÒÂã¹ è ᵋÅЪ‹Í§¢Í§àÇÅÒËÃ×ÍàÃÕÂ¡Ç‹Ò ä·ÁÊÅç͵ (time-slot) â´Â¤ÒºàÇÅÒµèÒÊØ´áÅÐÊÙ§ÊØ´¢Í§Ê¶Ò¹Ðµ‹Ò§æ í 㹡ÒÃÊ×ÍÊÒâŒÍÁÙÅã¹áµ‹ÅÐä·ÁÊÅç͵ÁÕ¡ÒáíÒ˹´¢Íºà¢µänjÍ‹ҧªÑ´à¨¹ ¡Òö‹Ò·ʹ¢ŒÍÁÙŨÐà¡Ô´ è ¢Ö¹ã¹áµ‹ÅÐä·ÁÊÅç͵¹Ñ¹ ¡Òö‹Ò·ʹ¢ŒÍÁÙÅ໚¹áººÍЫԧâ¤Ã¹ÑÊã¹ÃдѺºÔµ é é 13.1 ¤Ø³ÊÁºÑµ·Ò§à·¤¹Ô¤¢Í§ÃкººÑÊ˹֧ÊÒÂ Ô è ÊÒÂÊÑ­­Ò³º¹ÃкººÑʹÕàé »š¹ÊÒÂÊÑ­­Ò³áººÊͧ·ÔÈ·Ò§ ᵋ¢ÍÁÙÅÊÒÁÒöà´Ô¹·Ò§ä´Œã¹·ÔÈ Œ ·Ò§à´ÕÂÇÀÒÂ㹪‹Ç§àÇÅÒ˹֧æ ÍØ»¡Ã³º¹ÃкººÑʵŒÍ§ÁÕ¡ÒÃÃкØÍ‹ҧªÑ´à¨¹Ç‹ÒµÑÇã´à»š¹ÁÒÊàµÍÏ µÑÇã´ è ໚ ¹ ÊàÅ¿ â´Âʋ Ç ¹ãË­‹ ÍØ » ¡Ã³ Á ÒÊàµÍÏ ¤× Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ ʋ Ç ¹ÍØ » ¡Ã³ Ê àÅ¿ 䴌ᡋ äÍ«ÕÇ´ÍسËÀÙÁ,Ô Ë¹‹Ç¤ÇÒÁ¨íÒáÃÁ ໚¹µŒ¹ ÍØ»¡Ã³ÁÒÊàµÍÏ໚¹µÑǨѴàµÃÕÂÁ¤ÇÒÁ¾ÃŒÍÁáÅФǺ Ñ ¤ØÁ¡Òö‹Ò·ʹ¢ŒÍÁÙź¹ÊÒÂÊÑ­­Ò³¹Ñ¹ ¢ŒÍÁÙŷѧËÁ´¨Ð¶Ù¡Ê‹§Å§º¹ÊÒÂÊÑ­­Ò³·ÕÁÍÂÙà‹ ¾Õ§àʌ¹à´ÕÂÇ é é è Õ ¹Õ·§ËÁ´ ã¹ÃÐËNjҧ¡Ò÷íÒ§Ò¹ÍØ»¡Ã³ÁÒÊàµÍÏáÅÐÊàÅ¿ÊÒÁÒö໚¹ä´Œ·§µÑÇʋ§áÅеÑÇÃѺ ¢Ö¹ÍÂÙ¡º é Ñé Ñé é ‹Ñ à§×͹䢢ͧ¡Ò÷íҧҹ㹢³Ð¹Ñ¹ ¡µÑÇÍ‹ҧ ¶ŒÒËÒ¡ÁÕ¡ÒÃà¢Õ¹¢ŒÍÁÙŨҡÍØ»¡Ã³ÁÒÊàµÍÏä»ÂѧÍØ»¡Ã³ è é ÊàÅ¿ µÑÇʋ§¤×ÍÍØ»¡Ã³ÁÒÊàµÍÏ µÑÇÃѺ¤×ÍÍØ»¡Ã³ÊàÅ¿ ã¹·Ò§µÃ§¢ŒÒÁ Ëҡ໚¹¡ÒÃ͋ҹ¢ŒÍÁÙŨҡÍØ »¡Ã³ÊàÅ¿ µÑÇʋ§¨Ð¡ÅÒÂ໚¹ÍØ»¡Ã³ÊàÅ¿ áÅеÑÇÃѺ¤×ÍÍØ»¡Ã³ÁÒÊàµÍÏ ã¹ÃкººÑÊ 1 ÃкºµŒÍ§ ÁÕÍ»¡Ã³ÁÒÊàµÍÏà¾Õ§µÑÇà´ÕÂÇ෋ҹѹ Ø é ÊÒÂÊÑ­­Ò³¢Í§ÃкººÑʹÕ鵌ͧ¡íÒ˹´ÊÀÒÇл¡µÔänj·ÕèÅͨԡÊÙ§ ·íÒ䴌â´Â¡Òõ‹ÍµÑǵŒÒ¹ ·Ò¹¤‹Ò 1 ¶Ö§ 4.7k ¾ÙÅÍÑ»¡Ñºä¿àÅÕ§ +5V ´Ñ§¹Ñ¹ÍØ»¡Ã³·¹ÒࢌÒÁÒµ‹Íº¹ÃкººÑʹը§µŒÍ§Í͡Ẻ é é Õè í éÖ ãˌàÍÒµ¾µ·ÕµÍ§µ‹Í¡ÑºÊÒÂÊÑ­­Ò³ÁÕšɳÐ໚¹¤ÍÅàÅç¡àµÍÏແ´ËÃÔÍà´Ã¹à»´ ã¹ÃÙ»·Õè 13-1 áÊ´§ Ø èŒ Ñ ä´ÍÐá¡ÃÁ¡ÒÃÊ×èÍÊÒâŒÍÁÙÅẺ˹Öè§ÊÒÂàº×éͧµŒ¹
  • 210. 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” 㪌ʧ¢ŒÍÁÙÅä»ÂѧÍØ»¡Ã³ÁÒÊàµÍϼҹÊÒÂÊÑ­­Ò³¢Í§Ãкº ‹ ‹ «Ö§¨ÐÊÑÁ¾Ñ¹¸¡ºä·ÁÊÅç͵¡ÒÃ͋ҹ¢ŒÍÁÙŢͧÍØ»¡Ã³ÁÒÊàµÍÏ ¡ÒÃá¡áÂ¡ª¹¢Í§áµ‹ÅÐä·ÁÊÅç͵ è Ñ Ñè ¨Ð㪌¤ÇÒÁÂÒǢͧ¤ÒºàÇÅÒáÅÐÅѡɳТͧÃÙ»ÊÑ­­Ò³à»š¹µÑÇ¡íÒ˹´ áÅзء¤Ãѧ·ÕÁ¡ÒÃà»ÅÕ¹á»Å§ é è Õ è ¿˜§¡ª¹µŒÍ§·íÒãˌÊÒÂÊÑ­­Ò³ÍÂÙã¹ÊÀÒÇÐNjҧàÊÁÍ «Ö§¡ç¤Í¡Ò÷íÒãˌÊÒÂÊÑ­­Ò³à»š¹ÅͨԡÊ٧͋ҧ¹ŒÍ Ñè ‹ è × 1 äÁâ¤ÃÇÔ¹Ò·Õ
  • 211. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 211 480-960 äÁâ¤ÃÇÔ¹Ò·Õ 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 äÁâ¤Ã é è é ÇÔ¹Ò·Õ ã¹¢³Ð·ÕÍ»¡Ã³ÁÒÊàµÍϨÐ㪌àÇÅÒ㹡ÒÃ͋ҹ¢ŒÍÁÙÅÍÂÙÃÐËNjҧ 15 áÅÐ 60 äÁâ¤ÃÇÔ¹Ò·ÕËÅѧ èØ ‹ ¨Ò¡àÃÔèÁµŒ¹ä·ÁÊÅç͵¹Õé ã¹ÃÙ»·Õè 13-3 áÊ´§ÃÙ»ÊÑ­­Ò³¢Í§ä·ÁÊÅç͵¡ÒÃ͋ҹ¢ŒÍÁÙŢͧÍØ»¡Ã³ ÁÒÊàµÍÏ«§ÁÕšɳÐàËÁ×͹¡Ñº¡ÒÃà¢Õ¹¢ŒÍÁÙŢͧÍØ»¡Ã³ÊàÅ¿ áÅÐä·ÁÊÅç͵·Ñ§Êͧ¨Ðà¡Ô´¢Ö¹ã¹ Öè Ñ é é àÇÅÒà´ÕÂǡѹ ¡Å‹ÒǤ×Í àÁ×ÍÍØ»¡Ã³ÁÒÊàµÍÏÍÒ¹ ÍØ»¡Ã³ÊàÅ¿¡çµÍ§à¢Õ¹ è ‹ Œ
  • 212. 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 é é áÊ´§ÃÙ»ÊÑ­­Ò³¢Í§ä·ÁÊÅç͵¡ÒÃà¢Õ¹¢ŒÍÁÙŢͧÍØ»¡Ã³ÁÒÊàµÍÏ«§ÁÕšɳÐàËÁ×͹¡Ñº¡ÒÃ͋ҹ Öè Ñ ¢ŒÍÁÙŢͧÍØ»¡Ã³ÊàÅ¿ áÅÐä·ÁÊÅç͵·Ñé§Êͧ¨Ðà¡Ô´¢Öé¹ã¹ª‹Ç§àÇÅÒà´ÕÂǡѹ ¡Å‹ÒǤ×Í àÁ×èÍÍØ»¡Ã³ ÁÒÊàµÍÏà¢Õ¹ ÍØ»¡Ã³ÊàÅ¿¡çµÍ§Í‹Ò¹¢ŒÍÁÙÅ Œ
  • 213. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é l 213 60-120 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ÁÒÊàµÍÏ·íÒãˌ໚¹ÅͨԡµíèÒ ÍØ»¡Ã³ÁÒÊàµÍÏ·íÒãˌ໚¹ÅͨԡÊÙ§ ÍØ»¡Ã³ÊàÅ¿¨Ð·íÒ¡ÒÃ͋ҹ㹪‹Ç§àÇÅÒ¹Õé 1-15 45 äÁâ¤ÃÇÔ¹Ò·Õ äÁâ¤ÃÇÔ¹Ò·Õ ÃÙ»·Õè 13-4 ä·ÁÊÅç͵¡ÒÃà¢Õ¹¢ŒÍÁÙÅ 1 ¢Í§ÍØ»¡Ã³ÁÒÊàµÍÏ «Ö§µÃ§¡Ñºä·ÁÊÅç͵¡ÒÃ͋ҹ¢ŒÍÁÙŢͧ è ÍØ»¡Ã³ÊàÅ¿ 60-120 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ÁÒÊàµÍÏ·Òãˌ໚¹ÅͨԡµíÒ í è ÍØ»¡Ã³ÁÒÊàµÍÏ·Òãˌ໚¹ÅͨԡÊÙ§ í 15 äÁâ¤ÃÇÔ¹Ò·Õ 45 äÁâ¤ÃÇÔ¹Ò·Õ ÍØ»¡Ã³ÊàÅ¿¨Ð·íÒ¡ÒÃ͋ҹ㹪‹Ç§àÇÅÒ¹Õé ÃÙ»·Õè 13-5 ä·ÁÊÅç͵¡ÒÃà¢Õ¹¢ŒÍÁÙÅ “0” ¢Í§ÍØ»¡Ã³ÁÒÊàµÍÏ
  • 214. 214 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é 13.3 ÃٻẺ¢Í§¡ÒÃÊ×ÍÊÒâŒÍÁÙÅẺ˹էÊÒ (1-WireTM communication è è protocol) 㹡ÒÃÊ×èÍÊÒâŒÍÁÙÅÃкººÑÊ˹Öè§ÊÒ ÍØ»¡Ã³ÁÒÊàµÍÏÊÒÁÒöµÔ´µ‹ÍÍØ»¡Ã³Êàſ䴌¤ÃÑé§ ÅÐ 1 µÑÇ෋ҹѹ ÍØ»¡Ã³ÊàſᵋÅеÑǨ֧µŒÍ§ÁÕ¢ÍÁÙÅ¡íÒ˹´áÍ´à´ÃÊ੾ÒеÑÇ â´Âà¡çºänjã¹Ë¹‹ÇÂ é Œ ¤ÇÒÁ¨íÒÃÍÁÀÒÂã¹ÍØ»¡Ã³ÊàÅ¿µÑǹѹæ â´Â»¡µÔÍ»¡Ã³ÊàÅ¿ã¹ÃкººÑÊẺ¹Õ¨ÐÁÕ˹‹Ç¤ÇÒÁ é Ø é ¨íÒ¢¹Ò´ 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 ãˌ㪌§Ò¹´Ñ§¹Õé ˜ Ñè
  • 215. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 â´Âà¡çº¤‹Ò·ÕÍҹ䴌änj·µÇá»Ã tmp è è è‹ èÕ Ñ
  • 216. 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 è è
  • 217. à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ 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 6 5 4 3 2 1 0 -1 -2 -3 -4 5 5 5 5 5 ¢ŒÍÁÙÅ亵Ê§ Ù ¢ŒÍÁÙÅ亵µÒ èí ã¹µÒÃÒ§·Õè 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 Ô è Ô Õè Ñ
  • 218. 218 là¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍÏ PIC ´ŒÇ mikroC áÅСÒ÷´Åͧàº×ͧµŒ¹ é ˹‹Ç¤ÇÒÁ¨íÒÊá¤Ã絪á¾´ 亵 0 ¤‹ÒÍسËÀÙÁ亵µÒ Ô èí 亵 1 ¤‹ÒÍسËÀÙÁ亵Ê§ Ô Ù Ë¹‹Ç¤ÇÒÁ¨íÒÍÕ;ÃÍÁ Õ äºµ 2 ÃÕ¨ÔÊàµÍÏ TH ËÃ×Í¢ŒÍÁÙÅ亵 1 ÃÕ¨ÔÊàµÍÏ TH ËÃ×Í¢ŒÍÁÙÅ亵 1 亵 3 ÃÕ¨ÔÊàµÍÏ TL ËÃ×Í¢ŒÍÁÙÅ亵 2 ÃÕ¨ÔÊàµÍÏ TL ËÃ×Í¢ŒÍÁÙÅ亵 2 亵 4 ÃÕ¨ÔÊàµÍÏ Configuration ÃÕ¨ÔÊàµÍÏ Configuration 亵 5 ÊíÒÃͧänj (FFH) 亵 6 ÊíÒÃͧänj (0CH) 亵 7 ÊíÒÃͧänj (10H) 亵 8 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 ¤ÇÒ