MicroCamp

Page 1

¹íÒàʹͼ Ò¹ÁØÁÁͧ·Õèᵡµ Ò§ ÊíÒËÃѺ¼Ù ʹ㨷ÕèÍÒ¨äÁ ÁÕ¾×é¹°Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÁÒ¡ ͹ â´ÂàÃÕ¹ÃÙ ¼ Ò¹â»Ãá¡ÃÁÀÒÉÒ 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 Ë ÒÁ¡ÒÃÅÍ¡àÅÕ¹äÁ ÇÒ Ê Ç¹Ë¹Ö§è Ê Ç¹ã´¢Í§Ë¹Ñ§Ê×ÍàÅ Á¹Õé ¹Í¡¨Ò¡¨Ðä´ ÃºÑ Í¹Ø­Òµ ÃÒÂÅÐàÍÕ´·Õ»è ÃÒ¡¯ã¹¤ÙÁ Í× àÅ Á¹Õäé ´ ¼Ò ¹¡ÒõÃǨ·Ò¹Í ҧÅÐàÍÕ´áÅж ǹ¶Õè à¾×Íè ãË Á¤Õ ÇÒÁÊÁºÙó áÅж١ µ ͧÁÒ¡·ÕÊè ´Ø ÀÒÂãµ à§×Íè ¹ä¢áÅÐàÇÅÒ·Õ¾è §Ö ÁÕ¡Í ¹¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡ ¡ÒùíÒ¢ ÍÁÙÅ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé »ãª ·Ò§ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔä´ ÁÀÕ ÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ »ÃСÒÃã´ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×Íè ¹·ÕÍè Ò¨ÁÕáÅÐä´ ÃºÑ ¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ÍÍ¡ä»¹Ñ¹é ·Ò§ºÃÔÉ·Ñ Ï ¨Ð¾ÂÒÂÒÁªÕáé ¨§áÅÐ á¡ ä¢ã¹¡ÒèѴ¾ÔÁ¾ ¤ÃÑ§é µ Íä»



Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.