สนุกกับไมโครคอนโทรลเลอร์ด้วย Interactive C

Page 1

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

9

º··Õè 1

AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ´ ÇÂâ»Ãá¡ÃÁ Interactive C à¾×Íè ʹѺʹعãË ¡ÒÃàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÁÃö¹ÐÊ٧͠ҧ 68HC11 § ÒÂáÅÐÊдǡ ÁÒ¡¢Öé¹ ¨Ö§ÁÕ¤ÇÒÁ¾ÂÒÂÒÁÍ͡ẺªØ´àÃÔèÁµ ¹àÃÕ¹ÃÙ ·ÕèÊÒÁÒö㪠§Ò¹ä´ â´ÂäÁ ¨íÒà» ¹µ ͧ㪠·Ñ¡ÉÐ ÁÒ¡¹Ñ¡ ·Ñ§é ã¹´ Ò¹¤ÇÒÁÃÙ· Ò§ÎÒà ´áÇà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÃ×Í¡ÒÃà¢Õ¹â»Ãá¡ÃÁã¹àªÔ§ÅÖ¡ ´ ÇÂÀÒÉÒáÍÊà«ÁºÅÕ áµ ¡Âç §Ñ ÊÒÁÒö㪠§Ò¹á¼§Ç§¨Ãà´ÕÂǡѹ¹Õãé ª È¡Ö ÉÒáÅз´Åͧã¹àªÔ§ÅÖ¡·Ñ§é ·Ò§ ÎÒà ´áÇà áÅЫͿµ áÇÃ ä´ ¹Ñ蹨֧໠¹·ÕèÁҢͧ AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 (68HC11 microcontroller Activity board) ÊíÒËÃѺ«Í¿µ áÇà ·ãÕè ª §Ò¹Ã ÇÁ¡Ñ¹¤×Í Interactive C ËÃ×Í â»Ãá¡ÃÁÀÒÉÒ C ẺµÍºÊ¹Í§Ã ÇÁ Íѹ໠¹â»Ãá¡ÃÁÀÒÉÒ C ÍÕ¡áººË¹Ö§è ·ÕÊè ÒÁÒöµÔ´µ ÍáÅÐ áÊ´§¼Å¡Ò÷íÒ§Ò¹¡Ñº¼Ù 㪠§Ò¹ä´ 㹷ѹ·Õ·Õèà¢Õ¹â»Ãá¡ÃÁàÊÃç¨

¤Ø ³ ÊÁºÑ µÔ · ҧ෤¹Ô ¤ ¢Í§ AX-11 : 68HC11 Activity board l 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 à» ¹µÑǤǺ¤ØÁËÅÑ¡ l ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡ 8MHz ¨Ò¡¤ÃÔʵÍÅ

l ˹ ǤÇÒÁ¨íÒáÃÁ 32 ¡ÔâÅ亵 l ÅíÒ⾧໠Â⫢ѺàÊÕ§

àª×Íè Áµ ͡Ѻ¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µÍ¹Ø¡ÃÁ l «Í¿µ áÇà Interactive C Ãѹº¹ÇÔ¹â´ÇÊ 98/ME/XP l ä¿àÅÕé§ +9.6V 1700mA ¨Ò¡áºµàµÍÃÕè ÁÕǧ¨Ã¤Çº¤ØÁä¿àÅÕé§ ¤§·Õè +5V ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¾Ã ÍÁǧ¨Ã»ÃШØẵàµÍÃÕè l ÍÔ¹¾ØµÇ§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µ Ô ÍÅ 8 ºÔµ 21 ª ͧ l ÍÔ¹¾Øµ´Ô¨µ Ô ÍÅ 9 ª ͧ l àÍÒµ ¾µ Ø ´Ô¨µÔ ÍÅ 9 ª ͧ l ǧ¨Ã¢Ñº LED ÍÔ¹¿ÃÒàôáÅÐâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz l ǧ¨Ã¢ÑºÁÍàµÍà 俵ç 6V 200mA 4 ªØ´ ¾Ã ÍÁä¿áÊ´§¡Ò÷íÒ§Ò¹ l ǧ¨Ã¢Ñºà«Íà âÇÁÍàµÍà 4.8-6V 200mA ä´ 6 µÑÇ ªØ ´ àÃÕ Â ¹ÃÙ ä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ´ Ç Ââ»Ãá¡ÃÁ Interactive C l ÊÇÔµª START áÅÐ STOP ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ (Interactive C microcontroller starter kit) l âÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ áÊ´§¼Å¡Ò÷íÒ§Ò¹ l


10

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C Ê Ç¹¢ÂÒÂÃкº µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB

#1 #2

ÍÔ¹¾Øµ IC1 (Input Capture-1) àÍÒµ ¾µØ OC2 (Output Compare-2) ÅíÒ⾧໠Ââ« LED ÍÔ¹¿ÃÒàô (IR) âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô (IRM)

ÍÔ¹¾ØµÍйÒÅÍ¡ AI-2 ¶Ö§ AI-6 (5 ª ͧ)

LED áÊ´§¡Ò÷íÒ§Ò¹¢Í§ IR

A 68HC11E1 MCU.

LED áÊ´§»ÃШØẵàµÍÃÕè (CHARGE-ÊÕàËÅ×ͧ) ᨠ¡µ ;Íà µÍ¹Ø¡ÃÁ LED áÊ´§¡Òõ ;Íà µÍ¹Ø¡ÃÁ (SER-ÊÕà¢ÕÂÇ) LED áÊ´§ä¿àÅÕé§ (PWR-ÊÕà¢ÕÂÇ) LED ᨠ§Ê¶Ò¹ÐẵàµÍÃÕè (BATT-ÊÕá´§) ¨Ø´µ ÍÁÍàµÍà 俵ç 4 ª ͧ (M0-M3) ·Ñé§áººµÃ§¢ÑéÇ (DIRECT) áÅСÅѺ¢ÑéÇ (INVERT) ¾Ã ÍÁ LED áÊ´§¡Ò÷íÒ§Ò¹

ÍÔ¹¾ØµÍйÒÅÍ¡ AI-16 ¶Ö§ AI-31 (16 ª ͧ)

ÍÔ¹¾Øµ´Ô¨ÔµÍÅ ª ͧ DI-10 ¶Ö§ DI-15 (6 ª ͧ)

¢Ò¾Íà µ IRQ/SCI/SPI

¡ÒèѴ¢Ò¢Í§ Ê Ç¹¢ÂÒÂÃкº #2

¨Ø´µ Íà«Íà âÇÁÍàµÍà 5 ª ͧ (SERVO MOTOR 0-5)

A8 A10 A12 A14 WR

àÍÒµ ¾Øµ´Ô¨ÔµÍÅ 8 ª ͧ OUT-0 ¶Ö§ OUT-7

AS D1 D3 D5 D7

D0 D2 D4 D6 RST

ÊÇÔµª START ÊÇÔµª STOP

âÁ´ÙÅ LCD ¢¹Ò´ 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ

SS MOSI TxD IRQ +5V

SCK MISO RxD XIRQ GND

ÍÔ¹¾Øµ IC3 (Input Capture-3) / IN-7

A ÍÔ¹¾Øµ IC2 (Input Capture-2) / IN-8

ÍÔ¹¾Øµ PAI (Pulse Accumulator Interrupt) / IN-9

A9 A11 A13 A15 E

àÍÒµ ¾Øµ´Ô¨ÔµÍÅ ª ͧ OUT-8

¡ÒèѴ¢Ò¢Í§ Ê Ç¹¢ÂÒÂÃкº #1

ÊÇÔµª POWER à» ´-» ´ä¿àÅÕé§ ᨠ¡ÍÐá´»àµÍÃ

ÃÙ»·Õè 1-1 áÊ´§Ê ǹ»ÃСͺáÅеíÒá˹ §¢Í§¨Ø´µ ͵ Ò§æ º¹ AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ´ ÇÂâ»Ãá¡ÃÁ Interactive C

AX-11 ¤×Í Handyboard Ãع ¾Ñ²¹Ò AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 (68HC11 microcontroller Activity board) ä´ ÃºÑ ¡ÒþѲ¹Ò¨Ò¡ Handyboard «Ö§è à» ¹á¼§Ç§¨ÃäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª ÃÇ Á¡Ñº Interactive C ¼Ù¾ ² Ñ ¹Ò¤×Í Fred G. Martin ¨Ò¡ Ë Í§»¯ÔºµÑ ¡Ô ÒÃÊ×Íè ã¹Ê¶ÒºÑ¹à·¤â¹âÅÂÕááÁÊ«ÒªÙ૵µì ËÃ×Í MIT â´Â·íÒ¡ÒÃÃÇÁàÍÒÎÒà ´áÇà à´ÔÁ·ÕÁè ´Õ Ç Â¡Ñ¹ 3 Ê Ç¹¤×Í Handyboard, Expansion board áÅÐ Interface board ËÃ×Íἧǧ¨Ã¤Çº¤ØÁËÅÑ¡, ἧǧ¨Ã¢ÂÒÂÍÔ¹¾ØµàÍÒµ ¾Øµ áÅÐἧǧ¨Ãàª×èÍÁµ ͤÍÁ¾ÔÇàµÍà ·ÕèÁÕǧ¨Ã»ÃШØẵàµÍÃÕèã¹µÑÇ ÁÒÃÇÁÍÂ٠㹪شà´ÕÂǡѹ ÊÒÁÒö¹íÒ AX-11 ä»ãª §Ò¹ä´ Êдǡ¢Öé¹ à¾ÃÒÐäÁ µÍ §àª×Íè Áµ ÍÊÒÂÃÐËÇ Ò§á¼§Ç§¨Ã «Ö§è ÍÒ¨à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ä´ ÃÇÁ·Ñ§é 㹪ش¢Í§ AX-11 Âѧ ºÃèØẵàµÍÃÕèẺ»ÃШØä´ äÇ ´ Ç ¨Ö§ÊÒÁÒö·íÒ¡ÒûÃШØáÅÐ㪠§Ò¹ä´ ·Ñ¹·Õ


AI-8 AI-9 AI-10 AI-11 AI-12 AI-13 AI-14 AI-15

AI-16 AI-17 AI-18 AI-19 AI-20 AI-21 AI-22 AI-23

OUT-8

SERVO-0 SERVO-1 SERVO-2 SERVO-3 SERVO-4 SERVO-5

13 14 15 12 1 5 2 4

3

13 14 15 12 1 5 2 4

15 14 13 12 11 10 9 7

GND

RxD TxD

1 2 3 4

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7

A0

15

11 12

5

SCI/SPI/IRQ

+5V XIRQ IRQ RxD TxD MISO MOSI SCK SS GND

SOUND

R7 1k

R8 1k

POWER

SP1 Piezp Speaker

+5V

R5 1k

R3 1k

+5V

LED2 GRN 3mm.

R2 47k

C4 4 10/50V

14

IC2 ICL232

2

C1 10/50V

+

R9 4k7

R6 1k

R4 1k

KNOB

RxD

TxD

C6 10/50V 31

7

ÃÙ»·Õè 1-2 ǧ¨ÃÊÁºÙó ¢Í§ AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Íùâ·ÃÅàÅÍà 68HC11 ´ Ç Interactive C 8

8MHz

XTAL1 C8 33pF

R10 2.2M

IC1 MC68HC11E1

30 OC4

E RS R/W D0 D1 D2 D3 D4 D5 D6 D7 6 4 5

DSP1 LCD 16x2

42 41 40 39 38 37 36 35

4

9 10 11 12 13 14 15 16

6

IC1

OC2

32

28

3 MODA 27 PAI 33 IC2 34 IC3 29 OC3

R/W

5 E 17 RESET

A8 A9 A10 A11 A12 A13 A14 A15

AS

AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7

10k

1k

1 +V

+5V

+Vmem

14

3

IR-RCV Module

3k9

10k

3

4 10k

IR

1k

A0 A1 A2 A3 A4 A5 A6 A7

D0 D1 D2 D3 D4 D5 D6 D7

15

13

9 7

IR-LED

150

ZTX614

+5V

Y0

Y2

Y7

8

Y6 A1 A2 CS2 CS3 CS1

16

+5V

G 22

A0

14

VDD

WR

E

A8 A9 A10 A11 A12 A13 A14

+5V

IC1 : Input Capture-1

IC8/2 +5V

1 IC8/1

1 2 3 2 4 5 6

28

27

20

25 24 21 23 2 26 1

10 9 8 7 6 5 4 3

IC7 74HC138

IC4 SRAM 62256

IC3 74HC573

19 18 17 16 15 14 13 12

OC2 : Output Compare-2

+5V

10nF

10

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

IC5/1-IC5/4 74HC132 9 8 10 IC5/3

1

LE

D0 D1 D2 D3 D4 D5 D6 D7

6

2 1 IC5/1

+5V

GND 2

3 RESET

IC6 KIA7042

10k

+5V

47k

LED3 RED 3mm. BAT.

12 4 11 IC5/2 13 IC5/4 5 7

11

2 3 4 5 6 7 8 9

+5V 20

11 12 13 15 16 17 18 19

J3 DC adaptor jack

OE1 OE2

~

D0 D1 D2 D3 D4 D5 D6 D7

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

+

220/25V

2 3 4 5 6 7 8 9

12 13 14 15 16 17 18 19

74HC574

19 18 17 16 15 14 13 12

74HC574 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

STOP

10

1A50V

~

10

+5V 20 O0 O1 O2 O3 O4 O5 O6 O7

1

CLK

D0 D1 D2 D3 D4 D5 D6 D7

20

+5V

CLK 1

10

+5V 20 D0 D1 D2 D3 D4 D5 D6 D7

74HC541

1 19

18 17 16 15 14 13 12 11

11

9 8 7 6 5 4 3 2

11

2 3 4 5 6 7 8 9

+5V

+5V

39R/3W

MOTOR GROUND

1.2V Ni-MH 1700mA x8

POLY SW.

0.1/50V

START

10k x 8

5

9

11

13

10 8 15 2 6 7 9 1

L293D

10 12 15 2 10 7 9 1

L293D

4

1k

+Vm

SYSTEM GROUND

YEL 3mm. CHARGE

POWER

10k x3

1N5819

GRN 11 OUT3 14 OUT4 3 OUT1 6 OUT2

16

5 12 13

I3 I4 I1 I2 CS2 CS1

8

1k GRN 11 OUT3 14 OUT4 3 OUT1 6 OUT2

16

5 12 13

+Vm

4

I3 I4 I1 I2 CS2 CS1

8

+Vm

1µH iron coil

100

74HC04

150 x 8

1k

LM2931-5.0

LM2940-5.0

RED GRN

+5V

10/50V

OUT-0

MOTOR-4

0.1/50V x 2

+Vmem

+5V

DI-7 IC3 : Input Capture -3

DI-8 IC2 : Input Capture -2

DI-9 PAI : Pulse Accumulator Interrupt

DI-10

DI-11

DI-12

DI-13

DI-14

DI-15

MOTOR-3 + -

MOTOR-2

MOTOR-1

+ -

+ -

+ -

OUT-7

OUT-6

OUT-5

OUT-4

OUT-3

OUT-2

OUT-1

0.1/50V

+5V

0.1/50V

RED

+5V

0.1/50V

RED

10/50V

1k

RED GRN

+5V

l

C7 33pF

OC5

22 MISO 23 MOSI 24 SCK 25 SS

18 XIRQ 19 IRQ

20

21

AN7 Vss Vss MODB

48 AN6

AI-6

50 51 1 2

46 AN5

43 AN0 45 AN1

AI-5

VR1 10k

1

3

2

26 52 VDD VDD

44 AN4

+5V

+5V

+5V

C9 0.1/50V

VR2 10k LCD brightness

AI-4

+5V

11

AI-3

1

CLK

2 3 4 5 6 7 8 9

49 AN3

10

D0 D1 D2 D3 D4 D5 D6 D7

20

47 AN2

Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7

+5V

AI-2

19 18 17 16 15 14 13 12

74HC574

13

3

1

16

C2 10/50V

+5V

R1 6 2k2 LED1 YEL 3mm. C5 SER 10/50V

C3 10/50V

6 IN 7 VEE

3

11 10 A1 9 A2

74HC4051

COM

16

+5V

6 IN 7 VEE

3

11 10 A1 9 A2

A0

COM

16

74HC237

1 2 3 6 4 5

74HC4051

150

8

+5V

A0

A1 A2 CS2 LE CS1

16

+5V

COM

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7

J1 SERIAL PORT

+5V

+5V

+5V

+V Servo

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C 11


12

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

N.... N. N-

0x8000-0xFFFF ˹ ǤÇÒÁ¨íÒáÃÁÀÒ¹͡¢Í§ºÍà ´ AX-11 ¢¹Ò´ 32 ¡ÔâÅ亵 áµ ÁÕ¡ÒÃʧǹäÇ ÊíÒËÃѺÍÔ¹àµÍà ÃÑ»µ àÇ¡àµÍà 32 亵 ¨Ö§ãª §Ò¹à¾×èÍà¡çºâ»Ãá¡ÃÁä´ ¨ÃÔ§ 32,736 亵

N, N+

0xBFC0-0xBFFF ÍÔ¹àµÍà ÃÑ»µ àÇ¡àµÍà 32 亵

N* N) N' N& N%

0x7000-0x7FFF ¨Ñ´ÊÃÃÊíÒËÃѺ 1. Í Ò¹¤ Ò¨Ò¡µÑǵÃǨ¨Ñºáºº´Ô¨ÔµÍÅ 2. à¢Õ¹¢ ÍÁÙÅà¾×èͤǺ¤ØÁǧ¨Ã¢ÑºÁÍàµÍà 俵ç

N$ N#

0x4000-0x6FFF ¨Ñ´ÊÃÃÊíÒËÃѺ¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ

N" N! N N

0x1000-0x103F ÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ 64 亵

N

0x0000-0x00FF ˹ ǤÇÒÁ¨íÒáÃÁÀÒÂã¹ 256 亵

ÃÙ»·Õè 1-3 áÊ´§¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íҷѧé ËÁ´ÀÒÂã¹ AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ´ ÇÂâ»Ãá¡ÃÁ Interactive C


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

13

¡ÒõԴµÑ§é «Í¿µ áÇà Interactive C Ãкº¤ÍÁ¾ÔÇàµÍà ·µÕè Í §¡Òà l «Õ¾ÂÕ Ù Celeron 300MHz ËÃ×Íà·Õº෠Ңֹ é ä» l

à¹×Íé ·ÕÇè Ò §¢Í§ÎÒà ´´ÔÊ¡ 10MB

l

˹ ǤÇÒÁ¨íÒáÃÁäÁ ¹Í Â¡Ç Ò 32MB

l

ÁÕ«´Õ ÃÕ ÍÁä´Ã¿ÊíÒËÃѺãÊ á¼ ¹«Õ´àÕ ¾×Íè µÔ´µÑ§é â»Ãá¡ÃÁ

l ÁÕ¾Íà µÍ¹Ø¡ÃÁÇ Ò§Í ҧ¹ Í 1 ¾Íà µ l

µÔ´µÑ§é Ãкº»¯ÔºµÑ ¡Ô ÒÃÇÔ¹â´ÇÊ 98 à» ¹Í ҧ¹ ÍÂ

l µÑÇá»Å§¾Íà µ USB à» ¹¾Íà µÍ¹Ø¡ÃÁ RS-232 㹡óշàÕè ¤Ã×Íè §¤ÍÁ¾ÔÇàµÍà äÁ Á¾ Õ Íà µÍ¹Ø¡ÃÁ

¢Ñ¹é µÍ¹¡ÒõԴµÑ§é 1. ¹íÒá¼ ¹«Õ´ÃÕ ÍÁ·ÕÁè Ҿà ÍÁ¡ÑººÍà ´ AX-11 ãÊ Å§ã¹«Õ´ÃÕ ÍÁä´Ã¿ 2. ࢠÒä»ã¹ä´àáµÍÃÕËè Ã×Íâ¿Åà´Íà AX-11 Interactive C ´ÑºàºÔŤÅÔ¡ä¿Å Setup IC4.21GA tweaker edition.exe ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧࢠÒÊÙ¡ ÒõԴµÑ§é â»Ãá¡ÃÁ ´Ñ§ã¹ÃÙ»·Õè 1-4 ·íÒ¡ÒôѺàºÔÅé ¤ÅÔ¡µÍº ʹͧ·Ø¡¢Ñ鹵͹¨¹¡ÃзÑè§àÊÃç¨ÊÔ鹡ÒõԴµÑé§â»Ãá¡ÃÁ

ÃÙ»·Õè 1-4 áÊ´§Ë¹ Òµ Ò§à¾×èÍàÃÔèÁµ ¹¡ÒõԴµÑé§â»Ãá¡ÃÁ Interactive C áÅСÒÃàÃÔèÁµ ¹¢ÂÒÂá¿ Á ¢ ÍÁÙÅà¾×Íè µÔ´µÑ§é â»Ãá¡ÃÁ Interactive C


14

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡ÒÃàµÃÕÂÁ¡ÒÃàº×Íé §µ ¹à¾×Íè 㪠§Ò¹â»Ãá¡ÃÁ Interactive C à ÇÁ¡Ñº ºÍà ´ AX-11 ¡ÒÃàµÃÕÂÁ¡Ò÷Õè¨Ð¡Å ÒǶ֧µ Í仹Õé à» ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ËÃ×Í·ÕèàÃÕÂ¡Ç Ò Firmware ŧã¹Ë¹ ǤÇÒÁ¨íҢͧºÍà ´ AX-11 «Ö§è ¨Ð´íÒà¹Ô¹¡ÒÃà¾Õ§¤Ãѧé áá¤Ãѧé à´ÕÂÇ ËÃ×Í¡ÃзíÒ àÁ×Íè ẵàµÍÃÕ¢è ͧ AX-11 ËÁ´ ·íÒãË ¢Í ÁÙŢͧâ»Ãá¡ÃÁËÅÑ¡ËÒÂä» ËÃ×Í¡ÃзíÒàÁ×Íè ºÍà ´ AX-11 äÁ ÊÒÁÒöÃѺ¢ ÍÁÙŢͧâ»Ãá¡ÃÁ·íÒ§Ò¹¨Ò¡¼Ùà ¢Õ¹â»Ãá¡ÃÁä´ 1. à» ´ÊÇÔµª POWER º¹ºÍà ´ AX-11 ËÒ¡ÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕÀè ÒÂ㹺Íà ´ AX-11 ÁÒ¡à¾Õ§¾Í LED ÊÕà¢ÕÂÇã¹µíÒá˹ § PWR. ¨ÐµÔ´ÊÇ Ò§àµçÁ·Õè ¶ ÒäÁ à¾Õ§¾Í ¨ÐµÔ´ËÃÕè áÅÐ LED ÊÕ á´§ã¹µíÒá˹ § BATT ¨ÐµÔ´ÊÇ Ò§¢Öé¹ÁÒᨠ§ÃдѺáç´Ñ¹áºµàµÍÃÕèÍ Í¹ ´Ñ§ã¹ÃÙ»·Õè 1-5 ãË ãª ÍÐá´»àµÍà 俵ç +12V ·Õè¨Ñ´ÁҾà ÍÁ¡Ñº AX-11 à» ¹áËÅ §¨ ÒÂ俨ҡÀÒ¹᷹͡ â´ÂàÊÕº »ÅÑ¡ê ÍÐá´»àµÍà à¾×Íè ¨ ÒÂä¿àÅÕÂé §à¢ Ò·Õáè ¨ ¡ÍÐá´»àµÍà º¹ºÍà ´ AX-11 ·Ñ¹·Õ·¨Õè Ò Âä¿ LED ÊÕàËÅ×ͧ ã¹µíÒá˹ § CHARGE ¨ÐµÔ´ÊÇ Ò§ ¾Ã ÍÁæ ¡Ñº¡ÒôѺŧ¢Í§ LED ÊÕá´§ ´Ñ§ã¹ÃÙ»·Õè 1-6 2. ¹íÒ AX-11 ÁÒàª×Íè Áµ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà µÒÁÃÙ»·Õè 1-7 ¨ÐàËç¹ LED ÊÕà¢ÕÂÇ·Õè µíÒá˹ § SER µÔ´ÊÇ Ò§à» ¹¡ÒÃᨠ§ãË ·ÃÒºÊÒÂáÅСÒÃàª×èÍÁµ ͡Ѻ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ¢Í§ AX-11 ÊÁºÙó ¾Ã ÍÁ㪠§Ò¹

OC2

JUMPER

IR

PWR. LED ÊÕà¢ÕÂǵíÒá˹ § PWR. µÔ´ËÃÕè Ê Ç¹ LED ÊÕá´§µíÒá˹ § BATT. µÔ´ÊÇ Ò§ áÊ´§Ç Ò ¾Åѧ§Ò¹¨Ò¡áºµàµÍÃÕèäÁ ¾Íà¾Õ§

(IC2)

IN-8 IN-9

MC68HC11E1 microcontroller

(PAI)

SOUND

CHARGE POWER

JUMPER

à» ´ÊÇÔµª POWER ´ Ç¡ÒÃàÅ×Íè ¹ä»·Ò§« ÒÂ

SER.

OC2

IRM

IC1

IN-7

IC1

(IC3)

AX-11 68HC11 microcontroller Activity Board

DC-INPUT

DOWNLOAD

BATT.

ÃÙ»·Õè 1-5 áÊ´§¡ÒÃà¡Ô´ÀÒÇÐÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕµè Òèí à¡Ô¹¡Ç Ò·Õºè Íà ´ AX-11 ¨Ð·íÒ§Ò¹ä´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

JUMPER

IR IN-7

OC2

JUMPER

(IC2)

IN-8 IN-9

MC68HC11E1 microcontroller

(PAI)

SOUND

PWR. àÁ×èÍÁÕ¡Òè ÒÂä¿à¢ ÒÁÒ¨Ò¡ÀÒ¹͡¼ Ò¹·Ò§á¨ ¡ÍÐá´»àµÍà LED ÊÕà¢ÕÂǵíÒá˹ § PWR. µÔ´ÊÇ Ò§ Ê Ç¹ LED ÊÕá´§µíÒá˹ § BATT. ´Ñº áÅÐ LED ÊÕàËÅ×ͧ㹵íÒá˹ § CHARGE µÔ´ÊÇ Ò§ à¡Ô´¡ÒûÃШØáç´Ñ¹ãË á¡ áºµàµÍÃÕè

à» ´ÊÇÔµª POWER ´ Ç¡ÒÃàÅ×è͹价ҧ« Ò CHARGE POWER

OC2

IRM

IC1

SER.

IC1

(IC3)

AX-11 68HC11 microcontroller Activity Board

DC-INPUT

DOWNLOAD

BATT.

,+ =@=FJAH 12V 500mA

ÃÙ»·Õè 1-6 ¡Òè ÒÂä¿àÅÕÂé §¨Ò¡ÀÒ¹͡à¾×Íè »ÃШØáç´Ñ¹ãË á¡ áºµàµÍÃÕãè ¹ºÍà ´ AX-11

JUMPER

IR IN-7

OC2

PWR.

(IC2)

IN-8 IN-9

MC68HC11E1 microcontroller

(PAI)

SOUND

à» ´ÊÇÔµª POWER ´ Ç¡ÒÃàÅ×è͹价ҧ« Ò CHARGE POWER

OC2

IRM

IC1

JUMPER

SER.

IC1

(IC3)

AX-11 68HC11 microcontroller Activity Board

DC-INPUT

àÁ×Íè ÁÕ¡Òõ ÍÊÒ¨ҡ¾Íà µÍ¹Ø¡ÃÁ¢Í§ ¤ÍÁ¾ÔÇàµÍà ࢠÒÁÒ·Õèᨠ¡ DONLOAD ¶ Ò¡ÒÃàª×èÍÁµ ÍÊÁºÙó LED ÊÕà¢ÕÂÇ µíÒá˹ § SER. ¨ÐµÔ´ÊÇ Ò§

DOWNLOAD

BATT.

µ ÍÊÒ´Òǹ âËÅ´´ Ò¹·Õèà» ¹¢Ñéǵ Í µÑÇàÁÕ 9 ¢ÒࢠҡѺ¾Íà µÍ¹Ø¡ÃÁ·ÕèÇ Ò§ ¢Í§à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃ

ÃÙ»·Õè 1-7 áÊ´§¡Òõ ÍÊÒ¨ҡ¾Íà µÍ¹Ø¡ÃÁ¡ÑººÍà ´ AX-11

¾Íà µÍ¹Ø¡ÃÁà» ¹¨Ø´µ Í 9 ¢Ò ÍÂÙ´ Ò ¹ËÅѧà¤Ã×èͧ¤ÍÁ¾ÔÇàµÍà »¡µÔ㹤ÍÁ¾ÔÇàµÍà 1 à¤Ã×èͧ ¨ÐÁÕ¾Íà µÍ¹Ø¡ÃÁ 2 ¾Íà µ

l

15


16

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÙ » ·Õè 1-8 äµàµÔ Å áÊ´§ÅÔ ¢ ÊÔ · ¸Ôì ã ¹â»Ãá¡ÃÁ ÃÙ»·Õè 1-9 ˹ Òµ Ò§àÅ×Í¡ÎÒà ´áÇà ·µÕè Í §¡ÒõԴµ Í Interactive C V.4 ¢Í§Ê¶ÒºÑ¹ KISS ¡Ñºâ»Ãá¡ÃÁ Interactive C V.4 3. à» ´â»Ãá¡ÃÁ Interactive C â´ÂࢠÒä»·Õè Start à Program à Interactive C 4.21à Interactive C for AX-11 ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§äµàµÔŵÒÁÃÙ»·Õè 1-8 ¢Ö¹é ÁÒ¤ÃÙË ¹Ö§è áÅ Çà»ÅÕÂè ¹à» ¹Ë¹ Òµ Ò§ àÅ×Í¡ª¹Ô´¢Í§ÎÒà ´áÇà ·µÕè Í §¡ÒõԴµ Í´ Ç´ѧã¹ÃÙ»·Õè 1-9 ãË àÅ×Í¡ AX-11 4. ¨Ð»ÃÒ¡®Ë¹ Òµ Ò§ Port selection ´Ñ§ÃÙ»·Õè 1-10 à¾×Íè àÅ×Í¡¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ·Õè 㪠µ´Ô µ ͡ѺºÍà ´ AX-11 㪠àÁÒÊ ¤ÅÔ¡à¾×Íè àÅ×Í¡¾Íà µ·Õµè Í §¡Òà áÅ Ç¡´»ØÁ Connect now 5. ä»·Õàè Á¹Ù Tools àÅ×Í¡ Download firmware ¨Ð»ÃÒ¡®Ë¹ Òµ Ò§àÅ×Í¡µíÒá˹ §¢Í§¾Íà µÍ¹Ø ¡ÃÁ·Õàè ª×Íè Áµ ÍÍÕ¡¤Ãѧé àÁ×Íè àÅ×Í¡áÅ Ç ãË ¡´»ØÁ Download Firmware ´Ñ§ã¹ÃÙ»·Õè 1-11

ÃÙ»·Õè 1-10 ˹ Òµ Ò§àÅ×Í¡¾Íà µÍ¹Ø¡ÃÁ·Õµè Í §¡Òà ÃÙ»·Õè 1-11 àÁ×Íè àÅ×Í¡¾Íà µáÅзíÒ¡ÒÃàª×Íè Áµ ÍáÅ Ç µÔ´µ ͡ѺºÍà ´ AX-11 »ØÁ Douwnload Firmware ¨Ð»ÃÒ¡®¢Ö¹é


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÙ»·Õè 1-12 ˹ Òµ Ò§áÊ´§¢Ñ¹é µÍ¹¡ÒôÒǹ âËÅ´ â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ËÃ×Í Firmware àÃÔÁè ´ Ç¡Òà µ ÍÊÒÂàª×èÍÁµ ÍÃÐËÇ Ò§¾Íà µÍ¹Ø¡ÃÁ¡ÑººÍà ´ AX-11 ¶ ÒàÃÕºà ÍÂãË ¡´»ØÁ Next

l

17

ÃÙ»·Õè 1-13 ˹ Òµ Ò§áÊ´§¡ÒõÃǨÊͺ¡ÒÃàª×Íè Áµ Í ÃÐËÇ Ò§¾Íà µÍ¹Ø¡ÃÁ¡ÑººÍà ´ AX-11 Êѧࡵ¨Ò¡ ¡ÒÃáÊ´§¼Å¢Í§ LED ã¹µíÒá˹ § SER. ¶ Ò¶Ù¡µ ͧ ãË ¡´»ØÁ Yes, it s blinking

6. ¨Ð»ÃÒ¡®ÃÙ»áÊ´§¢Ñ鹵͹¡ÒÃàµÃÕÂÁ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅѡŧ㹺Íà ´ AX-11 àÃÔÁè ¨Ò¡ãË µÍ ÊÒ´Òǹ âËŴࢠҡѺ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ¡ºÑ ºÍà ´ AX-11 ´Ñ§ã¹ÃÙ» ·Õè 1-12 ¶ Òµ ÍÊÒÂäÇ áÅ ÇãË ¡´»ØÁ Next 7. LED ÊÕà¢ÕÂÇ·Õµè Òí á˹ § SER. µÔ´¡Ð¾ÃÔº ઠ¹à´ÕÂǡѺÀÒ¾áÊ´§¢Ñ¹é µÍ¹ã¹ÃÙ»·Õè 1-13 ËÒ¡ ä´ ¼ÅµÒÁ¹Õãé Ë ¡´»ØÁ Yes, it s blinking 8. ¨Ð»ÃÒ¡®Ë¹ Òµ ҧᨠ§ãË »´ ÊÇÔµª ¨Ò Âä¿àÅÕÂé §¢Í§ºÍà ´ AX-11 ´Ñ§áÊ´§ã¹ÃÙ»·Õè 1-14 ãË àÅ×Íè ¹ÊÇÔµª POWER ä»·Ò§¢ÇÒà¾×Íè » ´ä¿àÅÕÂé § áÅ Ç¡´»ØÁ Next

ÃÙ»·Õè 1-14 ˹ Òµ Ò§áÊ´§ãË »´ ÊÇÔµª POWER à¾×Íè µÑ´ ¡Òè ÒÂä¿àÅÕé§ãË á¡ ºÍà ´ AX-11 àÁ×èÍ´íÒà¹Ô¹¡Òà àÃÕºà ÍÂáÅ Ç ãË ¡´»ØÁ Next


18

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÙ»·Õè 1-15 ˹ Òµ Ò§áÊ´§¡ÒÃࢠÒÊÙâ ËÁ´´Òǹ âËÅ´ â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ËÃ×Í Firmware ¢Í§ºÍà ´ AX11 ·íÒä´ â´Â¡´ÊÇÔµª STOP ¤ Ò§äÇ áÅ Çà» ´ÊÇÔµª POWER àÁ×Íè ´íÒà¹Ô¹¡ÒÃáÅ ÇãË ¡´»ØÁ Next

ÃÙ»·Õè 1-16 ˹ Òµ Ò§áÊ´§¡ÒõÃǨÊͺ¡ÒÃࢠÒÊÙ âËÁ´´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡¢Í§ºÍà ´ AX-11 «Ö§è ¨Ðà¡Ô´¢Ö¹é àÁ×Íè LED ã¹µíÒá˹ § PWR. áÅÐ BATT. ´Ñº ¡´»ØÁ Both lights off

9. ¨Ð»ÃÒ¡®Ë¹ Òµ ҧᨠ§ãË ¡´ÊÇÔµª STOP º¹ºÍà ´ AX-11 ¤ Ò§äÇ ¨Ò¡¹Ñ¹é à» ´ÊÇÔµª ¨Ò  ä¿àÅÕÂé §¢Í§ºÍà ´ AX-11 ´Ñ§áÊ´§ã¹ÃÙ»·Õè 1-15 ãË ´Òí à¹Ô¹¡ÒõÒÁ¢Ñ¹é µÍ¹ã¹ÃÙ» áÅ Ç¡´»ØÁ Next 10. »ÃÒ¡®Ë¹ Òµ ҧᨠ§Ê¶Ò¹Ð¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ AX-11 ãË ·ÃÒºà¾×è͵ÃǨÊͺ´Ñ§ÃÙ»·Õè 1-16 ¶Ö§µÍ¹¹Õé LED ã¹µíÒá˹ § PWR. áÅÐ BATT. µ ͧ´ÑºÅ§·Ñ§é ¤Ù ¨Ò¡¹Ñ¹é ¡´»ØÁ Both lights off > áµ ¶Ò LED ã¹µíÒá˹ § PWR. µÔ´ ãË ¡´»ØÁ PWR light still on ! ¨Ð»ÃÒ¡®¡Ãͺ¢ Í ¤ÇÒÁᨠ§ÊÒà˵Ø㹡ÒõԴ¢Í§ LED µíÒá˹ § PWR Ç Ò ÂѧäÁ ÊÒÁÒöࢠÒÊÙâ ËÁ´¡Ò÷íÒ§Ò¹à¾×Íè ´Òǹ âËÅ´â»Ãá¡ÃÁ ´Ñ§ã¹ÃÙ»·Õè 1-17 ãË µÃǨÊͺÊÒÂáÅСÅѺä»à¢ ÒÊÙ¢ ¹Ñé µÍ¹¡ÒôÒǹ âËÅ´ÍÕ¡¤Ãѧé

ÃÙ»·Õè 1-17 ˹ Òµ ҧᨠ§ÊÒà˵ØáÅСÒÃá¡ ä¢ã¹¡Ã³Õ ·Õè LED µíÒá˹ § PWR. µÔ´ÊÇ Ò§¢Ö¹é àÁ×Íè ࢠÒÊÙâ ËÁ´ ÃÙ»·Õè 1-18 ˹ Òµ ҧᨠ§ÊÒà˵ØáÅСÒÃá¡ ä¢ã¹¡Ã³Õ ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ ·Õè LED µíÒá˹ § BATT. µÔ´ÊÇ Ò§¢Ö¹é àÁ×Íè ࢠÒÊÙâ ËÁ´ ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

19

ÃÙ»·Õè 1-19 ˹ Òµ Ò§áÊ´§Ê¶Ò¹Ð¡ÒôÒǹ âËÅ´ ÃÙ»·Õè 1-20 àÁ×Íè ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ áÅ Ç ·Õºè Íà ´ AX-11 ¨ÐáÊ´§¢ ͤÇÒÁ´Ñ§ã¹ÃÙ» â»Ãá¡ÃÁ¤Çº¤ØÁËÅѡŧÊÙº Íà ´ AX-11 㹡óշÕè LED µíÒá˹ § BATT. µÔ´ ãË ¡´»ØÁ BATT light still on ! ¨Ð»ÃÒ¡®¡Ãͺ ¢ ͤÇÒÁᨠ§ÊÒà˵Ø㹡ÒõԴ¢Í§ LED µíÒá˹ § BATT Ç Ò ÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕèµèíÒà¡Ô¹ä» ´Ñ§ã¹ÃÙ»·Õè 1-18 ¨Ðµ ͧ»ÃШØẵàµÍÃÕÍè ¡Õ Í ҧ¹ Í 30 ¹Ò·Õ ¨Ö§¹íÒ¡ÅѺÁÒ·íÒ§Ò¹ãËÁ ä´ 11. ¶ Ò·Ø¡Í ҧàÃÕºà Í ¨Ð»ÃÒ¡®Ë¹ Òµ ҧᨠ§Ê¶Ò¹Ð¡ÒôÒǹ âËÅ´ Firmware ´Ñ§ã¹ÃÙ» ·Õè 1-19 àÁ×Íè ´Òǹ âËÅ´àÃÕºà Í ¨Ðä´ Â¹Ô àÊÕ§ µÔ´é ¨Ò¡ÅíÒ⾧¢Í§ºÍà ´ AX-11 Ê Ç¹·Õáè ¶ºáÊ´§ ʶҹзÕËè ¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C ¨Ð»ÃÒ¡®¢ ͤÇÒÁ Download successful Ê Ç¹·Õ¨è ÍáÊ´§ ¼Å¢Í§ºÍà ´ AX-11 ¨ÐáÊ´§¢ ͤÇÒÁ IC 4.21 on AX-11 Activity Board áÅл ´· Ò¢ ͤÇÒÁ´ ÇÂÃÙ» ËÑÇ㨡оÃÔº ´Ñ§ã¹ÃÙ»·Õè 1-20 Ê Ç¹·Õèâ»Ãá¡ÃÁ Interactive C ¨ÐࢠÒÊ٠˹ Òµ Ò§ Interaction «Öè§à» ¹ ˹ Òµ Ò§ÊíÒËÃѺ·´Êͺâ»Ãá¡ÃÁ ´Ñ§ã¹ÃÙ»·Õè 1-21 ¹Ñº¨Ò¡¹Õºé Íà ´ AX-11 áÅЫͿµ áÇà Interactive C ¾Ã ÍÁÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁáÅÐ㪠§Ò¹áÅ Ç

¾×¹é ·Õáè Ê´§¼Å¡Ò÷íÒ§Ò¹áÅФ׹¤ Ò¼ÅÅѾ¸ ¢Í§ ¿ §¡ ª¹Ñè ·Õàè ÃÕ¡ãË ·Òí §Ò¹

ª ͧÊíÒËÃѺà¢Õ¹¿ §¡ ª¹Ñè ÊÒÁÒöÃкØä´ à¾Õ§¤Ãѧé ÅÐ 1 ¿ §¡ ª¹Ñè ෠ҹѹé àÁ×Íè ÃкØáŠǵ ͧ¡ÒÃãË ·Òí §Ò¹ ¡´ Enter

ÃÙ»·Õè 1-21 ˹ Òµ Ò§ Interaction «Ö§è 㪠㹡Ò÷´ÊͺáÅÐáÊ´§¼ÅÅѾ¸ ¨Ò¡¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè


20

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Êͺâ»Ãá¡ÃÁÀÒÉÒ Interactive C ¡ÑººÍà ´ AX-11 ËÅѧ¨Ò¡´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁ ËÅÑ¡ËÃ×Í Firmware áÅ Ç ¢Ñ鹵͹µ ͨҡ¹Õéà» ¹ ¡Ò÷´Åͧà¢Õ¹¿ §¡ ªÑè¹Í ҧ§ ÒÂà¾×è͵ÃǨÊͺ ¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ AX-11 1. ÍÂÙ· ËÕè ¹ Òµ Ò§ Interaction ·´Åͧ¾ÔÁ¾ ÃÙ»·Õè 1-22 áÊ´§Ë¹ Òµ Ò§ÊíÒËÃѺà¢Õ¹â»Ãá¡ÃÁ ¿ §¡ ª¹Ñè printf( Hello world !\n ); áÅ Ç¡´ Enter Interactive C ·ÕÊè à ҧ¢Ö¹é ãËÁ 2. ·Õ¨è ÍáÊ´§¼Å¢Í§ºÍà ´ AX-11 áÊ´§ ¢ ͤÇÒÁ Hello world ! ·ÕèºÃ÷Ѵº¹ ã¹¢³Ð·Õè ¾×¹é ·Õáè Ê´§¼Å¡Ò÷íÒ§Ò¹¢Í§Ë¹ Òµ Ò§ Interaction áÊ´§¢ ͤÇÒÁ printf() Done

ÃÙ»·Õè 1-23 áÊ´§¡ÒÃà¢Õ¹â»Ãá¡ÃÁ Interactive C Í ҧ§ ÒÂÊíÒËÃѺ¡Ò÷´Êͺ

áÊ´§Ç Ò¢³Ð¹Õºé Íà ´ AX-11 ÊÒÁÒö·íÒ ¡Òà »¯ÔÊÑÁ¾Ñ¹¸ ËÃ×Í Interact ¡Ñºâ»Ãá¡ÃÁ Interactive C ä´ áÅ Ç µ Í ä»à» ¹ ¡ÒÃÊÃ Ò §â»Ãá¡ÃÁÀÒÉÒ Interactive C Í ҧ§ ÒÂà¾×Íè 㪠§Ò¹¡ÑººÍà ´ AX-11 1. ¤ÅÔ¡»ØÁ New à¾×Íè Êà ҧῠÁâ»Ãá¡ÃÁ ãËÁ ´Ñ§ã¹ÃÙ»·Õè 1-22 2. à¢Õ¹â»Ãá¡ÃÁµ Í仹Õé áŠǺѹ·Ö¡ã¹ ª×Íè hello.ic ´Ñ§áÊ´§ã¹ÃÙ»·Õè 1-23

void main(void) { ÃÙ»·Õè 1-24 ˹ Òµ Ò§áÊ´§ÊÀÒÇСÒôÒǹ âËÅ´ printf( Hello world !\n ); â»Ãá¡ÃÁÀÒÉÒ Interactive C ŧÊÙË ¹ ǤÇÒÁ¨íÒ beep(); áÃÁº¹ºÍà ´ AX-11 à¾×Íè àµÃÕÂÁÃѹâ»Ãá¡ÃÁµ Íä» }


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

21

3. ·íÒ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁâ´Â¡´»Ø Á Download ¨Ð»ÃÒ¡®Ë¹ Òµ ҧᨠ§ãË ºÑ¹·Ö¡á¿ Á ¢ ÍÁÙŹÒÁÊ¡ØÅ .ic ¡ ͹ ã¹·Õ¹è ¡Õé Òí ˹´ª×Íè à» ¹ hello.ic ¨Ò¡¹Ñ¹é ¨Ð»ÃÒ¡®Ë¹ Òµ ҧᨠ§Ê¶Ò¹Ð¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ´Ñ§ã¹ÃÙ»·Õè 1-24 4. Ãѹâ»Ãá¡ÃÁ·Õàè ¢Õ¹¢Ö¹é â´Â Ẻ·Õè 1 à» ´» ´ÊÇÔµª POWER ·Õºè Íà ´ AX-11 Ë¹Ö§è ¤Ãѧé à¾×Íè ÃÕ૵¡Ò÷íÒ§Ò¹ Ẻ·Õè 2 Ãѹâ»Ãá¡ÃÁâ´Â¡Òá´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C ¨Ò¡¹Ñ¹é àÅ×Í¡ä»·ÕËè ¹ Òµ Ò§ Interaction ¨Ð»ÃÒ¡¯¢ ͤÇÒÁ main() Done

ºÃ÷Ѵº¹

·ÕèâÁ´ÙÅ LCD «Öè§à» ¹¨ÍáÊ´§¼Å¢Í§ AX-11 ¨Ð»ÃÒ¡®¢ ͤÇÒÁ Hello world ! ã¹

à» ¹ÍѹàÊÃç¨ÊÔ¹é ¡Ò÷´Êͺ

¢ ͤÇ÷ÃҺ㹡ÒôÒǹ â»Ãá¡ÃÁ㪠§Ò¹Å§ã¹ºÍà ´ AX-11 1. ¶ ÒËÒ¡ÁÕ¡ÒÃ㪠§Ò¹ºÍà ´ AX-11 áÅÐâ»Ãá¡ÃÁ Interactive C Í ҧµ Íà¹×Íè §¾Ã ÍÁ¡Ñ¹ â´Â äÁ ÁÕ¡Òû ´â»Ãá¡ÃÁŧ ¼Ù à¢Õ¹â»Ãá¡ÃÁ¨ÐÊÒÁÒö´Òǹ âËÅ´â»Ãá¡ÃÁ㪠§Ò¹ áÅз´Êͺ¡Òà ·íÒ§Ò¹ä´ µÅÍ´àÇÅÒ â´Ââ»Ãá¡ÃÁ·Õèà¢Õ¹¢Öé¹¹Ñé¹à¡çºäÇ ã¹Ë¹ ǤÇÒÁ¨íÒáÃÁ¢Í§Ãкº«Öè§ÁÕáç´Ñ¹ ¨Ò¡áºµàµÍÃÕè (ËÃ×ÍÍÐá´»àµÍà ) àÅÕÂé §ÍÂÙ áÁ ÇÒ ¨Ð» ´ÊÇÔµª POWER ¡çµÒÁ áµ ¶Ò àÁ×Íè ã´·Õáè ºµàµÍÃÕè Í Í¹Å§¨¹Ë¹ ǤÇÒÁ¨íÒáÃÁäÁ ÊÒÁÒöà¡çºÃÑ¡ÉÒ¢ ÍÁÙÅä´ àÁ×Íè ¹íÒºÍà ´ AX-11 ¡ÅѺÁÒ㪠§Ò¹ãËÁ ¨Ðµ ͧ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ËÃ×Í Firmware áÅÐâ»Ãá¡ÃÁ㪠§Ò¹·Õèµ Í§¡ÒÃãËÁ àÊÁÍ 2. ¶ ÒËÒ¡ÁÕ¡Òû ´â»Ãá¡ÃÁ Interactive C áÅ Çà» ´â»Ãá¡ÃÁ¢Ö¹é ÁÒãËÁ â´Â·Õºè Íà ´ AX-11 ÂѧÁÕ¡Òè ÒÂä¿àÅÕÂé §áÅÐÁÕâ»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ËÅÑ¡ºÃèØÍÂÙ ¨Ðµ ͧÁÕ¡ÒõԴµ ÍÃÐËÇ Ò§ºÍà ´ AX-11 ¡Ñºâ»Ãá¡ÃÁ Interactive C ãËÁ Í¡Õ ¤ÃÑ§é «Ö§è ¡ç¨Ðµ ͧ·íÒ¡ÒÃàÅ×Í¡¾Íà µÍ¹Ø¡ÃÁ·Õµè Í §¡ÒõԴµ Í ¨Ò¡¹Ñé¹àÁ×èÍ¡´»Ø Á Connect now à¾×èÍÊÑè§ãË µÔ´µ ͡ѹ ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧᨠ§¡ÒôÒǹ âËÅ´äźÃÒÃÕ ¢Í§â»Ãá¡ÃÁ Interactive C ŧÊÙº Íà ´ AX-11 ´Ñ§ã¹ÃÙ»·Õè 1-25 ¨Ò¡¹Ñ¹é ¨Ö§à¢ ÒÊÙË ¹ Òµ Ò§ Interaction Ê §¼ÅãË â»Ãá¡ÃÁ㪠§Ò¹·ÕèºÃèØÍÂØ ã¹Ë¹ ǤÇÒÁ¨íÒáÃÁ¡ ͹˹ Ò¹ÕéËÒÂä» ¨Ö§µ ͧ·íÒ¡ÒôÒǹ âËÅ´â»ÃááÁ㪠§Ò¹ãËÁ ÍÕ¡¤ÃÑé§ ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò ·Ø¡¤ÃÑ§é ·ÕÁè ¡Õ Òû ´áÅÐà» ´â»Ãá¡ÃÁ Interactive C ¢Ö¹é ÁÒ㪠§Ò¹ãËÁ ¼Ùã ª §Ò¹¨Ðµ ͧ·íÒ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ㪠§Ò¹·Õèµ Í§¡ÒÃãË ·íҧҹŧä»ã¹Ë¹ ǤÇÒÁ¨íÒáÃÁãËÁ


22

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÙ » ·Õè 1-25 ˹ Ò µ Ò §áÊ´§ÊÀÒÇСÒôÒǹ â ËÅ´ äźÃÒÃÕ ¿ § ¡ ªÑè ¹ ¢Í§â»Ãá¡ÃÁ Interactive C ŧÊ٠˹ ǤÇÒÁ¨íÒáÃÁº¹ºÍà ´ AX-11 à¾×Íè ãË ÊÒÁÒöµÔ´µ Í ¡Ñ ¹ ä´ ËÅÑ § ¨Ò¡·Õè ÁÕ ¡ Òû ´ ä¿àÅÕé  §ºÍà ´ AX-11 áÅ Ç¡ÅѺÁÒà» ´ä¿àÅÕÂé §à¾×Íè 㪠§Ò¹ãËÁ àÊÁÍ ·Ñ§é ¹Õàé ¹×Íè §¨Ò¡ Interactive C à» ¹â»Ãá¡ÃÁ·Õµè Í §ÁÕ¡ÒõԴµ ͡ѺÎÒà ´áÇà à¾×Íè µÃǨÊͺʶҹР¡Ò÷íÒ§Ò¹¢Í§¡Ñ¹áÅСѹµÅÍ´àÇÅÒ ´Ñ§¹Ñé¹ËÒ¡à¡Ô´¢Ò´¡ÒõԴµ Íà¹×èͧ¨Ò¡â»Ãá¡ÃÁ¶Ù¡» ´ ¡ç¨Ð µ ͧ¡ÅѺÁÒµÑ§é µ ¹¡Ãкǹ¡ÒõԴµ Íâ´Â¡ÒÃÊ §äźÃÒÃբͧâ»Ãá¡ÃÁŧä»ã¹ºÍà ´ AX-11 àÊÁÍ 3. ·Ø¡¤ÃÑ駷Õèµ Í§¡ÒÃÃѹâ»Ãá¡ÃÁ㪠§Ò¹·Ò§ÎÒà ´áÇà (äÁ 㪠»Ø Á Run main º¹â»Ãá¡ÃÁ Interactive C) ¤Ç÷íÒ¡Òû ´à» ´ÊÇÔµª POWER 1 ¤Ãѧé à¾×Íè ÃÕ૵Ãкº¡ ͹àÊÁÍ

à¡ÕÂè ǡѺáËÅ §¨ Ò¾Åѧ§Ò¹ ºÍà ´ AX-11 㪠ẵàµÍÃÕ»è ÃШØä´ ª¹Ô´¹Ôà¡ÔÅàÁµÑÅäÎä´Ã´ ¢¹Ò´ AA áç´Ñ¹ 1.2V 1700mAH ¨íҹǹ 8 ¡ ͹µ Í͹ءÃÁ¡Ñ¹¾Ã ÍÁ·Ñé§ÁÕâ¾ÅÕÊÇÔµª ã¹µÑÇ ¨Ö§·íÒãË ÁÕáç´Ñ¹ä¿àÅÕé§ÊÙ§ÊØ´ 9.6V 1700mAH ÃÐÂÐàÇÅÒ㹡ÒûÃШØẵàµÍÃÕÍè  ҧàËÁÒÐÊÁ¤×Í 10-15 ªÑÇè âÁ§ à¹×Íè §¨Ò¡ãª ¡ÒûÃÐ¨Ø ´ Ç¡ÃÐáʵèíÒà¾×èÍÍÒÂØ¡ÒÃ㪠§Ò¹¢Í§áºµàµÍÃÕè ËÒ¡ºÍà ´ AX-11 ä´ ÃºÑ ¡ÒûÃШØáç´Ñ¹á¡ ẵàµÍÃÕÍè  ҧàµçÁ·Õáè Å Ç ¨ÐÊÒÁÒö㪠§Ò¹Í ҧ µ Íà¹×Íè §ä´ µ§Ñé áµ 2-4 ªÑÇè âÁ§ ¢Ö¹é ÍÂÙ¡ ºÑ ¡Òõ Í㪠§Ò¹Ç Ò ÁÕÍ»Ø ¡Ã³ µÍ ¾ ǧáÅСԹ¡ÃÐáÊä¿¿ ÒÁÒ¡¹ Í à¾Õ§ã´

¡ÒÃá¡ » ­ËÒ¢Ñé¹µ ¹ËÒ¡à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ 1. ¡Ã³Õ·´Õè Òǹ âËÅ´â»Ãá¡ÃÁ㪠§Ò¹äÁ ä´ ·Ò§á¡ ä¢

l µÃǨÊͺÊÒ´Òǹ âËÅ´ â´Â´Ùä´ ¨Ò¡ LED ÊÕà¢ÕÂÇã¹µíÒá˹ § SER. l µÃǨÊͺä¿àÅÕÂ é § â´Â´Ùä´ ¨Ò¡ LED ÊÕᴧ㹵íÒá˹ § BATT ¶ ÒµÔ´ÊÇ Ò§

áÊ´§Ç Ò áºµàµÍÃÕÍè Í ¹ ãË ãª ä¿àÅÕÂé §ÀÒ¹͡¨Ò¡ÍÐá´»àµÍà 俵ç +12V 500mA

l ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ËÅÑ¡ËÃ×Í Firmware ãËÁ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

23

2. ºÍà ´ AX-11 µÔ´µ ͡Ѻâ»Ãá¡ÃÁ Interactive C äÁ ä´ ·Ò§á¡ ä¢

l µÃǨÊͺ¡ÒÃà» ´ÊÇÔµª ¨Ò Âä¿àÅÕÂ é §ãË ¡ºÑ ºÍà ´ AX-11 ¨Ò¡ LED ÊÕà¢ÕÂÇ

·Õµè Òí á˹ § PWR.

l µÃǨÊͺÊÒ´Òǹ âËÅ´ â´Â´Ùä´ ¨Ò¡ LED ÊÕà¢ÕÂÇã¹µíÒá˹ § SER l µÃǨÊͺä¿àÅÕÂ é § â´Â´Ùä´ ¨Ò¡ LED ÊÕᴧ㹵íÒá˹ § BATT ¶ ÒµÔ´ÊÇ Ò§

áÊ´§Ç Ò áºµàµÍÃÕÍè Í ¹ ãË ãª ä¿àÅÕÂé §ÀÒ¹͡¨Ò¡ÍÐá´»àµÍà 俵ç +12V 500mA

¶ Ò·Ø¡Í ҧ¶Ù¡µ ͧ ãË ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ËÅÑ¡ËÃ×Í Firmware ãËÁ l

3. ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ËÅÑ¡ËÃ×Í Firmware äÁ ä´ ·Ò§á¡ ä¢

l µÃǨÊͺ¡ÒÃà» ´ÊÇÔµª ¨Ò Âä¿àÅÕÂ é §ãË ¡ºÑ ºÍà ´ AX-11 ¨Ò¡ LED ÊÕà¢ÕÂÇ

·Õµè Òí á˹ § PWR.

l µÃǨÊͺÊÒ´Òǹ âËÅ´ â´Â´Ùä´ ¨Ò¡ LED ÊÕà¢ÕÂÇã¹µíÒá˹ § SER l µÃǨÊͺä¿àÅÕÂ é § â´Â´Ùä´ ¨Ò¡ LED ÊÕᴧ㹵íÒá˹ § BATT ¶ ÒµÔ´ÊÇ Ò§

áÊ´§Ç Ò áºµàµÍÃÕÍè Í ¹ ãË ãª ä¿àÅÕÂé §ÀÒ¹͡¨Ò¡ÍÐá´»àµÍà 俵ç +12V 500mA

l ¶ ÒÂѧäÁ ä´ ãË Ê§ ¡ÅѺ¼Ù¼ ÅÔµËÃ×͵ÑÇá·¹¨íÒ˹ ÒÂà¾×Íè µÃǨÊͺ¡Ò÷íÒ§Ò¹


24

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

25

º··Õè 2

Interactive C «Í¿µ áÇà ÊÒí ËÃѺàÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà ´ ÇÂÀÒÉÒ«ÕÍ ҧ§ Ò ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èÍ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¹Ñé¹ÊÒÁÒö¡ÃзíÒä´ ¨Ò¡ËÅÒ¡ËÅÒ ÀÒÉÒ áµ ·Õè¹ÔÂÁÁÒ¡¤×Í áÍÊà«ÁºÅÕ àºÊÔ¡ «Õ áÅÐÀÒÉÒÃÙ»ÀÒ¾ «Öè§ÁÕ·Ñé§áººà» ¹ÃÙ»µ ͡ѹËÃ×Íà¢Õ¹ à» ¹áººâ¿ÅǪÒà µ áµ ÅÐÀÒÉÒ¨ÐÁÕ¢ Í´Õ à´ ¹ ´ Í ·Õèᵡµ Ò§¡Ñ¹ÍÍ¡ä» áµ ·Ñé§ËÁ´¹Ñé¹ÁÕà» ÒËÁÒ ¤×Í µ ͧ¡ÒÃãË ÊÒÁÒö㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÇÑ ¹Ñ¹é æ ä´ Í ҧÁÕ»ÃÐÊÔ·¸ÔÀÒ¾ÊÙ§ÊØ´ Interactive C à» ¹ÀÒÉÒ«ÕẺ˹Ö觷Õè¶Ù¡Í͡ẺÁÒà¾×èͪ ÇÂãË ÊÒÁÒöàÃÕ¹ÃÙ ¡ÒÃà¢Õ¹ â»Ãá¡ÃÁ´ ÇÂÀÒÉÒ«Õ·íÒä´ § Ò¢Öé¹ ÊÒÁÒöµÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ä´ ã¹·Ñ¹·Õ ¼Ù ¾Ñ²¹Òâ»Ãá¡ÃÁ Interactive C V.4 ¤×Í Randy Sargent áÅÐ Anne Wright áË § KISS ʶҺѹà¾×Íè ¡Òû¯ÔºµÑ ¡Ô ÒÃËع ¹µ (KISS Institue for practical robotics) ÊËÃÑ°ÍàÁÔÃ¡Ò Ê Ç¹¼Ù¾ ² Ñ ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡ËÃ×Í Firmware ¤×Í Randy Sargent, Anne Wright áÅÐ Fred G. Martin «Ö§è · Ò¹ËÅѧ¹ÕÁé ҨҡʶҺѹ à·¤â¹âÅÂÕáÁÊ«ÒªÙ૵µ ËÃ×Í MIT Í ҧäáçµÒÁÊíÒËÃѺ Interactive C V.4 ·Õ¹è Òí ÁÒ㪠ÍÒ §Íԧ㹠˹ѧÊ×ÍàÅ Á¹Õé ä´ ÃºÑ ¡ÒûÃѺãË àËÁÒСѺºÍà ´ AX-11 ¨Ö§¡ÅÒÂà» ¹ Interactive C V4.21 Tweaker Edition ¼ÙÊ ¹ã¨ÊÒÁÒö´Òǹ âËÅ´àÇÍà ª¹Ñè ãËÁ ·ÍÕè Ò¨ÁÕä´ ·Õè www.inex.co.th ËÃ×Í ¶ Òµ ͧ¡Òà Original version ࢠÒä»·Õè www.kipr.org â´Â Interactive C ÁÕû٠Ẻ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ·Õ¤è Å Ò¡ѺÀÒÉÒ«ÕÁҵðҹ ËÒ¡áµ Á¡Õ ÒèѴ àµÃÕÂÁ¿ §¡ ª¹Ñè ·Õàè Í×Íé µ Í¡ÒÃ㪠§Ò¹à¾ÔÁè àµÔÁ ·Ñ§é ¹Õàé ¾×Íè ª ÇÂãË ¼àÙ ¢Õ¹â»Ãá¡ÃÁäÁ ¨Òí à» ¹µ ͧŧä»ÈÖ¡ÉÒ ã¹ÃÒÂÅÐàÍÕ´â¤Ã§Êà ҧ·Ò§ÎÒà ´áÇà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µÑǹÑé¹æ Í ҧ·Õè¡ÃзíÒã¹ÀÒÉÒáÍ Êà«ÁºÅÕ ¾Ã ÍÁ¡Ñ¹¹Ñ¹é Âѧ໠¹¡Òê ÇÂãË ¼·Ù äÕè Á à¤Âà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ«ÕÁÒ¡ ͹ ¡çÊÒÁÒöàÃÔÁè µ ¹àÃÕ¹ ÃÙ´ Ç Âµ¹àÍ§ä´ äÁ ÂÒ¡¹Ñ¡ áÅÐÊÒÁÒö¹íÒ¤ÇÒÁÃÙ¾ ¹×é °Ò¹àËÅ Ò¹Õäé »à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ«ÕÁҵðҹ·Õè ÁÕ¤ÇÒÁ«Ñº« ͹ÊÙ§à¾ÔèÁ¢Öé¹ä´ ´ ÇÂ


26

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

Í ҧäáçµÒÁ Interactive C ¨Ðµ ͧ㪠§Ò¹Ã ÇÁ¡ÑºÎÒà ´áÇà ੾ÒÐà¾×Íè ª ÇÂãË ÊÒÁÒö·íÒ§Ò¹ ã¹ÅѡɳР»¯ÔÊÑÁ¾Ñ¹¸ (interact) ÃÐËÇ Ò§ÎÒà ´áÇà «Í¿µ áÇà áÅм٠à¢Õ¹â»Ãá¡ÃÁä´ ·íÒãË ¼Ù à¢Õ¹â»Ãá¡ÃÁÊÒÁÒöµÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ä´ ·¹Ñ ·Õ ÎÒà ´áÇà ·ÊÕè ÒÁÒö㪠§Ò¹¡Ñº Interactive C ä´ ÁÕ 3 µÑǤ×Í AX-11 (68HC11 microcontroller activity board : ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ·Õè¼ÅÔµâ´ÂºÃÔÉÑ· ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´, »ÃÐà·Èä·Â), Handyboard ¢Í§ Glearson Research ÊËÃÑ°ÍàÁÃÔ¡Ò áÅÐ Lego RCX ¢Í§ Lego à´¹ÁÒà ¡ ÊíÒËÃѺã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¨é Ð Í Ò§ÍÔ§¡Ñº AX-11 ºÍà ´àÃÕ¹ÃÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 à» ¹ËÅÑ¡ ã¹ Interactive C ä´ ¨´Ñ àµÃÕÂÁ¿ §¡ ª¹Ñè ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹µ Ò§æ ¢Í§ÍØ»¡Ã³ º¹ºÍà ´ AX-11 ¨Ö§Êдǡ㹡ÒÃàÃÕ¡㪠§Ò¹ Ê §¼ÅãË à¹×Íé â»Ãá¡ÃÁÁÕ¤ÇÒÁ¡ÃЪѺ㹡ÒÃÊÑ§è §Ò¹ áÅÐ㹡ÒÃ㪠§Ò¹ àº×éͧµ ¹¹Ñé¹äÁ ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧࢠÒ仡íÒ˹´¤ Ò¢ ÍÁÙŢͧÃÕ¨ÔÊàµÍà µ Ò§æ à¾×èͤǺ¤ØÁ¡ÒÃÊÑ觧ҹ ¢Í§µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àÅ ·íÒãË ¡ÒþѲ¹Òâ»Ãá¡ÃÁÁÕ¤ÇÒÁÊдǡáÅÐÃÇ´àÃçÇÁÒ¡ «Ö觶 Ò ËÒ¡¼Ù à¢Õ¹â»Ãá¡ÃÁÁÕ¾×é¹°Ò¹´ Ò¹â»Ãá¡ÃÁÀÒÉÒ«ÕÁҵðҹÁÒ¡ ͹ («Ö觨ÃÔ§æ áÅ ÇäÁ ¨íÒà» ¹µ ͧ ÁÕ¡çä´ ) ¡çá·º¨ÐŧÁ×;Ѳ¹Òâ»Ãá¡ÃÁä´ àÅ à¾Õ§໠´´ÙÃÒ¡Òÿ §¡ ªÑè¹·ÕèʹѺʹع㹠Interactive C Ç ÒÁÕÍÐäÃÁÒãË ºÒ § â´ÂäÇÂҡó ¢Í§ Interactive C ÊÍ´¤Å ͧ¡ÑºÀÒÉÒ«ÕÁҵðҹÍÂÙá Å Ç Ê Ç¹¼Ù ·ÕÂè §Ñ äÁ à¤Â㪠§Ò¹ÀÒÉÒ«ÕÁÒ¡ ͹¨Ð㪠ÃÐÂÐàÇÅÒà¾Õ§Êѹé æ 㹡ÒÃàÃÕ¹ÃÙ ¡ç¨ÐÊÒÁÒö¾Ñ²¹Òâ»Ãá¡ÃÁ à¾×Íè ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà º¹ºÍà ´ AX-11 ä´ ÍÕ¡Ë¹Ö§è ¤ÇÒÁÊÒÁÒö·Õè Interactive C ÁÕ¤Í× ÃͧÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁẺÁÑŵԷÒÊ¡Ô§é (multitasking) «Ö§è ¡ç¤Í× ¡Ò÷íÒ§Ò¹ËÅÒÂæ §Ò¹ä»¾Ã ÍÁæ ¡Ñ¹ â´Â Interactive C ÊÒÁÒöÃͧÃÑºä´ ¹ºÑ ÊÔº §Ò¹ã¹àÇÅÒà´ÕÂǡѹàÅ·Õà´ÕÂÇ

ÃкºµÑÇàÅ¢ã¹â»Ãá¡ÃÁ Interactive C ÃкºµÑÇàÅ¢·Õãè ª ã¹â»Ãá¡ÃÁ Interactive C ÁÕ´Ç Â¡Ñ¹ 3 Ẻ¤×Í 1.àÅ¢°Ò¹Êͧ ÁÕÃٻẺ¡ÒÃà¢Õ¹¤×Í 0bBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB â´Â B ¤×Í µÑÇàÅ¢ 0 ËÃ×Í 1 â´ÂÊÒÁÒö¡íÒ˹´ä´ ʧ٠ÊØ´ 32 ºÔµ 2. àÅ¢°Ò¹ÊÔº ÊÒÁÒöà¢Õ¹¤ ÒµÑÇàŢŧä»ä´ µÒÁ»¡µÔ ¡íÒ˹´ä´ ã¹Â Ò¹ -2,147,483,648 ¶Ö§ 2,147,483,647 3. àÅ¢°Ò¹ÊԺˡ ÁÕû٠Ẻ¡ÒÃà¢Õ¹¤×Í ä´ Ê§Ù ÊØ´ FFFFFFFF

0xHHHHHHHH â´Â H ¤×͵ÑÇàÅ¢ 0-9 áÅÐ A-F ¡íÒ˹´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

27

ÃÒÂÅÐàÍÕ´˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Interactive C V.4 ºÑ¹·Ö¡àÍ¡ÊÒà ໠´á¿ ÁàÍ¡ÊÒÃà¡ Ò

à» ´Ë¹ Òµ Ò§¤ÙÁ Í× ãª §Ò¹ (ÀÒÉÒÍѧ¡ÄÉ) ËÂØ´¡ÒÃÃѹâ»Ãá¡ÃÁ

Ãѹâ»Ãá¡ÃÁ·Õ´è Òǹ âËÅ´Å ÒÊØ´

´Òǹ âËÅ´â»Ãá¡ÃÁ

àÁ¹Ù¤Òí Êѧè Êà ҧῠÁàÍ¡ÊÒÃãËÁ ˹ Òµ Ò§ Interaction ˹ Òµ Ò§â»Ãá¡ÃÁ » ¨¨Øº¹Ñ

àÁ¹Ù File

µíÒá˹ §¢Í§á¿ ÁàÍ¡ÊÒà ·Õ¡è Òí Åѧ·íҧҹ㹻 ¨¨Øº¹Ñ

ᶺᨠ§Ê¶Ò¹Ð

¾×¹é ·Õàè ¢Õ¹â»Ãá¡ÃÁ

à» ¹àÁ¹Ù¨Ñ´¡ÒÃà¡ÕèÂǡѺῠÁàÍ¡ÊÒ÷Ñé§ËÁ´ â´Âá¿ Á àÍ¡ÊÒ÷Õãè ª ã¹ Interactive C ¨ÐÁÕ¹ÒÁÊ¡ØÅ .IC New Êà ҧῠÁàÍ¡ÊÒÃãËÁ Open (Ctrl +O) à» ´á¿ Á¢ ÍÁÙÅà¡ Ò Save (Ctrl + S) ºÑ¹·Ö¡á¿ Á¢ ÍÁÙÅ㹪×Íè à´ÔÁ Save As ºÑ¹·Ö¡á¿ Á¢ ÍÁÙÅ㹪×Íè Í×¹è Print ¾ÔÁ¾ á¿ Á¢ ÍÁÙÅÍÍ¡à¤Ã×Íè §¾ÔÁ¾ Exit ÍÍ¡¨Ò¡â»Ãá¡ÃÁ

àÁ¹Ù Edit

à» ¹àÁ¹Ù¨´Ñ ¡ÒÃà¡ÕÂè ǡѺ¡ÒÃᡠ䢢 ͤÇÒÁ »ÃСͺ´ Ç Undo ¡àÅÔ¡¡ÒÃᡠ䢢 ͤÇÒÁ¡ ͹˹ Ò Redo ·íÒ«éÒí ¡ÒÃᡠ䢡 ͹˹ Ò Cut µÑ´¢ ͤÇÒÁ Copy ¤íÒÊÑ觤ѴÅÍ¡ Paste ÇÒ§¢ ͤÇÒÁ Select all àÅ×Í¡¢ ͤÇÒÁ·Ñ§é ËÁ´ Goto line ¡ÃÐâ´´ä»ÂѧºÃ÷Ѵ·Õµè Í §¡Òà Find ¤ ¹ËÒ Indent  Í˹ Ò

àÁ¹Ù Tools

à» ¹àÁ¹Ùà¤Ã×Íè §Á×ͪ ÇÂ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ »ÃСͺ´ Ç Check parens µÃǨÊͺ¡ÒÃãÊ Ç§àÅ红ͧâ»Ãá¡ÃÁ Upload array Í Ò¹¢ ÍÁÙÅã¹áÍàà·¡Õè Òí ˹´ List functions áÊ´§ª×Íè ¿ §¡ ª¹Ñè List global variables áÊ´§ª×Íè µÑÇá»ÃẺâ¡ÅºÍÅ List loaded files áÊ´§ª×Íè ä¿Å ·´Õè Òǹ âËŴŧ㹺Íà ´ AX-11 View diagram áÊ´§Ê ǹ»ÃСͺ¢Í§ AX-11 Download firmware ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡

àÁ¹Ù Setting

Small fonts àÅ×Í¡µÑÇÍÑ¡Éâ¹Ò´àÅç¡ Medium fonts àÅ×Í¡µÑÇÍÑ¡Éâ¹Ò´¡ÅÒ§ Large fonts àÅ×Í¡µÑÇÍÑ¡Éâ¹Ò´ãË­ Huge fonts àÅ×Í¡¢¹Ò´µÑÇÍÑ¡ÉÃãË­ ·ÊÕè ´Ø àÅ×Í¡áÊ´§¡ÒÃᡤíÒÊѧè , ¿ §¡ ª¹Ñè , µÑÇá»Ã, Options ¢ ͤÇÒÁ, ¾ÒÃÒÁÔàµÍà áÅФíÒ͸ԺÒÂã¹â»Ãá¡ÃÁ´ ÇÂÊÕ Change controller type àÅ×Í¡ÎÒà ´áÇà (AX-11, Handyboard áÅÐ RCX) Change serial port àÅ×Í¡µíÒá˹ §¢Í§¾Íà µÍ¹Ø¡ÃÁ Download firmware ´Òǹ âËÅ´â»Ãá¡ÃÁ¤Çº¤ØÁËÅÑ¡


28

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¿ §¡ ª¹Ñè ¢Í§ Interactive C 1. ¿ §¡ ªÑè¹Ê §¤ ÒàÍÒµ ¾Øµ printf

áÊ´§¢ ͤÇÒÁº¹âÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11

2. ¿ §¡ ªÑè¹ÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ clear_digital_out set_digital_out test_digital_out

3. ¿ §¡ ª¹Ñè ÁÍàµÍÃ

alloff ao bk fd init_expbd_servos motor off

4. ¿ §¡ ª¹Ñè àÊÕ§

beep beeper_off beeper_on set_beeper_pitch Tone

5. ¿ §¡ ªÑè¹àÇÅÒ

mseconds msleep reset_system_time seconds sleep

㪠à¤ÅÕÂà ËÃ×ÍÊ §Åͨԡ 0 ä»Âѧ¢Ò¾Íà µ·Õ¡è Òí ˹´ 㪠૵ËÃ×ÍÊ §Åͨԡ 1 ä»Âѧ¢Ò¾Íà µ·Õ¡è Òí ˹´ 㪠µÃǨÊͺ¤ ÒÅͨԡ¢Í§¢Ò¾Íà µ´Ô¨µÔ ÍÅàÍÒµ ¾µØ » ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ·§Ñé ËÁ´ » ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ·§Ñé ËÁ´ à» ¹ª×Íè  ͧ͢¿ §¡ ª¹Ñè alloff Êѧè ãË ÁÍàµÍà ËÁع¡ÅѺ·ÔÈ·Ò§ Êѧè ãË ÁÍàµÍà ËÁعµÒÁ·ÔÈ·Ò§ àÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢Ñºà«Íà âÇÁÍàµÍà àÅ×Í¡ÃдѺ¾Åѧ§Ò¹ä¿¿ Ò·Õ¨è Ò ÂãË á¡ ÁÍàµÍà ÁÕ¤Ò ã¹ª ǧ -100 ¶Ö§ 100 » ´¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà µÇÑ ·Õ¡è Òí ˹´ ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 500Hz à» ¹àÇÅÒ»ÃÐÁÒ³ 0.3 ÇÔ¹Ò·Õ » ´¡ÒâѺàÊÕ§ÍÍ¡¨Ò¡ÅíÒ⾧໠Ââ«. à» ´¡ÒâѺàÊÕ§ÍÍ¡ÅíÒ⾧໠Ââ«´ ǤÇÒÁ¶Õ·è ¡Õè Òí ˹´äÇ ¤Ãѧé Å ÒÊØ´ ¡íÒ˹´¤ÇÒÁ¶Õàè ÊÕ§·Õ¢è ºÑ ÍÍ¡¨Ò¡ÅíÒ⾧໠Ââ« ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§µÒÁ·Õ¡è Òí ˹´äÇ ã¹¿ §¡ ª¹Ñè set_beeper_pitch áÅÐ ¡íÒ˹´ÃÐÂÐàÇÅÒ㹡ÒâѺàÊÕÂ§ä´ ã¹Ë¹ Ç¢ͧÇÔ¹Ò·Õ ¹Ñº¤ ÒàÇÅҢͧÃкºã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ¡íÒ˹´¤ ÒàÇÅÒ㹡ÒÃÃͤÍ ã¹Ë¹ Ç¢ͧÁÔÅÅÔÇ¹Ô Ò·Õ ÃÕ૵¤ ÒàÇÅҢͧÃкºà» ¹Èٹ ¹Ñº¤ ÒàÇÅҢͧÃкºã¹Ë¹ ÇÂÇÔ¹Ò·Õ ¡íÒ˹´¤ ÒàÇÅÒ㹡ÒÃÃͤÍÂã¹Ë¹ ÇÂÇÔ¹Ò·Õ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

29

6. ¿ §¡ ª¹Ñè µÑǵÃǨ¨Ñº analogx digital disable_encoder enable_encoder knob read_encoder reset_encoder start_button start_press stop_button stop_press

Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ·Õ¡è Òí ˹´ Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ´Ô¨µÔ ÍŪ ͧ·Õ¡è Òí ˹´ » ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨ÃµÔ´µ ͵ÑÇࢠÒÃËÑÊẺ¾ÑÅÊ (encoder) à» ´ËÃ×ÍàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§Ç§¨ÃµÔ´µ ͵ÑÇࢠÒÃËÑÊẺ¾ÑÅÊ Í Ò¹¤ Ò¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ µíÒá˹ § KNOB º¹ºÍà ´ AX-11 ÁÕ¤Ò ã¹ª ǧ 0-255 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒûÃѺ¤ ҢͧµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ Í Ò¹¤ Ҩҡǧ¨ÃµÔ´µ ͵ÑÇࢠÒÃËÑÊẺ¾ÑÅÊ ÃÕ૵ËÃ×Íà¤ÅÕÂà ÍÒ ¹¤ Ңͧǧ¨ÃµÔ´µ ͵ÑÇࢠÒÃËÑÊẺ¾ÑÅÊ Í Ò¹¤ ҢͧÊÇÔµª START º¹ºÍà ´ AX-11 ǹÃÍ¡Òá´ÊÇÔµª START àÁ×Íè ÊÇÔµª ¶¡Ù ¡´ ¨ÐÁÕàÊÕ§ µÔ´é à¡Ô´¢Ö¹é Í Ò¹¤ ҢͧÊÇÔµª STOP º¹ºÍà ´ AX-11 ǹÃÍ¡Òá´ÊÇÔµª STOP àÁ×Íè ÊÇÔµª ¶¡Ù ¡´ ¨ÐÁÕàÊÕ§ µÔ´é à¡Ô´¢Ö¹é

7. ¿ §¡ ª¹Ñè ¤³ÔµÈÒʵà atan cos exp exp10 log log10 random sin sqrt tan

¤íҹdz¤ ÒÁØÁ arctangent (tan1- ) ·Ò§µÃÕ⡳ÁÔµÔ ãË ¼ÅÅѾ¸ ã¹Ë¹ Ç àÃà´Õ¹ ¤íҹdz¤ ÒÁØÁ cosine (COS) ·Ò§µÃÕ⡳ÁÔµÔ ãË ¼ÅÅѾ¸ ã¹Ë¹ Ç àÃà´Õ¹ ¤íҹdz¤ ÒàŢ¡¡íÒÅѧ°Ò¹¸ÃÃÁªÒµÔ (en) ¤íҹdz¤ ÒàŢ¡¡íÒÅѧ°Ò¹ 10 (10n) ¤íҹdz¤ ÒÅÍ¡ÒÃÔ¸ÁÖè °Ò¹¸ÃÃÁªÒµÔ ¤íҹdz¤ ÒÅÍ¡ÒÃÔ¸ÁÖè °Ò¹ 10 ÊØÁ ¤ ÒµÑÇàÅ¢ 㹪 ǧ 2 ¶Ö§ 32,767 ¤íҹdz¤ ÒÁØÁ sine (SIN) ·Ò§µÃÕ⡳ÁÔµÔ ãË ¼ÅÅѾ¸ ã¹Ë¹ Ç àÃà´Õ¹ ¤íҹdz¤ ÒÃÒ¡·ÕÊè ͧ¢Í§µÑÇàÅ¢¨íҹǹàµçÁã´æ ¤íҹdz¤ ÒÁØÁ tangent (TAN) ·Ò§µÃÕ⡳ÁÔµÔ ãË ¼ÅÅѾ¸ ã¹Ë¹ Ç àÃà´Õ¹

8. ¿ §¡ ªÑ蹢ͧ¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ôé§ hog_processor

defer kill_process start_process

¡íÒ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà »ÃÐÁÇżÅã¹áµ ÅСÃкǹ§Ò¹ à» ¹àÇÅÒ 256 ÁÔÅÅÔÇ¹Ô Ò·Õ ã¹¡Ã³Õ·ÁÕè ¡Õ Ò÷íҧҹẺÁÑÅµÔ ·ÒÊ¡Ô§é ¡íÒ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÅѺ价íÒ§Ò¹Í×¹è 㪠ÃÇ Á¡Ñº¿ §¡ ª¹Ñè hog_processor 㹡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ô§é 㪠ËÂØ´¡Ò÷íÒ§Ò¹¢Í§¡Ãкǹ§Ò¹ã´æ 㪠àÃÔÁè µ ¹¡Ãкǹ§Ò¹ã´æ â´ÂÊÒÁÒö·íÒ仾à ÍÁ¡Ñº§Ò¹Í×¹è æ ä´


30

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ª¹Ô´¢Í§¢ ÍÁÙÅã¹â»Ãá¡ÃÁ Interactive C ã¹ Interactive C ÁÕª¹Ô´¢ ÍÁÙÅ㹡ÒÃÍ Ò§ÍÔ§¶Ö§à¾×Íè 㪠§Ò¹´Ñ§¹Õé ª¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã

¢¹Ò´¢Í§¢ ÍÁÙÅáÅÐÃÒÂÅÐàÍÕ´

Char

ÁÕ¢¹Ò´ 8 ºÔµ 㪠᷹¢ ÍÁÙÅÍÑ¡¢ÃÐẺÃËÑÊáÍÊ¡Õé (ASCII) Áѡ㪠¡Ñº¢ ÍÁÙÅẺÍÐàÃÂ

Int

ÁÕ¢¹Ò´ 16 ºÔµ 㪠᷹¢ ÍÁÙŨíҹǹàµçÁ 㹪 ǧ -32,768 ¶Ö§ +32,767

Long

ÁÕ¢¹Ò´ 32 ºÔµ 㪠᷹¢ ÍÁÙŨíҹǹàµçÁ 㹪 ǧ -2,147,483,648 ¶Ö§ +2,147,483,647 ¶ Ò¡íÒ˹´à» ¹¤ ÒµÑÇàÅ¢ ËÃ×ͤ Ò¤§·Õãè ´æ ¨Ðµ ͧµ Í· Ò´ ÇÂÍÑ¡Éà l ËÃ×Í L à¾×Íè ÃÐºØ Ç Òà» ¹¢ ÍÁÙŪ¹Ô´¨íҹǹàµçÁẺ long ËÃ×Í 32 ºÔµ

Float

ÁÕ¢¹Ò´ 32 ºÔµ 㪠᷹¢ ÍÁÙŨíҹǹ¨Ãԧ㹪 ǧ 10-38 ¶Ö§ 1038

Arrays

à» ¹¡ÅØ Á¢ ÍÁÙÅËÃ×͵ÑÇá»Ã·Õè¶Ù¡»ÃСÒÈ¢Öé¹ â´ÂÁÕª¹Ô´¢ ÍÁÙÅ à´ÕÂǡѹáÅÐÁÕáÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒàÃÕ§µ ͡ѹ

Pointers

ãª Í Ò§ÍÔ§¶Ö§áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒ

Structures

à» ¹¡ÒèѴ¡ÅØ Á¢ ÍÁÙÅ·ÕèÊÒÁÒöÁÕ¤ÇÒÁᵡµ Ò§ª¹Ô´¡Ñ¹ä´

¡ÒûÃСÒȵÑÇá»Ã ¡ÒûÃСÒȵÑÇá»Ãã¹â»Ãá¡ÃÁ Interactive C ÁÕÅ¡Ñ É³ÐàËÁ×͹¡Ñºã¹ÀÒÉÒ«ÕÁҵðҹ ´Ñ§¹Õé type variable_name;

â´Â·Õè type ¤×Í ª¹Ô´¢ ÍÁÙŢͧ¼ÅÅѾ¸ ·Õèµ Í§¡ÒáíÒ˹´ variable_name ¤×Í ª×Íè ¢Í§µÑÇá»Ã·Õ»è ÃСÒÈ àª ¹ int a;

»ÃСÒȵÑÇá»Ãª×Íè a ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº int long result;

»ÃСÒȵÑÇá»Ãª×Íè result ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº long


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

31

float start;

»ÃСÒȵÑÇá»Ãª×Íè start ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº float int x,y;

»ÃСÒȵÑÇá»Ã 2 µÑǾà ÍÁ¡Ñ¹ª×Íè x áÅÐ y ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº int float p,q,r;

»ÃСÒȵÑÇá»Ã 3 µÑǾà ÍÁ¡Ñ¹ª×Íè p,q áÅÐ r ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº float ¶ Òµ ͧ¡ÒûÃСÒȵÑÇá»Ã¾Ã ÍÁ¡Ñº¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ (initial value) ¡çÊÒÁÒö·íÒä´ àª ¹ int x=100;

»ÃСÒȵÑÇá»Ãª×Íè x ¡íÒ˹´ª¹Ô´¢ ÍÁÙÅà» ¹áºº int áÅСíÒ˹´¤ ÒàÃÔÁè µ ¹à» ¹ 100 int x=15,y=78;

»ÃСÒȵÑÇá»Ã x áÅÐ y ª¹Ô´¢ ÍÁÙÅẺ int áÅСíÒ˹´¤ ÒãË x à» ¹ 15 áÅÐ y à» ¹ 78 long p=47L,q=31L;

»ÃСÒȵÑÇá»Ã p áÅÐ q ª¹Ô´¢ ÍÁÙÅ long áÅСíÒ˹´¤ ÒãË p à» ¹ 47 áÅÐ q à» ¹ 31

2.1 Ê Ç¹»ÃСÒȵÑÇá»Ã·Ñ§é â»Ãá¡ÃÁ (Global declarations)

à» ¹¡ÒûÃСÒȵÑÇá»Ã㹵͹µ ¹¢Í§â»Ãá¡ÃÁ¡ ͹¡ÒûÃСÒÈ¿ §¡ ªÑè¹ main ¡Å ÒǤ×Í à» ¹¡ÒûÃСÒȵÑÇá»Ã·ÕèÊÒÁÒöàÃÕ¡㪠§Ò¹ä´ ·Ø¡·Õèã¹â»Ãá¡ÃÁËÃ×ÍÀÒÂ㹢ͧ·Ø¡æ ¿ §¡ ªÑè¹ ·íÒãË ¿ §¡ ªÑ¹Í×è¹æ ÁͧàËç¹µÑÇá»Ã·ÕèÁÕ¡ÒûÃСÒÈẺ¹ÕéáÅÐÊÒÁÒöàÃÕ¡㪠§Ò¹ä´ µÑÇÍ ҧ·Õè 2.1.1 int a,b; float x,y; void main(void) { ........... } void func1(void) { ........... } void func2(void) { ........... }

¨Ò¡µÑÇÍ ҧ¹Õ¿é § ¡ ª¹Ñè main,func1 áÅÐ func2 ¨ÐÁͧàËç¹µÑÇá»Ã a,b,x áÅÐy à¾ÃÒеÑÇá»Ã ·Ñ§é 4 µÑǹÕÁé ¡Õ ÒûÃСÒÈáººÊ Ç¹ÃÇÁ¢Í§·Ñ§é â»Ãá¡ÃÁ


32

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.2 Ê Ç¹»ÃСÒȵÑÇá»ÃẺ· ͧ¶Ô¹è (Local declarations)

à» ¹¡ÒûÃСÒȵÑÇá»ÃÀÒÂ㹿 §¡ ªÑè¹ã´æ ·íÒãË µÑÇá»Ã¹Ñé¹ãª §Ò¹ä´ ੾ÒÐÀÒÂ㹿 §¡ ªÑè¹ ·Õè»ÃСÒÈà· Ò¹Ñé¹ äÁ ÊÒÁÒö¹íÒä»ãª §Ò¹·Õè¿ §¡ ªÑè¹Í×è¹æä´

µÑÇÍ ҧ·Õè 2.2.1 long m,n; void main(void) { int a; ........... } void func1(void) { int b; ........... } void func2(void) { float x,y; ........... }

func2)

¨Ò¡µÑÇÍ ҧ·Õè 2.2.1 ÊÃØ»ä´ ÇÒ ¿ §¡ ª¹Ñè main ÁͧàËç¹µÑÇá»Ã m,n áÅÐ a (ÁͧàËç¹ a à¾ÃÒлÃСÒÈẺ· ͧ¶Ô¹è ÀÒÂ㹿 §¡ ª¹Ñè main) ¿ §¡ ª¹Ñè func1 ÁͧàËç¹µÑÇá»Ã m,n áÅÐ b (ÁͧàËç¹ b à¾ÃÒлÃСÒÈẺ· ͧ¶Ô¹è ÀÒÂ㹿 §¡ ª¹Ñè func1) ¿ §¡ ª¹Ñè func2 ÁͧàËç¹µÑÇá»Ã m,n,x áÅÐ y (ÁͧàËç¹ x áÅÐy à¾ÃÒлÃСÒÈẺ· ͧ¶Ô¹è ÀÒÂ㹿 §¡ ª¹Ñè

2.3 ¡ÒÃá»Å§ª¹Ô´¢Í§¢ ÍÁÙÅ àÁ×è͵ ͧ¡ÒÃà»ÅÕ蹪¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã·Õèä´ »ÃСÒÈäÇ áÅ Ç ÁÕÃٻẺ´Ñ§¹Õé (type)variable

â´Â·Õè type ¤×Í ª¹Ô´¢ ÍÁÙŢͧ¼ÅÅѾ¸ ·Õèµ Í§¡Òà variable ¤×Í µÑÇá»Ã·Õèµ Í§¡ÒÃà»ÅÕè¹á»Å§ª¹Ô´¢Í§¢ ÍÁÙÅ µÑÇÍ ҧ·Õè 2.3.1 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 ¨Ö§µ ͧá»Å§ª¹Ô´¢ ÍÁÙŢͧ x ãË à» ¹ float // ´ Ç¡ÒûÃСÒÈ (float)x ¼ÅÅѾ¸ ¤Í × z ෠ҡѺ 143.67 //


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

33

à¤Ã×èͧËÁÒ // ã¹â»Ãá¡ÃÁ Interactive C 㪠ÃкØÇ Ò ¢ ͤÇÒÁµ ͨҡ¹Õéà» ¹¤íÒ͸ԺÒ (comment) äÁ µÍ §ÁÕ¡ÒÃá»ÅËÃ×ͤÍÁä¾Å µÑÇÍ ҧ·Õè 2.3.2 int a=50;

//

long b=23L,c;

//

c = b*(long)a; // // //

µÑÇÍ ҧ·Õè 2.3.3

»ÃСÒȵÑÇá»Ã a Ẻ int áÅСíÒ˹´¤ ÒãË à· Ò¡Ñº 50 »ÃСÒȵÑÇá»Ã b áÅÐ c Ẻ long áÅСíÒ˹´¤ ÒãË b ෠ҡѺ 23 c à¡çº¤ ҼŤٳÃÐËÇ Ò§ b ¡Ñº a áµ à¹×Íè §¨Ò¡ª¹Ô´¢ ÍÁÙŢͧ a à´ÔÁà» ¹ Ẻ int ¨Ö§µ ͧá»Å§ª¹Ô´¢ ÍÁÙŢͧ a ãË à» ¹ long ´ Ç¡ÒûÃСÒÈ (long)a ¼ÅÅѾ¸ ·äÕè ´ ¤Í× c ÁÕ¤Ò à· Ò¡Ñº 1150

float p=50.736;

//

int q=60,result;

//

result = q+(int)p;

// // // // //

»ÃСÒȵÑÇá»Ã p Ẻ float áÅСíÒ˹´¤ ÒãË à· Ò¡Ñº 50.736 »ÃСÒȵÑÇá»Ã q áÅÐ result Ẻ int áÅÐãË q ෠ҡѺ 60 result à¡çº¤ ҼźǡÃÐËÇ Ò§ q ¡Ñº p à¹×Íè §¨Ò¡ª¹Ô´¢ ÍÁÙŢͧ p à» ¹áºº float ¨Ö§µ ͧá»Å§ª¹Ô´¢ ÍÁÙŢͧ p ãË à» ¹ int ´ Ç¡Òà »ÃСÒÈ (int)p ·íÒãË ¤Ò ãËÁ ·äÕè ´ ¢Í§ p à» ¹ 50 à¹×Íè §¨Ò¡àÁ×Íè á»Å§à» ¹ª¹Ô´¢ ÍÁÙÅ int ¨Ð㪠੾ÒФ Ò¨íҹǹàµçÁ ¼ÅÅѾ¸ ¢Í§ result ¨Ö§à· ҡѺ 110

2.4 µÑÇá»ÃÍÐàà(Arrays variable)

µÑÇá»Ãª¹Ô´ÍÐàà¤×Í ¡ÅØ Á¢Í§µÑÇá»Ã·ÕèÁÕª¹Ô´¢ ÍÁÙÅàËÁ×͹¡Ñ¹áÅÐÁÕ·ÕèÍÂÙ ã¹Ë¹ ǤÇÒÁ¨íÒ (áÍ´à´ÃÊ) àÃÕ§µÔ´µ ͡ѹä»

2.4.1 ÍÐàà1 ÁÔµÔ ÃÙ»áẺ¢Í§¡ÒûÃСÒÈ㪠µÇÑ á»ÃÍÐàà1 ÁÔµÔ ÁÕ´§Ñ ¹Õé type name[size];

â´Â·Õè type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙŵÑÇá»ÃÍÐààname ¤×Í ª×Íè ¢Í§µÑÇá»ÃÍÐààsize ¤×Í ¤ ÒµÑÇàÅ¢¡íÒ˹´¢¹Ò´¢Í§ÍÐàà«Öè§ÍÒ¨äÁ ¡íÒ˹´¡çä´ ¡ÒÃࢠҶ֧¢ ÍÁÙŢͧÊÁÒªÔ¡ã¹áµ ÅÐÍÐàà·íÒä´ â´Â¡íÒ˹´·Õ´è ªÑ ¹ÕªµÕé Òí á˹ § ÁÕû٠Ẻ´Ñ§¹Õé name[index]

â´Â·Õè index ¤×Í ¤ ҴѪ¹Õ·ªÕè ËÕé Ã×ÍÃкØä»ÂѧÊÁÒªÔ¡µÑÇã´æ ÀÒÂã¹ÍÐàà«Ö§è ÍҨ໠¹µÑÇàÅ¢ËÃ×ͤ ÒµÑÇ á»Ãã´æ ËÃ×Í¡ÒáÃзíҢͧ¹Ô¾¨¹ «Ö觷Ñé§ËÁ´·Õè¡Å ÒÇÁҨе ͧÁÕ¤ Òà» ¹¨íҹǹàµçÁà· Ò¹Ñé¹


34

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 2.4.1 ¶ Ò»ÃСÒÈà» ¹ 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 亵 µÑÇÍ ҧ·Õè 2.4.2 ¶ Ò»ÃСÒÈà» ¹ int time[10];

ËÁÒ¶֧ µÑÇá»ÃÍÐààªÍ×è 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 亵 ´Ñ§¹Ñ¹é ¡ÒûÃСÒȵÑÇá»Ã time ¨Ö§ãª à¹×Íé ·Õè ·Ñ§é ÊÔ¹é 20 亵


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

35

µÑÇÍ ҧ·Õè 2.4.3 ¡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐàà¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ àÁ×Íè »ÃСÒÈà» ¹ int dat[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒȵÑÇá»ÃÍÐààªÍ×è dat ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇËÃ×ÍÍÒ¨¨ÐàÃÕÂ¡Ç Ò áµ ÅÐ˹ ÇÂËÃ×Íà«Å ¡çä´ ¼ÅÅѾ¸ ·äÕè ´ ¤Í× dat[0] dat[1] dat[2] dat[3] dat[4] dat[5] dat[6] dat[7]

= = = = = = = =

0x01; 0x02; 0x04; 0x08; 0x10; 0x20; 0x40; 0x80;

µÑÇÍ ҧ¡ÒÃàÃÕ¡㪠ÊÁÒªÔ¡ÍÐààËÅѧ¨Ò¡ÁÕ»ÃСÒÈÍÐàࢠҧº¹ int i , j ; i = 3; j = dat[i];

// j = dat[i] à j = dat[3] à j = 0x08

´Ñ§¹Ñ¹é ¼ÅÅѾ¸ ¤Í× j = 0x08 µÑÇÍ ҧ·Õè 2.4.4 àÁ×Íè »ÃСÒȵÑÇá»Ãà» ¹ char dat[5] = “

abcde” ;

à» ¹¡ÒûÃСÒȵÑÇá»ÃÍÐààªÍ×è dat ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡áµ ÅеÑÇ (ÍÒ¨ ¨ÐàÃÕÂ¡Ç Ò áµ ÅÐ˹ ÇÂËÃ×Íà«Å ¡çä´ ) ã¹áºº char ¼ÅÅѾ¸ ·äÕè ´ ¤Í× dat[0] dat[1] dat[2] dat[3] dat[4]

= = = = =

‘a’; ‘b’; ‘c’; ‘d’; ‘e’;

µÑÇÍ ҧ¡ÒÃàÃÕ¡㪠ËÅѧ¨Ò¡»ÃСÒÈÍÐàࢠҧº¹ char i , j ; i = 3; j = dat[i];

// j = dat[i]à j = dat[3] à j = ‘d’

´Ñ§¹Ñ¹é ¼ÅÅѾ¸ ¤Í× j = d 㹡ÒûÃСÒȵÑÇá»Ãª¹Ô´ÍÐààÊÒÁÒö»ÃСÒÈ㪠§Ò¹à» ¹áºº Global ËÃ×ÍẺ Local ËÃ×͹íÒä»à» ¹µÑÇá»Ã parameter à¾×Íè ÃѺ¡ÒÃÊ §¼ Ò¹¤ Ңͧ¿ §¡ ª¹Ñè ¡çä´


36

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 2.4.5 à» ¹¡ÒûÃСÒȵÑÇá»ÃÍÐàહԴ¢ ÍÁÙÅẺ 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;

µÑÇÍ ҧ·Õè 2.4.6 µÑÇÍ ҧ¡ÒûÃСÒȵÑÇá»ÃÍÐàહԴ¢ ÍÁÙÅ long ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ¡ºÑ ÊÁÒªÔ¡ long store[2] = {20L , 500L} ;

´Ñ§¹Ñ¹é store[0] = 20L; store[1] = 500L;

ËÁÒÂà赯 ¢ ÍÁÙŪ¹Ô´ long ¨Ðµ Í§ãª Í¡Ñ Éà l ËÃ×Í L µ Í· ÒµÑÇàÅ¢¢ ÍÁÙÅ´ ÇÂ

2.4.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}};


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

37

à» ¹¡ÒûÃСÒÈãË 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

2.5 µÑÇá»ÃªÕµé Òí á˹ §ËÃ×;͹ àµÍà (Pointers) µÑÇá»Ã¾Í¹ àµÍà ¤×͵ÑÇá»Ã·Õèà¡çº¤ ÒµíÒá˹ §·ÕèÍÂÙ ËÃ×ÍáÍ´à´ÃʢͧµÑÇá»Ã·Õè·íÒ¡ÒêÕéËÃ×Í áÍ´à´ÃʵíÒá˹ §ã´æ ÁÕÃٻẺ¡ÒûÃСÒÈ㪠§Ò¹´Ñ§¹Õé type * name;

â´Â·Õè type ¤×Í ª¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã¾Í¹ àµÍà name ¤×Í ª×Íè µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª »ÃСÒÈ àª ¹ char *ptr;

à» ¹¡ÒûÃСÒÈãË ptr à» ¹µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª ª¢Õé Í ÁÙÅẺ char int *a;

à» ¹¡ÒûÃСÒÈãË a à» ¹µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª ª¢Õé Í ÁÙÅẺ int float *storage_num;

à» ¹¡ÒûÃСÒÈãË storage_num à» ¹µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª ª¢Õé Í ÁÙÅẺ float long *number;

à» ¹¡ÒûÃСÒÈãË number à» ¹µÑÇá»Ã¾Í¹ àµÍà ·ãÕè ª ª¢Õé Í ÁÙÅẺ long

2.5.1 ¡ÒÃࢠҶ֧µíÒá˹ §áÍ´à´ÃʢͧµÑÇá»Ã ¡ÒÃࢠҶ֧áÍ´à´ÃʢͧµÑÇá»Ãã´æ ´ Ǿ͹ àµÍà ÊÒÁÒÃ¶Í Ò§ÍÔ§µíÒá˹ §´ ÇÂà¤Ã×èͧËÁÒ & ¹íÒ˹ ÒµÑÇá»Ã áÅÐàÁ×Íè µ ͧ¡ÒÃãË µÇÑ á»Ã¾Í¹ àµÍà ¡ÃзíҡѺ¢ ÍÁÙÅ·Õ¡è Òí ÅѧªÕÍé ÂÙ ³ ¢³Ð¹Ñ¹é ·íÒä´ â´Â¡ÒÃãÊ à¤Ã×Íè §ËÁÒ * ¹íÒ˹ ÒµÑÇá»Ã¾Í¹ àµÍà ¹¹Ñé ઠ¹ int *ptr; // à» ¹¡ÒûÃСÒȵÑÇá»Ã¾Í¹ àµÍà ª×Í è ptr ÊíÒËÃѺà¡çºáÍ´à´ÃÊẺ int int x; // à» ¹¡ÒûÃСÒȵÑÇá»Ãª×Í è x ª¹Ô´¢ ÍÁÙÅẺ int ptr = &x; // ¡íÒ˹´ãË ptr à¡çº¤ ÒµíÒá˹ §áÍ´à´ÃÊ x *ptr = 100; // ¡íÒ˹´¤ Ò 100 ãË ¡º Ñ áÍ´à´ÃÊ·Õè ptr ªÕÍé ÂÙ «Ö§è ¡ç¤Í× ¤ Ңͧ x ´ Ç printf(“%d”,x); // ¹íÒ¤ Ңͧ x ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD «Ö§ è ¨ÐÁÕ¤Ò à» ¹ 100 ¹Ñ¹è àͧ


38

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 2.5.1 ·´Åͧà¢Õ¹â»Ãá¡ÃÁ·´Êͺµ Í仹ÕÅé §ã¹ Interactive C áÅ Ç´Òǹ âËŴŧº¹ºÍà ´ AX-11 à¾×Íè µÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹ void main(void) {

à» ¹¡ÒûÃСÒȵÑÇá»Ãª×Íè X ª¹Ô´¢ ÍÁÙÅẺ long long *Xptr; // »ÃСÒȵÑÇá»Ã¾Í¹ àµÍà ª×Í è Xptr ÊíÒËÃѺà¡çº¤ ÒáÍ´à´ÃÊẺ long X=50L; // ¡íÒ˹´¤ Ò X = 50 (à¹×Í è §¨Ò¡à» ¹ª¹Ô´¢ ÍÁÙÅ long µ ͧãÊ L µÒÁËÅѧ) Xptr=&X; // ¡íÒ˹´ãË Xptr à¡çº¤ ÒµíÒá˹ §áÍ´à´ÃÊ X printf(“%d “,*Xptr); // ¤ Òáá·Õá è Ê´§º¹¨ÍáÊ´§¼Å¤×Í ¤ Ңͧ X (X=50L) X=100L; // âËÅ´ãË ¤Ò X = 100L printf(“%d “,*Xptr); // ¤ Ò·ÕÊ è ͧáÊ´§º¹¨ÍáÊ´§¼Å¤×Í ¤ Ңͧ X (X=100L) *Xptr=200L; // ¡íÒ˹´ãË X = 200L â´ÂâËÅ´¼ Ò¹µÑÇá»Ã¾Í¹ àµÍà printf(“%d\n”,X); // áÊ´§¤ ÒÊØ´· Ò¢ͧ¤ Ò X (X=200L) long X;

//

}

(¤íÒ͸ԺÒ·ÕÍè ÂÙË Åѧà¤Ã×Íè §ËÁÒ // äÁ µÍ §¾ÔÁ¾ à¹×Íè §¨Ò¡â»Ãá¡ÃÁ Interactive C äÁ ÃͧÃѺÀÒÉÒä·Â)

¼Å¡Ò÷íÒ§Ò¹ : àÁ×Íè Ãѹâ»Ãá¡ÃÁ·Õ¨è ÍáÊ´§¼Åº¹ AX-11 áÊ´§µÑÇàÅ¢ 50 100 200 ·Õºè Ã÷Ѵº¹

2.6 µÑÇá»ÃẺâ¤Ã§Êà ҧ (Structures) µÑÇá»ÃáẺâ¤Ã§Êà ҧ໠¹ÅѡɳТͧ¡ÒÃÃÇÁ¡ÅØ Á¢Í§µÑÇá»Ã·ÕèÁÕ¤ÇÒÁÊÍ´¤Å ͧËÃ×Í ÊÑÁ¾Ñ¹¸ ¡¹Ñ ãË ÍÂÙË ÁÇ´ËÁÙà ´ÕÂǡѹ â´Â·Õªè ¹Ô´¢ ÍÁÙŢͧµÑÇá»ÃàËŠҹѹé äÁ ¨Òí à» ¹µ ͧ໠¹ª¹Ô´à´ÕÂÇ ¡Ñ¹ «Öè§áµ¡µ Ò§¨Ò¡µÑÇá»ÃẺÍÐààÁÕÅѡɳСÒûÃСÒȵÑÇá»Ã´Ñ§¹Õé struct name { type_1 variab_name_1; type_2 variab_name_2; .......................... type_n variab_name_n; };

â´Â·Õè name ¤×Í ª×èͧ͢µÑÇá»Ãâ¤Ã§Êà ҧ·Õè·íÒ¡ÒûÃСÒÈ type_1....... type_n ¤×Í ª¹Ô´¢ ÍÁÙŢͧµÑÇá»Ã«Ö§è ÍÒ¨¨ÐàËÁ×͹ËÃ×Íᵡµ Ò§¡Ñ¹¡çä´ variab_name_1........ variab_name_n ¤×Í ª×Íè ¢Í§µÑÇá»ÃÊÁÒªÔ¡Â ÍÂ Ê Ç¹¡ÒÃÍ Ò§¶Ö§ÊÁҪԡ ͧ͢µÑÇá»Ãâ¤Ã§Êà ҧ¹Ñ鹨ж١¤Ñè¹´ ÇÂà¤Ã×èͧËÁÒ . áŠǵÒÁ ´ Ǫ×èÍÊÁÒªÔ¡Â ÍÂ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

39

2.6.1 µÑÇÍ ҧ¡ÒûÃСÒȵÑÇá»Ãâ¤Ã§Êà ҧã¹â»Ãá¡ÃÁ struct a {

//

int i;

//

int j;

//

à» ¹¡ÒûÃСÒȪ×Íè µÑÇá»ÃẺâ¤Ã§Êà ҧ ª×Íè a (à» ¹µ ¹áºº)

µÑÇá»ÃÊÁÒªÔ¡µÑÇáá¢Í§ a ª×Íè i ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int µÑÇá»ÃÊÁÒªÔ¡µÑÇ·ÕÊè ͧ¢Í§ a ª×Íè j ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int

}; struct a dat

//

à» ¹¡Òö ÒÂÅѡɳÐãË dat à» ¹µÑÇá»Ãâ¤Ã§Êà ҧàËÁ×͹¡Ñº a

ËÃ×ÍÍÒ¨¨Ð»ÃСÒÈä´ ÍÕ¡ÃٻẺ˹Öè§ ´Ñ§¹Õé struct a { int i; int j; }dat;

//

à» ¹¡Òö ÒÂÅѡɳÐãË dat à» ¹µÑÇá»Ãâ¤Ã§Êà ҧàËÁ×͹¡Ñº a

´Ñ§¹Ñ¹é ¶ Òµ ͧ¡ÒÃÍ Ò§¶Ö§ÊÁÒªÔ¡ i áÅÐ j ¢Í§ dat ·íÒä´ ´§Ñ ¹Õé dat.i = 36;

à» ¹¡ÒáíÒ˹´ãË ÊÁÒªÔ¡ i ã¹ dat ÁÕ¤Ò à» ¹ 36 dat.j = 5;

à» ¹¡ÒáíÒ˹´ãË ÊÁÒªÔ¡ j ã¹ dat ÁÕ¤Ò à» ¹ 5 ¶ Òµ ͧ¡ÒûÃСÒȵÑÇá»Ãâ¤Ã§Êà ҧ¾Ã ÍÁ·Ñ駡íÒ˹´¤ ÒàÃÔèÁµ ¹¡çÊÒÁÒö·íÒä´ ´Ñ§¹Õé struct a

//

à» ¹¡ÒûÃСÒȪ×Íè µÑÇá»ÃẺâ¤Ã§Êà ҧ ª×Íè a (à» ¹µ ¹áºº)

{ int i; int j; }dat = {36,5};

// // //

à» ¹¡Òö ÒÂÅѡɳÐãË dat à» ¹µÑÇá»Ãâ¤Ã§Êà ҧàËÁ×͹¡Ñº a (ÁÕÊÁÒªÔ¡àËÁ×͹ a) ¾Ã ÍÁ¡Ñº¡íÒ˹´¤ ÒãË ¡ºÑ ÊÁÒªÔ¡¢Í§ dat ´ Ç ·íÒãË ÊÁÒªÔ¡µÑÇáá¢Í§ dat (¤×Í i) à» ¹ 36 áÅÐÊÁÒªÔ¡µÑÇ·ÕÊè ͧ¢Í§dat (¤×Í j) à» ¹ 5

¹Í¡¨Ò¡¹Õµé ÇÑ á»Ãâ¤Ã§Êà ҧÂѧ¶ Ò·ʹÅѡɳÐãË ¡ºÑ ¾Í¹ àµÍÃ ä´ ´Ç  «Ö§è ¾ÍÂàµÍà ẺµÑÇ á»Ãâ¤Ã§Êà ҧËÅѧ¨Ò¡·ÕÁè ¡Õ Òö Ò·ʹÅѡɳÐáÅ Ç ÊÒÁÒö¹íÒ仪Õáé Í´à´ÃʢͧµÑÇá»Ãâ¤Ã§Êà ҧ ·Õè¶Ù¡¶ Ò·ʹã¹ÅѡɳÐà´ÕÂǡѹ ËÃ×ÍÁ꤂ ÒÁÕÅѡɳТ ÍÁÙÅà´ÕÂǡѹ·Õèä´ ¡Å ÒÇ仡 ͹˹ Ò¹Õé â´Â ¡ÒÃࢠҶ֧áÍ´à´ÃʢͧÊÁÒªÔ¡ã¹µÑÇá»Ãâ¤Ã§Êà ҧã´æ ¨ÐÁÕâÍà»ÍàÃàµÍà -> à» ¹µÑÇàª×Íè Á⧠ઠ¹ struct { int int }; struct

a

//

à» ¹¡ÒûÃСÒȪ×Íè µÑÇá»ÃẺâ¤Ã§Êà ҧ ª×Íè a (à» ¹µ ¹áºº)

//

¶ Ò·ʹÅѡɳеÑÇá»Ãâ¤Ã§Êà ҧ a ãË ¡ºÑ µÑÇá»ÃãËÁ ·àÕè » ¹¾Í¹ àµÍÃì

i; j; a *ptr;


40

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 2.6.1 struct time {

//

int hour;

//

int min;

//

int sec;

//

à» ¹¡ÒûÃСÒȪ×Íè µÑÇá»ÃẺâ¤Ã§Êà ҧ ª×Íè time (à» ¹µ ¹áºº) µÑÇá»ÃÊÁÒªÔ¡ª×Íè hour ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int µÑÇá»ÃÊÁÒªÔ¡ª×Íè min ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int µÑÇá»ÃÊÁÒªÔ¡ª×Íè sec ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int

}; struct time mcu_time;

¶ Ò·ʹÅѡɳеÑÇá»Ãâ¤Ã§Êà ҧ time ãË ¡ºÑ µÑÇá»Ã mcu_time // ´Ñ§¹Ñ¹ é mcu_time à» ¹µÑÇá»Ã·ÕÁè ÊÕ ÁÒªÔ¡ 3 µÑǤ×Í hour, min áÅÐ sec //

void main(void) { mcu_time.hour=20;

// //

mcu_time.min=5;

// //

mcu_time.sec=12;

// //

¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ÊÁÒªÔ¡Â Í hour ¢Í§µÑÇá»Ãâ¤Ã§Êà ҧª×Íè

mcu_time

¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ÊÁÒªÔ¡Â Í min ¢Í§µÑÇá»Ãâ¤Ã§Êà ҧª×Íè

mcu_time

¡íÒ˹´¤ Ò¢ ÍÁÙÅãË ÊÁÒªÔ¡Â Í sec ¢Í§µÑÇá»Ãâ¤Ã§Êà ҧª×Íè

mcu_time

printf(“\n%d”,mcu_time.hour);

//

printf(“ %d”,mcu_time.min);

//

printf(“ %d”,mcu_time.sec);

//

¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD

}

¼Å¡Ò÷íÒ§Ò¹ : ·Õ¨è ÍáÊ´§¼Å¢Í§ºÍà ´ AX-11 áÊ´§µÑÇàÅ¢ 20 5 12 ·Õºè Ã÷Ѵº¹ Íѹ໠¹¤ Ңͧ µÑÇá»Ã mcu_time.hour, mcu_time.min áÅÐ mcu_time.sec µÒÁÅíҴѺ µÑÇÍ ҧ·Õè 2.6.2 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ Interactive C à¾×Íè ·´ÊͺÊà ҧµÑÇá»ÃẺâ¤Ã§Êà ҧ·ÕÁè ¡Õ Òö Ò ·Í´ÅѡɳÐä»Âѧ¾Í¹ àµÍà struct team {

//

long l1;

//

long l2;

//

à» ¹¡ÒûÃСÒȪ×Íè µÑÇá»ÃẺâ¤Ã§Êà ҧ ª×Íè team (à» ¹µ ¹áºº) µÑÇá»ÃÊÁÒªÔ¡ª×Íè l1 ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ long µÑÇá»ÃÊÁÒªÔ¡ª×Íè l2 ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ long µÑÇá»ÃÊÁÒªÔ¡ª×Íè i ÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int

int i; // }; struct team team_a , *pteam;

Ñ µÑÇá»ÃãËÁ ·ªÕè Í×è team_a áÅÐ ¾Í¹ àµÍà pteam // ¶ Ò·ʹÅѡɳеÑÇá»Ãâ¤Ã§Êà ҧ team ãË ¡º void main(void)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

41

{

¡íÒ˹´ãË ¾ÍÂàµÍà pteam ªÕáé Í´à´ÃʵÑÇá»Ã team_a pteam->l1 = 20L; // ¡íÒ˹´¤ Ò¢ ÍÁÙÅÊÁÒªÔ¡ l1 ¢Í§µÑÇá»Ã team_a â´Â㪠pteam // à» ¹µÑǪÕá é Í´à´ÃÊ pteam->l2 = 142L; // ¡íÒ˹´¤ Ò¢ ÍÁÙÅÊÁÒªÔ¡ l2 ¢Í§µÑÇá»Ã team_a â´Â㪠pteam // à» ¹µÑǪÕá é Í´à´ÃÊ pteam->i = 78; // ¡íÒ˹´¤ Ò¢ ÍÁÙÅÊÁÒªÔ¡ i ¢Í§µÑÇá»Ã team_a â´Â㪠pteam // à» ¹µÑǪÕá é Í´à´ÃÊ printf(“\n%d”,team_a.l1); // ¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´Å Ù LCD printf(“ %d”, team_a.l2); // ¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD printf(“ %d”, team_a.i); // ¹íÒ¤ ÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD pteam = &team_a;

//

}

2.7 µÑÇ´íÒà¹Ô¹¡ÒÃã¹â»Ãá¡ÃÁ Interactive C

Interactive C ÁÕµÑÇ´íÒà¹Ô¹¡ÒÃËÃ×ÍâÍà»ÍàÃàµÍà (operator) àËÁ×͹¡ÑºÀÒÉÒ«ÕµÒÁÁҵðҹ ANSI-C (Áҵðҹ¢Í§ÀÒÉÒ«Õ·Õè㪠¾Ñ²¹Òº¹¤ÍÁ¾ÔÇàµÍà «Ö觼٠¼ÅÔµ¤ÍÁä¾àÅÍà µ ͧÃͧÃÑºä´ ) µÑÇ´íÒà¹Ô¹¡ÒâͧÀÒÉÒ«ÕẠ§ä´ 3 ¡ÅØ Á¤×Í µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà (Arithmetic operator), µÑÇ´íÒà¹Ô¹¡Ò÷ҧµÃáР(Relation & logic operation) áÅÐ µÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ(Bitwise operation)

2.7.1 µÑÇ´íÒà¹Ô¹¡Ò÷ҧ¤³ÔµÈÒʵà µÑÇ´íÒà¹Ô¹¡Òà + * / % ++ -+= -= *= /= %=

¤ÇÒÁËÁÒ ºÇ¡ ź ¤Ù ³ ËÒà ËÒÃẺàÍÒàÈÉ ËÃ×Í âÁ´ÙâÅ (modulo) à¾ÔèÁ¤ Ò¢Öé¹Ë¹Ö觤 Ò Å´¤ ÒÅ§Ë¹Ö§è ¤ Ò ºÇ¡¢Öé¹Íա෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í Å´Å§Íա෠ҡѺ¤ Ò·Ò§¢ÇÒÁ×Í ¤Ù³ÍÕ¡´ Ǥ Ò·Ò§¢ÇÒÁ×Í ËÒÃÍÕ¡´ Ǥ Ò·Ò§¢ÇÒÁ×Í ËÒÃÍÕ¡´ Ǥ Ò·Ò§¢ÇÒÁ×ÍẺàÍÒàÈÉ


42

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.7.1.1 ¡ÒúǡáÅÐź·Õè¤Ç÷ÃÒº µÑÇÍ ҧ·Õè 2.7.1

int a = 12; a = a + 3;

¼ÅÅѾ¸ ¤Í× a = 15 ¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ a ÁÕ¤Ò à» ¹ 12 µ ÍÁÒÊѧè ãË a ºÇ¡¡Ñº 3 ä´ ¤Ò ෠ҡѺ 15 áŠǹíÒ ¼ÅÅѾ¸ ·äÕè ´ ä»à¡çºäÇ ·Õè a ÍÕ¡¤Ãѧé Ë¹Ö§è µÑÇÍ ҧ·Õè 2.7.2 int a = 12; a = a - 3;

¼ÅÅѾ¸ ¤Í× a = 9 ¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ a ÁÕ¤Ò 12 µ ÍÁÒÊѧè ãË a ź¡Ñº 3 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 9 à¡çºäÇ ·Õè a

2.7.1.2 ¡ÒÃËÒÃẺ / áÅÐ % ÁÕ¤ÇÒÁᵡµ Ò§¡Ñ¹µÃ§·Õè 1. ¡ÒÃËÒÃẺ / à» ¹¡ÒÃËÒÃà¾×èÍà¡çº¤ Ò¨íҹǹàµçÁ·ÕèËÒÃŧµÑÇ 2. ¡ÒÃËÒÃẺ % à» ¹¡ÒÃËÒÃà¾×Íè à¡çº¤ ÒàÈÉ·Õàè ËÅ×ͨҡ¡ÒÃËÒà µÑÇÍ ҧ·Õè 2.7.3 int x , y , z; x = 10; y = x/3; z = x%3;

¡Ò÷íÒ§Ò¹ : y = x/3; à y = 10/3 à y = 3 (¨íҹǹ¤ÃÑ§é ·ÕËè ÒÃŧµÑÇ) z = x%3; à z = 10%3 à z = 1 (àÈÉ·Õàè ËÅ×ͨҡ¡ÒÃËÒÃ)

2.7.1.3 ¡ÒÃà¾ÔÁè ¤ ÒẺ ++ áÅСÒÃÅ´¤ ÒẺ - µÑÇÍ ҧ·Õè 2.7.4 int y = 5; y++;

¼ÅÅѾ¸ ¤Í× y = 6 ¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ y ÁÕ¤Ò à» ¹ 5 µ ÍÁÒÊѧè ãË ¤Ò y ºÇ¡¡Ñº 1 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 6 à¡çºäÇ ·Õè y ÍÕ¡¤Ãѧé Ë¹Ö§è ´Ñ§¹Ñ¹é ¤íÒÊѧè y++; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y + 1;


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

43

µÑÇÍ ҧ·Õè 2.7.5 int y = 5; y--;

¼ÅÅѾ¸ ¤Í× y = 4

¡Ò÷íÒ§Ò¹ : àÃÔÁè µ ¹ y ÁÕ¤Ò à» ¹ 5 µ ÍÁÒÊѧè ãË ¤Ò y ź¡Ñº 1 áŠǹíÒ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 4 à¡çºäÇ ·Õè y ÍÕ¡¤Ãѧé Ë¹Ö§è ´Ñ§¹Ñ¹é ¤íÒÊѧè y - - ; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y - 1;

2.7.1.4 ¡ÒÃà¾ÔÁè ¤ ÒẺ += áÅСÒÃÅ´¤ ÒẺ - = ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y +=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y + a; y -=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y - a; µÑÇÍ ҧ·Õè 2.7.6 int x = 100; x += 10;

¼ÅÅѾ¸ ¤Í× x = 110

2.7.1.5 ¡Òäٳ¤ ÒẺ *= , ¡ÒÃËÒä ÒẺ /= áÅСÒÃËÒä ÒẺ %= ͸ԺÒÂà·Õºà¤ÕÂ§ä´ Ç Ò y *=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y * a; y /=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y/a; y %=a; ãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº y = y%a; µÑÇÍ ҧ·Õè 2.7.7 int x , y , z; x = y = z = 120; x *= 4; y /= 4; z %= 4;

¼ÅÅѾ¸ ¤Í× x = 480 , y = 30 áÅÐ z = 0

2.7.2 µÑÇ´íÒà¹Ô¹¡Òô Ò¹¤ÇÒÁÊÑÁ¾Ñ¹¸ áÅеÃáР(Relation & logic Operation) ¡ÒáÃзíÒ㹡ÅØÁ ¹Õé ¼ÅÅѾ¸ ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢¨ÐÁÕ¤Ò à» ¹ 1 ¶ Òà§×Íè ¹ä¢¹Ñ¹é à» ¹¨ÃÔ§ (true) áÅÐà» ¹ 0 àÁ×Íè à§×Íè ¹ä¢à» ¹à·ç¨ (false) ÊÒÁÒöÊÃØ»¡Ò÷íÒ§Ò¹ä´ à» ¹µÒÃÒ§´Ñ§¹Õé


44

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇ´íÒà¹Ô¹¡Òà == != > < >= <= ! && ||

¤ÇÒÁËÁÒ ෠ҡѺ äÁ ෠ҡѺ ÁÒ¡¡Ç Ò ¹ ÍÂ¡Ç Ò ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ ¹ ÍÂ¡Ç ÒËÃ×Í෠ҡѺ äÁ 㪠(NOT) áÅÐ (AND) ËÃ×Í (OR)

µÑÇÍ ҧ·Õè 2.7.8 ¶ Ò¡íÒ˹´ãË a = 10 , b = 4 áÅÐ c = 0xA0 à§×Íè ¹ä¢ a>b à§×Íè ¹ä¢ a>c à§×Íè ¹ä¢ a>=c à§×Íè ¹ä¢ a != b à§×Íè ¹ä¢ a != c

à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (false)

¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 (à¹×Íè §¨Ò¡ 0xA0 = 10) ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0

2.7.2.1 ¡ÒÃ㪠! , && , || à»ÃÕºà·Õº»ÃÐâ¤à§×Íè ¹ä¢ ¼ÅÅѾ¸ ¢Í§¡Òà ! (NOT) ÊÃØ»ä´ ´§Ñ ¹Õé ¡Ò÷íÒ§Ò¹

¼Å·Õäè ´

! false

true(1)

! true

false(0)

ÊÃØ»Ç Ò ¡ÒáÃзíÒ´ Ç NOT ¨Ðä´ ¤ Ò¼ÅÅѾ¸ ·ÕèµÃ§¢ ÒÁ ¼ÅÅѾ¸ ¢Í§¡ÒÃà»ÃÕºà·Õº¢Í§»ÃÐ⤠2 »ÃÐ⤠´ Ç && (AND) ÊÃØ»ä´ ´§Ñ ¹Õé ¡Ò÷íÒ§Ò¹

¼Å·Õäè ´

false && false

false(0)

false && true

false(0)

true && false

false(0)

true && true

true(1)

ÊÃØ»Ç Ò ¡ÒáÃзíÒ´ Ç AND ¨Ðä´ ¼ÅÅѾ¸ à» ¹ false ·Ñ¹·Õ ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ false


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

45

¼ÅÅѾ¸ ¢Í§¡ÒÃà»ÃÕºà·Õº¢Í§»ÃÐ⤠2 »ÃÐ⤠´ Ç || (OR) ÊÃØ»ä´ ´§Ñ ¹Õé ¡Ò÷íÒ§Ò¹

¼Å·Õäè ´

false || false

false(0)

false || true

true(1)

true || false

true(1)

true || true

true(1)

ÊÃØ»Ç Ò ¼ÅÅѾ¸ ¢Í§¡Òà OR ¨Ðä´ ¤Ò ¼ÅÅѾ¸ à» ¹ true ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í·Ñ§é ¤Ùà » ¹ true µÑÇÍ ҧ·Õè 2.7.9 ¶ Ò¡íÒ˹´ãË a = 10, b = 4 áÅÐ c = 0xA0 àÁ×èÍ¡ÃзíÒ¡ÒÃà»ÃÕºà·Õº à§×Íè ¹ä¢ a>b à§×Íè ¹ä¢ a>c à§×Íè ¹ä¢ a>=c

à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true)

¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 (à¹×Íè §¨Ò¡ 0xA0 = 10)

àÁ×Íè ¡ÃзíÒ¡Òà NOT à§×Íè ¹ä¢ a != b à§×Íè ¹ä¢ a != c

à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹à·ç¨ (false)

¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0

àÁ×èÍ·íÒ¡ÒÃà»ÃÕºà·ÕºáÅÐÁÕ¡ÒáÅѺÅͨԡ à§×Íè ¹ä¢ !(a>b) à§×Íè ¹ä¢ !(a>c) à§×Íè ¹ä¢ !(a>=c) à§×Íè ¹ä¢ !(a != b) à§×Íè ¹ä¢ !(a != c)

à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹à·ç¨ (false) à§×Íè ¹ä¢à» ¹¨ÃÔ§ (true)

¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 0 ¼ÅÅѾ¸ à» ¹ 1

àÁ×Íè à¾ÔÁè ¡ÒÃá͹´ ࢠÒä»ã¹à§×Íè ¹ä¢¡ÒõÃǨÊͺ ¨Ðä´ ¼Å´Ñ§¹Õé à§×Íè ¹ä¢ !(a>b) && (a>=c) ¼ÅÅѾ¸ à» ¹ false(0) à§×Íè ¹ä¢ (a != b) && (a>=c) ¼ÅÅѾ¸ à» ¹ true(1) à§×Íè ¹ä¢ (a != b) && !(a != b) ¼ÅÅѾ¸ à» ¹ false(0)

àÁ×Íè ÁÕ¡ÒÃÍÍà ã¹à§×Íè ¹ä¢¡ÒõÃǨÊͺ ¨Ðä´ ¼Å´Ñ§¹Õé à§×Íè ¹ä¢ !(a>b) || (a>=c) à§×Íè ¹ä¢ (a != b) || (a>=c) à§×Íè ¹ä¢ (a != b) || !(a != b) à§×Íè ¹ä¢ !(a>=c) || !(a != b)

¼ÅÅѾ¸ à» ¹ true(1) ¼ÅÅѾ¸ à» ¹ true(1) ¼ÅÅѾ¸ à» ¹ true(1) ¼ÅÅѾ¸ à» ¹ false(0)


46

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.7.3 µÑÇ´íÒà¹Ô¹¡Ò÷ҧºÔµ(Bitwise Operation)

¡ÒáÃзíÒ㹡ÅØ Á¹Õéà» ¹¡ÒáÃзíÒ·ÕèࢠҶ֧ã¹ÃдѺºÔµ¢Í§¢ ÍÁÙÅ â´Â¤ ҢͧᵠÅкԵ໠¹ ä´ à¾Õ§ 1 ËÃ×Í 0 ෠ҹѹé ÊÒÁÒöÊÃØ»ä´ µÒÃÒ§´Ñ§¹Õé µÑÇ´íÒà¹Ô¹¡Òà ~ & | ^ << >> <<= >>= &= |= ^=

¤ÇÒÁËÁÒ ¡ÅѺ¤ ÒºÔµ¢ ÍÁÙÅ ¡ÒÃá͹´ (AND) ẺºÔµ ¡ÒÃÍÍà (OR) ẺºÔµ ¡ÒÃàÍ硤ÅÙ«¿Õ -ÍÍà (exclusive-OR) ẺºÔµ àÅ×è͹ºÔµä»·Ò§« Ò àÅ×è͹ºÔµä»·Ò§¢ÇÒ àÅ×è͹ºÔµä»·Ò§« ÒÂáÅ ÇãË à· Ò¡Ñº àÅ×è͹ºÔµä»·Ò§¢ÇÒáÅ ÇãË à· Ò¡Ñº á͹´ áÅ ÇãË à· Ò¡Ñº ÍÍà áÅ ÇãË à· Ò¡Ñº àÍ硤ÅÙ«¿Õ -ÍÍà áÅ ÇãË à· Ò¡Ñº

¼ÅÅѾ¸ ¢Í§¡Òà ~ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ

¼Å·Õäè ´

~0

1

~1

0

ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡ÒáÃзíÒ´ Ç ~ ¨Ðä´ ¤Ò ¼ÅÅѾ¸ ¢Í§Åͨԡ·Õµè ç¢ ÒÁ ¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ

¼Å·Õäè ´

0&0

0

0&1

0

1&0

0

1&1

1

ÊÃØ» : ¼ÅÅѾ¸ ¢Í§¡Òà & ẺºÔµµ ͺԵ ¨Ðä´ ¼ÅÅѾ¸ à» ¹ 0 ·Ñ¹·Õ ËÒ¡µÑÇã´µÑÇ˹֧è ËÃ×Í ·Ñ§é ¤Ùà » ¹ 0


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

47

¼ÅÅѾ¸ ¢Í§¡Òà | ẺºÔµµ ͺԵ ÊÃØ»ä´ ´§Ñ ¹Õé ¡ÒáÃзíÒ

¼Å·Õäè ´

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 ·Ñ¹·Õ ËÒ¡·Ñ§é ¤ÙÁ ¤Õ Ò àËÁ×͹¡Ñ¹ µÑÇÍ ҧ·Õè 2.7.10 int x,y,result1,result2,result3,result4; x = 0x9C; y = 0x46;

¨§ËÒ¼ÅÅѾ¸ ¢Í§ result1 result2 result3 result4

ÇÔ¸Õ¤Ô´

= = = =

x&y; x|y; x^y; ~x;

à¹×Íè §¨Ò¡à» ¹¡ÒáÃзíÒẺºÔµµ ͺԵ ¤ÇÃá»Å§¨Ò¡àÅ¢°Ò¹ÊԺˡä»à» ¹àÅ¢°Ò¹Êͧ ¨Ðä´ x = 0x9C à 0000000010011100 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) y = 0x46 à 0000000001000110 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) 1) result1 = (0000000010011100) & (0000000001000110) 0000000010011100 AND 0000000001000110 0000000000000100 à 0x0004 ËÃ×Í 0x04


48

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2) result2 = (0000000010011100) | (0000000001000110) 0000000010011100 OR 0000000001000110 à 0x00DE ËÃ×Í 0xDE 0000000011011110 3) result3 = (0000000010011100) ^ (0000000001000110) 0000000010011100 XOR 0000000001000110 à 0x00DA ËÃ×Í 0xDA 0000000011011010 4) result4 = ~(0000000010011100) ¡ÅѺºÔµ¢ ÍÁÙÅ·Ø¡ºÔµ 1111111101100011 à 0xFF63

2.7.3.1 ¡ÒÃàÅ×è͹ºÔµ¢ ÍÁÙÅ

㹡ÒÃàÅ×è͹ºÔµ¨Ðµ ͧºÍ¡¨íҹǹ¤ÃÑ駢ͧ¡ÒÃàÅ×è͹´ Ç ઠ¹ dat = dat<<4;

ËÁÒ¶֧ ãË àÅ×Íè ¹ºÔµ¢Í§ dat ä»·Ò§« Ò 4 ¤Ãѧé à¡çº¼ÅÅѾ¸ äÇ ·Õè dat àËÁ×͹à´ÔÁ ãË ¼ÅàËÁ×͹ dat <<=4; dat = dat>>1;

ËÁÒ¶֧ ãË àÅ×Íè ¹ºÔµ¢Í§ dat ä»·Ò§¢ÇÒ 1 ¤Ãѧé à¡çº¼ÅÅѾ¸ äÇ ·Õè dat àËÁ×͹à´ÔÁ ãË ¼ÅàËÁ×͹ dat >>=1; µÑÇÍ ҧ·Õè 2.7.11 int dat , x1 , x2; dat = 0x93;

¨§ËÒ¼ÅÅѾ¸ ¢Í§ x1 = dat<<1; x2 = dat<<2;

ÇÔ¸Õ¤Ô´

dat = 0x93 à 0000000010010011 (µÑÇá»Ã int ÁÕ¢¹Ò´à» ¹ 16 ºÔµ) @=J

N

N

x1 ¤×Í ¼ÅÅѾ¸ ¨Ò¡¡ÒÃàÅ×Íè ¹ºÔµ¢Í§ dat ä»·Ò§« Ò 1 ¤Ãѧé ä´ ¼Åà» ¹ 0x0126 ËÃ×Í 29410 x2 ¤×Í ¼ÅÅѾ¸ ¨Ò¡¡ÒÃàÅ×Íè ¹ºÔµ¢Í§ x1 ä»·Ò§« Ò 1 ¤Ãѧé ËÃ×Íà» ¹¡ÒÃàÅ×Íè ¹ºÔµ¢Í§ dat ä»·Ò§« Ò 2 ¤Ãѧé ä´ ¼Åà» ¹ 0x024C ËÃ×Í 58810


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

49

µÑÇÍ ҧ·Õè 2.7.12 int a , b , c; a = 0x7A; b = 0x16; c = 0xFD;

¨§ËÒ¼ÅÅѾ¸ ¢Í§ a &= 0x3C; b |= 0x51; c ^= 0xD0;

ÇÔ¸Õ¤Ô´

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


50

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.8 ¤íÒÊÑ§è µÃǨÊͺã¹â»Ãá¡ÃÁ Interactive C ¤íÒÊѧè ÊíÒËÃѺµÃǨÊͺà§×Íè ¹ä¢ã¹â»Ãá¡ÃÁ»ÃСͺ´ Ç if, if-else, for áÅÐ while

2.8.1 ¤íÒÊѧè if à» ¹¤íÒÊÑ§è ·Õãè ª 㹡ÒõÃǨÊͺà§×Íè ¹ä¢ (condition) Ç Ò à» ¹¨ÃÔ§ËÃ×Íà·ç¨ ÁÕû٠Ẻ´Ñ§¹Õé if(Condition) { block }

block ËÁÒ¶֧ ªØ´¤íÒÊÑ§è ·ÕÍè ÂÙÀ ÒÂ㹪 ǧǧàÅ纻 ¡¡Ò { } «Ö§è ÍÒ¨¨ÐÁÕà¾Õ§˹֧è ËÃ×ÍËÅÒÂæ ¤íÒÊÑ§è ¡çä´ ¶ Òâ»Ãá¡ÃÁÁÕ¡ÒõÃǨÊͺáŠǾºÇ Ò à§×Íè ¹ä¢ËÃ×Í condition ¹Ñ¹é à» ¹ ¨ÃÔ§ ¡ç¨ÐࢠÒä» ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block áµ ¶Ò à» ¹ à·ç¨ ¡ç¨Ð¢ ÒÁ仡ÃзíÒ¤íÒÊÑ§è ·ÕÍè ÂÙ¶ ´Ñ ä»ÀÒ¹͡ block áµ ¶Ò ¤íÒÊѧè ã¹ block ÁÕà¾Õ§¤íÒÊѧè à´ÕÂÇ ¼Ùà ¢Õ¹â»Ãá¡ÃÁÍÒ¨¨ÐäÁ µÍ §ãÊ à¤Ã×Íè §ËÁÒ» ¡¡Ò¡çä´ àª ¹ if(i==4) { y = 46; }

ãË ¼ÅàËÁ×͹¡Ñº if(i==4) y = 46;

µÑÇÍ ҧ·Õè 2.8.1 ¨Ò¡â»Ãá¡ÃÁµ Í仹Õé int i , j ; // »ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò ã¹ª ǧ -32,768 ¶Ö§ +32,767 i = 5; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹¢Í§µÑÇá»Ã i j = 3; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹¢Í§µÑÇá»Ã j if(i>=5) // µÃǨÊͺà§×Í è ¹ä¢ ¶ Ò i ÁÒ¡¡Ç Ò ËÃ×Í෠ҡѺ 5 ãË ·Òí ¤íÒÊѧè ã¹ block { j = i +10;

//

i = 7;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} /*—————————result——————————————*/ j = 15 i = 7 /*——————————————————————————*/


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

51

¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ à¾ÃÒÐ i = 5 (ä´ ÃѺ¡ÒáíÒ˹´à» ¹¤ ÒàÃÔÁè µ ¹) ¨Ö§ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block µÒÁÅíҴѺ ´Ñ§¹Õé ¤íÒÊÑ§è ·Õè 1:

j = i +10 à j = 5+10 à j = 15

¤íÒÊÑ§è ·Õè 2:

i = 7 (¡íÒ˹´¤ Ò¤§·Õ)è

µÑÇÍ ҧ·Õè 2.8.2 ¨Ò¡â»Ãá¡ÃÁµ Í仹Õé int

i , j ;

i = j = 2; if(i==5)

»ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò ã¹ª ǧ -32,768 ¶Ö§ +32,767 // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹¢Í§µÑÇá»Ã i áÅÐ j ãË Á¤Õ Ò à· Ò 2 ·Ñ§é ¤Ù // µÃǨÊͺà§×Í è ¹ä¢ ¶ Ò i ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 5 ãË ·Òí ¤íÒÊѧè ã¹ block

//

{ j = i +1;

//

i = 0xFF;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

//

¤íÒÊÑ§è ·Õè 3

} if(j==2) j = j+1;

/*—————————result——————————————*/ j = 3 i = 2 /*——————————————————————————*/

¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(i==5) ¾ºÇ Ò à§×Íè ¹ä¢äÁ à» ¹¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ äÁ Á¡Õ ÒÃࢠÒ仡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(j==2) ¨Ö§ÁÕ¡ÒõÃǨ Êͺà§×Íè ¹ä¢´Ñ§¡Å ÒÇÍÕ¡¤Ãѧé áÅоºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ·íÒãË µÍ §ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 (à¹×Íè § ¨Ò¡¤íÒÊѧè if(j==2) ÁÕ¤Òí ÊÑ§è ·Õ¶è ´Ñ ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢à¾Õ§¤íÒÊѧè à´ÕÂÇ äÁ ¨Òí à» ¹µ ͧ㪠à¤Ã×Íè §ËÁÒ { } ¡çä´ ) ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3

j = j +1 à j = 2+ 1 à j = 3

2.8.2 ¡ÒõÃǨÊͺà§×Íè ¹ä¢´ Ç¡ÒÃ㪠¤Ò ¤§·ÕËè Ã×ͤ ҢͧµÑÇá»Ã ¹Í¡¨Ò¡¹Õé·ÕèµíÒá˹ § condition ¹Í¡¨Ò¡¨Ð㪠໠¹»ÃÐâ¤à»ÃÕºà·Õº´ ÇÂà¤Ã×èͧËÁÒ·ҧ ¤³ÔµÈÒʵà áÅеÃááÅ Ç ÂѧÊÒÁÒö㪠µÃǨÊͺ¤ Ò¤§·ÕËè Ã×ͤ ҢͧµÑÇá»Ãã´æ ·Õ¹è Òí ÁÒà» ¹à§×Íè ¹ä¢ ä´ ´Ç  ´Ñ§¹Õé


52

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

1. ¶ Ò¤ ÒµÑÇàÅ¢ËÃ×͵ÑÇá»Ãà§×è͹䢴ѧ¡Å ÒÇ äÁ ෠ҡѺ 0 à§×è͹䢴ѧ¡Å ÒǨÐà» ¹¨ÃÔ§¨ÐÁÕ¡Òà ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¢Í§¤íÒÊѧè if ¹Ñ¹é æ 2. ¶ Ò¤ ÒµÑÇàÅ¢ËÃ×͵ÑÇá»Ãà§×è͹䢴ѧ¡Å ÒÇ à· Ò¡Ñº 0 à§×è͹䢴ѧ¡Å ÒǨÐà» ¹à·ç¨¨ÐäÁ ÁÕ¡Òà ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¢Í§¤íÒÊѧè if ¹Ñ¹é æ µÑÇÍ ҧ·Õè 2.8.3 ¨Ò¡â»Ãá¡ÃÁµ Í仹Õé int

j = 8 ;

//

int k = 0xFF;

//

if(6)

// //

»ÃСÒȵÑÇá»Ãà» ¹áºº int ÁÕ¤Ò àÃÔÁè µ ¹·Õè 8 »ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò àÃÔÁè µ ¹·Õè 0xFF ·Õµè Òí á˹ §à§×Íè ¹ä¢ = 6 à§×Íè ¹ä¢¹Õàé » ¹¨ÃÔ§ (äÁ ෠ҡѺ 0) ¨ÐÁÕ¡Ò÷íÒ¤íÒÊѧè ÀÒÂã¹ Block ¹Õé (ÁÕ¡Ò÷íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2)

{ j++;

//

k = ~k;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} if(-3)

·Õµè Òí á˹ §à§×Íè ¹ä¢ = -3 à§×Íè ¹ä¢¹Õàé » ¹¨ÃÔ§ ¨ÐÁÕ¡Ò÷íÒ¤íÒÊÑ§è ·Õè 3 // ¤íÒÊѧ è ·Õè 3 // ·Õµ è Òí á˹ §à§×Íè ¹ä¢ = 0 à§×Íè ¹ä¢à» ¹à·ç¨ äÁ Á¡Õ Ò÷íÒ¤íÒÊѧè ã¹ block // (äÁ Á¡ Õ Ò÷íÒ¤íÒÊÑ§è ·Õè 4 áÅÐ 5) //

j = j + k; if(0)

{ j = 0x36;

//

k = ~k;

//

¤íÒÊÑ§è ·Õè 4 ¤íÒÊÑ§è ·Õè 5

} /*—————————result——————————————*/ j = 10 (0xFF09) k = 0xFF00 /*——————————————————————————*/

¨ÐàËç¹Ç Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(6) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡Òà ࢠÒÁÒ¡ÃзíÒ ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(-3) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ ´Ñ§¡Å ÒÇÍÕ¡¤ÃÑ§é ¾ºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ·íÒãË Á¡Õ ÒáÃзíÒ¤íÒÊÑ§è ·Õè 3 ËÅѧ¨Ò¡¹Ñ¹é àÁ×Íè ¾º¤íÒÊѧè if(0) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ áŠǾºÇ Òà§×Íè ¹ä¢à» ¹à·ç¨ ·íÒãË äÁ µÍ §à¢ ÒÁÒ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¨Ö§äÁ Á¡Õ ÒáÃзíÒ¤íÒÊÑ§è ·Õè 4 áÅÐ 5


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

53

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 1 j++; à j = 9 ËÃ×Í 0x09 à» ¹¤íÒÊÑè§à¾ÔèÁ¤ ÒµÑÇá»Ã j ¢Öé¹ Ë¹Ö§è ¤ Ò áŠǹíÒ¼ÅÅѾ¸ à¡çº·Õµè ÇÑ á»Ã j ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 9 à¾ÃÒФ ÒàÃÔÁè µ ¹¤×Í 8) ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 2 k = ~k; à k = 0xFF00 ÃдѺºÔµ¢Í§µÑÇá»Ã k áŠǹíÒ¼ÅÅѾ¸ à¡çº·Õµè ÇÑ á»Ã k

à» ¹¤íÒÊÑ觡ÅѺÅͨԡ㹢 ÍÁÙÅ

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3 j = j+k;à j = 0x09 +0xFF00 à j = 0xFF09 à» ¹¤íÒÊÑ§è ºÇ¡¤ Ңͧ j ¡Ñº k áŠǹíÒ¼ÅÅѾ¸ à¡çº·Õµè ÇÑ á»Ã j µÑÇÍ ҧ·Õè 2.8.4 ¨Ò¡â»Ãá¡ÃÁµ Í仹Õé int m ; // »ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò ã¹ª ǧ -32,768 ¶Ö§ +32,767 int test; // »ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò ã¹ª ǧ -32,768 ¶Ö§ +32,767 m = 1; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË m = 1 test = 0x00; // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË test = 0x00 (àÅ¢°Ò¹ÊԺˡ) if(test) // ·Õµ è Òí á˹ §à§×Íè ¹ä¢ test = 0 à§×Íè ¹ä¢à» ¹à·ç¨ äÁ Á¡Õ Ò÷íÒ¤íÒÊѧè ã¹ block { test++;

//

m = 0;

//

} if(m) {

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

·Õµè Òí á˹ §à§×Íè ¹ä¢ m = 1 à§×Íè ¹ä¢à» ¹¨ÃÔ§ ¡ÃзíÒ¤íÒÊѧè ã¹ block ÍÕ¡¤Ãѧé

if(test>=0)

¶ ÒµÃǨÊͺ test >= 0 à» ¹¨ÃÔ§ ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 0xF0)>>4; // ¤íÒÊѧ è ·Õè 3 //

test = (test | } /*—————————result——————————————*/ m = 1 test = 0x0F /*——————————————————————————*/

¨ÐàËç¹Ç Ò¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(test) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹à·ç¨ à¾ÃÒÐ test = 0 ¨Ö§äÁ Á¡Õ ÒÃà¢ Ò ÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá µ ÍÁÒàÁ×Íè ¾º¤íÒÊѧè if(m) ¨Ö§µÃǨÊͺà§×Íè ¹ä¢´Ñ§¡Å ÒÇ ÍÕ¡¤ÃÑ§é ¾ºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ à¾ÃÒÐ m = 1 ·íÒãË Á¡Õ ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block «Ö§è ÀÒÂã¹ block ¨Ð¾º¤íÒÊѧè if(test>=0) ¨Ö§ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ ¾ºÇ Ò à» ¹¨ÃÔ§ ¨Ö§µ ͧ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3 test = (test | 0xF0)>>4; à test = 0x0F à» ¹¤íÒÊѧè ãË µÇÑ á»Ã test ÍÍà ¡ºÑ ¢ ÍÁÙÅ 0xF0 áÅ ÇàÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 4 ¤ÃÑ§é ¹íÒ¼ÅÅѾ¸ ·äÕè ´ à¡çº·Õµè ÇÑ á»Ã test ÍÕ¡¤Ãѧé Ë¹Ö§è ¼ÅÅѾ¸ ·äÕè ´ ¤Í× 0x0F


54

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.8.2.1 ¡ÒõÃǨÊͺà§×è͹䢷Õèàª×èÍÁ´ Ç¡ÒÃá͹´ (AND) ¡ÒõÃǨÊͺà§×Íè ¹ä¢ÂѧÊÒÁÒö¹íÒ»ÃÐâ¤à§×Íè ¹ä¢ËÅÒÂæ »ÃÐâ¤ÁÒàª×Íè Á¡Ñ¹áººµÃáР´ ÇÂà¤Ã×Íè §ËÁÒ AND(&&) ËÃ×Í OR(||) ¡çä´ àÁ×Íè ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢´ Ç¡ÒÃá͹´ ã¹µíÒá˹ § condition µ ͧ㪠à¢Õ¹¤íÒÊѧè à» ¹ && ´Ñ§µÑÇÍ ҧµ Í仹Õé if(»ÃÐ⤠1 && »ÃÐ⤠2 ) ¹Ñ¹è ¤×Í·Ñ§é »ÃÐ⤠1 áÅÐ 2 µ ͧ໠¹¨ÃÔ§à· Ò¹Ñ¹é ¨Ö§·íÒãË ¤Ò ¼ÅÅѾ¸ à» ¹¨ÃÔ§ ઠ¹ if(à·ç¨ && à·ç¨ )

if(à·ç¨)

à

äÁ ·Òí ¤íÒÊѧè ã¹ block

à

if(à·ç¨ && ¨ÃÔ§ )

à

if(à·ç¨)

à

äÁ ·Òí ¤íÒÊѧè ã¹ block

if(¨ÃÔ§ && à·ç¨ )

à

if(à·ç¨)

à

äÁ ·Òí ¤íÒÊѧè ã¹ block

if(¨ÃÔ§ && ¨ÃÔ§ )

à

if(¨ÃÔ§)

à

·íÒ¤íÒÊѧè ã¹ block

2.8.2.2 ¡ÒõÃǨÊͺà§×è͹䢷Õèàª×èÍÁ´ Ç¡ÒÃÍÍà (OR) àÁ×Íè ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢´ Ç¡ÒÃÍÍà µ ͧà¢Õ¹¤íÒÊѧè à» ¹ || (à¤Ã×Íè §ËÁÒ || ¾ÔÁ¾ ä´ â´Â¡Òà ¡´¤Õ Shift ¤ Ò§áŠǵÒÁ´ Ǥՠ\ 㹤ÕÂÀ ÒÉÒÍѧ¡ÄÉ) ´Ñ§µÑÇÍ ҧµ Í仹Õé if(»ÃÐ⤠1 || »ÃÐ⤠2 ) ËÁÒ¤ÇÒÁÇ Ò ¶ Ò»ÃÐ⤠1 áÅÐ 2 Í ҧã´Í ҧ˹֧è à» ¹¨ÃÔ§ ËÃ×Íà» ¹¨ÃÔ§·Ñ§é ¤Ù ¨Ð·íÒãË ¤Ò ¼ÅÅѾ¸ à» ¹¨ÃÔ§ áµ ¶ Òà» ¹à·ç¨¾Ã ÍÁ¡Ñ¹·Ñ駤٠¨Ð·íÒãË ¼Å¡ÒõÃǨÊͺà§×è͹ä¢à» ¹à·ç¨ ઠ¹ if(à·ç¨ || à·ç¨ )

à

if(à·ç¨)

if(à·ç¨ || ¨ÃÔ§ )

à

if(¨ÃÔ§)

à

·íÒ¤íÒÊѧè ã¹ block

if(¨ÃÔ§ || à·ç¨ )

à

if(¨ÃÔ§)

à

·íÒ¤íÒÊѧè ã¹ block

if(¨ÃÔ§ || ¨ÃÔ§ )

à

if(¨ÃÔ§)

à

·íÒ¤íÒÊѧè ã¹ block

à

äÁ ·Òí ¤íÒÊѧè ã¹ block

µÑÇÍ ҧ·Õè 2.8.5 ¨Ò¡â»Ãá¡ÃÁµ Í仹Õé int a , b; a = 0x31; b = 0x0F;

»ÃСÒȵÑÇá»Ã ãË à» ¹áºº int ÁÕ¤Ò ã¹ª ǧ -32,768 ¶Ö§ +32,767 // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË a = 0x31 // ¡íÒ˹´¤ ÒàÃÔÁ è µ ¹ãË a = 0x0F

//


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C if(a>0x20 && b<=0xFF)//

l

55

¶ Ò a > 0x20 áÅÐ b <= 0xFF ¨Ð·íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ã¹ block

{ a = 0x77;

//

b = 0x22;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} if(b>0x1F ||

b==0x51)//

¶ Ò b > 0x1F ËÃ×Í b = 0x51 ¨Ð·íÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ã¹ block

{ a = a & 0xF0;

//

b = b & 0x0F;

//

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*—————————result——————————————*/ a = 0x70 b = 0x02 /*——————————————————————————*/

ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(a>0x20 && b<=0xFF) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ à¾ÃÒÐ a = 0x31 ÁÒ¡¡Ç Ò 0x20 ¨ÃÔ§ áÅÐ b = 0x0F ¹ ÍÂ¡Ç Ò 0xFF ¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 1

a = 0x77;

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 2

b = 0x22;

à§×Íè ¹ä¢µ ÍÁÒ if(b>0x1F || b==0x51) ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢´Ñ§¡Å ÒÇÍÕ¡¤ÃÑ§é ¾ºÇ Òà§×Íè ¹ ä¢à» ¹¨ÃÔ§ à¾ÃÒÐ b = 0x22 ÁÒ¡¡Ç Ò 0x1F ¨ÃÔ§ (à» ¹¨ÃÔ§à¾Õ§à§×Íè ¹ä¢à´ÕÂÇ¡çãË ¼ÅÅѾ¸ ¢Í§¡ÒõÃǨ Êͺ໠¹¨ÃÔ§áÅ Ç) ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒÃࢠÒÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ÀÒÂã¹ block ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3

a = a & 0xF0;

à

a = 0x77 & 0xF0

à

a = 0x70

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 4

b = b & 0x0F;

à

b = 0x22 & 0x0F

à

b = 0x02


56

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.9 ¤íÒÊѧè if-else

à» ¹¤íÒÊÑ§è µÃǨÊͺà§×Íè ¹ä¢ áŠǨ֧àÅ×Í¡¡ÃзíÒÍ ҧã´Í ҧ˹֧è ÁÕÃٻẺ´Ñ§¹Õé

if(Condition) { block1 } else { block2 }

//

·íÒã¹Ê ǹ¹Õ¶é Ò à§×Íè ¹ä¢à» ¹ ¨ÃÔ§

//

·íÒã¹Ê ǹ¹Õ¶é Ò à§×Íè ¹ä¢à» ¹ à·ç¨

¨Ò¡ÃٻẺ¶ Òâ»Ãá¡ÃÁÁÕ¡ÒõÃǨÊͺáŠǾºÇ Ò à§×è͹ä¢à» ¹¨ÃÔ§ ¡ç¨ÐࢠÒ仡ÃзíÒ¤íÒÊÑè§ ÀÒÂã¹ block1 áµ ¶Ò à» ¹à·ç¨ ¨Ðä»·íÒ¤íÒÊѧè ÀÒÂã¹ block2 á·¹ µÑÇÍ ҧ·Õè 2.9.1 int m = 2; int x = 0; if(m==1)

//

x = 0x50;

//

µÃǨÊÍºÇ Ò m = 1 ¨ÃÔ§ËÃ×ÍäÁ ¶ Ò ¨ÃÔ§

else x = 0xFF; // ¶ Ò à·ç¨ /*—————————result——————————————*/ x = 0xFF /*——————————————————————————*/

ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(m==1) ¾ºÇ Ò à» ¹à·ç¨ à¾ÃÒÐ m = 2 ¨Ö§¡ÃзíÒ¤íÒÊÑ§è ·ÕÍè ÂÙ¶ ´Ñ ¨Ò¡¤íÒÊѧè else «Ö§è ¡ç¤Í× x = 0xFF Íѹ໠¹¡ÒáíÒ˹´¤ Ңͧ x ෠ҡѺ 0xFF µÑÇÍ ҧ·Õè 2.9.2 if(z>=5) {

//

z += 15;

//

z = z%10;

//

z+= 17;

//

µÃǨÊÍºÇ Ò z >= 5 ¶ Òà» ¹¨ÃÔ§ ¨Ð¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} else {

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

z = z%4 ; // } /*—————————result——————————————*/ z = 5

ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(z>=5) ¾ºÇ Ò à§×Íè ¹ä¢à» ¹¨ÃÔ§ à¾ÃÒÐ z = 10 ÁÒ¡¡Ç Ò 5 ¨ÃÔ§ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒÃࢠÒ仡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ÀÒÂã¹ block áá


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 1 ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 2 µÑÇÍ ҧ·Õè 2.9.3 if(z<5) {

// z += 15;

//

z = z%10;

//

z+= 17;

//

l

57

z += 15; à Z = Z + 15à Z = 10 + 15 à Z = 25 z = Z%10; à z = 25%10 à z = 5 à» ¹¼ÅÅѾ¸ Ê´Ø · Ò µÃǨÊͺ z >= 5 ËÃ×ÍäÁ ¶ Òà» ¹à·ç¨ ¨ÐäÁ ·Òí ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} else {

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

z = z%4 ; // } /*—————————result——————————————*/ z = 3

ÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ if(z<5) ¾ºÇ Ò à» ¹à·ç¨ ´Ñ§¹Ñ¹é ¨Ö§à¢ Ò仡ÃзíÒ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ÀÒÂã¹ block ·ÕÍè ÂÙ¶ ´Ñ ¨Ò¡¤íÒÊѧè else ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3

z += 17; à Z = Z + 17 à Z = 10 + 17 à Z = 27

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 4

z = Z%4; à z = 27%4 à z = 3 à» ¹¼ÅÅѾ¸ Ê´Ø · ÒÂ

2.10 ¤íÒÊѧè for à» ¹¤íÒÊÑ觷íҧҹẺǹÃͺ´ Ç¡ÒõÃǨÊͺà§×èÍ¹ä¢ ÁÑ¡ÁÕÃͺ㹡Ò÷íÒ§Ò¹·Õèá¹ ¹Í¹ ÁÕÃٻẺ¢Í§¤íÒÊÑ觴ѧ¹Õé for(initialize ; condition ; incremental) { block }

â´Â·Õè initialize ¤×Í ¤ ÒàÃÔèÁµ ¹·Õè¡íÒ˹´¨Ò¡µÑÇá»Ã·Õè¹íÒÁÒà» ¹à§×è͹ä¢ã¹¡Ò÷íҧҹẺǹÃͺ condition ¤×Í à§×Íè ¹ä¢·Õãè ª 㹡ÒõÃǨÊÍºÇ Ò ¨ÐãË â»Ãá¡ÃÁࢠÒ仡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ËÃ×ÍäÁ ¶ Òà» ¹¨ÃÔ§¨ÐÁÕ¤Ò à» ¹ 1" ¨ÐÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block áµ ã¹·Ò§¡ÅѺ¡Ñ¹ ¶ Òà» ¹à·ç¨¨ÐÁÕ ¤ Òà» ¹ 0" äÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block incremental ¤×Í ¤íÒÊѧè 㹡ÒáÃзíҡѺµÑÇá»Ã·Õ¹è Òí ÁÒà» ¹à§×Íè ¹ä¢


58

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 2.10.1 int i = 0 , dat = 3; for(i=0;i<8;i++) { dat++; } /*————————————result——————————————*/ dat = 11 (0x0B) /*—————————————————————————————*/

¤ÇÒÁËÁÒ¢ͧ¤íÒÊѧè for(i=0;i<8;i++) ¤×Í ¤ ÒàÃÔÁè µ ¹ : i = 0 à» ¹¡ÒÃ㪠i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ à§×Íè ¹ä¢ : i<8 ¶ Ò i ¹ ÍÂ¡Ç Ò 8 ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block ¶ ÒÁÒ¡¡Ç Ҩм Ò¹ block ä» ¤íÒÊѧè : i++ ¶ ÒࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨ ¨ÐÁÕ¡ÒÃà¾ÔÁè ¤ Ò i ¢Ö¹é ¤Ãѧé ÅÐË¹Ö§è ¤ Ò ¹Ñ¹è ¤×Í ÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 8 ¤ÃÑ§é µÑ§é áµ i = 0 ¶Ö§ i = 7 ÁÕ¡Ò÷íÒ¤íÒÊѧè dat++; 8 ¤ÃÑ§é ·íÒãË ËÅѧ¨Ò¡Ç¹·íÒ¤íÒÊѧè for ¨¹¤ÃºÃͺ ¤ Ңͧ dat ¨Ðà» ¹ 11 (à¾ÃÒФ ÒàÃÔÁè µ ¹à· ҡѺ 3) µÑÇÍ ҧ·Õè 2.10.2 int i = 0 , dat = 3; for(i=0;i<8;i+=2) dat++; /*————————————result——————————————*/ dat = 7 (0x07) /*—————————————————————————————*/

¤ÇÒÁËÁÒ¢ͧ¤íÒÊѧè for(i=0;i<8;i+=2) ¤×Í ¤ ÒàÃÔÁè µ ¹ : i = 0 㪠i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ à§×Íè ¹ä¢ : i<8 ¶ Ò i ¹ ÍÂ¡Ç Ò 8 ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block ¶ ÒÁÒ¡¡Ç Ҩм Ò¹ block ¹Õäé » ¤íÒÊѧè : i+=2 ¶ Ò¡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨áÅ Ç ¨ÐÁÕ¡ÒÃà¾ÔÁè ¤ Ò i ¢Ö¹é ¤Ãѧé ÅÐÊͧ ¹Ñ¹è ¤×Í ÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block 4 ¤ÃÑ§é ¤×Í àÁ×Íè i = 0 , 2 , 4 áÅÐ 6 ·íÒãË Á¡Õ ÒáÃзíÒ¤íÒÊѧè dat++; 4 ¤ÃÑ§é ´Ñ§¹Ñ¹é àÁ×Íè ǹ¡ÃзíÒ¤íÒÊѧè for ¨¹¤ÃºÃͺ ¤ Ңͧ dat ¨Ð෠ҡѺ 7 (¤ ÒàÃÔÁè µ ¹¤×Í 3) µÑÇÍ ҧ·Õè 2.10.3 int i = 0 , dat = 3; for(i=10;i>=5;i—) dat++; /*————————————result——————————————*/ dat = 9 (0x09) /*—————————————————————————————*/


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

59

¤ÇÒÁËÁÒ¢ͧ¤íÒÊѧè for(i=10;i>=5;i - -) ¤×Í ¤ ÒàÃÔÁè µ ¹ : i = 10 㪠i à» ¹µÑÇá»Ã㹡ÒõÃǨÊͺà§×Íè ¹ä¢ à§×Íè ¹ä¢ : i>=5 ¶ Ò i ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 5 ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block ¶ Ò¹ ÍÂ¡Ç Ò¼ Ò¹ block ¹Õé ä» ¤íÒÊѧè : i- - ¶ Ò¡ÃзíÒ¤íÒÊѧè ã¹ block àÊÃç¨áÅ Ç ¨ÐÁÕ¡ÒÃÅ´¤ Ò i ŧ¤Ãѧé ÅÐË¹Ö§è ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 6 ¤ÃÑ§é ¤×Í àÁ×Íè i = 10 , 9 , 8 , 7 , 6 áÅÐ 5 ¨Ö§ÁÕ¡ÒáÃзíÒ¤íÒÊѧè dat++; ·Ñ§é ËÁ´ 6 ¤ÃÑ§é ¤ Ңͧ dat ¨ÐÁÕ¤Ò à» ¹ 9 (à¾ÃÒÐÁÕ¤Ò àÃÔÁè µ ¹·Õè 3)

2.11 ¤íÒÊѧè while à» ¹¤íÒÊÑ§è ·ÕÁè ¡Õ Ò÷íҧҹẺǹÃͺâ´ÂÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢ áÅШзíҧҹǹÍÂÙ¨ ¹¡Ç Ò ¼Å¡ÒõÃǨÊͺà§×Íè ¹ä¢¨Ðà» ¹à·ç¨ ÁÕû٠Ẻ´Ñ§¹Õé while(Condition) { block }

â´Â·Õè condition ¤×Í à§×Íè ¹ä¢·Õãè ª 㹡ÒõÃǨÊÍºÇ Ò¨ÐãË à¢ Ò仡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ËÃ×Í äÁ ¶ Òà» ¹¨ÃÔ§ÁÕ¤Ò à» ¹ 1" ¨ÐࢠÒ仡ÃзíÒ¤íÒÊѧè ã¹ block áµ ¶Ò à» ¹à·ç¨ÁÕ¤Ò à» ¹ 0 äÁ Á¡Õ ÒáÃзíÒ ¤íÒÊѧè ã¹ block µÑÇÍ ҧ·Õè 2.11.1 while(1) { block }

à» ¹â»Ãá¡ÃÁ·ÕÁè ¡Õ Ò÷íÒ§Ò¹ÍÂÙã ¹ block ẺäÁ è٠º à¾ÃÒÐÇ Òà§×Íè ¹ä¢¢Í§¡ÒõÃǨÊͺ໠¹ ¨ÃÔ§µÅÍ´àÇÅÒ à¹×Íè §¨Ò¡¡íÒ˹´¤ Ңͧ condition à» ¹ 1 «Ö§è ËÁÒ¶֧ à§×Íè ¹ä¢à» ¹¨ÃÔ§ áµ ¶ Òá¡ ä¢à» ¹ while(0) { block }

¨ÐãË ¼Å¡Ò÷íÒ§Ò¹·Õµè ç¢ ÒÁ¤×Í äÁ Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block à´ç´¢Ò´ à¾ÃÒÐà§×Íè ¹ä¢¢Í§ ¡ÒõÃǨÊͺ໠¹à·ç¨µÅÍ´àÇÅÒ à¹×Íè §¨Ò¡¡íÒ˹´¤ Ңͧ condition à» ¹ 0 «Ö§è ¡çËÁÒ¶֧à§×Íè ¹ä¢ à» ¹à·ç¨¹Ñ¹è àͧ


60

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

2.11.1 ¡ÒÃ㪠¤íÒÊÑè§ while µÃǨÊͺ¤ ÒºÔµ ¤íÒÊÑè§ while ÊÒÁÒö¹íÒÁÒ㪠㹡ÒÃǹµÃǨÊͺ¤ ÒºÔµ·Õèµ Í§¡ÒõÃǨ¨Ñº¡ÒÃà»ÅÕè¹á»Å§ ઠ¹ ¶ Ò¡íÒ˹´ãË i ¤×͵ÑÇá»Ã¢ ÍÁÙÅẺ¨íҹǹàµçÁ int «Ö§è ¨Ðà¡Ô´¡Ò÷íÒ§Ò¹µ Íä»ä´ ¡µç Í àÁ×Íè ¤ Ңͧ i ÁÕ¤Ò äÁ µÃ§µÒÁà§×Íè ¹ä¢·Õ¡è Òí ˹´ ´Ñ§µÑÇÍ ҧ µÑÇÍ ҧ·Õè 2.11.2 while(i);

//

Ãͨ¹¡Ç Ò i ¨Ðà» ¹ 0 ¨Ö§¨Ð·íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä»

¤íÒÊÑ觷Õè1; ¤íÒÊÑ觷Õè2;

¨Ò¡µÑÇÍ ҧ¹Õé ¶ ÒËÒ¡ i à» ¹ 1 ¹Ñ¹è ¤×Íà§×Íè ¹ä¢à» ¹¨ÃÔ§ â»Ãá¡ÃÁ¡ç¨ÐÂѧǹ·íÒ§Ò¹ÍÂÙ· ¤Õè Òí Êѧè while ¹Ñ¹é µÅÍ´ áµ ¶Ò à§×Íè ¹ä¢äÁ à» ¹¨ÃÔ§ (i à» ¹ 0 ) ¨Ö§ËÅØ´ÍÍ¡ÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä» µÑÇÍ ҧ·Õè 2.11.3 while(~i);

//

Ãͨ¹¡Ç Ò i ¨ÐäÁ à» ¹ 0 ¨Ö§¨Ð·íÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä»

¤íÒÊÑ觷Õè1; ¤íÒÊÑ觷Õè2;

¨Ò¡µÑÇÍ ҧ¹Õé ¶ ÒËÒ¡ i à» ¹ 0 ¨Ðà¡Ô´¡ÒáÅѺÅͨԡ໠¹ 1 ·íÒãË à§×Íè ¹ä¢à» ¹¨ÃÔ§ â»Ãá¡ÃÁ ¡ç¨ÐÂѧǹ·íÒ§Ò¹ÍÂÙ· ¤Õè Òí Êѧè while ¹Ñ¹é µÅÍ´ áµ ¶Ò à§×Íè ¹ä¢äÁ à» ¹¨ÃÔ§ (i à» ¹ 1 áÅ Çà¡Ô´¡ÒáÅѺÅͨԡ à» ¹ 0 ) ¨Ö§ËÅØ´ÍÍ¡ÁÒ¡ÃзíÒ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 µ Íä» µÑÇÍ ҧ·Õè 2.11.4 int count = 10 , j = 0; while(count>0)

//

¶ Ò count ÁÒ¡¡Ç Ò 0 ¨ÃÔ§ ·íÒ¤íÒÊѧè ã¹ block

{ count- -;

//

j++;

//

Å´¤ Ò count Å§Ë¹Ö§è ¤ Ò à¾ÔÁè ¤ Ò j ¢Ö¹é Ë¹Ö§è ¤ Ò

} /*————————————result——————————————*/ j = 10 (0x0A) /*—————————————————————————————*/

㪠¤Ò ¢Í§ count à» ¹µÑǵÃǨÊͺà§×Íè ¹ä¢Ç ÒÁÒ¡¡Ç Ò 0 ËÃ×ÍäÁ ¶ Ò ãª ¨ÐࢠÒ仡ÃзíÒ¤íÒ Êѧè ã¹ block áÅзء¤ÃÑ§é ·Õàè ¢ Ò仡ÃзíÒ¤íÒÊѧè ã¹ block ¢Í§¤íÒÊѧè while ¨ÐÁÕ¡ÒÃÅ´¤ ÒµÑÇá»Ã count ŧ 1 ¤ Ò áÅÐà¾ÔÁè ¤ Ò j ¢Ö¹é 1 ¤ ÒàÊÁÍ ã¹â»Ãá¡ÃÁ¡íÒ˹´ãË Á¡Õ ÒáÃзíÒ¤íÒÊѧè ã¹ block ·Ñ§é ËÁ´ 10 ¤ÃÑ§é ¤×ÍàÁ×Íè ¤ ҢͧµÑÇá»Ã count = 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 áÅÐ 1


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

61

µÑÇÍ ҧ·Õè 2.11.5 int test = ‘a’, m = 0; while(test == ‘a’) { test = ‘b’;

//

m = 0xFF;

//

¤íÒÊÑ§è ·Õè 1 ¤íÒÊÑ§è ·Õè 2

} while(test == ‘b’) { test = ‘a’;

//

m = 0xAA;

//

¤íÒÊÑ§è ·Õè 3 ¤íÒÊÑ§è ·Õè 4

} /*————————————result——————————————*/ test = ‘a’ (0x61) m = 0xAA /*—————————————————————————————*/

ÁÕ¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹¢Í§µÑÇá»Ã test = a àÁ×Íè â»Ãá¡ÃÁ·íÒ§Ò¹¨Ð¾º¤íÒÊÑ§è µÃǨÊͺà§×Íè ¹ ä¢ while(test== a ) áÅоºÇ Òà§×Íè ¹ä¢à» ¹¨ÃÔ§ ¨Ö§à¢ Ò仡ÃзíÒ¤íÒÊѧè ã¹ block ¤×Í ¤íÒÊÑ§è ·Õè 1 áÅÐ 2 ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 1

test = b ;

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 2

m = 0xFF;

ã¹Ãͺµ ÍÁÒàÁ×Íè ¹íÒµÑÇá»Ã test 仵ÃǨÊͺà§×Íè ¹ä¢ while(test== a ) ÍÕ¡¤ÃÑ§é ¾ºÇ Ò äÁ à» ¹ ¨ÃÔ§ÍÕ¡µ Íä» à¹×Íè §¨Ò¡ã¹¢³Ð¹Õ¤é Ò ¢Í§µÑÇá»Ã Test ෠ҡѺ b «Ö§è à» ¹¼ÅÁÒ¨Ò¡¡ÒáÃзíÒ¤íÒÊÑ§è ·Õè 1 ¨Ö§ËÅØ´ÍÍ¡¨Ò¡ÅÙ»¡Ò÷íÒ§Ò¹áá ¨Ò¡¹Ñ¹é ¨Ð仾º¡Ñº¤íÒÊÑ§è µÃǨÊͺà§×Íè ¹ä¢ while(test== b ) «Ö§è ¼Å¡ÒõÃǨÊͺ¾ºÇ Ò à§×Íè ¹ ä¢à» ¹¨ÃÔ§ ¨Ö§à¢ Ò仡ÃзíÒ¤íÒÊѧè ã¹ block ¤×Í ¤íÒÊÑ§è ·Õè 3 áÅÐ 4 ¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 3

test = a ;

¼Å¡Ò÷íÒ§Ò¹¤íÒÊÑ§è ·Õè 4

m = 0xAA;


62

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

63

º··Õè 3

¡ÒÃàÃÕ¡㪠áÅÐÊà ҧ¿ §¡ ª¹Ñè à¾×Íè à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ«Õã¹ Interactive C ã¹ÀÒÉÒ«Õ¹¹Ñé ¨ÐÁÕ¿§ ¡ ª¹Ñè ËÅÑ¡·Õàè ÃÕÂ¡Ç Ò main â»Ãá¡ÃÁËÃ×ͺҧ¤ÃÑé§àÃÕÂ¡Ç Ò Ê Ç¹â»Ãá¡ÃÁ ËÅÑ¡ ¨Ðà» ¹Ê ǹ·Õâè »Ãá¡ÃÁ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹äÅ àÃÕ§ä»áÅÐÍÒ¨ÁÕ¡ÒáÃÐⴴ仡ÃзíÒ¤íÒÊѧè ÀÒ 㹿 §¡ ªÑè¹Í×è¹æ ·ÕèÁÕ¡ÒûÃСÒÈäÇ ãË ÃÙ ¨Ñ¡ÀÒÂã¹µÑÇâ»Ãá¡ÃÁàÁ×èÍÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹¹Ñé¹æ ÀÒÂã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡¹Õàé ͧ ËÅѧ¨Ò¡¡ÃзíÒ¤íÒÊѧè ÀÒÂ㹿 §¡ ª¹Ñè ·Õ¶è ¡Ù àÃÕ¡àÃÕºà ÍÂáÅ Ç ¡ç¨Ð ¡ÅѺࢠÒÁÒã¹Ê ǹ¢Í§â»Ãá¡ÃÁËÅÑ¡·Õ·è Òí §Ò¹¤ Ò§ÍÂÙË Ã×ͤíÒÊÑ§è ·ÕÍè ÂÙ¶ ´Ñ ä» ¹Í¡¨Ò¡¹ÕÀé ÒÂ㹿 §¡ ª¹Ñè àͧ¡ç处 ÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè Í×¹è æ ä´ ´Ç  ´Ñ§¹Ñ¹é ¡Ò÷íÒ§Ò¹¡Ñº¿ §¡ ª¹Ñè ¨Ö§à» ¹Ê ǹ·ÕÊè Òí ¤Ñ­ÁÒ¡ 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ«Õ â´Â੾ÒÐÍ ҧÂÔ§è ¡Ñº Interactive C

¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ÁÕÃٻẺ´Ñ§¹Õé return_type {

function_name(parameter1, parameter2, ...) command_list 1; .................... .................... command_list n;

}

â´Â·Õè return_type ¤×Í ª¹Ô´¢Í§¢ ÍÁÙÅ·ÕèÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ â´ÂÀÒÂ㹿 §¡ ªÑè¹·ÕèàÃÕ¡㪠§Ò¹¨Ð㪠¤Òí Êѧè return(value) à¾×Íè Ê §¼ÅÅѾ¸ ÍÍ¡ÁÒ «Ö§è ª¹Ô´¢Í§¢ ÍÁÙÅ value ·ÕÊè § ÍÍ¡ÁÒ¤ÇÃà» ¹ª¹Ô´ à´ÕÂǡѺ return_type à¾×Íè » ͧ¡Ñ¹¤ÇÒÁ¼Ô´¾ÅÒ´·ÕÍè Ò¨à¡Ô´¨Ò¡¡ÒÃÃѺ¢ ÍÁÙÅ ÊíÒËÃѺ¿ §¡ ª¹Ñè ·Õäè Á Á¡Õ Òà ¤×¹¤ Ò ·Õµè Òí á˹ § return_type ¨Ðµ ͧ»ÃСÒÈà» ¹ void (·Õµè Òí á˹ §¢Í§ value ¹Ñ¹é ÍҨ໠¹¤ Ò¤§·Õè , µÑÇá»Ã ËÃ×ͼÅÅѾ¸ ¨Ò¡¡Ò÷íÒ¤íÒÊÑè§ã´æ¡çä´ )


64

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

function_name ¤×Í ª×Íè ¢Í§¿ §¡ ª¹Ñè parameter ¤×Í Ê Ç¹·ÕÁè ¡Õ ÒûÃСÒȪ¹Ô´¢ ÍÁÙÅáÅЪ×Íè ¢Í§µÑÇá»Ã·Õ¹è Òí ÁÒÃѺ¤ Ò·ÕÊè § ¼ Ò¹ãË ¡Ñº¿ §¡ ª¹Ñè ÍÒ¨¨ÐÁÕ 1 µÑÇ ËÃ×ÍËÅÒµÑÇ ËÃ×ÍÍÒ¨äÁ ÁàÕ Å¡çä´ ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒÃ㪠§Ò¹¢Í§¿ §¡ ª¹Ñè ¹Ñ¹é æ ¶ ÒËÒ¡¿ §¡ ª¹Ñè äÁ ÁÕ parameter ÃѺ¤ Ò ÍÒ¨»ÃСÒÈà» ¹ void ËÃ×ÍàÇ ¹Ç Ò§äÁ »ÃСÒÈ¡çä´ command_list 1... command_list n ¤×Í ¤íÒÊÑ§è µ Ò§æ ·ÕÁè ÍÕ ÂÙã ¹µÑÇ¿ §¡ ª¹Ñè «Ö§è àÁ×Íè ¨º 1 ¤íÒÊÑ§è ¨Ðµ ͧ» ´· Ò´ ÇÂà¤Ã×Íè §ËÁÒ ; àÊÁÍ ¨Ò¡µÑÇÍ ҧÃٻẺ ºÃ÷Ѵáá·Õè㪠»ÃСÒÈ¿ §¡ ªÑè¹¹Ñé¹àÃÕÂ¡Ç Ò Ê Ç¹ËÑÇËÃ×Í header Ê Ç¹ ¡ÅØ Á¢Í§¤íÒÊÑ觷Õè¶Ñ´Å§ÁÒàÃÕÂ¡Ç Ò Ê Ç¹ÅíÒµÑÇËÃ×Í body ¢Í§¿ §¡ ª¹Ñè ÊíÒËÃѺ¿ §¡ ª¹Ñè ·ÕÁè ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ¹¹Ñé ¨ÐÁÕ¤Òí Êѧè return ·Õãè ª ÊÒí ËÃÑºÊ §¤ Ò¼ÅÅѾ¸ ËÅѧ¨Ò¡ ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑ蹴ѧ¡Å ÒÇÁÕÃٻẺ´Ñ§¹Õé return(data);

â´Â·Õè data ¤×Í ¢ ÍÁÙÅ·Õ¤è ¹× ¤ Ò¼ÅÅѾ¸ ¤ÇÃÁÕª¹Ô´¢ ÍÁÙÅẺà´ÕÂǡѺ return_type ¢Í§¿ §¡ ª¹Ñè ÁÔઠ¹¹Ñé¹ÍÒ¨·íÒãË à¡Ô´¢ ͼԴ¾ÅÒ´·Õèà¡Ô´¨Ò¡ª¹Ô´¢ ÍÁÙÅä´

¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè 㹡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹·Õèä´ ¶Ù¡Êà ҧ¢Öé¹ËÃ×ÍÁÕ¡ÒûÃСÒÈäÇ àÃÕºà ÍÂáÅ ÇÊÒÁÒöàÃÕ¡ ãª ä´ ÀÒÂ㹿 §¡ ª¹Ñè main ËÃ×ÍÀÒÂ㹿 §¡ ª¹Ñè Í×¹è æµÒÁ¤ÇÒÁàËÁÒÐÊÁ ¡ÒÃàÃÕ¡㪠·Òí ä´ §Ò Âæ à¾Õ§ àÃÕ¡ª×Íè ¢Í§¿ §¡ ª¹Ñè ¹Ñ¹é æ áÅÐãÊ ¤Ò ¢ ÍÁÙÅà¾×Íè Ê §ãË ¡ºÑ ¾ÒÃÒÁÔàµÍà Í ҧàËÁÒÐÊÁ¡Ñºª¹Ô´¢ ÍÁÙÅ áÅÐ ¶Ù¡µ ͧµÒÁÅíҴѺ¢Í§¾ÒÃÒÁÔàµÍà ·ÁÕè ¡Õ ÒûÃСÒÈäÇ ´Ç  ¨ÐàÃÕ¡¢ ÍÁÙÅ·ÕÊè § ¼ Ò¹ä»ãË ¾ÒÃÒÁÔàµÍà ¹ÇÕé Ò ÍСÔÇàÁ¹µ (agument)

ÃٻẺ¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè function_name(agument1, agument2,...)

â´Â·Õè function_name ¤×Í ª×èͧ͢¿ §¡ ªÑè¹·Õèµ Í§ÁÕ¡ÒûÃСÒÈäÇ ¡ ͹˹ Ò¹ÕéáÅ Ç agument ¤×Í ¤×ͤ Ò¢ ÍÁÙÅ·ÕÊè § ¼ Ò¹ä»ãË ¡ºÑ µÑÇá»Ã parameter ã¹¢³ÐàÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Ñ¹é æ â´ÂÁռŵ ÍÅíҴѺ㹡ÒÃãÊ ¤ Ò´ Ç ¶ Ò¿ §¡ ªÑè¹·ÕèàÃÕ¡㪠äÁ ÁÕ¾ÒÃÒÁÔàµÍà ¡çäÁ µ ͧãÊ ¤ ÒÍСÔÇàÁ¹µ ÊíÒËÃѺ¿ §¡ ªÑè¹·ÕèÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ àÁ×èÍÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¨Ð¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡ÒûÃÐÁÇÅ ¼ÅÀÒÂ㹿 §¡ ª¹Ñè «Ö§è ª¹Ô´¢ ÍÁÙÅ·Õ¤è ¹× ¤ ÒÍÍ¡Áҹѹé ÊÒÁÒö´Ùä´ ¨Ò¡Ê ǹ return_type ¢Í§¡ÒûÃСÒÈ ¿ §¡ ªÑè¹ ã¹ºÒ§¤ÃÑé§ÍÒ¨ÁÕ¤ÇÒÁ¨íÒà» ¹µ ͧ㪠µÑÇá»ÃÁÒÃѺ¤ Ò¼ÅÅѾ¸ ¹Ñé¹ «Ö觵ÑÇá»Ã´Ñ§¡Å ÒǤÇÃÁÕ ª¹Ô´¢ ÍÁÙÅẺà´ÕÂǡѺ return_type ¢Í§¿ §¡ ªÑè¹ ÁÔઠ¹¹Ñé¹ÍÒ¨à¡Ô´¢ ͼԴ¾ÅÒ´ä´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

65

µÑÇÍ ҧ·Õè 3.1 »ÃСÒÈ¿ §¡ ªÑè¹ void sound(void) { beep();

//

sleep(1.0);

//

beep();

//

¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§

}

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ª×Íè sound ·Õäè Á Á¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ áÅÐäÁ Á¡Õ Òà ÃѺ¤ ÒÊ §¼ Ò¹¾ÒÃÒÁÔàµÍà ã´æ «Ö§è ÀÒÂ㹿 §¡ ª¹Ñè ¨Ðà» ¹¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ (beep) áÅ Ç˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ áÅ ÇàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ÍÕ¡¤Ãѧé ˹֧è 㹡óÕàÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ÊÒÁÒö·íÒä´ ´§Ñ ¹Õé void main(void) { ................

//

sound();

//

...............

//

¤íÒÊѧè àÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè sound ¤íÒÊѧè

}

µÑÇÍ ҧ·Õè 3.2 »ÃСÒÈ¿ §¡ ªÑè¹ void sound(float delay) { beep();

//

sleep(delay);

//

beep();

//

¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ ¿ §¡ ª¹Ñè ˹ ǧàÇÅÒµÒÁ¤ Ò¢ ÍÁÙÅ delay ·ÕÃè ºÑ à¢ ÒÁÒ ¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§

}

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ª×Íè sound ·Õäè Á Á¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ áÅÐÁÕ¡ÒÃÃѺ ¤ ÒÊ §¼ Ò¹¾ÒÃÒÁÔàµÍà ·ªÕè Í×è delay «Ö§è ÀÒÂ㹿 §¡ ª¹Ñè ¨Ðà» ¹¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ 1 beep áÅ Ç˹ ǧàÇÅÒµÒÁ¤ Ò¢ ÍÁÙŢͧ¾ÒÃÒÁÔàµÍà delay ·ÕÃè ºÑ ÁÒã¹Ë¹ ÇÂÇÔ¹Ò·Õ áÅ ÇàÃÕ¡¿ §¡ ª¹Ñè ¡íÒà¹Ô´ÊÑ­­Ò³àÊÕ§ 1 beep ÍÕ¡¤Ãѧé ˹֧è 㹡óÕàÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ÊÒÁÒö·íÒä´ ´§Ñ ¹Õé


66

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

void main(void) { ..............

//

sound(1.5);

//

..............

//

¤íÒÊѧè àÃÕ¡¿ §¡ ª¹Ñè sound áÅÐ˹ ǧàÇÅÒÃÐËÇ Ò§àÊÕ§´Ñ§ 1.5 ÇÔ¹Ò·Õ ¤íÒÊѧè

}

µÑÇÍ ҧ·Õè 3.3 »ÃСÒÈ¿ §¡ ªÑè¹ float sum(float x,float y) { float z;

//

z = x+y;

//

return(z);

//

»ÃСÒȵÑÇá»Ãà¡çº¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òúǡ¡Ñ¹ à¡çº¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òúǡ¡Ñ¹¢Í§ x áÅÐ y ¤×¹¤ Ò¼ÅÅѾ¸ ¢Í§ z ¨Ò¡¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè ´ ǤíÒÊѧè return

}

¨Ò¡µÑÇÍ ҧ໠¹¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ª×Íè sum ·ÕÁè ¡Õ Òä׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒ¢ ÍÁÙŪ¹Ô´ float áÅÐÁÕ¡ÒÃÃѺ¤ ÒÊ §¼ Ò¹¾ÒÃÒÁÔàµÍà ¤Í× x áÅÐ y «Ö§è ¿ §¡ ª¹Ñè sum ¨Ð¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡Òúǡ¡Ñ¹ÃÐ ËÇ Ò§ x áÅÐ y ÍÍ¡ÁÒ´ ǤíÒÊѧè return(z); ¹Ñ¹è àͧ 㹡óÕàÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè main ÊÒÁÒö·íÒä´ ´§Ñ ¹Õé void main(void) { float result;

// //

................

//

result = sum(14.0,3.0);

// // // //

...............

//

»ÃСÒȵÑÇá»Ã result à¾×Íè ä»ÃѺ¤ Ò¨Ò¡¿ §¡ ª¹Ñè sum ¤íÒÊѧè àÃÕ¡㪠¿§ ¡ ª¹Ñè sum â´Â¡íÒ˹´¤ ÒÍСÔÇàÁ¹µ ¡íÒ˹´¤ Ò x = 14 ,y = 3 ·íÒãË result ෠ҡѺ 17 ËÅѧ¨Ò¡àÃÕ¡㪠¿§ ¡ ª¹Ñè sum ¤íÒÊѧè

}

µÑÇÍ ҧ·Õè 3.4 Êà ҧ¿ §¡ ªÑè¹àŢ¡¡íÒÅѧã´æ à¾×èÍËÒ¤ Ò¼ÅÅѾ¸ ¢Í§àŢ¡¡íÒÅѧ â´ÂµÑ駪×èÍ¿ §¡ ªÑè¹à» ¹ power ãË Á¡Õ ÒÃÃѺ¤ Ò¾ÒÃÒÁÔàµÍà 2 µÑÇ µÑÇáá¤×ͤ Ò°Ò¹ x áÅоÒÃÒÁÔàµÍà µÇÑ ·ÕÊè ͧ¤×ͤ Ò¡íÒÅѧ y


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C void main()

//

¿ §¡ ª¹Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ

//

áÊ´§¤ Ò¼ÅÅѾ¸ ·âÕè Á´ÙÅ LCD

l

67

{ printf(“%f\n”,power(2.0,4.0)); } float power(float x,float y)

¡íÒ˹´¿ §¡ ª¹Ñè power ·ÕÁè ¡Õ ÒÃÃѺ¤ Ò¢ ÍÁÙÅ // à» ¹ª¹Ô´ float áÅФ׹¤ Òà» ¹ float ´ Ç //

{ return(exp(y*log(x)));

// //

ÃѺ¤ Ò°Ò¹ x áÅФ Ò¡íÒÅѧ y ÁÒËÒ¤ Ò¼ÅÅѾ¸ áŠǤ׹¤ Ò¼ÅÅѾ¸

}

¨Ò¡µÑÇÍ ҧ໠¹¡ÒÃÊà ҧ¿ §¡ ª¹Ñè ª×Íè power à¾×Íè 㪠¤Òí ¹Ç³ËÒ¤ ҢͧàŢ¡¡íÒÅѧã´æ â´Â ã¹â»Ãá¡ÃÁ Interactive C ¨ÐÂѧäÁ ÁÁÕ ¿Õ § ¡ ª¹Ñè Ê Ç¹¹ÕÁé ÒãË áµ ã¹µÑÇÍ ҧ¹Õäé ´ ¹Òí àʹÍÇÔ¸¡Õ ÒûÃÐÂØ¡µ Êà ҧ¨Ò¡¿ §¡ ª¹Ñè ·Õãè ª ¤Òí ¹Ç³·Ò§¤³ÔµÈÒʵà ·Õè Interactive C ÁÕÁÒãË «§Öè ä´ á¡ ¿ §¡ ª¹Ñè exp 㪠ÊÒí ËÃѺËÒ¤ ÒàÅ¢°Ò¹ e ¡¡íÒÅѧã´æ ( â´Â e ÁÕ¤Ò 2.718 â´Â»ÃÐÁÒ³) ¿ §¡ ª¹Ñè log 㪠ÊÒí ËÃѺËÒÅÍ¡ÒÃÔ¸ÁÖè °Ò¹¸ÃÃÁªÒµÔ¢Í§µÑÇàÅ¢ã´æ ËÃ×Í ln ¹Ñ¹è àͧ ¨Ò¡¤ÇÒÁÃÙ· Ò§¤³ÔµÈÒʵà ·ÇÕè Ò 1) ln xy = y.ln x 2) eln x = x ´Ñ§¹Ñ¹é xy = ey.ln x áÅйíÒÁÒà¢Õ¹໠¹¿ §¡ ªÑè¹ã¹¡Òäíҹdz¤ Ò¼ÅÅѾ¸ ä´ à» ¹ exp(y*log(x)) à ¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡ xy ´Ñ§¹Ñ¹é ¼ÅÅѾ¸ ¨Ò¡â»Ãá¡ÃÁ¹Õàé Á×Íè ¹íÒÁÒÃѹã¹â»Ãá¡ÃÁ Interactive C ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§ ¢ ͤÇÒÁ 16. «Ö§è ¡ç¤Í× ¼ÅÅѾ¸ ¢Í§ 24 ¹Ñ¹è àͧ áµ ¢Í ¤ÇÃÃÐÇѧ㹡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õ¤é Í× ã¹¡Òû ͹ ¤ Ò¾ÒÃÒÁÔàµÍà ¢Í§¤ Ò°Ò¹áÅФ Ò¡íÒÅѧ¹Ñ¹é ¨Ðµ ͧ» ͹¤ Òà» ¹¤ Ò¨íҹǹ¨ÃԧẺ float ·Ñ§é ¤Ù ´Ñ§¹Ñ¹é ã¹ â»Ãá¡ÃÁ¨Ö§» ͹¤ Òà» ¹ 2.0 áÅÐ 4.0 µÒÁÅíҴѺ¹Ñ¹è àͧ


68

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 3.5 Êà ҧ¿ §¡ ª¹Ñè sum áÅÐ mul int result1 = 0; // µÑÇá»Ã result2 à¡çº¤ Ò¢ ÍÁÙÅ int int result2 = 0; // µÑÇá»Ã result2 à¡çº¤ Ò¢ ÍÁÙÅ int float result3 = 0.0; // µÑÇá»Ã result3 à¡çº¤ Ò¢ ÍÁÙÅ float float result4 = 0.0; // µÑÇá»Ã result4 à¡çº¤ Ò¢ ÍÁÙÅ float void main(void) // ¿ §¡ ª¹ Ñè ËÅÑ¡¢Í§â»Ãá¡ÃÁ {

ãË ¤Ò ¼ÅÅѾ¸ àËÁ×͹ 18+7=25 sum(4,9); // ãË ¼ÅÅѾ¸ àËÁ×͹ (12+4)+(4+9)=29

result1 = sum(18,7); //

result2 = sum(12,4) + result3 = mul(10.0,50.0) + mul(4.0,5.0);

ãË ¼ÅÅѾ¸ àËÁ×͹ (10*50)+(4*5)=520

// result4 = mul(12.4,2.6) + (float)sum(8,7); //

ãË ¼ÅÅѾ¸ àËÁ×͹ (12.4*2.6)+(8*7)=47.24

//

¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òúǡ¡Ñ¹ÃÐËÇ Ò§ a áÅÐ b

} int sum(int a , int b) { return(a+b);

} float mul(float x , float y) { return(x*y);

//

¤×¹¤ Ò¼ÅÅѾ¸ ¨Ò¡¡Òäٳ¡Ñ¹ÃÐËÇ Ò§ x áÅÐ y

}

äźÃÒÃÕ(Library) äźÃÒÃÕ ¤×Í ä¿Å ·ÕèÃǺÃÇÁËÃ×ͺÃèؿ §¡ ªÑè¹äÇ ã¹µÑÇà¾×èÍ·íÒ¡ÒèѴËÁÇ´ËÁÙ ¿ §¡ ªÑè¹·ÕèÁÕ ÅѡɳСÒÃ㪠§Ò¹¡ÅØ ÁËÃ×Í»ÃÐàÀ·à´ÕÂǡѹ¶Ù¡¨Ñ´à¡çºäÇ ã¹·Õèà´ÕÂǡѹ Ê Ç¹ãË­ áÅ ÇÁÑ¡¨ÐÁÕ¡ÒõÑé§ ª×Íè ä¿Å äźÃÒÃÕ¹ãÕé Ë ÊÍ´¤Å ͧ¡Ñº¡ÅØÁ ¢Í§¿ §¡ ª¹Ñè ËÃ×Í¡ÒÃ㪠§Ò¹ à¾×Íè ãË §Ò µ Í¡ÒÃàÃÕ¡㪠§Ò¹ã¹ ¤ÃÑ駵 Íä» ´Ñ§¹Ñ¹é ¿ §¡ ª¹Ñè ¡ÅØÁ à´ÕÂǡѹ·ÕÁè ¡Ñ àÃÕ¡㪠§Ò¹º ÍÂæ 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤ÇùíÒÁÒÊà ҧ໠¹ äźÃÒÃÕáÅШѴà¡çºäÇ àÁ×è͵ ͧ¡ÒÃ㪠§Ò¹¡çà¾Õ§·íÒ¡ÒûÃСÒÈâ»Ãâµä·» (prototype) ¢Í§ª×èÍ äźÃÒÃÕä¿Å ·ÊÕè à ҧäÇ ¡Í ¹Ë¹ Ò¹Õé ËÅѧ¨Ò¡¹Ñ¹é ¨Ð·íÒãË ¼¾Ù ² Ñ ¹ÒÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ·Õºè ÃèØÍÂÙ ÀÒÂã¹äźÃÒÃÕä¿Å ´Ñ§¡Å ÒÇä´ (¢Ñ鹵͹àËÅ Ò¹Õé¨Ð¶Ù¡àª×èÍÁâ§â´Ââ»Ãá¡ÃÁàª×èÍÁâ§ËÃ×ÍÅÔ§à¡Íà (linker) ÀÒÂã¹ Interactive C ÍÕ¡·Í´Ë¹Ö§è )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

69

¡ÒÃÊà ҧäźÃÒÃÕ ¡ÒÃÊà ҧäźÃÒÃÕä¿Å ã¹ Interactive C ¡ç¨ÐàËÁ×͹¡Ñº¡ÒÃÊà ҧä¿Å ¹ÒÁÊ¡ØÅ .ic µÒÁ»¡µÔ µ Ò§¡Ñ¹µÃ§·ÕÇè Ò äźÃÒÃÕä¿Å ¨ÐäÁ ÁâÕ »Ãá¡ÃÁËÅÑ¡ (¿ §¡ ª¹Ñè main) ¨ÐÁÕáµ µÇÑ ¿ §¡ ª¹Ñè µ Ò§æ·Õµè Í §¡Òà ºÃèØŧäźÃÒÃÕä¿Å ÊÁÁصÇÔ Ò µ ͧ¡ÒÃÊà ҧäźÃÒÃÕä¿Å ªÍ×è func_math â´Â·ÕÀè ÒÂ㹨кÃèؿ§ ¡ ª¹Ñè sum áÅÐ mul (¨Ò¡µÑÇÍ ҧ·Õè 3.5) ¨Ð·íÒä´ ´§Ñ ¹Õé 1. ËÅѧ¨Ò¡·íÒ¡ÒõԴµ ͡Ѻâ»Ãá¡ÃÁ Interactive C àÃÕºà ÍÂáÅ Ç ãË ·íÒ¡ÒÃÊà ҧä¿Å ãËÁ â´Â¤ÅÔ¡·Õ»è ÁØ New à¾×Íè à» ´Ë¹ Òµ Ò§ãËÁ 2. ¾ÔÁ¾ ¿§ ¡ ª¹Ñè sum áÅÐ mul ŧã¹Ë¹ Òµ Ò§¢Í§ä¿Å ãËÁ ´§Ñ ¹Õé int sum(int a , int b) { return(a+b); } float mul(float x , float y) { return(x*y); }

ËÅѧ¨Ò¡¹Ñ鹨Ѵà¡çºä¿Å äÇ ã¹â¿Åà´Íà ·Õè㪠¾Ñ²¹Òâ»Ãá¡ÃÁ â´ÂµÑ駪×èÍà» ¹ func_math «Ö§è ¼ÅÅѾ¸ ¨Ðä´ ä¿Å ªÍ×è func_math.ic ´Ñ§¹Ñ¹é 㹤ÃÑ§é µ Í仼پ ² Ñ ¹Ò¡çÊÒÁÒöàÃÕ¡㪠§Ò¹ func_math.ic ã¹ÃٻẺäźÃÒÃÕä¿Å ä´ áÅ Ç

¡ÒÃàÃÕ¡㪠äźÃÒÃÕ ËÅѧ¨Ò¡·Õè¼Ù ¾Ñ²¹Òä´ Êà ҧäźÃÒÃÕä¿Å áÅШѴà¡çºàÃÕºà ÍÂáÅ Ç(¤ÇèѴà¡çºäÇ ·Õèâ¿Åà´Íà à´ÕÂǡѹ¡Ñºä¿Å â»Ãá¡ÃÁ·ÕèàÃÕ¡㪠§Ò¹äźÃÒÃÕ) ¼Ù ¾Ñ²¹ÒÊÒÁÒöàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹·ÕèºÃèØÍÂÙ ÀÒ ã¹äźÃÒÃÕä¿Å ã´æä´ ¨Ðµ ͧÁÕ¡ÒûÃСÒÈäÇ ã¹Ê ǹáá¢Í§â»Ãá¡ÃÁ´ ÇÂä´àÃ硵տ #use ´Ñ§¹Õé #use library_filename

â´Â·Õè library_filename ¤×Í ª×Íè äźÃÒÃÕä¿Å ··Õè Òí ¡ÒûÃСÒÈ àª ¹ #use sound.ic

»ÃСÒÃãË â»Ãá¡ÃÁÃÙ ¨Ñ¡¿ §¡ ªÑè¹ÀÒÂã¹äźÃÒÃÕä¿Å ·Õèª×èÍ sound


70

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡ÒûÃСÒÈâ´Â㪠ä´àáµÕ¿ #use à¾×Íè ãË Interactive C ÃÙ¨ ¡Ñ ¡Ñº¿ §¡ ª¹Ñè ÀÒÂã¹äźÃÒÃÕä¿Å àÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¿ §¡ ª¹Ñè ·ÕÍè ÂÙÀ ÒÂã¹äźÃÒÃÕä¿Å ¹¹Ñé æ ¡ç¨Ð·íÒãË Á¡Õ ÒÃá»Å¤ÇÒÁËÁÒÂáÅÐàª×Íè Á âÂ§ä´ ¶Ù¡µ ͧ µ Í仨Ðà» ¹¡Ò÷´ÊͺàÃÕ¡㪠§Ò¹¨Ò¡äźÃÒÃÕä¿Å func_math ·Õè¶Ù¡Êà ҧáÅШѴà¡çºäÇ ¡ ͹˹ Ò¹ÕéáÅ Ç ¨Ð·íÒä´ ´Ñ§¹Õé 1. ËÅѧ¨Ò¡µÔ´µ ͡Ѻâ»Ãá¡ÃÁ Interactive C àÃÕºà ÍÂáÅ Ç ãË Êà ҧä¿Å ãËÁ â´Â¤ÅÔ¡·Õ»è ÁØ New à¾×Íè à» ´Ë¹ Òµ Ò§ãËÁ 2. ¾ÔÁ¾ â»Ãá¡ÃÁŧã¹Ë¹ Òµ Ò§¢Í§ä¿Å ãËÁ ´Ñ§¹Õé #use func_math.ic void main(void) { printf(“Return %f\n”,mul(7.3,12.0)); }

3. ´Òǹ âËÅ´â»Ãá¡ÃÁ 4. ¡´»ØÁ Run main à¾×Íè ´Ù¼ÅÅѾ¸ ·ËÕè ¹ Ò¨ÍáÊ´§¼Å¢Í§ºÍà ´ AX-11 ¨Ð»ÃÒ¡®¢ ͤÇÒÁ Return

87.60001

¤íÒ͸ԺÒ ã¹Ê ǹáá¢Í§â»Ãá¡ÃÁä´ ÁÕ¡ÒûÃСÒÈàÃÕ¡㪠§Ò¹¿ §¡ ªÑè¹ã¹äźÃÒÃÕ func_math.ic «Ö§è ã¹â»Ãá¡ÃÁàÃÕ¡㪠¿§ ¡ ª¹Ñè mul ËÅѧ¨Ò¡¹Ñ¹é ã¹ main â»Ãá¡ÃÁ¨ÐÁÕ¡ÒÃàÃÕ¡㪠§Ò¹ ¿ §¡ ª¹Ñè mul à¾×Íè ãË ä´ ¤Ò ¼ÅÅѾ¸ ¨Ò¡¡Òäٳ¡Ñ¹¢Í§àÅ¢ 7.3 ¡Ñº 12.0


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

71

º··Õè 4

¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè ã¹â»Ãá¡ÃÁ Interactive C áÅСÒ÷´Åͧ à¤Ã×èͧÁ×Í·Õèª ÇÂãË ¡ÒÃàÃÕ¹ÃÙ áÅÐà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ«Õà¾×èͤǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ·Òí ä´ §Ò ÂáÅÐÊдǡÁÒ¡¢Ö¹é ¡ç¤Í× ¿ §¡ ª¹Ñè (function) «Ö§è â´Â»¡µÔ«Í¿µ áÇà ¨ÐàµÃÕÂÁ ÁÒãË ãª Ê Ç¹Ë¹Öè§ áÅм٠à¢Õ¹â»Ãá¡ÃÁÊÒÁÒöà¢Õ¹à¾ÔèÁä´ àͧ ã¹ Interactive C ¡çઠ¹¡Ñ¹ÁÕ¡Òà àµÃÕÂÁ¿ §¡ ª¹Ñè äÇ ãË ãª §Ò¹àÃÕºà ÍÂáÅ Ç áÅÐà¹×Íè §¨Ò¡ Interactive C à» ¹«Í¿µ áÇà ÊÒí ËÃѺ¡ÒÃàÃÕ¹ ÃÙ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà «Öè§ÃͧÃѺµÑé§áµ ¼Ù àÃÔèÁµ ¹ ¨Ö§ÁÕ¡ÒÃàµÃÕÂÁ¿ §¡ ªÑè¹äÇ ãË §Ò¹ÁÒ¡à» ¹¾ÔàÈÉ ¨¹ÍÒ¨¡Å ÒÇä´ ¤Ãͺ¤ÅØÁ ¤Ãº¶ ǹÃͺ´ Ò¹ ¨¹á·ºäÁ ¨íÒà» ¹µ ͧÊà ҧà¾ÔèÁ 㹺·¹Õé¨Ðŧä»ã¹ÃÒÂÅÐàÍÕ´¢Í§¡Ò÷íÒ§Ò¹ ¡ÒÃàÃÕ¡㪠§Ò¹ã¹áµ Åп §¡ ªÑè¹ ÃÇÁ件֧ÁÕ ¡Ò÷´Åͧà¾×è Í ½ ¡ 㪠¿ § ¡ ªÑè ¹ ¹Ñé ¹ æ ´ Ç Â â´Â¡Ò÷í Ò §Ò¹¢Í§áµ Šп § ¡ ªÑè ¹ ã¹ Interactive C ¨Ðµ ͧÊÑÁ¾Ñ¹¸ ¡ºÑ ÎÒà ´áÇà ·ãÕè ª 㹡ÒÃàÃÕ¹ÃÙ´ Ç Â «Ö§è ¡ç¤Í× ºÍà ´ AX-11 (68HC11 microcontroller Activity Board) ´Ñ§¹Ñ¹é ¨Ö§µ ͧàµÃÕÂÁºÍà ´áÅÐà¤Ã×Íè §Á×Í»ÃСͺ·Õ¨è Òí à» ¹ãË ¾Ã ÍÁàÁ×Íè µ ͧ¡Ò÷´Åͧ â»Ãá¡ÃÁ

ÍØ»¡Ã³ ·Õè㪠㹡Ò÷´Åͧ·Ñé§ËÁ´ã¹º·¹Õé : ºÍà ´ AX-11 ¾Ã ÍÁÊÒµ ÍáÅÐÐá´»àµÍà , ἧǧ¨ÃµÃǨ¨Ñº áʧ, ἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ , ἧǧ¨ÃÊÇÔµª , ÁÍàµÍà 俵ç, à«Íà âÇÁÍàµÍà áÅÐÊÒÂàª×Íè Áµ Íἧ ǧ¨Ã·Ñ§é ËÁ´


72

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

4.1 ¿ §¡ ª¹Ñè áÊ´§¼Å·Õâè Á´ÙÅ LCD 㹡ÒÃáÊ´§¼Å·Õâè Á´ÙÅ LCD «Ö§è µÔ´µÑ§é ÁҾà ÍÁ¡ÑººÍà ´ AX-11 ¹Ñ¹é ÊÒÁÒöàÃÕ¡㪠§Ò¹ä´ ´ Ç¿ §¡ ªÑè¹ printf «Ö觷íÒ˹ Ò·ÕèáÊ´§¼ÅµÑÇÍÑ¡¢ÃеÑé§áµ áÍ´à´ÃÊ 0x00-0x0F ÊíÒËÃѺºÃ÷Ѵ·Õè 1 ËÃ×ͺÃ÷Ѵº¹ áÅÐáÍ´à´ÃÊ 0x40-0x4F ÊíÒËÃѺºÃ÷Ѵ·Õè 2 ËÃ×ͺÃ÷ѴŠҧ â´Â¨ÐáÊ´§µÑÇ ÍÑ¡¢ÃÐẺµ Íà¹×Íè §¨¹¡Ç ҨоºµÑÇÍÑ¡ÉþÔàÈÉ \n ¨Ö§¨ÐàÃÔÁè µ ¹¡ÅѺÁÒáÊ´§¼Å·Õµè Òí á˹ §áÍ´à´ÃÊ 0x00 ãËÁ Í¡Õ ¤Ãѧé ˹֧è N N N

N ! N " N # N $ N % N & N ' N ) N * N + N , N - N .

* * I n t e r a c t i v e C * * N" N" N"

N"! N"" N"# N"$ N"% N"& N"' N") N"* N"+ N", N"- N".

m i c r o c o n t r o l l e r * â´Â¿ §¡ ªÑè¹ printf ¹ÕéÊÒÁÒöáÊ´§µÑÇÍÑ¡¢ÃÐã¹ÃٻẺµÑÇÍÑ¡¢ÃФ§·ÕèáÅÐÊÒÁÒö㪠§Ò¹ à ÇÁ¡ÑºµÑÇÍÑ¡ÉþÔàÈɴѧµ Í仹Õé %d

ãª ÃºÑ ¤ Òà¾×Íè áÊ´§¼Å¢ ÍÁÙÅẺ¨íҹǹàµçÁ int â´ÂáÊ´§¼Åà» ¹àÅ¢°Ò¹ÊÔº (decimal)

%x 㪠ÃѺ¤ Òà¾×èÍáÊ´§¼Å¢ ÍÁÙÅẺ¨íҹǹàµçÁ int â´ÂáÊ´§¼Åà» ¹àÅ¢°Ò¹ÊԺˡ (hexadecimal) %b

ãª ÃºÑ ¤ Òà¾×Íè áÊ´§¼Å¢ ÍÁÙÅẺ¨íҹǹàµçÁ int â´ÂáÊ´§¼Åà» ¹àÅ¢°Ò¹Êͧ (binary)

%c (ASCII)

ãª ÃºÑ ¤ Òà¾×Íè áÊ´§¼Å¢ ÍÁÙÅẺ¨íҹǹàµçÁ int â´ÂáÊ´§¼Åà» ¹µÑÇÍÑ¡¢ÃÐÃËÑÊáÍÊ¡Õ

%f ãª ÃºÑ ¤ Òà¾×Íè áÊ´§¼Å¢ ÍÁÙÅẺ¨íҹǹ¨ÃÔ§ float â´ÂáÊ´§¼Åà» ¹µÑÇàÅ¢¨íҹǹ¨ÃÔ§ (floating point) %s

ãª ÃºÑ ¤ Òà¾×Íè áÊ´§¼Å¢ ÍÁÙÅẺÍÑ¡¢ÃÐ (ÍÐàà) â´ÂáÊ´§¼Åà» ¹¡ÅØÁ µÑÇÍÑ¡¢ÃÐ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

73

¡Ò÷´Åͧ·Õè 1 ¡ÒÃáÊ´§¼ÅµÑÇÍÑ¡¢ÃФ§·Õºè ¹âÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 ¡Ò÷´Åͧ·Õè 1-1 áÊ´§¢ ͤÇÒÁÍ ҧ§ Ò 1.1.1 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹¿ §¡ ª¹Ñè ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter Êѧࡵ¡ÒÃáÊ´§ ¼Å¢Í§âÁ´ÙÅ LCD áÅмšÒä׹¤ Ңͧ¿ §¡ ª¹Ñè ã¹Ë¹ Òµ Ò§ Interaction printf(“Hello world”);

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Hello world Ê Ç¹·ÕËè ¹ Òµ Ò§ Interaction ¨ÐáÊ´§¼Å¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè printf ´Ñ§ã¹ÃÙ»·Õè L1-1 1.1.2 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ¨Ò¡¹Ñ¹é ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { printf(“Hello world”); }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Hello world µ ͨҡ¢ ͤÇÒÁà´ÔÁ (¶ ÒÁÕ) 1.1.3 ·´Åͧ¡´»ØÁ Run main ÍÕ¡ 2-3 ¤Ãѧé Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¼ÅÅѾ¸ : »ÃÒ¡®¢ ͤÇÒÁ Hello world µ Íà¹×Íè §¡Ñ¹ä»¨¹Å ¹¨ÍáÊ´§¼Å

ÃÙ»·Õè L1-1 ˹ Òµ Ò§ Interaction ·Õáè Ê´§¼ÅÅѾ¸ ¨Ò¡¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè printf


74

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 1-2 áÊ´§¢ ͤÇÒÁẺ¢Ö¹é ºÃ÷ѴãËÁ ¨Ò¡¡Ò÷´Åͧ·Õè 1-1 ËÒ¡Âѧ¤§Ê §¢ ÍÁÙÅà´ÔÁä»ÂѧºÍà ´ AX-11 ¢ ͤÇÒÁ·ÕÊè § ä»ãËÁ ¨Ðµ ͡Ѻ¢ ͤÇÒÁà´ÔÁ ä»àÃ×Íè Âæ äÁ ÊÒÁÒöá¡¡ÅØÁ ¢ ͤÇÒÁä´ ã¹¡Ò÷´Åͧ¹Õ¨é §Ö à¾ÔÁè ÍÑ¡ÉþÔàÈÉ \n ŧä»ã¹¿ §¡ ª¹Ñè printf à¾×Íè ãË àÃÔÁè µ ¹¢Ö¹é ºÃ÷ѴãËÁ ·Õè 1 ãËÁ àÁ×Íè ¾º¤íÒÊѧè printf 㹤ÃÑ§é µ Íä» 1.2.1 à¢Õ¹â»Ãá¡ÃÁµ Í仹Õé void main(void) { printf(“Hello world\n”); }

1.2.2 ¡´»ØÁ Download µÒÁ´ Ç Run main 2-3 ¤Ãѧé Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 Âѧ¤§áÊ´§¢ ͤÇÒÁ Hello world ·Õºè Ã÷Ѵº¹µíÒá˹ § à´ÔÁ äÁ à»ÅÕÂè ¹á»Å§ áÅÐäÁ Á¡Õ ÒÃáÊ´§¢ ͤÇÒÁµ Í· Ò¨¹Å ¹àËÁ×͹¡Ñº¡Ò÷´Åͧ·Õè 1-1

¡Ò÷´Åͧ·Õè 2 ¡ÒÃáÊ´§¼ÅµÑÇá»Ãã¹ÃٻẺ¢Í§àÅ¢°Ò¹µ Ò§æ ¢Í§¿ §¡ ª¹Ñè printf ã¹ Interactive C º¹ºÍà ´ AX-11 ¡Ò÷´Åͧ·Õè 2-1 áÊ´§¤ ҢͧµÑÇá»Ãã¹ÃٻẺàÅ¢°Ò¹ÊÔº 2.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0201.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { int x; x = 26; printf(“%d\n”,x); }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§µÑÇàÅ¢ 26 2.1.2 à¢Õ¹â»Ãá¡ÃÁà¾ÔÁè àµÔÁ¨Ò¡¢ Í 2.1.2 à¾×Íè áÊ´§¤ Ò¢ ÍÁÙŢͧµÑÇá»Ã x ã¹ÃٻẺàÅ¢°Ò¹ÊÔº à ÇÁ¡ÑºµÑÇ ÍÑ¡¢ÃФ§·Õè ¨Ò¡¹Ñ¹é ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { int x; x = 26; printf(“Value is %d\n”,x); }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Value is 26


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

75

¡Ò÷´Åͧ·Õè 2-2 áÊ´§¤ ҢͧµÑÇá»Ãã¹ÃٻẺàÅ¢°Ò¹ÊԺˡ 㹡Ò÷´Åͧ¹Õéµ Í§¡ÒÃáÊ´§ãË àË繶֧¡ÒÃáÊ´§¤ ҢͧµÑÇá»Ãã¹ÃÙ»¢Í§àÅ¢°Ò¹ÊԺˡà ÇÁ¡ÑºµÑÇ ÍÑ¡¢ÃФ§·Õè 2.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0202.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { int x; x = 26; printf(“Value is %x\n”,x); format }

// x is integer // Define x = 26 // Display “x” value in hexadecimal

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Value is 001A à¹×Íè §¨Ò¡¤ Ò 26 ã¹àÅ¢ °Ò¹ÊÔºÁÕ¤Ò à· Ò¡Ñº 001A ã¹ÃкºàÅ¢°Ò¹ÊԺˡ

¡Ò÷´Åͧ·Õè 2-3 áÊ´§¤ ҢͧµÑÇá»Ãã¹ÃٻẺàÅ¢°Ò¹Êͧ ¤§·Õè

㹡Ò÷´Åͧ¹Õµé Í §¡ÒÃáÊ´§ãË àË繶֧¡ÒÃáÊ´§¤ ҢͧµÑÇá»Ãã¹ÃÙ»¢Í§àÅ¢°Ò¹Êͧà ÇÁ¡ÑºµÑÇÍÑ¡¢ÃÐ

2.3.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0203.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { int x; // x is integer x = 26; // Define x = 26 printf(“Value is %b\n”,x); // Display “x” value in binary format }

ËÁÒÂà赯 : ª Í§Ç Ò§ÃÐËÇ Ò§¤íÒÇ Ò is ¡Ñº % ãË àÇ ¹ÇÃä 7 µÑÇÍÑ¡Éà ¼ÅÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Value is 00011010 à¹×Íè §¨Ò¡¤ Ò 26 ã¹àÅ¢°Ò¹ÊÔºÁÕ¤Ò à· Ò¡Ñº 00011010 ã¹ÃкºàÅ¢°Ò¹Êͧ


76

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 3 ¡ÒÃáÊ´§¼ÅµÑÇá»Ãã¹ÃٻẺµ Ò§æ ¢Í§¿ §¡ ª¹Ñè printf àÁ×Íè ·íҧҹà ÇÁ¡Ñº¿ §¡ ª¹Ñè Í×¹è æ ¡Ò÷´Åͧ·Õè 3-1 áÊ´§¤ ҢͧµÑÇá»ÃẺËÅÒµÑǾà ÍÁ¡Ñ¹

3.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0301.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { int x,y; // Declare x and y to integer x = 47; // Define x = 47 y = 15; // Define x = 15 printf(“data1=%d data2=%d\n”,x,y); // Display x and y value in decimal format }

¼ÅÅѾ¸ :»ÃÒ¡®¢ ͤÇÒÁ data1=47 ·Õºè Ã÷Ѵº¹ áÅÐ data2=15 ·Õºè Ã÷ѴŠҧ à¹×Íè §¨Ò¡ãË áÊ´§¼ÅµÑÇá»Ã x ¡ ͹ áŠǵÒÁ´ Ç y µíÒá˹ §·Õàè Ç ¹ª Í§Ç Ò§ã¹â»Ãá¡ÃÁ¨Ð·íÒãË à¡Ô´¡ÒÃàÇ ¹ª Í§Ç Ò§·Õâè Á´ÙÅ LCD ´ ÇÂ

¡Ò÷´Åͧ·Õè 3-2 áÊ´§¤ ҢͧµÑÇá»Ã¨Ò¡¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè ã´æ 㹡Ò÷´Åͧ¹Õµé Í §¡ÒÃáÊ´§¤ Ò¢ ÍÁÙŢͧµÑÇá»Ã result ·Õäè ´ ¨Ò¡¡ÒöʹÃÒ¡·Õè 2 ¨Ò¡¿ §¡ ª¹Ñè sqrt() 3.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0302.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { float result; // Declare “result” to float variable result = sqrt(2.0); // Calculate square root 2 and store to result variable printf(“sqrt(2)=%f\n”,result); // Show “result” data on screen }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ sqrt(2)= 1.414214

¡Ò÷´Åͧ·Õè 3-3 áÊ´§¤ Ңͧ¢ ÍÁÙÅã¹ÃٻẺµÑÇÍÑ¡¢ÃÐ 3.3.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0303.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { char a[] = “Interactive C”; // Declare “a” to array variable, character type and define message. printf(“%s\n”,a); // Show message of a on screen. }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Interactive C ·Õºè Ã÷Ѵº¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

77

3.2 ¿ §¡ ª¹Ñè Êà ҧÊÑ­­Ò³àÊÕ§áÅСÒÃ˹ ǧàÇÅÒ ã¹ Interactive C ÁÕ¿§ ¡ ª¹Ñè ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒÃÊà ҧÊÑ­­Ò³àÊÕ§à¾×Íè ¢ÑºÍÍ¡ÅíÒ⾧໠Â⫺¹ ºÍà ´ AX-11 ÍÂÙ 5 µÑǤ×Í ¿ §¡ ª¹Ñè beep, tone, set_beeper_pitch, beep_on áÅÐ beep_off ÁÕ¿§ ¡ ª¹Ñè ·Õè 㪠㹡ÒÃ˹ ǧàÇÅÒÍÕ¡ 2 µÑǤ×Í ¿ §¡ ª¹Ñè sleep áÅÐ msleep

3.2.1 ¿ §¡ ª¹Ñè beep

㪠㹡ÒÃÊà ҧÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 500Hz ´Ñ§¹Ò¹ 0.3 ÇÔ¹Ò·Õ «Ö§è ¶×Íà» ¹¤ÇÒÁ¶ÕËè ÅÑ¡·Õãè ª ã¹ Interactive CËÃ×Íà» ¹¤ ÒµÑ§é µ ¹ (default) à» ¹¿ §¡ ª¹Ñè ·Õäè Á Á¾Õ ÒÃÒÁÔàµÍà áÅСÒä׹¤ Ò ÁÕû٠Ẻ´Ñ§¹Õé void beep(void)

µÑÇÍ ҧ·Õè 3.2.1 beep();

à» ¹¡ÒÃÊà ҧÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 500Hz ãË ´§Ñ 1 ¤Ãѧé (¹Ò¹ 0.3 ÇÔ¹Ò·Õ)

3.2.2 ¿ §¡ ª¹Ñè tone

㪠Êà ҧÊÑ­­Ò³àÊÕ§·Õ¤è ÇÒÁ¶Õµè Ò §æ ã¹Ë¹ ÇÂàÎÔõ« (Hertz : Hz)

ÃٻẺ¿ §¡ ªÑè¹ void tone(float frequency , float length)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà frequency ¤×ͤÇÒÁ¶Õàè ÊÕ§ã¹Ë¹ ÇÂàÎÔõ« (Hz) ¡Òü Ò¹¤ Ò¨Ðà» ¹áºº float (àÅ¢·È¹ÔÂÁ) length ¤×ͪ ǧàÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§ã¹Ë¹ ÇÂÇÔ¹Ò·Õ ¡Òü Ò¹¤ Ò¨Ðà» ¹áºº float (àÅ¢ ·È¹ÔÂÁ) µÑÇÍ ҧ·Õè 3.2.2 tone(800.0,0.1);

à» ¹¡ÒÃÊà ҧÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 800Hz ˹ ǧàÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§ 0.1 ÇÔ¹Ò·Õ (µÑÇá»Ã frequency áÅÐ length à» ¹ª¹Ô´¢ ÍÁÙÅ float ¨Ðµ ͧ» ͹¤ ÒµÑÇàŢẺ·È¹ÔÂÁ)

3.2.3 ¿ §¡ ª¹Ñè set_beeper_pitch

㪠¡Òí ˹´¤ Ò¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³àÊÕ§ã¹Ë¹ ÇÂàÎÔõ« (Hertz : Hz) àÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹¡Ñº ¿ §¡ ª¹Ñè beeper_on à¾×Íè ¢ÑºÊÑ­­Ò³àÊÕ§ÍÍ¡ÅíÒ⾧໠Â⫺¹ºÍà ´ AX-11


78

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃٻẺ¿ §¡ ªÑè¹ void set_beeper_pitch(float frequency)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà frequency ¤×ͤÇÒÁ¶Õàè ÊÕ§ã¹Ë¹ ÇÂàÎÔõ« ¡Òü Ò¹¤ Ò¨Ðà» ¹áºº float (àÅ¢·È¹ÔÂÁ) µÑÇÍ ҧ·Õè 3.2.3 set_beeper_pitch(670.0);

à» ¹¡ÒáíÒ˹´ãË Êà ҧÊÑ­­Ò³àÊÕ§¤ÇÒÁ¶Õè 670Hz áÅШÐà¡Ô´ÊÑ­­Ò³àÊÕ§¢ÑºÍÍ¡·Ò§ ÅíÒ⾧¡çµ ÍàÁ×èÍÁÕ¡ÒÃàÃÕ¡㪠¿ §¡ ªÑè¹ beeper_on àÁ×è͵ ͧ¡Òû ´ÊÑ­­Ò³àÊÕ§·íÒä´ â´Â¡ÒÃàÃÕ¡ 㪠¿§ ¡ ª¹Ñè beeper_off

3.2.4 ¿ §¡ ª¹Ñè beeper_on 㪠à¾×Íè à» ´¡ÒâѺàÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Â⫺¹ºÍà ´ AX-11 ÃٻẺ¿ §¡ ªÑè¹ void beeper_on(void)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ µÑÇÍ ҧ·Õè 3.2.4

¡íÒ˹´¤ Ò¤ÇÒÁ¶Õè 800Hz beeper_on(); // à» ´ÊÑ­­Ò³àÊÕ§ (800Hz) 㹡ÒÃ㪠¿§ ¡ ª¹Ñè beeper_on ¤ÇÃ㪠ÃÇ Á¡Ñº¿ §¡ ª¹Ñè set_beeper_pitch à¾×Íè ¡íÒ˹´¤ Ò¤ÇÒÁ ¶Õ¢è ͧàÊÕ§·Õµè Í §¡ÒâѺ¡ ͹ ´Ñ§µÑÇÍ ҧ ¡íÒ˹´¤ÇÒÁ¶Õàè · ҡѺ 800Hz áµ ¶Ò ËÒ¡äÁ Á¡Õ ÒáíÒ˹´àÁ×Íè àÃÕ¡㪠¿§ ¡ ª¹Ñè beeper_on ¹Õàé ÊÕ§·Õ¶è ¡Ù ¢ÑºÍÍ¡¨ÐÁÕ¤ÇÒÁ¶Õàè · ҡѺ¤ Ò¤ÇÒÁ¶ÕÅè Ò ÊØ´·Õ¡è Òí ˹´ËÃ×Íà» ¹ ¤ ÒµÑ§é µ ¹ (500Hz) ¶ ÒäÁ Á¡Õ ÒáíÒ˹´ÁÒ¡ ͹ set_beeper_pitch(800.0);

//

3.2.5 ¿ §¡ ª¹Ñè beeper_off 㪠à¾×Íè » ´¡ÒâѺàÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Â⫺¹ºÍà ´ AX-11 ÃٻẺ¿ §¡ ªÑè¹ void beeper_off(void)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 3.2.5 set_beeper_pitch(800.0);

//

beeper_on();

//

¡íÒ˹´¤ Ò¤ÇÒÁ¶Õè 800Hz à» ´ÊÑ­­Ò³àÊÕ§(800Hz)

//

» ´ÊÑ­­Ò³àÊÕ§

l

79

............... ............... beeper_off();

3.2.6 ¿ §¡ ª¹Ñè sleep 㪠˹ ǧàÇÅÒã¹Ë¹ ÇÂÇÔ¹Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ void sleep(float sec)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà sec ¤×ÍàÇÅÒ·Õèµ Í§¡ÒÃ˹ ǧã¹Ë¹ ÇÂÇÔ¹Ò·Õ ¡Òü Ò¹¤ Ò¨Ðà» ¹áºº float µÑÇÍ ҧ·Õè 3.2.6 sleep(0.5);

à» ¹¡ÒÃ˹ ǧàÇÅÒ 0.5 ÇÔ¹Ò·Õ

3.2.7 ¿ §¡ ª¹Ñè msleep 㪠˹ ǧàÇÅÒã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ ÃٻẺ¿ §¡ ªÑè¹ void msleep(long msec)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà msec ¤×ÍàÇÅÒ·Õèµ Í§¡ÒÃ˹ ǧã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ ¡Òü Ò¹¤ Ò¨Ðà» ¹áºº long µÑÇÍ ҧ·Õè 3.2.7 msleep(300L);

à» ¹¡ÒÃ˹ ǧàÇÅÒ 300 ÁÔÅÅÔÇ¹Ô Ò·Õ (à¹×Íè §¨Ò¡¾ÒÃÒÁÔàµÍà 㹡ÒÃÃѺ¤ Ò¢ ÍÁÙÅàÇÅÒ·Õµè Í §¡Òà ˹ ǧ«Ö§è ¡ç¤Í× msec à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹàµçÁẺ long ´Ñ§¹Ñ¹é àÁ×Íè ãÊ ¤Ò µÑÇàÅ¢áŠǵ ͧµ Í· Ò´ Ç µÑÇÍÑ¡Éà L ËÃ×Í l )


80

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 4 ¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Êà ҧÊÑ­­Ò³àÊÕ§àº×Íé §µ ¹ ¡Ò÷´Åͧ·Õè 4-1 Êà ҧÊÑ­­Ò³àÊÕ§¨Ò¡¤ ÒàÃÔÁè µ ¹ã¹ interactive C 4.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0401.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅп §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« void main(void) { printf(“Sound test\n”); // Show message on screen beep(); // Once beep sound generated }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Sound test áÅÐÁÕÊ­ Ñ ­Ò³àÊÕ§ µÔ´é ´Ñ§¢Ö¹é Ë¹Ö§è ¤ÃÑ§é ¤ÇÒÁ¶Õ¢è ͧàÊÕ§¹Õ¤é Í× 500Hz ´Ñ§¹Ò¹ 0.3 ÇÔ¹Ò·Õ

¡Ò÷´Åͧ·Õè 4-2 Êà ҧÊÑ­­Ò³àÊÕ§µ Íà¹×Íè §ã¹ interactive C 4.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0402.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅп §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« void main(void) { while(1)

//

ǹ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õáé ººäÁ è٠º

{ printf(“Sound test\n”);

//

beep();

//

sleep(1.0);

//

áÊ´§¢ ͤÇÒÁ·ÕËè ¹ Ò¨Í LCD Êà ҧÊÑ­­Ò³àÊÕ§ µÔ´é Áҵðҹ ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ

} }

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¢Í§ºÍà ´ AX-11 áÊ´§¢ ͤÇÒÁ Sound test áÅÐÁÕÊ­ Ñ ­Ò³àÊÕ§ µÔ´é ´Ñ§à» ¹ª ǧæ â´Â´Ñ§¹Ò¹ 0.3 ÇÔ¹Ò·Õ ÊÅѺ¡Ñºà§Õº 1 ÇÔ¹Ò·Õ µ Íà¹×Íè §¡Ñ¹ä»µÅÍ´àÇÅÒ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

81

¡Ò÷´Åͧ·Õè 5 ¡ÒÃÊà ҧÊÑ­­Ò³àÊÕ§·Õ¤è ÇÒÁ¶Õµè Ò §æ ¡Ò÷´Åͧ·Õè 5-1 Êà ҧÊÑ­­Ò³àÊÕ§¨Ò¡¤ ÒàÃÔÁè µ ¹ã¹ interactive C 5.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0501.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅп §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« void main(void) {

»ÃСÒȵÑÇá»Ã·Õãè ª ʧ ¤ Ò¤ÇÒÁ¶Õàè ÊÕ§ while(!(freq>3000.0)) // ǹ·íÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õ¨ é ¹¡Ç Ò¤ Ңͧ freq ¨ÐÁÒ¡¡Ç Ò 3000 float freq=100.0;

//

{ printf(“Freq.%f Hertz\n”,freq); // tone(freq,0.1);

//

freq += 100.0;

//

sleep(1.0); } beep(); sleep(0.5); beep(); printf (“Stop\n”);

//

áÊ´§¤ Ò¤ÇÒÁ¶Õàè ÊÕ§·ÕËè ¹ Ò¨Í LCD àÃÕ¡¿ §¡ ª¹Ñè Êà ҧÊÑ­­Ò³àÊÕ§ à¾ÔÁè ¤ÇÒÁ¶Õè 100Hz ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ

}

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¨ÐáÊ´§¤ Ò¤ÇÒÁ¶Õàè ÊÕ§·Õ¶è ¡Ù Êà ҧ¢Ö¹é «Ö§è ¨Ðà¾ÔÁè ¤Ãѧé ÅÐ 100Hz ¾Ã ÍÁæ ¡Ñºä´ Â¹Ô àÊÕ§¢Í§áµ ÅФÇÒÁ¶Õ·è ÊÕè à ҧ´ Ç ¨¹¡Ãзѧè à¡Ô¹ 3kHz (3,000Hz) ¨Ðä´ Â¹Ô àÊÕ§ µÔ´é 2 ¤Ãѧé áÅ Ç ËÂØ´ ã¹¢³Ð·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Stop à¾×Íè ᨠ§¡ÒÃËÂØ´·íÒ§Ò¹¢Í§â»Ãá¡ÃÁ

¡Ò÷´Åͧ·Õè 5-2 Êà ҧÊÑ­­Ò³àÊÕ§´ Ç¿ §¡ ª¹Ñè ¡íÒ˹´¤ Ò¤ÇÒÁ¶Õè 5.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0502.ic ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main ¿ §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« void main(void) {

}

set_beeper_pitch(700.0);

//

beeper_on();

//

sleep(5.0);

//

beeper_off();

//

µÑ§é ¤ Ò¤ÇÒÁ¶Õ·è Õè 700 àÎÔõ« à» ´ÊÑ­­Ò³àÊÕ§ ˹ ǧàÇÅÒ 5 ÇÔ¹Ò·Õ » ´ÊÑ­­Ò³àÊÕ§

¼ÅÅѾ¸ : ¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õè 700Hz ´Ñ§ÍÍ¡¨Ò¡ÅíÒ⾧໠Ââ« à» ¹àÇÅÒ 5 ÇÔ¹Ò·Õ áŠǨ֧ËÂØ´


82

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.2.2 á¡ ä¢â»Ãá¡ÃÁà¾×Íè à»ÅÕÂè ¹ÃٻẺ¡ÒâѺàÊÕ§´Ñ§¹Õé void main(void) { int i;

//

set_beeper_pitch(800.0);

//

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

//

µÑÇá»Ãà¡çº¤ Ò¡ÒùѺ¢Í§¤íÒÊѧè for µÑ§é ¤ Ò¤ÇÒÁ¶Õ·è Õè 800Hz ǹÃͺ·íÒ¤íÒÊѧè ã¹ block 5 Ãͺ

{ beeper_on();

//

sleep(0.7);

//

beeper_off();

//

sleep(0.7);

//

à» ´¡ÒâѺÊÑ­­Ò³àÊÕ§ ˹ ǧàÇÅÒ 0.7 ÇÔ¹Ò·Õ » ´¡ÒâѺÊÑ­­Ò³àÊÕ§ ˹ ǧàÇÅÒ 0.7 ÇÔ¹Ò·Õ

} }

¼ÅÅѾ¸ : ¨Ðä´ Â¹Ô àÊÕ§¤ÇÒÁ¶Õè 800Hz ´Ñ§ÍÍ¡¨Ò¡ÅíÒ⾧໠Ââ« à» ¹àÇÅÒ 0.7 ÇÔ¹Ò·Õ áŠǴѺ à» ¹¨íҹǹ 5 ¤Ãѧé áŠǨ֧ËÂØ´ 5.2.3 á¡ ä¢â»Ãá¡ÃÁà¾×Íè à»ÅÕÂè ¹¤ Ò¤ÇÒÁ¶Õáè ÅÐÃÐÂÐàÇÅÒ㹡ÒâѺàÊÕ§ ¾Ã ÍÁ·Ñ§é áÊ´§¤ Ò¤ÇÒÁ¶Õ·è ÊÕè à ҧ¢Ö¹é áÅ Ç·íÒ¡Ò÷´ÅͧÍÕ¡¤Ãѧé


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

83

3.3 ¿ §¡ ª¹Ñè à¡ÕÂè ǡѺ¡ÒâѺÁÍàµÍà 俵ç ¡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà 俵ç¢Í§ºÍà ´ AX-11 㪠ËÅÑ¡¡ÒáÒäǺ¤ØÁáç´Ñ¹ä¿ àÅÕ駷Õè¨ ÒÂãË ¡ÑºÁÍàµÍà 俵çã¹áºº PWM (Pulse Width Modulation) ËÃ×ÍẺÁÍ´ÙàŪÑè¹·Ò§ ¤ÇÒÁ¡Ç Ò§¢Í§ÊÑ­­Ò³¾ÑÅÊ â´Âº¹ºÍà ´ AX-11 ÊÒÁÒö¢ÑºÁÍàµÍÃ ä¿µÃ§ä´ Ê§Ù ÊØ´ 4 µÑÇ ¾Ã ÍÁ ¢ÑÇé µ ÍÁÍàµÍà ¾Ã ÍÁ㪠§Ò¹ ¹Í¡¨Ò¡¹Ñ¹é ÂѧÁÕä¿áÊ´§·ÔÈ·Ò§ËÃ×Í¢ÑÇé ¢Í§¡Òè ÒÂä¿ãË á¡ ÁÍàµÍà ¤Ãº ·Ñé§ 4 µÑÇ´ Ç â´Âáµ ÅЪ ͧ¨ÐÁÕ LED ÊÕá´§áÅÐÊÕà¢ÕÂÇ»ÃШíÒª ͧÍÂÙ Í ҧÅÐ 1 ´Ç§ àÁ×èÍÊÑ­­Ò³ ä¿ LED ÊÕà¢ÕÂǵԴÊÇ Ò§ËÁÒ¶֧Êѧè ÁÍàµÍà ãË ËÁع·Ç¹à¢çÁ¹ÒÌ ¡Ò áµ ¶Ò LED ÊÕá´§µÔ´ÊÇ Ò§ËÁÒ ¶Ö§ÊÑè§ÁÍàµÍà ãË ËÁعµÒÁà¢çÁ¹ÒÌ ¡Ò ã¹â»Ãá¡ÃÁ Interactive C ÁÕ¿ §¡ ªÑè¹·Õè㪠¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà 俵çÍÂÙ 5 µÑÇ 6 Ẻ¤×Í ¿ §¡ ª¹Ñè fd , bk , motor , off , ao ËÃ×Í alloff

3.3.1 ¿ §¡ ª¹Ñè fd 㪠¢ºÑ ÁÍàµÍà 俵çãË ËÁعâ´ÂÁÕ¡Òè ÒÂä¿ãË á¡ ÁÍàµÍà ẺµÃ§¢ÑÇé ·íÒãË àÁ×Íè àÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õé LED ÊÕà¢ÕÂÇã¹Ê ǹǧ¨Ã¢ÑºÁÍàµÍà º¹ºÍà ´ AX-11 ¨ÐµÔ´ ÊíÒËÃѺ¡íÒÅѧ§Ò¹ä¿¿ Ò·Õãè ª ¢ºÑ ÁÍàµÍà àÁ×Íè 㪠¿§ ¡ ª¹Ñè ¹Õ¤é Í× 50% ¢Í§¡íÒÅѧ¢ÑºÊÙ§ÊØ´ ÃٻẺ¿ §¡ ªÑè¹ void fd(int m)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà m ¤×Í ÁÍàµÍà ·àÕè Å×Í¡¢Ñº ÁÕ¤Ò ä´ 4 ¤ Ò¤×Í 0,1,2 áÅÐ 3 µÑÇÍ ҧ·Õè 3.3.1 fd(1);

¨ ÒÂ俵ç¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ·ªÕè Í § 1 ãË ËÁع

3.3.2 ¿ §¡ ª¹Ñè bk 㪠¢ºÑ ÁÍàµÍà 俵çãË ËÁعâ´ÂÁÕ¡Òè ÒÂä¿ãË á¡ ÁÍàµÍà Ẻ¡ÅѺ¢ÑÇé ·íÒãË àÁ×Íè àÃÕ¡㪠¿§ ¡ ªÑè¹¹Õé LED ÊÕá´§ã¹Ê ǹǧ¨Ã¢ÑºÁÍàµÍà º¹ºÍà ´ AX-11 ¨ÐµÔ´ ÊíÒËÃѺ¡íÒÅѧ§Ò¹ä¿¿ Ò·Õè㪠¢Ñº ÁÍàµÍà àÁ×Íè 㪠¿§ ¡ ª¹Ñè ¹Õ¤é Í× 50% ¢Í§¡íÒÅѧ¢ÑºÊÙ§ÊØ´ ´Ñ§¹Ñ¹é ¡ÒâѺÁÍàµÍà ´Ç ¿ §¡ ª¹Ñè ¹Õ¨é §Ö ÁÕ·ÈÔ ·Ò§ ¡ÒÃËÁع·ÕèµÃ§¢ ÒÁ¡Ñº¿ §¡ ªÑè¹ fd


84

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃٻẺ¿ §¡ ªÑè¹ void bk(int m)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà m ¤×Í ÁÍàµÍà ·àÕè Å×Í¡¢Ñº ÁÕ¤Ò ä´ 4 ¤ Ò¤×Í 0,1,2 áÅÐ 3 µÑÇÍ ҧ·Õè 3.3.2 bk(3);

¨ ÒÂä¿¡ÅѺ¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ·ªÕè Í § 3 ãË ËÁع

3.3.3 ¿ §¡ ª¹Ñè motor 㪠¤Çº¤ØÁ¤ÇÒÁàÃçÇáÅзÔȷҧ㹡ÒÃËÁع¢Í§ÁÍàµÍà 俵ç ÃٻẺ¿ §¡ ªÑè¹ void motor(int m , int p)

¾ÒÃÒÁÔàµÍà m ¤×Í ÁÍàµÍà ·àÕè Å×Í¡¢Ñº ÁÕ¤Ò ä´ 4 ¤ Ò¤×Í 0,1,2 áÅÐ 3 p ¤×Í ¤ Ò·Õãè ª ¡Òí ˹´ÃдѺ¾Åѧ§Ò¹ÊíÒËÃѺ¢ÑºÁÍàµÍà â´ÂÁÕ¤Ò ã¹ª ǧ -100 ¶Ö§ 100 â´Â¤ Ò 100 à» ¹¡ÒÃÊÑè§ãË ¨ ÒÂä¿áºº¡ÅѺ¢ÑéÇà¾×è͢ѺÁÍàµÍà àµçÁ¡íÒÅѧ ã¹¢³Ð·Õè 100 à» ¹¡ÒÃÊÑè§ãË ¨ ÒÂä¿ áººµÃ§¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà àµçÁ¡íÒÅѧ ´Ñ§¹Ñ¹é ¾ÒÃÒÁÔàµÍà µÇÑ ¹Õ¨é §Ö 㪠㹡ÒáíÒ˹´¤ÇÒÁàÃçÇáÅзÔÈ·Ò§ ¡ÒÃËÁع¢Í§ÁÍàµÍÃ ä´ ã¹¤ÃÒÇà´ÕÂǡѹ µÑÇÍ ҧ·Õè 3.3.3 motor(0,100);

¨ ÒÂä¿áººµÃ§¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ªÍ § 0 ãË ËÁعàµçÁ¡íÒÅѧ motor(2,60);

¨ ÒÂä¿áººµÃ§¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ªÍ § 2 ãË ËÁعã¹ÃдѺ 60% ¢Í§¡íÒÅѧÊÙ§ÊØ´ motor(1,-100);

¨ ÒÂä¿áºº¡ÅѺ¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ªÍ § 1 ãË ËÁعàµçÁ¡íÒÅѧ motor(3,-40);

¨ ÒÂä¿áºº¡ÅѺ¢ÑÇé à¾×Íè ¢ÑºÁÍàµÍà ªÍ § 3 ãË ËÁعã¹ÃдѺ 40% ¢Í§¡íÒÅѧÊÙ§ÊØ´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

85

3.3.4 ¿ §¡ ª¹Ñè off 㪠ËÂØ´¡ÒâѺÁÍàµÍà 俵ç ÃٻẺ¿ §¡ ªÑè¹ void off(int m)

äÁ ÁÕ¡Òä׹¤ Ò¼ÅÅѾ¸ ¾ÒÃÒÁÔàµÍà m ¤×Í ÁÍàµÍà ·àÕè Å×Í¡¢Ñº ÁÕ¤Ò ä´ 4 ¤ Ò¤×Í 0,1,2 áÅÐ 3 µÑÇÍ ҧ·Õè 3.3.4 off(0);

ËÂØ´¡ÒâѺÁÍàµÍà ªÍ § 0

3.3.5 ¿ §¡ ª¹Ñè ao ËÃ×Í alloff 㪠㹡ÒÃËÂØ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ·§Ñé ËÁ´º¹ºÍà ´ AX-11 ÃٻẺ¿ §¡ ªÑè¹ void ao(void)

ËÃ×Í void alloff(void)

µÑÇÍ ҧ·Õè 3.3.5 ao();

ËÂØ´¡ÒâѺÁÍàµÍà ·¡Ø ª ͧ¾Ã ÍÁ¡Ñ¹ (µÑ§é áµ ªÍ § 0 ¶Ö§ 3) ËÃ×Í㪠ÅѾ¸ à´ÕÂǡѹ

alloff();

¡ç¨ÐãË ¼Å


86

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 6 ¢ÑºÁÍàµÍà 俵çÍ ҧ§ Ò ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒµ Í 1 ªØ´ 6.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0601.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { printf(“Motor test1\n”); // while(1) {

//

fd(0);

//

sleep(3.0);

//

beep();

//

bk(0);

//

sleep(3.0);

//

beep();

//

áÊ´§¢ ͤÇÒÁᨠ§¡Ò÷´ÊͺÁÍàµÍà º¹¨ÍáÊ´§¼Å ãË Á¡Õ ÒÃǹÃͺ·íÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õáé ººäÁ è٠º ¨ ÒÂ俵ç¢ÑÇé ãË á¡ ÁÍàµÍà 俵ç·Õªè Í § M-0 ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ ¢ÑºàÊÕ§ µÔ´é ¨ ÒÂä¿¡ÅѺ¢ÑÇé ãË á¡ ÁÍàµÍà 俵ç·Õªè Í § M-0 ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ ¢ÑºàÊÕ§ µÔ´é

} }

PWR. BATT.

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

AX-11

STOP

SERVO MOTOR

START

DC MOTOR 5 4 3 2 1 0

68HC11 Microcontroller Activity Board

DC motor 6V

6.2 µ ÍÁÍàµÍà ࢠҷժè Í § M-0 6.3 ¡´»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD, ä¿áÊ´§¢ÑÇé ¢Í§¡Òè ÒÂä¿ãË ÁÍàµÍà º¹ºÍà ´ AX-11 áÅзÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Motor test1 LED ÊÕà¢ÕÂÇã¹Ê ǹ¢ÑºÁÍàµÍà µ´Ô ÊÇ Ò§ ÁÍàµÍà ¨Ð ËÁعä»ã¹·Ôȷҧ˹֧è à» ¹àÇÅÒ 3 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é ä´ Â¹Ô àÊÕ§ µÔ´é 1 ¤Ãѧé áÅ Ç LED ÊÕá´§ã¹Ê ǹ¢ÑºÁÍàµÍà ¨Ð µÔ´ÊÇ Ò§á·¹ÊÕà¢ÕÂÇ ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ÁÍàµÍà ¨ÐËÁع¡ÅѺ·Ôȷҧ໠¹àÇÅÒ 3 ÇÔ¹Ò·Õ ÊÅѺ¡Ñ¹ä»Í ҧµ Íà¹×Íè § 6.4 ¶ Òµ ͧ¡ÒÃËÂØ´¡Ò÷íÒ§Ò¹ ãË ¡´»ØÁ Stop º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

87

¡Ò÷´Åͧ·Õè 7 ¤Çº¤ØÁÁÍàµÍà 俵ç ¡Ò÷´Åͧ·Õè 7-1 à¾ÔÁè ¤ÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà 俵ç ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒµ Í 1 ªØ´ 7.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0701.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { int speed = 20;

//

printf(“Motor test2\n”);

//

sleep(3.0);

//

while(1)

//

»ÃСÒȵÑÇá»Ã¤Çº¤ØÁ¡ÒÃÊ §¼ Ò¹¡íÒÅѧ¢ÑºÁÍàµÍà áÊ´§¢ ͤÇÒÁàÃÔÁè µ ¹·Õ¨è ÍáÊ´§¼Å ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ Ç¹¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õáé ººäÁ è٠º

{

áÊ´§¼Å¡íÒÅѧ¢Ñº¢Í§ÁÍàµÍà ªÍ § 1 ³ ¢³Ðã´æ // ÁÍàµÍà ªÍ § 1 ËÁع´ Ç¡íÒÅѧ·Õ¡è Òí ˹´â´ÂµÑÇá»Ã speed // ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ // à¾ÔÁ è ¤ Ò¡íÒÅѧ㹡ÒâѺÍÕ¡ 10% ¢Í§¡íÒÅѧÊÙ§ÊØ´ // ¶ Ò¤ Ò¡íÒÅѧ¢Ñºà¡Ô¹ 80% ãË ¡ÅѺä»àÃÔÁ è ·Õè 20%ãËÁ

printf(“speed %d\n”,speed);// motor(1,speed); msleep(3000L); speed +=10; if(speed>80) { speed = 20; } } }

7.1.2 µ ÍÁÍàµÍà ࢠҷժè Í § M-1 7.1.3 ¡´»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅФÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Motor test2 ˹ ǧàÇÅÒáÊ´§¢ ͤÇÒÁ 3 ÇÔ¹Ò·Õ ËÅѧ¨Ò¡¹Ñ¹é ÁÍàµÍà ¨ÐàÃÔÁè ËÁع´ ÇÂÃдѺ¡íÒÅѧ 20% ¢Í§¡íÒÅѧÊÙ§ÊØ´ ËÅѧ¨Ò¡¹Ñ¹é ·Ø¡æ 3 ÇÔ¹Ò·Õ ¡íÒÅѧ¨Ðà¾ÔÁè ¢Ö¹é ¤Ãѧé ÅÐ 10% ¨¹¶Ö§ 80% áÅ Ç¡ÅѺÁÒàÃÔÁè ·Õè 20% ãËÁ ǹ·íҧҹઠ¹¹¹Õäé »µÅÍ´ 7.1.4 ¶ Òµ ͧ¡ÒÃËÂØ´¡Ò÷íÒ§Ò¹ ãË ¡´»ØÁ Stop º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C

¡Ò÷´Åͧ·Õè 7-2 ¤Çº¤ØÁ¤ÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà 俵ç ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒµ Í 1 ªØ´ 7.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0702.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download


88

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

void main(void) { int speed = 20;

»ÃСÒȵÑÇá»Ã·Õ¤è Ǻ¤ØÁ¡ÒÃÊ §¼ Ò¹¤ Ò¡íÒÅѧ¢ÑºÁÍàµÍà // áÊ´§¢ ͤÇÒÁàÃÔÁ è µ ¹·Õ¨è ÍáÊ´§¼Å // ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ // ãË Á¡ Õ ÒÃǹÃͺ¡ÃзíÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õáé ººäÁ è٠º //

printf(“Motor test3\n”); sleep(3.0); while(1) {

// ¶ Ò¤ Ò¡íÒÅѧ¢Ñºà¡Ô¹ 80% ¨Ð¡ÃÐâ´´ä»·íÒ§Ò¹ã¹Ê ǹ¢Í§ else

if(speed<90) {

§ printf(“speed %d\n”,speed); //áÊ´§¼Å¡íÒÅѧ¢Ñº¢Í§ÁÍàµÍà ªÍ motor(1,speed); msleep(3000L); speed +=10;

1 // ÁÍàµÍà ªÍ § 1 ËÁعµÒÁ¡íÒÅѧ·Õ¡è Òí ˹´â´Â¤ Ңͧ speed // ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ // à¾ÔÁ è ¤ Ò¡íÒÅѧ㹡ÒâѺÍÕ¡ 10% ¢Í§¡íÒÅѧÊÙ§ÊØ´

} else {

// off(1); printf(“Stop sleep(0.1);

¶ Ò¤ Ò¡íÒÅѧ¢Ñºà¡Ô¹ 80% ¨Ð·íÒ¤íÒÊѧè ÀÒÂã¹ block ¹Õé

ËÂØ´¡ÒâѺÁÍàµÍà ªÍ § 1 Motor 1\n”); // áÊ´§¢ ͤÇÒÁ¡ÒÃËÂØ´¢ÑºÁÍàµÍà // ˹ ǧàÇÅÒà¾×Í è Å´¡ÒáоÃÔº¢Í§¨ÍáÊ´§¼Å //

} } }

7.2.2 µ ÍÁÍàµÍà ࢠҷժè Í § M-1 7.2.3 ¡´»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅФÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍà ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Motor test3 ˹ ǧàÇÅÒáÊ´§¢ ͤÇÒÁ 3 ÇÔ¹Ò·Õ ËÅѧ¨Ò¡¹Ñ¹é ÁÍàµÍà ¨ÐàÃÔÁè ËÁع´ ÇÂÃдѺ¡íÒÅѧ 20% ¢Í§¡íÒÅѧÊÙ§ÊØ´ ËÅѧ¨Ò¡¹Ñ¹é ·Ø¡æ 3 ÇÔ¹Ò·Õ ¡íÒÅѧ¨Ðà¾ÔÁè ¢Ö¹é ¤Ãѧé ÅÐ 10% ¨¹¶Ö§ 80% ÁÍàµÍà ¨ÐËÁعÍÕ¡ 3 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é ¨ÐËÂØ´ËÁع ¾Ã ÍÁ¡ÑºÁÕ¡ÒÃáÊ´§¢ ͤÇÒÁ Stop Motor 1 º¹¨ÍáÊ´§ ¼Å


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

89

3.4 ¿ §¡ ª¹Ñè à¡ÕÂè ǡѺÍÔ¹¾ØµÍйÒÅÍ¡áÅдԨµÔ ÍÅ ã¹ Interactive C ÁÕ¿§ ¡ ª¹Ñè ÊíÒËÃѺµÔ´µ ͡ѺÍØ»¡Ã³ ËÃ×ÍÊÑ­­Ò³ÍÔ¹¾ØµáººÍйÒÅÍ¡áÅÐ ´Ô¨ÔµÍÅÍÂÙ ¾Ã ÍÁ ·íÒãË ¡ÒõԴµ ͡ѺÍØ»¡Ã³ àËÅ Ò¹Ñé¹Êдǡ¢Öé¹ â´Â·ÕèÊÑ­­Ò³ÍÔ¹¾Øµä´ ÁÒ¨Ò¡ ÍØ»¡Ã³ µÃǨ¨Ñºáººµ Ò§æ ઠ¹ µÑǵ Ò¹·Ò¹á»Ã¤ ÒµÒÁáʧ, µÑǵ Ò¹·Ò¹á»Ã¤ ÒµÒÁÍسËÀÙÁÔ, µÑǵÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ä¿¿ Ò à» ¹µ ¹ ¨Ò¡¹Ñé¹¹íÒ¤ Ò¢ ÍÁÙÅ·ÕèÍ Ò¹ä´ ÁÒ»ÃÐÁÇżÅÍÕ¡¤ÃÑé§Ë¹Öè§ ÊíÒËÃѺ¿ §¡ ª¹Ñè ·Õãè ª µ´Ô µ ͡ѺÍÔ¹¾ØµÊÑ­­Ò³ÍйÒÅÍ¡ÁÕ 2 µÑǤ×Í ¿ §¡ ª¹Ñè analog áÅÐ ¿ §¡ ª¹Ñè knob ÊíÒËÃѺ¿ §¡ ª¹Ñè ¹ÕÁé ¤Õ ÇÒÁ¾ÔàÈɤ×Í ¨ÐÍ Ò¹¤ Ò¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ º¹ºÍà ´ AX-11 â´ÂµÃ§ Ê Ç¹¡ÒÃÍ Ò¹¨Ò¡ÍÔ¹¾Øµ´Ô¨ÔµÍŨÐ㪠¿ §¡ ªÑè¹ digital

3.4.1 ¿ §¡ ª¹Ñè analog

㪠ÍÒ ¹¤ ÒÍÔ¹¾Øµ·Õªè Í §ÍÔ¹¾ØµÍйÒÅÍ¡ãª ä´ ·§Ñé 21 ª ͧ¤×Í AI-2 ¶Ö§ AI-6 áÅÐ AI-16 ¶Ö§ AI-31

ÃٻẺ¿ §¡ ªÑè¹ int analog(int p)

¾ÒÃÒÁÔàµÍà p ¤×Í ª ͧÊÑ­­Ò³ÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò ä´ á¡ ª ͧ 2,3,4,5,6 áÅÐ 16-31 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ·ÕÍè ÂÙã ¹ª ǧ 0-255 ¹Ñ¹è ¤×ÍÁÕ¤ÇÒÁÅÐàÍÕ´¢Í§¢ ÍÁÙÅ´Ô¨µÔ ÍŠ෠ҡѺ 8 ºÔµ µÑÇÍ ҧ·Õè 3.4.1 result = analog(5);

à» ¹¡ÒÃÍ Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 5 ¼ÅÅѾ¸ ·äÕè ´ ¹Òí ä»à¡çºäÇ ·µÕè ÇÑ á»Ã result (µÑÇá»Ã result ¤ÇÃÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int à¾×Íè ãË µÃ§¡Ñºª¹Ô´¡Òä׹¤ Ò¼ÅÅѾ¸ ¢Í§¿ §¡ ª¹Ñè analog)

3.4.2 ¿ §¡ ª¹Ñè knob

ãª Í Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡·Õèàª×èÍÁµ ͡ѺµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ º¹ºÍà ´ AX-11 ·ÕèµíÒá˹ § KNOB â´Â¤ Ò·ÕèÍ Ò¹ä´ ¨Ð¢Öé¹ÍÂÙ ¡Ñº¡ÒûÃѺ¤ ҢͧµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB ÃٻẺ¿ §¡ ªÑè¹ int knob()

¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ·ÕÍè ÂÙã ¹ª ǧ 0-255 (8 ºÔµ)


90

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 3.4.2 result = knob();

à» ¹¡ÒÃÍ Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Òí á˹ § knob Ê Ç¹¤ Ò¼ÅÅѾ¸ ¹Òí ä»à¡çºäÇ ·µÕè ÇÑ á»Ã result (µÑÇá»Ã result ¤ÇèÐÁÕª¹Ô´¢ ÍÁÙÅà» ¹ int à¾×Íè ãË µÃ§¡Ñºª¹Ô´¡Òä׹¤ Ò¼ÅÅѾ¸ ¢Í§¿ §¡ ª¹Ñè knob)

3.4.3 ¿ §¡ ª¹Ñè digital 㪠ÍÒ ¹¤ ÒÊÑ­­Ò³´Ô¨µÔ ÍÅ·Õªè Í §ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ 9 ª ͧ¤×Í IN-7 ¶Ö§ IN-15 ÃٻẺ¿ §¡ ªÑè¹ int digital(int p)

¾ÒÃÒÁÔàµÍà p ¤×Í ª ͧÊÑ­­Ò³´Ô¨µÔ ÍÅ·Õµè Í §¡ÒÃÍ Ò¹¤ Ò ä´ á¡ ª ͧ 7-15 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁẺ int ¤ Ò¼ÅÅѾ¸ ·Õèà» ¹ä»ä´ ¤×Í 0 ËÃ×Í 1 «Ö觡ç¤×ͤ ÒÅͨԡ 0 ËÃ×Í 1 ¹Ñ¹è àͧ ¤×¹¤ Ò¼ÅÅѾ¸ ෠ҡѺ 1 àÁ×Íè ÍÔ¹¾Øµ¶Ù¡µ Íŧ¡ÃÒÇ´ ËÃ×Ͷ Òµ ͡ѺÊÇÔµª ¨Ðä´ ¼ÅÅѾ¸ ෠ҡѺ 1 àÁ×èÍÊÇÔµª ¶Ù¡¡´ ¤×¹¤ Ò¼ÅÅѾ¸ ෠ҡѺ 0 àÁ×Íè äÁ Á¡Õ Òõ ÍÍÔ¹¾ØµÅ§¡ÃÒÇ´ ËÃ×Ͷ Òµ ͡ѺÊÇÔµª ÍÂÙ áÊ´§Ç Ò äÁ ÁÕ¡Òá´ÊÇÔµª à¡Ô´¢Öé¹ µÑÇÍ ҧ·Õè 3.4.3 result = digital(15);

Í Ò¹¤ ÒÍÔ¹¾Øµ´Ô¨µÔ ÍŪ ͧ 15 ¼ÅÅѾ¸ ·äÕè ´ ¹Òí ä»à¡çºäÇ ·µÕè ÇÑ á»Ã result (µÑÇá»Ã result ¤ÇÃÁÕ ª¹Ô´¢ ÍÁÙÅà» ¹ int à¾×Íè ãË µÃ§¡Ñºª¹Ô´¡Òä׹¤ Ò¼ÅÅѾ¸ ¢Í§¿ §¡ ª¹Ñè digital)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

91

¡Ò÷´Åͧ·Õè 8 ¡Ò÷íÒ§Ò¹¡ÑºÍÔ¹¾ØµÍйÒÅÍ¡ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áººâ»à·¹ªÔâÍÁÔàµÍà ¾Ã ÍÁÊÒÂàª×Íè Áµ Í

8.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0801.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { printf(“Analog(3) =%d\n”,analog(3)); // sleep(0.1);

//

áÊ´§¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 3 ·Õ¨è ÍáÊ´§¼Å ˹ ǧàÇÅÒà¾×Íè Å´¡ÒáоÃÔº·Õâè Á´ÙÅ LCD

} }

8.2 µ Íἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áººâ»à·¹ªÔâÍÁÔàµÍà ࢠҷÕÍè ¹Ô ¾ØµÍйÒÅÍ¡ª ͧ 3 (AI-3) Potentiometer

PWR. BATT.

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB AI-3 AI-5

AX-11

STOP

SERVO MOTOR

START

DC MOTOR 5 4 3 2 1 0

68HC11 Microcontroller Activity Board

8.3 ¡´»ØÁ Run main áÅ Ç·´ÅͧËÁع᡹¢Í§µÑǵ Ò¹·Ò¹à¾×Íè »ÃѺ¤ Ò Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Analog(3) =¤ Ò·ÕÍè Ò ¹ä´ «Ö§è ¨ÐÁÕ¤Ò ÍÂÙà ÐËÇ Ò§ 0-255 µÒÁ¡ÒûÃѺµÑǵ Ò¹·Ò¹º¹á¼§Ç§¨Ãâ»à·¹ªÔâÍÁÔàµÍÃ


92

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 9 »ÃÐÁÇżŢ ÍÁÙŨҡÍÔ¹¾ØµÍйÒÅÍ¡ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áººâ»à·¹ªÔâÍÁÔàµÍà ¾Ã ÍÁÊÒÂàª×Íè Áµ Í

9.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab0901.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { if(analog(25) >= 100) // If analog value < 100 goto else { printf(“Analog(25)>100\n”); // Show result message on screen beep(); // Beep on sleep(1.0); } else { printf(“Analog(25)<100\n”); // Show another result message on screen sleep(1.0); } } }

9.2 µ Íἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áººâ»à·¹ªÔâÍÁÔàµÍà ࢠҷÕÍè ¹Ô ¾ØµÍйÒÅÍ¡ª ͧ 25 (AI-25) 9.3 ¡´»ØÁ Run main áÅ Ç·´ÅͧËÁع᡹¢Í§µÑǵ Ò¹·Ò¹ä»ÂѧµíÒá˹ §¢ÇÒÊØ´à¾×Íè »ÃѺãË ¤Ò ÊÙ§ÊØ´ Êѧࡵ ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹¨ÍáÊ´§âÁ´ÙÅ LCD áÅп §àÊÕ§¢Í§ÅíÒ⾧໠Â⫺¹ºÍà ´ AX-11 ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Analog(25)>100 ÁÕàÊÕ§´Ñ§¨Ò¡ÅíÒ⾧໠Ââ«à» ¹ª ǧæ 9.4 ·´ÅͧËÁع᡹¢Í§µÑǵ Ò¹·Ò¹ä»·Ò§¢ÇÒà¾×Íè Å´¤ Ò Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹¨ÍáÊ´§âÁ´ÙÅ LCD áÅÐ ¿ §àÊÕ§¢Í§ÅíÒ⾧໠Â⫺¹ºÍà ´ AX-11 ¼ÅÅѾ¸ : ·ÕèâÁ´ÙÅ LCD Âѧ¤§áÊ´§¢ ͤÇÒÁ Analog(25)>100 áÅÐÁÕàÊÕ§´Ñ§¨Ò¡ÅíÒ⾧໠Ââ«à» ¹ª Ç§æ ¨¹¶Ö§¨Ø´æ ˹֧è âÁ´ÙÅ LCD ¨Ðà»ÅÕÂè ¹¢ ͤÇÒÁ Analog(25)<100 áÅÐàÊÕ§¨Ò¡ÅíÒ⾧໠Â⫨Ðà§Õºŧ ¨Ò¡¼Å¡Ò÷´Åͧ¹Õàé » ¹¡ÒÃáÊ´§ãË àË繶֧¡ÒùíÒ¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ ¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ÁÒ»ÃÐÁÇżŠµ Í â´ÂÁÕ¡ÒáíÒ˹´à§×Íè ¹ä¢äÇ ÇÒ ¶ Ò¤ ҢͧÊÑ­­Ò³ÍйÒÅÍ¡·ÕÍè Ò ¹à¢ ÒÁÒÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 100 ¨ÐÁÕàÊÕ§ àµ×͹¢ÑºÍÍ¡·Ò§ÅíÒ⾧ ¾Ã ÍÁæ ¡Ñº¡ÒÃᨠ§¼Å¡ÒõÃǨÊͺ¼ Ò¹âÁ´ÙÅ LCD àÊÕ§àµ×͹¨Ð´ÑºÅ§àÁ×Íè ¤ Ңͧ ÊÑ­­Ò³ÍйÒÅÍ¡¹ ÍÂ¡Ç Ò 100 ÊÒÁÒö¹íҼšÒ÷´Åͧ¹Õäé »»ÃÐÂØ¡µ Êà ҧÃкºµÃǨ¨ÑºÍ ҧ§ ÒÂæ ä´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

93

¡Ò÷´Åͧ·Õè 10 Í Ò¹ÊÑ­­Ò³ÍÔ¹¾ØµÍйÒÅÍ¡¨Ò¡ µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB º¹ºÍà ´ AX-11 ¡Ò÷´Åͧ¹Õàé » ¹¡ÒÃÍ Ò¹¤ Ò¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ µÒí á˹ § KNOB º¹ºÍà ´ AX-11 «Ö§è ¨ÐÊдǡÁÒ¡ à¹×Íè §¨Ò¡ã¹â»Ãá¡ÃÁ Interactive C ä´ ¨´Ñ àµÃÕÂÁ¿ §¡ ª¹Ñè à¾×Íè Í Ò¹¤ ÒäÇ àÃÕºà ÍÂáÅ Ç 10.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1001.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { printf(“knob = %d\n”,knob()); // Show analog value at knob cahnnel on screen sleep(0.1); // Display delay } }

10.2 ·´ÅͧËÁع»ØÁ ·Õµè Òí á˹ § KNOB º¹ºÍà ´ AX-11 ¨Ò¡« ÒÂ仢ÇÒ áÅ ÇÊѧࡵ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ knob = ¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡·Õäè ´ ¨Ò¡¡ÒûÃѺµÑǵ Ò¹·Ò¹·Õµè Òí á˹ § KNOB º¹ºÍà ´ AX-11 ÁÕ¤Ò ÍÂÙà ÐËÇ Ò§ 0-255 â´ÂàÁ×Íè »ÃѺ价ҧ« ÒÂÊØ´Í Ò¹¤ Òä´ à» ¹ 0 áÅÐàÁ×Íè »ÃѺ价ҧ ¢ÇÒÊØ´¨ÐÍ Ò¹¤ Òä´ 255 ·´Åͧ»ÃѺ·Õ¹è Õè

PWR. BATT.

knob

=

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

128

STOP

SERVO MOTOR

START

5 4 3 2 1 0

DC MOTOR


94

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 11 㪠§Ò¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¡Ò÷´Åͧ·Õè 11-1 àª×Íè Áµ ͵ÑǵÃǨ¨Ñºáʧ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ :

ἧǧ¨ÃµÃǨ¨ÑºáʧẺ 2 àÍÒµ ¾µØ ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 1 ªØ´

㹡Ò÷´Åͧ¹Õ¨é Ðà» ¹¡ÒùíÒÍØ»¡Ã³ µÃǨ¨Ñº»ÃÔÁÒ³·Ò§¿ Ê¡Ô Ê ÀÒ¹͡·ÕÊè ÒÁÒöãË ¼Å¡ÒõÃǨ¨Ñº à» ¹áç´Ñ¹µ ÍࢠҡѺÍÔ¹¾ØµÍйÒÅÍ¡¢Í§ºÍà ´ AX-11 áÅеÑǵÃǨ¨Ñº·Õ¹è Òí ÁÒ㪠㹡Ò÷´Åͧ¹Õ¤é Í× µÑǵ Ò¹·Ò¹ á»Ã¤ ÒµÒÁáʧ â´Â¹íÒÁÒµ Íǧ¨Ãà» ¹á¼§Ç§¨ÃµÃǨ¨ÑºáʧẺãË ¼Åà» ¹áç´Ñ¹ 2 àÍÒµ ¾µØ ¤×Í àÍÒµ ¾µØ ˹֧è ãË ¼Å¡Ò÷íҧҹẺá»Ã¼Ñ¹µÃ§ ¡Å ÒǤ×ÍàÁ×Íè áʧÁÒ¡áç´Ñ¹ÁÒ¡µÒÁ Ê Ç¹ÍÕ¡àÍÒµ ¾µØ ¹Ñ¹é ¨ÐãË ¼ÅẺá»Ã ¼¡¼Ñ¹¤×Í àÁ×Íè ÁÕáʧµ¡¡ÃзºÁÒ¡ ¨ÐãË áç´Ñ¹àÍÒµ ¾µØ ÍÍ¡¹ Í 11.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1101.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { printf(“ Light value=%d\n”,analog(30)); // Show light detected value on screen sleep(1.0); // Display delay } }

11.1.2 µ ÍÊÒ¨ҡàÍÒµ ¾µØ á»Ã¼Ñ¹µÃ§¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧࢠҷÕÍè ¹Ô ¾ØµÍйÒÅÍ¡ª ͧ 30 (AI-30)

PWR. BATT.

Light

value

=

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

128

AI-30

DC MOTOR

STOP

SERVO MOTOR

START

5 4 3 2 1 0

Light


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

95

11.1.3 ¡´»ØÁ Run main áŠǹíÒä¿©ÒÂÁÒÊ Í§áʧä»Âѧἧǧ¨ÃµÃǨ¨ÑºáʧÍ ҧàµçÁ·Õè Êѧࡵ¼Å¡Ò÷íÒ§Ò¹ ¼ Ò¹¨ÍáÊ´§âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 à»ÃÕºà·Õº¡ÑºàÁ×Íè 㪠ÁÍ× ºÑ§áʧ ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Light value=xxx â´Â¤ Ò xxx ¹Ñ¹é ¨Ðà»ÅÕÂè ¹á»Å§ÍÂÙã ¹ª ǧ 0-255 ¢Ö¹é ÍÂÙ¡ ºÑ Ç ÒµÑǵÃǨ¨Ñºä´ ÃºÑ áʧµ¡¡ÃзºÁÒ¡¹ ÍÂà¾Õ§äà ¶ Òáʧµ¡¡ÃзºÁÒ¡ ¤ Ò·ÕÍè Ò ¹ä´ ¨ÐÁÒ¡µÒÁ (à¹×Íè § ¨Ò¡¹íÒÊÑ­­Ò³àÍÒµ ¾µØ Ẻá»Ã¼Ñ¹µÃ§ÁÒ㪠) ã¹·Ò§¡ÅѺ¡Ñ¹ ¶ ÒËÒ¡»ÃÔÁÒ³áʧ·ÕÁè Òµ¡¡Ãзºá¼§Ç§¨Ã µÃǨ¨Ñºáʧ¹ Í áç´Ñ¹ä¿¿ Ò·Õãè Ë ÍÍ¡¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñºáʧ¡ç¨ÐÁÕ¤Ò ¹ Í ¤ Ò·Õ¹è Òí ÁÒáÊ´§¼Å¡ç¨Ð¹ Í µÒÁä»´ ÇÂ

¡Ò÷´Åͧ·Õè 11-2 ¤Çº¤ØÁÁÍàµÍà ´Ç Âáʧ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ :

ἧǧ¨ÃµÃǨ¨ÑºáʧẺ 2 àÍÒµ ¾µØ ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 1 ªØ´ ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 1 ªØ´

俵ç

㹡Ò÷´Åͧ¹Õàé » ¹¡ÒùíҼŷÕäè ´ ¨Ò¡¡Ò÷´Åͧ·Õè 11-1 ÁÒ㪠§Ò¹ â´Â¹íÒ令Ǻ¤ØÁ¡ÒâѺÁÍàµÍÃ

11.2.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1102.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main() { int light=0; while(1) { light = analog(2);

// Declare and define light variable

// Read analog channel 2 // and store in light variable if(light>=100) // Check value over 100? light = 100; // If value over 100, set to 100 printf(“Duration %d %%\n”,light); // Show message on screen motor(0,light); // Drive motor at M-0 with light value sleep(1.0); // Delay 1 second } }


96

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

11.2.2 µ ÍÊÒ¨ҡàÍÒµ ¾µØ á»Ã¼Ñ¹µÃ§¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧࢠҷÕÍè ¹Ô ¾ØµÍйÒÅÍ¡ª ͧ 2 (AI-2)

Light

11.2.3 µ ÍÁÍàµÍà ࢠҷժè Í § M-0

AI-2

PWR. BATT.

Duration

=

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

50

DC motor 6V

STOP

SERVO MOTOR

START

5 4 3 2 1 0

DC MOTOR

11.2.4 ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C 㪠ÁÍ× ºÑ§µÑǵ Ò¹·Ò¹á»Ã¤ ÒµÒÁáʧ à¾×Íè ãË ÁáÕ Ê§µ¡¡Ãзº ã¹»ÃÔÁÒ³·Õáè µ¡µ Ò§¡Ñ¹ ¨Ò¡¹Ñ¹é Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁàµÍà áÅСÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¼ÅÅѾ¸ : áÅ ÇÃѹâ»Ãá¡ÃÁ âÁ´ÙÅ LCD ¨ÐáÊ´§¤ Ò¡ÒÃà»ÅÕÂè ¹á»Å§¢Í§áç´Ñ¹·Õ¨è Ò ÂãË á¡ ÁÍàµÍà «Ö§è à» ¹¼Å ÁÒ¨Ò¡¡Ò÷íҧҹἧǧ¨ÃµÃǨ¨Ñºáʧ ¶ ÒÁÕáʧµ¡¡Ãзº·Õáè ¼§Ç§¨ÃµÃǨ¨ÑºáʧÁÒ¡ ¤ Ò·Õäè ´ ¨ÐÁÒ¡ áµ äÁ à¡Ô¹ 100 ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ÁÍàµÍà ¨ÐËÁعâ´ÂÁÕ¤ÇÒÁàÃçÇà»ÅÕÂè ¹á»Å§µÒÁ¤ Ò Duration ·Õáè Ê´§º¹¨ÍáÊ´§¼Å ¹Ñ¹è ¤×Ͷ ÒáʧÁÒ¡ ¤ Ò Duration ÁÒ¡ ÁÍàµÍà ËÁعàÃçÇ ¶ ÒÁÕáʧµ¡¡Ãзº¹ ÍÂŧ ¡ç¨ÐãË ¼Åà» ¹µÃ§¢ ÒÁ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

97

¡Ò÷´Åͧ·Õè 12 ¡Ò÷íÒ§Ò¹¡ÑºÍÔ¹¾Øµ´Ô¨µÔ ÍÅ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ἧǧ¨ÃÊÇÔµª ¾Ã ÍÁÊÒÂàª×Íè Áµ Í

12.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1201.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { printf(“digital(11) = %d\n”,digital(11)); // Show digital value on screen sleep(0.1); // Display delay } }

12.2 µ ÍÊÒ¨ҡ¨Ø´µ Í LOW º¹á¼§Ç§¨ÃÊÇÔµª ࢠҷÕÍè ¹Ô ¾Øµ DI-11 º¹ºÍà ´ AX-11 AI-2

=

M-0 M-1 M-2 M-3

Digital(11)

0

DC MOTOR

STOP

SERVO MOTOR

START

PWR. BATT.

5 4 3 2 1 0

HIGH LOW

DI-11 DI-12 DI-13 DI-14 DI-15

SWITCH

MC68HC11E1

SER.

CHARGE

KNOB

12.3 ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C ·´Åͧ¡´ÊÇÔµª áÅ ÇÊѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD ¼ÅÅѾ¸ : ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Digital(11) = 0 àÁ×Íè ¡´ÊÇÔµª ¨Ðà»ÅÕÂè ¹à» ¹ Digital(11) = 1 ã¹¢³Ð·ÕÂè §Ñ äÁ Á¡Õ Òá´ÊÇÔµª ·¢Õè ÒÊÑ­­Ò³¨ÐÁÕ¡ÒáíÒ˹´ãË à» ¹Åͨԡ 1 ´ Ç¡Òõ ͵Ñǵ Ò¹·Ò¹áºº ¾ÅÙÍ»Ñ äÇ áµ ´Ç ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè digital ã¹ Interactive C ¨ÐÁÍ§Ç Ò ¡ÒÃäÁ ¡´ÊÇÔµª ¨ÐãË ¼ÅÅѾ¸ ¡ÅѺÍÍ¡ÁÒà» ¹ 0 «Ö§è µÃ§¢ ÒÁ¡ÑºÊ¶Ò¹Ð·Ò§ÎÒà ´áÇà àÁ×Íè à¡Ô´¡Òá´ÊÇÔµª ¢ÒÊÑ­­Ò³¶Ù¡µ ͡Ѻ¡ÃÒÇ´ ¿ §¡ ª¹Ñè digital ¨ÐãË ¼ÅÅѾ¸ ¢Í§¡Ò÷íÒ§Ò¹ÍÍ¡ÁÒ à» ¹ 1 ¹Ñ¹è ¤×Í¿ §¡ ª¹Ñè digital ¨ÐãË ¤ÇÒÁʹ㨵 ;ĵԡÃÃÁÇ Ò ÊÇÔµª µÍ ǧ¨Ã¤×Íà§×Íè ¹ä¢·Õàè » ¹¨ÃÔ§ ¤ÇÃãË ¼ÅÅѾ¸ à» ¹ 1


98

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.5 ¿ §¡ ª¹Ñè ¢Í§ÊÇÔµª START áÅÐ STOP ÊÇÔµª START áÅÐ STOP ·Õµè ´Ô µÑ§é ÁÒº¹ºÍà ´ AX-11 ã¹ Interactive C ¨Ñ´Ç Òà» ¹ÍÔ¹¾ØµÍÕ¡ ª¹Ô´Ë¹Öè§ ¨Ö§ÁÕ¡ÒÃÊà ҧ¿ §¡ ªÑè¹ÁÒÃͧÃѺà¾×èÍà¾ÔèÁ¤ÇÒÁÊдǡ㹡ÒþѲ¹Ò§Ò¹ÁÒ¡¢Öé¹ ¿ §¡ ªÑè¹·Õè à¡ÕÂè Ç¢ ͧ¡ÑºÊÇÔµª ·§Ñé ÊͧµÑÇÁÕ 4 µÑǤ×Í ¿ §¡ ª¹Ñè start_button , stop_button , start_press áÅÐ stop_press

3.5.1 ¿ §¡ ª¹Ñè start_button ãª Í Ò¹¤ Òà¾×è͵ÃǨÊͺʶҹСÒá´ÊÇÔµª START ÃٻẺ¿ §¡ ªÑè¹ int start_button()

¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 1 ¶ ÒÊÇÔµª START ¶Ù¡¡´ ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 0 ¶ ÒÊÇÔµª START äÁ ¶¡Ù ¡´ µÑÇÍ ҧ·Õè 3.5.1 while(!start_button());

//

beep();

//

¶ ÒËÒ¡ÁÕ¡Òá´»ØÁ START ¨Ð·íÒ¤íÒÊÑ§è ¶Ñ´ä» Êà ҧàÊÕ§ µÔ´é

à» ¹¡ÒõÃǨÊͺ¡Òá´ÊÇÔµª START ·ÕÁè ¡Õ ÒÃàÃÕ¡¿ §¡ ª¹Ñè ÀÒÂãµ à§×Íè ¹ä¢¢Í§¤íÒÊѧè while ¹Ñ¹è ¤×Í ¶ ÒÁÕ¡Òá´ÊÇÔµª START ¿ §¡ ª¹Ñè start_button() ¨ÐãË ¼ÅÅѾ¸ à» ¹ 1 áµ ¨Ð¶Ù¡âÍà»ÍàÃàµÍà ! ¡ÅѺÅͨԡ ·íÒãË ¼ÅÅѾ¸ Ê´Ø · ÒÂà» ¹ 0 ¨Ö§·íÒãË à§×Íè ¹ä¢¢Í§ while ¡ÅÒÂà» ¹ à·ç¨ ¨Ö§ÊÒÁÒö ÍÍ¡¨Ò¡à§×Íè ¹ä¢¢Í§¤íÒÊѧè while ä»»ÃÐÁÇżŤíÒÊÑ§è ¶Ñ´ä» «Ö§è ¡ç¤Í× Êà ҧàÊÕ§´ ǤíÒÊѧè beep(); ´Ñ§¹Ñ¹é ¼ÅÅѾ¸ ¢Í§â»Ãá¡ÃÁ¹Õ¤é Í× ·Ñ¹·Õ·ÁÕè ¡Õ Òá´ÊÇÔµª START ¨ÐÁÕàÊÕ§ µÔ´é ´Ñ§¢Ö¹é 1 ¤Ãѧé 㹡óշÕèµ Í§¡ÒÃãË ÁÕÊÑ­­Ò³àÊÕ§´Ñ§¢Öé¹àÁ×èÍÁÕ¡Òá´áÅлŠÍÂÊÇÔµª áÅ Ç à¾×èÍÅ´¡Òà ú¡Ç¹¨Ò¡¡Òá´ÊÇÔµª ÊÒÁÒöà¾ÔÁè àµÔÁâ»Ãá¡ÃÁÍÕ¡àÅ硹 ÍÂä´ ´§Ñ ¹Õé while(!start_button()); // ¶ ÒÁÕ¡Òá´ÊÇÔµª START ¨Ð·íÒ¤íÒÊѧ è ¶Ñ´ä» while(start_button()); // ¶ һŠÍÂÊÇÔµª START ¨Ð·íÒ¤íÒÊѧ è ¶Ñ´ä» beep(); // Êà ҧàÊÕ§ µÔ´ é


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

99

3.5.2 ¿ §¡ ª¹Ñè stop_button

ãª Í Ò¹¤ Òà¾×è͵ÃǨÊͺʶҹСÒá´ÊÇÔµª STOP ÃٻẺ¿ §¡ ªÑè¹ int stop_button()

¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 1 ¶ ÒÊÇÔµª STOP ¶Ù¡¡´ ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 0 ¶ ÒÊÇÔµª STOP äÁ ¶¡Ù ¡´ µÑÇÍ ҧ·Õè 3.5.2 while(!stop_button());

//

beep();

//

¶ ÒÁÕ¡Òá´ÊÇÔµª STOP ¨Ð·íÒ¤íÒÊÑ§è ¶Ñ´ä» Êà ҧàÊÕ§

à» ¹¡ÒõÃǨÊͺ¡Òá´ÊÇÔµª STOP ·ÕèÁÕ¡ÒÃàÃÕ¡¿ §¡ ªÑè¹ÀÒÂãµ à§×è͹䢢ͧ¤íÒÊÑè§ while ¨ÐãË ¼ÅÅѾ¸ àËÁ×͹¡Ñº¿ §¡ ª¹Ñè start_button à¾Õ§ᵠ¡ÒáÃзíÒà¡Ô´¢Ö¹é ·ÕÊè ÇÔµª STOP ´Ñ§¹Ñ¹é ¼ÅÅѾ¸ ¨Ò¡ªØ´¤íÒÊÑ§è ¹Õé ·Ñ¹·Õ·ÁÕè ¡Õ Òá´ÊÇÔµª STOP ¨ÐÁÕàÊÕ§ µÔ´é ´Ñ§¢Ö¹é

3.5.3 ¿ §¡ ª¹Ñè start_press

㪠ÍÒ ¹¤ Òà¾×Íè µÃǨÊͺʶҹСÒá´ÊÇÔµª START áÅÐàÁ×Íè »Å ÍÂÊÇÔµª ¨ÐãË Ê­ Ñ ­Ò³àÊÕ§ ÍÍ¡ÁÒâ´ÂÍѵâ¹ÁÑµÔ ´Ñ§¹Ñ¹é ¶ ÒÁÕ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õ¨é §Ö à·Õº෠ҡѺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁµ Í仹Õé while(!start_button());

//

while(start_button());

//

beep();

//

ÃÍ¡Òá´ÊÇÔµª START ÃÍ¡ÒûŠÍÂÊÇÔµª START Êà ҧàÊÕ§ µÔ´é 1 ¤Ãѧé

ÃٻẺ¿ §¡ ªÑè¹ void start_press(void)

3.5.4 ¿ §¡ ª¹Ñè stop_press

㪠ÍÒ ¹¤ Òà¾×Íè µÃǨÊͺʶҹСÒá´ÊÇÔµª STOP áÅÐàÁ×Íè »Å ÍÂÊÇÔµª ¨ÐãË Ê­ Ñ ­Ò³àÊÕ§ ÍÍ¡ÁÒâ´ÂÍѵâ¹ÁÑµÔ ´Ñ§¹Ñ¹é ¶ ÒÁÕ¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õ¨é §Ö à·Õº෠ҡѺ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁµ Í仹Õé while(!stop_button());

//

while(stop_button());

//

beep();

//

ÃٻẺ¿ §¡ ªÑè¹ void stop_press(void)

ÃÍ¡Òá´ÊÇÔµª STOP ÃÍ¡ÒûŠÍÂÊÇÔµª STOP Êà ҧàÊÕ§ µÔ´é 1 ¤Ãѧé


100

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 13 Í Ò¹¤ Ò¨Ò¡ÊÇÔµª STOP º¹ºÍà ´ AX-11 ÍØ»¡Ã³ à¾ÔÁè àµÔÁ :

ÁÍàµÍà 俵ç ¾Ã ÍÁÊÒÂàª×Íè Áµ Í

1 ªØ´

13.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1301.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(!stop_button()) // Do loop for checking STOP pressed { fd(0); // Drive motor channel 0 } off(0); // Off motor channel 0 beep(); // Beep on }

13.2 µ ÍÁÍàµÍà 俵çࢠҷժè Í § M-0

PWR. BATT.

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

AX-11

STOP

SERVO MOTOR

START

DC MOTOR 5 4 3 2 1 0

68HC11 Microcontroller Activity Board

DC motor 6V

¡´à¾×Íè ËÂØ´¡Ò÷íÒ§Ò¹

13.3 ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª STOP ¼ÅÅѾ¸ : ÁÍàµÍà ËÁعÍ ҧµ Íà¹×Íè §¨¹¡Ãзѧè àÁ×Íè ¡´ÊÇÔµª STOP ÁÍàµÍà ¨ÐËÂØ´ËÁع·Ñ¹·Õ ¾Ã ÍÁ¡Ñºä´ Â¹Ô àÊÕ§ µÔ´é 1 ¤Ãѧé


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

101

13.4 á¡ ä¢â»Ãá¡ÃÁã¹¢ Í 13.1 ´Ñ§¹Õé void main(void) { fd(0); // Drive motor channel 0 stop_press(); // Use stop_press function for STOP switch pressed detection off(0); // Off motor channel 0 }

¼ÅÅѾ¸ : ÁÍàµÍà ËÁعÍ ҧµ Íà¹×Íè §¨¹¡Ãзѧè àÁ×Íè ¡´ÊÇÔµª STOP ÁÍàµÍà ¨ÐËÂØ´ËÁع·Ñ¹·Õ ¾Ã ÍÁ¡Ñºä´ Â¹Ô àÊÕ§ µÔ´é 1 ¤ÃÑ§é ¹Ñ¹è ¤×Í ÁռšÒ÷íҧҹઠ¹à´ÕÂǡѺ㹢 Í 13.3 ¨Ò¡¡Ò÷´Åͧ¹Õ¨é ÐàËç¹Ç Ò ÊÒÁÒöµÃǨÊͺ¡Òá´ÊÇÔµª STOP ä´ ´Ç ¡ÒÃ㪠¿§ ¡ ª¹Ñè stop_button ËÃ×Í stop_press ¡çä´ áµ ¶Ò Ëҡ㪠stop_press ¨Ð·íÒãË â»Ãá¡ÃÁÊѹé ŧ


102

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 14 Í Ò¹¤ ÒÊÇÔµª STOP áÅÐ START ÍØ»¡Ã³ à¾ÔÁè àµÔÁ :

ÁÍàµÍà 俵ç ¾Ã ÍÁÊÒÂàª×Íè Áµ Í

1 ªØ´

14.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1401.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { while(1) { start_press(); fd(3); stop_press(); bk(3); } }

// // // //

Check START switch pressed Drive motor channel 3 Check STOP switch pressed Reverse motor spin direction

14.2 µ ÍÁÍàµÍà 俵çࢠҷժè Í § M-3 14.3 ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª START áÅÐ STOP ÊÅѺ¡Ñ¹ ¼ÅÅѾ¸ : ÁÍàµÍà ¨ÐËÁعÍ ҧµ Íà¹×Íè §àÁ×Íè ¡´ÊÇÔµª START áÅÐàÁ×Íè ¡´ÊÇÔµª STOP ÁÍàµÍà ¨ÐËÁعà»ÅÕÂè ¹ ·ÔÈ·Ò§·Ñ¹·Õ áÅзء¤ÃÑ§é ·Õ¡è ´ÊÇÔµª ¨Ðä´ Â¹Ô àÊÕ§ µÔ´é 1 ¤Ãѧé 14.4 ¶ Òµ ͧ¡ÒÃËÂØ´¡Ò÷íÒ§Ò¹ãË ¡´»ØÁ STOP ·Õâè »Ãá¡ÃÁ Interactive C ËÃ×Í» ´ÊÇÔµª POWER


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

103

3.6 ¿ §¡ ª¹Ñè à¡ÕÂè ǡѺàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ àÍÒµ ¾µØ ´Ô¨µÔ Íź¹ºÍà ´ AX-11 ÁÕÁÒ¡¶Ö§ 9 ª ͧ¤×Í OUT-0 ¶Ö§ OUT-8 â»Ãá¡ÃÁ Interactive C ä´ ¨´Ñ àµÃÕÂÁ¿ §¡ ª¹Ñè ÊíÒËÃѺµÔ´µ ͡ѺàÍÒµ ¾µØ ´Ô¨µÔ ÍŹÕé 3 ¿ §¡ ª¹Ñè ¤×Í clear_digital_out , set_digital_out áÅÐ test_digital_out «Öè§ÊÑ­­Ò³¨Ò¡àÍÒµ ¾Øµ´Ô¨ÔµÍŨÐÁÕ¤ Ңͧ¡ÃÐáÊ«Íà ʻÃÐÁÒ³ 20mA ¨Ö§ÊÒÁÒö¹íÒä»»ÃÐÂØ¡µ 㪠ÊÑ觧ҹ¤Çº¤ØÁÍØ»¡Ã³ ÀÒ¹͡ä´

3.6.1 ¿ §¡ ª¹Ñè clear_digital_out 㪠¡íÒ˹´¤ ÒãË ª ͧÊÑ­­Ò³àÍÒµ ¾Øµ´Ô¨ÔµÍÅ·Õèª Í§ã´æ à» ¹Åͨԡ 0 ÃٻẺ¿ §¡ ªÑè¹ int clear_digital_out (int p) ¾ÒÃÒÁÔàµÍà p ¤×Í ª ͧàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õµè Í §¡ÒáíÒ˹´¤ ÒãË à» ¹Åͨԡ 0 ÁÕ¤Ò 0-8 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int µÑÇÍ ҧ·Õè 3.6.1 clear_digital_out(6);

¡íÒ˹´ãË àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õªè Í § OUT-6 à» ¹Åͨԡ 0

3.6.2 ¿ §¡ ª¹Ñè set_digital_out 㪠¡íÒ˹´¤ ÒãË ª ͧÊÑ­­Ò³àÍÒµ ¾Øµ´Ô¨ÔµÍÅ·Õèª Í§ã´æ à» ¹Åͨԡ 1 ÃٻẺ¿ §¡ ªÑè¹ int set_digital_out (int p)

¾ÒÃÒÁÔàµÍà p ¤×Í ª ͧàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õµè Í §¡ÒáíÒ˹´¤ ÒãË à» ¹Åͨԡ 0 ÁÕ¤Ò 0-8 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int


104

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 3.6.2 set_digital_out(2);

¡íÒ˹´ãË àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õªè Í § OUT-2 à» ¹Åͨԡ 1

3.6.3 ¿ §¡ ª¹Ñè test_digital_out ãª Í Ò¹¤ ÒÅͨԡ¢Í§àÍÒµ ¾Øµ´Ô¨ÔµÍÅ·Õèª Í§ã´æ ÃٻẺ¿ §¡ ªÑè¹ int test_digital_out (int p)

¾ÒÃÒÁÔàµÍà p ¤×Í ª ͧÊÑ­­Ò³àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õµè Í §¡ÒÃÍ Ò¹¤ Ò ä´ á¡ ª ͧ 0-8 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int «Öè§à» ¹¤ ÒÅͨԡ·ÕèÍ Ò¹ä´ ¨Ò¡àÍÒµ ¾Øµ´Ô¨ÔµÍŪ ͧ·Õè¡íÒ˹´ µÑÇÍ ҧ·Õè 3.5.3 int rerult; result = test_digital_out(8);

¡íÒ˹´ãË ÍÒ ¹¤ ÒÅͨԡ¢Í§ÍÒµ ¾µØ ´Ô¨µÔ ÍÅ·Õªè Í § OUT-8


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

105

3.7 ¿ §¡ ª¹Ñè ¹ÑºàÇÅÒ ¿ §¡ ª¹Ñè ¹Ñº¤ ÒàÇÅÒ¡Ò÷íÒ§Ò¹·Õãè ª ã¹ Interactive C ÁÕ 3 µÑǤ×Í reset_system_time , seconds áÅÐ mseconds ÁÕÃÒÂÅÐàÍÕ´´Ñ§¹Õé

3.7.1 ¿ §¡ ª¹Ñè reset_system_time 㪠¡íÒ˹´¨Ø´Í Ò§ÍÔ§¢Í§àÇÅÒà¾×èÍàÃÔèÁ¡ÒÃѺ µ ͧ㪠à ÇÁ¡Ñº¿ §¡ ªÑè¹ seconds ËÃ×Í mseconds µ Íä» à¾×èÍÍ Ò¹¤ ÒàÇÅÒ·Õè¹Ñºä´ ÃٻẺ¿ §¡ ªÑè¹ void reset_system_time (void)

3.7.2 ¿ §¡ ª¹Ñè seconds 㪠¹ºÑ ¤ ÒàÇÅÒ ¨Ò¡¨Ø´Í Ò§ÍÔ§àÃÔÁè µ ¹·Õ¡è Òí ˹´â´Â¿ §¡ ª¹Ñè reset_system_time áÅÐÊÔ¹é ÊØ´·Õ¡è Òà àÃÕ¡¿ §¡ ª¹Ñè seconds ÃٻẺ¿ §¡ ªÑè¹ float seconds (void)

¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float «Öè§à» ¹¤ ÒàÇÅÒ·Õè¹Ñºä´ ã¹Ë¹ ÇÂÇÔ¹Ò·Õ

3.7.3 ¿ §¡ ª¹Ñè mseconds 㪠㹡ÒùѺ¤ ÒàÇÅÒ ¨Ò¡¨Ø´Í Ò§ÍÔ§àÃÔÁè µ ¹·Õµè Òí á˹ §¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè reset_system_time áÅÐ ÊÔ¹é ÊØ´·Õ¡è ÒÃàÃÕ¡¿ §¡ ª¹Ñè mseconds ÃٻẺ¿ §¡ ªÑè¹ long mseconds (void)

¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃԧẺ long «Öè§à» ¹¤ ÒàÇÅÒ·Õè¹Ñºä´ ã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ


106

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 15 ¹Ñº¤ ÒàÇÅÒ´ Ç Interactive C 15.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1501.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download áŠǵÒÁ´ Ç»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C ¨Ò¡¹Ñ¹é ÃÍÊÑ¡¤ÃÙá Å Ç¡´ÊÇÔµª STOP º¹ºÍà ´ AX-11 Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD void main(void) { printf(“Time counter\n”);

//

reset_system_time();

//

while(!stop_button());

//

áÊ´§¢ ͤÇÒÁàÃÔÁè µ ¹ à¤ÅÕÂà ¤Ò áÅÐàÃÔÁè µ ¹¡ÒùѺàÇÅÒ Ãͨ¹¡Ç Ò¨ÐÁÕ¡Òá´ÊÇÔµª STOP

printf(“time %f sec\n”,seconds()); //

¹íÒ¤ ÒàÇÅÒä»áÊ´§·Õâè Á´ÙÅ LCD

}

¼ÅÅѾ¸ : àÁ×Íè àÃÔÁè µ ¹·íÒ§Ò¹ âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Time counter áÅÐàÃÔÁè µ ¹¨ÑºàÇÅҷѹ·Õ áÅШйѺ ¤ ÒàÇÅÒ仨¹¡Ç Ò¨ÐÁÕ¡Òá´ÊÇÔµª STOP ¨Ò¡¹Ñ¹é ¹íÒ¤ ÒàÇÅÒ·Õ¹è ºÑ ä´ ÁÒáÊ´§·Õâè Á´ÙÅ LCD ¾Ã ÍÁ¡ÑºËÂØ´¡Òà ·íÒ§Ò¹·Ñ§é ËÁ´ ËÒ¡µ ͧ¡ÒÃàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹ãËÁ ãË ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C ËÃ×Í» ´ à» ´ÊÇÔµª POWER ãËÁ 15.2 ¶ Òµ ͧ¡ÒùѺàÇÅÒã¹Ë¹ ÇÂÁÔÅÅÔÇ¹Ô Ò·Õ ãË á¡ ä¢â»Ãá¡ÃÁ·Õºè Ã÷ѴÊØ´· Ò ¨Ò¡ printf(“time %f sec\n”,seconds());

à» ¹ printf(“time %d ms\n”,mseconds());

¨Ò¡¹Ñ¹é ´Òǹ âËÅ´â»Ãá¡ÃÁáÅ Ç·´Êͺ¡Ò÷íÒ§Ò¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

107

3.8 ¿ §¡ ª¹Ñè ¢Ñºà«Íà âÇÁÍàµÍÃ

º¹ºÍà ´ AX-11 ÁÕǧ¨Ãàª×èÍÁµ Íà¾×è͢Ѻà«Íà âÇÁÍàµÍà 6 ª ͧ (SERVO MOTOR 0-5) â»Ãá¡ÃÁ Interactive C ¨Ö§ÁÕ¿ §¡ ªÑè¹áÅФíÒÊÑè§ÃͧÃѺ¡ÒâѺà«Íà âÇÁÍàµÍà ÍÂÙ 2 µÑǤ×Í ¿ §¡ ªÑè¹ init_expbd_servos áÅФíÒÊѧè servox

3.8.1 ¿ §¡ ª¹Ñè init_expbd_servos

㪠¡íÒ˹´¤ÇÒÁÊÒÁÒö㹡Òû ´-à» ´Ç§¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¢Ñºà«Íà âÇÁÍàµÍà ÃٻẺ¿ §¡ ªÑè¹ int init_expbd_servos(int p)

¾ÒÃÒÁÔàµÍà p ¤×Í ¤ Ò·Õãè ª ¡Òí ˹´¡Òû ´-à» ´Ç§¨Ã¢Ñºà«Íà âÇÁÍàµÍà 1 - à» ´¡Ò÷íÒ§Ò¹ 0 - » ´¡Ò÷íÒ§Ò¹ ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ÃÙ¨ ¡Ñ ¡Ñºà«Íà âÇÁÍàµÍà à«Íà âÇÁÍàµÍà ໠¹ÁÍàµÍÃ ä¿µÃ§áººË¹Ö§è ·ÕÁè ¡Õ Ò÷íÒ§Ò¹¾ÔàÈÉ ¹Ñ¹è ¤×Í¡Òà ËÁع¢Í§à«Íà âÇÁÍàµÍà ¹¹Ñé ¨ÐäÁ ä´ ËÁع໠¹ÍÔÊÃÐàËÁ×͹ÁÍàµÍà ·ÇÑè æ ä» â´Âª ǧÃÐÂСÒÃËÁع»¡µÔ¨ÐÍÂÙ ÃÐËÇ Ò§ 90-270 ͧÈÒ µíÒá˹ §¡ÒÃËÁع¢Í§á¡¹ÁÍàµÍà ã¹à«Íà âÇÁÍàµÍà ¹ÊÕé ÒÁÒö¤Çº¤ØÁä´ Í ҧáÁ ¹ ÂíÒ à¹×Íè §¨Ò¡ÀÒÂã¹à«Íà âÇÁÍàµÍà ÁÇÕ §¨ÃÍÔàÅç¡·ÃÍ¹Ô¡Ê ·Òí ˹ Ò·Õµè ÃǨÊͺµíÒá˹ §¢Í§à«Íà âÇÁÍàµÍà ÍÂÙ µÅÍ´àÇÅÒ ÅѡɳСÒõÃǨÊͺ¨Ð㪠¡Òû ͹¡ÅѺ¤ ÒµíÒá˹ §¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áŠǹíÒ¤ Ò¹Õäé » à»ÃÕºà·Õº¡Ñº¤ Ò¾ÑÅÊ ·»Õè Í ¹à¢ Ò·Ò§¢Ò¤Çº¤ØÁ ¤ Ңͧ¼Åµ Ò§·Õäè ´ ¨Ðä»»ÃѺµíÒá˹ §¢Í§ÁÍàµÍà ¨¹äÁ à¡Ô´¤ Ҽŵ Ò§ ¡ç¨Ðä´ µÒí á˹ §¢Í§ÁÍàµÍà ·áÕè Á ¹ÂíÒ (¢)

+V

¤Çº¤ØÁ ÊÕ¢ÒÇ ÊÕá´§ ÊÕ´Òí

ÃÙ»áÊ´§â¤Ã§Êà ҧ¢Í§à«Íà âÇÁÍàµÍà (¡) Ãٻà ҧÀÒ¹͡ (¢) Ãкºà¿ ͧ·´ÀÒÂã¹ (¤) µíÒá˹ §ÊÒµ Í㪠§Ò¹

(¤) Servo Motor

(¡)


108

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ·Õè 3.8.1 init_expbd_servos(1);

à» ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨ÃÊà ҧÊÑ­­Ò³¤Çº¤ØÁà«Íà âÇÁÍàµÍà ·§Ñé ËÁ´ã¹Ãкº init_expbd_servos(0);

» ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨ÃÊà ҧÊÑ­­Ò³¤Çº¤ØÁ¡ÒÃà«Íà âÇÁÍàµÍà ·§Ñé ËÁ´ã¹Ãкº

3.8.2 ¤íÒÊѧè servox à» ¹¤íÒÊÑè§àÅ×Í¡¢Ñºà«Íà âÇÁÍàµÍà ÃٻẺ servox = value; â´Â·Õè x ¤×Í ª ͧÊÑ­­Ò³¢Í§à«Íà âÇÁÍàµÍà ÁÕ¤Ò 0-5 value ¤×Í ¢ ÍÁÙÅÊíÒËÃѺ¢Ñºà«Íà âÇÁÍàµÍà ÁÕ¤Ò ã¹ª ǧ 600-4200 ·íÒãË ä´ ÁÁØ ã¹¡ÒÃËÁØ¹à· Ò ¡Ñº 0-180 ͧÈÒ

ÁØÁ㹡ÒÃËÁع¢Í§à«Íà âÇÁÍàµÍà ·Õµè Òí á˹ § 0 ͧÈÒ ¤ Ò value ¢Í§¤íÒÊѧè servo ෠ҡѺ 600 µíÒá˹ § 90 ͧÈÒ ¤ Ò value ¢Í§¤íÒÊѧè servo ෠ҡѺ 2400 µíÒá˹ § 180 ͧÈÒ ¤ Ò value ¢Í§¤íÒÊѧè servo ෠ҡѺ 4200 ¶ ÒËÒ¡µ ͧ¡ÒÃãË à«Íà âÇÁÍàµÍà ËÁع价ÕèÁØÁã´æ ãË ·íÒ¡Òäíҹdzà·Õº´ Ç¡ÒÃ㪠ËÅÑ¡ ¢Í§ºÑ­­ÑµäÔ µÃÂÒ§¤ â´Â¤ ҷѧé ËÁ´ÀÒÂã¹ÁØÁ 180 ͧÈÒ෠ҡѺ 4200-600 = 3600 ¹Ñ¹è ¤×Í ¡Ò÷ըè Ð ËÁØ¹ä» 1 ͧÈÒ ¤ Ò value ¨Ðµ ͧà¾ÔÁè Íա෠ҡѺ 3600/180 = 20 ´Ñ§¹Ñ¹é

SERVO MOTOR 6Vdc

SERVO MOTOR 6Vdc

SERVO MOTOR 6Vdc

0 ͧÈÒ ¤ Ò෠ҡѺ 600

90 ͧÈÒ ¤ Ò෠ҡѺ 2400

180 ͧÈÒ ¤ Ò෠ҡѺ 4200


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

109

·Õµè Òí á˹ §àÃÔÁè µ ¹ 0 ͧÈÒ ¤ Ò value ෠ҡѺ 600 ¶ Òµ ͧ¡ÒÃãË ËÁع价յè Òí á˹ § 1 ͧÈÒ ¤ Ò value ෠ҡѺ 600+20 ¶ Òµ ͧ¡ÒÃãË ËÁع价յè Òí á˹ § 2 ͧÈÒ ¤ Ò value ෠ҡѺ 600+2*(20) ¶ Òµ ͧ¡ÒÃãË ËÁع价յè Òí á˹ § d ͧÈÒ ¤ Ò value ෠ҡѺ 600+d*(20) ´Ñ§¹Ñ¹é ¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§¤ Ò¢ ÍÁÙÅ·Õµè Í §¡ÒÃ(value) ¡Ñº¤ Ò¼ÅÅѾ¸ ¢Í§ÁØÁ(d) ã¹Ë¹ ÇÂͧÈÒ ¤×Í value = 600 + (d N 20) µÑÇÍ ҧ·Õè 3.8.2 µ ͧ¡ÒâѺà«Íà âÇÁÍàµÍà ·ªÕè Í § 2 ËÁعä»ÂѧÁØÁ 20 ͧÈÒ ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁ ä´ ´§Ñ ¹Õé à» ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢Ñºà«Íà âÇÁÍàµÍà servo2 = 1000; // ¡íÒ˹´¤ Ò㹡ÒÃËÁع â´Â¤íҹdz¤ Ò value ä´ à· Ò¡Ñº // 600+20*20 = 1000 init_expbd_servos(0); // » ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢Ñºà«Íà âÇÁÍàµÍà init_expbd_servos(1); //

¡Ò÷´Åͧ·Õè 16 ¢Ñºà«Íà âÇÁÍàµÍà 16.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1601.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { int i=600; // init_expbd_servos(1); // while(!stop_button())// { servo4 = i; // msleep(1000L); // i+=100; // if(i>4200){i=600;}// } init_expbd_servos(0); // beep(); // }

16.2 µ Íà«Íà âÇÁÍàµÍà ࢠҷÕè SERVO ª ͧ 4

Declare and define servo_drive value Enable servo motor driver Check STOP switch pressed Drive servo motor ch-4 with servo_drive value Delay 1 second Increase value step = 100 Check angle>180 deg., set to origin Disable servo motor driver Beep on


l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

CHARGE

KNOB MC68HC11E1

M-0 M-1 M-2 M-3

PWR. BATT.

SER.

110

AX-11

68HC11 Microcontroller Activity Board

SER M O VO T 6Vd OR c

START

SERVO MOTOR

4 3 2 1 0

DC MOTOR

STOP

¡´à¾×Íè ËÂØ´¡Ò÷íÒ§Ò¹

S

+

-

16.3 ¡´»ØÁ Run main ·Õâè »Ãá¡ÃÁ Interactive C Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§à«Íà âÇÁÍàµÍà ¼ÅÅѾ¸ : à«Íà âÇÁÍàµÍà ¨ÐËÁعà»ÅÕÂè ¹µíÒá˹ §à» ¹¨Ñ§ËÇÐ ¨Ñ§ËÇÐÅÐ 5 ͧÈÒã¹·Ø¡æ 1 ÇÔ¹Ò·Õ àÁ×Íè ¤Ãº 180 ͧÈÒ¡ç¨ÐËÁعǹ¡ÅѺÁÒàÃÔÁè µ ¹ãËÁ ·µÕè Òí á˹ § 0 ͧÈÒ 16.4 ¡´ÊÇÔµª STOP áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹ ¼ÅÅѾ¸ : à«Íà âÇÁÍàµÍà ¨ÐËÁعà»ÅÕÂè ¹µíÒá˹ §ä»µÅÍ´àÇÅÒ ¨¹¡Ãзѧè àÁ×Íè ÊÇÔµª STOP ¶Ù¡¡´ ¨Ðä´ Â¹Ô àÊÕ§ µÔ´é Ë¹Ö§è ¤ÃÑ§é ¾Ã ÍÁ¡Ñ¹¹Ñ¹é à«Íà âÇÁÍàµÍà ¨ÐËÂØ´ËÁع


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

111

3.9 ¿ §¡ ª¹Ñè à¡ÕÂè ǡѺâÁ´ÙÅÃѺ-Ê §áʧÍÔ¹¿ÃÒàô ÍÕ¡¤Ø³ÊÁºÑµ¾Ô àÔ ÈÉ·Ò§ÎÒà ´áÇÃ Ë¹Ö§è ·ÕÁè ºÕ ¹ºÍà ´ AX-11 ¤×Í ÁÕâÁ´ÙÅÃѺ-Ê §áʧÍÔ¹¿ÃÒàô ¾Ã ÍÁ㪠§Ò¹ 1 ªØ´ â´Â LED ÍÔ¹¿ÃÒàô·Õèãª Ê §áʧÍÔ¹¿ÃÒàÃ´ä´ ÃѺ¡ÒÃàª×èÍÁµ ͡Ѻǧ¨ÃÊà ҧ ÊÑ­­Ò³¤ÇÒÁ¶Õè 38 kHz à¾×Íè ¼ÊÁ¡Ñº¢ ÍÁÙÅ·ÕÊè § ÍÍ¡ÁÒ ã¹¡ÒÃ㪠§Ò¹Ê ǹ¹Õé Interactive C ÁÕ¿§ ¡ ª¹Ñè ·ÕèࢠÒä»·íÒ¡ÒÃ૵áÅÐà¤ÅÕÂà ºÔµÀÒÂã¹ÃÕ¨ÔÊàµÍà ·Õè¤Çº¤ØÁ¢ÒÊÑ­­Ò³Êà ҧÊÑ­­Ò³à¾×èÍÊ §áʧÍÔ¹ ¿ÃÒàô â´Â¶Ù¡¡íÒ˹´·ÕèÎÒà ´áÇà àÃÕºà ÍÂáÅ Ç·ÕèáÍ´à´ÃÊ 0x1000 ºÔµ 6 Ê Ç¹¢ ÍÁÙŢͧâÁ´ÙÅÃѺ áʧÍÔ¹¿ÃÒàô¨ÐÍÂÙ· ºÕè µÔ 2 ¢Í§áÍ´à´ÃÊà´ÕÂǡѹ µÑÇÊ §ÍÔ¹¿ÃÒàô¨Ð¶Ù¡àÃÕÂ¡Ç Ò IR áÅÐâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz ¨Ð¶Ù¡àÃÕÂ¡Ç Ò IRM àÁ×Íè ÁÕ¡ÒÃÃѺ¢ ÍÁÙÅ´Ôº·ÕÁè ҡѺáʧÍÔ¹¿ÃÒàôáÅзíÒ¡ÒöʹÊÑ­­Ò³¾ÒË 38kHz ÍÍ¡ä»áŠǨÐä´ ¢Í ÁÙÅ ·Õàè » ¹¡ÒáÅѺÅͨԡÍÍ¡ÁÒ ´Ñ§¹Ñ¹é ¶ Ò·íÒ¡ÒáÅѺ¤ ÒÅͨԡÍÕ¡¤ÃÑ§é ¡ç¨Ðä´ ¢Í ÁÙŨÃÔ§·Õµè ÇÑ Ê §ä´ ʧ ÁÒãË ¤íÒÊѧè áÅп §¡ ª¹Ñè ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹ã¹Ê ǹ¹ÕÁé Õ 3 µÑǤ×Í ¤íÒÊѧè bit_set(0x1000,0x40);, bit_clear(0x1000,0x40); áÅп §¡ ª¹Ñè peek à¡ÕÂè ǡѺ¡ÒÃÊ §áÅÐÃѺ¢ ÍÁÙż Ò¹áʧÍÔ¹¿ÃÒàô 㹡ÒÃÃÑºÊ §áʧÍÔ¹¿ÃÒàôÁҵðҹ¹Ñ¹é ¨Ðµ ͧÁÕ ¡ÒüÊÁÊÑ­­Ò³¾ÒË (carrier signal) ࢠÒä»´ Ç â´ÂÁÕ¤ÇÒÁ¶Õ»è ÃÐÁÒ³ 38kHz ´Ñ§¹Ñ¹é ·ÕÀè Ò¤ÃѺ¨Ö§µ ͧÁÕ ¤ÇÒÁÊÒÁÒö㹡ÒöʹÊÑ­­Ò³¾ÒË 38kHz ¹ÕÍé Í¡ à¾×Íè ¨Ðä´ Ê­ Ñ ­Ò³¢ ÍÁÙÅ´Ô¨µÔ ÍŨÃÔ§æ ·Õµè Í §¡ÒùíÒ ä»ãª ´Ñ§áÊ´§ã¹ÃÙ» ¤ ÒÅͨԡ·Õäè ´ ¨Ð¡ÅѺÅͨԡ¡Ñº¤ Ò»¡µÔÍÂÙ â´Â㹪 ǧäÁ ÁÊÕ ­ Ñ ­Ò³ àÍÒµ ¾µØ ¢Í§ÀÒ¤ÃѺ áʧÍÔ¹¿ÃÒàô¨ÐÁÕáç´Ñ¹ 5V áµ àÁ×Íè ä´ ÃºÑ ÊÑ­­Ò³ áç´Ñ¹àÍÒµ ¾µØ ¨Ðà» ¹ 0V 38 kHz

+5V

0V

ÀÒ¤Ê § +5V

0V

ÀÒ¤ÃѺ

ÃÙ»áÊ´§ÊÑ­­Ò³·Ñ§é ·Ò§´ Ò¹ÀÒ¤Ê §áÅÐÀÒ¤ÃѺÍÔ¹¿ÃÒàô


112

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.9.1 ¤íÒÊѧè bit_set(0x1000,0x40); à» ¹¤íÒÊѧè Ê §¢ ÍÁÙÅÅͨԡ 1 ÍÍ¡·Õµè ÇÑ Ê § IR

3.9.2 ¤íÒÊѧè bit_clear(0x1000,0x40); à» ¹¤íÒÊѧè Ê §¢ ÍÁÙÅÅͨԡ 0 ÍÍ¡·Õµè ÇÑ Ê § IR

3.9.3 ¿ §¡ ª¹Ñè peek ãª Í Ò¹¤ Ò¢ ÍÁÙÅ·ÕèáÍ´à´ÃÊã´æ ÀÒÂã¹ÃкºË¹ ǤÇÒÁ¨íҢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 µÑÇÍ ҧ·Õè 3.9.1 㹡óշµÕè Í §¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙÅ·Õàè ¢ ÒÁÒÂѧµÑÇÃѺáʧÍÔ¹¿ÃÒàô IRM «Ö§è ¶Ù¡µ Í㪠§Ò¹ã¹ºÔµ 2 ¢Í§áÍ´à´ÃÊ 0x1000 ãË à¢Õ¹â»Ãá¡ÃÁ´Ñ§¹Õé data = peek(0x1000) & 0x04;

ËÃ×Í data = peek(0x1000) & 4 ;

â´Â·Õè data ¤×ͤ Ңͧ¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ ¨Ò¡µÑÇÃѺáʧÍÔ¹¿ÃÒàô IRM ¶ ÒÁÕ¤Ò à» ¹ 4 áÊ´§Ç Ò¢ ÍÁÙÅ·Õè IRM ÃѺÁÒ¤×Í ¢ ÍÁÙÅ 0 ¶ ÒÁÕ¤Ò à» ¹ 0 áÊ´§Ç Ò¢ ÍÁÙÅ·Õè IRM ÃѺÁÒ¤×Í ¢ ÍÁÙÅ 1 ´Ñ§¹Ñ¹é ¶ ÒãÊ à¤Ã×Íè §ËÁÒ NOT( ! )à¾ÔÁè ࢠÒä» ¨Ðä´ à» ¹ data = !(peek(0x1000) & 0x04);

·íÒãË data ·Õäè ´ ãËÁ ¹àÕé » ¹¤ Ò¢ ÍÁÙŨÃÔ§·Õµè ÇÑ Ê § IR Ê §ÁÒãË


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

113

¡Ò÷´Åͧ·Õè 17 ÃÑºÊ §¢ ÍÁÙż Ò¹áʧÍÔ¹¿ÃÒàô 17.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1701.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download áŠǵÒÁ´ Ç Run main ·Õâè »Ãá¡ÃÁ Interactive C void main(void) {

»ÃСÒȵÑÇá»Ãà¾×Íè ãª ÃºÑ ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô IRM bit_set(0x1000,0x40); // ¡íÒ˹´¢ ÍÁÙÅ 1 à¾×Í è Ê §ÍÍ¡·Õè LED ÍÔ¹¿ÃÒàô

int dat;

//

while(1) {

Í Ò¹¢ ÍÁÙÅ·Õâè Á´ÙÅÃѺáʧÍÔ¹¿ÃÒàô IRM

dat = (peek(0x1000)& 0x04); // printf(“IRM data = %d\n”,!dat); // sleep(0.1);

//

¡ÅѺÊÀÒÇÐÅͨԡ¢Í§¢ ÍÁÙÅ·ÕÃè ºÑ ä´ áÅ ÇáÊ´§¤ Ò·Õâè Á´ÙÅ LCD ˹ ǧàÇÅÒ 0.1 ÇÔ¹Ò·Õ

} }

17.2 àÅ×Í¡¨ÑÁê à»Íà 㹵íÒá˹ § IC1 áÅÐ OC2 «Ö§è ÍÂÙ´ Ò ¹º¹¢Í§ºÍà ´ AX-11 ÁÒ·Ò§¢ÇÒ (ã¡Å ¡ºÑ LED ÍÔ¹¿ÃÒ àô) à¾×èÍàÅ×Í¡ãË ¢Ò¾Íà µ·Ñé§Êͧ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ·íÒ§Ò¹¡Ñºà¾×èÍÊ §áÅÐÃѺÊÑ­­Ò³ÍÔ¹ ¿ÃÒàô àÅ×Í¡¨ÑÁê à»Íà ·§Ñé ÊͧµÑÇªÔ´ä» ·Ò§´ Ò¹ LED ÍÔ¹¿ÃÒàô

ÊÔ§è ¡Õ´¢ÇÒ§

MC68HC11E1 DI-11 DI-12 DI-13 DI-14 DI-15

IRM

data

=

0

STOP

5 4 3 2 1 0

DC MOTOR SERVO MOTOR

START

PWR. BATT.

M-0 M-1 M-2 M-3

OC2 IR

CHARGE

KNOB

IRM

SER.

IC1

AI-2


114

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

17.3 㪠ÁÍ× ºÑ§ LED ÍÔ¹¿ÃÒàô IR º¹ºÍà ´ AX-11 à¾×Íè ãË áʧÍÔ¹¿ÃÒàôÊз ͹ä»ÂѧâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô IRM Êѧࡵ¼Å¡Ò÷íÒ§Ò¹¼ Ò¹âÁ´ÙÅ LCD ¼ÅÅѾ¸ : àÁ×Íè àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹ âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ IRM data = 0 ã¹¢³Ð·Õµè ÇÑ Ê §ÍÔ¹¿ÃÒàô (IR) ·íÒ¡ÒÃÊ §¢ ÍÁÙÅ 1 ·Õ¼è ÊÁ¡Ñº¤ÇÒÁ¶Õè 38kHz ÍÍ¡ÁÒµÅÍ´àÇÅÒ ÊÑ§à¡µä´ ¨Ò¡ LED ÊÕá´§·Õµè Òí á˹ §µÑÇÊ § IR ¨ÐµÔ´ÊÇ Ò§ àÁ×èÍÁÕÇѵ¶ØÁÒÍÂÙ ´ ҹ˹ Ңͧ IR áÅÐâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô IRM ·íÒãË à¡Ô´¡ÒÃÊз ͹áʧ ÍÔ¹¿ÃÒàô âÁ´ÙÅ IRM ¨Ö§ÃѺ¢ ÍÁÙŨҡµÑÇÊ § IR ä´ ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¨Ð¢Ö¹é ¢ ͤÇÒÁÇ Ò IRM data = 1 áÅÐàÁ×Íè ¹íÒÁ×ÍËÃ×ÍÊÔ§è ¡Õ´¢ÇÒ§ÍÍ¡ ¡ç¨Ð¡ÅѺÁÒáÊ´§¢ ͤÇÒÁ IRM data = 0 ઠ¹à´ÔÁ

·íÒäÁµ ͧ㪠áʧÍÔ¹¿ÃÒàô ?

áʧÍÔ¹¿ÃÒàô (infrared) à» ¹áʧ·ÕÁè ÊÕ à»¡µÃÑÁµèÒí ¡Ç ÒÊÕ á´§ µÒ¢Í§Á¹ØÉ ¨§Ö ÁͧäÁ àËç¹ áÅÐäÁ ä´ à» ¹Ê Ç¹Ë¹Ö§è ¢Í§áʧ¢ÒÇ ¨Ö§·íÒãË Á¡Õ ÒÃúǹ¨Ò¡áʧÀÒ¹͡ ¹ ÍÂ¡Ç Òáʧ¢ÒÇ»¡µÔ·¤Õè ¹àÃÒÁͧàËç¹â´Â·ÑÇè æ ä» ¨Ö§ÊÒÁÒö¹íÒÁÒ㪠¼ÊÁÊÑ­­Ò³à¾×Íè µÔ´µ ÍÊ×Íè ÊÒâ ÍÁÙÅ ä´

·íÒäÁµ ͧ¼ÊÁ¤Å×蹤ÇÒÁ¶Õè ?

áÁ ÇÒ áʧÍÔ¹¿ÃÒàô¨Ð¶Ù¡Ãº¡Ç¹¨Ò¡áʧ¢ÒÇä´ ¹Í  ᵠ¡ç处 ¶×ÍÇ Ò ÁÕâÍ¡Òʶ١ú¡Ç¹ä´ ÍÂÙ áµ à¹×Íè §¨Ò¡áʧ¢ÒÇ·Õàè ¢ ÒÁÒú¡Ç¹¹Ñ¹é à» ¹áʧ·Õäè Á Á¤Õ Å×¹è ¤ÇÒÁ¶Õ¼è ÊÁ ÍÂÙ ´Ñ§¹Ñ¹é ËÒ¡ÁÕ¡ÒüÊÁ¤Å×¹è ¤ÇÒÁ¶Õàè ¢ Òä»ã¹áʧÍÔ¹¿ÃÒàô ¡ç¨Ðà» ¹¡ÒÃÅ´âÍ¡Òʶ١ú¡Ç¹ä´ ´ÂÕ §Ôè ¢Ö¹é à¹×Íè § ¨Ò¡ÀÒ¤ÃѺ¨ÐÃѺàÍÒ੾ÒÐáʧ·ÕÁè ¤Õ ÇÒÁ¶Õ¼è ÊÁÍÂÙà ¢ Òä»à· ҹѹé àÁ×Íè à» ¹àª ¹¹Õâé Í¡ÒÊ·Õ¨è ÐÃѺàÍÒáʧÀÒ¹͡ ࢠÒä»á·ºà» ¹ä»äÁ ä´ àÁ×Íè à» ¹´Ñ§¹Õáé Å Ç¡çÊÒÁÒö¢ÂÒÂÊÑ­­Ò³ÍÔ¹¿ÃÒàôãË Á¤Õ ÇÒÁáç¢Ö¹é ä´ ¼Å·Õäè ´ ¤×ÍÊÒÁÒöÃÑºÊ §¢ ÍÁÙÅä´ ä¡Åà» ¹ 10 àÁµÃàÅ·Õà´ÕÂÇ Ê Ç¹¤ÇÒÁ¶Õ·è àÕè ËÁÒÐÊÁ¤×Í 38kHz


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

3.10 ¿ §¡ ª¹Ñè ·Ò§¤³ÔµÈÒʵà (Math function) ã¹ Interactive C ÁÕ¿§ ¡ ª¹Ñè ·Ò§¤³ÔµÈÒʵà ãË ãª §Ò¹ä´ ËÅÒµÑÇ ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé

3.10.1 ¿ §¡ ª¹Ñè sin 㪠¤Òí ¹Ç³¤ ÒÁØÁ sine (SIN) â´ÂãË ¼ÅÅѾ¸ ã¹Ë¹ ÇÂàÃà´Õ¹ (radian : RAD) ÃٻẺ¿ §¡ ªÑè¹ float sin(float dat) ¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ Ò sin à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.1 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹¿ §¡ ª¹Ñè ã¹Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter printf(“sin(1.0)=%f\n”,sin(1.0));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ sin(1.0) = .8414711

3.10.2 ¿ §¡ ª¹Ñè cos 㪠¤Òí ¹Ç³¤ ÒÁØÁ cosine (COS) â´ÂãË ¼ÅÅѾ¸ ã¹Ë¹ ÇÂàÃà´Õ¹ (radian : RAD) ÃٻẺ¿ §¡ ªÑè¹ float cos(float dat) ¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ Ò cos à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.2 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹¿ §¡ ª¹Ñè ã¹Ë¹ Òµ Ò§ Interaction ¡´ Enter printf(“cos(2.6)=%f\n”,cos(2.6));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ cos(2.6) = - .856889

115


116

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.10.3 ¿ §¡ ª¹Ñè tan 㪠¤Òí ¹Ç³¤ ÒÁØÁ tangent (TAN) ) â´ÂãË ¼ÅÅѾ¸ ã¹Ë¹ ÇÂàÃà´Õ¹ (radian : RAD) ÃٻẺ¿ §¡ ªÑè¹ float tan(float dat) ¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ Ò tan à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.3 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter Êѧࡵ ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 printf(“tan(1.25)=%f\n”,tan(1.25));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ tan(1.25) = 3.009572

3.10.4 ¿ §¡ ª¹Ñè atan 㪠¤Òí ¹Ç³¤ ÒÁØÁ arctangent(ARCTAN : Tan-1) â´ÂãË ¼ÅÅѾ¸ ã¹Ë¹ ÇÂàÃà´Õ¹ (radian : RAD) ÃٻẺ¿ §¡ ªÑè¹ float atan(float dat) ¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ Ò arctan à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.4 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter Êѧࡵ ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 printf(“atan(3.57)=%f\n”,atan(3.57));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ atan(3.57) = 1.297683


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

117

3.10.5 ¿ §¡ ª¹Ñè log10 㪠¤íҹdz¤ ÒÅÍ¡ÒÃÔ¸ÖèÁ°Ò¹ÊÔº (log) ¢Í§µÑÇàÅ¢ã´æ ÃٻẺ¿ §¡ ªÑè¹ float log10(float dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ ÒÅÍ¡ÒÃÔ¸ÁÖè °Ò¹ÊԺ໠¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.5 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter Êѧࡵ ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 printf(“log10(2.0)=%f\n”,log10(2.0));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ log10(2.0) = .30103

3.10.6 ¿ §¡ ª¹Ñè log 㪠¤íҹdz¤ ÒÅÍ¡ÒÃÔ¸ÖèÁ°Ò¹¸ÃÃÁªÒµÔ (ln) ¢Í§µÑÇàÅ¢ã´æ ÃٻẺ¿ §¡ ªÑè¹ float log(float dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ Ò log °Ò¹¸ÃÃÁªÒµÔ à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.6 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter printf(“log(2.0)=%f\n”,log(2.0));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ log(2.0) = .6931472 («Ö§è ¡ç¤Í× ¤ Ңͧ ln 2 ¹Ñ¹è àͧ)


118

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.10.7 ¿ §¡ ª¹Ñè exp10 㪠¤íҹdz¤ ÒàŢ¡¡íÒÅѧ°Ò¹ÊÔº (10n) ÃٻẺ¿ §¡ ªÑè¹ float exp10(float dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ ÒÊԺ¡¡íÒÅѧã´æ à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.7 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter Êѧࡵ ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 printf(“exp10(2.5)=%f\n”,exp10(2.5));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ exp10(2.5) = 316.2278 («Ö§è ¡ç¤Í× ¤ Ңͧ 102.5)

3.10.8 ¿ §¡ ª¹Ñè exp 㪠¤Òí ¹Ç³¤ ÒàŢ¡¡íÒÅѧ°Ò¹ e â´Â·Õè «Ö§è ¡ç¤Í× ¿ §¡ ª¹Ñè  ͹¡ÅѺ¢Í§¿ §¡ ª¹Ñè log ÃٻẺ¿ §¡ ªÑè¹ float exp(float dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ¤ Ò¡íÒÅѧ¢Í§ e ª¹Ô´¢ ÍÁÙÅà» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.8 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹â»Ãá¡ÃÁ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter printf(“exp(2.5)=%f\n”,exp(2.5));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ exp(2.5) = 12.1825 («Ö§è ¡ç¤Í× ¤ Ңͧ e2.5 : e à» ¹¤ Ò¤§·ÕÁè ¤Õ Ò 2.718)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

119

3.10.9 ¿ §¡ ª¹Ñè sqrt 㪠¤íҹdz¤ ÒÃÒ¡·ÕèÊͧ¢Í§µÑÇàÅ¢ã´æ ÃٻẺ¿ §¡ ªÑè¹ float sqrt(float dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ¢ ÍÁÙÅ·Õµè Í §¡ÒÃËÒ¤ ÒÃÒ¡·ÕÊè ͧ¢Í§µÑÇàÅ¢ã´æ à» ¹áºº float ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ float µÑÇÍ ҧ·Õè 3.10.9 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹¿ §¡ ª¹Ñè ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter printf(“sqrt(5.5)=%f\n”,sqrt(5.5));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ sqrt(5.5) = 2.345208 («Ö§è ¡ç¤Í× ¤ ÒÃÒ¡·ÕÊè ͧ ¢Í§ 5.5)

3.10.10 ¿ §¡ ª¹Ñè random 㪠ÊØ Á¤ ÒµÑÇàŢẺ¡íÒ˹´ª ǧ ÃٻẺ¿ §¡ ªÑè¹ int random(int dat)

¾ÒÃÒÁÔàµÍà dat ¤×Í ª ǧ¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊØÁ à» ¹áºº int ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹ¨ÃÔ§ int µÑÇÍ ҧ·Õè 3.10.10 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹ª ͧà¢Õ¹¿ §¡ ª¹Ñè ¢Í§Ë¹ Òµ Ò§ Interaction áÅ Ç¡´ Enter printf(“random = %d\n”,random(100));

¼ÅÅѾ¸ : ·Õ¨è ÍáÊ´§¼ÅâÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ random(100) = xx â´Â·Õè xx ¤×ͤ Ò·Õäè ´ ¨Ò¡ ¡ÒÃÊØÁ «Ö§è äÁ á¹ ¹Í¹ ÁÕ¤Ò ·Õàè » ¹ä»ä´ ÃÐËÇ Ò§ 0-99 (100 ¤ Ò)


120

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.11 ¿ §¡ ª¹Ñè ¹ÑºÊÑ­­Ò³¾ÑÅÊ ËÃ×Í¿ §¡ ª¹Ñè µÑÇࢠÒÃËÑÊ ÍÕ¡Ë¹Ö§è ¿ §¡ ª¹Ñè ·Õè Interactive C àµÃÕÂÁÁÒÊíÒËÃѺ㪠§Ò¹¡ÑºÍØ»¡Ã³ µÃǨ¨ÑºËÃ×Íૹà«Íà «§Öè ÁÕ¤ÇÒÁ¹ Òʹã¨Í ҧÂÔ§è ¤×Í ¿ §¡ ª¹Ñè ¹ÑºÊÑ­­Ò³¾ÑÅÊ ËÃ×Í¿ §¡ ª¹Ñè µÑÇࢠÒÃËÑÊ (enncoder) â´Â¿ §¡ ª¹Ñè ¹Õé¨Ð㪠ÃѺÁ×͡ѺÊÑ­­Ò³¾ÑÅÊ ·ÕèÁÒ¨Ò¡µÑǵÃǨ¨Ñºáººà¢ ÒÃËÑÊ ´Ñ§ÁÕµÑÇÍ ҧáÊ´§ã¹ÃÙ» µÑǵÃǨ¨Ñº ÊÑ­­Ò³¾ÑÅÊ

µÑÇÊ §áʧ

ª ͧÊÑ­­Ò³ÍÔ¹¾ØµÊíÒËÃѺ㪠§Ò¹¡Ñº¿ §¡ ª¹Ñè ¹Õºé ¹ºÍà ´ AX-11 ÁÕ 4 ª ͧ ¤×Í IN-7 (ª ͧ 0), IN8 (ª ͧ 1), DI-12 (ª ͧ 2) áÅÐ DI-13(ª ͧ 3) Ê Ç¹¿ §¡ ª¹Ñè ·Õãè ª 㹡ÅØÁ ¹ÕÁé Õ 4 ¿ §¡ ª¹Ñè ¤×Í enable_encoder, disable_encoder , reset_encoder áÅÐ read_encoder

3.11.1 ¿ §¡ ªÑè¹ enable_encoder

㪠໠´¤ÇÒÁÊÒÁÒö (àÍç¹àÍàºÔÅ) 㹡ÒùѺÊÑ­­Ò³¾ÑÅÊ ÊíÒËÃѺª ͧÊÑ­­Ò³·Õè¡íÒ˹´ ÃٻẺ¿ §¡ ªÑè¹ void enable_encoder(int encoder)

¾ÒÃÒÁÔàµÍà encoder ¤×Í ª ͧÊÑ­­Ò³·Õàè Å×͡㪠§Ò¹ã¹¡ÒùѺ¾ÑÅÊ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-7 1 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-8 2 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-12 3 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-13 µÑÇÍ ҧ·Õè 3.11.1 enable_encoder(0);

à» ¹¡ÒÃà» ´¤ÇÒÁÊÒÁÒö㹡ÒùѺ¾ÑÅÊ ·ªÕè Í § IN-7 â´Â·Õäè Áâ¤Ã¤Í¹â·ÃÅàÅÍà ¨ÐÊÒÁÒö¹Ñº ÊÑ­­Ò³¾ÑÅÊ ·àÕè ¢ ÒÁÒä´ ¡µç Í àÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠¿§ ªÑ¹è read_encoder à ÇÁ´ ÇÂ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

121

3.11.2 ¿ §¡ ª¹Ñè disable_encoder 㪠» ´¤ÇÒÁÊÒÁÒö (´ÔÊàÍàºÔÅ) 㹡ÒùѺÊÑ­­Ò³¾ÑÅÊ ÊíÒËÃѺª ͧÊÑ­­Ò³·Õè¡íÒ˹´ ÃٻẺ¿ §¡ ªÑè¹ void disable_encoder(int encoder)

¾ÒÃÒÁÔàµÍà encoder ¤×Í ª ͧÊÑ­­Ò³·Õàè Å×͡㪠§Ò¹ã¹¡ÒùѺ¾ÑÅÊ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-7 1 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-8 2 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-12 3 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-13 µÑÇÍ ҧ·Õè 3.11.2 disable_encoder(2);

à» ¹¡Òû ´¤ÇÒÁÊÒÁÒö㹡ÒùѺ¾ÑÅÊ ·ªÕè Í § DI-12 «Ö§è ÍÒ¨ÁÕ¡ÒÃà» ´ãª §Ò¹ª ͧ DI-12 ÁÒ ¡ ͹˹ Ò¹Õâé ´Â¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè enable_encoder(2);

3.11.3 ¿ §¡ ª¹Ñè reset_encoder 㪠à¤ÅÕÂà ¤ Ңͧ¡ÒùѺ¾ÑÅÊ ÊíÒËÃѺª ͧÊÑ­­Ò³·Õè¡íÒ˹´ ÃٻẺ¿ §¡ ªÑè¹ void reset_encoder(int encoder)

¾ÒÃÒÁÔàµÍà encoder ¤×Í ª ͧÊÑ­­Ò³·Õàè Å×͡㪠§Ò¹ã¹¡ÒùѺ¾ÑÅÊ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-7 1 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-8 2 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-12 3 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-13 µÑÇÍ ҧ·Õè 3.11.3 reset_encoder(0);

à» ¹¡ÒÃà¤ÅÕÂà ¤ Ò¡ÒùѺà¾×èÍàÃÔèÁµ ¹¡ÒùѺ¤ÃÑé§ãËÁ ¢Í§ª ͧ IN-7 «Ö觶 ÒäÁ àÃÕ¡¿ §¡ ªÑè¹ reset_encoder ¡ ͹ áÅ ÇÁÕ¡ÒÃÊ §ÊÑ­­Ò³à¢ ÒÁÒ·Õªè Í §ÍÔ¹¾Øµ¹Õé ¡ÒùѺ·Õàè ¡Ô´¢Ö¹é ¨Ðà» ¹¡ÒùѺµ Í ¨Ò¡¤ Òà´ÔÁ¡ ͹˹ Ò «Ö§è ÍÒ¨·íÒãË ¼ÅÅѾ¸ ·µÕè Í §¡ÒÃà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ä´


122

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.11.4 ¿ §¡ ªÑè¹ read_encoder 㪠ÍÒ ¹¤ Ңͧ¡ÒùѺÊÑ­­Ò³¾ÑÅÊ ¨Ò¡ª ͧÊÑ­­Ò³·Õ¡è Òí ˹´ ¡ÒÃ㪠§Ò¹à¾×Íè ãË ä´ ¤Ò ¼ÅÅѾ¸ ·Õµè Í §¡Òèе ͧàÃÕ¡¿ §¡ ª¹Ñè ¹Õé 2 ¤Ãѧé â´Â¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè read_encoder ¤Ãѧé áá໠¹¡ÒÃàÃÔÁè µ ¹ Í Ò¹¤ Ò áÅСÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè 㹤ÃÑ§é ·ÕÊè ͧ໠¹¡ÒÃÊÔ¹é ÊØ´¡ÒÃÍ Ò¹ ¨Ò¡¹Ñ¹é ¿ §¡ ª¹Ñè ¨Ð¤×¹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒà» ¹¨íҹǹ¾ÑÅÊ ·Õè¹Ñºä´ â´Â¡ ͹¡ÒÃàÃÕ¡¿ §¡ ªÑè¹ read_encoder ¤ÃÑé§áá¤ÇÃà¤ÅÕÂà ¤ Ò¡Òà ¹Ñº´ Ç¡ÒÃàÃÕ¡¿ §¡ ª¹Ñè reset_encoder àÊÕ¡ ͹ ÃٻẺ¿ §¡ ªÑè¹ int read_encoder(int encoder)

¾ÒÃÒÁÔàµÍà encoder ¤×Í ª ͧÊÑ­­Ò³·Õàè Å×͡㪠§Ò¹ã¹¡ÒùѺ¾ÑÅÊ ¤ Ò·Õàè » ¹ä»ä´ ¤Í× 0 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-7 1 : ÊíÒËÃѺ㪠§Ò¹ª ͧ IN-8 2 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-12 3 : ÊíÒËÃѺ㪠§Ò¹ª ͧ DI-13 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ·Õèà» ¹¤ Ò¨íҹǹ¾ÑÅÊ ·Õè¹Ñºä´ µÑÇÍ ҧ·Õè 3.11.4 read_encoder(0);

à» ¹¡ÒÃÍ Ò¹¤ Ò¨íҹǹ¾ÑÅÊ ·ªÕè Í § IN-7


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

123

¡Ò÷´Åͧ·Õè 18 ¹ÑºÊÑ­­Ò³¾ÑÅÊ ´Ç ¿ §¡ ª¹Ñè encoder ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ἧǧ¨ÃÊÇÔµª ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 18.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»ØÁ New ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁ ãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1801.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download áŠǵÒÁ´ Ç Run main ·Õâè »Ãá¡ÃÁ Interactive C void main() { while(1) { enable_encoder(0);

//

reset_encoder(0);

//

read_encoder(0);

//

sleep(1.0);

//

à» ´¤ÇÒÁÊÒÁÒö㹡ÒùѺ¾ÑÅÊ ·ªÕè Í § IN-7 à¤ÅÕÂà ¤Ò ¡ÒùѺ à¾×Íè àÃÔÁè µ ¹¡ÒùѺ àÃÔÁè µ ¹¡ÒùѺ¨íҹǹ¾ÑÅÊ ·ªÕè Í § IN-7 ˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ

printf(“Freq. = %d\n”,read_encoder(0)); //

áÊ´§¼Å¡ÒùѺ·Õâè Á´ÙÅ LCD

} }

18.2 µ ÍÊÒ¨ҡ¨Ø´µ Í LOW ¢Í§á¼§Ç§¨ÃÊÇÔµª ࢠҷÕÍè ¹Ô ¾Øµ IN-7 ¢Í§ºÍà ´ AX-11

IN-7

SWITCH

HIGH LOW

AI-2 KNOB

Frequency

=

M-0 M-1 M-2 M-3

DI-11 DI-12 DI-13 DI-14 DI-15

120

DC MOTOR SERVO MOTOR

STOP

5 4 3 2 1 0

START

PWR. BATT.

SER.

MC68HC11E1

18.3 ·´Åͧ¡´ÊÇÔµª àÃçÇæ ã¹àÇÅÒ 1 ÇÔ¹Ò·Õ à¾×Íè Êà ҧÊÑ­­Ò³¾ÑÅÊ ¨Òí Åͧ» ͹ࢠÒÊÙÍ ¹Ô ¾Øµ IN-7 Êѧࡵ¼Å ¡Ò÷íÒ§Ò¹¼ Ò¹¨ÍáÊ´§¼ÅâÁ´ÙÅ LCD ¼ÅÅѾ¸ : àÁ×Íè àÃÔÁè ·íÒ§Ò¹ ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Ferq = xxx â´Â·Õè xxx ¤×ͨíҹǹ¾ÑÅÊ ·Õè Í Ò¹ä´ ã¹·Ø¡æ 1 ÇÔ¹Ò·Õ«§Öè ¡ç¤Í× ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³·Õàè ¢ ÒÁÒ·Ò§ª ͧÍÔ¹¾Øµ IN-7


124

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

3.12 ¿ §¡ ª¹Ñè ÊíÒËÃѺ¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ô§é (Multitasking) ÍÕ¡¤ÇÒÁÊÒÁÒÃ¶Ë¹Ö§è ·Õâè ´´à´ ¹ã¹ Interactive C ¡ç¤Í× ¡ÒÃʹѺʹع¡Ò÷íҧҹẺÁÑŵԷÒÊ ¡Ô§é «Ö§è ¤×Í¡Ò÷íÒ§Ò¹ËÅÒÂæ §Ò¹ä»¾Ã ÍÁ¡Ñ¹ áÅÐà» ¹ÍÔÊÃе ͡ѹ â´Â¨Ðà» ¹¡ÒÃẠ§§Ò¹áµ ÅЧҹ ´ Ç¡ÒÃà¢Õ¹â»Ãá¡ÃÁà» ¹¿ §¡ ª¹Ñè áÅ ÇàÃÕ¡㪠§Ò¹¼ Ò¹¿ §¡ ª¹Ñè start_process áÅÐÊÒÁÒö·íÒÅÒ ËÃ×Í¡àÅÔ¡¡Ãкǹ§Ò¹¹Ñ¹é ã¹¢³Ð·íÒ§Ò¹ ËÃ×Í㹪 ǧàÇÅÒ run time ä´ ´Ç ¿ §¡ ª¹Ñè kill_process ¹Í¡¨Ò¡¹Ñ¹é ÂѧÁÕÍ¡Õ 2 ¿ §¡ ª¹Ñè ·Õãè ª ªÇ Â㹡ÒúÃÔËÒÃàÇÅÒáÅЧҹ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà àÁ×Íè µ ͧ·íҧҹẺÁÑŵԷÒÊ¡Ô§é ¹Ñ¹è ¤×Í hog_processor áÅÐ defer

3.12.1 ¿ §¡ ª¹Ñè start_process 㪠àÃÕ¡¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ªÑè¹ã´æ à» ¹áººÁÑŵԷÒÊ¡Ôé§ ÃٻẺ¿ §¡ ªÑè¹ int start_process( function call(), [TICK] ,[STACK-SIZE])

¾ÒÃÒÁÔàµÍà function call() ¤×Í ¿ §¡ ª¹Ñè ·Õ¶è ¡Ù àÃÕ¡ãË ·Òí §Ò¹áººÁÑŵԷÒÊ¡Ô§é TICK ¤×Í ª ǧàÇÅÒ㹡ÒÃࢠÒä»·íҧҹ㹿 §¡ ªÑè¹·Õè¡íÒ˹´ ÁÕ˹ ÇÂà» ¹ÁÔÅÅÔÇÔ¹Ò·Õ ¶ ÒäÁ ÁÕ ¡ÒÃÃкؾÒÃÒÁÔàµÍà ¹Õé ¨Ð¡íÒ˹´¤ Òà» ¹ 5 ÁÔÅÅÔÇÔ¹Ò·Õ STACK-SIZE ¤×Í ¾×é¹·Õè˹ ǤÇÒÁ¨íÒÊ Ç¹Ë¹Ö觷ÕèÊíÒÃͧäÇ ÊíÒËÃѺà¡çº¤ ÒʶҹÐáÅТ ÍÁÙÅ µ Ò§æ (stack) à¾×Íè 㪠·Òí §Ò¹ÀÒÂ㹡Ãкǹ§Ò¹ ¶ ÒäÁ ÃкؾÒÃÒÁÔàµÍà ¹Õé ¨ÐÁÕ¤Ò µÑ§é µ ¹à» ¹ 256 亵 ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ ª¹Ô´¨íҹǹàµçÁ int ·Õèà» ¹¤ ÒËÁÒÂàÅ¢¡íҡѺ¡Ãкǹ§Ò¹¢Í§¿ §¡ ªÑè¹·Õè·íÒ§Ò¹ ẺÁÑŵԷÒÊ¡Ôé§ â´Â¨ÐÁռŵ Í¡ÒÃÊÑè§ËÂØ´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ªÑè¹ kill_process µ Íä» µÑÇÍ ҧ·Õè 3.12.1 start_process(test1() , 1 , 50);

ËÁÒ¶֧ àÃÕ¡¿ §¡ ª¹Ñè test1 (¨Ðµ ͧÁÕ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ¹ÕÁé Ò¡ ͹˹ ÒáÅ Ç) ãË ·Òí §Ò¹áºº ÁÑŵԷÒÊ¡Ô§é ª ǧàÇÅÒ·Õãè ª ¤Í× 1 ÁÔÅÅÔÇ¹Ô Ò·Õ áÅÐ㪠¾¹×é ·ÕÊè Òí Ãͧ¢ ÍÁÙÅËÃ×ÍÊáµç¡ 50 亵 start_process(test2());

ËÁÒ¶֧ àÃÕ¡¿ §¡ ª¹Ñè test2 (¨Ðµ ͧÁÕ¡ÒûÃСÒÈ¿ §¡ ª¹Ñè ¹ÕÁé Ò¡ ͹˹ ÒáÅ Ç) ãË ·Òí §Ò¹à» ¹ ẺÁÑŵԷÒÊ¡Ô§é ª ǧàÇÅÒ·Õãè ª ¤Í× 5 ÁÔÅÅÔÇ¹Ô Ò·Õ (㪠¤Ò µÑ§é µ ¹à¹×Íè §¨Ò¡äÁ Á¡Õ ÒÃÃкؾÒÃÒÁÔàµÍà µÇÑ ¹Õé ÁÒ) áÅÐ㪠¾¹×é ·ÕÊè áµç¡ 256 亵


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

125

3.12.2 ¿ §¡ ª¹Ñè kill_process 㪠ËÂØ´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ªÑè¹ã´æ ·Õè·íÒ§Ò¹ã¹áººÁÑŵԷÒÊ¡Ôé§ ÃٻẺ¿ §¡ ªÑè¹ int kill_process(int pid)

¾ÒÃÒÁÔàµÍà pid ¤×Í ¤ ÒËÁÒÂàÅ¢¡íҡѺ¡Ãкǹ§Ò¹ (process ID number ) ·Õäè ´ ¨Ò¡¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè start_process ¡ ͹˹ Ò·Õè¨ÐÁÕ¡ÒÃËÂØ´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ªÑè¹¹Ñé¹æ ¡Òä׹¤ Ò¼ÅÅѾ¸ ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 0 àÁ×Íè ËÂØ´¡Ò÷íÒ§Ò¹ä´ ÊÒí àÃç¨ ¤×¹¤ Ò¼ÅÅѾ¸ à» ¹ 1 àÁ×èÍËÂØ´¡Ò÷íÒ§Ò¹äÁ ÊíÒàÃç¨ËÃ×ÍäÁ ¾ºËÁÒÂàÅ¢¡íҡѺ¿ §¡ ªÑè¹

3.12.3 ¿ §¡ ª¹Ñè hog_processor 㪠¨Ñ´ÊÃÃàÇÅÒ·Õèá¹ ¹Í¹ã¹¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ôé§ ÃٻẺ¿ §¡ ªÑè¹ hog_processor()

àÁ×èÍàÃÕ¡¿ §¡ ªÑè¹¹Õé·íÒ§Ò¹ ¨ÐÁÕ¡ÒèѴÊÃÃàÇÅÒãË á¡ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹡ÒÃࢠÒä»·íÒ §Ò¹áººÁÑŵԷÒÊ¡Ôé§à» ¹àÇÅÒ·Õèá¹ ¹Í¹¤×Í 256 ÁÔÅÅÔÇÔ¹Ò·Õ ¿ §¡ ªÑ蹨֧¤ÇÃ㪠¡Ñº¡Ãкǹ§Ò¹·Õèµ Í§ ´ÙáÅà» ¹¾ÔàÈÉ ¨Ðµ ͧ㪠§Ò¹Ã ÇÁ¡Ñº¿ §¡ ªÑè¹defer à¾×èÍ¡íÒ˹´¢Íºà¢µ¢Í§¡Ãкǹ§Ò¹·Õèµ Í§ÁÕ¡Òà འҴÙà» ¹¾ÔàÈÉ

3.12.4 ¿ §¡ ª¹Ñè defer 㪠¡Òí ˹´ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÅѺ价íÒ§Ò¹Í×¹è ËÅѧ¨Ò¡àÃÕ¡㪠¿§ ¡ ª¹Ñè ¹Õé 㪠ÃÇ Á¡Ñº¿ § ¡ ªÑè¹ hog_processor 㹡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ôé§ ÃٻẺ¿ §¡ ªÑè¹ defer()

¡ ͹¨ÐàÃÕ¡㪠¿ §¡ ªÑè¹¹Õéµ Í§ÁÕ¡ÒÃàÃÕ¡¿ §¡ ªÑè¹ hog_processor ¡ ͹ à¾×èÍ¡íÒ˹´¨Ø´àÃÔèÁµ ¹ ¢Í§¡Ãкǹ§Ò¹·Õµè Í §ÁÕ¡ÒôÙáÅà» ¹¾ÔàÈÉ áÅÐàÁ×Íè µ ͧ¡ÒÃãË ÍÍ¡¨Ò¡¡Ò÷íÒ§Ò¹·Õãè ´¨Ö§àÃÕ¡㪠¿§ ¡ ª¹Ñè defer à¾×Íè ¡íÒ˹´¢Íºà¢µ


126

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷´Åͧ·Õè 19 ¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ô§é ¡Ò÷´Åͧ·Õè 19-1 ·íÒ§Ò¹ÁÑŵԷÒÊ¡Ô§é 2 §Ò¹ ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 19.1.1 Êà ҧ˹ Òµ Ò§à¢Õ¹â»Ãá¡ÃÁãËÁ â´Â¡Òá´»Ø Á New ¨Ò¡¹Ñé¹à¢Õ¹â»Ãá¡ÃÁµ Í仹Õéŧã¹Ë¹ Òµ Ò§ â»Ãá¡ÃÁãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1901.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { start_process(sensor_beep()); // Run “sensor_beep” process start_process(run_motor()); // Run “run_motor” process } void sensor_beep(void) { while(1) { printf(“knob =%d\n”,knob()); // Shoe knob value on screen if(knob()>100) // Test knob value over 100 ? beep(); // Beep on sleep(0.1); // Delay 0.1 second for display } } void run_motor(void) { while(1) { fd(0); // Drive motor channel 0 sleep(3.0); // Delay 3 second bk(0); // Drive motor reverse direction sleep(3.0); // Delay 3 second } }

19.1.2 µ ÍÁÍàµÍà ࢠҷժè Í § M-0 19.1.3 ¡´»ØÁ Run main º¹â»Ãá¡ÃÁ Interactive C áÅ Ç·´Åͧ»ÃѺµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ ·µÕè Òí á˹ § KNOB º¹ºÍà ´ AX-11 ´Ù¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¿ §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« áÅÐÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ¼ÅÅѾ¸ : ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õàé » ¹¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ô§é «Ö§è ÁÕÍÂÙ 2 §Ò¹·Õäè Áâ¤Ã¤Í¹â·ÃÅàÅÍà ¡ÃзíÒ ä»¾Ã ÍÁæ¡Ñ¹ §Ò¹·Õè 1 ࢠÒä»·íÒÀÒÂ㹿 §¡ ª¹Ñè sensor_beep ¤×Í¡ÒõÃǨÊͺ¤ Ңͧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB Ç ÒÁÕ¤Ò à¡Ô¹ 100 ËÃ×ÍäÁ ¶ Ò ãª ¨ÐÁÕÊ­ Ñ ­Ò³àÊÕ§ µÔ´é ´Ñ§¢Ö¹é §Ò¹·Õè 2 ࢠÒä»·íÒÀÒÂ㹿 §¡ ª¹Ñè run_motor ¤×Í ·íÒ¡ÒÃËÁعÁÍàµÍà 俵ç¡ÅѺ·ÔÈ·Ò§ä»ÁÒ·Ø¡æ 3 ÇÔ¹Ò·Õ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

127

¡Ò÷´Åͧ·Õè 19-2 ·íÒ§Ò¹ÁÑŵԷÒÊ¡Ô§é 2 §Ò¹ ẺÁÕ¡ÒÃËÂØ´¡Ãкǹ§Ò¹¡ÅÒ§¤Ñ¹´ Ç¿ §¡ ª¹Ñè kill_process ÍØ»¡Ã³ à¾ÔÁè àµÔÁ : ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒÂàª×Íè Áµ Í 19.2.1 à¢Õ¹â»Ãá¡ÃÁµ Í仹ÕÅé §ã¹Ë¹ Òµ Ò§â»Ãá¡ÃÁãËÁ ¹Õé ºÑ¹·Ö¡ã¹ª×Íè lab1902.ic ¨Ò¡¹Ñ¹é ¡´»ØÁ Download void main(void) { int sensor_beep_id , run_motor_id; //

¡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè sensor_beep() à» ¹áººÁÑŵԷÒÊ¡Ô§é áÅÐà¡çº¤ ÒËÁÒÂàÅ¢¡íҡѺ¡Ãкǹ§Ò¹äÇ ·Õè sensor_beep_id

// sensor_beep_id = start_process(sensor_beep()); //

¡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè run_motor() à» ¹áººÁÑŵԷÒÊ¡Ô§é áÅÐà¡çº¤ ÒËÁÒÂàÅ¢¡íҡѺ¡Ãкǹ§Ò¹äÇ ·Õè run_motor_id

// run_motor_id = start_process(run_motor()); sleep(10.0); kill_process(sensor_beep_id);

//

˹ ǧàÇÅÒ 10 ÇÔ¹Ò·Õ

ËÂØ´¡Ãкǹ§Ò¹ sensor_beep (ËÂØ´Í Ò¹¤ Ò¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB) kill_process(run_motor_id); // ËÂØ´¡Ãкǹ§Ò¹ process run_motor (ËÂØ´¡ÒâѺÁÍàµÍà ) ao(); // » ´¡ÒâѺÁÍàµÍà ·¡ Ø ª ͧ beeper_off(); // » ´¡ÒâѺÊÑ­­Ò³àÊÕ§ //

} void sensor_beep(void) { while(1) { printf(“knob=%d\n”,knob()); // if(knob()>100)

//

beep();

//

sleep(0.1);

//

áÊ´§¤ Ò¨Ò¡µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB µÃǨÊͺ¤ Ò KNOBÇ ÒÁÒ¡¡Ç Ò 100 ËÃ×ÍäÁ ¡íÒà¹Ô´àÊÕ§ µÔ´é àÁ×Íè ¤ Ò KNOB ÁÒ¡¡Ç Ò 100 ˹ ǧàÇÅÒ¡ÒÃáÊ´§¼Å·Õâè Á´ÙÅ LCD

} } void run_motor(void) { while(1) { fd(0); sleep(3.0); bk(0); sleep(3.0); } }

¨ ÒÂ俵ç¢ÑÇé ãË ÁÍàµÍà ªÍ § 0 ËÁع // ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ // ¨ ÒÂä¿¡ÅѺ¢ÑÇé ãË ÁÍàµÍà ªÍ § 0 ËÁع¡ÅѺ·ÔÈ·Ò§ // ˹ ǧàÇÅÒ 3 ÇÔ¹Ò·Õ //


128

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

·´Åͧ»ÃѺ·Õ¹è Õè AI-2

PWR. BATT.

knob

=

M-0 M-1 M-2 M-3

MC68HC11E1

SER.

CHARGE

KNOB

90

DC motor 6V

STOP

SERVO MOTOR

START

5 4 3 2 1 0

DC MOTOR

19.2.2 µ ÍÁÍàµÍà ࢠҷժè Í § M-0 19.2.3 ¡´»ØÁ Run main º¹â»Ãá¡ÃÁ Interactive C áÅ Ç·´Åͧ»ÃѺµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ ·µÕè Òí á˹ § KNOB º¹ºÍà ´ AX-11 ´Ù¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¿ §àÊÕ§¨Ò¡ÅíÒ⾧໠Ââ« áÅÐÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà ¼ÅÅѾ¸ : ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õàé » ¹¡Ò÷íҧҹẺÁÑŵԷÒÊ¡Ô§é ÁÕÍÂÙ 2 §Ò¹·ÕÁè ¡Õ ÒáÃзíÒ仾à ÍÁ¡Ñ¹ §Ò¹·Õè 1 ࢠÒä»·íÒ§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè sensor_beep ¤×Í¡ÒõÃǨÊͺÊͺ¤ Ңͧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ ¤ Òä´ KNOB Ç ÒÁÕ¤Ò à¡Ô¹ 100 ËÃ×ÍäÁ ¶ Ò ãª ¨ÐÁÕÊ­ Ñ ­Ò³àÊÕ§ µÔ´é ´Ñ§¢Ö¹é §Ò¹·Õè 2 ·Õàè ¢ Òä»·íÒ§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè run_motor ¤×Í¡ÒÃÊÅѺ¡ÒÃËÁع¢Í§ DC Motor â´ÂËÁØ¹ä» ¢ ҧ˹ Ò 3 ÇÔ¹Ò·Õ áÅÐËÁع仢 Ò§ËÅѧÍÕ¡ 3 ÇÔ¹Ò·Õ áµ àÁ×èͼ Ò¹ä» 10 ÇÔ¹Ò·ÕËÅѧ¨Ò¡àÃÔèÁµ ¹¡Ò÷íÒ§Ò¹ ¿ §¡ ªÑè¹ sensor_beep áÅÐ run_motor ¨Ð¶Ù¡ ËÂØ´¡Ò÷íҧҹŧ´ Ç¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè kill_process ¹Ñ¹è ¤×Í ËÂØ´¡ÒÃÍ Ò¹¤ Ò¨Ò¡ KNOB áÅÐËÂØ´¡Òà ¢ÑºÁÍàµÍà ·ªÕè Í § M-0


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

129

º··Õè 5

ÅÖ¡ÍÕ¡¹Ô´¡Ñº äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Õèà» ¹ËÑÇã¨ËÅÑ¡¢Í§ AX-11 ºÍà ´àÃÕ¹ÃÙ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´ Ç Interactive C ¤×Í MC68HC11E1 «Ö§è ¼ÅÔµâ´Â âÁâµâÃÅ Ò ÊËÃÑ°ÍàÁÃÔ¡Ò ã¹º·¹Õ¨é Ðà» ¹¡ÒùíÒàÊ¹Í ÃÒÂÅÐàÍÕ´â´ÂÊÃØ»·Õè¼Ù àÃÕ¹ÃÙ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¤Ç÷ÃÒº à¾×èÍ»ÃÐ⪹ 㹡ÒùíÒä»»ÃÐÂØ¡µ 㪠§Ò¹à¾ÔèÁàµÔÁ «Öè§ÍÒ¨µ ͧ㪠¤ÇÒÁÃÙ à¡ÕèÂǡѺâ¤Ã§Êà ҧÀÒÂ㹢ͧ 68HC11 ÁÒª ÇÂ

¤Ø³ÊÁºÑµÔ·Ò§à·¤¹Ô¤·Õè¹ Òʹ㨢ͧ MC68HC11E1

à» ¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 8 ºÔµ 㪠«¾Õ ÂÕ Ù M68HC11 ¼ÅÔµ´ ÇÂà·¤â¹âÅÂÕ«ÁÕ ÍÊ ¨Ö§¡Ô¹¡ÃÐáÊä¿¿ ÒµèÒí l ˹ ǤÇÒÁ¨íÒáÃÁ 512 亵 l ˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ 512 亵 l ˹ ǤÇÒÁ¨íÒÃÍÁ¾ÔàÈÉÊíÒËÃѺ·íÒ§Ò¹ã¹âËÁ´ºÙµáʵÃç»ËÃ×ÍàÃÕÂ¡Ç Ò ºÙµÃÍÁ (boot ROM) 256 亵 l ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡Ò ãª ä´ µ§Ñé ᵠ俵ç (0Hz) ¨¹¶Ö§ 8MHz l ÁÕ¾Íà µàª×Í è Áµ ÍÍØ»¡Ã³ ÀÒ¹͡ 38 ¢Ò à» ¹ÍÔ¹¾ØµàÍÒµ ¾µØ 16 ¢Ò, ÍÔ¹¾Øµ 11 ¢Ò áÅÐàÍÒµ ¾µØ 11 ¢Ò l ÁÕä·àÁÍà ËÃ×͵Ñǵѧé àÇÅÒ¢¹Ò´ 16 ºÔµ 1 ªØ´ ÀÒÂ㹺ÃèØǧ¨ÃµÃǨ¨ÑºÊÑ­­Ò³ (IC : Input Capture) 3 ª ͧ áÅÐàÍÒµ ¾µØ ǧ¨Ãà»ÃÕºà·Õº (OC : Output Compare) 5 ª ͧ l ÁÕ¾Å Ñ Ê áÍ¡¤ÔÇÁÙàÅàµÍà ¢¹Ò´ 8 ºÔµ l ÁÕǧ¨ÃµÍºÊ¹Í§ÍÔ¹àµÍÃ Ã»Ñ µ àÇÅÒ¨ÃÔ§ËÃ×ÍÃÕÅä·Á Í¹Ô àµÍÃ Ã»Ñ µ l ÁÕÃкºµÃǨ¨Ñº¤ÇÒÁ¼Ô´¾ÅҴ㹡Ò÷íÒ§Ò¹ËÃ×ÍÇ͵ª ´Í ç¡ l ÁÕâÁ´ÙÅÊ×Í è ÊÒâ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊËÃ×Í SCI (Asynchronous Serial Communication Interface) l ÁÕâÁ´ÙÅàª×Í è Áµ ÍÍØ»¡Ã³ ͹ءÃÁẺ«Ô§â¤Ã¹ÑÊËÃ×Í SPI (Synchronous Serial Peripheral Interface) l ÁÕǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µ Ô ÍŤÇÒÁÅÐàÍÕ´ 8 ºÔµ 8 ª ͧ ÃѺáç´Ñ¹ä¿µÃ§ÍÔ¹¾Øµä´ 0-5V l ¡íÒ˹´âËÁ´·íÒ§Ò¹ä´ 4 âËÁ´¤×Í «Ô§à¡ÔŪԻ, ÁÑŵÔà¾Åç¡« ¢ÂÒ (µ Í˹ ǤÇÒÁ¨íÒÀÒ¹͡),ºÙµáʵÃç» (bootstrap : 㪠˹ ǤÇÒÁ¨íÒÃÍÁ¾ÔàÈÉÀÒÂã¹Ã ÇÁ¡ÑºÇ§¨Ãàª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ) áÅÐâËÁ´·´Êͺ ¾ÔàÈÉ áµ ·Òí §Ò¹ä´ ¨ÃÔ§ 3 âËÁ´ àÇ ¹âËÁ´«Ô§à¡ÔŪԻ l µ ͧ¡ÒáÃÐáÊä¿¿ Ò¢³Ð·íÒ§Ò¹»ÃÐÁÒ³ 60-75mA ·Õ¤ è ÇÒÁ¶ÕÊè ­ Ñ ­Ò³¹ÒÌ ¡Ò 8MHz áÅзíÒ§Ò¹ã¹âËÁ´ «Ô§à¡ÔŪԻËÃ×ͺٵáʵÃç» àÁ×Íè ·íÒ§Ò¹ã¹ÀÒÇлÃÐËÂÑ´¾Åѧ§Ò¹µ ͧ¡ÒáÃÐáÊä¿¿ Òà¾Õ§ 25µA l µ ͧ¡ÒÃä¿àÅÕÂ é §ã¹Â Ò¹ +3 ¶Ö§ +5.5V l µÑǶѧẺ PLCC ¨íҹǹ 52 ¢Ò l


130

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.1 â¤Ã§Êà ҧÀÒÂã¹·Ò§ÎÒà ´áÇà ¢Í§ MC68HC11E1 ã¹ÃÙ»·Õè 5-1 áÊ´§ºÅçÍ¡ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ÀÒÂ㹢ͧ MC68HC11E1 ËÑÇã¨ËÅÑ¡¤×Í «Õ¾Õ ÂÙ M68HC11 «Ö§è ¨Ðä´ ÃºÑ ¡ÒáíÒ˹´âËÁ´·íÒ§Ò¹´ ÇÂÊÑ­­Ò³Åͨԡ·Õ¢è Ò MODA áÅÐ MODB Ê Ç¹ »ÃСͺÍ×è¹·ÕèÊíҤѭ¤×Í Ë¹ ǤÇÒÁ¨íÒÀÒÂã¹·ÕÁè ·Õ §Ñé ẺáÃÁ (RAM) ÍÕÍ¾Õ ÃÍÁ (EEPROM) áÅкٵÃÍÁ (Boot ROM) «Ö§è ¨ÐÁÕº·ºÒ·Í ҧÁÒ¡àÁ×Íè ¹íÒÁÒ㪠ã¹á¼§Ç§¨Ã AX-11 Ê Ç¹Ê×Íè ¢ ÍÁÙÅ͹ءÃÁ ËÃ×Í SCI «Ö§è Ê Ç¹ãË­ ¨Ð㪠µ´Ô µ ͡Ѻ¤ÍÁ¾ÔÇàµÍà ¼Ò ¹·Ò§¾Íà µÍ¹Ø¡ÃÁ Ê Ç¹àª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁ ËÃ×Í SPI 㪠㹡ÒõԵ´ ͡ѺÍØ»¡Ã³ ÀÒ¹͡ËÃ×͵ ; ǧäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà à¾ÔèÁàµÔÁà¾×èÍ·íÒ§Ò¹ã¹áººËÅÒµÑÇ»ÃÐÁÇżÅËÃ×ÍÁÑŵÔâ»Ãà«Êà«Íà , Ê Ç¹¨Ñ´¡ÒÃÊÑ­­Ò³¹ÒÌ ¡Ò 㪠¤Çº¤ØÁ¨Ñ§ËÇÐ㹡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ Ê Ç¹¨Ñ´¡ÒÃÅͨԡÍÔ¹àµÍÃ Ã»Ñ µ ·íÒ˹ Ò·Õ¨è ´Ñ ÅíҴѺà¾×Íè µÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ËÃ×Í¡ÒâѴ ¨Ñ§ËÇзíÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

ǧ¨Ã¡íÒà¹Ô´ ÊÑ­­Ò³¹ÒÌÔ¡Ò

Ãкºä·àÁÍÃ

ÍÔ¹àµÍÃ Ã»Ñ µ ¤ÒºàÇÅÒ

Ãкº Ç͵ª ´Íç ¡ (COP)

˹ ǤÇÒÁ¨íÒáÃÁ (RAM) 512 亵

«Õ¾ÂÕ ËÙ ÅÑ¡ M68HC11

ºÑÊ¢ÂÒÂáÍ´à´ÃÊ

áÍ´à´ÃÊ/¢ ÍÁÙÅ

Ê Ç¹àª×Íè Áµ Í ÍØ»¡Ã³ ͹ءÃÁ (SPI)

Ê Ç¹Ê×Íè ÊÒà ¢ ÍÁÙÅ͹ءÃÁ (SCI)

ºÙµÃÍÁ (Boot ROM) 256 亵

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

R/W AS

PC7/A7/D7 PC6/A6/D6 PC5/A5/D5 PC4/A4/D4 PC3/A3/D3 PC2/A2/D2 PC1/A1/D1 PC0/A0/D0

ÃÙ»·Õè 5-1 â¤Ã§Êà ҧ¡Ò÷íÒ§Ò¹ÀÒÂ㹢ͧ MC68HC11E1

PD1/TxD PD0/RxD

¾Íà µ D PD5/SS PD4/SCK PD3/MOSI PD2/MISO

¾Íà µ C STRA/AS

Ê Ç¹¤Çº¤ØÁ

¾Íà µ B

STRB/RW

Ê Ç¹¤Çº¤ØÁ ¾Íà µ A

PB7/A15 PB6/A14 PB5/A13 PB4/A12 PB3/A11 PB2/A10 PB1/A9 PB0/A8

Ê Ç¹¨Ñ´¡ÒÃáÅеÃǨÊͺÊÑ­­Ò³ ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ

˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ (EEPROM) 512 亵

PA7/PAI PA6/OC2/OC1 PA5/OC3/OC1 PA4/OC4/OC1 PA3/OC5/IC4/OC1 PA2/IC1 PA1/IC2 PA0/IC3

PAI OC2 OC3 OC4 OC5/IC4/OC1 IC1 IC2 IC2

¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍÃ

RESET

Ê Ç¹¨Ñ´¡ÒÃÅͨԡ ¢Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ

Ê Ç¹¨Ñ´¡ÒÃÅͨԡ ¢Í§ÊÑ­­Ò³¹ÒÌÔ¡Ò

Ê Ç¹¤Çº¤ØÁâËÁ´¡Ò÷íÒ§Ò¹

XIRQ

¾Íà µ E PE7/AN7 PE6/AN6 PE5/AN5 PE4/AN4 PE3/AN3 PE2/AN2 PE1/AN1 PE0/AN0

IRQ

TxD RxD

E

SS SCK MOSI MISO

XTAL EXTAL

STRA

MODB

STRB

MODA

VDD VSS

VRH VRL


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

131

ÃкºµÑǵÑé§àÇÅÒËÃ×Íä·àÁÍà 㪠¡íÒ˹´áÅШѴÊÃÃàÇÅÒ㹡Ò÷íÒ§Ò¹¢Í§«Õ¾ÕÂÙ «Öè§ÊÑÁ¾Ñ¹¸ ¡ÑºÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡¢Í§Ãкº ¹Í¡¨Ò¡¹Ñé¹ÂѧÁÕÊ Ç¹µÔ´µ ͡Ѻ¢Ò¾Íà µÀÒ¹͡à¾×è͵ÃǨ¨Ñº ÊÑ ­ ­Ò³àÁ×è Í µ Í §¡ÒûÃÐÁÇżÅÊÑ ­ ­Ò³¨Ò¡ÀÒ¹͡ËÃ× Í Ê § ÊÑ ­ ­Ò³ÍÍ¡ËÅÑ § ¨Ò¡·Õè ÁÕ ¡ Òà »ÃÐÁÇÅáÅÐà»ÃÕºà·ÕºáÅ Ç Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŠ㪠á»Å§ÊÑ­­Ò³ËÃ×Íáç´Ñ¹ä¿µÃ§ãË à» ¹¢ ÍÁÙÅ ´Ô¨ÔµÍÅà¾×èÍÊ §µ Íä»»ÃÐÁÇżŷÕè«Õ¾ÕÂÙ ·íÒãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÒÁÒöÃѺÃÙ ËÃ×ÍÇÑ´¤ Ò»ÃÔÁÒ³ ·Ò§¿ ÊÔ¡Ê ä´ ÊØ´· Ò¤×Í Ê Ç¹¨Ñ´¡ÒþÍà µ à¹×Íè §¨Ò¡¢Ò¾Íà µËÃ×Í¢Òàª×Íè Áµ ÍÍØ»¡Ã³ áÅÐÊÑ­­Ò³ÀÒ¹͡ ¢Í§ MC68HC11E1 ÁÕÁÒ¡áÅÐ㹺ҧ¢ÒÂѧÁÕ¡Ò÷íÒ§Ò¹·Õè« Í¹¡Ñ¹ÁÒ¡¡Ç Ò 1 ˹ Ò·Õè ¨Ö§¨íÒà» ¹Í ҧ ÂÔ§è ·Õ¨è е ͧÁÕÃкºËÃ×Íǧ¨ÃÁҨѴ¡ÒÃãË â´Â¨Ðᡡѹä»ã¹¢Ò¾Íà µáµ ÅСÅØÁ ¤×Í ¡ÅØÁ ¾Íà µ A, B, C, D áÅÐ E

5.2 ¡ÒèѴ¢Ò¢Í§ MC68HC11E1 áÅÐ˹ Ò·Õ¡è Ò÷íÒ§Ò¹

1

PE4/AN4

2

PE5/AN5

MODB

3

PE6/AN6

MODA

4

PE7/AN7

STRA/AS

5

VRL

E

6

VRH

STRB/R/W

7

VSS

EXTAL

ã¹ÃÙ»·Õè 5-2 áÊ´§¡ÒèѴ¢Ò¢Í§ MC68HC11E1 «Ö§è ºÃèØÍÂÙã ¹µÑǶѧẺ PLCC (Plastic-Lead Chip Carrier) 52 ¢Ò ¡ÒùíÒä»ãª ¨§Ö ¤ÇÃ㪠ÃÇ Á¡Ñº«çÍ¡à¡çµáºº PLCC 52 ¢Ò «Ö§è áÊ´§´Ñ§Ãٻà ҧ ¾Ã ÍÁµíÒá˹ §¡ÒèѴ¢Ò«çÍ¡à¡çµã¹ÃÙ»·Õè 5-3 ÊíÒËÃѺ¡Ò÷íÒ§Ò¹¢Í§áµ ÅТÒÊÃØ»äÇ ã¹µÒÃÒ§·Õè 5-1

52 51 50 49 48 47

XTAL

8

46

PE3/AN3

PC0/A0/D0

9

45

PE2/AN2

PC1/A1/D1

10

44

PE1/AN1

PC2/A2/D2

11

43

PE0/AN0

PC3/A3/D3

12

42

PB0/A8

PC4/A4/D4

13

41

PB1/A9

PC5/A5/D5

14

40

PB2/A10

PC6/A6/D6

15

39

PB3/A11

MC68HC11E1

7

5

3

1

51

49

47

9

6

4

2

52

50

IRQ

19

35

PB7/A15

12

13

43

42

20 34 21 22 23 24 25 26 27 28 29 30 31 32 33

PA0/IC3

14

15

41

40

16

17

39

38

18

19

37

36

20

22

24

26

28

30

32

35

34

21

23

25

27

29

31

33

PD1/TxD

PD0/RxD

PA1/IC2

PB6/A14

PA2/IC1

36

PA3/OC5/IC4/OC1

18

PA4/OC4/OC1

44

XIRQ

PA5/OC3/OC1

45

PA6/OC2/OC1

11

PA7/PAI/OC1

46

10

VDD

48

PB5/A13

PD5/SS

PB4/A12

37

PD4/SCK

38

17

PD3/MOSI

16

RESET

PD2/MISO

PC7/A7/D7

8

ÃÙ»·Õè 5-2 ¡ÒèѴ¢Ò¢Í§ MC68HC11E1 «Ö§è ÁÕµÇÑ ¶Ñ§ ÃÙ»·Õè 5-3 Ãٻà ҧáÅСÒèѴ¢Ò¢Í§«çÍ¡à¡çµáºº PLCC à» ¹áºº PLCC 52 ¢Ò 52 ¢Ò


132

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¢Ò·Õè 1

ª×Íè ¢Ò

2 3 4

MODB

STRA/AS

5

E

E-Clock Output : à» ¹¢ÒàÍÒµ ¾ØµÊÑ­­Ò³¹ÒÌÔ¡Ò ãª ÊíÒËÃѺ¡ÒÃÍ Ò§ÍÔ§ ÁÕ¤ÇÒÁ¶Õè෠ҡѺ 1/4 ෠Ңͧ¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌÔ¡ÒÍÔ¹¾Øµ ·Õè¢Ò XTAL áÅÐ EXTAL

6

STRAB/R/W

Strobe B/Read or Write : àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ ¨Ð·íҧҹ໠¹¢ÒàÍÒµ ¾ØµÊ §ÊÑ­­Ò³µÃǨÊͺËÃ×Íáι´ àªç¡ä»ÂѧÍØ»¡Ã³ àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ ¨Ð·íҧҹ໠¹¢ÒàÍÒµ ¾ØµÊíÒËÃѺàÅ×Í¡Í Ò¹ (Åͨԡ "1") ËÃ×Íà¢Õ¹ (Åͨԡ "0") ¢ ÍÁÙÅ㹺ÑÊ¢ ÍÁÙÅ

EXTAL

¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³¹ÒÌÔ¡Ò¨Ò¡ÀÒ¹͡ â´ÂÁÕ¤ÇÒÁ¶Õèà» ¹ 4 ෠Ңͧ¤ÇÒÁ¶Õè·Õè¢Ò E áÅÐ㪠µ ͡Ѻ¤ÃÔʵÍÅ ¢Òµ ͤÃÔʵÍÅÊíÒËÃѺ¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌÔ¡ÒËÅÑ¡ ·íҧҹà ÇÁ¡Ñº¢Ò EXTAL à» ¹¡ÅØ Á¢Ò¾Íà µ C ·Ñé§ 8 ¢ÒàÃÕ§ÅíҴѺ¨Ò¡ºÔµ 0 仺Ե 7 àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ ¨Ðà» ¹¢Ò¾Íà µ 2 ·ÔÈ·Ò§ (ÍÔ¹¾Øµ/àÍÒµ ¾Øµ) àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ ¨Ð㪠໠¹¢ÒµÔ´µ ÍáÍ´à´ÃʺԵ 0 ¶Ö§ºÔµ 7 ËÃ×Í¢Ò¢ ÍÁÙÅ D0-D7 ¢Í§Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡ ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·Õè¢Ò STRA/AS

7 8 9-16

17 18 19

Vss

MODA

XTAL PC0/AD0/D0PC7/AD7/D7

RESET XIRQ

IRQ

20 21

PD0/RxD

22 23

PD2/MISO

24 25

PD4/SCK

PD1/TxD

PD3/MOSI

PD5/SS

¡Ò÷íÒ§Ò¹ ¢Òµ Í¡ÃÒÇ´ ¢ÒÍÔ¹¾Øµ¡íÒ˹´âËÁ´¡Ò÷íÒ§Ò¹¢Í§ MC68HC11 ·íҧҹà ÇÁ¡Ñº¢Ò MODA ¢ÒÍÔ¹¾Øµ¡íÒ˹´âËÁ´¡Ò÷íÒ§Ò¹¢Í§ MC68HC11 ·íҧҹà ÇÁ¡Ñº¢Ò MODB Strobe A/Address Strobe : àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ ¨Ð·íҧҹ໠¹¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³áι´ àªç¡ (strobe input) àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ ¨Ð·íҧҹ໠¹¢ÒàÍÒµ ¾Øµ ÊíÒËÃѺàÅ×Í¡¡ÒÃÊ §¤ ÒáÍ´à´ÃÊä»Âѧ˹ ǤÇÒÁ¨íÒÀÒ¹͡

¢ÒÃÕ૵ à» ¹¢ÒÍÔ¹¾Øµ ·íÒ§Ò¹·ÕèÅͨԡ "0" ¤Çõ ͡ѺäÍ«ÕÊíÒËÃѺÊà ҧÊÑ­­Ò³ÃÕ૵ ÍÒ·Ô àºÍà MC34064 ËÃ×Í DS1233 ËÃ×Í KIA7042 Non-maskable Interrupt : ¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÀÒ¹͡ẺäÁ ÁÕ¡ÒÃÃÐºØ ÁÕ¹ÑÂÊíҤѭÊÙ§ÊØ´ ·íÒ§Ò¹·ÕèÅͨԡ "0" ã¹ÀÒÇл¡µÔãË µ ͵Ñǵ Ò¹·Ò¹ 4.7kΩ ¾ÙÅÍÑ»¡Ñºä¿àÅÕé§ +5V àÁ×èÍà¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ Ẻ¹Õé¢Öé¹ ºÔµ x ã¹ CCR ¨Ð૵ Interrupt Request : ¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡ÀÒ¹͡ ·íÒ§Ò¹·ÕèÅͨԡ "0" ËÃ×͢ͺ¢Òŧ¢Í§ÊÑ­­Ò³¢Öé¹ÍÂÙ ¡Ñº ¡ÒáíÒ˹´·ÕèÃÕ¨ÔÊàµÍà OPTION ã¹ÀÒÇл¡µÔãË µ ͵Ñǵ Ò¹·Ò¹ 4.7kΩ ¾ÙÅÍÑ»¡Ñºä¿àÅÕé§ +5V ¾Íà µ D ºÔµ 0 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/ÍÔ¹¾ØµÃѺ¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ (SCI) ¾Íà µ D ºÔµ 1 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/àÍÒµ ¾ØµÊ §¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ (SCI) ¾Íà µ D ºÔµ 2 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/ÍÔ¹¾ØµÃѺ¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹàª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) ¾Íà µ D ºÔµ 3 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/àÍÒµ ¾ØµÊ §¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹàª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) ¾Íà µ D ºÔµ 4 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/àÍÒµ ¾ØµÊ §ÊÑ­­Ò³¹ÒÌÔ¡Ò¢Í§Ê Ç¹àª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) ¾Íà µ D ºÔµ 5 à» ¹ä´ ·Ñé§ÍÔ¹¾ØµáÅÐàÍÒµ ¾Øµ/ÍÔ¹¾ØµàÅ×Í¡ãË ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿¢Í§Ê ǹàª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI)

26 27

PA7/PAI/OC1

28

PA6/OC2

¾Íà µ A ºÔµ 6/àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·Õºª ͧ 2 (OC2) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍÃ

29 30

PA5/OC3

¾Íà µ A ºÔµ 5/àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·Õºª ͧ 3 (OC3) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍà ¾Íà µ A ºÔµ 4/àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·Õºª ͧ 4 (OC4) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍÃ

31 32

PA3/OC5/IC4

33 34 35-42

PA1/IC2

43-50

VDD

PA4/OC4

PA2/IC1

PA0/IC3 PB7/AD15PB0/AD8 PE0/AN0PE7/AN7

¢Òµ Íä¿àÅÕé§ ÃдѺáç´Ñ¹ä¿àÅÕé§ 3 ¶Ö§ 5.5V ¾Íà µ A ºÔµ 7/ÍÔ¹¾ØµÊíÒËÃѺÃѺÊÑ­­Ò³¾ÑÅÊ ¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà (PAI)/àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·Õºª ͧ 1 (OC1) ¢Í§Ê ǹµÑé§àÇÅÒ

¾Íà µ A ºÔµ 3/àÍÒµ ¾ØµÇ§¨Ãà»ÃÕºà·Õºª ͧ 5 (OC5) ËÃ×ÍÍÔ¹¾ØµÇ§¨ÃµÃǨ¨ÑºÊÑ­­Ò³ª ͧ 4 (IC4) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍà ¾Íà µ A ºÔµ 2/ÍÔ¹¾ØµÇ§¨ÃµÃǨ¨ÑºÊÑ­­Ò³ª ͧ 1 (IC1) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍà ¾Íà µ A ºÔµ 1/ÍÔ¹¾ØµÇ§¨ÃµÃǨ¨ÑºÊÑ­­Ò³ª ͧ 2 (IC2) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍà ¾Íà µ A ºÔµ 0/ÍÔ¹¾ØµÇ§¨ÃµÃǨ¨ÑºÊÑ­­Ò³ª ͧ 3 (IC3) ¢Í§Ê ǹµÑé§àÇÅÒËÃ×Íä·àÁÍà ໠¹¡ÅØ Á¢Ò¾Íà µ B ·Ñé§ 8 ¢ÒàÃÕ§ÅíҴѺ¨Ò¡ºÔµ 7 仺Ե 0 àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ ¨Ðà» ¹¢Ò¾Íà µàÍÒµ ¾Øµ·Ñé§ËÁ´ àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ ¨Ð㪠໠¹¢ÒµÔ´µ ÍáÍ´à´ÃʺԵ 15  ͹件֧ºÔµ 8 ¢Í§Ë¹ ǤÇÒÁ¨íÒÀÒ¹͡ à» ¹¡ÅØ Á¢Ò¾Íà µ E ·Ñé§ 8 ¢ÒàÃÕ§ÅíҴѺ¨Ò¡ºÔµ 0 仺Ե 7 ÊÒÁÒö·íҧҹ໠¹¾Íà µÍÔ¹¾Øµ´Ô¨ÔµÍÅáÅоÍà µÍÔ¹¾ØµÍйÒÅÍ¡¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ

51

VRL

¢ÒÍÔ¹¾ØµÃѺáç´Ñ¹Í Ò§ÍÔ§´ Ò¹µíèҢͧǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅÀÒÂã¹ MC68HC11 »¡µÔµ Íŧ¡ÃÒÇ´

52

VRH

¢ÒÍÔ¹¾ØµÃѺáç´Ñ¹Í Ò§ÍÔ§´ Ò¹ÊÙ§¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅÀÒÂã¹ MC68HC11 ¤ÇÃÁÕ¤ ÒÊÙ§¡Ç Ò VRL Í ҧ¹ Í 3V

µÒÃÒ§·Õè 5-1 ÃÒÂÅÐàÍÕ´â´ÂÊÃØ»¢Í§¢Òµ Í㪠§Ò¹·Ñ§é ËÁ´¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MC68HC11E1


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

133

5.3 Ê Ç¹»ÃÐÁÇżÅËÅÑ¡¢Í§ MC68HC11E1 ËÑÇã¨ã¹¡Ò÷íÒ§Ò¹¢Í§Ê ǹ»ÃÐÁÇżÅËÅÑ¡ÀÒÂã¹ MC68HC11 ¤×Í ÃÕ¨ÊÔ àµÍà ÊÇ ¹»ÃÐÁÇÅ ¼ÅËÅÑ¡ ·ÕÁè ´Õ Ç Â¡Ñ¹ 8 µÑÇ ´Ñ§áÊ´§ã¹ÃÙ»·Õè 5-4 Íѹ»ÃСͺ´ Ç 1. áÍ¡¤ÔÇÁÙàÅàµÍà A ÁÕ¢¹Ò´ 8 ºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ËÅѡ㪠»ÃÐÁÇżŤ³ÔµÈÒʵà áÅÐÅͨԡ 2. áÍ¡¤ÔÇÁÙàÅàµÍà B ÁÕ¢¹Ò´ 8 ºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ËÅѡ㪠»ÃÐÁÇżŤ³ÔµÈÒʵà áÅÐÅͨԡ à ÇÁ¡ÑºáÍ¡¤ÔÇÁÙàÅàµÍà A 3. áÍ¡¤ÔÇÁÙàÅàµÍà D ÁÕ¢¹Ò´ 16 ºÔµ à» ¹ÃÕ¨ÊÔ àµÍà ·àÕè ¡Ô´¨Ò¡·íÒ§Ò¹ÃÇÁ¡Ñ¹¢Í§áÍ¡¤ÔÇÁÙàÅàµÍà A áÅÐ B àÁ×Íè µ ͧ¡ÒûÃÐÁÇżŷҧ¤³ÔµÈÒʵà ã¹ÃдѺ 16 ºÔµ ÍÑ¹ä´ á¡ ¡ÒäٳáÅÐËÒà 4. ÃÕ¨ÊÔ àµÍà ´ªÑ ¹Õ X ËÃ×Í IX (Index register X) ÁÕ¢¹Ò´ 16 ºÔµ 㪠¡Òí ˹´áÍ´à´Ãʢͧ˹ Ç ¤ÇÒÁ¨íÒ㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ´Ñª¹Õ (indexd addressing mode) àÁ×Íè ÁÕ¡ÒÃàÃÕ¡㪠§Ò¹ ¤ ÒáÍ´ à´ÃÊ·ÕèࢠҶ֧¨Ðà¡Ô´¨Ò¡¡ÒÃÃÇÁ¤ ҢͧÃÕ¨ÔÊàµÍà IX ¡Ñº¤ ÒâÍà»Íáù´ ·Õè㪠㹤íÒÊÑ觹Ñé¹æ 5. ÃÕ¨ÊÔ àµÍà ´ªÑ ¹Õ Y ËÃ×Í IY (Index register Y) ÁÕ¢¹Ò´ 16 ºÔµ 㪠¡Òí ˹´áÍ´à´Ãʢͧ˹ Ç ¤ÇÒÁ¨íÒ㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ´Ñª¹ÕàËÁ×͹¡ÑºÃÕ¨ÊÔ àµÍà IX ÊÒÁÒö㪠§Ò¹ IX áÅÐ IY à¾×Íè à¡çº¤ Òᡨҡ¡Ñ¹ÍÔÊÃÐä´ 6. ÃÕ¨ÊÔ àµÍà µÇÑ ªÕÊé áµç¡ (Stack pointer : SP) ÁÕ¢¹Ò´ 16 ºÔµ 㪠à¡çº¤ ÒáÍ´à´Ãʺ¹ÊØ´¢Í§¾×¹é ·Õè ˹ ǤÇÒÁ¨íÒÊíÒÃͧ·Õäè ´ ÃºÑ ¡ÒèѴÊÃÃäÇ ãË ãª ã¹¡Òþѡ¢ ÍÁÙŢͧÃÕ¨ÊÔ àµÍà à¾×Íè ¨Ðä´ ä»»ÃÐÁÇÅ áÍ¡¤ÔÇÁÙàÅàµÍà A áÍ¡¤ÔÇÁÙàÅàµÍà B

ÃÕ¨ÊÔ àµÍà X (ÃÕ¨ÊÔ àµÍà ´ªÑ ¹Õ-µÑǪÕé X)

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

áÍ¡¤ÔÇÁÙàÅàµÍà D (áÍ¡¤ÔÇÁÙàÅàµÍà ¤)Ù 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ÃÕ¨ÊÔ àµÍà Y (ÃÕ¨ÊÔ àµÍà ´ªÑ ¹Õ-µÑǪÕé Y) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Êáµç¡¾Í¹ àµÍà (µÑǪÕÊé áµç¡-SP)

â»Ãá¡ÃÁà¤Ò¹ àµÍà (PC)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

ÃÕ¨ÊÔ àµÍà á¿Å¡áÊ´§Ê¶Ò¹Ð (CCR : Condition Code Register)

S XH I NZ V C 7 6 5 4 3 2 1 0

ËÂØ´ËÃ×Í´ÔÊàÍàºÔÅ XIRQ ÍÔ¹àµÍà ÃÑ»µ ÁÒÊ¡ á¿Å¡·´ÃÐËÇ Ò§ËÅÑ¡ ÍÔ¹àµÍà ÃÑ»µ ÁÒÊ¡ á¿Å¡Åº á¿Å¡Èٹ á¿Å¡à¡Ô¹ á¿Å¡·´

ÃÙ»·Õè 5-4 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÃÕ¨ÊÔ àµÍà ÊÇ ¹»ÃÐÁÇżÅËÅÑ¡¢Í§ MC68HC11E1


134

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¼Å㹧ҹÍ×蹡 ͹ ¨Ò¡¹Ñ鹨֧¡ÅѺÁÒÍ Ò¹¢ ÍÁÙÅ·Õè¾Ñ¡äÇ ¡ ͹˹ Ò áÅ Ç¡ÅѺ价íÒ§Ò¹ËÅÑ¡µ Íä» ¤ Ңͧ SP ¨ÐŴŧËÃ×Íà¾ÔèÁ¢Öé¹Í ҧÍѵâ¹ÁѵÔàÁ×èÍÁÕ¡ÒÃÍ Ò¹¢ ÍÁÙÅÍÍ¡ä»ËÃ×Íà¢Õ¹¢ ÍÁÙÅࢠÒÁÒã¹ Êáµç¡ â´Â¾×é¹·Õè¢Í§Êáµç¡ÊÒÁÒö»ÃѺà»ÅÕèÂ¹ä´ µÒÁ¾×é¹·Õè·ÕèàËÅ×ͧ͢˹ ǤÇÒÁ¨íÒ ·Ñé§ÂѧÊÒÁÒö ÍÂÙã ¹µíÒá˹ §ã´¡çä´ ã¹¢Íºà¢µ¢Í§Ë¹ ǤÇÒÁ¨íÒ ·Ñ§é ¹Õàé ¹×Íè §¨Ò¡¤ Ңͧ SP à» ¹ 16 ºÔµ¨Ö§ÊÒÁÒö Í Ò§¶Ö§áÍ´à´ÃÊã´æ ¡çä´ ã¹¾×¹é ·ÕËè ¹ ǤÇÒÁ¨íÒ 64 ¡ÔâÅ亵 7. ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñºâ»Ãá¡ÃÁ ËÃ×Í â»Ãá¡ÃÁà¤Ò¹ àµÍà (Program Counter : PC) ÁÕ¢¹Ò´ 16 ºÔµ 㪠㹡ÒêÕéµíÒá˹ §áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒ·Õè«Õ¾ÕÂÙ¡íÒÅѧ¨ÐࢠҶ֧à¾×èÍ·íÒ§Ò¹µ Íä» 8. ÃÕ¨ÊÔ àµÍà ÃËÑÊʶҹРËÃ×Í CCR (Condition Code Register) ÁÕ¢¹Ò´ 8 ºÔµ 㪠㹡ÒÃáÊ´§ ʶҹТͧ¡Ò÷íÒ§Ò¹ÀÒÇл¡µÔ 5 ºÔµ áÅÐáÊ´§Ê¶Ò¹Ð¢Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Í¡Õ 3 ºÔµ ÍÒ¨àÃÕ¡ºÔµ ·Õãè ª áÊ´§Ê¶Ò¹ÐÇ Ò á¿Å¡ (flag) â´Â ºÔµ S (Stop disable) ૵à¾×Íè » ͧ¡Ñ¹äÁ ãË 68HC11 ¡ÃзíÒ¤íÒÊѧè STOP à¾×Íè ËÂØ´¡Òà ·íÒ§Ò¹à¹×èͧ¨Ò¡à¡Ô´ÀÒÇоÅѧ§Ò¹Å´µèíÒŧ ºÔµ¹Õé¨Ð૵Íѵâ¹ÁѵÔàÁ×èÍà¡Ô´¡ÒÃÃÕ૵ ºÔµ X (Non-maskable interrupt mask) 㪠à¾×Íè ãË 68HC11 ¡íÒ˹´¡ÒõͺʹͧÍÔ¹àµÍà ÃÑ»µ ·Õè¢Ò XIRQ â´Â»¡µÔºÔµ¹Õé¨Ð૵â´ÂÍѵâ¹ÁѵԷҧÎÒà ´áÇà 㹷ѹ·Õ·Õèà¡Ô´¡ÒÃÃÕ૵à¹×èͧ¨Ò¡ ÊÑ­­Ò³·Õ¢è Ò RESET ËÃ×Íà¡Ô´à¾ÒàÇÍà Í͹ÃÕ૵ËÃ×Íà¡Ô´ÊÑ­­Ò³Åͨԡ 0 ࢠÒÁÒ·Õ¢è Ò XIRQ ¡Ò÷Õè ºÔµ X ૵¨Ð·íÒãË «¾Õ ÂÕ äÙ Á ÊÒÁÒöµÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õäé ´ ËÒ¡µ ͧ¡ÒÃàÍç¹àÍàºÔÅËÃ×Í ÂÍÁãË à¡Ô´¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õµé Í §à¤ÅÕÂà ºµÔ ¹Õ´é Ç Â¡ÒÃ㪠¤Òí Êѧè TAP àÁ×Íè ºÔµ¹Õàé » ¹ 0 ¢Öé¹·Õè¢Ò XIRQ ¨Ð·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¢Öé¹ «Õ¾ÕÂ٨е ͧ¡ÃÐâ´´ÍÍ¡¨Ò¡â»Ãá¡ÃÁËÅÑ¡à¾×èÍ·íÒ ¡ÒúÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¹Ñ ·Õ áµ ¶Ò ºÔµ¹Õ¶é ¡Ù ૵ËÃ×Í·íÒãË à» ¹ 1 ¡ç¨ÐäÁ à¡Ô´¡ÒúÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ºÔµ H (Half carry flag) à» ¹ºÔµáÊ´§Ê¶Ò¹Ð¡Ò÷´¢ ÒÁ¨Ò¡ºÔµ 3 ÁÒÂѧºÔµ 4 ¢Í§áÍ¡ ¤ÔÇÁÙàÅàµÍà àÁ×èÍ¡ÃзíÒ¤íÒÊÑ觺ǡ ºÔµá¿Å¡¹Õé㪠»ÃÐ⪹ àÁ×èͤíҹdz¢ ÍÁÙÅã¹ÃÙ»¢Í§àÅ¢°Ò¹ÊÔº ºÔµ I (Interrupt mask) 㪠¡Òí ˹´¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡·Ø¡áËÅ §¡íÒà¹Ô´ ¡ àÇ ¹¨Ò¡¢Ò XIRQ â´Â»¡µÔºµÔ ¹Õ¨é Ð૵â´ÂÍѵâ¹Áѵ·Ô Ò§ÎÒà ´áÇà 㹷ѹ·Õ·àÕè ¡Ô´¡ÒÃÃÕ૵·Õ¢è Ò RESET ËÃ×Íà¡Ô´à¾ÒàÇÍà Í͹ÃÕ૵ ËÃ×ÍàÁ×Íè à¡Ô´ÊÑ­­Ò³Åͨԡ 0 ¢Ö¹é ·Õ¢è Ò IRQ áÅÐàÁ×Íè ºÔµ¹Õàé «µ ¨ÐËÁÒ ¤ÇÒÁÇ Ò 68HC11 ¨ÐäÁ ÁÕ¡Òõͺʹͧ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ´Ñ§¹Ñé¹ËÒ¡µ ͧ¡ÒÃãË ºÃÔ¡ÒÃÍÔ¹àµÍà ÃÑ»µ µ ͧ·íÒ¡ÒÃà¤ÅÕÂà ºÔµ¹Õé «Öè§ÊÒÁÒö·íÒä´ ´ Ç¡Ãкǹ¡ÒëͿµ áÇà àÁ×èͺԵ¹Õéà» ¹ 0 áÅÐà§×èÍ¹ä¢ ¢Í§¡ÒÃà¡Ô´ÍÔ¹àµÍà ÃÑ»µ ¨Ò¡áËÅ §¡íÒà¹Ô´ÍÔ¹àµÍà ÃÑ»µ µ Ò§æ ·ÕèºÔµ¹Õéà¡ÕèÂÇ¢ ͧ´ Ç«Öè§ÁÕÁÒ¡¶Ö§ 15 Ẻ໠¹¨ÃÔ§ ¡ç¨Ðà¡Ô´¡ÒúÃÔ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ·Ñ¹·Õ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

135

ºÔµ N (Negative flag) à» ¹ºÔµáÊ´§¤ Òź ¨Ð૵໠¹ 1 àÁ×Íè ¡Òäíҹdz·Ò§¤³ÔµÈÒʵà àÊÃç¨ÊÔ¹é áŠǤ ҢͧºÔµ¹ÑÂÊíҤѭÊÙ§ÊØ´ËÃ×Í MSB à» ¹ 1 «Ö§è 㹡ÒäíҹdzàŢẺ¤Ô´à¤Ã×Íè § ËÁÒ (sign number) ºÔµ MSB 㪠᷹à¤Ã×Íè §ËÁÒ ËÒ¡à» ¹ºÇ¡ ºÔµ MSB à» ¹ 0 ¶ Òà» ¹Åº ºÔµ MSB ¨Ðà» ¹ 1 ºÔµ Z (Zero flag) à» ¹ºÔµáÊ´§¤ ÒÈٹ ËÅѧ¨Ò¡·ÕÁè ¡Õ Òäíҹdz·Ò§¤³ÔµÈÒʵà àÊÃç¨ ÊÔé¹ ¼ÅÅѾ¸ ·Õèà¡Ô´¢Öé¹à» ¹Èٹ ºÔµ¹Õé¨Ð૵ ºÔµ V (Overflow flag) à» ¹ºÔµáÊ´§¤ Òà¡Ô¹ ËÅѧ¨Ò¡·ÕèÁÕ¡Òäíҹdz·Ò§¤³ÔµÈÒʵà àÊÃç¨ÊÔé¹ áŠǼÅÅѾ¸ ·Õèà¡Ô´¢Öé¹ÁÕ¤ ÒÁÒ¡¡Ç Ò 255 ºÔµ¹Õé¨Ð૵ ºÔµ C (Carry/Borrow flag) à» ¹ºÔµáÊ´§¡Ò÷´ËÃ×ÍÂ×Á¤ ҢͧáÍ¡¤ÔÇÁÙàÅàµÍà àÁ×èÍ ¡ÃзíÒ¤íÒÊÑ§è ºÇ¡áÅÐź, 㪠áÊ´§¤ÇÒÁ¼Ô´¾ÅÒ´¢Í§¡ÒäٳáÅÐËÒà áÅÐãª ÃºÑ ¢ ÍÁÙŨҡºÔµ 7 àÁ×Íè ¡ÃзíÒ¤íÒÊÑè§à¡ÕèÂǡѺ¡ÒÃàÅ×è͹ËÃ×ÍËÁع¢ ÍÁÙÅ

5.4 âËÁ´¡Ò÷íÒ§Ò¹¢Í§ 68HC11 ¼Ù 㪠§Ò¹ÊÒÁÒöàÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¢Í§ 68HC11 ä´ â´Â¡ÒáíÒ˹´Ê¶Ò¹ÐÅͨԡ·Õè¢Ò MODA áÅÐ MODB ´Ñ§áÊ´§ã¹µÒÃÒ§·Õè 5-2 ¨ÐàËç¹Ç Ò 68HC11 ÁÕâËÁ´¡Ò÷íÒ§Ò¹ 4 âËÁ´¤×Í 1. âËÁ´«Ô§à¡ÔŪԻËÃ×ͪԻà´ÕèÂÇ 2. âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ 3. âËÁ´ºÙµáʵÃç» 4. âËÁ´·´Êͺ¾ÔàÈÉ

MODB

MODA

âËÁ´¡Ò÷íÒ§Ò¹ ªÔ»à´ÕèÂÇ («Ô§à¡ÔŪԻ) ÁÑŵÔà¾Åç¡« ¢ÂÒ ºÙµÊáµÃç» ·´Êͺ¾ÔàÈÉ

µÒÃÒ§·Õè 5-2 ¡ÒÃàÅ×Í¡âËÁ´·íÒ§Ò¹¢Í§ 68HC11


136

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.4.1 âËÁ´«Ô§à¡ÔŪԻËÃ×ͪԻà´ÕÂè Ç (Single chip operating mode)

ã¹âËÁ´¹Õé 68HC11 ¨Ð·íÒ§Ò¹à¾Õ§ÅíҾѧ â´Â㪠˹ ǤÇÒÁ¨íÒÃÍÁ (ROM) ÀÒÂã¹µÑÇ㹡Òà à¡çºâ»Ãá¡ÃÁ¤Çº¤ØÁáÅТ ÍÁÙÅ㹡ÒûÃÐÁÇżŷѧé ËÁ´ ÊíÒËÃѺ MC68HC11E1 äÁ ÁËÕ ¹ ǤÇÒÁ ¨íÒÃÍÁËÃ×ÍÍÕ¾ÃÍÁÍÂÙÀ ÒÂã¹ ¨Ö§äÁ ÊÒÁÒö·íÒ§Ò¹ã¹âËÁ´¹Õäé ´ Í ҧÊÁºÙó ´§Ñ ¹Ñ¹é 㹺Íà ´ AX-11 ¨Ö§äÁ 㪠¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õé ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õ¨é §Ö àËÁÒСѺ 68HC11 ã¹Ãع ·ÕÁè ËÕ ¹ ǤÇÒÁÍվà ÍÁËÃ×ÍÍÕÍ¾Õ ÃÍÁ¢¹Ò´ãË­ (ÁÒ¡¡Ç Ò 4 ¡ÔâÅ亵 ) ÁÒ¡¡Ç Ò »ÃÐ⪹ ¢Í§¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õ¤é Í× ãª Í»Ø ¡Ã³ µÍ à ÇÁ¹ Í·ÕÊè ´Ø ÁÕµÇÑ Í ҧǧ¨Ã¢Í§¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õáé Ê´§ã¹ÃÙ»·Õè 5-5 +5V 0.1/50V

26 52 V,, V,, 43 45 47 49 44 46

AN0/PE0 AN1/PE1 AN2/PE2 AN3/PE3 AN4/PE4 AN5/PE5 48 AN6/PE6 50 AN7/PE7

A/D port

35 36 37 38 39 40 PB2/A10 41 PB1/A9 42 PB0/A8

Digital output port B

16 15 14 13 12 11 PC2/AD2 10 PC1/AD1 9 PC0/AD0

Digital I/O port C

PB7/A15 PB6/A14 PB5/A13 PB4/A12 PB3/A11

+5V 2 3

4.7k

4.7k

MODB MODA

PC7/AD7 PC6/AD6 PC5/AD5 PC4/AD4 PC3/AD3

1k 52

VRH

1/50V 51 1

VRL Vss

18 XIRQ 19 IRQ

XIRQ IRQ

STRB/AS

+5V 1 +V

STRA/R/W

SPI & SCI port

6

564* 564)

47k

RESET 3 GND 2

4

17

RESET

$&0+

KIA7042

25 SS/PD5 24 SCK/PD4 23 MOSI/PD3 22 MISO/PD2 21 TxD/PD1 20 RxD/PD0

PAI/PA7 OC2/PA6 OC3/PA5 OC4/PA4 OC5/PA3 IC1/PA2 IC2/PA1 IC3/PA0

7

8 8MHz

22pF

10M 22pF

27 28 29 30 31 32 33 34

Timer port

ÃÙ»·Õè 5-5 ǧ¨Ã¡Ò÷íÒ§Ò¹ã¹âËÁ´ªÔ§à¡ÔŪԻ¢Í§ 68HC11 (äÁ ʹѺʹع㹠MC68HC11E1)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

137

5.4.2 âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ (Expanded multiplexed operating mode)

ã¹âËÁ´¹Õé¨Ðà¾ÔèÁàµÔÁ˹ ǤÇÒÁ¨íÒÀÒ¹͡ࢠÒä» ¾Ã ÍÁ¡ÑºÇ§¨Ã¶Í´ÃËÑÊáÍ´à´ÃÊ â´Â ˹ ǤÇÒÁ¨íÒ·Õàè ¾ÔÁè ࢠÒ仹ѹé ÊÒÁÒö㪠ẺÍÕ¾ÃÍÁ (EPROM : Erasable Programmable Read-Only Memory à» ¹Ë¹ ǤÇÒÁ¨íÒ·ÕèÊÒÁÒöà¢Õ¹-Åºä´ â´Â¡ÒÃźµ ͧáʧÍÑŵà ÒäÇâÍàÅçµ), ÍÕÍÕ¾ÃÍÁ (EEPROM : Electrical-Erasable Programmable Read-Only Memory à» ¹Ë¹ ǤÇÒÁ¨íÒ·ÕÊè ÒÁÒöà¢Õ¹ Åºä´ ´ ÇÂä¿¿ Ò), á¿Åª (flash memory ˹ ǤÇÒÁ¨íÒẺá¿Åª·ÕÊè ÒÁÒöź-à¢ÕÂ¹ä´ ´Ç Âä¿¿ Ò) áÅÐ áÃÁ (RAM : Random Access Memory ˹ ǤÇÒÁ¨íÒÊíÒËÃÑºÍ Ò¹áÅÐà¢Õ¹¢ ÍÁÙŪÑÇè ¤ÃÒÇ áÅÐ ¨ÐËÒÂä»àÁ×èͻŴä¿àÅÕé§äÍ«Õ) 㹺Íà ´ AX-11 àÅ×Í¡ãË 68HC11 ·íÒ§Ò¹ã¹âËÁ´¹Õàé ¾×Íè Ãѹâ»Ãá¡ÃÁ·Õàè ¢Õ¹¢Ö¹é «Ö§è ºÃèØÍÂÙ ã¹Ë¹Ç ¤ÇÒÁ¨íÒáÃÁ¢¹Ò´ 32 ¡ÔâÅ亵 µÑÇÍ ҧǧ¨Ã¢Í§¡Ò÷íÒ§Ò¹âËÁ´¹Õáé Ê´§ã¹ÃÙ»·Õè 5-6 +5V 0.1/50V

26 52 V,, V,, 43 AN0/PE0 45 AN1/PE1 47 AN2/PE2 49 AN3/PE3 44 AN4/PE4 46 AN5/PE5 48 AN6/PE6 50 AN7/PE7

A/D port

35 A15 36 A14 37 A13 38 A12 39 A11 40 A10 41 A9 42 A8

+5V

+5V 2 3

4.7k

4.7k

74HC573 MODB MODA

16 15 AD6 14 AD5 13 AD4 12 AD3 11 AD2 10 AD1 9 AD0 4 564* AS AD7

1k 52

VRH

1/50V 51 VRL 1 Vss 18

XIRQ IRQ

19

GND 2

17

RESET

MC68HC11E1

KIA7042

R/W

SPI & SCI port

9 D7 8 D6 7 D5 6 D4 5 D3 4 D2 3 D1 2 D0 11 LE

Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

12 13 14 15 16 17 18 19 1

A7 A6 A5 A4 A3 A2 A1 A0

External Memory

10

D7 D6 D5 D4 D3 D2 D1 D0

47k

RESET 3

20

XIRQ IRQ

+5V 1 +V

A15 A14 A13 A12 A11 A10 A9 A8

25 SS/PD5 24 SCK/PD4 23 MOSI/PD3 22 MISO/PD2 21 TxD/PD1 20 RxD/PD0

PAI/PA7 OC2/PA6 OC3/PA5 OC4/PA4 OC5/PA3

6

8 8MHz

22pF

10M 22pF

R/W

27 28 29 30 31

32 IC1/PA2 33 IC2/PA1 34 IC3/PA0

7

564)

Timer port

ÃÙ»·Õè 5-6 ǧ¨Ã¡Ò÷íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ ¢Í§ MC68HC11E1


138

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.4.3 âËÁ´ºÙµáʵÃç» (Boot strap operating mode)

à» ¹âËÁ´·ÕèÁÕ¡Ò÷íÒ§Ò¹¾ÔàÈɤ×Í ÊÒÁÒö¹íÒâ»Ãá¡ÃÁ·Õèà¢Õ¹¢Öé¹áÅ ÇâËŴࢠÒä»ã¹Ë¹ Ç ¤ÇÒÁ¨íÒáÃÁËÃ×ÍÍÕÍ¾Õ ÃÍÁÀÒÂã¹µÑÇªÔ»ä´ àÅ â´Â¨Ð㪠â»Ãá¡ÃÁ¤Çº¤ØÁ·Õºè ÃèØÍÂÙã ¹¾×¹é ·Õ·è àÕè ÃÕÂ¡Ç Ò ºÙµÃÍÁ (boot ROM) «Ö§è ÍÂÙ· áÕè Í´à´ÃÊ 0xBF40-0xBFFF â´Ââ»Ãá¡ÃÁ¤Çº¤ØÁ·ÕÍè ÂÙã ¹¾×¹é ·Õºè µÙ ÃÍÁ ¹Õéä´ ÃѺ¡ÒúÃèØÁÒ¨Ò¡âÁâµâÃÅ Ò ¼Ù ¼ÅÔµäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 àÁ×èÍ¡íÒ˹´ãË ·íҧҹ㹠âËÁ´¹Õé âÁ´ÙÅÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁËÃ×Í SCI ¨ÐÃÑºÊ §¢ ÍÁÙŢͧâ»Ãá¡ÃÁ¼ Ò¹¢Ò¾Íà µ TxD áÅÐ RxD à¾×Íè ¹íÒÁÒà¢Õ¹ŧã¹Ë¹ ǤÇÒÁ¨íÒ·Õáè Í´à´ÃÊ 0x0000 à» ¹µ ¹ä» áÅÐàÁ×Íè à¢Õ¹¢ ÍÁÙÅàÃÕºà Í 68HC11 ¨ÐÁÒàÃÔÁè ·íÒ§Ò¹·Õáè Í´à´ÃÊ 0x0000 㹺Íà ´ AX-11 ¨ÐàÅ×Í¡ãË ·Òí §Ò¹ã¹âËÁ´¹Õé àÁ×Íè µ ͧ ¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁŧã¹Ë¹ ǤÇÒÁ¨íÒ àÁ×èÍ´Òǹ âËÅ´àÃÕºà Í¡ç¨Ð¡ÅѺ价íÒ§Ò¹ã¹âËÁ´ ÁÑŵÔà¾Åç¡« ¢ÂÒµ Íä» ã¹ÃÙ»·Õè 5-7 áÊ´§Ç§¨Ã¢Í§¡Ò÷íÒ§Ò¹ã¹âËÁ´ºÙµáʵÃç» ¨ÐàËç¹Ç Ò ÁÕ¡Òà à¾ÔÁè àµÔÁǧ¨Ãàª×Íè Áµ ;Íà µÍ¹Ø¡ÃÁ RS-232 «Ö§è 㪠äÍ«Õ MAX232 ËÃ×Í ICL232 ࢠÒÁÒ +5V 0.1/50V

26

52

V,, 43 45 47 49

A/D port

44 46 48 50

V,,

AN0/PE0

PB7/A15

AN1/PE1

PB6/A14

AN2/PE2

PB5/A13

AN3/PE3

PB4/A12

AN4/PE4

PB3/A11

AN5/PE5

PB2/A10

AN6/PE6

PB1/A9

AN7/PE7

PB0/A8

35 36 37 38 39 40

Digital output port B

41 42

+5V

4.7k

PC7/AD7

1k

4.7k

52

PC6/AD6 PC5/AD5

VRH

PC4/AD4

1/50V 51 1 2 3 18

XIRQ

19

IRQ

PC3/AD3

VRL

PC2/AD2

Vss

PC1/AD1

MODB

PC0/AD0

MODA XIRQ

STRB/AS

IRQ

+5V 1 +V

STRA/R/W

GND 2

10/50V

10/50V 16

4 10/50V ICL232

SERIAL PORT RxD TxD GND

3

1 2 3 4

2k2

17

SPI port

RESET

24 23 22

5

13 12 11

Digital I/O port C

10 9

4 6

564* 564)

SS/PD5 SCK/PD4 MOSI/PD3

PAI/PA7

MISO/PD2

14

11

21 TxD/PD1

13

12

20

6

14

MC68HC11E1

KIA7042

25

2

10/50V 1

15

47k

RESET 3 +5V

16

OC2/PA6 OC3/PA5 OC4/PA4 OC5/PA3

RxD/PD0

IC1/PA2

15

IC2/PA1 IC3/PA0

YEL 3mm. 5-4 10/50V 7

8 8MHz

22pF

27 28 29 30 31 32 33 34

10M 22pF

ÃÙ»·Õè 5-7 ǧ¨Ã¡Ò÷íÒ§Ò¹ã¹âËÁ´ºÙµáʵÃ绢ͧ MC68HC11E1

Timer port


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

139

5.4.4 âËÁ´·´Êͺ¾ÔàÈÉ (Special test operating mode)

à» ¹âËÁ´·Õè㪠㹡Ò÷´Êͺ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊíÒËÃѺâç§Ò¹¼Ù ¼ÅÔµ ´Ñ§¹Ñé¹ã¹¡ÒÃ㪠§Ò¹»¡µÔ¨Ö§äÁ ¤ÇÃàÅ×Í¡ãË ·íÒ§Ò¹ã¹âËÁ´¹Õé

5.5 ¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íҢͧ MC68HC11E1 ã¹ÃÙ»·Õè 5-8 áÊ´§¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íҢͧ MC68HC11E1 ·Õâè ËÁ´¡Ò÷íҧҹẺµ Ò§æ à¹×èͧ¨Ò¡ 68HC11E1 äÁ ÁÕ˹ ÇÂÇÒÁ¨íÒÃÍÁÀÒÂã¹ ¨Ö§äÁ ÊÒÁÒö·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔÅªÔ»ä´ ¨Ö§áÊ´§¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íÒà¾Õ§ 3 âËÁ´¤×Í ÁÑŵÔà¾Åç¡« ¢ÂÒÂ, ºÙµáʵÃç» áÅÐâËÁ´·´Êͺ ¾ÔàÈÉ ¨ÐàËç¹ä´ Ç ÒÁÕ¤ÇÒÁ¤Å Ò¤ÅÖ§¡Ñ¹ÁÒ¡ â´Â੾ÒÐÍ ҧÂÔè§ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒÂáÅÐâËÁ´ ·´Êͺ¾ÔàÈÉ â´Âã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ¨ÐÁÕÊ Ç¹¢Í§ÍÔ¹àµÍà ÃÑ»µ àÇ¡àµÍà à¾ÔèÁàµÔÁࢠÒÁÒ N.... ÍÔ¹àµÍà ÃÑ»µ àÇ¡àµÍà N...+

N....

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡ N*...

ÍÔ¹àµÍÃ Ã»Ñ µ àÇ¡àµÍà N*.+

ºÙµÃÍÁ (boot ROM) N*.

N*%.. N*%.. N*$

N*%.. N*$

˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ 512 亵

N*%.. N*$

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡

N*$

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡ N !.

N !. N

N !. N

ÃÕ¨ÊÔ àµÍà 64 亵

N !. N

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡

N

˹ ǤÇÒÁ¨íÒ ÀÒ¹͡ N ..

N ..

N ..

N ..

N

N

N

âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒÂ

âËÁ´ºÙµÊáµÃç»

˹ ǤÇÒÁ¨íÒáÃÁ 512 亵 N

âËÁ´·´Êͺ¾ÔàÈÉ

ÃÙ»·Õè 5-8 ¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íҢͧ MC68HC11E1 ·Õâè ËÁ´¡Ò÷íҧҹẺµ Ò§æ


140

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

NOSEC

NOCOP

ROMON

EEON

áÍ´à´ÃÊ

ª×Íè ÃÕ¨ÊÔ àµÍÃ

0x103F CONFIG System Configuration register

0x103E

Reserve

RAM3

RAM2

RAM1

RAM0

REG3

REG2

REG1

REG0

0x103D INIT

RAM and I/O Mapping register

RBOOT

SMOD

MDA

IRV

PSEL3

PSEL2

PSEL1

PSEL0

0x103C HPRIO

Highest Priority i-bit Interrupt and Miscellaneous register

ODD

EVEN

BYTE

ROW

ERASE

EELAT

EPGM

0x103B PPROG EPROM and EEPROM Programming Control register

Bit-2

Bit-1

Bit-0

0x103A COPRST Arm/Reset COP Timer Circuitry register

CR1

CR0

0x1039 OPTION System Configuration Options register

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

ADPU

CSEL

IRQE

DLY

CME

PTCON

BPRT3

BPRT2

BPRT1

BPRT0

0x1038

Reserve

0x1037

Reserve

0x1036

Reserve

0x1035 BPROT

Block Protect Register A/D Result register 4

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1034 ADR4

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1033 ADR3

A/D Result register 3

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1032 ADR2

A/D Result register 2

Bit-7

Bit-6

A/D Result register 1

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1031 ADR1

SCAN

MULT

CD

CC

CB

CA

0x1030 ADCTL

A/D Control register

R6/T6

R5/T5

R4/T4

R3/T3

R2/T2

R1/T1

R0/T0

0x102F SCDR

SCI data register (Read : RDR, Write : TDR)

TDRE

TC

RDRF

IDLE

OR

NF

FE

0x102E SCSR

SCI Status register

TIE

TCIE

RIE

ILIE

TE

RE

RWU

SBK

0x102D SCCR2

SCI Control register 2

R8

T8

M

WAKE

0x102C SCCR1

SCI Control register 1

SCP1

SCP0

RCKB

SCR2

SCR1

SCR0

0x102B BAUD

SCI Baudrate register

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x102A SPDR

SPI Data register

CCF R7/T7

TCLR Bit-7

Bit-6

SPIF

WCOL

0x1029 SPSR

SPI Status register

SPIE

SPE

DWOM

MODF MSTR

CPOL

CPHA

SPR1

SPR0

0x1028 SPCR

SPI Control register

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1027 PACNT

Pulse Accumulator Countl register

DDRA7

PAEN

PAMOD

PEDGE

DDRA3

I4/O5

RTR1

RTR0

0x1026 PACTL

Pulse Accumulator Control register

TOF

RTIF

PAOVF

PAIF

TOI

RTII

PAOVI

PAII

OC1F

OC2F

OC3F

OC4F

OC5F

OC1I

OC2I

OC3I

OC4I

OC5I

EDG4B

EDG4A

EDG1B

EDG1A

OM2

OL2

OM3

OL3

0x1025 TFLG2

Timer Interrupt Flag register 2 Timer Interrupt Mask register 2

PR1

PR0

0x1024 TMSK2

IC1F

IC2F

IC3F

0x1023 TFLG1

Timer Interrupt Flag register 1

IC1I

IC2I

IC3I

0x1022 TMSK1

Timer Interrupt Mask register 1

EDG2B

EDG2A

EDG3B

EDG3A

0x1021 TCTL2

Timer Control register 2

OM4

OL4

OM5

OL5

0x1020 TCTL1

Timer Control register 1 Output Compare 5 register Low-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x101F TOC5L

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x101E TOC5H

Output Compare 5 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x101D TOC4L

Output Compare 5 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x101C TOC4H

Output Compare 5 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x101B TOC3L

Output Compare 3 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x101A TOC3H

Output Compare 3 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1019 TOC2L

Output Compare 2 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x1018 TOC2H

Output Compare 2 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1017 TOC1L

Output Compare 1 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x1016 TOC1H

Output Compare 1 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1015 TIC3L

Input Capture 3 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x1014 TIC3H

Input Capture 3 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1013 TIC2L

Input Capture 2 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x1012 TIC2H

Input Capture 2 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x1011 TIC1L

Input Capture 1 register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x1010 TIC1H

Input Capture 1 register High-byte

Bit-7

Bit-6

Bit-5

Bit-4

Bit-3

Bit-2

Bit-1

Bit-0

0x100F TCNTL

Timer Count register Low-byte

Bit-15

Bit-14

Bit-13

Bit-12

Bit-11

Bit-10

Bit-9

Bit-8

0x100E TCNTH

Timer Count register High-byte

OC1D7

OC1D6

OC1D5

OC1D4

OC1D3

0x100D OC1D

OC1 Data register

OC1M7

OC1M6

OC1M5

OC1M4

OC1M3

0x100C OC1M

OC1 Mask register

FOC1

FOC2

FOC3

FOC4

FOC5

0x100B CFORC

Timer Compare Force register

PE7

PE6

PE5

PE4

PE3

PE2

PE1

PE0

0x100A PORTE

Input Port E

DDRD5

DDRD4

DDRD3

DDRD2

DDRD1

DDRD0

0x1009 DDRD

Data Direction for Port D

PD5

PD4

PD3

PD2

PD1

PD0

DDRC5

DDRC4

DDRC3

DDRC2

DDRC1

DDRC0

DDRC7 PCL7

DDRC6 PCL6

PCL5

PCL4

PCL3

PCL2

PCL1

PCL0

0x1008 PORTD I/O Port D 0x1007 DDRC

Data Direction for Port C

0x1006

Reserve

0x1005 PORTCL Port C Latched register

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

0x1004 PORTB

Output Port B

PC7

PC6

PC5

PC4

PC3

PC2

PC1

PC0

0x1003 PORTC

I/O Port C

STAF

STAI

CWOM

HNDS

OIN

PLS

EGA

INVB

0x1002 PIOC

Parallel I/O Control register

0x1001

Reserve

0x1000 PORTA

I/O Port A

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

ÃÙ»·Õè 5-9 áÊ´§ÃÒÂÅÐàÍÕ´â´ÂÊÃØ»¢Í§ÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´¢Í§ MC68HC11E1


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

141

5.5.1 ˹ ǤÇÒÁ¨íҢͧ MC68HC11E1

ÃкºË¹ ǤÇÒÁ¨íҢͧ 68HC11 ¤ ͹¢ Ò§µÃ§ä»µÃ§ÁÒ äÁ ÁÕ¡ÒÃẠ§á¡໠¹Ë¹ ǤÇÒÁ ¨íÒâ»Ãá¡ÃÁËÃ×Í˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅ ´Ñ§¹Ñ¹é ¡Ò÷íÒ¤ÇÒÁࢠÒ㨨֧äÁ «ºÑ « ͹ 68HC11 ÊÒÁÒöµÔ´µ Í Ë¹ ǤÇÒÁ¨íÒ·Ñé§Ãкºä´ ÊÙ§ÊØ´ 64 ¡ÔâÅ亵 ÁÕ¡ÒèѴÊÃÃà» ¹Ê ǹ¢Í§ÃÕ¨ÔÊàµÍà , ºÙµÃÍÁ (boot ROM) ã¹âËÁ´ºÙµáʵÃç», ˹ ǤÇÒÁ¨íÒÍÕÍÕ¾ÃÍÁÀÒÂã¹, ˹ ǤÇÒÁ¨íÒáÃÁÀÒÂã¹ áÅÐ˹ Ç ¤ÇÒÁ¨íÒÀÒ¹͡ «Ö§è ÊÒÁÒö໠¹ä´ ·§Ñé ẺÃÍÁ, ÍÕ¾ÃÍÁ, ÍÕÍ¾Õ ÃÍÁ, á¿Åª, áÃÁ ËÃ×Í NV áÃÁ (NVRAM : Non-Volatile RAM) áµ ·¹Õè ÂÔ ÁÁÒ¡¤×ÍÍÕ¾ÃÍÁ, áÃÁ áÅÐ NV áÃÁ ÊíÒËÃѺº¹ºÍà ´ AX-11 ¹Ñ¹é ¨Ð㪠˹ ǤÇÒÁ¨íÒáÃÁàºÍà 62256 «Ö§è ÁÕ¤ÇÒÁ¨Ø 32 ¡ÔâÅ亵

5.5.2 ÃÕ¨ÊÔ àµÍà ÀÒÂã¹ MC68HC11E1

¨Ò¡ÃÙ»¢Í§¡ÒèѴÊÃÃ˹ ǤÇÒÁ¨íÒã¹ÃÙ»·Õè 5-8 ¨ÐàËç¹Ç ÒÁÕÊÇ ¹¢Í§ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺ·íÒ§Ò¹ ੾ÒÐÍÂÙ 64 亵 㹪 ǧáÍ´à´ÃÊ 0x1000-0x103F ã¹ÃÙ»·Õè 5-9 áÊ´§â¤Ã§Êà ҧáÅÐÃÒÂÅÐàÍÕ´·Ñ§é ËÁ´¢Í§ÃÕ¨ÊÔ àµÍà àËŠҹѹé ÊíÒÃѺ¡Ò÷íÒ§Ò¹¢Í§ÃÕ¨ÊÔ àµÍà ᵠÅеÑÇ ¨Ðä´ ¡Å ÒǶ֧Í ҧÊÃØ»ã¹ËÑÇ¢ Í ¡Ò÷íÒ§Ò¹¢Í§¾Íà µáÅÐâÁ´ÙÅ¿ §¡ ªÑè¹¾ÔàÈɵ Íä»

5.5.3 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íҢͧ 68 HC11 68HC11 ÁÕ¡Ãкǹ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒ (addressing) ·Ñ§é ÊÔ¹é ¶Ö§ 6 âËÁ´ »ÃСͺ´ Ç 1. Ẻ·Ñ¹·Õ·¹Ñ ã´ (immediate) 2. Ẻâ´ÂµÃ§ (direct) 3. Ẻ¢ÂÒ (extended) 4. Ẻ㪠´ªÑ ¹ÕËÃ×ÍẺÍÔ¹à´ç¡« (index) 5. Ẻà¨ÒШ§ËÃ×ÍẺÍÔ¹àÎÕÂàùµ (inherent) 6. ẺÊÑÁ¾Ñ·¸ (relative) 㹺ҧ¤íÒÊÑè§àÁ×èͶ١㪠㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íҺҧẺ ¨íÒà» ¹µ ͧà¾ÔèÁ¢ ÍÁÙÅࢠÒä»ÍÕ¡ 1 亵 ¡ ͹ÃËÑʤíÒÊÑè§ËÃ×ÍÍͻ⤠´ à¾×èÍ»ÃѺãË 68HC11 ÊÒÁÒöÃͧÃѺ¡ÒèѴÊÃþ×é¹·Õè·íҧҹẺ ËÅÒÂ˹ Ò (multi-page opcode map) ä´ àËÁÒÐÊÁ¢Ö¹é ¢ ÍÁÙÅ亵 ¹¹Ñé ¨ÐàÃÕÂ¡Ç Ò ¾ÃÕ亵 (prebyte)

5.5.3.1 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ·Ñ¹·Õ·Ñ¹ã´ 㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õéà» ¹¡ÒõԴµ Íà¾×èͨѴ¡Òâ ÍÁÙÅâ´ÂµÃ§ã¹·Ñ¹·Õ·Ñ¹ã´ ¨íҹǹ亵 ¢Í§¤íÒÊѧè 㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õ¨é ÐÁÕ¢¹Ò´µÑ§é áµ 2-4 亵 ¢Ö¹é ÍÂÙ¡ ºÑ ¢¹Ò´¢Í§


142

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ´ Ç ઠ¹ ¶ Òà» ¹áÍ¡¤ÔÇÁÙàÅàµÍà A ¨ÐÁÕ¨Òí ¹Ç¹äºµ ¢Í§¤íÒÊѧè 2 亵 â´Â亵 áá໠¹ÃËÑʤíÒÊѧè ËÃ×ÍÍͻ⤠´ (opcode) 亵 ËÅѧ໠¹¢ ÍÁÙÅ·íÒ§Ò¹ËÃ×ÍâÍà»Íáù´ (operand) «Ö§è ෠ҡѺ¢¹Ò´¢Í§áÍ¡¤ÔÇÁÙàÅàµÍà A) ÃٻẺ¢Í§¤íÒÊÑ觷Õè㪠¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé ËÅѧ¨Ò¡ ¤íÒÊÑè§áŠǵ ͧµÒÁ´ ÇÂà¤Ã×èͧËÁÒ # àÊÁÍ (ã¹ÀÒÉÒáÍÊà«ÁºÅÕ) à¾×èͺ͡ãË «Õ¾ÕÂÙ·ÃÒºÇ Ò ¤íÒÊÑ觷Õè ¨Ð¡ÃзíÒµ Í仹Õé㪠¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ·Ñ¹·Õ·Ñ¹ã´

5.5.3.2 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺâ´ÂµÃ§ à» ¹¡ÒõԴµ Íà¾×Íè »ÃÐÁÇżŢ ÍÁÙÅ¢¹Ò´ 8 ºÔµ·ÕÍè ÂÙ㠹˹ ǤÇÒÁ¨íÒáÃÁÀÒÂ㹫֧è ÁÕÍÂÙ 512 亵 â´ÂÁÕáÍ´à´Ãʵѧé áµ 0x0000-0x01FF ´Ñ§¹Ñ¹é ¤ Ò¢ ÍÁÙÅ·íÒ§Ò¹ËÃ×ÍâÍà»Íáù´ (operand) ·Õµè ÒÁ ËÅѧÃËÑʤíÒÊѧè ËÃ×ÍÍͻ⤠´ (opcode) ¡ç¤Í× ¤ ÒáÍ´à´ÃʢͧáÃÁ¹Ñ¹è àͧ

5.6.3.3 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¢ÂÒ 㹡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé ¢ ÍÁÙÅã¹äºµ ·Õè 2 áÅÐ 3 ·ÕèµÒÁËÅѧÍͻ⤠´ ¨Ðà¡çº¤ Ò áÍ´à´ÃʨÃÔ§¢Í§Ë¹ ǤÇÒÁ¨íÒ·Õèµ Í§¡ÒÃࢠҶ֧ àÁ×èÍ㪠¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé¤íÒÊÑ觨ÐÁÕ ¢¹Ò´ 3-4 亵 â´Âà» ¹Íͻ⤠´äºµ ·Õè 1 ËÃ×Í 2 (¡Ã³Õ¶Ò ÁÕ¢¹Ò´ 4 亵 ) Ê Ç¹ 2 亵 ËÅѧ¨Ðà» ¹¤ Ò áÍ´à´ÃÊ·ÕèÍ Ò§¶Ö§ã¹Ë¹ ǤÇÒÁ¨íÒ

5.5.3.4 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺÍÔ¹à´ç¡« ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õ¨é йíÒÃÕ¨ÊÔ àµÍà ª¢Õé Í ÁÙŷѧé 2 µÑÇ ¤×Í IX áÅÐ IY ÁÒ㪠¤Òí ¹Ç³ ¤ ÒáÍ´à´ÃÊ·Õèµ Í§¡ÒÃàÃÕ¡㪠¢ ÍÁÙÅ ´Ñ§¹Ñ鹤 ÒáÍ´à´ÃÊ·Õèµ Í§¡ÒèТÖé¹ÍÂÙ ¡Ñº 1. ¤ ÒáÍ´à´ÃÊ·Õ¶è ¡Ù ¡íÒ˹´ÍÂÙã ¹» ¨¨Øº¹Ñ 2. ¢ ÍÁÙÅ·íÒ§Ò¹ 8 ºÔµ ·Õºè ÃèØÍÂÙã ¹¤íÒÊѧè (ËÃ×ͤ ÒâÍà»Íáù´ ) àÁ×Íè 㪠㹡óչ¨Õé ÐàÃÕ¡¢ ÍÁÙÅ ¹ÕÇé Ò ÍͿ૵ (offset) ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹ÕÊé ÒÁÒö㪠˹ ǤÇÒÁ¨íÒµíÒá˹ §ã´¡çä´ ã¹ 64 ¡ÔâÅ亵 à» ¹ ¨Ø´Í Ò§ÍÔ§ ã¹´ Ò¹¢¹Ò´¢Í§¤íÒÊÑè§ã¹¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé ¶ Ò㪠ÃÕ¨ÔÊàµÍà IX ¨ÐÁÕ¢¹Ò´ 2 亵 â´Â亵 áá໠¹Íͻ⤠´ Ê Ç¹äºµ ·ÊÕè ͧ໠¹¤ ÒÍͿ૵ ËÒ¡ãª Ã¨Õ ÊÔ àµÍà IY ¨ÐÁÕ¢¹Ò´ 3 亵 亵 áá¡ç¤Í× ¾ÃÕ亵 µÒÁ´ ÇÂÍͻ⤠´áÅФ ÒÍͿ૵¢¹Ò´ 8 ºÔµ

5.5.3.5 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺà¨ÒШ§ËÃ×ÍÍÔ¹àÎÕÂàùµ ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé¨ÐࢠÒ仨Ѵ¡Òâ ÍÁÙÅã¹ÃÕ¨ÔÊàµÍà «Öè§à» ¹Ê ǹ˹Öè§ã¹Ãкº ˹ ǤÇÒÁ¨íҢͧ 68HC11 ´Ñ§¹Ñé¹¢¹Ò´¢Í§¤íÒÊÑè§ã¹¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé¨ÐÁÕà¾Õ§ 1-2 亵 â´Âà» ¹Íͻ⤠´·Ñ§é ÊÔ¹é


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

143

5.5.3.6 ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺÊÑÁ¾Ñ·¸ ¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé¨Ð㪠㹪ش¤íÒÊÑ觡ÃÐâ´´ (Jump and branch instructions) ¶ ÒËÒ¡à§×è͹ä¢ã¹¡ÒáÃÐâ´´à» ¹¨ÃÔ§ ¤ ÒÍͿ૵¢¹Ò´ 8 ºÔµ ·ÕèÍÂÙ µÒÁËÅѧÍͻ⤠´ ¡ç¨Ð¶Ù¡ºÇ¡ ࢠÒä»ã¹ÃÕ¨ÔÊàµÍà â»Ãá¡ÃÁà¤Ò¹ àµÍà (PC) à¾×èÍ¡íÒ˹´áÍ´à´Ãʵ Íä»·Õè¨Ð¢ ÒÁä»·íÒ§Ò¹¢Í§«Õ¾Õ ÂÙ »¡µÔáŠǢ¹Ò´¢Í§¤íÒÊÑè§ã¹¡ÒÃࢠҶ֧˹ ǤÇÒÁ¨íÒẺ¹Õé¨Ð෠ҡѺ 2 亵 â´Â亵 áá໠¹ÍÍ »â¤ ´ Ê Ç¹äºµ ·ÕèÊͧ໠¹¤ ÒÍͿ૵à¾×èͺ͡¨íҹǹ·Õè¨ÐࢠÒä»à¾ÔèÁã¹ PC

5.5.3.7 ¾ÃÕ亵 à» ¹¢ ÍÁÙÅ 8 ºÔµ (1 亵 ) ·Õãè Ê à¢ Ò仡 ͹˹ ÒÍͻ⤠´ à¾×Íè »ÃÐ⪹ 㹡Òú͡ãË «¾Õ ÂÕ ·Ù ÃÒº ¶Ö§ÅѡɳТͧ¡ÒèѴྨ¢Í§Íͻ⤠´ ¨Ð㪠¡µç Í àÁ×Íè ¤íÒÊÑ§è ¹Ñ¹é æ ÁÕ¡ÒÃ㪠§Ò¹ÃÕ¨ÊÔ àµÍà IY â´Â¶ ÒËÒ¡ 68HC11 ·íÒ§Ò¹ã¹à¾¨ 1 ¢ ÍÁÙžÃÕ亵 ¡äç Á µÍ §ÁÕ áµ ¶Ò ·íÒ§Ò¹ã¹à¾¨ 2 ¨Ðµ ͧà¾ÔÁè ¤ Ò¾ÃÕ亵 ෠ҡѺ $18 ࢠÒ仡 ͹Íͻ⤠´àÊÁÍ áŠǵÒÁ´ ÇÂÍͻ⤠´ 㹡óÕྨ 3 ¨Ð㪠¤ Ò $1A áÅÐ㪠¤ Ò $CD ÊíÒËÃѺྨ 4

5.6 ǧ¨ÃÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§ 68HC11

68HC11 ·íÒ§Ò¹ä´ ´ ÇÂÊÑ­­Ò³¹ÒÌ ¡Ò¤ÇÒÁ¶Õè俵稹¶Ö§ 8MHz ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³ ¹ÒÌ ¡Ò·Õ¹è ÂÔ Á㪠¤Í× Ç§¨Ã¤ÃÔʵÍÅÍÍÊ«ÔÅàÅàµÍà ´Ñ§áÊ´§ã¹ÃÙ»·Õè 5-10 Ê Ç¹¤ÇÒÁ¶Õ·è ãÕè ª 㹡Ò÷íÒ§Ò¹ ¨ÃÔ§ÀÒÂã¹ 68HC11 ¨Ð෠ҡѺ¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡¨Ò¡¤ÃÔʵÍÅËÒô Ç 4 ¹Í¡¨Ò¡¹Ñé¹Âѧ ¶Ù¡¤Çº¤ØÁ´ ǺԵ STOP àÁ×è͵ ͧ¡ÒÃãË ·íÒ§Ò¹ã¹âËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹ ºÔµ STOP ¨Ðà» ¹Åͨԡ 0 ·íÒãË Ç§¨Ã¤Çº¤ØÁ¨Ñ§ËÇÐÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹ËÂØ´·íÒ§Ò¹ ÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂ㹪ԻÁÕª×èÍàÃÕÂ¡Ç Ò STOP ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§ÃкºËÃ×Í ÊÑ­­Ò³¹ÒÌ ¡Ò E «Ö§è ¹Í¡¨Ò¡¨ÐÍÂÙã ¹µÑÇäÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅ Ç ÂѧÁÕ¢Òµ ÍÊÑ­­Ò³¹ÒÌ ¡Ò E ÍÍ¡ÁÒ㪠§Ò¹ EXTAL XTAL ÀÒ¹͡´ Ǽ Ò¹·Ò§¢ÒàÍÒµ ¾Øµ E 10M â´ÂàÁ×è Í ÊÑ ­ ­Ò³àÍÒµ ¾Ø µ E à» ¹ 0 8MHz áÊ´§Ç Ò «Õ¾ÂÕ ¡Ù Òí ÅѧÍÂÙã ¹ÀÒÇлÃÐÁÇżŢ ÍÁÙÅ 22pF 22pF ÀÒÂã¹ Ê Ç¹ã¹ª ǧàÇÅÒ·ÕèÊÑ­­Ò³¹ÒÌ ¡Òà» ¹ Åͨԡ 1 ¨ÐËÁÒ¤ÇÒÁÇ Ò «Õ¾ÕÂÙ¡íÒÅѧÍÂÙ ã¹ ÀÒÇСÒÃà¢Õ¹ËÃ×ÍÍ Ò¹¢ ÍÁÙÅ ÃÙ»·Õè 5-10 ǧ¨Ã¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§ 68HC11


144

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ä´ÍÐá¡ÃÁàÇÅÒ

äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ÍØ»¡Ã³ ·¶Õè ¡Ù ¤Çº¤ØÁ¨Ñ§ËÇСÒ÷íÒ§Ò¹´ ÇÂÊÑ­­Ò³¹ÒÌ ¡Ò â´Â¨Ðà»ÅÕÂè ¹ á»Å§Ê¶Ò¹Ð·Ø¡ æ ¾ÑÅÊ ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò ´Ñ§¹Ñ¹é ¡ÒÃÈÖ¡ÉÒà¡ÕÂè ǡѺ¨Ñ§ËÇСÒ÷íÒ§Ò¹¢Í§ÃкºÊÑ­­Ò³ ¹ÒÌ ¡Òã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ÊÔ§è ·ÕÊè Òí ¤Ñ­ áÅÐ㹡Ò÷íÒ¤ÇÒÁࢠÒ㨡ç¨ÐÍÒÈÑÂä´ÍÐá¡ÃÁàÇÅÒà» ¹ËÅÑ¡ ã¹ÃÙ» A à» ¹ÃٻẺ¢Í§ä´ÍÐá¡ÃÁàÇÅҢͧÊÑ­­Ò³àÊ ¹à´ÕÂÇ (ËÃ×Í 1 ºÔµ) ¨Ð͸ԺÒ¶֧¤ÇÒÁËÁÒ ¢Í§ÃдѺµ Ò§ æ ·Õèà¡Ô´¢Öé¹ã¹ä´ÍÐá¡ÃÁàÇÅÒ äÁ Ç Ò¨Ðà» ¹ÃдѺ¢Í§Ê¶Ò¹ÐÅͨԡ 1 ËÃ×Í 0 ª ǧ¢Íº ¢Òŧ (Falling edge) áÅЪ ǧ¢Íº¢Ò¢Ö¹é (Rising edge) A Åͨԡ "1"

Åͨԡ "1" ¢Íº¢Ò¢Ö鹢ͧ ÊÑ­­Ò³

¢Íº¢Òŧ¢Í§ ÊÑ­­Ò³ Åͨԡ "0"

äÁ á¹ ¹Í¹

B

ª ǧàÇÅÒ·Õ¢è Í ÁÙÅ ÁÕ¤ÇÒÁá¹ ¹Í¹ ª ǧ¡ÒÃà»ÅÕÂè ¹á»Å§¢Í§ÊÑ­­Ò³

ª ǧÍÔÁ¾Õá´¹« ʧÙ

ã¹¢³Ð·ÕÃè »Ù B à» ¹ä´ÍÐá¡ÃÁàÇÅҢͧÊÒÂÊÑ­­Ò³ËÅÒÂàÊ ¹ ËÃ×Í·Õàè ÃÕÂ¡Ç Ò ºÑÊ (bus) «Ö§è ¡çÁ·Õ §Ñé ºÑÊ¢ ÍÁÙÅáÅкÑÊáÍ´à´ÃÊ ã¹ÃÙ»¨Ð͸ԺÒÂÇ ÒºÃÔàdzã´àÃÕÂ¡Ç ÒÍÐäà ª ǧàÇÅÒ¹Ñ¹é ¤×ÍÍÐäà ÃÇÁ件֧¡Òú͡ ʶҹÐÍÔÁ¾Õá´¹« ʧ٠´ Ç ´Ñ§¹Ñ¹é ¡ ͹·Õ¨è ÐàÃÕ¹ÃÙ¨ §Ñ ËÇТͧ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨§Ö µ ͧࢠÒ㨠áÅШ´¨íÒÅѡɳРª×Íè àÃÕ¡ áÅÐÃٻẺ¢Í§ä´ÍÐá¡ÃÁàÇÅÒàÊÕ¡ ͹

5.7 ǧ¨ÃÃÕ૵¢Í§ 68HC11 à¾×Íè ãË 68HC11 ÊÒÁÒö·íÒ§Ò¹ä´ Í ҧÁÕàʶÕÂÃÀÒ¾ ¨Ðµ ͧãË ¤ÇÒÁʹ㨵 Íǧ¨ÃÃÕ૵໠¹ Í ҧÂÔ§è àÁ×Íè àÃÔÁè µ ¹¨ ÒÂä¿ãË á¡ 68HC11 ¡ç¨Ðà¡Ô´ÀÒÇзÕàè ÃÕÂ¡Ç Ò à¾ÒàÇÍà Í͹ÃÕ૵ áÅж ÒËÒ¡µ ͧ ¡ÒÃãË ÁÕ¡ÒÃÃÕ૵¢Öé¹ã¹ÃÐËÇ Ò§¡Ò÷íÒ§Ò¹¡çÊÒÁÒö·íÒä´ â´Â¡Òû ͹ÊÑ­­Ò³Åͨԡ 0 ࢠҷÕè¢Ò RESET «Ö觨ÐÇ Òä»áÅ Ç ÊÒÁÒö㪠ǧ¨ÃµÑǵ Ò¹·Ò¹µ Íà ÇÁ¡ÑºµÑÇà¡çº»ÃШØáÅÐÊÇÔµª ¡´µÔ´»Å Í ´Ñº·íÒ§Ò¹ã¹ÅѡɳйÕéä´ áµ ¡Ò÷íÒ§Ò¹´ ÇÂÍØ»¡Ã³ ¾×é¹°Ò¹àËÅ Ò¹Ñé¹ÍÒ¨·íÒãË 68HC11 µÃǨÊͺ ¡ÒÃÃÕ૵¼Ô´¾ÅÒ´ Ê §¼ÅãË ¡ÃÐâ´´ä»·íÒ§Ò¹¼Ô´µíÒá˹ § à¹×èͧ¨Ò¡¡ÒÃÃÕ૵¢Í§ 68HC11 ÁÕËÅÒ Ẻ áÅÐáµ ÅÐẺ¨Ð¡íÒ˹´ãË «¾Õ ÂÕ ÀÙ ÒÂã¹ 68HC11 ·íÒ§Ò¹ã¹ÅѡɳзÕáè µ¡µ Ò§¡Ñ¹µÒÁ·Õ¡è Òí ˹´ â´ÂÃÕ૵àÇ¡àµÍà ´Ñ§¹Ñ鹨֧¤ÇÃÊà ҧǧ¨ÃÃÕ૵´ ÇÂäÍ«ÕµÃǨ¨ÑºÃдѺáç´Ñ¹µèíÒ (low voltage detector) «Ö§è ÁÕäÍ«ÕËÅÒÂàºÍà ··Õè Òí ˹ Ò·Õ¹è Õé ઠ¹ MC34064 ¢Í§âÁâµâÃÅ Ò, DS1233 ¢Í§´ÑÅÅÑÊà«ÁԤ͹´Ñ¡àµÍà , S0854HN ¢Í§ä«â¡ áÅÐ KIA7042 ¢Í§ KEC «Ö§è 㹺Íà ´ AX-11 㪠äÍ«ÕàºÍà KIA7042


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

145

ÃÕ¨ÔÊàµÍà OPTION (Configuration options register)

+5V

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1039 㪠㹡ÒáíÒ˹´ÅѡɳСÒ÷íÒ§Ò¹¾ÔàÈÉà¾ÔèÁàµÔÁ ¢Í§ 68HC11 ÁÕºÔµ·Õèà¡ÕèÂÇ¢ ͧ¡Ñº¡ÒÃÃÕ૵¢Í§ 68HC11 ´Ñ§¹Õé

MC68HC11E1

1 +V KIA7042

l

47k 17

RESET 3

RESET

GND 2

ÃÙ»·Õè 5-11 ǧ¨ÃÃÕ૵¢Í§ MC68HC11E1 Ẻ 㪠äÍ«ÕµÃǨ¨Ñºáç´Ñ¹ä¿àÅÕÂé §µèÒí

CME (Clock Monitor Enable : ºÔµ 3) 㪠àÍç¹àÍàºÔÅ¡ÒÃÃÕ૵¨Ò¡¡ÒõÃǨÊͺÊÑ­­Ò³¹ÒÌ ¡Ò ´ Ç¡ÒÃ૵ºÔµ¹Õé ¨Ð㪠àÁ×èÍÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§ ÃкºÁÕ¤Ò ¤ÇÒÁ¶Õµè Òèí ¡Ç Ò 200kHz CR1 áÅÐ CR0 (COP Timer rate Selects : ºÔµ 1 áÅÐ 0) 㪠àÅ×Í¡ª ǧàÇÅÒ·Õºè § ºÍ¡Ç Ò«Õ¾ÂÕ ÅÙ Á àËÅÇ ã¹¡Ò÷íÒ§Ò¹ 㪠ã¹ÃкºÇ͵ª ´Íç ¡

´Ñ§áÊ´§Ç§¨Ãã¹ÃÙ»·Õè 5-11 àÁ×èÍáç´Ñ¹ä¿àÅÕé§à¡Ô´¡ÒÃÅ´µèíÒŧ¡Ç Ò 4.2V äÍ«Õ KIA7042 ¨ÐÊà ҧ ÊÑ­­Ò³Åͨԡ 0 ÍÍ¡ÁÒ·Õè¢ÒàÍÒµ ¾Øµ «Ö觵 ÍÍÂÙ ¡Ñº¢Ò RESET ¢Í§ 68HC11 ·íÒãË à¡Ô´¡ÒÃÃÕ૵ ¢Öé¹ ´ Ç¡Ò÷íÒ§Ò¹¢Í§äÍ«Õ¨ÐÁÕ¤ÇÒÁá¹ ¹Í¹¡Ç Ò¡ÒÃ㪠ǧ¨ÃÃÕ૵ẺµÑǵ Ò¹·Ò¹áÅеÑÇà¡çº »ÃÐ¨Ø ã¹¡Ã³Õ·Õèµ Í§¡ÒÃãË ÁÕÊÇÔµª ¡´à¾×èÍÊà ҧÊÑ­­Ò³ÃÕ૵¡çÊÒÁÒö·íÒä´ â´ÂÊà ҧǧ¨Ãã¹ÃÙ»·Õè 5-12 à¾ÔÁè àµÔÁࢠÒä»

+5V

+5V KIA7042

4.7k 1

RESET 4.7k

4-5-6

1µF

GND 2

1 +V 3

KIA7042

MC68HC11E1 47k

RESET 3

17

RESET

GND 2

ÃÙ»·Õè 5-12 ǧ¨ÃÃÕ૵¢Í§ MC68HC11E1 Ẻ㪠äÍ«ÕµÃǨ¨Ñºáç´Ñ¹ä¿àÅÕÂé §µèÒí ·íҧҹà ÇÁ¡ÑºÊÇÔµª à¾×Íè Êà ҧÊÑ­­Ò³ÃÕ૵


146

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡ÒÃÃÕ૵㹠68HC11

ã¹ 68HC11 ÊÒÁÒö·Õ¨è ÐÃÕ૵Ãкºä´ 4 ·Ò§¤×Í » ͹ÊÑ­­Ò³ÅͨԡµèÒí ¨Ò¡ÀÒ¹͡ࢠҷբè Ò RESET à¾ÒàÇÍà Í͹ÃÕ૵ (Power-on reset) ÃÕ૵â´ÂÃкºÇ͵« ´Íç ¡ (COP) áÅÐâ´Â¡ÒõÃǨÊͺÊÑ­­Ò³ ¹ÒÌ ¡Ò (Clock monitor) ¡ÒÃÃÕ૵â´Â» ͹ÊÑ­­Ò³·Õè RESET ¢Ò RESET à» ¹¢ÒÍÔ¹¾ØµÊíÒËÃѺÃѺÊÑ­­Ò³Åͨԡ 0 ¨Ò¡ÀÒ¹͡ à¾×Íè ÃÕ૵äÁâ¤Ã¤Í¹â·ÃÅàÅÍà à¤ÅÕÂà ¤Ò µ Ò§ æ ã¹ÃÕ¨ÊÔ àµÍà áÅÐãË ¡ÅѺä»àÃÔÁè µ ¹·íÒ§Ò¹µÒÁ·Õ¡è Òí ˹´äÇ ã¹«Í¿µ áÇà à¾ÒàÇÍà Í͹ÃÕ૵ (Power-on reset) Ñ ­Ò³¢Íº¢Ò¢Ö¹é à¡Ô´¢Ö¹é «Ö§è ¨Ðà¡Ô´ à¡Ô´¢Ö¹é àÁ×Íè ÊÒÁÒöµÃǨ¨Ñº¡ÒÃà»ÅÕÂè ¹á»Å§·Õ¢è Ò VDD ä´ ÇÒ ÁÕÊ­ ¨Ò¡¡ÒÃà» ´» ´ä¿àÅÕÂé §ãË á¡ 68HC11 «Ö§è ¡ç¤Í× ¡ÒÃÃÕ૵Íѵâ¹ÁѵËÔ Åѧ¨Ò¡àÃÔÁè ¨ ÒÂä¿ãË á¡ ª»Ô ¹Ñ¹è àͧ ʶҹР¢Í§Ê ǹµ Ò§ æ ã¹ÃкºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà àÁ×Íè à¡Ô´à¾ÒàÇÍà Í͹ÃÕ૵ÁÕ´§Ñ ¹Õé «Õ¾ÂÕ Ù¨Ð࿵« àÇ¡àµÍà ¢Í§¡ÒÃÃÕʵÒà µ·Õáè Í´à´ÃÊ $FFFE áÅÐ $FFFF (ËÃ×Í·Õáè Í´à´ÃÊ $BFFE áÅÐ $BFFF ã¹âËÁ´ºÙµÊáµÃ»¾ÔàÈÉáÅÐâËÁ´·´Êͺ¾ÔàÈÉ) â´Â㪠àÇÅÒ 3 ä«à¡ÔÅ ¨Ò¡¹Ñ¹é ¨Ö§àÃÔÁè µ ¹àÍç¡«Ô¤ÇÔ µ ¤íÒÊÑ§è µ Íä» ´ ҹ˹ ǤÇÒÁ¨íÒáÃÁ ¶Ù¡¨Ñ´ÊÃÃŧ·Õáè Í´à´ÃÊ 0x000 ÊíÒËÃѺ¾Íà µ B áÅÐ C ËÒ¡·íҧҹ㹠âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒ¨ж١¡íÒ˹´ãË à» ¹ºÑÊà¾×Íè ¢ÂÒÂÃкº Ê Ç¹¾Íà µ D, E, PA0-2, PA7 ¢Í§¾Íà µ A ¨Ð¡ÅÒÂà» ¹¢ÒÍÔ¹¾Øµ áÅÐ PA3-PA6 ¢Í§¾Íà µ A ¨Ð¶Ù¡¡íÒ˹´à» ¹¢ÒàÍÒµ ¾µØ ·Ò§´ Ò¹ä·àÁÍà ¤ ҢͧµÑÇ ¹Ñº¨Ðà» ¹ 0x0000 ºÔµ»ÃÕÊà¡ÅàÅÍà ·Ñé§ËÁ´¨Ð¶Ù¡à¤ÅÕÂà ¤ Òã¹ÃÕ¨ÔÊàµÍà àÍÒµ ¾Øµà»ÃÕºà·Õº·Ø¡µÑǨж١ ¡íÒ˹´à» ¹ 0xFFFF ÃкºÍÔ¹àµÍÃ Ã»Ñ µ ·§Ñé ËÁ´¢Í§ä·àÁÍà ¨Ð¶Ù¡´ÔÊàÍàºÔÅ ÃÇÁ·Ñ§é ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ´Ç  㹢³Ð·ÕèÊ Ç¹Ê×èÍÊÒâ ÍÁÙÅ͹ءÃÁ (SCI) , Ê Ç¹àª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) áÅÐǧ¨Ãá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŨж١´ÔÊàÍàºÔÅ ·íÒãË ¢Ò¾Íà µ¶Ù¡ãª §Ò¹à» ¹¾Íà µ¸ÃÃÁ´Ò ÃÕ૵â´ÂÃкºÇ͵ª ´Íç ¡ 68HC11 ÁÕÃкºÇ͵ª ´Íç ¡·Õàè ÃÕÂ¡Ç Ò Computer Operating Properly watchdog (COP) à¾×Íè ª Ç » ͧ¡Ñ¹ã¹¡Ã³Õ·¡Õè ÒÃÃѹ«Í¿µ áÇà à¡Ô´¡ÒÃÅ ÁàËÅÇ ¡ÒÃÅ ÁàËÅǨÐà¡Ô´¢Ö¹é àÁ×Íè «Õ¾ÂÕ ËÙ ÂØ´·íÒ§Ò¹ä»ã¹ª ǧàÇÅÒ Ë¹Ö§è ËÁÒ¤ÇÒÁÇ Ò «Õ¾ÂÕ äÙ Á ÊÒÁÒöàÍç¡«Õ¤ÇÔ µ ¤Òí Êѧè ÀÒÂ㹪 ǧàÇÅÒ·Õ¡è Òí ˹´ä´ ¡Ò÷íÒ§Ò¹¢Í§Ãкº COP ÀÒÂ㹪Ի»ÃСͺ´ Ç ºÔµ¤Çº¤ØÁ¾ÔàÈÉ·Õãè ª 㹡ÒáíÒ˹´ª ǧàÇÅÒ·Õ¨è ÐÊÒÁÒöÊÃØ»ä´ ÇÒ ¢³Ð¹Õ«é ¾Õ ÂÕ àÙ ¡Ô´ ¡ÒÃÅ ÁàËÅÇ㹡Ò÷íÒ§Ò¹áÅ Ç â´ÂÊÒÁÒöàÅ×Í¡ä´ 4 ª ǧàÇÅÒ ¡ÒÃÃÕ૵â´Â¡ÒõÃǨÊͺÊÑ­­Ò³¹ÒÌ ¡Ò (Clock monitor reset) ¡ÒÃÃÕ૵Ẻ¹Õ¨é Ðà¡Ô´¢Ö¹é ¶ ÒËÒ¡ÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§«Õ¾ÂÕ ¢Ù Ò´ËÒÂä»ã¹ª ǧàÇÅÒ˹֧è â´Âª ǧàÇÅÒ ´Ñ§¡Å ÒǨÐÍÂÙ ÃÐËÇ Ò§ 5-100 äÁâ¤ÃÇÔ¹Ò·Õ ¹Ñ蹤×Í ¶ ÒËÒ¡¤ÇÒÁ¶Õè¢Í§ÊÑ­­Ò³¹ÒÌ ¡ÒÁÒ¡¡Ç Ò 200kHz ¡ÒÃÃÕ૵Åѡɳйըé ÐäÁ à¡Ô´¢Ö¹é áÅж ÒËÒ¡¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡ÒµèÒí ¡Ç Ò 10kHz ¨Ð·íÒãË à¡Ô´¤ÇÒÁ Å ÁàËÅÇ㹡ÒõÃǨÊͺÊÑ­­Ò³¹ÒÌ ¡Ò ¡ ÍãË à¡Ô´¡ÒÃÃÕ૵¢Öé¹ ¡ÒÃàÍç¹àÍàºÔÅÃкºµÃǨÊͺÊÑ­­Ò³ ¹ÒÌ ¡Ò¹Õ¡é ÃзíÒä´ â´Â¡ÒÃ૵·Õºè µÔ CME ã¹ÃÕ¨ÊÔ àµÍà OPTION


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

147

5.8 ¡Ò÷íÒ§Ò¹¢Í§¾Íà µáÅÐâÁ´ÙÅ¿ §¡ ª¹Ñè ¾ÔàÈɢͧ MC68HC11 5.8.1 ¾Íà µ A : ¾Íà µ´Ô¨µÔ ÍÅ, ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà áÅп §¡ ª¹Ñè ä·àÁÍà ¾Íà µ A ¢Í§ 68HC11 ·íÒ§Ò¹ä´ 3 Ẻ¤×Í à» ¹¾Íà µ´Ô¨µÔ ÍÅ, ¾Íà µÍÔ¹¾Øµ¢Í§Ãкº¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà áÅоÍà µ¢Í§Ãкºä·àÁÍà ¡ÒÃàÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¨Ðà¡Ô´¢Öé¹â´ÂÍѵâ¹ÁѵÔàÁ×èÍ ÁÕ¡ÒÃà¢Õ¹¢ ÍÁÙÅ·ÕèàËÁÒÐÊÁä»ÂѧÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ·Õèà¡ÕèÂÇ¢ ͧ

5.8.1.1 ¡Ò÷íÒ§Ò¹ã¹ÅѡɳоÍà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍŢͧ¾Íà µ A â´Â»¡µÔ¾Íà µ A ¨Ð·íҧҹ໠¹¾Íà µ´Ô¨µÔ ÍÅ ÁÕ¢Ò㪠§Ò¹ 8 ¢Ò à» ¹ÍÔ¹¾Øµ 3 ¢Ò (PA0-PA2), àÍÒµ ¾µØ 4 ¢Ò (PA3-PA6) áÅÐÍÔ¹¾ØµàÍÒµ ¾µØ (2 ·ÔÈ·Ò§) 1 ¢Ò (PA7) ¡Ò÷íÒ§Ò¹µÑ§é µ ¹¨Ðà» ¹ÍÔ¹¾Øµ ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ㹡Ò÷íÒ§Ò¹ÁÕ 2 µÑǤ×Í 1. PORTA ÃÕ¨ÊÔ àµÍà ¢Í ÁÙžÍà µ A ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1000 㪠ÍÒ ¹¢ ÍÁÙÅÍÔ¹¾Øµã¹ºÔµ 0-2 áÅÐ 7 ËÃ×Íà¢Õ¹¢ ÍÁÙÅÊ §ÍÍ¡ä»àÍÒµ ¾µØ ºÔµ 3-7 2. PACTL (Pulse accumulator control register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ÁÕáÍ´-à´ÃÊÍÂÙ· Õè 0x1026 㪠¡Òí ˹´·ÔÈ·Ò§¢Í§¢Ò PA7 ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅä»ÂѧºÔµ DDRA (ºÔµ 7) ¶ Òµ ͧ ¡ÒÃãË à» ¹ÍÔ¹¾Øµà¢Õ¹¢ ÍÁÙÅ 0 áµ ¶Ò µ ͧ¡ÒÃãË à» ¹àÍÒµ ¾µØ µ ͧà¢Õ¹¢ ÍÁÙÅ 1

5.8.1.2 ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ A ã¹Ãкº¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍÃ

¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà (pulse accumulator) ¤×Í µÑǹѺ 8 ºÔµ·Õ¡è Òí ˹´ãË ·Òí §Ò¹ä´ 2 âËÁ´ ¤×Í ¹Ñºà˵ءÒó ¡Ãеع (event counting) áÅÐ ¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ (gate time accumulation) â´ÂÊÑ­­Ò³ÍÔ¹¾Øµ¨Ð¶Ù¡» ͹ࢠҷբè Ò PA7/PAI (Pulse Accumulator Input) ã¹ÃÙ»·Õè 5-13 áÊ´§ÃÙ» Ẻ¡Ò÷íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ·Ñé§ÊͧâËÁ´ ¨ÐàËç¹Ç Ò ã¹âËÁ´¹Ñºà˵ءÒó ¡ÃÐµØ ¹ µÑǹѺ¨Ð·íÒ¡ÒùѺÊÑ­­Ò³·Õ»è Í ¹à¢ ÒÁÒµÃ§æ µÒÁ¨Ñ§ËÇТͧÊÑ­­Ò³·Õàè ¡Ô´¢Ö¹é ¨ÃÔ§ ã¹¢³Ð·Õâè ËÁ´ ¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ µÑǹѺ¨Ðä´ ÃѺÊÑ­­Ò³ÍÔ¹¾Øµ¡çµ ÍàÁ×èÍÁÕÊÑ­­Ò³à» ´à¡µ·ÕèÁÕ¤ÇÒÁ¶Õè෠ҡѺ E/64 (E ¤×Í ÊÑ­­Ò³·ÕèÁÕ¤ÇÒÁ¶Õè෠ҡѺ 1/4 ෠Ңͧ¤ÇÒÁ¶ÕèÊÑ­­Ò³¹ÒÌ ¡ÒËÅÑ¡) E/64

PA7/PAI

ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

(¡) ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Ñºà˵ءÒó ¡Ãеع

PA7/PAI

ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

(¢) ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ

ÃÙ»·Õè 5-13 ÃٻẺ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ A ã¹Ãкº¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍÃ


148

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍÃ

¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ÁÍÕ ¹Ô ¾Øµ 1 ª ͧ¤×Í ¢Ò PAI «Ö§è à» ¹¢Ò PA7 ¢Í§¾Íà µ A µ ͧ¡íÒ˹´à» ¹ÍÔ¹¾Øµ â´Âà¢Õ¹¢ ÍÁÙÅ 0 ä»ÂѧºÔµ DDRA7 ã¹ÃÕ¨ÊÔ àµÍà PACTL ¹Í¡¨Ò¡¹Ñ¹é ã¹ÃÕ¨ÊÔ àµÍà PACTL ÂѧÁÕºµÔ àÅ×Í¡ ¡Ò÷íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ¤Í× ºÔµ PAEN µ ͧ૵ºÔµ¹Õ¡é Í ¹·Õ¨è ÐãË Ãкº·íÒ§Ò¹ ÊíÒËÃѺ¡ÒÃàÅ×Í¡ âËÁ´·íÒ§Ò¹¡íÒ˹´ä´ ·ºÕè µÔ PAMOD ÁÕ 2 âËÁ´¤×Í ¹Ñºà˵ءÒó ¡Ãеع áÅйѺµÒÁª ǧàÇÅÒà» ´à¡µ âËÁ´¹Ñºà˵ءÒó ¡Ãеع (Event counting) àÃÔÁè µ ¹´ Ç¡ÒÃ૵ºÔµ PAEN ã¹ÃÕ¨ÊÔ àµÍà PACTL à¾×Íè àÍç¹àÍàºÔÅÃкº ¨Ò¡¹Ñ¹é à¤ÅÕÂà ºµÔ PAMOD à¾×Íè ¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´¹Ñºà˵ءÒó ¡Ãеع µÒÁ´ ÇÂàÅ×Í¡¢Íº¢ÒÊÑ­­Ò³·Õµè Í §¡ÒÃãË àÃÔÁè ¹Ñº â´Â ¡íÒ˹´·Õºè µÔ PEDGE ã¹µÑÇÍ ҧàÅ×Í¡¢Íº¢Òŧ¢Í§ÊÑ­­Ò³ ´Ñ§¹Ñ¹é ºÔµ PEDGE ¨Ö§à» ¹ 0 TMSK2 PAII

à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ µÃǨ¨ÑºÍÔ¹¾Øµä´

TFLG2 PAIF

PAOVI

PACTL

ÊÑ­­Ò³ÍÔ¹¾Øµ ·Õ¢è Ò PAI

PEDGE 0 1

à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ PAOVF

¹Ñº¤ Òà¾ÔÁè ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

PAEN = "1" PAMOD = "0"

ÃÙ» A ¡Ò÷íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ã¹âËÁ´¹Ñºà˵ءÒó ¡Ãеع

·Ø¡¤ÃÑ§é ·Õµè ÃǨ¨Ñº¢Íº¢Ò¢Í§ÊÑ­­Ò³·Õ¢è Ò PAI ä´ ÃÕ¨ÊÔ àµÍà PACNT ¨Ðà¾ÔÁè ¤ Ò¢Ö¹é áÅкԵ PAIF ã¹ÃÕ¨ÊÔ àµÍà TFLG2 ૵ ¶ ÒºÔµ PAII ã¹ÃÕ¨ÊÔ àµÍà TMSK2 ૵ÍÂÙ´ Ç Â¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¡ÒÃà¤ÅÕÂà ºÔµ PAIF µ ͧà¢Õ¹ 1 ÁÒÂѧºÔµ¹Õé àÁ×Íè ¤ Òã¹ PACNT à»ÅÕÂè ¹¨Ò¡ 0xFF à» ¹ 0x00 ºÔµ PAOVF ã¹ÃÕ¨ÊÔ àµÍà TFLG2 ¨Ð૵«Ö§è ¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ä´ ¶Ò ºÔµ PAOVI ã¹ÃÕ¨ÊÔ àµÍà TMSK2 ૵ÍÂÙ´ Ç Â ¡ÒÃà¤ÅÕÂà ºÔµ PAOVF µ ͧà¢Õ¹ 1 ÁÒÂѧºÔµ¹Õàé ª ¹à´ÕÂǡѺºÔµ PAIF ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Ñºà˵ءÒó ¡Ãеع ÂѧẠ§ä´ Í¡Õ 2 Ẻ¤×Í ¹Ñº¤ Òª ǧÊѹé áÅЪ ǧÂÒÇ ¡ÒùѺª ǧÊÑé¹ : ¡íÒ˹´¤ ÒµÑÇàÅ¢¤ Ò˹Öè§àÁ×è͹Ѻ件֧¤ Ò·Õè¡íÒ˹´¡çãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¡ÒÃà¡Ô´ ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ðà» ¹ä»Í ҧÃÇ´àÃçÇ â´Â¤ Ò·Õ¡è Òí ˹´¹Ñ¹é µ ͧ¹ ÍÂ¡Ç Ò 255 ÇÔ¸¡Õ Òáç¤Í× à¢Õ¹¤ Ò·Ù¤ÍÁ ¾ÅÕàÁ¹µ (2 s complement) ¢Í§µÑÇàÅ¢·Õ¡è Òí ˹´¹Ñ¹é ä»à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà PACNT àÁ×Íè µÃǨ¨Ñº¢Íº¢Ò ¢Í§ÊÑ­­Ò³·ÕÍè ¹Ô ¾Øµä´ ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ¡¨ç йѺµ ͨҡ¤ Ò·Õàè ¢Õ¹¹Ñ¹é ¨¹¡ÃÐ·Ñ§è ¶Ö§¤ Ò 0xFF áÅ Çà¾ÔÁè à» ¹ 0x00 ¡ç¨Ðà¡Ô´âÍàÇÍà â¿ÅÇ ·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¶ ÒËÒ¡ä´ ÃºÑ ¡ÒÃàÍç¹àÍàºÔÅäÇ Â¡µÑÇÍ ҧ ¶ Ò¤ Ò ·Õµè Í §¡Òõѧé à» ¹ 0x14 ¤ Ò·Ù¤ÍÁ¾ÅÕàÁ¹µ ¨Ð෠ҡѺ 0xEE ´Ñ§¹Ñ¹é ¤ Ò¡ÒùѺ㹾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ¨ÐàÃÔÁè ·Õè 0xEE ¹Ñºµ Í仨¹¶Ö§ 0xFF áÅ Çà»ÅÕÂè ¹à» ¹ 0x00 ¡ç¨Ðà¡Ô´âÍàÇÍà â¿ÅÇ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

149

¡ÒùѺª ǧÂÒÇ : à» ¹¡ÒùѺ¤ ÒÁÒ¡¡Ç Ò 255 ¨Ðµ ͧà¡çº¤ Ò¡ÒùѺàÁ×èͤú·Ø¡ÃͺËÃ×Í·Ø¡¤ÃÑ駷Õèà¡Ô´ âÍàÇÍà â¿ÅÇ à¾×Íè ãË ¤Ò ¢Í§¡ÒùѺµ Íà¹×Íè § ¶ ÒËÒ¡µÑǹѺàÃÔÁè µ ¹·Õ¤è Ò Èٹ àÁ×Íè ¹Ñºä»¶Ö§ 255 (0xFF) áÅ Çà»ÅÕÂè ¹ à» ¹ 0 ¨Ðà¡Ô´âÍàÇÍà â¿ÅÇ ´Ñ§¹Ñ¹é µÑÇàÅ¢¢Í§¡ÒÃà¡Ô´âÍàÇÍà â¿ÅÇ ¨§Ö ෠ҡѺ¤ Ò·Õµè §Ñé äÇ ËÒô Ç 256 àÁ×Íè µ ͧ¹Ñº¤ ÒÁÒ¡¡Ç Ò 255 ¨Ö§µ ͧ㪠áÍ¡¤ÔÇÁÙàÅàµÍà D (à¡Ô´¨Ò¡¡ÒÃÃÇÁ¡Ñ¹¢Í§ A áÅÐ B) áÍ¡¤ÔÇÁÙàÅàµÍà A à¡çºµÑÇàÅ¢¡ÒÃà¡Ô´âÍàÇÍà â¿ÅÇ ¶ Òµ ͧ¡Ò÷ÃÒº¨íҹǹ¢Í§¡ÒùѺµ ͧ¤Ù³´ Ç 256 Ê Ç¹áÍ¡¤ÔÇÁÙàÅàµÍà B ¨Ðà¡çº¨íҹǹ·Õàè ËÅ×Í ¨Ò¡¹Ñ¹é á»Å§¤ Òà» ¹áºº·Ù¤ÍÁ¾ÅÕàÁ¹µ áÅ ÇàÃÔÁè ¹Ñº ¡µÑÇÍ ҧ ¶ Òµ ͧ¡Òà µÑ§é à» ¹ 800 «Ö§è ෠ҡѺ 0x0320 ¤ Ò 0x03 ã¹äºµ ʧ٠¨Ðà¡çºäÇ ã¹ A Ê Ç¹ 0x20 ã¹äºµ µÒèí ¶Ù¡·íÒà» ¹àÅ¢·Ù ¤ÍÁ¾ÅÕàÁ¹µ ෠ҡѺ 0xE0 ¨Ò¡¹Ñ¹é ¡çãË ÃкºàÃÔÁè ¹ÑºËÅѧ¨Ò¡µÃǨ¨ÑºÊÑ­­Ò³·ÕÍè ¹Ô ¾Øµä´ «Ö§è ¨Ð¹Ñºä´ 32 ¤ÃÑ§é ¡ ͹·Õ¨è Ðà¡Ô´âÍàÇÍà â¿ÅÇ ¨Ò¡¹Ñ¹é ¹Ñºµ Í«Ö§è ¡ç¨Ðà¡Ô´¡ÒÃâÍàÇÍà â¿ÅÇ Í¡Õ 3 ¤Ãѧé ä´ ¤Ò ¡ÒùѺ໠¹ 768 (ÁÒ¨Ò¡ 256 x 3) ¤Ãѧé ÃÇÁ¡Ñº 32 ¤Ãѧé áá¡ç¨Ðä´ à· Ò¡Ñº 800 ¾Í´Õ âËÁ´¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ ã¹âËÁ´¹Õ¾é ÅÑ Ê áÍ¡¤ÔÇÁÙàÅàµÍà ¨Ðà¾ÔÁè ¤ Ңͧ¡ÒùѺ·Ø¡ æ 64 ä«à¡ÔŢͧÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹àÁ×Íè µÃǨ¨ÑºÃдѺÅÍ¨Ô¡ä´ ·¢Õè Ò PAI ã¹âËÁ´¹Õ¨é ÐäÁ ʹ㨡ÒÃà»ÅÕÂè ¹á»Å§¢Í§¢Íº¢Ò¢Í§ÊÑ­­Ò³ áµ ¨Ð´Ù·Õè ÃдѺÅͨԡ᷹ àÃÔÁè µ ¹´ Ç¡ÒÃ૵ºÔµ PAMOD à¾×Íè ¡íÒ˹´ãË ¾ÅÑ Ê áÍ¡¤ÔÇÁÙàÅàµÍà ·Òí §Ò¹ã¹âËÁ´¹ÑºµÒÁ ª ǧàÇÅÒà» ´à¡µ ¨Ò¡¹Ñ¹é ¡íÒ˹´ÃдѺÅͨԡ·Õµè Í §¡ÒÃ·Õºè µÔ PEDGE ¶ Òà» ¹ 0 ¨ÐàÃÔÁè ¹Ñº·ÕÅè ͨԡ 1 áµ ¶ ÒºÔµ¹Õàé » ¹ 1 ¡ÒùѺ¡ç¨ÐàÃÔÁè ¢Ö¹é àÁ×Íè Åͨԡ·ÕÍè ¹Ô ¾Øµà» ¹ 0 ¡ÒùѺ¨ÐàÃÔÁè µ ¹à¾ÔÁè ¤ Ò¢Ö¹é àÁ×Íè ÃдѺÅͨԡ·Õè ÍÔ¹¾Øµ¹Ñ¹é ÁÕ¤ÇÒÁÂÒǢͧàÇÅÒ 64 ä«à¡ÔŢͧÊÑ­­Ò³¹ÒÌ ¡Ò E áÅж ÒËÒ¡ÃдѺÅͨԡ·ÕÍè ¹Ô ¾Øµà»ÅÕÂè ¹ä» ¤ Ңͧ¡ÒùѺà´ÔÁÂѧ¤§à¡çºäÇ ÍÂÙ áÅШйѺµ ÍàÁ×Íè ÃдѺÅͨԡ·ÕÍè ¹Ô ¾Øµ¡ÅѺÁÒà» ¹ÃдѺ·Õµè Í §¡ÒÃઠ¹à´ÔÁ ºÔµ PAIF ¨Ð૵·Ø¡¤ÃÑ§é ·ÕÃè дѺÅͨԡÍÔ¹¾Øµ PAI à»ÅÕÂè ¹ÁÒà» ¹ÃдѺÅͨԡ·Õµè Í §¡Òà áÅÐàÁ×Íè ºÔµ PAIF ૵áÅ ÇáÅкԵ PAII ૵ÍÂÙ´ Ç Â¡ç¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé µÑÇÍ ҧ¡ÒùíÒ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà 㹠âËÁ´¹Õäé »ãª §Ò¹¡çä´ á¡ ¡ÒÃÇÑ´¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ·§Ñé Ẻµ Íà¹×Íè §áÅÐẺ໠¹ª ǧ æ TMSK2 PAII

à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ TFLG2

µÃǨ¨ÑºÍÔ¹¾Øµä´

PAIF

PAOVI

ÊÑ­­Ò³ÍÔ¹¾Øµ ·Õ¢è Ò PAI

PACTL PEDGE 0 1

à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ E/64

PAOVF

¹Ñº¤ Òà¾ÔÁè ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

PAEN = "1" PAMOD = "1"

ÃÙ» B ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ


150

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡ÒÃàÅ×Í¡âËÁ´·íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ¡ÃзíÒä´ â´Â¡ÒáíÒ˹´·Õºè µÔ PAMOD (ºÔµ 5) ¢Í§ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà PACTL (Pulse Accumulator Control Register) «Ö§è ÁÕ áÍ´à´ÃÊÍÂÙ· Õè 0x1026 ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ÁÕ´ Ç¡ѹ 4 µÑÇ ´Ñ§¹Õé 1. PACNT (Pulse Accumulator Count register) ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1027 㪠à¡çº¤ Ò¡ÒùѺ ¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà 2. PACTL (Pulse accumulator control register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ ·Õè 0x1026 à» ¹ÃÕ¨ÔÊàµÍà ·ÕèÁÕº·ºÒ·ÁÒ¡·ÕèÊØ´¢Í§Ç§¨ÃÊ Ç¹¹Õé ÁÕÃÒÂÅÐàÍÕ´¡Òà ·íÒ§Ò¹·Õèà¡ÕèÂÇ¢ ͧ¡Ñº¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ´Ñ§¹Õé DDRA (Data direction for port A pin 7 : ºÔµ 7) 㪠¡Òí ˹´·ÔÈ·Ò§¢Í§¢Ò PA7 ¨Ðµ ͧ ¡íÒ˹´ãË à» ¹ÍÔ¹¾Øµ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅ 0 ÁÒÂѧºÔµ¹Õé PAEN (Pulse accumulator system enable : ºÔµ 6) 㪠àÍç¹àÍàºÔÅËÃ×ÍàÅ×Í¡ãË ¾ÅÑ Ê áÍ¡ ¤ÔÇÁÙàÅààµÍà ·íÒ§Ò¹ ´ Ç¡ÒáíÒ˹´ãË ºÔµ¹Õéà» ¹ 1 PAMOD ( Pulse accumulator mode : ºÔµ 5) àÅ×Í¡âËÁ´·íÒ§Ò¹¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà 0 - àÅ×Í¡âËÁ´¹Ñºà˵ءÒó ¡Ãеع 1 - àÅ×Í¡âËÁ´¹ÑºµÒÁª ǧàÇÅÒà» ´à¡µ PEDGE ( Pulse accumulator edge control : ºÔµ 4) àÅ×Í¡¢Íº¢ÒÊÑ­­Ò³ÍÔ¹¾Øµ¢Í§ ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà 0 - àÅ×Í¡¢Íº¢Òŧ¢Í§ÊÑ­­Ò³ 1 - àÅ×Í¡¢Íº¢Ò¢Ö¹é ¢Í§ÊÑ­­Ò³ ºÔµ·Õàè ËÅ×ͧ͢ PACTL (ºÔµ 0-3) äÁ 㪠㹾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà 3. TFLG2 (Timer interrupt flag register 2) ÃÕ¨ÊÔ àµÍà ʶҹСÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÇÑ ·Õè 2 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1025 㪠áÊ´§Ê¶Ò¹Ð¡ÒùѺ¤ Òà¡Ô¹ËÃ×ÍâÍàÇÍà â¿ÅǢͧ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ·Õºè µÔ PAOVF (ºÔµ 5) áÅÐáÊ´§Ê¶Ò¹Ð¡ÒõÃǨ¨ÑºÊÑ­­Ò³·Õ¢è Ò PA7 ä´ â´ÂáÊ´§·Õºè µÔ PAIF (ºÔµ 4) 4. TMSK2 (Timer interrupt mask regiter 2) ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÇÑ ·Õè 2 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1023 㪠àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà ÁÕ 2 Ẻ¤×Í à«µºÔµ PAOVI (ºÔµ 5) à¾×Íè àÅ×Í¡ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà à¡Ô´¡ÒùѺ¤ Òà¡Ô¹ áÅÐ૵ºÔµ PAII (ºÔµ 4) à¾×Íè àÅ×Í¡ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ¾ÑÅÊ áÍ¡¤ÔÇÁÙàÅàµÍà µÃǨ¨ÑºÊÑ­­Ò³·Õ¢è Ò PA7 ä´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

151

5.8.1.3 ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ A ã¹Ãкºä·àÁÍà ¹Ñºà» ¹¡Ò÷íÒ§Ò¹ËÅÑ¡¢Í§¾Íà µ A ºÒ§¤ÃÑ§é ¨Ö§àÃÕ¡¾Íà µ A Ç Òà» ¹ ¾Íà µä·àÁÍà (Timer port) â´ÂÃкºä·àÁÍà ËÅÑ¡¢Í§ 68HC11 ¨Ð㪠µÇÑ ¹Ñº¤ ÒÍÔÊÃТ¹Ò´ 16 ºÔµ·ÕÊè ÒÁÒöâ»Ãá¡ÃÁ¤ Ò »ÃÕÊà¡ÅàÅÍÃ ä´ 4 ÃдѺ à» ¹ËÑÇã¨ã¹¡Ò÷íÒ§Ò¹ â´ÂẠ§¡Ò÷íÒ§Ò¹ÍÍ¡à» ¹ 3 Ê Ç¹¤×Í ÍÔ¹¾ØµµÃǨ ¨ÑºÊÑ­­Ò³ (input capture), Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·Õº (output compare) áÅеÑǹѺÍÔÊÃÐ (free-running counter) ã¹ÃÙ»·Õè 5-14 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ãкºä·àÁÍà ÀÒÂã¹ 68HC11 µÑÇÅ´·Í¹

ËÒà 1, 4, 8 áÅÐ 16

ÊÑ­­Ò³¹ÒÌÔ¡Ò E I 0x100E : 0x100F

TCNTH PR1

TOI

TCNTL

µÑǹѺÍÔÊÃÐ 16 ºÔµ

PR0

TFLG1

CFORC

0x1016 : 0x1017

TOC1H

TOC1L

ÃÕ¨ÔÊàµÍà à»ÃÕºà·Õº¢ ÍÁÙÅ 16 ºÔµ

0xFFDE-0xFFDF

TOF

TMSK1

áÍ´à´ÃÊ ÍÔ¹àµÍÃ Ã»Ñ µ àÇ¡àµÍÃ

OC1I OC1F

0xFFE8-0xFFE9 PA7/PAI/OC1

FOC1 OC2I

0x1018 : 0x1019

TOC2H

TOC2L

ÃÕ¨ÔÊàµÍà à»ÃÕºà·Õº¢ ÍÁÙÅ 16 ºÔµ

OC3I TOC3L

ÃÕ¨ÔÊàµÍà à»ÃÕºà·Õº¢ ÍÁÙÅ 16 ºÔµ

ÃÕ¨ÔÊàµÍà à»ÃÕºà·Õº¢ ÍÁÙÅ 16 ºÔµ

PA4/OC4/OC1

FOC4 OC5I

TOC5L

ÃÕ¨ÔÊàµÍà à»ÃÕºà·Õº¢ ÍÁÙÅ 16 ºÔµ

0xFFE2-0xFFE3

OC4F

0x101E : 0x101F

TOC5H

PA5/OC3/OC1

FOC3 OC4I

TOC4L

0xFFE4-0xFFE5

OC3F

0x101C : 0x101D

TOC4H

PA6/OC2/OC1

FOC2

0x101A : 0x101B

TOC3H

0xFFE6-0xFFE7

OC2F

0xFFE0-0xFFE1

OC5F PA3/OC5/OC1

FOC5 IC1I

0xFFEE-0xFFEF

0x1010 : 0x1011

TIC1H

TIC1L

ÃÕ¨ÔÊàµÍà ¾Ñ¡¢ ÍÁÙÅ 16 ºÔµ

IC1F

PA2/IC1 IC2I

0xFFEC-0xFFED

0x1012 : 0x1013

TIC2H

TIC2L

ÃÕ¨ÔÊàµÍà ¾Ñ¡¢ ÍÁÙÅ 16 ºÔµ

IC2F

PA1/IC2 IC3I

0xFFEA-0xFFEB

0x1014 : 0x1015

TIC3H

TIC3L

ÃÕ¨ÔÊàµÍà ¾Ñ¡¢ ÍÁÙÅ 16 ºÔµ

IC3F

ÃÙ»·Õè 5-14 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹â´ÂÃÇÁ¢Í§Ãкºä·àÁÍà ÀÒÂã¹ MC68HC11E1

PA0/IC3


152

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧã¹Ãкºä·àÁÍÃ

1. TCNT ( Timer counter register) ÃÕ¨ÊÔ àµÍà à¡çº¤ Ò¡ÒùѺ 16 ºÔµ áÍ´à´ÃÊÍÂÙ· Õè 0x100E áÅÐ 0x100F

2. TCTL1 (Timer Control register 1) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁä·àÁÍà µÇÑ ·Õè 1 TCTL1

ºÔµ 7 OM2

ºÔµ 6

ºÔµ 5

OL2

OM3

ºÔµ 4

ºÔµ 3

OL3

ºÔµ 2

OM4

OL4

ºÔµ 1 OM5

ºÔµ 0 OL5

0x1020

ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1020 㪠¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õº â´ÂºÔµ OMx áÅÐ OLx ·íÒ§Ò¹ à ÇÁ¡Ñ¹à¾×Íè ¡íÒ˹´¡Ò÷íÒ§Ò¹´Ñ§áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ã¹µÒÃÒ§ 5A OMx

OLx

OCx output

-,/N*

-,/N)

0

0

1

äÁ ÁÕÊÑ­­Ò³àÍÒµ ¾Øµ ÊÅѺÊÑ­­Ò³àÍÒµ ¾Øµ

0

1

0

1

Åͨԡ "0" Åͨԡ "1"

1

x : Ê Ç¹àÍÒµ ¾Øµà»ÃÕºà·ÕºªØ´ã´æ ÁÕ¤ Ò 2-5

¢Íº¢Ò¢Í§ÊÑ­­Ò³·ÕèµÃǨ¨Ñº

äÁ Á¡Õ Ò÷íÒ§Ò¹ ¢Íº¢Ò¢Ö¹é ¢Íº¢Òŧ ¢Íº¢Ò¢Ö¹é áÅÐŧ

x : Ê Ç¹ÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ªØ´ã´æ ÁÕ¤ Ò 1-3

µÒÃÒ§·Õè 5A ¼ÅàÍÒµ ¾µØ ¢Í§ OC2-OC5 µÒÃÒ§·Õè 5B ¡ÒÃàÅ×Í¡¢Íº¢Ò¢Í§ÊÑ­­Ò³·Õµè Í §¡ÒõÃǨ¨Ñº ¨Ò¡¡ÒáíÒ˹´â´ÂºÔµ OMx áÅÐ OLx â´Â㪠ºµÔ EDGxB áÅÐ EDGxA 3. TCTL2 (Timer Control register 2) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁä·àÁÍà µÇÑ ·Õè 2 TCTL2

ºÔµ 7

EDG4B

ºÔµ 6

EDG4A

ºÔµ 5

EDG1B

ºÔµ 4

EDG1A

ºÔµ 3

EDG2B

ºÔµ 2

EDG2A

ºÔµ 1

EDG3B

ºÔµ 0

EDG3A

0x1021

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1021 㪠àÅ×Í¡¢Íº¢Ò¢Í§ÊÑ­­Ò³·Õµè Í §¡ÒõÃǨ¨Ñº¢Í§Ê ǹÍÔ¹¾Øµ µÃǨ¨ÑºÊÑ­­Ò³ (input capture : IC) ÁÕ 3 ªØ´ (IC1-IC3) â´ÂºÔµ EDGxA áÅÐ EDGxB (x ¤×Í ËÁÒÂàÅ¢ ª ͧÍÔ¹¾ØµÁÕ¤Ò 1-3) ¨Ð·íҧҹà ÇÁ¡Ñ¹à¾×Íè ¡íÒ˹´¡Ò÷íÒ§Ò¹´Ñ§áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ã¹µÒÃÒ§ 5B

4. TFLG1 (Timer Interrupt Flag register 1) ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹ÐÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÑÇ·Õè 1 TFLG1

ºÔµ 7

OC1F

ºÔµ 6

OC2F

ºÔµ 5

OC3F

ºÔµ 4

OC4F

ºÔµ 3

OC5F

ºÔµ 2 IC1F

ºÔµ 1 IC2F

ºÔµ 0 IC3F

0x1023

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1023 㪠áÊ´§à˵ءÒó ·àÕè ¡Ô´¢Ö¹é ã¹Ãкºä·àÁÍà áÅзíҧҹà ÇÁ¡Ñº ÃÕ¨ÊÔ àµÍà TMSK1 à¾×Íè ¡íÒà¹Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ã¹Ãкº ¶ ÒºÔµã¹ÃÕ¨ÊÔ àµÍà TMSK1 ૵ áŠǺԵ·ÕÊè ÁÑ ¾Ñ¹¸ ¡¹Ñ ¢Í§ÃÕ¨ÊÔ àµÍà TFLG1 ૵´ Ç ¨Ð·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ¡ÒÃà¤ÅÕÂà ºµÔ ·íÒä´ â´Âà¢Õ¹¢ ÍÁÙÅ 1 ÁÒÂѧºÔµ·Õµè Í §¡Òà äÁ ¤ÇÃ㪠¤Òí ÊÑ§è ¨Ñ´¡Òâ ÍÁÙÅÃдѺºÔµÁÒà¤ÅÕÂà ºµÔ ã¹ÃÕ¨ÊÔ àµÍà TFLG1 à´ç´¢Ò´ ºÔµ OCxF (Output compare flag) ¨Ð¶Ù¡à«µàÁ×Íè µÑǹѺ¤ ÒàÇÅÒÁÕ¤Ò µÃ§¡Ñº¤ Òã¹ÃÕ¨ÊÔ àµÍà TOCx ºÔµ ICxF (Input capture flag) ¨Ð૵àÁ×Íè ÊÒÁÒöµÃǨ¨Ñº¢Íº¢Ò¢Í§ÊÑ­­Ò³ÍÔ¹¾Øµ·Õµè Í §¡ÒÃä´ ã¹Ê ǹ¢Í§ÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ (IC)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

153

5. TFLG2 (Timer Interrupt Flag register 2) ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹ÐÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÑÇ·Õè 2 TFLG2

ºÔµ 7 TOF

ºÔµ 6 RTIF

ºÔµ 5

PAOVF

ºÔµ 4 PAIF

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

0x1025

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1025 㪠áÊ´§à˵ءÒó ·àÕè ¡Ô´¢Ö¹é ã¹Ãкºä·àÁÍà áÅзíҧҹà ÇÁ ¡ÑºÃÕ¨ÊÔ àµÍà TMSK2 à¾×Íè ¡ ÍãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ã¹Ãкº ¶ ÒºÔµã¹ÃÕ¨ÊÔ àµÍà TMSK2 ¶Ù¡à«µ áÅ Ç ºÔµ·ÕÊè ÁÑ ¾Ñ¹¸ ¡¹Ñ ¢Í§ÃÕ¨ÊÔ àµÍà TFLG2 ૵ÍÂÙ´ Ç Â ¨Ð·íÒãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ¡ÒÃà¤ÅÕÂà ºµÔ ã¹ÃÕ¨ÊÔ àµÍà TFLG2 ·íÒä´ â´Â¡ÒÃà¢Õ¹¢ ÍÁÙÅ 1 ÁÒÂѧºÔµ·Õµè Í §¡ÒÃà¤ÅÕÂà áÅÐäÁ ¤ÇÃ㪠¤Òí ÊÑ§è » ´¡Òâ ÍÁÙÅ ÃдѺºÔµÁÒ·íÒ¡ÒÃà¤ÅÕÂà ºµÔ ã¹ÃÕ¨ÊÔ àµÍà TFLG2 à´ç´¢Ò´ ÊíÒËÃѺã¹Ãкºä·àÁÍà ¨Ð㪠à¾Õ§ 2 ºÔµ¤×Í TOF (Timer overflow flag : ºÔµ 7) ૵àÁ×Íè µÑǹѺÍÔÊÃÐ 16 ºÔµ à»ÅÕÂè ¹¤ Ò¨Ò¡ 0xFFFF à» ¹ 0x0000 RTIF (Real-time interrupt flag : ºÔµ 6) ૵àÁ×Íè µÃǨ¨Ñº¢Íº¢Ò¢Ö¹é ¢Í§ÊÑ­­Ò³ ³ ¨Ø´·Õµè ÃǨ¨Ñºä´

6. TMSK1 (Timer Interrupt Mask register 1) ÃÕ¨ÊÔ àµÍà àÅ×Í¡¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÑÇ·Õè 1 TMSK1

ºÔµ 7 OC1I

ºÔµ 6 OC2I

ºÔµ 5 OC3I

ºÔµ 4 OC4I

ºÔµ 3 OC5I

ºÔµ 2 IC1I

ºÔµ 1 IC2I

ºÔµ 0 IC3I

0x1022

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1022 㪠àÅ×Í¡ãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§Ê ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ (IC) áÅÐÊ Ç¹àÍÒµ ¾µØ à»ÃÕºà·Õº (OC) â´Âà¢Õ¹¢ ÍÁÙÅ 1 ä»ÂѧºÔµ·Õµè Í §¡ÒÃãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ºÔµ OCxI (Output compare interrupt enable) 㪠àÅ×Í¡ãË à¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ àÁ×èÍá¿Å¡ OxF ã¹ÃÕ¨ÊÔ àµÍà TFLG1 ¶Ù¡à«µ ºÔµ ICxI (Input capture interrupt enable) 㪠àÅ×Í¡ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè á¿Å¡ ICxF ¶Ù¡à«µ

7. TMSK2 (Timer Interrupt Mask register 2) ÃÕ¨ÊÔ àµÍà àÅ×Í¡¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ä·àÁÍà µÑÇ·Õè 2 TMSK2

ºÔµ 7 TOI

ºÔµ 6 RTII

ºÔµ 5

PAOVI

ºÔµ 4 PAII

ºÔµ 3

ºÔµ 2

ºÔµ 1 PR1

ºÔµ 0 PR0

0x1024

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1024 㪠àÅ×Í¡ãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè ä·àÁÍà ¹ºÑ ¤ Òà¡Ô¹ËÃ×Íà¡Ô´ âÍàÇÍà â¿ÅÇ (à»ÅÕÂè ¹¨Ò¡ 0xFFFF à» ¹ 0x0000) â´Â૵ºÔµ TOI (Timer overflow interrupt enable : ºÔµ 7) áÅÐ àÅ×Í¡ãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢Í§ÃÕÅä·Á Í¹Ô àµÍÃ Ã»Ñ µ ´ Ç¡ÒÃ૵ºÔµ RTII (RTI Interrupt Enable : ºÔµ 6) ¹Í¡¨Ò¡¹Ñ¹é ã¹ 2 ºÔµµèÒí ¤×Í PR1 (ºÔµ 1) áÅÐ PR0 (ºÔµ 0) Âѧ㪠¡Òí ˹´¡ÒÃËÒäÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ ¹ÒÌ ¡Ò E ´Ñ§áÊ´§¡Ò÷íҧҹ㹵ÒÃÒ§·Õè 5C PR1

PR0

µÑÇËÒäÇÒÁ¶Õè

0

0

0

1

1 4

1

0

1

1

8 16

µÒÃÒ§·Õè 5C àÅ×Í¡µÑÇËÒäÇÒÁ¶Õ¢è ͧÊÑ­­Ò³¹ÒÌ ¡Ò E à¾×Íè ¡íÒ˹´¤ÇÒÁ¶Õãè ¹¡ÒùѺ¤ Ңͧä·àÁÍÃ


154

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

8. TIC (Timer input capture register) ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅÊ Ç¹ÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ ÁÕ 3 µÑǤ×Í TIC1-TIC3 áµ ÅеÑÇÁÕ¢¹Ò´ 16 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1010-0x1011 ÊíÒËÃѺ TIC1, 0x10120x1013 ÊíÒËÃѺ TIC2 áÅÐ 0x1014-0x1015 ÊíÒËÃѺ TIC3 (ÃÕ¨ÊÔ àµÍà 1 µÑÇ㪠áÍ´à´ÃÊ 2 µíÒá˹ §)

9. TOC (Timer output compare register) ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅÊíÒËÃѺà»ÃÕºà·Õºã¹Ê ǹ àÍÒµ ¾Øµà»ÃÕºà·Õº ÁÕ 5 µÑǤ×Í TOC1-TOC5 áµ ÅеÑÇÁÕ¢¹Ò´ 16 ºÔµ áÍ´à´ÃÊÍÂÙ ·Õè 0x1016-

0x1017 ÊíÒËÃѺ TOC1, 0x1018-0x1019 ÊíÒËÃѺ TOC2, 0x101A-0x101B ÊíÒËÃѺ TOC3, 0x101C0x101D ÊíÒËÃѺ TOC4 áÅÐ 0x101E-0x101F ÊíÒËÃѺ TOC5 (ÃÕ¨ÊÔ àµÍà 1 µÑÇ㪠áÍ´à´ÃÊ 2 µíÒá˹ §)

10. OC1D (Output compare 1 data register) ÃÕ¨ÊÔ àµÍà ¢Í ÁÙÅ¢Í§Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·ÕºªØ´·Õè 1 OC1D

ºÔµ 7

OC1D7

ºÔµ 6

OC1D6

ºÔµ 5

OC1D5

ºÔµ 4

OC1D4

ºÔµ 3

OC1D3

ºÔµ 2

ºÔµ 1

ºÔµ 0

0x100D

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµáµ 㪠¨ÃÔ§ 5 ºÔµ¤×Í ºÔµ 3-ºÔµ 7 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x100D ¨Ðµ ͧ·íҧҹà ÇÁ¡ÑºÃÕ¨ÊÔ àµÍà OC1M â´Â¤ Ңͧ OC1D ¨Ðä»»ÃÒ¡¯·Õ¢è Ò¾Íà µ PA3-PA7 µÒÁ·ÕÁè ¡Õ ÒáíÒ˹´â´ÂÃÕ¨ÊÔ àµÍà OC1M àÁ×Íè ¤ ҢͧÃÕ¨ÊÔ àµÍà TCNT ෠ҡѺ TOC1

11. OC1M (Output compare 1 mask register) ÃÕ¨ÊÔ àµÍà àÅ×Í¡¢ ÍÁÙÅàÍÒµ ¾µØ ¢Í§Ê ǹ àÍÒµ ¾Øµà»ÃÕºà·ÕºªØ´·Õè 1 OC1M

ºÔµ 7

OC1M7

ºÔµ 6

OC1M6

ºÔµ 5

OC1M5

ºÔµ 4

OC1M4

ºÔµ 3

OC1M3

ºÔµ 2

ºÔµ 1

ºÔµ 0

0x100C

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµáµ 㪠¨ÃÔ§ 5 ºÔµ¤×Í ºÔµ 3-ºÔµ 7 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x100C ·íҧҹà ÇÁ¡ÑºÃÕ¨ÊÔ àµÍà OC1D â´Â¤ Ңͧ OC1M ¨Ðà» ¹µÑÇ¡íÒ˹´Ç Ò ¢ ÍÁÙŢͧ OC1D ºÔµã´º Ò§·Õ¨è Ðä»»ÃÒ¡¯·Õ¢è Ò¾Íà µ PA3-PA7 àÁ×Íè ¤ ҢͧÃÕ¨ÊÔ àµÍà TCNT ෠ҡѺ TOC1

12. CFORC (Timer compare force register) ÃÕ¨ÊÔ àµÍà ¡Òí ˹´àÍÒµ ¾µØ ¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õº (OC) CFORC

ºÔµ 7

FOC1

ºÔµ 6

FOC2

ºÔµ 5

FOC3

ºÔµ 4

FOC4

ºÔµ 3

FOC5

ºÔµ 2

ºÔµ 1

ºÔµ 0

0x100B

à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµáµ 㪠¨ÃÔ§ 5 ºÔµ¤×Í ºÔµ 3-ºÔµ 7 ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x100B 㪠ʧ ¤ ÒÍÍ¡ä»Âѧ¢Ò¾Íà µ A ã¹¢³Ð·Õ¾è Íà µ A ¶Ù¡¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ä·àÁÍà â´Â»¡µÔàÁ×Íè ¾Íà µ A ¶Ù¡¡íÒ˹´ãË ·Òí §Ò¹ã¹âËÁ´ ä·àÁÍà áÅ Ç ¡ÒÃ૵ËÃ×Íà¤ÅÕÂà ºÔµ¢Í§¢Ò¾Íà µ¨Ðµ ͧ¢Öé¹ÍÂÙ ¡Ñº¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾Øµà»ÃÕºà·Õº ¹Ñ¹è ¤×Í ¢Ò¾Íà µ A ¨Ð૵àÁ×Íè ¤ Ңͧ TCNT ෠ҡѺ TOC áµ ¶Ò ÁÕ¤ÇÒÁµ ͧ¡ÒÃÊ §¢ ÍÁÙÅ 1 ä»Âѧ¢Ò¾Íà µ A ã¹µ¢³Ð·Õ·è Òí §Ò¹ã¹âËÁ´ä·àÁÍà ÊÒÁÒö·íÒä´ â´Âà¢Õ¹¢ ÍÁÙÅ 1 ŧ㹺Ե·Õãè ª á·¹¢Ò¾Íà µ A ¢Í§ ÃÕ¨ÊÔ àµÍà CFORC ÍÒ·Ô µ ͧ¡ÒÃãË ¢Ò OC2 à» ¹ 1 µ ͧà¢Õ¹ 0x40 ÁÒÂѧÃÕ¨ÊÔ àµÍà CFORC à» ¹µ ¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

155

µÑǹѺÍÔÊÃÐ 16 ºÔµ à» ¹Ê ǹÊíҤѭ·ÕÊè ´Ø ã¹Ãкºä·àÁÍà ¢Í§ 68HC11 ÁÕÃ¨Õ ÊÔ àµÍà ËÅÑ¡¤×Í ÃÕ¨ÊÔ àµÍà µÇÑ ¹ÑºàÇÅÒ (Timer Counter register : TCNT) à» ¹ÃÕ¨ÊÔ àµÍà 16 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x100E-0x100F 㪠à¡çº ¢ ÍÁÙÅ·Õäè ´ ¨Ò¡¡ÒùѺ¢Í§µÑǹѺ ËÅѧ¨Ò¡¡ÒÃÃÕ૵äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ð» ͹ÊÑ­­Ò³¹ÒÌ ¡Ò E ãË á¡ µÑǹѺÍÔÊÃйÕé àÅ×Í¡ÍѵÃÒ¤ÇÒÁ¶Õè¢Í§ÊÑ­­Ò³¹ÒÌ ¡Òä´ 4 ÃдѺ¨Ò¡µÑÇÅ´·Í¹ËÃ×Í»ÃÕÊà¡Å àÅÍà «Ö§è ¨ÐËÒô Ç 1, 4, 8 ËÃ×Í 16 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´·Õºè µÔ PR1 áÅÐ PRO ã¹ÃÕ¨ÊÔ àµÍà TMSK2 ¡ÒÃÍ Ò¹¤ Ò¨Ò¡ÃÕ¨ÔÊàµÍà TCNT ÊÒÁÒö·íÒä´ µÅÍ´àÇÅÒâ´Â㪠«Í¿µ áÇà ·Ñ駹Õéà¹×èͧ¨Ò¡ ¨Ñ§ËÇТͧ¡ÒÃÍ Ò¹¤ Ò¨ÐàËÅ×èÍÁ仨ҡ¤ÒºàÇÅҢͧÊÑ­­Ò³¹ÒÌ ¡ÒÀÒÂã¹ËÃ×Í E ÍÂÙ 180 ͧÈÒ ·íÒãË ¡ÒÃÍ Ò¹¤ Ңͧ¡ÒùѺäÁ Áռŵ Í¡Ò÷íÒ§Ò¹¢Í§µÑǹѺ ¤ Ңͧ¡ÒùѺã¹äºµ µÒèí (TCNTL áÍ´à´ÃÊ 0x100F ¡íÒ˹´à» ¹ºÔµ 0-7) ¨Ð¶Ù¡¹íÒä»à¡çºã¹ ºÑ¿à¿Íà â´ÂÍѵâ¹ÁÑµÔ ¶Ö§áÁ ¨ÐÁÕ¡ÒÃÃÕ૵à¡Ô´¢Ö鹤 Ò¹Õé¨ÐäÁ à»ÅÕè¹á»Å§ Ê Ç¹ã¹äºµ ÊÙ§ (TCNTH áÍ´à´ÃÊ 0x100E ¡íÒ˹´à» ¹ºÔµ 8-15) äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ðµ ͧ·íÒ¡ÒÃÍ Ò¹àͧã¹ä«à¡ÔÅËÃ×Í Ãͺ¡ÒÃÍ Ò¹·Õµè Í à¹×Íè §¡Ñ¹ àÁ×Íè ¹Ñº¤ Ò¨Ò¡ 0x0000-0xFFFF áŠǨÐà»ÅÕÂè ¹¤ Òà» ¹ 0x0000 ·íÒãË à¡Ô´¡Òà ૵ºÔµâÍàÇÍà â¿ÅÇ ¢Í§ä·àÁÍà «Ö觡ç¤×Í ºÔµ TOF (ºÔµ 7) ã¹ÃÕ¨ÔÊàµÍà TFLG2 ¡ÒÃÍÔ¹àµÍà ÃÑ»µ ÊÒÁÒöà¡Ô´¢Ö¹é ä´ ã¹¨Ñ§ËÇйÕé ¶ ÒËÒ¡ä´ ÃºÑ ¡ÒÃàÍç¹àÍàºÔÅäÇ ·ºÕè µÔ TOI (ºÔµ 7) ã¹ÃÕ¨ÊÔ àµÍà TMSK2

Ê Ç¹ÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ (Input capture) ˹ Ò·Õè¢Í§Ê ǹ¹Õé¤×Í ºÑ¹·Ö¡ËÃ×Íà¡çº¤ ÒàÁ×èÍÍÔ¹¾Øµà¡Ô´¡ÒÃà»ÅÕè¹á»Å§µÃ§µÒÁà§×è͹䢷Õè ¡íÒ˹´äÇ ¢Í§Ãкº â´ÂµÃǨÊͺ¨Ò¡¢Íº¢Ò¢Í§ÊÑ­­Ò³ÍÔ¹¾Øµ «Ö§è ÊÒÁÒöµÃǨ¨Ñºä´ ·§Ñé ¢Íº¢Ò ¢Öé¹ ¢Íº¢Òŧ ËÃ×Í㪠·Ñé§Êͧ¢Íº¢Ò (µÃǨ¨Ñºà» ¹¾ÑÅÊ ) ¨Ò¡¤ÇÒÁÊÒÁÒöÍѹ¹Õéàͧ ·íÒãË ÊÒÁÒö ¹íÒä»ãª ÇÑ´ÃÐÂÐàÇÅÒÃÐËÇ Ò§ÊÑ­­Ò³¾ÑÅÊ ä´ áÅÐàÁ×èÍÁÕ«Í¿µ áÇà ÁÒª Ǥíҹdz ¡ç¨ÐÊÒÁÒö¹íÒ ÃкºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¹ÇÕé ´Ñ ¤ÒºàÇÅÒ ¤ÇÒÁ¶Õè ËÃ×Í»ÃÔÁÒ³Í×¹è æ ·ÕÊè ÁÑ ¾Ñ¹¸ ¡ºÑ àÇÅÒ àª ¹ ÇÑ´¤ÇÒÁ àÃçÇ µÃǨ¨Ñº¡ÒÃà¤Å×è͹·Õè áÅÐÃÐÂТͧ¡ÒÃà¤Å×è͹·Õè à» ¹µ ¹ ËÅÑ¡¡ÒÃÍ ҧ§ ÒÂ㹡ÒÃÇÑ´¤ÇÒÁ¶Õè¢Í§Ê ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³¤×Í ÇÑ´ª ǧàÇÅҢͧ¢Íº ¢Òŧ¢Í§ÊÑ­­Ò³ 2 ª ǧ áÅ ÇËÒ¤ÒºàÇÅÒ·ÕËè Ò §¡Ñ¹¢Í§¢Íº¢ÒÊÑ­­Ò³·Ñ§é Êͧ ´ Ç¡ÒùíÒª ǧàÇÅÒ ÁÒź¡Ñ¹ áŠǹíÒä»ËÒà 1 (¨Ò¡¤ÇÒÁÊÑÁ¾Ñ¹¸ ¤ÇÒÁ¶Õè = 1/àÇÅÒ) ¡ç¨Ðä´ ¤ÇÒÁ¶Õ¢è ͧÊÑ­­Ò³ÍÍ¡ÁÒ áÅд ÇÂÇÔ¸Õ¡ÒÃà´ÕÂǡѹ¹ÕéÊÒÁÒö¹íÒä»ãª ÇÑ´¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ä´ â´ÂãË àÃÔèÁºÑ¹·Ö¡¤ ÒàÁ×è;º ÊÑ­­Ò³¢Íº¢Ò¢Öé¹áÅкѹ·Ö¡ÍÕ¡¤ÃÑé§ã¹ª ǧÊÑ­­Ò³¢Íº¢Òŧ áŠǹíÒÁÒź¡Ñ¹¡ç¨Ðä´ ¤ Ңͧ ¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ÍÍ¡ÁÒ â´Â¤ ҢͧàÇÅÒ¹Ñé¹æ ¨Ð¶Ù¡à¡çºäÇ ã¹ÃÕ¨ÔÊàµÍà TCNT


156

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C ÊÑ­­Ò³¹ÒÌÔ¡Ò E ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

¢Ò¾Íà µÍÔ¹¾Øµ ICx

ÃÕ¨ÔÊàµÍà TICx Í Ò¹¤ Ò´ ÇÂÇÔ¸¡Õ Ò÷ҧ«Í¿µ áÇÃ

TCTL2

àÅ×Í¡¢Íº¢ÒÊÑ­­Ò³·Õµè Í §¡ÒõÃǨ¨Ñº â´Â¡íÒ˹´¢ ÍÁÙÅ㹺Ե EDGxB áÅÐ EDGxA ã¹ÃÕ¨ÊÔ àµÍà TCTL2 TMSK1 ICxI

TFLG1 ICxF

૵àÁ×Íè µÃǨ¨Ñº¢Íº¢Ò¢Í§ÊÑ­­Ò³ä´ à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ

x = 1, 2, 3

ÃÙ»·Õè 5-15 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ã¹Ãкºä·àÁÍà ¢Í§ 68HC11 ã¹ÃÙ»·Õè 5-15 áÊ´§¡Ò÷íÒ§Ò¹¢Í§Ê ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´¢Íº ¢Ò¢Í§ÊÑ­­Ò³·Õµè Í §¡ÒõÃǨ¨Ñº â´Â¡íÒ˹´Ê¶Ò¹Ð¢Í§ºÔµ EDGxA áÅкԵ EDGxB ã¹ÃÕ¨ÊÔ àµÍà TCTL2 àÁ×Íè ÃкºàÃÔÁè ·íÒ§Ò¹ µÑǹѺÍÔÊÃÐ 16 ºÔµ¨ÐàÃÔÁè µ ¹¹Ñº¤ ÒáÅ Çà¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà TCNT ¨¹¡Ç Ò ¢ÒÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³¨ÐµÃǨ¨Ñº¢Íº¢Ò¢Í§ÊÑ­­Ò³·Õèµ Í§¡ÒÃä´ ¤ ҢͧÃÕ¨ÔÊàµÍà TCNT ¨Ð¶Ù¡áŵª à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà TICx ¨Ò¡¹Ñ¹é ºÔµ ICxF ã¹ÃÕ¨ÊÔ àµÍà TFLG1 ¨Ð¶Ù¡à«µ áÅж ÒËÒ¡ ºÔµ ICxI .ã¹ÃÕ¨ÊÔ àµÍà TMSK1 ૵ÍÂÙ´ Ç Â ¡ç¨Ð·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ µÑÇÍ ҧ µ ͧ¡ÒÃÇÑ´¤ÇÒÁ¡Ç Ò§¢Í§ÊÑ­­Ò³¾ÑÅÊ ·ÕèÍÔ¹¾Øµ IC1 ÊÃØ»¡Ãкǹ¡ÒÃä´ ´Ñ§¹Õé 1. ¡íÒ˹´ãË àÃÔèÁµ ¹·íÒ§Ò¹·Õè¢Íº¢Ò¢Ö鹢ͧÊÑ­­Ò³ 2. à¤ÅÕÂà á¿Å¡·Õèà¡ÕèÂÇ¢ ͧ¡ÑºÊ ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ 3. ÃͤÍ¡ÒõÃǨ¨ÑºÊÑ­­Ò³ 4. ¶ Òá¿Å¡ IC1F ૵ áÊ´§Ç Ò µÃǨ¨Ñº¢Íº¢Ò¢Í§ÊÑ­­Ò³ä´ áÅ Ç ãË à¡çº¤ ÒàÇÅÒ ¨Ò¡¹Ñ¹é ¤ÍµÃǨ¨ÑºÊÑ­­Ò³µ Íä» 5. ¡íÒ˹´ãË ¡Ò÷íÒ§Ò¹à¡Ô´¢Öé¹ÍÕ¡¤ÃÑ駷Õè¢Íº¢Òŧ¢Í§ÊÑ­­Ò³ 6. à¤ÅÕÂà á¿Å¡·Õèà¡ÕèÂÇ¢ ͧ¡ÑºÊ ǹÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³ 7. ÃͤÍ¢ͺ¢Òŧ¢Í§ÊÑ­­Ò³ 8. ¶ Òá¿Å¡ IC1F ૵ áÊ´§Ç Ò µÃǨ¨Ñº¢Íº¢Òŧ¢Í§ÊÑ­­Ò³ä´ à¡çº¤ ÒàÇÅÒª ǧ·Õè 2 ¹Õäé Ç 9. ·íÒ¡Òäíҹdz¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ «Öè§à· ҡѺ¤ ÒàÇÅÒª ǧ·Õè 2 ¶Ö§ª ǧ·Õè 1 Í ҧäáçµÒÁ ¡ÒÃÇѴẺ¹Õé¡çÂѧÁÕ¢ ͨíÒ¡Ñ´¤×Í ¶ ÒÊÑ­­Ò³·ÕèÇÑ´ÁÕ¤ÒºàÇÅÒÊÑé¹ÁÒ¡æ ·íÒãË ÊÑ­­Ò³ÅÙ¡·ÕèÊͧà¡Ô´¢Ö鹡 ͹·ÕèÊ Ç¹ÍÔ¹¾ØµµÃǨ¨ÑºÊÑ­­Ò³¨ÐÊÒÁÒöµÃǨ¨Ñºä´ ¡ÒÃÇÑ´¨Ðà¡Ô´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

157

¤ÇÒÁ¼Ô´¾ÅÒ´¢Ö¹é ·Ò§á¡ 䢤×Í ãª Í¹Ô ¾Øµ 2 ª ͧ â´Âª Í§Ë¹Ö§è µÃǨ¨Ñº¢Íº¢Ò¢Ö¹é ¢Í§ÊÑ­­Ò³ Ê Ç¹ ÍÕ¡ª ͧ˹Ö觵ÃǨ¨Ñº¢Íº¢Òŧ¢Í§ÊÑ­­Ò³ áÅТ ͨíÒ¡Ñ´ÍÕ¡»ÃСÒÃ˹Ö觤×Í ÊÑ­­Ò³¾ÑÅÊ ·ÕèÇÑ´¹Ñé¹ µ ͧÁÕ¤ Ò¤ÇÒÁ¡Ç Ò§äÁ à¡Ô¹ 65,535 à¹×èͧ¨Ò¡ÃÕ¨ÔÊàµÍà µÑǹѺÊÒÁÒöÃͧÃѺ¢ ÍÁÙÅä´ äÁ à¡Ô¹ 65,535 áµ ¡çÊÒÁÒöᡠä¢ä´ â´Â¹íҼŢͧ¡ÒÃ૵ºÔµ TOF ã¹ÃÕ¨ÔÊàµÍà TFLG2 ÁÒÍ Ò¹¢ ÍÁÙÅ áŠǹíÒä» à¡çºäÇ ã¹ã¹Ë¹ ǤÇÒÁ¨íÒÊ Ç¹Í×¹è àÁ×Íè ÇÑ´àÃÕºà ֧ͨ¹íÒ¢ ÍÁÙŷѧé ËÁ´ÁÒàÃÕ§µ ͡ѹ ¡ç¨ÐÊÒÁÒöÇÑ´ ¤ÇÒÁ¡Ç Ò§¢Í§ÊÑ­­Ò³¾ÑÅÊ ·ÕèÁÕ¤ÇÒÁ¡Ç Ò§ÁÒ¡æ ä´

Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·Õº (Output compare) ¨Ø´»ÃÐʧ¤ ËÅÑ¡¢Í§¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õ¤é Í× ãª ¡Òí à¹Ô´ÊÑ­­Ò³ÃÙ»ÊÕàè ËÅÕÂè Á·ÕÁè ¤Õ Ò ¤ÇÒÁ¶Õáè ÅÐ ´ÔǵÕäé «à¡ÔÅ·Õ¤è §·Õè ËÃ×ÍÃÙ»ÊÑ­­Ò³·ÕÊè ÒÁÒö»ÃѺ´ÔǵÕäé «à¡ÔÅä´ Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·Õº¹ÕÊé ÒÁÒö ¡íÒà¹Ô´¤ÒºàÇÅÒä´ â´ÂäÁ ¢Ö鹡Ѻâ»Ãá¡ÃÁÅÙ»·Õè㪠㹡ÒÃ˹ ǧàÇÅҢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õº¨Ðá¡ÍÍ¡à» ¹ 2 Ê Ç¹¤×Í Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·Õº ªØ´·Õè 2-5 áÅÐÊ Ç¹àÍÒµ ¾µØ à»ÃÕºà·ÕºªØ´·Õè 1 ¡Ò÷íÒ§Ò¹¢Í§àÍÒµ ¾µØ à»ÃÕºà·Õºª ͧ·Õè 2-5 (OC2-OC5) ã¹ÃÙ»·Õè 5-16 áÊ´§¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·ÕºªØ´·Õè 2-5 ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà»ÃÕº à·Õºã¹áµ ÅÐàÍÒµ ¾µØ ¨Ð¶Ù¡à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà TOC2-TOC5 «Ö§è ÁÕ¢¹Ò´ 16 ºÔµ ¡Ò÷íÒ§Ò¹¨ÐàÃÔÁè µ ¹ â´Âµ ͧà¢Õ¹¢ ÍÁÙÅ·Õµè Í §¡ÒÃãË à»ÃÕºà·ÕºËÃ×ÍàÃÕÂ¡Ç Ò ¢ ÍÁÙÅÍ Ò§Íԧŧã¹ÃÕ¨ÊÔ àµÍà TOCx àÁ×Íè àÃÔÁè µ ¹ãË Ãкº·íÒ§Ò¹ µÑǹѺÍÔÊÃТ¹Ò´ 16 ºÔµ¡ç¨ÐàÃÔèÁ¹Ñºà¡çº¤ ÒäÇ ã¹ÃÕ¨ÔÊàµÍà TCNT àÁ×èͤ Òã¹ÃÕ¨Ô ÊàµÍà TCNT ෠ҡѺ¤ Òã¹ÃÕ¨ÔÊàµÍà TOCx äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ð૵ºÔµ OCxF ã¹ÃÕ¨ÔÊàµÍà TFLG1 ÀÒÇйÕàé ÃÕÂ¡Ç Ò ¡ÒÃà»ÃÕºà·ÕºÊÁºÙó (successful compare) à¢Õ¹¤ Ò´ ÇÂÇÔ¸¡Õ Òà ·Ò§«Í¿µ áÇÃ

TOCx

ÃÕ¨ÔÊàµÍà TOCx

A

TFLG1 OCxF

B

ÊÑ­­Ò³¹ÒÌÔ¡Ò E

૵àÁ×èÍ TCNT=TOCx

Ê Ç¹à»ÃÕºà·Õº¢ ÍÁÙÅ TCNT

ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº 8 ºÔµ PACNT

ÃÙ»·Õè 5-16 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õºã¹Ãкºä·àÁÍà ¢Í§ 68HC11


158

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

TCTL1 TFLG1 OCxF

૵àÁ×Íè TCNT=TOCx x = 1, 2, 3

TMSK1 OCxI

㪠¡Òí ˹´Ê¶Ò¹ÐàÍÒµ ¾µØ

OMx

OLx

OCx output

äÁ ÁÕÊÑ­­Ò³àÍÒµ ¾Øµ

ÊÅѺÊÑ­­Ò³àÍÒµ ¾Øµ

Åͨԡ "0"

Åͨԡ "1"

¢Ò¾Íà µàÍÒµ ¾µØ OCx

à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ

àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ

ÃÙ»·Õè 5-17 ä´ÍÐá¡ÃÁ¢Í§¡ÒÃÊ §¤ ÒÍÍ¡¢Ò¾Íà µ¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õºª ͧ·Õè 2-5 ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»ÂѧÃÕ¨ÊÔ àµÍà ã¹Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õº ãË ãª ¤Òí Êѧè à¢Õ¹¢ ÍÁÙÅẺ´ÑºàºÔŠ亵 à¹×Íè §¨Ò¡à» ¹ÃÕ¨ÊÔ àµÍà 16 ºÔµ·Ñ§é ÊÔ¹é 㹡ÒÃà¢Õ¹¢ ÍÁÙŨÐà¡çº¤ Ò亵 ʧ٠¡ ͹ áŠǵÒÁ´ ÇÂ亵 µèÒí ã¹ä«à¡ÔŶѴÁÒ Ê Ç¹à»ÃÕºà·Õº¢ ÍÁÙŨÐàÃÔÁè ·íÒ§Ò¹ËÅѧ¨Ò¡¹Ñ¹é 1 ä«à¡ÔÅ ·Ñ§é ¹Õàé ¾×Íè ãË ¡ÒÃà¡çº¢ ÍÁÙŠŧã¹ÃÕ¨ÊÔ àµÍà TOCx ÊÁºÙó àÊÕ¡ ͹ ¨Ðä´ äÁ à¡Ô´¤ÇÒÁ¼Ô´¾ÅҴ㹡Ò÷íÒ§Ò¹ ¡ÒÃáÊ´§¼ÅàÍÒµ ¾µØ ·Õ¢è Ò¾Íà µ PA3-PA6 ¨Ð¶Ù¡¤Çº¤ØÁâ´ÂºÔµ OMx áÅÐ OLx ã¹ÃÕ¨ÊÔ àµÍà TCTL1 àÁ×Íè ºÔµ OCxF ã¹ÃÕ¨ÊÔ àµÍà TFLG1 ૵¨Ðà» ¹¡ÒáíÒ˹´ãË Ê§ ÊÑ­­Ò³àÍÒµ ¾µØ ÍÍ¡ä»·Ò§ ¢Ò OCx ´Ñ§áÊ´§ã¹ÃÙ»·Õè 5-17 ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ðà¡Ô´¢Ö¹é ËÒ¡ºÔµ OCxI ã¹ÃÕ¨ÊÔ àµÍà TMSK1 ¶Ù¡à«µÍÂÙ ¡Ò÷íÒ§Ò¹¢Í§àÍÒµ ¾µØ à»ÃÕºà·Õºª ͧ·Õè 1 (OC1) ã¹ÃÙ»·Õè 5-18 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õºª ͧ·Õè 1 ¤ÇÒÁᵡ µ Ò§¢Í§ OC1 àÁ×Íè à·Õº¡Ñº OC2-OC5 ¤×Í ÁÕàÍÒµ ¾µØ 5 ¢Ò «Ö§è 㪠¢Ò PA3-PA7 áÊ´§¼Å¡Ò÷íÒ§Ò¹ â´Â ·íÒ§Ò¹¢Í§ OC1 ¹Õ¨é ж١¤Çº¤ØÁâ´ÂÃÕ¨ÊÔ àµÍà 2 µÑÇ ¤×Í ÃÕ¨ÊÔ àµÍà àÅ×Í¡¢ ÍÁÙÅàÍÒµ ¾µØ ¢Í§Ê ǹàÍÒµ ¾Øµà»ÃÕºà·ÕºªØ´·Õè 1 (OC1M) â´Â¤ Ңͧ OC1M ¨Ðà» ¹µÑÇ¡íÒ˹´Ç Ò ¢ ÍÁÙŢͧ OC1D ºÔµã´·Õè ¨Ðä»»ÃÒ¡¯·Õ¢è Ò¾Íà µ PA3-PA7 àÁ×Íè ¤ ҢͧÃÕ¨ÊÔ àµÍà TCNT ෠ҡѺ TOC1 áÅÐÃÕ¨ÊÔ àµÍà ¢Í ÁÙŢͧ Ê Ç¹àÍÒµ ¾µØ à»ÃÕºà·ÕºªØ´·Õè 1 (OC1D) â´Â¤ Ңͧ OC1D ¨Ðä»»ÃÒ¡¯·Õ¢è Ò¾Íà µ PA3-PA7 µÒÁ·Õè ÁÕ¡ÒáíÒ˹´â´ÂÃÕ¨ÊÔ àµÍà OC1M àÁ×Íè ¤ ҢͧÃÕ¨ÊÔ àµÍà TCNT ෠ҡѺ TOC1 ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà»ÃÕºà·Õº¨Ðà¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà TOC1 Ê Ç¹¢ ÍÁÙÅàÍÒµ ¾µØ ·Õµè Í §¡ÒÃáÊ´§ ¼Åà¡çºäÇ ·ÕèÃÕ¨ÔÊàµÍà OC1D Ê Ç¹¢Ò¾Íà µã´·Õèµ Í§¡ÒÃãË Ê §¤ ÒàÍÒµ ¾Øµ¨Ð¶Ù¡¡íÒ˹´´ Ǥ Ңͧ ¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà OC1M àÁ×Íè ÃÕ¨ÊÔ àµÍà TCNT ÁÕ¤Ò à· Ò¡Ñº TOC1 ¢Ò¾Íà µ PA3-PA7 ¨ÐáÊ´§¤ Ò ¢Í§ÃÕ¨ÊÔ àµÍà OC1D áµ Í ҧäáçµÒÁÍÒ¨áÊ´§äÁ ¤Ãº ·Ñ§é ¹Õ¢é ¹Öé ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´ã¹ÃÕ¨ÊÔ àµÍà OC1M


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

159

¢Ò¾Íà µàÍÒµ ¾Øµ PA7/OC1

à¢Õ¹¤ Ò´ ÇÂÇÔ¸Õ¡Òà ·Ò§«Í¿µ áÇÃ

ÃÕ¨ÊÔ àµÍà OC1D

TOC1

ÃÕ¨ÊÔ àµÍà TOC1

ÃÕ¨ÊÔ àµÍà OC1M

PA6/OC1 PA5/OC1 PA4/OC1 PA3/OC1

A

TCNT=TOC1

B

ÊÑ­­Ò³¹ÒÌÔ¡Ò E

Ê Ç¹à»ÃÕºà·Õº¢ ÍÁÙÅ TCNT

ÃÕ¨ÔÊàµÍà µÑǹѺ 8 ºÔµ PACNT

ÃÙ»·Õè 5-18 ä´ÍÐá¡ÃÁ¢Í§¡ÒÃÊ §¤ ÒÍÍ¡¢Ò¾Íà µ¢Í§Ê ǹàÍÒµ ¾µØ à»ÃÕºà·Õºª ͧ·Õè 1 (OC1)

5.8.2 ¾Íà µ B : ¾Íà µàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à» ¹¾Íà µ´Ô¨ÔµÍÅ¢¹Ò´ 8 ºÔµ·ÕèÊÒÁÒöàÅ×Í¡âËÁ´·íÒ§Ò¹ä´ 2 Ẻ¤×Í à» ¹¾Íà µàÍÒµ ¾Ø µ´Ô¨µÔ ÍÅàÁ×Íè ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻáÅкٵáʵÃç» ¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊ §ÍÍ¡ÁÒ·Õ¾è Íà µ¹Õé µ ͧà¢Õ¹ ࢠÒä»à¡çºäÇ ·ÕèÃÕ¨ÔÊàµÍà PORTB áÅШÐÊ §ÍÍ¡ä»¡çµ ÍàÁ×èÍÁÕÊÑ­­Ò³ STRB à¡Ô´¢Öé¹ ¹Ñ蹤×Í㹡ÒÃ Ê §¢ ÍÁÙžÍà µ B ¨ÐÁÕ¡ÒõÃǨÊͺ¤ÇÒÁ¾Ã ÍÁ㹡ÒÃÊ §¢ ÍÁÙÅä»ÂѧÍØ»¡Ã³ ·Õèµ Í¡Ñº¾Íà µ B ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ B Ẻ·ÕÊè ͧ¤×Í ·íÒ˹ Ò·Õàè » ¹ºÑÊáÍ´à´ÃÊ亵 ʧ٠µÑ§é áµ A8-A15 à¾×Íè µÔ´µ ͡Ѻ˹ ǤÇÒÁ¨íÒÀÒ¹͡ àÁ×èÍ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒÂËÃ×ÍâËÁ´·´Êͺ¾ÔàÈÉ ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧÁÕ 2 µÑǤ×Í 1. PORTB (Port B data rregister) à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1004 㪠à¡çº ¢ ÍÁÙÅ·Õµè Í §¡ÒÃÊÒ§ÍÍ¡ä»Âѧ¾Íà µ B àÁ×Íè 68HC11 ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻËÃ×ͺٵáʵÃç» 2. PIOC (Parallel I/O control register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅẺ ¢¹Ò¹ ÁÕ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ ·Õè 0x1002 â´Â 7 ºÔµáá¤×Í ºÔµ 0-6 ÊÒÁÒÃ¶Í Ò¹áÅÐà¢ÕÂ¹ä´ áµ ã¹ºÔµ 7 ¨ÐÊÒÁÒÃ¶Í Ò¹ä´ à¾Õ§Í ҧà´ÕÂÇ ÃÕ¨ÊÔ àµÍà ¹¨Õé ж١㪠§Ò¹àÁ×Íè 68HC11 ·íÒ§Ò¹ã¹âËÁ´ «Ô§à¡ÔŪԻ෠ҹÑé¹ ¨Ö§äÁ ¢Í¡Å ÒǶ֧à¹×èͧ¨Ò¡ MC68HC11E1 äÁ ÃͧÃѺ¡Ò÷íÒ§Ò¹ã¹âËÁ´¹Õé Í ҧ äáçµÒÁ ËÒ¡µ ͧ¡Òâ ÍÁÙÅà¾ÔÁè àµÔÁ ÊÒÁÒÃ¶Í Ò¹ä´ ¨Ò¡´Òµ ÒªÕµÍ Ò§ÍÔ§¢Í§ 68HC11 ´Òǹ âËÅ´ä´ ·Õè www.motorola.com


160

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.8.3 ¾Íà µ C : ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à» ¹¾Íà µ´Ô¨µÔ ÍÅ 2 ·ÔÈ·Ò§¢¹Ò´ 8 ºÔµ¨Ö§ÊÒÁÒöàÅ×Í¡ãË ·Òí §Ò¹à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ä´ â´ÂàÁ×èÍ 68HC11 ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻáÅкٵáʵÃç» ¾Íà µ C ¨Ðà» ¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾Ø µÊÒÁÒÃ¶Ê §¼ Ò¹¢ ÍÁÙÅä´ 2 ·ÔÈ·Ò§ â´Âáµ ÅТҢͧ¾Íà µ (ËÃ×ͨÐàÃÕÂ¡Ç Òáµ ÅкԵ¡çä´ ) ¨Ðà» ¹ ÍÔÊÃе ͡ѹ㹴 Ò¹¡ÒáíÒ˹´·ÔÈ·Ò§ áµ ¶ Ò 68HC11 ·íÒ§Ò¹ã¹âËÁ´ÁÑŵÔà¾Åç¡« ¢ÂÒÂËÃ×ÍâËÁ´ ·´Êͺ¾ÔàÈÉ ¾Íà µ C ¨Ð¶Ù¡»ÃѺãË ·íÒ˹ Ò·Õèà» ¹¢ÒÊÑ­­Ò³áÍ´à´ÃÊ亵 µèíÒ A0-A7 áÅТҺÑÊ ¢ ÍÁÙÅ (D0-D7) â´Â¨Ðá¡ÊÑ­­Ò³·Ñ§é Êͧ¹Õäé ´ ´Ç ¡ÒÃÁÑŵÔà¾Åç¡« áÅÐ㪠¢ÒÊÑ­­Ò³ AS ª Ç ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧÁÕ 4 µÑǤ×Í 1. PORTC (Port C data register) ÁÕ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1003 㪠à¡çº¢ ÍÁÙÅ·Õµè Í § ¡ÒÃÊ §ÍÍ¡ä»Âѧ¾Íà µ C àÁ×Íè ¡íÒ˹´ãË à» ¹¾Íà µàÍÒµ ¾µØ ËÃ×Í㪠à¡çº¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ¨Ò¡¾Íà µ C àÁ×Íè ¡íÒ˹´ãË à» ¹¾Íà µÍÔ¹¾Øµ 㹡óշÕè 68HC11 ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻËÃ×ͺٵáʵÃç» 2. DDRC (Data direction for port C) ÃÕ¨ÊÔ àµÍà ¡Òí ˹´·ÔÈ·Ò§¢Í§¢Ò¾Íà µ C à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ ·Õè 0x1007 㪠¤Çº¤ØÁ·ÔÈ·Ò§¢ ÍÁÙŢͧ¾Íà µ C â´Â¶ Òà¢Õ¹¢ ÍÁÙÅ 0 ÁÒÂѧºÔµã´æ ¨Ðà» ¹¡ÒáíÒ˹´ãË ¢Ò¾Íà µ C ºÔµ¹Ñé¹à» ¹ÍÔ¹¾Øµ áµ ¶ Òà¢Õ¹¢ ÍÁÙÅ 1 ¨Ðà» ¹¡Òà ¡íÒ˹´ãË à» ¹àÍÒµ ¾Øµ ¨Ð㪠§Ò¹ÃÕ¨ÔÊàµÍà ¹Õé¡çµ ÍàÁ×èÍ 68HC11 ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ෠ҹÑé¹ 3. PORTCL (Port C latch register) ÃÕ¨ÊÔ àµÍà ¾¡Ñ ËÃ×Íáŵª ¢Í ÁÙÅ·Õ¢è Ò¾Íà µ C à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1005 㪠㹡ÒÃáŵª ¢Í ÁÙÅ·Õµè Í §¡ÒÃÊ §ÍÍ¡ËÃ×ÍÃѺࢠÒÁҢͧ¾Íà µ C ¨Ð·íÒ §Ò¹Ã ÇÁ¡ÑºÊÑ­­Ò³ÊâµÃºà¾×è͵ÃÇǨÊͺ¡ÒÃÃÑºÊ §¢ ÍÁÙÅ 4. PIOC (Parallel I/O control register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ Ẻ¢¹Ò¹ 㪠§Ò¹àÁ×èÍ 68HC11 ·íÒ§Ò¹ã¹âËÁ´«Ô§à¡ÔŪԻ ¨Ö§äÁ ¢Í¡Å ÒǶ֧à¹×èͧ¨Ò¡ MC68HC11E1 äÁ ÃͧÃѺ

5.8.4 ¾Íà µ D : ¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅáÅоÍà µÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ

ÁÕ¢Òµ Í㪠§Ò¹à¾Õ§ 6 ¢Ò áÅÐã¹áµ ÅТÒÁÕ˹ Ò·Õ¡è Ò÷íÒ§Ò¹¾ÔàÈÉÃÇÁÍÂÙ´ Ç Â ¹Ñ¹è ¤×Í PD0/RxD 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ ËÃ×Í¢ÒÃѺ¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹÊ×èÍÊÒà ¢ ÍÁÙÅ͹ءÃÁ (SCI) PD1/TxD 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ ËÃ×Í¢ÒÊ §¢ ÍÁÙÅ͹ءÃÁ¢Í§Ê ǹÊ×èÍÊÒà ¢ ÍÁÙÅ͹ءÃÁ (SCI) PD2/MISO 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅËÃ×Í¢ÒÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁã¹Ãкºàª×èÍÁ µ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) â´ÂàÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ¢Ò¹Õ¨é Ðà» ¹ÍÔ¹¾Øµ áµ ¶Ò à» ¹ÊàÅ¿¨Ð ¡ÅÒÂà» ¹àÍÒµ ¾Øµ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

161

PD3/MOSI 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅËÃ×Í¢ÒÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁã¹Ãкºàª×èÍÁ µ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) ¢Ò¹Õé¨Ð¶Ù¡¡íÒ˹´à» ¹àÍÒµ ¾ØµàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà áÅÐà» ¹ ÍÔ¹¾ØµàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ PD4/ SCK 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅËÃ×Í¢ÒÊÑ­­Ò³¹ÒÌ ¡ÒÊíÒËÃѺ¤Çº¤ØÁ ¨Ñ§ËÇСÒ÷íÒ§Ò¹¢Í§Ê ǹàª×èÍÁµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) PD5/SS 㪠໠¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅËÃ×Íà» ¹¢ÒÍÔ¹¾ØµàÅ×Í¡ÍØ»¡Ã³ Êàſ㹡óշÕè ÁÕ¡ÒÃàª×Íè Áµ ÍÍØ»¡Ã³ ã¹Ãкº SPI ËÅÒµÑÇ

5.8.4.1 ¡Ò÷íÒ§Ò¹ã¹ÅѡɳоÍà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍŢͧ¾Íà µ D àÁ×è;Íà µ D ä´ ÃѺ¡ÒáíÒ˹´ãË ·íҧҹ໠¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ ÁÕ¢Òµ Í㪠§Ò¹ 6 ¢Ò¤×Í PD0-PD5 â´ÂÊÒÁÒö¡íÒ˹´ãË à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ä´ ·§Ñé ËÁ´ ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ㹡Ò÷íÒ§Ò¹ÁÕ 2 µÑǤ×Í 1. PORTD (Port D data register) à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ᵠ㪠§Ò¹ä´ 6 ºÔµ â´Â 2 ºÔµº¹¤×Í PD6 áÅÐ PD7 µ ͧ¡íÒ˹´à» ¹ 0 ÁÕáÍ´à´ÃÊÍÂÙ ·Õè 0x1008 㪠à¡çº¢ ÍÁÙÅ·Õèµ Í§¡ÒÃÊ §ÍÍ¡ä»Âѧ ¾Íà µ D àÁ×Íè ·íҧҹ໠¹¾Íà µàÍÒµ ¾µØ ËÃ×Íà¡çº¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ¨Ò¡¾Íà µ D àÁ×Íè à» ¹¾Íà µÍÔ¹¾Øµ 2. . DDRD (Data direction for port D) ÃÕ¨ÊÔ àµÍà ¡Òí ˹´·ÔÈ·Ò§¢Í§¢Ò¾Íà µ D à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1009 㪠¤Çº¤ØÁ·ÔÈ·Ò§¢ ÍÁÙŢͧ¾Íà µ D â´Â¶ Òà¢Õ¹¢ ÍÁÙÅ 0 ÁÒÂѧºÔµã´æ ¨Ðà» ¹¡ÒáíÒ˹´ãË ¢Ò¾Íà µ D ºÔµ¹Ñé¹à» ¹ÍÔ¹¾Øµ áµ ¶ Òà¢Õ¹¢ ÍÁÙÅ 1 ¨Ðà» ¹¡Òà ¡íÒ˹´ãË à» ¹àÍÒµ ¾µØ 㪠§Ò¹ä´ 6 ºÔµ ÍÕ¡ 2 ºÔµ ¤×Í ºÔµ PD6 áÅÐ PD7 µ ͧ¡íÒ˹´ãË à» ¹ 0 ·Ñ§é ¤Ù ´Ñ§¹Ñ¹é 㹡ÒÃ㪠§Ò¹¾Íà µ D à» ¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍŨÐàÃÔÁè ´ Ç¡ÒáíÒ˹´·ÔÈ·Ò§ ¢Í§¢Ò¾Íà µ¡ Í¹Ç Ò ¨ÐãË à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ·ÕÃè ¨Õ ÊÔ àµÍà DDRD ¨Ò¡¹Ñ¹é ¨Ö§à¢Õ¹¢ ÍÁÙÅ·Õµè Í §¡ÒÃ Ê §ÍÍ¡¾Íà µ D ä»ÂѧÃÕ¨ÊÔ àµÍà PORTD ËÃ×ÍÍ Ò¹¢ ÍÁÙÅ·Õàè ¢ ÒÁÒÂѧ¾Íà µ D ¨Ò¡ÃÕ¨ÊÔ àµÍà PORTD

5.8.4.2 ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D ã¹âËÁ´Ê×èÍÊÒâ ÍÁÙÅ͹ءÃÁ (SCI) ã¹ 68HC11 ¨Ñ´ÃٻẺ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅ¢Í§Ê Ç¹ SCI (Serial Communication Interface) ã¹ÅѡɳпÙÅ´Ùà¾Åç¡« ẺÍЫԧâ¤Ã¹ÑʵÒÁÁҵðҹ NRZ ¤×Í ÁÕºµÔ àÃÔÁè µ ¹ 1 ºÔµ ºÔµ¢ ÍÁÙÅ 8 ËÃ×Í 9 ºÔµ áÅкԵËÂØ´ 1 ºÔµ ¤Ø³ÊÁºÑµâÔ ´ÂÃÇÁ¢Í§Ê ǹ SCI ã¹ 68HC11 ÁÕ´§Ñ ¹Õé l ¡íÒ˹´ÃٻẺµÒÁÁҵðҹ NRZ l ·íҧҹẺ¿ÙÅ´Ùà¾Åç¡« ¤×Í ÊÒÁÒöÃѺáÅÐÊ §¢ ÍÁÙÅä´ ¾Ã ÍÁ¡Ñ¹ l â»Ãá¡ÃÁÍѵÃÒ¶ Ò·ʹ¢ ÍÁÙÅËÃ×ÍÍѵÃÒºÍ´ä´ 32 ÃдѺ â´Â㪠«Í¿µ áÇÃ


162

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

Ãкº¨Ñ´¡ÒáÒÃÊ×èÍÊÒâ ÍÁÙÅ·Ò§¾Íà µÍ¹Ø¡ÃÁ ÃٻẺ¡ÒÃÊ §¢ ÍÁÙÅ͹ءÃÁ·ÑÇè æ ä»áº §ÍÍ¡ä´ 2 Ẻ¤×Í «Ô§â¤Ã¹ÑÊáÅÐÍЫԧâ¤Ã¹ÑÊ

¡ÒÃÃÑºÊ §¢ÍÁÙÅ͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ ã¹ÃÙ» D à» ¹ÅѡɳСÒ÷íÒ§Ò¹àº×Íé §µ ¹¢Í§¡ÒÃÊ §¼ Ò¹¢ ÍÁÙÅ͹ءÃÁẺ«Ô§â¤Ã¹ÑʹÕé ÍØ»¡Ã³ ··Õè Òí ˹ Ò·Õ¤è Ǻ¤ØÁ¡ÒÃÊ §¼ Ò¹¢ ÍÁÙŨÐàÃÕÂ¡Ç Ò ÁÒÊàµÍà (master) áÅÐÊ Ç¹·Õµè ´Ô µ Í´ ÇÂàÃÕÂ¡Ç Ò ÊàÅ¿ (slave) ÅѡɳСÒÃÊ §à» ¹áºº¿ÙÅ´Ùà¾Åç¡« (full-duplex) ËÁÒ¤ÇÒÁÇ ÒÍØ»¡Ã³ ·§Ñé µ ¹·Ò§áÅлÅÒ·ҧÊÒÁÒÃ¶Ê § áÅÐÃѺ¢ ÍÁÙÅä´ ·¹Ñ ·Õ â´ÂäÁ µÍ §ÃÍãË Í¡Õ ½ ÒÂËÂØ´·íÒ§Ò¹ MOSI

ªÔ¿µ Ã¨Õ ÊÔ àµÍÃ

ªÔ¿µ Ã¨Õ ÊÔ àµÍÃ

MISO

CLOCK

ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅ

ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅ

ÃÙ» D ¡Ò÷íÒ§Ò¹àº×Íé §µ ¹¢Í§¡ÒÃÃÑºÊ § ¢ ÍÁÙÅ͹ءÃÁẺ«Ô§â¤Ã¹ÑÊ

·ÕèÍØ»¡Ã³ ÁÒÊàµÍà áÅÐÊàÅ¿ÁÕÃÕ¨ÔÊàµÍà à¡çº¢ ÍÁÙÅâ´ÂÃÑºÊ §¢ ÍÁÙÅ·ÕÅкԵ ÍØ»¡Ã³ ÁÒÊàµÍà ¨ÐÊ § ÊÑ­­Ò³¹ÒÌ ¡ÒÍÍ¡ÁÒ 8 ¾ÑÅÊ áµ ÅоÑÅÊ ¡¨ç ÐÁÕ¢Í ÁÙÅÊ §ÍÍ¡ÁÒ 1 ºÔµ ¼ Ò¹·Ò§ÊÒ MOSI áÅÐ MISO áÅÐà¡Ô´¡ÒÃàÅ×Íè ¹¢ ÍÁÙÅä» 1 ºÔµ´ Ç ËÅѧ¨Ò¡·íÒ§Ò¹¤Ãº 8 ¾ÑÅÊ ¢Í§ÊÑ­­Ò³¹ÒÌ ¡ÒáÅ Ç ¢ ÍÁÙŨҡªÔ¿µ ÃÕ¨ÊÔ àµÍà ·§Ñé ËÁ´¨Ð¶Ù¡àÅ×Íè ¹à¢ Òä»à¡çºÃÕ¨ÊÔ àµÍÃ ÃºÑ ¢ ÍÁÙÅ ¡ÒÃÃÑºÊ §¢ ÍÁÙÅẺ«Ô§â¤Ã¹ÑʹÕé ·Ñ§é ÍØ»¡Ã³ ÁÒÊàµÍà áÅÐÊàÅ¿¨Ð·íÒ§Ò¹ÊÍ´¤Å ͧ¡Ñ¹µÒÁ¨Ñ§ËÇТͧÊÑ­­Ò³¹ÒÌ ¡Ò

¡ÒÃÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ ¡ÒÃÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁẺÍЫÔâ¤Ã¹ÑʹÕé ¹ÔÂÁ㪠Áҡ㹡ÒÃÊ×èÍÊÒâ ÍÁÙÅÃÐËÇ Ò§¤ÍÁ¾ÔÇàµÍà ¡Ñº ¤ÍÁ¾ÔÇàµÍà ÃٻẺ¡ÒÃÃÑºÊ §¢ ÍÁÙÅáÊ´§´Ñ§ã¹ÃÙ» E à¿ÃÁ¢ ÍÁÙÅ ºÔµËÂØ´

ºÔµàÃÔÁè µ ¹

ºÑÊÇ Ò§

ºÑÊÇ Ò§ ºÔµ¢ ÍÁÙÅ ªÔ¿µ Ã¨Õ ÊÔ àµÍÃ

ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅÊ §

ªÔ¿µ Ã¨Õ ÊÔ àµÍÃ

ÊÑ­­Ò³¹ÒÌÔ¡Ò ¢Í§µÑÇÊ §

ÊÑ­­Ò³¹ÒÌÔ¡Ò ¢Í§µÑÇÃѺ

ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅÃѺ

ÃÙ» E ¡Ò÷íÒ§Ò¹ àº×Íé §µ ¹¢Í§¡Òà ÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ ẺÍЫԧâ¤Ã¹ÑÊ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

163

Ạ§¡ÒõԴµ ÍÍÍ¡à» ¹ 2 Ê Ç¹¤×Í µÑÇÊ §áÅеÑÇÃѺ µ Ò§¡ç¨ÐÁÕÊ­ Ñ ­Ò³¹ÒÌ ¡Ò¤Çº¤ØÁ¡Ò÷íҧҹ㹠µÑÇàͧ ·íÒãË ¡Ò÷íÒ§Ò¹äÁ ÊÍ´¤Å ͧµÒÁ¨Ñ§ËÇÐÊÑ­­Ò³¹ÒÌ ¡Ò áµ ÍµÑ ÃÒàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙŵ ͧ෠ҡѹ àÁ×Íè µÑÇÊ §¨ÐÊ §¢ ÍÁÙÅ µ ͧµÃǨÊͺ´ ÇÂÇ Ò µÑÇÃѺ¾Ã ÍÁÃѺ¢ ÍÁÙÅËÃ×ÍäÁ ´Ñ§¹Ñ¹é ¨Ö§ÁÕ¡ÒáíÒ˹´ÊÀÒÇÐ à¾×Íè ºÍ¡ãË µÇÑ ÃѺ·ÃÒºÇ Ò àÃÔÁè Ê §¢ ÍÁÙÅáÅ Ç â´Â»¡µÔÃдѺÅͨԡº¹ÊÒÂÊÑ­­Ò³¨Ðà» ¹ 1 àÁ×Íè ÁÕ¡ÒÃÊ §¢ ÍÁÙÅ ÃдѺÅͨԡ¨Ðà» ¹ 0 ÍÂÙª Ç §Ë¹Ö§è àÃÕÂ¡Ç Ò ºÔµàÃÔÁè µ ¹ (start bit) à¾×Íè ºÍ¡ãË µÇÑ ÃѺ·ÃÒºÇ Ò ËÅѧ¨Ò¡¹Õ¨é ÐÁÕ ¢ ÍÁÙÅÊ §µÒÁÁÒ àÁ×Íè µÑÇÃѺµÃǨ¨ÑººÔµàÃÔÁè µ ¹ä´ ¡¨ç ÐÃѺ¤ Ò¨¹¤Ãº àÁ×Íè Ê §¢ ÍÁÙŤú 8 ºÔµáÅ Ç µÑÇÊ §¨ÐÊ §¢ ÍÁÙÅÍÕ¡ 1 ºÔµ à¾×Íè ºÍ¡ãË µÇÑ ÃѺ·ÃÒºÇ Ò ÊÔ¹é ÊØ´¡ÒÃÊ § àÃÕ¡ºÔµ¹Ñ¹é Ç Ò ºÔµËÂØ´ (stop bit) ÁÕÃдѺÅͨԡ໠¹ 1 ÍѵÃÒ¡ÒÃÊ §¢ ÍÁÙÅà·Õº¡Ñºª ǧàÇÅÒ˹֧è æ àÃÕÂ¡Ç Ò ÍѵÃҺʹ (baud rate) ÍѵÃÒ¹Õ¨é Ðà» ¹µÑǺ §ºÍ¡ ¤ÇÒÁàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙŢͧÍØ»¡Ã³ Ê Ç¹¨íҹǹ¢ ÍÁÙÅ㹡ÒÃÊ § 1 ¤Ãѧé àÃÕÂ¡Ç Ò à¿ÃÁ (frame) â´ÂÁÕ ¢Íºà¢µàÃÔÁè µ ¹µÑ§é áµ ºµÔ àÃÔÁè µ ¹¨¹¶Ö§ºÔµËÂØ´ ¨íҹǹ¢ ÍÁÙÅ·ÕÍè ÂÙã ¹ÃÐËÇ Ò§ºÔµ´Ñ§¡Å ÒǷѧé Êͧ ¤×Í ¨íҹǹ ºÔµã¹ 1 à¿ÃÁ ¡ÒÃÃÑºÊ §¢ ÍÁÙÅẺ¹ÕÁé ¢Õ Í àÊÕ¤×Í ËÒ¡ÍѵÃҺʹäÁ ෠ҡѹÃÐË Ò§µÑÇÃѺáÅеÑÇÊ § ¨Ð·íÒãË ¡Òà µÃǨ¨ÑººÔµàÃÔÁè µ ¹áÅÐÊÔ¹é ÊØ´ µÅÍ´¨¹Ê¶Ò¹Ð¢Í§¢ ÍÁÙÅäÁ á¹ ¹Í¹ Ê §¼ÅãË à¡Ô´¡ÒÃÃÑºÊ §¢ ÍÁÙżԴ¾ÅÒ´¢Ö¹é ä´

ÃٻẺ¢Í§¢ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ

ã¹ÃÙ» F à» ¹ÃٻẺ¢Í§¢ ÍÁÙÅ͹ءÃÁã¹Åѡɳе Ò§æ ¨ÐàËç¹Ç ÒÁÕºµÔ à¾ÔÁè àµÔÁ¢Ö¹é ÁÒÍÕ¡ 1 ºÔµ àÃÕ¡ Ç Ò ºÔµ¾ÒÃÔµÕé (parity bit) ºÔµ¹Õãé ª µÃǨÊÍºÇ Ò¢ ÍÁÙÅ·ÕÊè § ÁÒÁÕ¤ÇÒÁ¼Ô´¾ÅÒ´à¡Ô´¢Ö¹é ËÃ×ÍäÁ Áѹ¨ÐáÊ´§¨íҹǹ ¢Í§¢ ÍÁÙÅ 1 ã¹ 1 à¿ÃÁ ¶ ÒËÒ¡ÁÕà» ¹¨íҹǹ¤Ù (¤×Í 2,4,6,..) àÃÕÂ¡Ç Òà» ¹ ¾ÒÃÔµ¤Õé Ù (even parity) áµ ¶Ò à» ¹¨íҹǹ¤Õè (1,3,5,...) àÃÕÂ¡Ç Ò à» ¹¾ÒÃÔµ¤Õé Õè (odd parity) ºÔµ¾ÒÃÔµ¹Õé ÊÕé ÒÁÒöÃÇÁÍÂÙã ¹¢ ÍÁÙÅ·ÕÁè ¢Õ ¹Ò´ 8 ºÔµä´ ઠ¹ ÃËÑÊ ASCII ¨ÐÁÕºµÔ ¢ ÍÁÙÅ 7 ºÔµ ÍÕ¡ 1 ºÔµ·Õàè ËÅ×ÍÊÒÁÒö¡íÒ˹´à» ¹ºÔµ¾ÒÃÔµËÕé Ã×ͨÐá¡¡çä´ ºÔµ¢ ÍÁÙÅ

ºÔµ¢ ÍÁÙÅ

! " # $ %

ºÑÊÇ Ò§

! " # $

¾ÒÃÔµéÕ

ºÑÊÇ Ò§ ºÔµËÂØ´

ºÔµàÃÔÁè µ ¹

ºÔµàÃÔÁè µ ¹

(¡) Ẻ 8 ºÔµ¢ ÍÁÙÅ 1 ºÔµËÂØ´ ºÔµ¢ ÍÁÙÅ

! " # $

ºÔµàÃÔÁè µ ¹

ºÔµàÃÔÁè µ ¹

(¢) Ẻ 7 ºÔµ¢ ÍÁÙÅ 1 ºÔµ¾ÒÃÔµÕé 1 ºÔµËÂØ´ ºÔµ¢ ÍÁÙÅ

¾ÒÃÔµéÕ

ºÑÊÇ Ò§

ºÔµËÂØ´

ºÔµàÃÔÁè µ ¹

! " # $ %

¾ÒÃÔµéÕ

ºÑÊÇ Ò§ ºÔµËÂØ´ ºÔµàÃÔÁè µ ¹

(¤) Ẻ 7 ºÔµ¢ ÍÁÙÅ 1 ºÔµ¾ÒÃÔµÕé 2 ºÔµËÂØ´

ºÔµàÃÔÁè µ ¹

ºÔµËÂØ´ ºÔµàÃÔÁè µ ¹

(§) Ẻ 8 ºÔµ¢ ÍÁÙÅ 1 ºÔµ¾ÒÃÔµÕé 2 ºÔµËÂØ´

ÃÙ» F µÑÇÍ ҧÃٻẺ¢Í§¢ ÍÁÙÅ㹡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ

¤ÇÒÁàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅ

¶Ù¡ÃÐºØ´Ç Â¨íҹǹºÔµ·ÕÊè § ä´ ÀÒÂã¹ 1 ÇÔ¹Ò·Õ (bit per scond : BPS) àÃÕÂ¡Ç Ò ÍѵÃҺʹ (baud rate) ¶ Òµ ͧ¡Ò÷ÃÒº¤ÇÒÁàÃçÇ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅÍÑ¡¢ÃÐÀÒÂã¹ 1 ÇԹҷըФíÒ¹Ç³ä´ ¨Ò¡ ÍѵÃҺʹ/ ¨íҹǹ ºÔµã¹ 1 à¿ÃÁ ¢ ÍÁÙÅ 1 à¿ÃÒ»ÃСͺ´ Ç ºÔµàÃÔÁè µ ¹, ºÔµ¢ ÍÁÙÅ, ºÔµËÂØ´ áÅкԵ¾ÒÃÔµÕé


164

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ä´ 8 ËÃ×Í 9 ºÔµµ ÍàÇÔô â´Â㪠«Í¿µ áÇà l àÅ×Í¡¤ÇÒÁÂÒǢͧ¢ ÍÁÙÅã¹ 1 àÇÔô ᡺ԵàÍç¹àÍàºÔÅÃÐËÇ Ò§µÑÇÊ §áÅеÑÇÃѺ l µÍºÊ¹Í§¡ÒÃÍÔ¹àµÍà û Ñ µ áÅÐÁÕºµÔ ¤Çº¤ØÁ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ á¡໠¹ÍÔÊÃÐ 4 ºÔµ l ÊÒÁÒöµÃǨ¨Ñº¤ÇÒÁ¼Ô´¾ÅÒ´ã¹à¿ÃÁ¢ ÍÁÙÅä´ l ÊÒÁÒöµÃǨ¨ÑºÊÑ­­Ò³Ãº¡Ç¹ä´ l ÊÒÁÒö¤Çº¤ØÁ¡ÒÃËÂØ´Ê §¢ ÍÁÙÅä´ l

¡Ò÷íÒ§Ò¹¢Í§Ê ǹ SCI ÁÕä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ÀÒÂã¹áÊ´§´Ñ§ÃÙ»·Õè 5-19 ¢Ò¾Íà µ·Õ¶è ¡Ù 㪠§Ò¹ã¹Ê ǹ SCI ¤×Í PD0 áÅÐ PD1 â´Â PD0 à» ¹¢Ò RxD áÅÐ PD1 à» ¹ ¢Ò TxD ¼Ùã ª §Ò¹ÊÒÁÒöàÅ×Í¡ÅѡɳСÒ÷íÒ§Ò¹ áÅФÇÒÁÂÒǢͧ¢ ÍÁÙÅ·Õèµ Í§¡ÒÃÊ §ä´ â´Â¡íÒ˹´ã¹ÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ 1 (Serial Communication Control Register1: SCCR1) ã¹¢³Ð·ÕèÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ¡ÒÃÊ×èÍÊÒâ ÍÁÙŠ͹ءÃÁ 2 (SCCR2) 㪠¤Çº¤ØÁ¡ÒÃàÍç¹àÍàºÔÅáÅдÔÊàÍàºÔŵÑÇÊ §áÅеÑÇÃѺ, àÍç¹àÍàºÔÅÃкºÍÔ¹àµÍà ÃÑ»µ , ¿ §¡ ª¹Ñ ¡Ò÷íҧҹẺàÇ¡ÍÑ» áÅÐºÔµÊ §ÃËÑÊËÂØ´¡ÒÃÊ § (Send Break Code Bit : SBK) Ê Ç¹ ÃÕ¨ÊÔ àµÍà ¡Òí ˹´ÍѵÃÒ¶ Ò·ʹ¢ ÍÁÙÅ (Baud Rate Register : BAUD) 㪠¡Òí ˹´ÍѵÃÒ¶ Ò·ʹ¢ ÍÁÙÅ ËÃ×ÍÍѵÃҺʹ·Õè㪠㹡ÒÃÃÑºÊ §¢ ÍÁÙÅ ¢ ÍÁÙŢͧ¡ÒÃÃÑºÊ §à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ¢Í ÁÙÅ͹ءÃÁ (Serial Communication Data Register : SCDR) ¶ ÒµÑÇÊ §·íÒ§Ò¹ ¢ ÍÁÙÅã¹ÃÕ¨ÊÔ àµÍà SCDR ¨Ð¶Ù¡Ê §µ Íä»ÂѧªÔ¿µ Ã¨Õ ÊÔ àµÍà µÇÑ Ê § ºÔµ TDRE ¢Í§ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ð SCI (SCI Statrs Register : SCSR) ૵áÅШÐà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¶ ÒËÒ¡ Ê Ç¹ÍÔ¹àµÍà ÃÑ»µ ¢Í§¡ÒÃÊ §ä´ ÃѺ¡ÒÃàÍç¹àÍàºÔÅ ¡ÒÃÊ §¢ ÍÁÙÅÍÍ¡¨Ðµ ͧÊÑÁ¾Ñ¹¸ ¡ÑºÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§¡ÒÃÊ §´ Ç ¡ÒÃÊ §¢ ÍÁÙÅàÃÔèÁ¨Ò¡ºÔµ ¹ÑÂÊíҤѭµèÒí ÊØ´ËÃ×Í LSB ¡ ͹ àÁ×Íè Ê §¢ ÍÁÙŤúáÅ Ç ºÔµ TC ã¹ÃÕ¨ÊÔ àµÍà SCSR ¨Ð૵à¾×Íè ᨠ§Ç Ò äÁ ÁÕ¡ÒÃÊ §¢ ÍÁÙÅáÅ ÇáÅШÐà¡Ô´¡ÒÃÍÔ¹àµÍà ÃÑ»µ ¢Öé¹ÍÕ¡¤ÃÑ駶 Òä´ ÃѺ¡ÒÃàÍç¹àÍàºÔŠ㹡ÒÃÃѺ¢ ÍÁÙÅàÁ×Íè ÃÕ¨ÊÔ àµÍà SCDR ¶Ù¡Í Ò¹ ÀÒÂã¹ÃÕ¨ÊÔ àµÍÃ Â§Ñ ¤§ºÃÃ¨Ø¢Í ÁÙÅ亵 ÅÒ ÊØ´·Õè ÃÑºä´ àÁ×Íè µÑÇÃѺ¢ ÍÁÙÅ·íÒ§Ò¹ ºÔµ RDRF ã¹ÃÕ¨ÊÔ àµÍà SCSR ¨Ð૵à¾×Íè áÊ´§Ç Ò àÃÔÁè ÁÕ¡Òö Ò·ʹ ¢ ÍÁÙŨҡªÔ¿µ Ã¨Õ ÊÔ àµÍà ʧ ä»ÂѧÃÕ¨ÊÔ àµÍà SCDR ¨Ð·íÒãË à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¶ ÒËÒ¡Ê Ç¹ÍÔ¹àµÍà ÃÑ»µ ¢Í§¡ÒÃÃÑºä´ ÃѺ¡ÒÃàÍç¹àÍàºÔÅ ¨Ñ§ËÇТͧ¡Òö Ò·ʹ¢ ÍÁÙŨҡªÔ¿µ ÃÕ¨ÔÊàµÍà ÊÙ ÃÕ¨ÔÊàµÍà SCDR µ ͧÊÑÁ¾Ñ¹¸ ¡ºÑ ¨Ñ§ËÇТͧÊÑ­­Ò³¹ÒÌ ¡Ò ºÔµ OR, NF, ËÃ×Í FE ã¹ÃÕ¨ÊÔ àµÍà SCCR à» ¹ ºÔµáÊ´§¤ÇÒÁ¼Ô´¾ÅҴ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅ ¨Ð૵¶ ÒËÒ¡¡ÒÃÃѺ¢ ÍÁÙÅà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¢Öé¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

165

ºÑÊÀÒÂã¹ SCI ÍÔ¹àµÍà ÃÑ»µ

SCSR (0x102E) SCDR (0x102F)

ÃÕ¨ÔÊàµÍà à¡çº¢ ÍÁÙÅÊ §

TIE TCIE

SCDR ÃÕ¨ÔÊàµÍà à¡çº¢ ÍÁÙÅÃѺ (0x102F)

RIE PD1/TxD

ªÔ¿µ ÃÕ¨ÔÊàµÍà µÑÇÊ §

ILIE TE

ªÔ¿µ ÃÕ¨ÔÊàµÍà µÑÇÃѺ

PD0/RxD

RE SBK SCSR (0x102E) FE

RWU

NF

OR

IDLE

RDRF

TC

TDRE

Ê Ç¹àÇ¡ÍÑ» SBK

TE

¤Çº¤ØÁµÑÇÊ §

¤Çº¤ØÁ á¿Å¡

¤Çº¤ØÁµÑÇÃѺ

Ê Ç¹¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌԡҤǺ¤ØÁµÑÇÃѺáÅеÑÇÊ §

SCP1

R8

T8

SCP0

M

SCR2

WAKE

SCR1

SCR0

ÊÑ­­Ò³ ¹ÒÌÔ¡Ò E BAUD (0x102B)

SCCR1 (0x102C)

ÃÙ»·Õè 5-19 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁËÃ×Í SCI ÀÒÂã¹ 68HC11 ¡ÒÃàÅ×Í¡ÍѵÃҺʹËÃ×ÍÍѵÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅ·íÒä´ â´Â¡ÒáíÒ˹´¢ ÍÁÙÅ㹺Ե SCP0-1 áÅкԵ SCR0-2 ã¹ÃÕ¨ÊÔ àµÍà BAUD (´ÙÃÒÂÅÐàÍÕ´㹵ÒÃÒ§·Õè 5D 㹡ÃͺÃÕ¨ÊÔ àµÍà ¢Í§ SCI) ¡ÒÃàµÃÕÂÁ㪠§Ò¹Ê ǹ SCI ¨Ðµ ͧÁÕ¡ÒÃÍÔ¹àÔ ªÕÂÅ (initial) Ãкº¡ ͹ â´Â¡íÒ˹´ÊÀÒÇе Ò§æ ¢Í§áµ ÅкԵã¹ÃÕ¨ÊÔ àµÍà ᵠÅеÑÇ â´ÂẠ§à» ¹ 3 ¢Ñ¹é µÍ¹ËÅÑ¡¤×Í 1. ¡íÒ˹´ÀÒÇÐàÃÔèÁµ ¹ 1.1 àÅ×Í¡ÍѵÃҺʹ â´Âà¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÔÊàµÍà BAUD ·ÕèºÔµ SCP0-SCP1 áÅÐSCP0-SCP2


166

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÃÕ¨ÔÊàµÍà ¤Çº¤ØÁ¢Í§ SCI 1.SCDR (Serial Communication Data Register) ÃÕ¨ÊÔ àµÍà ¢Í ÁÙÅ͹ءÃÁ ¢¹Ò´ 8 ºÔµ áÍ´à´ÃÊÍÂÙ· Õè 0x102F 㪠à¡çº¢ ÍÁÙÅ·Õäè ´ ¨Ò¡¢Ò RxD áÅÐà¡çº¢ ÍÁÙÅ·ÕÊè §è ÍÍ¡·Ò§¢Ò TxD

2. SCCR1 (Serial Communication Control Register 1) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ 1 ÁÕ¢¹Ò´ 8 ºÔµ áÍ´à´ÃÊÍ ·Ù Õè 0x102C (ºÔµ·Õäè Á 㪠§Ò¹à» ¹ 0 ) R8 (Receive Data Bit 8 : ºÔµ 7) àµÃÕÂÁäÇ à¡çº¢ ÍÁÙźԵ·Õè 9 ¢Í§¢ ÍÁÙÅ·ÕÃè ºÑ ä´ ã¹¡Ã³Õ·ºÕè µÔ M ૵ T8 (Transmit Data Bit 8 : ºÔµ 6) 㪠à¡çº¢ ÍÁÙźԵ·Õè 9 ¢Í§¢ ÍÁÙÅ·ÕÊè § ÍÍ¡¢Ò TxD àÁ×Íè ºÔµ M ૵ M (SCI Character Length : ºÔµ 4) 㪠¡Òí ˹´¤ÇÒÁÂÒǢͧ¢ ÍÁÙÅ 0 - 1 ºÔµàÃÔÁè µ ¹ 8 ºÔµ¢ ÍÁÙÅ áÅÐ 1 ºÔµËÂØ´ 1 - 1 ºÔµàÃÔÁè µ ¹ 9 ºÔµ¢ ÍÁÙÅáÅÐ 1 ºÔµËÂØ´ WAKE (Wake up method select : ºÔµ 3) 㪠àÅ×Í¡¡ÒÃÍÍ¡¨Ò¡âËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹ 0 - äÍà´ÔÅàÇ¡ÍÑ» 1 - áÍ´à´ÃÊÁÒÊ ¡àÇ¡ÍÑ»

3. SCCR2 (Serial Communication Cotrol register 2) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ 2

ÁÕ¢¹Ò´ 8 ºÔµ áÍ´à´ÃÊÍÂÙ· Õè 0x102D 㪠àÅ×Í¡áËÅ §¡íÒà¹Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ â´Âà¢Õ¹¢ ÍÁÙÅ 1 TIE (Transmit interrupt Enable : ºÔµ 7) 㪠àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡ÒÃÊ §¢ ÍÁÙÅ TCIE (Transmit complete interrupt enable : ºÔµ 6) 㪠àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè Ê §¢ ÍÁÙÅÊÁºÙó RIE (Receive interrupt enable : ºÔµ 5) 㪠àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡ÒÃÃѺ¢ ÍÁÙÅ ILIE (Idle line interrupt enable : ºÔµ 4) 㪠àÍç¹àÍàºÔŢͧ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ẺäÍà´ÔÅäŹ TE (Transmit enable : ºÔµ 3) 㪠¤Çº¤ØÁãË ª¿Ô µ Ã¨Õ ÊÔ àµÍà µÇÑ Ê §·íÒ¡ÒÃÊ §¢ ÍÁÙÅÍÍ¡ä»·Õ¢è Ò P1/TxD RE (Receive enable : ºÔµ 2) 㪠¤Çº¤ØÁµÑÇÃѺ¢ ÍÁÙÅÊÒÁÒöÃѺ¢ ÍÁÙÅ·Õàè ¢ ÒÁÒ·Ò§¢Ò P0/RxD RWU (Receive wake up : ºÔµ 1) àÁ×Íè ºÔµ¹Õäé ´ ÃºÑ ¡ÒÃ૵â´Â㪠«Í¿µ áÇà ¨Ð·íÒãË µÇÑ ÃѺ·íҧҹ㹠âËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹áÅÐàÍç¹àÍàºÔÅ¿ §¡ ª¹Ñè àÇ¡ÍÑ»ä´ ¶ ÒºÔµ WAKE ã¹ÃÕ¨ÊÔ àµÍà SCCR1 à» ¹ 0 ºÔµ¹Õé ¨Ð¶Ù¡à¤ÅÕÂà ËÅѧ¨Ò¡·ÕèµÑÇÃÑºä´ ÃѺ¢ ÍÁÙÅ 1 µÔ´µ ͡ѹ 10 ËÃ×Í 11 ºÔµ (¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ M) áµ ¶Ò ºÔµ WAKE à» ¹ 1 ºÔµ¹Õ¨é Ðà¤ÅÕÂà àÁ×Íè ºÔµ MSB ã¹¢ ÍÁÙÅ·ÕÃè ºÑ ä´ ¶¡Ù ૵໠¹ 1 SBK (Send Break : ºÔµ 0) 㪠¤Çº¤ØÁ¡ÒÃÊ §ÃËÑÊËÂØ´ ¶ ÒºÔµ¹Õàé ¡Ô´ÊÀÒÇзçÍ¡à¡ÔŤ×Í à» ¹ 1 áÅÐ 0 µ Íà¹×Íè §¡Ñ¹ µÑÇÊ §¨ÐÊ §¢ ÍÁÙÅ 0 10-11 ºÔµ (¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´·Õºè µÔ M) áÅ Ç¡ÅѺä»ÊÙÊ ÀÒÇÐʧº áµ ¶Ò Ëҡ૵¤ Ò§ µÑÇÊ §¨ÐÂѧ¤§Ê §¢ ÍÁÙÅ 0 à» ¹ºÅçÍ¡ (10-11 ºÔµ) µ Íä» ¨¹¡Ç ÒºÔµ¹Õ¨é Ðà» ¹ 0 ¡ÒÃÊ § ÃËÑÊËÂØ´·ÕèÊÁºÙó µÑÇÊ §µ Í§Ê §¢ ÍÁÙÅ 1 Í ҧ¹ Í 1 ºÔµ ä»ÂѧµÑÇÃѺ à¾×èÍãË á¹ ã¨Ç Ò µÑÇÃѺ¨ÐÂѧ¤§ ÊÒÁÒöµÃǨ¨ÑººÔµàÃÔÁè µ ¹¢Í§¡ÒÃÊ §¢ ÍÁÙÅä´ ¶ ÒËÒ¡ã¹µÑÇÊ §äÁ Á¢Õ Í ÁÙÅ ¡ÒÃ૵áÅÐà¤ÅÕÂà ºµÔ ¹Õ¨é С ÍãË à¡Ô´¡ÒÃÊ §ÍÑ¡¢ÃÐËÂØ´ (break character) ÍÍ¡ä» 2 ¤ÃÑ§é µÔ´µ ͡ѹ â´ÂÍÑ¡¢ÃÐáá¨Ð¶Ù¡Ê §ä»ÂѧªÔ¿µ Ã¨Õ Ô ÊàµÍà ·¹Ñ ·Õ áÅÐÍÑ¡¢Ãзѧé Êͧ¨Ðµ Íá¶ÇÃÍ·Õ¨è ÐࢠÒÊÙª ¿Ô µ Ã¨Õ ÊÔ àµÍà µÍ ä»


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

167

4. SCSR (Serial Communication Status Register) ÃÕ¨ÊÔ àµÍà ʶҹСÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁ ÁÕ 8 ºÔµ áÍ´à´ÃÊÍÂÙ· Õè 0x102E 㪠áÊ´§Ê¶Ò¹Ð¢Í§Ê ǹ SCI à¾×Íè 㪠Êà ҧÊÑ­­Ò³ÍÔ¹àµÍÃ Ã»Ñ µ TDRE (Tramsmit data register empty : ºÔµ 7) áÊ´§Ê¶Ò¹ÐªÔ¿µ Ã¨Õ ÊÔ àµÍà µÇÑ Ê §Ç Ò§ áÊ´§¼Å´ ÇÂÅͨԡ 1 TC (Transmit Complete : ºÔµ 6) áÊ´§Ê¶Ò¹ÐÊÔ¹é ÊØ´¡ÒÃÊ §¢ ÍÁÙÅ áÊ´§¼Å´ ÇÂÅͨԡ 1 RDRF (Receive data register full : ºÔµ 5) áÊ´§Ê¶Ò¹ÐÃÕ¨ÊÔ àµÍà ¢Í ÁÙÅàµçÁ áÊ´§´ ÇÂÅͨԡ 1 IDLE (Idle line detect : ºÔµ 4) áÊ´§Ê¶Ò¹ÐµÃǨ¨ÑºÊÀÒÇÐÇ Ò§ã¹ÊÒÂÊÑ­­Ò³ä´ áÊ´§´ ÇÂÅͨԡ 1 OR (Overrun error : ºÔµ 3) áÊ´§¤ÇÒÁ¼Ô´¾ÅÒ´Íѹà¹×Íè §ÁÒ¨Ò¡¡Ò깡ѹ¢Í§¢ ÍÁÙÅËÃ×ÍàÃÕÂ¡Ç Ò âÍàÇÍÃ Ã¹Ñ (overrun) â´ÂáÊ´§´ ÇÂÅͨԡ 1 NF(Noise flag : ºÔµ 2) áÊ´§Ê¶Ò¹Ð¡ÒÃà¡Ô´ÊÑ­­Ò³Ãº¡Ç¹ã¹ºÔµ¢Í§¢ ÍÁÙÅÃѺ áÊ´§´ ÇÂÅͨԡ 1 FL (Framing error : ºÔµ 1) áÊ´§Ê¶Ò¹Ð¤ÇÒÁ¼Ô´¾ÅÒ´·Ò§à¿ÃÁ¢ ÍÁÙÅ â´ÂáÊ´§´ ÇÂÅͨԡ 1 5. BAUD (Baud Rate Register ) ÃÕ¨ÊÔ àµÍÃ ÍµÑ ÃҺʹ ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÍÂÙ· áÕè Í´à´ÃÊ 0x102B 㪠àÅ×Í¡ÍѵÃÒ¶ Ò·ʹ¢ ÍÁÙÅËÃ×ÍÍѵÃҺʹ㹡ÒÃÃÑºÊ §¢ ÍÁÙÅ TCLR (Clear baud rate counters : ºÔµ 7) 㪠à¤ÅÕÂà µÇÑ ¹ÑºÍѵÃҺʹ ¨Ðà» ¹ 0 µÅÍ´ SCP1 áÅÐ SCP0 (SCI baud rate prescaler selects : ºÔµ 5 áÅÐ 4), SCR2, SCR1 áÅÐ SCR0 (SCI baud rate selects : ºÔµ 3, 2 áÅÐ 1) 㪠àÅ×Í¡ÍѵÃҺʹ¢Í§µÑÇÃѺáÅеÑÇÊ § áÊ´§´Ñ§µÒÃÒ§·Õè 5E RCKB (SCI baud rate clock check : ºÔµ 0) 㪠㹡Ò÷´Êͺ¢Í§âç§Ò¹¼Ù¼ ÅÔµ à» ¹ 0 µÅÍ´ BAUD : Baud rate register (0x102B)

¤ÇÒÁ¶Õ¤è ÃÔʵÍÅ (MHz) 8

4.9152

4

3.6864

ÍѵÃҺʹ (ºÔµµ ÍÇÔ¹Ò·Õ)

SCP1

SCP0

SCR2

SCR1

SCR0

0

0

1

0

0

7,812.5

4,800

3,906

3,600

0

0

1

0

1

3,906

2,400

195

1,800

0

0

1

1

0

1,953

1,200

977

900

0

1

0

0

0

41,666

25,600

20,833

19,200

0

1

0

0

1

20,833

12,800

10,417

9,600

0

1

0

1

0

10,417

6,400

5,208

4,800

0

1

0

1

1

5,208

3,200

2,604

2,400

0

1

1

0

0

2,604

1,600

1,302

1,200

0

1

1

1

0

651

400

326

300

1

1

0

0

0

31,250

19,200

15,625

14,400

1

0

0

0

1

15,625

9,600

7,182.5

7,200

1

0

0

1

0

7,812.5

4,800

3,906

3,600

1

0

0

1

1

3,906

2,400

1,953

1,800

1

0

1

0

0

1,953

1,200

977

900

1

0

1

1

0

488

300

244

225.5

1

0

1

1

1

244

150

122

112.5

µÒÃÒ§·Õè 5D ¡ÒÃàÅ×Í¡ÍѵÃҺʹ


168

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

1.2 àÅ×Í¡¤ÇÒÁÂÒǢͧ¢ ÍÁÙÅáÅСÒÃàÇ¡ÍÑ» â´Âà¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÔÊàµÍà SCCR1 ·Õºè µÔ M áÅÐ WAKE 1.3 àÍç¹àÍàºÔÅÍÔ¹àµÍÃ Ã»Ñ µ ¡ÒÃÊ § ¡ÒÃÃѺ áÅСÒÃàÇ¡ÍÑ»µÒÁ·Õµè Í §¡Òà â´Âà¢Õ¹¢ ÍÁÙŠŧã¹ÃÕ¨ÊÔ àµÍà SCCR2 ·Õºè µÔ TIE, TCIE, RIE, ILIE, TE, RE áÅÐ RWU 2. Ê §¢ ÍÁÙÅáµ ÅÐ亵 2.1 Í Ò¹¢ ÍÁÙŨҡÃÕ¨ÊÔ àµÍà SCSR áÅÐàµÃÕÂÁµÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ 2.2 ¶ ÒºÔµ M à» ¹ 1 à¢Õ¹¢ ÍÁÙŢͧ¡ÒÃÊ §ºÔµ 8 ŧ㹺Ե T8 ¢Í§ÃÕ¨ÊÔ àµÍà SCCR1 2.3 àÁ×Íè ºÔµ TDRE à» ¹ 1 ãË à¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà SCDR à¾×Íè àµÃÕÂÁÊ §ÍÍ¡ 3. ÃѺ¢ ÍÁÙÅ 3.1 Í Ò¹¢ ÍÁÙŨҡÃÕ¨ÊÔ àµÍà SCSR àµÃÕÂÁµÍºÊ¹Í§¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ 3.2 ¶ ÒºÔµ RDRF à» ¹ 1 Í Ò¹¢ ÍÁÙŨҡÃÕ¨ÊÔ à¨Íà SCDR 3.3 ¶ Òà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´ (ºÔµ OR, NF ËÃ×Í FE à» ¹ 1 ) ãË áÊ´§ÊÀÒÇмԴ¾ÅÒ´ 3.4 ¶ ÒËÒ¡ºÔµ M à» ¹ 1 Í Ò¹¢ ÍÁÙźԵ 8 ¨Ò¡ã¹ºÔµ R8 ã¹ÃÕ¨ÊÔ àµÍà SCCR 1

5.8.4.3 ¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D ã¹âËÁ´àª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁ (SPI) Ê Ç¹àª×Íè Áµ ÍÍػó ͹ءÃÁ (Serial Peripheral Interface : SPI) à» ¹âÁ´ÙžÔàÈÉ·Õºè ÃèØÍÂÙ ã¹¾Íà µ D ¢Í§ 68HC11 â´ÂÊ Ç¹ SPI ÁÕÅ¡Ñ É³ÐÊ §¼ Ò¹¢ ÍÁÙÅ͹ءÃÁà» ¹áºº«Ô§â¤Ã¹ÑÊ (ã¹¢³Ð ·Õè SCI à» ¹áººÍЫԧâ¤Ã¹ÑÊ) ÁÕ¡ÒÃá¡ÊÒÂÊÑ­­Ò³¢ ÍÁÙÅáÅÐÊÑ­­Ò³¹ÒÌ ¡ÒÍÍ¡¨Ò¡¡Ñ¹ ¢ Íà´ ¹¢Í§Ê ǹ SPI l ·íҧҹẺ¿ÙÅ´Ùà¾Åç¡« Ãкº¡Òö Ò·ʹ¢ ÍÁÙÅẺ«Ô§â¤Ã¹ÑÊ 3 ÊÒ l ÊÒÁÒö·íҧҹ໠¹·Ñ§é ÁÒÊàµÍà ËÃ×ÍÊàÅ¿ l ¤ÇÒÁ¶Õ¢ è ͧ¢ ÍÁÙÅÊÙ§ÊØ´àÁ×Íè ·íҧҹ໠¹ÁÒÊàµÍà 1.05MHz ã¹¢³Ð·Õàè » ¹ÊàÅ¿ 2.1MHz l ÊÒÁÒöâ»Ãá¡ÃÁÍѵÃÒ¡ÒÃÊ §¢ ÍÁÙÅàÁ×Í è ·íҧҹ໠¹ÁÒÊàµÍÃ ä´ 4 â»Ãá¡ÃÁ l ÊÒÁÒöâ»Ãá¡ÃÁÊÑ­­Ò³¹ÒÌ ¡Òä´ ·Ñ駢ÑéÇáÅÐà¿Ê l ÁÕá¿Å¡ÍÔ¹àµÍà ÃÑ»µ áÊ´§¡ÒÃÊ §¢ ÍÁÙÅÊÁºÙó l ÁÕ¡Òû ͧ¡Ñ¹¡ÒÃà¢Õ¹¢ ÍÁÙŪ¹¡Ñ¹ l ÁÕâËÁ´¡Òû ͧ¡Ñ¹¤ÇÒÁ¼Ô´¾ÅÒ´ã¹µÑÇÁÒÊàµÍà l ÊÒÁÒöàª×èÍÁµ ͡ѺÍØ»¡Ã³ ÀÒÂ¹Í¡ä´ § ÒÂ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

169

¢ÒÊÑ­­Ò³¢Í§ SPI ÁÕ¢Ò㪠§Ò¹ 4 ¢Ò â´Â㪠¨Ò¡¾Íà µ D ¤×Í ¢Ò PD2-PD5 »ÃСͺ´ Ç MISO/PD2 (Master in salve out) àÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ¢Ò¹Õ¨é Ðà» ¹ÍÔ¹¾Øµ áµ ¶Ò à» ¹ÊàÅ¿¢Ò¹Õé¨Ð¡ÅÒÂà» ¹àÍÒµ ¾Øµ 㪠¶ Ò·ʹ¢ ÍÁÙÅ͹ءÃÁ¡ÑºÍØ»¡Ã³ ·Õèµ Íà ÇÁ´ Ç MOSI/PD3 (Master out slave in ) ¨Ðà» ¹¢ÒàÍÒµ ¾µØ àÁ×Íè ·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà áÅÐ à» ¹ÍÔ¹¾ØµàÁ×èÍ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ 㪠㹡Òö Ò·ʹ¢ ÍÁÙÅ͹ءÃÁ¡ÑºÍØ»¡Ã³ ·Õèµ Íà ÇÁ´ Ç SCK/PD4 (Serial Clock) à» ¹¢ÒÊÑ­­Ò³¹ÒÌ ¡Ò¤Çº¤ØÁ¨Ñ§ËÇСÒ÷íÒ§Ò¹ ¡ÒáíÒ˹´ÍѵÃÒ ÊÑ­­Ò³¹ÒÌ ¡Ò·íÒä´ â´Â¡íÒ˹´Ê¶Ò¹Ð¢Í§ºÔµ SPR0 áÅÐ SPR1 ã¹ÃÕ¨ÔÊàµÍà SPCR ¢Ò¹Õé¨ÐäÁ ¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒËÒ¡¡íÒ˹´ãË ·íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ SS/PD5 (Slave select) à» ¹¢ÒÍÔ¹¾Øµãª àÅ×Í¡ÍØ»¡Ã³ Êàſ㹡óշàÕè ª×Íè Áµ ÍÍØ»¡Ã³ ã¹Ãкº SPI ËÅÒµÑÇ »¡µÔÁÊÕ ¶Ò¹ÐÅͨԡ 0 áµ ¶Ò ËÒ¡·íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà µ ͧ¡íÒ˹´ãË à» ¹Åͨԡ 1 ¹Í¡¨Ò¡¹Ñ¹é ÂѧÊÒÁÒöàÅ×Í¡ãË ·Òí §Ò¹à» ¹¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ä´ â´Âà¢Õ¹¢ ÍÁÙÅ 1 ŧ㹺Ե 5 ¢Í§ÃÕ¨ÊÔ àµÍà DDRD Íѹ໠¹¡ÒôÔÊàÍàºÔÅǧ¨ÃáÊ´§¤ÇÒÁ¼Ô´¾ÅÒ´¢Í§âËÁ´¡Ò÷íÒ§Ò¹¢Í§ SPI ¡Ò÷íÒ§Ò¹¢Í§Ê ǹ SPI ÃÙ»·Õè 5-20 à» ¹ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹ SPI àÁ×Íè ÍØ»¡Ã³ ÁÒÊàµÍà ʧ ¢ ÍÁÙÅä»ÂѧÊàÅ¿ ¢ ÍÁÙŨм Ò¹ÍÍ¡·Ò§¢Ò MOSI ¨Ò¡¹Ñé¹ÍØ»¡Ã³ ÊàÅ¿¨ÐµÍºÊ¹Í§¡ÒÃÊ §¢ ÍÁÙŹÕé´ Ç¡ÒÃÊ §¢ ÍÁÙÅ ¡ÅѺÁÒÂѧÍØ»¡Ã³ ÁÒÊàµÍà ¼ Ò¹·Ò§¢Ò MISO ¢Í§ÁÒÊàµÍà â´Â¢ ÍÁÙÅ·ÕèࢠÒÍÍ¡¨Ðµ ͧÊÑÁ¾Ñ¹¸ ¡Ñº ÊÑ­­Ò³¹ÒÌ ¡Ò ´Ñ§¹Ñé¹¢ ÍÁÙÅ·ÕèÊ §¨ÐࢠÒÁÒá·¹·Õèâ´Â¢ ÍÁÙÅ·ÕèÃѺࢠÒÁÒ ¨Ö§äÁ ¨íÒà» ¹µ ͧÁÕ¡ÒõÃǨ ÊͺʶҹеÑÇÊ §Ç Ò§ËÃ×͵ÑÇÃѺàµçÁàËÁ×͹¡ÑºÊ ǹ SCI ÁÕà¾Õ§¡ÒõÃǨÊͺʶҹСÒ÷íÒ§Ò¹Ç Ò ÊÁºÙó ËÃ×ÍäÁ â´Â㪠ºµÔ SPIF ã¹ÃÕ¨ÊÔ àµÍà SPSR à¾Õ§ºÔµà´ÕÂÇ SPI ¨Ðà¾ÔÁè ºÑ¿à¿Íà ໠¹ 2 à· Ò੾ÒÐ㹡ÒÃÍ Ò¹¢ ÍÁÙÅ ËÒ¡à¡Ô´¡ÒÃà¢Õ¹¢ ÍÁÙÅ¢Ö¹é ÃÐËÇ Ò§¡Òà ¶ Ò·ʹ¢ ÍÁÙÅáÅÐäÁ à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ¡ÒÃà¢Õ¹¢ ÍÁÙÅ¹Ñ¹é ¨ÐäÁ ÊÁºÙó ¨Ò¡à§×Íè ¹ä¢´Ñ§¡Å ÒǺԵ WCOL ã¹ÃÕ¨ÊÔ àµÍà SPSR ¨Ð૵à¾×Íè áÊ´§ÊÀÒÇСÒ깡ѹ¢Í§¢ ÍÁÙÅ àÁ×Íè SPI ÃѺ¢ ÍÁÙŤú 1 亵 áÅÐàÅ×Íè ¹äºµ à¡çºàÃÕºà Í ºÔµ SPIF ã¹ÃÕ¨ÊÔ àµÍà SPSR ¨Ð૵ ᨠ§¡ÒÃÃÑºÊ §¢ ÍÁÙÅÊÁºÙó 㹡Ò÷íҧҹ໠¹ÍØ»¡Ã³ ÁÒÊàµÍà ¢Ò SCK ¨Ðà» ¹àÍÒµ ¾µØ áÅÐÁÕÊÀÒÇÐÇ Ò§à» ¹ 0 ËÃ×Í 1 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´ºÔµ CPOL ã¹ÃÕ¨ÊÔ àµÍà SPCR â´Â¨Ð¤§ÊÀÒÇйÕäé Ç ¨¹¡Ç Ò¨ÐÁÕ¢Í ÁÙÅà¢Õ¹ ࢠÒä»ã¹ªÔ¿µ ÃÕ¨ÔÊàµÍà ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ð¶Ù¡¡íÒà¹Ô´¢Öé¹ÁÒ 8 ÅÙ¡µÒÁ¡ÒÃàÅ×è͹¢ ÍÁÙÅ·Ñé§ 8 ºÔµ áÅÐàÁ×èÍàÃÕºà ÍÂáÅ Ç¢Ò SCK ¡ç¨Ð¡ÅѺÁÒÍÂÙ ã¹ÊÀÒÇÐÇ Ò§ÍÕ¡¤ÃÑé§


170

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÊÑ­­Ò³¹ÒÌÔ¡Ò E MSB

µÑÇËÒÃ

µÑÇàÅ×Í¡

ºÑ¿à¿Íà ¢Í ÁÙÅ

52,4 N )

÷2 ÷4 ÷16 ÷32

ªÔ¿µ Ã¨Õ ÊÔ àµÍà 8 ºÔµ

LSB

ÊÑ­­Ò³¹ÒÌԡҢͧÍØ»¡Ã³ ÁÒÊàµÍÃ

PD2/MISO

Master Slave

PD3/MOSI

Ê Ç¹Åͨԡ ¤Çº¤ØÁ ¢ÒÊÑ­­Ò³ ǧ¨ÃÅͨԡ¢Í§ ÊÑ­­Ò³¹ÒÌÔ¡Ò

ÊÑ­­Ò³Ã ͧ¢Í ÍÔ¹àµÍÃ Ã»Ñ µ

Slave Master

PD4/SCK

PD5/SS

Slave Master

Ê Ç¹¤Çº¤ØÁ SPI

5254 N '

SPIF

WCOL

MODF

SPIE

SPE

DWOM MSTR

CPHA CPOL

SPR1

SPR0

52+4 N &

ºÑÊÀÒÂã¹

ÃÙ»·Õè 5-20 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ê ǹàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI ã¹ 68HC11 㹡Ò÷íҧҹ໠¹ÍØ»¡Ã³ ÊàÅ¿ ǧ¨ÃÅͨԡµÃǨÊͺ¡ÒÃàÃÔÁè µ ¹ÃѺ¢ ÍÁÙŨÐä´ ÃºÑ Åͨԡ 0 ·Õè¢Ò SS áÅÐÊÑ­­Ò³¹ÒÌ ¡Ò» ͹ࢠҷÕè¢Ò SCK ´Ñ§¹Ñé¹ÍØ»¡Ã³ ÊàÅ¿¨Ö§ÊÒÁÒö·íÒ§Ò¹ä´ ÊÑÁ¾Ñ¹¸ ¡ÑºÁÒÊàµÍà ¢ ÍÁÙŨҡÍØ»¡Ã³ ÁÒÊàµÍà ¨Ð¶Ù¡ÃѺࢠÒÁÒ·Õè¢Ò MOSI ¹íÒä»à¡çºã¹ªÔ¿µ ÃÕ¨ÔÊàµÍà 8 ºÔµ ¨Ò¡¹Ñé¹¢ ÍÁÙŨж١¶ Ò·ʹµ Íä»ÂѧºÑ¿à¿Íà ¡ÒÃÍ Ò¹â´ÂÇÔ¸Õ¡Òâ¹Ò¹ ã¹¢³Ð·ÕèÍÂÙ ã¹ä«à¡ÔÅ ¡ÒÃà¢Õ¹¢ ÍÁÙÅ («Ö觡ç¤×Í ÍÂÙ ã¹ÃÐËÇ Ò§¡ÒÃÃѺ¢ ÍÁÙŹÑè¹àͧ) ¢ ÍÁÙŨж١à¢Õ¹ࢠÒä»à¡çºã¹ªÔ¿µ ÃÕ ¨ÔÊàµÍà ¨Ò¡¹Ñ¹é ÍØ»¡Ã³ ÊàÅ¿¨Ð¤Í¢ºÇ¹ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡ÁÒÊàµÍà ÁÒàÅ×Íè ¹¢ ÍÁÙÅÍÍ¡ä»â´Â ¼ Ò¹·Ò§¢Ò MISO

ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧ¡ÑºÊ ǹ SPI 1.SPCR (Serial Peripheral Control register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁ à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÍÂÙ· áÕè Í´à´ÃÊ 0x1028 SPIE (Serial peripheral interrupt enable : ºÔµ 7) àÅ×Í¡ãË Á¡Õ ÒÃà¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ Í¹Ñ à¹×Íè §¨Ò¡¡Òà ·íÒ§Ò¹¢Í§ SPI â´Âà¢Õ¹¢ ÍÁÙÅ 1 ÁÒ·Õºè µÔ ¹Õé SPE (Serial peripheral system enable : ºÔµ 6) àÅ×Í¡ãË Ãкº SPI ·íÒ§Ò¹ â´Âà¢Õ¹¢ ÍÁÙÅ 1 PWOM (Port D Wire - OR mode option : ºÔµ 5) 㪠àÅ×Í¡¡Ò÷íÒ§Ò¹·Ò§ÎÒà ´áÇà ¢Í§¾Íà µ D àÁ×Íè ·íҧҹ໠¹¾Íà µàÍÒµ ¾µØ 0 - à» ¹àÍÒµ ¾µØ Ẻ«ÕÁÍÊ 1 - à» ¹àÍÒµ ¾µØ Ẻà´Ã¹à» ´


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

171

MSTR (Master mode select : ºÔµ 4) 㪠àÅ×Í¡âËÁ´¡Ò÷íÒ§Ò¹¢Í§ SPI 0 - âËÁ´ÊàÅ¿ 1 - âËÁ´ÁÒÊàµÍà CPOL (Clock polarity : ºÔµ 3) 㪠àÅ×Í¡¢ÑÇé ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò 0 - à¡Ô´ÊÀÒÇÐÅͨԡ 0 ¢Ö¹é ·Õ¢è Ò SCK ¢Í§ÍØ»¡Ã³ ÁÒÊàµÍà 1 - à¡Ô´ÊÀÒÇÐÅͨԡ 1 ¢Ö¹é ·Õ¢è Ò SCK ¢Í§ÍØ»¡Ã³ ÁÒÊàµÍà ¹Í¡¨Ò¡¹ÕÂé §Ñ ¶Ù¡ãª ÃÇ Á¡ÑººÔµ¤Çº¤ØÁà¿Ê¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò (SPR1 áÅÐ SPRO) à¾×Íè ¡íÒ˹´¤ÇÒÁµ ͧ¡ÒâͧÊÑ­­Ò³¹ÒÌ ¡ÒãË ÊÁÑ ¾Ñ¹¸ ¡ºÑ ÍØ»¡Ã³ ÊàÅ¿áÅÐÁÒÊàµÍà ´Ùû٠G »ÃСͺ CPHA (Clock phase : ºÔµ 2) 㪠àÅ×Í¡à¿Ê¢Í§ÊÑ­­Ò³¹ÒÌ ¡Òã¹Ãкº SPI ·íҧҹà ÇÁ¡ÑººÔµ CPOL 㪠㹡ÒäǺ¤ØÁ¤ÇÒÁÊÑÁ¾Ñ¹¸ ¢Í§¢ ÍÁÙÅÊÑ­­Ò³¹ÒÌ ¡ÒÃÐËÇ Ò§ÁÒÊàµÍà ¡ºÑ ÊàÅ¿ ´Ùû٠G »ÃСͺ SPR1 áÅÐ SPRO (SPI clock rate selects : ºÔµ 1 áÅÐ 0) 㪠àÅ×Í¡ÍѵÃÒ¡Òö Ò·ʹ¢ ÍÁÙÅã¹Ãкº SPI «Ö§è àÅ×Í¡ä´ 4 ÍѵÃÒ ´Ñ§áÊ´§ã¹µÒÃÒ§·Õè 5E 㪠·Òí §Ò¹Ã ÇÁ¡Ñº¢Ò SCK ã¹ÍØ»¡Ã³ ÁÒÊàµÍà 2. SPSR (Serial Peripheral Status Register) ÃÕ¨ÊÔ àµÍà áÊ´§Ê¶Ò¹Ð¢Í§¡ÒÃàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁ à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ᵠ㪠§Ò¹¨ÃÔ§à¾Õ§ 3 ºÔµ ÍÂÙ· áÕè Í´à´ÃÊ 0x1029 SPIF (SPI transfer complete flag : ºÔµ 7) 㪠áÊ´§¤ÇÒÁÊÁºÙó ¢Í§¡Òö Ò·ʹ¢ ÍÁÙÅÃÐËÇ Ò§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¡ºÑ ÍØ»¡Ã³ ÀÒ¹͡ ¨Ðà» ¹ 1 àÁ×Íè ¡Òö Ò·ʹ¢ ÍÁÙÅáµ ÅÐ亵 ÊÁºÙó àÃÕºà Í WCOL (Write collision : ºÔµ 6) ºÔµ¹Õ¨é Ð૵àÁ×Íè ÁÕ¡ÒÃà¢Õ¹¢ ÍÁÙÅã¹¢³Ð·Õ¡è Òí ÅѧÁÕ¡Òö ÒÂà·¢ ÍÁÙÅ ÍÂÙ ¡ÒÃà¤ÅÕÂà ºÅÔ WCOL ·íÒä´ â´Â¡ÒÃÍ Ò¹ÃÕ¨ÊÔ àµÍà SPSR (ã¹¢³Ð·Õºè µÔ WCOL Âѧ໠¹ 1 ÍÂÙ) áÅ Ç µÒÁ´ Ç¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹ÃÕ¨ÊÔ àµÍà SPDR MODF (Mode fault : ºÔµ 4) 㪠áÊ´§¤ÇÒÁ¼Ô´¾ÅÒ´¢Í§ÁÑŵÔ-ÁÒÊàµÍà ¢Í§Ãкº¤Çº¤ØÁáÅÐ㪠áÊ´§¡ÒÃÃÕ૵¡ÅѺÊÙ¤ Ò µÑ§é µ ¹¢Í§Ãкº »¡µÔáŠǺԵ MODF ¹Õàé » ¹ 0 ¨Ð૵໠¹ 1 ¡çµÍ àÁ×Íè ÍØ»¡Ã³ ÁÒÊàµÍà ¡Òí ˹´¢Ò SS ãË à» ¹ 0 ÃÍäÇ ¡ÒÃ૵ºÔµ MODF ¨ÐÊ §¼Å´Ñ§¹Õé (1) à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ä´ ¶ ÒºÔµ SPIE à» ¹ 1 (2) ºÔµ SPE ¶Ù¡à¤ÅÕÂà «Ö§è à» ¹¡ÒôÔÊàÍàºÔÅ SPI (3) ºÔµ MSTR ¶Ù¡à¤ÅÕÂà ´Ñ§¹Ñ¹é ÍØ»¡Ã³ ¨Ð¶Ù¡¡íÒ˹´ãË à» ¹ÊàÅ¿·Ñ§é ËÁ´ (4) ºÔµµ Ò§æ ã¹ÃÕ¨ÊÔ àµÍà DDRD ·Õãè ª ã¹Ê ǹ SPI ¨Ð¶Ù¡·íÒãË à» ¹ 0 ¡ÒÃà¤ÅÕÂà ºµÔ ¹Õ·é Òí ä´ â´Â¡ÒÃÍ Ò¹ÃÕ¨ÊÔ àµÍà SPSR (ã¹¢³Ð·Õºè µÔ MODF Âѧ¤§à«µÍÂÙ) áÅ Ç µÒÁ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÔÊàµÍà SPCR ºÔµ¤Çº¤ØÁÍ ҧ SPE áÅÐ MSTR ¨Ð¶Ù¡¤Çº¤ØÁâ´Â «Í¿µ áÇà ãË ÁÊÕ ¶Ò¹ÐÅͨԡàËÁ×͹¢Í§à´ÔÁËÅѧ¨Ò¡·Õºè µÔ MODF ¹Õàé ¤ÅÕÂà «Ö§è ¨íÒà» ¹ÁÒ¡à¾ÃÒШÐÊÒÁÒö ÃÑ¡ÉÒ¢ ÍÁÙÅã¹ DDRD ËÅѧ¨Ò¡à¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¹Õ¢é ¹Öé 3. SPDR (Serial Peripheral Data Resister) ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅà¾×Íè µÔ´µ ͡ѺÍØ»¡Ã³ ͹ءÃÁ à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÍÂÙ· áÕè Í´à´ÃÊ 0x102A 㪠à¡çº¢ ÍÁÙÅÊíÒËÃÑºÊ §áÅÐÃѺ¢Í§Ãкº SPI


172

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

5.8.5 ¾Íà µ E : ¾Íà µÍÔ¹¾Øµ´Ô¨µÔ ÍÅáÅоÍà µÍÔ¹¾ØµÇ§¨Ãá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ à» ¹¾Íà µ´Ô¨ÔµÍÅáÅÐÍйÒÅÍ¡¢¹Ò´ 8 ºÔµ·ÕèÊÒÁÒöàÅ×Í¡âËÁ´·íÒ§Ò¹ä´ 2 Ẻ¤×Í à» ¹ ¾Íà µÍÔ¹¾Øµ´Ô¨ÔµÍÅ ¢ ÍÁÙÅ·ÕèÃѺࢠÒÁÒ¨Ðà¡çºäÇ ·ÕèÃÕ¨ÔÊàµÍà PORTE ¡Ò÷íҧҹẺ·ÕèÊͧ¤×Í à» ¹ ÍÔ¹¾Øµ¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ¢¹Ò´ 8 ºÔµ 8 ª ͧ ÃѺáç´Ñ¹ÍÔ¹¾Øµä´ 0-5V

5.8.5.1 ¡Ò÷íÒ§Ò¹ã¹ÅѡɳоÍà µÍÔ¹¾Øµ´Ô¨ÔµÍŢͧ¾Íà µ E àÁ×Íè ¾Íà µ E ä´ ÃºÑ ¡ÒáíÒ˹´ãË ·Òí §Ò¹à» ¹¾Íà µÍÔ¹¾Øµ´Ô¨µÔ ÍÅ ¨ÐÁÕ¢Òµ Í㪠§Ò¹ 8 ¢Ò¤×Í PE0-PE7 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ㹡Ò÷íÒ§Ò¹¤×Í PORTE (Port E data register) à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 8 ºÔµ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1008 㪠à¡çº¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ¨Ò¡¢Ò¾Íà µ PE0-PE7

5.10.5.2 ¡Ò÷íÒ§Ò¹ã¹ÅѡɳоÍà µÍÔ¹¾ØµÇ§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ÁÕǧ¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ (ADC) ¢¹Ò´ 8 ºÔµ¨íҹǹ 8 ª ͧ ÍÂÙÀ ÒÂã¹â´Â㪠¢Ò¾Íà µ E (PE0-PE7) à» ¹ÍÔ¹¾ØµÃѺÊÑ­­Ò³ÍйÒÅÍ¡ ǧ¨Ã ADC ã¹ 68HC11 à» ¹áºº«Ñ¡à«Ê«Õ¿áÍ»¾ÃçÍ¡«ÔàÁªÑ¹ (successive approximation) «Öè§ÁÕ¤ÇÒÁ ÊÒÁÒö㹡Ò÷íÒ§Ò¹ÊÙ§ â´ÂÊÒÁÒöÊØ Á¤ ÒáÅÐà¡çºÃÑ¡ÉÒ¤ ÒäÇ ä´ ¶Ö§áÁ Ç Òáç´Ñ¹ÍÔ¹¾Øµ¨ÐÁÕ¡Òà à»ÅÕè¹á»Å§Í ҧÃÇ´àÃçÇ¡çµÒÁ ÁÕ¤ Ò¤ÇÒÁ¼Ô´¾ÅÒ´µèíÒ Ç§¨Ã ADC ã¹ 68HC11 µ ͧ·íҧҹà ÇÁ¡Ñº¢Ò VRH áÅÐ VRL â´Â¢Ò·Ñé§Êͧ¨Ðà» ¹¢Ò·Õè㪠» ͹áç´Ñ¹Í Ò§ÍÔ§ à¾×Íè 㪠ã¹Ç§¨Ã ADC áç´Ñ¹·Õ»è Í ¹ãË á¡ ¢Ò VRH áÅÐ VRL ÊÒÁÒö¨Ð㪠áËÅ § ¨ ÒÂä»ËÅÑ¡Ã ÇÁ¡Ñº 68HC11 ä´ ËÃ×ͨÐá¡㪠áËÅ §¨ ÒÂÍÔÊÃСç¨ÐÂÔ§è ´Õ à¾ÃÒШзíÒãË ¤ÇÒÁáÁ ¹ÂíÒ ã¹¡ÒÃá»Å§ÊÑ­­Ò³à¾ÔÁè ÁÒ¡¢Ö¹é ¤ Ò¤ÇÒÁ¼Ô´¾ÅÒ´¢Í§Ç§¨Ã ADC ÁÕ¤Ò »ÃÐÁÒ³ ± 1 ºÔµ LSB à¡Ô´ ¨Ò¡¤ÇÒÁ¼Ô´¾ÅҴ㹡ÒäÇ͹䵫ԧ (quantizing) ±0.5 ºÔµ LSB áÅФÇÒÁ¼Ô´¾ÅÒ´¨Ò¡Â Ò¹¢Í§ áç´Ñ¹Í Ò§ÍÔ§¤×Í µÑé§áµ ÃдѺ VRL ¶Ö§ VRH  ҹ¢Í§áç´Ñ¹Í Ò§ÍÔ§ÊÒÁÒö¡íÒ˹´»ÃѺà»ÅÕèÂ¹ä´ â´Â¡íÒ˹´áç´Ñ¹·Õè¢Ò VRH à» ¹áç´Ñ¹Í Ò§ÍÔ§ÊÙ§ÊØ´ ÁÕ¤ ÒäÁ à¡Ô¹ +5V ±10% áÅÐäÁ ¤ÇõèíÒ¡Ç Ò 2.5V áÅÐáç´Ñ¹·Õ¢è Ò VRL à» ¹áç´Ñ¹Í Ò§ÍÔ§µèÒí ÊØ´ ÁÕ¤Ò 0V 㹡ÒÃá»Å§ÊÑ­­Ò³áµ ÅЪ ͧ ¨Ð㪠àÇÅÒ 32 ä«à¡ÔŢͧÊÑ­­Ò³¹ÒÌ ¡Ò E ´Ñ§¹Ñ鹤ÇÒÁ¶Õè ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò E ¨Ðµ ͧÊÙ§¡Ç Ò 750kHz áµ ¶ ÒËÒ¡ã¹ÃкºÁÕ¤ÇÒÁ¶Õè¢Í§ÊÑ­­Ò³¹ÒÌ ¡ÒµèíÒ ¡Ç Ò 750kHz ǧ¨ÃÍÍÊ«ÔÅàÅàµÍà R-C ÀÒÂã¹ 68HC11 ¨Ðà» ¹µÑÇ¡íÒà¹Ô´ÊÑ­­Ò³¹ÒÌ ¡ÒãË á¡ Ç§¨Ã ADC á·¹ «Öè§Ç§¨ÃÍÍÊ«ÔÅàÅàµÍà ÊÒÁÒöàÍç¹àÍàºÔÅãË ·íÒ§Ò¹ä´ â´Â૵ºÔµ CSEL ã¹ÃÕ¨ÔÊàµÍà OPTION


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

173

ÊÑ­­Ò³¹ÒÌÔ¡Ò E ºÔµ MSB (ºÔµ 7) ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 4 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ 2 ä«à¡ÔÅ

ÊÑ­­Ò³¹ÒÌÔ¡Ò E ¨íҹǹ 12 ä«à¡ÔÅ à¢Õ¹¢ ÍÁÙÅŧ㹠ÃÕ¨ÊÔ àµÍà ADCTL

ª ǧàÇÅÒÊØ ÁÊÑ­­Ò³·ÕèÍÔ¹¾ØµÍйÒÅÍ¡

ª ǧàÇÅÒá»Å§ÊÑ­­Ò³ª ͧ·Õè 1

0

32

ª ǧàÇÅÒá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹¢ ÍÁÙÅ´Ô¨ÔµÍÅ

ª ǧàÇÅÒá»Å§ÊÑ­­Ò³ª ͧ·Õè 2

ª ǧàÇÅÒá»Å§ÊÑ­­Ò³ª ͧ·Õè 3

64

àÊÃç¨ÊÔé¹

ª ǧàÇÅÒá»Å§ÊÑ­­Ò³ª ͧ·Õè 4

96

૵ºÔµá¿Å¡ CC áÅÐ ¨Ð¡ÅѺ价íÒ§Ò¹ãËÁ ¶ ÒºÔµ SCAN à» ¹ "1"

128

¨íҹǹä«à¡ÔŢͧÊÑ­­Ò³¹ÒÌÔ¡Ò E

ÃÙ»·Õè 5-21 ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅã¹ 68HC11 ¡Ãкǹ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÀÒÂã¹ 68HC11 ÍѵÃÒÊ Ç¹¢Í§¡ÒÃá»Å§ÊÑ­­Ò³¨Ðà» ¹ÊÑ´Ê Ç¹·Õ褧·Õèá¹ ¹Í¹ ¡íÒ˹´ãË áç´Ñ¹ÍÔ¹¾Øµ·ÕèÁÕ ÃдѺ෠ҡѺ VRL ÁÕ¤Ò ¢ ÍÁÙÅà» ¹ 0x00 áÅÐáç´Ñ¹ÍÔ¹¾Øµ·ÕÁè ¤Õ Ò à· Ò¡Ñº VRH ¨ÐÁÕ¤Ò ¢ ÍÁÙÅà» ¹ 0xFF ã¹ ADC ¹Õäé Á Á¡Õ ÒÃáÊ´§¼Åà» ¹áººâÍàÇÍà â¿ÅÇ ËÃ×ͤ Òà¡Ô¹ã´ æ ·Ñ§é ÊÔ¹é ¡ÒáíÒ˹´ÃдѺáç´Ñ¹ ·Õ¢è Ò VRH áÅÐ VRL ÁÑ¡¨Ðµ Í¢Ò VRH ࢠҡѺáËÅ §¨ ÒÂä¿àÅÕÂé §â´ÂµÃ§ Ê Ç¹¢Ò VRL ¨Ðµ ͡Ѻáç ´Ñ¹Í Ò§ÍÔ§µèíÒÊØ´·Õèµ Í§¡ÒÃᡵ Ò§ËÒ¡ ÃÙ»·Õè 5-21 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§ÅíҴѺ¡ÒÃá»Å§ÊÑ­­Ò³ â´Â 68HC11 ¨ÐÊÒÁÒö·íÒ¡ÒÃỠŧÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅä´ à» ¹¡ÅØ Á æ ÅÐ 4 ª ͧ â´Â¨Ð·íÒ·ÕÅЪ ͧàÃÔèÁ¨Ò¡ª ͧ 1 仨¹ ¶Ö§ª ͧ·Õè 4 ¨Ò¡¹Ñ鹶 Òµ ͧ¡ÒÃãË ·íÒµ Í㹪 ͧ·Õè 5 ¡çµ ͧÁÕ¡ÒáíÒ˹´¡Ò÷íÒ§Ò¹ãËÁ ¡Ò÷íÒ§Ò¹¨Ð àÃÔèÁµ ¹ËÅѧ¨Ò¡·Õè·íÒ¡ÒÃà¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÔÊàµÍà ADCTL «Öè§à» ¹ÃÕ¨ÔÊàµÍà ¤Çº¤ØÁáÅÐ áÊ´§ ʶҹТͧǧ¨Ã ADC ã¹ 68HC11 ¨Ò¡ÃÙ»·Õè 5-21 Ạ§ª ͧ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ໠¹ 12 ä«à¡ÔÅ á¡໠¹ª ǧ¢Í§¡ÒÃÊØÁ ¤ Òáç´Ñ¹¨Ò¡ÍÔ¹¾Øµ ÍÕ¡ 18 ä«à¡Ôŵ ÍÁÒà» ¹ª ǧ¢Í§¡ÒûÃÐÁÇÅ ¼Åá»Å§ÊÑ­­Ò³â´Âǧ¨Ã ADC Ẻ«Ñ¡à«Ê«Õ¿áÍ»¾ÃçÍ¡«ÔàÁªÑ¹ â´Â 4 ä«à¡ÔŨÐà» ¹¡ÒÃá»Å§ ¢ ÍÁÙÅÍÍ¡ÁÒà» ¹ºÔµ MSB Ê Ç¹ÍÕ¡ 7 ºÔµ·Õàè ËÅ×Í㪠àÇÅÒºÔµÅÐ 2 ä«à¡ÔÅ ÊíÒËÃѺ 2 ä«à¡ÔÅÊØ´· ÒÂà» ¹ ¡Òú §ºÍ¡ãË ·ÃÒºÇ Ò á»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍŤú 8 ºÔµáÅ Ç àµÃÕÂÁ·íÒ§Ò¹ª ͧµ Íä» àÁ×Íè á»Å§¤Ãº 4 ª ͧáÅ Ç ºÔµ CCF ã¹ÃÕ¨ÊÔ àµÍà ADCTL ¨Ð૵ à¾×Íè áÊ´§Ç Òä´ á»Å§ÊÑ­­Ò³àÃÕº à ÍÂáÅ Ç ¢ ÍÁÙÅ·Õáè »Å§áŠǶ١à¡çºã¹ÃÕ¨ÊÔ àµÍà ADR1-ADR4 â´Â ADC ª ͧ·Õè 1 ¨Ðà¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ADR1 àÃÕ§ÅíҴѺä»àª ¹¹Õ¨é ¹¤Ãº 4 ª ͧ


174

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

PE1/AN1 PE2/AN2 PE3/AN3 PE4/AN4 PE5/AN5

áç´Ñ¹Í Ò§ÍÔ§ 8RH 8RL

ǧ¨Ãá»Å§ÊÑ­­Ò³´Ô¨µÔ ÍÅà» ¹ÍйÒÅÍ¡ 8 ºÔµ¡ÑºÇ§¨ÃÊØÁ áÅоѡÊÑ­­Ò³

PE0/AN0

Ê Ç¹àÅ×Í¡ÍÔ¹¾Øµ ÍйÒÅÍ¡ ẺÁÑŵÔà¾Åç¡«

ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙÅà¾×Íè à»ÃÕºà·Õº

¼ÅÅѾ¸

PE6/AN6

ADCTL (0x1030)

PE7/AN7

CCF

SCAN MULT

CD

CC

CB

CA

Ê Ç¹àª×Íè Áµ ÍÃÕ¨ÊÔ àµÍà à¡çº¼Å¡ÒÃá»Å§ÊÑ­­Ò³ ADR1 (0x1031)

ÃÕ¨ÊÔ àµÍà à¡çº¼Å¡Òà á»Å§ÊÑ­­Ò³µÑÇ·Õè 1

ADR2 (0x1032)

ADR3 (0x1033)

ÃÕ¨ÊÔ àµÍà à¡çº¼Å¡Òà á»Å§ÊÑ­­Ò³µÑÇ·Õè 2

ÃÕ¨ÊÔ àµÍà à¡çº¼Å¡Òà á»Å§ÊÑ­­Ò³µÑÇ·Õè 3

ADR4 (0x1034)

ÃÕ¨ÊÔ àµÍà à¡çº¼Å¡Òà á»Å§ÊÑ­­Ò³µÑÇ·Õè 4

ºÑÊ¢ ÍÁÙÅÀÒÂã¹

ÃÙ»·Õè 5-22 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅã¹ 68HC11 ã¹ÃÙ»·Õè 5-22 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÀÒ 㹠68HC11 ¡Ò÷íÒ§Ò¹ª ͧà´ÕèÂÇ ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã ADC Ẻª ͧà´ÕÂǹÑé¹ ÁÕ´ Ç¡ѹ 2 Ẻ¤×Í áºº·íÒ«éíÒÃͺà´ÕÂÇ àÁ×èÍ ºÔµ SCAN ã¹ÃÕ¨ÔÊàµÍà ADCTL à» ¹ 0 ǧ¨ÃàÅ×Í¡ÍÔ¹¾Øµ¨Ð·íÒ¡ÒÃá»Å§ÊÑ­­Ò³ 4 ¤ÃÑé§ 4 ª ǧ àÇÅÒ ¼Å¢Í§¡ÒÃá»Å§¤ÃÑé§áá¨Ðà¡çºäÇ ã¹ÃÕ¨ÔÊàµÍà ADR1 àÃÕ§仵ÒÁÅíҴѺ¼Å¡ÒÃá»Å§¤ÃÑ駷Õè 4 à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ADR4 ËÅѧ¨Ò¡¡ÒÃá»Å§¤ Ò·Õàè ÊÃç¨ÊÁºÙó ǧ¨Ã ADC ¨ÐËÂØ´·íÒ§Ò¹ ¨¹¡Ç Ò ¨ÐÁÕ¤íÒÊÑè§ãË ·íÒ¡ÒÃá»Å§ÊÑ­­Ò³ãËÁ à¢Õ¹ÁÒ·ÕèÃÕ¨ÔÊàµÍà ADCTL Ẻ·ÕÊè ͧàÃÕÂ¡Ç Ò áººÊ᡹ ËÃ×Í ·íÒ«éÒí äÁ è٠º ¶ ÒºÔµ SCAN à» ¹ 1 ¡ÒÃá»Å§ÊÑ­­Ò³ ¨Ð´íÒà¹Ô¹µ Í件֧áÁ ¨Ð·íÒä»áÅ Ç 4 ¤ÃÑ駡çµÒÁ â´ÂÁѹ¨Ð·íÒµ Íà» ¹¤ÃÑ駷Õè 5 áŠǼŷÕèá»Å§ä´ ¨Ð à¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ADR1 â´Â¨Ðà¢Õ¹¢ ÍÁÙŷѺ¢Í§à´ÔÁ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ã¹¤Ãѧé áá áÅШзíÒ¡Òà á»Å§ä»àÃ×èÍ æ â´Â¼Å¢Í§¤ Ò·Õè 6 ¨Ðà¡çºäÇ ã¹ÃÕ¨ÔÊàµÍà ADR2 áÅ ÇÊ᡹ÍÔ¹¾Øµµ Íä»à¾×èÍá»Å§ ¤ ÒÁÒà¡çºäÇ ã¹ÃÕ¨ÔÊàµÍÃ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

175

ÃÕ¨ÔÊàµÍà ·Õèà¡ÕèÂÇ¢ ͧ¡ÑºÇ§¨Ã ADC 1. ADCTL (A/D Control/Status register) ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁáÅÐáÊ´§Ê¶Ò¹Ð¢Í§Ç§¨Ã ADC à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊ·Õè 0x1030 㪠¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã ADC ÀÒÂã¹ 68HC11 CCF (Conversion complete flag : ºÔµ 7) áÊ´§Ê¶Ò¹Ð¡ÒÃá»Å§¢ ÍÁÙÅàÊÃç¨ÊÁºÙó ´Ç ÂÅͨԡ 1 SCAN (Continuous scan control : ºÔµ 5) 㪠àÅ×Í¡ãË Ç§¨Ã ADC ·íÒ§Ò¹µ Íà¹×Íè § 0 - ǧ¨Ã ADC ·íÒ¡ÒÃá»Å§à¾Õ§Ãͺà´ÕÂÇ (¤Ãº 8 ª ͧ) 1 - ǧ¨Ã ADC ·íҧҹǹÍ ҧµ Íà¹×Íè § MULT (Multiple-channel/Single channel control : ºÔµ 4) 㪠àÅ×Í¡¨íҹǹª ͧ¢Í§Ç§¨Ã ADC 0 - àÅ×Í¡·íÒ§Ò¹ 1 ª ͧ â´Âµ ͧ·íÒ§Ò¹ÊÑÁ¾Ñ¹¸ ¡ºÑ ºÔµ CD, CC, CB áÅÐ CA 1 - àÅ×Í¡·íÒ§Ò¹¤Ãº·Ø¡ª ͧ CD, CC, CB, CA, (Channel select D, C, B, A : ºÔµ 3-ºÔµ 0) 㪠àÅ×Í¡ª ͧ¢Í§Ç§¨Ã ADC (´ÙµÒÃÒ§ 5E »ÃСͺ) CD : CC : CB : CA

ª ͧÍÔ¹¾Øµ·Õ¶è ¡Ù àÅ×Í¡

ÃÕ¨ÊÔ àµÍà ·àèÕ ¡çº¼ÅÅѾ¸ àÁ×Íè ºÔµ MULT à» ¹ "1"

0000

AN0

ADR1

0001

AN1

ADR2

0010

AN2

ADR3

0011

AN3

ADR4

0100

AN4

ADR1

0101

AN5

ADR2

0110

AN6

ADR3

0111

AN7

ADR4

10xx

ÊíÒÃͧäÇ

-

µÒÃÒ§·Õè 5E ¡ÒÃàÅ×Í¡ª ͧÍÔ¹¾Øµ ¢Í§Ç§¨Ãá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡ à» ¹´Ô¨µÔ ÍÅ ã¹ 68HC11

2. ADR (A/D data register 1-4) ÃÕ¨ÊÔ àµÍà à¡çº¼ÅÅѾ¸ ¢Í§Ç§¨Ã ADC ÁÕ 4 µÑǤ×Í ADR1-ADR4 áµ ÅеÑÇ ÁÕáÍ´à´ÃÊÍÂÙ· Õè 0x1031-0x1034 ÊÒÁÒöà¡çº¢ ÍÁÙÅä´ 8 ºÔµ àÁ×Íè àÃÔÁè ·íÒ§Ò¹ ǧ¨Ã ADC á»Å§ÊÑ­­Ò³ä´ ¨Ð¹íҼŢͧ¡ÒÃá»Å§ä»à¡çºäÇ ·ÃÕè ¨Õ ÊÔ àµÍà ADR1 à» ¹µÑÇáááÅ ÇäÅ ÁÒµÒÁÅíҴѺ¨¹¶Ö§ÃÕ¨ÊÔ àµÍà ADR4 ºÔµ CCF ¨Ð૵áÊ´§¤ÇÒÁÊÁºÙó ¢Í§¡ÒÃá»Å§ 1 Ãͺ áµ ¶Ò ËÒ¡ºÔµ SCAN ૵ÍÂÙ´ Ç Â Ç§¨Ã ADC ¡ç¨Ð·íÒ §Ò¹µ Í ¼Å¢Í§¡ÒÃá»Å§µÑÇ·Õè 5 ¡ç¨Ð¶Ù¡à¡çºÅ§ã¹ÃÕ¨ÊÔ àµÍà ADR1 ¹Ñ¹è ¤×Í à¢Õ¹·ÑºÅ§ä»ãËÁ ¹¹Ñè àͧ ¡ç¨Ð à¢Õ¹äÅ µÒÁÅíҴѺઠ¹¹Õäé »àÃ×Íè  æ 3. OPTION (Configuration option register) ÃÕ¨ÊÔ àµÍà àÅ×Í¡¡Ò÷íÒ§Ò¹àÊÃÔÁ à» ¹ÃÕ¨ÊÔ àµÍà 8 ºÔµ ÁÕáÍ´à´ÃÊ·Õè 0x10 ã¹Ê ǹ·Õàè ¡ÕÂè Ç¢ ͧ¡ÑºÇ§¨Ã ADC ¤×Í ãª àÅ×Í¡ãË Ç§¨Ã ADC ·íÒ§Ò¹ â´Âà¢Õ¹¢ ÍÁÙÅ 1 ä»ÂѧºÔµ ADPU (ºÔµ 7) áÅÐ㪠㹡ÒÃàÅ×Í¡ÊÑ­­Ò³¹ÒÌ ¡Ò â´Âà¢Õ¹¢ ÍÁÙÅ ä»ÂѧºÔµ CSEL (ºÔµ 6) ¶ Òà» ¹ 0 ËÁÒ¶֧àÅ×Í¡ ÊÑ­­Ò³¹ÒÌ ¡Ò E áµ ¶ Òà» ¹ 1 ËÁÒ¶֧àÅ×Í¡ ÊÑ­­Ò³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC ÀÒÂ㹠㪠㹡óշ¤Õè ÇÒÁ¶Õ¹è ÒÌ ¡ÒËÅÑ¡¢Í§ÃкºµèÒí ¡Ç Ò 6MHz


176

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ò÷íҧҹẺËÅÒª ͧ ઠ¹à´ÕÂǡѺ¡Ò÷íҧҹẺª ͧà´ÕèÂÇ ¡Ò÷íҧҹẺËÅÒª ͧ¨ÐÁÕÅѡɳСÒ÷íÒ§Ò¹ 2 Ẻ¤×Í áººáá¡íÒ˹´ºÔµ SCAN à» ¹ 0 ǧ¨Ã¨Ð·íÒ¡ÒÃàÅ×Í¡¡ÅØÁ ¢Í§ª ͧÊÑ­­Ò³ 4 ª ͧáá ÁÒ·íÒ§Ò¹ â´Âª ǧàÇÅÒ 1 ¤ÃÑ駢ͧ¡Ò÷íÒ§Ò¹¨Ðä´ ¼Å¢Í§ 1 ª ͧÍÔ¹¾Øµ áŠǹíÒ¤ Ò¢ ÍÁÙŹÕéä»à¡çº äÇ ã¹ÃÕ¨ÊÔ àµÍà ADR1 µÑÇ àª ¹ 㹪 ǧàÇÅÒ·Õè 1 ¡ç¨Ðä´ ¼Å¢Í§ÍÔ¹¾Øµª ͧ·Õè 1 à¡çº¤ ÒäÇ ã¹ÃÕ¨ÊÔ àµÍà ADR1 áÅÐàÁ×Íè ¶Ö§ª ǧàÇÅÒ·Õè 4 ¡ç¨Ðä´ ¼Å¢Í§ÊÑ­­Ò³ÍÔ¹¾Øµã¹ª ͧ·Õè 4 ÁÒà¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ADR4 ËÅѧ¨Ò¡·íҤú 4 ª ͧ ǧ¨Ã ADC ¨ÐËÂØ´·íÒ§Ò¹¨¹¡Ç Ò¨ÐÁÕ¤Òí Êѧè ãË ·Òí §Ò¹ãËÁ à¢Õ¹ÁÒ·ÕÃè ¨Õ ÊÔ àµÍà ADCTL Ẻ·ÕèÊͧ ¶ ÒËÒ¡ºÔµ SCAN à» ¹ 1 ¡ÒÃá»Å§ÊÑ­­Ò³¨ÐäÁ ËÂشŧ·Õèª Í§·Õè 4 Áѹ¨Ð·íÒ §Ò¹µ Íä»ã¹ª ͧ·Õè 5 áŠǼŢͧ¡ÒÃá»Å§¨Ðà¡çºäÇ ã¹ÃÕ¨ÔÊàµÍà ADR1 â´Â¨ÐࢠÒä»á·¹·Õè¢ ÍÁÙÅ ·Õäè ´ ¨Ò¡¡ÒÃá»Å§¤ÃÑ§é ¡ ͹˹ Ò¹Õé ¶ Òà» ¹ª ͧ·Õè 6 ¡ç¨Ðà¡çºã¹ÃÕ¨ÊÔ àµÍà ADR2 à» ¹µ ¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

177

º··Õè 6

¡ÒÃàª×Íè Áµ ÍáÅÐ㪠§Ò¹ÍØ»¡Ã³ ¾àÔ ÈÉ ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 áÅÐ Interactive C º¹ºÍà ´ AX-11 ä´ ¨´Ñ àµÃÕÂÁ¢Ò¾Íà µà͹¡»ÃÐʧ¤ ÊÒí ËÃѺàª×Íè Áµ ÍÍØ»¡Ã³ ÀÒ¹͡à¾ÔÁè àµÔÁ äÇ 1 ¡ÅØÁ ¤×Í ¡ÅØÁ ¢Ò¾Íà µ D «Ö§è ÁÕ´Ç Â¡Ñ¹ 4 ¢Ò¤×Í PD2-PD5 «Ö§è ¡ç¤Í× ¢Òµ Í㪠§Ò¹¢Í§Ê ǹàª×Íè Áµ Í ÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI ¹Ñè¹àͧ (´ÙÃÒÂÅÐàÍÕ´à¾ÔèÁàµÔÁ㹺··Õè 5) 㹺·¹Õé¨Ö§à» ¹¡ÒùíÒÍØ»¡Ã³ ÍÔàÅç¡·ÃÍ¹Ô¡Ê ËÅÒ¡ËÅÒÂẺÁÒàª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ºÍà ´ AX-11 ¼ Ò¹¢Ò ¾Íà µ¡ÅØÁ ¹Õé áÅ Çà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁ´ Ç Interactive C Íѹ໠¹¡ÒÃáÊ´§ãË àË繶֧¤ÇÒÁÂ×´ËÂع áÅÐÍÃö»ÃÐ⪹ Í¡Õ ´ Ò¹Ë¹Ö§è ¢Í§â»Ãá¡ÃÁ Interactive C áÅкÍà ´ AX-11 ·ÕÂè §Ñ ÊÒÁÒöµ Íàª×Íè Á ¡ÑºÍØ»¡Ã³ ÀÒ¹͡à¾ÔÁè àµÔÁä´ Í¡Õ ·Ñ§é ·Õºè ¹ºÍà ´àͧ¡çÁÍÕ »Ø ¡Ã³ ÍÒí ¹Ç¤ÇÒÁÊдǡ㹡ÒþѲ¹ÒáÅÐ àÃÕ¹ÃÙ Í ҧ¤Ãº¶ ǹÊÁºÙó áÅ Ç¡çµÒÁ ÍØ»¡Ã³ ¾ÔàÈÉÀÒ¹͡·Õè¹íÒÁÒàʹÍà» ¹µÑÇÍ ҧ㹺·¹Õé»ÃСͺ´ Ç 1. äÍ«Õª¿Ô µ Ã¨Õ ÊÔ àµÍà àºÍà 74HC595 㪠¢ÂÒ¨íҹǹ¾Íà µàÍÒµ ¾µØ ãË á¡ Ãкº 2. äÍ«Õ¢ºÑ LED µÑÇàÅ¢ 7 Ê Ç¹ àºÍà MC14489 㪠ÊÃ Ò§Ê Ç¹áÊ´§¼Å LED µÑÇàÅ¢ 7 Ê Ç¹ 3. äÍ«ÕÇ´Ñ ÍسËÀÙÁáÔ ºº´Ô¨µÔ ÍÅàºÍà DS1620 㪠Êà ҧÃкºÇÑ´áÅФǺ¤ØÁÍسËÀÙÁÍÔ Â Ò§§ Ò 4. äÍ«ÕÊà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ËÃ×ÍÃÕÅä·Á ¤ÅçÍ¡ (real-time clock) àºÍà DS1302 㪠㹡Òà Êà ҧ¹ÒÌ ¡ÒáÅÐÃкº¤Çº¤ØÁàÇÅÒ·ÕèÁÕ¤ÇÒÁáÁ ¹ÂíÒÊÙ§ÃÒ¤Ò»ÃÐËÂÑ´ 5. µÑǵÃǨ¨ÑºÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàôàºÍà GP2D12 6. äÍ«ÕµÃǨ¨Ñº¤ÇÒÁࢠÁ¢Í§Ê¹ÒÁáÁ àËÅç¡ä¿¿ ÒàºÍà UGN3503


178

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÍØ»¡Ã³ ÊÒí ËÃѺ·´Åͧ äÍ«Õ 74HC595 x1

äÍ«Õ MC14489 x1 ἧǧ¨ÃµÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ä¿¿ Ò ¾Ã ÍÁÊÒÂÊÑ­­Ò³ x1

äÍ«Õ DS1620 x1 äÍ«Õ DS1302 x1

ÊÒµ Íǧ¨Ã

âÁ´ÙÅ GP2D12 ¾Ã ÍÁÊÒÂàª×Íè Áµ Í x1

µÑÇà¡çº»ÃШØà«ÃÒÁÔ¡ 15pF 50V x2 LED µÑÇàÅ¢ 7 Ê Ç¹ Ẻá¤â·´Ã ÇÁ x3 µÑǵ Ò¹·Ò¹ 1/4W 5% ¤ Ò 510Ω x8

¤ÃÔʵÍÅ 32.768kHz x1

LED ÊÕá´§ 3 ÁÁ. x8 ẵàµÍÃÕÅè àÔ ¸ÕÂÁ 3V x1 «çÍ¡à¡çµáºµàµÍÃÕÅè àÔ ¸ÕÂÁ x1

ἧµ Íǧ¨ÃËÃ×ÍàºÃ´ºÍà ´ x1

¡ÒÃ㪠§Ò¹á¼§µ Íǧ¨ÃËÃ×ÍàºÃ´ºÍà ´ ἧµ Íǧ¨Ã ËÃ×Í àºÃ´ºÍà ´ (breadboard) ËÃ×Í â»Ãâµ ºÍà ´ (protoboard) ÁÕâ¤Ã§Êà ҧ¡ÒÃàª×Íè Áµ ÍÀÒÂ㹴ѧã¹ÃÙ» A ¨ÐàËç¹ä´ ÇÒ ÀÒÂã¹â»Ãâµ ºÍà ´¹Ñ¹é ¨ÐÁÕ¡ÒÃàª×Íè Áµ ÍÀÒÂã¹ÍÂÙ 2 Ẻ¤×Í µ Ͷ֧¡Ñ¹µÒÁá¹ÇµÑ§é áÅе Ͷ֧¡Ñ¹µÒÁá¹Ç¹Í¹ ´Ñ§¹Ñ¹é 㹡ÒÃ㪠§Ò¹¨Ö§µ ͧÃÐÁÑ´ÃÐÇѧãË ´Õ Êí Ò ËÃÑ º ÊÒµ Í Ç§¨Ã㪠ŠǴ·Í§á´§ ÅÇ´·Í§á´§ ©¹Ç¹ à´ÕÂè ÇàºÍà 22AWG àÊ ¹¼ Ò¹Èٹ ¡ÅÒ§ 0.65 ÁÔÅÅÔàÁµÃ µÑ´ãË ÁÕ¤ÇÒÁÂÒÇÍ ҧàËÁÒÐÊÁ áÅлÅÍ¡»ÅÒÂÊÒÂãË à Ëç ¹ ÅÇ´µÑ Ç ¹í Ò ÂÒÇ à¾Õ§¾Í·Õ¨è ÐàÊÕºŧº¹á¼§µ Íǧ¨Ãä´ Í ҧ á¹ ¹Ë¹Ò áÅФÇôѴãË »ÅÒÂµÑ§é ©Ò¡´Ñ§áÊ´§ µÑÇÍ ҧã¹ÃÙ» B ÃÙ» B ¡ÒÃàµÃÕÂÁÊÒÂÊíÒËÃѺµ Íǧ¨Ã A B C D E

#

#

#

#

#

#

F G H I J

ÃÙ » A áÊ´§¡ÒÃàª×è Í Áµ Í ÀÒÂ㹢ͧ ἧµ Íǧ¨ÃËÃ×ÍàºÃ´ºÍà ´ (Ãٻà ҧ¢Í§ ἧµ Íǧ¨Ãã¹Ãٻ໠¹¡ÒèíÒÅͧ ÍÒ¨ ᵡµ Ò§¨Ò¡¢Í§¨ÃÔ§) â´ÂàÊ ¹ÊÕ´Òí Ë¹Ò áÊ´§¡Òõ Ͷ֧¡Ñ¹¢Í§áµ ÅШشµ ͺ¹á¼§ µ Íǧ¨Ã

Ê Ç¹ã¹ÃÙ» C áÊ´§ãË àË繶֧¡ÒÃàª×èÍÁ ÊÒµ Íǧ¨Ã µ ÍÀÒÂã¹á¼§µ Íǧ¨ÃàÁ×èÍÁÕ¡ÒÃàÊÕºÊÒÂŧ ÊͧàÊ ¹¹Õµé Í ¶Ö§¡Ñ¹ º¹á¼§µ Íǧ¨Ã ¤ÇÃàÊÕºÊÒÂãË á¹º¡Ñºá¼§ µ Íǧ¨Ã ·Ñ§é ¹Õàé ¾×Íè ª ÇÂ㹡ÒõÃǨÊͺ¡Òõ Í Ç§¨ÃáÅÐà¾×èͤÇÒÁÊǧÒÁ ¹Í¡¨Ò¡¹Ñé¹Âѧ ª ÇÂãË ¡Òõ ÍÍØ»¡Ã³ à¾ÔèÁàµÔÁŧº¹á¼§µ Í ÃÙ» C ¡ÒÃàª×èÍÁµ ͧ͢ἧµ Íǧ¨Ã ǧ¨ÃÊÒÁÒö¡ÃзíÒä´ Í ҧÊдǡ äÁ ÁÊÕ Ò µ Íǧ¨Ã¾Ò´ä»ÁÒ ¨¹äÁ ÁàÕ ¹×Íé ·ÕÊè Òí ËÃѺµÔ´µÑ§é àÁ×Íè àÊÕºÊÒÂŧº¹á¼§µ Íǧ¨Ã ÍØ»¡Ã³ à¾ÔÁè àµÔÁ ÊÒµ Íǧ¨ÃÊͧàÊ ¹¹Õé äÁ µÍ ¶Ö§¡Ñ¹

) *

+

,


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

179

6.1 ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº äÍ«Õª¿Ô µ Ã¨Õ ÊÔ àµÍà 74HC595 ã¹ÃÙ»·Õè 6-1 áÊ´§Ç§¨Ãàª×Íè Áµ ÍÃÐËÇ Ò§ MC68HC11E1 º¹ºÍà ´ AX-11 ¡ÑºäÍ«Õ 74HC595 ÊíÒËÃѺ¡Òõ Íǧ¨Ãà¾×Íè ·´Åͧ¨ÃÔ§¹Ñ¹é 㪠ἧµ Íǧ¨ÃËÃ×ÍàºÃ´ºÍà ´ (breadboard) à» ¹ÍØ»¡Ã³ ËÅÑ¡ ¨Ò¡¹Ñ¹é ¹íÒÍØ»¡Ã³ µ´Ô µÑ§é ŧº¹á¼§µ Íǧ¨Ã áŠǵ ÍÊÒÂࢠҡѺ¨Ø´µ ;Íà µ D º¹ºÍà ´ AX-11

6.1.1 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè àª×Íè Áµ Í 68HC11 ¡Ñº 74HC595 1. ¡íÒ˹´ãË ¢Ò¾Íà µ PD3-PD5 ¢Í§ 68HC11 ãË ·Òí §Ò¹à» ¹¾Íà µàÍÒµ ¾µØ ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅ ä»ÂѧÃÕ¨ÊÔ àµÍà DDRD â´Â㪠¤Òí Êѧè poke(DDRD,0x38); 2. 㹡Òö Ò·ʹ¢ ÍÁÙŨҡ 68HC11 º¹ºÍà ´ AX-11 ä»Âѧ 74HC595 ¨Ð¡ÃзíÒ¤ÃÒÇÅÐ 1 ºÔµ ¨¹¤Ãº 1 亵 (8 ºÔµ) ¼ Ò¹·Ò§¢Ò PD3 «Ö觵 ͡Ѻ¢Ò data ¢Í§ 74HC595 ·íÒ˹ Ò·ÕèÃѺ¢ ÍÁÙŠ㹡ÒÃÊ §¨Ð´ ǺԵ¢ ÍÁÙŹÑÂÊíҤѭµèÒí ÊØ´ËÃ×Í LSB (ºÔµ 0) ¡ ͹ ¨Ò¡¹Ñ¹é äÍ«Õ 74HC595 ¨ÐÃÑ¡ÉÒ¢ ÍÁÙÅ ·ÕèÃÑºä´ ¨Ò¡ 68HC11 äÇ à¾×èÍàµÃÕÂÁÊ §ÍÍ¡ä»·Ò§¢Ò¾Íà µàÍÒµ ¾Øµµ Íä» ´ Ò¹ÊÑ­­Ò³·Õè㪠¤Çº¤ØÁ ¡ÒÃáÊ´§¼ÅÅѾ¸ ä´ ÁÒ¨Ò¡ÊÑ­­Ò³¾ÑÅÊ ¢Íº¢Òŧ¼ Ò¹·Ò§¢Ò¾Íà µ PD4 «Ö觵 ͡Ѻ¢Ò Shift clock (SCK) ¢Í§ 74HC595 à¾×Íè ¹íÒ¢ ÍÁÙźԵ´Ñ§¡Å ÒÇà¡çºäÇ ã¹ÃÕ¨ÊÔ àµÍà ¢Í§ 74HC595 3. ËÅѧ¨Ò¡ 68HC11 Ê §¢ ÍÁÙŤú 1 亵 ÁÒÂѧ 74HC595 ¢ ÍÁÙŴѧ¡Å ÒǨÐÂѧäÁ »ÃÒ¡¯·Õè ¢ÒàÍÒµ ¾Øµ QA-QH ¨¹¡Ç Ò¨ÐÁÕ¡Òû ͹ÊÑ­­Ò³¾ÑÅÊ ¢Íº¢ÒŧÁÒÂѧ¢Ò Latch ¢Í§ 74HC595 «Öè§ ã¹·Õ¹è ãÕé ª ¢Ò¾Íà µ PD5 ¨Ò¡¢Ñ鹵͹·Õè¡Å ÒÇÁÒÊÒÁÒö¹íÒÁÒÊà ҧ໠¹¿ §¡ ªÑ蹡ÒÃÊ §¢ ÍÁÙÅ 1 亵 ä»áÊ´§¼Å·Õè 74HC595 ´ ÇÂâ»Ãá¡ÃÁ Interactive C ä´ ´§Ñ ¹Õé #define pin_dat1 bit_set(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ pin_dat1 ´ ǤíÒÊѧè ૵ºÔµ PD3*/ #define pin_dat0 bit_clear(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ pin_dat0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD3*/ #define pin_clk1 bit_set(0x1008,0b00010000)

/*á·¹¤ÇÒÁËÁÒ pin_clk1 ´ ǤíÒÊѧè ૵ºÔµ PD4*/ #define pin_clk0 bit_clear(0x1008,0b00010000)

/*á·¹¤ÇÒÁËÁÒ pin_clk0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD4*/ #define pin_latch1 bit_set(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ pin_latch1 ´ ǤíÒÊѧè ૵ºÔµ PD5*/


180

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

äÍ«ÕªÔ¿µ ÃÕ¨ÔÊàµÍà àºÍà 74HC595 ÁÕ¡ÒèѴ¢ÒµÒÁÃÙ»

DI (¢Ò·Õè 14) à» ¹¢ÒÍÔ¹¾ØµÃѺ¢ ÍÁÙÅ Q0-Q7 (¢Ò·Õè 15, 1-7) à» ¹¢Ò¢ ÍÁÙÅÍÍ¡ OE (¢Ò·Õè 13) à» ¹¢ÒÍÔ¹¾Øµ à¾×Íè ¡íÒ˹´ãË 74HC595 ·íÒ§Ò¹ä´ ËÃ×Í à» ¹¢ÒàÍç¹àÍàºÔŹѹè àͧ ¢Ò¹Õ·é Òí §Ò¹´ ÇÂÅͨԡ 0 LATCH (¢Ò·Õè 12) à» ¹¢ÒÍÔ¹¾Øµà¾×Íè ÃѺÊÑ­­Ò³ãË ª¿Ô µ Ã¨Õ ÊÔ àµÍÃ Ã¡Ñ ÉÒ ¢ ÍÁÙÅ·Ò§àÍÒµ ¾ØµäÇ áÁ Ç Ò¨Ðà¡Ô´¡ÒÃà»ÅÕè¹á»Å§·ÕèÍÔ¹¾ØµáÅ Ç¡çµÒÁ ¢Ò¹Õ·é Òí §Ò¹·ÕÅè ͨԡ 1 CLK (¢Ò·Õè 11) à» ¹¢ÒÍÔ¹¾ØµÊíÒËÃѺÃѺÊÑ­­Ò³¹ÒÌ ¡Ò à¾×Íè ¡Ãеع ãË ªÔ¿µ Ã¨Õ ÊÔ àµÍà àÅ×Íè ¹¢ ÍÁÙÅ ·íÒ§Ò¹´ ÇÂÊÑ­­Ò³¾ÑÅÊ ¢Íº¢Ò¢Ö¹é CLR (¢Ò·Õè 10) à» ¹¢ÒÍÔ¹¾ØµÊíÒËÃѺÃѺÊÑ­­Ò³à¾×Íè Å Ò§¢ ÍÁÙÅÀÒÂã¹ ªÔ¿µ Ã¨Õ ÊÔ àµÍà ãË à» ¹ 0 ·Ñ§é ËÁ´ ·íÒ§Ò¹·ÕÅè ͨԡ 0 ¢Ñ¹é µÍ¹¡ÒÃ㪠§Ò¹ 74HC595 ÁÕ´§Ñ ¹Õé 1. àÃÔÁè ´ Ç¡ÒÃàÍç¹àÍàºÔÅ 74HC595 ¡ ͹ â´Â¡Ò÷íÒãË ¢Ò OE à» ¹ 0 µÅÍ´àÇÅÒ·Õãè ª §Ò¹ 74HC595 2. » ͹ÊÑ­­Ò³à¾×Íè ÃÑ¡ÉÒ¢ ÍÁÙÅàÍÒµ ¾µØ â´Â» ͹ÊÑ­­Ò³Åͨԡ 1 ࢠҷբè Ò LATCH äÇ µÅÍ´àÇÅÒ·Õµè Í §¡ÒÃÃÑ¡ÉÒ¢ ÍÁÙÅàÍÒµ ¾µØ äÇ ËÃ×Í äÁ µÍ §¡ÒÃà»ÅÕÂè ¹á»Å§¢ ÍÁÙÅàÍÒµ ¾µØ 3. Ê §¢ ÍÁÙÅࢠҷբè Ò DI 4. Ê § ÊÑ­­Ò³¹ÒÌ ¡Òࢠҷբè Ò CLK ã¹¢³Ð¹Õ¢é Í ÁÙÅÀÒÂ㹪Կµ Ã¨Õ ÊÔ àµÍà ¢Í§ 74HC595 à¡Ô´¡ÒÃàÅ×Íè ¹¢ ÍÁÙÅáÅ Ç áµ Â§Ñ äÁ ʧ ÍÍ¡àÍÒµ ¾µØ ¨¹¡Ç Ò ·Õ¢è Ò LATCH ¨Ðä´ ÃºÑ Åͨԡ 0 Íѹ໠¹¡ÒáàÅÔ¡¡ÒÃÃÑ¡ÉÒ¢ ÍÁÙÅ·Ò§ àÍÒµ ¾µØ 5. àÁ×Íè àÅ×Íè ¹¢ ÍÁÙŨ¹¾Íã¨áÅ Ç ·íÒãË ¢Ò LATCH à» ¹ 0 ¢ ÍÁÙÅ·Õµè Í § ¡ÒèлÃÒ¡®ÍÍ¡ÁÒ·Õ¢è ÒàÍÒµ ¾µØ ·Ñ§é á»´¢Ò

Q1 1

16 +VCC

Q2 2

15

Q0

14

DI

13

OE

Q3 3 Q4 4

74HC595

Q5 5

12 LATCH

Q6 6

11

CLK

Q7

7

10

CLR

GND 8

9

QH


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

181

#define pin_latch0 bit_clear(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ pin_latch1 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD5*/ /*¡ ͹˹ Ò¹Õ¤é ÇáíÒ˹´ãË ¾Íà µ D à» ¹àÍÒµ ¾µØ ´ ǤíÒÊѧè

; */

poke(DDRD,0x38)

void write_data(int dat) { int m;

//

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

//

µÑÇá»Ãà¤Ò¹ àµÍà ÊÒí ËÃѺǹÃͺ¡ÒÃÊ §¢ ÍÁÙÅ 1 亵 ǹÃͺ¡ÃзíÒ¡ÅØÁ ¤íÒÊѧè ã¹ÅÙ» for 8 ¤Ãѧé

//

¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò Shift clock à» ¹Åͨԡ 0

{ pin_clk0;

if((dat & 0x01)==0x01){pin_dat1;} //

Ê §¢ ÍÁÙÅÍÍ¡ä»·Ò§¢Ò data ¢Í§ 74HC595

else{pin_dat0;} dat = dat>>1; pin_clk1;

àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 1 ¤Ãѧé // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò Shift clock à» ¹Åͨԡ 1 //

} pin_latch0;

//

sleep(0.01);

//

pin_latch1;

//

¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò Latch clock à» ¹Åͨԡ 0 ˹ ǧàÇÅÒàÅ硹 Í ¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò Latch clock à» ¹Åͨԡ 0

}

6.1.2 ¡Ò÷´Åͧ 1. µ Íǧ¨ÃµÒÁÃÙ»·Õè 6-1 2. à» ´â»Ãá¡ÃÁ Interactive C àª×Íè Áµ ͺÍà ´ AX-11 ࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁ ·Õè P6-1 µÑ§é ª×Íè ä¿Å test_74HC595.ic 3. ¡´»ØÁ Download à¾×Íè Ê §â»Ãá¡ÃÁŧ㹺Íà ´ AX-11 4. Ãѹâ»Ãá¡ÃÁâ´Â¡´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C 5. Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã LED ·Ñé§ 8 ´Ç§µÔ´-´ÑºÊÅѺ¡Ñ¹·Ø¡æ 1 ÇÔ¹Ò·Õ Ê Ç¹·ÕèâÁ´ÙÅ LCD º¹ºÍà ´ AX-11 ¨ÐáÊ´§¢ ÍÁÙÅ·ÕÊè § ä»ãË Â§Ñ 74HC595 â´Â¢ ͤÇÒÁ·Õáè Ê´§¨ÐÊÅѺ¡Ñ¹ÃÐËÇ Ò§ Data:0x0055 áÅÐ Data:0x00AA


182

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

AX-11 board

+5V

10

SS

MOSI

TxD IRQ

+5V

SCK

MISO RxD XIRQ GND

IRQ/SCI/SPI

14 12 11 13

16 CLR

7

Q7 %"0+#'# Q6 6 5 DI Q5 4 LATCH Q4 3 CLK Q3 2 Q2 1 OE Q1 15 Q0

220 x8 LED x8

8

ÃÙ»·Õè 6-1 ¡ÒÃàª×Íè Áµ ͺÍà ´ AX-11 ¡Ñº 74HC595 à¾×Íè ·´Åͧ¢ÂÒ¾Íà µàÍÒµ ¾µØ ¢Ñº LED 8 ª ͧ /*—————————————————————————————————————————————————————————————————*/ // Program : Shift Register // Description : AX-11 send data by to 74HC595 shift register // Filename : P0601-74HC595.ic // C compiler : Interactive C 4.21GA /*—————————————————————————————————————————————————————————————————*/ #define SPCR 0x1028 /* Define Register name of SPCR in address 0x1028 */ #define SPSR 0x1029 /* Define Register name of SPSR in address 0x1029 */ #define SPDR 0x102A /* Define Register name of SPDR in address 0x102A */ #define DDRD 0x1009 /* Define Register name of DDRD in address 0x1009 */ #define PORTD 0x1008 /* Define Register name of PORTD in address 0x1008*/ #define pin_dat1 bit_set(0x1008,0b00001000) /* Define command set bit PD3*/ #define pin_dat0 bit_clear(0x1008,0b00001000)/* Define command clear bit PD3*/ #define pin_clk1 bit_set(0x1008,0b00010000) /* Define command set bit PD4*/ #define pin_clk0 bit_clear(0x1008,0b00010000)/* Define command clear bit PD4*/ #define pin_latch1 bit_set(0x1008,0b00100000)/* Define command set bit PD5*/ #define pin_latch0 bit_clear(0x1008,0b00100000)/* Define command clear bit PD5*/

â»Ãá¡ÃÁ·Õè P6-1 â»Ãá¡ÃÁµÔ´µ ͡Ѻ 74HC595 à¾×Íè ¢ÂÒ¾Íà µàÍÒµ ¾µØ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

183

/*—————————————————————————— Main Program ————————————————————————*/ void main() { init_port(); // Set config. port by PD3,PD4,PD5 ==> output pin_latch1; while(1) // Infinite loop { write_data(0xAA); // Send data = 0xAA to 74HC595 printf(“Data: 0x%x\n”,0xAA); // Show send data sleep(1.0); // Delay 1 sec beep(); // Sound beep 1 time write_data(0x55); // Send data = 0x55 to 74HC595 printf(“Data: 0x%x\n”,0x55); // Show send data sleep(1.0); // Delay 1 sec beep(); // Sound beep 1 time } } /*—————————————————————————————————————————————————————————————————*/ /*—————————Initial Config. port PD3,PD4,PD5 output ———————————————*/ /*————————————————————————————————————————————————————————————————*/ void init_port() { poke(DDRD,0x38); // Config. Direction control } /*—————————————————————————————————————————————————————————————————*/ /*——————————————————— Write data to 74HC595 ——————————————————————*/ /*—————————————————————————————————————————————————————————————————*/ void write_data(int dat) { int m; // For keep counter loop for(m=0;m<8;m++) // For loop 8 time { pin_clk0; // set pin shift clock = 0 if((dat & 0x01)==0x01){pin_dat1;} // Compare bit data and define value else{pin_dat0;} dat = dat>>1; // Shift dat 1 time pin_clk1; // set pin shift clock = 1 } pin_latch0; // Set pin latch clock = 0 sleep(0.01); // Delay 10 ms pin_latch1; // Set pin latch clock = 1 } /*————————————————————————————— END —————————————————————————————*/

â»Ãá¡ÃÁ·Õè P6-1 â»Ãá¡ÃÁµÔ´µ ͡Ѻ 74HC595 à¾×Íè ¢ÂÒ¾Íà µàÍÒµ ¾µØ (ÁÕµÍ )


184

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´ãË ¢Ò PD3, PD4, PD5 ¢Í§¾Íà µ D à» ¹àÍÒµ ¾µØ ¨Ò¡¹Ñ¹é Ê §¢ ÍÁÙÅ 0xAA ãË ¡ºÑ 74HC595 áÅ Ç˹ ǧàÇÅÒ 1 ÇÔ¹Ò·Õ ¢ ÍÁÙÅ·ÕÊè § ä»¹Ñ¹é ¨Ð¶Ù¡¢ÑºÍÍ¡ä»Âѧ LED ·Õµè Í ¡ÑºàÍÒµ ¾µØ ¢Í§ 74HC595 áÊ´§¼Åà» ¹ 10101010 (àÃÕ§ÅíҴѺ¨Ò¡ºÔµ 7-ºÔµ 0) àÁ×Íè ¤ÃºàÇÅÒ 1 ÇÔ¹Ò·Õ â»Ãá¡ÃÁ¨ÐÊ § ¢ ÍÁÙÅ 0x55 ä»ãË ¡ºÑ 74HC595 ãËÁ áÅ Ç˹ ǧàÇÅÒÍÕ¡ 1 ÇÔ¹Ò·Õ ·íÒãË LED µÔ´-´Ñº µÃ§¢ ÒÁ¡Ñº¢ ÍÁÙÅ¡ ͹ ˹ Ò¹Õé â»Ãá¡ÃÁ¨Ðǹ·íҧҹ仵ÅÍ´ ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ÂѧáÊ´§¢ ÍÁÙÅ·Õè 74HC595 ä´ ÃºÑ ·Õâè Á´ÙÅ LCD ã¹ÃÙ» ẺàÅ¢°Ò¹ÊԺˡ´ Ç ·Ø¡¤ÃÑ§é ·Õàè »ÅÕÂè ¹¢ ÍÁÙŨÐÁÕàÊÕ§ÊÑ­­Ò³´Ñ§¢Ö¹é 1 ¤Ãѧé ˹ Ò·Õ¢è ͧ¿ §¡ ª¹Ñ áÅФíÒÊѧè ã¹â»Ãá¡ÃÁ¹ÕÁé ´Õ §Ñ µ Í仹Õé ¿ §¡ ª¹Ñè init_port 㪠àµÃÕÂÁ¡ÒÃãË ¾Íà µ D ¾Ã ÍÁÊíÒËÃѺ¡Ò÷íÒ§Ò¹ ¿ §¡ ª¹Ñè write_dat 㪠ʧ ¢ ÍÁÙÅ 1 亵 (8 ºÔµ) â´ÂÁÕµÇÑ á»Ã dat ÊíÒËÃѺÃѺ¢ ÍÁÙÅ·ÕÊè § ¼ ҹࢠÒÁÒ áŠǹíÒ¢ ÍÁÙŹѹé ÁÒÊà ҧÊÑ­­Ò³à§×Íè ¹ä¢ã¹¡ÒÃÊ §áººÍ¹Ø¡ÃÁãË 74HC595 ·ÕÅкԵ â´ÂàÃÔÁè ¨Ò¡ºÔµ¹ÑÂÊíҤѭ µèÒí ÊØ´ (LSB) ¨¹¤Ãº 8 ºÔµ ¤íÒÊѧè poke(DDRD,0x38); 㪠µ´Ô µ ͡ѺÃÕ¨ÊÔ àµÍà DDRD ÀÒÂã¹ 68HC11 à¾×Íè à¢Õ¹¢ ÍÁÙÅ¡íÒ˹´ ·ÔÈ·Ò§¢Í§¢Ò¾Íà µ D â´Âã¹·Õ¹è ¡Õé Òí ˹´ãË ¢Ò PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ ·Õàè ËÅ×Íà» ¹ÍÔ¹¾Øµ

â»Ãá¡ÃÁ·Õè P6-1 â»Ãá¡ÃÁµÔ´µ ͡Ѻ 74HC595 à¾×Íè ¢ÂÒ¾Íà µàÍÒµ ¾µØ (¨º) +5V 16 Port D 68HC11 PD3 PD4 PD2 PD5

14 11

%"0+#'# DI

13

Q6 Q5 Q4

CLK

Q3

10 CLR 12

Q7

Q2

LATCH

Q1 Q0

OE

QH

7 6 5 4 3 2 1 15 9

8

+5V 16

%"0+#'# 14 11

13

Q6 Q5

DI

Q4

CLK

Q3

10 CLR 12

Q7

Q2

LATCH

Q1 Q0

OE

QH

7 6 5 4 3 2 1 15 9

8

ÃÙ»·Õè 6-2 µÑÇÍ ҧ¡ÒâÂÒ¨íҹǹ¾Íà µ àÍÒµ ¾µØ ¢Í§74HC595

Í ҧäáç´àÕ ¹×Íè §¨Ò¡ 74HC595 ÊÒÁÒöáŵ« ¢Í ÁÙÅ ä´ áÅÐÂѧÁÕ¢ÒàÍÒµ ¾µØ ÊíÒËÃÑºÊ §¢ ÍÁÙÅÍ͡Ẻ͹ءÃÁ´ Ç ·íÒãË ÊÒÁÒöµ ; ǧ 74HC595 à¾×èÍ¢ÂÒ¤ÇÒÁÊÒÁÒö㹠¡ÒÃÃѺ¢ ÍÁÙŨҡ 8 ºÔµà» ¹ 16, 24 ËÃ×Í 32 ºÔµ ËÃ×Íà¾ÔÁè ¤Ãѧé ÅÐ 8 ºÔµä´ äÁ è٠º ´Ñ§Ç§¨Ãà¾ÔÁè ¨íҹǹºÔµ¢Í§ªÔ¿µ Ã¨Õ ÊÔ àµÍà ·Õãè ª 74HC595 µÒÁÃÙ»·Õè 6-2 «Ö§è à» ¹¡ÒÃà¾ÔÁè ãË ÃºÑ ¢ ÍÁÙÅä´ ¨Ò¡ 8 à» ¹ 16 ºÔµ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

185

6.2 ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº MC14489 äÍ«Õ¢ºÑ LED µÑÇàÅ¢ 7 Ê Ç¹ 㹡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº MC14489 äÍ«Õ¢ºÑ LED µÑÇàÅ¢ 7 Ê Ç¹ ¨Ð㪠ÊÇ ¹àª×Íè Á µ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI ÀÒÂã¹ 68HC11 ·íÒ˹ Ò·Õ¹è Õé â´Â 68HC11 ·íÒ˹ Ò·Õàè » ¹ÍØ»¡Ã³ ÁÒÊàµÍÃ Ê Ç¹ MC14489 à» ¹ÍØ»¡Ã³ ÊàÅ¿ÃÍÃѺ¢ ÍÁÙÅáÅйíÒÁÒáÊ´§¼Å ã¹ÃÙ»·Õè 6-3 áÊ´§Ç§¨Ãàª×èÍÁµ Í 68HC11 ¡Ñº MC14489

6.2.1 ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ã¹¡ÒÃ㪠§Ò¹âÁ´ÙÅ SPI ¡ÒÃ㪠§Ò¹âÁ´ÙÅ SPI ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 ·Õàè » ¹µÑÇ»ÃÐÁÇżŢͧºÍà ´ AX-11 ÁÕÃ¨Õ ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ㹡Ò÷íÒ§Ò¹ÍÂÙ 4 µÑǤ×ÍÃÕ¨ÊÔ àµÍà SPCR, SPDR, SPSR áÅÐ DDRD «Ö觢Ñ鹵͹㹡ÒáíÒ˹´¤ Òà¾×èÍ㪠§Ò¹´Ñ§¹Õé 1. ¡íÒ˹´ãË ¢Ò¾Íà µ PD3/MOSI áÅÐ PD4/SCK à» ¹àÍÒµ ¾Øµà¾×èͶ Ò·ʹ¢ ÍÁÙÅáÅÐ ÊÑ­­Ò³¹ÒÌ ¡Ò 2. ૵ºÔµ SPE (ºÔµ 7 ¢Í§ÃÕ¨ÔÊàµÍà SPCR) à¾ÕèÍà» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SPI áÅÐ૵ºÔµ MSTR (ºÔµ 5 ¢Í§ÃÕ¨ÊÔ àµÍà SPCR) à¾×Íè ãË 68HC11 ·íÒ˹ Ò·Õàè » ¹ÍØ»¡Ã³ ÁÒÊàµÍà â´Â㪠¤Òí Êѧè poke(SPCR,0x50); 3. àÃÔèÁµ ¹¡Òö Ò·ʹ¢ ÍÁÙÅ´ Ç¡ÒÃà¤ÅÕÂà ºÔµ PD5/SS 4. à¢Õ¹¤íÒÊѧè 1 亵 ʧ ä»Âѧ MC14489 à¾×Íè ¡íÒ˹´ÃٻẺ¡ÒÃáÊ´§¼Å¢Í§ LED µÑÇàÅ¢ 7 Ê Ç¹ â´Âà¢Õ¹¢ ÍÁÙÅ·Õèµ Í§¡ÒÃŧ价ÕèÃÕ¨ÔÊàµÍà SPDR ´ ǤíÒÊÑè§ poke(SPDR,0xC1); Íѹ໠¹¡Òà Êѧè ãË MC14489 áÊ´§¼Å·Ø¡ËÅÑ¡ 5. µÃǨÊͺ¡ÒÃÊ §¢ ÍÁÙÅàÊÃç¨ÊÔ¹é ´ Ç¡ÒÃǹµÃǨÊͺºÔµá¿Å¡ SPIF(ºÔµ 7 ¢Í§ÃÕ¨ÊÔ àµÍà SPSR) Ç Ò¶Ù¡à«µáÅ ÇËÃ×ÍÂѧ ¶ Ò¡ÒÃÊ §¢ ÍÁÙÅàÊÃç¨ÊÔé¹ ºÔµá¿Å¡ SPIF ¨Ð¶Ù¡à«µ áÅШж١à¤ÅÕÂà â´ÂÍѵâ¹ÁѵÔàÁ×èÍàÃÕÂ¡Í Ò¹¤ ÒºÔµ¹Õé 6. ËÅѧ¨Ò¡µÃǨÊͺ¾ºÇ ÒºÔµá¿Å¡ SPIF ¶Ù¡à«µáÅ Ç ãË à«µºÔµ PD5/SS à¾×èÍÊÔé¹ÊØ´¡Òà ¶ Ò·ʹ¢ ÍÁÙÅ ÊÒÁÒö¹íÒ¢Ñ鹵͹·Ñé§ËÁ´¹Ñé¹ÁÒà¢Õ¹໠¹¿ §¡ ªÑ蹢ͧâ»Ãá¡ÃÁä´ ´Ñ§¹Õé #define SPCR 0x1028

/*á·¹¤ Ò SPCR ´ Ǥ ÒáÍ´à´ÃÊ 0x1028 */ #define SPSR 0x1029

/*á·¹¤ Ò SPSR ´ Ǥ ÒáÍ´à´ÃÊ 0x1029 */


186

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

#define SPDR 0x102A

/*á·¹¤ Ò SPDR ´ Ǥ ÒáÍ´à´ÃÊ 0x102A*/ #define DDRD 0x1009

/*á·¹¤ Ò DDRD ´ Ǥ ÒáÍ´à´ÃÊ 0x1009 */ #define PORTD 0x1008

/* á·¹¤ Ò PORTD ´ Ǥ ÒáÍ´à´ÃÊ 0x1008*/ void spi_init() { poke(DDRD,0x38); poke(SPCR,0x50);

áÅзíÒ˹ Ò·Õèà» ¹ÍØ»¡Ã³ ÁÒÊàµÍà enable_slave(); poke(SPDR,0xC1); while((peek(SPSR)& disable_slave(); } void enable_slave() {

¡íÒ˹´ãË ¢Ò¾Íà µ PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ // ૵ºÔµ SPE áÅÐ MSTR à¾×Í è à» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SPI

//

àÃÔÁè µ ¹¡Òö Ò·ʹ¢ ÍÁÙÅ // Ê §¤íÒÊѧ è ãË MC14489 áÊ´§¼Å·Ø¡ËÅÑ¡ 0x80)!=0x80); // ǹµÃǨÊͺ¡ÒÃ૵ºÔµ SPIF // ÊÔ¹ é ÊØ´¡Òö Ò·ʹ¢ ÍÁÙÅ //

bit_clear(PORTD,0b00100000);

//

à¤ÅÕÂà ºµÔ SS à¾×Íè àÃÔÁè µ ¹¡Òö Ò·ʹ¢ ÍÁÙÅ

//

૵ºÔµ SS à¾×Íè ÊÔ¹é ÊØ´¡Òö Ò·ʹ¢ ÍÁÙÅ

} void disable_slave() { bit_set(PORTD,0b00100000);

}

6.2.2 Êà ҧ¿ §¡ ª¹Ñè ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº MC14489 ´ ÇÂâ»Ãá¡ÃÁ Interactive C ¿ §¡ ªÑè¹Ê §¢ ÍÁÙÅ 1 亵 ä»Âѧ MC14489 void spi_send_byte(int dat) { poke(SPDR,dat);

//

Ê §¢ ÍÁÙÅ·ÕÃè ºÑ à¢ ÒÁÒ·Ò§¾ÒÃÒÁÔàµÍà dat ä»Âѧ MC14489

while((peek(SPSR)& 0x80)!=0x80); // }

ǹµÃǨÊÍºÇ ÒºÔµá¿Å¡ SPIF ¶Ù¡à«µËÃ×ÍÂѧ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

187

¡Ò÷íÒ§Ò¹¢Í§ MC14489

MC14489 ÁÕ¢Òµ Í㪠§Ò¹ 20 ¢Ò ˹ Ò·Õ¡è Òà ·íÒ§Ò¹¢Í§¢ÒÊÑ­­Ò³µ Ò§æ Ạ§ä´ ´§Ñ ¹Õé

f

1

20

g

e

2

19

h

18 DATA OUT VDD 3 1. ¢Ò·Õãè ª ¢ºÑ LED 14 ¢Ò : 㪠¢ºÑ à«¡àÁ¹µ 17 BANK 5 d 4 a ¶Ö§ f, ¢Ò h 㪠¢ºÑ ¨Ø´·È¹ÔÂÁ (dp) áÅÐ¢Ò BANK5MC14489 16 BANK 4 c 5 BANK1 µ ͡Ѻ¢Òà ÇÁËÃ×Í¢Ò¤ÍÁÁ͹¢Í§ LED 15 BANK 3 b 6 áµ ÅÐËÅÑ¡ â´Â¢Ò BANK5 ¨Ðà» ¹ËÅÑ¡ MSB áÅÐ 14 VSS a 7 ¢Ò BANK1 à» ¹ËÅÑ¡ LSB ÊØ´· Ò¤×Í¢Ò Rx 㪠µÍ 13 BANK 2 Rx 8 ¡ÑºµÑǵ Ò¹·Ò¹ÀÒ¹͡à¾×Íè ¡íÒ˹´¡ÃÐáÊàÍÒµ ¾µØ 12 DATA IN BANK 1 9 ¢Ò¹Õé ÁÕ » ÃÐ⪹ ã ¹¡Òê Ç ÂÅ´µÑ Ç µ Ò ¹·Ò¹¨í Ò ¡Ñ ´ 11 CLOCK ENABLE 10 ¡ÃÐáÊ·Õµè Í §µ ͡Ѻ LED à¹×Íè §¨Ò¡ËÒ¡¡íÒ˹´¤ Ò¡ÃÐ áÊàÍÒµ ¾µØ ãË àËÁÒÐÊÁáÅ Ç ¡çäÁ ¨Òí à» ¹µ ͧ㪠µÇÑ µ Ò¹ ·Ò¹ÀÒ¹͡¡íҨѴ¡ÃÐáÊãË LED ÍÕ¡ â´Â¤ Ңͧ ¡ÒèѴ¢Ò¢Í§ MC14489 äÍ«Õ¢ºÑ LED µÑÇàÅ¢ 7 Ê Ç¹ µÑǵ Ò¹·Ò¹áÅСÃÐáÊ·Õè㪠ÊÒÁÒöËÒä´ ¨Ò¡¡ÃÒ¿ 5 ËÅѡẺÁÑŵÔà¾Åç¡« ·µÕè ´Ô µ ÍẺ SPI Rx áÅÐäÁ ¤Çõ Í¢Ò¹Õ¡é ºÑ ¡ÃÒÇ´ â´ÂµÃ§

35

¡ÃÐáʢѺÊÙ§ÊØ´ (iOH) : mA

2. ¢Ò¢ÂÒ¡ÒÃáÊ´§¼Å : ÁÕ 2 ¢Ò¤×Í DATA IN áÅÐ DATA OUT 㪠µÍ à ÇÁ¡ÑºäÍ«Õ MC14489 µÑÇÍ×è¹ à¾×èÍà¾ÔèÁ¨íҹǹËÅѡ㹡ÒÃáÊ´§¼Å â´Â ÊÒÁÒöµ ; ǧẺ¤ÒÊà¤´ä´ ¶§Ö 6 µÑÇ ¨Ö§ÊÒÁÒö áÊ´§¼Åä´ Ê§Ù ÊØ´¶Ö§ 30 ËÅÑ¡ 㹡óշãÕè ª MC14489 à¾Õ§µÑÇà´ÕÂÇ Êͧ¢Ò¹Õ¨é ÐäÁ ä´ ãª §Ò¹

30 25

¾Ô¨ÒóҷÕèä¿àÅÕé§ +5V ¡ÃÐáʢѺÁÕ¤ Ò¼Ô´¾ÅÒ´ä´ 15%

20 15 10

5 3. ¢ÒµÔ´µ ÍẺ SPI : ÁÕ 3 ¢Ò¤×Í DATAIN, 400 800 1.2k 1.6k 2k 2.4k 2.8k 3.2k 3.6k 4k CLOCK áÅÐ ENABLE â´Â¢Ò DATAIN ¨Ð㪠·§Ñé ¤ ҢͧµÑǵ Ò¹·Ò¹ÀÒ¹͡ (Rx) : Ω ÃѺ¢ ÍÁÙÅẺ SPI áÅÐ㪠µ ; ǧ¡Ñº MC14489 µÑÇÍ×è¹ Ê Ç¹¢Ò CLOCK 㪠ÃѺÊÑ­­Ò³¹ÒÌ ¡Òà¾×èÍ ¡ÃÒ¿áÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§¡ÃÐáʢѺ LED ¡íÒ˹´¨Ñ§ËÇСÒ÷íÒ§Ò¹ áÅÐ¢Ò ENABLE à» ¹ ¡ÑºµÑǵ Ò¹·Ò¹¨íÒ¡Ñ´¡ÃÐáÊ·Õµè Í ¡Ñº¢Ò Rx ¢Í§ ÍÔ¹¾ØµÊíÒËÃѺàÅ×Í¡µÔ´µ ͡ѺäÍ«Õ MC14489 äÍ«Õ MC14489 ÃٻẺ¡ÒÃáÊ´§¼Å MC14489 ÊÒÁÒöàÅ× Í ¡ÃÙ » Ẻ¢Í§¡Òà áÊ´§¼ÅáÅТ ͤÇÒÁÍÍ¡·Ò§ LED ä´ 3 Ẻ Ẻ·Õè 1 áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡµÑ§é áµ 0-F Ẻ·Õè 2 áÊ´§¢ ͤÇÒÁµÑÇÍÑ¡ÉþÔàÈÉ


188

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ENABLE CLOCK DATA IN

1

MSB C7

2

C6

3

C5

4

C4

5

C3

6

C2

7

8

LSB C0

C1

"0" = âËÁ´¾Åѧ§Ò¹µíèÒ (äÁ ÁÕ¡ÒÃáÊ´§¼Å) à» ¹Ê¶Ò¹Ð·Õèà¡Ô´¢Öé¹ËÅѧ¨Ò¡à¾ÒàÇÍà Í͹ÃÕ૵ "1" = âËÁ´·íÒ§Ò¹»¡µÔ ºÔµ¤Çº¤ØÁËÅÑ¡·Õè 1 (ầ¡ 1) : "0" áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡ "1" ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ C6 ºÔµ¤Çº¤ØÁËÅÑ¡·Õè 2 (ầ¡ 2) :

"0" áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡ "1" ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ C6

ºÔµ¤Çº¤ØÁËÅÑ¡·Õè 3 (ầ¡ 3) :

"0" áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡ "1" ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ C6

ºÔµ¤Çº¤ØÁËÅÑ¡·Õè 4 (ầ¡ 4) :

"0" áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡ "1" ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ C7

ºÔµ¤Çº¤ØÁËÅÑ¡·Õè 5 (ầ¡ 5) :

"0" áÊ´§µÑÇàÅ¢°Ò¹ÊԺˡ "1" ¢Öé¹ÍÂÙ ¡Ñº¡ÒáíÒ˹´·ÕèºÔµ C7

"0" = äÁ ÁÕ¡ÒöʹÃËÑÊ "1" = ¶Í´ÃËÑÊáÊ´§µÑÇÍÑ¡ÉþÔàÈÉÊíÒËÃѺËÅÑ¡·Õè 1-3 "0" = äÁ ÁÕ¡ÒöʹÃËÑÊ "1" = ¶Í´ÃËÑÊáÊ´§µÑÇÍÑ¡ÉþÔàÈÉÊíÒËÃѺËÅÑ¡·Õè 4 áÅÐ 5

(¡) ÃٻẺ¢ ÍÁÙŢͧÃÕ¨ÔÊàµÍà ¡íÒ˹´¡Ò÷íÒ§Ò¹ (Configuration register) ENABLE CLOCK DATA IN

1

MSB D23

2

D22

3

D21

4

D20

5

D19

6

D18

7

D17

8

D16

¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµ ¢Í§ËÅÑ¡·Õè 5 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1

9

D15

10

D14

11

D13

12

D12

¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµ ¢Í§ËÅÑ¡·Õè 4

= àÍÒµ ¾Øµ h ¢Í§·Ø¡ËÅÑ¡äÁ ÁÕ¡ÒÃáÊ´§¼Å = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 1 = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 2 = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 3 = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 4 = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 5 = áÊ´§àÍÒµ ¾Øµ h ¢Í§ËÅÑ¡·Õè 1 áÅÐ 2 = áÊ´§àÍÒµ ¾Øµ h ¢Í§·Ø¡ËÅÑ¡

13

D11

14

D10

15

D9

16

D8

¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµ ¢Í§ËÅÑ¡·Õè 3

17

D7

18

D6

19

D5

20

D4

¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµ ¢Í§ËÅÑ¡·Õè 2

21

D3

22

D2

23

D1

24

LSB D0

¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµ ¢Í§ËÅÑ¡·Õè 1

ºÔµ LSB ¢Í§¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµã¹ËÅÑ¡·Õè 1 ¤×Í ºÔµ D0 ºÔµ LSB ¢Í§¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµã¹ËÅÑ¡·Õè 2 ¤×Í ºÔµ D4 ºÔµ LSB ¢Í§¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµã¹ËÅÑ¡·Õè 3 ¤×Í ºÔµ D8 ºÔµ LSB ¢Í§¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµã¹ËÅÑ¡·Õè 4 ¤×Í ºÔµ D12 ºÔµ LSB ¢Í§¢ ÍÁÙÅáÊ´§¼Å 4 ºÔµã¹ËÅÑ¡·Õè 5 ¤×Í ºÔµ D16

"0" = ËÃÕè LED áÊ´§¼Å "1" = ¢Ñº LED áÊ´§¼ÅÍ ҧàµçÁ·Õè

(¢) ÃٻẺ¢ ÍÁÙŢͧÃÕ¨ÔÊàµÍà áÊ´§¼Å (Display register)

ÃٻẺ¢ ÍÁÙÅ·Õãè ª 㹡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹áÅÐáÊ´§¼Å¢Í§äÍ«Õ MC14489 Ẻ·Õè 3 áÊ´§¢ ͤÇÒÁ¼ Ò¹·Ò§à«¡àÁ¹µ d,c,b,a ෠ҹѹé ÊÒÁÒö¹íÒä»ãª ¢ºÑ à¤Ã×Íè §ËÁÒ¾ÔàÈÉ ºÒ§Í ҧ ઠ¹ à¤Ã×Íè §ËÁÒ + ËÃ×Í - à» ¹µ ¹ ¡ÒÃàÅ×Í¡ÃٻẺáÊ´§¼ÅÊÒÁÒöàÅ×Í¡ä´ ¨Ò¡ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Ò÷íÒ§Ò¹ËÃ×Í Configuration register ã¹¢³Ð·Õ¡è ÒÃàÅ×Í¡µÑÇÍÑ¡ÉÃáÅСíÒ˹´¨Ø´·È¹ÔÂÁàÅ×Í¡ä´ ¨Ò¡ÃÕ¨ÊÔ àµÍà áÊ´§¼ÅËÃ×Í Display register ¡ÒÃ㪠§Ò¹ MC14489 㹡ÒÃàÃÔÁè µ ¹ãª §Ò¹ MC14489 ¹Ñ¹é µ ͧ¡íÒ˹´ÃٻẺ¡ÒÃáÊ´§¼Å¡ ͹ â´Âà¢Õ¹¢ ÍÁÙÅä»·ÕÃè ¨Õ ÊÔ àµÍà ¡íÒ˹´¡Ò÷íÒ§Ò¹ ¡ÒõԴµ ͡ѺÃÕ¨ÊÔ àµÍà µÇÑ ¹Õ¨é Ð㪠ʭ Ñ ­Ò³¹ÒÌ ¡Ò 8 ÅÙ¡ ËÅѧ¨Ò¡·Õ¢è Ò ENABLE à» ¹ 0 (㹡óշãÕè ª §Ò¹ MC14489 à¾Õ§µÑÇà´ÕÂÇ) â´ÂÊÑ­­Ò³¹ÒÌ ¡ÒÅÙ¡áá¨Ðà» ¹¢ ÍÁÙŢͧºÔµ MSB ¢ ÍÁÙźԵ C7-C1 à» ¹¢ ÍÁÙÅ·Õãè ª ¡Òí ˹´ÃٻẺ¡ÒÃáÊ´§¼Å Ê Ç¹¢ ÍÁÙźԵ C0 㪠»´ à» ´¡ÒÃáÊ´§¼Å·Ò§àÍÒµ ¾µØ â´Â ¶ ÒºÔµ C0 à» ¹ 0 ¨Ð·íÒãË ¢ÒàÍÒµ ¾Øµ a-h à» ¹ 0 áÅÐࢠÒÊÙ âËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹«Öè§à» ¹¡Òû ´¡ÒÃ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C ¢ ÍÁÙÅÊíÒËÃѺ¡ÒÃáÊ´§¼Å ¡ÒÃáÊ´§¼Å¢Í§ LED µÑÇàÅ¢ 7 Ê Ç¹ ¢ ÍÁÙÅàÅ¢°Ò¹Êͧ ¢ ÍÁÙÅ ÍÑ¡ÉþÔàÈÉ (LSB) µÑÇàÅ¢°Ò¹ÊԺˡ àÅ¢°Ò¹ÊԺˡ (MSB) ,! D2 D1 ,

¡ÒÃáÊ´§¼Å ¼ ҹૡàÁ¹µ d

c

b

a

!

"

#

$

%

&

'

)

*

+

,

-

.

µÒÃÒ§áÊ´§ÃٻẺ¡ÒÃáÊ´§¼Å¢Í§äÍ«Õ MC14489

l

189

áÊ´§¼Å áµ ¶Ò ºÔµ C0 à» ¹ 1 ¨Ðà» ¹¡ÒÃáÊ´§¼Å »¡µÔ ËÅѧ¨Ò¡¹Ñ¹é ¨Ö§¡íÒ˹´µÑÇÍÑ¡ÉÃáÅÐËÅÑ¡¢Í§¨Ø´ ·È¹ÔÂÁ·ÕÃè ¨Õ ÊÔ àµÍà áÊ´§¼Åµ Íä» ÊÑ­­Ò³¹ÒÌ ¡Ò·Õãè ª ¹ÁÕé ·Õ §Ñé ÊÔ¹é 24 ÅÙ¡ËÃ×Í 3 亵 â´Âã¹áµ ÅÐ亵 ¨ÐẠ§ÍÍ¡à» ¹ 2 ¹ÔºàºÔÅ áµ ÅйԺàºÔźÃÃ¨Ø¢Í ÁÙÅ 1 ¢ ÍÁÙÅ ã¹¹ÔºàºÔÅáá¢Í§äºµ ·Õè˹Öè§ãª ¡íÒ˹´¤ÇÒÁÊÇ Ò§¢Í§ LED ·Ò§àÍÒµ ¾Øµ áÅСÒõԴ´Ñº¢Í§¨Ø´ dp Ç Òµ ͧ¡ÒÃãË áÊ´§¼Å·Õè ËÅÑ¡ã´ËÃ×ÍäÁ áÊ´§àÅÂËÃ×ÍáÊ´§ã¹·Ø¡ËÅÑ¡ Ê Ç¹ ¢ ÍÁÙÅã¹¹ÔºàºÔÅ·ÕèÊͧ¢Í§äºµ áá¨Ðà» ¹¢ ÍÁÙŵÑÇ ÍÑ¡É÷Õãè ª áÊ´§ã¹ËÅÑ¡ËÃ×Íầ¡ ·Õè 5 ¨Ò¡¹Ñ¹é ¢ ÍÁÙÅ ã¹¹ÔºàºÔŶѴ仡ç¨Ðà» ¹¢ ÍÁÙÅ㹡ÒÃáÊ´§¼Å¢Í§ËÅÑ¡ ·Õè 4,3,2,1 µÒÁÅíҴѺ


190

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¿ §¡ ªÑè¹á»Å§àÅ¢¨íҹǹàµçÁà» ¹¢ ÍÁÙÅáÊ´§¼Å·Õè LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ void display_segment(int dat) {

㪠à¡çº¢ ÍÁÙÅ㹡ÒÃá»Å§¤ Ңͧ // LED µÑÇàÅ¢ 7 Ê Ç¹ËÅÑ¡·Õè 1, 2 áÅÐ3 buf3 = dat/100; // à¡çº¢ ÍÁÙŵÑÇàÅ¢ËÅÑ¡Ã Í buf2 = (dat%100)/10; // à¡çº¢ ÍÁÙŵÑÇàÅ¢ËÅÑ¡ÊÔº buf1 = (dat%100)%10; // à¡çº¢ ÍÁÙŵÑÇàÅ¢ËÅѡ˹ Ç enable_slave(); // àÃÔèÁµ ¹¡Òö Ò·ʹ¢ ÍÁÙÅ poke(SPDR,0xF5); // Ê §¤íÒÊѧ è ãË MC14489 áÊ´§¼Å·Ø¡ËÅÑ¡áÅÐàµçÁ¡íÒÅѧ while((peek(SPSR)& 0x80)!=0x80); // ǹµÃǨÊͺ¡ÒÃ૵ºÔµ SPIF poke(SPDR,buf3); // Ê §¢ ÍÁÙÅËÅÑ¡Ã ÍÂä»Âѧ MC14489 while((peek(SPSR)& 0x80)!=0x80); // ǹµÃǨÊͺ¡ÒÃ૵ºÔµ SPIF poke(SPDR,(buf2<<4)|buf1); // Ê §¢ ÍÁÙÅËÅÑ¡ÊÔºáÅÐËÅѡ˹ ÇÂä»Âѧ MC14489 while((peek(SPSR)& 0x80)!=0x80); // ǹµÃǨÊͺ¡ÒÃ૵ºÔµ SPIF disable_slave(); // ÊÔ¹ é ÊØ´¡Òö Ò·ʹ¢ ÍÁÙÅ

int buf1,buf2,buf3;

//

}

6.2.3 ¡Ò÷´Åͧ 1. µ Íǧ¨ÃµÒÁÃÙ»·Õè 6-3 2. à» ´â»Ãá¡ÃÁ Interactive C àª×Íè Áµ ͺÍà ´ AX-11 ࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁ ·Õè P6-2 µÑ§é ª×Íè ä¿Å spi_mc14489.ic 3. ¡´»ØÁ Download à¾×Íè Ê §â»Ãá¡ÃÁŧ㹺Íà ´ AX-11 4. Ãѹâ»Ãá¡ÃÁâ´Â¡´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C 5. ·´ÅͧËÁع»ØÁ KNOB º¹ºÍà ´ AX-11 Êѧࡵ¡ÒÃáÊ´§¼Å¢Í§ LED µÑÇàÅ¢ 7 Ê Ç¹ àÁ×èÍËÁع»Ø Á KNOB ¨Ðà» ¹¡ÒÃÊ §¤ Òáç´Ñ¹ÍйÒÅÍ¡ä»ãË 68HC11 ¨Ò¡¹Ñé¹ 68HC11¨Ð á»Å§ÊÑ­­Ò³áç´Ñ¹à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ¢¹Ò´ 8 ºÔµ «Ö§è ÁÕ¤Ò ÍÂÙà ÐËÇ Ò§ 0-255 (0x00-0xFF) áÅ ÇÊ §¢ ÍÁÙÅ ¹Ñ¹é ä»Âѧ MC14489 à¾×Íè ãË áÊ´§¼Å¡ÒÃá»Å§áç´Ñ¹ÍÍ¡ÁÒ ´Ñ§¹Ñ¹é LED µÑÇàÅ¢ 7 Ê Ç¹·Ñ§é ÊÒÁËÅÑ¡ ¨ÐáÊ´§¤ ÒµÑÇàÅ¢ 0-255 µÒÁ¡ÒÃà»ÅÕÂè ¹á»Å§·Õàè ¡Ô´¢Ö¹é ¨Ò¡¡ÒÃËÁع»ØÁ KNOB º¹ºÍà ´ AX-11


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

a

3

b c

SS

TxD IRQ

+5V

SCK

12

MISO RxD XIRQ

10 11

GND

IRQ/SCI/SPI

191

Common cathode LED 7-segment x3

+5V

AX-11 board

MOSI

l

8

MC14489 DI ENABLE CLK

d e f g h

BANK3

Rx

BANK2

510

BANK1

7

a

6

b

5

c

4

d

3

e

2

f

1

g

15

dp

15

DSP3

com

DSP2

com

DSP1

com

13 9

14

ÃÙ»·Õè 6-3 ǧ¨Ãàª×Íè Áµ ͺÍà ´ AX-11 ¡ÑºäÍ«Õ MC14489 à¾×Íè ¢Ñº LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ /*——————————————————————————————————————————————————————————————————————————*/ // Program : Connect to MC14489 7-segment driver display // Description : Display A/D value from knob potentiometer give // : MC14489 drive 7-segment 3 digit by SPI communication // Filename : spi_mc14489.ic // C compiler : Interactive C 4.21GA /*——————————————————————————————————————————————————————————————————————————*/ #define SPCR 0x1028 /* Define Register name of SPCR in address 0x1028 */ #define SPSR 0x1029 /* Define Register name of SPSR in address 0x1029 */ #define SPDR 0x102A /* Define Register name of SPDR in address 0x102A */ #define DDRD 0x1009 /* Define Register name of DDRD in address 0x1009 */ #define PORTD 0x1008 /* Define Register name of PORTD in address 0x1008*/ /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————————————— Main Program ————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void main() { spi_init(); // Initial SPI function while(1) // Infinite loop { display_segment(knob()); // Display A/D value from knob } } /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————————— Function setup SPI —————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void spi_init() { poke(DDRD,0x38); // Config Direction control poke(SPCR,0x50); // Set bit SPE(SPI enable) enable_slave(); // Enable connect slave

â»Ãá¡ÃÁ·Õè P6-2 â»Ãá¡ÃÁÊíÒËÃѺ㪠§Ò¹ MC14489 ¢Ñº LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ (ÁÕµÍ )


192

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

poke(SPDR,0xC1); // Enable decode all segments in normal mode while((peek(SPSR)& 0x80)!=0x80); // Check bit flag set(SPIF) disable_slave(); // Disable connect slave } /*—————————————————— Function Send data by SPI mode —————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void spi_send_byte(int dat) { poke(SPDR,dat); // Send data to SPI line while((peek(SPSR)& 0x80)!=0x80); // Check bit flag set(SPIF) } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————— Function enable connect to slave —————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void enable_slave() { bit_clear(PORTD,0b00100000); // Load value “0” for bit PD5 } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————— Function disable connect to slave ————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void disable_slave() { bit_set(PORTD,0b00100000); // Load value “1” for bit PD5 } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————— Function convert and send data to display —————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void display_segment(int dat) { int buf1,buf2,buf3; // For keep data convert to decimal buf3 = dat/100; // Data show on digit3 buf2 = (dat%100)/10; // Data show on digit2 buf1 = (dat%100)%10; // Data show on digit1 enable_slave(); poke(SPDR,0xF5); while((peek(SPSR)& 0x80)!=0x80); poke(SPDR,buf3); while((peek(SPSR)& 0x80)!=0x80); poke(SPDR,(buf2<<4)|buf1); while((peek(SPSR)& 0x80)!=0x80); disable_slave();

// Enable connect // Config display //Read bit flag and // Config display //Read bit flag and // Config display //Read bit flag and // Enable connect

slave automatic clear automatic clear automatic clear slave

} /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————————————————— END ———————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/

â»Ãá¡ÃÁ·Õè P6-2 â»Ãá¡ÃÁÊíÒËÃѺ㪠§Ò¹ MC14489 ¢Ñº LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

193

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õàé ÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´¤ ÒÃкºàª×Íè Áµ ÍÍØ»¡Ã³ ͹ءÃÁËÃ×Í SPI ÀÒÂã¹ 68HC11 à¾×Íè 㪠㹡ÒÃÊ §¢ ÍÁÙÅä»ÂѧãË ¡ºÑ äÍ«Õ MC14489 «Ö§è ·íÒ˹ Òà» ¹ÍØ»¡Ã³ ÊàÅ¿à¾×Íè ¢Ñº LED µÑÇàÅ¢ 7 Ê Ç¹ â´Â¢ ÍÁÙÅ·Õ¹è Òí ä»áÊ´§¼Å¹Ñ¹é ä´ ÁÒ¨Ò¡¡ÒÃÍ Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ KNOB ¢Í§ºÍà ´ AX-11 ´Ñ§¹Ñ¹é ¤ Ò·Õ¹è Òí ä»áÊ´§¨ÐÍÂÙà ÐËÇ Ò§ 0 ¶Ö§ 255 ˹ Ò·Õ¢è ͧ¿ §¡ ª¹Ñè áÅФíÒÊѧè ã¹â»Ãá¡ÃÁ¹ÕÁé ´Õ §Ñ µ Í仹Õé ¿ §¡ ª¹Ñè enable_slave 㪠໠´¡ÒõԴµ ͡Ѻ MC14489 ´ Ç¡ÒÃà¤ÅÕÂà ºµÔ PD5/SS ¿ §¡ ª¹Ñè disable_slave 㪠»´ ¡ÒõԴµ ͡Ѻ MC14489 â´Â¡ÒÃ૵ºÔµ PD5/SS ¿ §¡ ª¹Ñè spi_send_byte 㪠ʧ ¢ ÍÁÙÅ 1 亵 ·Õàè ¡çºÍÂÙã ¹ÃÕ¨ÊÔ àµÍà SPDR ä»ãË ¡ºÑ ÍØ»¡Ã³ ÊàÅ¿áÅÐÃͨ¹ ¡Ç Ò¡ÒÃÊ §¢ ÍÁÙŨÐàÊÃç¨ÊÔ¹é ´ Ç¡ÒÃའҵÃǨÊͺºÔµá¿Å¡ SPIF (ºÔµá¿Å¡ SPIF à» ¹ºÔµ 7 ¢Í§ÃÕ¨ÊÔ àµÍà SPSR) Ç Ò૵ËÃ×ÍÂѧ áÅкԵá¿Å¡ SPIF ¨Ð¶Ù¡à¤ÅÕÂÃ ÍµÑ â¹ÁѵàÔ Á×Íè ÁÕ¡ÒÃÍ Ò¹¤ ÒºÔµ¹Õé «Ö§è â»Ãá¡ÃÁ¨ÐµÃǨ ÊͺºÔµá¿Å¡ SPIF ¹Õ´é Ç Â¤íÒÊѧè while((peek(SPSR)& 0x80)!=0x80); ¿ §¡ ª¹Ñè spi_init 㪠¡Òí ˹´Ë¹ Ò·Õ¢è ͧ¾Íà µáÅÐà» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ SPI ÃÇÁ·Ñ§é Ê §¤íÒÊÑ§è ¡íÒ˹´¡Òà ·íÒ§Ò¹ä»ãË ¡ºÑ MC14489 â´Â¡íÒ˹´ãË Á¡Õ ÒöʹÃËÑÊáÊ´§¼Å·Ø¡ËÅÑ¡áÅзíÒ§Ò¹ã¹âËÁ´»¡µÔ ¿ §¡ ª¹Ñè display_segment 㪠Ạ§¤ Òáµ ÅÐËÅÑ¡·ÕÍè Ò ¹ä´ ¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ KNOB áÅ ÇÊ §¢ ÍÁÙÅä»ãË MC14489 â´Â¢ ÍÁÙÅ¨Ð¶Ù¡Ê §ä»·Ñ§é ËÁ´ 3 亵 ¡ÒÃá»Ã¤ÇÒÁËÁÒ¨ж١Ạ§ÍÍ¡à» ¹ 6 ¡ÅØÁ (¡ÅØÁ ÅÐ 4 ºÔµ) ´Ñ§¹Õé ¡ÅØÁ ·Õè 1

à» ¹¢ ÍÁÙÅ¡íÒ˹´¡ÒÃáÊ´§¼Å¡ÒâѺ LED ·ÕËè ÅÑ¡µ Ò§æ

¡ÅØÁ ·Õè 2

à» ¹¢ ÍÁÙÅàÅ¢°Ò¹ÊÔº·Õ¹è Òí ä»áÊ´§¼Å¢Í§ËÅÑ¡·Õè 5

¡ÅØÁ ·Õè 3

à» ¹¢ ÍÁÙÅàÅ¢°Ò¹ÊÔº·Õ¹è Òí ä»áÊ´§¼Å¢Í§ËÅÑ¡·Õè 4

¡ÅØÁ ·Õè 4

à» ¹¢ ÍÁÙÅàÅ¢°Ò¹ÊÔº·Õ¹è Òí ä»áÊ´§¼Å¢Í§ËÅÑ¡·Õè 3

¡ÅØÁ ·Õè 5

à» ¹¢ ÍÁÙÅàÅ¢°Ò¹ÊÔº·Õ¹è Òí ä»áÊ´§¼Å¢Í§ËÅÑ¡·Õè 2

¡ÅØÁ ·Õè 6

à» ¹¢ ÍÁÙÅàÅ¢°Ò¹ÊÔº·Õ¹è Òí ä»áÊ´§¼Å¢Í§ËÅÑ¡·Õè 1

â»Ãá¡ÃÁ·Õè P6-2 â»Ãá¡ÃÁÊíÒËÃѺ㪠§Ò¹ MC14489 ¢Ñº LED µÑÇàÅ¢ 7 Ê Ç¹ 3 ËÅÑ¡ (¨º)


194

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

6.3 ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº DS1620 äÍ«ÕÇ´Ñ ÍسËÀÙÁáÔ ºº´Ô¨µÔ ÍÅ ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº DS1620 äÍ«ÕÇÑ´ÍسËÀÙÁÔµ ͧ㪠¡ÒÃÊ×èÍÊÒâ ÍÁÙÅẺÊͧ ·ÔÈ·Ò§ «Ö觵 Ò§¨Ò¡äÍ«Õ 2 µÑÇáá¤×Í 74Hc595 áÅÐ MC14489 «Öè§à» ¹¡ÒÃÊ §¢ ÍÁÙÅà¾Õ§·Ò§à´ÕÂÇ ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊíÒËÃѺ㹠DS1620 ¹Ñ鹨ÐÁÕ·Ñ駡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅ¡ÅѺä»Âѧ 68HC11 ´ Ç ´Ñ§áÊ´§Ç§¨Ã¡ÒÃàª×Íè Áµ Íã¹ÃÙ»·Õè 6-4 â´Â DS1620 ÁÕ¢ÒÊÑ­­Ò³·Õãè ª 㹡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅÍÂÙ 3 ¢Ò¤×Í 1. RST à» ¹¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³à» ´/» ´¡ÒõԴµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´Âµ ÍࢠҡѺ ¢Ò¾Íà µ PD5 ¢Í§ 68HC11 2. CLK ÃѺÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§¡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅã¹áµ ÅкԵ â´Âµ ÍࢠҡѺ¢Ò¾Íà µ PD4 ¢Í§ 68HC11 3. DQ ãª ÃºÑ áÅÐÊ §¢ ÍÁÙšѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÃ×ÍÍØ»¡Ã³ ͹×è ·ÕÁè ÒµÔ´µ Í´ Ç â´Âµ Íà¢ Ò ¡Ñº¢Ò¾Íà µ PD3 ¢Í§ 68HC11

6.3.1 à¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè Ê §¤íÒÊѧè ä»Âѧ DS1620 㹡ÒÃà¢Õ¹¢ ÍÁÙÅËÃ×ͤíÒÊÑ§è ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ DS1620 ¹Ñ¹é ¨ÐÁÕ¤Òí Êѧè ੾ÒÐ ÊíÒËÃѺ¤íÒ ÊÑ§è ·ÕÁè ¡Õ ÒÃ㪠§Ò¹º ÍÂ ä´ á¡ ¤íÒÊѧè á»Å§¤ ÒÍسËÀÙÁÔ ÁÕ¤Ò ¢ ÍÁÙÅ෠ҡѺ 0xEE áÅФíÒÊѧè Í Ò¹¤ ÒÍسËÀÙÁÔ ÁÕ¤Ò ¢ ÍÁÙÅ෠ҡѺ 0xAA ¢Ñ¹é µÍ¹ã¹¡ÒÃÊ §¤íÒÊѧè ä»Âѧ DS1620 ÊÒÁÒöÊÃØ»ä´ ´§Ñ ¹Õé +5V

AX-11 board 8 1 3

SS

MOSI

TxD IRQ

+5V

SCK

MISO RxD XIRQ GND

2

,5 $ DQ RST CLK 4

IRQ/SCI/SPI

ÃÙ»·Õè 6-4 ǧ¨Ãàª×Íè Áµ ͺÍà ´ AX-11 ¡ÑºäÍ«Õ DS1620 à¾×Íè ·´ÅͧÇÑ´ÍسËÀÙÁÔ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

DS1620 äÍ«ÕÇÑ´ÍسËÀÙÁÔẺ´Ô¨ÔµÍÅ

DQ

1

8

l

195

VDD

ÁÕ¤³ Ø ÊÁºÑµ·Ô ÊÕè Òí ¤Ñ­´Ñ§¹Õé 7 T CLK/CONV 2 ,5 $ ð l ÇÑ´ÍسËÀÙÁäÔ ´ µ§Ñé áµ -55 ¶Ö§ +125 C ¤ÇÒÁ 3 6 T RST ð ð 4 5 T GND ÅÐàÍÕ´ 0.5 C ËÃ×Í -67 ¶Ö§ +257 F ¤ÇÒÁÅÐàÍÕ´ ð 0.9 F ¡ÒèѴ¢Ò¢Í§äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ DS1620 l ¢ ÍÁÙÅáÊ´§¤ ÒÍسËÀÙÁÔ¢¹Ò´ 9 ºÔµáºº ¤Ô´à¤Ã×èͧËÁÒ ¢ ÍÁÙÅ´Ô¨µÔ ÍÅàÍÒµ ¾µØ ¢ ÍÁÙÅ´Ô¨µÔ ÍÅàÍÒµ ¾µØ ÍسËÀÙÁÔ (ðC) (àÅ¢°Ò¹Êͧ 9 ºÔµ) (àÅ¢°Ò¹ÊԺˡ) l 㪠àÇÅÒá»Å§¤ ÒÍسËÀÙÁàÔ » ¹¢ ÍÁÙÅ´Ô¨µ Ô ÍÅ +125 % 0 1111 1010 $FA ÀÒÂã¹ 1 ÇÔ¹Ò·Õ +25 % 0 0011 0010 $32 0.5 % 0 0000 0001 $01 l àª×Í è Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç ÂÊÒ 0 % 0 0000 0000 $00 ÊÑ­­Ò³ 3 ÊÒ -0.5 % 1 1111 1111 $1FF l ÁÕàÍÒµ ¾µ Ø ¾ÔàÈÉÊíÒËÃѺᨠ§Ê¶Ò¹ÐÍسËÀÙÁÔ -25 % 1 1100 1110 $1CE -55 % 1 1001 0010 $192 ÊÙ§áÅеèÓ¡ÇèÒ·Õè¡Ó˹´ ÃÇÁ·Ñé§àÍÒµì¾Øµ¢Í§¡ÒÃà»ÃÕºà·Õº¤ ÒÍسËÀÙÁÔ µÒÃÒ§áÊ´§ÅѡɳТ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ò¡¡ÒÃÇÑ´ ÃÒÂÅÐàÍÕ´¡Ò÷íÒ§Ò¹¢Í§áµ ÅТҴѧ¹Õé ÍسËÀÙÁ¢Ô ͧ DS1620 DQ (¢Ò 1) ¢Ò¢ ÍÁÙÅẺ͹ءÃÁà» ¹ä´ ·Ñé§ ÍÔ¹¾ØµáÅÐàÍÒµ ¾µØ CLK/CONV (¢Ò 2) ¢ÒÊÑ­­Ò³¹ÒÌ ¡Ò RST (¢Ò 3) ¢ÒÍÔ¹¾ØµÃÕ૵àÁ×Íè ·íÒ¡ÒÃàª×Íè Áµ ÍẺ 3 ÊÒ GND (¢Ò 4) ¢Ò¡ÃÒÇ´ TCOM (¢Ò 5) ¢ÒàÍÒµ ¾µØ ¢Í§¡ÒÃà»ÃÕºà·ÕºÍسËÀÙÁÔ TLOW (¢Ò 6) ¢ÒàÍÒµ ¾µØ ᨠ§ÍسËÀÙÁµÔ Òèí ¡Ç Ò¤ Ò·Õ¡è Òí ˹´äÇ THIGH (¢Ò 7) ¢ÒàÍÒµ ¾µØ ᨠ§ÍسËÀÙÁÊÔ §Ù ¡Ç Ò¤ Ò·Õ¡è Òí ˹´äÇ HIGH LOW COM

¡Òäíҹdzà¾×Íè á»Å§¤ ÒÍسËÀÙÁÀÔ ÒÂã¹ DS1620 ¨Ð¡íÒ˹´¤ÇÒÁÅÐàÍÕ´äÇ ·Õè 0.5ðC â´Â¢ ÍÁÙÅ·Õè ä´ à» ¹¢ ÍÁÙÅ¢¹Ò´ 9 ºÔµ Ẻ·Ù¤ÍÁ¾ÅÕàÁ¹µ Í Ò¹¤ ÒÍÍ¡ÁÒä´ ´Ç ¤íÒÊѧè Í Ò¹¤ ÒÍسËÀÙÁÔ ¶ Ò㪠¡ÒÃàª×Íè Áµ ÍẺ 3 ÊÒ ¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·Õäè ´ ¨Ð¶Ù¡Ê §ÍÍ¡·Ò§¢Ò DQ â´ÂÊ §ºÔµ LSB ¡ ͹ ¨¹¤Ãº ·Ñ§é 9 ºÔµ ¨Ò¡¹Ñ¹é Ê §ÊÑ­­Ò³ÃÕ૵ ·Ñ§é ¹Õàé ¾×Íè ãË àÃÔÁè µ ¹¡ÒÃÇÑ´áÅÐá»Å§¤ ÒÍسËÀÙÁµÔ Í ä» ¤íÒÊÑ§è ¢Í§ DS1620 Ạ§ÍÍ¡à» ¹ 2 Ê Ç¹¤×Í Ê Ç¹ÇÑ´ÍسËÀÙÁÔ áÅÐÊ Ç¹·íҧҹ໠¹à·Íà âÁʵѴËÃ×ÍÊ Ç¹µÃǨÊͺÍسËÀÙÁÔ ã¹áµ ÅФÃÑ§é ·Õàè ¢Õ¹¤íÒÊѧè ä»Âѧ DS1620 µ ͧ˹ ǧàÇÅÒÍ ҧ¹ Í 50 ÁÔÅÅÔÇ¹Ô Ò·Õ áµ ·¾Õè àÔ ÈÉáÅе ͧÃÐÁÑ´ ÃÐÇѧÍ ҧÂÔ§è ¤×Í àÁ×Íè à¢Õ¹¤íÒÊѧè ãË DS1620 ÇÑ´¤ ÒÍسËÀÙÁÔ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·¹Õè Òí ÁÒàª×Íè Áµ Íà¾×Íè Í Ò¹ ¤ ÒÍسËÀÙÁµÔ Í §ÃÍ 1 ÇÔ¹Ò·Õ ¨Ö§àÃÔÁè Í Ò¹¤ ÒÍسËÀÙÁ¨Ô Ò¡ DS1620 ÁÔઠ¹¹Ñ¹é ¤ Ò·ÕÍè Ò ¹ä´ ¨Ðà» ¹¤ Òà´ÔÁ¡ ͹˹ Ò


196

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¤íÒÊѧè

¡Ò÷íÒ§Ò¹

¤íÒÊѧè ÊíÒËÃѺá»Å§¤ ҢͧÍسËÀÙÁÔ Í Ò¹¤ ÒÍسËÀÙÁÔ·Õèä´ ¨Ò¡¡ÒÃá»Å§Å ÒÊØ´ Í Ò¹¤ ÒÍسËÀÙÁÔ ã¹ÃÕ¨ÊÔ àµÍà à¡çº¤ ÒÍسËÀÙÁÔ àµÃÕÂÁ¡ÒÃá»Å§¤ ÒÍسËÀÙÁÔ

àÃÔÁè µ ¹¡ÒÃá»Å§¤ Ò ËÂØ´¡ÒÃá»Å§¤ Ò

¢ ÍÁÙÅ

ʶҹР(㹡óÕàª×Íè Áµ ÍẺ 3 ÊÒÂ)

$AA

Í Ò¹¢ ÍÁÙÅ

$EE

ËÂØ´ÃÍ

$12

ËÂØ´ÃÍ

¤íÒÊÑ§è ¤Çº¤ØÁà·Íà âÁʵѴËÃ×ÍÊ Ç¹µÃǨÊͺÍسËÀÙÁÔ à¢Õ¹ TH

à¢Õ¹¢Íºà¢µÍسËÀÙÁ´Ô Ò ¹Ê٧ŧã¹ÃÕ¨ÊÔ àµÍà TH

$01

à¢Õ¹¢ ÍÁÙÅ

à¢Õ¹ TL

à¢Õ¹¢Íºà¢µÍسËÀÙÁ´Ô Ò ¹µíÒè ŧã¹ÃÕ¨ÊÔ àµÍà TL

$02

à¢Õ¹¢ ÍÁÙÅ

Í Ò¹ TH

Í Ò¹¢Íºà¢µÍسËÀÙÁ´Ô Ò ¹Ê٧ŧã¹ÃÕ¨ÊÔ àµÍà TH

$A1

Í Ò¹¢ ÍÁÙÅ

Í Ò¹ TL

Í Ò¹¢Íºà¢µÍسËÀÙÁÔ´ Ò¹µíèÒ¨Ò¡ÃÕ¨ÔÊàµÍà TL

$A2

à¢Õ¹¢ ÍÁÙÅ

à¢Õ¹ config

à¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà configuration

$0C

à¢Õ¹¢ ÍÁÙÅ

Í Ò¹ config

Í Ò¹¢ ÍÁÙŨҡÃÕ¨ÊÔ àµÍà configuration

$AC

Í Ò¹¢ ÍÁÙÅ

µÒÃÒ§áÊ´§ªØ´¤íÒÊÑ§è ¢Í§ DS1620 äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ

ÃÕ¨ÊÔ àµÍà ·ÊÕè Òí ¤Ñ­¢Í§ DS1620 1. ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¡Ò÷íÒ§Ò¹áÅÐáÊ´§Ê¶Ò¹Ð (Configuration register) DONE

THF

TLF

x

x

x

CPU

1SHOT

DONE - ºÔµáÊ´§Ê¶Ò¹Ð¢Í§¡ÒÃá»Å§¤ ÒÍسËÀÙÁÔ à«µà» ¹ 1 àÁ×Íè ¡ÒÃá»Å§¤ ÒÍسËÀÙÁàÔ ÊÃç¨ÊÁºÙó THF - á¿Å¡áÊ´§¤ ÒÍسËÀÙÁÊÔ §Ù ¡Ç Ò¾Ô¡´Ñ ·Õ¡è Òí ˹´ ૵໠¹ 1 àÁ×Íè ¤ ÒÍسËÀÙÁÊÔ §Ù ¡Ç Ò¾Ô¡´Ñ ·Õ¡è Òí ˹´ TLF - á¿Å¡áÊ´§¤ ÒÍسËÀÙÁµÔ Òèí ¡Ç Ò¾Ô¡´Ñ ·Õ¡è Òí ˹´ ૵໠¹ 1 àÁ×Íè ¤ ÒÍسËÀÙÁµÔ Òèí ¡Ç Ò¾Ô¡´Ñ ·Õ¡è Òí ˹´ ÊíÒËÃѺºÔµ THF áÅÐ TLFàÁ×Íè à» ¹ 1 ¨Ð¤§¤ Ò¹ÕÍé ÂÙµ ÅÍ´¨¹¡Ç ҨлŴä¿àÅÕÂé §ËÃ×Íà¢Õ¹¢ ÍÁÙÅ 0 ÁÒÂѧºÔµ¹Õé ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò ËÒ¡¡íÒ˹´ãË DS1620 ·íÒ§Ò¹ã¹âËÁ´à·Íà âÁʵѴ àÁ×Íè ÍسËÀÙÁ·Ô ÇÕè ´Ñ ä´ Ê§Ù ¡Ç Ò·Õµè §Ñé äÇ ºÔµ¹Õ¨é Ðà» ¹ 1 áÅÐËÅѧ¨Ò¡·Õ¹è Òí ¼Åä»ãª áÅ Ç µ ͧà¤ÅÕÂà ºµÔ ¹Õ´é Ç Â¡ÒÃà¢Õ¹¢ ÍÁÙÅ 0 CPU - ºÔµµÔ´µ Í«Õ¾ÂÕ Ù à«µà» ¹ 1 à¾×Íè àÅ×Í¡ãË DS1620 ·íÒ§Ò¹¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 1SHOT- ºÔµàÅ×Í¡ÅѡɳСÒÃÇÑ´¤ ÒÍسËÀÙÁÔ 0 - ¡íÒ˹´ãË DS1620 ·íÒ§Ò¹ÇÑ´ÍسËÀÙÁáÔ ÅÐá»Å§à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅÍ ҧµ Íà¹×Íè § 1 - ¡íÒ˹´ãË DS1620 ·íÒ§Ò¹ÇÑ´ÍسËÀÙÁáÔ ÅÐá»Å§à» ¹¢ ÍÁÙÅ 1 ¤Ãѧé 2. ÃÕ¨ÊÔ àµÍà ¤Ò ÍسËÀÙÁÔ (temperature register) à» ¹ÃÕ¨ÊÔ àµÍà ¢¹Ò´ 16 ºÔµ 㪠à¡çº¢ ÍÁÙÅ´Ô¨µÔ ÍÅ ¢Í§ÍسËÀÙÁ·Ô Õè DS1620 ÇÑ´ä´ áµ ¨Ð㪠¨ÃÔ§à¾Õ§ 9 ºÔµÅ ҧ෠ҹѹé Ê Ç¹ÍÕ¡ 7 ºÔµº¹·Õàè ËÅ×Íà» ¹ 0 ·Ñ§é ËÁ´ 3. ÃÕ¨ÊÔ àµÍà ¡Òí ˹´¾Ô¡´Ñ ÍسËÀÙÁÔ ÁÕ 2 µÑǤ×Í TH à» ¹ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙžԡ´Ñ ÍسËÀÙÁÊÔ §Ù áÅÐ TL à» ¹ÃÕ¨ÊÔ àµÍà à¡çº¢ ÍÁÙžԡ´Ñ ÍسËÀÙÁµÔ Òèí ¶Ù¡ãª àÁ×Íè DS1620 ·íÒ§Ò¹ã¹âËÁ´à·Íà âÁʵѴ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

197

ä´ÍÐá¡ÃÁàÇÅÒ¡Ò÷íÒ§Ò¹¢Í§ DS1620 ¢ ÍÁÙÅã¹áµ ÅкԵ»ÃÒ¡¯¢Ö¹é ·Õ¢è Ò DQ 㹨ѧËÇТͺ¢Òŧ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò·Õ¢è Ò CLK áÅФ§ÍÂÙ ¨¹¶Ö§¢Íº¢Ò¢Ö¹é ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Òã¹ÅÙ¡¶Ñ´ä» Ê Ç¹¡ÒÃà¢Õ¹¢ ÍÁÙÅà¡Ô´¢Ö¹é àÁ×Íè ¢Ò CLK à» ¹Åͨԡ 0 áÅÐ ¨Ðµ ͧ´íÒçºÔµ¢ ÍÁÙÅ·Õ·è Òí ¡ÒÃà¢Õ¹¹Ñ¹é ¨¹¡ÃÐ·Ñ§è ¢Ò CLK à» ¹Åͨԡ 1 DS1620 ¨Ö§¨ÐÊÒÁÒÃÃѺ¢ ÍÁÙÅã¹ ºÔµ¹Ñ¹é ä´ Í ҧÊÁºÙó RST

~ ~

~ ~

CLK D1

D2

D3

D4

D5

MSB

LSB

~ ~

D0

~ ~

DQ

MSB

¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ ¨Ò¡ DS1620

ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃÍ Ò¹¢ ÍÁÙŨҡ DS1620 äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ ÊÔé¹ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ RST

~ ~

~ ~

CLK D1

D2

D3

D4

D5

MSB

LSB

~ ~

D0

~ ~

DQ

MSB

¢ ÍÁÙÅ·Õèà¢Õ¹ä»Âѧ DS1620

ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»Âѧ DS1620 äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ âËÁ´¡Ò÷íÒ§Ò¹ ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ

âËÁ´¡Ò÷íÒ§Ò¹ ¢Í§ DS1620

¢ ÍÁÙÅ㹡Òö Ò·ʹ (àÃÔÁè ¨Ò¡ºÔµ LSB)

ÃÒÂÅÐàÍÕ´¢Í§¡Ò÷íÒ§Ò¹

Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ

ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ Ê §¢ ÍÁÙÅ ÃѺ¢ ÍÁÙÅ

$0C $00 $01 $50 $02 $14 $A1 $50 $A2 $50 $EE

äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè à¢Õ¹ Config ¡íÒ˹´ãË DS1620 ·íÒ¡ÒÃÇÑ´áÅÐá»Å§¤ ÒÍسËÀÙÁÍÔ Â Ò§µ Íà¹×Íè § äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè à¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà TH à¢Õ¹¢ ÍÁÙÅ¡íÒ˹´¢Íºà¢µÍسËÀÙÁ´Ô Ò ¹ÊÙ§ ෠ҡѺ +40 ðC äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè à¢Õ¹¢ ÍÁÙÅŧã¹ÃÕ¨ÊÔ àµÍà TL à¢Õ¹¢ ÍÁÙÅ¡íÒ˹´¢Íºà¢µÍسËÀÙÁ´Ô Ò ¹µíÒè ෠ҡѺ +10 ðC äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè Í Ò¹¢ ÍÁÙÅ TH ¨Ò¡ DS1620 DS1620 Ê §¢ ÍÁÙŢͧ TH ¡ÅѺä»äÁâ¤Ã¤Í¹â·ÃÅàÅÍà à¾×Íè µÃǨÊͺ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè Í Ò¹¢ ÍÁÙÅ TL ¨Ò¡ DS1620 DS1620 Ê §¢ ÍÁÙŢͧ TL ¡ÅѺä»äÁâ¤Ã¤Í¹â·ÃÅàÅÍà à¾×Íè µÃǨÊͺ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ʧ ¤íÒÊѧè àÃÔÁè µ ¹á»Å§¤ ÒÍسËÀÙÁÔ

µÒÃÒ§ÊÃØ»ÅѡɳСÒ÷íÒ§Ò¹áÅÐ¢Ñ¹é µÍ¹ã¹¡ÒõԴµ ͡Ѻ DS1620 äÍ«ÕÇ´Ñ ÍسËÀÙÁÔ


198

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

1. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1620 à» ¹Åͨԡ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙšѺ 68HC11 2. ¡íÒ˹´ãË ¢Ò¾Íà µ PD3, PD4 áÅÐ PD5 à» ¹¾Íà µàÍÒµ ¾µØ ´ ǤíÒÊѧè poke(DDRD,0x38); 3. à¢Õ¹¢ ÍÁÙÅä»Âѧ DS1620 ¡ÒÃÃѺ¢ ÍÁÙŨÐà¡Ô´¢Ö¹é 㹨ѧËÇТͺ¢Ò¢Ö¹é ¢Í§ÊÑ­­Ò³¹ÒÌ ¡Ò 4. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1620 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ ¨Ò¡¢Ñ¹é µÍ¹´Ñ§¡Å ÒǹíÒÁÒÊà ҧ¿ §¡ ª¹Ñè ¢Í§â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺà¢Õ¹¤íÒÊѧè ä»Âѧ DS1620 ª×Íè temp_write_command ä´ ´§Ñ ¹Õé #define pin_dat1 bit_set(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ pin_dat1 ´ ǤíÒÊѧè ૵ºÔµ PD3*/ #define pin_dat0 bit_clear(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ pin_dat0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD3*/ #define pin_clk1 bit_set(0x1008,0b00010000)

/*á·¹¤ÇÒÁËÁÒ pin_clk1 ´ ǤíÒÊѧè ૵ºÔµ PD4*/ #define pin_clk0 bit_clear(0x1008,0b00010000)

/* á·¹¤ÇÒÁËÁÒ pin_clk0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD4*/ #define pin_rst1 bit_set(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ pin_rst1 ´ ǤíÒÊѧè ૵ºÔµ PD5*/ #define pin_rst0 bit_clear(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ pin_rst0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD5*/ void temp_write_command(int command) { int m; poke(DDRD,0x38); for(m=0;m<8;m++) { pin_clk0;

µÑÇá»Ãà¤Ò¹ àµÍà ÊíÒËÃѺ¡Òö Ò·ʹ¢ ÍÁÙÅ // ¡íÒ˹´ãË ¢Ò¾Íà µ PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µ Ø // ǹÃͺ 8 ¤Ãѧ é à¾×Íè ¶ Ò·ʹ¤íÒÊѧè ä»Âѧ DS1620 //

//

¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 0 à¾×Íè àµÃÕÂÁÊà ҧ¾ÑÅÊ

if((command & 0x01)==0x01){pin_dat1;} // else{pin_dat0;}

Ê §¢ ÍÁÙÅä»Âѧ DS1620 àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 1 ¤ÃÑ§é ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 1 à¾×Íè Êà ҧ¾ÑÅÊ ¢Íº¢Ò¢Ö¹é

command = command>>1; pin_clk1; } }

//

//


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

199

6.3.2 à¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁ¨Ô Ò¡ DS1620 àÃÔÁè µ ¹´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙŤíÒÊѧè 0xEE à¾×Íè ãË DS1620 ÇÑ´áÅÐá»Å§¤ ÒÍسËÀÙÁÔ áÅ Çà¡çº¼Å¡Òà á»Å§äÇ ã¹ DS1620 ¨Ò¡¹Ñ¹é à¢Õ¹¢ ÍÁÙŤíÒÊѧè 0xAA ä»Âѧ DS1620 ÍÕ¡¤Ãѧé ˹֧è à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁ¨Ô Ò¡ DS1620 áÅ ÇÃÍÃѺ¢ ÍÁÙÅÍسËÀÙÁ«Ô §Öè ¨ÐÊ §ÍÍ¡ÁÒ 2 亵 ¢Ñ¹é µÍ¹ã¹¡ÒÃÊ §¤íÒÊѧè ÊÃØ»ä´ ´§Ñ ¹Õé 1. ¡íÒ˹´ãË ¢Ò PD3,PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ à¾×Íè à¢Õ¹¢ ÍÁÙŤíÒÊѧè ä»Âѧ DS1620 2. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1620 à» ¹Åͨԡ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙšѺ 68HC11 3. à¢Õ¹¤íÒÊѧè 0xAA ä»Âѧ DS1620 à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁÔ â´Â¡ ͹˹ Ò¹Õµé Í §à¢Õ¹¢ ÍÁÙŤíÒÊѧè 0xEE à¾×Íè ¡íÒ˹´ãË DS1620 ÇÑ´áÅÐá»Å§¤ ÒÍسËÀÙÁàÔ ÊÕ¡ ͹ ¤ÇÃÁÕÃÐÂÐàÇÅÒË Ò§¡Ñ¹Í ҧ¹ Í 1 ÇÔ¹Ò·Õ à¹×èͧ¨Ò¡ DS1620 µ ͧ¡ÒÃàÇÅÒ㹡ÒÃÇÑ´áÅÐá»Å§¤ ÒÍسËÀÙÁÔà» ¹¢ ÍÁÙÅ´Ô¨ÔµÍÅ 4. à»ÅÕÂè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ PD3 à» ¹ÍÔ¹¾Øµ à¾×Íè ÃÍÃѺ¢ ÍÁÙŨҡ DS1620 5. ǹÃѺ¢ ÍÁÙŨҡ DS1620 µÑ§é áµ ºµÔ 0 ¨¹¤Ãº 1 亵 áá â´Â¢ ÍÁÙÅ亵 áá¹Õàé » ¹¢ ÍÁÙÅ ÍسËÀÙÁÔ·Õèµ Í§¹íÒ仵դÇÒÁËÁÒ¡ ͹ ¨Ö§¨Ð¹íÒä»áÊ´§¼Åä´ Í ҧ¶Ù¡µ ͧ ËÅѧ¨Ò¡¹Ñé¹ÃÍÃѺ¢ ÍÁÙŠ亵 ·ÊÕè ͧ ¢ ÍÁÙÅ亵 ¹¨Õé ÐÃѺËÃ×ÍäÁ ¡äç ´ à¾ÃÒÐà» ¹Ê ǹ·Õáè ¨ §à¤Ã×Íè §ËÁÒ¤ ҢͧÍسËÀÙÁÇÔ Ò à» ¹ºÇ¡ ËÃ×Íź෠ҹÑé¹ à¹×èͧ¨Ò¡µÒÁ»¡µÔÍسËÀÙÁÔ·ÕèÇÑ´ÁÑ¡à» ¹ºÇ¡ 6. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1620 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒõԴµ ͡Ѻ DS1620 ¨Ò¡¢Ñ鹵͹´Ñ§¡Å ÒÇÊÒÁÒö¹íÒÁÒÊà ҧ¿ §¡ ªÑ蹢ͧâ»Ãá¡ÃÁ Interactive C ÊíÒËÃÑºÍ Ò¹¤ Ò ÍسËÀÙÁÔ¨Ò¡ DS1620 㹪×èÍ read_temp â´ÂàÁ×èÍÍ Ò¹¤ ÒÍسËÀÙÁÔ¨Ò¡ DS1620 ä´ áÅ Ç ¨Ð¹íÒä»à¡çº äÇ ã¹µÑÇá»ÃÍÐààtemp[0] áÅÐ temp[1] ´Ñ§¹Õé int temp[2]; void read_temp(void) {

/*µÑÇá»ÃÍÐààà¡çº¤ ÒÍسËÀÙÁÔ·ÕèÍ Ò¹ä´ ¨Ò¡ DS1620*/

µÑÇá»Ãà¤Ò¹ àµÍà ÊÒí ËÃѺǹÃÍºÊ §¢ ÍÁÙÅ 1 亵 áÅÐ˹ ǧàÇÅÒ temp_write_command(0xAA); // Ê §¤íÒÊѧ è Í Ò¹¤ ÒÍسËÀÙÁäÔ »Âѧ DS1620 poke(DDRD,0x30); // ¡íÒ˹´ãË PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µ Ø Ê Ç¹ PD3 à» ¹ÍÔ¹¾Øµ pin_clk1; // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 1 for(i=0;i<8;i++) // ǹÃͺ 8 ¤Ãѧ é à¾×Íè ÃѺ¢ ÍÁÙŨҡ DS1620 àÃÔÁè ¨Ò¡ºÔµ LSB ¡ ͹

int i,j;

//

{

¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 0 (peek(0x1008) & 0x08)>>3; // Í Ò¹¤ Ò¨Ò¡¢Ò DQ ¢Í§ DS1620

pin_clk0; j =

//


200

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C temp[0] = (temp[0]>>1)|(j<<7);

à¡çº¢ ÍÁÙÅ亵 áá·ÕÊè § ÁÒ¨Ò¡ DS1620 äÇ ·Õè temp[0] // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 1 //

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

//

ǹÃͺ 8 ¤Ãѧé à¾×Íè ÃѺ¢ ÍÁÙÅ亵 ·ÊÕè ͧ ¨Ò¡ DS1620

{

¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 0 (peek(0x1008) & 0x08)>>3; // Í Ò¹¢ ÍÁÙŨҡ¢Ò DQ ¢Í§ DS1620

pin_clk0; j =

//

temp[1] = (temp[1]>>1)|(j<<7); // pin_clk1;

//

à¡çº¢ ÍÁÙŢͧ亵 ·ÊÕè ͧ·ÕÍè Ò ¹¨Ò¡ DS1620 äÇ ·Õè temp[1] ¤íÒÊÑ§è ¤Çº¤ØÁ¢Ò CLK à» ¹Åͨԡ 1

} }

6.3.3 ¡Ò÷´Åͧ 1. µ Íǧ¨ÃµÒÁÃÙ»·Õè 6-4 2. à» ´â»Ãá¡ÃÁ Interactive C àª×Íè Áµ ͺÍà ´ AX-11 ࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁ ·Õè P6-3 µÑ§é ª×Íè ä¿Å ds1620.ic 3. ¡´»ØÁ Download à¾×Íè Ê §â»Ãá¡ÃÁŧ㹺Íà ´ AX-11 4. Ãѹâ»Ãá¡ÃÁâ´Â¡´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C 5. ·Õâè Á´ÙÅ LCD º¹ºÍà ´ AX-11 áÊ´§¼Å´Ñ§¹Õé Temp: xxx

C

â´Â·Õè xxx ¤×ÍÍسËÀÙÁ·Ô ÍÕè Ò ¹ä´ ¨Ò¡ DS1620


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

201

/*——————————————————————————————————————————————————————————————————————————*/ // Program : Read Temperature by DS1620 // Description : Read Temperature and show value on LCD module // Filenam : p0603-ds1620.ic // C compiler : Interactive C 4.21GA /*——————————————————————————————————————————————————————————————————————————*/ #define SPCR 0x1028 /* Define Register name of SPCR in address 0x1028 */ #define SPSR 0x1029 /* Define Register name of SPSR in address 0x1029 */ #define SPDR 0x102A /* Define Register name of SPDR in address 0x102A */ #define DDRD 0x1009 /* Define Register name of DDRD in address 0x1009 */ #define PORTD 0x1008 /* Define Register name of PORTD in address 0x1008*/ #define pin_dat1 bit_set(0x1008,0b00001000) /* Define command set bit MOSI*/ #define pin_dat0 bit_clear(0x1008,0b00001000) /* Define command clear bit MOSI*/ #define pin_clk1 bit_set(0x1008,0b00010000) /* Define command set bit SCK*/ #define pin_clk0 bit_clear(0x1008,0b00010000) /* Define command clear bit SCK*/ #define pin_rst1 bit_set(0x1008,0b00100000) /* Define command set bit SS*/ #define pin_rst0 bit_clear(0x1008,0b00100000) /* Define command clear bit SS*/ int temp[2]; /*Temp. buffer*/ /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————————————— Main Program —————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void main() { init_port(); // Set config. while(1) // Infinite loop { pin_rst1; // Set reset pin = 1 temp_write_command(0xEE); // Write command 0xEE to DS 1620 //(convert temp.) pin_rst0; // Clear reset pin = 0 pin_rst1; // Set reset pin = 1 sleep(0.2); pin_rst1; read_temp(); // Read temp recive 16 bit data from DS 1620 pin_rst0; // Set reset pin = 1 sleep(0.1); // Delay 1 sec display_temp(); // Display value temp on LCD module } } /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————— Function initial port output ——————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void init_port() { poke(DDRD,0x38); // Config port by MOSI,SCK,SS ==> output }

â»Ãá¡ÃÁ·Õè P6-3 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1620 à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁÔ (ÁÕµÍ )


202

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

/*——————————————————————————————————————————————————————————————————————————*/ /*——————————————————————— Function Read Temp. —————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void read_temp(void) { int i,j; // Kepp counter and buffer temp_write_command(0xAA); // Write command 0xAA to DS 1620(Read temp.) poke(DDRD,0x30); // Config Direction control for rtc_dat ==> input data from ds1620 pin_clk1; // Set clock pin = 1 for(i=0;i<8;i++) // For loop 8 time { pin_clk0; // Set clock pin = 0 j = (peek(0x1008) & 0x08)>>3; // Read data bit 3 address 0x1008 // and rotate right 3 time and keep to j temp[0] = (temp[0]>>1)|(j<<7); // Keep data bit by bit to temp[0] pin_clk1; // Set clock pin = 1 } for(i=0;i<8;i++) { pin_clk0; // Set clock pin = 0 j = (peek(0x1008) & 0x08)>>3; // Read data bit 3 address 0x1008 // and rotate right 3 time and keep to j temp[1] = (temp[1]>>1)|(j<<7); // Keep data bit by bit to temp[1] pin_clk1; // Set clock pin = 1 } } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function Send command to DS1620 ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void temp_write_command(int command) { int m; // Keep counter poke(DDRD,0x38); // Config direction control for // rtc_dat ==> output data to ds1302 for(m=0;m<8;m++) // For loop 8 time { pin_clk0; // Set clock pin = 0 if((command & 0x01)==0x01){pin_dat1;} // Compare bit data and define value else{pin_dat0;} command = command>>1; // Shift dat 1 time pin_clk1; // Set clock pin = 1 } }

â»Ãá¡ÃÁ·Õè P6-3 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1620 à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

203

/*——————————————————————————————————————————————————————————————————————————*/ /*—————————————— Function Display temp. on LCD module ————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void display_temp() { int buf_temp; // Keep temp. data to convert value buf_temp = temp[0]; // Load data temp. to buf_temp if((temp[0] & 0x01)==0x01) // Check value of temp = .5 ? { buf_temp = buf_temp>>1; // Convet to integer temp. printf(“Temp: %d.5 C\n”,buf_temp); // For temp .5 } else { buf_temp = buf_temp>>1; // Convet to integer temp. printf(“Temp: %d.0 C\n”,buf_temp); // For temp .0 } } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————————————————— END ——————————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ

àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´ãË PD3, PD4 áÅÐ PD5 à» ¹¢Ò¾Íà µàÍÒµ ¾µØ à¾×Íè à¢Õ¹¢ ÍÁÙŤíÒÊѧè ä»Âѧ DS1620 àÃÔÁè ¨Ò¡¢ ÍÁÙŤíÒÊѧè 0xEE à¾×Íè ¡íÒ˹´ãË DS1620 á»Å§¤ ÒÍسËÀÙÁÔ ËÅѧ¨Ò¡¹Ñ¹é Ç¹Í Ò¹¤ ÒÍسËÀÙÁÔ ·Ø¡æ 1 ÇÔ¹Ò·Õ ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙŤíÒÊѧè 0xAA áÅеÒÁ´ Ç¡ÒÃÍ Ò¹¢ ÍÁÙÅÍسËÀÙÁ·Ô Õè DS1620 Ê §ÁÒãË 16 ºÔµ (2 亵 ) â´Â¨Ðµ ͧà»ÅÕÂè ¹Ê¶Ò¹Ð¢Í§¢Ò PD3 ãË à» ¹ÍÔ¹¾Øµà¾×Íè ÃѺ¢ ÍÁØÅ¡ÅѺ¨Ò¡ DS1620 ´ Ç â´Â Ds1620 ¨ÐÊ §¢ ÍÁÙÅÍسËÀÙÁäÔ ºµ µÒèí ÁÒãË ¡Í ¹ áŠǵÒÁ´ Ç¢ ÍÁÙÅÍسËÀÙÁäÔ ºµ ʧ٠ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ ¨Ðá»Å§¤ Ò¢ ÍÁÙÅÍسËÀÙÁ·Ô äÕè ´ ÃºÑ ¨Ò¡ DS1620 ¡ ͹·Õ¨è йíÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ˹ Ò·Õ¢è ͧ¿ §¡ ª¹Ñè ·ÕÊè Òí ¤Ñ­ã¹â»Ãá¡ÃÁ¹ÕÁé ´Õ §Ñ ¹Õé ¿ §¡ ª¹Ñè init_port 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D 㹵͹àÃÔÁè µ ¹·íÒ§Ò¹ ¿ §¡ ª¹Ñè write_command 㪠à¢Õ¹¢ ÍÁÙŤíÒÊѧè 1 亵 (8 ºÔµ) ÁÕµÇÑ á»Ãª×Íè command ÁÒÃѺ¢ ÍÁÙÅ·ÕÊè § ¼ ҹࢠÒÁÒ áŠǹíÒ¢ ÍÁÙŹѹé ÁҨѴàµÃÕÂÁà¾×Íè Ê §ÍÍ¡ä»Âѧ DS1620 ã¹áººÍ¹Ø¡ÃÁ¤Ãѧé ÅкԵ â´ÂàÃÔÁè ¨Ò¡ ºÔµ¹ÑÂÊíҤѭµèÒí ÊØ´(LSB) ¨¹¤Ãº 8 ºÔµ ¿ §¡ ª¹Ñè read_temp 㪠ÍÒ ¹¢ ÍÁÙÅÍسËÀÙÁÔ 2 亵 ·Õè DS1620 Ê §ÁÒãË ËÅѧ¨Ò¡à¢Õ¹¢ ÍÁÙŤíÒÊѧè 0xAA ä»Âѧ DS1620 ¢ ÍÁÙÅ亵 áá·ÕÍè Ò ¹ä´ ¨Ò¡ DS1620 ¨Ðà¡çºäÇ ·µÕè ÇÑ á»Ã temp[0] «Ö§è ¨Ðµ ͧ¹íÒä»á»Å¤ÇÒÁ ËÁÒÂà¾×Íè ¹íÒä»áÊ´§¼Å´ Ç¿ §¡ ª¹Ñè display_temp ÍÕ¡·Í´Ë¹Ö§è

â»Ãá¡ÃÁ·Õè P6-3 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1620 à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁÔ (ÁÕµÍ )


204

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¿ §¡ ª¹Ñè display_temp 㪠á»Å¤ÇÒÁËÁÒ¢ͧ¤ ÒÍسËÀÙÁ·Ô ÍÕè Ò ¹ä´ ¨Ò¡ DS1620 â´Â¹íÒ¢ ÍÁÙÅÍسËÀÙÁ·Ô Õè à¡çºäÇ ã¹ temp[0] ÁÒá»Å¤ÇÒÁËÁÒ¡ ͹¹íÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD â´Â¡ÒÃá»Å¤ÇÒÁËÁÒÂÁÕ´§Ñ ¹Õé àÃÔÁè ¨Ò¡µÃǨÊͺºÔµ 0 Ç Òà» ¹ 1 ËÃ×Í 0 ¶ Òà» ¹ 1 ¨ÐáÊ´§¤ Ò¤ÇÒÁÅÐàÍÕ´¢Í§ÍسËÀÙÁ¶Ô §Ö 0.5 ͧÈÒà«Åà«ÕÂÊ áµ ¶Ò à» ¹ 0 ¨ÐäÁ áÊ´§¤ÇÒÁÅÐàÍÕ´ Ê Ç¹¤ ÒÍسËÀÙÁ¨Ô Òí ¹Ç¹àµçÁËÒä´ ¨Ò¡¡ÒÃàÅ×Íè ¹ºÔµ¢ ÍÁÙÅ ä»·Ò§¢ÇÒ 1 ¤ÃÑ§é ¨Ðà¡Ô´à» ¹¢ ÍÁÙÅ 7 ºÔµ ÊÒÁÒö¹íÒ令íҹdzËÃ×Íá»Å§à» ¹àÅ¢°Ò¹ÊÔºËÃ×Í°Ò¹ÊÔºË¡ä´ ·Ñ¹·Õ â´Â¤ ÒÍسËÀÙÁ·Ô áÕè »Å§à» ¹àÅ¢°Ò¹ÊÔºáŠǨÐáÊ´§¤ÇÒÁÅÐàÍÕ´໠¹ .0 ËÃ×Í .5 ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒõÃǨ ÊͺºÔµ 0 µÑ§é áµ áá ¤íÒÊÑè§ poke(DDRD,0x38); 㪠¡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D ãË PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾Øµ ·Õàè ËÅ×Íà» ¹ÍÔ¹¾Øµ ¤íÒÊѧè poke(DDRD,0x30); 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D â´ÂãË PD4, PD5 à» ¹àÍÒµ ¾µØ ·Õàè ËÅ×Í à» ¹ÍÔ¹¾Øµ ¨Ø´»ÃÐʧ¤ ¢Í§¤íÒÊÑ§è ¹Õ¤é Í× µ ͧ¡ÒáíÒ˹´ãË ¢Ò PD3 à» ¹ÍÔ¹¾Øµà¾×Íè ÃѺ¢ ÍÁÙŨҡ DS1620

â»Ãá¡ÃÁ·Õè P6-3 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1620 à¾×Íè Í Ò¹¤ ÒÍسËÀÙÁÔ (¨º)

6.4 ¡ÒõԴµ ÍÃÐËÇ Ò§ AX-11 ¡Ñº DS1302 äÍ«ÕÊà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ ઠ¹à´ÕÂǡѺ DS1620 ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº DS1302 äÍ«ÕÊà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ µ ͧ㪠¡ÒÃÊ×èÍÊÒâ ÍÁÙÅẺÊͧ·ÔÈ·Ò§ ´Ñ§áÊ´§Ç§¨Ã¡ÒÃàª×èÍÁµ Íã¹ÃÙ»·Õè 6-5 â´Â DS1302 ÁÕ¢Ò ÊÑ­­Ò³·Õãè ª 㹡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅÍÂÙ 3 ¢Ò¤×Í 1. RST à» ¹¢ÒÍÔ¹¾ØµÃѺÊÑ­­Ò³à» ´/» ´¡ÒõԴµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´Âµ ÍࢠҡѺ ¢Ò¾Íà µ PD5 ¢Í§ 68HC11 2. CLK ÃѺÊÑ­­Ò³¹ÒÌ ¡Ò¢Í§¡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅã¹áµ ÅкԵ â´Âµ ÍࢠҡѺ¢Ò¾Íà µ PD4 ¢Í§ 68HC11 3. DQ ãª ÃºÑ áÅÐÊ §¢ ÍÁÙšѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÃ×ÍÍØ»¡Ã³ ͹×è ·ÕÁè ÒµÔ´µ Í´ Ç â´Âµ Íà¢ Ò ¡Ñº¢Ò¾Íà µ PD3 ¢Í§ 68HC11

6.4.1 à¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè à¢Õ¹¢ ÍÁÙÅä»Âѧ DS1302

㹡ÒÃà¢Õ¹¢ ÍÁÙÅä»Âѧ DS1302 ¹Ñ¹é ¨Ðµ ͧà¢Õ¹¢ ÍÁÙŤÃѧé ÅÐ 2 亵 â´Â·Õ¢è Í ÁÙÅ亵 áá à» ¹¤ ҢͧáÍ´à´Ãʢͧ DS1302 ·Õèµ Í§¡ÒÃࢠҶ֧«Öè§ÍҨ໠¹áÍ´à´ÃÊ·Õè㪠à¡çº¤ Ò°Ò¹àÇÅÒ¨ÃÔ§ËÃ×Í à» ¹áÍ´à´Ãʢͧ˹ ǤÇÒÁ¨íÒáÃÁ·Õãè ª à¡çº¢ ÍÁÙÅ¡çä´ Ê Ç¹·Õºè µÔ R/W µ ͧ¡íÒ˹´ãË à» ¹ 0 à¾×Íè ãË DS1302 ·ÃÒºÇ Ò µ ͧ·íÒ¡ÒÃà¢Õ¹¢ ÍÁÙÅã¹äºµ µ Íä»Å§ã¹áÍ´à´ÃÊ·ÕèÊ §ÁÒã¹äºµ ¡ ͹˹ Ò¹Õé ÊÒÁÒöÊÃػ໠¹¢Ñé¹µÍ¹ä´ ´Ñ§¹Õé


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

205

+5V

AX-11 board

8

1 6 5

SS

MOSI

TxD IRQ

+5V

SCK

MISO RxD XIRQ GND

7

Battery 3V

,5 ! IO 2

RST SCLK

15pF

3 4

15pF

XTAL 32.768kHz

IRQ/SCI/SPI

ÃÙ»·Õè 6-45ǧ¨Ãàª×Íè Áµ ͺÍà ´ AX-11 ¡ÑºäÍ«Õ DS1302 à¾×Íè Êà ҧ¹ÒÌ ¡Ò´Ô¨µÔ ÍÅ ÃÙ¨ ¡Ñ ¡Ñº DS1302 äÍ«ÕÊà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ à» ¹äÍ«Õ·Õè㪠Êà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§à¾×èÍà» ¹°Ò¹àÇÅÒËÅÑ¡¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´Âã¹µÑÇ DS1302 ¨ÐÁÕ˹ ǤÇÒÁ¨íÒÊíÒËÃѺà¡çº ¢ ÍÁÙÅàÇÅÒ ¹ÒÌ ¡Ò Çѹ·Õè à´×͹ » ËÃ×Í»¯Ô·¹Ô ÊÒÁÒõѧé àÇÅÒ ¹ÒÌ ¡Ò áÅÐ à¡çºÃÑ¡ÉÒ¢ ÍÁÙŹÑé¹äÇ ä´ ¶ ÒËÒ¡ÁÕ¡Òõ ÍẵàµÍÃÕèÊíÒÃͧäÇ â´ÂÊÒÁÒö »ÃШØä¿¿ ÒãË á¡ áºµàµÍÃÕÊè Òí ÃÍ§ä´ ´Ç  Ëҡ㪠ẵàµÍÃÕáè ºº»ÃШØä´ ÃÙ» Ẻ¡ÒÃáÊ´§àÇÅҹѹé ÊÒÁÒöàÅ×Í¡ä´ ·§Ñé Ẻ 12 áÅÐ 24 ªÑÇè âÁ§ ¹Í¡ ¨Ò¡¹Ñé¹ÂѧÁÕ˹ ǤÇÒÁ¨íÒáÃÁẺ¹Í¹âÇÅÒä·Å ÀÒÂã¹µÑÇÊíÒËÃѺà¡çº ¢ ÍÁÙÅã´æ ÍÕ¡ 31 亵 ¤Ø³ÊÁºÑµ·Ô ¹Õè Ò Ê¹ã¨ Ãкº°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ãË ¢ ÍÁÙÅàÇÅÒÍ ҧ¤Ãº¶ ǹ µÑé§áµ ÇÔ¹Ò·Õ, ¹Ò·Õ, ªÑÇè âÁ§, Çѹã¹ÊÑ»´ÒË , Çѹ·Õ,è à´×͹ áÅл ÃÇÁ¡ÒûÃѺ» ͸ԡÊØ÷Թ ´ Ç ÊÒÁÒö㪠§Ò¹ä´ ¶§Ö » ¤.È. 2100 l

ÁÕ˹ ǤÇÒÁ¨íÒáÃÁẺ¹Í¹âÇÅÒä·Å (nonvolatile RAM) ¨íҹǹ 31 亵

l

㪠ä¿àÅÕÂé § 2-5.5V µ ͧ¡ÒáÃÐáÊä¿¿ Ò¹ ÍÂ¡Ç Ò 300 ¹Òâ¹áÍÁá»Ã (nA : nanoampare) l l

µÑǶѧËÅÑ¡à» ¹áºº DIP 8 ¢Ò

l

àª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà Ẻ 3 ¢Ò (3-wire interface)

Vcc 1

8

VBATT

X1 2 ,5 !

7

SCLK

X2 3

6

I/O

GND 4

5

RST


206

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¢Òµ Í㪠§Ò¹ (ã¹·Õ¹è ¨Õé ÐÍ Ò§ÍÔ§¡ÑºµÑǶѧËÅѡẺ DIP 8 ¢Ò) VCC1 (¢Ò 8) à» ¹¢Òä¿àÅÕÂé §¢Ò·Õè 1 ÁÑ¡¨Ðµ ͡ѺẵàµÍÃÕè ÊÒÁÒöµ ͡ѺẵàµÍÃÕáè ºº»ÃШØä´ áÅ ÇàÅ×Í¡ãË Ç§¨Ã»ÃШØáç´Ñ¹ÀÒÂã¹ DS1302 ·íÒ§Ò¹à¾×Íè ¨ ÒÂáç´Ñ¹ÊíÒËÃѺ»ÃШءÃÐáÊä¿¿ ÒãË á¡ áºµàµÍÃÕè ·Õµè Í ÍÂÙ¡ ºÑ ¢Ò¹Õé ẵàµÍÃÕ·è ¹Õè ÂÔ Á㪠¤Í× ÅÔà¸ÕÂÁ 3V 㹡óշãÕè ª ẵàµÍÃÕáè ººÅÔà¸ÕÂÁ äÁ ¤ÇÃàÅ×Í¡ãË Ç§¨Ã »ÃШØẵàµÍÃÕÀè ÒÂã¹ DS1302 ·íÒ§Ò¹ Í ҧäáçµÒÁÊÒÁÒö㪠µÇÑ à¡çº»ÃШØẺ¤ÇÒÁ¨Øʧ٠(0.6-1 ¿ÒÃÑ´ ËÃ×ÍÁÒ¡¡Ç Ò) ËÃ×Í·Õàè ÃÕÂ¡Ç Ò «Ùà»Íà ᤻ (super capacitor) µ Í᷹ẵàµÍÃÕäè ´ VCC2 (¢Ò 1) à» ¹¢ÒÃѺä¿àÅÕÂé §¢Ò·Õè 2 ÁÕ¤Ò ã¹ª ǧ 2-5.5V ¶ ÒËÒ¡áç´Ñ¹·Õ¢è Ò VCC2 ÁÒ¡¡Ç Ò VCC1 +0.2V ä¿àÅÕÂé §äÍ«Õ¨Ðä´ ÁÒ¨Ò¡áç´Ñ¹·Õµè Í ¡Ñº¢Ò¹Õé áµ ¶Ò ËÒ¡áç´Ñ¹ VCC2 ¹ ÍÂ¡Ç Ò VCC1 äÍ«Õ ¨Ðä´ ÃºÑ ä¿àÅÕÂé §¨Ò¡áç´Ñ¹·Õµè Í ¡Ñº¢Ò VCC1 á·¹ SCLK (Serial clock input : ¢Ò 7) à» ¹¢ÒÃѺÊÑ­­Ò³¹ÒÌ ¡ÒÊíÒËÃѺ¡íÒ˹´¨Ñ§ËÇСÒ÷íÒ§Ò¹ I/O (Data input/output : ¢Ò 6) à» ¹¢ÒÍÔ¹¾ØµàÍÒµ ¾µØ ÊíÒËÃѺÃÑºÊ §¢ ÍÁÙÅ RST (Reset : ¢Ò 5) à» ¹¢ÒÃѺÊÑ­­Ò³ÃÕ૵Åͨԡ 0 à¾×èÍËÂØ´¡ÒõԴµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡ áµ Ãкº°Ò¹àÇÅÒÂѧ·íÒ§Ò¹ÍÂÙ ´Ñ§¹Ñ¹é ã¹¢³Ð·íÒ§Ò¹»¡µÔ ¨Ðµ ͧ·íÒãË ¢Ò¹ÕÁé ÊÕ ¶Ò¹ÐÅͨԡ໠¹ 1 µÅÍ´àÇÅÒ ·Õµè ´Ô µ ͡ѺÍØ»¡Ã³ ÀÒ¹͡ X1, X2 (¢Ò 2 áÅÐ 3) à» ¹¢Òµ ͤÃÔʵÍŤÇÒÁ¶Õè 32.768kHz «Ö§è à» ¹¤ Ò¤ÇÒÁ¶ÕÁè ҵðҹÊíÒËÃѺ Êà ҧ°Ò¹àÇÅÒ áÅе ͧµ Íà ÇÁ¡ÑºµÑÇà¡çº»ÃÐ¨Ø¤Ò ¹ ÍÂæ â´Â»¡µÔ㪠¤Ò 15pF ÃÕ¨ÊÔ àµÍà ÀÒÂã¹áÅÐ˹ ǤÇÒÁ¨íÒáÃÁ ÀÒÂã¹ DS1302 ÁÕÊÇ ¹¢Í§¡ÒÃà¡çº¢ ÍÁÙÅ 2 Ê Ç¹¤×Í ÃÕ¨ÊÔ àµÍà áÅÐ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅáÃÁ ã¹¡Ã³Õ ·Õàè » ¹¤ ÒáÍ´à´ÃÊà¾×Íè µÔ´µ ͡ѺÃÕ¨ÊÔ àµÍà ËÃ×Íà» ¹¤íÒÊÑ§è ¢ ÍÁÙÅ 7 ºÔµº¹¤×Í µÑ§é áµ ºÔµ 1-7 à» ¹¢ ÍÁÙÅ·ÕÁè ¡Õ Òà ¡íÒ˹´ÁÒ੾ÒÐ Ê Ç¹ºÔµ 0 à» ¹¡ÒáíÒ˹´â´Â¼Ùã ª §Ò¹Ç Ò µ ͧ¡ÒÃÍ Ò¹ËÃ×Íà¢Õ¹¢ ÍÁÙšѺÃÕ¨ÊÔ àµÍà ËÃ×Í ¤íÒÊÑ§è ¹Õé ¶ Òà» ¹ 1 ¨Ðà» ¹¡ÒÃàÅ×Í¡Í Ò¹¢ ÍÁÙÅ ¶ Òà» ¹ 0 ËÁÒ¶֧µ ͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅä»ÂѧÃÕ¨ÊÔ àµÍà ¹¹Ñé æ ºÔµ 7

ºÔµ 6 RAM CK

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

)"

)!

)

)

)

ºÔµ 0 RD W

ÃÕ¨ÊÔ àµÍà ¹ÒÌ ¡Ò 㪠à¡çº¤ Ңͧ¢ ÍÁÙÅàÇÅҷѧé ËÁ´ ÃÇÁ件֧¢ ÍÁÙŤǺ¤ØÁ¡Ò÷íÒ§Ò¹´ Ç ÁÕÃÒÂÅÐàÍÕ´â´ÂÊÃØ»´Ñ§¹Õé 1. SEC 㪠à¡çº¤ ÒàÇÅÒã¹Ë¹ ÇÂÇÔ¹Ò·Õ ÁÕ¤Ò 00-59 â´Âà¡çºäÇ ã¹ºÔµ 0-6 Ê Ç¹ºÔµ 7 à» ¹ºÔµáÊ´§ ʶҹСÒ÷íÒ§Ò¹¢Í§ DS1302 ¶ Òà» ¹ 0 áÊ´§Ç Ò DS1302 ¡íÒÅѧ·íÒ§Ò¹ ¶ Òà» ¹ 1 ËÁÒ¶֧ ¢³Ð¹Õé DS1302 ËÂØ´·íÒ§Ò¹ 2. MIN 㪠à¡çº¤ ÒàÇÅÒã¹Ë¹ ÇÂ¹Ò·Õ ÁÕ¤Ò 00-59 â´Âà¡çºäÇ ã¹ºÔµ 0-6 Ê Ç¹ºÔµ 7 à» ¹ 0


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

207

l

â¤Ã§Êà ҧ¢Í§ÃÕ¨ÊÔ àµÍà ÀÒÂã¹ DS1302 ÃÕ¨ÊÔ àµÍà ¹ÒÌÔ¡Ò (clock) ¤ ÒáÍ´à´ÃÊ ºÔµ 7

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

¤ Ò¢ ÍÁÙÅ

ºÔµ 7

ºÔµ 6

ºÔµ 5

ºÔµ 4

ºÔµ 3

ºÔµ 2

ºÔµ 1

ºÔµ 0

SEC ÇÔ¹Ò·Õ

1

0

0

0

0

0

0

RD/W

00-59

CH

¢ ÍÁÙÅ 3 ºÔµ¡íÒ˹´ËÅÑ¡ÊԺ˹ ÇÂÇÔ¹Ò·Õ

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧ˹ ÇÂÇÔ¹Ò·Õ

MIN ¹Ò·Õ

1

0

0

0

0

0

1

RD/W

00-59

CH

¢ ÍÁÙÅ 3 ºÔµ¡íÒ˹´ËÅÑ¡ÊԺ˹ ǹҷÕ

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧ˹ ǹҷÕ

RD/W

01-12 00-23

12/24

0

0

0

HOUR ªÑèÇâÁ§

1

0

0

0

0

1

0

¢ ÍÁÙÅ 2 ºÔµ¡íÒ˹´ËÅÑ¡ÊԺ˹ ǪÑÇè âÁ§

AM/PM

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧ˹ ǪÑÇè âÁ§

DATE Çѹ·Õè

1

0

0

0

0

1

1

RD/W

01-28/29 01-30 01-31

MONTH à´×͹

1

0

0

0

1

0

0

RD/W

01-12

0

0

0

¡íÒ˹´ ËÅÑ¡ÊÔº¢Í§à´×͹

DAY Çѹ

1

0

0

0

1

0

1

RD/W

01-07

0

0

0

0

YEAR »

1

0

0

0

1

1

0

RD/W

00-99

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅÑ¡ÊÔº¢Í§» ¤.È.

CONTROL ¤Çº¤ØÁ

1

0

0

0

1

1

1

RD/W

WP

0

0

0

0

0

0

0

TRICKLE CHARGER ¡ÃÐµØ ¹¡ÒûÃШØáç´Ñ¹ ẵàµÍÃÕèÊíÒÃͧ

1

0

0

1

0

0

0

RD/W

TCS3

TCS2

TCS1

TCS0

DS1

DS0

RS1

RS0

1

0

1

1

1

1

1

RD/W

CLOCK BURST ¤íÒÊÑè§Í Ò¹/à¢Õ¹¢ ÍÁÙÅ ¹ÒÌÔ¡Ò·Ñé§ËÁ´

˹ ǤÇÒÁ¨íÒáÃÁ (RAM) ¤ ÒáÍ´à´ÃÊ

¢ ÍÁÙÅ 2 ºÔµ¡íÒ˹´ ËÅÑ¡ÊÔº¢Í§Çѹ·Õè

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧÇѹ·Õè ¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧà´×͹

¢ ÍÁÙÅ 3 ºÔµ¡íÒ˹´Çѹ

0

¢ ÍÁÙÅ 4 ºÔµ¡íÒ˹´ËÅѡ˹ Ç¢ͧ» ¤.È.

¤ Ò¢ ÍÁÙÅ

RAM 0

1

0

0

0

0

0

0

RD/W

bit-7

bit-6

bit-5

bit-4

bit-3

bit-2

bit-1

bit-0

RAM 30

1

0

0

0

0

0

0

RD/W

bit-7

bit-6

bit-5

bit-4

bit-3

bit-2

bit-1

bit-0

RAM BURST ¤íÒÊѧè Í Ò¹/à¢Õ¹¢ ÍÁÙÅ RAM ·Ñ§é ËÁ´

1

1

1

1

1

1

1

RD/W

3. HR 㪠à¡çº¤ ÒàÇÅÒã¹Ë¹ ǪÑÇè âÁ§ ÁÕ¤Ò 2 ÃٻẺ¤×Í 01-12 ã¹Ãкº 12 ªÑÇè âÁ§ áÅÐ 00-23 ã¹Ãкº 24 ªÑÇè âÁ§ 㹡óÕÃкº 12 ªÑÇè âÁ§ ¢ ÍÁÙŨÐà¡çºäÇ ã¹ºÔµ 0-4 ºÔµ 5 㪠áÊ´§Ç Ò à» ¹àÇÅÒ¡ ͹à·ÕÂè § (AM) áÊ´§´ Ç¢ ÍÁÙÅ 0 ËÃ×ÍËÅѧà·ÕÂè § (PM) áÊ´§´ Ç¢ ÍÁÙÅ 1 㹡óÕÃкº 24 ªÑÇè âÁ§ ¢ ÍÁÙŨÐà¡çºäÇ ã¹ºÔµ 0-5, ¢ ÍÁÙźԵ 6 à» ¹ 0 Ê Ç¹¢ ÍÁÙźԵ 7 㪠àÅ×Í¡ÃٻẺ¡ÒÃáÊ´§¤ ÒàÇÅÒã¹Ë¹ ǪÑèÇâÁ§ ¶ ÒàÅ×͡Ẻ 12 ªÑèÇâÁ§ ¡íÒ˹´à» ¹ 1 ËÃ×Ͷ ÒàÅ×Í¡ Ẻ 24 ªÑÇè âÁ§ ¡íÒ˹´à» ¹ 0 4. DATE 㪠à¡çº¤ ÒÇѹ·Õè ÁÕ¤Ò 01-28 ËÃ×Í 29, 01-30 áÅÐ 01-31 ¢Ö¹é ÍÂÙ¡ ºÑ ¢ ÍÁÙÅà´×͹ â´Âà¡çºäÇ ã¹ ºÔµ 0-5 Ê Ç¹ºÔµ 6 áÅÐ 7 à» ¹ 0 5. MONTH 㪠à¡çº¤ Òà´×͹ ÁÕ¤Ò 01-12 â´Âà¡çºäÇ ã¹ºÔµ 0-4 Ê Ç¹ºÔµ 5-7 à» ¹ 0 6. DAY 㪠à¡çº¤ ÒÇѹã¹ÊÑ»´ÒË ÁÕ¤Ò 01-07 â´Âà¡çºäÇ ã¹ºÔµ 0-2 Ê Ç¹ºÔµ 3-7 à» ¹ 0 7. YEAR 㪠à¡çº¤ Ò» ¤ÃÔʵÈÑ¡ÃÒª (¤.È.) ÁÕ¤Ò 00-99 â´Âà¡çºäÇ ã¹ºÔµ 0-7 (¤Ãº·Ñ§é 8 ºÔµ) 8. CONTROL à» ¹ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒÃà¢Õ¹¢ ÍÁÙÅŧ㹠DS1302 ÊÒÁÒöàÅ×Í¡» ͧ¡Ñ¹¡ÒÃà¢Õ¹ ¢ ÍÁÙÅŧã¹Ë¹ ǤÇÒÁ¨íҷѧé ËÁ´ (ÃÇÁÃÕ¨ÊÔ àµÍà à¡çº¤ ÒàÇÅÒ´ ÇÂ) ä´ â´Â૵ºÔµ 7 ¢Í§ÃÕ¨ÊÔ àµÍà µÇÑ ¹Õé áÅÐ à¢Õ¹¢ ÍÁÙÅ 0 ä»·Õºè µÔ 0-6


208

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

RST SCLK I/O

R/W A0

A1

A2

A3

A4 R/C 1

ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃà¢Õ¹¤ ÒáÍ´à´ÃÊä»Âѧ DS1302 RST SCLK I/O

R/W A0

A1

A2

A3

A4 R/C 1

D0 D1 D2 D3 D4 D5 D6 D7

ä´ÍÐá¡ÃÁàÇÅҢͧ¡ÒÃÍ Ò¹-à¢Õ¹¢ ÍÁÙŢͧ DS1302 R1 2k

DS1-DS0 : 01

R2 4k

8??

8??

R3 8k

DS1-DS0 : 10

TCS3-TCS0 : 1010

ǧ¨ÃàÅ×Í¡¢ ÍÁÙÅ 16 ʶҹРTRICKLE CHARGER ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ¡ÒûÃШØáç´Ñ¹ ẵàµÍÃÕÊè Òí Ãͧ

6+5!

6+5

6+5

ǧ¨ÃàÅ×Í¡¢ ÍÁÙÅ 2 ʶҹРǧ¨ÃàÅ×Í¡¢ ÍÁÙÅ 3 ʶҹÐ

6+5

,5

,5

45

45

µÑǵ Ò¹·Ò¹·Õàè Å×Í¡

45

45

0

0

-

0

1

R1 : 2k

1

0

R2 : 4k

1

1

R3 : 8k

¡ÒÒ·íÒ§Ò¹¢Í§Ç§¨Ã»ÃШØẵàµÍÃÕÀè ÒÂã¹ DS1302 9. TRICKLE CHARGER 㪠¤Çº¤ØÁ¡ÒûÃШØáç´Ñ¹ãË á¡ áºµàµÍÃÕ·è µÕè Í ÍÂÙ¡ ºÑ ¢Ò VCC1 ¶ Òµ ͧ ¡ÒÃãË à¡Ô´¡ÒûÃШØáç´Ñ¹á¡ ẵàµÍÃÕµè Í §à¢Õ¹¢ ÍÁÙÅ 1010 ä»·Õè 4 ºÔµº¹¢Í§Ê ǹà¡çº¢ ÍÁÙŢͧÃÕ¨ÊÔ àµÍà µÑǹÕé «Ö§è ¡ç¤Í× ºÔµ TCS0-TCS3 Ê Ç¹ºÔµ DS1 áÅÐ DS0 㪠àÅ×Í¡¡ÒÃÅ´áç´Ñ¹»ÃШØẵàµÍÃÕ´è Ç Âä´âÍ´ (DS ¤×Í Diode Select) ¶ Òà» ¹ 01 ¨ÐàÅ×Í¡ä´âÍ´µÑÇà´ÕÂÇ áµ ¶Ò à» ¹ 10 ¨ÐàÅ×Í¡ä´âÍ´ 2 µÑÇ ¶ ÒËÒ¡ à» ¹ 00 ËÃ×Í 11 ¨Ðà» ¹¡ÒôÔÊàÍàºÔÅÊ Ç¹»ÃШØẵàµÍÃÕè¹Õé·Ñ¹·Õ Ê Ç¹ 2 ºÔµ·ÕèàËÅ×ͤ×Í RS1 áÅÐ RS0 㪠àÅ×Í¡µÑǵ Ò¹·Ò¹¨íÒ¡Ñ´¡ÃÐáÊ (Resistor Select) àÅ×Í¡ä´ 3 ¤ Ò¤×Í 2, 4 áÅÐ 8kΩ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

209

10. CLOCK BURST ¶ ÒµÔ´µ ͡ѺÃÕ¨ÊÔ àµÍà ¹Õé ¨Ðà» ¹¡ÒÃÊѧè ãË ÍÒ ¹ËÃ×Íà¢Õ¹¢ ÍÁÙÅàÇÅÒÍ ҧµ Íà¹×Íè § â´ÂàÃÔÁè ¨Ò¡ºÔµ 0 ¢Í§áÍ´à´ÃÊ 0 ˹ ǤÇÒÁ¨íÒáÃÁ ÁÕ·§Ñé ÊÔ¹é 31 亵 µÑ§é áµ RAM0-RAM30 Ê Ç¹·ÕÃè ¨Õ ÊÔ àµÍà RAM BURST 㪠ÊÒí ËÃѺ¡íÒ˹´ãË ÍÒ ¹ËÃ×Í à¢Õ¹¢ ÍÁÙŢͧ˹ ǤÇÒÁ¨íÒáÃÁÍ ҧµ Íà¹×Íè § àÃÔÁè µÑ§é áµ ºµÔ 0 ¢Í§áÍ´à´ÃÊ 0 ¡ÒõԴµ Íà¾×Íè 㪠§Ò¹ ¡ÒõԴµ ͡Ѻ DS1302 ¨Ð㪠ÊÒÂÊÑ­­Ò³ 3 àÊ ¹¤×Í ÊÒÂÊÑ­­Ò³¢ ÍÁÙÅ (I/O), ÊÒÂÊÑ­­Ò³¹ÒÌ ¡Ò (SCLK) áÅÐÊÒÂÊÑ­­Ò³ÃÕ૵ (RST) ´Ñ§ÁÕ¢¹Ñé µÍ¹â´ÂÊÃØ»´Ñ§¹Õé àÁ×Íè µ ͧ¡ÒÃà¢Õ¹¢ ÍÁÙÅÁÒÂѧ DS1302 1. ·íÒãË ¢Ò RST à» ¹Åͨԡ 1 2. » ͹ÊÑ­­Ò³¹ÒÌ ¡Ò 3. à¢Õ¹¢ ÍÁÙÅ¢ Í亵 ááä»Âѧ DS1302 «Ö§è ¡ç¤Í× ¤ ҢͧáÍ´à´ÃÊ·Õµè Í §¡ÒõԴµ Í´ Ç â´ÂÊ §¢ ÍÁÙźԵ 0 ÁÒ¡ ͹¨¹¤Ãº 8 ºÔµ â´ÂºÔµ 0 µ ͧ໠¹Åͨԡ 0 4. à¢Õ¹¢ ÍÁÙÅ亵 ·ÊÕè ͧä»Âѧ DS1302 «Ö§è ¡ç¤Í× ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà¢Õ¹¨ÃÔ§ä»ÂѧáÍ´à´ÃÊ·Õàè ¢ Ò¶Ö§ ´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅ亵 áá 5. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ ¡ÒÃà¢Õ¹¢ ÍÁÙŹÕÊé ÒÁÒöà¢ÕÂ¹ä´ ·§Ñé ¢ ÍÁÙÅàÇÅÒáÅТ ÍÁÙÅã¹Ë¹ ǤÇÒÁ¨íÒáÃÁ àÁ×Íè µ ͧ¡ÒÃÍ Ò¹¢ ÍÁÙŨҡ DS1302 ÁÕ¢¹Ñé µÍ¹àËÁ×͹¡Ñº¡ÒÃà¢Õ¹ ᵡµ Ò§¡Ñ¹à¾Õ§ ºÔµ 0 ¢Í§¢ ÍÁÙŠ亵 áá·Õàè » ¹¤ ÒáÍ´à´ÃÊ¹Ñ¹é µ ͧ¡íÒ˹´à» ¹Åͨԡ 1


210

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

1. ¡íÒ˹´ãË ¢Ò¾Íà µ PD3,PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ ´ ǤíÒÊѧè poke(DDRD,0x38); 2. ¡íÒ˹´ãË ¢Ò SCLK ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè àµÃÕÂÁà¢Õ¹¢ ÍÁÙÅä»Âѧ DS1302 3. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙšѺ 68HC11 4. à¢Õ¹¢ ÍÁÙÅ¢ Í亵 ááä»Âѧ DS1302 «Ö觡ç¤×Í ¤ ҢͧáÍ´à´ÃÊ·Õèµ Í§¡ÒõԴµ Í´ Ç â´Â Ê §¢ ÍÁÙźԵ 0 ÁÒ¡ ͹¨¹¤Ãº 8 ºÔµ 5. à¢Õ¹¢ ÍÁÙÅ亵 ·ÕèÊͧä»Âѧ DS1302 «Ö觡ç¤×Í ¢ ÍÁÙÅ·Õèµ Í§¡ÒÃà¢Õ¹¨ÃÔ§ä»ÂѧáÍ´à´ÃÊ·Õè ࢠҶ֧´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅ亵 áá 6. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ àÁ×èÍÁÒ¶Ö§µÃ§¹Õé DS1302 ä´ ÃѺ¢ ÍÁÙÅ 1 亵 ä»à¡çºã¹áÍ´à´ÃÊ·Õè¡íÒ˹´áÅ Ç â´Â¢ ÍÁÙÅ·Õè à¢Õ¹¨Ð¶Ù¡¨Ñ´à¡çºã¹ÃٻẺàÅ¢°Ò¹ÊÔº ¨Ò¡¢Ñ¹é µÍ¹´Ñ§¡Å ÒÇÊÒÁÒö¹íÒÁÒÊà ҧ¿ §¡ ª¹Ñè ª×Íè rtc_write_byte ´ ÇÂâ»Ãá¡ÃÁ Interactive C à¾×Íè à¢Õ¹¢ ÍÁÙÅ dat ä»ÂѧáÍ´à´ÃÊ addr ä´ ´§Ñ ¹Õé #define rtc_dat1 bit_set(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ rtc_dat1 ´ ǤíÒÊѧè ૵ºÔµ PD3*/ #define rtc_dat0 bit_clear(0x1008,0b00001000)

/*á·¹¤ÇÒÁËÁÒ rtc_dat0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD3*/ #define rtc_clk1 bit_set(0x1008,0b00010000)

/*á·¹¤ÇÒÁËÁÒ rtc_clk1 ´ ǤíÒÊѧè ૵ºÔµ PD4*/ #define rtc_clk0 bit_clear(0x1008,0b00010000)

/* á·¹¤ÇÒÁËÁÒ rtc_clk0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD4*/ #define rtc_rst1 bit_set(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ rtc_rst1 ´ ǤíÒÊѧè ૵ºÔµ PD5*/ #define rtc_rst0 bit_clear(0x1008,0b00100000)

/*á·¹¤ÇÒÁËÁÒ rtc_rst0 ´ ǤíÒÊѧè à¤ÅÕÂà ºµÔ PD5*/ void rtc_write_byte(int addr,int dat) { int i,k=0; poke(DDRD,0x38); rtc_clk0;

µÑÇá»Ãà¤Ò¹ àµÍà ÊÒí ËÃÑºÇ¹Ê §¢ ÍÁÙÅ 1 亵 áÅÐ˹ ǧàÇÅÒ // ¡íÒ˹´ãË ¢Ò¾Íà µ PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µ Ø // µÑ§ é µ ¹ÊÀÒÇÐ¢Ò SCLK ·ÕÅè ͨԡ 0 //


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C rtc_rst1;

// //

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

//

l

211

µÑ§é µ ¹ÊÀÒÇÐ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙŠǹ 8 ¤Ãѧé à¾×Íè ¶ Ò·ʹ¢ ÍÁÙÅ亵 áá(¢ ÍÁÙÅáÍ´à´ÃÊ)

{ if((addr & 0x01)==0x01){rtc_dat1;} //

Ê §¢ ÍÁÙÅ addr (ºÔµ 0) ä»Âѧ¢Ò¢ ÍÁÙŢͧ DS1302

else{rtc_dat0;} addr = addr>>1; rtc_clk1; k++; rtc_clk0;

àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 1 ¤Ãѧé // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 1 // ˹ ǧàÇÅÒ // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 0 //

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

//

ǹÃͺ 8 ¤Ãѧé à¾×Íè ¶ Ò·ʹ¢ ÍÁÙÅ亵 ·ÊÕè ͧ

{ if((dat & 0x01)==0x01){rtc_dat1;} //

Ê §¢ ÍÁÙÅ dat (ºÔµ 0) ä»Âѧ¢Ò¢ ÍÁÙŢͧ DS1302

else{rtc_dat0;} dat = dat>>1; rtc_clk1; k++; rtc_clk0;

àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 1 ¤Ãѧé // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 1 // ˹ ǧàÇÅÒàÅ硹 Í // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 0 //

} rtc_rst0;

// //

¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ

}

6.4.2 à¢Õ¹â»Ãá¡ÃÁ Interactive C à¾×Íè Í Ò¹¢ ÍÁÙŨҡ DS1302 àÃÔèÁµ ¹´ Ç¡ÒÃà¢Õ¹¢ ÍÁÙÅáÍ´à´ÃÊ¢¹Ò´ 1 亵 ·Õèµ Í§¡ÒÃࢠҶ֧ãË ¡Ñº DS1302 àÊÕ¡ ͹ ¾Ã ÍÁ¡Ñº¡íÒ˹´ºÔµ R/W ãË à» ¹ 1 à¾×èÍãË DS1302 ·ÃÒºÇ Ò µ ͧ¡ÒÃÍ Ò¹¢ ÍÁÙŨҡáÍ´à´ÃÊ·Õè Ê §ä»¡ ͹˹ Ò ËÅѧ¨Ò¡¹Ñé¹ DS1302 ¨Ð·ÂÍÂÊ §¢ ÍÁÙÅÍÍ¡ÁÒ·Ò§¢Ò¢ ÍÁÙÅ ´Ñ§¹Ñ鹨е ͧ» ͹ ÊÑ­­Ò³¾ÑÅÊ ·¢Õè Ò SCLK 8 ÅÙ¡ ¨Ö§¨Ðä´ ÃºÑ ¢ ÍÁÙŤú 1 亵 ÊÒÁÒöÊÃػ໠¹¢Ñ¹é µÍ¹ä´ ´§Ñ ¹Õé


212

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

1. ¡íÒ˹´ãË ¢Ò PD3,PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ ´ ǤíÒÊѧè poke(DDRD,0x38); 2. ¡íÒ˹´ãË ¢Ò SCLK ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè àµÃÕÂÁà¢Õ¹¢ ÍÁÙÅä»Âѧ DS1302 3. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 1 à¾×Íè àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙšѺ 68HC11 4. à¢Õ¹¢ ÍÁÙÅ亵 ááä»Âѧ DS1302 «Ö觡ç¤×Í ¤ ÒáÍ´à´ÃÊ·Õèµ Í§¡ÒõԴµ Í´ Ç ¾Ã ÍÁ¡Ñº ¡íÒ˹´ºÔµ R/W ¢Í§¢ ÍÁÙÅ·ÕÊè § ä»à» ¹ 1 à¾×Íè àÅ×Í¡Í Ò¹¢ ÍÁÙŨҡ DS1302 5. à»ÅÕÂè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ PD5 ãË à» ¹ÍÔ¹¾Øµ 6. Í Ò¹¢ ÍÁÙŤÃѧé ÅкԵ¨¹¤Ãº 1 亵 â´Â¡Òû ͹ÊÑ­­Ò³¾ÑÅÊ ·¢Õè Ò SCLK µ ͡ѹ 8 ÅÙ¡ 7. ¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 0 à¾×Íè ÊÔ¹é ÊØ´¡ÒÃÍ Ò¹¢ ÍÁÙÅ ¨Ò¡¡Ãкǹ¡Òôѧ¡Å ÒǨзíÒãË 68HC11 ÊÒÁÒÃ¶Í Ò¹¢ ÍÁÙÅ 1 亵 ¨Ò¡áÍ´à´ÃÊ·Õ¡è Òí ˹´ ¢Í§ DS1302 â´Â¤ Ò·ÕèÍ Ò¹ä´ à» ¹¤ ÒẺàÅ¢°Ò¹ÊÔº áÅШҡ¢Ñ鹵͹â´ÂÊÃØ»·Õè¡Å ÒÇÁÒÊÒÁÒö¹íÒÁÒÊà ҧ¿ §¡ ªÑ蹪×èÍ rtc_read_byte à¾×èÍãª Í Ò¹ ¢ ÍÁÙŨҡáÍ´à´ÃÊ com áÅФ׹¤ Ò¼ÅÅѾ¸ ÍÍ¡ÁÒà» ¹àÅ¢¨íҹǹàµçÁ ä´ ´Ñ§¹Õé int rtc_read_byte(int com) { int i,j,dat,k=0; poke(DDRD,0x38); rtc_clk0; rtc_rst1;

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

µÑÇá»Ãà¤Ò¹ àµÍà µ Ò§æ // ¡íÒ˹´ãË ¢Ò PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µ Ø // µÑ§ é µ ¹ÊÀÒÇÐ¢Ò SCLK ·ÕÅè ͨԡ 0 // µÑ§ é µ ¹ÊÀÒÇÐ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 1 // à¾×Í è àÃÔÁè µ ¹¡ÒÃÃѺËÃ×ÍÊ §¢ ÍÁÙÅ // ǹ 8 ¤Ãѧ é à¾×Íè ¶ Ò·ʹ¢ ÍÁÙÅ亵 áá(¢ ÍÁÙÅáÍ´à´ÃÊ)

//

{ if((com & 0x01)==0x01){rtc_dat1;} //

Ê §¢ ÍÁÙÅ addr (ºÔµ 0) ä»Âѧ¢Ò¢ ÍÁÙŢͧ DS1302

else{rtc_dat0;} com = com>>1; rtc_clk1; k++; rtc_clk0; }

àÅ×Íè ¹ºÔµä»·Ò§¢ÇÒ 1 ¤Ãѧé // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 1 // ˹ ǧàÇÅÒ // ¤íÒÊѧ è ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 0 //


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C poke(DDRD,0x30); for(i=0;i<8;i++)

l

213

¡íÒ˹´ãË PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ Ê Ç¹ PD3 à» ¹ÍÔ¹¾Øµ // ǹ 8 ¤Ãѧ é à¾×Íè ÃѺ¢ ÍÁÙŨҡ DS1302 àÃÔÁè ¨Ò¡ºÔµ LSB //

{ j = (peek(0x1008) & 0x08)>>3; dat = (dat>>1)|(j<<7); rtc_clk1; k++; rtc_clk0;

Í Ò¹¤ Ò¢ ÍÁÙŨҡ DS1302 // àÅ×Í è ¹¢ ÍÁÙÅä»à¡çº·Õè dat // ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 1 // ˹ ǧàÇÅÒ // ¤Çº¤ØÁ¢Ò SCLK à» ¹Åͨԡ 0

//

} rtc_rst0;

¡íÒ˹´ãË ¢Ò RST ¢Í§ DS1302 à» ¹Åͨԡ 0 // à¾×Í è ÊÔ¹é ÊØ´¡ÒÃà¢Õ¹¢ ÍÁÙÅ

//

dat = bcd_to_decimal(dat);

àÃÕ¡¿ §¡ ªÑè¹á»Å§¤ Ò¢ ÍÁÙŢͧ dat ¨Ò¡ÃËÑÊàÅ¢°Ò¹ÊÔºãË à» ¹àÅ¢¨íҹǹàµçÁ return(dat); // ¤×¹¤ Ò¼ÅÅѾ¸ ·Õèà» ¹àÅ¢¨íҹǹàµçÁ //

} int bcd_to_decimal(int dc) { return((((dc & 0xF0)>>4)*10)+(dc & 0x0F));

á»Å§¤ ÒÃËÑÊàÅ¢°Ò¹ÊÔº·ÕÃè ºÑ ÁÒ¨Ò¡µÑÇá»Ã dc ãË à» ¹àÅ¢¨íҹǹàµçÁ // áŠǤ׹¤ Ò¼ÅÅѾ¸ ¢Í§¿ §¡ ªÑè¹ //

}

6.4.3 ¡Ò÷´Åͧ 1. µ Íǧ¨ÃµÒÁÃÙ»·Õè 6-5 2. à» ´â»Ãá¡ÃÁ Interactive C àª×Íè Áµ ͺÍà ´ AX-11 ࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁ ·Õè P6-4 µÑ§é ª×Íè ä¿Å p0604-ds1302.ic 3. ¡´»ØÁ Download à¾×Íè Ê §â»Ãá¡ÃÁŧ㹺Íà ´ AX-11 4. Ãѹâ»Ãá¡ÃÁâ´Â¡´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C 5. ·Õâè Á´ÙÅ LCD áÊ´§¼Å´Ñ§¹Õé Time

07:38:24

«Ö§è ¡ç¤Í× àÇÅÒ 7 ¹ÒÌ ¡Ò 38 ¹Ò·Õ 24 ÇÔ¹Ò·Õ àÇÅÒËÃ×͹ÒÌ ¡Ò¨ÐàÃÔÁè µ ¹à´Ô¹¹Ñº¨Ò¡¹Õé


214

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

/*——————————————————————————————————————————————————————————————————————————*/ // Program : Read time by RTC DS1302 // Description : Show on LCD module by RTC DS1302 // Filename : p0604-ds1302.ic // C compiler : Interactive C 4.21GA /*——————————————————————————————————————————————————————————————————————————*/ #define SPCR 0x1028 /* Define Register name of SPCR in address 0x1028 */ #define SPSR 0x1029 /* Define Register name of SPSR in address 0x1029 */ #define SPDR 0x102A /* Define Register name of SPDR in address 0x102A */ #define DDRD 0x1009 /* Define Register name of DDRD in address 0x1009 */ #define PORTD 0x1008 /* Define Register name of PORTD in address 0x1008*/ #define rtc_dat1 bit_set(0x1008,0b00001000) /* Define command set bit PD3*/ #define rtc_dat0 bit_clear(0x1008,0b00001000) /* Define command set bit PD3*/ #define rtc_clk1 bit_set(0x1008,0b00010000) /* Define command set bit PD4*/ #define rtc_clk0 bit_clear(0x1008,0b00010000) /* Define command clear bit PD4*/ #define rtc_rst1 bit_set(0x1008,0b00100000) /* Define command set bit PD5*/ #define rtc_rst0 bit_clear(0x1008,0b00100000) /* Define command clear bit PD5*/ #define hour 0x85 /* Define constant address hour of DS1302*/ #define min 0x83 /* Define constant address min of DS1302*/ #define sec 0x81 /* Define constant address sec of DS1302*/ int time[6]; /* Buffer for keep time */ /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————————— Main program ——————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void main() { init_port(); // For write time value to DS1302 rtc_write_time(0x07,0x38,0x24); // For write time value to DS1302 while(1) // Infinite loop { time_to_digit(time); // Convert to to 6 digit printf(“Time: %d%d:%d%d:%d%d\n”,time[5], time[4],time[3],time[2],time[1],time[0]); // Display RTC } } /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————————Function initial port output —————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void init_port() { poke(DDRD,0x38); // Config Direction control } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function read data 1 byte from DS1302 —————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ int rtc_read_byte(int com) { int i,j,dat,k=0; // For keep counter loop poke(DDRD,0x38); // Setup PD3,PD4,PD5 ==> output

â»Ãá¡ÃÁ·Õè P6-4 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1302 à¾×Íè à¢Õ¹-Í Ò¹¤ ÒàÇÅÒ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

215

rtc_clk0; // Set clock pin = 0(for DS1302) rtc_rst1; // Set reset pin = 1(for DS1302) for(i=0;i<8;i++) // For loop 8 time { if((com & 0x01)==0x01){rtc_dat1;} // Data bit transfer else{rtc_dat0;} com = com>>1; // Shift data 1 time rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } dat = 0; poke(DDRD,0x30); // Setup PD4,PD5 ==> output ,and PD3==> input for(i=0;i<8;i++) // For loop 8 time { j = (peek(0x1008) & 0x08)>>3; // Read data bit receive dat = (dat>>1)|(j<<7); // Keep data rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } rtc_rst0; // Set reset pin = 0(for DS1302) dat = bcd_to_decimal(dat); // Convert data from BCD to decimal return(dat); // Return data from DS1302 1 byte } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————— Function write data 1 byte to DS 1302 ——————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void rtc_write_byte(int addr,int dat) { int i,k=0; // For counter poke(DDRD,0x38); // Setup PD2,PD3,PD4 ==> output rtc_clk0; // Set clock pin = 0(for DS1302) rtc_rst1; // Set reset pin = 1(for DS1302) for(i=0;i<8;i++) // For loop 8 time for send address { if((addr & 0x01)==0x01){rtc_dat1;} // Data bit transfer else{rtc_dat0;} addr = addr>>1; // Shift data 1 time rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } for(i=0;i<8;i++) // For loop 8 time for send data { if((dat & 0x01)==0x01){rtc_dat1;} else{rtc_dat0;} dat = dat>>1; // Shift data 1 time rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } rtc_rst0; // Set reset pin = 0(for DS1302) }

â»Ãá¡ÃÁ·Õè P6-4 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1302 à¾×Íè à¢Õ¹-Í Ò¹¤ ÒàÇÅÒ (ÁÕµÍ )


216

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

/*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————— Function write time to DS 1302 ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void rtc_write_time(int rtc_hour,int rtc_min,int rtc_sec) { rtc_write_byte(0x8E,0); // Enable data ram access rtc_write_byte(0x84,rtc_hour); // Write 0x04 to ram address 0xD0 rtc_write_byte(0x82,rtc_min); // Write 0x10 to ram address 0xC4 rtc_write_byte(0x80,rtc_sec); // Write 0x15 to ram address 0xC0 rtc_write_byte(0x8E,0x80); // Disable data ram access } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————— Function convert BCD to decimal ——————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ int bcd_to_decimal(int dc) { return((((dc & 0xF0)>>4)*10)+(dc & 0x0F)); // Return decimal value from convert } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————— Function read time and convert data to 6 digit ————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void time_to_digit(int data[]) { int buf_hour,buf_min,buf_sec; // Buffer buf_hour = rtc_read_byte(hour); // Read hour buf_min = rtc_read_byte(min); // Read min buf_sec = rtc_read_byte(sec); // Read sec data[0] data[1] data[2] data[3] data[4] data[5]

= = = = = =

(buf_sec%10); (buf_sec/10); (buf_min%10); (buf_min/10); (buf_hour%10); (buf_hour/10);

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

Convert Convert Convert Convert Convert Convert

sec keep to array sec keep to array min keep to array min keep to array hour keep to array hour keep to array

index index index index index index

0 1 2 3 4 5

} /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————————————————— END ———————————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ àÃÔÁè µ ¹´ Ç¡ÒáíÒ˹´ãË PD3, PD4, PD5 à» ¹àÍÒµ ¾µØ ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁµÑ§é ¤ ÒàÇÅÒãË ¡ºÑ DS1302 ´ Ç¡ÒÃàÃÕ¡㪠¿§ ¡ ª¹Ñè rtc_write_time â´ÂÊ §¤ ÒÍСÔÇàÁ¹µ à» ¹ 0x07,0x38,0x24 «Ö§è àÃÕ§ÅíҴѺ¨Ò¡ ¤ ÒàÇÅÒ ªÑÇè âÁ§,¹Ò·Õ áÅÐÇÔ¹Ò·Õ µÒÁÅíҴѺ ËÅѧ¨Ò¡¹Ñ¹é ǹ·íÒ¤íÒÊѧè Í Ò¹¤ ÒàÇÅÒ¨Ò¡ DS1302 ÁÒá»Å§¤ Ò¨Ò¡àÅ¢ ÃËÑÊ°Ò¹ÊÔº (BCD) à» ¹àÅ¢°Ò¹ÊÔº áŠǹíÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD Í ҧµ Íà¹×Íè § ¼ÅÅѾ¸ ·äÕè ´ ¤Í× àÇÅÒàÃÔÁè µ ¹·Õè 07:38:24 áÅ Çà´Ô¹µ Íä»àÃ×Íè Âæ â´Â·ÕËè ÅÑ¡ÇÔ¹Ò·Õ¨Ðà¾ÔÁè ¤ Ò·Ø¡æ 1 ÇÔ¹Ò·Õ «Ö§è â»Ãá¡ÃÁ¹Õáé Ê´§ãË àËç¹

â»Ãá¡ÃÁ·Õè P6-4 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1302 à¾×Íè à¢Õ¹-Í Ò¹¤ ÒàÇÅÒ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

217

¶Ö§¡ÒõԴµ ͡Ѻ DS1302 Ẻàº×Íé §µ ¹ ÂѧäÁ ÊÒÁÒöµÑ§é ¤ ÒàÇÅÒä´ ÊÇÔµª ÀÒ¹͡ áµ ÊÒÁÒöà¾×Íè àµÔÁ¡Òà ·íÒ§Ò¹ã¹Ê ǹ¹Õäé ´ â´Â¨Ð¡Å ÒǶ֧ã¹ÅíҴѺµ Íä» Ë¹ Ò·Õ¢è ͧ¿ §¡ ª¹Ñè ÊíҤѭã¹â»Ãá¡ÃÁÁÕ´§Ñ µ Í仹Õé ¿ §¡ ª¹Ñè init_port 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D 㹪 ǧàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹ ¿ §¡ ª¹Ñè rtc_read_byte 㪠ÍÒ ¹¢ ÍÁÙÅ 1 亵 ¨Ò¡ DS1302 ´ Ç¡ÒÃÃÐºØ¤Ò áÍ´à´ÃÊ·Õµè Í §¡ÒÃÍ Ò¹ ãÊ à» ¹¤ ÒÍСÔÇàÁ¹µ áÅп §¡ ª¹Ñè ¹Õ¨é Ф׹¤ Ò¼ÅÅѾ¸ à» ¹¢ ÍÁÙŢͧáÍ´à´ÃÊ·Õãè Ê à» ¹ÍСÔÇàÁ¹µ ä» «Ö§è ã¹â»Ãá¡ÃÁ 㪠¿§ ¡ ª¹Ñè ¹ÕÍé Ò ¹¢ ÍÁÙŨҡáÍ´à´ÃÊ·Õàè ¡çº¤ ÒàÇÅÒ Íѹ»ÃСͺ´ Ç áÍ´à´ÃÊ 0x85 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡ªÑÇè âÁ§ áÍ´à´ÃÊ 0x83 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡¹Ò·Õ áÍ´à´ÃÊ 0x81 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡ÇÔ¹Ò·Õ ¿ §¡ ª¹Ñè rtc_write_byte 㪠à¢Õ¹¢ ÍÁÙÅ 1 亵 ãË ¡ºÑ DS1302 â´ÂÁÕµÇÑ á»ÃÃѺ¢ ÍÁÙÅ 2 µÑÇ «Ö§è µÑÇáá㪠ÃѺ¤ ÒáÍ´à´ÃÊ áÅеÑÇ·ÕÊè Í§ãª ÃºÑ ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà¡çºÅ§ã¹áÍ´à´ÃÊ ¿ §¡ ª¹Ñè rtc_write_time 㪠à¢Õ¹¢ ÍÁÙÅàÇÅÒä»ãË ¡ºÑ DS1302 â´ÂÁÕµÇÑ á»ÃÃѺ¢ ÍÁÙÅ 3 µÑÇ ãª ÃºÑ ¤ ÒàÇÅÒ ªÑÇè âÁ§ ,¹Ò·Õ áÅÐÇÔ¹Ò·ÕµÒÁÅíҴѺ ¿ §¡ ª¹Ñè time_to_digit ãªéÍÒè ¹¤èÒàÇÅÒ¨Ò¡ DS1302 ·Õàè »ç¹àÅ¢ÃËÑÊ°Ò¹ÊÔº à¾×Íè á»Å§à»ç¹àÅ¢°Ò¹ÊÔº 6 ËÅÑ¡ ËÅѧ¨Ò¡¹Ñ¹é ¹íÒä»à¡çºäÇ ·µÕè ÇÑ á»ÃÍÐàà·ãÕè ª à» ¹ÍСÔÇàÁ¹µ ¹Ñ¹è ¤×Í㪠ÊÒí ËÃѺá»Å§¤ ÒàÇÅÒ¨ÃÔ§¨Ò¡¡Òà àÃÕ¡¤íÒÊѧè time_to_digit(time); ¿ §¡ ª¹Ñè bcd_to_decimal 㪠á»Å§àÅ¢ÃËÑÊ°Ò¹ÊÔº (BCD : binary code decimal) ä»à» ¹àÅ¢°Ò¹ÊÔº ¤íÒÊѧè poke(DDRD,0x38); 㪠¡Òí ˹´ãË PD3, PD4 áÅÐ PD5 à» ¹àÍÒµ ¾µØ ºÔµÍ×¹è ·Õàè ËÅ×Íà» ¹ÍÔ¹¾Øµ ¤íÒÊѧè poke(DDRD,0x30); 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D â´ÂãË PD4, PD5 à» ¹àÍÒµ ¾µØ ·Õàè ËÅ×Í à» ¹ÍÔ¹¾Øµ ¨Ø´»ÃÐʧ¤ ¢Í§¤íÒÊÑ§è ¹Õ¤é Í× µ ͧ¡ÒáíÒ˹´ãË ¢Ò PD3 à» ¹ÍÔ¹¾Øµà¾×Íè ÃѺ¢ ÍÁÙŨҡ DS1302

â»Ãá¡ÃÁ·Õè P6-4 â»Ãá¡ÃÁ Interactive C ÊíÒËÃѺµÔ´µ ͡Ѻ DS1302 à¾×Íè à¢Õ¹-Í Ò¹¤ ÒàÇÅÒ (¨º)


218

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

6.5 Êà ҧÃкºáÊ´§ÍسËÀÙÁáÔ ÅÐàÇÅÒ àÁ×Íè àÃÕ¹ÃÙá ÅзÃÒº¶Ö§¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡ÑºäÍ«Õ˹ Ò·Õ¾è àÔ ÈÉ 2 µÑÇ·ÕÁè ÃÕ »Ù Ẻ¡Òà µÔ´µ ͤŠÒ¤ÅÖ§¡Ñ¹¤×Í DS1620 äÍ«ÕÇÑ´ÍسËÀÙÁÔ áÅÐ DS1302 äÍ«ÃÊà ҧ°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ ¨Ö§ÊÒÁÒö¹íÒäÍ«Õ·§Ñé ÊͧµÑÇÁÒµ Íà ÇÁ¡Ñ¹¡Ñº 68HC11 à¾×Íè Êà ҧ¹ÒÌ ¡Ò·ÕÊè ÒÁÒöÇÑ´ÍسËÀÙÁäÔ ´ ËÃ×Í ã¹ÍÕ¡´ ҹ˹Ö觤×Í à¤Ã×èͧÇÑ´ÍسËÀÙÁÔÃкº´Ô¨ÔµÍÅ·ÕèáÊ´§àÇÅÒä´ ã¹ÃÙ»·Õè 6-6 áÊ´§Ç§¨ÃÊÁºÙó ¢Í§Ãкº¹Õé ·íÒ¡Òõ Íǧ¨ÃµÒÁÃÙ»·Õè 6-6 áÅ Çà¢Õ¹â»Ãá¡ÃÁµ Í仹Õé +5V

AX-11 board

8

1

SS

MOSI

TxD IRQ

+5V

SCK MISO

RxD XIRQ

2,! 2,#

6

2,"

7

5

Battery 3V

,5 ! IO 2

RST SCLK

3

2, 4

GND

15pF

15pF

XTAL 32.768kHz

IRQ/SCI/SPI 8 1 3

START

STOP

2

,5 $ DQ RST CLK

4

ÃÙ»·Õè 6-6 ǧ¨Ãàª×Íè Áµ ͺÍà ´ AX-11 ¡ÑºäÍ«Õ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ /*————————————————————————————————————————————————————————————————*/ // Program : Read Temperature by DS1620 and Read time by RTC DS1302 // Description : Read Temperature and time show value on LCD module // and can set time by Start and Stop button // Filenam : p0605-clocktemp.ic // C compiler : Interactive C 4.21GA /*————————————————————————————————————————————————————————————————*/ #define SPCR 0x1028 /* Define Register name of SPCR in address 0x1028 */ #define SPSR 0x1029 /* Define Register name of SPSR in address 0x1029 */ #define SPDR 0x102A /* Define Register name of SPDR in address 0x102A */ #define DDRD 0x1009 /* Define Register name of DDRD in address 0x1009 */ #define PORTD 0x1008 /* Define Register name of PORTD in address 0x1008*/

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

219

#define rtc_dat1 bit_set(0x1008,0b00001000) /* Define command set bit PD3*/ #define rtc_dat0 bit_clear(0x1008,0b00001000) /* Define command set bit PD3*/ #define rtc_clk1 bit_set(0x1008,0b00010000) /* Define command set bit PD4*/ #define rtc_clk0 bit_clear(0x1008,0b00010000) /* Define command clear bit PD4*/ #define rtc_rst1 bit_set(0x1008,0b00000100) /* Define command set bit PD5*/ #define rtc_rst0 bit_clear(0x1008,0b00000100) /* Define command clear bit PD5*/ #define pin_dat1 bit_set(0x1008,0b00001000) /* Define command set bit PD3*/ #define pin_dat0 bit_clear(0x1008,0b00001000) /* Define command clear bit PD3*/ #define pin_clk1 bit_set(0x1008,0b00010000) /* Define command set bit PD4*/ #define pin_clk0 bit_clear(0x1008,0b00010000) /* Define command clear bit PD4*/ #define pin_rst1 bit_set(0x1008,0b00100000) /* Define command set bit PD5*/ #define pin_rst0 bit_clear(0x1008,0b00100000) /* Define command clear bit PD5*/ #define hour 0x85 /* Define constant address hour of DS1302*/ #define min 0x83 /* Define constant address min of DS1302*/ #define sec 0x81 /* Define constant address sec of DS1302*/ int temp[2],time[6],settime_val[3],settime[6]; /*Buffer variable*/ int status=0,step_blink=0,round_blink=0; /*Status variable*/ /*——————————————————————————————————————————————————————————————————————————*/ /*——————————————————————————————— Main program ———————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void main() { srceen_settime(); // Show screen for setting time input by // START and STOP button init_setup(); // For write time value to DS1302 while(1) // Infinite loop { read_temp(); // Read 16 bit data from DS 1620 display_data(); // Display value temp on LCD module temp_write_command(0xEE); // Write command 0xEE send // to DS 1620(convert temp.) sleep(1.0); } } /*——————————————————————————————————————————————————————————————————————————*/ /*——————— Function Show screen setting time and revive value time ————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void srceen_settime() { printf(“Start>> settime Stop>> skip\n”); // Show menu for setting time or skip while(!(start_button()||stop_button())); // Wait until push START or STOP button if(start_button()){status=1;} // Check for push START button beep(); // Sound beep 1 time settime_val[2] = rtc_read_byte(hour); // Read hour settime_val[1] = rtc_read_byte(min); // Read min settime_val[0] = rtc_read_byte(sec); // Read sec while((status==1) && !(start_button() && stop_button())) // Wait until push START and STOP button { if(start_button()) // Push START to shift blink digit setting { step_blink++; // Increase digit for blink(hh:mm:ss) beep(); // Sound beep 1 time if(step_blink>2) // Control step_blink value interval 0 to 2 step_blink = 0; // Reload for zero if > 2 }

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


220

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

if(stop_button()) // Push STOP for increment value { // Check for increment value digit ss for blinking if(step_blink==0) { settime_val[0]++; // Increment value digit ss beep(); // Sound beep 1 time if(settime_val[0]>59){settime_val[0]=0;} // Round for sec } else if(step_blink==1) // Check for increment value digit // mm for blinking { settime_val[1]++; // Increment value digit mm beep(); // Sound beep 1 time if(settime_val[1]>59){settime_val[1]=0;} // Round for min } else if(step_blink==2) // Check for increment value digit hh for blinking { settime_val[2]++; // Increment value digit hh beep(); // Sound beep 1 time if(settime_val[2]>23){settime_val[2]=0;} // Round for hour } } settime_blink(); // Call fuction for blink digit check // from status variable0 } printf(“Time: %d%d:%d%d:%d%d\n”,settime[5],settime[4],settime[3], settime[2],settime[1],settime[0]); sleep(0.5); graphic_save(); beep(); // Sound beep 1 time } /*——————————————————————————————————————————————————————————————————————————*/ /*——————————————— Function Show message for setting time success —————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void graphic_save() { printf(“ Save Clock! \n”); sleep(1.5); } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————— Function for blink LCD display while setting time ————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void settime_blink() { settime[0] = settime_val[0]%10; // Convert to Show digit ss settime[1] = settime_val[0]/10; // Convert to Show digit ss settime[2] = settime_val[1]%10; // Convert to Show digit mm settime[3] = settime_val[1]/10; // Convert to Show digit mm settime[4] = settime_val[2]%10; // Convert to Show digit hh settime[5] = settime_val[2]/10; // Convert to Show digit hh if(step_blink==0) // Check for Blink sec digit

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

221

{ if(round_blink==0) // Check for OFF sec digit { round_blink = 1; // Invert for next time printf(“Time: %d%d:%d%d:\n”,settime[5],settime[4],settime[3],settime[2]); } else if(round_blink==1) // Check for ON sec digit { round_blink = 0; // Invert for next time printf(“Time: %d%d:%d%d:%d%d\n”,settime[5],settime[4], settime[3],settime[2],settime[1],settime[0]); } } else if(step_blink==1) // Check for Blink min digit { if(round_blink==0) // Check for OFF min digit { round_blink = 1; // Invert for next time printf(“Time: %d%d: :%d%d\n”,settime[5],settime[4],settime[1],settime[0]); } else if(round_blink==1) // Check for ON min digit { round_blink = 0; // Invert for next time printf(“Time: %d%d:%d%d:%d%d\n”,settime[5],settime[4], settime[3],settime[2],settime[1],settime[0]); } } else if(step_blink==2) // Check for Blink hour digit { if(round_blink==0) // Check for OFF hour digit { round_blink = 1; // Invert for next time printf(“Time: :%d%d:%d%d\n”,settime[3],settime[2], settime[1],settime[0]); } else if(round_blink==1) // Check for ON hour digit { round_blink = 0; // Invert for next time printf(“Time: %d%d:%d%d:%d%d\n”,settime[5],settime[4], settime[3],settime[2],settime[1],settime[0]); } } sleep(0.2); // Delay 0.2 second for LCD module } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function initial setup port ———————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void init_setup() { init_port(); // Initial config. port if(status==1) // If select setup time for initial { settime_val[2] = decimal_to_bcd(settime_val[2]); // Convert value to BCD code settime_val[1] = decimal_to_bcd(settime_val[1]); // Convert value to BCD code

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


222

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C settime_val[0] = decimal_to_bcd(settime_val[0]); // Convert value to BCD code rtc_write_time(settime_val[2],settime_val[1],settime_val[0]); // Write time to DS1302

} temp_write_command(0xEE);

// Write command 0xEE to DS 1620(convert temp.) } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————— Function initial port output —————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void init_port() { poke(DDRD,0x3C); // Setup PD2,PD3,PD4 ==> output } /*——————————————————————————————————————————————————————————————————————————*/ /*———————————————————— Function read data 1 byte from DS1302 ——————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ int rtc_read_byte(int com) { int i,j,dat,k=0; // For keep counter loop poke(DDRD,0x3C); // Setup PD2,PD3,PD4 ==> output rtc_clk0; // Set clock pin = 0(for DS1302) rtc_rst1; // Set reset pin = 1(for DS1302) for(i=0;i<8;i++) // For loop 8 time { if((com & 0x01)==0x01){rtc_dat1;} // Data bit transfer else{rtc_dat0;} com = com>>1; // Shift data 1 time rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } dat = 0; poke(DDRD,0x34); // Setup PD2,PD3,PD4 ==> output for(i=0;i<8;i++) // For loop 8 time { j = (peek(0x1008) & 0x08)>>3; // Read data bit receive dat = (dat>>1)|(j<<7); // Keep data rtc_clk1; // Set clock pin = 1(for DS1302) k++; // Delay a few time rtc_clk0; // Set clock pin = 0(for DS1302) } rtc_rst0; // Set reset pin = 0(for DS1302) dat = bcd_to_decimal(dat); // Convert data from BCD to decimal return(dat); // Return data read from DS1302 1 byte } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————— Function write data 1 byte to DS 1302 —————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void rtc_write_byte(int addr,int dat) { int i,k=0; // For counter poke(DDRD,0x3C); // Setup PD2,PD3,PD4 ==> output

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C rtc_clk0; rtc_rst1; for(i=0;i<8;i++) { if((addr & 0x01)==0x01){rtc_dat1;} else{rtc_dat0;} addr = addr>>1; rtc_clk1; k++; rtc_clk0; } for(i=0;i<8;i++) { if((dat & 0x01)==0x01){rtc_dat1;} else{rtc_dat0;} dat = dat>>1; rtc_clk1; k++; rtc_clk0; } rtc_rst0;

l

223

// Set clock pin = 0(for DS1302) // Set reset pin = 1(for DS1302) // For loop 8 time for send address // Data bit transfer // // // //

Shift data 1 time Set clock pin = 1(for DS1302) Delay a few time Set clock pin = 0(for DS1302)

// For loop 8 time for send data

// // // //

Shift data 1 time Set clock pin = 1(for DS1302) Delay a few time Set clock pin = 0(for DS1302)

// Set reset pin = 0(for DS1302) } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function write time to DS 1302 ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void rtc_write_time(int rtc_hour,int rtc_min,int rtc_sec) { rtc_write_byte(0x8E,0); // Enable data ram access rtc_write_byte(0x84,rtc_hour); // Write data 0x04 to ram address 0xD0 rtc_write_byte(0x82,rtc_min); // Write data 0x10 to ram address 0xC4 rtc_write_byte(0x80,rtc_sec); // Write data 0x15 to ram address 0xC0 rtc_write_byte(0x8E,0x80); // Disable data ram access } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function convert BCD to decimal ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ int bcd_to_decimal(int dc) { return((((dc & 0xF0)>>4)*10)+(dc & 0x0F)); // Return decimal value from convert } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function convert decimal to BCD ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ int decimal_to_bcd(int dat) { return(((dat/10)*16)+(dat%10)); // Return BCD value from convert } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————— Function Read temp from DS 1620 ———————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void read_temp(void) { int i,j,command=0xAA; // Keep counter and buffer poke(DDRD,0x3C); // Config Direction control for rtc_dat ==> input data from ds1302

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


224

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

pin_clk1; // Set clock pin = 1 pin_rst1; for(i=0;i<8;i++) // For loop 8 time { pin_clk0; // Set clock pin = 0 if((command & 0x01)==0x01){pin_dat1;} // Compare bit data and define value else{pin_dat0;} command = command>>1; // Shift dat 1 time pin_clk1; // Set clock pin = 1 } poke(DDRD,0x34); // Config Direction control for rtc_dat ==> input data from ds1302 for(i=0;i<8;i++) // For loop 8 time { pin_clk0; // Set clock pin = 0 j = (peek(0x1008) & 0x08)>>3; // Read data bit 3 address 0x1008 // and rotate right 3 time and keep to j temp[0] = (temp[0]>>1)|(j<<7); // Keep data bit by bit to temp[0] pin_clk1; // Set clock pin = 1 } for(i=0;i<8;i++) { pin_clk0; // Set clock pin = 0 j = (peek(0x1008) & 0x08)>>3; // Read data bit 3 address 0x1008 // and rotate right 3 time and keep to j temp[1] = (temp[1]>>1)|(j<<7); // Keep data bit by bit to temp[1] pin_clk1; // Set clock pin = 1 } pin_rst0; } /*——————————————————————————————————————————————————————————————————————————*/ /*—————————————————————— Function Send command to DS1620 —————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void temp_write_command(int command) { int m; // Keep counter poke(DDRD,0x3C); // Config Direction control // for rtc_dat ==> output data to ds1302 pin_clk1; pin_rst1; for(m=0;m<8;m++) // For loop 8 time { pin_clk0; // Set clock pin = 0 if((command & 0x01)==0x01){pin_dat1;} // Compare bit data and define value else{pin_dat0;} command = command>>1; // Shift dat 1 time pin_clk1; // Set clock pin = 1 } pin_rst0; }

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

225

/*——————————————————————————————————————————————————————————————————————————*/ /*——————————————— Function read time and convert data to 6 digit ———————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void time_to_digit(int data[]) { int buf_hour,buf_min,buf_sec; // Buffer buf_hour = rtc_read_byte(hour); // Read hour buf_min = rtc_read_byte(min); // Read min buf_sec = rtc_read_byte(sec); // Read sec data[0] data[1] data[2] data[3] data[4] data[5]

= = = = = =

(buf_sec%10); (buf_sec/10); (buf_min%10); (buf_min/10); (buf_hour%10); (buf_hour/10);

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

Convert Convert Convert Convert Convert Convert

sec keep to array index 0 sec keep to array index 1 min keep to array index 2 min keep to array index 3 hour keep to array index 4 hour keep to array index 5

} /*——————————————————————————————————————————————————————————————————————————*/ /*——————————————— Function Display time & temp. on LCD module ——————————————*/ /*——————————————————————————————————————————————————————————————————————————*/ void display_data() { int buf_temp; // Keep temp. data to convert value buf_temp = temp[0]; // Load data temp. to buf_temp time_to_digit(time); if((temp[0] & 0x01)==0x01) // Check value of temp = .5 ? { buf_temp = buf_temp>>1; // Convert to integer temp. printf(“Temp: %d.5 C Time: %d%d:%d%d:%d%d\n”,buf_temp,time[5], time[4],time[3],time[2],time[1],time[0]); // For temp .5 } else { buf_temp = buf_temp>>1; // Convert to integer temp. printf(“Temp: %d.0 C Time: %d%d:%d%d:%d%d\n”,buf_temp,time[5], time[4],time[3],time[2],time[1],time[0]); // For temp .5 } } /*——————————————————————————————————————————————————————————————————————————*/ /*————————————————————————————————— END ———————————————————————————————————*/ /*——————————————————————————————————————————————————————————————————————————*/

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ à¹×Íè §¨Ò¡ã¹Ç§¨Ãä´ àª×Íè Áµ ÍäÍ«Õ DS1302 ¡ÑºäÍ«Õ DS1620 à ÇÁ¡Ñ¹¡Ñº 68HC11 º¹ºÍà ´ AX-11 ¨Ö§ÁÕ¡ÒÃ㪠¢Ò¾Íà µ PD3 ÃѺáÅÐÊ §¢ ÍÁÙÅáÅÐ PD4 µ ÍÊÑ­­Ò³¹ÒÌ ¡Òà ÇÁ¡Ñ¹ áµ ¢ÒÃÕ૵¢Í§äÍ«Õ·§Ñé Êͧ µÑǶ١¤Çº¤ØÁᡨҡ¡Ñ¹ «Ö§è 㪠¢Ò¾Íà µ PD2 ¤Çº¤ØÁ¢ÒÃÕ૵¢Í§ DS1620 áÅТҾÍà µ PD5 ¤Çº¤ØÁ ¢ÒÃÕ૵¢Í§ DS1302 ´Ñ§¹Ñ¹é 㹡ÒÃÊà ҧÊÀÒÇСÒÃÃѺáÅÐÊ §¢ ÍÁÙŨ֧µ ͧÁÕ¡ÒáíÒ˹´Ë¹ Ò·Õ¢è ͧ¾Íà µµ Ò§æ â´Â㪠¤Òí ÊÑ§è ´Ñ§¹Õé

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


226

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

poke(DDRD,0x3C);

à¾×Íè ¡íÒ˹´ãË PD2, PD3, PD4 áÅÐ PD5 à» ¹¾Íà µàÍÒµ ¾µØ

poke(DDRD,0x34); à¾×Íè ¡íÒ˹´ãË PD2, PD4 áÅÐ PD5 à» ¹¾Íà µàÍÒµ ¾µØ Ê Ç¹ PD3 à» ¹ ¾Íà µÍÔ¹¾Øµã¹¡ÒÃÃѺ¢ ÍÁÙŨҡ DS1302 ËÃ×Í DS1620 ¢Ö¹é ÍÂÙ¡ ºÑ Ç Òã¹¢³Ð¹Ñ¹é ¢ÒÃÕ૵¢Í§äÍ«ÕµÇÑ ã´ÁÕÊÀÒ ÇÐÅͨԡ໠¹ 1 ËÃ×Í 68HC11 àÅ×Í¡µÔ´µ ÍäÍ«ÕµÇÑ ã´ µÑÇá»Ã·Õãè ª 㹡ÒÃà¡çº¢ ÍÁÙÅ·ÕÊè Òí ¤Ñ­ËÃ×͵ÑÇá»ÃÊ Ç¹¡ÅÒ§ temp[2] à» ¹µÑÇá»ÃÍÐàࢹҴ 2 ˹ Ç 㪠à¡çº¢ ÍÁÙÅÍسËÀÙÁâÔ ´Â·Õè temp[0] à¡çº¤ ÒÍسËÀÙÁäÔ ºµ µÒèí ·ÕÍè Ò ¹ä´ ¨Ò¡ DS1620 temp[1] à¡çº¤ ÒÍسËÀÙÁäÔ ºµ ʧ٠·ÕÍè Ò ¹ä´ ¨Ò¡ DS1620 (à¡çºà¤Ã×Íè §ËÁÒ¤ ÒÍسËÀÙÁÔ äÁ ãªã¹â»Ãá¡ÃÁ) time[6] à» ¹µÑÇá»ÃÍÐàࢹҴ 6 ˹ ÇÂ㪠à¡çº¢ ÍÁÙÅàÇÅÒâ´Â·Õè temp[0] à¡çº¤ ÒàÇÅÒÇÔ¹Ò·ÕËÅѡ˹ Ç·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 temp[1] à¡çº¤ ÒàÇÅÒÇÔ¹Ò·ÕËÅÑ¡ÊÔº·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 temp[2] à¡çº¤ ÒàÇÅÒ¹Ò·ÕËÅѡ˹ Ç·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 temp[3] à¡çº¤ ÒàÇÅÒ¹Ò·ÕËÅÑ¡ÊÔº·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 temp[4] à¡çº¤ ÒàÇÅÒªÑÇè âÁ§ËÅѡ˹ Ç·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 temp[5] à¡çº¤ ÒàÇÅÒªÑÇè âÁ§ËÅÑ¡ÊÔº·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 settime_val[3] à» ¹µÑÇá»ÃÍÐàࢹҴ 3 ˹ ÇÂ㪠à¡çº¢ ÍÁÙÅàÇÅÒàÁ×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ â´Â·Õè settime_val[0] à¡çº¤ ÒàÇÅÒÇÔ¹Ò·Õ·ÍÕè Ò ¹ä´ ¨Ò¡ DS1302 (à» ¹¤ Ò BCD) settime_val[1] à¡çº¤ ÒàÇÅÒ¹Ò·Õ·ÍÕè Ò ¹ä´ ¨Ò¡ DS1302 (à» ¹¤ Ò BCD) settime_val[2] à¡çº¤ ÒàÇÅÒªÑÇè âÁ§·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 (à» ¹¤ Ò BCD) settime[6] à» ¹µÑÇá»ÃÍÐàࢹҴ 6 ˹ ÇÂ㪠à¡çº¢ ÍÁÙÅ¡ÒÃµÑ§é ¤ ÒàÇÅÒàÁ×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ â´Â·Õè settime[0] à¡çº¤ ÒàÇÅÒÇÔ¹Ò·ÕËÅѡ˹ Ç·ըè ÐµÑ§é ¤ ÒãË ¡ºÑ DS1302 settime[1] à¡çº¤ ÒàÇÅÒÇÔ¹Ò·ÕËÅÑ¡ÊÔº·Õ¨è ÐµÑ§é ¤ ÒãË ¡ºÑ DS1302 settime[2] à¡çº¤ ÒàÇÅÒ¹Ò·ÕËÅѡ˹ Ç·ըè ÐµÑ§é ¤ ÒãË ¡ºÑ DS1302 settime[3] à¡çº¤ ÒàÇÅÒ¹Ò·ÕËÅÑ¡ÊÔº·Õ¨è ÐµÑ§é ¤ ÒãË ¡ºÑ DS1302 settime[4] à¡çº¤ ÒàÇÅÒªÑèÇâÁ§ËÅѡ˹ Ç·Õè¨ÐµÑ駤 ÒãË ¡Ñº DS1302 settime[5] à¡çº¤ ÒàÇÅÒªÑÇè âÁ§ËÅÑ¡ÊÔº·Õ¨è ÐµÑ§é ¤ ÒãË ¡ºÑ DS1302 status à» ¹µÑÇá»Ã·Õãè ª áÊ´§Ê¶Ò¹Ð¡Òá´ÊÇÔµª START µÍ¹àÃÔÁè µ ¹â»Ãá¡ÃÁà¾×Íè µÑ§é àÇÅÒ ¶ Òà» ¹ 0 áÊ´§Ç ÒÂѧäÁ Á¡Õ Òá´ËÃ×Í¢ ÒÁ¢Ñ¹é µÍ¹¡Òõѧé àÇÅÒ (skip) ´ Ç¡Òá´ÊÇÔµª STOP áµ ¶Ò à» ¹ 1 áÊ´§

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

227

Ç ÒÁÕ¡Òá´ÊÇÔµª START µÑÇá»Ã status ¨ÐÁÕ¡ÒÃâËÅ´¤ Òà» ¹ 1 àÁ×Íè ÁÕ¡ÒÃÊÇÔµª START áµ ¶Ò ¡´ÊÇÔµª STOP µÑÇá»Ã status ¨ÐäÁ Á¡Õ ÒÃâËÅ´¤ Òã´·íÒãË Á¤Õ Ò à» ¹ 0 ෠ҡѺ¤ ÒµÑ§é µ ¹ step_blink à» ¹µÑÇá»Ã·Õè㪠µÃǨÊͺµíÒá˹ §¡ÒáоÃÔº·ÕèËÅÑ¡¢Í§àÇÅÒ ªÑèÇâÁ§(hh),¹Ò·Õ(mm) ËÃ×Í ÇÔ¹Ò·Õ(ss) ã¹¢³Ðà´ÕÂǡѹ㪠µÃǨÊ꼂 ÒËÅÑ¡¢Í§àÇÅÒã´¡íÒÅѧ¡Ð¾ÃÔºÍÂÙ ¡ç¨ÐÊÒÁÒöµÑ§é ¤ ÒàÇÅÒËÅÑ¡¹Ñ¹é æ ä´ ´Ç ¡Òá´»ØÁ STOP à¾×Íè à¾ÔÁè ¤ ÒàÇÅÒ·ÕËè ÅÑ¡´Ñ§¡Å ÒÇ ¨Ð¶Ù¡àÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè settime_blink áÅÐ srceen_settime round_blink à» ¹µÑÇá»Ã·Õãè ª 㹡ÒÃáÊ´§¤ ҢͧàÇÅÒã¹¢³Ð·Õ¡è Òí Åѧ¡Ð¾ÃÔºàÁ×Íè ࢠÒÊÙâ ËÁ´¡ÒÃµÑ§é ¤ ÒàÇÅÒ â´Â¨ÐÁÕ¤Ò ÊÅѺä»ÁÒÃÐËÇ Ò§ 1 ¡Ñº 0 ¶Ù¡àÃÕ¡㪠§Ò¹ÀÒÂ㹿 §¡ ª¹Ñè settime_blink ÁÕ¤ÇÒÁËÁÒ´ѧ¹Õé ¶ Ò round_blink = 0 ¤ ÒàÇÅҢͧËÅÑ¡·Õ¡è Òí Åѧ¡Ð¾ÃÔºäÁ áÊ´§¤ Ò (OFF) ¶éÒ round_blink = 1 ¤èÒàÇÅҢͧËÅÑ¡·Õ¡è ÓÅѧ¡Ð¾ÃÔºáÊ´§¤èÒ (ON)

˹ Ò·Õè¢Í§¿ §¡ ªÑè¹·ÕèÊíҤѭ ¿ §¡ ª¹Ñè init_port 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D àÁ×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ ¿ §¡ ª¹Ñè srceen_settime 㪠áÊ´§àÁ¹ÙàÃÔÁè µ ¹¢Í§â»Ãá¡ÃÁÇ Ò µ ͧ¡ÒÃµÑ§é ¤ ÒàÇÅÒãË ¡ºÑ DS1302 ËÃ×ÍäÁ â´ÂáÊ´§¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD à» ¹ Start>> Stop>>

settime skip

ËÁÒ¤ÇÒÁÇ Ò ¶ Òµ ͧ¡Òõѧé àÇÅÒãË ¡´ÊÇÔµª START áµ ¶Ò äÁ µÍ §¡ÒÃãË ¢Ò Áä»â´Â¡´ÊÇÔµª STOP «Ö§è â»Ãá¡ÃÁ¨ÐÃͨ¹¡Ãзѧè ÁÕ¡Òá´ÊÇÔµª µÇÑ ã´µÑÇË¹Ö§è ¨Ò¡¤íÒÊѧè while(!(start_button()||stop_button()));

áÅж ÒËÒ¡ÁÕ¡Òá´ÊÇÔµª START ¡ç¨ÐࢠÒÊÙ âËÁ´¡ÒõÑé§àÇÅÒãË ¡Ñº DS1302 â´Â·Õèâ»Ãá¡ÃÁ¨Ð ¡íÒ˹´¤ ÒµÑÇá»Ã status ãË à» ¹ 1 à¾×Íè 㪠µÃǨÊͺ¤ ÒʶҹСÒÃàÅ×Í¡¡´ÊÇÔµª µÍ ä» ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ ¨ÐÍ Ò¹¤ ÒàÇÅÒ¨Ò¡ DS1302 ÁÒà¡çºäÇ ·µÕè ÇÑ á»ÃÍÐààsettime_val à¾×Íè àµÃÕÂÁáÊ´§¤ ÒàÇÅÒ (¤ Ò·ÕÃè ºÑ à¢ Ò ÁÒà» ¹àÅ¢ÃËÑÊ°Ò¹ÊÔº) ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¡ç¨ÐǹÃͺµÃǨÊͺ¡Òá´ÊÇÔµª ·§Ñé ÊͧµÅÍ´àÇÅÒ ¾Ã ÍÁ¡Ñº áÊ´§¤ ÒàÇÅÒ·Õ¡è Òí Åѧ¨ÐµÑ§é ¤ ÒáÅÐËÅÑ¡·Õ¡è Òí Åѧ¡Ð¾ÃÔºà· Ò¹Ñ¹é ·Õ¨è ÐÊÒÁÒö»ÃѺ¤ Òä´ â´Â·Õè ¶ Ò¡´ÊÇÔµª START ¨Ðà» ¹¡ÒÃàÅ×Íè ¹ËÅÑ¡àÇÅÒ·Õ¨è ÐµÑ§é ¤ Ò Êѧࡵ¨Ò¡¡ÒáоÃÔº(¡´¤ 񤊫 ) ·Ø¡¤ÃÑ§é ·ÕÁè ¡Õ ÒÃàÅ×Íè ¹¢Í§ËÅÑ¡¨ÐÁÕÊ­ Ñ ­Ò³àÊÕ§´Ñ§ 1 ¤ÃÑ§é ¶ Ò¡´ÊÇÔµª STOP ¨Ðà» ¹¡ÒÃà¾ÔÁè ¤ ÒàÇÅÒẺǹÃͺ (¡´¤ 񤊫 ) ·Ø¡¤ÃÑ§é ·ÕÁè ¤Õ Ò à»ÅÕÂè ¹á»Å§¨ÐÁÕ ÊÑ­­Ò³àÊÕ§´Ñ§ 1 ¤Ãѧé

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


228

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¶ Ò¡´ÊÇÔµª START áÅÐ STOP ¾Ã ÍÁ¡Ñ¹ à» ¹¡ÒÃàÊÃç¨ÊÔ¹é ¡Òõѧé àÇÅÒ â»Ãá¡ÃÁ¨ÐáÊ´§¢ ͤÇÒÁ Save Clock! ¾Ã ÍÁÊÑ­­Ò³àÊÕ§´Ñ§ 1 ¤ÃÑé§ «Ö觡ÒÃáÊ´§¼Å¢ ͤÇÒÁ´Ñ§¡Å ÒÇàÃÕ¡㪠§Ò¹¨Ò¡¿ §¡ ªÑè¹ graphic_save «Ö§è ¼Ù¾ ² Ñ ¹ÒÍÒ¨´Ñ´á»Å§ãË áÊ´§¼Åà¾ÔÁè àµÔÁä´ ¿ §¡ ª¹Ñè init_setup 㪠¡Òí ˹´¡Ò÷íÒ§Ò¹¢Í§¾Íà µ D ¾Ã ÍÁ¡ÑºµÃǨÊ꼂 ÒÁÕ¡ÒÃµÑ§é ¤ ÒàÇÅÒ㹵͹àÃÔÁè µ ¹¢Í§â»Ãá¡ÃÁ´ ÇÂËÃ×ÍäÁ â´ÂµÃǨÊÍºä´ ¨Ò¡¤ ÒµÑÇá»Ã status ¶ ÒÁÕ¤Ò à» ¹ 1 áÊ´§Ç Ò ÁÕ¡ÒÃµÑ§é ¤ Ò àÇÅÒ㹵͹àÃÔÁè µ ¹ Ê Ç¹¤ ÒàÇÅÒ·ÕÃè ºÑ à¢ ÒÁÒ¶Ù¡à¡çºäÇ ·µÕè ÇÑ á»ÃÍÐààsettime_val áµ à» ¹µÑÇàÅ¢°Ò¹ÊÔº â´Â·Õè settime_val[0] à¡çº¤ ÒàÇÅÒËÅÑ¡ÇÔ¹Ò·Õ settime_val[1] à¡çº¤ ÒàÇÅÒËÅÑ¡¹Ò·Õ settime_val[2] à¡çº¤ ÒàÇÅÒËÅÑ¡ªÑèÇâÁ§ ´Ñ§¹Ñ¹é ¶ Ò¾ºÇ ÒÁÕ¡ÒÃµÑ§é ¤ ÒàÇÅÒ â»Ãá¡ÃÁ¨Ö§µ ͧá»Å§¤ Òã¹µÑÇá»Ã settime_val ¨Ò¡àÅ¢°Ò¹ÊÔºä» à» ¹àÅ¢ÃËÑÊ°Ò¹ÊÔº (BCD) ´ Ç¿ §¡ ª¹Ñè decimal_to_bcd áÅ Çà¡çºäÇ ·µÕè ÇÑ á»Ã settime_val ÍÕ¡¤Ãѧé à¾×Íè ãË ÍÂÙã ¹ÃٻẺà´ÕÂǡѺ¡ÒÃÍ Ò¹áÅÐà¢Õ¹¤ ÒàÇÅҢͧ DS1302 ËÅѧ¨Ò¡¹Ñ¹é ¨ÐºÑ¹·Ö¡¤ ÒàÇÅÒ´ Ç¿ §¡ ª¹Ñè rtc_write_time µ Íä» ¿ §¡ ª¹Ñè settime_blink 㪠áÊ´§¼Å¡ÒáоÃÔºËÅÑ¡àÇÅÒ·Õ¡è Òí Åѧ¶Ù¡àÅ×Í¡ãË µ§Ñé ¤ Ò ¡Ò÷íÒ§Ò¹¢Í§¿ §¡ ª¹Ñè ¹Õé àÃÔÁè µ ¹´ Ç¡ÒùíÒ¤ ÒàÇÅÒ·Õàè ¡çºÍÂÙã ¹ settime_val ÁÒá»Å§à» ¹àÅ¢°Ò¹ÊÔº¨íҹǹ 6 ËÅÑ¡ áÅ Çà¡çºäÇ ã¹ µÑÇá»ÃÍÐààsettime ¨Ò¡¹Ñ¹é ·íÒ¡ÒÃáÊ´§¼Å¤ ÒàÇÅÒ·Õµè §Ñé ã¹¢³Ð¹Ñ¹é ¿ §¡ ª¹Ñè bcd_to_decimal 㪠á»Å§àÅ¢ÃËÑÊ°Ò¹ÊԺ໠¹àÅ¢°Ò¹ÊÔº ¿ §¡ ª¹Ñè decimal_to_bcd 㪠á»Å§àÅ¢°Ò¹ÊÔºä»à» ¹àÅ¢ÃËÑÊ°Ò¹ÊÔº ¿ §¡ ª¹Ñè time_to_digit 㪠ÍÒ ¹¤ ÒàÇÅÒ¨Ò¡ DS1302 ·Õàè » ¹àÅ¢ÃËÑÊ°Ò¹ÊÔºáÅ Ç·íÒ¡ÒÃá»Å§à» ¹àÅ¢°Ò¹ ÊÔº 6 ËÅÑ¡ ¨Ò¡¹Ñ¹é ¹íÒä»à¡çºäÇ ·µÕè ÇÑ á»ÃÍÐàà·ãÕè ª à» ¹ÍСÔÇàÁ¹µ ÊíÒËÃѺ¿ §¡ ª¹Ñè ¹Õãé ª ÊÒí ËÃѺá»Å§¤ ÒàÇÅÒ ¨ÃÔ§¨Ò¡¡ÒÃàÃÕ¡¤íÒÊÑè§ time_to_digit(time); «Ö§è ¨Ð¶Ù¡àÃÕ¡㪠㹿 §¡ ª¹Ñè display_data ·Õ·è Òí ¡ÒÃáÊ´§¼Å ·Ñ§é ÍسËÀÙÁáÔ ÅÐàÇÅҾà ÍÁæ¡Ñ¹ÍÕ¡¤Ãѧé Ë¹Ö§è ¿ §¡ ª¹Ñè display_data 㪠á»Å¤ÇÒÁËÁÒ¢ ÍÁÙÅÍسËÀÙÁáÔ ÅÐàÇÅÒ áÅ ÇáÊ´§¼Å¾Ã ÍÁ¡Ñ¹·Õâè Á´ÙÅ LCD â´Â ºÃ÷Ѵº¹áÊ´§¤ ÒÍسËÀÙÁ·Ô ÍÕè Ò ¹ä´ ¨Ò¡ DS1620 Ê Ç¹ºÃ÷ѴŠҧ (ºÃ÷Ѵ·ÕÊè ͧ) áÊ´§¤ ÒàÇÅÒ·ÕÍè Ò ¹ä´ ¨Ò¡ DS1302 ¼ÅÅѾ¸ ¤Í× Temp: xx.x

C

Time: hh:mm:ss

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

229

¿ §¡ ª¹Ñè rtc_read_byte ãª Í Ò¹¤ Ò¢ ÍÁÙÅ 1 亵 ¨Ò¡ DS1302 â´Â¡ÒÃÃкؤ ÒáÍ´à´ÃÊ·Õèµ Í§¡ÒÃÍ Ò¹ ãÊ à» ¹¤ ÒÍСÔÇàÁ¹µ áÅп §¡ ªÑè¹¹Õé¨Ð¤×¹¤ Ò¼ÅÅѾ¸ à» ¹¢ ÍÁÙŢͧáÍ´à´ÃÊ·ÕèãÊ à» ¹ÍСÔÇàÁ¹µ ä» «Öè§ã¹ â»Ãá¡ÃÁ¨Ð㪠¿§ ¡ ª¹Ñè ¹ÕÍé Ò ¹¢ ÍÁÙŨҡáÍ´à´ÃÊ·Õàè ¡çº¤ ÒàÇÅÒ Íѹ»ÃСͺ´ Ç áÍ´à´ÃÊ 0x84 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡ªÑÇè âÁ§ áÍ´à´ÃÊ 0x82 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡¹Ò·Õ áÍ´à´ÃÊ 0x80 à¡çº¢ ÍÁÙÅàÇÅÒËÅÑ¡ÇÔ¹Ò·Õ ¿ §¡ ª¹Ñè rtc_write_byte 㪠à¢Õ¹¢ ÍÁÙÅ 1 亵 ãË ¡ºÑ DS1302 â´ÂÁÕµÇÑ á»ÃÃѺ¢ ÍÁÙÅ 2 µÑÇ «Ö§è µÑÇáá㪠ÃѺ¤ ÒáÍ´à´ÃÊ áÅеÑÇ·ÕÊè Í§ãª ÃºÑ ¢ ÍÁÙÅ·Õµè Í §¡ÒÃà¡çºÅ§ã¹áÍ´à´ÃÊ ¿ §¡ ª¹Ñè rtc_write_time 㪠à¢Õ¹¢ ÍÁÙÅàÇÅÒä»ãË ¡ºÑ DS1302 â´ÂÁÕµÇÑ á»ÃÃѺ¢ ÍÁÙÅ 3 µÑÇ ãª ÃºÑ ¤ ÒàÇÅÒ ªÑÇè âÁ§ ,¹Ò·Õ áÅÐÇÔ¹Ò·ÕµÒÁÅíҴѺ ¿ §¡ ª¹Ñè read_temp 㪠ÍÒ ¹¢ ÍÁÙÅÍسËÀÙÁÔ 2 亵 ¨Ò¡ DS1620 ÁÒà¡çºäÇ ·µÕè ÇÑ á»ÃÍÐààtemp â´Â·Õè ¢ ÍÁÙÅÍسËÀÙÁäÔ ºµ µÒèí à¡çº·Õè temp[0] áÅТ ÍÁÙÅÍسËÀÙÁäÔ ºµ ʧ٠à¡çº·Õè temp[1] áµ à¹×Íè §¨Ò¡ÍسËÀÙÁ·Ô ÇÑè æ ä»ÁÑ¡à» ¹¤ Һǡ ã¹â»Ãá¡ÃÁ¹Õ¨é йíÒ¤ Ò¢ ÍÁÙÅÍسËÀÙÁäÔ ºµ µÒèí ·Õàè ¡çºäÇ ã¹ temp[0] ÁÒ¾Ô¨ÒóÒà· Ò¹Ñ¹é ¿ §¡ ª¹Ñè temp_write_command 㪠à¢Õ¹¢ ÍÁÙŤíÒÊѧè 1 亵 ä»ãË ¡ºÑ DS1620

â»Ãá¡ÃÁ·Õè P6-5 â»Ãá¡ÃÁµÔ´µ ͡Ѻ DS1302 áÅÐ DS1620 à¾×Íè Êà ҧÃкºáÊ´§àÇÅÒáÅÐÍسËÀÙÁÔ (¨º)

6.5 ¡ÒõԴµ ÍÃÐËÇ Ò§ 68HC11 ¡Ñº GP2D12 âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧ ẺÍÔ¹¿ÃÒàô GP2D12 à» ¹âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧẺÍÔ¹¿ÃÒàô·ÕÊè ÒÁÒöÇÑ´ÃÐÂÐ·Ò§ä´ ¶¡Ù µ ͧ㹪 ǧ 10-80 ૹµÔàÁµÃ â´ÂãË ¼Å¡ÒõÃǨ¨Ñºà» ¹áç´Ñ¹ä¿µÃ§ã¹Â Ò¹ 0.4-2.4V ÃÒÂÅÐàÍÕ´â´ÂÊÃØ»¢Í§ GP2D12 ´Ùä´ ã¹¡Ãͺá¡·ÕèÊÃØ»äÇ ãË áÅ Ç GP2D12 »ÃСͺ´ ǵÑÇÊ §áÅеÑÇÃѺÍÔ¹¿ÃÒàô·ÕèµÔ´ µÑé§ÀÒÂãµ µÑǶѧà´ÕÂǡѹ GP2D12 ¨Ð·íÒ§Ò¹·Ñ¹·Õ·ÕèÁÕä¿àÅÕé§ 5V ¨ ÒÂãË â´ÂµÑÇÊ §ÍÔ¹¿ÃÒàô¨Ð¢Ñº áʧÍÔ¹¿ÃÒàô¨Ò¡µÑÇÁѹµÅÍ´àÇÅÒ áÅÐàÁ×èÍã´·ÕèÁÕÇѵ¶ØÁÒ¢ÇÒ§¡Ñé¹ ·íÒãË à¡Ô´¡ÒÃÊз ͹¢Í§áʧ ÍÔ¹¿ÃÒàô¡ÅѺä»ÂѧµÑÇÃѺÀÒÂã¹ GP2D12 ·ÕèµÑÇÃѺ¨Ðµ ÍࢠҡѺǧ¨Ã»ÃÐÁÇżÅÊÑ­­Ò³à¾×èÍÊà ҧ áç´Ñ¹ÍÍ¡ä»·Ò§¢ÒàÍÒµ ¾Øµ â´Â¶ Òä´ ÃѺáʧ·ÕèÁÕ¤ÇÒÁࢠÁÁÒ¡ áç´Ñ¹¡ç¨ÐÊÙ§ ¡Ò÷Õè¨Ðà¡Ô´¡ÒÃÃѺ áʧ·ÕÁè ¤Õ ÇÒÁࢠÁÊÙ§ ¹Ñ¹è ËÁÒ¤ÇÒÁÇ Ò à¡Ô´¡ÒÃÊз ͹áʧ¡ÅѺÁÒÁÒ¡ à¹×Íè §¨Ò¡ÃÐÂзҧ·Õµè ÃǨ¨Ñº ä´ ÍÂÙã ¡Å ¡ºÑ âÁ´ÙŵÃǨ¨Ñº¹Ñ¹è àͧ áµ ¶Ò ËÒ¡»ÃÔÁÒ³áʧÍÔ¹¿ÃÒàô·ÕÊè з ͹¡ÅѺÁÒÁÕ¹Í Â áç´Ñ¹ àÍÒµ ¾µØ ·Õãè Ë ÍÍ¡ÁҨй ͵ÒÁ ¹Ñ¹è à» ¹à¾ÃÒÐâÁ´ÙŵÃǨ¨ÑºÍÂÙË Ò §¨Ò¡ÊÔ§è ¡Õ´¢ÇÒ§·Õµè ÃǨ¨ÑºÁÒ¡¢Ö¹é


230

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

á¹Ð¹íÒ GP2D12 áÅÐ GP2D120 âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧẺÍÔ¹¿ÃÒàô

㪠¡ÒõÃǨ¨ÑºÃÐÂзҧ´ Ç¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô l ÇÑ´ÃÐÂÐ·Ò§ä´ 10-80 ૹµÔàÁµÃ ÊíÒËÃѺ GP2D12 áÅÐ 4-30 ૹµÔàÁµÃ ÊíÒËÃѺ GP2D120 l ä¿àÅÕÂ é §·Õàè ËÁÒÐÊÁ¤×Í 4.5 ¶Ö§ 5V µ ͧ¡ÒáÃÐáÊä¿¿ Ò·Õ¡è ÒÃÇÑ´ÃÐÂзҧÊÙ§ÊØ´ 50mA l ãË àÍÒµ ¾µ Ø à» ¹áç´Ñ¹ã¹Â Ò¹ 0.4 ¶Ö§ 2.4V ·Õäè ¿àÅÕÂé § +5V l 㪠§Ò¹ä´ â´ÂäÁ µÍ §µ ÍÍØ»¡Ã³ ÀÒ¹͡à¾ÔÁè àµÔÁ l

GP2D12 à» ¹âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧẺÍÔ¹¿ÃÒàôÁÕ¢Òµ Í㪠§Ò¹ 3 ¢Ò¤×Í ¢Òµ Íä¿àÅÕÂé § (Vcc), ¢Ò¡ÃÒÇ´ (GND) áÅТÒáç´Ñ¹àÍÒµ ¾µØ (Vout) ¡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ò¡ GP2D12 ¨Ðµ ͧÃÍãË ¾¹ ª ǧàµÃÕÂÁ ¤ÇÒÁ¾Ã ÍÁ¢Í§âÁ´ÙÅ¡ ͹ «Ö§è 㪠àÇÅÒ»ÃÐÁÒ³ 32.7-52.9 ÁÔÅÅÔÇ¹Ô Ò·Õ ´Ñ§¹Ñ¹é 㹡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ö§¤ÇÃÃÍ ãË ¾¹ ª ǧàÇÅҴѧ¡Å ÒÇ仡 ͹

˹ ÒµÒ,¡ÒèѴ¢Ò áÅÐÃٻẺ¡Ò÷íÒ§Ò¹¢Í§ GP2D12/GP2D120 LED ÍÔ¹¿ÃÒàôµÑÇÊ §

ä¿àÅÕÂé §

µÑÇÃѺáʧÍÔ¹¿ÃÒàô

GP2D12

Vout

GND

Vcc

38.3±9.6

ÁÔÅÅÔÇ¹Ô Ò·Õ

¡ÒÃÇÑ´ÃÐÂÐË Ò§

ÇÑ´¤ÃÑ§é ·Õè 1

áç´Ñ¹àÍÒµ ¾µØ

äÁ á¹ ¹Í¹

ÇÑ´¤ÃÑ§é ·Õè 2

ÇÑ´¤ÃÑ§é ·Õè n

àÍÒµ ¾Øµ¤ÃÑ駷Õè 1 àÍÒµ ¾Øµ¤ÃÑ駷Õè 2

àÍÒµ ¾Øµ¤ÃÑ駷Õè n

5 ÁÔÅÅÔÇ¹Ô Ò·Õ

¤ Òáç´Ñ¹àÍÒµ ¾µØ ¢Í§ÃÐÂзҧ 80 ૹµÔàÁµÃ·Õäè ¿àÅÕÂé § +5V ÍÂÙã ¹ª ǧ 0.25-0.55V â´Â¤ Ò¡ÅÒ§ ¤×Í 0.4V* ª ǧ¢Í§¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹àÍÒµ ¾µØ ·ÕÃè ÐÂзҧ 10-80 ૹµÔàÁµÃ¤×Í 2V ±0.25V*

¡ÃÒ¿áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ GP2D12 áç´Ñ¹àÍÒµ ¾µØ (V)

¡ÃÒ¿áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ GP2D120 áç´Ñ¹àÍÒµ ¾µØ (V)

2.8

2.8

2.4

2.4

2.0

2.0

1.6

1.6

1.2

1.2

0.8

0.8

0.4

0.4

0

0

10

20

30

40

50

60

70

ÃÐÂÐË Ò§¨Ò¡Çѵ¶Ø·µèÕ ÃǨ¨Ñº (cm)

80

0

0

4

8

12

16

20

24

28

ÃÐÂÐË Ò§¨Ò¡Çѵ¶Ø·µèÕ ÃǨ¨Ñº (cm)

32

* 㪠¡ ÃдÒÉà·Ò ¢ÒÇÃØ ¹ R-27 ¢Í§ Kodak «Ö§è ´ Ò¹¢ÒÇ ÁÕÍѵÃÒ¡ÒÃÊз ͹ áʧ 90% à» ¹Çѵ¶Ø ÊíÒËÃѺÊз ͹áʧ à¾×Íè ÇÑ´ÃÐÂзҧ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

231

6.5.1 ¡ÒÃÍ Ò¹¤ Ò¨Ò¡ GP2D12 áÅÐáÊ´§ÃÐÂзҧ à¹×èͧ¨Ò¡ GP2D12 ãË ¼Å·Ò§àÍÒµ ¾Øµà» ¹áç´Ñ¹ä¿µÃ§ ´Ñ§¹Ñé¹ã¹¡ÒùíÒáÊ´§à» ¹µÑÇàÅ¢ ÃÐÂзҧ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ðµ ͧá»Å§áç´Ñ¹·Õèä´ ¹Ñé¹à» ¹¢ ÍÁÙÅ´Ô¨ÔµÍÅ áŠǹíÒ¤ Ò¹Ñé¹ÁÒ à» ´µÒÃÒ§à·Õºà¾×Íè ãË ä´ à» ¹¢ ÍÁÙÅÃÐÂзҧÍÍ¡ÁÒ áŠǨ֧¹íÒä»áÊ´§¼Å ÊÒÁÒöÊÃػ໠¹¢Ñ¹é µÍ¹ ¡Ò÷´ÅÍ§ä´ ´Ñ§¹Õé 1. 㪠äÁ ºÃ÷Ѵ·ÕèÁÕ¢¹Ò´ÂÒÇ·ÕèÊØ´·Õè¾Í¨ÐËÒä´ (ÂÒÇ¡Ç Ò 80 ૹµÔàÁµÃä´ ÂÔ觴Õ) ÁÒÇÒ§µÒÁ á¹Ç¾×é¹ÃÒº·Õèäà ÊÔ觡մ¢ÇÒ§µÒÁá¹ÇÂÒÇäÁ ºÃ÷Ѵ 2. ¹íÒâÁ´ÙÅ GP2D12 µÔ´µÑ§é ·Õ·è µÕè Òí á˹ § 0 ૹµÔàÁµÃ¢Í§äÁ ºÃ÷Ѵ áŠǵ ÍÊÒÂࢠҷÕÍè ¹Ô ¾Øµ A-31 ¢Í§ºÍà ´ AX-11 3. à¢Õ¹â»Ãá¡ÃÁ·´ÊÍºÍ Ò¹¤ ÒÍйÒÅÍ¡´Ñ§µ Í仹Õé void main() { while(1) { printf(“Analog %d\n”,analog(31)); sleep(1.0); } }

4. ¹íÒÇѵ¶ØÁÒÇÒ§·Õµè Òí á˹ § 10 ૹµÔàÁµÃ ¢Í§äÁ ºÃ÷Ѵ Êѧࡵ¤ Ò·ÕÍè Ò ¹ä´ ¼Ò ¹âÁ´ÙÅ LCD º¹ºÍà ´ AX-11 ãË º¹Ñ ·Ö¡¢ ÍÁÙÅÍйÒÅÍ¡·ÕÍè Ò ¹ä´ ¨Ò¡â»Ãá¡ÃÁ·´Êͺ 5. ·´ÅͧàÅ×è͹µíÒá˹ §¢Í§Çѵ¶ØãË ÁÕÃÐÂÐ·Ò§Ë Ò§¨Ò¡ GP2D12 à¾ÔèÁ¢Öé¹àÃ×èÍÂæ ¤ÃÑé§ÅÐ 1-5 ૹµÔàÁµÃ ¨¹¶Ö§ÃÐÂÐ 80 ૹµÔàÁµÃ ºÑ¹·Ö¡¤ Ò·ÕÍè Ò ¹ä´ à» ¹ÃÐÂÐæ 6. ËÅѧ¨Ò¡ºÑ¹·Ö¡¼Å¡Ò÷´Åͧ·Õèä´ ¨¹¡ÃзÑè§àÅ×è͹Çѵ¶Ø件֧ÃÐÂÐ 80 ૹµÔàÁµÃ¢Í§äÁ ºÃ÷Ѵ ¨ÐÊÑ§à¡µä´ ÇÒ ã¹ª ǧ¡ÒÃàÅ×Íè ¹Çѵ¶Ø¨Ò¡ 10 ૹµÔàÁµÃ仨¹¶Ö§ 80 ૹµÔàÁµÃ ¢ ÍÁÙÅ·ÕÍè Ò ¹ ä´ ¨ÐŴŧ¤ ͹¢ Ò§àÃçÇ㹪 ǧáááÅШÐà»ÅÕè¹á»Å§ª Òŧ㹪 ǧËÅѧ 7. ¹íÒ¤ Ò·Õäè ´ ¨Ò¡¡Ò÷´Åͧä»à¢Õ¹â»Ãá¡ÃÁẺ໠´µÒÃÒ§ (look up table) â´Â㪠µÇÑ á»Ã ÍÐàà㹡ÒÃà¡çº¤ Ò¤§·Õ«è §Öè à» ¹ÃÐÂзҧ·Õäè ´ ¨Ò¡¡Ò÷´Åͧ «Ö§è à» ¹ª¹Ô´¢ ÍÁÙŨíҹǹ¨ÃÔ§ float áÅÐ Í Ò¹¤ ÒÍйÒÅÍ¡·Õèä´ ÁÒá»Å§¡ÅѺ໠¹´Ñª¹Õ·ÕèªÕéµíÒá˹ §¢Í§ÍÐàà·ÕèµÃ§¡ÑºµíÒá˹ §ÃÐÂзҧ·Õèä´ ¨Ò¡¡Ò÷´Åͧ


232

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

µÑÇÍ ҧ ¼Ù ¾Ñ²¹Ò·íÒ¡ÒÃà¡çº¢ ÍÁÙÅáŠǾºÇ Òä´ ¢ ÍÁÙŵÒÁµÒÃÒ§µ Í仹Õé ¤ ÒÍйÒÅÍ¡ 20 21 22 23 . . 126

ÃÐÂзҧ·ÕÇè ´Ñ ä´ (ૹµÔàÁµÃ) 25.8 24.6 23.9 23.6 . . 10.0

à¢Õ¹໠¹â»Ãá¡ÃÁµÑÇÍÂ Ò§ä´ ´Ñ§¹Õé #define base -20 float dis_table[107]={ 25.8,24.6,23.9,23.6,..................... 10.0};

à» ¹¡ÒûÃСÒȵÑÇá»ÃÍÐààdis ÁÕª¹Ô´¢ ÍÁÙŨíҹǹ¨ÃÔ§ float ¢¹Ò´ 107 ˹ Ç 㪠à¡çº¤ Ò ¢ ÍÁÙÅÃÐÂзҧ·ÕèÇÑ´ä´ ¹Ñ蹤×Í ¨Ðä´ ¤ ҢͧµÑÇá»Ã·Ñé§ËÁ´·Õè㪠໠¹µÒÃÒ§¢ ÍÁÙŴѧ¹Õé dis_table[0] = 25.8 dis_table[1] = 24.6 dis_table[2] = 23.9 dis_table[3] = 23.6 ................. ................. dis_table[106] = 10.0

¨Ò¡¹Ñé¹¹íÒ¤ Òã¹µÒÃÒ§¹Õé¡Ñº¤ ÒÊÑ­­Ò³ÍйÒÅÍ¡·ÕèÍ Ò¹ä´ ¨Ò¡ÍÔ¹¾Øµª ͧ A-31 ·Õèµ Í¡ÑºâÁ´Ù Å GP2D12 ÁÒ¤íҹdzà¾×èÍá»Å¤ÇÒÁËÁÒÂà» ¹ÃÐÂÐ·Ò§ä´ ´Ñ§µÑÇÍ ҧµ Í仹Õé float distance; // »ÃСÒȵÑÇá»Ãà¡çº¤ ÒÃÐÂзҧ distance = dis_table[analog(31)+base];

// ¤íҹdzà¾×èÍá»Å¤ÇÒÁËÁÒÂà» ¹¤ ÒÃÐÂзҧ ઠ¹ ¶ ÒÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅ GP2D12 ä´ à· Ò¡Ñº 20 ¨Ðä´ ¼Å¡Ò÷íÒ§Ò¹·Ò§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé distance distance distance distance

= = = =

dis_table[analog(31)+base]; dis_table[20+(-20)]; dis_table[0]; 25.8;

¹Ñ¹è ¤×Í ¶ ÒÍ Ò¹¢ ÍÁÙŨҡ GP2D12 ä´ 20 ¨ÐÁÕ¤Ò à· Ò¡ÑºÃÐÂзҧ 25.8 ૹµÔàÁµÃ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

233

ËÃ×Ͷ ÒÍ Ò¹¤ Ò¨Ò¡âÁ´ÙÅ GP2D12 ä´ à· Ò¡Ñº 21 ¨Ðä´ ¼Å¡Ò÷íÒ§Ò¹·Ò§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé distance distance distance distance

= = = =

dis_table[analog(31)+base]; dis_table[21+(-20)]; dis_table[1]; 24.6;

¹Ñ¹è ¤×Í ¶ ÒÍ Ò¹¤ Ò¨Ò¡ GP2D12 ä´ 21 ¨ÐÁÕ¤Ò à· Ò¡ÑºÃÐÂзҧ 24.6 ૹµÔàÁµÃ ËÃ×Ͷ ÒÍ Ò¹¤ Òä´ à· Ò¡Ñº 129 ¨Ðä´ ¼Å¡Ò÷íÒ§Ò¹·Ò§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé distance distance distance distance

= = = =

dis_table[analog(31)+base]; dis_table[126+(-20)]; dis_table[106]; 10.0;

¹Ñ蹤×Í ¶ ÒÍ Ò¹¤ Ò¨Ò¡ GP2D12 ·Õè¼ Ò¹¡ÒÃá»Å§à» ¹¢ ÍÁÙÅ´Ô¨ÔµÍÅä´ 129 ¨Ðä´ ¤ ÒÃÐÂзҧ 10ૹµÔàÁµÃ

6.5.2 ¡Ò÷´Åͧ 1. µ Íǧ¨ÃµÒÁÃÙ»·Õè 6-7 2. à» ´â»Ãá¡ÃÁ Interactive C àª×Íè Áµ ͺÍà ´ AX-11 ࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¨Ò¡¹Ñ¹é à¢Õ¹â»Ãá¡ÃÁ ·Õè P6-5 µÑ駪×èÍä¿Å p0606-gp2d12.ic (ÊíÒËÃѺµÒÃÒ§¢ ÍÁÙÅ·Õè㪠»ÃСͺã¹â»Ãá¡ÃÁ¹Õéä´ ¨Ò¡¡Òà ·´Åͧâ´Â¼Ù à¢Õ¹)

START

M-0 M-1 M-2 M-3

PWR. BATT.

Distanc 10.2

DC MOTOR

STOP

ÃÙ»·Õè 6-7 ¡Òõ ÍâÁ´ÙÅ GP2D12 áÅÐ GP2D120 ࢠҡѺ AX-11 à¾×Íè ·´ÊͺÇÑ´ÃÐÂзҧ

SERVO MOTOR

GND

MC68HC11E1

5 4 3 2 1 0

Vout

AI-31

+5V

DI-11 DI-11 DI-11 DI-12 DI-13 DI-14 DI-15

/2 ,

AI-2 AI-2

IN-9 IN-8 IN-7 SER. CHARGE

AI-2 AI-2 AI-2 KNOB


234

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

/*—————————————————————————————————————————*/ // Program : Distance measurement // Description : Measure distance 10-80 cm. by GP2D12 module // Filename : p0606-gp2d12.ic // C compiler : Interactive C 4.21GA /*————————————————————————————————————————*/ #define base -20 /*distance value*//*ADC value*/ float dis_table[107]={ 80.0,/*20*/ 77.0,/*21*/ 76.0,/*22*/ 73.4,/*23*/ 67.0,/*24*/ 65.0,/*25*/ 60.0,/*26*/ 58.0,/*27*/ 57.0,/*28*/ 54.4,/*29*/ 52.0,/*30*/ 47.4,/*31*/ 44.2,/*32*/ 42.8,/*33*/ 41.0,/*34*/ 40.5,/*35*/ 40.0,/*36*/ 38.3,/*37*/ 36.7,/*38*/ 36.2,/*39*/ 35.5,/*40*/ 35.7,/*41*/ 34.2,/*42*/ 33.2,/*43*/ 32.5,/*44*/ 31.6,/*45*/ 31.2,/*46*/ 30.5,/*47*/ 28.6,/*48*/ 28.4,/*49*/ 27.8,/*50*/ 27.0,/*51*/ 26.6,/*52*/ 26.5,/*53*/ 25.5,/*54*/ 24.9,/*55*/ 24.6,/*56*/

â»Ãá¡ÃÁ·Õè P6-6 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 10-80 ૹµÔàÁµÃ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

235

23.9,/*57*/ 23.6,/*58*/ 23.1,/*59*/ 22.7,/*60*/ 22.4,/*61*/ 22.1,/*62*/ 21.8,/*63*/ 21.4,/*64*/ 21.2,/*65*/ 20.5,/*66*/ 20.2,/*67*/ 19.9,/*68*/ 19.6,/*69*/ 19.4,/*70*/ 19.0,/*71*/ 18.5,/*72*/ 18.3,/*73*/ 18.0,/*74*/ 17.7,/*75*/ 17.5,/*76*/ 17.2,/*77*/ 16.9,/*78*/ 16.8,/*79*/ 16.7,/*80*/ 16.5,/*81*/ 16.3,/*82*/ 16.2,/*83*/ 15.7,/*84*/ 15.5,/*85*/ 15.5,/*86*/ 15.3,/*87*/ 15.1,/*88*/ 14.9,/*89*/ 14.7,/*90*/ 14.5,/*91*/ 14.3,/*92*/ 14.1,/*93*/ 14.0,/*94*/ 13.9,/*95*/ 13.7,/*96*/ 13.6,/*97*/ 13.45,/*98*/ 13.3,/*99*/ 13.2,/*100*/ 13.0,/*101*/ 12.7,/*102*/

â»Ãá¡ÃÁ·Õè P6-6 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 10-80 ૹµÔàÁµÃ (ÁÕµÍ )


236

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C 12.6,/*103*/ 12.5,/*104*/ 12.4,/*105*/ 12.3,/*106*/ 12.2,/*107*/ 12.1,/*108*/ 12.0,/*109*/ 11.9,/*110*/ 11.7,/*111*/ 11.5,/*112*/ 11.4,/*113*/ 11.3,/*114*/ 11.1,/*115*/ 11.0,/*116*/ 10.9,/*117*/ 10.8,/*118*/ 10.7,/*119*/ 10.6,/*120*/ 10.5,/*121*/ 10.4,/*122*/ 10.3,/*123*/ 10.2,/*124*/ 10.1,/*125*/ 10.0/*126*/

}; void main() { int an; while(1) { an = analog(31); if(an>=20 && an<=126 ) { printf(“ Distance

// Keep analog value from sensor // Infinite loop // Read analog value from sensor // Distance interval 10-80 cm %f cm\n”,dis_table[an+base]); // Show distance value

} else { printf(“ Out of Range\n”); // Show message out of Range } sleep(1.0); // Delay before read new cycle } }

â»Ãá¡ÃÁ·Õè P6-6 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 10-80 ૹµÔàÁµÃ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

237

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¤×Í Ç¹Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ A-31 ·Ø¡æ 1 ÇÔ¹Ò·Õ â´Â·ÕÍè ¹Ô ¾Øµ¹Õé µ ͡ѺâÁ´ÙŵÃǨ¨ÑºÃÐÂзҧ GP2D12 ËÅѧ¨Ò¡¹Ñ¹é ¹íÒ¤ Ò·ÕÍè Ò ¹ä´ ÁÒµÃǨÊ꼂 ÒÍÂÙã ¹ª ǧ㴠¶ ÒËÒ¡ÁÕ¤Ò µÑ§é áµ 20 ¨¹¶Ö§ 129 ¨Ð¹íÒ令íҹdzà¾×Íè ¤ Òà» ¹¼ÅÅѾ¸ ÍÍ¡ÁÒà» ¹ÃÐÂзҧ áŠǹíÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD ÃÐÂзҧ·Õ¶è ¡Ù áÊ´§ÁÕ¤Ò ä´ µ§Ñé áµ 10-80 ૹµÔàÁµÃ áµ ¶Ò ËÒ¡¤ ҢͧÊÑ­­Ò³ÍйÒÅÍ¡·ÕÍè Ò ¹ä´ äÁ à» ¹ä»µÒÁà§×Íè ¹ä¢´Ñ§¡Å ÒÇ ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§¢ ͤÇÒÁÇ Ò Out of Range 㹡ÒûÃѺᵠ§¤ ÒÃÐÂзҧà¾×Íè ãË àËÁÒÐÊÁ¡Ñº¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅ GP2D12 ¼Ù¾ ² Ñ ¹Ò·íÒ ä´ â´Â¡ÒÃᡠ䢤 Ò¢ ÍÁÙÅÃÐÂзҧ·Õàè ¡çº¤ Òà» ¹µÒÃҧ㹵ÑÇá»ÃÍÐààdis à¹×Íè §¨Ò¡âÁ´ÙÅ GP2D12 ÍÒ¨ ãË ¼Å¡Ò÷íÒ§Ò¹·Õáè µ¡µ Ò§¡Ñ¹º Ò§ ¹Í¡¨Ò¡¹Õ龺» ­ËÒÍ ҧ˹Öè§Ç Ò㹡ÒÃÇÑ´ÃÐÂзҧ¨Ðà¡Ô´¤ÇÒÁ¼Ô´¾ÅÒ´¶ ÒËÒ¡ÃÐÂÐË Ò§ÃÐËÇ Ò§ Çѵ¶Ø¡ºÑ µÑǵÃǨ¨ÑºÁÕ¤Ò ¹ ÍÂ¡Ç Ò 10 ૹµÔàÁµÃ à¾ÃÒÐâÁ´ÙÅ GP2D12 ¨ÐãË ¤Ò ÍйÒÅÍ¡ÍÍ¡ÁÒ«éÒí ¤ ÒºÒ§ ¤ Ò㹪 ǧ 10-80 ૹµÔàÁµÃ ´Ñ§¹Ñ¹é 㹡ÒÃ㪠§Ò¹¤ÇÃËÅÕ¡àÅÕÂè §ÃÐÂÐË Ò§ª ǧ´Ñ§¡Å ÒÇ«Ö§è ¨Ð·íÒãË ¼ÅÅѾ¸ ·ÍÕè Ò ¹ ä´ ¼´Ô ¾ÅÒ´

â»Ãá¡ÃÁ·Õè P6-6 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 10-80 ૹµÔàÁµÃ (¨º) 3. ¡´»ØÁ Download à¾×Íè Ê §â»Ãá¡ÃÁŧ㹺Íà ´ AX-11 4. Ãѹâ»Ãá¡ÃÁâ´Â¡´»ØÁ Run main º¹Ë¹ Òµ Ò§¢Í§â»Ãá¡ÃÁ Interactive C 5. ·Õâè Á´ÙÅ LCD áÊ´§¼Å´Ñ§¹Õé Distance 10.2 cm

6.5.3 ¢ ͨíҡѴ㹡ÒÃÇÑ´ Í ҧäáçµÒÁ ·ÕÃè ÐÂзҧÁÒ¡¡Ç Ò 50 ૹµÔàÁµÃ ¡ÒÃÇÑ´ÍÒ¨ÁÕ¤ÇÒÁ¤ÅÒ´à¤Å×Íè ¹à¾ÔÁè ¢Ö¹é à¹×Íè § ¨Ò¡¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹àÍÒµ ¾µØ 㹪 ǧ¹Õ¢é ͧâÁ´ÙÅ GP2D12 ÁÕ¹Í ÂÁÒ¡ áÅж ÒÂÔ§è ã¡Å ÃÐÂзҧ 80 ૹµÔàÁµÃÁÒ¡à· Òã´ ¡ÒÃà»ÅÕè¹á»Å§¨ÐÂÔè§ÁÕÍѵÃÒ¹ ÍÂŧÁÒ¡¢Öé¹ÍÕ¡ ¨¹·íÒãË Ç§¨Ãá»Å§ ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŢͧ AX-11 «Öè§ÁÕ¤ÇÒÁÅÐàÍÕ´à¾Õ§ 8 ºÔµ ÍÒ¨ãË ¼Å¡Ò÷íÒ§Ò¹·ÕèäÁ ªÑ´à¨¹ ÃÇÁ件֧ à¹×èͧ¨Ò¡âÁ´ÙÅ GP2D12 ·íÒ§Ò¹´ ÇÂáʧÍÔ¹¿ÃÒàô ¨Ö§ÁÕâÍ¡ÒÊ·Õè¨Ð¶Ù¡Ãº¡Ç¹ ¨Ò¡áʧÍÔ¹¿ÃÒàô·ÕÁè ÍÕ ÂÙà ͺ¢ Ò§ ÃÇÁ件֧¤ÇÒÁ¤§·Õ¢è ͧáç´Ñ¹ä¿àÅÕÂé §¡çÁ¼Õ ŵ ͤÇÒÁäÇ㹡ÒÃÇÑ´ ÃÐÂзҧ¢Í§âÁ´ÙÅ GP2D12 ´ ÇÂ


238

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

6.5.4 µÃǨ¨ÑºÃÐÂзҧ·ÕÊè ¹Ñé ŧ´ ÇÂâÁ´ÙÅ GP2D120 àÁ×Íè ÁÕ¤ÇÒÁµ ͧ¡ÒÃÇÑ´ÃÐÂзҧ·ÕÊè ¹Ñé ¡Ç Ò 10 ૹµÔàÁµÃ ¨ÐäÁ ÊÒÁÒö㪠âÁ´ÙÅ GP2D12 ä´ à¹×Íè §¨Ò¡ GP2D12 ÊÒÁÒöµÃǨ¨ÑºÃÐÂзҧãË ä´ ã¹ª ǧ 10-80 ૹµÔàÁµÃ ¨Ö§µ ͧà»ÅÕÂè ¹ÁÒ㪠âÁ ´ÙÅ GP2D120 á·¹ à¹×èͧ¨Ò¡ÊÒÁÒöµÃǨ¨ÑºÃÐÂÐ·Ò§ä´ ã¹ª ǧ 4-30 ૹµÔàÁµÃ ¡Ò÷íÒ§Ò¹¢Í§ GP2D120 àËÁ×͹¡Ñº GP2D12 ËÒ¡áµ à¾Õ§¼Å¢Í§¡ÒÃà»ÅÕè¹á»Å§áç´Ñ¹àÍÒµ ¾Øµ¨ÐÁÕª ǧ·Õèᵡ µ Ò§¡Ñ¹ 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èÍá»Å§¤ Ò¨Ò¡ GP2D120 ÁÒáÊ´§à» ¹¤ ÒÃÐÂзҧ¨ÃÔ§¨Ö§µ ͧÁÕ¡Òà Êà ҧµÒÃÒ§¢ ÍÁÙÅãËÁ ´Ñ§áÊ´§â»Ãá¡ÃÁ Interactive C ·Õ¡è Òí ˹´ãË AX-11 µÔ´µ ͡Ѻ GP2D120 à¾×Íè ÇÑ´ÃÐÂзҧ ã¹â»Ãá¡ÃÁ·Õè P6-7 /*—————————————————————————————————————————————————————————————————*/ // Program : Short distance measurement // Description : Measure distance 4-30 cm. by GP2D120 module // Filename : p0607-gp2d120.ic // C compiler : Interactive C 4.21GA /*—————————————————————————————————————————————————————————————————*/ #define base -32 /*distance value*//*ADC value*/ float dis_table[105]={ 30.0,/*32*/ 29.0,/*33*/ 28.0,/*34*/ 26.6,/*35*/ 25.7,/*36*/ 24.5,/*37*/ 23.5,/*38*/ 22.7,/*39*/ 22.0,/*40*/ 20.8,/*41*/ 20.0,/*42*/ 19.3,/*43*/ 18.4,/*44*/ 18.1,/*45*/ 17.8,/*46*/ 17.2,/*47*/ 16.5,/*48*/ 15.8,/*49*/ 15.5,/*50*/ 15.0,/*51*/ 14.5,/*52*/ 13.8,/*53*/ 13.5,/*54*/ 13.2,/*55*/ 12.9,/*56*/ 12.7,/*57*/ 12.2,/*58*/

â»Ãá¡ÃÁ·Õè P6-7 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 4-30 ૹµÔàÁµÃ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

239

12.0,/*59*/ 11.8,/*60*/ 11.5,/*61*/ 11.4,/*62*/ 11.3,/*63*/ 10.85,/*64*/ 10.6,/*65*/ 10.3,/*66*/ 10.2,/*67*/ 10.0,/*68*/ 9.8,/*69*/ 9.7,/*70*/ 9.5,/*71*/ 9.3,/*72*/ 9.2,/*73*/ 9.0,/*74*/ 8.9,/*75*/ 8.8,/*76*/ 8.6,/*77*/ 8.4,/*78*/ 8.3,/*79*/ 8.2,/*80*/ 8.0,/*81*/ 7.85,/*82*/ 7.7,/*83*/ 7.6,/*84*/ 7.5,/*85*/ 7.3,/*86*/ 7.2,/*87*/ 7.15,/*88*/ 7.1,/*89*/ 7.0,/*90*/ 6.9,/*91*/ 6.8,/*92*/ 6.7,/*93*/ 6.6,/*94*/ 6.5,/*95*/ 6.4,/*96*/ 6.35,/*97*/ 6.3,/*98*/ 6.2,/*99*/ 6.15,/*100*/ 6.1,/*101*/ 6.0,/*102*/ 5.9,/*103*/ 5.85,/*104*/ 5.8,/*105*/ 5.7,/*106*/ 5.65,/*107*/ 5.6,/*108*/ 5.55,/*109*/ 5.45,/*110*/ 5.4,/*111*/

â»Ãá¡ÃÁ·Õè P6-7 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 4-30 ૹµÔàÁµÃ (ÁÕµÍ )


240

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C 5.4,/*112*/ 5.3,/*113*/ 5.2,/*114*/ 5.1,/*115*/ 5.0,/*116*/ 5.0,/*117*/ 4.9,/*118*/ 4.9,/*119*/ 4.8,/*120*/ 4.8,/*121*/ 4.7,/*122*/ 4.7,/*123*/ 4.6,/*124*/ 4.6,/*125*/ 4.5,/*126*/ 4.5,/*127*/ 4.4,/*128*/ 4.4,/*129*/ 4.3,/*130*/ 4.3,/*131*/ 4.2,/*132*/ 4.2,/*133*/ 4.1,/*134*/ 4.1,/*135*/ 4.0/*136*/

}; void main() { int an; while(1) { an = analog(31); if(an>=32 && an<=136) { printf(“dis%f cm } else { printf(“ } sleep(1.0);

Out of Range

// Keep analog value from sensor // Infinite loop // Read analog value from sensor // Distance interval 4-30 cm \n”,dis_table[an+base]); // Show distance value

\n”); // Show message out of range // Delay before read new cycle

} }

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õ¤é Å Ò¡Ѻâ»Ãá¡ÃÁ·Õãè ª âÁ´ÙÅàºÍà GP2D12 à¾Õ§ᵠÂÒ ¹¡ÒÃÇÑ´ÃÐÂзҧ ·Õãè Ë ¼Å·Õàè ª×Íè ¶×Íä´ ¢Í§ GP2D120 ¤×Í 4 ¶Ö§ 30 ૹµÔàÁµÃ ·íÒãË ªÇ §¢Í§¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ Á¤Õ Ò µÑ§é áµ 32 ¶Ö§ 136 ᵠ㹪 ǧÃÐÂзҧµÑ§é áµ 0 ¶Ö§ 4 ૹµÔàÁµÃ ¤ ÒÍйÒÅÍ¡·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙŵÃǨ¨ÑººÒ§¤ ҨЫéÒí ª ǧ 4 ¶Ö§ 30 ૹµÔàÁµÃ ઠ¹¡Ñ¹ ´Ñ§¹Ñ¹é ¨Ö§¤ÇÃËÅÕ¡àÅÕÂè §·ÕÃè ÐÂÐË Ò§´Ñ§¡Å ÒÇ

â»Ãá¡ÃÁ·Õè P6-7 â»Ãá¡ÃÁµÔ´µ Í AX-11 ¡Ñº GP2D120 à¾×Íè µÃǨ¨ÑºÃÐÂзҧ ҹ 4-30 ૹµÔàÁµÃ (¨º)


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

241

6.6 ¡ÒÃàª×Íè Áµ Í 68HC11 ¡Ñº UGN3503 µÑǵÃǨ¨ÑºÎÍÅàÍ¿à¿ ¡µ à¾×èÍÇÑ´¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ UGN3503 à» ¹äÍ«Õ˹ Ò·Õ¾è àÔ ÈÉ·Õ·è Òí ˹ Ò·Õµè ÃǨ¨Ñº»ÃÒ¡¯¡Òó ÎÍÅËÃ×ÍÎÍÅàÍ¿à¿ ¡µ (hall effect) ¨Ö§ÊÒÁÒö¹íÒÁÒ㪠㹡ÒõÃǨ¨Ñº¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ä´ â´Â UGN3503 ¨Ðá»Å§ ¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ÍÍ¡ÁÒà» ¹áç´Ñ¹ ÀÒÂãµ ¤ÇÒÁÊÑÁ¾Ñ¹¸ 1.3mV µ Íà¡ÒÊ (Gauss)

6.6.1 ¤Ø³ÊÁºÑµàÔ º×Íé §µ ¹¢Í§ UGN3503U l

µÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡·ÕèÁÕ¤ÇÒÁäǶ֧ 23kHz

l

ãË áç´Ñ¹àÍÒµ ¾Øµ·ÕèÁÕÊÑ­­Ò³Ãº¡Ç¹µèíÒ

l áç´Ñ¹àÍÒµ ¾µ Ø ·Õ¤è ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ 0 G ¤×Í 2.5V ·Õäè ¿àÅÕÂé § +5V l ¤ÇÒÁäÇ㹡Ò÷íÒ§Ò¹ 1.30mV/G ·Õäè ¿àÅÕÂé § +5V l

·íÒ§Ò¹·Õäè ¿àÅÕÂé § 4.5-6V

l

µ ͧ¡ÒáÃÐáÊä¿¿ Ò 9-13mA ·Õäè ¿àÅÕÂé § +5V

l

¤ÇÒÁµ Ò¹·Ò¹àÍÒµ ¾µØ 50-220Ω ·Õäè ¿àÅÕÂé § +5V

l

·íÒ§Ò¹ãË ¼Å¶Ù¡µ ͧ㹪 ǧÍسËÀÙÁÔ -20 ¶Ö§ 85 ͧÈÒà«Åà«ÕÂÊ

UGN3503 ÁÕ¢Òµ Í㪠§Ò¹ 3 ¢Ò¤×Í ¢Òä¿àÅÕé§ (Vcc), ¢Òáç´Ñ¹àÍÒµ ¾Øµ (Vout), ¢Ò¡ÃÒÇ´ (GND) ´Ñ§áÊ´§ã¹ÃÙ»·Õè 6-8 ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ã¹ÃÙ»ÂѧáÊ´§¤ÇÒÁÊÑÁ¾Ñ¹¸ ¢Í§áç´Ñ¹àÍÒµ ¾µØ ¡Ñº¤ Ò¤ÇÒÁ ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ ¨ÐàËç¹ä´ Ç Ò ¶ Ò¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ÁÕ·Ôȷҧ໠¹ºÇ¡ ¤ Òáç ´Ñ¹àÍÒµ ¾µØ ¨Ðà¾ÔÁè ÊÙ§¢Ö¹é ¨Ò¡ÃдѺ 0 à¡ÒÊ «§Öè ÁÕ¤Ò áç´Ñ¹à· ҡѺ 2.5V áÅж ÒËÒ¡¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁ áÁ àËÅç¡ÁÕ·Ôȷҧ໠¹Åº ¤ Òáç´Ñ¹àÍÒµ ¾Øµ¨ÐŴŧ¨Ò¡ÃдѺáç´Ñ¹ 2.5V UGN3503

Vout (V) 4.0

B = +500 G

3.5 3.0

B=0G

2.5 2.0

+Vcc GND Vout

1.5 -40 -20 0

B = -500 G +25

+85

ÍسËÀÙÁÔ㪠§Ò¹ (ͧÈÒà«Åà«ÕÂÊ)

+125

ÃÙ»·Õè 6-8 ¡ÒèѴ¢Ò¢Í§ UGN3503 áÅеÒÃÒ§¤ÇÒÁÊÑÁ¾Ñ¹¸ ÃÐËÇ Ò§ áç´Ñ¹àÍÒµ ¾µØ ¢Í§ UGN3503 ¡Ñº ¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·Õè µÃǨ¨Ñºä´


242

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¤ÇÒÁÃÙ àº×éͧµ ¹à¡ÕèÂǡѺʹÒÁáÁ àËÅç¡

φ A

B ¤×Í ¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ ÁÕ Ë¹ ÇÂà» ¹ àÇàºÍà /µÒÃÒ§ àÁµÃ (W/m2) ËÃ×Í à·ÊÅÒ (T) φ ¤×Í àÊ ¹áçáÁ àËÅç¡ËÃ×Í»ÃÔÁÒ³¿ÅÑ¡« áÁ àËÅç¡ (àÇàºÍà ) A ¤×Í ¾×¹é ·Õµè §Ñé ©Ò¡¡ÑºàÊ ¹áçáÁ àËÅç¡ (µÒÃÒ§àÁµÃ : m2) ¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ã¹Ë¹ ÇÂàÅç¡¡Ç Òà·ÊÅÒ·Õ¹è ÂÔ ÁÇÑ´ ¤×Í à¡ÒÊ (Gauss : G) â´Â 1 à·ÊÅÒ෠ҡѺ 10,000 à¡ÒÊ

S

S

N

áÁ àËÅç¡ A

áÁ àËÅç¡ B

(¡)

N

B =

N

N

N

S

áÁ àËÅç¡ A

S

áÁ àËÅç¡ B

(¢)

S

¤Ø³ÊÁºÑµáÔ Á àËÅç¡ à» ¹¤Ø³ÊÁºÑµ¾Ô àÔ ÈÉ·ÕÊè ÒÁÒö´Ù´ âÅËÐä´ ¢Í§ÊÔ¹áà ºÒ§ª¹Ô´ ¨Ö§¹íÒä»ãª Êà ҧáÁ àËÅ硶ÒÇà ¢ÑÇé áÁ àËÅç¡ »ÃСͺ´ Ç¢ÑÇé à˹×Í (N) áÅТÑÇé ãµ (S) ¶ Ò¹íÒáÁ àËÅç¡ 2 ªÔ¹é ÁÒÇÒ§ã¡Å ¡¹Ñ ¨Ð·íÒãË à¡Ô´áç¡ÃзíÒµ ͡ѹ â´Â¶ ÒËÒ¡¢ÑÇé áÁ àËÅç¡ÁÕª¹Ô´à´ÕÂǡѹ¨Ðà¡Ô´áç¼ÅÑ¡ÃÐËÇ Ò§¡Ñ¹ ã¹·Ò§µÃ§¡Ñ¹¢ ÒÁ¶ Ò¢ÑÇé ¢Í§áÁ àËÅ硷ѧé Êͧᵡµ Ò§¡Ñ¹¨Ðà¡Ô´ áç´Ù´ÃÐËÇ Ò§¡Ñ¹ àÊ ¹áçáÁ àËÅç¡ à» ¹àÊ ¹áç·Õ¶è ¡Ù ÊÁÁص¢Ô ¹Öé à¾×Íè ͸ԺÒ ¾ÄµÔ¡ÃÃÁÍíÒ¹Ò¨áÁ àËÅç¡ â´ÂàÊ ¹áçáÁ àËÅ硨ÐÇÔ§è ¨Ò¡¢ÑÇé N ä»Âѧ¢ÑéÇ S áµ ÀÒÂã¹µÑÇá· §áÁ àËÅ硨ÐÇÔ觨ҡ¢ÑéÇ Sä»Âѧ¢ÑéÇ N áÅÐÁÕ¤ÇÒÁ˹Òá¹ ¹¢Í§àÊ ¹áçáÁ àËÅç¡ÊÙ§·Õºè ÃÔàdz¢ÑÇé áÁ àËÅç¡ ¹Í¡¨Ò¡¹ÕÂé §Ñ ÊÒÁÒö´Ù´á· §âÅËÐâ´ÂÍÒÈÑ¡ÒÃà˹ÕÂè Ç ¹íÒãË âÅËзÕèÁÒࢠÒã¡Å ¹Ñé¹à» ¹áÁ àËÅ硪ÑèǤÃÒÇ «Ö觨зíÒãË ºÃÔàdz·Õãè ¡Å ¢ÇÑé áÁ àËÅ硢ͧâÅËÐ ¡ÅÒÂà» ¹¢ÑÇé áÁ àËÅ硪¹Ô´µÃ§ ¢ ÒÁ¡ÑºáÁ àËÅ硶ÒÇà ËÅѧ¨Ò¡¹Ñ¹é àÊÁ×Í¹Ç ÒÁÕáÁ àËÅç¡ 2 µÑÇ ·ÕÁè ¢Õ ÇÑé áÁ àËÅ硵 Ò§ª¹Ô´¡Ñ¹ÁÒÇÒ§ã¡Å ¡¹Ñ ¨Ö§·íÒãË áÁ àËÅç¡áÅÐ âÅËдѧ¡Å ÒÇà¡Ô´¡Òôٴ¡Ñ¹ ʹÒÁáÁ àËÅç¡âÅ¡ ÁÕ¢ÑéÇáÁ àËÅç¡ N ÍÂÙ ·Õè¢ÑéÇâÅ¡ãµ áÅТÑÇé áÁ àËÅç¡ S ÍÂÙ· ¢Õè ÇÑé âÅ¡à˹×Í ¹Ñ¹è ¤×ÍàÊ ¹áçáÁ àËÅç¡ âÅ¡¨ÐÁÕ·ÔÈÇÔ觨ҡ¢ÑéÇâÅ¡ãµ ä»Âѧ¢ÑéÇâÅ¡à˹×Í ¤ÇÒÁ˹Òá¹ ¹ ʹÒÁáÁ à ËÅç ¡ (magnetic flux density) ¤×Í »ÃÔÁÒ³àÊ ¹áçáÁ àËÅç¡·Õµè ¡µÑ§é ©Ò¡µ Í˹֧è ˹ Ç ¾×¹é ·Õè áÅÐÁÕ·ÈÔ ·Ò§à´ÕÂǡѺàÊ ¹áçáÁ àËÅç¡´ ÇÂઠ¹¡Ñ¹ ¤íҹdz ËÒ¤ Ò¤ÇÒÁ˹Òá¹ ¹¢Í§Ê¹ÒÁáÁ àËÅç¡ä´ ¨Ò¡¤ÇÒÁÊÑÁ¾Ñ¹¸

àÊ ¹áçáÁ àËÅç¡

¾×¹é ·Õè A µÒÃÒ§àÁµÃ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

243

6.6.2 ¡ÒÃá»Å¤ÇÒÁËÁÒ¨ҡ UGN3503U 㹡ÒÃá»Å¤ÇÒÁËÁÒ¨ҡáç´Ñ¹àÍÒµ ¾µØ ·Õäè ´ ¨Ò¡ UGN3503U à¾×Íè ãË ä´ ¤Ò ¤ÇÒÁ˹Òá¹ ¹ ʹÒÁáÁ àËÅç¡ÍÍ¡ÁÒ¨ÐÊÒÁÒö»ÃÐÁÒ³¤ Òà» ¹áººàªÔ§àÊ ¹ â´Â㪠¤Ò ¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ à» ¹Èٹ ·ÕèãË áç´Ñ¹àÍÒµ ¾Øµ 2.5V à» ¹¨Ø´Í Ò§ÍÔ§ àÁ×èÍÁÕ¡ÒÃà»ÅÕè¹á»Å§¢Í§áç´Ñ¹àÍÒµ ¾Øµ·Ø¡æ 1.3mV ¨Ð·íÒãË ¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡à»ÅÕÂè ¹á»Å§ä» 1 à¡ÒÊ (G) ´Ñ§¹Ñ¹é ¡ÒÃá»Å§¤ Ò¢ ÍÁÙÅ â´Â¡ÒûÃÐÁҳ͠ҧ§ Ò¨Ð㪠¤ÇÒÁÊÑÁ¾Ñ¹¸ ´Ñ§¹Õé BG ≈

Vout − .# . !

........................................................................... (ÊÁ¡Ò÷Õè 6-1)

â´Â·Õè B ¤×Í ¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ã¹Ë¹ ÇÂà¡ÒÊ Vout ¤×Í áç´Ñ¹àÍÒµ ¾µØ ·ÕÍè Ò ¹ä´ ¨Ò¡ UGN3503U ᵠ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ㪠§Ò¹à¾×Íè ãË ¤Ò àÃÔÁè µ ¹¢Í§ BG ෠ҡѺÈٹ 㹢³ÐÂѧäÁ ÁÊÕ ¹ÒÁáÁ àËÅç¡ÀÒ¹͡ÁÒ¡Ãзº UGN3503 ¨Ðä´ à» ¹ BG ≈

(Aout − Ainit ) ×  . !

#   ## 

.......................................................... (ÊÁ¡Ò÷Õè 2)

â´Â·Õè Ainit ¤×Í ¤ Ò¢ ÍÁÙÅ´Ô¨ÔµÍŢͧÊÑ­­Ò³ÍйÒÅÍ¡·Õèä´ ¨Ò¡ UGN3503 ã¹¢³ÐäÁ ÁÕʹÒÁáÁ àËÅç¡ÀÒ¹͡ÁÒ¡Ãзº ä´ ÁÒ¨Ò¡¡Ò÷´Êͺ Aout ¤×Í ¤ Ò¢ ÍÁÙÅ´Ô¨µÔ ÍŢͧÊÑ­­Ò³ÍйÒÅÍ¡·Õäè ´ ¨Ò¡ UGN3503 ³ àÇÅÒã´æ ¹Í¡¨Ò¡¹Õ·é ÈÔ ·Ò§¢Í§Ê¹ÒÁáÁ àËÅç¡ÀÒ¹͡·ÕÁè Ò¡ÃзººÃÔàdz´ ҹ˹ Ңͧ UGN3503 Âѧ Áռŵ Íà¤Ã×Íè §ËÁÒ¢ͧ¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·ÕÍè Ò ¹ä´ ¡Å ÒǤ×Í ¶ ÒʹÒÁáÁ àËÅç¡ÀÒ¹͡

UGN3503

N

N S

¤ Ò¤ÇÒÁ˹Òá¹ ¹ ʹÒÁáÁ àËÅç¡à» ¹ºÇ¡ áç´Ñ¹àÍÒµ ¾µØ ÊÙ§¡Ç Ò +2.5V

S

UGN3503

¤ Ò¤ÇÒÁ˹Òá¹ ¹ ʹÒÁáÁ àËÅç¡à» ¹Åº áç´Ñ¹àÍÒµ ¾µØ µíÒè ¡Ç Ò +2.5V

ÃÙ»·Õè 6-9 áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ UGN3503 àÁ×Íè ä´ ÃºÑ Ê¹ÒÁáÁ àËÅç¡ã¹·ÔÈ·Ò§·Õáè µ¡µ Ò§¡Ñ¹


244

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

ÁÕ·ÔÈ¾Ø §à¢ ÒËÒ´ ҹ˹ Ңͧ UGN3503 ¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·ÕèÍ Ò¹ä´ ¨Ðà» ¹ºÇ¡ áµ ¶ Ò Ê¹ÒÁáÁ àËÅç¡ÁÕ·ÔÈ¾Ø §ÍÍ¡¨Ò¡´ ҹ˹ Ңͧ UGN3503 ¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅ硨Ðà» ¹Åº ¶ Ò¹íÒáÁ àËÅç¡ÁÒࢠÒã¡Å ´Ò ¹Ë¹ Ңͧ UGN3503 áÅ ÇÍ Ò¹¤ Ò¨Ò¡¡ÒÃá»Å¤ÇÒÁËÁÒÂÍÍ¡ÁÒ ÁÕà¤Ã×Íè §ËÁÒÂà» ¹ºÇ¡ áÊ´§Ç Ò ´ Ò¹·ÕÍè ÂÙã ¡Å µÇÑ UGN3503 ¢Í§áÁ àËÅç¡à» ¹¢ÑÇé à˹×Í(à¾ÃÒÐàÊ ¹áç áÁ àËÅç¡¾Ø §ÍÍ¡¨Ò¡¢ÑéÇáÁ àËÅç¡à˹×Í) áµ ¶ ÒËÒ¡¤ Ò·ÕèÍ Ò¹ä´ ÁÕà¤Ã×èͧËÁÒÂà» ¹ÅºáÊ´§Ç Ò´ Ò¹·ÕèÍÂÙ ã¡Å UGN3503 à» ¹¢ÑÇé ãµ ã¹ÃÙ»·Õè 6-9 áÊ´§·ÔÈ·Ò§¢Í§Ê¹ÒÁáÁ àËÅ硡Ѻ¡ÒõÃǨ¨Ñº¢Í§ UGN3503

6.6.3 ¡Ò÷´Åͧ 6.6.3.1 ·´ÅͧáÊ´§¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ã¹Ë¹ ÇÂà¡ÒÊ ¨Ò¡ÊÁ¡Ò÷Õè 1 1. àÃÔÁè µ ¹´ Ç¡Òõ Íἧǧ¨ÃµÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡à¢ Ò·ÕÍè ¹Ô ¾Øµ AI-31 ´Ñ§ã¹ÃÙ»·Õè 6-10 2. à¢Õ¹â»Ãá¡ÃÁ·Õè P6-8 áÅ Ç´Òǹ âËÅ´ä»Âѧ AX-11 3. ¹íÒá· §áÁ àËÅç¡ÁÒÇÒ§ã¡Å ¡Ñºá¼§Ç§¨ÃµÃǨʹÒÁáÁ àËÅç¡ áÅ ÇÊѧࡵ¡ÒÃáÊ´§¼Å¢Í§ ¡ÒÃÇÑ´¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·ÕèâÁ´ÙÅ LCD 4. ·´Åͧ»ÃѺÃÐÂÐË Ò§¢Í§á· §áÁ àËÅ硡Ѻἧǧ¨ÃµÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ ÃÇÁ件֧¡Òà ·´Åͧ¡ÅѺ¢ÑéÇ´ Ç Êѧࡵ¼Å¢Í§¡ÒÃÇÑ´·Õèà»ÅÕèÂ¹ä» S

¹íÒáÁ àËÅç¡ÁÒࢠÒã¡Å ÊÅѺ¡Ñº¹íÒÍÍ¡Ë Ò§¨Ò¡á¼§Ç§¨Ã µÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ ÃÇÁ件֧¡ÒáÅѺ¢ÑÇé ¢Í§áÁ àËÅç¡´ ÇÂ

N PWR. BATT.

B

=

M-0 M-1 M-2 M-3

MC68HC11E1

-7.541365

STOP

5 4 3 2 1 0

DC MOTOR SERVO MOTOR

Magnetic field sensor

DI-11 DI-11 DI-11 DI-12 DI-13 DI-14 DI-15

AI-31

START

AI-2 AI-2

IN-9 IN-8 IN-7 SER. CHARGE

AI-2 AI-2 AI-2 KNOB

ÃÙ»·Õè 6-10 ¡Òõ Íἧǧ¨ÃµÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡·Õãè ª UGN3503 ࢠҡѺ AX-11 à¾×Íè µÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C void main() { float B_volt=0.0,Bg=0.0;

l

245

// For keep voltage output // and convert data to Gauss scale // Infinite loop

while(1) { B_volt = (float)analog(31)*(5.0/255.0); // Convert analog read to voltage Bg = (B_volt-2.5)/0.0013; // Convert voltage to Gauss scale printf(“ B = %f G\n”,Bg); // Display magnetic flux density // to Gauss scale sleep(1.0); // Delay } }

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¨Ò¡â»Ãá¡ÃÁ µÑÇá»Ã B_volt 㪠à¡çº¤ Ò·Õäè ´ ¨Ò¡¡ÒÃá»Å§áç´Ñ¹·ÕÍè Ò ¹ä´ ¨Ò¡ UGN3503 ã¹Ë¹ Ç âÇŵ (V) Ê Ç¹µÑÇá»Ã Bg 㪠à¡çº¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·Õäè ´ ¨Ò¡¡ÒäíҹdzÁÕ˹ ÇÂà» ¹à¡ÒÊ (G) â´Ââ»Ãá¡ÃÁ¨ÐÇ¹Í Ò¹¤ Ò¨Ò¡ UGN3503 áÅ Çá»Å§à» ¹¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡à¾×Íè ¹íÒä»áÊ´§¼Å·Õè âÁ´ÙÅ LCD

â»Ãá¡ÃÁ·Õè P6-8 â»Ãá¡ÃÁáÊ´§¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·Õµè ÃǨ¨Ñºä´ ã¹Ë¹ ÇÂà¡ÒÊ ¨Ò¡ÊÁ¡Òà ·Õè 1 ¼Å¡Ò÷íÒ§Ò¹ ·Õâè Á´ÙÅ LCD º¹ºÍà ´ AX-11 ¨ÐáÊ´§¼Åà» ¹ B = xxxxxx G ËÃ×Í B = -xxxxx G â´Â·Õè x ¤×ͤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·ÕÇè ´Ñ áÅФíÒ¹Ç³ä´ µÑÇÍÑ¡Éà G ᷹˹ ÇÂà¡ÒÊ Ê Ç¹à¤Ã×Íè §ËÁÒ - (ź) áÊ´§·ÔÈ·Ò§¢Í§Ê¹ÒÁáÁ àËÅç¡Ç Ò ÁÕ·ÈÔ ¾Ø§ ÍÍ¡¨Ò¡µÑǵÃǨ¨Ñº UGN3503 ËÁÒÂà赯 : ¨Ò¡â»Ãá¡ÃÁ¹Õ¤é Ò àÃÔÁè µ ¹ÍÒ¨äÁ à» ¹ 0 à¡ÒÊ à¹×Íè §¨Ò¡¢ ͨíÒ¡Ñ´´ Ò¹¤ÇÒÁÅÐàÍÕ´ ¢Í§Ç§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÀÒÂ㹺Íà ´ AX-11

6.6.3.2 ·´ÅͧáÊ´§¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡ã¹Ë¹ ÇÂà¡ÒÊ ¨Ò¡ÊÁ¡Ò÷Õè 2 1. à¢Õ¹â»Ãá¡ÃÁ·Õè P6-9 à¾×Íè ËÒ¤ Ò Ainit â´Â㪠¢Í ÁÙÅ·Õäè ´ ¨Ò¡ UGN3503 ã¹¢³Ð·Õäè Á ÁÊÕ ¹ÒÁ áÁ àËÅç¡ÁÒ¡Ãзº áÅ Ç´Òǹ âËÅ´ä»ÂѧºÍà ´ AX-11


246

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

void main() { while(1) // { printf(“ Ain = %d \n”,analog(31)); // // sleep(0.1); // } }

Infinite loop

Display magnetic flux density to Gauss scale Delay

â»Ãá¡ÃÁ·Õè P6-9 â»Ãá¡ÃÁáÊ´§¤ Ò Ainit ã¹ÀÒÇзÕè UGN3503 ÂѧäÁ Á¡Õ ÒõÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ void main() { float B=0.0; // For keep magnetic flux density for Gauss scale while(1) // Infinite loop { B = ((float)(analog(31)-127)/0.0013)*(5.0/255.0); // Convert voltage to Gauss scale printf(“ B = %f G\n”,B); // Display magnetic flux density to Gauss scale sleep(1.0); // Delay } }

â»Ãá¡ÃÁ·Õè P6-10 â»Ãá¡ÃÁáÊ´§¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡·Õµè ÃǨ¨Ñºä´ ã¹Ë¹ ÇÂà¡ÒÊ ¨Ò¡ÊÁ¡Òà ·Õè 2 2. ·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ ¨Ò¡¡Ò÷´ÅÍ§ä´ ¤Ò Anit = 127 3. à¢Õ¹â»Ãá¡ÃÁ·Õè P6-10 à¾×Íè ËÒ¤ Ò BG â´Â㪠ÊÁ¡Ò÷Õè 2 ¤íҹdz ¨Ò¡¡Ò÷´Åͧ㹢 Í·Õè 1 áÅÐ 2 ä´ ¤Ò Ainit = 127 ¨Ö§ãª ¤Ò Ainit ¹Õãé ¹â»Ãá¡ÃÁà¾×Íè ËÒ¤ Ò BG 4. ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ AX-11 ·íÒ¡ÒÃÃѹâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹àÃÔÁè µ ¹¢Í§â»Ãá¡ÃÁ¨ÐáÊ´§¤ Ò 0 Gauss ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨ÐÇ¹Í Ò¹¤ Ò ÍйÒÅÍ¡¨Ò¡ UGN3503 áÅ Çá»Å§à» ¹¤ Ò¤ÇÒÁ˹Òá¹ ¹Ê¹ÒÁáÁ àËÅç¡à» ¹Ë¹ ÇÂà¡ÒÊ (Gauss) à¾×Íè ¹íÒä»áÊ´§·Õâè Á´ÙÅ LCD µ Íä»


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

247

º··Õè 7

ʹء¡Ñº¡ÒÃÊà ҧËع ¹µ Robo-11 ´ ÇÂâ»Ãá¡ÃÁ Interactive C ËÅѧ¨Ò¡·ÃÒº¶Ö§¡ÒÃ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MC68HC11E1 㹡ÒÃàª×Íè Áµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡äÁ ÇÒ ¨Ðà» ¹ 74HC595 äÍ«Õª¿Ô µ Ã¨Õ ÊÔ àµÍà à¾×Íè ¢ÂÒ¾Íà µàÍÒµ ¾µØ , MC14489 äÍ«Õ¢ºÑ LED µÑÇàÅ¢ 7 Ê Ç¹ 仨¹¶Ö§âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧáÅеÑǵÃǨ¨ÑºÊ¹ÒÁáÁ àËÅç¡ áÅÐÍÕ¡¡Ô¨¡ÃÃÁË¹Ö§è ·Õèª ÇÂàÊÃÔÁ¡ÒÃàÃÕ¹ÃÙ áÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ à» ¹Í ҧ´Õ¤×Í ¡ÒÃÊà ҧËØ ¹Â¹µ Íѵâ¹ÁÑµÔ ·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅÐËع ¹µ ·áÕè ¹Ð¹íÒãË Êà ҧ¡Ñ¹¤×Í Robo-11 Ëع ¹µ Íѵâ¹Áѵ·Ô ¤Õè Ǻ¤ØÁ´ ÇÂâ»Ãá¡ÃÁ Interactive C Robo-11 Interactive C mobile robot

¢Ñºà¤Å×Íè ¹´ ÇÂ࿠ͧ¢ÑºÁÍàµÍà ¤áÙ ÅЪشŠÍÊÒ¾ҹ ÁÕᢹ¡ÊÔ§è ¢Í§ ¢Ñº´ Ǫش࿠ͧáÅÐÁÍàµÍà 俵ç l ¤Çº¤ØÁ´ Ç AX-11 ºÍà ´äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 áÅÐâ»Ãá¡ÃÁ Interactive C l µÔ´µÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô 3 µÑÇ à¾×Íè ¡ÒõÃǨ¨ÑºàÊ ¹Í ҧÁÕ»ÃÐÊÔ·¸ÔÀÒ¾ l l


248

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡ÒÃÊà ҧËع ¹µ Robo-11 ¨ÐẠ§¢Ñ¹é µÍ¹·Ñ§é ËÁ´ÍÍ¡à» ¹ 5 Ê Ç¹¤×Í 1. »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù 2. »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà à´ÕÂè Ç 3. »ÃСͺªØ´Å ÍÊÒ¾ҹáÅÐâ¤Ã§Ëع ¹µ 4. µÔ´µÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô, ºÍà ´ AX-11 áÅÐÊà ҧᢹãË á¡ Ë¹Ø Â¹µ 5. à¢Õ¹â»Ãá¡ÃÁ·´Êͺ¡Ò÷íÒ§Ò¹

7.1 »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤·Ù ãÕè ª ã¹Ëع ¹µ Robo-11 à» ¹¢Í§ TAMIYA Ãع 70097 áµ µÍ §à»ÅÕÂè ¹ÁÍàµÍÃ ä¿ µÃ§¢¹Ò´ 6V «Ö§è ã¹ªØ´ä´ ¨´Ñ àµÃÕÂÁÁÒãË áÅ Ç ã¹ÃÙ»·Õè 7-1 áÊ´§ÃÒÂÅÐàÍÕ´·Ñ§é ËÁ´¢Í§ªÔ¹é Ê Ç¹µ Ò§æ ·Õãè ª 㹡Òà »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù

¨ÒÃºÕ x 1 â¤Ã§à¿ ͧ M1 x 1

â¤Ã§à¿ ͧ M2 x 1

࿠ͧ G1 x 2

᡹¾ÅÒʵԡ M4 x 4 ࿠ͧ 8 ¿ ¹µÔ´á¡¹ÁÍàµÍà x 2 ÁÍàµÍà 俵ç 6V ¾Ã ÍÁ ÊÒµ Í x 2

µÒä¡ x 12

»ÃÐá¨Ë¡àËÅÕÂè Á x 1 ´ØÁ࿠ͧáÅдØÁÅ Í x 2

࿠ͧ G2 x 4

࿠ͧ G3 x 2 Ê¡ÃÙẺ½ § x 2 ᡹¡ÅÁ X 1

â¤Ã§à¿ ͧ M3 x 1

Ê¡ÃÙà¡ÅÕÂǻŠÍ 3x12 ÁÁ. x 6

᡹ˡàËÅÕÂè Á X 2

ÃÙ»·Õè 7-1 áÊ´§ÍØ»¡Ã³ ª´Ø ࿠ͧ¢ÑºÁÍàµÍà ¤·Ù ¨Õè ´Ñ àµÃÕÂÁÁÒ㹪ش»ÃСͺËع ¹µ Interactive C robot kit* * ªÔ¹é Ê Ç¹·Ñ§é ËÁ´ÃÇÁ·Ñ§é ºÍà ´ AX-11 ¾Ã ÍÁ¤ÙÁ Í× áÅЫͿµ áÇà ÁÕ¨Òí ˹ ÒÂà» ¹ªØ´ª×Íè Interactive C Robot kit


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

249

à¤Ã×èͧÁ×Í·Õè¨íÒà» ¹ à¤Ã×Íè §Á×Íà¾×Íè 㪠㹡ÒûÃСͺËع ¹µ »ÃСͺ仴 ÇÂ

1. ÁÕ´¤ÑµàµÍÃ

2. 䢤ǧ»ÅÒÂá©¡

3. ¤ÕÁµÑ´

¢Ñ¹é µÍ¹¡ÒûÃСͺ 7.1.1 㪠Á´Õ ¤ÑµàµÍà ËÃ×ͤÕÁµÑ´ µÑ´ªÔ¹é Ê Ç¹â¤Ã§à¿ ͧÍÍ¡ÁÒà» ¹ Ê Ç¹ æ

7.1.2 㪠µÒä¡ ·Í§àËÅ×ͧãÊ Å§ä»ã¹ª ͧ·ÕÃè кصÒÁÃÙ» ¾Ã ÍÁ·Ñ§é ãÊ ¨ÒúÕà¾×Íè ËÅ ÍÅ×¹è µÒÁŧ仴 ÇÂ

7.1.3 àÊÕº࿠ͧàÅç¡ 12 ¿ ¹ ࢠҡѺ᡹ˡàËÅÕÂè Á áŠǹíÒ仡´Å§º¹ª ͧ A à¾×Íè »ÃѺÇÑ´ãË á¡¹Ë¡àËÅÕÂè ÁàÊÁÍ ¾Í´Õ¡ºÑ ª ͧ A ·íÒàËÁ×͹¡Ñ¹ 2 ªØ´ ¡´ ªÔ¹é Ê Ç¹ M3 ࿠ͧàÅç¡ 12 ¿ ¹ ᡹ˡàËÅÕÂè Á


250

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.1.4 àÊÕº´ØÁ࿠ͧࢠҡѺ᡹ˡàËÅÕÂè Á áÅ Ç㪠ʡÃÙẺ½ §¢Ñ¹´ØÁ࿠ͧà¾Õ§àºÒ æ ¡ ͹ ¨Ò¡¹Ñ¹é ¹íÒ᡹ˡàËÅÕÂè Á àÊÕºࢠҷժè Í § A ¢Í§â¤Ã§à¿ ͧ M3 »ÃѺ᡹ˡàËÅÕÂè ÁãË ¤ÇÒÁÂÒǾʹաºÑ ª ͧ ¢Ñ¹Ê¡ÃÙÂ´Ö á¹ ¹´ Ç»ÃÐá¨Ë¡ àËÅÕÂè Á ªÔ¹é Ê Ç¹ M3 Ê¡ÃÙẺ½ §

´ØÁ࿠ͧ

᡹ˡàËÅÕÂè Á »ÃÐá¨Ë¡àËÅÕÂè Á

7.1.5 ¨Ðä´ ¼ÅÅѾ¸ à» ¹á¡¹Ë¡àËÅÕÂè ÁÂÖ´´ Ç´ØÁ࿠ͧ 1 Íѹ áÅР᡹ˡàËÅÕÂè ÁÂÖ´´ ÇÂ࿠ͧàÅç¡ 12 ¿ ¹ÍÕ¡ 2 Íѹ

7.1.6 àÊÕº᡹¡ÅÁáÅÐ᡹ˡàËÅÕÂè ÁࢠÒä»·Õâè ¤Ã§à¿ Í§ M1 ´Ñ§áÊ´§ã¹ÀÒ¾ ᡹¡ÅÁ ᡹ˡàËÅÕÂè ÁÂÖ´´ØÁ࿠ͧ

7.1.7 ãÊ à¿ Í§ G3 ࢠÒ仡Ѻ´ØÁÅ ÍãË µÒí á˹ §¢Í§Ê¡Ãٵç¡Ñºª ͧ¢Í§à¿ ͧ G3 ´Ñ§ÃÙ» ࿠ͧ G3

´ØÁÅ Í à¿ Í§ G3


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

251

7.1.8 ãÊ à¿ Í§ G2 µÃ§µíÒá˹ §á¡¹¡ÅÁ¡ ͹â´ÂËѹ´ ҹ࿠ͧ 12¿ ¹à¢ Ò´ ҹ㹠µÒÁ´ ÇÂ࿠ͧ G2 ÍÕ¡ 1 ªÔ¹é â´ÂàÊÕºÊÅѺÁÒ·Õ´è Ò ¹¢Í§á¡¹Ë¡àËÅÕÂè Á áÅл ´·Ñº´ ÇÂ࿠ͧ G1 µÃ§µíÒá˹ §á¡¹¡ÅÁ

࿠ͧ G2

࿠ͧ G2

࿠ͧ G2

7.1.9 ¹íÒ᡹ˡàËÅÕÂè Á·ÕÂè ´Ö µÔ´¡Ñºà¿ ͧàÅç¡ 12 ¿ ¹ ÁÒàÊÕºࢠҡѺª ͧ A 㪠᡹¾ÅÒʵԡ M4 àÊÕºࢠҷժè Í § B ¹íÒ½Ò¤Ãͺ M3 ÁÒ»ÃСºà¢ Òä» ãª Ê¡ÃÙà¡ÅÕÂǻŠÍ¢ѹÂÖ´ãË á¹ ¹ ᡹¾ÅÒʵԡ M4 â¤Ã§à¿ ͧ M1 Ê¡ÃÙà¡ÅÕÂǻŠÍ 3x12 ÁÁ.

â¤Ã§à¿ ͧ M3

᡹ˡàËÅÕÂè Á

7.1.10 »ÃСͺªØ´à¿ ͧÍÕ¡ªØ´â´ÂãÊ à¿ Í§ÊÅѺÅíҴѺ¡Ñº¤ÃÒÇááàÃÔÁè ¨Ò¡à¿ Í§ G1 ¡ ͹·Õªè Í §á¡¹¡ÅÁ µÒÁ´ Ç ࿠ͧ G2 ·Õªè Í §á¡¹Ë¡àËÅÕÂè Á áÅÐ࿠ͧ G2 ÍÕ¡ 1 ªÔ¹é ·Õªè Í §á¡¹¡ÅÁ ࿠ͧ G1

࿠ͧ G1

࿠ͧ G2

7.1.11 ãÊ à¿ Í§ G3 â´ÂËѹ´ ҹˡàËÅÕÂè ÁÍÍ¡´ Ò¹¹Í¡ ¨Ò¡¹Ñ¹é àÊÕº´ØÁÅ Íâ´ÂËѹª ͧʡÃÙãË µÃ§¡ÑºÃͺҡ¢Í§ ࿠ͧ G3 ´ØÁÅ Í´ Ò¹¹Õ¨é е ͧäÁ ¢¹Ñ Ê¡ÃÙ嫅 ËÃ×͢ѹÂÖ´à¾Õ§àºÒ æ ෠ҹѹé à¾×Íè ãË ÅÍ ·Ò§´ Ò¹« ÒÂáÅÐ ·Ò§´ Ò¹¢ÇÒà» ¹ÍÔÊÃе ͡ѹ ´ØÁÅ Í à¿ Í§ G3 ࿠ͧ G3

äÁ µÍ §¢Ñ¹Ê¡ÃÙ´Ö


252

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

A4.12 ¹íÒ᡹ˡàËÅÕÂè Á·ÕÂè ´Ö à¿ Í§àÅç¡ 12 ¿ ¹áÅ Ç â´ÂËѹ´ Ò¹Êѹé ãÊ à¢ Ò仡 ͹ µÒÁ´ ÇÂãÊ á¡¹¾ÅÒʵԡ M4 áÅÐ â¤Ã§à¿ ͧ M2 ¨Ò¡¹Ñ¹é ¹íÒÊ¡ÃÙ¢¹Ò´ 3 x 12 ÁÁ. ¢Ñ¹Âִ࿠ͧ M2 ࢠҡѺ࿠ͧ M3 ãË á¹ ¹

â¤Ã§à¿ ͧ M2 ᡹¾ÅÒʵԡ M4

᡹ˡàËÅÕÂè Á

Ê¡ÃÙ¢¹Ò´ 3 x 12 ÁÁ.

A4.13 ¹íÒ࿠ͧ 8 ¿ ¹ÁÒàÊÕºࢠҡѺ᡹ÁÍàµÍà áÅ Ç¡´á¡¹à¢ Òä»ã¹à¿ ͧ¨¹ÊØ´´Ñ§ÃÙ» ¨Ò¡¹Ñ¹é ¹íÒÁÍàµÍà àÊÕº Âִŧ㹪 ͧÂÖ´ÁÍàµÍà ¢Í§ªØ´à¿ ͧ¢Ñº ·íÒઠ¹¹Õ¡é ºÑ ÁÍàµÍà ·§Ñé ÊͧµÑÇ ¨Ðä´ ª´Ø ࿠ͧ¢ÑºÁÍàµÍà ¤·Ù ÁÕè ÍÕ µÑ ÃÒ·´ 58:1 ¾Ã ÍÁ㪠§Ò¹ â´Â᡹ˡàËÅÕÂè Á·ÕÂè ¹×è ÍÍ¡¨Ò¡ªØ´à¿ ͧ㪠ÊÒí ËÃѺàÊÕºÂÒ§Å Í ¡ÒÃãÊ à¿ Í§ 8 ¿ ¹ ࢠҡѺ᡹¢Í§ÁÍàµÍÃ

¾×¹é

ÍѵÃÒ·´à¿ ͧ㹪ش࿠ͧ¢ÑºÁÍàµÍà ¤Ù ¢Í§ËØ ¹Â¹µ Robo-11 㹡ÒÃÊà ҧªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù ÃØ ¹¹ÕéÊÒÁÒö¡íÒ˹´ÍѵÃÒ ·´ä´ 2 ÃдѺ¤×Í 58.1875:1 áÅÐ 203.65625:1 ËÃ×Í 58:1 áÅÐ 203:1 â´Â»ÃÐÁÒ³ áµ ã¹Ëع ¹µ Robo-11 àÅ×Í¡ãª ÍµÑ ÃÒ 58:1 à» ¹ËÅÑ¡ à¹×Íè §¨Ò¡·ÕÍè µÑ ÃÒ·´ÃдѺ¹Õ¨é зíÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ´è Ç Â ÍѵÃÒàÃçÇ·Õàè ËÁÒÐÊÁáÅÐÃͧÃѺ¡ÒõÃǨ¨Ñºã¹Åѡɳе Ò§æ ä´ Í ҧ ¤Ãº¶ ǹ

¹íÒÁÍàµÍà 俵ç 6V ·Õµè Í ÊÒ áÅ Ç àÊÕºŧ㹪 ͧÂÖ´ÁÍàµÍà ·íÒઠ¹à´ÕÂǡѹ¹Õ¡é ºÑ ÁÍàµÍÃ ä¿ µÃ§µÑÇ·ÕÊè ͧ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

253

7.2 »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà à´ÕèÂÇ ªØ´à¿ ͧ¢ÑºÁÍàµÍà à´ÕÂè Ç·Õãè ª ã¹Ëع ¹µ Robo-11 à» ¹¢Í§ TAMIYA Ãع 70110 áµ µÍ §à»ÅÕÂè ¹ÁÍàµÍÃ ä¿ µÃ§¢¹Ò´ 6V «Ö§è ã¹ªØ´ä´ ¨´Ñ àµÃÕÂÁÁÒãË áÅ Ç ã¹ÃÙ»·Õè 7-2 áÊ´§ÃÒÂÅÐàÍÕ´·Ñ§é ËÁ´¢Í§ªÔ¹é Ê Ç¹µ Ò§æ ·Õãè ª 㹡Òà »ÃСͺªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù N1

N

N2 ࿠ͧ G2

N5 N5 â¤Ã§à¿ ͧ¢Ñº

ÁÍàµÍà 俵ç 6V ¾Ã ÍÁÊÒµ Í

࿠ͧ G3

࿠ͧ G4 ࿠ͧ¤Åѵª Ê¡ÃÙẺ½ § ´ØÁ࿠ͧ ࿠ͧ G5 àÊÒ G6 x6

᡹ˡàËÅÕèÂÁÊÑé¹áÅÐÂÒÇ Í ҧÅÐ 1 Íѹ

µÒä¡ x4

᡹¡ÅÁ X 1

¨ÒÃºÕ x 1

»ÃÐá¨Ë¡àËÅÕÂè Á

Ê¡ÃÙà¡ÅÕÂǻŠÍ 3x12 ÁÁ. x3

ÃÙ»·Õè 7-2 áÊ´§ÍØ»¡Ã³ ª´Ø ࿠ͧ¢ÑºÁÍàµÍà à´ÕÂè Ç ·Õ¨è ´Ñ àµÃÕÂÁÁÒ㹪ش»ÃСͺ Interactive C robot kit 7.2.1 㪠¤ÁÕ µÑ´ªÔ¹é Ê Ç¹ G6 ·Ñ§é ËÁ´ÍÍ¡ÁÒ ¨Ò¡¹Ñ¹é µÑ´ªÔ¹é Ê Ç¹ N1, N2 áÅÐ N5 (2 ªÔ¹é ) ÍÍ¡¨Ò¡â¤Ã§à¿ ͧ¢Ñº ¨ÐàËÅ×Í੾ÒЪԹé Ê Ç¹ N ãË à¡çºäÇ

â¤Ã§ N1

â¤Ã§ N2 ªÔ¹é Ê Ç¹ N

ªÔ¹é Ê Ç¹ N5 x2


254

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.2.2 ¹íÒ᡹ˡàËÅÕÂè ÁÂÒÇÊʹࢠÒä»ã¹´ØÁ࿠ͧ¨¹¶Ö§µíÒá˹ §¡Ö§è ¡Åҧ᡹ ãË ãª »ÃÐá¨Ë¡àËÅÕÂè Á¢Ñ¹Ê¡ÃÙẺ ½ §à¾×Íè ãË ´ÁØ à¿ Í§ºÖ´á¹ ¹¡Ñºá¡¹ Ê Ç¹á¡¹Ë¡àËÅÕÂè ÁÊѹé ãË ÊʹࢠÒä»ã¹àÊÒ G6 â´ÂãË »ÅÒ¢ͧ᡹¾ ¹á¹ÇàÊÒ ÍÍ¡ÁÒ 5 ÁÔÅÅÔàÁµÃ

7.2.3 ¹íÒµÒä¡ ãÊ Å§ã¹ª ͧ A áÅÐ B ¢Í§â¤Ã§ N2 áÅ ÇËÂÍ´¨ÒúյÒÁŧä»ã¹Ã٢ͧµÒä¡ ¨Ò¡¹Ñ¹é ¹íÒ᡹ˡàËÅÕÂè Á ÂÒÇ·Õäè ´ ¨Ò¡¢ Í 7.2.2 ÊʹࢠÒä»ã¹ªÔ¹é Ê Ç¹ G6 ¨¹¡ÃÐ·Ñ§è ªÔ¹é Ê Ç¹ G6 µÔ´¡Ñº´ØÁ࿠ͧ áŠǹíÒÁÒÊÍ´¼ Ò¹Ã٢ͧµÒ ä¡ ã¹ª ͧ B Ê Ç¹ÃÙ·ÍÕè ÂÙ´ Ò ¹¢ÇÒ ãË ¹Òí ᡹¡ÅÁãÊ Å§ä» ¨Ò¡¹Ñ¹é ãÊ à¿ Í§ G3 ࢠҡѺ᡹ˡàËÅÕÂè ÁÂÒÇâ´ÂËѹ´ Ò¹ Ë¡àËÅÕÂè Áŧ

7.2.4 ¹íÒ᡹ˡàËÅÕÂè ÁÊÑ¹é ·Õäè ´ ¨Ò¡¢ Í 7.2.2 ÁÒàÊÕºŧ㹪 ͧ A â´ÂËѹ´ Ò¹»ÅÒÂ·Õµè ´Ô àÊÒ G6 ŧ㹪 ͧ A ¨Ò¡¹Ñ¹é ·íÒ¡ÒûÃСͺ࿠ͧ¤ÅѪ â´Â¹íÒ࿠ͧ G5 ÁÒ»ÃСºà¢ ҡѺ¤ÅѪ áÅ ÇÇҧŧº¹á¡¹Ë¡àËÅÕÂè ÁÊѹé


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

255

7.2.5 ãÊ à¿ Í§ G4 ŧº¹á¡¹¡ÅÁ·Ò§¢ÇÒ µÒÁ´ ÇÂÇҧ࿠ͧ G2 ŧ·Õáè ¡¹Ë¡àËÅÕÂè ÁÂÒǵç¡ÅÒ§ ã¹¢³Ð¹Õàé ¿ ͧ G2 ¨ÐÇÒ§ÍÂÙº ¹ÊØ´à˹×Í࿠ͧ G5 áÅÐ G4 ࿠ͧ G2

࿠ͧ G5

࿠ͧ G4

7.2.6 ãÊ µÒä¡ ·àÕè ËÅ×Íŧ㹪 ͧ A áÅÐ B ¢Í§â¤Ã§ N1 ¨Ò¡¹Ñ¹é ¹íÒÁÒÇÒ§»ÃСº» ´ªØ´à¿ ͧ·Õäè ´ ¨Ò¡¢ Í 7.2.5 áŠǾÅÔ¡¡ÅѺÁÒãÊ Ê¡ÃÙà¡ÅÕÂǻŠÍ 3 µÑÇ áŠǢѹãË á¹ ¹ ¨Ðä´ ª´Ø ࿠ͧ¢Ñº·ÕÁè ÍÕ µÑ ÃÒ·´ 5,402 : 1

7.2.7 àÊÕº࿠ͧµÑÇ˹͹ࢠҡѺ᡹ÁÍàµÍà â´Â㪠ª¹Ôé Ê Ç¹ N ·Õàè ËÅ×ͨҡ¢Ñ¹é µÍ¹ 7.2.1 ª ÇÂ㹡ÒáíÒ˹´ÃÐÂÐ ¨Ò¡¹Ñ¹é ¹íÒä»àÊÕºࢠҡѺªØ´à¿ ͧ·Õ»è ÃСͺàÊÃç¨áÅ Ç Ê Ç¹á¡¹·Ñ§é Êͧ¢Í§ªØ´à¿ ͧãË ¹Òí ªÔ¹é Ê Ç¹ N5 ÁÒàÊÕÂºà¢ Ò ·Õ»è ÅÒ·ѧé Êͧ à» ¹ÍѹàÊÃç¨ÊÔ¹é ¡ÒûÃСͺªØ´à¿ Í §¢ÑºÁÍàµÍà à´ÕÂè Ç


256

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.3 »ÃСͺªØ´Å ÍÊÒ¾ҹáÅÐâ¤Ã§ËØ ¹Â¹µ ªØ´Å ÍÊÒ¾ҹ¢Í§Ëع ¹µ Robo-11 㪠ª´Ø »ÃСͺŠÍÊÒ¾ҹ (Track & wheek set) ¢Í§ Tamiya Ãع 70100 Ê Ç¹â¤Ã§Ëع ¹µ ¹¹Ñé 㪠ª´Ø »ÃСͺ°Ò¹à͹¡»ÃÐʧ¤ (Univeral plate set) Ãع 70157 ¢Í§ Tamiya ઠ¹ ¡Ñ¹ à ÇÁ¡ÑºªÔ¹é µ ;ÅÒʵԡà͹¡»ÃÐʧ¤ ÊíÒËÃѺªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤äÙ ´ ÁÒ¨Ò¡¡ÒÃÊà ҧã¹ËÑÇ¢ Í·Õè 7.1 ã¹ÃÙ»·Õè 73 áÊ´§ªÔ¹é Ê Ç¹·Õµè Í §ãª 㹡ÒÃÊà ҧŠÍÊÒ¾ҹáÅÐâ¤Ã§Ëع ¹µ Í ҧäáçµÒÁ ªÔ¹é Ê Ç¹Â Í¨íҾǡªÔ¹é µ ;ÅÒʵԡ, àÊÒÃͧẺµ Ò§æ, ¹Íµ áÅÐÊ¡ÃÙ ¨íҹǹ·ÕÃè кØà» ¹¨íҹǹ·Õ¨è ´Ñ ÁÒãË ã¹ªØ´ «Ö§è ÁÒ¡à¾Õ§¾ÍáÅÐÁÕàËÅ×ÍÊíÒËÃѺà¡çº äÇ µ´Ô µÑ§é ÍØ»¡Ã³ ͹×è à¾ÔÁè àµÔÁä´

Š͢ѺÊÒ¾ҹãË­ x 2

Š͢ѺÊÒ¾ҹàÅç¡ x 2 ªØ´µ ÍÊÒ¾ҹ x 2 ´ØÁÅ Í»ÃФͧ x 12

Å Í»ÃФͧÊÒ¾ҹãË­ x 2 Å Í»ÃФͧÊÒ¾ҹ¡ÅÒ§ x 6 Å Í»ÃФͧÊÒ¾ҹàÅç¡ x 10 ᡹¡ÅÁ x 5 ©Ò¡Âִ᡹ŠÍÂÒÇ x 4

©Ò¡Âִ᡹ŠÍÊѹé x 4

á¼ ¹°Ò¹ãË­ x 2 ªÔ¹é µ ÍÁØÁ©Ò¡,á¹ÇµÃ§áÅÐÁØÁ» Ò¹ x 60

¹Íµ 3 ÁÁ. x 35 ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù x 1

Ê¡ÃÙ 3x10 ÁÁ. x 35

àÊÒÃͧẺµ Ò§æ x 20

Ê¡ÃÙ 3x20 ÁÁ. x 4 Ê¡ÃÙ 3x25 ÁÁ. x 4

ÃÙ»·Õè 7-3 áÊ´§ÍØ»¡Ã³ ÊÒí ËÃѺÊà ҧŠÍÊÒ¾ҹáÅÐâ¤Ã§Ëع ¹µ ¢Í§Ëع ¹µ Robo-11


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

257

7.3.1 àÃÔÁè µ ¹´ Ç¡ÒûÃСͺŠÍÊÒ¾ҹ 2 àÊ ¹ â´ÂÅ Íáµ ÅÐàÊ ¹ãª ÊÒ¾ҹ¢¹Ò´ 30 ¢ ͵ Í 1 àÊ ¹, 10 ¢ ͵ Í 1 àÊ ¹ áÅÐ 8 ¢ ͵ Í 2 àÊ ¹ à¾×Íè ãË ä´ ¢¹Ò´áÅеíÒá˹ §¢Í§â¤Ã§Ëع ¹µ ·àÕè ËÁÒÐÊÁ ÊÒ¾ҹ 10 ¢ ͵ Í x 1 ÊÒ¾ҹ 30 ¢ ͵ Í x 2 ÊÒ¾ҹ 8 ¢ ͵ Í x 4 7.3.2 ¹íÒ»ÅÒ¢ͧÊÒ¾ҹ 30 ¢ ͵ ÍàÊÕºࢠҡѺ»ÅÒÂÍÕ¡´ Ò¹Ë¹Ö§è ¢Í§ÊÒ¾ҹ 10 ¢ ͵ Í ¨Ò¡¹Ñ¹é ¹íÒ»ÅÒ´ Ò¹ ·Õàè ËÅ×ͧ͢ÊÒ¾ҹ 10 ¢ ͵ ÍàÊÕºࢠҡѺ»ÅÒÂÍÕ¡´ Ò¹¢Í§ÊÒ¾ҹ 8 ¢ ͵ Í àª×Íè Áµ Í»ÅÒÂÊÒ¾ҹ¢¹Ò´ 8 ¢ ͵ ÍࢠҡѺÊÒ¾ҹ 8 ¢ ͵ ÍÍÕ¡ªÔ¹é Ë¹Ö§è ¨Ò¡¹Ñ¹é ¹íÒ»ÅÒ¢ͧÁѹ¡ÅѺ仵 Íàª×Íè Á¡ÑºÊÒ¾ҹ 30 ¢ ͵ Í â´ÂáÊ´§ ÅѡɳСÒÃàÊÕº¢ ͵ ÍࢠÒä»ÅçÍ¡´Ñ§ÃÙ» ¨Ðä´ ÅÍ ÊÒ¾ҹµÒÁ·Õµè Í §¡Òà ãË ·Òí Ẻà´ÕÂǡѹ¹ÕÍé ¡Õ 1 àÊ ¹

7.3.3 ¹íÒá¼ ¹°Ò¹ãË­ »ÃСºà¢ ҡѺ©Ò¡Âִ᡹ŠÍÂÒÇÂÖ´´ ÇÂÊ¡ÃÙáÅй͵¢Ñ¹ãË á¹ ¹ â´ÂµíÒá˹ §·Õµè ´Ô µÑ§é ¹Ñ¹é ãË ¹ºÑ ¨Ò¡ÃÙà¨ÒТͧἠ¹°Ò¹à¢ Òä» 8 ÃÙ Ëѹ´ Ò¹àÃÕº¢Í§©Ò¡ÂÖ´ÍÍ¡´ Ò¹¹Í¡´Ñ§ÃÙ» ¢Ñ¹Ê¡ÃÙáÅй͵Âִ੾ÒÐ ·Ò§´ ҹŠҧà¾Õ§Í ҧà´ÕÂÇ ¨Ò¡¹Ñ¹é ¹íҪش࿠ͧ¢ÑºÁÍàµÍà ¤ÁÙ ÒÇÒ§º¹á¼ ¹°Ò¹´ Ò¹º¹ â´ÂãË µÒí á˹ §ÂÖ´Ê¡ÃÙ ¢Í§ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤µÙ ç¡ÑºµíÒá˹ §ÃÙà¨Òк¹ÊØ´¢Í§©Ò¡ÂÖ´á¡¹Å Í áÅ ÇÂÖ´ãË á¹ ¹´ ÇÂÊ¡ÃÙáÅй͵ ¨Ðä´ °Ò¹Å Ò§¢Í§â¤Ã§Ëع ¹µ ÍÍ¡ÁÒ


258

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.3.4 ¹íÒ©Ò¡Âִ᡹ŠÍÊѹé ÁÒÂִࢠҡѺἠ¹°Ò¹ â´ÂãË ª´Ô ´ Ò¹µÃ§¢ ÒÁ¡Ñºá¡¹¢Í§ÁÍàµÍà ¨Ò¡¹Ñ¹é ¾ÅÔ¡á¼ ¹°Ò¹ ¡ÅѺ仴 ҹŠҧ ¹íÒ᡹àËÅç¡¡ÅÁÂÒÇàÊÕºࢠҡѺÃ٢ͧ©Ò¡ÂÖ´á¡¹Å Í ã¹µíÒá˹ §ÃÙ·Õè 1, 4 áÅÐ 7

1

᡹àËÅç¡¡ÅÁ

4 7

©Ò¡Âִ᡹ŠÍÊѹé 7.3.5 ¹íÒÅ Í»ÃФͧÊÒ¾ҹ¡ÅÒ§àÊÕºࢠҡѺ᡹¡ÅÁâ´ÂËѹ´ ҹ˹ ҢͧŠÍÍÍ¡ ¨Ò¡¹Ñé¹ÂÖ´Å Í»ÃФͧ ÊÒ¾ҹ´ Ç´ØÁÅ Í»ÃФͧ â´Â㪠¹ÇÔé ¡´ãË á¹ ¹ áŠǹíÒ᡹ŠÍáÅÐÅ Í»ÃФͧãË­ 嫅 ¡Ñº©Ò¡Âִ᡹ŠÍÊѹé â´Â 㪠´ÁØ Å ÍàÊÕºࢠҷջè ÅÒ¢ͧ᡹·Ñ§é Êͧ¢ Ò§ ´ØÁÅ Í»ÃФͧ Å Í»ÃФͧãË­

7.3.6 ¹íÒŠ͢Ѻà¤Å×Íè ¹ÊÒ¾ҹãË­ àÊÕºࢠҡѺ᡹¢Í§ÁÍàµÍà 㪠¹ÇÔé ¡´ãË á¹ ¹ â´ÂãË µÒí á˹ §Ë¹ÒÁ¢Í§Å Í ¢Ñºà¤Å×Íè ¹ ÍÂÙµ ç¡ÅÒ§¢Í§Å Í»ÃФͧ¾Í´Õ ¨Ò¡¹Ñ¹é µÔ´µÑ§é ªÔ¹é µ ÍÁØÁ©Ò¡º¹á¼ ¹°Ò¹·Õ´è Ò ¹ËÅѧ¢Í§ªØ´à¿ ͧ áÅÐ µÔ´µÑ§é ªÔ¹é µ ÍÁØÁ©Ò¡ÍÕ¡Ë¹Ö§è µÑÇ·Õµè Òí á˹ §¡Ö§è ¡ÅÒ§´ ҹŠͻÃФͧãË­ «Ö§è ÍÂÙ¤ ¹Åн § ¡ÑºªØ´à¿ ͧ¢Ñº


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

259

7.3.7 ¹íÒªÔ¹é µ ÍÁØÁ©Ò¡ÍÕ¡ 3 ªÔ¹é ÂִࢠҡѺἠ¹°Ò¹ÍÕ¡á¼ ¹·Õàè ËÅ×Í â´ÂÁÕ·ÈÔ ·Ò§¡ÒõԴµÑ§é ´Ñ§ã¹ÃÙ» ÊíÒËÃѺµíÒá˹ § ¡ÒõԴµÑ§é µ ͧãË µÃ§¡ÑºµíÒá˹ §¢Í§ªÔ¹é µ ÍÁØÁ©Ò¡·Õµè ´Ô µÑ§é º¹á¼ ¹°Ò¹ÍÕ¡á¼ ¹Ë¹Ö§è (¨Ò¡¢Ñ¹é µÍ¹·Õè 7.3.6)

7.3.8 ¹íÒªÔ¹é µ Íá¹ÇµÃ§àÊÕºࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡·Ñ§é ÊÒÁ¨Ø´ à¾×Íè Êà ҧ໠¹µÑÇÂִࢠҡѺἠ¹°Ò¹ªÔ¹é áá·Õµè ´Ô µÑ§é ªØ´ Å ÍáÅÐ࿠ͧ¢Ñº ¨Ò¡¹Ñ¹é ¹íÒá¼ ¹°Ò¹·Ñ§é Êͧἠ¹àÊÕº»ÃСºà¢ Ò´ Ç¡ѹ ´ ÇÂÇÔ¸¡Õ Òùըé Ъ Ç·íÒãË ÊÒÁÒö¶Í´ â¤Ã§Ëع ¹µ à¾×Íè »ÃѺᵠ§ÀÒÂã¹ä´ §Ò  ¨Ò¡¹Ñ¹é ¹íÒÅ ÍÊÒ¾ҹ·Õ»è ÃСͺàÊÃç¨áŠǨҡ¢Ñ¹é µÍ¹·Õè 7.3.2 ÁÒÊÇÁ ࢠҡѺŠͻÃФͧ·Ñ§é Êͧ â´Âá¹Ç¢Í§Å ͷѧé Êͧ´ Ò¹µ ͧµÃ§¡Ñ¹ ¡ç¨Ðä´ â¤Ã§Ëع ¹µ Robo-11 ·ÕÊè ÁºÙó


260

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.4 »ÃСͺᢹáÅеԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ËÅѧ¨Ò¡Êà ҧâ¤Ã§ËØ ¹Â¹µ àÃÕºà Í ã¹ÅíҴѺµ Íä»à» ¹¡ÒÃÊà ҧ¡Å䡾ÔàÈÉÍÕ¡ªØ´Ë¹Öè§ãË á¡ ËØ ¹Â¹µ Robo-11 ¹Ñ¹è ¤×Í á¢¹ÊíÒ˹Ѻ¡ÊÔ§è ¢Í§ ´ Ç¡ÒÃ㪠ª´Ø ࿠ͧ¢ÑºÁÍàµÍà à´ÕÂè Ç·ÕÊè à ҧ¢Ö¹é ã¹ËÑÇ¢ Í·Õè 7.2 à ÇÁ¡ÑºªØ´ »ÃСͺᢹà͹¡»ÃÐʧ¤ (Universal arm set) Ãع 70143 à¾×Íè Êà ҧ໠¹á¢¹Ëع ¹µ ·ÊÕè ÒÁÒö¤Çº¤ØÁãË Â¡ áÅÐÇÒ§ÊÔ§è ¢Í§ä´ ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ¨Ð·íÒ¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôäÇ ãµ â¤Ã§Ëع ¹µ à¾×Íè 㪠㹡ÒõÃǨ¨ÑºàÊ ¹ â´ÂÊÒÁÒöµÃǨ¨Ñºä´ ·§Ñé àÊ ¹ÊÕ¢ÒÇáÅдíÒ ¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´·Õâè »Ãá¡ÃÁ¤Çº¤ØÁ ã¹ ÃÙ»·Õè 7-4 áÊ´§ªÔ¹é Ê Ç¹áÅÐÍØ»¡Ã³ ·µÕè Í §ãª à¾ÔÁè àµÔÁ㹡ÒÃÊà ҧᢹËع ¹µ áÅеԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô

ªÔ¹é µ ÍᢹẺ B x 4 ªØ´à¿ ͧ¢ÑºÁÍàµÍà à´ÕÂè Ç (ÍѵÃÒ·´ 6402 : 1) x 1

Ê¡ÃÙ 3x10 ÁÁ. x 16

¡ÒÇÊͧ˹ Ò 1x4 ¹ÔÇé x 1

¹Íµ 3 ÁÁ. x 16

ªÔ¹é Ê Ç¹á¢¹ x 2

ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô x 3

ºÍà ´ AX-11

ÃÙ»·Õè 7-4 ªÔ¹é Ê Ç¹áÅÐÍØ»¡Ã³ ·ãÕè ª Êà ҧᢹáÅеԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹¢Í§Ëع ¹µ Robo-11 7.4.1 ¹íÒâ¤Ã§Ëع ¹µ ÁҶʹἠ¹°Ò¹´ Ò¹º¹ÍÍ¡ µÔ´¡ÒÇÊͧ˹ Ò·Õ´è Ò ¹ËÅѧ¢Í§ºÍà ´ AX-11áÅ ÇÂÖ´¡Ñºá¼ ¹ °Ò¹´ Ò¹º¹¢Í§â¤Ã§Ëع ¹µ ·¶Õè Í´ÍÍ¡ÁÒ ¨Ò¡¹Ñ¹é ¹íÒªÔ¹é µ Íᢹ B 2 ªÔ¹é ÂÖ´·Õ´è Ò ¹Å Ò§¢Í§á¼ ¹°Ò¹ªÔ¹é º¹¹Õé â´Â µíÒá˹ §ÂÖ´¨ÐË Ò§¨Ò¡¢Íºà¢ ÒÁÒ 3 ÃÙ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

261

7.4.2 ¹íÒ á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôà Í´ ÇÂÊ¡ÃÙ¢¹Ò´ 3x20 ÁÁ. áÅ Ç ãª àÊÒÃͧÊÇÁ·Ñº·Õ´è Ò ¹ËÅѧ¢Í§á¼§Ç§¨Ã ·íÒઠ¹¹Õãé Ë ¤Ãº·Ñ§é 3 ªØ´ ˧ÒÂâ¤Ã§Ëع ¹µ ¢¹Öé áÅ Ç·íÒ¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Ñ§é ÊÒÁªØ´à¢ Ò·Õè ´ ҹŠҧ¢Í§Ëع ¹µ â´ÂµÔ´µÑ§é ãË àÃÕ§ä»ã¹á¹Çà´ÕÂǡѹ ¢Ñ¹Ê¡ÃÙáÅй͵ÂÖ´ãË á¹ ¹ ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤Ù

á¼ ¹°Ò¹ËÅÑ¡¢Í§â¤Ã§Ëع ¹µ

ἧǧ¨ÃµÃǨ¨Ñº áʧÊз ͹ÍÔ¹¿ÃÒàô

* ã¹ÃÙ»äÁ ä´ áÊ´§Å ÍÊÒ¾ҹ

7.4.3 Ạ§¤ÃÖ§è ªÔ¹é Ê Ç¹á¢¹à» ¹ 2 Ê Ç¹à· Òæ ¡Ñ¹ â´Â㪠ÁÍ× ËÑ¡ªÔ¹é Ê Ç¹á¢¹ã¹µíÒá˹ §Ãͺҡ ¨Ò¡¹Ñ¹é ¹íÒªÔ¹é Ê Ç¹ ᢹ·ÕËè ¡Ñ ÍÍ¡ÁÒáÅ ÇÂÖ´Ê¡ÃÙ 3x10 ÁÁ.áÅй͵ࢠҡѺªÔ¹é µ ÍᢹẺ B ·Ò§´ Ò¹·ÕÁè Õ 2 ÃÙà¨ÒÐ ¨Ðä´ á¢¹Ëع ¹µ µÒÁµ ͧ¡Òà ªÔ¹é µ ÍᢹẺ B

ªÔ¹é Ê Ç¹á¢¹ËÅÑ¡

7.4.4 ¹íÒá¼ ¹°Ò¹´ Ò¹º¹·Õµè ´Ô µÑ§é ºÍà ´ AX-11 áÅ ÇàÊÕºŧ任ÃСº¡Ñºâ¤Ã§Ëع ¹µ ¨Ò¡¹Ñ¹é ¹íҪش࿠ͧ¢Ñº ÁÍàµÍà à´ÕÂè ÇÂִࢠҡѺªÔ¹é µ ÍᢹẺ B ·Õµè ´Ô ÍÂÙ¡ ºÑ á¼ ¹°Ò¹´ Ò¹º¹ â´Â㪠ʡÃÙ 3x10 ÁÁ. áÅй͵¢Ñ¹ÂÖ´ãË ªØ´à¿ ͧ¢Ñº ÁÍàµÍà à´ÕÂè Ç

á¼ ¹°Ò¹º¹ ºÍà ´ AX-11

ªÔ¹é µ ÍᢹẺ B

á¼ ¹°Ò¹ËÅÑ¡¢Í§â¤Ã§Ëع ¹µ * ã¹ÃÙ»äÁ ä´ áÊ´§Å ÍÊÒ¾ҹ

á¹ ¹ 7.4.5 㪠ª¹Ôé µ ÍÁØÁ©Ò¡ÁÒÂÖ´Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ࢠҷջè ÅÒÂ᡹ ÁÍàµÍà (ªÔ¹é Ê Ç¹ N5) ·Ñ§é Êͧ¢ Ò§ à¾×Íè àµÃÕÂÁµ ͡ѺᢹËع ¹µ ·Õè Êà ҧäÇ áÅ Çã¹¢Ñ¹é µÍ¹·Õè 7.4.3


262

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.4.6 ¹íÒᢹËع ¹µ ·àÕè µÃÕÂÁäÇ (¨Ò¡¢Ñ¹é µÍ¹·Õè 7.4.3) ÁÒµ ÍࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡¢Í§ªØ´à¿ ͧ â´Â㪠ʡÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. »ÃѺÃÐÂÐãË á¢¹á¹º¡Ñº¾×¹é ¾Í´Õ (ËÃ×ÍÊÙ§¡Ç ÒàÅ硹 ÍÂ) àÁ×Íè ᡹ËÁع¢Í§ªØ´à¿ ͧà´ÕÂè ÇÍÂÙ ã¹µíÒá˹ §µèÒí ÊØ´ ¨Ò¡¹Ñ¹é ¹íÒªÔ¹é Ê Ç¹á¢¹ËÅÑ¡·Õàè ËÅ×ÍÍÕ¡ 1 ªÔ¹é ÁÒµÔ´µÑ§é ÃÐËÇ Ò§á¢¹·Ñ§é Êͧ¢ Ò§à¾×Íè à¾ÔÁè ¤ÇÒÁá¢ç§ áçãË á¡ á¢¹¢Í§Ëع ¹µ×àÁ×Íè ·íÒ¡ÒáÊÔ§è ¢Í§

7.4.7 µ ÍÊÒÂÁÍàµÍà ¨Ò¡ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¤·Ù ãÕè ª 㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ ࢠҷյè Òí á˹ § M-0 áÅÐ M-1 â´Â ÁÍàµÍà «Ò µ Í·Õ¨è ´Ø M-0 ´ Ò¹¹Í¡ Ê Ç¹ÁÍàµÍà ¢ÇÒµ ÍࢠҷÕè M-1 ·Ò§´ ҹ㹠(Í ҧäáçµÒÁ ÂѧÊÒÁÒöÊÅѺ µíÒá˹ §¢Í§¡Òõ ÍÁÍàµÍÃ ä´ ¶ ÒËÒ¡¡Ò÷íÒ§Ò¹äÁ ¶¡Ù µ ͧ) Ê Ç¹ÁÍàµÍà ¢Í§ªØ´á¢¹Ëع ¹µ ¹¹Ñé µ Íࢠҷյè Òí áË ¹ § M-2 ´ ҹ㹠(ÂѧÊÒÁÒöÊÅѺµíÒá˹ §¢Í§¨Ø´µ Íà» ¹´ Ò¹¹Í¡ä´ ¶ Ò¡Ò÷íÒ§Ò¹äÁ ¶Ù¡µ ͧ) ·Ò§´ Ò¹ÊÒ ÊÑ­­Ò³¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ãË µÍ ·Õè AI-17, AI-19 áÅÐ AI-21 àÃÕ§ÅíҴѺ¨Ò¡¢ÇÒ仫 Ò¨ҡµíÒá˹ § ¢Í§¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨Ñº´ ҹŠҧ¢Í§â¤Ã§Ëع ¹µ (Áͧ¨Ò¡´ Ò¹º¹) ¶Ö§¢Ñ¹é µÍ¹¹Õ¨é Ðä´ Ë¹Ø Â¹µ Robo11 ·Õ¾ è à ÍÁÊíÒËÃѺ¡ÒÃàÃÕ¹Ã٠㪠§Ò¹ ·´Åͧ áÅÐàÅ ¹ !!!! Ëع ¹µ Robo-11

µ ÍÊÒÂÁÍàµÍÃ

µ ÍÊÒÂἧǧ¨ÃµÃǨ¨ÑºàÊ ¹


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

263

7.5 à¢Õ¹â»Ãá¡ÃÁ¢Ñºà¤Å×è͹ËØ ¹Â¹µ Í ҧ§ Ò àÁ×Íè Êà ҧËع ¹µ Robo-11 à» ¹·Õàè ÃÕºà Í µ Íä»à» ¹¡ÒÃàÃÔÁè µ ¹à¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹´ Ç â»Ãá¡ÃÁ Interactive C àÃÔÁè ¨Ò¡â»Ãá¡ÃÁ¾×¹é °Ò¹·Õ¤è Ǻ¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò ¶ÍÂËÅѧ ËÁعµÑÇ« Ò áÅТÇÒ à» ¹·Õ·è ÃÒºáÅ ÇÇ Ò Ëع ¹µ Robo-11 ¢Ñºà¤Å×Íè ¹´ ÇÂÁÍàµÍà 俵ç 2 µÑÇ áÅÐ㹡ÒäǺ¤ØÁÁÍàµÍà ¢Í§ â»Ãá¡ÃÁ Interactive C ·íÒä´ â´Â¡ÒÃ㪠¤Òí Êѧè fd ,bk ËÃ×Í motor

7.5.1 ¡ÒâѺà¤Å×Íè ¹ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò ·íÒä´ â´Â¡ÒÃÊѧè ãË ÁÍàµÍà ªÍ § 0 áÅÐ 1 ËÁع仢 ҧ˹ Ò´ ǤíÒÊѧè fd ËÃ×Í motor ¶ ÒËҡ㪠¤Òí ÊÑ§è ´Ñ§¡Å ÒÇáÅ ÇÁÍàµÍà µÇÑ ã´ËÁع¶ÍÂËÅѧãË ÊÅѺ ¢ÑÇé µ Í·ÕÁè ÍàµÍà ªÍ §¹Ñ¹é ·Ñ¹·Õ à¾×Íè ãË ÁÍàµÍà ·§Ñé ¤ÙË Áعä»ã¹·ÔÈ·Ò§à´ÕÂǡѹ

µÑÇÍ ҧâ»Ãá¡ÃÁ

Motor-1

Robo-11

Motor-0

#define pow 50 void run_fd(void) { motor(0,pow); // Drive left motor forward motor(1,pow); // Drive right motor forward }

ËÁÒÂà赯 : ·Õµè ÇÑ á»Ã pow àÇÅÒà¢Õ¹â»Ãá¡ÃÁ¨ÃÔ§µ ͧãÊ ¤Ò ¢Í§µÑÇàÅ¢¨ÃÔ§ ËÃ×ÍÁÔઠ¹¹Ñ¹é µ ͧÁÕ¡ÒûÃСÒȵÑÇ á»Ã áÅСíÒ˹´¤ ÒäÇ ·ÊÕè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ¡ ͹àÊÁÍ

7.5.2 ¡ÒâѺà¤Å×Íè ¹ãË Ë¹Ø Â¹µ ¶ÍÂËÅѧ ·íÒä´ â´ÂÊѧè ãË ÁÍàµÍà ªÍ § 0 áÅÐ 1 ËÁع¶ÍÂËÅѧ´ ǤíÒÊѧè bk ËÃ×Í àÁ×èÍ㪠¤íÒÊÑ觴ѧ¡Å ÒÇáÅ ÇÁÕÁÍàµÍà µÑÇä˹ËÁع仢 ҧ˹ ÒãË ÊÅѺ¢Ñéǵ Í·Õè ÁÍàµÍà ªÍ §¹Ñ¹é ·Ñ¹·Õ à¾×Íè ãË ÁÍàµÍà ·§Ñé ¤Ùã ¹·ÔÈ·Ò§à´ÕÂǡѹ

Robo-11

Motor-1

void run_bk(void) { motor(0,-pow); // Drive left motor backward motor(1,-pow); // Drive right motor backward }

Motor-0

µÑÇÍ ҧâ»Ãá¡ÃÁ

ËÁÒÂà赯 : ·Õµè ÇÑ á»Ã -pow àÇÅÒà¢Õ¹â»Ãá¡ÃÁ¨ÃÔ§µ ͧãÊ ¤Ò ¢Í§µÑÇàÅ¢¨ÃÔ§ ËÃ×ÍÁÔઠ¹¹Ñ¹é µ ͧÁÕ¡ÒûÃСÒȵÑÇ á»ÃáÅСíÒ˹´¤ ÒäÇ ·ÊÕè Ç ¹ËÑǢͧâ»Ãá¡ÃÁ¡ ͹àÊÁÍ


264

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.5.3 ¡ÒâѺà¤Å×Íè ¹ãË Ë¹Ø Â¹µ àÅÕÂé Ç« ÒÂ

Motor-1

µÑÇÍ ҧâ»Ãá¡ÃÁ

Robo-11

Motor-0

·íÒä´ â´Â¡ÒÃÊѧè ãË ÁÍàµÍà ªÍ § 0 ËÁع¶ÍÂËÅѧáÅÐÁÍàµÍà ªÍ § 1 ËÁع仢 ҧ˹ Ò áŠǵÒÁ´ Ç¡ÒÃ˹ ǧàÇÅÒàÅ硹 ÍÂà¾×Íè ãË Ë¹Ø Â¹µ à¡Ô´¡ÒÃËÁع µÑÇà¾×Íè »ÃѺ·Ôȷҧ价ҧ« Ò «Ö§è ¼Ù¾ ² Ñ ¹Òµ ͧ¾Ô¨ÒóҤÇÒÁàËÁÒÐÊÁ㹡Òà ˹ ǧàÇÅÒ´ Ç à˵ٷµÕè Í §ãª Ç¸Ô ¹Õ àÕé ¹×Íè §¨Ò¡ Robo-11 à» ¹Ëع ¹µ ·ÁÕè ¢Õ ¹Ò´áÅÐ ¹éÒí ˹ѡ¾ÍÊÁ¤Çà ´Ñ§¹Ñ¹é 㹡ÒÃàÅÕÂé Ǩ֧µ ͧÍÒÈÑ¡íÒÅѧ¨Ò¡ÁÍàµÍà ·§Ñé ÊͧµÑÇ ¹Í¡¨Ò¡¹Ñ¹é ÇÔ¸àÕ ÅÕÂé ÇẺ¹ÕÂé §Ñ ª ÇÂÃÑ¡ÉÃÊÁ´ØÅ 㹡ÒÃà¤Å×͹·Õ¢è ͧËع ¹µ ´Ç Â

void turn_left(float spin_time) { motor(0,-pow); // Drive left motor backward motor(1,pow); // Drive right motor forward sleep(spin_time); // Delay for left spinning }

7.5.4 ¡ÒâѺà¤Å×è͹ãË ËØ ¹Â¹µ àÅÕéÂÇ¢ÇÒ

void turn_right(float spin_time) {

Motor-1

µÑÇÍ ҧâ»Ãá¡ÃÁ

Robo-11

Motor-0

·íÒä´ â´Â¡ÒÃÊѧè ãË ÁÍàµÍà ªÍ § 1 ËÁع¶ÍÂËÅѧáÅÐÁÍàµÍà ªÍ § 0 ËÁع仢 ҧ˹ Ò áŠǵÒÁ´ Ç¡ÒÃ˹ ǧàÇÅÒàÅ硹 ÍÂà¾×Íè ãË Ë¹Ø Â¹µ à¡Ô´¡ÒÃËÁع µÑÇà¾×Íè »ÃѺ·Ôȷҧ价ҧ« Ò «Ö§è µ ͧ¾Ô¨ÒóҤÇÒÁàËÁÒÐÊÁ㹡ÒÃ˹ ǧ àÇÅÒ´ ÇÂઠ¹à´ÕÂǡѺ¡ÒÃàÅÕÂé Ç« ÒÂ

motor(0,pow); // Drive left motor forward motor(1,-pow); // Drive right motor backward sleep(spin_time); // Delay for right spinning

}

7.5.5 â»Ãá¡ÃÁ·´Åͧ à¢Õ¹â»Ãá¡ÃÁ·Õè P7-1 ¨Ò¡¹Ñ¹é ´Òǹ âËŴŧã¹Ëع ¹µ AX-11 » ´ÊÇÔµª »Å´ÊÒ´Òǹ âËÅ´ áŠǹíÒËع ¹µ ä»ÇÒ§º¹¾×¹é à» ´ÊÇÔµª ¨Ò Âä¿ ¡´ÊÇÔµª START º¹ºÍà ´ AX-11 áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C #define pow 50 void main(void) { ao(); while(!stop_button()) { printf(“!push start

l

265

/*Define power for drive motor 0,1*/

// Off all motor for initial // Infinite loop to Run\n”); // Show message for drive Robot // Wait until push start button // Check STOP button pressed ?

while(!start_button()); while(!stop_button()) { printf(“ Forward!\n”); run_fd(); sleep(3.0); ao();

// // // //

Show message to run forward Forward Delay for drive forward All off motor

printf(“ Turn Left!\n”); turn_left(1.0); ao();

// Turn left 1 sec // All off motor

printf(“ Backward!\n”); run_bk(); sleep(2.0);

// Backward // Delay for drive backward

printf(“ Turn Right!\n”); turn_right(1.0); // Turn left 1 sec ao(); // All off motor } printf(“ ao(); beep();

Stop..\n”);

// Show message off all motor // Off all motor for end program // Beep for ending program

} } void turn_right(float spin_time) { motor(0,pow); // Motor0 backward 50% of maximum power motor(1,-pow); // Motor1 forward 50% of maximum power sleep(spin_time); // Set delay parameter in spin_time } void turn_left(float spin_time) { motor(0,-pow); // Motor0 forward for pow define value motor(1,pow); // Motor1 backward for pow define value sleep(spin_time); // Set delay parameter in spin_time }

â»Ãá¡ÃÁ·Õè P7-1 â»Ãá¡ÃÁ¢Ñºà¤Å×Íè ¹¾×¹é °Ò¹ÊíÒËÃѺËع ¹µ Robo-11 (ÁÕµÍ )


266

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

void run_fd(void) { motor(0,pow); motor(1,pow); } void run_bk(void) { motor(0,-pow); motor(1,-pow); }

// Motor0 forward for pow define value // Motor1 forward for pow define value

// Motor0 backward for pow define value // Motor1 backward for pow define value

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ã¹â»Ãá¡ÃÁ¹Õàé » ¹¡ÒÃÃÇÁàÍÒâ»Ãá¡ÃÁ Í¤Ǻ¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ 4 ẺÁÒ·íҧҹà ÇÁ ¡Ñ¹ â´Â¨ÐàÃÔÁè ·íÒ§Ò¹ä´ ¡µç Í àÁ×Íè ÁÕ¡Òá´ÊÇÔµª START áÅÐËÂØ´·íÒ§Ò¹àÁ×Íè ÁÕ¡Òá´ÊÇÔµª STOP ËÅѧ¨Ò¡ ·ÕËè ¹Ø Â¹µ ·Òí ¡ÒÃà¤Å×Íè ¹·Õáè ºº·Õè 4 ä»áÅ Ç µÑÇá»Ã pow ·Õ»è ÃСÒÈäÇ µÍ¹µ ¹¢Í§â»Ãá¡ÃÁ㪠ÊÒí ËÃѺ¡íÒ˹´ ÃдѺ¾Åѧ§Ò¹·Õè㪠¢ÑºÁÍàµÍà ·Ñé§ÊͧµÑǢͧËØ ¹Â¹µ Ê Ç¹¤ Ò˹ ǧàÇÅҢͧ¡ÒÃà¤Å×è͹·Õèáµ ÅÐẺ¹Ñé¹ (spin_time) ¨Ò¡áµ¡µ Ò§¡Ñ¹ÍÍ¡ä» â´Â¤ Ò·Õäè ´ ã¹â»Ãá¡ÃÁ¹Ñ¹é ä´ ÁÒ¨Ò¡¡Ò÷´Åͧ ´Ñ§¹Ñ¹é ã¹Ëع ¹µ áµ ÅеÑÇÍÒ¨ÁÕ¤Ò Ë¹ ǧàÇÅÒ·Õáè µ¡µ Ò§¡Ñ¹ä´ ¼Ù¾ ² Ñ ¹Òâ»Ãá¡ÃÁ¨Ö§µ ͧ»ÃѺᵠ§ãË àËÁÒÐÊÁ ·Ñ§é ¹ÕÃé дѺä¿àÅÕÂé § ¢Í§Ëع ¹µ ¡Áç ¼Õ Åµ Í¡Ò÷íÒ§Ò¹´ Ç ¨Ö§ÁÕ¤ÇÒÁà» ¹ä»ä´ ·¤Õè Ò pow áÅÐ spin_time ÍÒ¨µ ͧà»ÅÕÂè ¹á»Å§ µÒÁÃдѺä¿àÅÕÂé §¢Í§Ëع ¹µ ·Õ¤è Òí Êѧè printf 㹺ҧºÃ÷Ѵ¨ÐàËç¹Ç ÒÁÕ¡ÒÃàÇ ¹ÇÃäÁÒ¡¡Ç Ò 1 µÑÇÍÑ¡Éà ·Ñ§é ¹Õàé ¾×Íè ¡íÒ˹´µíÒá˹ § ¢Í§¡ÒÃáÊ´§¼Å·Õâè Á´ÙÅ LCD ãË ´àÙ » ¹ÃÐàºÕº

â»Ãá¡ÃÁ·Õè P7-1 â»Ãá¡ÃÁ¢Ñºà¤Å×Íè ¹¾×¹é °Ò¹ÊíÒËÃѺËع ¹µ Robo-11 (¨º)

¼Å¡Ò÷íÒ§Ò¹ ËÅѧ¨Ò¡¡´ÊÇÔµª START Ëع ¹µ Robo-11 ¨Ðà¤Å×Íè ¹·Õè 4 ÅѡɳРǹ·íҧҹ仵ÅÍ´¨¹¡Ç Ò¨ÐÁÕ¡Òà ¡´ÊÇÔµª STOP ËÅѧ¨Ò¡¨º¡ÒÃà¤Å×Íè ¹·Õáè ºº·Õè 4 â´ÂÁÕÅÒí ´Ñº´Ñ§¹Õé 1. à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Òà» ¹àÇÅÒ 3 ÇÔ¹Ò·Õ áÅ ÇËÂØ´ ¾Ã ÍÁ¡Ñ¹·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Forward! 2. àÅÕÂé Ç« ÒÂà» ¹àÇÅÒ 1 ÇÔ¹Ò·Õ ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Turn Left! 3. ¶ÍÂËÅѧàÇÅÒ 2 ÇÔ¹Ò·Õ ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Backward! 4. ËÁعµÑÇàÅÕÂé Ç¢ÇÒàÇÅÒ 1 ÇÔ¹Ò·Õ ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Turn Right! ¶ ÒËÒ¡ÁÕ¡Òá´ÊÇÔµª STOP ËÅѧ¨Ò¡à¤Å×Íè ¹·Õáè ºº·Õè 4 Ëع ¹µ ¨ÐËÂØ´à¤Å×Íè ¹·Õè ¾Ã ÍÁ¡Ñ¹¹Ñ¹é ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Stop.. ·Õµè Òí á˹ §¡Ö§è ¡ÅÒ§¨ÍáÊ´§¼Å


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

267

7.6 ¢Ñºà¤Å×è͹ËØ ¹Â¹µ áÅФǺ¤ØÁᢹ¡Å ÅíҴѺµ Í仢ͧ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-11 ¤×Í ¡ÒäǺ¤ØÁᢹ¡Å â´Â ¨ÐÁÕ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ 仾à ÍÁ¡Ñº¡ÒäǺ¤ØÁà¾×Íè ¡áÅÐÇҧᢹ¡Å

7.6.1 ¿ §¡ ªÑ蹢ѺÁÍàµÍà à¾×èÍ¡ᢹËØ ¹Â¹µ ¢Öé¹ void arm_up(float time) { motor(2,70); // Drive motor M-2 channel with 70% of // maximum power to lift the arm sleep(time); // Delay by time parameter off(2); // Stop motor on M-2 channel }

¿ §¡ ª¹Ñè ¹Õàé » ¹¡ÒáíÒ˹´ãË ª´Ø ࿠ͧ¢ÑºÁÍàµÍà ¢Í§Ê ǹᢹ¡Å·íÒ¡ÒáᢹËع ¹µ ¢¹Öé â´Â¡íÒ˹´ãË ãª ¾Åѧ§Ò¹ 70% ¢Í§¾Åѧ§Ò¹ÊÙ§ÊØ´ ÊíÒËÃѺàÇÅÒ·Õãè ª 㹡Òá¨Ð¢Ö¹é ÍÂÙ¡ ºÑ ¤ Ò time «Ö§è µ ͧ¡íÒ˹´à» ¹µÑÇàÅ¢·È¹ÔÂÁ ¶ Ò·´Êͺ¿ §¡ ª¹Ñè ¹Õáé Å Ç ä´ ¼ÅµÃ§¢ ÒÁ¤×Í á·¹·Õ¨è Сᢹ¢Ö¹é ¡ÅѺ¡ŧ ãË ·Òí ¡ÒÃÊÅѺ¡Òõ ÍÊÒ·բè ÇÑé µ ÍÁÍàµÍà M-2 (ËÒ¡à´ÔÁµ Í´ Ò¹ã¹ãË ÊÅѺ໠¹´ Ò¹¹Í¡ ËÃ×Ͷ Òà´ÔÁµ Í´ Ò¹¹Í¡ãË ÊÅѺÁÒµ Í´ Ò¹ã¹)

7.6.2 ¿ §¡ ª¹Ñè ¢ÑºÁÍàµÍà à¾×Íè ÇҧᢹËع ¹µ ŧ void arm_down(float time) { motor(2,-70); // Drive motor M-2 channel with 70% of maximum // power to down the arm sleep(time); // Delay by time parameter off(2); // Stop motor on M-2 channel }

¿ §¡ ª¹Ñè ¹Õàé » ¹¡ÒáíÒ˹´ãË ª´Ø ࿠ͧ¢ÑºÁÍàµÍà ¢Í§Ê ǹᢹ¡Å·íÒ¡ÒÃÇҧᢹËع ¹µ ŧ â´Â¡íÒ˹´ãË ãª ¾Åѧ§Ò¹ 70% ¢Í§¾Åѧ§Ò¹ÊÙ§ÊØ´ ÊíÒËÃѺàÇÅÒ·Õè㪠㹡Òá¨Ð¢Öé¹ÍÂÙ ¡Ñº¤ Ò time «Ö觵 ͧ¡íÒ˹´à» ¹µÑÇàÅ¢ ·È¹ÔÂÁ ¶ Ò·´Êͺ¿ §¡ ª¹Ñè ¹Õáé Å Ç ä´ ¼ÅµÃ§¢ ÒÁ¤×Í á·¹·Õ¨è ÐÇҧᢹŧ¡ÅѺ¡¢Ö¹é ãË ·Òí ¡ÒÃÊÅѺ¡Òõ ÍÊÒ·բè ÇÑé µ ÍÁÍàµÍà M-2 (ËÒ¡à´ÔÁµ Í´ Ò¹ã¹ãË ÊÅѺ໠¹´ Ò¹¹Í¡ ËÃ×Ͷ Òà´ÔÁµ Í´ Ò¹¹Í¡ãË ÊÅѺÁÒµ Í´ Ò¹ã¹)

7.6.3 â»Ãá¡ÃÁ·´Åͧ #1 à¢Õ¹â»Ãá¡ÃÁ·Õè P7-2 ¨Ò¡¹Ñ¹é ´Òǹ âËŴŧã¹Ëع ¹µ AX-11 â´ÂÂѧäÁ µÍ §»Å´ÊÒ´Òǹ âËÅ´ ¡´»ØÁ Run main Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§ªØ´á¢¹¡Å


268

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

void main(void) { motor(2,70); sleep(2.9); motor(2,-70); sleep(2.9); off(2); }

// // // // //

Drive motor M-2 channel with 70% of maximum power Delay by time parameter Drive motor M-2 channel with 70% of maximum power Delay by time parameter Stop motor on M-2 channel

â»Ãá¡ÃÁ·Õè P7-2 â»Ãá¡ÃÁ·´Êͺ¡ÒáᢹËع ¹µ ¢¹Öé áÅÐŧ¢Í§Ëع ¹µ Robo-11

¼Å¡Ò÷íÒ§Ò¹ Ëع ¹µ Robo-11 ¨Ð¡ᢹ¢Ö¹é â´Â㪠àÇÅÒ 2.9 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é ¨ÐàÃÔÁè ÇҧᢹËع ¹µ ŧ â´Â㪠àÇÅÒ 2.9 ÇÔ¹Ò·Õ ËÒ¡µ ͧ¡ÒÃãË ·Òí §Ò¹ãËÁ ·íÒä´ â´Â¡´»ØÁ Run main ÍÕ¡¤Ãѧé

7.6.4 â»Ãá¡ÃÁ·´Åͧ #2 à¢Õ¹â»Ãá¡ÃÁ·Õè P7-3 ¨Ò¡¹Ñ¹é ´Òǹ âËŴŧã¹Ëع ¹µ AX-11 » ´ÊÇÔµª »Å´ÊÒ´Òǹ âËÅ´ áŠǹíÒËع ¹µ ä»ÇÒ§º¹¾×¹é à» ´ÊÇÔµª ¨Ò Âä¿ ¡´ÊÇÔµª START º¹ºÍà ´ AX-11 áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ #define pow 50 void main(void) { ao(); while(!stop_button()) { printf(“ Forward!\n”); run_fd(); sleep(3.0); ao(); printf(“ Arm up!\n”); arm_up(2.9);

/*Define power for drive motor 0,1*/

// Off all motor for initial // Check condition push stop button

// Forward // Delay for driving forward // All motor off

// Lift arm up 2.9 seconds

printf(“ Backward!\n”); run_bk(); // Backward sleep(2.0); // Delay for driving backward printf(“ Turn Left!\n”); turn_left(1.0); // Turn left 1 second ao(); // All motor off

â»Ãá¡ÃÁ·Õè P7-3 â»Ãá¡ÃÁ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-11 à¤Å×Íè ¹·Õè áÅСᢹ¢Ö¹é ŧµÒÁ¢ Í¡íÒ˹´ (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

269

printf(“ Arm down!\n”); arm_down(2.9); // Place arm down 2.9 seconds } printf(“Stop..\n”); ao(); beep();

// Show message stop process // Off all motor for end program // Beep for ending program

} void turn_left(float spin_time) { motor(0,pow); // motor(1,-pow); // sleep(spin_time); // } void run_fd(void) { motor(0,pow); // motor(1,pow); // } void run_bk(void) { motor(0,-pow); // motor(1,-pow); // } void arm_up(float time) { motor(2,70); // sleep(time); // off(2); // } void arm_down(float time) { motor(2,-70); // sleep(time); // off(2); // }

Motor0 forward with pow define value Motor1 backward with pow define value Delay by parameter spin_time

Motor0 forward with pow define value Motor1 forward with pow define value

Motor0 backward with pow define value Motor1 backward with pow define value

Motor2 forward at 70% for lifting arm Delay by parameter time Off motor2

Motor2 backward at 70% for placing arm Delay by parameter time Off motor2

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ

ã¹â»Ãá¡ÃÁ¹Õàé » ¹¡ÒÃÃÇÁàÍÒâ»Ãá¡ÃÁ¤Çº¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ 4 Ẻ¨Ò¡â»Ãá¡ÃÁ·Õè P71 ÃÇÁ¡Ñºâ»Ãá¡ÃÁ·Õè P7-2 à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-11 à¤Å×Íè ¹·Õµè ÒÁÃٻẺ·Õ¡è Òí ˹´¾Ã ÍÁ¡Ñ¹¹Ñ¹é ¡çÁÕ ¡ÒááÅÐÇҧᢹËع ¹µ à» ¹¨Ñ§ËÇд Ç áÅÐã¹·Ø¡¤ÃÑ§é ·ÕËè ¹Ø Â¹µ à»ÅÕÂè ¹¡Ò÷íÒ§Ò¹ ¨ÐáÊ´§¢ ͤÇÒÁ¢Í§ ¡Ò÷íÒ§Ò¹¹Ñ¹é æ ·Õâè Á´ÙÅ LCD ´ Ç â´ÂËع ¹µ Robo-11 ¨ÐàÃÔÁè ·íÒ§Ò¹ä´ ¡µç Í àÁ×Íè ÁÕ¡Òá´ÊÇÔµª START áÅÐËÂØ´·íÒ§Ò¹àÁ×Íè ÁÕ¡Òá´ÊÇÔµª STOP ËÅѧ¨Ò¡·ÕËè ¹Ø Â¹µ ·Òí ¡ÒÃà¤Å×Íè ¹·Õáè ºº·Õè 4 ä»áÅ Ç (äÁ ÃÇÁ¡Òà ¡áÅÐÇҧᢹ)

â»Ãá¡ÃÁ·Õè P7-3 â»Ãá¡ÃÁ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-11 à¤Å×Íè ¹·Õè áÅСᢹ¢Ö¹é ŧµÒÁ¢ Í¡íÒ˹´ (¨º)


270

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¼Å¡Ò÷íÒ§Ò¹ ËÅѧ¨Ò¡àÃÔÁè ¡´ÊÇÔµª START ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õ¨é Ðǹ·íÒ§Ò¹ 5 ¢Ñ¹é µÍ¹ ¨¹¡Ç Ò¨ÐÁÕ¡Òá´ÊÇÔµª STOP ËÅѧ¨Ò¡àÊÃç¨¢Ñ¹é µÍ¹·Õè 5 â´ÂÁÕÅÒí ´Ñº´Ñ§¹Õé 1. âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Forward! Ëع ¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Òà» ¹àÇÅÒ 3 ÇÔ¹Ò·Õ áÅ ÇËÂØ´ 2. ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Arm up! ᢹ¢Í§Ëع ¹µ ¨Ð¶Ù¡Â¡¢Ö¹é à» ¹àÇÅÒ 2 ÇÔ¹Ò·Õ 3. ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Backward! Ëع ¹µ ¶ÍÂËÅѧ໠¹àÇÅÒ 2 ÇÔ¹Ò·Õ 4. ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Turn Left! Ëع ¹µ ËÁعµÑÇàÅÕÂé Ç« ÒÂà» ¹àÇÅÒ 1 ÇÔ¹Ò·Õ 5. ·Õâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Arm down! ᢹ¢Í§Ëع ¹µ ¶¡Ù ¤Çº¤ØÁãË Çҧŧ໠¹àÇÅÒ 2 ÇÔ¹Ò·Õ ËÅѧ¨Ò¡¢Ñ¹é µÍ¹·Õè 5 ËÒ¡äÁ Á¡Õ Òá´ÊÇÔµª STOP Ëع ¹µ ¨Ð¡ÅѺ价íÒ§Ò¹ã¹¢Ñ¹é µÍ¹·Õè 1 ãËÁ áµ ¶Ò ËÒ¡ÁÕ¡Òá´ÊÇÔµª STOP ¢Ö¹é Ëع ¹µ ¨ÐËÂØ´¡Ò÷íÒ§Ò¹ áÅзÕâè Á´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Stop..


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

271

+V QRD1114

OUT GND

10k

510

â¿âµ ·ÃÒ¹«ÔÊàµÍà ÀÒ¤ÃѺ

Reflect-3 (AI-17)

Reflect-2 (AI-19) Motor-1

Robo-11 Motor-0

ÅíҴѺµ Í仢ͧ¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×èͤǺ¤ØÁËØ ¹Â¹µ Robo-11 ¤×Í ¡ÒÃà¤Å×è͹·ÕèµÒÁàÊ ¹ÊÕ´íÒ à¹×èͧ¨Ò¡ Robo-11 ÁÕἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ ÍÔ¹¿ÃÒàô 3 µÑǵԴµÑ§é ÍÂÙã µ Ë¹Ø Â¹µ ¨Ö§ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õè µÒÁàÊ ¹ÊÕ´Òí ËÃ×Í¢ÒÇä´ â´Âἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô (ã¹·Õ¹è ¢Õé ÍàÃÕ¡ ãËÁ ÇÒ á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹) ·Ñ§é ÊÒÁµÑǨж١µ ÍࢠҡѺÍÔ¹¾ØµÊÑ­­Ò³ÍйÒÅÍ¡ ¢Í§ºÍà ´ AX-11 ´Ñ§¹Õé ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ (ËÁÒÂàÅ¢ 1) µ ͡ѺÍÔ¹¾Øµ AI-21 ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ (ËÁÒÂàÅ¢ 3) µ ͡ѺÍÔ¹¾Øµ AI-17 ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹µÑÇ¡ÅÒ§ (ËÁÒÂàÅ¢ 2) µ ͡ѺÍÔ¹¾Øµ AI-19

Reflect-1 (AI-21)

7.7 ¤Çº¤ØÁËØ ¹Â¹µ à¤Å×è͹·ÕèµÒÁàÊ ¹

LED ÍÔ¹¿ÃÒàô ÀÒ¤Ê §

(¡) ǧ¨Ã¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ (¢) ˹ Ò µÒ¢Í§µÑ Ç µÃǨ¨Ñ º ·Õè ÁÕ À Ò¤Ê § áÅÐÃÑ º áʧ ÍÔ¹¿ÃÒàô ÍÔ¹¿ÃÒàôÍÂÙã ¹µÑÇËÃ×Í ÃÕà¿Åç¡àµÍà (reflector) µÑǵÃǨ¨ÑºáʧÊз ͹ àºÍà QRD1114

ÃÙ ¨Ñ¡¡ÑºµÑǵÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô

㪠LED ÍÔ¹¿ÃÒàÃ´Ê §áʧÍÔ¹¿ÃÒàôÍ͡仡Ãзº ¡ÑºÇѵ¶ØáÅÐÃѺáʧ·ÕÊè з ͹¡ÅѺÁÒ´ ÇÂâ¿âµ ·ÃÒ¹«ÔÊàµÍà ÊÒÂÊÑ­­Ò³ àÁ×èÍâ¿âµ ·ÃÒ¹«ÔÊàµÍÃ ä´ ÃѺáʧÊз ͹µÍº¡ÅѺÁҨРÂÍÁãË ¡ÃÐáÊä¿¿ ÒäËż Ò¹µÑÇÁѹ ÂÔ§è ä´ ÃºÑ áʧÁÒ¡à· Òã´ ¡ç¨ÐÂÔ§è ¹íÒ¡ÃÐáÊÁÒ¡¢Ö¹é ෠ҹѹé â´Â¢Ö¹é ÍÂÙ¡ ºÑ ¤ÇÒÁࢠÁ¢Í§ áʧ·Õäè ´ ÃºÑ «Ö§è á»Ã¼Ñ¹µÒÁÃÐÂТͧ¡ÒÃÊз ͹ ÊíÒËÃѺµÑÇ µÃǨ¨ÑºáʧÊз ͹àºÍà QRD1114 ÊÒÁÒö㪠¡ºÑ ÃÐÂÐ (¤) ˹ ҵҢͧἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ Ë Ò§ 0.1 - 1.5 ૹµÔàÁµÃ ÍÔ¹¿ÃÒàô


272

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.7.1 à§×Íè ¹ä¢¢Í§¡ÒõÃǨÊͺἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ¼Ù ¾Ñ²¹Ò¨Ðµ ͧ·´ÊÍºÍ Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹¨¡ÒàÊ ¹ÊÕ´íÒáÅо×é¹Ê¹ÒÁ ¨Ò¡¹Ñ¹é ¤íҹdzËÒ¤ Ò·ÕÊè ÒÁÒöᡤÇÒÁᵡµ ҧ㹡ÒÃÊз ͹·Õàè Ê ¹ÊÕ´Òí áÅкÃÔàdzʹÒÁ·Õàè » ¹ÊÕ¢ÒÇ â´Âà¢Õ¹ â»Ãá¡ÃÁÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ä´ ´§Ñ ¹Õé void main() { while(1) // Endless loop { printf(“L=%d M=%d R=%d\n”,analog(21),analog(19),analog(17)); // Reading all sensors sleep(0.1); // Display delay } }

¨Ò¡¡Ò÷´ÅÍ§ä´ ¼ÅÅѾ¸ ¤Í× ¤ Ңͧ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹¢ ÍÁÙÅ´Ô¨ÔµÍŨҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹àÁ×è;ºàÊ ¹ÊÕ´íÒÍÂÙ ã¹ ª ǧ 12 ¶Ö§ 23 ¤ Ңͧ¡ÒÃá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍŨҡἧǧ¨ÃµÃǨ¨ÑºàÊ ¹àÁ×Íè ¾º¾×¹é ʹÒÁÊÕ¢ÒÇ ÍÂÙã ¹ª ǧ 47 ¶Ö§ 62 ´Ñ§¹Ñ¹é ¨Ö§àÅ×Í¡¤ ÒÍ Ò§ÍÔ§¢Í§¡ÒõÃǨ¨ÑºàÊ ¹ÊÕ´Òí à» ¹ 30 ¡Å ÒǤ×Í ¶ ÒÍ Ò¹¤ Ҩҡἧ¨ÃµÃǨ¨ÑºàÊ ¹ µÑÇã´áŠǾºÇ Ò ¹ ÍÂ¡Ç Ò 30 ãË ¶Í× Ç Òἧǧ¨ÃµÃǨ¨ÑºàÊ ¹µÑǹѹé ÍÂÙº ÃÔàdzàÊ ¹ÊÕ´Òí áµ ¶Ò ËÒ¡¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡ ἧ¨ÃµÃǨ¨ÑºàÊ ¹µÑÇã´ÁÒ¡¡Ç Ò 30 áÊ´§Ç Ò á¼§¨ÃµÃǨ¨ÑºàÊ ¹µÑǹѹé ÍÂÙº ÃÔàdz¾×¹é ÊÕ¢ÒÇ

7.7.2 à˵ءÒó ·àÕè ¡Ô´¢Ö¹é 㹡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ ¡Ã³Õ·Õè 1 Ëع ¹µ à¤Å×Íè ¹·ÕÍè ÂÙº ¹àÊ ¹

¡ÒäǺ¤ØÁËØ ¹Â¹µ àÁ×è;ºà˵ءÒó ¹Õé¤×Í ¤Çº¤ØÁãË ËØ ¹Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Òµ Íä» áÅ Ç˹ ǧàÇÅÒ㹡ÒÃà¤Å×Íè ¹·Õªè Ç §Êѹé æ

Reflect-3 (AI-17)

µÃǨ¨Ñº¾º¾×é¹ÊÕ¢ÒÇ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾º¾×é¹ÊÕ¢ÒÇ Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-21 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-17 ä´ ÁÒ¡¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ÁÒ¡¡Ç Ò 30

Reflect-2 (AI-19)

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹¢ÇÒ

Robo-11 Motor-1

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ µÃ§¡ÅÒ§

Motor-0

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹« ÒÂ

Reflect-1 (AI-21)

¼Å¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹áµ ÅеÑÇà» ¹´Ñ§¹Õé


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¡Ã³Õ·Õè 2 Ëع ¹µ à¤Å×Íè ¹·Õ¾è ¹ ¨Ò¡àÊ ¹ä»·Ò§¢ÇÒ

r-0

µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾º¾×é¹ÊÕ¢ÒÇ Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-17 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ÁÒ¡¡Ç Ò 30

Refl ec (AI- t-2 19)

Refl ec (AI- t-3 17)

Rob

o-1 1

r-1

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹¢ÇÒ

Moto

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ µÃ§¡ÅÒ§

Moto

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹« ÒÂ

Refl ec (AI- t-1 21)

¼Å¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹áµ ÅеÑÇà» ¹´Ñ§¹Õé

¡ÒäǺ¤ØÁËع ¹µ àÁ×Íè ¾ºà˵ءÒó ¹¤Õé Í× ¤Çº¤ØÁãË Ë¹Ø Â¹µ ¤Í Âæ àÅÕÂé ÇÁÒ·Ò§« Ò áÅÐ˹ ǧàÇÅÒà» ¹ª ǧàÇÅÒÊѹé æ

¡Ã³Õ·Õè 3 Ëع ¹µ à¤Å×Íè ¹·Õ¾è ¹ ¨Ò¡àÊ ¹ä»·Ò§« Ò ¼Å¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹áµ ÅеÑÇà» ¹´Ñ§¹Õé

Rob

1 o-1

r-1

r-0

Moto

Moto

µÃǨ¨Ñº¾º¾×é¹ÊÕ¢ÒÇ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-21 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 ä´ ÁÒ¡¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30

1 ectRefl 17) (AI-

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹¢ÇÒ

2 ectRefl 19) (AI-

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ µÃ§¡ÅÒ§

3 ectRefl 1) 2 (AI-

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹« ÒÂ

¡ÒäǺ¤ØÁËع ¹µ àÁ×Íè ¾ºà˵ءÒó ¹¤Õé Í× ¤Çº¤ØÁãË Ë¹Ø Â¹µ ¤Í Âæ àÅÕÂé ÇÁÒ·Ò§¢ÇÒ áÅÐ˹ ǧàÇÅÒà» ¹ª ǧàÇÅÒÊѹé æ

¡Ã³Õ·Õè 4 Ëع ¹µ ¾º·Ò§á¡

µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ µÃǨ¨Ñº¾ºàÊ ¹ÊÕ´íÒ Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 Í Ò¹¤ Ò¨Ò¡ÍÔ¹¾Øµ AI-19 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30 ä´ ¹ ÍÂ¡Ç Ò 30

¡ÒäǺ¤ØÁËØ ¹Â¹µ àÁ×è;ºà˵ءÒó ¹Õé ÊÒÁÒö·íÒä´ ËÅÒ·ҧ àÅ×Í¡ äÁ ÇÒ ¨Ðà» ¹¡ÒäǺ¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò, àÅÕÂé Ç« Ò ËÃ×Í¢ÇÒ

Reflect-3 (AI-17)

Robo-11 Motor-1

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹¢ÇÒ

Reflect-2 (AI-19)

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ µÃ§¡ÅÒ§

Motor-0

ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹ ´ Ò¹« ÒÂ

Reflect-1 (AI-21)

¼Å¢Í§á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹áµ ÅеÑÇà» ¹´Ñ§¹Õé

l

273


274

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.7.3 à¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ à¢Õ¹â»Ãá¡ÃÁ·Õè P7-4 ¨Ò¡¹Ñ¹é ´Òǹ âËŴŧã¹Ëع ¹µ AX-11 » ´ÊÇÔµª »Å´ÊÒ´Òǹ âËÅ´ áŠǹíÒËع ¹µ ä»ÇÒ§º¹¾×¹é ʹÒÁ·Õàè Ê ¹ÊÕ´Òí à» ´ÊÇÔµª ¨Ò Âä¿ ¡´ÊÇÔµª START º¹ºÍà ´ AX-11 áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹¢Í§ Ëع ¹µ /*—————————————————————————————————————————————————————————————————*/ // Progra : Black line-tracking robot // Descriptio : Robo-11 move on the black line following // Filename : p0704.ic // C compiler : Interactive C 4.21GA /*—————————————————————————————————————————————————————————————————*/ #define pow 50 #define ref 30

// Define motor’s power // Define reference value for tracking line decision

int left=0,right=0,mid=0; void main(void) {

// For keeping input analog values

ao(); while(!stop_button()) // Wait for STOP button pressed in-process { printf(“!push start to Run\n”); // Show message for driving robot while(!start_button()); // Wait for START button pressed to run printf(“ Track Line\n”); // Show message for working while(!stop_button()) // Wait for STOP button pressed in-process { left = analog(21); // Read the left line-tracking sensor mid = analog(19); // Read the middle line-tracking sensor right = analog(17); // Read the right line-tracking sensor if((left>ref)&&(mid<ref)&&(right>ref)) // Check-on line { run_fd(); // Go straight sleep(0.01); // Delay 0.01 second } else if((left<ref)&&(mid>ref)&&(right>ref)) // Check over right { turn_left(0.1); // Turn left for backing to line } else if((left>ref)&&(mid>ref)&&(right<ref)) // Check over left

â»Ãá¡ÃÁ·Õè P7-4 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

275

{ turn_right(0.1); // Turn right for backing to line } else if((left<ref)&&(mid<ref)&&(right<ref)) //Check cross line { turn_left(0.1); // Turn left } else if((left<ref)&&(mid>ref)&&(right<ref)) // Check between cross line { turn_left(0.1); // Turn left for backing to line } else // If out of condition { run_fd(); // Go straight sleep(0.01); // Go straight } } printf(“Stop..\n”); ao(); beep();

// Show message of stop operation // Off all motor for ending program // Sound beep signal for ending program

} } void turn_left(float spin_time) { motor(0,pow); // motor(1,-pow); // value sleep(spin_time); // } void turn_right(float spin_time) { motor(0,-pow); // value motor(1,pow); // sleep(spin_time); // } void run_fd(void) { motor(0,pow); // motor(1,pow); // }

Motor-0 forward with pow define value Motor-1 backward with pow define Delayed by parameter spin_time

Motor-0 backward with pow define Motor-1 forward with pow define value Delayed by parameter spin_time

Motor-0 forward with pow define value Motor-1 forward with pow define value

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ

¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁàÃÔÁè µ ¹¢Ö¹é àÁ×Íè ÁÕ¡Òá´ÊÇÔµª START â´ÂËع ¹µ ¨Ðà¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ·Õè ¡íÒ˹´µÅÍ´àÇÅÒâ»Ãá¡ÃÁ¨ÐÇ¹Í Ò¹¤ ҢͧÍÔ¹¾ØµÊÑ­­Ò³ÍйÒÅÍ¡·Õªè Í § AI-21, AI-19 áÅÐAI-17 «Ö§è àÃÕ§ ÅíҴѺ¡ÒÃàª×Íè Áµ ͡Ѻἧǧ¨ÃµÃǨ¨ÑºàÊ ¹à» ¹ « ÒÂ,¡ÅÒ§ áÅТÇÒµÒÁÅíҴѺ «Ö§è ¤ ҢͧÍÔ¹¾ØµÍйÒÅÍ¡ ·ÕÍè Ò ¹áµ ÅЪ ͧ¨Ðà¡çºäÇ ã¹µÑÇá»Ã´Ñ§¹Õé

â»Ãá¡ÃÁ·Õè P7-4 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí (ÁÕµÍ )


276

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

¤ ҢͧÍÔ¹¾ØµÍйÒÅÍ¡·Õªè Í § AI-21 à¡çºÅ§ã¹µÑÇá»Ã left ¤ ҢͧÍÔ¹¾ØµÍйÒÅÍ¡·Õªè Í § AI-19 à¡çºÅ§ã¹µÑÇá»Ã mid ¤ ҢͧÍÔ¹¾ØµÍйÒÅÍ¡·Õªè Í § AI-17 à¡çºÅ§ã¹µÑÇá»Ã right ËÅѧ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨Ð¹íÒ¤ ҷѧé ÊÒÁä»à»ÃÕºà·Õº¡Ñº¤ ÒÍ Ò§ÍÔ§·Õ¡è Òí ˹´äÇ ·Õè ref «Ö§è ÇÑ´ä´ ¨Ò¡Ê¹ÒÁ áÅÐÁÕ¤Ò à» ¹ 30 (ÍҨ໠¹¤ ÒÍ×¹è ¼Ù¾ ² Ñ ¹Òµ ͧ·íÒ¡ÒõÃǨÊͺàͧ ËÒ¡ÊÀҾʹÒÁà»ÅÕÂè ¹ä») ¡ÒÃà»ÃÕº à·Õº¤ ÒáÅмšÒ÷íÒ§Ò¹ÁÕ´§Ñ ¹Õé 1. ¶ Ò left > ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾ºÊ¹ÒÁÊÕ¢ÒÇ 2. ¶ Ò mid > ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹µÑÇ¡ÅÒ§¾ºÊ¹ÒÁÊÕ¢ÒÇ 3. ¶ Ò right > ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ¾ºÊ¹ÒÁÊÕ¢ÒÇ 4.¶ Ò left < ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹« Ò¾ºàÊ ¹ÊÕ´Òí 5. ¶ Ò mid < ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹µÑÇ¡ÅÒ§¾ºàÊ ¹ÊÕ´Òí 6. ¶ Ò right < ref ËÁÒ¤ÇÒÁÇ Ò á¼§Ç§¨ÃµÃǨ¨ÑºàÊ ¹´ Ò¹¢ÇÒ¾ºàÊ ¹ÊÕ´Òí ã¹â»Ãá¡ÃÁä´ ºÃèØâ»Ãá¡ÃÁ Í¢ͧ¡ÒõÃǨÊͺÊÀÒÇÐà§×Íè ¹ä¢¡Ò÷íÒ§Ò¹µ Ò§æ ¢Í§Ëع ¹µ àÁ×Íè à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ áÅмšÒ÷íÒ§Ò¹àÁ×Íè à§×Íè ¹ä¢·Õµè ÃǨÊͺ¹Ñ¹é à» ¹¨ÃÔ§ »ÃСͺ´ Ç 6 ¡Ã³Õ´§Ñ ¹Õé ¡Ã³Õ·Õè 1 µÃǨÊͺ¾ºÇ Ò Ëع ¹µ à¤Å×Íè ¹·ÕÍè ÂÙº ¹àÊ ¹ÊÕ´Òí ¨Ö§ãË à¤Å×Íè ¹·Õµè çµ Í仢 ҧ˹ Ò ÃÒÂÅÐàÍÕ´ ¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé if((left>ref)&&(mid<ref)&&(right>ref)) { run_fd(); // Go straight sleep(0.01); // Delay 0.01 second }

¡Ã³Õ·Õè 2 µÃǨÊͺ¾ºÇ Ò Ëع ¹µ à¤Å×Íè ¹·ÕÍè Í¡¨Ò¡àÊ ¹ÊÕ´Òí ·Ò§ä»¢ÇÒ ¨Ö§µ ͧËÁعµÑÇàÅÕÂé Ç« Ò à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ ¡ÅѺࢠÒÊÙà Ê ¹·Ò§ ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé else if((left<ref)&&(mid>ref)&&(right>ref)) { turn_left(0.1); // Turn left for backing to line }

¡Ã³Õ·Õè 3 µÃǨÊͺ¾ºÇ Ò Ëع ¹µ à¤Å×Íè ¹·ÕÍè Í¡¨Ò¡àÊ ¹ÊÕ´Òí ·Ò§ä»« Ò ¨Ö§µ ͧËÁعµÑÇàÅÕÂé Ç¢ÇÒ à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ ¡ÅѺࢠÒÊÙà Ê ¹·Ò§ ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé else if((left>ref)&&(mid>ref)&&(right<ref)) { turn_right(0.1); // Turn right for backing to line }

â»Ãá¡ÃÁ·Õè P7-4 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

277

¡Ã³Õ·Õè 4 µÃǨÊͺ¾º·Ò§á¡ ¡íÒ˹´ãË àÅÕÂé Ç« Ò (ÊÒÁÒö¡íÒ˹´à» ¹Í ҧÍ×¹è ä´ ) ÃÒÂÅÐàÍÕ´ ¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé else if((left<ref)&&(mid<ref)&&(right<ref)) { turn_left(0.1); // Turn left }

¡Ã³Õ·Õè 5 µÃǨÊͺ¾º·Ò§á¡ã¹ÃÐËÇ Ò§àÅÕÂé Ç ¡íÒ˹´ãË àÅÕÂé Ç« Òµ Íä» (ÊÒÁÒö¡íÒ˹´à» ¹Í ҧ Í×¹è ä´ áµ ¤ÇÃÊÍ´¤Å ͧ¡Ñº¨Ø´»ÃÐʧ¤ ) ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé else if((left<ref)&&(mid>ref)&&(right<ref)) { turn_left(0.1); // Turn left for backing to line }

¡Ã³Õ·Õè 6 à» ¹à˵ءÒó ·ÍÕè ÂÙ¹ Í¡à˹×͡óշ¼Õè Ò ¹ÁÒ ¨Ð¡íÒ˹´ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁà» ¹´Ñ§¹Õé else { run_fd(); sleep(0.01); }

// Go straight // Delay 0.01 second

â»Ãá¡ÃÁ·Õè P7-4 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí (¨º)

¼Å¡Ò÷íÒ§Ò¹ àÁ×Íè ¡´ÊÇÔµª START Ëع ¹µ Robo-11 ¨Ðà¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí àÁ×Íè Ëع ¹µ µÃǨ¾º·Ò§á¡ ¨Ðà¡Ô´ ¡ÒÃàÅÕÂé Ç« Ò·ء¤ÃÑ§é ¨ÐËÂØ´¡ÒÃà¤Å×Íè ¹·Õàè Á×Íè ¡´ÊÇÔµª STOP ¤ Ò§äÇ


278

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

7.8 àÅ× Í ¡ÃÙ » Ẻ¡Ò÷í Ò §Ò¹¢Í§ËØ ¹ ¹µ Robo-11 ´ Ç¡ÒÃÊà ҧàÁ¹ÙÊíÒËÃѺàÅ×Í¡¡Ò÷íÒ§Ò¹ ã¹µÑÇÍ ҧ¡Ò÷íÒ§Ò¹·Õ¼è Ò ¹Áҷѧé 3 ÃٻẺ¢Í§Ëع ¹µ Robo-11 ¨Ð·íÒ§Ò¹ã¹ÅѡɳÐã´ÅѡɳÐ˹֧è ෠ҹѹé â´Â¡ÒÃàÅ×Í¡ÃٻẺ¡Ò÷íÒ§Ò¹¨Ð¶Ù¡àÅ×Í¡µÑ§é áµ áá¨Ò¡¡ÒôÒǹ âËÅ´â»Ãá¡ÃÁ ÊíÒËÃѺã¹ËÑÇ¢ ͹ըé Ðà» ¹ ¡ÒùíÒâ»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ ·§Ñé ÊÒÁẺ¹Ñ¹é ÁÒÃÇÁ¡Ñ¹ã¹â»Ãá¡ÃÁà´ÕÂÇ áÅ ÇàÅ×Í¡ãË ·Òí §Ò¹ä´ ´Ç ¡ÒÃËÁعµÑÇ µ Ò¹·Ò¹»ÃѺ¤ Òä´ ·µÕè Òí á˹ § KNOB º¹ºÍà ´ AX-11 â´Â·Õâè Á´ÙÅ LCD ¨ÐáÊ´§ËÑÇ¢ ͧ͢ÃÒ¡Ò÷íÒ§Ò¹µÒÁ¡Òà ËÁعµÑǵ Ò¹·Ò¹ KNOB ¨Ö§ÁÕÅ¡Ñ É³Ð¤Å Ò¡ѺàÁ¹Ù¢Í§â»Ãá¡ÃÁ

7.8.1 ËÅÑ¡¡ÒÃáÅÐÃٻẺ¡Ò÷íÒ§Ò¹ ËÅÑ¡¡Òä×Í à¢Õ¹â»Ãá¡ÃÁà¾×Íè Êà ҧ¡ÒÃáÊ´§¼ÅÃÒ¡Òâͧ¡Ò÷íÒ§Ò¹ã¹ÅѡɳÐàÁ¹Ù (menu) 3 ÃÒ¡Òà â´Â¡ÒÃàÅ×Í¡ãË ·Òí §Ò¹ã¹áµ ÅÐÃÒ¡Òà ÊÒÁÒö·íÒä´ â´Â¡ÒûÃѺ·Õµè ÇÑ µ Ò¹·Ò¹»ÃѺ¤ Òä´ KNOB «Ö§è ÍÒÈÑ¡ÒÃÍ Ò¹ ¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡¨Ò¡¿ §¡ ª¹Ñè knob áŠǹíÒÁÒẠ§à» ¹ª ǧ¢Í§àÁ¹Ù·àÕè Å×Í¡·íÒÃÒ¡Ò÷ѧé ÊÒÁ ÊíÒËÃѺâ»Ãá¡ÃÁ¢Ñº à¤Å×Íè ¹Ëع ¹µ Robo-11 ¹íÒâ»Ãá¡ÃÁµÑÇÍ ҧ¡ ͹˹ Ò¹Õ·é §Ñé 3 ẺÁÒà» ¹ÃÒ¡ÒõÑÇàÅ×Í¡ ´Ñ§¹Õé ÃÒ¡Ò÷Õè 1 àÅ×Í¡·íÒâ»Ãá¡ÃÁ·Õè 1 ¢Ñºà¤Å×Íè ¹Ëع ¹µ Ẻ¾×¹é °Ò¹ «Ö§è »ÃСͺ´ Ç ¡ÒÃà¤Å×Íè ¹·Õäè » ¢ ҧ˹ Ò, ¶ÍÂËÅѧ , àÅÕÂé Ç« Ò áÅÐàÅÕÂé Ç¢ÇÒ â´ÂàÁ×Íè ËÁعµÑǵ Ò¹·Ò¹ KNOB ÁÒ¶Ö§ÃÒ¡Òùշé âÕè Á´ÙÅ LCD ¨ÐáÊ´§ Menu1: Basic

Move

·Ñ¹·Õ·¡Õè ´ÊÇÔµª START Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õµè ç仢 ҧ˹ Òà» ¹àÇÅÒ 3 ÇÔ¹Ò·Õ ¾Ã ÍÁáÊ´§¢ ͤÇÒÁ Forward! ·Õâè Á´ÙÅ LCD µ ͨҡ¹Ñ¹é àÅÕÂé Ç« ÒÂà» ¹àÇÅÒ 1 ÇÔ¹Ò·Õ âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Turn Left! µÒÁ´ Ç ¶ÍÂËÅѧ໠¹àÇÅÒ 2 ÇÔ¹Ò·Õ âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Backward! áÅ ÇËÁعµÑÇàÅÕéÂÇ¢ÇÒ 1 ÇÔ¹Ò·Õ âÁ´ÙÅ LCD áÊ´§¢ ͤÇÒÁ Turn Right! ¨Ò¡¹Ñ¹é ǹ价íÒ¡ÒÃà¤Å×Íè ¹·Õµè ç仢 ҧ˹ ÒÍÕ¡¤Ãѧé ÃÒ¡Ò÷Õè 2 àÅ×Í¡·íÒâ»Ãá¡ÃÁ·Õè 2 à¾×Íè ¤Çº¤ØÁËع ¹µ Robo-11 ãË à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò, ¶ÍÂËÅѧ , àÅÕÂé Ç« Ò áÅСᢹ¢Ö¹é -ŧ â´ÂàÁ×Íè ËÁعµÑǵ Ò¹·Ò¹ KNOB ÁÒ¶Ö§ÃÒ¡Òùշé âÕè Á´ÙÅ LCD ¨ÐáÊ´§¢ ͤÇÒÁ Menu2: Robot

Arm

Ëع ¹µ ¨Ð·íÒ¡ÒÃà¤Å×Íè ¹·Õáè ÅСᢹ¢Ö¹é -ŧ àÁ×Íè ¡´ÊÇÔµª START ÃÒ¡Ò÷Õè 3 àÅ×Í¡·íÒâ»Ãá¡ÃÁ·Õè 3 àÅ×Í¡¤Çº¤ØÁËع ¹µ ãË à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí àÁ×Íè ËÁعµÑǵ Ò¹·Ò¹ KNOB ÁÒ¶Ö§ÃÒ¡Òùշé âÕè Á´ÙÅ LCD ¨ÐáÊ´§¢ ͤÇÒÁ Menu3: Track

Line


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

279

7.8.2 â»Ãá¡ÃÁ·´Åͧ à¢Õ¹â»Ãá¡ÃÁ·Õè P7-5 ¨Ò¡¹Ñ¹é ´Òǹ âËŴŧã¹Ëع ¹µ AX-11 » ´ÊÇÔµª »Å´ÊÒ´Òǹ âËÅ´ áŠǹíÒËع ¹µ ä»ÇÒ§º¹¾×¹é ËÁعµÑǵ Ò¹·Ò¹·Õµè Òí á˹ § KNOB ä»·Ò§« ÒÂÁ×ÍÊØ´ ¨Ò¡¹Ñ¹é à» ´ÊÇÔµª ¨Ò Âä¿ áÅ Ç¡´ÊÇÔµª START ËÒ¡µ ͧ¡ÒÃà»ÅÕÂè ¹á»Å§ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õãè Ë »´ ÊÇÔµª POWER áÅ Çà» ´ãËÁ ËÁعµÑǵ Ò¹·Ò¹ KNOB ¨¹¡Ãзѧè âÁ´ÙÅ LCD áÊ´§ÃÒ¡Òâͧâ»Ãá¡ÃÁ·Õµè Í §¡Òà ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª START Ëع ¹µ ¨Ð·íÒ§Ò¹µÒÁ·ÕÁè ¡Õ Òà ¡íÒ˹´äÇ ã¹â»Ãá¡ÃÁáµ ÅÐÃÒ¡Òà /*—————————————————————————————————————————————————————————————————*/ // Program : Multi-function robot // Description : Robo-11 operated by menu selection // Filename : p0705.ic // C compiler : Interactive C 4.21GA /*—————————————————————————————————————————————————————————————————*/ #define pow 50 /*Define power for driving motor 0 and 1*/ #define ref 140 /*Define tracking-line reference value*/ int left=0,right=0,mid=0; /*For keeping status*/ int menu = 0; /*For keeping menu selected status*/ void main() /*Main function*/ { int i=0; // Initial value for keeping analog of KNOB while(1) // Infinite loop { i = knob(); // Read input analog value from KNOB if(i<50) // if value is 0-49 shows menu-1 { menu = 1; // Load status for menu1 printf(“Menu1: Basic Move\n”); // Show message for menu-1 if(start_button()) // Check select menu-1 { beep(); // Sound beep for menu-1 selection program1(); // Run program-1 } } if(i>=50 && i<100) // if value is 50-99 shows menu-2 { menu = 2; // Load status for menu-2 printf(“Menu2: Robot Arm\n”); // Show message for menu-2 if(start_button()) // Check select menu-2 { beep(); // Sound beep for menu-2 selection program2(); // Run program-2 } } if(i>=100 && i<150) // if value >=100 shows menu-3

â»Ãá¡ÃÁ·Õè P7-5 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË ·Òí §Ò¹¼ Ò¹¡ÒÃàÅ×Í¡àÁ¹Ù (ÁÕµÍ )


280

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C { menu = 3; printf(“Menu3: if(start_button()) { beep(); program3(); }

// Load status for menu-3 Track Line\n”); // Show message for menu-3 // Check select menu-3 // Sound beep for menu-3 selection // Run program-3

} sleep(0.1);

// Delay for displaying

} } void program1(void) { ao(); while(!stop_button()) { printf(“!push start

// Off all motor for initial // Infinite loop to Run\n”); // Shows message for driving Robot // Wait until START button pressed // Check STOP button pressed

while(!start_button()); while(!stop_button()) { printf(“ Forward!\n”); run_fd(); sleep(3.0); ao();

// Motor move forward // Delay for driving forward // Off all motors

printf(“ Turn Left!\n”); turn_left(1.0); ao();

// Turn left 1 second // Off all motors

printf(“ Backward!\n”); run_bk(); sleep(2.0);

// Motor move backward // Delay for driving backward

printf(“ Turn Right!\n”); turn_right(1.0); // Turn left 1 second ao(); // Off all motors } printf(“ ao(); beep();

Stop..\n”);

// Show stop operation message // All motor off for ending program // Sound beep signal for ending program

} } void program2(void) { ao(); while(!stop_button())

// Off all motors for initial // Infinite loop

â»Ãá¡ÃÁ·Õè P7-5 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË ·Òí §Ò¹¼ Ò¹¡ÒÃàÅ×Í¡àÁ¹Ù (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C

l

281

{ printf(“!push start

to Run\n”); // Show message for driving Robot // Wait until START button pressed // Check STOP button pressed

while(!start_button()); while(!stop_button()) { printf(“ Forward!\n”); run_fd(); sleep(3.0); ao();

//Show message for driving forward // Motor move forward // Delay for driving forward // Off all motors

printf(“ Arm up!\n”); arm_up(2.0);

// Show message for lifting arm up // Lift robot’s arm up 2.0 seconds

printf(“ Backward!\n”); run_bk(); sleep(2.0);

// Show message for driving backward // /Motor move backward // Delay for driving backward

printf(“

turn_left(1.0); ao();

// // // //

printf(“ Arm down!\n”); arm_down(2.0);

// Show message for placing arm down // Robot’s placed down 2.0 second

} printf(“ ao(); beep();

Turn Left!\n”);

Stop..\n”);

} } void program3(void) { ao(); while(!stop_button())

// // // //

Show message of turn left operation Turn left 1 second Off all motors

Show stop operation message Off all motors for ending program Sound beep signal for ending program

// Wait for STOP button pressed // in-process

{ printf(“!push start

to Run\n”); // Show message for driving Robot while(!start_button()); // Wait for STOP button pressed // to run program printf(“ Track Line\n”); // Show message for working while(!stop_button()) // Wait for STOP button pressed // in-process { left = analog(21); // Read status from left sensor mid = analog(19); // Read status from middle sensor right = analog(17); // Read status from right sensor if((left>ref)&&(mid<ref)&&(right>ref)) // Check robot on the black line

â»Ãá¡ÃÁ·Õè P7-5 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË ·Òí §Ò¹¼ Ò¹¡ÒÃàÅ×Í¡àÁ¹Ù (ÁÕµÍ )


282

l

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C { run_fd(); sleep(0.01);

// Direct forward // Delay forward

} else if((left<ref)&&(mid>ref)&&(right>ref)) // Check over right { turn_left(0.1); // Turn left for backing to } else if((left>ref)&&(mid>ref)&&(right<ref)) // Check over left { turn_right(0.1); // Turn right for backing to } else if((left<ref)&&(mid<ref)&&(right<ref)) // Check cross line { turn_left(0.1); // Turn left for backing to } else if((left<ref)&&(mid>ref)&&(right<ref)) // Check between cross line { turn_left(0.1); // Turn left for backing to } else // If out of condition { run_fd(); // Direct forward sleep(0.01); // Delay forward } } printf(“Stop..\n”); ao(); beep();

the line

the line

the line

the line

// Show stop operation message // Off all motors for ending program // Sound beep signal for ending program

} } void turn_right(float spin_time) { motor(0,pow); // motor(1,-pow); // sleep(spin_time); // } void turn_left(float spin_time) { motor(0,-pow); // motor(1,pow); // sleep(spin_time); // } void run_fd(void) { motor(0,pow); // motor(1,pow); // }

Motor-0 backward 50% of maximum power Motor-1 forward 50% of maximum power Define delay by spin_time parameter

Motor-0 forward with pow’s value Motor-1 backward with pow’s value Define delay by spin_time parameter

Motor-0 forward with pow’s value Motor-1 forward with pow’s value

â»Ãá¡ÃÁ·Õè P7-5 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË ·Òí §Ò¹¼ Ò¹¡ÒÃàÅ×Í¡àÁ¹Ù (ÁÕµÍ )


ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  Interactive C void run_bk(void) { motor(0,-pow); motor(1,-pow); } void arm_up(float time) { motor(2,-70); sleep(time); off(2); } void arm_down(float time) { motor(2,70); sleep(time); off(2); }

l

283

// Motor-0 backward with pow’s value // Motor-1 backward with pow’s value

// Motor-2 backward at 70% // Define delay by time parameter // Off motor-2

// Motor-2 forward at 70% // Define delay by time parameter // Off motor-2

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁàÃÔÁè µ ¹·Õâè »Ãá¡ÃÁËÅÑ¡ main «Ö§è à» ¹¡ÒÃÇ¹Í Ò¹¤ ÒÍÔ¹¾ØµÍйÒÅÍ¡¨Ò¡µÑÇ µ Ò¹·Ò¹ KNOB áŠǵÃǨÊÍºÇ Ò ÁÕ¤Ò ÍÂÙã ¹ª ǧ¡ÒÃáÊ´§¼Å¢Í§àÁ¹ÙËÃ×ÍÃÒ¡ÒÃã´ ´Ñ§¹Õé 1. ¶ Ò¤ Ò¨Ò¡ KNOB ÍÂÙà ÐËÇ Ò§ 0-49 ¨ÐáÊ´§¢ ͤÇÒÁ¢Í§ÃÒ¡Ò÷Õè 1 ¤×Í Menu1: ·Õºè Ã÷Ѵº¹ ¢Í§âÁ´ÙÅ LCD áÅÐ Basic Move ·Õºè Ã÷ѴŠҧ¢Í§âÁ´ÙÅ LCD ¨Ò¡¹Ñ¹é ǹµÃǨÊͺ¡ÒÃàÅ×Í¡·íÒÃÒ¡ÒÃ Ç Ò ÁÕ¡Òá´ÊÇÔµª START ËÃ×ÍäÁ ¶ ÒÁÕ¡Òá´ÊÇÔµª «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õ¿è § ªÑ¹è program1 ·Ñ¹·Õ «Ö§è ¡íÒ˹´ãË Ë¹Ø Â¹µ ¢ºÑ à¤Å×Íè ¹áºº¾×¹é °Ò¹ «Ö§è »ÃСͺ´ Ç ¡ÒÃà¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò, ¶ÍÂËÅѧ , àÅÕÂé Ç « Ò áÅÐàÅÕÂé Ç¢ÇÒ 2. ¶ Ò¤ Ò¨Ò¡ KNOB ÍÂÙà ÐËÇ Ò§ 50-99 ¨ÐáÊ´§¢ ͤÇÒÁ¢Í§ÃÒ¡Ò÷Õè 2 ¤×Í Menu2: ·Õºè Ã÷Ѵ º¹¢Í§âÁ´ÙÅ LCD áÅÐ Robot Arm ·Õºè Ã÷ѴŠҧ¢Í§âÁ´ÙÅ LCD ¨Ò¡¹Ñ¹é ǹµÃǨÊͺ¡ÒÃàÅ×Í¡·íÒÃÒ¡ÒÃÇ Ò ÁÕ¡Òá´ÊÇÔµª START ËÃ×ÍäÁ ¶ ÒÁÕ «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õ¿è § ªÑ¹è program2 Íѹ໠¹¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò, ¶ÍÂËÅѧ , àÅÕÂé Ç« Ò áÅСᢹËع ¹µ ¢¹Öé -ŧ 3. ¶ Ò¤ Ò¨Ò¡ KNOB ÁÒ¡¡Ç ÒËÃ×Í෠ҡѺ 100 ¨ÐáÊ´§¢ ͤÇÒÁ¢Í§ÃÒ¡Ò÷Õè 3 ¤×Í Menu3: ·Õºè Ã÷Ѵº¹¢Í§âÁ´ÙÅ LCD áÅÐ Track Line ·Õºè Ã÷ѴŠҧ¢Í§âÁ´ÙÅ LCD ¨Ò¡¹Ñ¹é ǹµÃǨÊͺ¡ÒÃàÅ×Í¡ ·íÒÃÒ¡ÒÃÇ Ò ÁÕ¡Òá´ÊÇÔµª START ËÃ×ÍäÁ ¶ ÒÁÕ «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õ¿è § ªÑ¹è program3 㹡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ·Ñ§é 3 ÃÒ¡Òà «Ö§è ä´ á¡ ¿ §¡ ª¹Ñè program1, program2 áÅÐ program3 à» ¹µÑÇÍ ҧâ»Ãá¡ÃÁ·Õäè ´ ¡Å ÒÇÃÒÂÅÐàÍÕ´ÁÒã¹â»Ãá¡ÃÁ·Õè 7-1 ¶Ö§ 7-4 ¡ ͹˹ Ò¹Õáé Å Ç à¾Õ§¶Ù¡¹íÒÁÒà¢Õ¹ à» ¹¿ §¡ ª¹Ñè ËÃ×Íâ»Ãá¡ÃÁ Í·ÕÊè ÒÁÒöàÃÕ¡㪠§Ò¹¨Ò¡¡ÒÃàÅ×Í¡àÁ¹ÙËÃ×ÍÃÒ¡Òâͧâ»Ãá¡ÃÁ¹Õàé · ҹѹé à¾×Íè

â»Ãá¡ÃÁ·Õè P7-5 â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-11 ãË ·Òí §Ò¹¼ Ò¹¡ÒÃàÅ×Í¡àÁ¹Ù (¨º)


ªØ´àÃÕ¹ÃÙ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà áÅÐÊà ҧËØ ¹Â¹µ ´ ÇÂ

¤Çº¤ØÁ¡Ò÷íÒ§Ò¹´ Ç AX-11 ºÍà ´ äÁâ¤Ã¤Í¹â ·ÃÅàÅÍà 68HC11 ¾Ã ÍÁǧ¨Ã¢Ñº·Ñé§ÁÍàµÍà 俵çáÅÐà«Íà âÇ ÁÍàµÍÃ

AX-11

68HC11 activity board

ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃáÅÐËØ ¹Â¹µ ´ ÇÂÀÒÉÒ«Õ ã¹áºº©ºÑº·Õè§ ÒÂÊØ´æ áµ à» ÂÁ´ Ç»ÃÐÊÔ·¸ÔÀÒ¾ ¨Ñ´ÁҾà ÍÁ·Ñ§é ἧǧ¨Ã ªÔ¹é Ê Ç¹ áÅÐâ»Ãá¡ÃÁ Interactive C robot kit à» ¹Ë¹Ö§è ã¹Ê×Íè àÊÃÔÁ´ Ò¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ ã¹ÃдѺ ÁѸÂÁÈÖ¡Éҵ͹»ÅÒÂÊíÒËÃѺ¡ÒÃᢠ§¢Ñ¹Ëع ¹µ »ÃШíÒ» 2547 áÅÐ KMITNB Robot camp 2003

¤Ø³ÊÁºÑµÔ·Ò§à·¤¹Ô¤¢Í§ AX-11 : 68HC11 Activity board

Robo-11

Interactive C mobile robot

㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 68HC11 à» ¹µÑǤǺ¤ØÁËÅÑ¡ l ¤ÇÒÁ¶ÕÊ è­ Ñ ­Ò³¹ÒÌ ¡ÒËÅÑ¡ 8MHz ¨Ò¡¤ÃÔʵÍÅ l ˹ ǤÇÒÁ¨íÒáÃÁ 32 ¡ÔâÅ亵 l ÅíÒ⾧໠Â⫢ѺàÊÕ§ l àª×Í è Áµ ͡Ѻ¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µÍ¹Ø¡ÃÁ l «Í¿µ áÇà Interactive C Ãѹº¹ÇÔ¹â´ÇÊ 98/ME/XP l ǧ¨Ã¢Ñº LED ÍÔ¹¿ÃÒàôáÅÐâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz l ä¿àÅÕé§ +9.6V 1700mA ¨Ò¡áºµàµÍÃÕè ÁÕǧ¨Ã¤Çº¤ØÁä¿àÅÕ駤§·Õè +5V Êí Ò ËÃÑ º äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¾Ã Í Áǧ¨Ã»ÃÐ¨Ø á ºµàµÍÃÕè l ÍÔ¹¾ØµÇ§¨Ãá»Å§ÊÑ­­Ò³ÍйÒÅÍ¡à» ¹´Ô¨µ Ô ÍÅ 8 ºÔµ 21 ª ͧ l ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ 9 ª ͧ l àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ 9 ª ͧ l ǧ¨Ã¢ÑºÁÍàµÍà 俵ç 6V ¶Ö§ 4 ªØ´ ¾Ã ÍÁä¿áÊ´§¡Ò÷íÒ§Ò¹ l ǧ¨Ã¢Ñºà«Íà âÇÁÍàµÍà 4.8-6V 200mA ä´ 6 µÑÇ l ÊÇÔµª START áÅÐ STOP ÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹ l âÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ áÊ´§¼Å¡Ò÷íÒ§Ò¹ l

ºÃÔÉÑ· ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´

3133/53 «.ÊØ¢ÁØ ÇÔ· 101/2 ¶. ÊØ¢ÁØ ÇÔ· á¢Ç§ºÒ§¹Ò ࢵºÒ§¹Ò ¡ÃØ§à·¾Ï 10260 â·ÃÈѾ· 0-2747-7001-4 â·ÃÊÒà 0-2747-7005 Website : www.inex.co.th

e-mail : tech@inex.co.th

µÑÇá·¹¨íÒ˹ Ò ¾Õ.¾Õ. ¤ÍÁ¾ÔÇàµÍà 0-2226-4034, ÍÕàŤ·ÃÍ¹Ô¤Ê «Íà « 0-2623-9460-7, 0-2623-8364-6, ¹Ñ°¾§É à«ÅÊ á͹´ à«Íà ÇÊÔ 0-2225-0094, 0-2992-7379 Distributor àªÕ§ãËÁè : ¡ÔµµÔÍàÔ Åç¡â·Ã¹Ô¤Ê 0-5322-1463, ¾ÔɳØâÅ¡ : ·ÃÕ¨àÕ ·¤ 0-5525-6135 ¹¤ÃÃÒªÊÕÁÒ : àÍÊ.«Õ ÍÔàÅç¡·ÃÍ¹Ô¡Ê 0-4424-3453 Order online : www.appsofttech.com ˹ ǧҹ¡ÒÃÈÖ¡ÉÒ : W&J àÍ繨Ôà¹ÕÂÃÔ§è 0-2943-9001-2


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.