ʹء¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ´Ç  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