¹íÒàʹͼ Ò¹ÁØÁÁͧ·Õèᵡµ Ò§ ÊíÒËÃѺ¼Ù ʹ㨷ÕèÍÒ¨äÁ ÁÕ¾×é¹°Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÁÒ¡ ͹ â´ÂàÃÕ¹ÃÙ ¼ Ò¹â»Ãá¡ÃÁÀÒÉÒ C ·Õºè ÃèØäźÃÒÃÕáÅп §¡ ª¹Ñè ¾Ã ÍÁ㪠§Ò¹ ·íÒãË ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ·íÒä´ §Ò ÂÁÒ¡ ¹íÒàʹ͡Ò÷´Åͧàº×Íé §µ ¹ ¨¹¶Ö§¡ÒùíÒä»ÊÙ¡ ÒÃÊà ҧËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡Í ҧ§ ÒÂæ â´Â㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega Ãع àÅç¡ÊØ´¤×Í ATmega8 àËÁÒÐÍ ҧÂÔ§è ÊíÒËÃѺ¡ÒùíÒä»ãª ¨´Ñ ËÅÑ¡ÊÙµÃà¾×Íè ¡ÒÃàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç Ââ»Ãá¡ÃÁÀÒÉÒ C Í ҧ§ Ò ´ ǧº»ÃÐÁÒ³ÊØ´»ÃÐËÂÑ´ ÊÒÁÒöÃͧÃѺ¡ÒÃàÃÕ¹ÃÙá ººÊ¹Ø¡Ê¹Ò¹ä»¨¹¶Ö§¡ÒûÃÐÂØ¡µ 㪠§Ò¹ã¹¢Ñ¹é ¡ ÒÇ˹ Ò
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 1
¤Ù Á×ÍÍ Ò§ÍÔ§áÅÐ㪠§Ò¹ ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 MicroCamp-Mega8 Reference manual
www.inex.co.th
2l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
ÊÒÃºÑ º··Õè 1 á¹Ð¹íÒ MicroCamp-Mega8 ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8...................3 º··Õè 2 á¹Ð¹íÒ«Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹ÒªØ´ MicroCamp-Mega8..........................................15 º··Õè 3 ¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ´ ÇÂÀÒÉÒ C ÊíÒËÃѺªØ´ MicroCamp-Mega8 â´Â㪠AVR Studio.......................................................................................................23 º··Õè 4 ¿ §¡ ª¹Ñè áÅÐäźÃÒÃÕâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺªØ´ MicroCamp-Mega8..................37 º··Õè 5 µÑÇ´íÒà¹Ô¹¡ÒÃã¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ WinAVR ¤ÍÁä¾àÅÍà â»Ãá¡ÃÁÀÒÉÒ C ·Õãè ª 㹪ش MicroCamp-Mega8...................................................51 º··Õè 6 ªØ´¤íÒÊѧè áÅÐäźÃÒÃÕµÒ §æ ·Õãè ª 㹪ش MicroCamp-Mega8.......................................61 º··Õè 7 µÑÇÍ ҧ¡ÒÃÊà ҧËع ¹µ MicroCamp......................................................................71 ¡Ô¨¡ÃÃÁ·Õè 1 ¢Ñºà¤Å×Íè ¹Ëع ¹µ MicroCamp àº×Íé §µ ¹...................................77 ¡Ô¨¡ÃÃÁ·Õè 1-1 ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ ÒÊÅѺ¶ÍÂËÅѧ ¡Ô¨¡ÃÃÁ·Õè 1-2 ¤Çº¤ØÁËع ¹µ à¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁ ¡Ô¨¡ÃÃÁ·Õè 1-3 ¤Çº¤ØÁËع ¹µ à¤Å×Íè ¹·ÕÇè ¹à» ¹ÃÙ»ÊÕàè ËÅÕÂè Á ¡Ô¨¡ÃÃÁ·Õè 2 µÃǨÊͺÊÔ§è ¡Õ´¢ÇÒ§´ Ç¡Òê¹................................................80 ¡Ô¨¡ÃÃÁ·Õè 2-1 µÃǨ¨Ñº¡Òê¹àº×Íé §µ ¹ ¡Ô¨¡ÃÃÁ·Õè 2-2 ¡ÒÃᡠ䢻 ËÒàÁ×Íè Ëع ¹µ à¤Å×Íè ¹·Õµè ´Ô ÍÂÙã ¹ÁØÁÍѺ ¡Ô¨¡ÃÃÁ·Õè 3 Ëع ¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹.............................................................84 ¡Ô¨¡ÃÃÁ·Õè 3-1 µÃǨÊͺ¾×¹é ·ÕÊè ´Õ Òí áÅТÒÇ ¡Ô¨¡ÃÃÁ·Õè 3-2 Ëع ¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ¡Ô¨¡ÃÃÁ·Õè 3-3 Ëع ¹µ µÃǨ¨Ñº·Ò§á¡ «Íà Êâ»Ãá¡ÃÁ¢Í§ä¿Å äźÃÒÃÕ·§Ñé ËÁ´·Õãè ª ã¹ MicroCamp-Mega8....................................93
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 3
á¹Ð¹íÒ
º··Õè 1 MicroCamp-Mega8
ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà AVR ATmega8 MicroCamp-Mega8 à» ¹ªØ´á¼§Ç§¨Ãà͹¡»ÃÐʧ¤ ·ãÕè ª Í»Ø ¡Ã³ ¤Çº¤ØÁâ»Ãá¡ÃÁä´ ¢¹Ò´àÅç¡ ·Õàè ÃÕÂ¡Ç Ò äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (microcontroller) àª×Íè Áµ ͡ѺÍØ»¡Ã³ Í¹Ô ¾ØµàÍÒµ ¾µØ µ Ò§ æ »ÃСͺ ä»´ Ç ǧ¨Ã¢ÑºÁÍàµÍà 2 ªØ´, ǧ¨Ã¡íÒà¹Ô´àÊÕ§, ÊÇÔµª , LED áÊ´§¼ÅáÅШشàª×Íè Áµ Íà¾×Íè µ ; ǧ ¡ÑºÍØ»¡Ã³ ÍÔ¹¾ØµàÍÒµ ¾ØµÀÒ¹͡·Ñé§áºº´Ô¨ÔµÍÅáÅÐÍйÒÅÍ¡ ÊÇÔµª ÃàÕ «µ ä¿áÊ´§ÊÀÒÇСÒ÷íÒ§Ò¹ àª×Íè Áµ Í PX-400 à¾×èÍ´Òǹ âËÅ´ â»Ãá¡ÃÁ
¨Ø´µ ÍẵàµÍÃÕè ÊÙ§ÊØ´äÁ à¡Ô¹ 6V ÊÇÔµª à» ´/» ´ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡ ATmega8 ä¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà B ä¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà A ¨Ø´µ ÍÁÍàµÍà A ¨Ø´µ ÍÁÍàµÍà B
¨Ø´µ ÍÍÔ¹¾Øµ/àÍÒµ ¾µØ P0 = PC0/ADC0 P1 = PC1/ADC1 P2 = PC2/ADC2 ¨Ø´µ Íἧǧ¨ÃâÁ´ÙÅÃѺ P3 = PC3/ADC3 áʧÍÔ ¹ ¿ÃÒàô38kHz P4 = PC4/ADC4 ÅíÒ⾧໠Ââ« (PD4) ¨Ø´µ ÍÍØ»¡Ã³ ÊÍ×è ÊÒâ ÍÁÙÅ͹ءÃÁ S/DATA ä¿áÊ´§¼Å LED1 (PC5) Ẻ UART ÁÕ¡ÒèѴ¢Ò GND ÊÇÔµª ¡´µÔ´»Å Í´Ѻ SW2 (PD3) +5V µÒÁÃÙ» RESET GND +5V ÊÇÔµª ¡´µÔ´»Å Í´Ѻ SW1 (PD2) RxD TxD ä¿áÊ´§¼Å LED2 (PD1)
GND +5V
S/DATA
ÃÙ»·Õè 1-1 áÊ´§µíÒá˹ §µ Ò§æ º¹ºÍà ´ MicroCamp-Mega8
4l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
Ê Ç¹àª×Íè Áµ ͤÍÁ¾ÔÇàµÍà à¾×Íè ¡ÒÃâ»Ãá¡ÃÁ¨Ðàª×Íè Áµ ͼ Ò¹ PX-400 ªØ´â»Ãá¡ÃÁ¢ ÍÁÙż Ò¹¾Íà µÍ¹Ø¡ÃÁàª×Íè Áµ ÍࢠҡѺ¨Ø´µ Í In-System Programming º¹ºÍà ´ MicroCamp-Mega8
1. 1 ¤Ø³ÊÁºÑµ¢Ô ͧªØ´àÃÕ¹ÃÙ MicroCamp-Mega8 1.1.1 ἧǧ¨ÃËÅÑ¡ MicroCamp
ÁդسÊÁºÑµÔâ´ÂÊÃØ»´Ñ§¹Õé l 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 8 ºÔµàºÍà ATmega8 ¢Í§ Atmel ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁ ¤Çº¤ØÁáÅоѲ¹Ò¡Ò÷íÒ§Ò¹ä´ ´Ç ÂÀÒÉÒáÍÊà«ÁºÅÕ, àºÊÔ¡ áÅÐ C â´Âã¹·Õ¹è ¨Õé Ð๠¹ä»·Õâè »Ãá¡ÃÁ ÀÒÉÒ C ÀÒÂã¹ÁÕâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŤÇÒÁÅÐàÍÕ´ 10 ºÔµ ãË ¤ Ңͧ¢ ÍÁÙŠ㹪 ǧ 0 ¶Ö§ 1,023 ÊÒÁÒö¹íÒÁÒµ ͡Ѻἧǧ¨ÃµÃǨ¨Ñº·Õãè Ë ¼Å¡Ò÷íҧҹ໠¹áç´Ñ¹ä¿¿ Ò ÁÕ˹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿Åª 8 ¡ÔâÅ亵 â»Ãá¡ÃÁãËÁ ä´ 10,000 ¤ÃÑ§é ´ Ç¡Ãкǹ¡ÒÃâ»Ãá¡ÃÁ ã¹Ç§¨ÃËÃ×Í ISP (In-System Programming) ¼ Ò¹·Ò§¨Ø´µ Í ISP ÁÕ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ 512 亵 áÅÐ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅáÃÁ 512 亵 l
ÊÑÒ³¹ÒÌ ¡ÒËÅÑ¡ 16MHz ¨Ò¡¤ÃÔʵÍÅ
ÁÕ¨´Ø µ ;Íà µáºº 3 ¢Ò (¢Òä¿àÅÕÂé §, ÊÑÒ³ áÅСÃÒÇ´ ) ¨íҹǹ 5 ¨Ø´ à» ¹¢Ò ¾Íà µáºº´Ô¨µÔ ÍÅËÃ×ÍÍйÒÅÍ¡ (¡íÒ˹´ä´ ) áÅÐÁÕ¨´Ø µ Í IRM à¾×Íè ÃѺ¢ ÍÁÙŨҡÀÒ¹͡໠¹áºº ͹ءÃÁËÃ×ÍÃѺÊÑÒ³¨Ò¡âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô l
l
ÁÕÅíÒ⾧¡íÒà¹Ô´àÊÕ§໠Ââ«
l
ÁÕÊÇÔµª ¡´µÔ´»Å Í´Ѻ 2 µÑÇ
l
ÁÕÊÇÔµª RESET ¡Ò÷íÒ§Ò¹
l ÁÕ
ÁÍàµÍÃ
LED ÊÕá´§ 2 ´Ç§ à¾×Íè áÊ´§¼Å¢³Ðà¢Õ¹â»Ãá¡ÃÁ
l ÁÕǧ¨Ã¢ÑºÁÍàµÍÃ
4.5 ¶Ö§ 6V 600mA 2 ªØ´¾Ã ÍÁä¿áÊ´§¼Å·ÔÈ·Ò§¡ÒÃËÁع¢Í§
㪠ä¿àÅÕÂé §ã¹Â Ò¹ +4.8 ¶Ö§ +6V ¨Ò¡áºµàµÍÃÕ¢è ¹Ò´ AA ¨íҹǹ 4 ¡ ͹ ºÃèØŧ 㹡кж Ò¹·ÕèµÔ´µÑé§ÍÂÙ ´ ҹŠҧ¢Í§µÑǺÍà ´ ¾Ã ÍÁǧ¨ÃÊÇÔµªÔè§à¾ÒàÇÍà «Ñ¾¾ÅÒÂà¾×èÍ ÃÑ¡ÉÒÃдѺ áç´Ñ¹ã¹¢³ÐÁÕ¡ÒâѺ¡ÃÐáÊãË ¡ÑºÁÍàµÍà l
ã¹ÃÙ»·Õè 1-1 áÊ´§Ê ǹ»ÃСͺ¢Í§ºÍà ´ MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 5
ÃÙ»·Õè 1-2 PX-400 ªØ´â»Ãá¡ÃÁ¼ Ò¹Ãкº In-Systrem Programming (ISP) àª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ
1.1.2 PX-400 ªØ´´Òǹ âËÅ´â»Ãá¡ÃÁẺ ISP ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ 㪠´Òǹ âËÅ´â»Ãá¡ÃÁ·Õè¾Ñ²¹Ò¢Ö鹨ҡ¤ÍÁ¾ÔÇàµÍà ä»Âѧ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 º¹á¼§Ç§¨Ã MicroCamp-Mega8 â´Âµ ͧàª×Íè Áµ ͼ Ò¹¾Íà µÍ¹Ø¡ÃÁ ·íҧҹà ÇÁ¡Ñº«Í¿µ áÇà ªÍ×è AVRProg «Ö§è µÔ´µÑ§é ÁҾà ÍÁ¡Ñº AVR Studio Íѹ໠¹«Í¿µ áÇà ·ãÕè ª ã¹ ¡ÒþѲ¹Òâ»Ãá¡ÃÁ¢Í§ªØ´ MicroCamp-Mega8 ¹Õé PX-400 㪠ä¿àÅÕÂé §¨Ò¡á¼§Ç§¨ÃËÅÑ¡ MicroCamp-Mega8 ä´ áÅÐÂÑ§ä´ ¨´Ñ àµÃÕÂÁÊÒ ISP «Ö§è à» ¹ ÊÒÂá¾·Õµè Í ¡Ñº¤Í¹à¹ç¡àµÍà IDC µÑÇàÁÕ 10 ¢ÒäÇ ¾Ã ÍÁ㪠§Ò¹ ¡Ã³ÕµÍ §ãª §Ò¹¡Ñº¾Íà µ USB á¹Ð¹íÒãË ãª ÃÇ Á¡ÑºµÑÇá»Å§ÊÑÒ³ USB à» ¹ RS-232
1.2 ¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ MicroCamp-Mega8 ËÑÇã¨ËÅÑ¡¢Í§ºÍà ´ MicroCamp-Mega8 ÍÂÙ· äÕè Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 «Ö§è ·íÒ§Ò¹´ Ç ÊÑÒ³¹ÒÌ ¡Ò 16 MHz ¨Ò¡¤ÃÔʵÍÅ·Õèµ ÍࢠҡѺ¢Ò PB6 áÅÐ PB7 ÊíÒËÃѺ¢Ò PC0 ¶Ö§ PC4 ¶Ù¡¡íÒ˹´ª×èͺ¹ºÍà ´ãËÁ à» ¹ P0 ¶Ö§ P4 ä´ ÃѺ¡ÒèѴÊÃÃãË µ ͡Ѻ¨Ø´µ Íà͹¡»ÃÐʧ¤ ÀÒ¹͡ ãË ÊÒÁÒö¹íÒä»àª×Íè Áµ ͡ѺµÑǵÃǨ¨ÑºáººÍйÒÅÍ¡ËÃ×ÍÍØ»¡Ã³ Í¹Ô ¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅẺµ Ò§æ ä´ à¹×èͧ¨Ò¡¢Ò PC0 ¶Ö§ PC4 à» ¹¢ÒÍÔ¹¾Øµ¢Í§Ç§¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅÀÒÂã¹ ATmega8 «Öè§ÁÕ¤ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÊÑÒ³ 10 ºÔµ ¢Ò PB3,PB4 áÅÐ PB5 à» ¹¢Ò¾Íà µÊíÒËÃѺµÔ´µ ͡Ѻà¤Ã×èͧâ»Ãá¡ÃÁẺ In-System Programming ÀÒ¹͡ â´Âàª×Íè Áµ ÍÍ͡仼 Ò¹¨Ø´µ Í ISP ·Õãè ª ¤Í¹à¹ç¡àµÍà Ẻ IDC 10 ¢Ò
6l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
SW1 POWER
+Vm
L1
K1 + DC input
6
50 µH
R1 D1 0.47R 1N4001
+5V
8 R3 30k
3
-
R5 1k
IC1 TL499A
+4.8~6Vdc
2
4
C1 220/16V
R2 150
C2 0.01/50V
5
C3 1000/6.3V
R4 10k
7
C4 1000/6.3V
LED1 ON
+5V +Vm
C5 0.1/50V
R6 47R
MOSI
7 VCC
AVCC
1 PC6/RESET S2 RESET
+5V
SCK MISO
PB1/ 15 OC1A
C6 0.1/50V
R7 150R
RESET
17
R8 150R
PB3/MOSI
18 PB4/MISO
R9 150R
19
P0
23
R11 150R
P1
24
R12 150R
P2
25
R13 150R
P3
27 28
R15 1k
GND +5V RESET
R16 150R R17 150R
RxD TxD
2 3
R18 1k LED5 IND2
PC0/ADC0
PD5
R19 150R
1 1E
R20 150R
PC2/ADC2
PD2
R21 150R
PD3
PC4/ADC4
PB6 9
PC5/ADC5
PB7
3Y
15
PD4
R31 1k C14 0.1/50V
2B
R27 4.7k
R28 4.7k
4Y GND 5 12 13
14
SW1 SW2
10
6
R29 47R
C12 10/16V
SP1 PIEZO
21 AREF C11 0.1/50V
GND 8
K2 MOTOR-B
LED2
10 2A
R24 150R
+
11
CR1 16MHz
PD0/RxD PD1/TxD
2Y 6
9 2E
R23 150R
R26 150R
5
R30 1k C13 0.1/50V
7 1B
R22 150R
R25 150R
1Y 3
2 1A
+5V
4
8 VM
IC3 L293D
4
IC2 ATMega8
LED4 IND1
11
16 VCC
C8 0.1/50V
PC1/ADC1
26 PC3/ADC3
R14 150R
P4
C10 0.1/50V
PD7 13
PB0 14 R10 150R
C9 0.1/50V
PD6 12
PB2/ 16 OC1B
PB5/SCK
+5V
IRM
C7 0.1/50V
20
GND 22
ÃÙ»·Õè 1-3 ǧ¨ÃÊÁºÙó áÊ´§¨Ø´àª×Íè Áµ ͵ Ò§æ ¢Í§ºÍà ´ MicroCamp-Mega8
LED3
+ K3 MOTOR-A
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 7
ÊíÒËÃѺ¢Ò PC6/RESET ¨Ðàª×Íè Áµ ͡ѺÊÇÔµª RESET à¾×Íè ·íÒ¡ÒÃÃÕ૵äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ò¡¼Ù ãª ä´ ¢Ò PD0/RxD à» ¹¢ÒÃѺ¢ ÍÁÙÅ͹ءÃÁ¶Ù¡µ ͡Ѻ¨Ø´µ Í IRM à¾×Íè 㪠µÍ ¡ÑºâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz ÀÒ¹͡áÅÐàª×Íè Áµ ͡Ѻ¨Ø´µ Í SERIAL 5 ¢Òà¾×Íè Ê×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ¡ÑºÍØ»¡Ã³ ÀÒ¹͡ ÊíÒËÃѺ¢Ò PD1/TxD ¹Í¡¨Ò¡¨Ðàª×Íè Áµ ÍࢠҡѺ IDC 5 ¢Òà¾×Íè Ê×Íè ÊÒÃ͹ءÃÁáÅ ÇÂѧàª×Íè Áµ Íà¢ Ò ¡Ñº LED5 ´ ÇÂà¹×Íè §¨Ò¡ã¹ÊÀÒÇл¡µÔ·äÕè Á Á¡Õ ÒÃÊ §¢ ÍÁÙÅ͹ءÃÁ ¨ÐÊÒÁÒö㪠¢Ò¹Õàé » ¹¢ÒàÍÒµ ¾µØ ¢Ñº LED ä´ ´Ç  áÅÐÊíÒËÃѺ LED4 ¹Ñ¹é ¨Ðàª×Íè Áµ Íâ´ÂµÃ§à¢ ҡѺ¢Ò PC5 ºÍà ´ MicroCamp-Mega8 ä´ àµÃÕÂÁÊÇÔµª ¡´µÔ´»Å Í´ѺàÍÒäÇ 2 µÑÇ â´Âµ ÍࢠҡѺ¢Ò PD2 áÅÐ PD3 ÁÕµÑǵ Ò¹·Ò¹¤ Ò 4.7kΩ µ ;ÙÅÍÑ»·Õè¢ÒàËÅ Ò¹ÕéäÇ à¾×èÍãË ÊÀÒÇл¡µÔ·ÕèäÁ ÁÕ¡Òá´ÊÇÔµª ¢Ò¾Íà µ¨ÐÁÕÅͨԡ໠¹ 1 áµ àÁ×èÍÁÕ¡Òá´ÊÇÔµª ¨ÐÁÕÅͨԡ 0 ¢Ò PD4 µ ÍࢠҡѺÅíÒ⾧Ẻ໠Ââ« â´ÂÁÕµÑÇà¡çº»ÃШؤ Ò 10µF ·íÒ˹ Ò·Õè» Í§¡Ñ¹áç´Ñ¹ 俵ç价íÒÍѹµÃÒ¡ѺµÑÇÅíÒ⾧äÇ ´ Ç ÊíÒËÃѺ¡ÒâѺÁÍàµÍà ËÑÇã¨ËÅÑ¡¨ÐÍÂÙ· äÕè Í«ÕàºÍà L293 «Ö§è ÀÒÂ㹺ÃèØǧ¨Ã¢ÑºÁÍàµÍà äÇ 2 ªØ´ ¢Ò¤Çº¤ØÁÊíÒËÃѺÁÍàµÍà ᵠÅеÑǨÐÁÕ 3 ¢Ò¤×Í ¢Ò A áÅÐ B 㪠ÊÒí ËÃѺ¡íÒ˹´·ÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍÃ Ê Ç¹¢Ò E 㪠ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹áÅÐËÂØ´·íÒ§Ò¹¢Í§ÁÍàµÍà â´Â¡ÒÃà¢Õ¹ â»Ãá¡ÃÁÊÒÁÒö¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÃ ä´ â´Â¡Òû ͹ÊÑÒ³ PWM ࢠҷբè Ò E ¢Í§äÍ«Õ L293D «Ö§è µíÒá˹ §¢Í§¢Ò E ·Ñ§é 1E áÅÐ 2E ¡çµÃ§¡Ñº¢ÒàÍÒµ ¾µØ ÊÑÒ³ PWM ¢Í§ ATMEGA8 ¾Í´Õ àÍÒµ ¾Øµ¢Í§ L293D ¨Ðµ Íä»Âѧ¨Ø´µ ÍÁÍàµÍà â´ÂµÃ§ â´Â ÁÕ LED 2 ÊÕ·íÒ˹ Ò·ÕèÃкطÔÈ·Ò§ ¡ÒÃËÁع¢Í§ÁÍàµÍà áÊ´§´ ÇÂÊÕà¢ÕÂÇÊíÒËÃѺ¡ÒÃËÁع·ÔÈ·Ò§»¡µÔáÅÐÊÕá´§ÊíÒËÃѺ¡ÒÃËÁع¡ÅѺ ǧ¨ÃÀÒ¤¨ ÒÂ俢ͧ MicroCamp-Mega8 à» ¹áººÊÇÔµªÔ§è â´Â㪠äÍ«ÕÊÇÔµªÔ§è àºÍà TL499A â´ÂµÑÇÁѹ¨Ð·íҹ˹ Ò·ÕÃè ¡Ñ ÉÒÃдѺáç´Ñ¹àÍÒµ ¾µØ +5V áÁ áç´Ñ¹ÍÔ¹¾Øµ·Õ»è Í ¹à¢ ÒÁÒ¨ÐÁÕ¡ÒÃà»ÅÕÂè ¹ á»Å§Íѹà¹×Íè §ÁÒ¨Ò¡¡Òô֧¡ÃÐáÊ»ÃÔÁÒ³ÁÒ¡¨Ò¡ÁÍàµÍà ¨Ö§ª ÇÂãË Ë¹Ø Â¹µ ·ãÕè ª ºÍà ´ MicroCampMega8 ·íÒ§Ò¹ä´ Í ҧÁÕ»ÃÐÊÔ·¸ÔÀÒ¾
8l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
1.3 ¢ ÍÁÙŢͧÊÒÂÊÑÒ³·Õãè ª 㹪ش MicroCamp-Mega8 㹪ش MicroCamp-Mega8 ÁÕÊÒÂÊÑÒ³ÊíÒËÃѺ㪠㹡ÒÃàª×Íè Áµ ÍÃÐËÇ Ò§á¼§Ç§¨Ã¤Çº¤ØÁ, ἧǧ¨ÃµÃǨ¨Ñº áÅФÍÁ¾ÔÇàµÍà ÍÂÙ ËÅÒÂẺ ÊÒÁÒöÊÃØ»ä´ ´Ñ§¹Õé
1.3.1 ÊÒ ISP : ÊÒÂÊÑÒ³ÊíÒËÃѺ´Òǹ âËÅ´â»Ãá¡ÃÁ ÊÒ ISP 㪠àª×Íè Áµ ÍÃÐËÇÒ§ªØ´´Òǹ âËÅ´â»Ãá¡ÃÁ¡Ñºá¼§Ç§¨ÃËÅÑ¡ MicroBOX ÁÕÅ¡Ñ É³Ð à» ¹ÊÒÂá¾ 10 àÊ ¹ËÑÇ· ÒµԴµÑ§é ¤Í¹à¹ç¡àµÍà IDC 10 ¢ÒµÑÇàÁÕ ÁÕ¡ÒèѴ¢Ò´Ñ§¹Õé MOSI N/A RST SCK MISO
+5V GND GND GND GND
1.3.2 ÊÒ PCB3AA-8 : ÊÒÂàª×Íè Áµ ÍÃÐËÇ Ò§á¼§Ç§¨Ã ÊÒ PCB3AB-8 㪠àª×Íè Áµ ÍÃÐËÇ Ò§á¼§Ç§¨ÃËÅÑ¡ MicroCamp-Mega8 ¡Ñºá¼§Ç§¨ÃµÃǨ¨Ñº áÅÐἧǧ¨ÃÍØ»¡Ã³ µ Ò§æ à» ¹ÊÒÂá¾ 3 àÊ ¹ ÂÒÇ 8 ¹ÔéÇ »ÅÒÂÊÒ·Ñé§Êͧ´ Ò¹µÔ´µÑ駤͹à¹ç¡àµÍà Ẻ PCB 3 ¢Ò µÑÇàÁÕ ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÔÅÅÔàÁµÃ ÁÕ¡ÒèѴ¢Ò´Ñ§¹Õé ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÁ.
ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÁ. GND S +5V
1.3.3 ÊÒ CX-4 : ÊÒÂàª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ ÊÒ CX-4 㪠àª×Íè Áµ ͪشâ»Ãá¡ÃÁ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ PX-400 ¡Ñº¾Íà µÍ¹Ø¡ÃÁ RS-232 ¢Í§ ¤ÍÁ¾ÔÇàµÍà ÁÕÅ¡Ñ É³Ðà» ¹ÊÒÂÁÑŵԤÍà ·ÁÕè ÊÕ ÒÂÊÑÒ³ÀÒÂã¹ 4 àÊ ¹ »ÅÒ´ Ò¹Ë¹Ö§è µÔ´µÑ§é ¤Í¹à¹ç¡àµÍà DB-9 µÑÇàÁÕÂ Ê Ç¹ÍÕ¡´ Ò¹Ë¹Ö§è µÔ´µÑ§é »ÅÑ¡ê âÁ´ÙÅÒ Ã (RJ-11 6P4C : Ẻà´ÕÂǡѺ·Õãè ª ã¹à¤Ã×Íè §â·ÃÈѾ· ) ÁÕ¡ÒèѴ¢Ò´Ñ§¹Õé ¤Í¹à¹ç¡àµÍà DB-9 µÑÇàÁÕÂ
»ÅÑ¡ê âÁ´ÙÅÒ Ã RJ11 Ẻ 6P4C
# "
#
!
!
¢Ò RxD
!
¢Ò TxD
"
¢Ò DTR
#
¢Ò GND
´ ҹ˹ ÒÊÑÁ¼ÑÊ
"
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 9
& PC5/ADC5/SCL
PC6/RESET PD0/RxD
PD3/INT1 # PD4/T0/XCK $& Vcc %& GND && PB6/TOSC1/XTAL1 ' PB7/TOSC2/XTAL2
$ PC3/ADC3
ATmega8-16PI
PD1/TxD ! PD2/INT0 "
% PC4/ADC4/SDA # PC2/ADC2 " PC1/ADC1 & PC0/ADC0 ! & GND & AREF AVcc ' PB5/SCK
PD5/T1 PD6/AIN0
& PB4/MISO
PD7/AIN1 ! PB0/ICP1 "
$ PB2/SS/OC1B
% PB3/MOSI/OC2 # PB1/OC1A
ÃÙ»·Õè 1-4 áÊ´§¡ÒèѴ¢Ò¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8
1.4 ÅÖ¡ÍÕ¡¹Ô´äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ATmega8 à» ¹Ë¹Öè§ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ͹ءÃÁ AVR ·Õè¼ÅÔµâ´Â Atmel Corporation ÊËÃÑ°ÍàÁÃÔ¡Ò ·Õàè Å×͡㪠㹺Íà ´ MicroCamp-Mega8 à» ¹µÑǶѧẺ DIP 28 ¢Ò ÁÕ¡ÒèѴ¢ÒáÊ´§ã¹ ÃÙ»·Õè 1-4
1.4.1 ¤Ø³ÊÁºÑµàÔ ´ ¹¢Í§ ATmega8 ÊÒÁÒöÊÃØ»ä´ ´Ñ§¹Õé l à» ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 8 ºÔµã¹Í¹Ø¡ÃÁ AVR ÁÕʶһ µÂ¡ÃÃÁẺ Advance RISC ÁÕ
¤ÇÒÁàÃçÇ㹡Ò÷íÒ§Ò¹ÊÙ§ â´ÂÊÒÁÒö»ÃÐÁÇżŠ1 ¤íÒÊѧè ã¹àÇÅÒ 1 ÊÑÒ³¹ÒÌ ¡Ò ÊÒÁÒö·íÒ§Ò¹ ¡Ñº¤ÇÒÁ¶ÕÊè Ñ Ò³¹ÒÌ ¡ÒÊÙ§ÊØ´ 16MHz ¨Ö§ÊÒÁÒö»ÃÐÁÇżŤíÒÊѧè ä´ Ê§Ù ¶Ö§ 16 Å Ò¹¤íÒÊÑ§è µ ÍÇÔ¹Ò·Õ l ÁÕ˹ ǤÇÒÁ¨íÒ 3 Ẻ à¾×Íè ÃͧÃѺ¡Ò÷íÒ§Ò¹ »ÃСͺ´ ÇÂ
1. ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿Åª ¤ÇÒÁ¨Ø 8 ¡ÔâÅ亵 ·ÕèÊÒÁÒöÃÑ¡ÉÒ¢ ÍÁÙÅ â»Ãá¡ÃÁäÇ ä´ áÁ äÁ ÁäÕ ¿àÅÕÂé § áÅÐÊÒÁÒö» ͧ¡Ñ¹¡ÒÃÍ Ò¹ä´ ÊÒÁÒöź-à¢Õ¹ãËÁ ä´ 10,000 Ãͺ 2. ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ ¤ÇÒÁ¨Ø 512 亵 ÊÒÁÒöÃÑ¡ÉÒ¢ ÍÁÙÅäÇ ä´ áÁ äÁ ÁÕ ä¿àÅÕÂé § ÊÒÁÒöź-à¢Õ¹ãËÁ ä´ 100,000 Ãͺ 3. ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅáÃÁ ¤ÇÒÁ¨Ø 1 ¡ÔâÅ亵 㪠»ÃÐÁÇżÅËÅÑ¡Ã ÇÁ¡Ñº«Õ¾ÂÕ Ù
10 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
l ÁÕ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ÍÔÊÃзÕÊè ÒÁÒöâ»Ãá¡ÃÁä´ 23 ¢Ò Ạ§à» ¹ 3 ¡ÅØÁ ¤×Í
1. ¾Íà µ B 㪠§Ò¹ä´ ʧ٠ÊØ´ 8 ¢Ò (PB0 ¶Ö§ PB7) â´ÂÁÕ 2 ¢Ò㪠ÃÇ Á¡Ñº¤ÃÔʵÍÅà¾×Íè ¡íÒà¹Ô´ÊÑÒ³¹ÒÌ ¡ÒãË á¡ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 2. ¾Íà µ C 7 ¢Ò (PC0 ¶Ö§ PC6) â´Â PC0 ¶Ö§ PC5 ÊÒÁÒö㪠໠¹ÍÔ¹¾ØµÍйÒÅÍ¡ä´ 3. ¾Íà µ D 8 ¢Ò (PD0 ¶Ö§ PD7) l ÁÕä·àÁÍà /à¤Ò¹ àµÍà ¢¹Ò´ 8 ºÔµ 2 ªØ´·Õáè ¡¡Ò÷íҧҹ͠ҧÍÔÊÃÐ l ÁÕä·àÁÍà /à¤Ò¹ àµÍà ¢¹Ò´ 16 ºÔµ 1 ªØ´ ÃͧÃѺ¡Ò÷íÒ§Ò¹ÊÁºÙó Ẻ·Ñ§é ã¹âËÁ´µÑ§é àÇÅÒ
(timer), µÑǹѺ (counter), à»ÃÕºà·ÕºÊÑÒ³ (compare) áÅеÃǨ¨ÑºÊÑÒ³ (capture) l ÁÕâÁ´ÙÅ¡íÒà¹Ô´ÊÑÒ³ PWM 3 ªØ´
l ÁÕâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ (Analog to Digital Converter :ADC) ¤ÇÒÁ
ÅÐàÍÕ´ 10 ºÔµ ¨íҹǹ 6 ª ͧ
l ÁÕ͹ Ô ¾Øµà»ÃÕºà·ÕºÊÑÒ³ÍйÒÅÍ¡ 2 ª ͧ l ÁÕâÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ 2 ÊÒ ÃͧÃѺ¡Ò÷íÒ§Ò¹¡ÑººÑÊ I2C l ÁÕâÁ´ÙÅàª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI (Serial Peripheral Interface) 㪠ÊíÒËÃѺ¡ÒÃ
â»Ãá¡ÃÁ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿ÅªÀÒÂ㹪Ի â´Â»¡µÔáÅ ÇÁѡʧǹäÇ à¾×Íè ¡ÒÃâ»Ãá¡ÃÁ áµ ¡Êç ÒÁÒö¹íÒä»ãª àª×Íè Áµ ͡ѺÍØ»¡Ã³ º¹ÃкººÑÊ SPI ä´ l ÁÕâÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ UART (Universal Asynchronous Receiver Transmitter) l ÁÕÇ͵ª ´çÍ¡ä·àÁÍà à¾×èͪ ǵÃǨÊͺ¡Ò÷íÒ§Ò¹¢Í§Ãкº l ÃͧÃѺ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ·Ñ駨ҡÊÑÒ³ÀÒ¹͡áÅСÒ÷íÒ§Ò¹¢Í§âÁ´Ùŵ Ò§æ ÀÒÂã¹
äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
l ÁÕÃкºà¾ÒàÇÍà -Í͹ÃÕ૵ l ÁÕǧ¨ÃµÃǨ¨Ñºáç´Ñ¹ä¿àÅÕ駼Դ»¡µÔËÃ×ͺÃÒÇàÍÒµ ·ÕèÊÒÁÒöâ»Ãá¡ÃÁä´ l ä¿àÅÕÂé § +4.5 ¶Ö§ +5.5V ¡ÃÐáÊä¿¿ Ò 3.6mA áµ ¶Ò àÅ×͡㪠ù Ø ATmega8L ÊÒÁÒö㪠ä¿
àÅÕé§ã¹Â Ò¹¡Ç Ò§¢Ö鹨ҡ +2.7 ¶Ö§ +5.5V áµ ÊÑÒ³¹ÒÌ ¡Ò·Õè㪠¨Ðµ ͧŴŧäÁ à¡Ô¹ 8MHz
l ¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ËÂØ´·íÒ§Ò¹ (âËÁ´ÊÅÕ» : sleep) ä´ 5 âËÁ´ ¤×Í äÍà´ÔÅ (Idle),
âËÁ´Å´ÊÑҳú¡Ç¹ã¹Ç§¨Ã ADC, âËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹ (Power-save), âËÁ´Å´¾Åѧ§Ò¹ (Power-down) áÅÐâËÁ´ËÂØ´ÃÍ (Standby)
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 11
XTAL2 RESET
¾Íà µ C (PC6-PC0)
XTAL1
¾Íà µ B (PB7-PB0)
ǧ¨Ã¡íÒà¹Ô´ÊÑÒ³ ¹ÒÌÔ¡ÒÀÒ¹͡
Vcc
AGND AREF
ǧ¨ÃºÑ¿à¿Íà /ǧ¨Ã¢Ñº¢Í§¾Íà µ C
ǧ¨ÃºÑ¿à¿Íà /ǧ¨Ã¢Ñº¢Í§¾Íà µ B
ǧ¨Ãàª×Íè Áµ ÍÊÑÒ³´Ô¨µÔ ÍŢͧ¾Íà µ C
ǧ¨Ãàª×Íè Áµ ÍÊÑÒ³´Ô¨µÔ ÍŢͧ¾Íà µ B
ÁÑŵÔà¾Åç¡« áÅÐâÁ´ÙÅ á»Å§ÊÑÒ³ ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅ (ADC)
ǧ¨Ãàª×Íè Áµ Í ÊÑÒ³ ÍйÒÅÍ¡
â»Ãá¡ÃÁ à¤Ò¹ àµÍÃ
µÑǪÕÊé áµç¡
˹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁá¿Åª
˹ ǤÇÒÁ¨íÒ ¢ ÍÁÙÅáÃÁ
ÃÕ¨ÊÔ àµÍà ¤Òí Êѧè
ÃÕ¨ÊÔ àµÍà 㪠§Ò¹ ·ÑÇè ä» X Y Z
Ê Ç¹¶Í´ÃËÑÊ ¤íÒÊѧè ÊÑÒ³¤Çº¤ØÁ
AVR «Õ¾ÕÂÙ Åͨԡ¤Çº¤ØÁ ¡ÒÃâ»Ãá¡ÃÁ
Ê Ç¹àª×Íè Áµ Í ÃкººÑÊ 2 ÊÒÂ
ä·àÁÍà / à¤Ò¹ àµÍÃ
ǧ¨ÃÍÍÊ«ÔÅàÅàµÍÃ
ǧ¨Ã ÍÍÊ«ÔÅàÅàµÍà ÀÒÂã¹ Ç͵ª ´Íç ¡ ä·àÁÍÃ
ǧ¨ÃÍÍÊ«ÔÅàÅàµÍÃ
Ê Ç¹¤Çº¤ØÁ¨Ñ§ËÇСÒ÷íÒ§Ò¹ ¢Í§«Õ¾ÂÕ Ù
˹ Ǥíҹdz ¤³ÔµÈÒʵà áÅÐÅͨԡ
˹ ǨѴ¡ÒÃÊÑÒ³ÍÔ¹àµÍÃ Ã»Ñ µ
ÃÕ¨ÊÔ àµÍà ʶҹÐ
˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕ; Õ ÃÍÁ
âÁ´ÙÅ SPI
âÁ´ÙÅÊ×Íè ÊÒâ ÍÁÙžÍà µÍ¹Ø¡ÃÁ
Ê Ç¹àª×Íè Áµ Íǧ¨Ã à»ÃÕºà·Õº áç´Ñ¹
ǧ¨Ãàª×Íè Áµ ÍÊÑÒ³´Ô¨µÔ ÍŢͧ¾Íà µ D ǧ¨ÃºÑ¿à¿Íà /ǧ¨Ã¢Ñº¢Í§¾Íà µ D
¾Íà µ D (PD7-PD0)
ÃÙ»·Õ1-5 è ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8
12 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
1.4.2 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ ã¹ÃÙ»·Õè 1-5 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ÀÒÂ㹷ѧé ËÁ´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ËÑÇã¨ÊíҤѤ×Í AVR «Õ¾ÂÕ ·Ù ·Õè ç»ÃÐÊÔ·¸ÔÀÒ¾ ¼¹Ç¡à¢ ҡѺâÁ´ÙÅàª×Íè Áµ ÍÍØ»¡Ã³ ¾àÔ ÈÉ·ÕÁè ÍÕ Â Ò§ÊÁºÙó Í ҧäÁ ¹Ò àª×Íè ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ÁÕè ¢Õ Òµ Í㪠§Ò¹à¾Õ§ 28 ¢Ò Ê Ç¹·Õµè Í §ãË ¤ÇÒÁʹã¨à» ¹ ¾ÔàÈɤ×Í ¢Ò¾Íà µ PB6 áÅÐ PB7 «Ö§è ÊÒÁÒö·íҧҹ໠¹ä´ ·§Ñé ¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅáÅÐ¢Ò ÊíÒËÃѺµÔ´µ Íǧ¨Ã¡íÒà¹Ô´ÊÑÒ³¹ÒÌ ¡Ò¨Ò¡ÀÒ¹͡ ËÒ¡àÅ×͡㪠ǧ¨Ã¡íÒà¹Ô´ÊÑÒ³¹ÒÌ ¡ÒÀÒÂã¹ µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àͧ ¨ÐÊÒÁÒö¡íÒ˹´ãË ¢Ò¾Íà µ·Ñ§é Êͧ¹Ñ¹é à» ¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ ä´ ¨Ö§ÁÕ¾Íà µà¾ÔÁè àµÔÁÍÕ¡ 2 ¢Ò áµ ·Ç Òà¾×Íè ãË ¡Ò÷íÒ§Ò¹ÁÕ¤ÇÒÁà·ÕÂè §µÃ§´ Ò¹¨Ñ§ËÇÐàÇÅÒÊÙ§ â´Â੾ÒÐ Í ҧÂÔ§è ËÒ¡ÁÕ¡ÒÃàª×Áè ͵ ͡Ѻ¤ÍÁ¾ÔÇàµÍà à¾×Íè áÅ¡à»ÅÕÂè ¹¢ ÍÁÙÅÃÐËÇ Ò§¡Ñ¹ ¨Ö§ÁÑ¡¨ÐàÅ×͡㪠¢Ò·Ñ§é Êͧ ¹Õãé ¹¡Òõ ͡Ѻ¤ÃÔʵÍÅËÃ×Íà«ÃÒÁÔ¡àÃâ«à¹àµÍà à¾×Íè ÃѺÊÑÒ³¹ÒÌ Ò¨Ò¡ÀÒ¹͡ÁÒ¡¡Ç Ò áÅÐ㹺Íà ´ MicroCamp-Mega8 ¡çàÅ×͡㪠§Ò¹¢Ò¾Íà µ·Ñ§é Êͧ¹Õµé Í ¡Ñºà«ÃÒÁÔ¡àÃâ«à¹àµÍà 16MHz ATmega8 ÁÕ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁẺá¿Åª·ÕèÊÒÁÒöâ»Ãá¡ÃÁä´ ´ Ç¡Ãкǹ¡Òà â»Ãá¡ÃÁã¹Ç§¨ÃËÃ×Íã¹Ãкº (In-System Programming : ISP) ¤ÇÒÁ¨Ø 8 ¡ÔâÅ亵 áÅÐÊÒÁÒÃ¶Í Ò¹ ¢ ÍÁÙÅã¹¢³Ðà¢ÕÂ¹ä´ ´ Ç ÁÕ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍÕ¾ÃÍÁ¤ÇÒÁ¨ØÊÙ§¶Ö§ 512 亵 áÅÐ˹ ǤÇÒÁ ¨íÒÊáµµÔ¡áÃÁÁÒ¡¶Ö§ 1 ¡ÔâÅ亵 ¹Ñºà» ¹ÍÕ¡¤Ø³ÊÁºÑµÔà´ ¹·ÕèËÒä´ ÂÒ¡ã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹠ÃдѺà´ÕÂǡѹ Ê §¼ÅãË ATmega8 ÊÒÁÒöÃͧÃѺâ»Ãá¡ÃÁ·Õè¾Ñ²¹Ò´ ÇÂÀÒÉÒ C ä´ ´Õ¾ÍÊÁ¤Çà ¹Í¡¨Ò¡¹Ñ¹é ÂѧÁÕÃ¨Õ ÊÔ àµÍà ÊÒí ËÃѺ㪠§Ò¹ÍÕ¡ 32 µÑÇ ÁÕä·àÁÍà /à¤Ò¹ àµÍà ··Õè Òí §Ò¹ÍÔÊÃе ͡ѹÍÕ¡ 3 µÑÇ ÊÒÁÒö¡íÒà¹Ô´ÊÑÒ³ PWM ÁÒ¡¶Ö§ 3 ª ͧ Ê Ç¹¨Ñ´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ·Ñ駨ҡÀÒÂã¹áÅÐÀÒ¹͡ Ê Ç¹µÔ´µ ÍÍØ»¡Ã³ ÃкººÑÊ 2 ÊÒ ÁÕâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ·ÕèÁÕÁÒ¡¶Ö§ 6 ª ͧ ¤ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÊÑÒ³ 10 ºÔµ ÁÕÇ͵ª ´Íç ¡ä·àÁÍà 㹵ÑÇ ÃÇÁ·Ñ§é ǧ¨ÃµÃǨ¨Ñºä¿àÅÕÂé § ¼Ô´»¡µÔËÃ×ͺÃÒÇàÍÒµ (brown-out detection) ·ÕÊè ÒÁÒö¡íÒ˹´ÃдѺáç´Ñ¹ä´
1.4.3 ˹ Ò·Õ¡è Ò÷íÒ§Ò¹¢Í§¢ÒÊÑÒ³·Ñ§é ËÁ´¢Í§ ATmega8 ÊÃØ»ÃÒÂÅÐàÍÕ´·Ñ§é ËÁ´äÇ ã¹µÒÃÒ§·Õè 1-1
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 13
ª×Íè ¢Ò
µíÒá˹ §¢Ò ª¹Ô´¢Í§¢Ò
ÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹
7
ÍÔ¹¾Øµ
- ¢Òµ Íä¿àÅÕ駺ǡ µÑé§áµ 4.5 ¶Ö§ 5.5V
GND
8,22
ÍÔ¹¾Øµ
- ¢Òµ Í¡ÃÒÇ´
AVcc
20
ÍÔ¹¾Øµ
- ¢Òµ Íä¿àÅÕé§ + 5V ãË á¡ âÁ´ÙÅ ADC ÀÒÂã¹ ATmega8
AREF
21
ÍÔ¹¾Øµ
- ¢Òµ Íáç´Ñ¹Í Ò§ÍÔ§ãË á¡ âÁ´ÙÅ ADC ÀÒÂã¹ ATmega8
Vcc
¢Ò¾Íà µ B à» ¹¢Ò¾Íà µ 2 ·ÔÈ·Ò§ ª×Íè ¢Ò µíÒá˹ §¢Ò ª¹Ô´¢Í§¢Ò PB0
14
PB1
15 16
ÍÔ¹¾Øµ
SS PB3
17
18
àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·ÕºÊÑÒ³/PWM ª ͧ 1B
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB4 ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ÍÔ¹¾ØµÃѺ¢ ÍÁÙÅàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ã¹ÃкººÑÊ SPI, 㪠㹡Ãкǹ¡Òà ISP àÍÒµ ¾ØµÊ §¢ ÍÁÙÅàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ SPI, 㪠㹡Ãкǹ¡Òà ISP
MISO
PB5
ÍÔ¹¾ØµàÅ×Í¡ÍØ»¡Ã³ ÊàÅ¿àÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ SPI, 㪠㹡ÒÃâ»Ãá¡ÃÁẺ ISP
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ÍÔ¹¾ØµÃѺ¢ ÍÁÙÅàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ SPI, 㪠㹡ÒÃâ»Ãá¡ÃÁẺ ISP àÍÒµ ¾ØµÊ §¢ ÍÁÙÅàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ã¹ÃкººÑÊ SPI, 㪠㹡Ãкǹ¡Òà ISP
MOSI
PB4
àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·ÕºÊÑÒ³/PWM ª ͧ 1B
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB3 àÍÒµ ¾Øµ
OC2
àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·ÕºÊÑÒ³/PWM ª ͧ 1A
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB3 àÍÒµ ¾Øµ
OC1B
ÍÔ¹¾ØµâÁ´ÙŵÃǨ¨ÑºÊÑÒ³ ªØ´ 1
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB1 àÍÒµ ¾Øµ
OC1A PB2
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB0 ÍÔ¹¾Øµ
ICP1
ÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹
19
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB5 ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ÍÔ¹¾ØµÃѺÊÑÒ³¹ÒÌÔ¡ÒàÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ã¹ÃкººÑÊ SPI, 㪠㹡Ãкǹ¡Òà ISP
SCK
àÍÒµ ¾µØ Ê §ÊÑÒ³¹ÒÌÔ¡ÒàÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ã¹ÃкººÑÊ SPI, 㪠㹡Ãкǹ¡Òà ISP PB6
9
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB6 àÁ×èÍàÅ×Í¡·íÒ§Ò¹¡ÑºÊÑÒ³¹ÒÌÔ¡ÒÀÒÂã¹
XTAL1
ÍÔ¹¾Øµ
ÍÔ¹¾ØµÊÑÒ³¹ÒÌÔ¡ÒÀÒ¹͡, µ ͡Ѻ¤ÃÔʵÍÅ
TOSC1
ÍÔ¹¾Øµ
äÁ 㪠§Ò¹ àÁ×èÍàÅ×Í¡·íÒ§Ò¹¡ÑºÊÑÒ³¹ÒÌÔ¡ÒÀÒÂã¹
PB7
10
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PB7 àÁ×èÍàÅ×Í¡·íÒ§Ò¹¡ÑºÊÑÒ³¹ÒÌÔ¡ÒÀÒÂã¹
XTAL2
ÍÔ¹¾Øµ
㪠µ ͡Ѻ¤ÃÔʵÍÅËÃ×Íà«ÃÒÁÔ¡àÃâ«à¹àµÍÃ
TOSC2
àÍÒµ ¾Øµ
àÍÒµ ¾ØµÊÑÒ³¹ÒÌÔ¡ÒàÁ×èÍ㪠ÊÑÒ³¹ÒÌÔ¡ÒÀÒÂã¹
µÒÃÒ§·Õè 1-1 áÊ´§Ë¹ Ò·Õ¢è ͧ¢ÒÊÑÒ³·Ñ§é ËÁ´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 (ÁÕµÍ )
14 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¢Ò¾Íà µ C à» ¹¢Ò¾Íà µ 2 ·ÔÈ·Ò§ ª×Íè ¢Ò µíÒá˹ §¢Ò ª¹Ô´¢Í§¢Ò PC0
23
PC1
24 25
PC3
26
PC4
27
28
ADC5 SCL PC6
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 4
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¢ ÍÁÙÅ͹ءÃÁÊíÒËÃѺÃкººÑÊ 2 ÊÒÂ
SDA PC5
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 3
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC2 ÍÔ¹¾Øµ
ADC4
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 2
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC2 ÍÔ¹¾Øµ
ADC3
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 1
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC2 ÍÔ¹¾Øµ
ADC2
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 0
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC1 ÍÔ¹¾Øµ
ADC1 PC2
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC0 ÍÔ¹¾Øµ
ADC0
ÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹
1
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC2 ÍÔ¹¾Øµ
ÍÔ¹¾ØµÍйÒÅÍ¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ ª ͧ 5
àÍÒµ ¾Øµ
¢ÒàÍÒµ ¾ØµÊÑÒ³¹ÒÌÔ¡Ò͹ءÃÁÊíÒËÃѺÃкººÑÊ 2 ÊÒÂ
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PC6 ÍÔ¹¾Øµ
RESET
ÍÔ¹¾ØµÊÑÒ³ÃÕ૵
¢Ò¾Íà µ D à» ¹¢Ò¾Íà µ 2 ·ÔÈ·Ò§ ª×Íè ¢Ò µíÒá˹ §¢Ò ª¹Ô´¢Í§¢Ò PD0
23
PD1
24 25
PD3
26
PD4
27
1 1
AIN1
1
ÍÔ¹¾ØµÃѺÊÑÒ³¨Ò¡ÀÒ¹͡ÊíÒËÃѺâÁ´ÙÅä·àÁÍà 1
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD6 ÍÔ¹¾Øµ
AIN0
ÍÔ¹¾ØµÃѺÊÑÒ³¨Ò¡ÀÒ¹͡ÊíÒËÃѺâÁ´ÙÅä·àÁÍà 0
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD5 ÍÔ¹¾Øµ
T1
PD7
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD4 ÍÔ¹¾Øµ
T0
PD6
ÍÔ¹¾ØµÊÑÒ³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÀÒ¹͡ª ͧ 1
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢ÒÊÑÒ³¹ÒÌÔ¡ÒÀÒ¹͡¢Í§âÁ´ÙÅÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ USART
XCK
PD5
ÍÔ¹¾ØµÊÑÒ³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÀÒ¹͡ª ͧ 0
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD3 ÍÔ¹¾Øµ
INT1
àÍÒµ ¾ØµÊ §¢ ÍÁÙŢͧâÁ´ÙÅÊ×èÍÊÒâ ÍÁÙžÍà µÍ¹Ø¡ÃÁ USART
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD2 ÍÔ¹¾Øµ
INT0
ÍÔ¹¾ØµÃѺ¢ ÍÁÙŢͧâÁ´ÙÅÊ×èÍÊÒâ ÍÁÙžÍà µÍ¹Ø¡ÃÁ USART
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD1 ÍÔ¹¾Øµ
TxD PD2
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD0 ÍÔ¹¾Øµ
RxD
ÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹
ÍÔ¹¾ØµÊíÒËÃѺǧ¨Ãà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡ª ͧ 2
ÍÔ¹¾Øµ/àÍÒµ ¾Øµ ¢Ò¾Íà µ´Ô¨ÔµÍÅ PD7 ÍÔ¹¾Øµ
ÍÔ¹¾ØµÊíÒËÃѺǧ¨Ãà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡ª ͧ 1
µÒÃÒ§·Õè 1-1 áÊ´§Ë¹ Ò·Õ¢è ͧ¢ÒÊÑÒ³·Ñ§é ËÁ´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 (¨º)
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 15
º··Õè 2
á¹Ð¹íÒ«Í¿µ áÇà ÊíÒËÃѺ¾Ñ²¹ÒªØ´ MicroCamp-Mega8 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁªØ´àÃÕ¹ÃÙ MicroCamp-Mega8 㪠â»Ãá¡ÃÁÀÒÉÒ C à» ¹ËÅÑ¡ ´Ñ§¹Ñ¹é ¡ ͹㪠§Ò¹¨Ö§µ ͧµÔ´µÑ§é «Í¿µ áÇÃ Í¹Ñ à» ¹à¤Ã×Íè §Á×Í㹡ÒþѲ¹Òâ»Ãá¡ÃÁº¹¤ÍÁ¾ÔÇàµÍà 4 ÃÒ¡ÒÃËÅÑ¡æ ´Ñ§¹Õé 1. AVR Studio à» ¹«Í¿µ áÇà ÊÒí ËÃѺÊà ҧâ»Ãá¡ÃÁ¤Çº¤ØÁ â´ÂÀÒÂã¹ AVR Studio ä´ ºÃèØà¤Ã×Íè §Á×Í·Õªè Ç ÂÍíҹǤÇÒÁÊдǡµ Í¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ·Ñ§é ÂѧÊÒÁÒöàª×Íè Á⧡Òà ·íÒ§Ò¹ã¹Ê ǹµ Ò§æ ¡Ñº¤ÍÁä¾àÅÍà ·¡Õè Òí ˹´ä´ ´Ç  â´Â¤ÍÁä¾àÅÍà ·¹Õè Òí ÁÒ㪠ÃÇ Á¡Ñ¹¤×Í WinAVR, ÊÒÁÒöµÔ´µ ͡Ѻä¿Å äźÃÒÃÕ«§Öè ºÃèؿ§ ¡ ª¹Ñè ¢Í§â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺµÔ´µ ͡ѺÍØ»¡Ã³ µÒ §æ ·Ñé§ÂѧÊÒÁÒöµÔ´µ ͡Ѻ«Í¿µ áÇà ÊíÒËÃѺâ»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§á¼§ ǧ¨Ã¤Çº¤ØÁ㹪ش MicroCamp-Mega8 ä´ ´Ç  ´Ñ§¹Ñ¹é «Í¿µ áÇà AVR Studio ¨Ö§àËÁÒÐÍ ҧÂÔ§è ã¹ ¡ÒùíÒ㪠¾Ñ²¹Òâ»Ãá¡ÃÁà¾×èÍʹѺ¡Ò÷íÒ§Ò¹¢Í§ªØ´àÃÕ¹ÃÙ MicroCamp-Mega8 â´Â AVR Studio ¾Ñ²¹ÒáÅÐà¼Âá¾Ã â´ÂäÁ ¤Ô´ÁÙŤ Òâ´Â Atmel «Öè§à» ¹¼Ù ¼ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ·Õè㪠໠¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§ªØ´àÃÕ¹ÃÙ MicroCamp-Mega8 ÊÒÁÒö´Òǹ âËÅ´àÇÍà ª¹Ñè ãËÁ ·ÕÍè Ò¨ÁÕ·Õè www.atmel.com 2. WinAVR à» ¹«Í¿µ áÇà C ¤ÍÁä¾àÅÍà ËÃ×͵ÑÇá»Åâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà AVR â´Â WinAVR à» ¹«Í¿µ áÇà ẺâÍྠ¹«ÍÃ Ê (open source) ¾Ñ²¹Òµ ͨҡ GNU GCC ¤ÍÁä¾àÅÍà ÊÒÁÒö´Ù¢Í ÁÙÅà¾ÔÁè àµÔÁÃÇÁ·Ñ§é ´Òǹ âËÅ´«Í¿µ áÇà ãËÁ æ (·ÕÍè Ò¨ÁÕ) ¨Ò¡ http://sourceforge.net/projects/winavr/ â´Â㹪شàÃÕ¹ÃÙ MicroCamp-Mega8 ¨ÐÍ Ò§ÍÔ§¡ÒÃà¢Õ¹ â»Ãá¡ÃÁÀÒÉÒ C ¡Ñº WinAVR ã¹àÇÍà ª¹Ñ 20050214 àÁ×Íè ·íÒ¡ÒõԴµÑ§é WinAVR áŠǨÐÊÒÁÒö àª×Íè Á⧡Ò÷íҧҹࢠҡѺ AVR Studio ä´ ´Ñ§¹Ñ¹é ¨Ö§ÊÒÁÒö·íÒ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C º¹ AVR Studio áÅ Ç·íÒ¡ÒäÍÁä¾Å â»Ãá¡ÃÁ´ Ç WinAVR ä´ Í ҧµ Íà¹×Íè § â´Â¼ÅÅѾ¸ ¢Í§¡ÒäÍÁä¾Å ¨Ðä´ à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .hex Íѹ໠¹ä¿Å ÃËÑÊÀÒÉÒà¤Ã×èͧËÃ×Í·ÕèàÃÕÂ¡Ç Ò áÁªÕ¹â¤ ´ â´Âà» ¹ä¿Å ¼ÅÅѾ¸ ·Õèä´ ¨Ò¡¡ÒþѲ¹ÒÊÒÁÒö¹íÒä»´Òǹ âËŴŧÊÙ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µ Íä»ä´ ·Ñ¹·Õ
16 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
3. ä¿Å äźÃÒÃÕ à» ¹ä¿Å ʹѺʹعªØ´¤íÒÊѧè ËÃ×Í¿ §¡ ª¹Ñè µ Ò§æ à¾×Íè ÍíҹǤÇÒÁÊдǡ㹡Òà Êà ҧâ»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§á¼§Ç§¨Ã¤Çº¤ØÁËÅÑ¡¢Í§ªØ´àÃÕ¹ÃÙ MicroCamp-Mega8 ÍÒ·Ô ¤íÒÊÑ觤Ǻ¤ØÁÍÔ¹¾Øµ/àÍÒµ ¾Øµ·Ñé§áººÊÑÒ³´Ô¨ÔµÍÅáÅÐÍйÒÅÍ¡, ¤íÒÊÑ觵Դµ Í¡ÅØ ÁÍØ»¡Ã³ µÃǨ ¨ÑºËÃ×Íૹà«Íà Ẻµ Ò§æ ËÃ×ͤíÒÊÑ§è ¤Çº¤ØÁÁÍàµÍà ໠¹µ ¹ 4. «Í¿µ áÇà ÊÒí ËÃѺ´Òǹ âËÅ´â»Ãá¡ÃÁ ËÅѧ¨Ò¡·Õ·è Òí ¡ÒäÍÁä¿Å â»Ãá¡ÃÁÀÒÉÒ C áÅ Ç ä¿Å ¼ÅÅѾ¸ ·Õèä´ ¨Ðà» ¹ä¿Å ¹ÒÁÊ¡ØÅ .hex «Ö觨е ͧ¹íÒä»â»Ãá¡ÃÁËÃ×Íà¢Õ¹ŧã¹Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ÊíÒËÃѺ㹪شàÃÕ¹ÃÙ MicroCamp-Mega8 㪠AVRProg à» ¹¼Å§Ò¹¢Í§ Atmel 㪠¡ºÑ PX-400 ªØ´´Òǹ âËÅ´â»Ãá¡ÃÁ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ â´Â AVRProg ä´ ÃѺ¡ÒõԴµÑé§ä»¾Ã ÍÁ¡Ñº¡ÒõԴµÑ駫Ϳµ áÇà AVR Studio
2.1 ¡ÒõԴµÑ§é â»Ãá¡ÃÁ AVR Studio ÁÕ¢Ñ鹵͹â´ÂÊÃØ»´Ñ§¹Õé 2.1.1 ´ÑºàºÔŤÅÔ¡·Õäè ¿Å µ´Ô µÑ§é ¢Í§â»Ãá¡ÃÁ AVR Studio ´Ñ§ÃÙ»
2.1.2 ËÅѧ¨Ò¡¹Ñ鹨ÐࢠÒÊ٠˹ Òµ Ò§áá¢Í§¡ÒõԴµÑé§â»Ãá¡ÃÁ AVR Studio ´Ñ§ÃÙ» ¨Ò¡¹Ñé¹ ¤ÅÔ¡·Õ»è ÁØ Next
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 17
2.1.3 ¨Ò¡¹Ñé¹à¢ ÒÊ٠˹ Òµ Ò§¢ ͵¡Å§à§×è͹ä¢ÅÔ¢ÊÔ·¸ áÅСÒÃ㪠§Ò¹ «Ö觨ÐÁÕÃÒÂÃÐàÍÕ´¢Í§ ¤Ø³ÊÁºÑµ¢Ô ͧà¤Ã×Íè §¤ÍÁ¾ÔÇàµÍà áÅÐÃкº»®ÔºµÑ ¡Ô Ò÷ÕÊè ÒÁÒöÃͧÃѺ¡Ò÷íÒ§Ò¹¢Í§ AVR Studio (µÒÁÃٻ໠¹ àÇÍà ª¹Ñè 4) ÃÇÁ件֧ª×Íè ºÃÔÉ·Ñ ¼Ù¼ ÅÔµáÅÐÍ×¹è æ â´ÂãË àÅ×Í¡ª ͧ I accept the terms of the license agreement ¨Ò¡¹Ñ¹é ¤ÅÔ¡·Õ»è ÁØ Next
18 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
2.1.4 ࢠÒÊ٠˹ Òµ Ò§¡ÒõԴµÑé§ã¹ÅíҴѺ¶Ñ´ä» ·ÕèáÊ´§ª×è;Ҹ¢Í§¤ÍÁ¾ÔÇàµÍà 㹡ÒõԴµÑé§ â»Ãá¡ÃÁ AVR Studio «Ö§è ¼Ùµ ´Ô µÑ§é ÊÒÁÒö»ÃѺà»ÅÕÂè ¹¾Ò¸ä´ â´Â¡ÒäÅÔ¡·Õ»è ÁØ Change áÅ Ç¡íÒ˹´ ¾Ò¸ãËÁ ·µÕè Í §¡Òà ¨Ò¡¹Ñ¹é ¤ÅÔ¡·Õ»è ÁØ Next
2.1.5 ËÅѧ¨Ò¡¹Ñé¹à¢ ÒÊ٠˹ Òµ Ò§¡ÒÃÍÑ»à¡Ã´ä´ÃàÇÍà USB ãË ¤ÅÔ¡·Õè»Ø Á Next ¼ Ò¹ä» à¹×èͧ ¨Ò¡ä´ÃàÇÍà ´§Ñ ¡Å ÒÇäÁ Á¡Õ ÒÃ㪠§Ò¹ã´æ ¡ÑºªØ´¡Å ͧÊÁͧ¡Å IPST-MicroBOX 2.1.6 ࢠÒÊÙË ¹ Òµ Ò§àÃÔÁè µ ¹¡ÒõԴµÑ§é â»Ãá¡ÃÁ ãË ¤ÅÔ¡·Õ»è ÁØ Install
2.1.7 ËÅѧ¨Ò¡¹Ñ鹨ÐàÃÔèÁ¡Ãкǹ¡ÒõԴµÑé§â»Ãá¡ÃÁ AVR Studio Ãͨ¹¡ÃзÑ觡ÒõԴµÑé§ àÊÃç¨ÊÁºÙó
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 19
Studio
2.1.8 àÁ×Íè ¡ÒõԴµÑ§é àÊÃç¨ÊÁºÙó ãË ¤ÅÔ¡·Õ»è ÁØ Finish à» ¹ÍѹàÊÃç¨ÊÔ¹é ¡ÒõԴµÑ§é â»Ãá¡ÃÁ AVR
2.1.9 ·´Êͺ¼Å¡ÒõԴµÑ§é â´Âà» ´â»Ãá¡ÃÁ AVR Studio ä»·Õè Start à Programs à Atmel AVR Tools à AVR Studio 4 ËÅѧ¨Ò¡¹Ñ¹é ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ ´Ñ§ÃÙ»
2.2 ¡ÒõԴµÑ§é â»Ãá¡ÃÁ WinAVR ÁÕ¢Ñ鹵͹â´ÂÊÃØ»´Ñ§¹Õé 2.2.1 ´ÑºàºÔéŤÅÔ¡·Õèä¿Å µÔ´µÑé§â»Ãá¡ÃÁ WinAVR
20 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
2.2.2 ࢠÒÊ٠˹ Òµ Ò§áá¢Í§¡ÒõԴµÑé§â»Ãá¡ÃÁ WinAVR à» ¹¡ÒÃàÅ×Í¡ÀÒÉÒ㹡ÒõԴµÑé§ ¤ÅÔ¡·Õ»è ÁØ OK
2.2.3 ËÅѧ¨Ò¡¹Ñé¹à¢ ÒÊ٠˹ Òµ Ò§áÊ´§ÃÒÂÃÐàÍÕ´¡ÒôíÒà¹Ô¹¡ÒõԴµÑé§â»Ãá¡ÃÁ WinAVR ¨Ò¡¹Ñ鹤ÅÔ¡·Õè»Ø Á µ Íä»>
2.2.4 ࢠÒÊ٠˹ Òµ Ò§áÊ´§ÃÒÂÅÐàÍÕ´áÅÐà§×è͹ä¢ÊíÒËÃѺ¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ WinAVR ¨Ò¡¹Ñ鹤ÅÔ¡·Õè»Ø Á ÂÍÁÃѺ> 2.2.5 ¨Ò¡¹Ñ¹é ࢠÒÊÙË ¹ Òµ Ò§áÊ´§ª×Íè ¾Ò¸¢Í§¤ÍÁ¾ÔÇàµÍà ·µÕè Í §¡ÒõԴµÑ§é â»Ãá¡ÃÁ WinAVR áÅо×é¹·Õè·Õèµ Í§¡ÒÃ㪠ÊíÒËÃѺ¡ÒõԴµÑé§â»Ãá¡ÃÁ â´Â¼Ù µÔ´µÑé§ÊÒÁÒöà»ÅÕè¹¾Ò¸ä´ â´Â¡ÒäÅÔ¡·Õè »ØÁ àÃÕ¡ËÒ... áÅ Ç¡íÒ˹´¾Ò¸ãËÁ ·µÕè Í §¡Òà (á¹Ð¹íÒÇ Ò¡íÒ˹´à» ¹¾Ò¸·Õàè ¤Ã×Íè §Á×Í¡íÒ˹´ãË µ§Ñé áµ µ ¹¤×Í C:\WinAVR) ¨Ò¡¹Ñ鹤ÅÔ¡·Õè»Ø Á µ Íä»>
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 21
2.2.6 µ Íä»à¢ ÒÊ٠˹ Òµ Ò§¡ÒáíÒ˹´¤Ø³ÊÁºÑµÔ¾ÔàÈÉ «Ö觼٠µÔ´µÑé§ÊÒÁÒöàÅ×Í¡ÃÒ¡ÒõÒÁ·Õè µ ͧ¡Òà áŠǤÅÔ¡·Õè»Ø Á µÔ´µÑé§>
2.2.7 ËÅѧ¨Ò¡¹Ñ¹é ¨ÐàÃÔÁè ¡Ãкǹ¡ÒõԴµÑ§é â»Ãá¡ÃÁ WinAVR áÅÐáÊ´§¤ÇÒÁ¤×ºË¹ ÒµÒÁ ÃÙ» ËÅѧ¨Ò¡¹Ñé¹ãË ¼Ù µÔ´µÑé§Ãͨ¹¡ÃзÑ觡ÒõԴµÑé§àÊÃç¨ÊÁºÙó ËÅѧ¨Ò¡¹Ñé¹ãË ¤ÅÔ¡·Õè»Ø Á àÊÃç¨ÊÔé¹ à» ¹ÍÑ¹Ç Ò¡ÒõԴµÑ§é â»Ãá¡ÃÁ WinAVR àÊÃç¨ÊÁºÙó
2.3 ¡ÒäѴÅÍ¡äźÃÒÃÕ ¡ÒäѴÅÍ¡ä¿Å äźÃÒÃÕ¹ÒÁÊ¡ØÅ .h ¹Ñ鹨íÒà» ¹µ ͧ¤Ñ´ÅÍ¡ä¿Å äźÃÒÃÕ·Ñé§ËÁ´«Ö觺ÃèØÍÂÙ ÀÒÂã¹â¿Åà´Íà MicroCamp_include ã¹á¼ ¹«Õ´ÃÕ ÍÁ ¤ÇäѴÅÍ¡â¿Åà´Íà library ä»à¡çºÂѧ¾Ò¸·Õè ¼Ù¾ ² Ñ ¹ÒÊдǡÁÒ¡·ÕÊè ´Ø àª ¹ ¾Ò¸·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒþѲ¹Ò§Ò¹ºÍà ´ MicroCamp-Mega8 à» ¹µ ¹ ÊíÒËÃѺ¢Ñ¹é µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁºÍà ´ MicroCamp-Mega8 ´ Ç AVR Studio ¹Ñ¹é ¨íÒà» ¹µ ͧÁÕ¡ÒÃÃкؾҸ¨Ò¡à¤Ã×Íè §Á×ÍÁÒÂѧ¾Ò¸¢Í§â¿Åà´Íà MicroCamp_include à¾×Íè ãË Á¡Õ ÒÃàª×Íè Á ⧪ش¤íÒÊѧè ËÃ×Í¿ §¡ ª¹Ñè µ Ò§æ ÀÒÂã¹ä¿Å äźÃÒÃÕä´ Í ҧ¶Ù¡µ ͧ ´Ñ§¹Ñ¹é ¼Ù¾ ² Ñ ¹Ò¨íÒà» ¹µ ͧÃкؾҸ ¢Í§â¿Åà´Íà MicroCamp_include ãË ¶¡Ù µ ͧ ÁÔઠ¹¹Ñ¹é ¨Ð·íÒãË à¡Ô´¢ ͼԴ¾ÅÒ´ã¹¢Ñ¹é µÍ¹¢Í§¡Òà ¤ÍÁä¾Å ËÃ×ÍÊѧè Build à¾×Íè ãË ä´ ä¿Å ¼ÅÅѾ¸
22 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 23
º··Õè 3
¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ´ ÇÂÀÒÉÒ C ÊíÒËÃѺ MicroCamp-Mega8 â´Â㪠AVR Studio 3.1 ËÑÇã¨ÊíҤѤ×Í ¤ÍÁä¾àÅÍà ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ´ ÇÂÀÒÉÒ C à¾×Íè ¹íÒä»ãª ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¹¹Ñé ã¹ ·Ò§»¯ÔºµÑ ¨Ô ÃÔ§æ äÁ 㪠à¹×Íé ⤠´¢Í§â»Ãá¡ÃÁÀÒÉÒ C ·Õ¶è ¡Ù ¹íÒŧ仺ÃèØã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÑÇÃËÑÊ¢ ÍÁÙÅ·Õãè ª §Ò¹¨ÃÔ§¹Ñ¹é ä´ ÁÒ¨Ò¡¡ÒÃá»ÅÀÒÉÒ C à» ¹ÃËÑÊÀÒÉÒà¤Ã×Íè §ËÃ×Í áÁªÕ¹â¤ ´´ Ç«Ϳµ áÇà ·àÕè ÃÕ¡¡Ñ¹Ç Ò ¤ÍÁä¾àÅÍà (compiler) ¡ÒþѲ¹ÒÃкº§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç Ââ»Ãá¡ÃÁÀÒÉÒ C ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ»´Ñ§¹Õé (1) à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ´ ÇÂà·ç¡« àÍ´ÔàµÍà ËÃ×Í¾×¹é ·ÕÊè Òí ËÃѺà¢Õ¹â»Ãá¡ÃÁã¹¡Ã³Õ ·Õ«è Í¿µ áÇà ¹¹Ñé ¨Ñ´ÁÒà» ¹ªØ´ã¹áºº IDE (2) ¤ÍÁä¾Å ËÃ×Íá»Å§ÀÒÉÒ C à» ¹ÀÒÉÒáÍÊà«ÁºÅբͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÇÑ ¹Ñ¹é æ (3) áÍÊà«ÁàºÅÍà ¨Ò¡ÀÒÉÒáÍÊà«ÁºÅÕà» ¹ÀÒÉÒà¤Ã×Íè §ËÃ×ÍáÁªÕ¹â¤ ´ã¹ÃÙ»¢Í§àÅ¢°Ò¹ ÊԺˡ (4) ´Òǹ âËÅ´«Íà Ê⤠´·Õèä´ ¨Ò¡¡ÒÃáÍÊà«ÁàºÅÍà ŧÊ٠˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (5) ·´ÅͧáÅеÃǨÊͺ¡Ò÷íÒ§Ò¹ ËÒ¡äÁ ÊÁºÙó ãË ¡ÅѺä»á¡ 䢵ѧé áµ ¢¹Ñé µÍ¹·Õè 1 Í ҧäáçµÒÁ ã¹¢Ñ¹é µÍ¹·Õè 2 áÅÐ 3 ¼Ùã ª §Ò¹¨ÐäÁ àË繶֧¡Ãкǹ¡Ò÷íÒ§Ò¹ à¹×Íè §¨Ò¡«Í¿µ áÇà á»ÅÀÒÉÒËÃ×ͤÍÁä¾àÅÍÃ ä´ ÃÇÁ¡Ò÷íҧҹ㹠2 ¢Ñ¹é µÍ¹¹Õäé Ç ´Ç ¡ѹ
24 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
3.2 á¹Ç·Ò§¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C â´Â㪠AVR Studio áÅÐ WinAVR àÁ×Íè ¼Ù¾ ² Ñ ¹Òä´ µ´Ô µÑ§é â»Ãá¡ÃÁ AVR Studio áÅÐ WinAVR áÅ Ç ¼Ù¾ ² Ñ ¹Ò¨íÒà» ¹µ ͧ¤Ñ´ÅÍ¡ ¡ÅØ ÁäźÃÒÃÕ·ÕèʹѺʹع¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ MicroCamp-Mega8 «Ö觺ÃèØÍÂÙ ÀÒÂã¹â¿Åà´Íà MicroCampt_includeã¹á¼ ¹«Õ´ÃÕ ÍÁ·Õ¨è ´Ñ ÁҾà ÍÁ¡ÑºªØ´ MicroCamp-Mega8 (ËÃ×Í´Òǹ âËÅ´¨Ò¡ www.inex.co.th) äÇ ã¹¾Ò¸ã´æ ã¹à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍà ·Õè¼Ù ¾Ñ²¹ÒàËç¹ÊÁ¤Çà à¾Õ§෠ҹÕé¼Ù ¾Ñ²¹Ò¡ç ÊÒÁÒöàÃÔÁè µ ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁἧǧ¨ÃËÅѡ㹪ش MicroCamp-Mega8 ´ ÇÂâ»Ãá¡ÃÁ ÀÒÉÒ C ä´ ·¹Ñ ·Õ ÊíÒËÃѺ¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁÀÒÉÒ C ´ Ç AVR Studio ¹Ñ¹é ¼Ù¾ ² Ñ ¹Ò¨íÒà» ¹µ ͧÊà ҧ á¿ Á¢ ÍÁÙÅã¹ÃٻẺ·Õàè ÃÕÂ¡Ç Ò ¼Ñ§§Ò¹ËÃ×Íâ»Ãà¨ç¡µ (project) â´ÂËÅѧ¨Ò¡·Õ¼è ¾Ù ² Ñ ¹ÒÊà ҧâ»Ãà¨ç¡µ áÅСíÒ˹´â»Ãá¡ÃÁ¤Çº¤ØÁà» ¹·Õàè ÃÕºà ÍÂáÅ Ç ¨ÐࢠÒÊÙ¡ Ãкǹ¡ÒÃá»Å§ÃËÑʤǺ¤ØÁËÃ×Í·Õàè ÃÕÂ¡Ç Ò ¤ÍÁä¾Å (compile) ·íÒãË ä´ ä¿Å ¼ÅÅѾ¸ ·ÁÕè ªÕ Í×è à´ÕÂǡѺâ»Ãà¨ç¡µ áµ Á¹Õ ÒÁÊ¡ØÅà» ¹ .hex ઠ¹ µÑ§é ª×Íè â»Ãà¨ç¡µ à» ¹ test_segment àÁ×Íè ¤ÍÁä¾Å àÊÃ稨Ðä´ ä¿Å ¼ÅÅѾ¸ à» ¹ test_segment.hex ¡Ò÷´Êͺ¼ÅÅѾ¸ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·Õ¶è ¡Ù Êà ҧ¢Ö¹é ¨Ò¡â»Ãà¨ç¡µ ã´æ¹Ñ¹é ÊÒÁÒö·íÒä´ ´ Ç¡ÒùíÒä¿Å ¼ÅÅѾ¸ ¹Ñé¹´Òǹ âËÅ´ËÃ×Íà¢Õ¹ŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁÀÒÂã¹äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§ MicroCamp-Mega8 «Ö§è ã¹·Õ¹è ãÕé ª äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àºÍà ATmega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 25
3.3 ÃÒÂÅÐàÍÕ´˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ AVR Studio V4.0 ã¹ÃÙ»áÊ´§Ê ǹ»ÃСͺ·ÕÊè Òí ¤Ñã¹Ë¹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ AVR Studio ä¿Å áÅÐäźÃÒÃÕµ Ò§æ ·Õèàª×èÍÁ⧠¡Ò÷íÒ§Ò¹¡Ñºâ»Ãà¨ç¡µ ª×Íè ä¿Å ·¡Õè Òí Åѧ·íÒ§Ò¹ÍÂÙã ¹» ¨¨Øº¹Ñ
ä¿Å ¢Í§â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡¢Í§â»Ãà¨ç¡µ ¹Õé
˹ Òµ Ò§ Build 㪠áÊ´§¼ÅÅѾ¸ ¢Í§¡ÒäÍÁä¾Å áÅÐᨠ§¢ ÍÁÙÅ ¢Í§â»Ãà¨ç ¡ µ ·Ñé § ËÁ´ äÁ Ç Ò ¨Ðà» ¹ ¤ÇÒÁ¼Ô ´ ¾ÅÒ´ (¶ Ò ÁÕ ) , ¢¹Ò´¢Í§ä¿Å .hex áÅТ ͤÇÒÁᨠ§àµ×͹µ Ò§æ
3.3.1 àÁ¹Ù File »ÃСͺ´ ǤíÒÊÑ觴ѧ¹Õé New File Open File... Close Save Save As... Save All Print... Print Preview Print Setup... Exit
Êà ҧῠÁàÍ¡ÊÒÃãËÁ à» ´á¿ Á¢ ÍÁÙÅà¡ Ò » ´ä¿Å àÍ¡ÊÒ÷ÕèáÍ¡µÕ¿ÍÂÙ ºÑ¹·Ö¡á¿ Á¢ ÍÁÙÅ㹪×èÍà´ÔÁ ºÑ¹·Ö¡á¿ Á¢ ÍÁÙÅ㹪×èÍÍ×è¹ ºÑ¹·Ö¡á¿ Á¢ ÍÁÙÅ·Ø¡µÑÇ·Õèà» ´ÍÂÙ ¾ÔÁ¾ á¿ Á¢ ÍÁÙÅÍÍ¡·Ò§à¤Ã×èͧ¾ÔÁ¾ ´ÙÁØÁÁͧ¢Í§á¿ Á¢ ÍÁÙÅ¡ ͹¾ÔÁ¾ à¾×è͵ÃǨ´Ù¤ÇÒÁàËÁÒÐÊÁ »ÃѺᵠ§¤Ø³ÊÁºÑµÔ㹡ÒþÔÁ¾ ¢Í§à¤Ã×èͧ¾ÔÁ¾ ÍÍ¡¨Ò¡â»Ãá¡ÃÁ AVR Studio
26 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
3.3.2 àÁ¹Ù Project »ÃСͺ´ ǤíÒÊÑ觴ѧ¹Õé Project Wizard
ࢠҶ֧˹ Òµ Ò§ Project Wizard «Ö§è ÊÒÁÒö໠´â»Ãà¨ç¡µ à¡ ÒËÃ×Í Êà ҧâ»Ãà¨ç¡µ ãËÁ ä´ New Project Êà ҧâ»Ãà¨ç¡µ ãËÁ Open Project à» ´â»Ãà¨ç¡µ à¡ Ò Save Project ºÑ¹·Ö¡â»Ãà¨ç¡µ » ¨¨ØºÑ¹·Õè¶Ù¡à» ´ÍÂÙ Close Project » ´â»Ãà¨ç¡µ » ¨¨ØºÑ¹·Õè¶Ù¡à» ´ÍÂÙ Recent Projects àÅ×Í¡à» ´â»Ãà¨ç¡µ ·àÕè ¤Â㪠§Ò¹ «Ö§è ¨ÐáÊ´§à» ¹ÃÒª×Íè â»Ãà¨ç¡µ Configuration Options »ÃѺᵠ§¤Ø³ÊÁºÑµ¢Ô ͧâ»Ãà¨ç¡µ áÅÐ㪠㹡Òü¹Ç¡äźÃÒÃÕ
3.3.3 àÁ¹Ù Build »ÃСͺ´ ǤíÒÊÑ觴ѧ¹Õé Build ¤ÍÁä¾Å áÅÐÊà ҧä¿Å ¼ÅÅѾ¸ (á¹Ð¹íÒãË àÃÕ¡㪠¤Òí ÊÑ§è ¹Õ)é ¤ÕÂÅ ´Ñ ¤×Í F7 Rebuild All ¤ÍÁä¾Å áÅÐÊà ҧä¿Å ¼ÅÅѾ¸ Build and Run ¤ÍÁä¾Å áÅÐÊà ҧä¿Å ¼ÅÅѾ¸ ¾Ã ÍÁ·Ñé§àª×èÍÁâ§ä»Âѧà¤Ã×èͧÁ×Í·Ò§ÎÒà ´áÇà ¾ÔàÈÉ·Õè AVR Studio ʹѺʹع Compile ¤ÍÁä¾Å Í ҧà´ÕÂÇ Clean źä¿Å §Ò¹áÅÐä¿Å ¼ÅÅѾ¸ à¡ Ò·ÕèÁÕÍÂÙ Export Makefile Ê § Makefile ÍÍ¡ä»à¡çºÂѧ¾Ò¸ã´æ
3.3.4 àÁ¹Ù Edit àÁ¹Ù¹Õé¨Ðà¡Ô´¢Öé¹àÁ×èÍÁÕ¡ÒÃÊà ҧËÃ×Íà» ´â»Ãà¨ç¡µ â´ÂºÃèؤíÒÊÑè§à¡ÕèÂǡѺ¡ÒÃᡠ䢢 ͤÇÒÁ Áҵðҹ äÁ Ç Ò¨Ðà» ¹¡ÒäѴÅÍ¡ µÑ´ ÇÒ§ ¤ ¹ËÒ ËÃ×Íà»ÅÕè¹¢ ͤÇÒÁ µÅÍ´¨¹¡ÒÃàÅ×Í¡ª¹Ô´¢Í§ µÑÇÍÑ¡ÉÃáÅо׹é ËÅѧ¢Í§¾×¹é ·Õãè ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ â´ÂࢠÒ仡íÒ˹´·Õ¤è Òí Êѧè Font and Color
3.3.5 àÁ¹Ù View ¤íÒÊÑ§è ·Õãè ª à» ¹ËÅÑ¡ã¹àÁ¹Ù¹¤Õé Í× Toolbars 㪠¡Òí ˹´ãË »ÁØ à¤Ã×Íè §Á×Í㹡Ò÷íÒ§Ò¹µ Ò§æ áÊ´§ ËÃ×Í« ͹µÑÇ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 27
3.4.6 àÁ¹Ù Tools à» ¹àÁ¹ÙàÅ×Í¡µÔ´µ ͡Ѻà¤Ã×èͧÁ×Í·Ò§ÎÒà ´áÇà ·Õè㪠à ÇÁ¡Ñº AVR Studio 㹪ش MicroCampMega8 ¹Õé¨Ð㪠µÑÇà´ÕÂǤ×Í AVR Prog Íѹ໠¹«Í¿µ áÇà ÊíÒËÃѺ PX-400 ªØ´â»Ãá¡ÃÁäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ àÁ×è͵ ͧ¡ÒÃ㪠§Ò¹ AVR Prog ¨Ðµ ͧµ ÍÎÒà ´áÇà ¢Í§ PX-400 ࢠҡѺ¾Íà µÍ¹Ø¡ÃÁ¡ ͹ ¨Ò¡¹Ñ¹é ¨Ö§¤ÅÔ¡àÅ×Í¡ à¾×Íè ࢠÒÊÙ¢ ¹Ñé µÍ¹´Òǹ âËÅ´â»Ãá¡ÃÁ
3.4.7 àÁ¹Ù Debug à» ¹àÁ¹ÙÊÒí ËÃѺ¡íÒ˹´¡ÒèíÒÅͧ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â´Â㪠¤Òí Êѧè Start Debugging à¾×Íè ࢠÒÊÙâ ËÁ´¡ÒèíÒÅͧ·Ò§«Í¿áÇà 㹡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺªØ´ MicroCamp-Mega8 äÁ ä´ à¹ ¹ãË ãª à¤Ã×èͧÁ×͹Õé
3.5 ¡ÒÃÊà ҧâ»Ãà¨ç¡µ â»Ãá¡ÃÁÀÒÉÒ C ÊÒÁÒöÊÃØ»¢Ñ鹵͹â´ÂÊÃØ»ä´ ´Ñ§¹Õé 3.5.1 à» ´â»Ãá¡ÃÁ AVR Studio ÊíÒËÃѺ㹡óշÁÕè âÕ »Ãà¨ç¡µ ͹×è æ à» ´¤ Ò§ÍÂÙ ¼Ù¾ ² Ñ ¹ÒÊÒÁÒö » ´â»Ãà¨ç¡µ ·¶Õè ¡Ù à» ´ÍÂÙä ´ â´ÂàÅ×Í¡¤íÒÊÑ§è ·Õáè ¶ºàÁ¹Ù Project à Close Project 3.5.2 ·íÒ¡ÒÃÊà ҧâ»Ãà¨ç¡µ ãËÁ â´ÂàÅ×Í¡¤íÒÊÑ§è ·Õáè ¶ºàÁ¹Ù Project à New Project µÒÁÃÙ»
3.5.3 ¨Ò¡¹Ñ¹é ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ÊíÒËÃѺ¡ÒáíÒ˹´¤Ø³ÊÁºÑµ¢Ô ͧâ»Ãà¨ç¡µ
28 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
ãË ¼¾Ù ² Ñ ¹Ò·íÒµÒÁÅíҴѺ¢Ñ¹é µÍ¹Â Í´ѧ¹Õé 3.5.3.1 ¤ÅÔ¡àÅ×Í¡ÃÒ¡Òà AVR GCC ÀÒÂã¹Ê ǹ¢Í§ Project type: à¾×Íè àÅ×Í¡ª¹Ô´¢Í§ â»Ãà¨ç¡µ ·¨Õè зíÒ¡ÒÃÊà ҧ໠¹ÃٻẺÀÒÉÒ C 3.5.3.2 ¡íÒ˹´ª×Íè â»Ãà¨ç¡µ ã¹Ê ǹ Project name: à» ¹ Switch_LED «Ö§è ·íÒãË ã¹Ê ǹ Initial file: ¶Ù¡Êà ҧ¢Öé¹µÒÁª×èÍâ»Ãà¨ç¡µ ·Õè¡íÒ˹´ ¹Ñ蹤×ÍÀÒÂã¹â»Ãà¨ç¡µ ¨ÐÁÕä¿Å Switch_LED.c ¶Ù¡Êà ҧµÒÁ¢Ö¹é ÁÒà¾×Íè ºÃèؤÒí ÊÑ§è µ Ò§æ â´Â¼Ù¾ ² Ñ ¹Ò¨Ðà» ¹¼Ù¡ Òí ˹´â»Ãá¡ÃÁµ Íä» 3.5.3.3 ¡íÒ˹´¾Ò¸·ÕÍè ÂÙ¢ ͧâ»Ãà¨ç¡µ ã¹Ê ǹ¢Í§ Location: :«Ö§è ¤ÅÔ¡àÅ×Í¡àÊ ¹·Ò§ä´ ¨Ò¡»Ø Á ¤ ¹ ËÒ¾Ò¸·Ò§´ Ò ¹¢ÇÒ ¨Ò¡µÑ Ç ÍÂ Ò §¼Ù à ¢Õ Â ¹¡í Ò Ë¹´¨Ñ ´ à¡ç º äÇ ·Õè G:\Work2006\AVRROBOT\Code (à» ¹¾×¹é ·ÕÊè Ç ¹µÑǢͧ¼Ùà ¢Õ¹) ËÅѧ¨Ò¡¹Ñ¹é ¤ÅÔ¡»ØÁ Finish 3.5.4 ËÅѧ¨Ò¡¹Ñ¹é ¨Ð»ÃÒ¡¯ÊÀÒÇÐáÇ´Å ÍÁ¡Ò÷íÒ§Ò¹¢Í§â»Ãà¨ç¡µ Switch_LED µÒÁÃÙ»
ã¹¢³Ðà´ÕÂǡѹ ¨Ð»ÃÒ¡¯â¿Åà´Íà ªÍ×è à´ÕÂǡѺâ»Ãà¨ç¡µ ã¹¾Ò¸·Õ¼è ¾Ù ² Ñ ¹Ò¨Ñ´à¡çºäÇ ¡Í ¹Ë¹ Ò¹Õé µÒÁµÑÇÍ ҧ¢Í§¼Ùà ¢Õ¹¨Ð»ÃÒ¡¯â¿Åà´Íà Switch_LED ·Õ¾è Ò¸ G:\Work2006\AVR-ROBOT\Code â´ÂÀÒÂ㹺ÃèØä¿Å â»Ãà¨ç¡µ ªÍ×è Switch_LED.aps áÅÐä¿Å â»Ãá¡ÃÁ¤Çº¤ØÁ Switch_LED.c
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 29
3.5.5 ËÅѧ¨Ò¡¹Ñ¹é µ ͧ¡íÒ˹´ÃÒÂÅÐàÍÕ´ÊíÒËÃѺàºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà (ã¹·Õ¹è ¤Õé Í× àºÍà ATmega8 ) áÅоҸ¢Í§äźÃÒÃÕµÒ § æ ·Õµè Í §¡ÒÃ㪠§Ò¹ÊíÒËÃѺ¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ â´Â¼Ù ¾Ñ²¹ÒÊÒÁÒö·íÒµÒÁÅíҴѺ¢Ñ鹵͹ Í´ѧ¹Õé 3.5.5.1 àÅ×Í¡¤íÒÊÑ§è ·Õáè ¶ºàÁ¹Ù Project à Configuration Options µÒÁÃÙ»
ËÅѧ¨Ò¡¹Ñ¹é ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ Switch_LED Project Options ¢Ö¹é ÁÒÊíÒËÃѺ¡íÒ˹´¤Ø³ÊÁºÑµÔ ¢Í§â»Ãà¨ç¡µ ·Õè¡Å ÒÇäÇ ¢ Ò§µ ¹ â´ÂÊÑ§à¡µÇ Ò ·Ò§´ Ò¹« Ò ¢Í§Ë¹ Òµ Ò§ ÁÕÃÒ¡ÒÃäͤ͹·Ñé§ÊÔé¹ 5 ÃÒ¡ÒÃ ä´ á¡ l General l Include Directories l Libraries l Memory Settings l Custom Options
3.5.5.2 ã¹Ê ǹ¢Í§ General ¼Ù¾ ² Ñ ¹Ò¨íÒà» ¹µ ͧ¡íÒ˹´ÃÒÂÅÐàÍÕ´µÒÁÃÙ»´ Ò¹º¹ â´Â¡íÒ˹´µÒÁËÑÇ¢ ʹѧ¹Õé l Device : atmega8 àÅ×Í¡àºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª §Ò¹ º¹á¼§Ç§¨Ã MicroCamp à» ¹ ATmega8 l Frequency: 16000000 hz ¡íÒ˹´¤ÇÒÁ¶ÕÊ è Ñ Ò³¹ÒÌ ¡ÒËÅÑ¡·Õè 㪠§Ò¹º¹á¼§Ç§¨Ã MicroCamp ãË à· Ò¡Ñº 16 MHz
30 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
3.5.5.3 ¤ÅÔ¡àÅ×Í¡·Õäè ͤ͹ Include Directories à¾×Íè ¡íÒ˹´¾Ò¸·Õàè ¡çº¢Í§ä¿Å äźÃÒ ÃÕ à¾×Íè ·íÒãË ¡ÒÃàª×Íè Á⧡Ò÷íÒ§Ò¹áÅСÒÃàÃÕ¡㪠¤Òí Êѧè ËÃ×Í¿ §¡ ª¹Ñè µ Ò§æ ·Õºè ÃèØÍÂÙÀ ÒÂã¹äźÃÒ ÃÕ à» ¹ä»ä´ Í ҧ¶Ù¡µ ͧ ËÅѧ¨Ò¡¹Ñ¹é ¤ÅÔ¡·Õ»è ÁØ Add à¾×Íè àÅ×Í¡¾Ò¸·Õ¼è ¾Ù ² Ñ ¹Ò¨Ñ´à¡çºä¿Å äźÃÒÃÕ â´Â Ê Ç¹µÑǢͧ¼Ù à¢Õ¹¨Ñ´à¡çºäÇ ·Õè C:\AVR_ROBOT\include ÀÒÂËÅѧ¨Ò¡¡ÒÃàÅ×Í¡¾Ò¸àÃÕºà ÍÂáÅ Ç ¨Ð»ÃÒ¡¯ÃÒª×èÍãË àÅ×Í¡
3.5.5.5 ¤ÅÔ¡àÅ×Í¡·Õäè ͤ͹ Libraries à¾×Íè ¡íÒ˹´¡ÒÃàª×Íè Áâ§äźÃÒÃÕ·ÃÕè кº¨Ñ´àµÃÕÂÁ ãË (ã¹Ê ǹ¹Õ¨é ÐÊÑÁ¾Ñ¹¸ ¡ºÑ äźÃÒÃÕ ipst.h à¹×Íè §¨Ò¡ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ºÒ§µÑǢͧÃкº) «Ö§è ¨Ðà¡ÕÂè Ç¢ ͧ¡Ñº¤íÒÊÑ§è »ÃÐÁÇżŷҧ¤³ÔµÈÒʵà ºÒ§µÑÇ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº libm.a â´Â¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ ´Ñ§áÊ´§ã¹ÃÙ»
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 31
3.5.5.6 ·Õªè Í § Available Link Objects: ¤ÅÔ¡àÅ×Í¡ÃÒ¡Òà libm.a áŠǤÅÔ¡·Õ»è ÁØ ÅÙ¡Èà ·Õªè äÕé »·Ò§¢ÇÒ à¾×Íè ãË ÃÒ¡Òà libm.a ä»»ÃÒ¡¯·ÕËè ¹ Òµ Ò§ Link with These Objects: â´Â¼ÅÅѾ¸ áÊ´§ ´Ñ§ÃÙ» ËÅѧ¨Ò¡¹Ñ¹é ¤ÅÔ¡»ØÁ OK à¾×Íè ÊÔ¹é ÊØ´¡ÒáíÒ˹´¤Ø³ÊÁºÑµÔ
3.5.6 ËÅѧ¨Ò¡¹Ñé¹¼Ù ¾Ñ²¹Ò¨íÒà» ¹µ ͧà¢Õ¹â»Ãá¡ÃÁËÃ×Í¡íÒ˹´ªØ´¤íÒÊÑ觵 Ò§æ ŧã¹ä¿Å â»Ãá¡ÃÁ¤Çº¤ØÁ Switch_LED.c «Ö§è ã¹µÑÇÍ ҧ¹Õàé » ¹¡ÒõÃǨÊͺ¡ÒÃÍ Ò¹Í Ò¹¤ Ò¨Ò¡ÊÇÔµª àÁ×Íè ÁÕ ¡Òá´ÊÇÔµª ¡ãç Ë ä»ÊÅѺ¡ÒõԴ´Ñº¢Í§ LED â´Âà¹×Íé ËҢͧâ»Ãá¡ÃÁáÊ´§ã¹â»Ãá¡ÃÁ·Õè 3-1 #include <in_out.h> #include <sleep.h> void main() { while(1) { if (in_d(2)==0) { toggle_c(5); } if (in_d(3)==0) { toggle_d(1); } sleep(200); } }
â»Ãá¡ÃÁ·Õè 3.1 ÃÒÂÅÐàÍÕ´â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ Switch_LED.h 3.5.7 ËÅѧ¨Ò¡¹Ñ¹é ·íÒ¡ÒäÍÁä¾Å à¾×Íè ãË ä´ ä¿Å ¼ÅÅѾ¸ Switch_LED.hex ÊíÒËÃѺ¹íÒä»ãª §Ò¹ ã¹¢Ñ¹é µ Íä» â´ÂàÅ×Í¡¤íÒÊÑ§è ·Õáè ¶ºàÁ¹Ù Build à Build ËÃ×Í¡´»ØÁ F7 ËÃ×Í¡´·Õ»è ÁØ Í ҧã´Í ҧ ˹Öè§
32 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¨Ò¡¡ÒäÍÁä¾Å ¨ÐáÊ´§¼ÅÅѾ¸ ã¹ÃÙ»¢Í§¢ ͤÇÒÁµ Ò§æ ·ÕËè ¹ Òµ Ò§ Build «Ö§è ÍÂÙ´ Ò ¹Å Ò§¢Í§ â»Ãá¡ÃÁ AVR Studio µÒÁÃÙ»
«Ö§è ã¹¢Ñ¹é µÍ¹¹Õ¶é Ò ¾º¢ ͼԴ¾ÅÒ´ ઠ¹ ¢ ͼԴ¾ÅÒ´¢Í§äÇÂҡó ÀÒÉÒ C ËÃ×ÍäÁ ÊÒÁÒöàª×Íè Á â§ä»Âѧ¿ §¡ ª¹Ñè ã´æ ·ÕÍè Ò §¶Ö§ä´ ¨ÐÁÕ¡ÒÃᨠ§àµ×͹·ÕËè ¹ Òµ Ò§ Build ઠ¹¡Ñ¹ «Ö§è ¼Ù¾ ² Ñ ¹Òµ ͧµÃǨÊͺ áÅÐá¡ ä¢â»Ãá¡ÃÁãË àÃÕºà ÍÂáÅ Ç ¨Ö§¤ÍÁä¾Å ãËÁ ¨¹äÁ ¾º¢ ͼԴ¾ÅÒ´ã´æ ¨Ö§ä´ ä¿Å ¼ÅÅѾ¸ ÍÍ¡ÁÒã¹·ÕèÊØ´ ËÒ¡¡ÒäÍÁä¾Å äÁ ¾º» ËÒã´æ ä¿Å Switch_LED.hex ¨Ð¶Ù¡Êà ҧ¢Öé¹áÅÐà¡çºäÇ ÀÒÂã¹ ¾Ò¸Â Í¢ͧâ¿Åà´Íà default ÀÒÂã¹â»Ãà¨ç¡µ ¹¹Ñé æ ËÁÒ¤ÇÒÁÇ Ò àÁ×Íè ¤ÍÁä¾Å â»Ãà¨ç¡µ ¹Õé ¨Ðä´ ä¿Å Switch_LED.hex áÅÐà¡çºÍÂÙ ·Õè¾Ò¸ G:\Work2006\AVR-ROBOT\Code\Switch_LED\default ã¹à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍà ¢Í§¼Ù à¢Õ¹¹Ñè¹àͧ
3.6 ¡ÒþѲ¹Òâ»Ãà¨ç¡µ à´ÔÁ àÁ×èͼ٠¾Ñ²¹Òµ ͧ¡ÒÃà» ´â»Ãà¨ç¡µ à¡ Òà¾×è͹íÒÁҾѲ¹Òµ Í ÊÒÁÒö·íÒä´ â´ÂàÅ×Í¡¤íÒÊÑ觷Õèᶺ àÁ¹Ù Project à Open Project áÅ ÇàÅ×Í¡ä»Âѧ¾Ò¸·Õ¨è ´Ñ à¡çºâ»Ãà¨ç¡µ ·µÕè Í §¡Òà «Ö§è ä¿Å ¢Í§â»Ãà¨ç¡µ ã´æ¨ÐÁÕ¹ÒÁÊ¡ØÅ *.aps µÑÇÍ ҧ µ ͧ¡ÒÃà» ´â»Ãà¨ç¡µ Switch_LED ¢Ö¹é ÁҾѲ¹Òµ ͨҡà´ÔÁ ËÅѧ¨Ò¡àÅ×Í¡¤íÒÊÑ§è ·Õáè ¶º àÁ¹Ù Project à Open Project áÅÐࢠҶ֧¾Ò¸·Õ¨è ´Ñ à¡çºâ»Ãà¨ç¡µ ·íÒ¡ÒÃàÅ×Í¡à» ´ä¿Å Switch_LED.aps àÁ×Íè á¡ ä¢â»Ãá¡ÃÁàÊÃç¨ ÊÒÁÒöºÑ¹·Ö¡ã¹ª×Íè à´ÔÁËÃ×ͪ×Íè ãËÁ ¡äç ´ µÒÁµ ͧ¡ÒÃ
3.7 ¡ÒôÒǹ âËÅ´áÅз´Êͺ¼Å¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ËÅѧ¨Ò¡·Õ¼è ¾Ù ² Ñ ¹Òä´ ä¿Å ¼ÅÅѾ¸ ÁÒà» ¹·Õàè ÃÕºà ÍÂáÅ Ç «Ö§è ã¹·Õ¹è ¡Õé ¤ç Í× Switch_LED.hex ¢Ñ¹é µÍ¹µ Í令×Í ¡ÒùíÒä¿Å ´§Ñ ¡Å ÒÇ´Òǹ âËŴŧÊÙº Íà ´ MicroCamp ËÅѧ¨Ò¡¹Ñ¹é àÁ×Íè â»Ãá¡ÃÁ¶Ù¡Ãѹ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 33
ËÃ×Í·íÒ§Ò¹ ¼Ù¾ ² Ñ ¹Ò¡çà¾Õ§µÃǨÊͺ¼ÅÅѾ¸ ¢Í§¡Ò÷íÒ§Ò¹ä´ ·¹Ñ ·Õ â´Â¡Òá´ÊÇÔµª SW1 áÅÐ SW2 áÅдټšÒÃà»ÅÕÂè ¹á»Å§·Õè LED â´Â¢Ñ¹é µÍ¹¡ÒôÒǹ âËÅ´áÅз´Êͺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ Áմѧ¹Õé ´ ÇÂ
3.7.1 àÅ×Íè ¹ÊÇÔµª POWER ä»ÂѧµíÒá˹ § ON â´ÂÊѧࡵ LED ÊÕà¢ÕÂǵíÒá˹ § ON µÔ´ÊÇ Ò§
3.7.2 µ ÍÊÒ´Òǹ âËÅ´¨Ò¡ªØ´â»Ãá¡ÃÁ¼ Ò¹¾Íà µÍ¹Ø¡ÃÁ ࢠҡѺ¨Ø´µ Í In System Prog º¹ºÍà ´ MicroCamp 3.7.3 ·Õâè »Ãá¡ÃÁ AVR Studio àÅ×Í¡¤íÒÊÑ§è ·Õáè ¶ºàÁ¹Ù Tool à AVR Prog...
3.7.4 ˹ Òµ Ò§¢Í§â»Ãá¡ÃÁ AVRprog ¨Ð»ÃÒ¡¯¢Ö¹é
äÁ á¹Ð¹íÒãË ¤ÅԡࢠÒä»»ÃѺᵠ§ µÑ Ç àÅ× Í ¡ ã¹ËÑ Ç ¢ Í Advanced
à¹×èͧ¨Ò¡ËÒ¡»ÃѺ¼Ô´¾ÅÒ´ ä Á â ¤ à ¤ Í ¹ â · à Šà Å Í Ã ATmega8 ¨ÐäÁ Ê ÒÁÒö µÔ´µ ÍÊ×èÍÊÒÃáÅÐâ»Ãá¡ÃÁ ´ ǤÍÁ¾ÔÇàµÍÃ ä´ Í¡Õ
34 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
ÃÙ»·Õè 3-1 áÊ´§¡ÒÃàª×èÍÁµ ͺÍà ´ MicroCamp-Mega8 ¡Ñº PX-400áÅФÍÁ¾ÔÇàµÍà à¾×èÍ·íÒ¡Òà ´Òǹ âËÅ´â»Ãá¡ÃÁ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 35
3.7.5 ·ÕËè ¹ Òµ Ò§ AVRprog â´Âã¹ËÑÇ¢ Í Hex file ¤ÅÔ¡·Õ»è ÁØ Browse àÅ×Í¡¾Ò¸·ÕÍè ÂÙ¢ ͧä¿Å Switch_LED.hex à¾×Íè ÃкØÇÒ à» ¹ä¿Å ·¨Õè дÒǹ âËÅ´
3.7.6 ¤ÅÔ¡·Õ»è ÁØ Program ã¹ËÑÇ¢ Í Flash «Ö§è ËÁÒ¶֧ ¡ÒÃÊÑ§è ´Òǹ âËÅ´ä¿Å Switch_LED.hex ŧÊÙµ ÇÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ·Õáè ¼§Ç§¨Ã MicroBOX â´Â¡Ãкǹ¡Ò÷íÒ§Ò¹ËÅÑ¡æ ¤×Í 3.7.6.1 źâ»Ãá¡ÃÁà´ÔÁ·ÕÁè ÍÕ ÂÙ (Erase) 3.7.6.2 ´Òǹ âËÅ´â»Ãá¡ÃÁ (Program) â´Âã¹·Õ¹è ¡Õé ¤ç Í× Switch_LED.hex 3.7.6.3 µÃǨÊͺ¤ÇÒÁ¶Ù¡µ ͧ¢Í§¢ ÍÁÙÅ·Õ´è Òǹ âËÅ´ (Verify) â´Âã¹ÃÐËÇ Ò§¹Õ·é Õè ˹ Òµ Ò§ AVRprog ¨ÐáÊ´§¤ÇÒÁ¤×ºË¹ Ò㹡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ â´Âµ ͧ㪠àÇÅÒªÑÇè ¢³ÐË¹Ö§è ·Ñ駹Õé¢Öé¹ÍÂÙ ¡Ñº¢¹Ò´¢Í§â»Ãá¡ÃÁ·Õè´Òǹ âËÅ´ 3.7.7 àÁ×Íè àÊÃç¨ÊÔ¹é ¢Ñ¹é µÍ¹¡ÒôÒǹ âËÅ´ â»Ãá¡ÃÁ¨Ð¶Ù¡ÃѹÍѵâ¹ÁÑµÔ ãË ·´Åͧ¡´ÊÇÔµª ¡´µÔ´»Å Í SW1 áÅÐ SW2 º¹ºÍà ´ MicroCamp-Mega8 Êѧࡵ¡ÒõԴ´Ñº¢Í§ LED àÁ×Íè ÁÕ¡Òá´ ÊÇÔµª ¨ÐµÔ´áÅдѺÊÅѺ¡Ñ¹ áÅÐàÁ×Íè ¡´ÊÇÔµª ¤Ò §äÇ ¨Ðà» ¹·íÒãË LED ·Õµè Òí á˹ §¹Ñ¹é à¡Ô´¡ÒáоÃÔº Í ҧµ Íà¹×Íè § ¨Ò¡¢Ñ鹵͹µ Ò§æ ·Õèä´ Í¸ÔºÒÂÁÒ¹Õéà» ¹µÑÇÍ ҧ«Öè§ÊÒÁÒö¹íÒä»ãª à» ¹ËÅѡ㹡ÒþѲ¹Ò â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺºÍà ´ MicroCamp-Mega8 «Ö§è ¨ÐÁÕµÇÑ Í ҧ¡Ò÷´ÊͺáÅз´ÅͧÍÕ¡¹Ñº¨Ò¡ º·¹Õàé » ¹µ ¹ä» ÃÇÁ件֧Âѧ㪠㹡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺâ¤Ã§§Ò¹µ Íä»ä´ ´Ç  à¾Õ§ᵠ¼Ù ¾Ñ²¹Ò ¨Ðµ ͧ´íÒà¹Ô¹¡ÒÃ¢Ñ¹é µÍ¹µ Ò§æ ãË ¶¡Ù µ ͧ´ Ç â´Â੾ÒÐã¹¢Ñ¹é µÍ¹¡ÒÃÊà ҧä¿Å ¼§Ñ §Ò¹ËÃ×Íâ»Ãà¨ç¡µ «Ö§è µ ͧÁÕ¡Òü¹Ç¡ä¿Å äźÃÒÃÕµÒ § æ ·Õàè ¡ÕÂè Ç¢ ͧ â´Â¨ÐÊà ҧ¢Ö¹é ¨Ò¡äźÃÒÃÕµè ÇÑ Í ҧËÃ×ͨҡ¼Ùã ª §Ò¹ à¢Õ¹¢Öé¹ÁÒàͧ¡çä´
36 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 37
º··Õè 4
¿ §¡ ª¹Ñè áÅÐäźÃÒÃÕã¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ MicroCamp-Mega8 ã¹â»Ãá¡ÃÁÀÒÉÒ C ¹Ñ¹é ÁÕ¿§ ¡ ª¹Ñè ËÅÑ¡·Õàè ÃÕÂ¡Ç Ò main â»Ãá¡ÃÁËÃ×ͺҧ¤Ãѧé àÃÕÂ¡Ç Ò Ê Ç¹ â»Ãá¡ÃÁËÅÑ¡ à» ¹Ê ǹ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹äÅ àÃÕ§价ÕÅФíÒÊѧè áÅШСÃÐⴴ仡ÃзíÒ¤íÒÊѧè ÀÒ 㹿 §¡ ª¹Ñè Í×¹è æ ·ÕÁè ¡Õ ÒûÃСÒÈäÇ ãË Ã¨Ù ¡Ñ ÀÒÂã¹â»Ãá¡ÃÁàÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¹Ñ¹é æ ÀÒÂã¹ Ê Ç¹¢Í§â»Ãá¡ÃÁËÅÑ¡ ËÅѧ¨Ò¡¡ÃзíÒ¤íÒÊÑè§ÀÒÂ㹿 §¡ ªÑè¹·Õè¶Ù¡àÃÕ¡àÃÕºà ÍÂáÅ Ç ¡ç¨Ð¡ÅѺࢠÒÁÒ ã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡·Õè·íÒ§Ò¹¤ Ò§ÍÂÙ ËÃ×ͤíÒÊÑ觷ÕèÍÂÙ ¶Ñ´ä» ¹Í¡¨Ò¡¹ÕéÀÒÂ㹿 §¡ ªÑè¹àͧ¡çÂѧ ÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹Í×è¹æ ä´ ´ Ç ´Ñ§¹Ñ鹡Ò÷íÒ§Ò¹¡Ñº¿ §¡ ªÑ蹨֧¶×ÍÇ Òà» ¹Ê ǹ·ÕèÁÕº·ºÒ· ÊíÒ¤Ñ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C àÅ·Õà´ÕÂÇ
4.1 ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ÁÕÃٻẺ´Ñ§¹Õé return_type
function_name(parameter1, parameter2, ...)
{ command_list 1; .................... .................... command_list n; }
â´Â·Õè ¤×Í ª×Íè ¢Í§¿ §¡ ª¹Ñè return_type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙÅ·ÕÁ è ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ áÅÐÀÒÂ㹿 §¡ ª¹Ñè ª¹Ô´¹Õ¨é Р㪠¤Òí Êѧè return(value) à¾×Íè Ê §¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ «Ö§è ª¹Ô´¢Í§¢ ÍÁÙÅ value ·ÕÊè § ÍÍ¡ÁÒ¤ÇèÐà» ¹ª¹Ô´ à´ÕÂǡѺ return_type à¾×Íè » ͧ¡Ñ¹¤ÇÒÁ¼Ô´¾ÅÒ´·ÕÍè Ò¨à¡Ô´¨Ò¡¡ÒÃÃѺ¢ ÍÁÙÅ ÊíÒËÃѺ¿ §¡ ª¹Ñè ·Õäè Á Á¡Õ Òä׹¤ Ò (return value) ·Õµè Òí á˹ § return_type ¨Ðµ ͧ»ÃСÒÈà» ¹ void function_name
38 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤×Í Ê Ç¹·ÕÁè ¡Õ ÒûÃСÒȪ¹Ô´¢ ÍÁÙÅáÅЪ×Íè ¢Í§µÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¤ Ò·ÕÊè § ¼ Ò¹ãË ¡Ñº¿ §¡ ª¹Ñè ÍÒ¨¨ÐÁÕ 1 µÑÇ ËÃ×ÍËÅÒÂæ µÑÇ¡çä´ ËÃ×ÍÍÒ¨äÁ ÁàÕ Å¡çä´ ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒÃ㪠§Ò¹¢Í§¿ §¡ ª¹Ñè ¹Ñ¹é æ ¶ ÒËÒ¡¿ §¡ ªÑ¹è äÁ ÁÕ parameter ÃѺ¤ Ò ÍÒ¨¨Ð»ÃСÒÈà» ¹ void ËÃ×ÍàÇ ¹Ç Ò§äÁ »ÃСÒÈ¡çä´ parameter
command_list 1... command_list n
1 ¤íÒÊÑ§è ¨Ðµ ͧ» ´· Ò´ ÇÂà¤Ã×Íè §ËÁÒ ; àÊÁÍ
¤×Í ¤íÒÊÑ§è µ Ò§æ ·ÕÁè ÍÕ ÂÙã ¹¿ §¡ ª¹Ñè «Ö§è àÁ×Íè ¨º
ËÁÒÂà赯 ·Õµè Òí á˹ §¢Í§ value ¹Ñ¹é ÍҨ໠¹¤ Ò¤§·Õ,è µÑÇá»Ã, ËÃ×ͼÅÅѾ¸ ¨Ò¡¡Ò÷íÒ¤íÒÊѧè ã´æ ¡çä´
ÊíÒËÃѺ¿ §¡ ªÑè¹·ÕèÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¹Ñé¹ ¨ÐÁÕ¤íÒÊÑè§ return ÊíÒËÃÑºÊ §¤ Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡ÁÕ ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑ蹴ѧ¡Å ÒÇ ÁÕÃٻẺ´Ñ§¹Õé return(data);
â´Â·Õè data ¤×Í ¢ ÍÁÙÅ·Õ¤è ¹× ¤ Ò¼ÅÅѾ¸ ¤ÇÃÁÕª¹Ô´¢ ÍÁÙÅẺà´ÕÂǡѺ return_type ¢Í§¿ §¡ ª¹Ñè ÁÔ àª ¹¹Ñ¹é ÍÒ¨·íÒãË à¡Ô´¢ ͼԴ¾ÅÒ´·Õàè ¡Ô´¨Ò¡ª¹Ô´¢ ÍÁÙÅä´
4.2 ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè 㹡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ·Õäè ´ ¶¡Ù Êà ҧ¢Ö¹é ËÃ×ÍÁÕ¡ÒûÃСÒÈäÇ àÃÕºà ÍÂáÅ Ç ÊÒÁÒöàÃÕÂ¡ãª ä´ ÀÒÂ㹿 §¡ ª¹Ñè main ËÃ×ÍÀÒ¿ §¡ ª¹Ñè Í×¹è æ µÒÁ¤ÇÒÁàËÁÒÐÊÁ â´Â㹡ÒÃàÃÕ¡㪠¡àç ¾Õ§àÃÕ¡ª×Íè ¢Í§¿ §¡ ª¹Ñè ¹Ñ¹é æ áÅСíÒ˹´¤ Ò¢ ÍÁÙÅà¾×Íè Ê §ãË ¡ºÑ ¾ÒÃÒÁÔàµÍà â´Âµ ͧ¡íÒ˹´ãË àËÁÒÐÊÁ¡Ñºª¹Ô´ ¢ ÍÁÙÅáÅж١µ ͧµÒÁÅíҴѺ¢Í§¾ÒÃÒÁÔàµÍà ·ÕèÁÕ¡ÒûÃСÒÈäÇ ´ Ç ¨ÐàÃÕ¡¢ ÍÁÙÅ·ÕèÊ §¼ Ò¹ä»ãË ¾ÒÃÒÁÔàµÍà ¹ÇÕé Ò ÍСÔÇàÁ¹µ ÃٻẺ¡ÒÃàÃÕ¡¿ §¡ ªÑè¹ function_name(agument1, agument2,...)
â´Â·Õè
function_name
¤×Í ª×Íè ¢Í§¿ §¡ ª¹Ñè ·Õµè Í §ÁÕ¡ÒûÃСÒÈäÇ ¡Í ¹Ë¹ Ò¹Õáé Å Ç
¤×Í ¤×ͤ Ò¢ ÍÁÙÅ·ÕÊè § ¼ Ò¹ä»ãË ¡ºÑ µÑÇá»Ã parameter ã¹¢³ÐàÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Ñ¹é æ â´ÂÁռŵ ÍÅíҴѺ㹡ÒÃãÊ ¤Ò ´ Ç ᵠ¶Ò ËÒ¡¿ §¡ ª¹Ñè ·Õàè ÃÕ¡㪠§Ò¹à» ¹áººäÁ Á¾Õ ÒÃÒÁÔàµÍà ¡çäÁ µÍ §ãÊ ¤Ò ÍСÔÇàÁ¹µ agument
ÊíÒËÃѺ¿ §¡ ªÑè¹·ÕèÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ àÁ×èÍÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¨Ð¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒûÃÐÁÇÅ ¼ÅºÒ§Í ҧÀÒÂ㹿 §¡ ª¹Ñè «Ö§è ª¹Ô´¢Í§¢ ÍÁÙÅ·Õ¤è ¹× ¤ ÒÍÍ¡Áҹѹé ÊÒÁÒö´Ùä´ ¨Ò¡Ê ǹ return_type ¢Í§¡ÒûÃСÒÈ¿ §¡ ªÑè¹ â´Â㹺ҧ¤ÃÑé§ÍÒ¨ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧ㪠µÑÇá»Ã¹íÒÁÒÃѺ¤ Ò¼ÅÅѾ¸ ¹Ñé¹ «Öè§ µÑÇá»Ã´Ñ§¡Å ÒǤÇÃÁÕª¹Ô´¢ ÍÁÙÅẺà´ÕÂǡѺ return_type ¢Í§¿ §¡ ªÑè¹ ÁÔઠ¹¹Ñé¹ÍÒ¨·íÒãË à¡Ô´ ¢ ͼԴ¾ÅÒ´·Õèà¡Ô´¨Ò¡ª¹Ô´¢ ÍÁÙÅä´
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 39
µÑÇÍ ҧ·Õè 4-1
»ÃСÒÈ¿ §¡ ª¹Ñè
void tone(void) { sound(3000,100);
//
sleep(1000);
//
sound(3000,100);
//
¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ÃÐÂÐàÇÅÒ 0.1 ÇÔ¹Ò·Õ ¤ÇÒÁ¶Õè 3 kHz ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ÃÐÂÐàÇÅÒ 0.1 ÇÔ¹Ò·Õ ¤ÇÒÁ¶Õè 3 kHz
}
¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ª×Íè tone ·Õäè Á Á¡Õ Òä׹¤ Ò¼ÅÅѾ¸ áÅÐäÁ Á¾Õ ÒÃÒÁÔàµÍà ÀÒÂ㹿 §¡ ªÑ¹è à» ¹¡ÒáíÒ˹´ãË ¡Òí à¹Ô´ÊÑÒ³àÊÕ§ 0.1 ÇÔ¹Ò·ÕáÅ Ç˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é àÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´àÊÕ§¹ÕÍé ¡Õ ¤Ãѧé ÊÒÁÒö¹íÒÁÒàÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ä´ ´§Ñ ¹Õé void main() { ................
//
tone();
//
...............
//
¤íÒÊѧè ã´æ àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ¤íÒÊѧè ã´æ
tone
}
¢ ͤÇ÷ÃÒº : ËÒ¡µ ͧ¡Ò÷´ÊͺµÑÇÍ ҧ¹Õµé Í §ãª §Ò¹Ã ÇÁ¡ÑºäźÃÒÃÕè sound.h áÅÐ sleep.h ´ ÇÂ
µÑÇÍ ҧ·Õè 4-2
»ÃСÒÈ¿ §¡ ª¹Ñè
void tone(unsigned int delay) { sound(3000,100);
//
sleep(delay);
//
sound(3000,100);
//
¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ÃÐÂÐàÇÅÒ 0.1 ÇÔ¹Ò·Õ ¤ÇÒÁ¶Õè 3 kHz ˹ ǧàÇÅÒ µÒÁ¤ Ò¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ ¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ÃÐÂÐàÇÅÒ 0.1 ÇÔ¹Ò·Õ ¤ÇÒÁ¶Õè 3 kHz
}
¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ª×Íè tone ·Õäè Á Á¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ áÅÐÁÕ¡ÒÃÃѺ¤ ÒÊ §¼ Ò¹ ¾ÒÃÒÁÔàµÍà ·ªÕè Í×è delay «Ö§è ÀÒÂ㹿 §¡ ª¹Ñè à» ¹¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ áÅ Ç˹ ǧàÇÅÒµÒÁ¤ Ò¢ ÍÁÙÅ ¢Í§¾ÒÃÒÁÔàµÍà delay ã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ áÅ ÇàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑÒ³àÊÕ§ ÍÕ¡¤Ãѧé Ë¹Ö§è µÑÇÍ ҧàÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ä´ ´§Ñ ¹Õé void main(void) { ................
//
tone(200);
//
...............
//
¤íÒÊѧè ã´æ àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè tone áÅÐ˹ ǧàÇÅÒÃÐËÇ Ò§àÊÕ§ 200 ÁÔÅÅÔÇ¹Ô Ò·Õ ¤íÒÊѧè ã´æ
}
¢ ͤÇ÷ÃÒº : ËÒ¡µ ͧ¡Ò÷´ÊͺµÑÇÍ ҧ¹Õµé Í §ãª §Ò¹Ã ÇÁ¡ÑºäźÃÒÃÕè sound.h áÅÐ sleep.h ´ ÇÂ
40 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
4.3 äźÃÒÃÕ (Library) äźÃÒÃÕ ¤×Í ä¿Å ·ÃÕè ǺÃÇÁËÃ×ͺÃèؿ§ ¡ ª¹Ñè äÇ ã¹µÑÇà¾×Íè ¨Ñ´ËÁÇ´ËÁÙ¿ § ¡ ª¹Ñè ·ÕÁè ÅÕ ¡Ñ ɳСÒà 㪠§Ò¹¡ÅØ ÁËÃ×Í»ÃÐàÀ·à´ÕÂǡѹ¶Ù¡¨Ñ´à¡çºäÇ ã¹·Õèà´ÕÂǡѹ Ê Ç¹ãË áÅ ÇÁÑ¡¨ÐµÑ駪×èÍä¿Å äźÃÒÃÕ¹Õé ãË ÊÍ´¤Å ͧ¡Ñº¡ÅØ Á¢Í§¿ §¡ ªÑè¹ËÃ×Í¡ÒÃ㪠§Ò¹ áÅЧ Òµ Í¡ÒÃàÃÕ¡㪠㹤ÃÑ駵 Íä» ¿ §¡ ª¹Ñè ¡ÅØÁ à´ÕÂǡѹ·ÕÁè ¡Ñ ãª §Ò¹º ÍÂæ 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤ÇùíÒÁÒÊà ҧ໠¹ä¿Å äźÃÒÃÕ áÅШѴà¡çºäÇ àÁ×Íè µ ͧ¡ÒÃ㪠§Ò¹¡çà¾Õ§»ÃСÒÈâ»Ãâµä·» (prototype) ¢Í§ª×Íè ä¿Å äźÃÒÃÕ·ÊÕè à ҧäÇ ¡ ͹˹ Ò¹Õé à¾×Íè ¼¹Ç¡ä¿Å äźÃÒÃÕãË ÃÇ Á·íÒ§Ò¹¡Ñºâ»Ãá¡ÃÁ·Õ¡è Òí Åѧ¾Ñ²¹ÒÍÂÙ ·íÒãË ÊÒÁÒöàÃÕ¡㪠§Ò¹ ¿ §¡ ª¹Ñè ·Õºè ÃèØÍÂÙÀ ÒÂã¹ä¿Å äźÃÒÃÕ´§Ñ ¡Å ÒÇä´ (¢Ñ¹é µÍ¹àËÅ Ò¹Õ¨é ж١àª×Íè Á⧡ѹÃÐËÇ Ò§ AVR Studio áÅÐ WinAVR â´Â¼Ù¾ ² Ñ ¹Ò¨Ðµ ͧÃкؾҸ¢Í§äźÃÒÃÕ·àÕè ÃÕ¡㪠ãË ¡ºÑ AVR Studio ÍÕ¡·Í´Ë¹Ö§è )
4.3.1 ¡ÒÃÊà ҧäźÃÒÃÕ ¡ÒÃÊà ҧäźÃÒÃÕã¹·Õ¹è ¨Õé ФŠÒÂæ ¡Ñº¡ÒÃÊà ҧä¿Å â»Ãá¡ÃÁÀÒÉÒ C ·Õàè » ¹ä¿Å ¹ÒÁÊ¡ØÅ .c µÒÁ»¡µÔ µ Ò§¡Ñ¹µÃ§·Õè ä¿Å äźÃÒÃÕ¨ÐäÁ ÁâÕ »Ãá¡ÃÁËÅÑ¡ (¿ §¡ ª¹Ñè main) ÁÕ੾ÒеÑÇ¿ §¡ ª¹Ñè µ Ò§æ ·Õèµ Í§¡ÒúÃèØŧã¹ä¿Å äźÃÒÃÕ áÅкѹ·Ö¡ãË à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .h á·¹ ÊÁÁµÔÇÒ µ ͧ¡ÒÃÊà ҧä¿Å äźÃÒÃÕªÍ×è func_math â´Â·ÕÀè ÒÂ㹺Ãèؿ§ ¡ ª¹Ñè sum áÅÐ mul ·Õèà¤Âà» ¹µÑÇÍ ҧ¡ ͹˹ Ò¹Õé ¨Ð·íÒä´ ´Ñ§¹Õé (1) à» ´ä¿Å ãËÁ ¨Ò¡àÁ¹Ù¤Òí Êѧè File à New File à¾×Íè à» ´Ë¹ Òµ Ò§ãËÁ (2) ¾ÔÁ¾ ¿§ ¡ ª¹Ñè Blink ŧã¹Ë¹ Òµ Ò§¢Í§ä¿Å ãËÁ ´§Ñ ¹Õé void sleep(unsigned int ms) { unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<795;j++); } void blink(unsigned int cnt) { unsigned int _cnt=0; DDRC |= _BV(5); // while(_cnt < (cnt*2)) // { PORTC ^= _BV(5); // sleep(300); // _cnt++; } }
Set PC5 ==> Output Test Counter Toggle PC5 bit Delay 0.3 Second
(3) ¨Ò¡àÁ¹Ù¤Òí Êѧè File à Save As... ËÅѧ¨Ò¡¹Ñ¹é ¨Ñ´à¡çºä¿Å äÇ ã¹¾Ò¸·Õµè Í §¡ÒÃâ´ÂµÑ§é ª×Íè à» ¹ led1.h ´Ñ§¹Ñ¹é 㹤ÃÑ§é µ Í仼پ ² Ñ ¹ÒÊÒÁÒöàÃÕ¡㪠§Ò¹ led1.h ã¹ÃٻẺä¿Å äźÃÒÃÕä´ áÅ Ç
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 41
4.3.2 ¡ÒÃàÃÕ¡㪠äźÃÒÃÕ ËÅѧ¨Ò¡·Õ¼è ¾Ù ² Ñ ¹Òä´ Êà ҧä¿Å äźÃÒÃÕáÅШѴà¡çºàÃÕºà ÍÂáÅ Ç ¼Ù¾ ² Ñ ¹ÒÊÒÁÒöàÃÕ¡㪠§Ò¹ ¿ §¡ ª¹Ñè ·Õºè ÃèØÍÂÙÀ ÒÂã¹ä¿Å äźÃÒÃÕã´æ ä´ â´Â¼¹Ç¡ä¿Å äźÃÒÃÕ¹¹Ñé ´ Ç¡ÒûÃСÒÈä´àÃ硵տäÇ ã¹Ê ǹáá¢Í§â»Ãá¡ÃÁ´Ñ§¹Õé #include
<library_filename>
#include
“library_filename”
ËÃ×Í â´Â·Õè
library_filename
¤×Í ª×Íè ä¿Å äźÃÒÃÕ··Õè Òí ¡ÒûÃСÒÈ
ઠ¹ #include <led1.h>
»ÃСÒÈãË Ã¨Ù ¡Ñ ¿ §¡ ª¹Ñè ÀÒÂã¹ä¿Å äźÃÒÃÕ·ªÕè Í×è led1
¡ÒûÃСÒÈâ´Â㪠ä´àáµÕ¿ #include ·íÒãË â»Ãá¡ÃÁÃÙ¨ ¡Ñ ¡Ñº¿ §¡ ª¹Ñè ÀÒÂã¹äźÃÒÃÕ··Õè Òí ¡Òà »ÃСÒÈ àÁ×Íè àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ·ÕÍè ÂÙÀ ÒÂã¹äźÃÒÃÕ¹¹Ñé æ áÅ Ç ¨Ð·íÒãË Á¡Õ ÒÃá»Å¤ÇÒÁËÁÒÂáÅзíÒ ¡ÒÃàª×Íè ÁâÂ§ä´ ¶¡Ù µ ͧ µ Íä»à» ¹µÑÇÍ ҧ¡Ò÷´ÊͺàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè blink() ¨Ò¡äźÃÒÃÕ led1.h ·Õäè ´ á¹Ð ¹íÒ¡ÒÃÊà ҧáÅШѴà¡çºäÇ ¡ ͹˹ Ò¹ÕéáÅ Ç µÑÇÍ ҧ·Õè 4-6
(1) Êà ҧâ»Ãà¨ç¡µ ãËÁ ªÍ×è test_lib
(2) ¾ÔÁ¾ â»Ãá¡ÃÁŧã¹Ë¹ Òµ Ò§¢Í§ä¿Å test_lib.c #include <in_out.h> #include <led1.h> void main() { blink(10); }
// Standard Library // get blink function from here
// Blink LED 10 times
¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ â»Ãá¡ÃÁ test_lib ¨ÐàÃÕ¡㪠§Ò¹äźÃÒÃÕè 2 µÑÇ µÑÇáá໠¹äźÃÒÃÕÁè ҵðҹà¾×Íè µÔ´µ ͡Ѻ¢Ò¾Íà µ¢Í§ ATmega8 ÊíÒËÃѺäźÃÒÃÕµè ÇÑ ·Õè 2 ä´ ¨Ò¡¡ÒÃÊà ҧ led1.h ¢Ñ¹é ÁÒ â´Â¨ÐÁÕ¿§ ¡ ª¹Ñè ÀÒÂã¹äźÃÒÃÕè 2 µÑǤ×Í ¿ §¡ ª¹Ñè blink ·íÒ˹ Ò·Õ¡ è Òí ˹´¢Ò¢Í§¾Íà µ PC5 «Ö§è à» ¹¢Ò·Õãè ª µÍ LED ãË à» ¹¢ÒàÍÒµ ¾µØ ¨Ò¡¹Ñ¹é Êѧè ãË ¢Ò¹Õàé » ¹Åͨԡ 0 áÅÐ 1 ÊÅѺ¡Ñ¹ä»ÁÒ ¤Ñ¹è ´ Ç¿ §¡ ª¹Ñè sleep() à¾×Íè ˹ ǧàÇÅÒ¡ÒÃáÊ´§¼Å LED ÊíÒËÃѺ¿ §¡ ª¹Ñè blink() ¨Ð¡Ð¾ÃÔº LED 仨¹¡ÃÐ·Ñ§è ¤Ãº¨íҹǹ¤ÃÑ§é µÒÁ¤ ҢͧµÑÇá»Ã·ÕÊè § ÁÒ¨Ò¡¿ §¡ ª¹Ñè
42 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
(3) ¡íÒ˹´¾Ò¸ãË ¡ÑºäźÃÒÃÕ led1.h ¨Ò¡àÁ¹Ù Project à Configuration Options áÅ ÇàÅ×Í¡ äͤ͹ Include Directories ËÅѧ¨Ò¡¹Ñ¹é ¡íÒ˹´¾Ò¸à¾×Íè Áͧä»Âѧä¿Å led.h (4) ·íÒ¡ÒäÍÁä¾Å â´ÂÊѧè Build â»Ãà¨ç¡µ à¾×Íè ãË ä´ ä¿Å ¼ÅÅѾ¸ test_lib.hex (5) ´Òǹ âËÅ´ test_lib.hex (6) ´Ù¼ÅÅѾ¸ ·Õè LED ¨ÐÁÕ¡ÒáоÃԺ໠¹¨íҹǹ 10 ¤ÃÑ§é µÒÁ·ÕÃè кØã¹â»Ãá¡ÃÁ
4.4 ª¹Ô´¢Í§¢ ÍÁÙÅáÅСÒûÃСÒȵÑÇá»Ãã¹ÀÒÉÒ C WinAVR ·Õàè » ¹â»Ãá¡ÃÁ C ¤ÍÁä¾àÅÍÃ ä´ ¾² Ñ ¹ÒÁÒ¨Ò¡ AVR-GCC ´Ñ§¹Ñ¹é ª¹Ô´¢Í§¢ ÍÁÙÅ ¨Ðà» ¹ä»µÒÁ¡ÒáíÒ˹´¨Ò¡ AVR-GCC «Ö§è ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé ª¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã char unsigned char int unsigned int long unsigned long long long
¢¹Ò´¢ ÍÁÙÅ à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 8 ºÔµáºº¤Ô´à¤Ã×Íè §ËÁÒ ÁÕ ¤Ò ã¹ ª ǧ -128 ¶Ö§ +127 à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 8 ºÔµ ẺäÁ ¤´Ô à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ ª ǧ 0 ¶Ö§ +255 à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 16 ºÔµ Ẻ¤Ô´à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ ª ǧ -32,768 ¶Ö§ +32,767 à» ¹¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 16 ºÔµ ẺäÁ ¤´Ô à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ +65535 à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 32 ºÔµ Ẻ¤Ô´à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ ª ǧ -2,147,483,648 ¶Ö§ +2,147,483,647 à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 32 ºÔµ ẺäÁ ¤´Ô à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ +4294967295 à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 64 ºÔµ Ẻ¤Ô´à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ ª ǧ -9223372036854775808 ¶Ö§ + 9223372036854775807
unsigned long long
à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁ¢¹Ò´ 64 ºÔµ ẺäÁ ¤´Ô à¤Ã×Íè §ËÁÒ ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ +18446744073709551616
float áÅÐ double
à» ¹ª¹Ô´¢ ÍÁÙÅ¢¹Ò´ 32 ºÔµ 㪠᷹¢ ÍÁÙŨíҹǹ¨ÃÔ§·Õàè » ¹àÅ¢·È¹ÔÂÁ
arrays
¡ÅØÁ ¢ ÍÁÙÅËÃ×Í¡ÅØÁ ¢Í§µÑÇá»Ã·Õ¶è ¡Ù »ÃСÒÈ¢Ö¹é â´ÂÁÕª¹Ô´¢ ÍÁÙÅàËÁ×͹¡Ñ¹áÅÐÁÕáÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒµ ͡ѹ
pointers
à» ¹ª¹Ô´¢ ÍÁÙÅ·Õãè ª ÍÒ §ÍÔ§¶Ö§áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒ
structures
à» ¹¡ÒèѴ¡ÅØÁ ¢ ÍÁÙÅ·ÕÁè ¤Õ ÇÒÁᵡµ Ò§ª¹Ô´¡Ñ¹ä´
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 43
4.5 ÃкºµÑÇàÅ¢°Ò¹ã¹ÀÒÉÒ C ÃкºµÑÇàÅ¢·Õãè ª ã¹â»Ãá¡ÃÁÀÒÉÒ C ÁÕ´Ç Â¡Ñ¹ 3 Ẻ¤×Í 1. µÑÇàÅ¢°Ò¹ÊÔº 㪠¡íÒ˹´¤ ÒãË ¡ÑºµÑÇá»ÃËÃ×Í¡Òäíҹǹã¹â»Ãá¡ÃÁä´ ·ÑèÇæä» 2. µÑÇàÅ¢°Ò¹Êͧ ÁÕû٠Ẻ¡ÒÃà¢Õ¹¤×Í 0bBBBBBBBB â´Â·Õè B ¤×͵ÑÇàÅ¢ 0 ËÃ×Í 1 3. µÑÇàÅ¢°Ò¹ÊԺˡ ÁÕû٠Ẻ¡ÒÃà¢Õ¹¤×Í 0xHHHHHHHH â´Â·Õè H ¤×͵ÑÇàÅ¢ 0-9 áÅÐ A-F µÑÇÍ ҧ·Õè 4-7
àÅ¢°Ò¹Êͧ 8 ºÔµàª ¹ 0b10010010 à·Õº෠ҡѺ 146 °Ò¹ÊÔº ¤íҹdz¨Ò¡ (1x27) + (0x26) + (0x25) + (1x24) + (0x23) + (0x22) + (1x21) + (0x20) = 14610
µÑÇÍ ҧ·Õè 4-8
àÅ¢°Ò¹Êͧ 16 ºÔµ ઠ¹ 0b1111010011101101 à·Õº෠ҡѺ 62701 °Ò¹ÊÔº ¤íҹdz¨Ò¡ (1x215) + (1x214) + (1x213) + (1x212) + (0x211) + (1x210) + (0x29) + (0x28) + (1x27) + (1x26) + (1x25) + (0x24) + (1x23) + (1x22) + (0x21) + (1x20) = 6270110
ÊÒÁÒöà·Õºà¤Õ§µÑÇàÅ¢·Ñé§ 3 °Ò¹ä´ ´Ñ§¹Õé °Ò¹ÊÔº 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
°Ò¹ÊԺˡ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
°Ò¹Êͧ 0b0000 0b0001 0b0010 0b0011 0b0100 0b0101 0b0110 0b0111 0b1000 0b1001 0b1010 0b1011 0b1100 0b1101 0b1110 0b1111
44 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
µÑÇÍ ҧ·Õè 4-9
àÅ¢°Ò¹ÊԺˡ ઠ¹ 0xFF à·Õº෠ҡѺ 255 °Ò¹ÊÔº ¤íҹdz¨Ò¡ (15x161) + (15*160) = 25510 ËÃ×Íà·ÕÂºä´ ¡ºÑ àÅ¢°Ò¹Êͧ 0xFF à 0b11111111
µÑÇÍ ҧ·Õè 4-10
àÅ¢°Ò¹ÊԺˡ ઠ¹ 0x31 à·Õº෠ҡѺ 49 °Ò¹ÊÔº ¤íҹdz¨Ò¡ (3x161) + (1x160) = 4910 ËÃ×Íà·ÕÂºä´ ¡ºÑ àÅ¢°Ò¹Êͧ 0x31 à 0b00111111
4.6 ¡ÒûÃСÒȵÑÇá»Ã ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ WinAVR ¨ÐàËÁ×͹¡Ñº¡ÒûÃСÒȵÑÇá»Ãã¹ ÀÒÉÒ C ·ÑÇè ä» â´ÂÁÕû٠Ẻ¡ÒûÃСÒȴѧ¹Õé type variable_name;
â´Â·Õè
¤×Í ª¹Ô´¢ ÍÁÙżÅÅѾ¸ ·µÕè Í §¡ÒáíÒ˹´ variable_name ¤×Í ª×Í è µÑÇá»Ã·Õ»è ÃСÒÈ type
ઠ¹ int a;
//
long result;
//
float start;
//
int x,y;
//
float p,q,r;
//
»ÃСÒȵÑÇá»Ãª×Íè a ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº int »ÃСÒȵÑÇá»Ãª×Íè result ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº long »ÃСÒȵÑÇá»Ãª×Íè start ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº float »ÃСÒȵÑÇá»Ã 2 µÑǤ×Í x áÅÐ y ª¹Ô´¢ ÍÁÙÅà» ¹ int »ÃСÒȵÑÇá»Ã 3 µÑǤ×Í p,q áÅÐ r ª¹Ô´¢ ÍÁÙÅẺ float
¹Í¡¨Ò¡¹Õ¶é Ò µ ͧ¡ÒûÃСÒȵÑÇá»Ã¾Ã ÍÁ¡Ñº¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ (initial value) ¡çÊÒÁÒö ·íÒä´ àª ¹ int x=100;
// //
int x=15,y=78;
// //
long p=47L,q=31L;
// //
»ÃСÒȵÑÇá»Ãª×Íè x ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº int áÅСíÒ˹´¤ ÒàÃÔÁè µ ¹à» ¹ 100 »ÃСÒȵÑÇá»Ãª×Íè x áÅÐ y ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅẺ int ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË x=15 áÅÐ y=78 »ÃСÒȵÑÇá»Ãª×Íè p áÅÐ q ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅẺ long ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË p à» ¹ 47 áÅÐ q à» ¹ 31
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 45
4.7 ¡ÒÃá»Å§ª¹Ô´¢Í§¢ ÍÁÙŠ㹺ҧ¡Ã³Õ ÁÕ ¤ ÇÒÁ¨í Ò à» ¹ µ Í §à»ÅÕè  ¹á»Å§ª¹Ô ´ ¢ Í ÁÙ Å ¢Í§µÑ Ç á»Ã·Õè ä ´ » ÃСÒÈäÇ á Å Ç ÊÒÁÒö·íÒä´ ´Ñ§¹Õé ÃٻẺ (type)variable
â´Â·Õè
¤×Í ª¹Ô´¢ ÍÁÙżÅÅѾ¸ ·µÕè Í §¡Òà variable ¤×Í µÑÇá»Ã·Õµ è Í §¡ÒèÐà»ÅÕÂè ¹á»Å§ª¹Ô´¢Í§¢ ÍÁÙÅ type
µÑÇÍ ҧ·Õè 4-11 int x=100; float y=43.67,z; z = y+(float)x ;
»ÃСÒȵÑÇá»Ã x Ẻ int áÅСíÒ˹´¤ ÒãË à· Ò¡Ñº 100 // »ÃСÒȵÑÇá»Ã y áÅÐ z Ẻ float áÅСíÒ˹´¤ ÒãËé y ෠ҡѺ 43.67 // ãË z à¡çº¤ ҼźǡÃÐËÇ Ò§ y ¡Ñº x áµ ª¹Ô´¢ ÍÁÙŢͧ x à» ¹áºº int // «Ö§è ᵡµ Ò§¡Ñº y áÅÐ z // ¨Ö§µ ͧá»Å§ª¹Ô´¢ ÍÁÙŢͧ x ãË à» ¹ float ã¹Ê ǹ¢Í§ (float)x é ¼ÅÅѾ¸ ·äÕè ´ ¤Í× z ¨ÐÁÕ¤Ò à· Ò¡Ñº 143.67 // ´Ñ§¹Ñ¹ //
µÑÇÍ ҧ·Õè 4-12 int a=50; long b=23L,c; c = b*(long)a;
»ÃСÒȵÑÇá»Ã a Ẻ int áÅСíÒ˹´¤ ÒãË à· Ò¡Ñº 50 // »ÃСÒȵÑÇá»Ã b áÅÐ c Ẻ long áÅСíÒ˹´¤ ÒãË b ෠ҡѺ 23 // ãË c à¡çº¤ ҼŤٳÃÐËÇ Ò§ b ¡Ñº c // áµ à¹×Í è §¨Ò¡ª¹Ô´¢ ÍÁÙŢͧ a à» ¹ int «Ö§è ᵡµ Ò§¡Ñº b áÅÐ c // ¨Ö§µ ͧá»Å§ª¹Ô´¢ ÍÁÙŢͧ a ãË à» ¹ long ã¹Ê ǹ¢Í§ (long)a é ¼ÅÅѾ¸ ·äÕè ´ ¤Í× c ෠ҡѺ 1150 // ´Ñ§¹Ñ¹ //
µÑÇÍ ҧ·Õè 4-13 float p=50.736;
//
»ÃСÒȵÑÇá»Ã p Ẻ float áÅСíÒ˹´¤ ÒãË à· Ò¡Ñº 50.763
int q=60,result;
//
»ÃСÒȵÑÇá»Ã q áÅÐ result Ẻ int áÅСíÒ˹´ãË q ෠ҡѺ 60
result = q+(int)p;
ãË result à¡çº¤ ҼźǡÃÐËÇ Ò§ q ¡Ñº p // áµ ª¹Ô´¢ ÍÁÙŢͧ p à» ¹áºº float «Ö§è ᵡµ Ò§¡Ñº q áÅÐ result // ¨Ö§¨íÒà» ¹µ ͧÁÕ¡ÒÃá»Å§ª¹Ô´¢ ÍÁÙŢͧ p ãË ä»à» ¹ int ã¹Ê ǹ¢Í§ // (int)p ·íÒãË ¤Ò ãËÁ ¢Í§ p à» ¹ 50 ¡ÒÃá»Å§¨Ð㪠੾ÒШíҹǹàµçÁ // ´Ñ§¹Ñ¹ é ¼ÅÅѾ¸ ·äÕè ´ ¤Í× result ¨ÐÁÕ¤Ò à· Ò¡Ñº 110 //
46 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
4.8 ÃÒÂÅÐàÍÕ´¢Í§µÑÇá»ÃẺµ Ò§æ 4.8.1 µÑÇá»Ãª¹Ô´ÍÐàà(array) µÑÇá»Ãª¹Ô´ÍÐàà¤×Í ¡ÅØ Á¢Í§µÑÇá»Ã·ÕèÁÕª¹Ô´¢Í§¢ ÍÁÙÅàËÁ×͹¡Ñ¹ áÅÐÁÕáÍ´à´Ãʢͧ ˹ ǤÇÒÁ¨íÒàÃÕ§µÔ´µ ͡ѹä»
4.8.1.1 ÍÐàà1 ÁÔµÔ ÃÙ»áẺ¡ÒûÃСÒÈ㪠µÑÇá»ÃÍÐàà1 ÁÔµÔ·íÒä´ ´Ñ§¹Õé type name[size];
â´Â·Õè
type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙŵÑÇá»ÃÍÐààname ¤×Í ª×Í è ¢Í§µÑÇá»ÃÍÐààsize ¤×Í ¤ ҢͧµÑÇàÅ¢¡íÒ˹´¢¹Ò´¢Í§ÍÐààÍÒ¨¨ÐäÁ ¡Òí ˹´¡çä´
¡ÒÃࢠҶ֧¢ ÍÁÙŢͧÊÁÒªÔ¡µÑÇ㴢ͧÍÐààÊÒÁÒö·íÒä´ â´Â¡ÒáíÒ˹´·Õè´Ñª¹ÕªÕéµíÒá˹ § ÁÕÃٻẺ໠¹ name[index]
â´Â·Õè index ¤×Í ¤ ҴѪ¹Õ·ªÕè ËÕé Ã×ÍÃкØä»ÂѧÊÁÒªÔ¡µÑÇã´æ ¢Í§ÍÐàà«Ö§è ÍҨ໠¹µÑÇàÅ¢ ËÃ×Í ¤ ÒµÑÇá»Ãã´æ ËÃ×Í¡ÒáÃзíҢͧ¹Ô¾¨¹ «Ö§è ·Ñ§é ËÁ´·Õ¡è Å ÒÇÁҨе ͧÁÕ¤Ò à» ¹¨íҹǹàµçÁ෠ҹѹé
µÑÇÍ ҧ·Õè 4-14
¶ Ò»ÃСÒÈà» ¹ char arr[4];
ËÁÒ¶֧ µÑÇá»ÃÍÐààªÍ×è arr »ÃСͺ´ ÇÂÊÁÒªÔ¡Â Í 4 µÑÇ (Á꤂ Òà» ¹µÑÇá»Ã 4 µÑÇ¡çä´ ) áµèàÇÅÒ·Õ¨è ÐÍéÒ§ÍÔ§¶Ö§ÊÁÒªÔ¡¨Ðãªé´ªÑ ¹Õà»ç¹µÑǺ觺͡ÇèÒ¡ÓÅѧµÔ´µèÍãªé§Ò¹ÊÁÒªÔ¡µÑÇã´ ´Ñ§¹Ñ¹é arr ÊÒÁÒöᨡᨧÊÁÒªÔ¡ä´ ´§Ñ ¹Õé arr[0] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 1 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 0 arr[1] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 2 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 1 arr[2] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 3 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 2 arr[3]
à» ¹ÊÁÒªÔ¡µÑÇ·Õè 4 áµ Á´Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 3
â´Â arr[0] , arr[1] , arr[2] áÅÐ arr[3] µ Ò§¡çà» ¹µÑÇá»Ãª¹Ô´ char ÁÕ¢¹Ò´ 1 亵 ´Ñ§¹Ñ¹é ¡ÒûÃСÒȵÑÇá»Ã arr ¨Ö§ãª à¹×Íé ·Õ·è §Ñé ÊÔ¹é 4 亵
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 47
µÑÇÍ ҧ·Õè 4-15 ¶ Ò»ÃСÒÈà» ¹ int time[10];
µÑÇá»Ã time
ËÁÒ¶֧ µÑÇá»ÃÍÐààªÍ×è time ÁÕÊÁÒªÔ¡Â Í 10 µÑÇ ÊÒÁÒÃ¶á¨¡á¨§ä´ ´§Ñ ¹Õé time[0] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 1 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 0 time[1] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 2 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 1 time[2] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 3 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 2 time[3] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 4 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 3 time[4] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 5 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 4 time[5] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 6 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 5 time[6] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 7 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 6 time[7] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 8 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 7 time[8] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 9 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 8 time[9] à» ¹ÊÁÒªÔ¡µÑÇ·Õè 10 áµ Á´ Õ ªÑ ¹Õ·ªÕè àÕé » ¹ 9 â´Â·Õè time[0]...time[9] µ Ò§¡çà» ¹µÑÇá»Ãª¹Ô´ int ÁÕ¢¹Ò´ 2 亵 ´Ñ§¹Ñ¹é ¡ÒûÃСÒÈ ¨Ö§ãª à¹×Íé ·Õ·è §Ñé ÊÔ¹é 20 亵
µÑÇÍ ҧ·Õè 4-16
¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàà¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ ãË »ÃСÒÈà» ¹ char dat[8] = {1,3,5,7,9,11,13,15} ;
¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒȵÑÇá»ÃÍÐààªÍ×è dat ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇ (ÍÒ¨ ¨ÐàÃÕÂ¡Ç Ò áµ ÅÐ˹ Ç ¡çä´ ) ¼ÅÅѾ¸ ·äÕè ´ ¤Í× dat[0] dat[1] dat[2] dat[3] dat[4] dat[5] dat[6] dat[7]
= = = = = = = =
1; 3; 5; 7; 9; 11; 13; 15;
¡ÒÃàÃÕ¡㪠ÊÁÒªÔ¡ÍÐààËÅѧ¨Ò¡ÁÕ»ÃСÒÈÍÐàà¢Ò §º¹ char i , j ; i = 3; j = dat[i];
// j = dat[i] ==> j = dat[3] ==> j = 7 /* ¼ÅÅѾ¸ ¤Í ×
j = 7 */
48 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
µÑÇÍ ҧ·Õè 4-17 ¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàà¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ »ÃСÒÈà» ¹ char dat[4] = “ abcd” ;
¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒȵÑÇá»ÃÍÐààªÍ×è dat ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇ (ÍÒ¨ àÃÕÂ¡Ç Ò áµ ÅÐà«Å¡çä´ ) ¼ÅÅѾ¸ ·äÕè ´ ¤Í× dat[0] dat[1] dat[2] dat[3]
= = = =
‘a’; ‘b’; ‘c’; ‘d’;
¡ÒÃàÃÕ¡㪠ËÅѧ¨Ò¡»ÃСÒÈÍÐàà¢Ò §º¹ char i , j ; i = 3; j = dat[i];
// j = dat[i] ==> j = dat[3] ==> j = ‘d’ /*¼ÅÅѾ¸ ¤Í × j = ‘d’ */
㹡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐààÊÒÁÒö»ÃСÒÈ㪠§Ò¹à» ¹áººâ¡ÅºÍÅ ËÃ×ÍâŤÑÅ ËÃ×͹íÒä»à» ¹µÑÇá»Ã parameter à¾×Íè ÃѺ¡ÒÃÊ §¼ Ò¹¤ Ңͧ¿ §¡ ª¹Ñè ¡çä´
µÑÇÍ ҧ·Õè 4-18 ¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàહԴ¢ ÍÁÙÅẺ float ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ »ÃСÒÈà» ¹ float cal[5] = {0.85, 6.23, 4.7, 10.8, 2.14} ;
´Ñ§¹Ñé¹ cal[0] cal[1] cal[2] cal[3] cal[4]
= = = = =
0.85; 6.23; 4.7; 10.8; 2.14;
µÑÇÍ ҧ·Õè 4-19 ¡ÒûÃСÒȵÑÇá»ÃÍÐàહԴ¢ ÍÁÙÅẺ long ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ »ÃСÒÈà» ¹ long store[3] = {20L, 500L, 49L, 1055L} ;
´Ñ§¹Ñé¹ store[0] store[1] store[2] store[3]
= = = =
20L; 500L; 49L; 1055L;
ËÁÒÂà赯 ¢ ÍÁÙŪ¹Ô´ long ÊÒÁÒöÃкØãË ª´Ñ à¨¹ä´ â´Âãª Í¡Ñ Éà l ËÃ×Í L µ Í· ÒµÑÇàÅ¢¢ ÍÁÙÅ´ Ç ¹Í¡¨Ò¡¹ÕÂé §Ñ ÊÒÁÒö㪠µÇÑ á»ÃÍÐàà·ÁÕè Ò¡¡Ç Ò 1 ÁÔµÔ ä´ ´Ç Â
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 49
4.8.1.2 ÍÐàà2 ÁÔµÔ ÃÙ»áẺ¡ÒûÃСÒÈ㪠µÑÇá»ÃÍÐàà2 ÁÔµÔ·íÒä´ ´Ñ§¹Õé type name[x][y];
â´Â·Õè
type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙŵÑÇá»ÃÍÐààname ¤×Í ª×Í è ¢Í§µÑÇá»ÃÍÐàÃÂ
x ¤×Í ¤ ҢͧµÑÇàÅ¢¡íÒ˹´¢¹Ò´á¶Ç¢Í§ÍÐàÃÂ
y ¤×Í ¤ ҢͧµÑÇàÅ¢¡íÒ˹´¢¹Ò´ËÅÑ¡¢Í§ÍÐàÃÂ
ઠ¹ int a[2][5];
à» ¹¡ÒûÃСÒÈãË a à» ¹µÑÇá»ÃÍÐàà2 ÁÔµÔ ª¹Ô´¢ ÍÁÙÅẺ int ÁÕ¨Òí ¹Ç¹ÊÁÒªÔ¡ 10 µÑÇ ä´ á¡ a[0][0], a[0][1], a[0][2], a[0][3], a[0][4] , a[1][0], a[1][1], a[1][2], a[1][3], a[1][4]
¡ÒáíÒ˹´¤ Ò¢ ÍÁÙÅàÃÔèÁµ ¹¡çÊÒÁÒö·íÒä´ àª ¹ int menu[3][4] ={{1,3,4,9} , {2,8,0,5}};
à» ¹¡ÒûÃСÒÈãË menu à» ¹µÑÇá»ÃÍÐàà2 ÁÔµÔ ª¹Ô´¢ ÍÁÙÅẺ int ÁÕ¨Òí ¹Ç¹ÊÁÒªÔ¡·Ñ§é ËÁ´ 12 µÑÇ áÅСíÒ˹´¤ Ò¢ ÍÁÙÅàÃÔÁè µ ¹ ´Ñ§¹Ñ¹é menu[0][0] = 1
menu[0][1] = 3
menu[0][2] = 4
menu[0][3] = 9
menu[1][0] = 2
menu[1][1] = 8
menu[1][2] = 0
menu[1][3] = 5
menu[2][0] = 0
menu[2][1] = 0
menu[2][2] = 0
menu[2][3] = 0
50 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 51
º··Õè 5
µÑÇ´íÒà¹Ô¹¡ÒÃã¹ÀÒÉÒ C ÊíÒËÃѺ WinAVR ¤ÍÁä¾àÅÍà â»Ãá¡ÃÁÀÒÉÒ C ·Õè㪠㹠MicroCamp-Mega8 ã¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ WinAVR ¹Ñ¹é ÁÕµÇÑ ´íÒà¹Ô¹¡ÒÃàËÁ×͹¡ÑºÀÒÉÒ C µÒÁÁҵðҹ ANSI-C(¤íÒÊѧè Áҵðҹ¢Í§ÀÒÉÒ C ·Õãè ª ¾² Ñ ¹Òº¹¤ÍÁ¾ÔÇàµÍà ·¼Õè ¼Ù ÅÔµ¤ÍÁä¾àÅÍà ᵠÅÐÃÒ¨е ͧ ÁÕàËÁ×͹¡Ñ¹) µÑÇ´íÒà¹Ô¹¡ÒÃËÃ×ÍâÍà»ÍàÃàµÍà (operator) ¢Í§ÀÒÉÒ C ¹Ñ¹é Ạ§ä´ 3 ¡ÅØÁ ãË æ ¤×Í µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà (Arithmetic operator), µÑÇ´íÒà¹Ô¹¡Òô Ò¹¤ÇÒÁÊÑÁ¾Ñ¹¸ áÅеÃá (Relation & logic operation)áÅеÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ (Bitwise operation)
5.1 µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà ÊÒÁÒöÊÃØ»ä´ ´Ñ§¹Õé Operator + * / % ++ -+= -= *= /= %=
¤ÇÒÁËÁÒ ¡Òúǡ ¡ÒÃź ¡Òäٳ ¡ÒÃËÒà ¡ÒÃËÒÃẺ modulo(ËÒÃàÍÒàÈÉ) ¡ÒÃà¾ÔÁè ¤ Ò¢Ö¹é ÍÕ¡Ë¹Ö§è ¤ Ò ¡ÒÃÅ´¤ ÒŧÍÕ¡Ë¹Ö§è ¤ Ò ¡Òúǡ¢Ö¹é Íա෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃŴŧÍա෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í ¡Òäٳ´ ÇÂ෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃËÒô ÇÂ෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í ¡ÒÃËÒô ÇÂ෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í (modulo)
52 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
5.1.1 ¡Òà + áÅÐ - ·Õ¤è Ç÷ÃÒº µÑÇÍ ҧ·Õè 5-1 int a = 12; a = a + 3;
¼ÅÅѾ¸ ¤Í× a = 15 ¡Ò÷íÒ§Ò¹¤×Í àÃÔÁè µ ¹ a ÁÕ¤Ò à» ¹ 12 áÅ ÇÊѧè ãË a ºÇ¡¡Ñº 3 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 15 à¡çºäÇ ·Õè a
µÑÇÍ ҧ·Õè 5-2 int a = 12; a = a - 3;
¼ÅÅѾ¸ ¤Í× a = 9 ¡Ò÷íÒ§Ò¹¤×Í àÃÔÁè µ ¹ a ÁÕ¤Ò à» ¹ 12 áÅ ÇÊѧè ãË a ź´ Ç 3 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 9 à¡çºäÇ ·Õè a
5.1.2 ¡ÒÃËÒÃẺ / áÅÐ % ¡ÒÃËÒ÷Ñé§ÊͧẺÁÕ¤ÇÒÁᵡµ Ò§¡Ñ¹µÃ§·Õè 1. ¡ÒÃËÒÃẺ / à» ¹¡ÒÃËÒÃà¡çº¤ Ò¨íҹǹàµçÁ·ÕèËÒÃŧµÑÇ 2. ¡ÒÃËÒÃẺ % à» ¹¡ÒÃËÒÃà¡çº¤ ÒàÈÉ·Õàè ËÅ×ͨҡ¡ÒÃËÒà µÑÇÍ ҧ·Õè 5-3 int x , y , z; x = 10; y = x/3; z = x%3;
¼ÅÅѾ¸ ¤Í× y = 9 áÅÐ z = 1 ¡Ò÷íÒ§Ò¹¤×Í
y = x/3; à y = 10/3 à y = 3 (¨íҹǹ¤ÃÑ§é ·ÕË è ÒÃŧµÑÇ) z = x%3; à z = 10%3 à z = 1 (àÈÉ·Õàè ËÅ×ͨҡ¡ÒÃËÒÃ)
5.1.3 ¡ÒÃà¾ÔÁè ¤ ÒẺ ++ áÅСÒÃÅ´¤ ÒẺ - ÁÕµÑÇÍ ҧ·Õè㪠㹡ÒÃ͸ԺÒ¡Ò÷íÒ§Ò¹´Ñ§¹Õé µÑÇÍ ҧ·Õè 5-4 int y = 5; y++;
¼ÅÅѾ¸ ¤Í× y = 6 ¡Ò÷íÒ§Ò¹¤×Í àÃÔÁè µ ¹ y ÁÕ¤Ò à» ¹ 5 µ ÍÁÒÊѧè ãË y ºÇ¡¡Ñº 1 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 6 à¡çºäÇ ·Õè y ´Ñ§¹Ñ¹é ¤íÒÊѧè y++; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y + 1;
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 53
µÑÇÍ ҧ·Õè 5-5 int
y = 5;
y - -;
¼ÅÅѾ¸ ¤Í× y = 4 ¡Ò÷íÒ§Ò¹¤×Í àÃÔÁè µ ¹ y ÁÕ¤Ò à» ¹ 5 µ ÍÁÒÊѧè ãË y ź´ Ç 1 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 4 à¡çºäÇ ·Õè y ´Ñ§¹Ñ¹é ¤íÒÊѧè y--; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y - 1;
5.1.4 ¡ÒÃà¾ÔÁè ¤ ÒẺ += áÅСÒÃÅ´¤ ÒẺ - = ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y +=a; y -=a;
ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº
y = y + a; y = y - a;
µÑÇÍ ҧ·Õè 5-6 int
x = 100;
x += 10;
¼ÅÅѾ¸ ¤Í× x = 110
5.1.5 ¡Òäٳ¤ ÒẺ *= , ¡ÒÃËÒä ÒẺ /= áÅСÒÃËÒä ÒẺ %= ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y *=a; y /=a; y %=a;
ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº
µÑÇÍ ҧ·Õè 5-7 int
x, y, z;
x = y = z = 120; x *= 4; y /= 4; z %= 4;
¼ÅÅѾ¸ ¤Í× x = 480 , y = 30 áÅÐ z = 0
y = y * a; y = y/a; y = y%a;
54 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
5.2 µÑÇ´íÒà¹Ô¹¡Ò÷ҧ´ Ò¹¤ÇÒÁÊÑÁ¾Ñ¹¸ áÅеÃá
¡ÒáÃзíÒ㹡ÅØÁ ¹Õé ¼ÅÅѾ¸ ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢¨ÐÁÕ¤Ò à» ¹ 1 ¶ Òà§×Íè ¹ä¢¹Ñ¹é à» ¹¨ÃÔ§ (true) áÅÐà» ¹ 0 àÁ×Íè à§×Íè ¹ä¢à·ç¨(false) ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé Operator == != > < >= <= ! && ||
¤ÇÒÁËÁÒ ෠ҡѺ äÁ ෠ҡѺ ÁÒ¡¡Ç Ò ¹ ÍÂ¡Ç Ò ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ ¹ ÍÂ¡Ç ÒËÃ×Í෠ҡѺ äÁ 㪠(NOT) áÅÐ (AND) ËÃ×Í (OR)
µÑÇÍ ҧ·Õè 5-8
¶ Ò¡íÒ˹´ãË a = 10 b=4 c = 0xA0 à§×Íè ¹ä¢ a>b à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1 à§×Íè ¹ä¢ a>c à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 à§×Íè ¹ä¢ a>=c à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1(à¾ÃÒÐ 0xA0 = 10) à§×Íè ¹ä¢ a != b à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1 à§×Íè ¹ä¢ a != c à§×Íè ¹ä¢à» ¹¨ÃÔ§(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0
5.2.1 ¡ÒÃ㪠! , && , || à»ÃÕºà·Õº»ÃÐâ¤à§×Íè ¹ä¢ ¼ÅÅѾ¸ ¢Í§¡Òà ! (NOT) ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé ¼ÅÅѾ¸ ¡ÃзíҡѺ¼ÅÅѾ¸ ! false ! true
¼ÅÅѾ¸ ·äÕè ´ true(1) false(0)
ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒ´ Ç NOT ¨Ðä´ ¤Ò ¼ÅÅѾ¸ ·µÕè ç¢ ÒÁ¹Ñ¹è àͧ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 55
¼ÅÅѾ¸ ¢Í§¡ÒÃà»ÃÕºà·Õº¢Í§»ÃÐ⤠2 »ÃÐ⤠´ Ç &&(AND) ÊÃØ»ä´ ´§Ñ ¹Õé ¼ÅÅѾ¸ ¡ÃзíҡѺ¼ÅÅѾ¸ false && false False && true true && false true && true
¼ÅÅѾ¸ ·äÕè ´ false(0) false(0) false(0) true(1)
ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà AND ¨Ðä´ ¤Ò ¼ÅÅѾ¸ à» ¹ false ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ false
¼ÅÅѾ¸ ¢Í§¡ÒÃà»ÃÕºà·Õº¢Í§»ÃÐ⤠2 »ÃÐ⤠´ Ç ||(OR) ÊÃØ»ä´ ´§Ñ ¹Õé ¼ÅÅѾ¸ ¡ÃзíҡѺ¼ÅÅѾ¸ False || false False || true True || false True || true
¼ÅÅѾ¸ ·äÕè ´ false(0) true(1) true(1) true(1)
ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà OR ¨Ðä´ ¤Ò ¼ÅÅѾ¸ à» ¹ true ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ true
µÑÇÍ ҧ·Õè 5-9
¶ Ò¡íÒ˹´ãË a = 10 b=4 c = 0xA0 à§×Íè ¹ä¢ a>b à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1 à§×Íè ¹ä¢ a>c à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 à§×Íè ¹ä¢ a>=c à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1(à¾ÃÒÐ 0xA0 = 10) à§×Íè ¹ä¢ a != b à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1 à§×Íè ¹ä¢ a != c à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 áÅж Òà» ¹ à§×Íè ¹ä¢ !(a>b) à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 à§×Íè ¹ä¢ !(a>c) à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1 à§×Íè ¹ä¢ !(a>=c) à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 à§×Íè ¹ä¢ !(a != b) à§×Íè ¹ä¢à» ¹à·ç¨(false) ¤ Ò¼ÅÅѾ¸ à» ¹ 0 à§×Íè ¹ä¢ !(a != c) à§×Íè ¹ä¢à» ¹¨ÃÔ§(true) ¤ Ò¼ÅÅѾ¸ à» ¹ 1
56 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
áÅж Òà» ¹ à§×Íè ¹ä¢ à§×Íè ¹ä¢ à§×Íè ¹ä¢ áÅж Òà» ¹ à§×Íè ¹ä¢ à§×Íè ¹ä¢ à§×Íè ¹ä¢ à§×Íè ¹ä¢
!(a>b) && (a>=c) ¤ Ò¼ÅÅѾ¸ à» ¹ false(0) (a != b) && (a>=c) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) (a != b) && !(a != b) ¤ Ò¼ÅÅѾ¸ à» ¹ false(0) !(a>b) || (a>=c) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) (a != b) || (a>=c) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) (a != b) || !(a != b) ¤ Ò¼ÅÅѾ¸ à» ¹ true(1) !(a>=c) || !(a != b) ¤ Ò¼ÅÅѾ¸ à» ¹ false(0)
5.3 µÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ (Bitwise Operation) ¡ÒáÃзíÒ㹡ÅØÁ ¹Õàé » ¹¡ÒáÃзíÒ·Õàè ¢ Ò¶Ö§ã¹ÃдѺºÔµ¢Í§¢ ÍÁÙÅ â´Â·Õ¤è Ò ¢Í§áµ ÅкԵ໠¹ ä´ á¤ 1 ËÃ×Í 0 à· Ò¹Ñ¹é «Ö§è ¡ÒáÃзíÒ㹡ÅØÁ ¹ÕÊé ÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé Operator ~ & | ^ << >> <<= >>= &= |= ^=
¤ÇÒÁËÁÒ ¡ÅѺ¤ ҢͧºÔµ¢ ÍÁÙÅ ¡ÒÃá͹´ ẺºÔµ ¡ÒÃÍÍà ẺºÔµ ¡ÒÃàÍ硤ÅÙ«¿Õ -ÍÍà ẺºÔµ àÅ×Íè ¹ºÔµä»·Ò§« Ò àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ àÅ×Íè ¹ºÔµä»·Ò§« ÒÂáÅ ÇãË à· Ò¡Ñº àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒáÅ ÇãË à· Ò¡Ñº á͹´ áÅ ÇãË à· Ò¡Ñº ÍÍà áÅ ÇãË à· Ò¡Ñº àÍ硤ÅÙ«¿Õ -ÍÍà áÅ ÇãË à· Ò¡Ñº
¼ÅÅѾ¸ ¢Í§¡Òà ~ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ
¼ÅÅѾ¸ ·äÕè ´
~0
1
~1
0
ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒ´ Ç ~ ¨Ðä´ ¤Ò ¼ÅÅѾ¸ ¢Í§Åͨԡ·Õµè ç¢ ÒÁ¹Ñ¹è àͧ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 57
¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·äÕè ´ 0&0 0 0 &1 0 1&0 0 1&1 1 ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ¨Ðä´ ¼ÅÅѾ¸ à» ¹ 0 ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ 0
¼ÅÅѾ¸ ¢Í§¡Òà | ẺºÔµµ ͺԵ ¾ÍÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ ¼ÅÅѾ¸ ·äÕè ´ 0|0 0 0|1 1 1|0 1 1|1 1 ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà | ẺºÔµµ ͺԵ ¨Ðä´ ¼ÅÅѾ¸ à» ¹ 1 ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ 1
¼ÅÅѾ¸ ¢Í§¡Òà ^ ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé
¡ÒáÃзíÒ ¼ÅÅѾ¸ ·äÕè ´ 0^0 0 0 ^1 1 1^0 1 1^1 0 ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà ^ ẺºÔµµ ͺԵ ¨Ðä´ ¤Ò ¼ÅÅѾ¸ à» ¹ 0 ËÒ¡·Ñ§é ¤ÙÁ ¤Õ Ò àËÁ×͹¡Ñ¹
µÑÇÍ ҧ·Õè 5-10 int x,y,result1,result2,result3,result4; x = 0x9C; y = 0x46;
¨§ËÒ¼ÅÅѾ¸ ¢Í§ (1) result1 (2) result2 (3) result3 (4) result4
= x&y; = x|y; = x^y; = ~x;
58 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
ÇÔ¸¤Õ ´Ô à¹×Íè §¨Ò¡à» ¹¡ÒáÃзíÒẺºÔµµ ͺԵ ¨Ö§¤ÇÃá»Å§¤ Ò¨Ò¡àÅ¢°Ò¹ÊԺˡ໠¹àÅ¢°Ò¹Êͧ «Ö§è ¡ç¤Í× x = 0x9C à 0000000010011100 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) y = 0x46 à 0000000001000110 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) (1) result1 = (0000000010011100) & (0000000001000110) 0000000010011100 AND 0000000001000110 0000000000000100 à 0x0004 ËÃ×Í 0x04 (2) result2 = (0000000010011100) | (0000000001000110) 0000000010011100 OR 0000000001000110 0000000011011110 à 0x00DE ËÃ×Í 0xDE (3) result3 = (0000000010011100) ^ (0000000001000110) 0000000010011100 XOR 0000000001000110 0000000011011010 à 0x00DA ËÃ×Í 0xDA (4) result4 = ~(0000000010011100) ¡ÅѺºÔµ¢ ÍÁÙÅ·Ø¡ºÔµ 1111111101100011 à 0xFF63
5.3.1 ¡ÒÃàÅ×Íè ¹ºÔµ¢ ÍÁÙŠ㹡ÒÃàÅ×è͹ºÔµ¨Ðµ ͧºÍ¡¨íҹǹ¤ÃÑ駡ÒÃàÅ×è͹´ ÇÂÇ ÒãË ÁÕ¡ÒÃàÅ×è͹¡Õè¤ÃÑé§ àª ¹ dat = dat<<4;
ËÃ×Í
ËÁÒ¶֧ ãË àÅ×Íè ¹ºÔµ¢ ÍÁÙŢͧ dat ä»·Ò§« Ò 4 ¤ÃÑ§é ¼ÅÅѾ¸ ·äÕè ´ à¡çºäÇ ·Õè dat àËÁ×͹à´ÔÁ ¨ÐãË ¼ÅÅѾ¸ àËÁ×͹ dat<<4; dat = dat>>1;
ËÁÒ¶֧ãË àÅ×Íè ¹ºÔµ¢ ÍÁÙŢͧ dat ä»·Ò§¢ÇÒ 1 ¤ÃÑ§é ¼ÅÅѾ¸ ·äÕè ´ à¡çºäÇ ·Õè dat àËÁ×͹à´ÔÁ ¨ÐãË ¼ÅÅѾ¸ àËÁ×͹ dat>>1;
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 59
µÑÇÍ ҧ·Õè 5-11 int dat, x1, x2; dat = 0x93;
¨§ËÒ¼ÅÅѾ¸ ¢Í§ (1) x1 = (2) x2
dat<<1;
= dat<<2;
ÇÔ¸¤Õ ´Ô
dat = 0x93 à 0000000010010011 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) dat
0000000010010011
X1
0000000100100110
X2
0000001001001100
(1) x1 ¤×Í ¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃàÅ×Íè ¹ºÔµ¢ ÍÁÙÅ dat ä»·Ò§« Ò 1 ¤ÃÑ§é ¨Ðä´ x1 = 0x0126 µÃ§¡ÑºàÅ¢°Ò¹ÊÔº¤×Í 294 (2) x2 ¤×Í ¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃàÅ×Íè ¹ºÔµ¢ ÍÁÙÅ x1 ä»·Ò§« Ò 1 ¤Ãѧé ËÃ×Íà» ¹¡ÒÃàÅ×Íè ¹ ºÔµ¢ ÍÁÙÅ dat ä»·Ò§« Ò 2 ¤ÃÑ§é ¨Ðä´ x2 = 0x024C µÃ§¡ÑºàÅ¢°Ò¹ÊÔº¤×Í 588
µÑÇÍ ҧ·Õè 5-12 int a , b , c; a = 0x7A; b = 0x16; c = 0xFD;
¨§ËÒ¼ÅÅѾ¸ ¢Í§ (1) a &= (2) b |= (3) c ^=
0x3C; 0x51; 0xD0;
60 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
ÇÔ¸¤Õ ´Ô (1) ¨Ò¡ a &= 0x3C ¡ç¤Í× a = a & 0x3C ËÁÒ¤ÇÒÁÇ Ò ¹íÒ¤ Ңͧ a (¤×Í 0x7A) ä»á͹´ ¡ºÑ 0x3C áŠǼÅÅѾ¸ ·äÕè ´ ¹Òí ä»à¡çº·Õè a ÍÕ¡¤Ãѧé ˹֧è à·ÕÂºä´ à» ¹ a = (0000000001111010) & (0000000000111100) 0000000001111010 AND 0000000000111100 0000000000111000 à 0x0038 ËÃ×Í 0x38 (2) ¨Ò¡ b |= 0x51 ¡ç¤Í× b = b |= 0x51 ËÁÒ¤ÇÒÁÇ Ò ¹íÒ¤ Ңͧ b (¤×Í 0x16) ä»ÍÍà ¡ºÑ 0x51 áŠǼÅÅѾ¸ ·äÕè ´ ¹Òí ä»à¡çº·Õè b ÍÕ¡¤Ãѧé ˹֧è à·ÕÂºä´ à» ¹ b = (0000000000010110) |= (0000000001010001) 0000000000010110 OR 0000000001010001 0000000001010111 à 0x0057 ËÃ×Í 0x57 (3) ¨Ò¡ c ^= 0xD0; ¡ç¤Í× c = c ^= 0xD0 ËÁÒ¤ÇÒÁÇ Ò ¹íÒ¤ Ңͧ c (¤×Í 0xFD) ä»àÍ硤ÅÙ«¿Õ ÍÍà ¡ºÑ 0xD0 áŠǼÅÅѾ¸ ·äÕè ´ ¹Òí ä»à¡çº·Õè c ÍÕ¡¤Ãѧé ˹֧è à·ÕÂºä´ à» ¹ c = (0000000011111101) ^= (0000000011010000) 0000000011111101 XOR 0000000011010000 0000000000101101 à 0x002D ËÃ×Í 0x2D
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 61
º··Õè 6
ªØ´¤íÒÊѧè áÅÐäźÃÒÃÕµÒ § æ ·Õãè ª ã¹ MicroCamp-Mega8 äźÃÒÃÕà» ¹ä¿Å ʹѺʹعªØ´¤íÒÊÑè§ËÃ×Í¿ §¡ ªÑè¹µ Ò§æ ÊíÒËÃѺÊà ҧâ»Ãá¡ÃÁ¤Çº¤ØÁ¡Òà ·íÒ§Ò¹¢Í§ºÍà ´ MicroCamp »ÃСͺ仴 Ç ¿ §¡ ªÑ¹¡ÒäǺ¤ØÁ¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµàº×éͧµ ¹ ¿ §¡ ªÑè¹Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ ¿ §¡ ªÑè¹ã¹¡ÒÃ˹ ǧàÇÅÒ ¿ §¡ ªÑ蹡íÒà¹Ô´àÊÕ§ áÅп §¡ ªÑè¹ã¹ ¡ÒâѺà¤Å×è͹ÁÍàµÍà â´ÂÊÃØ»ÃÒÂÅÐàÍÕ´¢Í§¿ §¡ ª¹Ñ ¾×¹é °Ò¹·Õãè Ë ä»ã¹ªØ´¢Í§ MicroCamp-Mega8 ´Ñ§¹Õé in_out.h äźÃÒÃÕÊÒí ËÃÑºÊ §¤ Ò´Ô¨µÔ ÍÅàÍÒµ ¾µØ ËÃ×Í Í Ò¹¤ Ò¨Ò¡´Ô¨µÔ ÍÅÍÔ¹¾Øµã¹ µíÒá˹ §¢Ò¾Íà µµ Ò§ æ l
l sleep.h l
äźÃÒÃÕ¿ §¡ ªÑ蹡ÒÃ˹ ǧàÇÅÒ
analog.h äźÃÒÃÕÊÒí ËÃѺ¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ÍйÒÅÍ¡¨Ò¡¨Ø´µ Í P0 ¶Ö§ P4
l led.h
äźÃÒÃդǺ¤ØÁ LED â´ÂäÁ ú¡Ç¹¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁËÅÑ¡
l motor.h
äźÃÒÃդǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà áÅСÒâѺà¤Å×Íè ¹Ëع ¹µ
l
sound.h
l timer.h
äźÃÒÃÕÊÒí ËÃѺÊà ҧàÊÕ§ÍÍ¡ÅíÒ⾧ äźÃÒÃÕ¿è § ¡ ª¹Ñè ¨ÑºàÇÅÒËÃ×͹Ѻ¤ ÒàÇÅÒ â´ÂäÁ ú¡Ç¹¡Ò÷íÒ§Ò¹ËÅÑ¡
¡ÅØ ÁäźÃÒÃÕ·Õè¡Å ÒÇÁÒ¹Õé¨Ð¶Ù¡ºÃèØÍÂÙ ÀÒÂã¹â¿Åà´Íà à´ÕÂǡѹËÃ×ÍÍÕ¡¹ÑÂ˹Öè§ÍÂÙ ¾Ò¸à´ÕÂÇ ¡Ñ¹ «Ö§è ä´ ¨´Ñ àµÃÕÂÁÁҾà ÍÁ㹫մÃÕ ÍÁ·ÕÁè ҡѺºÍà ´ MicroCamp áÅ Ç â´ÂºÃèØÍÂÙÀ ÒÂã¹â¿Åà´Íà MicroCamp_include
62 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
6.1 ªØ´¤íÒÊѧè ã¹äźÃÒÃÕè in_out.h 6.1.1 ¿ §ªÑ¹è ÊíÒËÃÑºÍ Ò¹¤ Ò¨Ò¡¾Íà µÍÔ¹¾Øµ ÊíÒËÃÑºÍ Ò¹¤ ÒÊÑÒ³´Ô¨µÔ ÍŨҡ¾Íà µ B in_c ÊíÒËÃÑºÍ Ò¹¤ ÒÊÑÒ³´Ô¨µ Ô ÍŨҡ¾Íà µ C in_d ÊíÒËÃÑºÍ Ò¹¤ ÒÊÑÒ³´Ô¨µ Ô ÍŨҡ¾Íà µ D in_b
ÃٻẺ¿ §¡ ªÑè¹ char char char char
in_a(x) in_b(x) in_c(x) in_d(x)
¾ÒÃÒÁÔàµÍà x ·íÒ˹ Ò·Õ¡è Òí ˹´¢ÒÊÑÒ³·Õµè Í §¡ÒÃÍ Ò¹¤ Ò «Ö§è ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 7 ¡Òä׹¤ Ò µÑÇÍ ҧ·Õè 6-1
ÍÒ¨ÁÕ¤Ò à» ¹ 0 ËÃ×Í 1
char x=0;
//
x = in_b(2);
//
»ÃСÒȵÑÇá»Ã x à¾×Íè à¡çº¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ Í Ò¹¤ ÒÊÑÒ³´Ô¨µÔ ÍŨҡ¾Íà µ PB2 áÅ Çà¡çº¤ ÒäÇ ·µÕè ÇÑ á»Ã x
µÑÇÍ ҧ·Õè 6-2 char x=0;
//
x = in_d(4);
//
»ÃСÒȵÑÇá»Ã x à¾×Íè à¡çº¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ Í Ò¹¤ Ò´Ô¨µÔ ÍŨҡ¾Íà µ PD4 áÅ Çà¡çº¤ ÒäÇ ·µÕè ÇÑ á»Ã x
µÑÇÍ ҧ·Õè 6-3 #include <avr/io.h>
//
#include <in_out.h>
//
#include <sound.h> void main() { while(1) {
//
äźÃÒÃÕÁҵðҹ äźÃÒÃÕÊÒí ËÃѺÊÑ§è §Ò¹ÍÔ¹¾ØµàÍÒµ ¾µØ äźÃÒÃÕÊÒí ËÃѺÊà ҧàÊÕ§ÍÍ¡ÅíÒ⾧
if (in_d(2)==0) { sound(3000,100); } } }
//
µÃǨÊͺ¡Òá´ÊÇÔµª ·Õè SW1
// Êà ҧàÊÕ§ÍÍ¡·ÕÅ è Òí ⾧àÁ×Íè ÁÕ¡Òá´ÊÇÔµª SW1
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 63
6.1.2 ¿ §ªÑ¹è ÊíÒËÃѺà¢Õ¹¢ ÍÁÙÅä»Âѧ¾Íà µàÍÒµ ¾µØ ·íÒ§Ò¹â´Â¡ÒáíÒ˹´µíÒá˹ §¢Ò·ÕèÃкØãË à» ¹¢ÒàÍÒµ ¾Øµ ¨Ò¡¹Ñé¹Ê §Åͨԡ·ÕèÃÐºØ ÍÍ¡ä»Âѧ¢Ò¾Íà µ¹Ñé¹ æ ¡íÒ˹´ÃдѺÊÑÒ³´Ô¨µÔ ÍÅä»Âѧ¾Íà µ B out_c ¡íÒ˹´ÃдѺÊÑÒ³´Ô¨µ Ô ÍÅä»Âѧ¾Íà µ C out_d ¡íÒ˹´ÃдѺÊÑÒ³´Ô¨µ Ô ÍÅä»Âѧ¾Íà µ D ÃٻẺ¿ §¡ ªÑè¹ out_b
out_b(char _bit,char _dat) out_c(char _bit,char _dat) out_d(char _bit,char _dat)
¾ÒÃÒÁÔàµÍà ·íÒ˹ Ò·Õ¡è Òí ˹´¢ÒÊÑÒ³·Õµè Í §¡ÒáíÒ˹´¤ Ò«Ö§è ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 7 _dat ·íÒ˹ Ò·Õ¡ è Òí ˹´Ê¶Ò¹ÐÅͨԡ 0 ËÃ×Í 1 ä»Âѧ¢Ò¾Íà µàÍÒµ ¾µØ ¡Òä׹¤ Ò _bit
äÁ Á¡Õ Òä׹¤ Ò
µÑÇÍ ҧ·Õè 6-4 out_c(5,0);
//
out_d(1,1);
//
µÑÇÍ ҧ·Õè 6-5
¡íÒ˹´ÃдѺÊÑÒ³¾Íà µ PC5 à» ¹ 0 ¡íÒ˹´ÃдѺÊÑÒ³¾Íà µ PD1 à» ¹ 1
#include <avr/io.h>
//
#include <in_out.h>
//
#include <sleep.h> void main() {
//
äźÃÒÃÕÁè ҵðҹ äźÃÒÃÕÊè Òí ËÃѺÊÑ§è §Ò¹ÍÔ¹¾ØµàÍÒµ ¾µØ äźÃÒÃÕÊè Òí ËÃѺ¡ÒÃ˹ ǧàÇÅÒ
while(1) {
//
ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí
} }
out_d(1,1);
//
sleep(300);
//
out_d(1,0);
//
sleep(300);
//
Ê §¤ ÒÅͨԡ 1 ÍÍ¡·Õ¢è Ò PD1 LED5 µÔ´ÊÇ Ò§ ˹ ǧàÇÅÒ 0.3 ÇÔ¹Ò·Õ Ê §¤ ÒÅͨԡ 0 ÍÍ¡·Õ¢è Ò PD1 LED5 ´Ñº ˹ ǧàÇÅÒ 0.3 ÇÔ¹Ò·Õ
64 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
6.1.4 ¿ §ªÑ¹è ÊíÒËÃѺ¡ÅѺ¢ ÍÁÙÅÅͨԡãË ¡ºÑ ¾Íà µàÍÒµ ¾µØ toggle_b toggle_c toggle_d
㪠¡Òí ˹´¡ÒáÅѺÅͨԡ·Õ¢è ÒÊÑÒ³ã´æ ¢Í§¾Íà µ B 㪠¡Òí ˹´¡ÒáÅѺÅͨԡ·Õ¢è ÒÊÑÒ³ã´æ ¢Í§¾Íà µ C 㪠¡Òí ˹´¡ÒáÅѺÅͨԡ·Õ¢è ÒÊÑÒ³ã´æ ¢Í§¾Íà µ D
ÃٻẺ¿ §¡ ªÑè¹ toggle_b(x) toggle_c(x) toggle_d(x)
¾ÒÃÒÁÔàµÍà x
·íÒ˹ Ò·Õ¡è Òí ˹´¢ÒÊÑÒ³·Õµè Í §¡ÒáÅѺÅͨԡ«Ö§è ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 7
µÑÇÍ ҧ·Õè 6-6 toggle_c(5);
//
¡ÅѺÅͨԡ·Õ¾è Íà µ PC5
toggle_d(1);
//
¡ÅѺÅͨԡ·Õ¾è Íà µ PD1
6.2 ªØ´¤íÒÊѧè ˹ ǧàÇÅÒã¹äźÃÒÃÕè sleep.h 6.2.1 ¿ §¡ ª¹Ñè sleep ÊíÒËÃѺ¡ÒÃ˹ ǧàÇÅÒâ´Â»ÃÐÁÒ³ã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ void sleep(unsigned int ms)
¾ÒÃÒÁÔàµÍà ms
㪠¡Òí ˹´¤ ÒàÇÅÒ·Õµè Í §¡ÒÃ˹ ǧã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ¡íÒ˹´ä´ µ§Ñé áµ 0 ¶Ö§ 65,535
¡Òä׹¤ Ò äÁ Á¡Õ Òä׹¤ Ò
µÑÇÍ ҧ·Õè 6-7 sleep(20);
//
sleep(1000);
//
˹ ǧàÇÅÒ»ÃÐÁÒ³ 20 ÁÔÅÅÔÇ¹Ô Ò·Õ Ë¹ ǧàÇÅÒ»ÃÐÁÒ³ 1 ÇÔ¹Ò·Õ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 65
6.3 ªØ´¤íÒÊѧè ÊíÒËÃÑºÍ Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡äźÃÒÃÕè analog.h 6.3.1 ¿ §¡ ª¹Ñè analog 㪠ÊÒí ËÃѺ¡ÒÃÍ Ò¹¤ ÒÍйÒÅÍ¡·Õ¢è ÒÊÑÒ³¢Í§¾Íà µ C (PC0 ¶Ö§ PC5) ÁÕ¤ÇÒÁÅÐàÍÕ´㹠¡ÒÃá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 10 ºÔµ ·íÒãË ä´ ¤Ò ¢Í§¢ ÍÁÙÅ´Ô¨µÔ ÍÅ 0 ¶Ö§ 1,023 à·Õº¡Ñº áç´Ñ¹ÍйÒÅÍ¡ 0 ¶Ö§ 5V ÃٻẺ¿ §¡ ªÑè¹ unsigned int analog(unsigned char channel)
¾ÒÃÒÁÔàµÍÃ
channel 㪠¡Òí ˹´ª ͧÍйÒÅÍ¡·Õµ è Í §¡Òà ÁÕ¤Ò 0 ¶Ö§ 7 «Ö§è µÃ§¡Ñº¾Íà µ PC0 ¶Ö§ PC4
¡Òä׹¤ Ò
µÑÇÍ ҧ·Õè 6-8
¤×¹¤ Òà» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑÒ³¢Í§âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍŨҡÍÔ¹¾Øµ·Õ¡è Òí ˹´ â´Â¢ ÍÁÙŨÐÁÕ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµ ´Ñ§¹Ñ¹é ¤ Ò·Õàè » ¹ä»ä´ ¤Í× µÑ§é áµ 0 ¨¹¶Ö§ 1023
int adc_val=0; adc_val = analog(0);
¡íÒ˹´µÑÇá»ÃÊíÒËÃѺà¡çº¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ä´ // Í Ò¹¤ ÒÍйÒÅÍ¡ª ͧ 0 «Ö§è µÃ§¡Ñº¾Íà µ PC0 áÅ Çà¡çº¤ Ò·Õµ è ÇÑ á»Ã adc_val
//
6.4 ªØ´¤íÒÊѧè ÊíÒËÃѺáÊ´§¼Å¡Ð¾ÃÔº·Õè LED ¨Ò¡äźÃÒÃÕè led.h º¹ºÍà ´ MicroCamp ¨ÐÁÕ LED 2 ´Ç§µ ÍࢠҡѺ¢Ò PC5 (LED1) áÅÐ¢Ò PD1(LED2) ¡ÒÃÊѧè ãË LED ¡Ð¾ÃÔº»¡µÔ¨Ð·íÒä´ § Ò æ â´Â¡ÒÃÊÑè§Åͨԡ 0 áÅÐ 1 ÊÅѺ¡Ñ¹ÍÍ¡ä» áµ ã¹¡Ã³Õ·Õè µ ͧ·íÒ§Ò¹ã¹Ê ǹÍ×¹è 仾à ÍÁ¡Ñ¹ ¡ÒáоÃÔº¢Í§ LED ¨Ð¶Ù¡Êѧè ãË ·Òí §Ò¹àº×Íé §ËÅѧ¼ Ò¹¿ §¡ ª¹Ñè µ Ò§ æ ´Ñ§¹Õé
6.4.1 ¿ §¡ ª¹Ñè led1_on() : ÊíÒËÃѺÊѧè ãË LED1 (PC5) ¡Ð¾ÃÔº 6.4.2 ¿ §¡ ª¹Ñè led1_off() : ÊíÒËÃѺÊѧè ãË LED1 (PC5) ËÂØ´¡Ð¾ÃÔº 6.4.3 ¿ §¡ ª¹Ñè led2_on() : ÊíÒËÃѺÊѧè ãË LED2 (PD1) ¡Ð¾ÃÔº 6.4.4 ¿ §¡ ª¹Ñè led2_off() : ÊíÒËÃѺÊѧè ãË LED1 (PD1) ËÂØ´¡Ð¾ÃÔº µÑÇÍ ҧ·Õè 6-9
void main() { led1_on(); }
//
LED1 ¨Ð¡Ð¾ÃÔºÍÂÙá Á ¨Ð·íÒ§Ò¹¨ºâ»Ãá¡ÃÁ Main ä»áÅ Ç
66 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
6.5 ªØ´¤íÒÊÑ§è ¢ÑºÁÍàµÍà 俵ç¨Ò¡äźÃÒÃÕè motor.h 6.5.1 ¿ §¡ ª¹Ñè motor
㪠ÊíÒËÃѺ¢ÑºÁÍàµÍà 俵ç ÃٻẺ¿ §¡ ªÑè¹ void motor(char _channel,int _power)
¾ÒÃÒÁÔàµÍà _channel _power
µÑÇÍ ҧ·Õè 6-10 motor(1,60); // ................ motor(1,-60);
¢ÑºÁÍàµÍà ªÍ § 1 ´ Ç¡íÒÅѧ 60% ¢Í§¡íÒÅѧÊÙ§ÊØ´
//
¢ÑºÁÍàµÍà ªÍ § 1 ´ Ç¡íÒÅѧ 60% ¢Í§¡íÒÅѧÊÙ§ÊØ´ã¹·Ôȵç¢ ÒÁ
//
¢ÑºÁÍàµÍà ªÍ § 2 ´ Ç¡íÒÅѧ 100% (ÊÙ§ÊØ´)
µÑÇÍ ҧ·Õè 6-11 motor(2,100);
㪠¡Òí ˹´ª ͧ¢Í§ÁÍàµÍà ·µÕè Í §¡ÒâѺ 㪠¡Òí ˹´ÃдѺ¡Òè Ò¾Åѧ§Ò¹ãË á¡ ÁÍàµÍà 俵ç ÁÕ¤Ò ã¹ª ǧ -100 ¶Ö§ 100 ¶ Ò¤ Ò _power à» ¹ºÇ¡ (1 ¶Ö§ 100) ÁÍàµÍà ËÁعä»ã¹·Ôȷҧ˹֧è áµ ¶Ò ãË ÁÕ ¤ Òà» ¹Åº (-1 ¶Ö§ -100) ·íÒãË ÁÍàµÍà ËÁعä»ã¹·Ôȵç¢ ÒÁ Ê Ç¹ã¹¡Ã³Õ¡Òí ˹´¤ Ò _power ãË à» ¹ 0 ÁÍàµÍà ¨ÐËÂØ´ËÁع (á¹Ð¹íÒÇ Ò ã¹¡ÒÃàºÃ¡ÁÍàµÍà ¤ÇÃàÃÕ¡㪠¿§ ¡ ª¹Ñè motor_stop ¨ÐÊÁºÙó ¡Ç Ò )
6.5.2 ¿ §¡ ª¹Ñè motor_stop
㪠ÊÒí ËÃѺàºÃ¡ÁÍàµÍà ËÃ×Í·íÒãË à¡Ô´¡ÒÃÅç͡᡹¢Í§ÁÍàµÍà ÃٻẺ¿ §¡ ªÑè¹ void motor_stop(char _channel)
¾ÒÃÒÁÔàµÍÃ
_channel ·íÒ˹ Ò·Õ¡ è Òí ˹´ª ͧ¢Í§ÁÍàµÍà ·µÕè Í §¡ÒâѺ àÁ×Íè _channel ¡íÒ˹´à» ¹ 1 ¤×Í ¡ÒÃàºÃ¡ÁÍàµÍà ·ª Õè Í §
OUT1 _channel ¡íÒ˹´à» ¹ 2 ¤×Í ¡ÒÃàºÃ¡ÁÍàµÍà ·ª Õè Í § OUT2 _channel ¡íÒ˹´à» ¹ ALL ¤×Í ¡ÒÃàºÃ¡ÁÍàµÍà ·§Ñé Êͧª ͧ
µÑÇÍ ҧ·Õè 6-12
motor_stop(1); motor_stop(2);
µÑÇÍ ҧ·Õè 6-13 motor_stop(ALL);
// àºÃ¡ÁÍàµÍà ªÍ §1 // àºÃ¡ÁÍàµÍà ªÍ §2 // àºÃ¡ÁÍàµÍà ·§Ñé 2 ª ͧ (·Ñ§é ª ͧ 1 áÅÐ 2)
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 67
6.5.3 ¿ §¡ ª¹Ñè motor_off 㪠ËÂØ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ·Ñé§ÊͧµÑÇ ¾Ã ÍÁ·Ñé§ËÂØ´¡Òè Ò¡íÒÅѧ§Ò¹ãË ¡ÑºÁÍàµÍà ·Ñé§ ËÁ´´ Ç ÃٻẺ¿ §¡ ªÑè¹ void motor_off()
6.5.4 ¿ §¡ ª¹Ñè forward ¿ §¡ ªÑ¹ÊíÒËÃѺ¡ÒáíÒ˹´ãË ËØ ¹Â¹µ à¤Å×è͹·Õèä»´ ҹ˹ Ò ÃٻẺ¿ §¡ ªÑè¹ void forward(int speed)
¾ÒÃÒÁÔàµÍÃ
speed 㪠¡Òí ˹´ÃдѺ¡Òè Ò¾Åѧ§Ò¹ãË á¡ ÁÍàµÍà 俵ç ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ 100
6.5.5 ¿ §¡ ª¹Ñè backward ¿ §¡ ªÑè¹ÊíÒËÃѺ¡ÒáíÒ˹´ãË ËØ ¹Â¹µ à¤Å×è͹·Õè¶ÍÂËÅѧ ÃٻẺ¿ §¡ ªÑè¹ void backward(int speed)
¾ÒÃÒÁÔàµÍÃ
speed 㪠¡Òí ˹´ÃдѺ¡Òè Ò¾Åѧ§Ò¹ãË á¡ ÁÍàµÍà 俵ç ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ 100
6.5.6 ¿ §¡ ª¹Ñè s_left ¿ §¡ ªÑ¹ÊíÒËÃѺ¡ÒáíÒ˹´ãË ËØ ¹Â¹µ ËÁعµÑÇ·Ò§« ÒÂÁ×Í ÃٻẺ¿ §¡ ªÑè¹ void s_left(int speed)
¾ÒÃÒÁÔàµÍÃ
speed 㪠¡Òí ˹´ÃдѺ¡Òè Ò¾Åѧ§Ò¹ãË á¡ ÁÍàµÍà 俵ç ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ 100
6.5.7 ¿ §¡ ª¹Ñè s_right ¿ §¡ ªÑè¹ÊíÒËÃѺ¡ÒáíÒ˹´ãË ËØ ¹Â¹µ ËÁعµÑÇ·Ò§¢ÇÒÁ×Í ÃٻẺ¿ §¡ ªÑè¹ void s_right(int speed)
¾ÒÃÒÁÔàµÍÃ
speed 㪠¡Òí ˹´ÃдѺ¡Òè Ò¾Åѧ§Ò¹ãË á¡ ÁÍàµÍà 俵ç ÁÕ¤Ò ã¹ª ǧ 0 ¶Ö§ 100
68 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
6.6 ªØ´¤íÒÊÑ§è ¡íÒà¹Ô´àÊÕ§¨Ò¡äźÃÒÃÕè sound.h 6.6.1 ¿ §¡ ª¹Ñè sound ÊíÒËÃѺ¡íÒà¹Ô´ÊÑÒ³àÊÕ§µÒÁ¤ÇÒÁ¶Õè·Õèµ Í§¡ÒÃÍÍ¡·Ò§ÅíÒ⾧໠Ââ««Ö觵ԴµÑ駺¹ºÍà ´ MicroCamp-Mega8 ÃٻẺ¿ §¡ ªÑè¹ void sound(int freq,int time)
¾ÒÃÒÁÔàµÍà freq time
·íÒ˹ Ò·Õ¡è Òí ˹´¤ÇÒÁ¶ÕÊè Ñ Ò³àÊÕ§ ·íÒ˹ Ò·Õ¡è Òí ˹´ª ǧàÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§໠¹¨íҹǹàµçÁ෠Ңͧ 1 ÁÔÅÅÔÇ¹Ô Ò·Õ
µÑÇÍ ҧ·Õè 6-14 sound(2000,500);
// ¡íÒà¹Ô´àÊÕ§¤ÇÒÁ¶Õè 2kHz ¹Ò¹ 500 ÁÔÅÅÔǹ Ô Ò·Õ ÍÍ¡·Ò§ÅíÒ⾧໠Ââ«
6.7 ªØ´¤íÒÊѧè ÊíÒËÃѺ¨ÑºàÇÅÒËÃ×͹Ѻ¤ ÒàÇÅÒ¨Ò¡äźÃÒÃÕè timer 6.7.1 ¿ §¡ ª¹Ñè timer_start
㪠¡íÒ˹´¨Ø´àÃÔèÁµ ¹¡ÒùѺàÇÅҢͧä·àÁÍà (¤ ÒàÇÅÒ㹡ÒùѺ¨Ð¶Ù¡à¤ÅÕÂà ) ÃٻẺ¿ §¡ ªÑè¹ void timer_start(void)
6.7.2 ¿ §¡ ª¹Ñè timer_stop
㪠ÊíÒËÃѺ» ´¡ÒùѺàÇÅҢͧä·àÁÍà (¤ ÒàÇÅÒ㹡ÒùѺ¨Ð¶Ù¡à¤ÅÕÂà )
ÃٻẺ¿ §¡ ªÑè¹ void timer_stop(void)
6.7.3 ¿ §¡ ª¹Ñè timer_pause
㪠ÊíÒËÃѺËÂØ´¡ÒùѺàÇÅҢͧä·àÁÍà ªÑèÇ¢³Ð (¤ ÒàÇÅÒ㹡ÒùѺ¨ÐäÁ ¶Ù¡à¤ÅÕÂà )
ÃٻẺ¿ §¡ ªÑè¹ void timer_pause(void)
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 69
6.7.4 ¿ §¡ ª¹Ñè timer_resume 㪠ÊÒí ËÃѺ¹ÑºàÇÅÒµ ͧ͢ä·àÁÍà ËÅѧ¨Ò¡¡ÒÃËÂØ´¹ÑºàÇÅÒªÑÇè ¢³Ð¨Ò¡¿ §¡ ª¹Ñè timer_pause (¤ ÒàÇÅÒ㹡ÒùѺ¨Ð¶Ù¡¹Ñºµ Í â´Âà¾ÔÁè ¤ Ò¨Ò¡à´ÔÁ) ÃٻẺ¿ §¡ ªÑè¹ void timer_resume(void)
6.7.5 ¿ §¡ ª¹Ñè msec ãª Í Ò¹¤ ÒàÇÅÒ·Õèä·àÁÍà ¹Ñºä´ ã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ unsigned long msec()
¡Òä׹¤ Ò àÇÅÒ·Õ¹è ºÑ ä´ ã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ â´Âª¹Ô´¢ ÍÁÙÅà» ¹áºº long
6.7.6 ¿ §¡ ª¹Ñè sec ãª Í Ò¹¤ ÒàÇÅÒ·Õèä·àÁÍà ¹Ñºä´ ã¹Ë¹ ÇÂÇÔ¹Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ unsigned long sec()
¡Òä׹¤ Ò àÇÅÒ·Õ¹è ºÑ ä´ ã¹Ë¹ ÇÂÇÔ¹Ò·Õ â´Âª¹Ô´¢ ÍÁÙÅà» ¹áºº long
µÑÇÍ ҧ·Õè 6-15 #include <in_out.h> #include <sleep.h> #include <timer.h> void main() { timer_start(); while(1) { if(msec()>500) { timer_stop(); toggle_c(5); timer_start(); } } }
//
â»Ãá¡ÃÁËÅÑ¡
//
¡íÒ˹´¨Ø´àÃÔÁè µ ¹¡ÒùѺàÇÅҢͧä·àÁÍÃ
//
ǹÃͺäÁ è٠º
//
µÃǨÊͺ¤ Ò timer ÁÒ¡¡Ç Ò 500 ËÃ×ÍäÁ
// // //
ËÂØ´ä·àÁÍà áÅÐà¤ÅÕÂà ¤Ò ä·àÁÍà ÊÅѺ¡ÒÃáÊ´§¼Å LED ·Ø¡ æ 0.5 ÇÔ¹Ò·Õ àÃÔÁè µ ¹ä·àÁÍÃ Í¡Õ ¤Ãѧé
70 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8 l 71
º··Õè 7
µÑÇÍ ҧ¡ÒÃÊà ҧËØ ¹Â¹µ MicroCamp
㹺·¹Õ¹é Òí àʹ͵ÑÇÍ ҧ¡ÒùíÒ¤ÇÒÁÃÙà ¡ÕÂè ǡѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 áÅФÇÒÁÃÙ à¡ÕÂè ǡѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁ´ ÇÂÀÒÉÒ C ÁÒ·´ÅͧÊà ҧâ¤Ã§§Ò¹à¾×Íè ·´Êͺ¤ÇÒÁÃÙ¤ ÇÒÁà¢ Ò ã¨ áÅÐËع ¹µ à» ¹Ë¹Ö§è 㹺··´Êͺ·Õ¹è Ò Ê¹ã¨ áÅÐÊÒÁÒöºÙóҡÒäÇÒÁÃÙã ¹·Ø¡´ ҹࢠÒäÇ ´Ç  ¡Ñ¹à» ¹Í ҧ´Õ ·Ñ§é ÍÔàÅç¡·ÃÍ¹Ô¡Ê äÁâ¤Ã¤Í¹â·ÃÅàÅÍà â»Ãá¡ÃÁ áÅСÃкǹ¡ÒäԴ â´ÂËع ¹µ ·¨Õè з´ÅͧÊà ҧ¡Ñ¹¹Õàé » ¹Ëع ¹µ ·¢Õè ºÑ à¤Å×Íè ¹´ ÇÂÁÍàµÍà 2 µÑÇ ÁÕµÇÑ µÃǨ¨Ñº 4 µÑÇ 2 µÑÇà» ¹ÊÇÔµª µÃǨ¨Ñº¡Òê¹ áÅÐ 2 µÑÇà» ¹á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹ ÊÒÁÒöµÃǨ¨Ñºä´ ·§Ñé àÊ ¹ ¢ÒÇáÅдíÒ
ÃÒ¡ÒÃÍØ»¡Ã³
ÁÍàµÍà ¾Ã ÍÁ ªØ´à¿ ͧ¢Ñº x 2 á¼ ¹°Ò¹¾ÅÒʵԡ¡ÅÁ
ºÍà ´ MicroCamp
¡Å ͧÃͧ¡ÐºÐ¶ Ò¹ x 1 Š;à ÍÁÂÒ§ x 2
ªØ´àÊÒÃͧ¾ÅÒʵԡ x 1
ἧǧ¨ÃµÃǨ¨Ñº áʧÊз ͹ÍÔ¹¿ÃÒàô x 2
ªØ´Ê¡ÃÙáÅй͵ x 1
ἧǧ¨ÃÊÇÔµª
ªÔ¹é µ ÍÁØÁ©Ò¡,ªÔ¹é µ ÍÁØÁ» Ò¹áÅÐªÔ¹é µ ͵ç
Ê¡ÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ.
àÊÒâÅËÐ 25 ÁÁ.
72 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8
¢Ñ¹ é µÍ¹¡ÒûÃСͺ
1. ¹íÒÂÒ§ãÊ »ÃСºà¢ Òã¹Å Í¡ÅÁ ¨Ò¡¹Ñ¹é ¹íÒä»àÊÕºࢠҡѺ᡹ÁÍàµÍà áÅ Ç㪠ʡÃÙà¡ÅÕÂǻŠÍ¢¹Ò´àÅç¡ ¢Ñ¹ÂÖ´ãË á¹ ¹ ·íÒઠ¹¹Õé 2 ªØ´
2. ¹íÒÁÍàµÍÃ Â´Ö à¢ Ò¡Ñºá¼ ¹°Ò¹ â´Â㪠ʡÃÙ 3x6 ÁÁ. 4 µÑǢѹÂÖ´¨Ò¡´ ҹŠҧµÒÁµíÒá˹ §·Õáè Ê´§ã¹ÃÙ»
3. ¹íÒÊ¡ÃÙ 3x10 ÁÁ. à ͼ Ò¹¡Å ͧÃͧ¡ÐºÐ¶ Ò¹, àÊÒâÅËÐáÅÐàÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ. à¾×Íè ÂִࢠҴ Ç¡ѹ â´Â·Õµè Òí á˹ §¡ÒÃà ÍÂáÅÐÂÖ´Ê¡ÃÙ áÊ´§´Ñ§ÃÙ» àÊÒÃͧ·Í§àËÅ×ͧ àÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ.
4. ¹íҡŠͧÃͧ¡ÐºÐ¶ Ò¹ÂִࢠҡѺâ¤Ã§¢Í§Ëع ¹µ â´Â㪠ʡÃÙ 3x10 ÁÁ.ã¹µíÒá˹ §´Ñ§ÃÙ»
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8 l 73
5. 㪠ʡÃÙ 3x15 ÁÁ. à ͼ ҹἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôáÅÐàÊÒ¾ÅÒʵԡ 3 ÁÁ. 2 ªÔ¹é àµÃÕÂÁ ¡ÒÃẺ¹Õé 2 ªØ´ Ê¡ÃÙ 3x15 ÁÁ.
àÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ. x 2
6. Âִἧǧ¨ÃµÃǨ¨ÑºáʧÊз ÍÂÍÔ¹¿ÃÒàô·Ñé§ÊͧªØ´à¢ ҡѺ´ ҹŠҧ¢Í§á¼ ¹°Ò¹·ÕèµíÒá˹ §´Ñ§áÊ´§ã¹ÃÙ» ¢Ñ¹ãË á¹ ¹´ ǹ͵ 3 ÁÁ.
7. Êѧࡵ¤ÇÒÁÊÙ§¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹¶Ö§¾×¹é µ ͧÍÂÙã ¹ª ǧ»ÃÐÁÒ³ 3 ¶Ö§ 5 ÁÁ.
8. ¹íÒºÍà ´ MicroCamp-Mega8 ÁÒÇҧŧº¹°Ò¹¢Í§Ã¶ áÅ ÇàÊÕºÊÒ¢ͧἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàôáÅÐÊÒ¢ͧÁÍàµÍà â´ÂÁÕµÒí á˹ §¡ÒÃàÊÕºÊÒ´ѧÃÙ»
¡Òõ ÍÊÒÂÁÍàµÍÃ
µ ÍÊÒ¨ҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹
74 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8
9. µÔ´µÑ§é ἧǧ¨ÃÊÇÔµª â´ÂàÃÔÁè ¨Ò¡¹íÒªÔ¹é µ ͵çÂִࢠҡѺἠ¹°Ò¹Ëع ¹µ ¡Í ¹ ¢Ñ¹ÂÖ´ãË á¹ ¹´ ÇÂÊ¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ·íÒàËÁ×͹¡Ñ¹ 2 ´ Ò¹ ºÃÔàdz´ ҹ˹ ҢͧËع ¹µ
10.¹íÒªÔ¹é µ ÍÁØÁ» Ò¹ÁÒàÊÕºµ ͨҡªÔ¹é µ Íá¹ÇµÃ§·Õµè ´Ô µÑ§é äÇ ¡Í ¹Ë¹ Ò ¨Ò¡¹Ñ¹é ¹íÒἧǧ¨ÃÊÇÔµª ¢¹Ñ ÂִࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡´ ÇÂÊ¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ·íÒàËÁ×͹¡Ñ¹ 2 ªØ´ ¹íÒä»àÊÕºµ Íࢠҷջè ÅÒ¢ͧªÔ¹é µ ÍÁØÁ» Ò¹ ´ ҹ˹ ҢͧËع ¹µ ·íÒઠ¹¹Õé 2 ¢ Ò§ .
11. ¹íÒÊÒÂÊÑÒ³¢Í§á¼§Ç§¨ÃÊÇÔµª àÊÕºࢠҡѺ¨Ø´µ Í P2 (PC2) áÅÐ P3 (PC3) ¹íÒẵàµÍÃÕè AA ¨íҹǹ 4 ¡ ͹ ºÃèØŧ㹡кж ҹ㵠ἧǧ¨Ã à¾Õ§෠ҹÕË é ¹Ø Â¹µ MicroCamp ¡ç¨Ð¾Ã ÍÁ㪠§Ò¹
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8 l 75
¤ÇÒÁÃÙà ¡ÕÂè ǡѺἧǧ¨ÃÊÇÔµª : µÃǨ¨Ñº¡Òê¹
76 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATMega8 : MicroCamp-Mega8
¤ÇÒÁÃÙà ¡ÕÂè ǡѺἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô : µÃǨ¨ÑºàÊ ¹
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 77
¡Ô¨¡ÃÃÁ·Õè 1 : ¢Ñºà¤Å×Íè ¹Ëع ¹µ MicroCamp àº×Íé §µ ¹ ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ MicroCamp ãË à¤Å×Íè ¹·Õ¹è ¹Ñé ¨Ðµ ͧÁÕ¡ÒÃÊÑ§è ¡ÒÃä»Âѧǧ¨Ã¢ÑºÁÍàµÍà º¹ºÍà ´ MicroCamp-Mega8 ´ Ç¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¨Ö§ä´ àµÃÕÂÁäźÃÒÃÕÊÒí ËÃѺ¤Çº¤ØÁ ǧ¨Ã¢ÑºÁÍàµÍà â´Â੾ÒÐäÇ ãË àÃÕÂ¡ãª ä´ àÅ ·Ñ§é ¹Õàé ¾×Íè ãË §Ò µ Í¡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ â´Â äźÃÒÃÕ·àÕè ¡ÕÂè Ç¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ·§Ñé ËÁ´¨ÐÍÂÙã ¹ä¿Å äźÃÒÃÕ motor.h (´ÙÃÒÂÅÐàÍÕ´ ã¹ÀÒ¤¼¹Ç¡· ÒÂàÅ Á)
¡Ô¨¡ÃÃÁ·Õè 1-1 ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ ÒÊÅѺ¶ÍÂËÅѧ à» ´â»Ãá¡ÃÁ AVR Studio à¾×Íè à¢Õ¹â»Ãá¡ÃÁ·Õè A1-1 ¨Ò¡¹Ñ¹é ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´ â»Ãá¡ÃÁŧ㹺Íà ´ MicroCamp-Mega8 ´ Ǫشâ»Ãá¡ÃÁ PX-400 ¨Ò¡¹Ñ¹é »Å´ÊÒ´Òǹ âËÅ´ÍÍ¡ áÅл ´ÊÇÔµª ¨Ò Âä¿·Õºè Íà ´ MicroCamp-Mega8 â»Ãá¡ÃÁ·Õè A1-1 à» ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ·Õàè » ¹ËÑÇ㨠ËÅѡ㹡Ò÷íÒ§Ò¹¢Í§ºÍà ´ MicroCamp-Mega8 «Öè§ã¹¡Ô¨¡ÃÃÁ¹Õé¹íÒÁÒÊà ҧ໠¹ËØ ¹Â¹µ â´Â â»Ãá¡ÃÁ¹Õé¡íÒ˹´ãË ËØ ¹Â¹µ à¤Å×è͹·Õè仢 ҧ˹ Ò 1 ÇÔ¹Ò·ÕáÅжÍÂËÅѧ 1 ÇÔ¹Ò·Õ áÅ ÇǹÅÙ»·íÒ â»Ãá¡ÃÁ«éÒí Í ҧµ Íà¹×Íè § #include <in_out.h> #include <sleep.h> #include <motor.h> void main() { while(1) {
//
äźÃÒÃդǺ¤ØÁÁÍàµÍà 俵ç
//
ǹ·íÒâ»Ãá¡ÃÁ«éÒí
forward(100);
//
sleep(1000);
//
backward(100);
//
sleep(1000);
//
ÊÑ§è §Ò¹ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò Ë¹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ÊÑ§è §Ò¹ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ
} }
ËÅѧ¨Ò¡à» ´ÊÇÔµª à¾×Íè ¨ ÒÂä¿ãË Ë¹Ø Â¹µ ·Òí §Ò¹ Ëع ¹µ ¨ÐàÃÔÁè à¤Å×Íè ¹·Õ·è ¹Ñ ·Õ â´ÂàÃÔÁè à¤Å×Íè ¹·Õµè ç仢 Ò§ ˹ Ò¡ ͹ ¨ÐÊѧࡵàËç¹Ç Òä¿ LED ·ÕèµíÒá˹ §ÁÍàµÍà ·Ñ駤٠µÔ´à» ¹ÊÕà¢ÕÂÇ ¨Ò¡¹Ñé¹ÍÕ¡ 1 ÇÔ¹Ò·Õ LED ¨Ðà»ÅÕÂè ¹à» ¹ÊÕá´§ ãË ´·Ù ÈÔ ·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ ÇÒ ¶Ù¡µ ͧËÃ×ÍäÁ ¶Ò Ëع ¹µ à¤Å×Íè ¹äÁ ¶¡Ù µ ͧ ãË ÊÅѺÊÒ¢ͧÁÍàµÍà ¨¹Ëع ¹µ à¤Å×Íè ¹·Õäè ´ ¶¡Ù µ ͧ
â»Ãá¡ÃÁ·Õè A1-1 â»Ãá¡ÃÁ¤Çº¤ØÁãË Ë¹Ø Â¹µ MicroCamp à¤Å×Íè ¹·Õ¡è ÅѺä»ÁÒ
78 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¡Ô¨¡ÃÃÁ·Õè 1-2 ¤Çº¤ØÁËع ¹µ à¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁ
â»Ãá¡ÃÁ·Õè A1-2 à» ¹¡ÒâѺà¤Å×è͹ËØ ¹Â¹µ â´Â¡íÒ˹´¤ Ò¡Òè Ò¡íÒÅѧãË ¡ÑºÅ Íáµ ÅÐÅ Í äÁ ෠ҡѹ Ê §¼ÅãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁ ¹Í¡¨Ò¡¹Õãé ¹â»Ãá¡ÃÁ¹ÕÂé §Ñ à¾ÔÁè àµÔÁ¤íÒÊÑ§è µÃǨÊͺ ¡Òá´ÊÇÔµª ¡Í ¹à¢ ÒÊÙ¡ Ò÷íÒ§Ò¹¨ÃÔ§´ Ç â´Â¨Ðµ ͧ¡´ÊÇÔµª SW1 º¹ºÍà ´ MicroCamp-Mega8 ¡ ͹ â»Ãá¡ÃÁ¨Ö§àÃÔèÁ·íÒ§Ò¹ áÅÐËÂØ´·íÒ§Ò¹àÁ×èÍ¡´ÊÇÔµª SW2 #include <in_out.h> #include <sleep.h> #include <motor.h> void main() { while(1) { while((in_d(2)==1));
//
motor(1,100);
//
motor(2,30);
//
while((in_d(3)==1));
//
motor_off();
//
ǹÅÙ»Ãͨ¹¡Ç ҨС´ÊÇÔµª SW1 ¨ Ò¡íÒÅѧãË ¡ºÑ ÁÍàµÍà 1 100 à»Íà à«ç¹µ ¨ Ò¡íÒÅѧãË ¡ºÑ ÁÍàµÍà 2 30 à»Íà à«ç¹µ ǹÅÙ»Ãͨ¹¡Ç Ò¨ÐÁÕ¡Òá´ÊÇÔµª SW2 ËÂØ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍÃ
} }
¼Å¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ
â»Ãá¡ÃÁ·Õè A1-2 äÁ ä´ ãª ¿§ ¡ ª¹Ñè forward ËÃ×Í back ward 㹡ÒâѺà¤Å×Í è ¹Ëع ¹µ ᵠ㪠¿§ ¡ ª¹Ñè motor 㹡ÒâѺ à¤Å×Íè ¹á·¹ «Ö§è ¿ §¡ ª¹Ñè motor ¨Ðá¡ÍÔÊÃÐÃÐËÇ Ò§ÁÍàµÍà ´Ò ¹ « ÒÂáÅТÇҢͧËØ ¹Â¹µ ¨Ö§·íÒãË ÊÒÁÒö¤Çº¤ØÁ¤ÇÒÁàÃçǢͧ ÁÍàµÍà ·§Ñé « ÒÂáÅТÇÒá¡¡Ñ¹ä´ àÁ×Íè ¤ÇÒÁàÃçǢͧÁÍàµÍà ·§Ñé ÊͧµÑÇäÁ ෠ҡѹ Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õàè ÍÕ§仴 Ò¹·ÕÁè ¤Õ ÇÒÁàÃçÇ ¹ ÍÂ¡Ç Ò áÅж Ò¤ÇÒÁàÃçǵ Ò§¡Ñ¹ÁÒ¡æ Ëع ¹µ MicroCamp ¨Ðà¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁ ÊíÒËÃѺ¡ÒõÃǨÊͺ¡Òá´ÊÇÔµª ¢Í§â»Ãá¡ÃÁ·Õè A1-2 㪠¤Òí Êѧè while 㹡ÒõÃǨÊͺà§×Íè ¹ä¢¢Í§¡Òá´ÊÇÔµª àÁ×Íè ¡´ÊÇÔµª PD2 (SW1) ¤ ÒÅͨԡ¨Ðà» ¹ 0 ÅÙ» while ã¹Ê ǹ áá¡ç¨ÐäÁ à» ¹¨ÃÔ§ ÊÒÁÒö¡ÃÐâ´´ä»·íҧҹ㹪ش¤íÒÊÑ§è µ Íä»ä´ ¡ÒõÃǨÊͺ¡´ÊÇÔµª PD3 (SW2) ¡ç¨Ðà» ¹ä»ã¹ÅѡɳÐà´ÕÂÇ ¡Ñ¹ ËÒ¡ÊÇÔµª PD3 (SW2) ¶Ù¡¡´ â»Ãá¡ÃÁ¡ç¨ÐËÂØ´¡Ò÷íÒ§Ò¹ ¢Í§ÁÍàµÍà ·íÒãË Ë¹Ø Â¹µ ËÂØ´à¤Å×Íè ¹·Õè
â»Ãá¡ÃÁ·Õè A1-2 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè ¡íÒ˹´ãË àÃÔÁè µ ¹·íÒ§Ò¹àÁ×Íè ¡´ÊÇÔµª SW1 áÅÐà¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁÍ ҧµ Íà¹×Íè §¨¹¡Ç ҨС´ÊÇÔµª SW2
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 79
¡Ô¨¡ÃÃÁ·Õè 1-3 ¤Çº¤ØÁËع ¹µ à¤Å×Íè ¹·ÕÇè ¹à» ¹ÃÙ»ÊÕàè ËÅÕÂè Á â»Ãá¡ÃÁ·Õè A1-3 à» ¹¡ÒÃÊÑ§è §Ò¹ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè çáÅ ÇàÅÕÂé ÇÊÅѺ¡Ñ¹ä» â´Â¡ÒÃàÅ×Í¡ ·ÔÈ·Ò§¡ÒÃàÅÕÂé Ç¹Ñ¹é ¢Ö¹é ÍÂÙ¡ ºÑ ¡Òá´ÊÇÔµª SW1 ËÃ×Í SW2 ã¹¢Ñ¹é µÍ¹áá¡ ͹àÃÔÁè µ ¹¡ÒÃà¤Å×Íè ¹·Õè #include <in_out.h> #include <sleep.h> #include <motor.h> void main() { while(1) { if (in_d(2)==0) { while(1) { forward(100); sleep(900); s_right(50); sleep(300); } } if (in_d(3)==0) { while(1) { forward(100); sleep(900); s_left(50); sleep(300); } } } }
//
ǹÅÙ»
//
µÃǨÊͺ¡Òá´ÊÇÔµª SW1
//
à¤Å×Íè ¹·Õµè ç໠¹àÇÅÒ 0.9 ÇÔ¹Ò·Õ
//
// //
àÅÕÂé Ç¢ÇÒà» ¹àÇÅÒ 0.3 ÇÔ¹Ò·Õ
à¤Å×Íè ¹·Õµè ç໠¹àÇÅÒ 0.9 ÇÔ¹Ò·Õ àÅÕÂé Ç« ÒÂà» ¹àÇÅÒ 0.3 ÇÔ¹Ò·Õ
â»Ãá¡ÃÁ·Õè A1-3 µ Ò§¨Ò¡â»Ãá¡ÃÁ·Õè A1-2 àÃ×Íè §¡ÒõÃǨÊͺà§×Íè ¹ä¢ â´Â¨ÐµÃǨÊͺ¨Ò¡¤íÒÊѧè IF á·¹ ·íÒãË ÊÒÁÒöá¡¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁÍÍ¡à» ¹ 2 ÃÙ»áººä´ ¹íÒä»»ÃÐÂØ¡µ Êà ҧâ»Ãá¡ÃÁËÅÒÂæ â»Ãá¡ÃÁáÅ ÇàÅ×Í¡¡Ò÷íÒ§Ò¹¨Ò¡¡Òá´ÊÇÔµª
¡´ÊÇÔµª SW2 (à¤Å×Íè ¹·Õµè çáÅ ÇàÅÕÂé Ç¢ÇÒ)
¡´ÊÇÔµª SW1 (à¤Å×Íè ¹·Õµè çàÅÕÂé Ç« ÒÂ)
â»Ãá¡ÃÁ·Õè A1-3 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp ·Õàè Å×Í¡·Ôȷҧ㹡ÒÃà¤Å×Íè ¹·Õäè ´ ¨Ò¡¡Òà ¡´ÊÇÔµª SW1 ËÃ×Í SW2
80 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¡Ô¨¡ÃÃÁ·Õè 2 : µÃǨÊͺÊÔ§è ¡Õ´¢ÇÒ§´ Ç¡Òê¹ ËØ ¹Â¹µ MicroCamp ÁÕ¡ÒõԴµÑé§á¼§Ç§¨ÃÊÇÔµª äÇ ´ ҹ˹ Ò 2 µÑÇ ã¹¡Ô¨¡ÃÃÁ¹Õé¨Ö§¹íÒÁÒ㪠»ÃÐ⪹ 㹡ÒõÃǨ¨ÑºÊÔ觡մ¢ÇÒ§ â´Â¾×é¹°Ò¹¢Í§¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨Ð¤Å Ò¡Ѻ¡Ô¨¡ÃÃÁ·Õè 1-3 ËÒ¡áµ ÊÇÔµª ·Õè㪠㹡ÒáíÒ˹´¡Ò÷íÒ§Ò¹¹Ñ鹨ж١µÃǨÊͺ¡Ò÷íÒ§Ò¹ÍÂÙ µÅÍ´àÇÅÒ à¾×è͹íÒÁÒ ¡í Ò Ë¹´·Ô È ·Ò§¡ÒÃà¤Å×è Í ¹·Õè áÅÐà»ÅÕè  ¹¨Ò¡¡ÒõÃǨÊͺÊÇÔ µ ª SW1 áÅÐ SW2 º¹ºÍà ´ MicroCamp-Mega8 ÁÒà» ¹¡ÒõÃǨÊͺ¨Ò¡á¼§Ç§¨ÃÊÇÔµª ·µÕè Í à¢ Ò¡Ñº¨Ø´ P0 (PC0) áÅÐ P1 (PC1)
¡Ô¨¡ÃÃÁ·Õè 2-1 µÃǨ¨Ñº¡Òê¹àº×Íé §µ ¹ 㹡Ԩ¡ÃÃÁ¹Õãé ª ἧǧ¨ÃÊÇÔµª ·µÕè ´Ô µÑ§é ÍÂÙ´ Ò ¹Ë¹ ҢͧËع ¹µ MicroCamp à» ¹µÑǵÃǨ¨Ñº ¡Òê¹ÊÔ§è ¡Õ´¢ÇÒ§ â´ÂàÁ×Íè ÁÕÇµÑ ¶ØÁÒª¹ËÃ×ÍËع ¹µ à¤Å×Íè ¹·Õäè »ª¹à¢ Ò·Õ´è Ò ¹Ë¹ ҢͧËع ¹µ ¨Ð¡íÒ˹´ ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ áÅ Çà»ÅÕÂè ¹àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õè #include <in_out.h> #include <sleep.h> #include <motor.h> void main() { while((in_d(2)==1));
//
while(1) {
//
ǹÅÙ»Ãͨ¹¡Ç ҨС´ÊÇÔµª SW1 àÃÔÁè µ ¹â»Ãá¡ÃÁ ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí
//
µÃǨÊͺ¡Ò깨ҡÊÇÔµª ·Ò§¢ÇÒÁ×ͧ͢ËØ ¹Â¹µ
if (in_c(2)==0) { backward(100);
//
sleep(400);
//
s_left(50);
//
sleep(300);
//
àÁ×Íè ÁÕ¡Òê¹ Êѧè ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ à» ¹àÇÅÒ 0.4 ÇÔ¹Ò·Õ áÅ ÇÊÑè§ãË àÅÕéÂÇ« Ò ໠¹àÇÅÒ 0.3 ÇÔ¹Ò·Õ
else if (in_c(3)==0) {
//
µÃǨÊͺ¡Ò깨ҡÊÇÔµª ·Ò§« ÒÂÁ×ͧ͢ËØ ¹Â¹µ
backward(100);
//
sleep(400);
//
s_right(50);
//
sleep(300);
//
àÁ×Íè ÁÕ¡Òê¹ Êѧè ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ à» ¹àÇÅÒ 0.4 ÇÔ¹Ò·Õ áÅ ÇÊÑè§ãË àÅÕéÂÇ¢ÇÒ à» ¹àÇÅÒ 0.3 ÇÔ¹Ò·Õ
forward(100);
//
¶ ÒäÁ ¾º¡Òê¹ ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仴 ҹ˹ Ò
}
} else { } } }
â»Ãá¡ÃÁ·Õè A2-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¡Ò깢ͧÊÇÔµª ·µÕè ´Ô µÑ§é ´ ҹ˹ ҢͧËع ¹µ (ÁÕµÍ )
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 81
Ëع ¹µ µÃǨ¾ºÊÔ§è ¡Õ´¢ÇÒ§´ Ò¹« ÒÂÁ×Í
Ëع ¹µ µÃǨ¾ºÊÔ§è ¡Õ´¢ÇÒ§´ Ò¹¢ÇÒÁ×Í
¼Å¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ¡ÒÃÍ Ò¹¤ Ҩҡἧǧ¨ÃÊÇÔµª ·µÕè ´Ô µÑ§é ´ ҹ˹ ҢͧµÑÇËع ¹µ ¨ÐãË ¤Òí Êѧè ઠ¹à´ÕÂǡѺ¡ÒÃÍ Ò¹¤ Ò¨Ò¡ÊÇÔµª SW1 áÅÐ SW2 º¹ºÍà ´ MicroCamp-Mega8 ¡Å ÒǤ×Í àÁ×Íè ÊÇÔµª ¶¡Ù ¡´¨ÐãË Åͨԡ 0 ã¹â»Ãá¡ÃÁ¹ÕÊé ÀÒÇл¡µÔ¨Ð¡íÒ˹´ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »´ ҹ˹ Ò ¶ ÒËҡἧǧ¨ÃÊÇÔµª ·Ò§« Òª¹¡Ñº ÊÔ§è ¡Õ´¢ÇÒ§ Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õ¶è ÍÂËÅѧáÅ ÇàÅÕÂé Çä»·Ò§¢ÇÒ à¾×Íè ËźàÅÕÂè §¨Ò¡ÊÔ§è ¡Õ´¢ÇÒ§¹Ñ¹é ¶ Òἧǧ¨ÃÊÇÔµª ·Ò§´ Ò¹¢ÇÒª¹ Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õ¶è ÍÂËÅѧáÅ ÇàÅÕÂé Çä»·Ò§´ Ò¹« ÒÂà¾×Íè ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇÒ§
â»Ãá¡ÃÁ·Õè A2-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¡Ò깢ͧÊÇÔµª ·µÕè ´Ô µÑ§é ´ ҹ˹ ҢͧËع ¹µ (¨º)
¡Ô¨¡ÃÃÁ·Õè 2-2 ¡ÒÃᡠ䢻 ËÒàÁ×Íè Ëع ¹µ à¤Å×Íè ¹·Õè µÔ´ÍÂÙã ¹ÁØÁÍѺ 㹡óշËÕè ¹Ø Â¹µ MicroCamp ·Õµè ´Ô µÑ§é ἧǧ¨ÃÊÇÔµª à¾×Íè µÃǨ ¨ÑºÊ §¡Õ´¢ÇÒ§·Ò§´ ҹ˹ Òà¤Å×Íè ¹·Õàè ¢ ÒÊÙÁ ÁØ Â ÍÁµ ͧÁÕâÍ¡Òʪ¹¡íÒᾧ ·Ñ§é ·Ò§´ Ò¹« ÒÂáÅТÇÒÍÂÙµ ÅÍ´àÇÅÒ â´Â¨Ò¡¡ÒõÃǨÊÍºã¹¢Ñ¹é µÍ¹ »¡µÔ àÁ×èÍÊÇÔµª ´ Ò¹« Òª¹ ËØ ¹Â¹µ ¨ÐàÅÕéÂÇ¢ÇÒ áÅж ÒÊÇÔµª ´ Ò¹ ¢ÇÒª¹ ËØ ¹Â¹µ ¨ÐàÅÕéÂÇ« Ò ·íÒãË ËØ ¹Â¹µ à¤Å×è͹·Õ誹¡íÒᾧä»ÁÒ äÁ ÊÒÁÒöÍÍ¡¨Ò¡ÁØÁÍѺ¹Õäé ´ ¨Ö§µ ͧÁÕ¡ÒûÃѺ»Ãاâ»Ãá¡ÃÁà¾×Íè á¡ ä¢ à˵ءÒó ·Õèà¡Ô´¢Öé¹¹Õé
82 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
â´Âã¹â»Ãá¡ÃÁ·Õè A2-2 ¨Ð´Ñ´á»Å§¨Ò¡â»Ãá¡ÃÁ·Õè A2-1 ´ Ç¡ÒÃÊà ҧµÑÇá»Ã cnt ¢Ö¹é ÁÒ à¡çº¤ Ò¨íҹǹ¤ÃÑ§é ¢Í§¡Ò깫 ÒÂáÅТÇÒ«éÒí 仫éÒí ÁÒ â´Ââ»Ãá¡ÃÁ¨ÐµÃǨÊͺ¡Ò깫 ÒÂáÅТÇÒ ËÒ¡à¡Ô´µ Íà¹×Íè §¡Ñ¹à¡Ô¹ 5 ¤ÃÑ§é ¨Ð¡íÒ˹´ãË Ë¹Ø Â¹µ ËÁعµÑÇ»ÃÐÁÒ³ 180 ͧÈÒà¾×Íè à»ÅÕÂè ¹àÊ ¹·Ò§ ¡ÒÃà¤Å×Íè ¹·Õè ·íÒãË ÊÒÁÒöËÅØ´ÍÍ¡¨Ò¡¨Ø´ÍѺ¹Õé áµ ¶Ò ã¹ÃÐËÇ Ò§¡ÒùѺ¨íҹǹÃͺ¢Í§¡Ò깫 Ò áÅТÇÒäÁè¤Ãº 5 ¤Ãѧé áÅéÇà¡Ô´¡Ã³Õ·ÁèÕ ¡Õ Òê¹´éÒ¹«éÒÂÊͧ¤Ãѧé ËÃ×Í´éÒ¹¢ÇÒÊͧ¤ÃÑ§é ¨Ðà»ç¹¡ÒÃÃÕ૵¤ ÒµÑǹѺãË ¡ÅѺ໠¹ 0 ãËÁ #include <in_out.h> #include <sleep.h> #include <motor.h> #include <sound.h> void main() {
//
//
¡íÒ˹´µÑÇá»Ãà¾×è͹ѺÃͺ¡Ãª¹« ÒÂáÅТÇÒ ÃÍ¡Òá´ÊÇÔµª SW1 à¾×Íè àÃÔÁè µ ¹·íÒ§Ò¹ Ê §àÊÕ§ 1 ¤Ãѧé àÁ×Íè àÃÔÁè ·íÒ§Ò¹ ǹÅÙ»
//
µÃǨÊͺ¡Òê¹Ç ÒÁÕ¡Òê¹ÊÇÔµª ´ Ò¹¢ÇÒËÃ×ÍäÁ
unsigned char cnt_=0;
//
while((in_d(2)==1));
//
sound(3000,100);
//
while(1) { if (in_c(2)==0) {
äźÃÒÃÕèÊíÒËÃѺÊà ҧàÊÕ§ÍÍ¡ÅíÒ⾧
if ((cnt_%2)==0)
//
{cnt_++;}
//
else {cnt_=0;}
// //
backward(100); sleep(400);
// //
s_left(50);
//
if (cnt_>5) {
//
sleep(700);
//
sound(3000,100);
//
cnt_=0;
//
¤ ÒµÑǹѺ໠¹àÅ¢¤Ù ËÃ×ÍäÁ ¶ Ò㪠áÊ´§Ç Ò¡ ͹˹ Ò¹Õ骹´ Ò¹« Ò à¾ÔÁè ¤ Ò¡ÒùѺ ¶ ÒäÁ 㪠¡Ò깨ҡ´ Ò¹« Ò ãË à¤ÅÕÂà ¤ ÒµÑǹѺ Êѧè Ëع ¹µ ¶ÍÂËÅѧ 0.4 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é àÅÕÂé Ç« Ò µÃǨÊͺ¤ Ò¤ ÒµÑǹѺÁÒ¡¡Ç Ò 5 ËÃ×ÍÂѧ ¶ ÒÁÒ¡¡Ç Ò ãË àÅÕÂé Ç« ÒÂà¾ÔÁè à» ¹ 0.7 ÇÔ¹Ò·Õ ¾Ã ÍÁ·Ñé§Ê §àÊÕ§ÍÍ¡ÅíÒ⾧ áÅÐà¤ÅÕÂà ¤Ò µÑǹѺ
} else
//
{ sleep(300);}
//
¶ ÒµÑǹѺÂѧäÁ ¶§Ö 5 ¡íÒ˹´ÃÐÂÐàÇÅÒàÅÕÂé Ç 0.3 ÇÔ¹Ò·Õ
else if (in_c(3)==0)
//
µÃǨÊͺÊÇÔµª ·Ò§´ Ò¹« ÒÂ
}
â»Ãá¡ÃÁ·Õè A2-2 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¡Ò깢ͧÊÇÔµª ·µÕè ´Ô µÑ§é ´ ҹ˹ ҢͧËع ¹µ áÅÐÊÒÁÒöà¤Å×Íè ¹·ÕÍè Í¡¨Ò¡ÁØÁä´ (ÁÕµÍ )
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 83 { if ((cnt_%2)==1)
//
{cnt_++;} else
//
{cnt_=0;}
//
backward(100);
//
sleep(400);
//
s_right(50);
//
sleep(300);
//
µÑǹѺ໠¹àÅ¢¤ÕËè Ã×ÍäÁ ¶ Ò㪠¡Í ¹Ë¹ Ò¹Ñ¹é ª¹´ Ò¹¢ÇÒ à¾ÔÁè ¤ ÒµÑǹѺ¢Ö¹é 1 ¤ Ò ¶ ÒäÁ 㪠à¤ÅÕÂà ¤Ò µÑǹѺ Êѧè ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ 0.4 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é àÅÕÂé Ç¢ÇÒ 0.3 ÇÔ¹Ò·Õ
} else
//
{forward(100);}
//
ÊíÒËÃѺ¡Ã³ÕäÁ µÃǨ¾º¡Òê¹ ÊÑ§è §Ò¹ãË Ë¹Ø à¤Å×Íè ¹·Õµè ç仴 ҹ˹ Ò
} }
â»Ãá¡ÃÁ·Õè A2-2 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¡Ò깢ͧÊÇÔµª ·µÕè ´Ô µÑ§é ´ ҹ˹ ҢͧËع ¹µ áÅÐÊÒÁÒöà¤Å×Íè ¹·ÕÍè Í¡¨Ò¡ÁØÁä´ (¨º)
84 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¡Ô¨¡ÃÃÁ·Õè 3 : ËØ ¹Â¹µ à¤Å×è͹·ÕèµÒÁàÊ ¹ ¨Ò¡¡ÒõԴµ ͡ѺÊÇÔµª ã¹ 2 ¡Ô¨¡ÃÃÁ·Õ¼è Ò ¹ÁÒà» ¹¡ÒÃáÊ´§ãË àËç¹µÑÇÍ ҧ¢Í§¡ÒÃÍ Ò¹¤ Ò¾Íà µ ÍÔ¹¾Øµ´Ô¨µÔ ÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ÊíÒËÃѺ㹡Ԩ¡ÃÃÁ¹Õ¨é йíÒàʹͶ֧µÑÇÍ ҧ¡ÒÃ㪠§Ò¹¾Íà µÍÔ¹¾Øµã¹¡ÒÃÃѺÊÑÒ³ÍйÒÅÍ¡ à¹×Íè §¨Ò¡¨Ø´µ Í P0 ¶Ö§ P4 ¢Í§ MicroCamp-Mega8 µ Íà¢ Ò ¡Ñº¢Ò¾Íà µ PC0 ¶Ö§ PC4 «Ö§è ÊÒÁÒö·íÒ˹ Ò·Õàè » ¹¢ÒÍÔ¹¾Øµ¢Í§âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 ·ÕÁè ¤Õ ÇÒÁÅÐàÍÕ´㹡ÒÃá»Å§ÊÑÒ³ÊÙ§¶Ö§ 10 ºÔµ´ Ç â´Â¤ Ò·Õäè ´ ¨Ò¡¡ÒÃá»Å§ËÒ¡¾Ô¨ÒóÒã¹àªÔ§àÅ¢°Ò¹ÊÔºáŠǨÐ෠ҡѺ 0 ¶Ö§ 1,023 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ㹡Ԩ¡ÃÃÁ¹Õ¨é ÐÁÕä¿Å äźÃÒÃÕÍ¡Õ 1 µÑÇ·Õµè Í §ãª §Ò¹ ¹Ñ¹è ¤×Í ä¿Å analog.h â´Âä¿Å äźÃÒÃÕ¹¨Õé Ъ ÇÂ㹡ÒáíÒ˹´ÅѡɳСÒ÷íÒ§Ò¹¢Í§¢Ò¾Íà µ PC0 ¶Ö§ PC4 ãË ÊÒÁÒöÃѺÊÑÒ³ÍÔ¹¾ØµÍйÒÅÍ¡ä´ áÅÐãË ¼Å¡Ò÷íÒ§Ò¹ÍÍ¡à» ¹¢ ÍÁÙÅàÅ¢°Ò¹Êͧ¢¹Ò´ 10 ºÔµ ÊÒÁÒö¹íÒÁÒ㪠ã¹ÃٻẺ¢Í§àÅ¢°Ò¹ÊÔº (0 ¶Ö§ 1023) áÅаҹÊԺˡ (0000H ¶Ö§ 03FFH) ä´ ÊíÒËÃѺµÑÇ᷹㹡ÒÃàÃÕ¹ÃÙà Ã×Íè §¹Õ¤é Í× á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô â´ÂµÔ´µÑ§é äÇ ãµ Ëع ¹µ MicroCamp à¾×Íè 㪠㹡ÒõÃǨ¨Ñº¾×¹é ·ÕÊè ´Õ Òí áÅТÒÇ Íѹ¨Ð¹íÒä»ÊÙ¡ ÒõÃǨ¨ÑºàÊ ¹ÊÕ´Òí ËÃ×Í¢ÒÇ ´ Ç «Ö§è à» ¹ÍÕ¡Ë¹Ö§è ¡Ô¨¡ÃÃÁ·ÕÁè ¡Ñ ÁÕ¡ÒùíÒàʹÍ㹡ÒÃàÃÕ¹ÃÙà ¾×Íè à¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ àº×Íé §µ ¹
¡Ô¨¡ÃÃÁ·Õè 3-1 µÃǨÊͺ¾×¹é ·ÕÊè ´Õ Òí áÅТÒÇ àÃÔÁè µ ¹´ Ç¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô 2 ªØ´äÇ ãµ â¤Ã§Ëع ¹µ â´Â µ ͧµÔ´µÑé§ãË Ë Ò§¨Ò¡¾×é¹»ÃÐÁÒ³ 3 ¶Ö§ 5 ÁÔÅÅÔàÁµÃ «Öè§à» ¹ÃÐÂзÕèἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô·íÒ§Ò¹ä´ ´Õ·ÕèÊØ´ ÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁãË ËØ ¹Â¹µ à¤Å×è͹·ÕèµÒÁàÊ ¹ ËØ ¹Â¹µ ¨Ðµ ͧá¡áÂÐãË ÍÍ¡¡ ͹ Ç Ò àÊ ¹·ÕËè ¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¹Ñ¹é ÁÕ¤ÇÒÁᵡµ Ò§¨Ò¡¾×¹é »¡µÔÍ ҧäà ઠ¹ ¾×¹é ¢Í§Ê¹ÒÁà» ¹ÊÕ¢ÒÇ àÊ ¹ ·Õµè Í §¡ÒÃãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¹è ¹Ñé à» ¹ÊÕ´Òí ¡Ò÷ըè ÐãË Ë¹Ø Â¹µ ÊÒÁÒöá¡áÂÐä´ ¼Ùã ª §Ò¹¨Ðµ ͧ·íÒ ¡Ò÷´ÊÍºÍ Ò¹¤ Ò¾×é¹¼ÔÇ¡ Í¹Ç Ò ¤ ÒÊÕ¢ÒÇáÅÐÊÕ´íÒÁÕ¤ Òᵡµ Ò§¡Ñ¹Í ҧäÃ
ÊÙ§¨Ò¡¾×¹é 3-5 ÁÁ.
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 85
(¡) µÃǨÊͺ¾×é¹ÊÕ¢ÒÇ â»Ãá¡ÃÁ·Õè A3-1 à» ¹â»Ãá¡ÃÁÊíÒËÃѺµÃǨÊͺ¡Ò÷íÒ§Ò¹¢Í§á¼§Ç§¨ÃµÃǨ¨Ñºáʧ Êз ͹ÍÔ¹¿ÃÒàô àÁ×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ¨ÐÃÍÃѺ¡Òá´ÊÇÔµª SW1 ËÃ×Í SW2 ¶ Ò¡´ÊÇÔµª SW1 à» ¹¡ÒõÃǨÊͺἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Õèµ Í ÍÂÙ¡ ºÑ ª ͧ P0 ËÃ×Í PC0 ¶ Ò¡´ÊÇÔµª SW2 à» ¹¡ÒõÃǨÊͺἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Õèµ Í ÍÂÙ¡ ºÑ ª ͧ P1 ËÃ×Í PC1 àÁ×Íè ¡´ÊÇÔµª áÅ Çâ»Ãá¡ÃÁ¨ÐÍ Ò¹¤ Ò·Õ¢è Ò¾Íà µËÃ×ͨشµ ͹ѹé æ Í ҧµ Íà¹×Íè § äÁ ÊÒÁÒö¡´ ÊÇÔµª à¾×Íè Í Ò¹¤ ÒÍÕ¡ª ͧ˹֧è ä´ µ ͧ¡´ÊÇÔµª RESET à¾×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁãËÁ ෠ҹѹé àÁ×èÍÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàÃ´ä´ áÅ Ç ¹íÒ¤ Ò·Õèä´ à»ÃÕºà·Õº¡Ñº¤ Ò 350 «Ö§è ¨Ò¡¡Ò÷ռè àÙ ¢Õ¹·´ÊͺáÅ Çà» ¹¤ Ò·Õàè ËÁÒÐÊÁ à» ¹¤ Ò¡ÅÒ§ÃÐËÇ Ò§ÊÕ¢ÒÇáÅÐÊÕ´Òí â´Â¶ Ò¤ Ò ·ÕèÍ Ò¹ä´ ÁÕ¤ ÒÁÒ¡¡Ç Ò 350 ãË µÕ¤ÇÒÁÇ Òà» ¹ÊÕ¢ÒÇ áÅФ Òã´ æ ·ÕèÍ Ò¹ä´ ¹ ÍÂ¡Ç Ò 350 ãË µÕ¤ÇÒÁÇ Ò à» ¹ÊÕ´Òí àÁ×Íè Í Ò¹¤ Òä´ à» ¹ÊÕ¢ÒÇ â»Ãá¡ÃÁ¡ç¨ÐÊ §àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧ áÊ´§Ç Òἧǧ¨ÃµÃǨ¨Ñº¡Òà Êз ͹ÍÔ¹¿ÃÒàô·íÒ§Ò¹ä´ à» ¹»¡µÔ #include <in_out.h> #include <sound.h> #include <analog.h> void main() { while(1) { if((in_d(2)==0)) { while(1) { if (analog(0)>350) { sound(3000,100); } } } if((in_d(3)==0)) { while(1) { if (analog(1)>350) { sound(3000,100); } } } } }
// // // // // //
// // // //
äźÃÒÃÕÊíÒËÃѺ¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ÍйÒÅÍ¡ ǹÅÙ»ÃÍ¡Òá´¤ÕÂà Å×Í¡Í Ò¹¨Ò¡ P0 ËÃ×Í P1 µÃǨÊͺ¡Òá´¤Õ SW1 ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí µÃǨÊͺ¤ Ò¨Ò¡ª ͧ P0 à» ¹¾×¹é ·ÕÊè ¢Õ ÒÇËÃ×ÍäÁ à» ¹ÊÕ¢ÒÇÊ §àÊÕ§ÍÍ¡ÅíÒ⾧ µÃǨÊͺ¡´¤ÕÂÊ ÇÔµª SW2 ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí µÃǨÊͺ¤ Ò¨Ò¡ª ͧ P1 à» ¹¾×¹é ·ÕÊè ¢Õ ÒÇËÃ×ÍäÁ ¶ Òà» ¹ÊÕ¢ÒÇÊ §àÊÕ§ÍÍ¡ÅíÒ⾧
â»Ãá¡ÃÁ·Õè A3-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¾×¹é ·ÕÊè ¢Õ ÒÇ
86 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
(¢) ¢Ñ鹵͹¡Ò÷´Êͺἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ (1) Êà ҧἠ¹·´ÊͺÊÕ â´Â¡íÒ˹´¾×¹é ¼ÔǷѧé ÊÕ¢ÒÇáÅÐÊÕ´Òí ´Ñ§áÊ´§ã¹ÃÙ» (2) ¹íÒËع ¹µ ÇÒ§ã¹¾×¹é ·Õºè ÃÔàdzÊÕ´Òí ¡ ͹¨Ò¡¹Ñ¹é ¡´ÊÇÔµª SW1 à¾×Íè ·´Êͺἧǧ¨ÃµÃǨ ¨ÑºáʧÊз ͹«Ö觵 ͡Ѻ¨Ø´µ Í P0
(3) ã¹¢³ÐÍÂÙº ¹¾×¹é ÊÕ´Òí Ëع ¹µ ¨Ðµ ͧäÁ ʧ àÊÕ§ÍÍ¡ÁÒ (4) ¹íÒËع ¹µ ÇÒ§º¹¾×¹é ÊÕ¢ÒÇ Ëع ¹µ ¨Ðµ Í§Ê §àÊÕ§ÍÍ¡ÁÒ ·´Åͧâ¡´ ҹ˹ ÒáÅд Ò¹ ËÅѧ¢Í§ËØ ¹Â¹µ ¨Ðµ ͧÁÕàÊÕ§ÍÂÙ µÅÍ´àÇÅÒ
(5) ¡´ÊÇÔµª RESET ¹íÒËØ ¹Â¹µ ä»ÇÒ§·Õè¾×é¹·ÕèÊÕ´íÒÍÕ¡¤ÃÑé§ ¡´ÊÇÔµª SW2 à¾×èÍ·´Êͺἧ ǧ¨ÃµÃǨ¨ÑºáʧÊз ͹·Õµè Í ¡Ñº P1 ·íÒµÒÁ¢Ñ¹é µÍ¹ (3) áÅÐ (4) ÍÕ¡¤Ãѧé (6) ¶ Ò¡ÒõÃǨÊͺ Ëع ¹µ äÁ ʧ àÊÕ§àÁ×Íè ÇÒ§º¹¾×¹é ÊÕ¢ÒÇ ãË ·Òí Å´¤ ÒµÑÇàÅ¢ 350 ·Õãè ª ã¹ ¡ÒÃà»ÃÕºà·Õºŧ áµ äÁ ¤ÇÃÁÕ¤ ÒµèíÒ¡Ç Ò 100 ËÃ×Í»ÃѺµíÒá˹ §¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàôãË ã¡Å ¡Ñº¾×é¹à¾ÔèÁ¢Öé¹
(¤) µÃǨÊͺ¾×¹é ÊÕ´Òí à¾×Íè ãË Á¹Ñè ã¨Ç Ò¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡â»Ãá¡ÃÁ·Õè A3-1 à» ¹¤ Ò·Õãè ª ä´ ·§Ñé ÊÕ¢ÒÇáÅÐÊÕ´Òí ¨Ö§¨íÒà» ¹µ ͧ 㪠â»Ãá¡ÃÁ·Õè A3-2 ·íÒ¡ÒõÃǨÊͺ¡Ã³Õ ÊÕ´Òí ÍÕ¡¤Ãѧé â´Â㪠¢¹Ñé µÍ¹ã¹¡ÒõÃǨÊͺઠ¹à´ÕÂǡѺ ¡ÒõÃǨÊͺÊÕ¢ÒÇ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 87
#include <in_out.h> #include <sound.h> //
äźÃÒÃÕÊíÒËÃѺ¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ÍйÒÅÍ¡
//
ǹÅÙ»ÃÍ¡Òá´¤ÕÂà Å×Í¡Í Ò¹¨Ò¡ P0 ËÃ×Í P1
if((in_d(2)==0)) {
//
µÃǨÊͺ¡Òá´¤Õ SW1
while(1) {
//
ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí
if (analog(0)<350) {
//
µÃǨÊͺ¤ Ò¨Ò¡ª ͧ P0 à» ¹¾×¹é ·ÕÊè ´Õ Òí ËÃ×ÍäÁ
sound(3000,100); }
//
à» ¹ÊÕ´íÒÊ §àÊÕ§ÍÍ¡ÅíÒ⾧
if((in_d(3)==0)) {
//
µÃǨÊͺ¡´¤ÕÂÊ ÇÔµª SW2
while(1) {
//
ǹÅÙ»·íÒâ»Ãá¡ÃÁ«éÒí
//
µÃǨÊͺ¤ Ò¨Ò¡ª ͧ P1 à» ¹¾×¹é ·ÕÊè ´Õ Òí ËÃ×ÍäÁ
//
¶ Òà» ¹ÊÕ´íÒÊ §àÊÕ§ÍÍ¡ÅíÒ⾧
#include <analog.h> void main() { while(1) {
} }
if (analog(1)<350) { sound(3000,100); } } } } }
â»Ãá¡ÃÁ·Õè A3-2 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¾×Íè µÃǨÊͺ¾×¹é ·ÕÊè ´Õ Òí
88 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¡Ô¨¡ÃÃÁ·Õè 3-2 Ëع ¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ÃٻẺàº×éͧµ ¹¢Í§¡ÒÃà¢Õ¹â»Ãá¡ÃÁãË ËØ ¹Â¹µ à¤Å×è͹·ÕèµÒÁàÊ ¹ÁÕ 3 ÃٻẺ¤×Í 1. ¡Ã³Õ·áÕè ¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Ñ§é ÊͧªØ´¤Ã ÍÁÍÂÙº ¹àÊ ¹ ¡ÒÃÊÑ§è ¡Òèҡâ»Ãá¡ÃÁ ¨Ð¡íÒ˹´ãË ËØ ¹Â¹µ à¤Å×è͹·Õèä»´ ҹ˹ Ò 2. ¡Ã³Õ·áÕè ¼§Ç§¨Ã´ Ò¹« ÒÂà¨ÍàÊ ¹ÊÕ´Òí áÊ´§Ç ÒËع ¹µ àÍÕ§µÑÇÍÍ¡¹Í¡àÊ ¹ä»·Ò§ ¢ÇÒ ãË àÍÕ§µÑÇ·Ò§« ÒÂà¾×èÍ¡ÅѺ令à ÍÁÍÂÙ º¹àÊ ¹ 3. ¡Ã³Õ·áÕè ¼§Ç§¨Ã´ Ò¹¢ÇÒà¨ÍàÊ ¹ÊÕ´Òí áÊ´§Ç ÒËع ¹µ àÍÕ§µÑÇÍÍ¡¹Í¡àÊ ¹·Ò§´ Ò¹ « ÒÂÁ×Í ãË àÍÕ§µÑÇ·Ò§¢ÇÒ ¡ÅѺ令à ÍÁÍÂÙº ¹àÊ ¹ ¨Ò¡à˵ءÒó ·§Ñé ÊÒÁ¹íÒä»à¢Õ¹໠¹â»Ãá¡ÃÁ·Õè A3-3
à˵ءÒó ·Õè 1 ἧǧ¨ÃµÃǨ¨Ñº¤Ã ÍÁàÊ ¹
à˵ءÒó ·Õè 2 ἧǧ¨ÃµÃǨ¨Ñº·Ò§« Ò¾º àÊ ¹´íÒ
à˵ءÒó ·Õè 3 ἧǧ¨ÃµÃǨ¨Ñº·Ò§¢ÇÒ¾º àÊ ¹´íÒ
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 89
#include <in_out.h> #include <sound.h> #include <analog.h> #include <motor.h>
//
unsigned int AD0=350,AD1=350; void main() {
//
äźÃÒÃÕÊÒí ËÃѺ¢ÑºÁÍàµÍà ¡íÒ˹´¤ ÒÍ Ò§ÍÔ§ÊíÒËÃѺૹà«ÍÃ
//
ÃÍ¡Òá´ÊÇÔµª SW1 à¾×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ
while((in_d(2)==1)); while(1) { if((analog(0)>AD0)&&(analog(1)>AD1))
//
forward(100);
//
if (analog(0)<AD0)
//
s_left(100);
//
if (analog(1)<AD1)
//
s_right(100);
//
ἧǧ¨ÃµÃǨ¨Ñº¾º¾×é¹ÊÕ¢ÒÇ·Ñ駤٠à¤Å×Íè ¹·Õµè ç ἧǧ¨ÃµÃǨ¨Ñº´ Ò¹« Ò¾ºÊÕ´íÒ àÅÕÂé Ç« Ò ἧǧ¨ÃµÃǨ¨Ñº´ Ò¹¢ÇÒ¾ºÊÕ´Òí àÅÕÂé Ç¢ÇÒ
} }
¹íÒËع ¹µ MicroCamp ä»ÇÒ§¤Ã ÍÁº¹àÊ ¹ÊÕ´Òí ¡´ÊÇÔµª SW1 ãË Ë¹Ø Â¹µ àÃÔÁè µ ¹à¤Å×Íè ¹·Õè Ëع ¹µ ¨ÐÊÒÁÒöà¤Å×Íè ¹·Õµè ÒÁàÊ ¹ä´ ¶ Ò¡ÒõÃǨ¨ÑºàÊ ¹µ Ò§ æ ÂѧáÁ ¹ÂíÒäÁ à¾Õ§¾Í ãË »ÃѺ¤ ÒÍ Ò§ÍÔ§ã¹â»Ãá¡ÃÁ áÅ Ç·íÒ¡Ò÷´ÊͺãËÁ Í¡Õ ¤Ãѧé
â»Ãá¡ÃÁ·Õè A3-3 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí
90 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¡Ô¨¡ÃÃÁ·Õè 3-3 Ëع ¹µ µÃǨ¨Ñº·Ò§á¡ ´ Ç¡ÒÃ㪠ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô 2 ªØ´·íҧҹ໠¹µÑǵÃǨ¨ÑºàÊ ¹¹Ñé¹ Âѧ ÊÒÁÒö¹íÒä»ãª µÃǨ¨ÑºàÊ ¹ä´ ÍÕ¡ÃٻẺ˹Ö觤×Í µÃǨÊͺàÊ ¹µÑ´ ·Ò§á¡ àÁ×èÍËØ ¹Â¹µ à¤Å×è͹·ÕèÁÒ¶Ö§·Ò§á¡ËÃ×ÍàÊ ¹ µÑ´ ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Ñ§é Êͧ ¨Ð¾ºàÊ ¹ÊÕ´Òí ´Ñ§¹Ñ¹é ¨Ö§µ ͧà¾ÔÁè àµÔÁà§×Íè ¹ä¢¹ÕÅé §ã¹ â»Ãá¡ÃÁ㹡óշÕèἧǧ¨Ã·Ñé§ÊͧµÃǨ¾ºÊÕ´íÒ ´Ñ§áÊ´§ã¹â»Ãá¡ÃÁ·Õè A3-4 #include <in_out.h> #include <sound.h> #include <analog.h> #include <motor.h>
//
unsigned int AD0=350,AD1=350;
//
unsigned char i=0,j=0; void main() {
//
äźÃÒÃÕÊè Òí ËÃѺ¢ÑºÁÍàµÍà ¤ ÒÍ Ò§ÍÔ§ÊíÒËÃѺµÑǵÃǨ¨Ñº µÑÇá»ÃÊíÒËÃѺà¡çº¤ Ò¡ÒùѺ¨íҹǹá¡
//
ÃÍ¡´ÊÇÔµª SW1 àÃÔÁè µ ¹·íÒ§Ò¹
//
µÃǨ¾º·Ò§á¡ËÃ×ÍäÁ
while((in_d(2)==1)); while(1) { if((analog(0)<AD0)&&(analog(1)<AD1)) {
à¾ÔÁè ¤ ÒµÑǹѺ ÊÑ觶ÍÂËÅѧàÅ硹 ÍÂà¾×èͪ ÇÂËÂØ´ÁÍàµÍÃ
j++;
//
backward(30); sleep(10);
//
motor_stop(ALL);
//
for (i=0;i<j;i++) { sound(2500,100); sleep(50);
//
àºÃ¡ÁÍàµÍà ǹÅٻ෠ҡѺ¨íҹǹ·Ò§á¡·ÕèµÃǨ¾º
} forward(100);
//
Ê §àÊÕ§
sleep(300);
//
à¤Å×è͹·Õè仢 ҧ˹ Òà¾×èÍ¢ ÒÁ·Ò§á¡
}
â»Ãá¡ÃÁ·Õè A3-4 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ẺÁÕ¡ÒõÃǨÊͺ ·Ò§á¡ (ÁÕµÍ )
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 91
if((analog(0)>AD0)&&(analog(1)>AD1))
//
forward(100);
//
if (analog(0)<AD0)
//
s_left(100);
//
if (analog(1)<AD1)
//
s_right(100);
//
àÊ ¹·Ò§»¡µÔ µÃǨ¾ºÊÕ¢ÒÇ·Ñ§é ¤Ù à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò µÑǵÃǨ¨Ñº´ Ò¹« Ò¾ºÊÕ´íÒ àÅÕÂé Ç« Ò µÑǵÃǨ¨Ñº´ Ò¹¢ÇÒ¾ºÊÕ´íÒ àÅÕÂé Ç¢ÇÒ
} }
ã¹â»Ãá¡ÃÁ¹Õàé Á×Íè Ëع ¹µ ¾º·Ò§á¡ ¨ÐËÂØ´·Õáè ¡¹Ñ¹é ¾Ã ÍÁ·Ñ§é Ê §àÊÕ§ÍÍ¡ÁÒ·ÕÅè Òí ⾧ ¨Ò¡¹Ñ¹é àÁ×Íè ¾º ·Ò§á¡µ Íä» ¡ç¨Ð¢ÑºàÊÕ§ÍÍ¡ÁÒà¾ÔÁè ¢Ö¹é µÒÁ¨íҹǹ·Ò§á¡·Õ¾è º ¢ ÍÊѧࡵ : ¡ÒÃËÂØ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà à¾×Íè ãË Ë¹Ø Â¹µ ËÂØ´¡ÒÃà¤Å×Íè ¹·Õ·è ¹Ñ ·Õ·¹Ñ ã´¹Ñ¹é ¡ÒÃàºÃ¡ÁÍàµÍà à¾Õ§Í ҧà´ÕÂÇÍÒ¨¨ÐäÁ à¾Õ§¾Í ´Ñ§¹Ñ¹é µ ͧÊѧè ãË ÁÍàµÍà ·Òí §Ò¹à¾×Íè ¡íÒ˹´ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ´ Ç ÃÐÂÐàÇÅÒÊѹé æ ª Ç´ Ç Ëع ¹µ ¨§Ö ÊÒÁÒöËÂØ´¡ÒÃà¤Å×Íè ¹·Õäè ´ ã¹µíÒá˹ §·Õµè Í §¡ÒÃ
â»Ãá¡ÃÁ·Õè A3-4 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ MicroCamp à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ẺÁÕ¡ÒõÃǨÊͺ ·Ò§á¡ (¨º)
92 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 93
«Íà Êâ»Ãá¡ÃÁ¢Í§ä¿Å äźÃÒÃÕ·§Ñé ËÁ´ ·Õãè ª 㹪ش MicroCamp-Mega8 l
in_out.h äźÃÒÃÕʧ ¤ Ò´Ô¨µÔ ÍÅàÍÒµ ¾µØ ËÃ×ÍÍ Ò¹¤ Ò¨Ò¡´Ô¨µÔ ÍÅÍÔ¹¾ØµÊíÒËÃѺ¢Ò¾Íà µµ Ò§ æ
#ifndef _IN_OUT_ #define _IN_OUT_ #define toggle_b(x) DDRB |= _BV(x); #define toggle_c(x) DDRC |= _BV(x); #define toggle_d(x) DDRD |= _BV(x); char in_b(char _bit) { DDRB &= ~(1<<_bit); return((PINB & _BV(_bit))>>_bit); } char in_c(char _bit) { DDRC &= ~(1<<_bit); return((PINC & _BV(_bit))>>_bit); } char in_d(char _bit) { DDRD &= ~(1<<_bit); return((PIND & _BV(_bit))>>_bit); } void out_b(char _bit,char _dat) { DDRB |= _BV(_bit); if(_dat) PORTB |= _BV(_bit); else PORTB &= ~_BV(_bit); } void out_c(char _bit,char _dat) { DDRC |= _BV(_bit); if(_dat) PORTC |= _BV(_bit); else PORTC &= ~_BV(_bit); } void out_d(char _bit,char _dat) { DDRD |= _BV(_bit); if(_dat) PORTD |= _BV(_bit); else PORTD &= ~_BV(_bit); } #endif
PORTB ^= _BV(x); PORTC ^= _BV(x); PORTD ^= _BV(x);
94 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
l sleep.h
äźÃÒÃÕ¿ §¡ ªÑ蹡ÒÃ˹ ǧàÇÅÒ
#ifndef _sleep_ #define _sleep_ void sleep(unsigned int ms) { unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<795;j++); } #endif
l
analog.h äźÃÒÃÕÊÒí ËÃѺ¡ÒÃÍ Ò¹¤ ÒÊÑÒ³ÍйÒÅÍ¡¨Ò¡¨Ø´µ Í P0 ¶Ö§ P4
unsigned int analog(unsigned char channel) { unsigned int adc_val; ADMUX = 0x40; ADMUX |= channel; // Sigle end mode ADCSRA = 0xC6; while((ADCSRA & (1<<ADSC))); adc_val = ADCL; adc_val += (ADCH*256); return(adc_val); }
l
sound.h
äźÃÒÃÕÊÒí ËÃѺÊà ҧàÊÕ§ÍÍ¡ÅíÒ⾧
#include <in_out.h> #include <sleep.h> void delay_sound(unsigned int ms) { unsigned int i,j; for(i=0;i<ms;i++) for(j=0;j<200;j++); } void sound(int freq,int time) { int dt=0,m=0; // Keep value and dt = 5000/freq; // Keep active logic delay time = (5*time)/dt; // Keep counter for generate sound for(m=0;m<time;m++) // Loop for generate sound(Toggle logic P0.12) { out_d(4,1); delay_sound(dt); // Delay for sound out_d(4,0); delay_sound(dt); // Delay for sound } } void sound_cnt(unsigned char cnt,int freq,int time) { unsigned char i; for (i=0;i<cnt;i++) { sound(freq,time); sleep(300); } }
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 95 l led.h
äźÃÒÃդǺ¤ØÁ LED â´ÂäÁ ú¡Ç¹¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁËÅÑ¡
// Library for LED indicator by Timer 2 interrupt every 5 ms #include <avr/interrupt.h> #include <avr/signal.h> #include <in_out.h> unsigned char LED=0; unsigned char LED_cnt; SIGNAL (SIG_OVERFLOW2) { TCNT2 = 178; LED_cnt++; if (LED_cnt>30) { LED_cnt=0; if (LED==1) { toggle_c(5); } else if (LED==2) { toggle_d(1); } else if (LED==3) { toggle_c(5); toggle_d(1); } }
// Interval 10 ms // Reload interval 10 ms(TCNT2 = 178) // Increment Counter // Check Counter 10 ms X 30 // Clear Counter // Check LED1 Enable
// Check LED2 Enable
// Check LED1 and LED2 Enable
} void interval_init() // Config. and Start up timer 0 { TCCR2 |= (1<<CS22)|(1<<CS21)|(1<<CS20); // Prescaler 1024,16 MHz,1 MC = 1024/16M = 64us/count TIFR |= 1<<TOV2; //Clear TOV2 / clear TIMSK |= 1<<TOIE2; //Enable Timer2 Overflow Interrupt TCNT2 = 178; // Interval 10 ms sei(); // Enable all interrupt } void led1_on() { interval_init(); LED |= (1<<0) ; } void led1_off() { LED &= ~_BV(0); } void led2_on() { interval_init(); LED |= (1<<1) ; } void led2_off() { LED &= ~_BV(1); }
// Start Blinking LED1
// Stop Blinking LED1
// Start Blinking LED2
// Stop Blinking LED2
96 l
l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
motor.h äźÃÒÃդǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà áÅСÒâѺà¤Å×Íè ¹Ëع ¹µ
/* Hardware Configuration MOTOR1 - PD7 Connect to 1B port - PD6 Connect to 1A port - PB1 Connect to 1E port MOTOR2 - PB0 Connect to 2A port - PD5 Connect to 2B port - PB2 Connect to 2E port #include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #define ALL 3 #define all 3 unsigned char _duty1=0,_duty2=0; char pwm_ini =0; SIGNAL (SIG_OVERFLOW1) { OCR1AL = _duty1; OCR1BL = _duty2; }
// // // //
Clear all motor Clear all motor duty cycle variable Flag for check initial ?
// Interval 1 ms // Duty Cycle 1 Read // Duty Cycle 2 Read
void pwm_init() { TCCR1A |= (1<<WGM10); TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM12); // Set Prescaler // TCCR1B = (1<<CS12)|(1<<WGM12); // Set Prescaler TIFR |= 1<<TOV1; //Clear TOV0 / clear TIMSK |= 1<<TOIE1; //Enable Timer0 Overflow Interrupt //timer_enable_int(_BV(TOIE1)); sei(); } void pwm(char channel,unsigned int duty) { duty = (duty*255)/100; // Convert 0-100 to 0-255 if(pwm_ini==0) // PWM Initial ? { pwm_init(); // If no Intitial it pwm_ini=1; // show now initial } if(channel==2) { TCCR1A |= _BV(COM1A1); DDRB |= _BV(PB1); OCR1AL = duty; _duty1 = duty; } else if(channel==1) { TCCR1A |= _BV(COM1B1); DDRB |= _BV(PB2); OCR1BL = duty; _duty2 = duty; }
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 97 else if(channel==3) { TCCR1A |= _BV(COM1A1); DDRB |= _BV(PB1); OCR1AL = duty; _duty1 = duty; TCCR1A |= _BV(COM1B1); DDRB |= _BV(PB2); OCR1BL = duty; _duty2 = duty; } } void motor(char _channel,int _power) { if(_power>0) { pwm(_channel,_power); if(_channel==2) { out_d(7,1); out_d(6,0); } else if(_channel==1) { out_d(5,0); out_b(0,1); } } else { pwm(_channel,abs(_power)); if(_channel==2) { out_d(7,0); out_d(6,1); } else if(_channel==1) { out_d(5,1); out_b(0,0); } } } void motor_stop(char _channel) { pwm(_channel,100); if(_channel==2 ||_channel==3) { out_d(7,0); out_d(6,0); } if(_channel==1||_channel==3) { out_d(5,0); out_b(0,0); } }
98 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
void motor_off() { pwm(3,0); out_d(7,0); out_d(6,0); out_d(5,0); out_b(0,0); } void forward(int speed) { motor(1,speed); motor(2,speed); } void backward(int speed) { motor(1,speed*-1); motor(2,speed*-1); } void s_left(int speed) { motor(1,speed); motor(2,speed*-1); } void s_right(int speed) { motor(1,speed*-1); motor(2,speed); }
l timer.h
äźÃÒÃÕ¿è § ¡ ª¹Ñè ¨ÑºàÇÅÒËÃ×͹Ѻ¤ ÒàÇÅÒ â´ÂäÁ ú¡Ç¹¡Ò÷íÒ§Ò¹ËÅÑ¡
#include <C:/WinAVR/avr/include/avr/interrupt.h> #include <C:/WinAVR/avr/include/avr/signal.h> /********************** Timer 0 Interrupt **********************************/ /********************* Interval 1 ms ****************************************/ unsigned long _ms=0; SIGNAL (SIG_OVERFLOW0) { TCNT0 = 6; _ms++; } void timer_start(void) {
}
// Interval 1 ms // Interval 1 ms
// Config. and Start up timer 0
TCCR0 = (1<<CS01)|(1<<CS00); TIFR |= 1<<TOV0; TIMSK |= 1<<TOIE0; TCNT0 = 6;
// Prescaler 64,16MHz,1 MC = 64/16M = 4us/count //Clear TOV0 / clear //Enable Timer0 Overflow Interrupt // Interval 1 ms
sei(); _ms = 0;
// Enable all interrupt
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8 l 99 void timer_stop() { TCCR0 = 0; TCNT0 = 0; TIMSK &= ~_BV(TOIE0); _ms = 0; } void timer_pause() { TCCR0 = 0; }
// Stop timer and // Clear bit TOIE0 // Clear time
// Stop timer and not clear time
void timer_resume() { TCCR0 = (1<<CS01)|(1<<CS00); // Prescaler 64,16 MHz,1 MC = 64/16M = 4us/count } unsigned long msec() { return(_ms); } unsigned long sec() { return(_ms/1000); }
100 l
¤ÙÁ Í× »ÃСͺ¡ÒÃ㪠§Ò¹ªØ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ATmega8 : MicroCamp-Mega8
´íÒà¹Ô¹¡ÒèѴ¾ÔÁ¾ â´Â ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ 3133/53 «.ÊØ¢ÁØ ÇÔ· 101/2 ¶.ÊØ¢ÁØ ÇÔ· á¢Ç§ºÒ§¹Ò ࢵºÒ§¹Ò ¡ÃØ§à·¾Ï 10260 â·ÃÈѾ· 0-2747-7001-4 â·ÃÊÒà 0-2747-7005 ʧǹÅÔ¢ÊÔ·¸Ôµì ÒÁ ¾.Ã.º. ÅÔ¢ÊÔ·¸Ôì ¾.È. 2521 Ë ÒÁ¡ÒÃÅÍ¡àÅÕ¹äÁ ÇÒ Ê Ç¹Ë¹Ö§è Ê Ç¹ã´¢Í§Ë¹Ñ§Ê×ÍàÅ Á¹Õé ¹Í¡¨Ò¡¨Ðä´ ÃºÑ Í¹ØÒµ ÃÒÂÅÐàÍÕ´·Õ»è ÃÒ¡¯ã¹¤ÙÁ Í× àÅ Á¹Õäé ´ ¼Ò ¹¡ÒõÃǨ·Ò¹Í ҧÅÐàÍÕ´áÅж ǹ¶Õè à¾×Íè ãË Á¤Õ ÇÒÁÊÁºÙó áÅж١ µ ͧÁÒ¡·ÕÊè ´Ø ÀÒÂãµ à§×Íè ¹ä¢áÅÐàÇÅÒ·Õ¾è §Ö ÁÕ¡Í ¹¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡ ¡ÒùíÒ¢ ÍÁÙÅ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé »ãª ·Ò§ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔä´ ÁÀÕ ÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ »ÃСÒÃã´ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×Íè ¹·ÕÍè Ò¨ÁÕáÅÐä´ ÃºÑ ¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ÍÍ¡ä»¹Ñ¹é ·Ò§ºÃÔÉ·Ñ Ï ¨Ð¾ÂÒÂÒÁªÕáé ¨§áÅÐ á¡ ä¢ã¹¡ÒèѴ¾ÔÁ¾ ¤ÃÑ§é µ Íä»