You are on page 1of 491

เอกสารประกอบการสอน

วิชาไมโครคอนโทรลเลอร์ (3105-2014)
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง (ปวส.) พุทธศักราช 2546
ประเภทวิชาอุตสาหกรรม สาขาวิชาอิเล็กทรอนิกส์

Vcc J12 C7
Vcc
31 40 R3 C6 220uF SPK
10K
R8-R15 1uF DSP1
EA
Vcc

11 20
180x8
LE
39 2 VCC 19 a
P0.0 D1 Q1 b
38 3 18 c
P0.1 D2 Q2
37 4 17 d
P0.2 D3 Q3 e
36 5 16 f
P0.3 D4 Q4
35 6 15 g
P0.4 D5 Q5 dp
34 7 14
P0.5 D6 Q6
33 8 13
P0.6 D7 Q7
32 9 12
GND

P0.7 D8 Q8
OE

Vcc Q1 Q2
C3 10 1 74HC573 BC547 BC547
10uF
LED2-LED9
9 28 Vcc J11
RST P2.7
SW1 27
R2 P2.6 R16,R17
10K Vcc 4.7K x2

X1 24 R4-R7
P2.3
11.0592MHz 18 23 10K x4
XTAL2 P2.2 R18,R19
19 22 S1 220 x2
XTAL1 P2.1
21
GND

P2.0 S2

C4,C5 S3
20 AT89S52
S4
22pFx2

เรียบเรียงโดย
ประภาส สุวรรณเพชร
วศ.บ. ไฟฟ้า-โทรคมนมคม (เกียรตินิยม)
ค.อ.ม. ไฟฟ้า (แขนงอิเล็กทรอนิกส์)

แผนกวิชาช่างอิเล็กทรอนิกส์ วิทยาลัยเทคนิคชัยภูมิ
สานักงานคณะกรรมการการอาชีวศึกษา
กระทรวงศึกษาธิการ
เอกสารประกอบการสอน

วิชาไมโครคอนโทรลเลอร์
(3105-2014)
หลักสูตรประกาศนียบัตรวิชาชีพชั้นสูง (ปวส.)
พุทธศักราช 2546 ประเภทวิชาอุตสาหกรรม
สาขาวิชาอิเล็กทรอนิกส์

เรียบเรียงโดย
นายประภาส สุวรรณเพชร
ครูชานาญการ

แผนกวิชาช่างอิเล็กทรอนิกส์ วิทยาลัยเทคนิคชัยภูมิ
สานักงานคณะกรรมการการอาชีวศึกษา
กระทรวงศึกษาธิการ

คำนำ
ปั จจุ บ นั ไมโครคอนโทรลเลอร์ มี ก ารนามาใช้งานกันแพร่ หลายมากขึ้ น โดยมี ก ารฝั ง ตัวของ
ไมโครคอนโทรลเลอร์ อยูใ่ นเครื่ องใช้ไฟฟ้าหลาย ๆ ประเภท เช่น เครื่ องซักผ้าแบบอัตโนมัติ เตาอบไฟฟ้า
เตาไมโครเวฟ เครื่ องปรั บ อากาศที่ ส ามารถก าหนดอุ ณหภู มิ ไ ด้และอื่ น ๆ อี ก มากมาย MCS-51 เป็ น
ไมโครคอนโทรลเลอร์ ตระกูลหนึ่ งที่ได้รับความนิ ยมมากตระกูลหนึ่ ง อันเนื่ องมาจากการกาเนิ ดที่มีมา
นานและการใช้งานง่ายไม่ซบั ซ้อน มีตน้ ทุนในการสร้างวงจรต่า ซึ่งในการใช้งานไมโครคอนโทรลเลอร์
จะต้องประกอบด้วยองค์ประกอบ 2 อย่างคือ ตัวเครื่ องหรื อที่เรี ยกว่า ฮาร์ ดแวร์ (Hardware) และโปรแกรม
หรื อชุ ดคาสั่งที่เรี ยกว่า ซอฟต์แวร์ (Software) ที่ใช้สั่งให้ไมโครคอนโทรลเลอร์ ทาตามความต้องการของ
ผูอ้ อกแบบ หนังสื อเล่มนี้อธิ บายถึงหลักการออกแบบฮาร์ ตแวร์ และการเขียนซอฟท์แวร์ เพื่อใช้ควบคุม

เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์ น้ ี ขา้ พเจ้าได้เรี ยบเรี ยงขึ้นจากประสบการณ์


ที่สอนนักศึกษาเป็ นเวลากว่า 20 ปี ได้ศึกษาค้นคว้าและพัฒนาเนื้ อหาให้ทนั ต่อการพัฒนาของเทคโนโลยี
โดยนาเสนอเนื้อหาจากพื้นฐานของไมโครคอนโทรลเลอร์ เพื่อให้ผอู ้ ่านที่มีความสนใจศึกษาด้านนี้แต่ไม่
มี พ้ืนความรู ้ มาก่ อน ตลอดจนนัก ศึกษาสามารถศึ กษาเรี ยนรู ้ ทดลองปฏิ บตั ิ ไ ด้ โดยเริ่ มแนะนาให้รู้จกั
พื้ นฐานตั้ง แต่ ร ะบบเลขฐาน โครงสร้ า งภายในของไมโครคอนโทรลเลอร์ วงจรเชื่ อมต่ อ การเขี ย น
โปรแกรมควบคุ ม ด้วยภาษาซี ข้า พเจ้า หวัง เป็ นอย่างยิ่ง ว่า ผูอ้ ่ า นจะสามารถเรี ย นรู ้ แ ละนาความรู ้ จาก
หนังสื อไปประยุกต์ใช้งานได้ หากเอกสารประกอบการสอนเล่มนี้ มีขอ้ ผิดพลาดประการใดข้าพเจ้าต้อง
ขออภัยไว้ ณ ที่น้ ีดว้ ย ข้าพเจ้ายินดีนอ้ มรับคาแนะนาเพื่อนามาปรับปรุ งให้สมบูรณ์ยงิ่ ขึ้น

เอกสารประกอบการสอนเล่มนี้ ขา้ พเจ้าได้พากเพียรค้นคว้าพัฒนาปรับปรุ งให้มีความสมบูรณ์


มากที่สุด หากมีคุณความดีประการใดข้าพเจ้าขอมอบแด่บิดา มารดา ครู -อาจารย์ ที่ประสิ ทธิ์ ประศาสตร์
วิชาความรู ้ของข้าพเจ้าทุกท่าน

ประภาส สุ วรรณเพชร
ผูเ้ รี ยบเรี ยง

หลักสู ตรประกำศนียบัตรวิชำชีพชั้นสู งพุทธศักรำช 2546


ประเภทวิชำอุตสำหกรรม สำขำวิชำอิเล็กทรอนิกส์
หลักกำร
1. เป็ นหลักสู ตรที่มุ่งผลิตและพัฒนาแรงงานระดับผูช้ านาญการเฉพาะสาขาอาชีพ สอดคล้องกับ
ตลาดแรงงาน สภาพเศรษฐกิจ สังคม วัฒนธรรม เทคโนโลยีและสิ่ งแวดล้อม สามารถเป็ น
หัวหน้างานหรื อเป็ นผูป้ ระกอบการได้
2. เป็ นหลักสู ตรที่มุ่งเน้นให้ผเู ้ รี ยนมีสมรรถนะในการประกอบอาชีพ มีความรู ้เต็มภูมิ ปฏิบตั ิได้จริ ง
และ เข้าใจชีวติ
3. เป็ นหลักสู ตรที่เปิ ดโอกาสให้ผปู ้ ระกอบการวิชาชีพมีส่วนร่ วมในการเรี ยนการสอนวิชาชีพ
สามารถถ่ายโอนประสบการณ์การเรี ยนรู ้จากสถานประกอบการ และสามารถสะสมการเรี ยนรู ้
และประสบการณ์ได้

จุดหมำย
1. เพื่อให้มีความรู ้และทักษะพื้นฐานในการดารงชีวติ สามารถศึกษาค้นคว้าเพิ่มเติมหรื อศึกษาต่อ
ในระดับที่สูงขึ้น
2. เพื่อให้มีทกั ษะและสมรรถนะในงานอาชีพตามมาตรฐานวิชาชีพ
3. เพื่อให้สามารถบูรณาการความรู ้ ทักษะจากศาสตร์ ต่าง ๆ ประยุกต์ใช้ในงานอาชีพ สอดคล้องกับ
การเปลี่ยนแปลงทางเทคโนโลยี
4. เพื่อให้มีเจตคติที่ดีต่ออาชีพ มีความมัน่ ใจและภาคภูมิใจในงานอาชีพ รักงาน รักองค์กร สามารถ
ทางานเป็ นหมู่คณะได้ดี และมีความภาคภูมิใจในตนเองต่อการเรี ยนวิชาชีพ
5. เพื่อให้มีปัญญา ใฝ่ รู ้ ใฝ่ เรี ยน มีความคิดสร้างสรรค์ มีความสามารถในการจัดการ การตัดสิ นใจ
และการแก้ปัญหา รู ้จกั แสวงหาแนวทางใหม่ ๆ มาพัฒนาตนเอง ประยุกต์ใช้ความรู ้ในการสร้าง
งานให้สอดคล้องกับวิชาชีพ และการพัฒนางานอาชีพอย่างต่อเนื่อง
6. เพื่อให้มีบุคลิกภาพที่ดี มีคุณธรรม จริ ยธรรม ซื่ อสัตย์ มีวินยั มีสุขภาพสมบูรณ์แข็งแรงทั้งร่ างกาย
และจิตใจ เหมาะสมกับการปฏิบตั ิในอาชีพนั้น ๆ
7. เพื่อให้เป็ นผูม้ ีพฤติกรรมทางสังคมที่ดีงาม ทั้งในการทางาน การอยูร่ ่ วมกัน มีความรับผิดชอบต่อ
ครอบครัว องค์กร ท้องถิ่นและประเทศชาติ อุทิศตนเพื่อสังคม เข้าใจและเห็นคุณค่าของ
ศิลปวัฒนธรรมไทย ภูมิปัญญาท้องถิ่น ตระหนักในปั ญหาและความสาคัญของสิ่ งแวดล้อม
8. เพื่อให้ตระหนักและมีส่วนร่ วมในการพัฒนาและแก้ไขปั ญหาเศรษฐกิจของประเทศ โดยเป็ น
กาลังสาคัญในด้านการผลิตและให้บริ การ

9. เพื่อให้เห็นคุณค่าและดารงไว้ซ่ ึ งสถาบันชาติ ศาสนา และพระมหากษัตริ ย ์ ปฏิบตั ิตนในฐานะ
พลเมืองดีตามระบอบประชาธิปไตย อันมีพระมหากษัตริ ยท์ รงเป็ นประมุข

จุดประสงค์
ผูท้ ี่สาเร็ จการศึกษาหลักสู ตรประกาศนียบัตรวิชาชีพชั้นสู ง พุทธศักราช 2546 ประเภทวิชา
อุตสาหกรรม สาขาวิชาอิเล็กทรอนิกส์ ส ามารถปฏิบตั ิงานระดับช่างเทคนิค ผูค้ วบคุมงาน ผูช้ ่วยวิศวกร
หรื อประกอบอาชีพส่ วนตัว มีความรู ้ ความสามารถ เจตคติและประสบการณ์ดา้ นต่าง ๆ ดังต่อไปนี้

1. เพื่อให้มีความรู ้ และทักษะพื้นฐานเกี่ยวกับ ภาษา สังคม มนุษยศาสตร์ คณิ ตศาสตร์ วทิ ยาศาสตร์


นาไปใช้ในการค้นคว้า พัฒนาตนเองและวิชาชีพ อิเล็กทรอนิกส์ ให้เกิดความเจริ ญก้าวหน้า
2. เพื่อให้มีความรู ้ และทักษะในหลักการและกระบวนการทางานพื้นฐานของช่างเทคนิ คที่เกี่ยวกับ
การบริ หารจัดการ และการวางแผนในงานอุตสาหกรรม และสามารถติดตามความเจริ ญก้าวหน้า
ทางเทคโนโลยีนามาพัฒนางานอาชีพ อิเล็กทรอนิกส์ ให้มีประสิ ทธิภาพและประสิ ทธิผล
3. เพื่อให้มีความคิดวิเคราะห์ แก้ปัญหา สร้างสรรค์ และนาเทคโนโลยีมาใช้ในการพัฒนางาน
อิเล็กทรอนิกส์
4. เพื่อให้มีบุคลิกภาพที่ดี มีความรับผิดชอบต่อตนเอง ครอบครัว และสังคม มีคุณธรรมจริ ยธรรม
และกิจนิสัยที่ดีในงานอาชีพ
5. เพื่อให้สามารถประกอบอาชีพในสถานประกอบการอุตสาหกรรม หรื อสร้างสรรค์หรื อประกอบ
อาชีพอิสระในสาขาวิชาอิเล็กทรอนิ กส์

หลักสู ตรรำยวิชำไมโครคอนโทรลเลอร์
วิชำ ไมโครคอนโทรลเลอร์ รหัสวิชำ 3105-2014 จำนวนหน่ วยกิต 2
จำนวนชั่วโมง/สั ปดำห์ 3 ชัว่ โมง จำนวนคำบสอนทั้งหมด 54 ชัว่ โมง ระดับ ปวส.

จุดประสงค์ รำยวิชำ
1. เพื่อให้เข้าใจโครงสร้างและหลักการทางานของไมโครคอนโทรลเลอร์ การใช้ชุดคาสั่ง การ
ประยุกต์ใช้งานไมโครคอนโทรลเลอร์ กบั งานอื่น ๆ
2. เพื่อให้สามารถเขียนโปรแกรมควบคุม วิเคราะห์และทดสอบระบบการทางาน ประยุกต์
ไมโครคอนโทรลเลอร์ กบั งานอื่น ๆ
3. เพื่อให้มีกิจนิสัยในการทางานด้วยความประณี ต รอบคอบและปลอดภัย ตระหนักถึงคุณภาพของ
งาน และมีจริ ยธรรมในงานอาชีพ

มำตรฐำนรำยวิชำ
1. วิเคราะห์และออกแบบวงจรโดยใช้ไมโครคอนโทรลเลอร์
2. เลือกใช้อุปกรณ์หรื อไอซี ได้อย่างเหมาะสมกับระบบควบคุมที่ใช้ไมโครคอนโทรลเลอร์
3. ประกอบและติดตั้ง อุปกรณ์ วงจรไมโครคอนโทรลเลอร์
4. ทดสอบและบารุ งรักษา อุปกรณ์ วงจรไมโครคอนโทรลเลอร์

คำอธิบำยรำยวิชำ
ศึกษาและปฏิบตั ิ โครงสร้างและสถาปัตยกรรมของไมโครคอนโทรลเลอร์ ลักษณะสัญญาณและ
กระบวนการทางาน การรับ-ส่ งข้อมูลกับอุปกรณ์เชื่ อมต่อภายนอก ชุดคาสั่ง และการเขียนโปรแกรม
การวัดและทดสอบวงจรใช้งานของไมโครคอนโทรลเลอร์ การประยุกต์ใช้งานของไมโครคอนโทรลเลอร์

หมำยเหตุ จุดประสงค์รายวิชามาตรฐานรายวิชาและคาอธิบายรายวิชา จากหลักสู ตรประกาศนียบัตร


วิชาชีพชั้นสู งพุทธศักราช 2546 ประเภทวิชาอุตสาหกรรม สาขาวิชาอิเล็กทรอนิกส์
กระทรวงศึกษาธิการ

ตำรำงวิเครำะห์ หลักสู ตรรำยวิชำ


จุดมุ่งหมาย พุทธิพิสัย

ความรู ้ความจา

ความสาคัญ
การนาไปใช้
ความเข้าใจ

ประเมินค่า
สังเคราะห์
วิเคราะห์

ลาดับ
รวม
เนื้อหา 10 10 10 10 10 10 60
ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 5 6 7 4 2 1 25 18
รี จิสเตอร์และหน่วยความจา 5 6 6 4 3 1 25 20
ชุดคาสัง่ และวงจรไทเมอร์/เคาน์เตอร์ 5 6 6 4 3 1 25 19
การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์รัพต์ และว็อชด็อก 5 6 7 4 3 1 26 13
การเขียนโปรแกรมภาษาซี สาหรับไมโครคอนโทรลเลอร์ 5 6 7 4 3 1 26 12
เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 5 6 7 4 3 1 26 14
การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์ 4 5 6 4 3 2 24 25
การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 5 5 6 4 3 2 25 15
การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 4 5 6 4 3 2 24 24
การสร้างวงจรเอาต์พตุ พอร์ต 4 5 6 4 3 2 24 27
การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 5 6 7 5 3 1 27 11
การสร้างวงจรสวิตช์ 4 5 6 4 3 2 24 26
การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 5 6 7 5 3 1 27 10
การเขียนโปรแกรมหน่วงเวลา 5 6 7 6 3 1 28 6
การสร้างวงจรขับลาโพง 4 5 6 4 3 2 24 22
การเขียนโปรแกรมสร้างความถี่เสี ยง 5 6 7 5 3 1 27 9
การสร้างวงจรแสดงผลตัวเลข 7 ส่ วน 5 5 6 4 3 2 25 17
การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วน 5 6 7 7 3 1 29 5
การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่ วน 6 6 7 7 4 2 32 2
การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 5 6 7 5 3 1 27 8
การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 4 5 6 4 3 2 24 21
การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 5 6 7 5 3 1 27 7
การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 4 5 6 4 3 2 24 23
การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 6 6 7 7 4 1 31 3
การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 5 6 7 7 4 1 30 4
การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 5 5 6 4 3 2 25 16
การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 6 6 8 7 4 2 33 1
รวม 131 152 178 130 84 39 714
ลาดับความสาคัญ 3 2 1 4 5 6

ตำรำงวิเครำะห์ หลักสู ตร
พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้
ชื่อหน่วย

รวม
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับ
10 10 10 10 10 10 10 10 80
ไมโครคอนโทรลเลอร์
1.1 ระบบตัวเลขและรหัส 5 6 8 5 4 1 2 1 32 1 0:25 4
1.2 ดิจิตอลพื้นฐาน 5 6 8 4 3 1 2 1 30 2 0:25 4
1.3 โครงสร้างพื้นฐานของระบบ
5 6 6 3 3 1 2 1 27 5 0:20 4
คอมพิวเตอร์
1.4 โครงสร้างไมโครคอนโทรลเลอร์
5 6 7 3 3 1 2 1 28 4 0:25 4
MCS-51
1.5 ส่วนประกอบของวงจร
5 6 7 4 3 1 2 1 29 3 0:25 4
ไมโครคอนโทรลเลอร์
รวม 25 30 36 19 16 5 10 5 146 2 20
ลาดับความสาคัญ 3 2 1 4 5 7 6 8

พฤติกรรม พุทธิพิสยั
ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้

ชื่อหน่วย
รวม

หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 10 10 10 10 10 10 10 10 80


2.1 หน่วยความจาภายใน 5 6 7 5 2 1 1 1 28 2 0:40 6
2.2 รี จิสเตอร์ 5 6 6 4 2 1 1 1 26 3 0:35 6
2.3 การติดต่อกับหน่วยความจาภายนอก 5 6 8 7 3 1 2 1 33 1 0:45 8
รวม 15 18 21 16 7 3 4 3 87 2 20
ลาดับความสาคัญ 4 2 1 3 5 7 6 8

พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้
ชื่อหน่วย

รวม
หน่ วยที่ 3 ชุดคาสัง่ และวงจรไทเมอร์/
10 10 10 10 10 10 10 10 80
เคาน์เตอร์
3.1 ชุดคาสัง่ 5 6 7 3 2 1 2 1 27 2 1:00 10
3.2 วงจรไทเมอร์/เคาน์เตอร์ 5 7 8 5 3 1 2 1 32 1 1:00 10
รวม 10 13 15 8 5 2 4 2 59 2 20
ลาดับความสาคัญ 3 2 1 4 5 7 6 8

พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้

ชื่อหน่วย

รวม
หน่วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม
10 10 10 10 10 10 10 10 80
การอินเตอร์รัพต์ และว็อชด็อก
4.1 การสื่ อสารทางพอร์ตอนุกรม 5 7 9 5 4 1 2 1 34 1 0:45 8
4.2 การขัดจังหวะการทางาน 5 7 9 4 3 1 2 1 32 2 0:45 7
4.3 การใช้งานวงจรว็อชด็อก 3 4 5 3 2 1 2 1 21 3 0:30 5
รวม 13 18 23 12 9 3 6 3 87 2 20
ลาดับความสาคัญ 3 2 1 4 5 7 6 8

พฤติกรรม พุทธิพิสยั
ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้

ชื่อหน่วย
รวม

หน่ วยที่ 5 การเขียนโปรแกรมภาษาซี


10 10 10 10 10 10 10 10 80
สาหรับไมโครคอนโทรลเลอร์
5.1 ขั้นตอนในการพัฒนาโปรแกรม 2 2 3 2 1 1 1 1 13 3 0:20 3
5.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์ 5 7 9 4 3 2 2 1 33 1 0:50 9
5.3 การสร้างฟังก์ชนั่ รองขึ้นใช้เอง 5 6 7 4 3 2 2 1 30 2 0:50 8
รวม 12 15 19 10 7 5 5 3 76 2 20
ลาดับความสาคัญ 3 2 1 4 5 7 6 8

พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้
ชื่อหน่วย

รวม
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางาน
10 10 10 10 10 10 10 10 80
ไมโครคอนโทรลเลอร์
6.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง 5 7 8 6 5 2 2 1 36 1 1:00 10
6.2 เครื่ องมือจาลองการทางาน 3 4 5 4 2 1 2 1 22 2 0:35 6
6.3 เครื่ องมือโหลดไฟล์ลงชิพ
2 3 3 2 1 1 1 1 14 3 0:25 4
ไมโครคอนโทรลเลอร์
รวม 10 14 16 12 8 4 5 3 72 2 20
ลาดับความสาคัญ 3 2 1 4 5 7 6 8

พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้

ชื่อหน่วย
รวม

หน่ วยที่ 7 ใบงานการทดลอง 10 10 10 10 10 10 10 10 80


7.1 การสร้างวงจรภาคจ่ายไฟ 4 5 6 4 3 2 5 1 30 15 1:55 10
7.2 การสร้างวงจรประมวลผลหลัก 5 5 6 4 3 2 5 1 31 14 1:55 10
7.3 การสร้างวงจรโปรแกรมข้อมูลลง
4 5 6 4 3 2 5 1 30 16 1:55 10
ไมโครคอนโทรลเลอร์
7.4 การสร้างวงจรเอาต์พตุ พอร์ต 4 5 6 4 3 2 5 1 30 17 1:55 10
7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ
5 6 7 5 3 1 4 1 32 7 2:00 10
พอร์ตเบื้องต้น
7.6 การสร้างวงจรสวิตช์ 4 5 6 4 3 2 5 1 30 18 1:55 10
7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุต
5 6 7 5 3 1 4 1 32 8 2:00 10
พอร์ตเบื้องต้น
7.8 การเขียนโปรแกรมหน่วงเวลา 5 6 7 6 3 1 3 1 32 6 2:00 10
7.9 การสร้างวงจรขับลาโพง 4 5 6 4 3 2 5 1 30 19 1:55 10
7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 5 6 7 5 3 1 4 1 32 9 2:00 10
7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 5 5 6 4 3 2 5 1 31 12 1:55 10

พฤติกรรม พุทธิพิสยั

ลาดับความสาคัญ

จานวนข้อสอบ
จานวนชัว่ โมง
การนาไปใช้
ความเข้าใจ

ทักษะพิสัย
ประเมินค่า
สังเคราะห์
วิเคราะห์

จิตพิสัย
ความรู ้
ชื่อหน่วย

รวม
7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7
5 6 7 7 3 1 3 1 33 5 2:00 10
ส่วน
7.13 การเขียนโปรแกรมรับสวิตช์เพื่อ
6 6 7 7 4 2 3 1 36 2 2:15 10
แสดงผลตัวเลข 7 ส่วน
7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจร
5 6 7 5 3 1 4 1 32 10 2:00 10
เคาน์เตอร์
7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้า
4 5 6 4 3 2 5 1 30 20 1:55 10
กระแสตรง
7.16 การเขียนโปรแกรมควบคุมมอเตอร์
5 6 7 5 3 1 4 1 32 11 2:00 10
ไฟฟ้ากระแสตรง
7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 4 5 6 4 3 2 5 1 30 21 1:55 10
7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์
6 6 7 7 4 1 3 1 35 3 2:10 10
มอเตอร์
7.19 การเขียนโปรแกรมควบคุมเซอร์โว
5 6 7 7 4 1 3 1 34 4 2:10 10
มอเตอร์
7.20 การสร้างวงจรแสดงผลจอผลึกเหลว
5 5 6 4 3 2 5 1 31 13 1:55 10
(LCD)
7.21 การเขียนโปรแกรมแสดงผลจอผลึก
6 6 8 7 4 2 3 1 37 1 2:15 10
เหลว (LCD)
รวม 101 116 138 106 67 33 88 21 670 42 208
ลาดับความสาคัญ 4 2 1 3 6 7 5 8

สำรบัญ
หน้า
คานา ก
หลักสู ตรประกาศนียบัตรวิชาชีพชั้นสู งพุทธศักราช 2546 ข
หลักสู ตรรายวิชาไมโครคอนโทรลเลอร์ ง
ตารางวิเคราะห์หลักสู ตรรายวิชา จ
ตารางวิเคราะห์หลักสู ตร ฉ
สารบัญ ญ
สารบัญตาราง ฐ
สารบัญรู ป ฒ
บทที่ 1 ควำมรู้ เบื้องต้ นเกีย่ วกับไมโครคอนโทรลเลอร์ 1
1.1 ระบบตัวเลขและรหัส 5
1.2 ดิจิตอลพื้นฐาน 12
1.3 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์ 15
1.4 โครงสร้างไมโครคอนโทรลเลอร์ MCS-51 17
1.5 ส่ วนประกอบของวงจรไมโครคอนโทรลเลอร์ 23
1.6 สรุ ปสาระสาคัญ 26
บทที่ 2 รีจิสเตอร์ และหน่ วยควำมจำ 31
2.1 หน่วยความจาภายใน 35
2.2 รี จิสเตอร์ 36
2.3 การติดต่อกับหน่วยความจาภายนอก 43
2.4 สรุ ปสาระสาคัญ 46
บทที่ 3 ชุ ดคำสั่ ง และวงจรไทเมอร์ /เคำน์ เตอร์ 53
3.1 ชุดคาสัง่ 57
3.2 วงจรไทเมอร์ /เคาน์เตอร์ 64
3.3 สรุ ปสาระสาคัญ 73
บทที่ 4 กำรสื่ อสำรทำงพอร์ ตอนุกรม กำรอินเตอร์ รัพต์ และว็อชด็อก 79
4.1 การสื่ อสารทางพอร์ตอนุกรม (Serial Port Communication) 83
4.2 การขัดจังหวะการทางาน (Interrupt) 96
4.3 การใช้งานวงจรว็อชด็อก (Watch Dog) 100

สำรบัญ (ต่ อ)
หน้า
4.3 สรุ ปสาระสาคัญ 101
บทที่ 5 กำรเขียนโปรแกรมภำษำซีสำหรับไมโครคอนโทรลเลอร์ 107
5.1 ขั้นตอนในการพัฒนาโปรแกรม 111
5.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์ 115
5.3 การสร้างฟังก์ชนั่ รองขึ้นใช้เอง 126
5.4 สรุ ปสาระสาคัญ 131
บทที่ 6 เครื่ องมือช่ วยพัฒนำงำนไมโครคอนโทรลเลอร์ 137
6.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง 141
6.2 เครื่ องมือจาลองการทางาน 150
6.3 เครื่ องมือโหลดไฟล์ลงชิพไมโครคอนโทรลเลอร์ 156
6.4 สรุ ปสาระสาคัญ 159
บทที่ 7 ใบงำนกำรทดลอง 165
ใบงานที่ 7.1 การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์ 167
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 175
ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 185
ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ ต 195
ใบงานที่ 7.5 การใช้งานพอร์ ตทาหน้าที่เป็ นเอาต์พุตพอร์ ตเบื้องต้น 209
ใบงานที่ 7.6 การสร้างวงจรสวิตช์ 223
ใบงานที่ 7.7 การใช้งานพอร์ ตทาหน้าที่เป็ นอินพุตพอร์ ตเบื้องต้น 233
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 249
ใบงานที่ 7.9 การสร้างวงจรขับลาโพง 267
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่ เสี ยง 277
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่ วน 295
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วน 307
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่ วน 325
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 341
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 355

สำรบัญ (ต่ อ)
หน้า
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 369
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 383
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์ มอเตอร์ 395
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์ 409
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 423
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 435
โครงงาน งานวิจยั 459
บรรณานุกรม 467
ภาคผนวก 468

สำรบัญตำรำง
ตารางที่ หน้า
1-1 ความสัมพันธ์ของเลขฐาน 10
1-2 เปรี ยบเทียบคุณสมบัติที่แตกต่างกันในแต่ละเบอร์ 19
4-1 บิตเลือกโหมดการทางานวงจรสื่ อสารทางพอร์ตอนุกรม 86
4-2 ตาแหน่งตอบสนองจากการอินเตอร์ รัพต์จากแหล่งต่าง ๆ 96
4-3 ลาดับความสาคัญของอินเตอร์ รัพต์ชนิ ดต่าง ๆ 98
5-1 ผังงานหลักที่ใช้งานไมโครคอนโทรลเลอร์ 112
5-2 ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์ 116
5-3 ตัวกระทาทางคณิ ตศาสตร์ 118
5-4 ตัวกระทาทางลอจิก 119
5-5 ตัวกระทาการเปรี ยบเทียบ 119
6-1 เปรี ยบเทียบความแตกต่างเฉพาะการโปรแกรมตัวเองของไมโครคอนโทรลเลอร์ 159
7.1-1 ตารางบันทึกแรงดันจุดต่าง ๆ 172
7.2-1 ตารางวัดความต่อเนื่องเพื่อตรวจสอบวงจร 180
7.2-2 ตารางวัดแรงดันเพื่อตรวจสอบวงจร 180
7.3-1 ตารางบันทึกผลการวัดค่าความต้านทานของการเชื่อมต่อ 189
7.4-1 ทดสอบบิต 203
7.5-1 แอดเดรสของแต่พอร์ ตที่สามารถใช้ชื่อแทนได้โดยตรง 212
7.6-1 ตารางบันทึกผลการทดสอบวงจร 229
7.8-1 ค่าที่ใช้กาหนดในรี จิสเตอร์ TH,TL เพื่อให้ได้เวลาที่ตอ้ งการ 255
7.8-2 ตาแหน่งที่ตอบสนองต่อการอินเตอร์ รัพต์ 256
7.8-3 สถานะการทางานของ LED ในงานที่มอบหมาย 262
7.10-1 ความถี่ในแต่ละตัวโน้ต 284
7.11-1 ตารางตรวจสอบการทางานของวงจรแสดงผลตัวเลข 7 ส่ วน 302
7.12-1 ข้อมูลที่ส่งออกพอร์ ตเพื่อให้ติดสว่างเป็ นตัวเลข 314
7.15-1 การควบคุมมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge แบบใช้สวิตช์ 359
7.16-1 ลอจิกที่ใช้การควบคุมทางานของไอซีขบั มอเตอร์ไฟฟ้ากระแสตรง 372
7.17-1 ตารางทดสอบการทางานของวงจรขับสเต็ปเปอร์มอเตอร์ 390
7.18-1 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบเต็มสเต็ป 1 เฟส 398

สำรบัญตำรำง (ต่ อ)
ตารางที่ หน้า
7.18-2 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบเต็มสเต็ป 2 เฟส 399
7.18-3 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบครึ่ งสเต็ป 399
7.19-1 มุมของการเคลื่อนที่ของเซอร์โวมอเตอร์ในงานที่มอบหมาย 420
7.20-1 รายละเอียดการทางานของขาต่าง ๆ ของ LCD แบบ Character LCD module 426
7.21-1 หน้าที่ของขาต่าง ๆ ของจอผลึกเหลว 441
7.21-2 ผลการแสดงจากใช้คาสัง่ โหมดการป้ อนข้อมูล 443
7.21-3 ค่าลอจิกที่ใช้ควบคุมการเลื่อนเคอร์ เซอร์ 444

สำรบัญรูป
รู ปที่ หน้า
1-1 ระดับแรงดันของลอจิก 13
1-2 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์ 15
1-3 ไมโครคอนโทรลเลอร์ขนาด 40 ขาตัวถังแบบ DIP 19
1-4 โครงสร้างและสถาปัตยกรรมของไมโครคอนโทรลเลอร์ MCS-51 เบอร์ AT89S52 20
1-5 การจัดขาของไมโครคอนโทรลเลอร์ เบอร์ AT89S52 21
1-6 วงจรไฟเลี้ยงขนาด 5 โวลต์แบบใช้หม้อแปลงไฟฟ้ากระแสสลับ 24
1-7 วงจรไฟเลี้ยงขนาด 5 โวลต์ที่ใช้แหล่งจ่ายไฟฟ้ากระแสตรงภายนอก 24
1-8 วงจรรี เซตที่ใช้คุณสมบัติของ RC Time Constant 24
1-9 วงจรสัญญาณนาฬิกา 25
1-10 การกาหนดลอจิกให้ขา EA และพื้นที่ใช้งานเมื่อกาหนดลอจิก 1 หรื อลอจิก 0 26
2-1 การจัดสรรหน่วยความจาภายใน 36
2-2 รายละเอียดของหน่วยความจาภายในใช้งานทัว่ ไป 37
2-3 การจัดสรรรี จิสเตอร์ใช้งานพิเศษ 38
2-4 การใช้งานพอร์ต 1 เป็ นเอาท์พุทพอร์ ต 39
2-5 แสดงการใช้งานพอร์ ต 0 เป็ นอินพุทพอร์ต 39
2-6 ตัวอย่างการใช้งานหน่วยความจาสแต็ก 40
2-7 วงจรเชื่อมต่อหน่วยความจาเก็บโปรแกรม 44
2-8 วงจรเชื่อมต่อหน่วยความจาเก็บข้อมูล 45
2-9 วงจรเชื่อมต่อหน่วยความจาทั้งสองประเภท 45
3-1 ภาษาเครื่ องของไมโครคอนโทรลเลอร์ MCS-51 ส่ งงานออกพอร์ ต 0 (ไฟวิง่ ไบนารี่ ) 57
3-2 บริ เวณหน่วยความจาที่สามารถเข้าถึงข้อมูลโดยตรง 59
3-3 บริ เวณหน่วยความจาที่สามารถเข้าถึงข้อมูลโดยทางอ้อม 59
3-4 วงจรหารความถี่โดยใช้ไอซีนบั เลขไบนารี่ 67
3-5 โครงสร้างในโหมด 0 ของวงจรไทเมอร์เคาน์เตอร์ 1 67
3-6 โครงสร้างในโหมด 0 ของวงจรไทเมอร์เคาน์เตอร์ 1 68
3-7 ความถี่ในแต่ละจุดสาหรับโหมด 0 ของวงจรไทเมอร์ เคาน์เตอร์ 1 68
3-8 โครงสร้างในโหมด 1 ของวงจรไทเมอร์เคาน์เตอร์ 1 69
3-9 โครงสร้างในโหมด 1 ของวงจรไทเมอร์เคาน์เตอร์ 1 70

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
3-10 ความถี่ในแต่ละจุดสาหรับโหมด 1 ของวงจรไทเมอร์ เคาน์เตอร์ 1 70
3-11 โครงสร้างในโหมด 2 ของวงจรไทเมอร์ เคาน์เตอร์ 1 72
3-12 โครงสร้างในโหมด 3 73
4-1 รู ปแบบการส่ งข้อมูลแบบซิ งโครนัส 83
4-2 ลักษณะของข้อมูลในการสื่ อสารแบบอะซิงโครนัส 84
4-3 ลักษณะการสื่ อสารอนุกรม 85
4-4 การทางานในโหมด 0 88
4-5 การทางานในโหมด 1 และ 3 89
4-6 สัญญาณ Baud rate แต่ละจุด 90
4-7 การทางานในโหมด 2 92
4-8 แหล่งจ่ายสัญญาณบอด (a) โหมด 0 (b) โหมด 2 (c)โหมด 1 และโหมด 3 93
4-9 โครงสร้างเสมือนของการควบคุมบิตตอบสนองการอินเตอร์ รัพต์ 98
4-10 การกาหนดการรับรู ้ลกั ษณะของสัญญาณอินเตอร์ รัพต์ 100
5-1 โครงสร้างภาษาซี 116
6-1 หน้าต่างโปรแกรมเมื่อเริ่ มโปรแกรม 141
6-2 หน้าต่างของโปรแกรม Keil µVision4 142
6-3 ขั้นตอนในการสร้างโปรเจคไฟล์ 142
6-4 ขั้นตอนการสร้างโฟลเดอร์ ใหม่ 142
6-5 ขั้นตอนการตั้งชื่อโปรเจคไฟล์ 143
6-6 ขั้นตอนการเลือกเบอร์ ไมโครคอนโทรลเลอร์ 143
6-7 หน้าต่างที่ปรากฏหลังเลือกเบอร์ ไมโครคอนโทรลเลอร์ 143
6-8 การสร้างไฟล์เอกสารใหม่เพื่อเขียนโปรแกรม 144
6-9 ผลที่ได้จากการสร้างไฟล์ 144
6-10 ขั้นตอนการบันทึกไฟล์ 144
6-11 ตั้งชื่อไฟล์ 145
6-12 ขั้นตอนการเพิ่มไฟล์ภาษาซี ใน Source group 145
6-13 การเลือกไฟล์เพื่อเพิ่มใน Source group 145
6-14 รายชื่อไฟล์ที่ถูกเพิ่มเข้าไปใน Source Group1 146

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
6-15 ขั้นตอนการตั้งค่า Option 146
6-16 หน้าต่างการแก้ค่าความถี่คริ สตอล 146
6-17 หน้าต่างที่ใช้เลือกการสร้างไฟล์ภาษาเครื่ อง 147
6-18 หน้าต่างเพื่อใช้เขียนโปรแกรม 147
6-19 ปุ่ มไอคอนที่ใช้ในการแปลงเป็ นภาษาเครื่ อง 148
6-20 ผลที่ได้เมื่อแปลงแล้วผลที่ได้ไม่มีขอ้ ผิดพลาด 148
6-21 ผลที่ได้เมื่อแปลงแล้วผลที่ได้มีขอ้ ผิดพลาด 148
6-22 ปุ่ มเพื่อใช้ทดสอบโปรแกรม 149
6-23 ปุ่ มเพื่อใช้ในการทดสอบโปรแกรม 149
6-24 แสดงการเลือกแสดงพอร์ต 150
6-25 หน้าต่างของโปรแกรม Proteus 151
6-26 แถบเครื่ องมือใช้งาน 151
6-27 แถบเครื่ องมือใช้ปรับมุมอุปกรณ์ 152
6-28 ปุ่ มควบคุมการจาลองการพฤติกรรม 152
6-29 การเลือกอุปกรณ์ 152
6-30 รายการอุปกรณ์ 153
6-31 รายการอุปกรณ์ที่ได้รับการเลือก 153
6-32 การวางอุปกรณ์ 154
6-33 ขั้นตอนการเชื่อมต่อสาย 155
6-34 วงจรเมื่อต่อเชื่อมสายสัญญาณเสร็ จแล้ว 155
6-35 หน้าต่างการโหลดไฟล์และการแก้ค่าความถี่ 155
6-36 การจาลองพฤติกรรม 156
6-37 วงจร STK200 วงจรโปรแกรมข้อมูลลงชิพผ่านทางพอร์ ต LPT 157
6-38 โปรแกรม ISP Flash Programmer 3.0a 157
6-39 หน้าต่างหากติดต่อกับวงจรไมโครคอนโทรลเลอร์ ไม่ได้ 158
6-40 หน้าต่างหากติดต่อกับวงจรไมโครคอนโทรลเลอร์ ได้ 158
6-41 วงจรสื่ อสารทางพอร์ตอนุกรมที่ใช้โปรแกรมข้อมูลลงชิพ 158
7.1-1 วงจรภาคจ่ายไฟ 170

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.1-2 วงจรภาคจ่ายไฟที่ใช้สร้าง 171
7.1-3 แนวการจัดวางและแนวการบัดกรี ของวงจรภาคจ่ายไฟ 171
7.2-1 วงจรไมโครคอนโทรลเลอร์ 178
7.2-2 วงจรไมโครคอนโทรลเลอร์ที่ใช้สร้าง 179
7.2-3 แนวการจัดวางและแนวการบัดกรี ของวงจรไมโครคอนโทรลเลอร์ 179
7.3-1 วงจรเชื่อมต่อคอมพิวเตอร์ สาหรับโปรแกรมตัวเองแบบ STK200 188
7.3-2 แนวการจัดวางและแนวการบัดกรี ของวงจรภาคจ่ายไฟ 188
7.3-3 (a) ผลเมื่อติดต่อได้ (b) ผลเมื่อติดต่อไม่ได้ 190
7.3-4 ข้อมูลในบัฟเฟอร์ที่ได้จากการกดปุ่ ม Disp Buffer 190
7.3-5 หน้าต่างการป้ อนข้อมูลโดยตรงลงในบัฟเฟอร์ 190
7.3-6 ผลจากการป้อนข้อมูลโดยตรงลงในบัฟเฟอร์ (สองแถวแรกจะเป็ น 00) 191
7.3-7 (a) สามารถโปรแกรมได้ (b) เขียนโปรแกรมสาเร็ จ 191
7.3-8 (a) สามารถโปรแกรมได้ (b) เขียนโปรแกรมไม่สาเร็ จ 191
7.3-9 ไม่สามารถติดต่อเพื่อทาการโปรแกรมได้ 192
7.4-1 แสดงโครงสร้างพอร์ ตของไมโครคอนโทรลเลอร์ MCS-51 198
7.4-2 แสดงวงจรไบอัส LED เบื้องต้น 199
7.4-3 แสดงวงจรขับที่ใช้ไอซี เบอร์ 74HC541 200
7.4-4 แสดงวงจรขับที่ใช้ไอซี เบอร์ 74HC573 200
7.4-5 วงจรวงจรสมบูรณ์ที่ใช้ทาการทดลอง 201
7.4-6 ส่ วนของวงจรหลักและส่ วนของวงจรขับ LED ซึ่ งแยกกับคนละแผ่นวงจรพิมพ์ 201
7.4-7 (a) วงจรขับ LED (b) แนวทางจัดวางบนแผ่นวงจรต่อพ่วง 202
7.4-8 การต่อเชื่ อมกับวงจรหลักเพื่อทดสอบทางฮาร์ ตแวร์ 203
7.4-9 ต่อเชื่อมวงจรเอาต์พุตพอร์ ตกับวงจรหลักเพื่อทดลองทางซอฟท์แวร์ 204
7.5-1 วงจรควบคุมรี เลย์ 212
7.5-2 วงจรที่ใช้เชื่อมต่อระหว่างไมโครคอนโทรลเลอร์ กบั LED 213
7.5-3 การต่อวงจรเพื่อจาลองพฤติกรรมใน Proteus 214
7.5-4 วงจรจริ งที่ใช้ทดลอง 214
7.5-5 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย 220

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.6-1 วงจรสวิตช์ที่ใช้เชื่ อมต่อกับไมโครคอนโทรลเลอร์ และสัญญาณที่เกิดขึ้น 226
7.6-2 วงจรสมบรู ณ์สาหรับการทดลองเขียนโปรแกรมรับสวิตช์ 227
7.6-3 วงจรสวิตช์สร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.4 227
7.6-4 (a) วงจรสวิตช์ (b) แนวทางจัดวางโดยใช้แผ่นปริ้ นวงจรเดิมของใบงานที่ 7.4 228
7.6-3 การต่อเชื่ อวงจรไมโครคอนโทรลเลอร์ กบั วงจรสวิตช์ 229
7.7-1 วงจรสวิตช์ที่ต่อเข้ากับพอร์ ตไมโครคอนโทรลเลอร์ 236
7.7-2 วงจรที่ใช้ในการทดลอง 238
7.7-3 แสดงการต่อวงจรเพื่อจาลองพฤติกรรมใน Proteus 239
7.7-4 วงจรจริ งที่ใช้ทดลองในใบงาน 7.7 240
7.7-5 วงจรที่ใช้ในการทดลอง 246
7.8-1 โครงสร้างในโหมด 1 ของวงจรไทเมอร์ /เคาน์เตอร์ 1 253
7.8-2 ความถี่ในแต่ละจุดสาหรับโหมด 0 ของวงจรไทเมอร์ /เคาน์เตอร์ 1 253
7.8-3 วงจรที่ใช้ในการทดลอง 257
7.8-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 258
7.8-5 วงจรจริ งที่ใช้ทดลอง 258
7.8-6 ตาแหน่งการจัดวางของ LED 262
7.8-7 วงจรที่ใช้ในการทดลอง 263
7.9-1 แสดงผลของการรวมกันของคลื่นซายน์ทาให้เกิดรู ปคลื่นสี่ เหลี่ยม 270
7.9-2 แสดงวงจรสวิตช์ที่ใช้เชื่อมต่อกับไมโครคอนโทรลเลอร์ 270
7.9-3 วงจรสมบูรณ์ที่ใช้ในการทดลองการสร้างเสี ยง 271
7.9-4 วงจรขับลาโพงสร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.6 271
7.9-5 (a) วงจรขับลาโพง (b) แนวทางจัดวางโดยใช้แผ่นปริ้ นวงจรเดิมของใบงานที่ 7.6 272
7.9-6 การต่อเชื่ อมวงจรไมโครคอนโทรลเลอร์ กบั วงจรขับลาโพง 273
7.10-1 คาบเวลาของรู ปคลื่นของสัญญาณที่ความถี่ 1 kHz 280
7.10-2 ตัวอักษรแทนชื่อของระดับเสี ยงบนคียข์ องเปี ยโน 282
7.10-3 กลุ่มเสี ยงบนคียข์ องเปี ยโน 283
7.10-4 วงจรสมบูรณ์ที่ใช้ทดลองการเขียนโปรแกรมสร้างเสี ยง 285
7.10-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 286

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.10-6 วงจรจริ งที่ใช้ทดลอง 286
7.10-7 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย 292
7.11-1 โครงสร้างภายในของ LED 7 Segment (a) แบบแอโนดร่ วม (b) แบบแคโทด 298
ร่ วม
7.11-2 ชื่อเรี ยกของส่ วนต่าง ๆ และตาแหน่งการจัดขาของ LED 7 Segment แบบเดี่ยว 298
และคู่
7.11-3 (a) โครงสร้างภายในของ 7 Segment เบอร์ TOD-3261AG-B1 (b) ตาแหน่ง 298
หลัก (digit)
7.11-4 วงจรสมบรู ณ์สาหรับการทดลอง 299
7.11-5 วงจรแสดงผลตัวเลข 7 ส่ วนสร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.4 299
7.11-6 (a) วงจรแสดงผลตัวเลข 7 ส่ วน (b) แนวทางจัดวางใช้แผ่นปริ้ นวงจรเดิมของ 300
ใบงานที่ 7.4
7.11-7 การต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ ดแวร์ 301
7.11-8 ต่อเชื่อมวงจรแสดงผลตัวเลขกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดลองทาง 302
ซอฟท์แวร์
7.12-1 วงจรขับตัวเลข 7 ส่ วนแบบ 1 หลัก 310
7.12-2 โครงสร้างภายในของตัวแสดงผลตัวเลข 7 ส่ วนแบบมัลติเพล็ก 311
7.12-3 วงจรขับสาหรับแสดงผลจากตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบมัลติเพล็ก 312
แบบ 2 หลัก
7.12-4 แสดงเส้นทางของสัญญาณเพื่อแสดงเลข “1”ในหลักที่ 1 (ขั้นตอนที่ 2-4) 313
7.12-5 แสดงเส้นทางของสัญญาณเพื่อแสดงเลข “2”ในหลักที่ 2 (ขั้นตอนที่ 6-8) 313
7.12-6 บิตเชื่ อมต่อกับขาของตัวแสดงผลตัวเลข 7 ส่ วน 314
7.12-7 วงจรสมบูรณ์ที่ใช้ทดลองการเขียนโปรแกรมแสดงผล 315
7.12-8 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 316
7.12-9 วงจรจริ งที่ใช้ทดลอง 316
7.12-10 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย 321
7.13-1 วงจรสมบูรณ์ที่ใช้ทดลอง 328
7.13-2 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 329

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.13-3 วงจรจริ งที่ใช้ทดลอง 330
7.13-4 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย 337
7.14-1 โครงสร้างในโหมด 1 ของวงจรเคาน์เตอร์ 1 344
7.14-2 วงจรสมบูรณ์ที่ใช้ทดลอง 345
7.14-3 การพ่วงสายจากสวิตช์ S1 เข้ามายังขา T1 345
7.14-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 346
7.14-5 วงจรจริ งที่ใช้ทดลอง 347
7.14-6 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย 351
7.15-1 ตัวอย่างมอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กแบบปกติ 358
7.15-2 ตัวอย่างมอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กแบบที่มีชุดเฟื องทดรอบ 358
7.15-3 วงจรขับแบบ H-Bridge 359
7.15-4 การควบคุมการหมุนของมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge 359
7.15-5 วงจรขับมอเตอร์แบบ H-Bridge ที่ใช้รีเลย์ 360
7.15-6 การควบคุมการหมุนของมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge ที่ใช้รีเลย์ 360
7.15-7 โครงสร้างไอซีขบั มอเตอร์กระแสตรงขนาดเล็กเบอร์ L293D 360
7.15-8 วงจรสมบรู ณ์สาหรับการทดลอง 361
7.15-9 ส่ วนของวงจรหลักและวงจรขับมอเตอร์ ไฟฟ้ากระแสตรงที่แยกคนละ 361
แผ่นวงจรพิมพ์
7.15-10 (a) วงจรขับมอเตอร์ ไฟฟ้ากระแสตรง (b) แนวทางจัดวาง 362
7.15-11 การต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ ดแวร์ 363
7.15-12 ต่อเชื่อมวงจรขับมอเตอร์ ไฟฟ้ากระแสตรงกับวงจรไมโครคอนโทรลเลอร์ 364
7.16-1 วงจรขับมอเตอร์ไฟฟ้ากระแสตรงที่ใช้ไอซี L293 372
7.16-2 ผลที่ได้จากการใช้ PWM ในการควมคุมความเร็ วมอเตอร์ 373
7.16-3 วงจรสมบรู ณ์สาหรับการทดลอง 373
7.16-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 374
7.16-5 วงจรจริ งที่ใช้ทดลอง 375
7.16-6 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย 379
7.17-1 โครงสร้างสเต็ปเปอร์ Bipolar และ Unipolar 386

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.17-2 แสดงวงจรขับสเต็ปเปอร์มอเตอร์ที่ใช้ทรานซิสเตอร์ 387
7.17-3 วงจรขับสเต็ปเปอร์มอเตอร์แบบใช้ไอซี ULN2803 387
7.17-4 วงจรสมบรู ณ์สาหรับการทดลอง 388
7.17-5 ส่ วนของวงจรหลักและวงจรขับสเต็ปเปอร์ มอเตอร์ ที่แยกคนละแผ่นวงจรพิมพ์ 388
7.17-6 (a) วงจรขับสเต็ปเปอร์มอเตอร์ (b) แนวทางจัดวาง 389
7.17-7 การต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ ดแวร์ 390
7.17-8 ต่อเชื่อมวงจรขับสเต็ปเปอร์ มอเตอร์ กบั วงจรไมโครคอนโทรลเลอร์ 391
7.18-1 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบเต็มสเต็ป 1 เฟส 398
7.18-2 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบเต็มสเต็ป 2 เฟส 398
7.18-3 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบครึ่ งสเต็ป 399
7.18-4 วงจรสมบรู ณ์สาหรับการทดลอง 400
7.18-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 400
7.18-6 วงจรจริ งที่ใช้ทดลอง 401
7.18-7 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย 405
7.18-1 ภายในเซอร์โวมอเตอร์ 412
7.19-2 คอนเน็คเตอร์ เซอร์ โวมอเตอร์ ของแต่ละบริ ษทั 2 412
7.19-3 สัญญาณพัลส์ที่ใช้ควบคุมเซอร์ โวมอเตอร์ 413
7.19-4 วงจรสมบรู ณ์สาหรับการทดลอง 414
7.19-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 414
7.19-6 วงจรจริ งที่ใช้ทดลอง 415
7.19-7 วงจรสมบรู ณ์สาหรับการทดลองที่ 1 415
7.19-8 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย 420
7.20-1 วงจรสมบรู ณ์สาหรับการทดลอง 427
7.20-2 ส่ วนของวงจรหลักและวงจรแสดงผลจอ LCD ที่แยกคนละแผ่นวงจรพิมพ์ 427
7.20-3 (a) วงจรแสดงผลจอผลึกเหลว (LCD) (b) แนวทางจัดวาง 428
7.20-4 การต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ ดแวร์ 429
7.20-5 ต่อเชื่อมวงจรแสดงผลจอ LCD กับวงจรไมโครคอนโทรลเลอร์ 429
7.21-1 แสดงโครงสร้างภายในตัวควบคุม HD4478 438

สำรบัญรูป (ต่ อ)
รู ปที่ หน้า
7.21-2 แสดงแอดเดรส DDRAM ของ LCD 439
7.21-3 แอดเดรส DDRAM ของ LCD ขนาด 16x1 เมื่อเซตให้แสดงแดงแบบ 1 แถว 439
7.21-4 แอดเดรส DDRAM ของ LCD ขนาด 16x1 เมื่อเซตให้แสดงแดงแบบ 2 แถว 439
7.21-5 แอดเดรส DDRAM ของ LCD ขนาด 16x2 439
7.21-6 แอดเดรส DDRAM ของ LCD ขนาด 20x2 440
7.21-7 แอดเดรส DDRAM ของ LCD ขนาด 16x4 440
7.21-8 ผลที่ได้เมื่อป้ อนข้อมูลเกินบรรทัด ของ LCD ขนาด 16x4 440
7.21-9 แอดเดรส DDRAM ของ LCD ขนาด 20x4 441
7.21-10 ผลที่ได้เมื่อป้ อนข้อมูลเกินบรรทัด ของ LCD ขนาด 20x4 441
7.21-11 ผังงานการ Initialization ของการเชื่ อมต่อแบบ 8 บิต 446
7.21-12 ผังงานการ Initialization ของการเชื่ อมต่อแบบ 4 บิต 447
7.21-13 วงจรสมบรู ณ์สาหรับการทดลอง 448
7.21-14 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus 448
7.21-15 วงจรจริ งที่ใช้ทดลอง 449
7.21-16 วงจรสมบูรณ์ที่มีการเชื่ อมต่อแบบ 4 บิตที่ใช้ทดลอง 453
7.21-17 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย 456
หน่ วยที่ 1
ความรู้ เบื้องต้ นเกีย่ วกับไมโครคอนโทรลเลอร์
หัวข้อเรื่ อง
1.1 ระบบตัวเลขและรหัส
1.2 ดิจิตอลพื้นฐาน
1.3 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์
1.4 โครงสร้างไมโครคอนโทรลเลอร์ MCS-51
1.5 ส่ วนประกอบของวงจรไมโครคอนโทรลเลอร์
สาระสาคัญ
ความรู ้ เบื้ องต้นเกี่ ย วกับ ไมโครคอนโทรลเลอร์ ใ นบทนี้ ก ล่ า วถึ ง ระบบตัวเลขที่ เกี่ ย วข้องกับ
ไมโครคอนโทรลเลอร์ มีหวั ข้อความรู ้ดา้ นดิ จิตอลพื้นฐานที่มีใช้งานในไมโครคอนโทรลเลอร์ ตลอดถึ ง
โครงสร้างของไมโครคอนโทรลเลอร์ในตระกูล MCS-51 และวงจรประกอบต่าง ๆ
สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้เกี่ยวกับโครงสร้างของไมโครคอนโทรลเลอร์ และวงจรประกอบต่าง ๆ
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับระบบตัวเลขและดิจิตอลพื้นฐาน
2. เพื่อให้มีความรู ้เกี่ยวกับโครงสร้างพื้นฐานของระบบคอมพิวเตอร์
3. เพื่อให้มีความรู ้เกี่ยวกับโครงสร้างไมโครคอนโทรลเลอร์ MCS-51
4. เพื่อให้มีความรู ้เกี่ยวกับส่ วนประกอบของวงจรไมโครคอนโทรลเลอร์
จุดประสงค์ เชิ งพฤติกรรม
1. บอกวิธีการแปลงเลขฐานในระบบตัวเลขและดิจิตอลพื้นฐานได้
2. บอกเกี่ยวกับโครงสร้างพื้นฐานของระบบคอมพิวเตอร์ ได้
3. บอกโครงสร้างไมโครคอนโทรลเลอร์ MCS-51 ได้
4. บอกการทางานของส่ วนประกอบต่าง ๆของวงจรไมโครคอนโทรลเลอร์ ได้
5. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
2 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 1
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ตัวเลข 1001012 มีค่าเท่ากับเลขฐานสิ บในข้อ 5. ตัวเลข 876543 ตัวเลข 7 มีน้ าหนักตัวเลขใน
ใด เลขฐานสิ บมีค่าเท่าใด
ก. 13 ก. 7×10
ข. 25 ข. 7×100
ค. 37 ค. 7×1000
ง. 49 ง. 7×10000
จ. 51 จ. 7×100000
2. ตัวเลข 101001012 มีค่าเท่ากับเลขฐานสิ บหก 6. หากวัดแรงดันที่ขาไอซี (TTL) ขาหนึ่งได้
ในข้อใด แรงดัน 4.75 โวลต์ค่าที่เป็ นดิจิตอลจะเป็ น
ก. A5 ลอจิกใด
ข. B5 ก. 0
ค. C5 ข. 1
ง. D5 ค. High impedance
จ. E5 ง. Low impedance
3. ตัวเลข DE16 มีค่าเท่ากับเลขฐานสองในข้อใด จ. Unknown logic
ก. 1100 1100 7. หากอินพุตขาใดขาหนึ่งหรื อทั้งสองมีค่าเป็ น
ข. 1101 1011 ลอจิก 0 เอาต์พุตจะเป็ นลอจิก 0 เกตชนิดนั้น
ค. 1010 1110 คือชนิดใด
ง. 1011 1100 ก. AND gate
จ. 1101 1110 ข. OR gate
4. ตัวเลข 45 ซึ่งเป็ นเลขฐานสิ บเมื่อเป็ น ค. XOR gate
เลขฐานสองจะมีค่าเท่ากับข้อใด ง. NOT gate
ก. 101101 จ. NAND gate
ข. 110010 8. หากอินพุตขาใดขาหนึ่งหรื อทั้งสองมีค่าเป็ น
ค. 101010 ลอจิก 1 เอาต์พุตจะเป็ นลอจิก 1 เกตชนิดนั้น
ง. 100110 คือชนิดใด
จ. 101011 ก. AND gate
ข. OR gate
ค. XOR gate
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 3
ง. NOT gate 13. จานวนพอร์ ตของไมโครคอนโทรลเลอร์ใน
จ. NAND gate ตระกูล MCS-51 (ที่มี 40 ขา) มีกี่พอร์ ต
9. ข้อใดเป็ นส่ วนประกอบของคอมพิวเตอร์ ที่มี ก. 1 พอร์ ต
หน้าที่แปลงพลังงานอื่น ๆ เป็ นไฟฟ้าที่เป็ น ข. 2 พอร์ ต
ระดับลอจิกดิจิตอลเพื่อส่ งให้กบั หน่วย ค. 4 พอร์ ต
ประมวลผลกลาง ง. 8 พอร์ ต
ก. อินพุต จ. 16 พอร์ ต
ข. เอาต์พุต 14. รอบการทางาน 1 Machine cycle ของ
ค. หน่วยความจา ไมโครคอนโทรลเลอร์ ตระกูล MCS-51 จะใช้
ง. หน่วยควบคุม สัญญาณนาฬิกาจานวนเท่าใด
จ. หน่วยประมวลผล ก. 1 Clock
10. ข้อใดเป็ นหน่วยความจาชนิดที่ตอ้ งใช้แสง ข. 4 Clock
UV ในการลบข้อมูล ค. 6 Clock
ก. PROM ง. 8 Clock
ข. EPROM จ. 12 Clock
ค. E2PROM 15. ไมโครคอนโทรลเลอร์ในตระกูล MCS-51
ง. Solar memory เบอร์ใดที่สามารถโปรแกรมตัวเองได้
จ. Light memory ก. 8052
11. บริ ษทั ใดเป็ นผูพ้ ฒั นาไมโครคอนโทรลเลอร์ ข. AT89C52
ในตระกูล MCS-51 ค. AT89S52
ก. AMD ง. AT87C52
ข. Atmel จ. AT87S52
ค. Intel 16. การรี เซตซีพียจู ะต้องรับลอจิกหนึ่งที่ขารี เซต
ง. Microchip เป็ นเวลาไม่นอ้ ยกว่าเท่าใด
จ. Phillips ก. 1 แมชชีนไซเคิล
12. ไมโครคอนโทรลเลอร์ เบอร์ ที่นกั ศึกษาใช้ ข. 2 แมชชีนไซเคิล
ทดลองซึ่ งขึ้นต้นด้วย AT89 เป็ นของบริ ษทั ใด ค. 4 แมชชีนไซเคิล
ก. AMD ง. 8 แมชชีนไซเคิล
ข. Atmel จ. 10 แมชชีนไซเคิล
ค. Intel
ง. Microchip
จ. Phillips
4 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

17. พอร์ต 0 ของไมโครคอนโทรลเลอร์ใน 19. ขาใดที่ใช้บงั คับให้ไมโครคอนโทรลเลอร์


ตระกูล MCS-51 (ที่มี 40 ขา) มีกี่บิต อ่านคาสั่งจากหน่วยความจาเก็บโปรแกรม
ก. 2 บิต ภายใน
ข. 4 บิต ก. PSEN
ค. 6 บิต ข. ALE
ง. 8 บิต ค. RST
จ. 16 บิต ง. EA
18. ตัวเก็บประจุที่ต่อกับขา XTAL ลงกราวด์เมื่อ จ. CS
ใช้กบั คริ สตอลควรใช้ค่าเท่าใด 20. ไอซี เบอร์ใดที่ใช้ในการรักษาระดับแรงดันใน
ก. 10pF±10pF ภาคจ่ายไฟให้ได้ 5 โวลต์
ข. 20pF±10pF ก. 7505
ค. 30pF±10pF ข. 7605
ง. 40pF±10pF ค. 7705
จ. 50pF±10pF ง. 7805
จ. 7905
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 5

ความรู้ เบื้องต้ นเกีย่ วกับไมโครคอนโทรลเลอร์


ไมโครคอนโทรลเลอร์ ( Microcontroller) มาจากคา 2 คา คาหนึ่ งคือ ไมโคร (Micro) หมายถึ ง
ขนาดเล็ ก และค าว่ า คอนโทรลเลอร์ (Controller) หมายถึ ง ตัว ควบคุ ม หรื อ อุ ป กรณ์ ค วบคุ ม ดัง นั้ น
ไมโครคอนโทรลเลอร์ จึงหมายถึ งอุปกรณ์ ควบคุ มขนาดเล็ก แต่ในตัวอุ ปกรณ์ ควบคุ มขนาดเล็กนี้ ได้
บรรจุ ค วามสามารถที่ ค ล้า ยคลึ ง กับ ระบบคอมพิ วเตอร์ ที่ ค นโดยส่ ว นใหญ่ ค ้น เคย กล่ า วคื อ ภายใน
ไมโครคอนโทรลเลอร์ ได้รวมเอาหน่วยประมวลผลหลัก หน่วยความจา และพอร์ ต ซึ่ งเป็ นส่ วนประกอบ
หลักสาคัญของระบบคอมพิวเตอร์ เข้าไว้ดว้ ยกันโดยทาการบรรจุเข้าไว้ในตัวถังเดี ยวกัน ความแตกต่าง
ของไมโครคอนโทรลเลอร์ กบั ไมโครโปรเซสเซอร์ คือไมโครคอนโทรลเลอร์ น้ นั มีความสมบูรณ์ภายใน
ตัวของมันเอง คื อ มี ส่วนประกอบต่ า ง ๆ ครบถ้วน ส่ วนไมโครโปรเซสเซอร์ น้ ันต้องท างานร่ วมกับ
อุปกรณ์ขา้ งเคียงที่เชื่อมต่อจากภายนอก เช่น หน่วยความจา (Memory) หน่วยอินพุตเอาต์พุต (I/O) ฯลฯ 1
เพื่อให้เข้าใจการทางานของไมโครคอนโทรลเลอร์ พร้ อมทั้งวงจรต่อพ่วงแบบต่าง ๆ สิ่ งแรกที่
จะต้องทาความเข้าใจก่อนที่จะเข้าเรื่ องไมโครคอนโทรลเลอร์ จะต้องเข้าใจเกี่ ยวกับระบบตัวเลข ระบบ
การเข้ารหัส ระบบลอจิก เกต โดยระบบทั้งหมดเป็ นการทางานภายในคอมพิวเตอร์ เนื้ อหาบทนี้ จะเป็ น
พื้นฐานในการเรี ยนรู ้ และทาความเข้าใจเกี่ยวกับไมโครคอนโทรลเลอร์ ในบทถัดไป

1.1 ระบบตัวเลขและรหัส

แนวคิ ดเกี่ ยวกับจานวนและการนับมี มาแต่โบราณ มนุ ษย์สามารถนับจานวนสิ่ งต่าง ๆ โดยมี


ความคิดว่าเมื่อเพิ่มสิ่ งใดสิ่ งใด ก็จะได้สิ่งนั้น “มากขึ้น” และถ้าเอาสิ่ งนั้นออกไปจะทาให้สิ่งนั้น “ลดลง”
ต่อเมื่อสังคมเจริ ญขึ้นก็ใช้วิธีการจับคู่สิ่งนั้น เช่ น อาจใช้นิ้วมือแทนสิ่ งเหล่านั้น เช่ น หนึ่ งนิ้ วแทน สัตว์
หนึ่งตัว และอาจใช้กอ้ นหิ นบันทึกจานวนสิ่ งนั้น หรื ออาจใช้ขีดเขียนบนพื้นดิน หรื อสลักบนต้นไม้ ต่อมา
จึงใช้สัญลักษณ์ แทนจานวนขึ้น และจะพบว่าการนับ และการเขียนในสมัยโบราณนั้นจะไม่มี “ศูนย์”
มีหลักฐานยืนยันเมื่อปี ค.ศ. ที่ 9 ใช้เรี ยกเป็ นตัวเลขอาระบิกเป็ นชื่ อที่เรี ยกตัวเลขที่ประดิษฐ์ข้ ึน
ขึ้ นในประเทศอิ นเดี ย ยุคโบราณ โดยนักคณิ ตศาสตร์ ช าวอิ นเดี ยนประมาณ 500 ปี ก่ อนคริ สตศักราช
จากนั้นจึงไปถ่ายทอดไปยังประเทศในแถบยุโรปในยุคกลางทั้ง ๆ ที่เริ่ มต้นที่ประเทศอินเดีย แต่เริ่ มรู ้จกั
ในฝั่งตะวันตกในชื่ อว่า ตัวเลขอาระบิก ทั้งนี้ เนื่ องจากในยุโรปได้ใช้ตาราของอาหรับ (Arabic texts) เช่ น
“ The calculation with Hindu numerals” เป็ นต้น ทาให้ชาวยุโรปพากันเรี ยกตัวเลขนี้ ว่า ตัวเลขอาระบิ ก
และในปั จจุ บนั จึงเรี ย กตัวเลขนี้ ว่าตัวเลขฮิ นดู อาระบิ ก ด้วยตัวเลขอาระบิ กนี้ เรี ยกในภาษาอาระบิ กว่า
"Hindu numerals"," ‫ " أرقام هندية‬ต่อมาเรี ยกว่า Hindu-Arabic numerals หรื อ Indian numerals อันเป็ น
สัญลักษณ์ที่ใช้แทนจานวนกันทัว่ โลก

Mechanical Engineering, เอกสารประกอบการอบรมค่ ายหุ่นยนต์ ปลาครั้งที่ 2, หน้า 1.


1
6 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ตัวเลขที่ใช้อยูใ่ นปั จจุบนั ซึ่ งเรี ยกว่าตัวเลขฮินดูอาระบิกนี้ ใช้แทนด้วยตัวเลข 10 ตัวคือ 1, 2, 3, 4,
5, 6, 7, 8, 9 และ 0 ตัวเลขเหล่ านี้ ได้มี ข้ ึ นในยุโรปในศตวรรษที่ 12 โดย Leonardo Pissano ซึ่ งเป็ นนัก
คณิ ตศาสตร์ ชาวอิตาเลียน เขาได้รับการศึกษาจากประเทศในแถบแอฟริ กาเหนือแล้วนาความรู ้กลับมาใช้
ในประเทศอิ ตาลี ระบบตัวเลขฮินดู เป็ นระบบที่มีค่าประจาตาแหน่ งค่าของตัวเลขขึ้นกับตาแหน่ งของ
ตัวเลขนั้น เช่น “2” ใน 205 มีค่าเป็ น 10 เท่าของ “2” ใน 25 ดังนั้นจึงต้องมี “0” เพื่อบอกตาแหน่งหรื อหลัก
สิ บ ใน“205” ด้วย การค้นพบตัวเลข 0 เกิดขึ้นหลังจากมีสัญลักษณ์แทนจานวนเต็ม 9 จานวนแล้วตัวเลข 0
ใช้แทนตาแหน่งว่างเปล่า เรี ยกว่า “ตัวรั้งตาแหน่ง” (Place holder)2
จากความก้าวหน้าทางเทคโนโลยีได้มีการพัฒนาเครื่ องคอมพิวเตอร์ ข้ ึ นมาใช้งาน โดยเครื่ อง
คอมพิ วเตอร์ เป็ นเครื่ องใช้ไฟฟ้ า ซึ่ ง ถู ก ออกแบบมาเพื่ อที่ จะรั บรู ้ สภาวะเพี ย งสองสภาวะเท่ า นั้น เพื่ อ
ป้ อ งกัน การผิ ด พลาดของข้อ มู ล คื อ สภาวะมี แ รงดัน ไฟฟ้ า โดยเรี ยกว่ า ลอจิ ก 1 และสภาวะไม่ มี
แรงดันไฟฟ้าโดยเรี ยกว่าลอจิก 0 ในระบบคอมพิวเตอร์ ที่มีความเร็ วต่าแรงดันไฟฟ้าสาหรับลอจิก 1 จะมี
ค่าเท่ากับ 5 โวลต์และแรงดันไฟฟ้ าสาหรับลอจิก 0 จะมีค่าเท่ากับ 0 โวลต์ แต่สาหรับคอมพิวเตอร์ ที่มี
ความเร็ วสู งค่าระดับแรงดันลอจิก 1 จะลดลงเพื่อลดความร้อนที่เกิดขึ้นกับตัวประมวลผลกลาง
ดังนั้นการประมวลผลต่าง ๆ ของคอมพิวเตอร์ จึงใช้งานในระบบตัวเลขฐาน 2 หรื อที่ เรี ยกว่า
เลขไบนารี่ (Binary) ตัวเลขที่ใช้ระบบเลขฐาน 10 คือ 0, 1, 2, … 9 และในระบบเลขฐาน 2 มีเพียงเลข 0
กับ 1 เท่านั้น

การแปลงเลขฐาน 10 เป็ นเลขใด ๆ

ในการเขียนโปรแกรมคอมพิวเตอร์จาเป็ นต้องใช้เลขฐานหลัก ๆ 3 เลขฐานได้แก่ เลขฐาน 10 เลข


ฐาน 2 และเลขฐาน 16 ซึ่ งในแต่ละฐานมีความสัมพันธ์กนั นักศึกษาจาเป็ นจะต้องมีความรู ้ ในการแปลง
เลขฐานเพื่อนาไปใช้ประโยชน์ในการเขียนโปรแกรมคอมพิวเตอร์
การแปลงเลขฐาน 10 ให้เป็ นเลขฐานใด ๆ นั้นทาได้โดยการหารเลขฐาน 10 ที่ตอ้ งการแปลงด้วย
ตัว เลขของเลขฐานที่ ต้อ งการแปลงและเก็ บ ค่ า ผลลั พ ธ์ โดยเศษของการหารครั้ งแรกจะเป็ น
เลขฐานที่ตอ้ งการแปลงในบิตต่าสุ ด (LSB: Least significant bit) ส่ วนผลหารจะไปหารครั้งถัดไปด้วยเลข
ฐานที่ตอ้ งการแปลง เศษของการหารในครั้งนี้จะเป็ นเลขฐานที่ตอ้ งการแปลงในบิตถัดขึ้นมา ส่ วนผลลัพธ์
ก็นาไปหารด้วยเลขฐานที่ตอ้ งการแปลงทาอย่างนี้ไปจนกระทัง่ ผลหารมีค่าเป็ น 0

รศ. รัตนพร บ่อคา, ประวัตขิ องจานวนและตัวเลข, วารสารวิทยาศาสตร์ ฉบับที่ 1-2, หน้า 48.
2
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 7
ตัวอย่าง การแปลงเลขฐาน 10 เป็ นเลขฐาน 2
โจทย์ จงแปลงค่า 4510 เป็ นเลขฐาน 2
วิธีทา
ผลลัพธ์ เศษ
45/2 = 22 1 บิตค่าต่าสุ ด (LSB: Least significant bit)
22/2 = 11 0
11/2 = 5 1
5/2 = 2 1
2/2 = 1 0
1/2 = 0 1 บิตค่าสู งสุ ด (MSB: Most significant bit)
คาตอบ 4510 = 1011012

ตัวอย่าง การแปลงเลขฐาน 10 เป็ นเลขฐาน 3


โจทย์ จงแปลงค่า 4510 เป็ นเลขฐาน 3
วิธีทา
ผลลัพธ์ เศษ
45/3 = 15 0 บิตค่าต่าสุ ด (LSB: Least significant bit)
15/3 = 5 0
5/3 = 1 2
1/3 = 0 1 บิตค่าสู งสุ ด (MSB: Most significant bit)
คาตอบ 2510 = 12003

ตัวอย่าง การแปลงเลขฐาน 10 เป็ นเลขฐาน 4


โจทย์ จงแปลงค่า 4510 เป็ นเลขฐาน 4
วิธีทา
ผลลัพธ์ เศษ
45/4 = 11 1 บิตค่าต่าสุ ด (LSB: Least significant bit)
11/4 = 2 3
2/4 = 0 2 บิตค่าสู งสุ ด (MSB: Most significant bit)
คาตอบ 2510 = 2314
8 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

การแปลงเลขฐานใด ๆ เป็ นเลขฐาน 10


การแปลงเลขฐานใด ๆ ให้เป็ นเลขฐาน 10 ต้องทาความเข้าใจเกี่ยวกับน้ าหนักของตัวเลขที่อยูใ่ น
ตาแหน่ งต่าง ๆ ก่อน น้ าหนักของตัวเลขที่อยู่ขวาสุ ด (LSB: Least significant bit) จะมีค่าเท่ากับเลขฐาน
นั้น ๆ ยกกาลังศูนย์และเลขตาแหน่ งถัดมาจะมีน้ าหนักเท่ากับเลขฐานนั้น ๆ ยกกาลังหนึ่ ง เป็ นเช่นนี้ ไป
เรื่ อย ๆ ครบทุกหลัก สาหรับการหาค่าเลขฐานใด ๆ ให้เป็ นเลขฐานสิ บจะหาได้จากการรวมกันของผลคูณ
ในตัวเลขในตาแหน่งต่าง ๆ กับน้ าหนักของตัวเลขในตาแหน่งนั้น ๆ ดังตัวอย่าง

ตัวอย่าง การแปลงเลขฐาน 8 เป็ นเลขฐาน 10


โจทย์ จงแปลงเลขฐาน 8 ของเลข 765438 ให้เป็ นเลขฐาน 10
วิธีทา
น้ าหนัก 84 83 82 81 80
เลข 7 6 5 4 3
ผลคูณ 7×84=28672 6×83=3072 5×82=320 4×81=32 3×80=3
765438 = 28672+3072+320+32+3 = 3209910

ตัวอย่าง การแปลงเลขฐาน 5 เป็ นเลขฐาน 10


โจทย์ จงแปลงเลขฐาน 5 ของเลข 434215 ให้เป็ นเลขฐาน 10
วิธีทา
น้ าหนัก 54 53 52 51 50
เลข 4 3 4 2 1
ผลคูณ 4×54=2500 3×53=375 4×52=100 2×51=10 1×50=1
434215 = 2500+375+100+10+1 = 298610

ตัวอย่าง การแปลงเลขฐาน 2 เป็ นเลขฐาน 10


โจทย์ จงแปลงเลขฐาน 2 ของเลข 110102 ให้เป็ นเลขฐาน 10
วิธีทา
น้ าหนัก 24 23 22 21 20
เลข 1 1 0 1 0
ผลคูณ 1×24=16 1×23=8 0×22=0 1×21=2 0×20=0
110102 = 16+8+0+2+0 = 2610
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 9
หากคานวณจากน้ าหนักในแต่ละตาแหน่งก่อนจะทาให้การหาค่าง่ายขึ้น ดังตัวอย่าง
ตัวอย่าง การแปลงเลขฐาน 5 เป็ นเลขฐาน 10
โจทย์ จงแปลงเลขฐาน 5 ของเลข 434215 ให้เป็ นเลขฐาน 10
วิธีทา
54 53 52 51 50
น้ าหนัก
625 125 25 5 1
เลข 4 3 4 2 1
ผลคูณ 4×625=2500 3×125=375 4×25=100 2×5=10 1×1=1
434215 = 2500+375+100+10+1 = 298610
ตัวอย่าง การแปลงเลขฐาน 2 เป็ นเลขฐาน 10
โจทย์ จงแปลงเลขฐาน 2 ของเลข 110102 ให้เป็ นเลขฐาน 10
วิธีทา
น้ าหนัก 24=16 23=8 22=4 21=2 20=1
เลข 1 1 0 1 0
ผลคูณ 1×16=16 1×8=8 0×4=0 1×2=2 0×1=0
110102 = 16+8+0+2+0 = 2610

ระบบเลขฐาน 16
ระบบเลขฐาน 16 (HEX: Hexadecimal) เป็ นเลข ตารางที่ 1-1 ความสัมพันธ์ของเลขฐาน
ที่ถูกเรี ยกใช้ในระบบคอมพิวเตอร์ซ่ ึ งใช้แทนตัวเลขที่เป็ น
เลขฐาน 10 เลขฐาน 2 เลขฐาน 16
เลขฐาน 2 เพื่อให้ง่ายต่อการใช้งานเนื่ องจากเลขฐาน 2 มี 0 0000 0
แค่ เลข 0 และ 1 เท่ า นั้น ดัง เช่ น 1000100101102 แต่ เมื่ อ 1
2
0001
0010
1
2
เขียนเป็ นเลขฐาน 16 จะได้เพียง 896H ในระบบเลขฐาน 3 0011 3
4 0100 4
2 ที่มีเพียงเลข 2 ตัวคือ 0 กับ 1 ในระบบเลขฐาน 10 มีเลข 5 0101 5
10 ตัวคือ 0, 1, 2, … 9 และในระบบเลขฐาน 16 มีตวั เลข 6
7
0110
0111
6
7
16 ตัว โดย 10 เลขแรกใช้เลขเดียวกับเลขฐาน 10 คือ 0 ถึง 8 1000 8
9 1001 9
9 ส่ วนที่เหลื ออี ก 6 ตัว จะใช้ตวั อักษรภาษาอังกฤษแทน 10 1010 A
11 1011 B
คือ A, B, C, D, E, Cและ F ดังตารางที่ 1-1 12 1100 C
13 1101 D
14 1110 E
15 1111 F
10 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

การแปลงเลขฐานระหว่างเลขฐาน 2 กับเลขฐาน 16
ในการแปลงเลขฐาน 2 ให้เป็ นเลขฐาน 16 สามารถทาได้โดยการแบ่งกลุ่มตัวเลขของเลขฐาน 2
เริ่ มจากขวาไปซ้ายเป็ นกลุ่ม ๆ ละ 4 บิต และใช้จากตารางแสดงความสัมพันธ์ของเลขฐานในการแปลง
เลขฐานได้โดยตรงดังตัวอย่าง

ตัวอย่าง การแปลงเลขฐาน 2 ให้เป็ นเลขฐาน 16 โดยการแบ่งกลุ่มตัวเลข


โจทย์ จงแปลงค่า 1001111101012 เป็ นเลขฐาน 16
วิธีทา แบ่งกลุ่มตัวเลขของเลขฐาน 2 เริ่ มจากขวาไปซ้ายเป็ นกลุ่มๆละ 4 บิต
1001 1111 0101 จากโจทย์
9 F 5
คาตอบ 1001111101012 = 9F5H

ตัวอย่าง การแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 2 โดยการแบ่งกลุ่มตัวเลข


โจทย์ จงแปลงค่า A72BH เป็ นเลขฐาน 2
วิธีทา
A 7 2 B จากโจทย์
1010 0111 0010 1011
คาตอบ A72B16 = 10100111001010112

การแปลงเลขฐาน 10 เป็ นเลขฐาน 16


ในการแปลงเลขฐาน 10 ให้เป็ นเลขฐาน 16 สามารถทาได้ 2 แนวทางคือ
1. แปลงเลขฐาน 10 ให้เป็ นเลขฐาน 2 ก่อนใช้วิธีการกระจายตามน้ าหนักของแต่ละบิตแล้วทาการ
แปลงเลขฐาน 2 ให้เป็ นเลขฐาน 16 ดังตัวอย่าง

ตัวอย่าง การแปลงเลขฐาน 10 ให้เป็ นเลขฐาน 16 โดยการแปลงเป็ นเลขฐาน 2 ก่อน


โจทย์ จงแปลงค่า 4510 เป็ นเลขฐาน 16
วิธีทา น้ าหนักบิตฐาน 2 32 16 8 4 2 1
4510 กระจายได้ 1 0 1 1 0 1
คาตอบ 4510 = 32+0+8+4+0+1 = 1011012 = 0010 11012 = 2DH
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 11
ตัวอย่าง การแปลงเลขฐาน 10 ให้เป็ นเลขฐาน 16
โจทย์ จงแปลงค่า 171410 เป็ นเลขฐาน 16
วิธีทา
น้ าหนักบิต 1024 512 256 128 64 32 16 8 4 2 1
171410 1 1 0 1 0 1 1 0 0 1 0
คาตอบ 171410 = 110101100102 = 0110 1011 00102 = 6B2H

2. แปลงโดยตรงทาได้โดยการหารเช่นเดียวกับการแปลงเลขฐาน 2 เป็ นเลขฐาน 10 ต่างตรงที่ใช้ 16


เป็ นตัวหาร ดังตัวอย่าง

ตัวอย่าง การแปลงเลขฐาน 10 ให้เป็ นเลขฐาน 16 โดยการหาร


โจทย์ แปลงค่า 4510 เป็ นเลขฐาน 16
วิธีทา ผลหาร เศษ
45/16 2 13 =D
2/16 0 2 =2
คาตอบ 4510 =2DH

ตัวอย่าง การแปลงเลขฐาน 10 ให้เป็ นเลขฐาน 16 โดยการหาร


โจทย์ แปลงค่า 23410 เป็ นเลขฐาน 16
วิธีทา ผลหาร เศษ
234/16 14 10 =A
14/16 0 14 =E
คาตอบ 23410 =EAH

การแปลงเลขฐาน 16 เป็ นเลขฐาน 10

ในการแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 10 สามารถทาได้ 2 แนวทางคือ


1. แปลงเลขฐาน 16 ให้เป็ นเลขฐาน 2 ก่อนแล้วทาการแปลงจากเลขฐาน 2 ที่ได้ให้เป็ นเลขฐาน 10
อีกครั้ง ดังตัวอย่าง
12 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่าง การแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 10 โดยการแปลงเป็ นเลขฐาน 2 ก่อน


โจทย์ จงแปลงค่า 6B2H เป็ นเลขฐาน 10
วิธีทา
จากโจทย์ 6 B 2
ฐาน2 110 1011 0010
น้ าหนักฐาน 2 1024 512 256 128 64 32 16 8 4 2 1
1 1 0 1 0 1 1 0 0 1 0
คาตอบ (1024+512+0+128+32+16+0+0+2+0) = 171410

2. แปลงโดยตรงโดยรวมจากน้ าหนักของแต่ละหลักดังตัวอย่าง
ตัวอย่าง การแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 10 โดยรวมจากน้ าหนักในแต่ละหลัก
โจทย์ จงแปลงค่า 6B2H เป็ นเลขฐาน 10
วิธีทา
น้ าหนักฐาน 16 162 161 160
6 B(11) 2
6B2H = (6×16 )+(11×161)+(2×160)
2

= 1536+176+2
คาตอบ = 171410

ตัวอย่าง การแปลงเลขฐาน 16 ให้เป็ นเลขฐาน 10 โดยรวมจากน้ าหนักในแต่ละหลัก


โจทย์ จงแปลงค่า ABCH เป็ นเลขฐาน 10
วิธีทา
น้ าหนักฐาน 16 162 161 160
A(10) B(11) C(12)
ABCH = (10×162)+(11×161)+(12×160)
= 2560+176+12
คาตอบ = 274810

1.2 ดิจิตอลพืน้ ฐาน


ดิจิตอล (Digital) เป็ นการอธิ บายเทคโนโลยีอิเล็กทรอนิกส์ ที่ใช้สร้าง เก็บ และประมวลข้อมูลใน
ลักษณะ 2 สถานะที่เรี ยกว่าลอจิก คือ บวกแสดงด้วยลอจิก 1 และไม่บวกแสดงด้วยลอจิก 0 ดังนั้นข้อมูล
ส่ งผ่านหรื อเก็บด้วยเทคโนโลยีดิจิตอล เป็ นการแสดงด้วยลอจิก 0 และ 1 แต่ละค่าของตาแหน่ งสถานะ
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 13
เหล่านี้ เป็ นการอ้างแบบ Binary digital ดิ จิตอลมี ความเกี่ ยวข้องกับไมโครคอนโทรลเลอร์ ท้ งั ฮาร์ ดแวร์
และซอฟต์แวร์ สาหรับหน่วยการเรี ยนนี้ จะกล่าวถึงระดับแรงดันไฟฟ้ าของลอจิกดิจิตอล และคุณสมบัติ
ของลอจิกเกตชนิดต่าง ๆ ที่เกี่ยวข้องกับการใช้งานของไมโครคอนโทรลเลอร์ ดังนี้

ระดับลอจิก
ระดับลอจิกที่ใช้งานในวงจรจริ ง สถานะของลอจิกดิจิตอล 2 สถานะจะแทนค่าด้วยแรงดันไฟฟ้า
คือ ลอจิก 0 แทนแรงดัน 0 โวลต์ และลอจิก 1 แทนแรงดัน 5 โวลต์ แต่ในเป็ นความจริ งอุปกรณ์ที่นามาใช้
งานจะสามารถรับรู ้ลอจิกได้กว้างพอสมควร โดยการรับรู ้ลอจิก 0 ก็ไม่จาเป็ นต้องมีค่าแรงดันเป็ น 0 โวลต์
โดยสามารถที่ จะรับรู ้ ค่าของแรงดันที่สูงกว่า 0 โวลต์ได้เล็กน้อย และในทานองเดี ยวกันลอจิก 1 ก็ไม่
จาเป็ นต้องเป็ น 5 โวลต์เช่นกัน ดังรู ปที่ 1-1

5
4
ระดับลอจิก 1
3
2
1
ระดับลอจิก 0

รู ปที่ 1-1 ระดับแรงดันของลอจิก

สาหรับไมโครคอนโทรลเลอร์ ในปั จจุบนั บางเบอร์ บางตระกูลใช้แรงดันไฟเลี้ยงที่ต่ากว่า 5 โวลต์


ลอจิก 1 ก็มีขนาดแรงดันที่ต่าลงไปด้วย โดยค่าลอจิก 1 จะเป็ นค่าใกล้เคียงกับแรงดันไฟเลี้ยงในวงจร

ลอจิกเกตของเลขฐาน 2
ระบบเลขฐาน 2 สามารถนาลอจิกผ่านวงจรต่าง ๆ เพื่อให้ได้ลอจิกที่เปลี่ยนไป โดยวงจรดังกล่าว
เรี ยกว่าวงจรลอจิกเกตโดยมีวงจรต่าง ๆ ดังนี้
1. แอนด์เกต (AND gate)
2. ออร์ เกต (OR gate)
3. เอ็กซ์คลูซีฟออร์ เกต (XOR gate)
4. แนนด์เกต (NAND gate)
5. นอร์ เกต (NOR gate)
6. น็อตเกต (NOT gate)
14 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แอนด์เกต (AND gate)


แอนด์เกตเป็ นวงจรที่มีอินพุตตั้งแต่ 2
แอนเกต (AND Gate)
อินพุตขึ้นไป เมื่อนาค่าลอจิกมาผ่านวงจรแล้ว
อินพุต เอาต์พุต
ให้ค่า ลอจิ กทางเอาต์พุ ตที่ มี ความสั มพันธ์ ก ับ
A B Q A
อิน พุ ตคื อ เมื่ ออิ นพุ ตทุ ก อิ นพุ ตมี ล อจิก เป็ น 1
0 0 0 Q
จะส่ งผลให้ลอจิกทางเอาต์พุตเป็ นลอจิก 1 แต่ B
0 1 0
ถ้าหากอินพุตมี ค่าลอจิ ก 0 ในอินพุตใดอินพุต
1 0 0
หนึ่งหรื อทั้งหมดจะส่ งผลให้ลอจิกทางเอาต์พุต
1 1 1
เป็ นลอจิก 0

ออร์เกต (OR gate)


ออร์ เ กตเป็ นวงจรที่ มี อิ น พุ ต ตั้ง แต่ 2
ออร์ เกต (OR Gate)
อินพุตขึ้นไป เมื่อนาค่าลอจิกมาผ่านวงจรแล้ว
อินพุต เอาต์พุต
ให้ค่า ลอจิ กทางเอาต์พุ ตที่ มี ความสั มพันธ์ ก ับ
A B Q
อิ น พุ ต คื อ เมื่ อ อิ น พุ ต ใดอิ น พุ ต หนึ่ งหรื อ ทุ ก A
0 0 0 Q
อิ น พุ ต มี ล อจิ ก เป็ น 1 จะส่ ง ผลให้ ล อจิ ก ทาง
0 1 1 B
เอาต์พุตเป็ นลอจิก 1 หากทุกอินพุตมีค่าลอจิก 0
1 0 1
จะส่ งผลให้เอาต์พุตมีลอจิก 0
1 1 1

เอ็กซ์คลูซีฟออร์เกต (XOR gate)


เอ็กคลูซีฟออร์ เกตเป็ นวงจรที่มีอินพุต
เอ็กซ์คลูซีฟออร์ เกต
ตั้ง แต่ 2 อิ น พุ ต เมื่ อน าค่ า ลอจิ ก มาผ่า นวงจร
(XOR Gate)
แล้วให้ค่าลอจิกทางเอาต์พุตที่มีความสัมพันธ์
อินพุต เอาต์พุต
กับ อิ น พุ ต คื อ เมื่ อ อิ น พุ ต ทั้ง สองอิ น พุ ต มี ค่ า
A B Q A
ลอจิ ก เดี ย วกัน (ลอจิ ก 0 ทั้ง สองอิ น พุ ต หรื อ Q
0 0 0 B
ลอจิก 1 ทั้งสองอิ นพุต)จะท าให้เอาต์พุตมี ค่ า
0 1 1
ลอจิ ก เป็ น 0 และถ้า อิ น พุ ตมี ค่ า ลอจิ ก ต่ า งกัน
1 0 1
ส่ งผลให้ลอจิกทางเอาต์พุตเป็ นลอจิก 1
1 1 0
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 15

น็อตเกต (NOT gate)


น็อตเกตหรื อบางครั้งเรี ยกว่าอินเวอร์ เตอร์
น็อตเกต (NOT Gate)
เป็ นวงจรที่ มี อิ น พุ ต เพี ย งอิ น พุ ต เดี ย ว เมื่ อ น าค่ า
อินพุต เอาต์พุต
ลอจิกมาผ่านวงจรแล้วให้ค่าลอจิกทางเอาต์พุตมีค่า
A Q A Q
ลอจิกตรงข้ามกับอินพุต
0 1
1 0

แนนด์เกต (NAND gate), นอร์เกต (NOR gate)


แนนด์เกตเป็ นการรวมกันสองลอจิกเกตคือ แอนด์เกตกับน็อตเกต โดยเอาต์พุตของแอนด์เกตถูก
ส่ งให้กบั น็อตเกต ดังนั้นเอาต์พุตของแนนด์เกตจะมีสภาวะตรงกันข้ามกับแอนด์เกต
นอร์ เกตเป็ นการรวมกันสองลอจิกเกตคือ ออร์ เกตกับน็ อตเกต โดยเอาต์พุตของออร์ เกตถู กส่ ง
ให้กบั น็อตเกต ดังนั้นเอาต์พุตของนอร์ เกตจะมีสภาวะตรงกันข้ามกับออร์ เกต

1.3 โครงสร้ างพืน้ ฐานของระบบคอมพิวเตอร์


ถ้าพูดถึงระบบคอมพิวเตอร์ แล้วหลายท่านอาจมองถึงเครื่ องคอมพิวเตอร์ ที่ใช้งานกันทัว่ ไปที่มี
จอภาพ ตัวเครื่ อง แป้ นพิมพ์ เหล่านี้ แต่ระบบคอมพิวเตอร์ จริ งแล้วไม่จาเป็ นต้องมีหน้าอย่างที่รู้จกั กัน
เท่านั้น เพียงแต่ประกอบด้วยส่ วนต่าง ๆ ดังนี้
1. ส่ วนรับข้อมูลหรื ออินพุต (Input)
2. ส่ วนส่ งข้อมูลหรื อเอาต์พุต (Output)
3. ส่ วนประมวลผลกลาง (Central processing unit)
4. ส่ วนเก็บข้อมูลหรื อคาสัง่ ที่เรี ยกว่าหน่วยความจา (Memory)

อินพุต หน่วยประมวลผลกลาง เอาต์พุต

หน่วยความจา

รู ปที่ 1-2 โครงสร้างพื้นฐานของระบบคอมพิวเตอร์


16 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
โดยส่ ว นต่ า ง ๆ ทั้ง หมดประกอบขึ้ น ด้วยอุ ป กรณ์ ว งจรอิ เ ล็ ก ทรอนิ ก ส์ ดัง นั้นถ้า หากวงจร
อิเล็กทรอนิกส์ใด ๆ ก็ตามที่มีส่วนประกอบครบทั้ง 4 ส่ วนที่กล่าวมาข้างต้นก็จะเป็ นระบบคอมพิวเตอร์
ทันที ซึ่ งไม่จาเป็ นต้องมีลกั ษณะเหมือนกับคอมพิวเตอร์ ส่วนบุคคล (PC: Personal computer) ที่ใช้งานกัน
ทัว่ ไป

ส่ วนรับข้อมูลหรื ออินพุต
เป็ นส่ วนหรื อวงจรที่ใช้เชื่ อมต่อคอมพิวเตอร์ กบั อุปกรณ์ ภายนอกโดยทาหน้าที่ แปลงสัญญาณ
จากอุป กรณ์ ภายนอกให้มีระดับ ลอจิ ก ที่เหมาะสมกับ วงจรภายใน เรี ย กทับ ศัพ ท์ว่าวงจรอิ นเตอร์ เฟช
(Interface circuit) เพื่อส่ งต่อให้หน่วยประมวลผลเพื่อใช้เป็ นข้อมูลประกอบการประมวลผลตามชุ ดคาสั่ง
ที่ได้เขียนขึ้น เช่นวงจรแป้ นพิมพ์เป็ นวงจรที่เปลี่ยนพลังงานกลจากการกดแป้ นพิมพ์เป็ นพลังงานไฟฟ้ า
ในระดับแรงดัน 5 โวลต์และ 0 โวลต์เพื่อเป็ นลอจิก 1 และลอจิก 0

ส่ วนส่ งข้อมูลหรื อเอาต์พุต


เป็ นส่ วนหรื อวงจรที่ใช้เชื่ อมต่อคอมพิวเตอร์ กบั อุปกรณ์ภายนอกโดยทาหน้าที่รับสัญญาณไฟฟ้ า
จากหน่วยประมวลผลที่เป็ นลอจิก 1 และลอจิก 0 ที่ระดับแรงดัน 5 โวลต์และ 0 โวลต์ ส่ งให้กบั อุปกรณ์
ภายนอกที่นาระดับแรงดันนี้ไปใช้งาน

ส่ วนประมวลผลกลาง
ส่ วนประมวลผลกลางเป็ นหัวใจของระบบคอมพิวเตอร์ โดยทาหน้าที่คิดประมวลผลซึ่ งมีส่วน
การประมวลผลทางคณิ ตศาสตร์ และลอจิก (Arithmetic and logic unit) หรื อที่ เรี ยกว่าทับศัพท์ว่า ALU
โดยการประมวลผลจะกระทาตามชุดคาสั่งที่เก็บไว้ในหน่วยความจา

ส่ วนเก็บข้อมูลหรื อคาสั่งที่เรี ยกว่าหน่วยความจา


เป็ นส่ วนที่ใช้เก็บข้อมูลหรื อใช้เก็บชุ ดคาสั่งที่เขียนขึ้นเพื่อให้ระบบคอมพิวเตอร์ ทางานอย่างใด
อย่างหนึ่งตามต้องการ โดยหน่วยความจาที่ใช้ในระบบคอมพิวเตอร์ มี 2 แบบด้วยกันคือ

1. หน่ วยความจาถาวร เป็ นหน่วยความจาที่มกั ใช้เก็บโปรแกรม ซึ่ งหน่วยความจาชนิดนี้จะต้องเป็ น


หน่ วยความจาที่ สามารถคงข้อมูลไว้ได้แม้กระทั้งไม่มีไฟเลี้ ยง เพื่อรั กษาคาสั่งหรื อโปรแกรมไว้เมื่ อมี
ไฟเลี้ ยงจ่ายให้แก่ ระบบ คอมพิวเตอร์ จะได้สามารถทางานได้ จากคุ ณสมบัติดงั กล่ าว มีหน่ วยความจา
กลุ่มหนึ่ งที่รักษาข้อมูลไว้ได้แต่มีคุณสมบัติอื่นเพิ่มเติมขึ้นมาคือเป็ นหน่วยความจาที่สามารถอ่านได้เพียง
อย่างเดียวหรื อเรี ยกกันว่า ROM (Read only memory) ซึ่ งมีอยูห่ ลายชนิดได้แก่
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 17
a) ROM คุณสมบัติ โปรแกรมจากโรงงานและลบไม่ได้
b) PROM คุณสมบัติ โปรแกรมเองได้ครั้งเดียวและลบไม่ได้
c) EPROM คุณสมบัติ โปรแกรมเองได้หลายครั้งและลบได้ดว้ ยแสง UV
d) E2PROM คุณสมบัติ โปรแกรมเองได้หลายครั้งและลบได้ดว้ ยไฟฟ้า
e) Flash memory คุณสมบัติ โปรแกรมเองได้หลายครั้งและลบได้ดว้ ยไฟฟ้ า โดยสามารถ
ลบหรื อแก้ไ ขข้อมู ล ที่ จดั เก็บไว้ใ นยูนิตของหน่ วยความจาที่ เรี ยกว่า "บล็อก" (Block) ได้ ข้อแตกต่า ง
ระหว่าง E2PROM กับ Flash memory คือการลบหรื อแก้ไขข้อมูล ซึ่ ง E2PROM จะกระทาในระดับไบต์

2. หน่ วยความจาชั่ วคราว เป็ นหน่ วยความจาที่ใช้พกั ข้อมูลในระหว่างการประมวลผล โดยเป็ น


หน่วยความจาที่สามารถอ่านได้และเขียนข้อมูลกลับได้ในระดับไฟเลี้ยงปกติ และรักษาข้อมูลไว้ได้ตราบ
ที่ ย งั มี ไ ฟเลี้ ย งอยู่ หรื อรั ก ษาข้อมู ล ไว้ไ ด้ตราบที่ ย งั ไม่ มี ข ้อมู ล ใหม่ ม าทับ ข้อมู ล เดิ ม จากคุ ณสมบัติ ที่
ต้องการดังกล่าวมีหน่วยความจาที่มีให้ใช้งานเพียงแต่จะไม่สามารถรักษาข้อมูลไว้ได้ถา้ ไม่มีไฟเลี้ยง ซึ่ ง
หน่ วยความจาแบบนี้ สามารถอ่านและเขียนข้อมูลแบบสุ่ มตาแหน่ งได้ที่เรี ยกว่า RAM (Random access
memory)

1.4 โครงสร้ างไมโครคอนโทรลเลอร์ MCS-51


ไมโครคอนโทรลเลอร์ คืออะไร ไมโครคอนโทรลเลอร์ คืออุปกรณ์อิเล็กทรอนิ กส์ ชนิ ดหนึ่ งที่มี
โครงสร้ างภายในประกอบเป็ นระบบคอมพิวเตอร์ ท้ งั ระบบรวมกับของวงจรที่ ใช้เชื่ อมต่อกับอุปกรณ์
ภายนอก โดยวงจรเชื่ อมต่อภายนอกได้แก่วงจรรับสัญญาณจากภายนอก (Input port) วงจรส่ งสัญญาณ
ออกไปยังอุปกรณ์ภายนอก (Output port) เพื่อใช้ควบคุมการทางานของอุปกรณ์ภายนอก มีหน่วยความจา
ทั้งที่ใช้เก็บข้อมูลในระหว่างการประมวลผลและหน่วยความจาที่ใช้เก็บโปรแกรมหรื อที่ใช้เก็บชุ ดคาสั่ง
เพื่อให้ไมโครคอนโทรลเลอร์ ทางานอย่างหนึ่ งอย่างใดตามต้องการ โดยหน่วยความจาที่ใช้เก็บโปรแกรม
จะมี ข นาดและประเภทแตกต่ า งกันแล้วแต่ เบอร์ ข องไมโครคอนโทรลเลอร์ หน่ วยความจาที่ ใ ช้เก็ บ
โปรแกรมเป็ นรอมสาหรับไมโครคอนโทรลเลอร์เบอร์ 8051, 8052 หรื อเป็ นอีพรอมเช่นเบอร์ 8751, 8752
หรื อเป็ นแบบแฟลช เช่นเบอร์ 8951, 8952 เป็ นต้น
ไมโครคอนโทรลเลอร์ มีดว้ ยกันหลากหลายตระกูลให้ผใู ้ ช้งานได้เลือกใช้ตามความต้องการ เช่น
ตระกู ล PIC ตระกู ล AVR ตระกู ล ARM ตระกู ล MCS-51 เป็ นต้น ส าหรั บ การเรี ยนการสอนวิ ช า
ไมโครคอนโทรลเลอร์ (3105-2014) เป็ นวิชาสาหรับนักศึกษาระดับประกาศนียบัตรวิชาชีพชั้นสู ง (ปวส.)
ซึ่งเป็ นวิชาที่ให้นกั ศึกษาได้มีความรู ้ในระดับพื้นฐาน เกี่ยวกับการทางานการเขียนคาสั่งควบคุมการรับส่ ง
ข้อมูลกับอุปกรณ์ภายนอกและการประยุกต์ใช้งาน ไมโครคอนโทรลเลอร์ ในตระกูล MCS-51 เหมาะสม
ที่สุดในการเรี ยนการสอนในวิชานี้เนื่ องจากเป็ นไมโครคอนโทรลเลอร์ ที่มีใช้งานอย่างแพร่ หลาย ราคาถูก
การโปรแกรมลงตัวไอซี ไม่ซบั ซ้อนเมื่อเทียบกับไมโครคอนโทรลเลอร์ ในตระกูลอื่น ๆ
18 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์ ในตระกูล MCS-51 มีอยูด่ ว้ ยกันหลากหลายเบอร์ แต่ละเบอร์ มีคุณสมบัติ
บางอย่างแตกต่างกันไป ดังนั้นนักศึกษาต้องเรี ยนรู ้ศึกษาถึงความแตกต่างในแต่ละเบอร์ เพื่อเป็ นข้อมูล
ในต่อการตัดสิ นใจที่จะเลือกใช้ไมโครคอนโทรลเลอร์ เบอร์ ใดให้เหมาะสมกับงาน สาหรับการเรี ยนการ
สอนวิชาไมโครคอนโทรลเลอร์ น้ ี แนะนาให้ใช้งานไมโครคอนโทรลเลอร์ เบอร์ ที่ข้ ึนต้นด้วย AT89S ซึ่ ง
เป็ นผลิตภัณฑ์ของบริ ษทั Atmel เนื่ องจากเป็ นไมโครคอนโทรลเลอร์ ที่มีหน่วยความจาเก็บโปรแกรมอยู่
ภายในตัว ที่เป็ นแบบแฟลช ซึ่งมีคุณสมบัติลบและบันทึกข้อมูลได้ดว้ ยไฟฟ้า มีขอ้ ดีหลายประการสาหรับ
ผูท้ ี่ตอ้ งการเรี ยนรู ้การใช้งานได้แก่
1. คุณสมบัติและสถาปั ตยกรรมพื้นฐานเช่ นเดี ยวกันกับไมโครคอนโทรลเลอร์ MCS-51 ของ
บริ ษทั อินเทล
2. ความเร็ วในการทางาน 12 Clock/ 1 Machine cycle เช่ นเดี ยวกับกันไมโครคอนโทรลเลอร์
MCS-51 ของบริ ษทั อินเทล ทาให้สามารถใช้แทนได้โดยตรง
3. หน่วยความจาที่ใช้เก็บโปรแกรมอยูภ่ ายในตัวที่เป็ นแบบแฟลช ซึ่ งมีคุณสมบัติในการบันทึก
และลบข้อมูลได้โดยใช้ไฟฟ้า โดยมีจานวนครั้งในการบันทึกและลบจานวนมาก
4. บางเบอร์ ส ามารถโปรแกรมตัว เองได้ท้ ัง ๆ ที่ ย งั อยู่ ใ นวงจรใช้ ง านอยู่ (ISP: In system
programming) ซึ่ งจะเป็ นเบอร์ ที่ข้ ึนต้นด้วย AT89S
5. การจัดเรี ยงขาเช่ นเดี ยวกับไมโครคอนโทรลเลอร์ ที่อินเทลผลิ ต ซึ่ งเป็ นข้อดี ตรงที่ สามารถ
นาไปใช้งานแทนได้ทนั ทีโดยไม่ตอ้ งแก้ไขวงจร
6. ราคาของไมโครคอนโทรลเลอร์ ถูก และหาซื้ อง่ าย ซึ่ งเหมาะแก่ การศึ กษาและการนาไป
ประยุกต์ใช้งาน
7. ไม่ ต้องออกแบบวงจรเชื่ อมต่ อกับ หน่ วยความจาภายนอก เนื่ องจากมี หน่ วยความจาเก็ บ
โปรแกรมอยูภ่ ายในให้เลือกใช้หลากหลายขนาดในหลาย ๆ เบอร์

คุณสมบัติทวั่ ไปของไมโครคอนโทรลเลอร์ MCS-51


ไมโครคอนโทรลเลอร์ในตระกูล MCS-51 มีอยูด่ ว้ ยกันหลากหลายเบอร์ ในแต่และเบอร์ มี
โครงสร้างบางส่ วนที่แตกต่างกันไปบ้าง แต่โดยส่ วนใหญ่จะคล้ายคลึงกัน ได้แก่
- มีหน่วยความจาเก็บโปรแกรมอยูภ่ ายในที่เป็ น รอม อีพรอม แฟลช แล้วแต่เบอร์
- มีหน่วยความจาเก็บข้อมูลชัว่ คราวที่เป็ นแรมที่มีขนาด 128 ไบต์หรื อ 256 ไบต์แล้วแต่เบอร์
- มีขาเชื่อมต่อกับอุปกรณ์ภายนอกโดยตรงที่เรี ยกว่าพอร์ ต 4 พอร์ ต(เฉพาะขนาด 40 ขา)โดย
แต่ละพอร์ ตมี 8 บิต ซึ่งเป็ นพอร์ ต 2 ทิศทางคือเป็ นได้ท้ งั อินพุตพอร์ตและเอาต์พุตพอร์ ต
- มีวงจรตั้งเวลาและวงจรนับ (Timer/Counter) อยูภ่ ายใน 2 วงจร (บางเบอร์มี 3 วงจร)
- สามารถอินเตอร์รัพท์ได้ 6 ประเภท
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 19
- สามารถติดต่อกับหน่วยความจาเก็บโปรแกรมได้สูงสุ ด 64 กิโลไบต์
- สามารถติดต่อกับหน่วยความจาเก็บข้อมูลได้สูงสุ ด 64 กิโลไบต์
- มีวงจรสัญญาณนาฬิกาภายในตัว
- มีพอร์ตสื่ อสารแบบอนุกรมแบบฟูลดูเพล็ก (Full duplex)
- มีรอบการทางาน 1 Machine cycle ใช้เวลาเท่ากับสัญญาณนาฬิกา 12 Clock

ตารางที่ 1-2 เปรี ยบเทียบคุณสมบัติที่แตกต่างกันในแต่ละเบอร์


หน่วยความจาเก็บ หน่วยความจา เจ้าของ จานวน จานวน
เบอร์ การโปรแกรม
โปรแกรมภายใน เก็บข้อมูล ผลิตภัณฑ์ ขา พอร์ต
8052 รอม 4 Kbyte 128 byte
Intel 40 4
8052 รอม 8 Kbyte 256 byte
AT89C2051 แฟลช 2 Kbyte 128 byte
20 2
AT89C4051 แฟลช 4 Kbyte 128 byte ใช้เครื่ องโปรแกรม
AT89C51 แฟลช 4 Kbyte 128 byte Atmel
AT89C52 แฟลช 8 Kbyte 256 byte 40 4
AT89C55 แฟลช 20 Kbyte 256 byte
AT89S4051 แฟลช 4 Kbyte 128 byte 20 2
AT89S51 แฟลช 4 Kbyte 128 byte
Atmel ใช้เครื่ องโปรแกรมหรื อ
AT89S52 แฟลช 8 Kbyte 256 byte
40 4 ใช้การโปรแกรมตัวเอง
AT89S53 แฟลช 12 Kbyte 256 byte
AT89S8252 แฟลช 8 Kbyte 256 byte+E2PROM 2Kbyte
ใช้เครื่ องโปรแกรมหรื อ
256 byte
P89V51RD2 แฟลช 64 Kbyte 40 4 ใช้การโปรแกรมตัวเอง
1 Kbyte Data memory
ผ่านพอร์ตอนุกรม

รู ปที่ 1-3 ไมโครคอนโทรลเลอร์ขนาด 40 ขาตัวถังแบบ DIP


20 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

โครงสร้างและสถาปัตยกรรมของไมโครคอนโทรลเลอร์เบอร์ AT89S52

รู ปที่ 1-4 โครงสร้างและสถาปัตยกรรมของไมโครคอนโทรลเลอร์ MCS-51 เบอร์ AT89S52

การจัดขาของไมโครคอนโทรลเลอร์ MCS-51 เบอร์ AT89S52


ไมโครคอนโทรลเลอร์ ในตระกูล MCS-51 มีดว้ ยกันหลากหลายเบอร์ ซ่ ึ งแต่ละเบอร์ มีคุณสมบัติ
แตกต่างกันไป สาหรั บการเรี ยนการสอนในวิชาไมโครคอนโทรลเลอร์ ระดับประกาศนี ยบัตรวิชาชี พ
ชั้นสู ง (ปวส.) เลือกใช้เบอร์ AT89S52 เป็ นไมโครคอนโทรลเลอร์ ที่สามารถโปรแกรมตัวเองโดยที่ยงั อยู่
ในระบบได้ (ISP: In system programing) ซึ่ งการโปรแกรมตัวเองเป็ นการอัดข้อมูลลงชิ พซี พียูไม่ตอ้ งใช้
เครื่ องโปรแกรมที่ มี ราคาแพงเพี ยงแต่ ใ ช้อุป กรณ์ เชื่ อมต่ อเพี ย งเล็ กน้อยก็ ส ามารถโปรแกรมได้ และ
เลือกใช้ตวั ถังแบบตีนตะขาบ (PDIP: Plastic dual inline package) เพื่อสะดวกในการสร้างวงจรสาหรับ
ทดลองการทางาน
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 21

รู ปที่ 1-5 การจัดขาของไมโครคอนโทรลเลอร์ เบอร์ AT89S52

ไมโครคอนโทรลเลอร์ เลื อกใช้เบอร์ AT89S52 ที่เลือกใช้แบบตีนตะขาบเป็ นไอซี ขนาด 40 ขา


โดยหน้าที่แต่ละขาสามารถแบ่งออกเป็ นกลุ่ม ๆ ได้ดงั นี้
- กลุ่มขาพอร์ ตเชื่ อมต่อภายนอก
- กลุ่มของขาต่อสัญญาณนาฬิกา
- ขารี เซต
- กลุ่มขาควบคุม
- กลุ่มไฟเลี้ยง

กลุ่มขาพอร์ตเชื่อมต่อภายนอก
1. พอร์ ต 0 (Port 0) โดยตาแหน่ งของพอร์ ต 0 เป็ นพอร์ ตที่อยู่ดา้ นขวาเรี ยงลงมาตั้งแต่ขาที่ 39
ลงมาถึงขาที่ 32 ซึ่งขาที่ 39 จะเป็ นด้านความสาคัญต่า (LSB) โดยเป็ นขาพอร์ต 0 บิต 0 (P0.0)
พอร์ต 0 มีหน้าทั้งหมด 3 หน้าที่ (ในหนึ่งเวลาจะทาหน้าที่เดียว) คือ
- พอร์ตปกติคือเป็ นอินพุตหรื อเอาต์พุตพอร์ ต
- แอดเดรสบัส 8 บิตล่าง (A0-A7)
- ดาต้าบัส (D0-D7)
2. พอร์ ต 1 (Port 1) ตาแหน่งของพอร์ ต 1 อยูด่ า้ นบนซ้ายเริ่ มจากขาที่ 1 ลงมาซึ่ งขาที่ 1 เป็ นขา
พอร์ ต 1 บิตที่ 0 (P1.0) โดยปกติพอร์ ต 1 จะมีหน้าที่เดียวคือทาหน้าที่เป็ นพอร์ ตปกติคือเป็ น
อินพุตพอร์ตหรื อเอาต์พุตพอร์ต ยกเว้นบางเบอร์ที่สามารถโปรแกรมตัวเองได้จะนาหน้าด้วย
AT89S เช่น AT89S51, AT89S52 ซึ่ งใช้พอร์ ต 1 เป็ นพอร์ ตสาหรับเชื่ อมต่อกับคอมพิวเตอร์
เพื่อใช้ในการโปรแกรมตัวเอง (ISP: In system programming)
3. พอร์ ต 2 (Port 2) อยู่ดา้ นล่างขวาเริ่ มจากขาที่ 21 ขึ้นไป โดยขาที่ 21 เป็ นขาพอร์ ต 2 บิตที่ 0
(P2.0) พอร์ต 2 มี 2 หน้าที่คือ
- พอร์ตปกติ คือ เป็ นอินพุตหรื อเอาต์พุตพอร์ ต
- แอดเดรสบัส 8 บิตบน (A8-A15)
22 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

4. พอร์ ต 3 (Port 3) ตาแหน่ งของพอร์ ต 3 จะอยู่ดา้ นซ้ายเริ่ มจากขาที่ 10 โดยขาที่ 10 เป็ นขา
พอร์ต 3 บิต 0 (P3.0) หน้าที่ของพอร์ต 3 มี 2 หน้าที่ดว้ ยกันคือ
- พอร์ตปกติ คือ เป็ นอินพุตหรื อเอาต์พุตพอร์ ต
- ขาสัญญาณพิเศษ มีรายละเอียดดังนี้
- ขา P3.0 มีหน้าที่พิเศษคือเป็ นขารับข้อมูลเข้าทางพอร์ตอนุกรม (RxD)
- ขา P3.1 มีหน้าที่พิเศษคือเป็ นขาส่ งข้อมูลออกทางพอร์ ตอนุกรม (TxD)
- ขา P3.2 มีหน้าที่พิเศษคือเป็ นขารับสัญญาณขัดจังหวะ (INT0)
- ขา P3.3 มีหน้าที่พิเศษคือเป็ นขารับสัญญาณขัดจังหวะ (INT1)
- ขา P3.4 มีหน้าที่พิเศษคือเป็ นขารับสัญญาณเพื่อส่ งให้วงจร T0
- ขา P3.5 มีหน้าที่พิเศษคือเป็ นขารับสัญญาณเพื่อส่ งให้วงจร T1
- ขา P3.6 มีหน้าที่พิเศษคือเป็ นขาส่ งสัญญาณกระตุน้ การอ่านข้อมูลจาก
หน่วยความจาเก็บข้อมูลภายนอก (RD)
- ขา P3.7 มีหน้าที่พิเศษคือเป็ นขาส่ งสัญญาณกระตุน้ การเขียนข้อมูลลง
หน่วยความจาเก็บข้อมูลภายนอก (WR)

กลุ่มขาต่อสัญญาณนาฬิกา
5. XTAL1 และ XTAL2 เป็ นขาที่ 18 และ 19 ใช้ต่อกับคริ สตอลเพื่อเป็ นตัวกาหนดสัญญาณ
นาฬิกาเป็ นฐานในการประมวลผล โดยไมโครคอนโทรลเลอร์ จะใช้สัญญาณนาฬิกาจานวน
12 Clock ต่อการทางานใน 1 Machine cycle ของความถี่ของคริ สตอลที่นามาใช้งาน (เฉพาะ
เบอร์ ที่ใช้ในการเรี ยนในวิชานี้ ) โดยปกติมกั ใช้คริ สตอลความถี่ 11.0592 MHz (เหตุที่ใช้ค่า
นี้ ที่ มี ท ศนิ ย มเพื่ อประโยชน์ ใ นการใช้ง านการสื่ อ สารทางพอร์ ตอนุ ก รม เป็ นตัวก าหนด
อัตราเร็ วในการรับส่ งข้อมูล ซึ่ งจะกล่าวในรายละเอียดในบทการสื่ อสารทางพอร์ ตอนุกรม
ต่อไป)
ขารี เซต
6. รี เซต (Reset) เป็ นขาที่ 9 ไมโครคอนโทรลเลอร์ MCS-51 โดยไมโครคอนโทรลเลอร์ จะ
กลับไปเริ่ มทางานใหม่ในคาสั่งแรก (แอดเดรส 0000H) ทันทีเมื่อได้รับลอจิก 1 ที่ขารี เซต
เป็ นเวลาไม่นอ้ ยกว่า 2 Machine cycle หรื อมากกว่า 24 Clock
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 23

กลุ่มขาควบคุม
7. PSEN (Program store enable) เป็ นขาที่ 29 ทาหน้าที่ส่งสัญญาณที่มีลอจิก 0 เพื่อกระตุน้ ให้
หน่ วยความจาที่ เก็บ โปรแกรมที่ ต่ออยู่ภายนอกตัวไมโครคอนโทรลเลอร์ ส่ง ข้อมู ล มายัง
ไมโครคอนโทรลเลอร์ หรื ออาจเรี ยกว่าเป็ นสัญญาณเพื่ออ่านคาสั่งจากหน่ วยความจาเก็บ
คาสั่งภายนอกตัวไมโครคอนโทรลเลอร์
8. ALE (Address latch enable) เป็ นขาที่ 30 ทาหน้าที่ส่งสัญญาณที่มีลอจิก 1 เพื่อกระตุน้ ให้
ดี ฟ ลิ บ ฟลอบ (D-FF) ท าการค้างค่ า แอดเดรสที่ ส่ ง มาจากพอร์ ต 0 เพื่ อให้ พอร์ ต 0 ไปทา
หน้าที่เป็ นดาต้าบัส
9. EA (External access) เป็ นขาที่ 31 ทาหน้าที่บงั คับให้ไมโครคอนโทรลเลอร์ เริ่ มอ่านคาสั่ง
จากหน่วยความจาเก็บโปรแกรมที่อยูภ่ ายในตัวหรื อจากหน่วยความจาเก็บโปรแกรมที่ต่ออยู่
ภายนอกตัวไมโครคอนโทรลเลอร์ โดยสามารถบังคับด้วยการป้อนลอจิกที่ขา EA ดังนี้
- ต่อกราวด์ (ลอจิก 0) จะเริ่ มอ่านคาสั่งจากหน่วยความจาเก็บโปรแกรมที่อยูภ่ ายนอก
- ต่อไฟเลี้ยง (ลอจิก 1) จะเริ่ มอ่านคาสั่งจากหน่วยความจาเก็บโปรแกรมที่อยูภ่ ายใน

กลุ่มขาไฟเลี้ยง
10. VCC ขาที่ 40 เป็ นขารับไฟเลี้ยงที่เป็ นไฟบวกขนาดแรงดัน 5 โวลต์
11. GND ขาที่ 20 เป็ นขารับไฟเลี้ยงที่เป็ นไฟกราวด์ขนาดแรงดัน 0 โวลต์

1.5 ส่ วนประกอบของวงจรไมโครคอนโทรลเลอร์
ส่ วนประกอบที่จะทาให้ไมโครคอนโทรลเลอร์ทางานได้ประกอบด้วย 4 วงจรคือ
- วงจรไฟเลี้ยง
- วงจรรี เซต
- วงจรสัญญาณนาฬิกา
- วงจรบังคับการอ่านคาสั่ง

วงจรไฟเลี้ยง
ไมโครคอนโทรลเลอร์ MCS-51 เป็ นไมโครคอนโทรลเลอร์ ที่ตอ้ งการไฟเลี้ ยงที่มีระดับแรงดัน
ใช้งาน 5 โวลต์ เช่นเดียวกับไอซี ทีทีแอล (TTL) วงจรไฟเลี้ยง 5 โวลต์มีหลากหลายแบบ ในการเรี ยนการ
สอนนี้ ใช้วงจรรักษาระดับแรงดันแบบเชิ งเส้น (Linear regulator) เนื่ องจากวงจรใช้งานไม่ซับซ้อนและ
ง่ายต่อการสร้ าง สาหรับการสร้ างมีสองแนวทางคือแบบใช้หม้อแปลงไฟฟ้ ากระแสสลับและแบบใช้
24 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
แหล่งจ่ายไฟตรงที่เป็ นดีซีอะแด็ปเตอร์ ภายนอก ตัวอย่างแบบแรกเป็ นการใช้หม้อแปลงขนาด 9-12 โวลต์
เอซี ต่อผ่านวงจรเรี ยงกระแสแบบบริ ดจ์แล้วใช้ไอซี รักษาระดับแรงดัน 5 โวลต์เบอร์ 7805 ดังรู ปที่ 1-6

รู ปที่ 1-6 วงจรไฟเลี้ยงขนาด 5 โวลต์แบบใช้หม้อแปลงไฟฟ้ากระแสสลับ

แบบที่สองใช้แหล่งจ่ายไฟฟ้ากระแสตรงภายนอกหรื อดีซีอะแด็พเตอร์ ที่มีขนาดแรงดัน 12 โวลต์


เป็ นตัว จ่ า ยกระแส (ปกติ ดีซี อะแด็ พ เตอร์ เ ป็ นวงจรจ่ า ยไฟที่ ไ ฟกระแสตรงแต่ ไ ม่ มี วงจรรั ก ษาระดับ
แรงดัน) โดยเพิ่มวงจรรักษาระดับแรงดันซึ่ งใช้ไอซี รักษาระดับแรงดัน 5 โวลต์เบอร์ 7805 ดังรู ปที่ 1-7

รู ปที่ 1-7 วงจรไฟเลี้ยงขนาด 5 โวลต์ที่ใช้แหล่งจ่ายไฟฟ้ากระแสตรงภายนอก

วงจรรี เซต
ไมโครคอนโทรลเลอร์ MCS-51 เป็ นไมโครคอนโทรลเลอร์ ที่ ต้อ งการลอจิ ก 1 ในการรี เซต
เพราะฉะนั้นเมื่อต้องการรี เซตจะต้องป้ อนลอจิก 1 หรื อป้ อนไฟฟ้าแรงดัน 5 โวลต์เข้าที่ขารี เซต (ขาที่ 9)
เป็ นเวลาไม่นอ้ ยกว่า 2 แมชชีนไซเคิล

รู ปที่ 1-8 วงจรรี เซตที่ใช้คุณสมบัติของ RC Time Constant


หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 25
เพื่อให้ไมโครคอนโทรลเลอร์ รีเซตทุกครั้งเมื่อเริ่ มจ่ายไฟเลี้ยงวงจร เราสามารถจัดวงจรให้ทาการ
ป้อนลอจิก 1 ชัว่ ขณะหนึ่งจากนั้นให้กลับเป็ นลอจิก 0 ให้กบั ไมโครคอนโทรลเลอร์ เพื่อรี เซตที่เรี ยกกันว่า
วงจร Power on reset สามารถทาได้โดยใช้ตวั ต้านทานต่ออนุ ก รมกับตัวเก็ บประจุ ดงั รู ปที่ 1-8 เรี ยกว่า
วงจร RC Time constant ซึ่ งอาศัยแรงดันตกคร่ อมตัวต้านทานเป็ นตัวความคุมการรี เซต แต่ถา้ หากต้องการ
บังคับให้เกิ ดการรี เซตหลังจากการจ่ายไฟเลี้ยงไปแล้วทาได้โดยการต่อสวิทช์ชนิ ดกดติดปล่อยดับคร่ อม
ตัวเก็บประจุ โดยค่า R และค่า C ที่นามาใช้จะต้องทาให้เกิดค่าเวลา Time constant ที่ส่งค่าลอจิก 1 ให้กบั
ขารี เซตเป็ นเวลานานกว่า 2 แมชชีนไซเคิล

วงจรสัญญาณนาฬิกา
ไมโครคอนโทรลเลอร์ ตระกูล MCS-51 เป็ นไมโครคอนโทรลเลอร์ ที่มีวงจรสัญญาณนาฬิกาอยู่
ภายในเรี ยบร้ อยแล้ว การใช้งานเพียงแต่ผูใ้ ช้งานนาคริ สตอลความถี่ ที่ตอ้ งการมาต่อที่ขา XTAL1 และ
XTAL2 ก็สามารถใช้งานได้เลย (เหตุที่ตอ้ งให้ผใู ้ ช้งานหาคริ สตอลมาต่อเนื่องจาก ความต้องการความเร็ ว
ในการใช้งานไมโครคอนโทรลเลอร์ ของแต่ละคนจะมีความต่างกันนัน่ เอง) เนื่ องจากการต่อคริ สตอล
ในทางปฏิบตั ิจะสร้ างความถี่ลูกขึ้นมาที่เรี ยกว่าฮาร์ โมนิ ก ซึ่ งจะมีความถี่เป็ น 2, 3, 4, … เท่าของความถี่
พื้ น ฐานที่ ร ะบุ ไ ว้ ที่ ต ั ว ถั ง ของคริ สตอล ความถี่ ฮ าร์ โมนิ ก อาจส่ งผลรบกวนการท างานของ
ไมโครคอนโทรลเลอร์ ไ ด้ เพื่ อ ลดความถี่ ฮ าร์ โ มนิ ก นี้ สามารถท าได้โ ดยการต่ อ ตัว เก็ บ ประจุ ที่ มี ค่ า
30pF ±10pF เข้าที่ขา XTAL1 และ XTAL2 ลงกราวด์

รู ปที่ 1-9 วงจรสัญญาณนาฬิกา

วงจรบังคับการอ่านคาสั่ง
ไมโครคอนโทรลเลอร์ MCS-51 ขนาด 40 ขาสามารถต่ อหน่ ว ยความจาที่ ใ ช้เก็ บ โปรแกรม
เพิ่มเติ มภายนอกได้ สาหรั บการบังคับให้ไมโครคอนโทรลเลอร์ ให้เริ่ มอ่านคาสั่งหน่ วยความจาที่ เก็บ
โปรแกรมจากภายนอกหรื อภายในตัวสามารถทาได้โดยการกาหนดลอจิกที่การกาหนดลอจิ กที่ขา EA
เช่ นเมื่อทาการป้ อนลอจิก 0 ให้กบั ขา EAไมโครคอนโทรลเลอร์ จะเริ่ มอ่านคาสั่งจากหน่ วยความจาเก็บ
โปรแกรมภายนอก แต่ถ้าหากป้ อนลอจิ ก 1 ให้กบั ขา EA ไมโครคอนโทรลเลอร์ จะเริ่ มอ่านคาสั่งจาก
หน่วยความจาเก็บโปรแกรมภายในตัว
26 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

External External
Code Code

Internal
Code

EA=1 EA=0

รู ปที่ 1-10 การกาหนดลอจิกให้ขา EA และพื้นที่ใช้งานเมื่อกาหนดลอจิก 1 หรื อ ลอจิก 0

1.6 สรุปสาระสาคัญ
ระบบตัว เลขหรื อ เลขฐานที่ ส าคัญ และจ าเป็ นที่ ต้องเรี ย นรู ้ เพื่ อ น าไปใช้ป ระกอบการเขี ย น
โปรแกรมไมโครคอนโทรลเลอร์ ห ลัก ๆ มี อ ยู่ด้ว ยกัน 3 เลขฐานคื อ เลขฐานสอง เลขฐานสิ บ และ
เลขฐานสิ บหกโดยเลยฐานสิ บหกจะใช้วิธีการจัดกลุ่มเลขฐานสอง 4 บิตเพื่อให้ได้เลขฐานสิ บหกหนึ่ ง
หลัก
ไมโครคอนโทรลเลอร์ ตระกู ล MCS-51 เป็ นไมโครคอนโทรลเลอร์ ขนาด 8 บิ ต แรกเริ่ ม ถู ก
พัฒนาขึ้นโดยบริ ษทั Intel สาหรับไมโครคอนโทรลเลอร์ที่ใช้ในการศึกษาเป็ นเบอร์ AT89S52 ของบริ ษทั
Atmel เป็ นไมโครคอนโทรลเลอร์ ที่มีหน่วยความจาเก็บโปรแกรมภายในตัวที่เป็ นแบบแฟลชซึ่ งสามารถ
ลบและเขียนทับได้จานวนหลายครั้งอีกทั้งสามารถโปรแกรมตัวเองผ่านทาง ISP ได้
วงจรประกอบเพื่อให้ไมโครคอนโทรลเลอร์ สามารถใช้งานได้มีดว้ ยกัน 4 วงจรคือ วงจรไฟเลี้ยง
ที่มีขนาดแรงดันคงที่ 5 โวลต์ วงจรรี เซตซึ่ ง สามารถรี เซตไมโครคอนโทรลเลอร์ ทุกครั้งที่มีการเริ่ มจ่าย
ไฟเลี้ ย ง วงจรสร้ า งสั ญ ญาณนาฬิ ก าภายนอก และวงจรบัง คับ การอ่ า นค าสั่ ง จากหน่ ว ยความจ าเก็ บ
โปรแกรม
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 27

แบบฝึ กหัดหน่ วยที่ 1


คาชี้แจง ให้นกั ศึกษาตอบคาถามต่อไปนี้ให้สมบรู ณ์
1. จงแสดงวิธีการแปลงเลขฐานสิ บไปเป็ นเลขฐานสองของตัวเลข 5710

2. จงเขียนตารางความจริ งของวงจรเกตดังรู ป
I1 I2 Qa Qb Qc
0 0

0 1

1 0

1 1

3. จงเขียนส่ วนประกอบโครงสร้างพื้นฐานของระบบคอมพิวเตอร์

4. จงบอกส่ วนประกอบของกลุ่มขาต่าง ๆ ของไมโครคอนโทรลเลอร์ MCS-51 ชนิด 40 ขา

5. จงอธิบายการทางานของวงจรจ่ายไฟโดยใช้แหล่งจ่ายไฟตรงภายนอก
28 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียนหน่ วยที่ 1
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ตัวเลข 101001012 มีค่าเท่ากับเลขฐานสิ บหก 5. ตัวเลข 876543 ตัวเลข 8 มีน้ าหนักตัวเลขใน
ในข้อใด เลขฐานสิ บมีค่าเท่าใด
ก. 95 ก. 8×10
ข. A5 ข. 8×100
ค. B5 ค. 8×1000
ง. C5 ง. 8×10000
จ. D5 จ. 8×100000
2. ตัวเลข 1001012 มีค่าเท่ากับเลขฐานสิ บในข้อ 6. หากวัดแรงดันที่ขาไอซี (TTL) ขาหนึ่งได้
ใด แรงดัน 4.75 โวลต์ค่าที่เป็ นดิจิตอลจะเป็ น
ก. 27 ลอจิกใด
ข. 37 ก. High impedance
ค. 47 ข. Low impedance
ง. 57 ค. Unknown logic
จ. 67 ง. 0
3. ตัวเลข 45 ซึ่งเป็ นเลขฐานสิ บเมื่อเป็ น จ. 1
เลขฐานสองจะมีค่าเท่ากับข้อใด 7. หากอินพุตขาใดขาหนึ่งหรื อทั้งสองมีค่าเป็ น
ก. 101000 ลอจิก 1 เอาต์พุตจะเป็ นลอจิก 1 เกตชนิดนั้น
ข. 101001 คือชนิดใด
ค. 101101 ก. AND gate
ง. 101111 ข. OR gate
จ. 101010 ค. XOR gate
4. ตัวเลข DE16 มีค่าเท่ากับเลขฐานสองในข้อใด ง. NOT gate
ก. 1100 1100 จ. NAND gate
ข. 1101 1011 8. หากอินพุตขาใดขาหนึ่งหรื อทั้งสองมีค่าเป็ น
ค. 1101 1110 ลอจิก 0 เอาต์พุตจะเป็ นลอจิก 0 เกตชนิดนั้น
ง. 1010 1110 คือชนิดใด
จ. 1011 1100 ก. AND gate
ข. OR gate
ค. XOR gate
หน่ วยที่ 1 ความรู ้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์ 29
ง. NOT gate 13. จานวนพอร์ ตของไมโครคอนโทรลเลอร์ใน
จ. NAND gate ตระกูล MCS-51 (ที่มี 40 ขา) มีกี่พอร์ ต
9. ข้อใดเป็ นหน่วยความจาชนิดที่ตอ้ งใช้แสง ก. 2 พอร์ ต
UV ในการลบข้อมูล ข. 4 พอร์ ต
ก. PROM ค. 8 พอร์ ต
ข. EPROM ง. 16 พอร์ ต
ค. E2PROM จ. 32 พอร์ ต
ง. Solar memory 14. รอบการทางาน 1 Machine cycle ของ
จ. Light memory ไมโครคอนโทรลเลอร์ ตระกูล MCS-51 จะใช้
10. ข้อใดเป็ นส่ วนประกอบของคอมพิวเตอร์ ที่มี สัญญาณนาฬิกาจานวนเท่าใด
หน้าที่แปลงพลังงานอื่น ๆ เป็ นไฟฟ้าที่เป็ น ก. 1 Clock
ระดับลอจิกดิจิตอลเพื่อส่ งให้กบั หน่วย ข. 6 Clock
ประมวลผลกลาง ค. 12 Clock
ก. อินพุต ง. 18 Clock
ข. เอาต์พุต จ. 24 Clock
ค. หน่วยความจา 15. ไมโครคอนโทรลเลอร์ในตระกูล MCS-51
ง. หน่วยควบคุม เบอร์ใดที่สามารถโปรแกรมตัวเองได้
จ. หน่วยประมวลผล ก. 8052
11. ไมโครคอนโทรลเลอร์ เบอร์ ที่นกั ศึกษาใช้ ข. AT89S52
ทดลองซึ่ งขึ้นต้นด้วย AT89 เป็ นของบริ ษทั ใด ค. AT89C52
ก. Intel ง. AT87C52
ข. Microchip จ. AT87S52
ค. Phillips 16. การรี เซตซีพียจู ะต้องรับลอจิกหนึ่งที่ขารี เซต
ง. AMD เป็ นเวลาไม่นอ้ ยกว่าเท่าใด
จ. Atmel ก. 2 แมชชีนไซเคิล
12. บริ ษทั ใดเป็ นผูพ้ ฒั นาไมโครคอนโทรลเลอร์ ข. 4 แมชชีนไซเคิล
ในตระกูล MCS-51 ค. 6 แมชชีนไซเคิล
ก. AMD ง. 8 แมชชีนไซเคิล
ข. Atmel จ. 10 แมชชีนไซเคิล
ค. Intel
ง. Microchip
จ. Phillips
30 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

17. พอร์ต 0 ของไมโครคอนโทรลเลอร์ใน 19. ตัวเก็บประจุที่ต่อกับขา XTAL ลงกราวด์เมื่อ


ตระกูล MCS-51 (ที่มี 40 ขา) มีกี่บิต ใช้กบั คริ สตอลควรใช้ค่าเท่าใด
ก. 1 บิต ก. 10pF±10pF
ข. 2 บิต ข. 20pF±10pF
ค. 4 บิต ค. 30pF±10pF
ง. 8 บิต ง. 40pF±10pF
จ. 16 บิต จ. 50pF±10pF
18. ขาใดที่ใช้บงั คับให้ไมโครคอนโทรลเลอร์ 20. ไอซี เบอร์ใดที่ใช้ในการรักษาระดับแรงดันใน
อ่านคาสัง่ จากหน่วยความจาเก็บโปรแกรม ภาคจ่ายไฟให้ได้ 5 โวลต์
ภายใน ก. LM3805
ก. EA ข. LM5805
ข. CS ค. LM7805
ค. PSEN ง. LM8805
ง. ALE จ. LM9805
จ. RST

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ก 3. จ 4. ก 5. ง 6. ข 7. ก 8. ข 9. ก 10. ข
11. ค 12. ข 13. ค 14. จ 15. ค 16. ข 17. ง 18. ค 19. ง 20. ง

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ข 3. ค 4. ค 5. จ 6. จ 7. ข 8. ก 9. ข 10. ก
11. จ 12. ค 13. ข 14. ค 15. ข 16. ก 17. ง 18. ก 19. ค 20. ค
หน่ วยที่ 2
รีจิสเตอร์ และหน่ วยความจา
หัวข้อเรื่ อง
2.1 หน่วยความจาภายใน
2.2 รี จิสเตอร์
2.3 การต่อหน่วยความจาภายนอก

สาระสาคัญ
หน่ วยความจาภายในของไมโครคอนโทรลเลอร์ มี ท้ งั ใช้ง านทัว่ ไปและมี หน้า ที่ เฉพาะจึ ง มี
ชื่ อเรี ย กอี ก อย่า งหนึ่ ง ว่า รี จิส เตอร์ (เฉพาะที่ มี หน้าที่ พิ เศษ) ไมโครคอนโทรลเลอร์ ส ามารถติ ดต่ อกับ
หน่วยความจาได้ท้ งั ภายนอกภายในทั้งที่ใช้เก็บโปรแกรมหรื อเก็บข้อมูล

สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้ เกี่ ย วกับ หน่ วยความจาภายในและ รี จิส เตอร์ การการต่ อใช้ง านหน่ ว ยความจ า
เพิ่มเติมภายนอกแบบต่าง ๆ

จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับหน่วยความจาภายใน
2. เพื่อให้มีความรู ้เกี่ยวกับรี จิสเตอร์
3. เพื่อให้มีความรู ้เกี่ยวกับการต่อหน่วยความจาภายนอก
จุดประสงค์ เชิ งพฤติกรรม
1. บอกรายละเอียดเกี่ยวกับหน่วยความจาภายในได้
2. บอกรายละเอียดเกี่ยวกับรี จิสเตอร์ ได้
3. บอกการต่อหน่วยความจาภายนอกได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
32 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 2
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หน่ ว ยความจ าของไมโครคอนโทรลเลอร์ 5. หน่ ว ยความจ าภายในส าหรั บ เก็ บ ข้ อ มู ล
ตระกูล MCS-51 แบ่งตามลักษณะการใช้งาน ส่ วนล่าง (Lower) มีขนาดความจุเท่าใด
ได้กี่ส่วน ก. 8 ไบต์
ก. 1 ส่ วน ข. 64 ไบต์
ข. 2 ส่ วน ค. 128 ไบต์
ค. 3 ส่ วน ง. 256 ไบต์
ง. 4 ส่ วน จ. 512 ไบต์
จ. 5 ส่ วน 6. แอดเดรสใดคือแอดเดรสแรกของ
2. การบั ง คั บ การใช้ ง านหน่ ว ยความจ าเก็ บ หน่วยความจาใช้งานพิเศษ
โปรแกรมกาหนดได้จากขาใด ก. 00H
ก. ขา PSEN ข. 20H
ข. ขา ALE ค. 40H
ค. ขา EA ง. A0H
ง. ขา RD จ. 80H
จ. ขา WR 7. แอดเดรสใดคือแอดเดรสแรกของ
3. ข้อใดคื อขนาดสู งสุ ดของหน่ วยความจาเก็บ หน่วยความจาใช้งานทัว่ ไปส่ วนบน (Upper)
โปรแกรมที่ MCS-51 อ้างถึงได้ ก. 00H
ก. 4 กิโลไบต์ ข. 20H
ข. 8 กิโลไบต์ ค. 40H
ค. 32 กิโลไบต์ ง. 80H
ง. 16 กิโลไบต์ จ. A0H
จ. 64 กิโลไบต์ 8. รี จิสเตอร์ ใช้งานทัว่ ไปมีท้ งั หมดกี่ตวั
4. หน่ วยความจาภายในสาหรั บเก็บข้อมู ลแบ่ง ก. 1 ตัว
ตามหน้าที่ได้กี่ส่วน ข. 2 ตัว
ก. 1 ส่ วน ค. 4 ตัว
ข. 2 ส่ วน ง. 6 ตัว
ค. 3 ส่ วน จ. 8 ตัว
ง. 4 ส่ วน
จ. 5 ส่ วน
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 33
9. รี จิ ส เตอร์ ใ ช้ ง านทั่ว ไปเมื่ อ เริ่ มต้น จะอยู่ ที่ 13. การอ่านค่าจากพอร์ ตจะต้องทาอย่างไร
แอดเดรสใด ก. อ่านค่าผ่านรี จิสเตอร์ A
ก. 00H-02H ข. อ่านค่าจากของพอร์ ตนั้น ๆ โดยตรง
ข. 00H-04H ค. อ่านค่าผ่านรี จิสเตอร์ B
ค. 00H-06H ง. อ่านค่าจากรี จิสเตอร์ ของพอร์ ตนั้น ๆ
ง. 00H-07H จ. อ่านค่าผ่านรี จิสเตอร์ PSW
จ. 00H-08H 14. ข้อ ใดคื อ หน้ า ที่ ห ลัก ของรี จิ ส เตอร์ A ของ
10. ผู ้ใ ช้ ส ามารถเปลี่ ย นช่ ว งที่ อ ยู่ (Bank) ของ ไมโครคอนโทรลเลอร์
รี จิสเตอร์ ใช้งานทัว่ ไปได้กี่ตาแหน่ง ก. เป็ นรี จิสเตอร์ กาหนดการทางานของ
ก. 2 ตาแหน่ง ไมโครคอนโทรลเลอร์
ข. 4 ตาแหน่ง ข. เป็ นรี จิสเตอร์ ส่งค่าออกพอร์ ต
ค. 6 ตาแหน่ง ค. เป็ นรี จิสเตอร์ กาหนดการทางานของ
ง. 8 ตาแหน่ง พอร์ต
จ. 12 ตาแหน่ง ง. เป็ นรี จิสเตอร์ อ่านค่าจากพอร์ ต
11. หน่วยความจาที่สามารถเข้าถึงได้ในระดับบิต จ. เป็ นรี จิ ส เตอร์ เ ก็ บ ผลลัพ ธ์ ข องการ
ที่อยูใ่ นหน่วยความจาใช้งานทัว่ ไปอยู่ในช่วง ประมวลผล
แอดเดรสใด 15. ข้อ ใดคื อ หน้า ที่ ห ลัก ของรี จิ ส เตอร์ B ของ
ก. 20H-2FH ไมโครคอนโทรลเลอร์ MCS-51
ข. 30H-3FH ก. เป็ นรี จิสเตอร์ ส่งค่าออกพอร์ ต
ค. 50H-5FH ข. เป็ นรี จิสเตอร์ ที่ กระทาคาสั่ง คู ณและ
ง. 40H-4FH คาสั่งหาร
จ. 60H-6FH ค. เป็ นรี จิสเตอร์ กาหนดการทางานของ
12. การทาให้พอร์ ตมีค่าลอจิกตามต้องการจะต้อง ไมโครคอนโทรลเลอร์
ทาอย่างไร ง. เป็ นรี จิสเตอร์ อ่านค่าจากพอร์ ต
ก. กาหนดค่าลงในพอร์ ตนั้น ๆ จ. เป็ นรี จิสเตอร์ กาหนดการทางานของ
ข. เซตค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ พอร์ต
ค. กาหนดค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ
ง. เซตค่าลงในพอร์ ตนั้น ๆ
จ. เคลียร์ ค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ
34 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

16. ข้อใดคือหน้าที่หลักของขา PSEN 19. ข้อใดคือหน้าที่ของขา ALE


ก. ส่ งสัญญาณอ่านข้อมูลจาก ก. ส่ งสัญญาณอ่านข้อมูลจาก
หน่วยความจาเก็บโปรแกรมภายใน หน่วยความจาเก็บโปรแกรมภายใน
ข. ส่ งสัญญาณอ่านข้อมูลจาก ข. ส่ งสัญญาณอ่านข้อมูลจาก
หน่วยความจาเก็บข้อมูลภายใน หน่วยความจาเก็บข้อมูลภายนอก
ค. ส่ งสัญญาณอ่านข้อมูลจาก ค. ส่ งสัญญาณอ่านข้อมูลจาก
หน่วยความจาเก็บโปรแกรมภายนอก หน่วยความจาเก็บข้อมูลภายใน
ง. ส่ งสัญญาณอ่านข้อมูลจาก ง. ส่ งสัญญาณเพื่อกระตุน้ ให้คา้ งค่า
หน่วยความจาเก็บข้อมูลภายนอก แอดเดรส
จ. ส่ งสัญญาณเขียนข้อมูลจาก จ. ส่ งสัญญาณเขียนข้อมูลจาก
หน่วยความจาเก็บโปรแกรม หน่วยความจาเก็บโปรแกรม
17. ขาใดส่ งสัญญาณเพื่ออ่านข้อมูลจาก 20. หน่วยความจาขนาด 8 กิโลไบต์มีแอดเดรสกี่
หน่วยความจาเก็บข้อมูลภายนอก ขา
ก. ALE ก. 8 ขา
ข. RD ข. 10 ขา
ค. WR ค. 11 ขา
ง. PSEN ง. 13 ขา
จ. EA จ. 16 ขา
18. ดาต้าบัส (D0-D7) ต่ อออกจากพอร์ ตใดของ
ไมโครคอนโทรลเลอร์ MCS-51
ก. พอร์ต 0
ข. พอร์ต 1
ค. พอร์ต 2
ง. พอร์ต 3
จ. พอร์ต 4
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 35

รีจิสเตอร์ และหน่ วยความจา


หน่วยความจาของไมโครคอนโทรลเลอร์ ตระกูล MCS-51 มี 2 ส่ วนแบ่งตามลักษณะการใช้งาน
คือ หน่ วยความจาที่ใช้สาหรั บเก็บโปรแกรมหรื อชุ ดคาสั่งเพื่อให้ไมโครคอนโทรลเลอร์ ทางานได้ตาม
ต้อ งการ โดยหน่ ว ยความจ าส าหรั บ เก็ บ โปรแกรมสามารถต่ อ ใช้ง านจากภายนอกได้ ในกรณี ที่ ใ ช้
ไมโครคอนโทรลเลอร์บางเบอร์ ที่มีหน่วยความจาสาหรับเก็บโปรแกรมอยูภ่ ายในอยูแ่ ล้วก็สามารถใช้งาน
โดยไม่ตอ้ งต่อเพิ่มจากภายนอก (หากเพียงพอต่อการใช้งาน) โดยสามารถบังคับการใช้งานในการเริ่ มทา
คาสั่งโดยการกาหนดค่าลอจิ กที่ขา EA ดังที่ ได้กล่ าวมาแล้วในบทที่ 1 หน่ วยความจาประเภทที่ 2 คือ
หน่ วยความจาที่ใช้สาหรับ เก็ บข้อมู ลหรื อใช้พกั ข้อมู ลในระหว่างการประมวลผล โดยหน่ วยความจา
ประเภทนี้สามารถใช้งานได้จาก 2 ที่ คือหน่วยความจาภายใน และหน่วยความจาเก็บข้อมูลภายนอก

ขนาดของหน่วยความจาที่ไมโครคอนโทรลเลอร์ สามารถใช้งานได้ สาหรับในส่ วนของการเก็บ


โปรแกรมสามารถใช้งานได้สูงสุ ด 64 กิโลไบต์ (มาจากจานวนขาแอดเดรส 16 บิต 216=64 กิโลไบต์) และ
สู งสุ ด 64 กิ โลไบต์สาหรับหน่ วยความจาสาหรับเก็บข้อมูลที่ต่อเพิ่มจากภายนอก โดยหน่วยความจาทั้ง
สองแยกอิสระต่อกัน สาหรับหน่วยความจาที่ใช้เก็บข้อมูลภายในจะมีขนาด 128 ไบต์ หรื อ 256 ไบต์ ทั้งนี้
ขึ้นอยูก่ บั เบอร์ ของไมโครคอนโทรลเลอร์ ที่นามาใช้งาน

2.1 หน่ วยความจาภายใน


หน่ วยความจาภายใน (Internal RAM) หมายถึ ง หน่ วยความจ าที่ ใ ช้เก็ บ ข้อ มู ล ชั่วคราว (เป็ น
หน่ วยความจาที่ เป็ นชนิ ด RAM) ที่ อยู่ภายในไมโครคอนโทรลเลอร์ ส าหรั บ ไมโครคอนโทรลเลอร์
MCS-51 จะแบ่งออกเป็ น 2 ส่ วนตามหน้าที่คือ

1. หน่ วยความจาภายในส่ วนที่ 1 เป็ นหน่วยความจาที่ทาหน้าที่ใช้งานทัว่ ไปซึ่ งมีขนาด 128 ไบต์


หรื อ 256 ไบต์สามารถดูได้จากดาต้าชี ตแต่ละเบอร์ ของไมโครคอนโทรลเลอร์ โดยแบ่งออกเป็ น 2 ช่ วง
ช่วงละ 128 ไบต์ ดังนั้นไมโครคอนโทรลเลอร์ เบอร์ ใดมีหน่วยความจาภายในขนาด 128 ไบต์จะมีเฉพาะ
ส่ วนล่าง (Lower) สาหรับไมโครคอนโทรลเลอร์ ในเบอร์ ที่มีหน่วยความจาภายในขนาด 256 ไบต์จะมีท้ งั
2 ช่วงคือทั้งส่ วนล่าง (Lower) และส่ วนบน (Upper) ในส่ วนล่างหน่วยความจาจะเริ่ มต้นที่แอดเดรส 00H
สิ้ น สุ ด ที่ แ อดเดรส 7FH และหน่ ว ยความจ าใช้ง านทั่ว ไปในส่ ว นบนจะเริ่ ม ที่ แ อดเดรส 80H สิ้ น สุ ด ที่
แอดเดรส FFH

2. หน่ วยความจาภายในส่ วนที่ 2 เป็ นหน่วยความจาภายในที่เรี ยกชื่อตามการใช้งาน กล่าวคือใน


บริ เวณหน่วยความจาในส่ วนนี้จะเป็ นที่อยูข่ องรี จิสเตอร์ ใช้งานพิเศษจานวนมาก ซึ่ งเป็ นรี จิสเตอร์ ที่ใช้ใน
การควบคุ มการทางานในส่ วนต่าง ๆ ของไมโครคอนโทรลเลอร์ ดังนั้นจึงเรี ยกหน่ วยความจาส่ วนนี้ ว่า
36 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
หน่ ว ยความจ าใช้ง านพิ เ ศษเรี ย กกัน ย่ อ ๆ ว่ า SFR (Special function register) โดยต าแหน่ ง ที่ อ ยู่ ข อง
หน่วยความจาใช้งานพิเศษนี้ จะอยูค่ ู่ขนานกับหน่วยความจาใช้งานทัว่ ไปในส่ วนบน กล่าวคือ มีแอดเดรส
เริ่ มต้นที่ 80H สิ้ นสุ ดที่ แอดเดรส FFH จะเห็ นได้ว่าแอดเดรสของหน่ วยความจาทั้งสองส่ วนเกิ ดการทับ
ซ้อนกัน ในการเข้าถึงข้อมูลจะไม่ชนกันทั้งนี้ เนื่ องจากหน่ วยความจาทั้งสองส่ วนใช้วิธีการเข้าถึงข้อมูล
ต่างกัน กล่าวคือหน่วยความจาที่ใช้งานทัว่ ไปในส่ วนบนจะใช้การเข้าถึงข้อมูลแบบทางอ้อมเท่านั้น เป็ น
การเข้าถึงข้อมูลโดยการระบุตาแหน่งจากรี จิสเตอร์ อื่น (Ri : R0, R1) ส่ วนหน่วยความจาใช้งานพิเศษจะ
ใช้วธิ ี การเข้าถึงข้อมูลแบบโดยตรงเท่านั้น สาหรับการจัดสรรหน่วยความจาภายในเป็ นดังรู ปที่ 2-1

รู ปที่ 2-1 การจัดสรรหน่วยความจาภายใน

2.2 รีจิสเตอร์
รี จิสเตอร์ (Register) เป็ นหน่วยความจาภายในแอดเดรสใดแอดเดรสหนึ่ งที่ถูกจองเพื่อให้ทางาน
อย่างใดอย่างหนึ่ ง ดังนั้นรี จิส เตอร์ ก็มีหมายเลขแอดเดรส ในการใช้งานสามารถระบุ เป็ นแอดเดรสก็
สามารถใช้งานได้ โดยรี จิสเตอร์มี 2 ประเภทแบ่งตามการใช้งานคือ
- รี จิสเตอร์ ใช้งานทัว่ ไป
- รี จิสเตอร์ใช้งานพิเศษ

รี จิสเตอร์ใช้งานทัว่ ไป (General purpose register)


รี จิสเตอร์ ใช้งานทัว่ ไปเป็ นการจัดสรรหน่ วยความจาภายใน โดยใช้งานในหน่วยความจาใช้งาน
ทัว่ ไปส่ วนล่าง (Lower) มีท้ งั หมด 8 ตัวคือ R0,R1,..R7 รวมเรี ยกว่ารี จิสเตอร์ Rn ซึ่ ง Rn สามารถเปลี่ยน
ตาแหน่งได้ 4 ช่วง (4 Bank) โดยค่าเริ่ มต้น (ค่าปกติหลังจากไมโครคอนโทรลเลอร์ รีเซตหรื อเริ่ มทางาน)
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 37
Rn จะอยูใ่ นช่ วงแรก (Bank 0) ซึ่ งแอดเดรสของรี จิสเตอร์ ตวั แรก (R0) จะอยู่ที่แอดเดรส 00H ตัวที่ 2 (R1)
จะอยู่ที่แอดเดรส 01H ไล่ข้ ึนไปเรื่ อย ๆ จนถึงตัวสุ ดท้ายที่แอดเดรส 07H แต่ผูใ้ ช้งานสามารถเปลี่ ยนช่ วง
การใช้งานรี จิสเตอร์ ใช้งานทัว่ ไป Rn ได้ โดยการกาหนดค่าในรี จิสเตอร์ ใช้งานพิเศษ PSW ซึ่ งจะได้กล่าว
ในตอนถัดไป

ในหน่วยความจาภายในใช้งานทัว่ ไปในส่ วนล่างมีช่วงแอดเดรสบางช่ วงที่สามารถเข้าถึงได้ใน


ระดับบิต โดยสามารถสั่งให้บิตเป็ น 1 หรื อ 0 หรื อ ตรวจสอบสถานะบิตได้โดยไม่กระทบกับบิตอื่นใน
หน่วยความจาในแอดเดรสนั้น ๆ หน่ วยความจาที่สามารถเข้าถึงได้ในระดับบิตนี้ จะเริ่ มที่แอดเดรส 20H
จนถึงแอดเดรส 2FH ซึ่ งมีบิตแอดเดรสในบิตที่ 0 ของหน่ วยความจาแอดเดรส 20H เป็ น 00H และสิ้ นสุ ดที่
บิตแอดเดรส 7FH ที่บิตที่ 7 ของหน่วยความจาแอดเดรส 2FH ดังรู ปที่ 2-2

รู ปที่ 2-2 รายละเอียดของหน่วยความจาภายในใช้งานทัว่ ไป

รี จิสเตอร์ใช้งานพิเศษ (Special Function Register)


รี จิสเตอร์ ใช้งานพิเศษ (SFR: Special function register) เป็ นหน่ วยความจาที่มีรีจิสเตอร์ ใช้งาน
พิ เ ศษ(งานที่ มี ห น้า ที่ เฉพาะอย่า งใดอย่า งหนึ่ ง ) โดยรี จิ ส เตอร์ แต่ ล ะตัว มี ห น้า ที่ แ ตกต่ า งกัน ไป ซึ่ งมี
รี จิสเตอร์ บางตัวที่สามารถเข้าถึงได้ในระดับบิต (มีบิตแอดเดรส) อินเทลได้ออกแบบให้มีรีจิสเตอร์พิเศษ
ดังนี้
38 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
- รี จิสเตอร์ พอร์ต 0 ,พอร์ ต 1 ,พอร์ต 2 ,พอร์ต 3 - รี จิสเตอร์ SBUF (Serial data buffer)
- รี จิสเตอร์ A (Accumulator) - รี จิสเตอร์ PCON (Power control register)
- รี จิสเตอร์ B - รี จิสเตอร์ SCON (Serial port control register)
- รี จิสเตอร์ SP (Stack pointer) - รี จิสเตอร์ TCON (Timer/Counter control register)
- รี จิสเตอร์ DPTR (Data pointer) - รี จิสเตอร์ IE (Interrupt enable register)
- รี จิสเตอร์ PSW (Program status word) - รี จิสเตอร์ IP (Interrupt priority register)

รู ปที่ 2-3 การจัดสรรรี จิสเตอร์ใช้งานพิเศษ

รี จิสเตอร์พอร์ต P0, P1, P2, P3 (Port 0, Port 1, Port 2, Port 3)


รี จิสเตอร์ พอร์ ตของไมโครคอนโทรลเลอร์ MCS-51 ทั้งหมดมี 4 ตัว โดยทาหน้าที่รับส่ งข้อมู ล
เข้าออกทางขาพอร์ ต นัน่ ก็หมายความว่าหากต้องการส่ งข้อมูลออกทางขาพอร์ ตก็เพียงนาข้อมูลที่ตอ้ งการ
ส่ งออกมาใส่ ไว้ในรี จิสเตอร์ ของพอร์ ตนั่น ๆ ในขณะเดี ยวกันหากขาพอร์ ตเชื่ อมต่อกับอุปกรณ์ อินพุท
รี จิสเตอร์ พอร์ ตจะมีค่าลอจิกเช่ นเดี ยวกับขาพอร์ ต (ต้องส่ งค่าลอจิก 1 ออกไปก่อนสาหรับการทาหน้าที่
เป็ นอินพุท) ซึ่ งตาแหน่งของรี จิสเตอร์ ของพอร์ ต 0 อยูท่ ี่แอดเดรส 80H ตาแหน่งของรี จิสเตอร์ พอร์ ต 1 อยู่
ที่แอดเดรส 90H ตาแหน่ งของรี จิสเตอร์ พอร์ ต 2 อยู่ที่ A0H ตาแหน่ งของรี จิสเตอร์ พอร์ ต 3 อยู่ที่แอดเดรส
B0H รี จิสเตอร์พอร์ ตทั้งหมดอยูใ่ นหน่วยความจาใช้งานพิเศษ (SFR)
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 39

รู ปที่ 2-4 การใช้งานพอร์ ต 1 เป็ นเอาท์พุทพอร์ต

จากรู ปถ้ า ค่ า ภายในรี จิ ส เตอร์ P1 มี ค่ า เท่ า กั บ 55H จะส่ งผลให้ LED ติ ด ดั บ สลั บ กั น
(55H=010101012 ลอจิ ก 1 LED รับ แรงดันไฟบวกที่ออกจากขาพอร์ ตท าให้ติด สว่าง) ค าสั่ง ที่ ทาให้
รี จิสเตอร์ P1 มีค่าเป็ น 55H ได้น้ นั สามารถทาได้โดยใช้คาสั่ง
MOV 90H,#55H (ภาษาแอสเซมบลี)
P1=0x55; (ภาษาซี)

รู ปที่ 2-5 แสดงการใช้งานพอร์ต 0 เป็ นอินพุทพอร์ต

จากรู ปจะสังเกตเห็นสวิตช์ 1 ตัวที่ถูกกดอยูเ่ หตุการณ์น้ ี จะทาให้ขาของพอร์ต 0 บิตที่ 1 จะถูก


ลัดวงจรลงกราวด์ทาให้ได้รับลอจิก 0 ดังนั้นถ้าตรวจสอบค่าของข้อมูลภายในรี จิสเตอร์ P0 จะมีค่าเท่ากับ
FDH หรื อ 111111012
40 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รี จิสเตอร์ A (Accumulator: ACC)


รี จิสเตอร์ A เป็ นรี จิสเตอร์ขนาด 8 บิต ซึ่ งอยูใ่ นหน่วยความจาใช้งานพิเศษแอดเดรส E0H ทางาน
เป็ นรี จิสเตอร์ แอคคิวมูเลเตอร์ กล่าวคือทาหน้าที่เป็ นอินพุทและเอาท์พุทของหน่วยประมวลผลกลาง ทา
หน้าที่ประมวลผลทางคณิ ตศาสตร์ และลอจิก (ALU: Arithmetic and logic unit ) หรื อกล่าวอีกนัยหนึ่ งว่า
เป็ นรี จิสเตอร์ ที่เก็บข้อมูลเพื่อที่นาไปใช้ในการคานวณ และเป็ นรี จิสเตอร์ สาหรับเก็บข้อมูลผลลัพธ์ที่ได้
จากการคานวณ

รี จิสเตอร์ B
รี จิส เตอร์ B เป็ นรี จิสเตอร์ ข นาด 8 บิต อยู่ใ นหน่ วยความจาใช้งานพิ เศษแอดเดรส F0H โดย
ทางานหน้าที่หลัก คือเป็ นรี จิสเตอร์ ที่กระทาคาสั่งคูณและคาสั่งหาร โดยใช้งานร่ วมกับรี จิสเตอร์ A แต่ถา้
ต้องการใช้งานอื่นที่ไม่เกี่ยวข้องกับการคูณหรื อหาร ก็สามารถทาได้เหมือนกันกับหน่ วยความจาใช้งาน
ทัว่ ไป แต่การเข้าถึงข้อมูลจะต้องใช้การเข้าถึงแบบโดยตรงเท่านั้น

รี จิสเตอร์ SP (Stack pointer)

รี จิส เตอร์ SP เป็ นรี จิสเตอร์ ข นาด 8 บิ ตอยู่ในหน่ วยความจาใช้งานพิ เศษแอดเดรส 81H โดย
ทางานเป็ นรี จิสเตอร์ ช้ ี ตาแหน่ งหน่ วยความจาแบบสแต็ก มีค่าเริ่ มต้นหลังจากการรี เซตหรื อเริ่ มทางาน
เป็ น 07H ซึ่ งหน่ วยความจาสแต็กเป็ นการจองพื้นที่ใช้งานในหน่ วยความจาใช้งานทัว่ ไปส่ วนล่าง โดย
ตาแหน่ งของหน่ วยความจาแบบสแต็กเริ่ มที่แอดเดรส 07H หน่ วยความจาสแต็กจะถูกเรี ยกใช้งานเมื่อมี
ก า ร เ รี ย ก ใ ช้ ค า สั่ ง PUSH, POP, ACALL, LCALL, RET เ ป็ น ต้ น ( ค า สั่ ง ACALL, LCALL
ไมโครคอนโทรลเลอร์ จะนาค่าแอดเดรสของโปรแกรมหลักฝากไว้ที่หน่ วยจาสแต็กเพื่อไปทางานใน
โปรแกรมย่อย และเมื่อจบโปรแกรมย่อยจะใช้คาสั่ง RET เพื่อเรี ยกค่าแอดเดรสโปรแกรมหลักกลับมาใช้
งานต่อ ซึ่ งขบวนการนี้เป็ นไปโดยอัตโนมัติ)

23 4A
1E 8F 6A 4A
4A
1A 35 35 35

PUSH 1AH PUSH 23H POP 6AH

รู ปที่ 2-6 ตัวอย่างการใช้งานหน่วยความจาสแต็ก


หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 41

รี จิสเตอร์ DPTR (Data pointer)

รี จิสเตอร์ DPTR เป็ นรี จิสเตอร์ขนาด16 บิต เหตุที่เป็ น 16 บิต เนื่ องจากประกอบขึ้นจากรี จิสเตอร์
8 บิต 2 ตัวคือ DPH และ DPLโดยทั้ง 2 ตัวนี้ อยู่ในหน่วยความจาใช้งานพิเศษ ซึ่ งรี จิสเตอร์ DPH จะอยู่ที่
แอดเดรส 83H และรี จิสเตอร์ DPL จะอยูท่ ี่แอดเดรส 82H หน้าที่ของรี จิสเตอร์ DPTR คือเป็ นตัวชี้ตาแหน่ง
หน่วยความจาเก็บข้อมูลที่ต่ออยูภ่ ายนอกเพื่อนาข้อมูลไปเก็บหรื อนาข้อมูลออกมาใช้งาน และสามารถใช้
ชี้ ตาแหน่ งหน่ วยความจาเก็บโปรแกรมเพื่อนาข้อมูลมาใช้งาน ที่เรี ยกว่าการนาข้อมูลมาแบบเปิ ดตาราง
โดยใช้งานในโหมด Indexed addressing ซึ่ งจะได้กล่าวต่อไป

รี จิสเตอร์ PSW (Program status word)

รี จิสเตอร์ PSW เป็ นรี จิสเตอร์ ขนาด 8 บิ ต ซึ่ งอยู่ในหน่ วยความจาใช้งานพิ เศษแอดเดรส D0H
โดยทางานเป็ นรี จิสเตอร์ ที่สามารถเข้าถึงได้ในระดับบิต ซึ่ งแต่ละบิตของรี จิสเตอร์ มีหน้าที่ในการควบคุม
แตกต่างกันไป ดังนี้

CY AC F0 RS1 RS0 OV - P

CY แฟลกตัวทด (Carry Flag) จะมีการเปลี่ยนแปลงเมื่อมีการกระทาทางคณิ ตศาสตร์ ที่มีการ


ทดหรื อการยืมของเลขขนาด 8 บิต
AC แฟลกทดช่วยหรื อเรี ยกว่าแฟลกทดครึ่ ง (Auxiliary carry flag) จะมีการเปลี่ยนแปลงเมื่อ
มีการทดหรื อยืมระหว่าง 4 บิตล่างกับ 4 บิตบน
RS1,RS0 เป็ นบิ ตที่ ใ ช้ก าหนดช่ วง (Bank) การใช้ง านของรี จิส เตอร์ ใ ช้ง านทัว่ ไป (Rn) ซึ่ ง ค่ า
เริ่ มต้นจะมีค่าเป็ น 00 นัน่ ก็หมายความว่า รี จิสเตอร์ Rn ค่าเริ่ มต้นจะอยูท่ ี่ Bank 0
RS1 RS0 Bank
0 0 0
0 1 1
1 0 2
1 1 3
OV โอเวอร์ โฟว์แฟลก เป็ นแฟลกแสดงการล้น เมื่อมีการเรี ยกใช้คาสั่งทางคณิ ตศาสตร์ แล้ว
ผลลัพธ์ที่ได้มีการล้นของข้อมูลบิตนี้จะมีค่าเป็ น 1
42 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
P แฟลกพาริ ต้ ี เป็ นแฟลกที่แสดงถึ งจานวนของลอจิกเป็ น 1 ที่อยูภ่ ายในรี จิสเตอร์ A โดย
ถ้ามีลอจิก 1 เป็ นจานวนคู่แฟลกนี้จะเป็ น 0 แต่ถา้ มีลอจิก 1 เป็ นจานวนคี่แฟลกจะเป็ น 1

รี จิสเตอร์ SBUF (Serial data buffer)


รี จิสเตอร์ SBUF เป็ นรี จิสเตอร์ ขนาด 8 บิตอยู่ในหน่วยความจาใช้งานพิเศษแอดเดรส 99H โดย
ทางานเป็ นรี จิสเตอร์ เก็บข้อมูลที่ตอ้ งการส่ งออกทางพอร์ ตอนุ กรม และทาหน้าที่เก็บข้อมูลจากการรั บ
ข้อมูลทางพอร์ตอนุกรม

รี จิสเตอร์ PCON (Power control register)


รี จิสเตอร์ PCON เป็ นรี จิสเตอร์ ขนาด 8 บิตอยูใ่ นหน่วยความจาใช้งานพิเศษแอดเดรส 87H ใช้ใน
การกาหนดอัตราเร็ วในการรับส่ งข้อมูล และการลดพลังงานไฟฟ้า

รี จิสเตอร์ SCON (Serial port control register)


รี จิสเตอร์ SCON เป็ นรี จิสเตอร์ ขนาด 8 บิตอยูใ่ นหน่วยความจาใช้งานพิเศษแอดเดรส 98H โดยมี
หน้าที่กาหนดโหมดการทางานของพอร์ ตอนุกรม รวมทั้งมีบิตแฟลกการรับส่ งข้อมูลอนุ กรม รายละเอียด
จะกล่าวอีกครั้งในบทการสื่ อสารทางพอร์ ตอนุกรม

รี จิสเตอร์ TCON (Timer/Counter control register)


รี จิสเตอร์ TCON เป็ นรี จิสเตอร์ ขนาด 8 บิตอยูใ่ นหน่วยความจาใช้งานพิเศษแอดเดรส 88H โดย
ทางานเป็ นรี จิสเตอร์ ควบคุมการทางานของวงจรไทเมอร์ เคาน์เตอร์ รวมทั้งมีแฟลกของการทางานด้วย
ซึ่ งรายละเอียดจะกล่าวอีกครั้งในบทการใช้งานวงจรไทเมอร์ เคาน์เตอร์

รี จิสเตอร์ IE (Interrupt enable register)


รี จิสเตอร์ IE เป็ นรี จิส เตอร์ ข นาด 8 บิ ตอยู่ใ นหน่ วยความจาใช้ง านพิเศษแอดเดรส A8H โดย
ทางานเป็ นรี จิสเตอร์ กาหนดการตอบสนองต่อสัญญาณการขัดจังหวะ (Interrupt) ในแต่ละประเภท ซึ่ ง
รายละเอียดจะกล่าวอีกครั้งในบทการขัดจังหวะการทางาน
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 43

รี จิสเตอร์ IP (Interrupt priority register)


รี จิส เตอร์ IP เป็ นรี จิส เตอร์ ข นาด 8 บิ ตอยู่ใ นหน่ วยความจาใช้ง านพิเศษแอดเดรส B8H โดย
ทางานเป็ นรี จิสเตอร์ จดั ลาดับความสาคัญของการอินเตอร์ รัพท์ในแต่ละประเภท โดยการกาหนดในแต่ละ
บิตของรี จิสเตอร์ ซ่ ึ งรายละเอียดจะกล่าวอีกครั้งในบทการขัดจังหวะการทางาน

2.3 การติดต่ อกับหน่ วยความจาภายนอก


ไมโครคอนโทรลเลอร์ MCS-51 สามารถต่อหน่ วยความจาภายนอกได้ ทั้งที่เป็ นหน่ วยความจา
สาหรั บเก็บชุ ดคาสั่งหรื อที่ เรี ยกว่าใช้เก็บโปรแกรมภายนอก และหน่ วยความจาที่ ใช้เก็บข้อมู ล โดยมี
วิธีการเชื่ อมต่อกับตัวไมโครคอนโทรลเลอร์ ที่แตกต่างกันตรงขาสัญญาณในการบังคับการเขียนข้อมู ล
หน่ วยความจาเก็บโปรแกรมจะอ่านได้อย่างเดี ยวโดยไมโครคอนโทรลเลอร์ จะส่ งสัญญาณอ่านข้อมู ล
ออกมาทางขา PSEN แต่สาหรับหน่วยความจาเก็บข้อมูลไมโครคอนโทรลเลอร์ จะสามารถอ่านข้อมูลและ
เขียนข้อมูลได้ โดยเมื่อต้องการอ่านข้อมูลไมโครคอนโทรลเลอร์ จะส่ งสัญญาณควบคุมออกมาทางขา RD
ในท านองเดี ย วกันเมื่ อต้องการบันทึ ก ข้อ มู ล ลงหน่ วยความจาไมโครคอนโทรลเลอร์ จะส่ ง สั ญญาณ
ควบคุมออกมาทางขา WR ซึ่ งทั้ง RD และ WR จะอยูท่ ี่พอร์ ต 3

การติดต่อกับหน่วยความจาเก็บโปรแกรมภายนอก
ไมโครคอนโทรลเลอร์ MCS-51 สามารถติ ด ต่ อ หน่ ว ยความจ าเก็ บ โปรแกรมที่ ต่ อ เพิ่ ม เติ ม
ภายนอกเพื่ อ ใช้ ง านได้ ในกรณี ที่ ไ ม่ ต้ อ งการใช้ ง านหน่ ว ยความจ าเก็ บ โปรแกรมภายใน หรื อ
หน่วยความจาเก็บโปรแกรมภายในไม่พอใช้งาน โดยไมโครคอนโทรลเลอร์ สามารถติดต่อหน่วยความจา
เก็บโปรแกรมได้สูงสุ ด 64 กิ โลไบต์ เนื่ องจากมีขาแอดเดรส 16 ขา (216=65536=64 กิ โลไบต์) ซึ่ งใช้งาน
พอร์ต 0 และพอร์ต 2 เป็ นพอร์ ตที่ส่งค่าแอดเดรสให้กบั หน่วยความจา และใช้พอร์ ต 0 ทาหน้าที่เป็ นดาต้า
บัส (Data Bus) โดยใช้วธิ ีการทางานคนละเวลา (Multiplex) ระหว่างส่ งค่าแอดเดรสกับการรับข้อมูล

การติดต่อหน่วยความจาเก็บโปรแกรมภายนอกจะใช้ขาและพอร์ ตเพื่อเชื่ อมต่อดังนี้


- พอร์ต 0 เป็ นแอดเดรสบัสไบต์ต่า (A0-A7) และดาต้าบัส (D0-D7)
- พอร์ต 2 เป็ นแอดเดรสบัสไบต์สูง (A8-A15)
- ขา PSEN เพื่อกระตุน้ การส่ งข้อมูลให้กบั ไมโครคอนโทรลเลอร์
- ขา ALE เพื่อค้างค่าแอดเดรสไบต์ต่าที่มาจากพอร์ ต 0 เพื่อให้พอร์ ต 0 ไปทาหน้าที่ดาต้าบัส
- ขา EA เพื่อกาหนดการเริ่ มอ่านคาสั่งของไมโครคอนโทรลเลอร์
44 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
จากรู ปที่ 2-7 พอร์ต 2 จะถูกใช้งานไม่ครบทุกขาทั้งนี้เนื่องจากหน่วยความจาที่ใช้เก็บโปรแกรมมี
ขนาดไม่ถึง 64 กิ โลไบต์นนั่ เอง ซึ่ งในรู ปเป็ นหน่วยความจาที่มีขาแอดเดรสเพียง 13 ขาคือมี A0 ถึง A12
ดังนั้นขนาดของหน่วยความจาจึงมีเพียง 8 กิโลไบต์ โดยสามารถคานวณได้จาก
ขนาดของหน่วยความจา = 213 ; 2 ยกกาลังจานวนแอดเดรส
= 8192
= 8 กิโลไบต์

รู ปที่ 2-7 วงจรเชื่ อมต่อหน่วยความจาเก็บโปรแกรม

การติดต่อกับหน่วยความจาเก็บข้อมูลภายนอก
ไมโครคอนโทรลเลอร์ MCS-51 สามารถติดต่อหน่วยความจาที่เก็บข้อมูลภายนอกเพื่อใช้งานได้
ในกรณี ที่หน่ วยความจาเก็บข้อมูลภายในไม่เพียงพอต่อการใช้งาน โดยไมโครคอนโทรลเลอร์ สามารถ
ติดต่อหน่ วยความจาเก็บข้อมูลภายนอกได้สูงสุ ด 64 กิ โลไบต์ ซึ่ งเป็ นคนละส่ วนกับหน่ วยความจาเก็บ
โปรแกรมเนื่องจากใช้สัญญาณกระตุน้ การอ่านข้อมูลแยกกัน โดยมีคาสั่งที่ใช้ในการอ่านและเขียนข้อมูล
ลงหน่ ว ยความจาส าหรั บ เก็ บ ข้อ มู ล ภายนอกโดยเฉพาะ ส าหรั บ การติ ดต่ อ หน่ วยความจ าเก็ บ ข้อมู ล
ภายนอกจะใช้ขาและพอร์ตเพื่อเชื่อมต่อดังนี้
- พอร์ต 0 เป็ นแอดเดรสบัสไบต์ต่า (A0-A7) และดาต้าบัส (D0-D7)
- พอร์ต 2 เป็ นแอดเดรสบัสไบต์สูง (A8-A15)
- ขา ALE เพื่อค้างค่าแอดเดรสไบต์ต่าที่มาจากพอร์ ต 0 เพื่อให้พอร์ ต 0 ไปทาหน้าที่ดาต้าบัส
- ขา RD เพื่ออ่านข้อมูลเข้าสู่ ไมโครคอนโทรลเลอร์
- ขา WR เพื่อเขียนข้อมูลจากไมโครคอนโทรลเลอร์ ลงหน่วยความจา
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 45
สาหรับไมโครคอนโทรลเลอร์ เบอร์ P89V51RD2 จะมีหน่วยความจาสาหรับเก็บข้อมูลภายนอก
แต่ถูกบรรจุเข้าไว้ในตัวไมโครคอนโทรลเลอร์ แล้วซึ่งขนาด 1 กิโลไบต์

รู ปที่ 2-8 วงจรเชื่ อมต่อหน่วยความจาเก็บข้อมูล

รู ปที่ 2-9 วงจรเชื่ อมต่อหน่วยความจาทั้งสองประเภท


46 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

2.4 สรุปสาระสาคัญ
ไมโครคอนโทรลเลอร์ ตระกู ล MCS-51 มี หน่ วยความจาภายในเพื่ อใช้ส าหรั บ เก็ บ ข้อมู ล ใน
ระหว่างการประมวลผลอยู่ 2 ส่ วนแบ่งตามหน้าที่คือ หน่ วยความจาใช้งานทัว่ ไปและหน่ วยความจาใช้
งานเฉพาะ โดยที่ หน่ วยความจาใช้ง านทัว่ ไปยัง แบ่ง ออกได้อีก 2 ส่ วนคื อส่ วนที่ สามารถเข้า ถึ งได้ท้ งั
ทางตรงและทางอ้อมกับส่ วนที่ เข้าที่ ไ ด้ในทางอ้อมเท่า นั้น สาหรั บหน่ วยความจาที่ ใช้งานเฉพาะเป็ น
บริ เวณที่อยูข่ องรี จิสเตอร์ สาคัญ ๆ ที่มีหน้าที่ต่าง ๆ ที่ใช้ในการทางานของไมโครคอนโทรลเลอร์ โดยใน
ส่ วนนี้การเข้าถึงจะต้องเข้าถึงในแบบทางตรงเท่านั้น
ไมโครคอนโทรลเลอร์ ตระกูล MCS-51 สามารถต่อหน่ วยความจาภายนอกเพิ่มเติมได้ท้ งั ที่เป็ น
ชนิดเก็บโปรแกรมและชนิดเก็บข้อมูล การที่จะต่อหน่วยความจาภายนอกจะทาในกรณี ที่หน่วยความจาที่
มีอยูภ่ ายในไม่เพียงพอที่จะใช้งานหรื อไม่มีให้ใช้งานในบางเบอร์ สาหรับการต่อหน่วยความจาภายนอก
จาเป็ นต้องใช้พอร์ต 0 และพอร์ ต 2 ในการติดต่อสื่ อสารกับหน่วยความจาภายนอกโดยใช้เป็ นทั้ง Address
bus และ Data bus ขนาดของหน่ วยความจาสามารถดู ได้จากขาแอดเดรสคานวณได้จาก 2จานวนขา เช่ น
หน่ วยความจามี ขาแอดเดรส 13 ขาคื อมี ขาตั้งแต่ A0-A12 ขนาดของหน่ วยความจาจะเท่ากับ 213=8192
หรื อ 8 กิโลไบต์
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 47

แบบฝึ กหัดหน่ วยที่ 2


คาชี้แจง ให้นกั ศึกษาตอบคาถามต่อไปนี้ให้สมบรู ณ์
1. หน่วยความจาเก็บข้อมูลภายในมีกี่ส่วนอะไรบ้าง

2. หน่วยความจาเก็บข้อมูลภายในแต่ละส่ วนมีช่วงแอดเดรสตั้งแต่เท่าใดถึงเท่าใด

3. หน่วยความจาเก็บข้อมูลภายในใช้งานทัว่ ไปที่สามารถเข้าถึงได้ในระดับบิตมีช่วงแอดเดรส
เท่าใดและเป็ นบิตแอดเดรสเท่าได

4. รี จิสเตอร์ ที่มีหน้าที่ทางานพิเศษใด ๆ จะอยูใ่ นหน่วยความจาบริ เวณใด

5. รี จิสเตอร์ พอร์ ตต่าง ๆ ของไมโครคอนโทรลเลอร์ ในแต่ละพอร์ ตอยูท่ ี่แอดเดรสใดบ้าง

6. รี จิ ส เตอร์ ใ ช้ง านทั่ว ไป (Rn) สามารถก าหนดให้ ใ ช้ง านได้กี่ ช่ ว ง (Bank) ในแต่ ล ะช่ ว งอยู่ที่
แอดเดรสใดบ้าง และค่าเริ่ มต้นรี จิสเตอร์ ใช้งานทัว่ ไป (Rn) จะอยูใ่ นช่วง (Bank) ใด

7. การอ่านข้อมูลจากหน่วยความจาภายนอกไมโครคอนโทรลเลอร์ จะส่ งสัญญาณอ่านออกจากขา


ใดเพื่ออ่านจากหน่วยความจาเก็บโปรแกรมและจากขาใดเพื่ออ่านจากหน่วยความจาเก็บข้อมูล

8. หากต้องการต่อหน่วยความจาภายนอกขนาด 16 กิโลไบต์จะต้องแอดเดรสกี่ขาโดยแต่ละขามา
จากพอร์ ตใดบิตใดบ้าง
48 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. จงเขียนผังวงจรการเชื่ อมต่อกับหน่วยความจาภายนอกที่เป็ นชนิ ด RAM เบอร์ W24129A ขนาด
16 กิโลไบต์กบั ไมโครคอนโทรลเลอร์ MCS-51
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 49

แบบทดสอบหลังเรียนหน่ วยที่ 2
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. แอดเดรสใดคือแอดเดรสแรกของ 5. หน่วยความจาภายในสาหรับเก็บข้อมูลแบ่ง
หน่วยความจาใช้งานทัว่ ไปส่ วนบน (Upper) ตามหน้าที่ได้กี่ส่วน
ก. 00H ก. 1 ส่ วน
ข. 20H ข. 2 ส่ วน
ค. 40H ค. 3 ส่ วน
ง. 80H ง. 4 ส่ วน
จ. A0H จ. 5 ส่ วน
2. แอดเดรสใดคือแอดเดรสแรกของ 6. ข้อใดคือขนาดสู งสุ ดของหน่วยความจาเก็บ
หน่วยความจาใช้งานพิเศษ โปรแกรมที่ MCS-51 อ้างถึงได้
ก. 00H ก. 4 กิโลไบต์
ข. 20H ข. 8 กิโลไบต์
ค. 40H ค. 16 กิโลไบต์
ง. A0H ง. 32 กิโลไบต์
จ. 80H จ. 64 กิโลไบต์
3. การบังคับการใช้งานหน่วยความจาเก็บ 7. หน่วยความจาภายในสาหรับเก็บข้อมูล
โปรแกรมกาหนดได้จากขาใด ส่ วนล่าง (Lower) มีขนาดความจุเท่าใด
ก. ขา PSEN ก. 8 ไบต์
ข. ขา ALE ข. 64 ไบต์
ค. ขา EA ค. 128 ไบต์
ง. ขา RD ง. 256 ไบต์
จ. ขา WR จ. 512 ไบต์
4. หน่วยความจาของไมโครคอนโทรลเลอร์ 8. หน่วยความจาที่สามารถเข้าถึงได้ในระดับบิต
ตระกูล MCS-51 แบ่งตามลักษณะการใช้งาน ที่อยูใ่ นหน่วยความจาใช้งานทัว่ ไปอยูใ่ นช่วง
ได้กี่ส่วน แอดเดรสใด
ก. 1 ส่ วน ก. 20H-2FH
ข. 2 ส่ วน ข. 30H-3FH
ค. 3 ส่ วน ค. 50H-5FH
ง. 4 ส่ วน ง. 40H-4FH
จ. 5 ส่ วน จ. 60H-6FH
50 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

9. รี จิสเตอร์ ใช้งานทัว่ ไปเมื่อเริ่ มต้นจะอยูท่ ี่ 13. ข้อใดคือหน้าที่หลักของรี จิสเตอร์ A ของ


แอดเดรสใด ไมโครคอนโทรลเลอร์
ก. 00H-02H ก. เป็ นรี จิสเตอร์ กาหนดการทางานของ
ข. 00H-04H ไมโครคอนโทรลเลอร์
ค. 00H-06H ข. เป็ นรี จิสเตอร์ ส่งค่าออกพอร์ ต
ง. 00H-07H ค. เป็ นรี จิสเตอร์ กาหนดการทางานของ
จ. 00H-08H พอร์ต
10. รี จิสเตอร์ ใช้งานทัว่ ไปมีท้ งั หมดกี่ตวั ง. เป็ นรี จิสเตอร์ อ่านค่าจากพอร์ ต
ก. 1 ตัว จ. เป็ นรี จิสเตอร์ เก็บผลลัพธ์ของการ
ข. 2 ตัว ประมวลผล
ค. 4 ตัว 14. ข้อใดคือหน้าที่หลักของรี จิสเตอร์ B ของ
ง. 6 ตัว ไมโครคอนโทรลเลอร์ MCS-51
จ. 8 ตัว ก. เป็ นรี จิสเตอร์ ส่งค่าออกพอร์ ต
11. ผูใ้ ช้สามารถเปลี่ยนช่วงที่อยู่ (Bank) ของ ข. เป็ นรี จิสเตอร์ ที่กระทาคาสัง่ คูณและ
รี จิสเตอร์ ใช้งานทัว่ ไปได้กี่ตาแหน่ง คาสั่งหาร
ก. 2 ตาแหน่ง ค. เป็ นรี จิสเตอร์ กาหนดการทางานของ
ข. 4 ตาแหน่ง ไมโครคอนโทรลเลอร์
ค. 6 ตาแหน่ง ง. เป็ นรี จิสเตอร์ อ่านค่าจากพอร์ ต
ง. 8 ตาแหน่ง จ. เป็ นรี จิสเตอร์ กาหนดการทางานของ
จ. 12 ตาแหน่ง พอร์ต
12. การทาให้พอร์ ตมีค่าลอจิกตามต้องการจะต้อง 15. การอ่านค่าจากพอร์ ตจะต้องทาอย่างไร
ทาอย่างไร ก. อ่านค่าผ่านรี จิสเตอร์ A
ก. เคลียร์ ค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ ข. อ่านค่าจากของพอร์ ตนั้น ๆ โดยตรง
ข. เซตค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ ค. อ่านค่าผ่านรี จิสเตอร์ B
ค. เซตค่าลงในพอร์ ตนั้น ๆ ง. อ่านค่าจากรี จิสเตอร์ ของพอร์ ตนั้น ๆ
ง. กาหนดค่าลงในรี จิสเตอร์ ของพอร์ ตนั้น ๆ จ. อ่านค่าผ่านรี จิสเตอร์ PSW
จ. กาหนดค่าลงในพอร์ ตนั้น ๆ
หน่ วยที่ 2 รี จิสเตอร์และหน่วยความจา 51
16. ข้อใดคือหน้าที่หลักของขา PSEN 19. ดาต้าบัส (D0-D7) ต่อออกจากพอร์ ตใดของ
ก. ส่ งสัญญาณอ่านข้อมูลจาก ไมโครคอนโทรลเลอร์ MCS-51
หน่วยความจาเก็บโปรแกรมภายนอก ก. พอร์ต 0
ข. ส่ งสัญญาณอ่านข้อมูลจาก ข. พอร์ต 1
หน่วยความจาเก็บโปรแกรมภายใน ค. พอร์ต 2
ค. ส่ งสัญญาณอ่านข้อมูลจาก ง. พอร์ต 3
หน่วยความจาเก็บข้อมูลภายใน จ. พอร์ต 4
ง. ส่ งสัญญาณอ่านข้อมูลจาก 20. ข้อใดคือหน้าที่ของขา ALE
หน่วยความจาเก็บข้อมูลภายนอก ก. ส่ งสัญญาณอ่านข้อมูลจาก
จ. ส่ งสัญญาณเขียนข้อมูลจาก หน่วยความจาเก็บโปรแกรมภายใน
หน่วยความจาเก็บโปรแกรม ข. ส่ งสัญญาณอ่านข้อมูลจาก
17. ขาใดส่ งสัญญาณเพื่ออ่านข้อมูลจาก หน่วยความจาเก็บข้อมูลภายนอก
หน่วยความจาเก็บข้อมูลภายนอก ค. ส่ งสัญญาณอ่านข้อมูลจาก
ก. ALE หน่วยความจาเก็บข้อมูลภายใน
ข. RD ง. ส่ งสัญญาณเพื่อกระตุน้ ให้คา้ งค่า
ค. WR แอดเดรส
ง. PSEN จ. ส่ งสัญญาณเขียนข้อมูลจาก
จ. EA หน่วยความจาเก็บโปรแกรม
18. หน่วยความจา 8 กิโลไบต์มีแอดเดรสกี่ขา
ก. 8 ขา
ข. 10 ขา
ค. 11 ขา
ง. 13 ขา
จ. 16 ขา

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ก 3. จ 4. ข 5. ค 6. จ 7. ง 8. จ 9. จ 10. ข
11. ก 12. ค 13. ง 14. จ 15. ข 16. ค 17. ข 18. ก 19. ง 20. ง

เฉลยแบบทดสอบหลังเรี ยน
1. ง 2. จ 3. ก 4. ข 5. ข 6. จ 7. ค 8. ก 9. จ 10. จ
11. ข 12. ง 13. จ 14. ข 15. ง 16. ก 17. ข 18. ง 19. ก 20. ง
หน่ วยที่ 3
ชุ ดคำสั่ งและวงจรไทเมอร์ เคำน์ เตอร์
หัวข้อเรื่ อง
3.1 ชุดคำสั่ง (Instruction set)
3.2 วงจรไทเมอร์ /เคำน์เตอร์ (Timer/Counter)

สำระสำคัญ
ชุ ดคำสั่งของไมโครคอนโทรลเลอร์ MCS-51 เป็ นภำษำแอสเซมบลี ซ่ ึ งเป็ นภำษำที่ใกล้เคียงกับ
ภำษำเครื่ องมำกที่สุดมีโหมดในกำรเข้ำถึงหน่วยควำมจำ 5 โหมด วงจรไทเมอร์ /เคำน์เตอร์ เป็ นวงจรที่มี
บรรจุ อ ยู่ ภ ำยในไมโครคอนโทรลเลอร์ มี ก ำรท ำงำนอิ ส ระแยกจำกหน่ ว ยประมวลผลกลำงของ
ไมโครคอนโทรลเลอร์ กำรใช้งำนวงจรไทเมอร์ /เคำน์เตอร์ มีโหมดกำรใช้งำนทั้งหมด 4 โหมด จำนวน
วงจรไทเมอร์จะมี 2 วงจรหรื อ 3 วงจรขึ้นอยูก่ บั เบอร์ ที่เลือกใช้งำน

สมรรถนะประจำหน่วยกำรเรี ยนรู ้
แสดงควำมรู ้เกี่ยวกับชุ ดคำสั่งของไมโครคอนโทรลเลอร์ MCS-51 และกำรใช้งำนวงจรไทเมอร์
เคำน์เตอร์ ในโหมดต่ำง ๆ

จุดประสงค์กำรเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีควำมรู ้เกี่ยวกับชุดคำสั่ง (Instruction set)
2. เพื่อให้มีควำมรู ้เกี่ยวกับวงจรไทเมอร์ /เคำน์เตอร์ (Timer/Counter)
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับ ชุดคำสั่ง (Instruction set)ได้
2. บอกเกี่ยวกับวงจรไทเมอร์ /เคำน์เตอร์ (Timer/Counter)ได้
3. ทำแบบฝึ กหัดเสร็ จทันเวลำและทำแบบทดสอบผ่ำนเกณฑ์ที่กำหนด
54 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 3
คำสั่ ง ให้นกั ศึกษำเลือกคำตอบที่ถูกต้องที่สุดเพียงคำตอบเดียว
1. ชุ ด ค ำสั่ ง โหมดกำรอ้ำ งข้อ มู ล ของไมโคร- 5. หน่ วยควำมจำส่ ว นใดใช้ก ำรอ้ำ งแอดเดรส
คอนโทรลเลอร์ตระกูล MCS-51 มีกี่โหมด แบบโดยตรงไม่ได้
ก. 1 โหมด ก. หน่วยควำมจำใช้งำนทัว่ ไปช่วงบน (Upper)
ข. 2 โหมด ข. หน่วยควำมจำใช้งำนทัว่ ไปช่วงล่ำง (Lower)
ค. 3 โหมด ค. หน่วยควำมจำใช้งำนทัว่ ไปช่วงซ้ำย (Left)
ง. 4 โหมด ง. หน่วยควำมจำใช้งำนทัว่ ไปช่วงขวำ (Right)
จ. 5 โหมด จ. หน่วยควำมจำใช้งำนทัว่ ไปช่วงกลำง (Mid)
2. ชุดคำสั่งโหมดกำรกำหนดค่ำลงรี จิสเตอร์ 6. กำรเข้ำถึงข้อมูลในหน่วยควำมจำใช้งำน
โดยตรงคือโหมดใด ทัว่ ไปช่วงบน (Upper) ต้องใช้โหมดใด
ก. Register addressing mode ก. Register addressing mode
ข. Immediate addressing mode ข. Immediate addressing mode
ค. Direct addressing mode ค. Direct addressing mode
ง. Register indirect addressing mode ง. Register indirect addressing mode
จ. Indexed addressing mode จ. Indexed addressing mode
3. ชุดคำสั่งโหมดกำรเข้ำถึงแบบกำหนดชื่อ 7. โหมดของคำสั่งที่นำค่ำในหน่วยควำมจำเก็บ
รี จิสเตอร์ คือโหมดใด โปรแกรมมำใช้งำนคือโหมดใด
ก. Register addressing mode ก. Register addressing mode
ข. Immediate addressing mode ข. Immediate addressing mode
ค. Direct addressing mode ค. Direct addressing mode
ง. Register indirect addressing mode ง. Register indirect addressing mode
จ. Indexed addressing mode จ. Indexed addressing mode
4. กำรอ้ำงแอดเดรสแบบใช้ค่ำแอดเดรสโดยตรง 8. รี จิสเตอร์ ใช้งำนชี้ตำแหน่ง (Ri) ใช้ได้ท้ งั หมด
คือโหมดใด กี่ตวั อะไรบ้ำง
ก. Register addressing mode ก. 2 ตัว คือ R0, R1
ข. Immediate addressing mode ข. 4 ตัว คือ R0,… R3
ค. Direct addressing mode ค. 6 ตัว คือ R0,… R5
ง. Register indirect addressing mode ง. 8 ตัว คือ R0,… R7
จ. Indexed addressing mode จ. 10 ตัว คือ R0,… R9
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 55
9. รี จิสเตอร์ ใช้งำนทัว่ ไปใช้ได้ท้ งั หมดกี่ตวั 13. บิตสำหรับสั่งรันวงจรไทเมอร์ (TR) อยู่
อะไรบ้ำง รี จิสเตอร์ใด
ก. 2 ตัว คือ R0, R1 ก. TMOD
ข. 4 ตัว คือ R0,… R3 ข. TRUN
ค. 6 ตัว คือ R0,… R5 ค. SCON
ง. 8 ตัว คือ R0,… R7 ง. TCON
จ. 10 ตัว คือ R0,… R9 จ. SMOD
10. คำสั่งใดเป็ นคำสั่งในชุดคำสั่งทำง 14. กำรกำหนดโหมดกำรทำงำนของวงจรไท
คณิ ตศำสตร์ เมอร์ กำหนดในรี จิสเตอร์ ใด
ก. SUBB A,Rn ก. TMOD
ข. ANL A,Rn ข. SMOD
ค. MOV A,Rn ค. TRUN
ง. OR A,Rn ง. SCON
จ. XOR A,Rn จ. TCON
11. ไมโครคอนโทรลเลอร์ MCS-51 จะมีวงจร 15. กำรเลือกกำรทำงำนให้เป็ นวงจรไทเมอร์ หรื อ
ไทเมอร์ เคำน์เตอร์ ต่ำสุ ดกี่วงจร เป็ นวงจรเคำน์เตอร์ กำหนดที่บิตใด
ก. 1 วงจร ก. C/T
ข. 2 วงจร ข. TR
ค. 3 วงจร ค. TF
ง. 4 วงจร ง. TH
จ. 5 วงจร จ. TL
12. รี จิสเตอร์ สำหรับตั้งค่ำ (เป็ นตัวนับ) ในแต่ละ 16. ไทเมอร์ โหมด 0 รี จิสเตอร์ TL ทำหน้ำที่ใด
วงจรมีกี่ตวั ก. หำร 4
ก. 1 ตัวคือ TR ข. หำร 8
ข. 2 ตัวคือ TH, TL ค. หำร 16
ค. 3 ตัวคือ TR, TH , TL ง. หำร 32
ง. 4 ตัวคือ TR, TH , TL, TF จ. หำร 64
จ. 5 ตัวคือ TR, TH , TL, TF, TMOD
56 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

17. กำรทำงำนในโหมด 1 รี จิสเตอร์ ต้ งั ค่ำ TH,TL 19. โหมดที่มีกำรเติมค่ำอัตโนมัติเมื่อเกิดโอเวอร์


ทำงำนร่ วมกันทั้งหมดกี่บิต โฟลวคือโหมดใด
ก. 2 บิต ก. โหมด 0
ข. 4 บิต ข. โหมด 1
ค. 8 บิต ค. โหมด 2
ง. 16 บิต ง. โหมด 3
จ. 32 บิต จ. โหมด 4
18. เมื่อวงจรไทเมอร์ 1 ทำงำนจนเกิดกำรโอเวอร์ 20. โหมดใดใช้สำหรับสร้ำงสัญญำณบอด (Baud
โฟลวจะส่ งผลให้เกิดสิ่ งใด rate) สำหรับสื่ อสำรพอร์ ตอนุกรม
ก. บิต TF1 จะมีค่ำเป็ นลอจิก 0 ก. โหมด 0
ข. บิต TF1 จะมีค่ำเป็ นลอจิก 1 ข. โหมด 1
ค. บิต TF0 จะมีค่ำเป็ นลอจิก 0 ค. โหมด 2
ง. บิต TF0 จะมีค่ำเป็ นลอจิก 1 ง. โหมด 3
จ. บิต TR1 จะมีค่ำเป็ นลอจิก 1 จ. โหมด 4
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 57

ชุ ดคำสั่ งและวงจรไทเมอร์ /เคำน์ เตอร์


บทนี้ เป็ นกำรศึ กษำเพื่อให้นัก ศึกษำสำมำรถใช้ง ำนได้อย่ำ งเต็มประสิ ท ธิ ภำพตำมศักยรู ปที่ มี
ภำยในตัวไมโครคอนโทรลเลอร์ MCS-51 เรื่ องต่ำง ๆ มีดงั นี้
- ชุดคำสั่ง (Instruction set)
- วงจรไทเมอร์ /เคำน์เตอร์ (Timer/Counter)

3.1 ชุดคำสั่ ง
ไมโครคอนโทรลเลอร์ ไม่วำ่ จะเป็ นตระกูลใดก็ตำม จะสำมำรถทำงำนได้ก็ต่อเมื่อมีคำสั่งที่สั่งงำน
ให้กระทำกำรอย่ำงใดอย่ำงหนึ่ งตำมที่ผใู ้ ช้งำนต้องกำร ชุ ดคำสั่งหรื อภำษำที่ไมโครคอนโทรลเลอร์ รู้จกั
และเข้ำใจคือภำษำเครื่ อง (Machine code) เพียงแต่ภำษำเครื่ องเป็ นภำษำที่มนุษย์ไม่สำมำรถเข้ำใจได้
:03000000020039C2
:0C003900787FE4F6D8FD75810902000311
:10000300E4F508F5098509807FE87E0312002705DA
:1000130009E50970020508D394FFE508648094801C
:0400230040E380DC5A
:10002700E4FDFCD3ED9FEC9E50070DBD00010C8055
:01003700F2D6
:0100380022A5
:00000001FF

รู ปที่ 3-1 ภำษำเครื่ องของไมโครคอนโทรลเลอร์ MCS-51 ส่ งงำนออกพอร์ ต 0 (ไฟวิง่ ไบนำรี่ )

เพื่อให้ผใู ้ ช้งำนสำมำรถเข้ำใจภำษำที่ใช้สั่งงำนไมโครคอนโทรลเลอร์ ให้ทำงำนตำมที่ตอ้ งกำรได้


จึงต้องมีก ำรออกแบบชุ ดค ำสั่ง ที่ ม นุ ษ ย์ส ำมำรถเข้ำใจได้เป็ นที่ มำของภำษำแอสเซมบลี (เป็ นภำษำที่
ใกล้เคียงกับภำษำเครื่ องมำกที่สุด) โดยชุดคำสั่งของไมโครคอนโทรลเลอร์ MCS-51 ทุกคำสั่งเป็ นคำสั่งที่
เกี่ ยวข้องกับหน่วยควำมจำทั้งสิ้ น ซึ่ งสำมำรถแบ่งออกเป็ นโหมดกำรอ้ำงข้อมูลหรื อกำรเข้ำถึ งข้อมูลได้
หลัก ๆ 5 โหมดคือ
1. Immediate addressing mode
2. Register addressing mode
3. Direct addressing mode
4. Register indirect addressing mode
5. Indexed addressing mode
58 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

Immediate addressing mode


เป็ นโหมดกำรเข้ำถึงข้อมูลของคำสั่งที่มีกำรใช้งำนโดยกำรกำหนดค่ำข้อมูลลงรี จิสเตอร์ โดยตรง
ในส่ วนขยำยของค ำสั่ ง ในโหมดนี้ ใ ช้เครื่ องหมำย # นำหน้ำข้อมู ล ที่ ต้อ งกำร ขอบเขตของข้อมู ล ที่
สำมำรถใส่ ค่ำข้อมูลลงรี จิสเตอร์ มี 3 แบบคือ แบบฐำน10 แบบฐำน 2 แบบฐำน 16 สำหรับข้อมูลขนำด 8
บิตสำมำรถใส่ ค่ำได้ดงั นี้
- ใส่ ขอ้ มูลที่เป็ นเลขฐำน 10 ค่ำที่สำมำรถใส่ ได้คือ 0 ถึง 255
- ใส่ ขอ้ มูลที่เป็ นเลขฐำน 2 ค่ำที่สำมำรถใส่ ได้คือ 00000000B ถึง 11111111B
- ใส่ ขอ้ มูลที่เป็ นเลขฐำน 16 ค่ำที่สำมำรถใส่ ได้คือ 00H ถึง FFH

ตัวอย่ำงคำสั่งในโหมดนี้ได้แก่
MOV A,#35H ;ผลคือรี จิสเตอร์ A จะมีค่ำเป็ น 35H
ADD A,#12H ;เป็ นคำสั่งรวมค่ำในรี จิสเตอร์ A กับค่ำ 12H

Register addressing mode


เป็ นโหมดกำรเข้ำถึงข้อมูลของคำสั่งที่มีกำรใช้งำนโดยกำรกำหนดชื่ อรี จิสเตอร์ โดยตรง ซึ่ ง
รี จิสเตอร์ ที่นำมำใช้งำนเป็ นรี จิสเตอร์ ใช้งำนทัว่ ไป Rn ที่มีท้ งั หมด 8 ตัวคือ R0, R1, R2, …, R7

ตัวอย่ำงคำสั่งในโหมดนี้ได้แก่
MOV A,R3 ;เป็ นคำสั่งคัดลอกข้อมูลใน R3 มำไว้ที่รีจิสเตอร์ A
ADD A,R6 ;เป็ นคำสัง่ รวมข้อมูลระหว่ำงข้อมูลในรี จิสเตอร์ R6 กับ A

Direct addressing mode


เป็ นโหมดกำรเข้ำถึงข้อมูลโดยตรงของคำสั่งที่ใช้กำรกำหนดแอดเดรสของหน่วยควำมจำภำยใน
ที่ตอ้ งกำรเข้ำถึงข้อมูล เพื่อนำข้อมูลจำกหน่วยควำมจำภำยในในแอดเดรสที่ระบุมำใช้งำน หน่วยควำมจำ
ที่สำมำรถใช้งำนในโหมดนี้ ได้มีดว้ ยกัน 2 ส่ วน คือ ในหน่ วยควำมจำใช้งำนทัว่ ไปในช่ วงล่ำง (Lower)
และบริ เวณหน่วยควำมจำใช้งำนพิเศษ (SFR) ดังรู ปที่ 3-2 ตัวอย่ำงคำสัง่ ในโหมดนี้ได้แก่
MOV A,35H ;คัดลอกข้อมูลหน่วยควำมจำแอดเดรส 35H มำไว้ที่รีจิสเตอร์ A
ADD A,A0H ;บวกข้อมูลหน่วยควำมจำแอดเดรส A0H กับข้อมูลในรี จิสเตอร์ A
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 59

รู ปที่ 3-2 บริ เวณหน่วยควำมจำที่สำมำรถเข้ำถึงข้อมูลโดยตรง

Register indirect addressing mode


เป็ นโหมดกำรเข้ำถึงข้อมูลโดยทำงอ้อม โดยใช้วิธีกำรชี้ ตำแหน่งหน่วยควำมจำที่ตอ้ งกำรใช้งำน
แทนกำรเข้ำถึงแบบโดยตรง สำหรับตัวที่ใช้ช้ ีตำแหน่งจะใช้รีจิสเตอร์ 2 ตัวในรู ปแบบของคำสั่งจะเป็ น Ri
ซึ่ งก็คือ R0, R1 เป็ นตัวชี้ ตำแหน่ง โดยใช้สัญลักษณ์ @ นำหน้ำรี จิสเตอร์ เพื่อบ่งบอกว่ำเป็ นกำรทำงำนใน
โหมดนี้ บริ เวณหน่วยควำมจำภำยในที่สำมำรถใช้งำนในโหมดนี้ ได้ คือ บริ เวณใช้งำนทัว่ ไปทั้งส่ วนล่ำง
(Lower) และส่ วนบน (Upper) ดังรู ปที่ 3-3

ตัวอย่ำงคำสั่งในโหมดนี้ได้แก่
MOV A,@R1
ADD A,@R0

รู ปที่ 3-3 บริ เวณหน่วยควำมจำที่สำมำรถเข้ำถึงข้อมูลโดยทำงอ้อม


60 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

Indexed addressing mode


เป็ นโหมดของคำสั่งที่นำค่ำในหน่วยควำมจำเก็บโปรแกรมมำใช้งำน อำศัยกำรกำหนดตำแหน่ ง
ของหน่ วยควำมจำจำกกำรรวมค่ำระหว่ำงตำแหน่ งที่ตอ้ งกำรที่เก็บไว้ในรี จิสเตอร์ A กับค่ำของดัชนี ซึ่ ง
ดัชนีที่ใช้ได้มี 2 ตัวคือรี จิสเตอร์ DPTR และ PC
ตัวอย่ำงคำสั่งในโหมดนี้ได้แก่
MOVC A,@A+DPTR
MOVC A,@A+PC

กลุ่มคำสั่ง
ไมโครคอนโทรลเลอร์ MCS-51 มีคำสั่งในกำรทำงำนที่เป็ นภำษำแอสเซมบลีท้ งั หมด 5 กลุ่ม
หลักดังนี้
- กลุ่มคำสั่งทำงคณิ ตศำสตร์ (Arithmetic instructions)
- กลุ่มคำสัง่ ทำงลอจิก (Logic instructions)
- กลุ่มคำสั่งกำรโอนย้ำยข้อมูล (Data transfer instructions)
- กลุ่มคำสั่งบูลีน (Boolean instructions)
- กลุ่มคำสั่งกระโดด (Jump instructions)

ควำมหมำยของส่ วนขยำยในคำสั่ ง
Rn หมำยถึง รี จิสเตอร์ ใช้งำนทัว่ ไปใช้ได้ท้ งั หมด 8 ตัวคือ R0, R1, R2, …, R7
Ri หมำยถึง รี จิสเตอร์ ใช้งำนชี้ ตำแหน่งใช้ได้ท้ งั หมด 2 ตัวคือ R0, R1
#data หมำยถึง ตัวเลขข้อมูลขนำด 8 บิตที่กำหนดลงในคำสัง่
#data16 หมำยถึง ตัวเลขข้อมูลขนำด 16 บิตที่กำหนดลงในคำสั่ง
bit หมำยถึง หมำยเลขบิตแอดเดรสของหน่วยควำมจำที่เข้ำถึงได้ในระดับบิต
addr16 หมำยถึง ตัวเลขแอดเดรสขนำด 16 บิตที่กำหนดในคำสั่ง
addr11 หมำยถึง ตัวเลขแอดเดรสขนำด 11 บิตที่กำหนดในคำสั่ง
rel หมำยถึง ตัวเลขกำหนดระยะสัมพัทธ์กบั ตำแหน่งปั จจุบนั (+127, -128)
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 61

กลุ่มคำสั่งทำงคณิ ตศำสตร์ (Arithmetic instructions)


เป็ นกลุ่มคำสัง่ ที่ทำงำนทำงคณิ ตศำสตร์ บวก ลบ คูณ หำร โดยคำสัง่ ส่ วนใหญ่จะเกี่ยวข้องกับ
รี จิสเตอร์ A
ADD A,Rn Add register to A
ADD A,direct Add direct byte to A
ADD A,@Ri Add indirect RAM to A
ADD A,#data Add immediate data to A
ADDC A,Rn Add register to A with carry
ADDC A,direct Add direct byte to A with carry
ADDC A,@Ri Add indirect RAM to A with carry
ADDC A,#data Add immediate data to A with carry
SUBB A,Rn Subtract register from A with borrow
SUBB A,direct Subtract direct byte from A with borrow
SUBB A,@Ri Subtract indirect RAM from A with borrow
SUBB A,#data Subtract immediate data from A with borrow
INC A Increment A
INC Rn Increment register
INC direct Increment direct byte
INC @Ri Increment indirect RAM
DEC A Decrement A
DEC Rn Decrement register
DEC direct Decrement direct byte
DEC @Ri Decrement indirect RAM
INC DPTR Increment data pointer
MUL AB Multiply A & B (A x B => BA)
DIV AB Divide A by B (A/B => A + B)
DA A Decimal Adjust A

กลุ่มคำสั่งทำงลอจิก (Logic instructions)


เป็ นกลุ่มคำสั่งที่ทำงำนทำงลอจิก ซึ่ งมีกำรผลของกำรกระทำเช่ นเดี ยวกับกำรกระทำทำงลอจิก
ของลอจิกเกทดิ จิตอล ซึ่ งกลุ่มคำสั่งในกลุ่มนี้ ได้แก่ แอนด์ ออร์ เอ็กซ์คลู ซีฟออร์ คอมพลี เมนท์ (กลับค่ำ
เป็ นตรงข้ำม) โรเตจ (หมุนข้อมูล) สแวพ (สลับค่ำ 4 บิตบนกับ 4 บิตล่ำง)
ANL A,Rn AND register to A
ANL A,direct AND direct byte to A
ANL A,@Ri AND indirect RAM to A
ANL A,#data AND immediate data to A
ANL direct,A AND A to direct byte
ANL direct,#data AND immediate data to direct byte
ORL A,Rn OR register to A
ORL A,direct OR direct byte to A
ORL A,@Ri OR indirect RAM to A
ORL A,#data OR immediate data to A
ORL direct,A OR A to direct byte
ORL direct,#data OR immediate data to direct byte
XRL A,Rn Exclusive-OR register to A
XRL A,direct Exclusive-OR direct byte to A
XRL A,@Ri Exclusive-OR indirect RAM to A
XRL A,#data Exclusive-OR immediate data to A
62 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์
XRL direct,A Exclusive-OR A to direct byte
XRL direct,#data Exclusive-OR immediate data to direct byte
CLR A Clear A
CPL A Complement A
RL A Rotate A Left
RLC A Rotate A Left through Carry
RR A Rotate A Right
RRC A Rotate A Right through Carry
SWAP A Swap nibbles within A

กลุ่มคำสัง่ โอนย้ำยข้อมูล (Data transfer instructions)


คำสั่งในกลุ่มนี้ ไม่ใช่ กำรย้ำยข้อมูล แต่เป็ นกำรคัดลอกข้อมู ลจำกแหล่งต้นทำงมำยังปลำยทำง
หลังจำกกำรทำคำสั่งแล้วค่ำของข้อมูลที่อยู่ในรี จิสเตอร์ ตน้ ทำงก็ยงั คงค่ำเดิ ม และค่ำของข้อมูลที่อยู่ใน
รี จิ ส เตอร์ ป ลำยทำงจะมี ข องข้อ มู ล ค่ ำ เท่ ำ กับ ต้น ทำง โดยกลุ่ ม กำรโอนย้ำ ยข้อ มู ล มี ก ำรท ำงำนกับ
หน่วยควำมจำทั้ง 3 ส่ วนคือ
1. โอนย้ำยข้อมูลภำยในหน่วยควำมจำข้อมูลภำยใน
2. โอนย้ำยข้อมูลกับหน่วยควำมจำเก็บข้อมูลภำยนอก
3. โอนย้ำยข้อมูลกับหน่วยควำมจำเก็บโปรแกรมภำยนอก
MOV A,Rn Move register to A
MOV A,direct Move direct byte to A
MOV A,@Ri Move indirect RAM to A
MOV A,#data Move immediate data to A
MOV Rn,A Move A to register
MOV Rn,direct Move direct byte to register
MOV Rn,#data Move immediate data to register
MOV direct,A Move A to direct byte
MOV direct,Rn Move register to direct byte
MOV direct,direct Move direct byte to direct byte
MOV direct,@Ri Move indirect RAM to direct byte
MOV direct,#data Move immediate data to direct byte
MOV @Ri,A Move A to indirect RAM
MOV @Ri,direct Move direct byte to indirect RAM
MOV @Ri,#data Move immediate data to indirect RAM
MOV DPTR,#data16 Load data pointer with 16-bit constant
MOVC A,@A+DPTR Move code byte relative to DPTR to A
MOVC A,@A+PC Move code byte relative to PC to A
MOVX A,@Ri Move external RAM (8-bit addr) to A
MOVX A,@DPTR Move external RAM (16-bit addr) to A
MOVX @Ri,A Move A to external RAM (8-bit addr)
MOVX @DPTR,A Move A to external RAM (16-bit addr)
PUSH direct Push direct byte onto stack
POP direct Pop direct byte from stack
XCH A,Rn Exchange register with A
XCH A,direct Exchange direct byte with A
XCH A,@Ri Exchange indirect RAM with A
XCHD A,@Ri Exchange loworder Digit indirect RAM with A
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 63

กลุ่มคำสั่งบูลีน (Boolean instructions)


กลุ่ มคำสั่งบู ลีนเป็ นกลุ่ มคำสั่งที่ สำมำรถทำงำนได้ในระดับบิ ต หมำยควำมว่ำกำรทำงำนของ
ไมโครคอนโทรลเลอร์ จะทำงำนกับหน่วยควำมจำที่สำมำรถเข้ำถึงได้ในระดับบิตเท่ำนั้น (หน่วยควำมจำ
ที่มีบิตแอดเดรสดังได้กล่ำวมำแล้ว) โดยในหน่วยควำมจำใช้งำนทัว่ ไปมีช่วงที่สำมำรถเข้ำถึงได้ในระดับ
บิตในช่วงแอดเดรส 20H ถึง 2FH เท่ำนั้น อีกส่ วนหนึ่ งที่สำมำรถเข้ำถึ งได้ในระดับบิตคือรี จิสเตอร์ ใช้งำน
พิเศษ (บำงตัวดังได้กล่ำวมำแล้ว) ซึ่ งคำสั่งในกลุ่มนี้มีดงั ตำรำง
CLR C Clear carry flag
CLR bit Clear direct bit
SETB C Set carry flag
SETB bit Set direct bit
CPL C Complement carry flag
CPL bit Complement direct bit
ANL C,bit AND direct bit to carry flag
ANL C,/bit AND complement of direct bit to carry flag
ORL C,bit OR direct bit to Carry flag
ORL C,/bit OR complement of direct bit to carry flag
MOV C,bit Move direct bit to carry flag
MOV bit,C Move carry flag to direct bit

กลุ่มคำสัง่ กระโดด (Junp instructions)


คำสั่งกระโดดเป็ นคำสั่งที่ใช้ในกำรเปลี่ยนเส้นทำงกำรประมวลผล สำหรับกำรเปลี่ ยนเส้นทำง
มีดว้ ยกัน 2 แบบคือ เปลี่ยนเส้นทำงแบบมีเงื่อนไข และเปลี่ยนเส้นทำงแบบไม่มีเงื่อนไข
ACALL addr11 Absolute subroutine call
LCALL addr16 Long subroutine call
RET Return from subroutine
RETI Return from interrupt
AJMP addr11 Absolute jump
LJMP addr16 Long jump
SJMP rel Short jump (relative addr)
JMP @A+DPTR Jump indirect relative to DPTR
JZ rel Jump if A is zero
JNZ rel Jump if A is Not zero
JC rel Jump if carry flag is set
JNC rel Jump if No carry flag
JB bit,rel Jump if direct bit is set
JNB bit,rel Jump if direct bit is not set
JBC bit,rel Jump if direct bit is set & clear bit
CJNE A,direct,rel Compare direct to A & jump if Not Equal
CJNE A,#data,rel Compare immediate to A & jump if not equal
CJNE Rn,#data,rel Compare immed. to reg. & jump if not equal
CJNE @Ri,#data,rel Compare immed. to ind. & jump if not equal
DJNZ Rn,rel Decrement register & jump if not zero
DJNZ direct,rel Decrement direct byte & jump if not zero
NOP No operation
64 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

3.2 วงจรไทเมอร์ เคำน์ เตอร์


วงจรไทเมอร์ /เคำน์เตอร์ (Timer/Counter) เป็ นวงจรตั้งเวลำและวงจรนับสัญญำณที่ทำงำนอิสระ
แยกจำกกำรทำงำนของหน่วยประมวลผลกลำง ( ALU ) ซึ่ งวงจรดังกล่ำวเป็ นวงจรที่ถูกสร้ำงไว้ภำยในตัว
ไมโครคอนโทรลเลอร์ (Build in) จะมีวงจรไทเมอร์/เคำน์เตอร์ อย่ำงน้อย 2 วงจรคือ
- วงจรไทเมอร์/เคำน์เตอร์ 0 (Timer/Counter 0)
- วงจรไทเมอร์/เคำน์เตอร์ 1 (Timer/Counter 1)
แต่มีไมโครคอนโทรลเลอร์ บำงเบอร์ ที่มี 3 วงจร คือมีวงจรไทเมอร์ /เคำน์เตอร์ 2 (Timer/Counter 2) เพิ่ม
มำอีก 1 วงจร สำหรับแนวควำมคิดหลัก ๆ ของวงจรไทเมอร์ /เคำน์เตอร์ คือกำรเพิ่มค่ำในรี จิสเตอร์ ต้ งั ค่ำ
(TH และ TL) ครั้งละ 1 ค่ำ สำหรับกำรทำงำนแบ่งเป็ น 2 ลักษณะคือ
1. ทำงำนเป็ นวงจรไทเมอร์ (Timer) รี จิสเตอร์ ต้ งั ค่ำ (TH และ TL) จะรับสัญญำณในกำรเพิ่มค่ำ
จำกวงจรจำกภำยในตัวไมโครคอนโทรลเลอร์ ( จำกคริ สตอลที่ ต่ออยู่ ) จนค่ำ ในรี จิสเตอร์ ต้ งั ค่ ำเต็ม
เนื่ องจำกสัญญำณจำกภำยในผูใ้ ช้งำนสำมำรถคำนวณหำค่ำเวลำในกำรเพิ่มค่ำในแต่ละครั้งได้ ดังนั้นเมื่อ
ต้องกำรตั้งเวลำก็เพียงกำหนดค่ำในรี จิสเตอร์ ต้ งั ค่ำให้ได้เวลำเต็มตำมต้องกำรได้
2. ทำงำนเป็ นวงจรเคำน์ เตอร์ (Counter) วิธีน้ ี จะรับสัญญำณเพิ่มค่ำจำกภำยนอก และไม่มีกำร
กำหนดค่ำในรี จิสเตอร์ ต้ งั ค่ำ (TH และ TL) ค่ำของรี จิสเตอร์ น้ ีจะมีค่ำเท่ำกับจำนวนพัลส์ที่รับเข้ำมำ
สำหรับกำรทำงำนของวงจรไทเมอร์ เคำน์เตอร์ มีรีจิสเตอร์ ที่เกี่ยวข้องทั้งหมด 6 ตัว (เฉพำะวงจร
Timer0 และ Timer1) คื อ TCON, TMOD, TH0, TL0, TH1, TL1 โดยรี จิ ส เตอร์ ใ นแต่ ล ะตัว มี ห น้ ำ ที่
แตกต่ำงกันดังนี้

รี จิสเตอร์ TCON (Timer/Counter control register)


เป็ นรี จิสเตอร์ ขนำด 8 บิต ใช้ในกำรควบคุมกำรทำงำนโดยแต่ละบิตของรี จิสเตอร์ มีหน้ำที่ต่ำง ๆ
ดังนี้

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Timer/Counter Interrupt

TF1 (Timer 1 overflow flag) เป็ นบิตสำหรับใช้แสดงกำรล้นของข้อมูลในรี จิสเตอร์ ต้ งั


TF1
ค่ำ (TH1,TL1) ที่ เกิ ดจำกกำรเพิ่ ม ค่ ำ ของข้อมู ล เมื่ อ ได้รับสัญญำณกระตุ ้น จำกภำยใน
(เป็ นวงจรไทเมอร์ ) หรื อภำยนอก (เป็ นวงจรเคำน์เตอร์ ) ซึ่ งกำรล้นคือกำรเปลี่ยนสถำนะ
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 65
ของข้อมูลจำก FFFFH (เต็ม) ไปเป็ น 0000H บิตนี้ จะมีค่ำลอจิกเป็ น 1 โดยอัตโนมัติ เมื่อ
ต้องกำรใช้งำนอีกต้องทำกำรล้ำงค่ำ (เคลียร์บิต) นี้เองด้วยซอฟท์แวร์
TR1 (Timer1 run) เป็ นบิตสำหรับควบคุ มกำรทำงำนของวงจรไทเมอร์ /เคำน์เตอร์ 1
TR1
โดยเมื่อให้บิตนี้ มีค่ำเป็ นลอจิก 1 (ใช้คำสั่ง SETB TR1) วงจรไทเมอร์ /เคำน์เตอร์ 1 จะทำ
กำรเปิ ดเกทรับสัญญำณเพื่อมำเพิ่มค่ำในรี จิสเตอร์ ต้ งั ค่ำของวงจรไทเมอร์ /เคำน์เตอร์ 1
คือ TH1 กับ TL1 และถ้ำให้บิตนี้ มีค่ำลอจิกเป็ น 0 (ใช้คำสั่ง CLR TR1) วงจรไทเมอร์
เคำน์เตอร์ จะปิ ดเกทกำรรับสัญญำณเพิ่มค่ำ รี จิสเตอร์ ต้ งั ค่ำจะหยุดกำรเพิ่มค่ำ
TF0 (Timer 0 overflow flag) เป็ นบิตสำหรับใช้แสดงกำรล้นของข้อมูลสำหรับ วงจร
TF0 ไทเมอร์ เ คำน์ เ ตอร์ 0 ซึ่ งกำรท ำงำนของบิ ต นี้ จะเป็ นเช่ น เดี ย วกัน กับ วงจรไทเมอร์
เคำน์เตอร์ 1
TR1 (Timer1 run) เป็ นบิตสำหรับควบคุมกำรทำงำนของวงจรไทเมอร์ /เคำน์เตอร์ 0 ซึ่ ง
TR0
กำรทำงำนของบิตนี้จะมีกำรทำงำนเช่น เดียวกันกับวงจรไทเมอร์ /เคำน์เตอร์ 1
IE1 (Interrupt 1 edge flag) เป็ นบิตใช้แสดงกำรอินเตอร์ รัพท์ โดยจะมีค่ำเป็ นลอจิก 1
IE1 เมื่อมีสัญญำณอินเตอร์ รัพท์เข้ำมำทำงขำ INT1 และจะกลับเป็ นลอจิก 0 เมื่อมีกำรไป
ทำงำนในโปรแกรมตอบสนองกำรอินเตอร์ รัพท์
IT1 (Interrupt 1 type control bit) เป็ นบิตที่ใช้กำหนดลักษณะของสัญญำณที่จะเข้ำมำ
IT1
อินเตอร์ รัพท์ของวงจรที่ 1 โดยสำมำรถกำหนดได้ 2 ลักษณะจำกกำรกำหนดลอจิกใน
บิตนี้ คือ
1. ให้ IE = 0 จะรับรู ้สัญญำณอินเตอร์ รัพท์ที่ระดับลอจิก 0 ของสัญญำณ
2. ให้ IE = 1 จะรับรู ้สัญญำณอินเตอร์ รัพท์ที่ขอบขำลงของสัญญำณ
IE0 (Interrupt 0 edge flag) เป็ นบิ ต ใช้ แ สดงกำรอิ น เตอร์ รั พ ท์ ของวงจร 0 ซึ่ งกำร
IE0
ทำงำนของบิตนี้จะมีกำรทำงำนเช่น เดียวกันกับบิต IE1
IT0 (Interrupt 1 type control bit) เป็ นบิตที่ใช้กำหนดลักษณะของสัญญำณที่เข้ำมำใน
IT0
วงจรอินเตอร์รัพท์ 0 กำรทำงำนเป็ นเช่นเดียวกับ IE1

รี จิสเตอร์ TMOD (Timer/Counter mode control register)


เป็ นรี จิสเตอร์ ขนำด 8 บิต ใช้ในกำรกำหนดโหมดกำรทำงำนของวงจรไทเมอร์ /เคำน์เตอร์ ท้ งั 2
วงจร โดยแต่ละบิตของรี จิสเตอร์ มีหน้ำที่ต่ำง ๆ ดังนี้
66 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

GATE C/T M1 M0 GATE C/T M1 M0

Timer 1 Timer 0
เป็ นบิตที่ใช้ควบคุมกำรทำงำนโดยผลของกำรกำหนดบิตจะได้
GATE
1. กำหนดเป็ น 0 ผลคือวงจรไทเมอร์ /เคำน์เตอร์ จะทำงำนจำกกำรควบคุมที่บิต TR
เพียงอย่ำงเดียว
2. กำหนดเป็ น 1 ผลคือวงจรไทเมอร์ /เคำน์เตอร์จะทำงำนจำกกำรควบคุมที่ขำ INT
โดยวงจรจะทำงำนเมื่อลอจิกที่ขำ INT มีลอจิกเป็ น 1 และวงจรจะหยุดทำงำน
เมื่อขำ INT มีลอจิกเป็ น 0 หรื อกล่ำวได้วำ่ วงจรไทเมอร์ ถูกควบคุมทำงฮำร์ ดแวร์
เป็ นบิตเลือกกำรทำงำนว่ำจะให้เป็ นวงจรไทเมอร์ หรื อจะเป็ นวงจรเคำน์เตอร์ ซึ่ งเป็ นบิต
C/T
เลือกแหล่งสัญญำณเพิ่มค่ำในรี จิสเตอร์ ต้ งั ค่ำนัน่ เอง กำรกำหนดทำได้ดงั นี้
1. กำหนดให้เป็ นลอจิก 0 วงจรจะทำงำนเป็ นวงจรไทเมอร์ โดยใช้สัญญำณเพิ่มค่ำ
รี จิสเตอร์ THTL จำกภำยในระบบ ( คริ สตอลที่ต่ออยู่ )
2. กำหนดให้เป็ นลอจิก 1 วงจรจะทำงำนเป็ นวงจรเคำน์เตอร์ โดยใช้สัญญำณเพิ่ม
ค่ำรี จิสเตอร์ THTL จำกภำยนอกที่เข้ำมำทำงขำ T0 หรื อ T1 ทั้งนี้ข้ ึนอยูก่ บั วงจร
ที่เลือกใช้งำน
เป็ นบิตใช้กำหนดโหมดกำรทำงำนของวงจรไทเมอร์ /เคำน์เตอร์ โดยผลของ
M1 M0
กำรกำหนดบิตจะได้ดงั นี้
M1 M0 โหมด
0 0 0
0 1 1
1 0 2
1 1 3

รี จิสเตอร์ TH,TL (Timer/Counter high byte and low byte)


เป็ นรี จิสเตอร์ ขนำด 8 บิตทำหน้ำที่เป็ นรี จิสเตอร์ ต้ งั ค่ำในวงจรไทเมอร์ /เคำน์เตอร์ ซึ่ งมีท้ งั หมด
4 ตัวสำหรับ 2 วงจรได้แก่
TH0, TL0 สำหรับวงจรไทเมอร์ /เคำน์เตอร์ 0
TH1, TL1 สำหรับวงจรไทเมอร์ /เคำน์เตอร์ 1
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 67

โหมดกำรทำงำนของวงจรไทเมอร์/เคำน์เตอร์
วงจรไทเมอร์ /เคำน์เตอร์ ท้ งั 2 วงจรสำมำรถกำหนดโหมดกำรทำงำนได้ท้ งั หมด 4 โหมดโดยกำร
กำหนดที่บิต M1 และ M0 ของรี จิสเตอร์ TMOD ดังที่ได้กล่ำวมำแล้วซึ่ งในกำรทำงำนในแต่ละโหมด มี
กำรทำงำนที่แตกต่ำงกันไปดังนี้

โหมด 0
ในโหมด 0 เป็ นโหมดที่ใช้รีจิสเตอร์ ต้ งั ค่ำ (TH, TL) 13 บิ ตด้วยกันโดยใช้งำน TL เพียง 5 บิต
และใช้ TH ทั้งหมด 8 บิต โดยรี จิสเตอร์ ท้ งั สองจะทำงำนคล้ำยวงจรนับเลขฐำน 2 โดยอำศัยสัญญำณเพิ่ม
ค่ำจำกภำยนอกหรื อภำยในจำกกำรกำหนดบิต C/T ดังที่ได้กล่ำวมำแล้ว เมื่อนับจนครบ (เต็มค่ำ) คือเป็ น
ลอจิ ก 1 ครบทั้ง 13 บิ ต แล้วได้รับ สัญญำณเพิ่ม ค่ำ อี ก 1 ลู กจะท ำให้ค่ ำเกิ นคื อเกิ ดกำรล้น (Over flow)
ส่ งผลให้บิตแสดงกำรล้น TF มีค่ำเป็ น 1

รู ปที่ 3-4 วงจรหำรควำมถี่โดยใช้ไอซีนบั เลขไบนำรี่

จำกรู ปที่ 3.4 เอำท์พุทของวงจรนับเลขไบนำรี่ ที่เอำท์พุท A จะเท่ำกับอิ นพุทหำร 2 เอำท์พุท B


เท่ำกับอินพุทหำร 4 และเอำท์พุท C เท่ำกับอินพุทหำร 8 สำหรับในโหมด 0 รี จิสเตอร์ TL ที่ใช้งำนเพียง
5 บิตก็จะทำหน้ำที่เป็ นตัวหำรสัญญำณเพิ่มค่ำที่เข้ำมำด้วย 32 (มำจำก 25=32) ก่อนส่ งไปที่รีจิสเตอร์ TH
เพิ่มขึ้น 1 ค่ำ
OSC ÷12
C/T=0
สัญญำณ
TL1 TH1 TF1 อินเตอร์รัพท์
ขำ T1 C/T=1 5 บิต 8 บิต
TR1
GATE
ขำ INT1
รู ปที่ 3-5 โครงสร้ำงในโหมด 0 ของวงจรไทเมอร์เคำน์เตอร์ 1
68 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์
ดังนั้นเมื่อนำมำใช้งำนในโหมด 0 จึงไม่ตอ้ งตั้งค่ำใด ๆ ในรี จิสเตอร์ TL1 โดยรี จิสเตอร์ TL1 จะ
ทำหน้ำที่หำร 32 โครงสร้ำงของโหมดจึงเป็ นดังรู ปที่ 3-6
OSC ÷12
C/T=0
÷32 TH1 TF1 อินเตอร์รัพท์
ขำ T1 C/T=1 5 บิต 8 บิต
TR1
GATE
ขำ INT1
รู ปที่ 3-6 โครงสร้ำงในโหมด 0 ของวงจรไทเมอร์ เคำน์เตอร์ 1

ควำมถี่ในแต่ละจุดจะเป็ นดังรู ปที่ 3-7

1 1
f0  f  f0  f  f0 
1 1

t 12 12 32
OSC(f0) ÷12 ÷32 ÷(256-TH1) TF1
TL 5 บิต TH 8 บิต
1 1 1
TR1 f  f0   
12 32  256  TH 1

รู ปที่ 3-7 ควำมถี่ในแต่ละจุดสำหรับโหมด 0 ของวงจรไทเมอร์เคำน์เตอร์ 1

ดังนั้นคำบเวลำในโหมด 0 จะได้

ตัวอย่ ำง จงหำค่ำคำบเวลำที่วงจรไทเมอร์ ทำงำนจนแฟลก TF1 แสดงกำรล้นของข้อมูล (Over flow) เมื่อ


ก ำหนดค่ ำ ในรี จิ ส เตอร์ TH1 เป็ น FFH (255) ซึ่ งรี จิ ส เตอร์ TH1 จะเพิ่ ม ค่ ำ เพี ย งค่ ำ เดี ย ว โดยวงจรใช้
คริ สตอล 12 MHz
วิธีทำ
จำกไดอะแกรมด้ำนบนคำบเวลำที่ได้จะเป็ น
1 1
T 
f  1 1 1 
 f0    
 12 32  256  TH 1 
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 69
แทนค่ำควำมถี่คริ สตอลและค่ำที่กำหนดในรี จิสเตอร์ TH
1 1
T =
f  1 1 1 
12MHz    
 12 32  256  255  
1
=
 1 1 1
12 10    
6

 12 32 1 
1
=
 1 
12 10 
6

 384 
= 384 6
12 10 
= 32 106 วินำที

โหมด 1
ในโหมด 1 เป็ นโหมดที่ใช้งำนคล้ำยกับโหมด 0 เพียงแต่ใช้รีจิสเตอร์ ต้ งั ค่ำทั้งสองตัวครบทุกบิต
คือใช้ 16 บิต โดยกำรทำงำนเหมือนกับวงจรนับเลขไบนำรี่ ขนำด 16 บิตนัน่ เอง เมื่อได้รับสัญญำณเพิม่ ค่ำ
จะเพิ่มขึ้นครั้งละ 1 ค่ำ จนกระทั้งเป็ นลอจิก 1 ครบทั้ง 16 บิตคือจะได้ค่ำ FFFFH เมื่อได้รับสัญญำณอีก 1
ลูกจะเกิดกำรล้น (Over flow) บิตแสดงกำรล้น (TF: Over flow flag) จะมีค่ำเป็ นลอจิก 1 โครงสร้ำงของ
โหมด 1 เป็ นดังรู ปที่ 3-8

OSC ÷12
C/T=0
สัญญำณ
TL1 TH1 TF1 อินเตอร์รัพท์
ขำ T1 C/T=1 8 บิต 8 บิต
TR1
GATE
ขำ INT1
รู ปที่ 3-8 โครงสร้ำงในโหมด 1 ของวงจรไทเมอร์เคำน์เตอร์ 1

สำหรับกำรใช้งำนเป็ นวงจรไทเมอร์ จะใช้สัญญำณเพิ่มค่ำจำกภำยใน (OSC) มำใช้ในกำรเพิ่มค่ำ


ในรี จิสเตอร์ ต้ งั ค่ำ TH, TL หำกให้ค่ำเริ่ มต้นของ TH, TL เป็ น 0000H จะต้องใช้สัญญำณเพิ่มค่ำจำนวน
65536 ลูกคลื่นถึ งจะเกิ ดกำรล้นของข้อมูล (Over flow) หรื ออำจมองว่ำรี จิสเตอร์ TH, TL ทำหน้ำที่เป็ น
ตัวหำรที่สำมำรถตั้งค่ำได้นนั่ เอง โดยค่ำที่ทำกำรหำรจะเป็ น  (65536-THTL)
70 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์
จำกรู ปที่ 3-8 จะเห็ นว่ำสัญญำณเพิ่มค่ำได้มำจำกวงจร OSC (ควำมถี่คริ สตอล) ผ่ำนวงจรหำร 12 ซึ่ งจะ
เป็ นค่ำเท่ำกับ 1 แมชชีนไซเคิลแล้วส่ งเข้ำรี จิสเตอร์ ต้ งั ค่ำทำให้โครงสร้ำงของโหมดจึงเป็ นดังรู ปที่ 3-9
OSC ÷12
C/T=0
สัญญำณ
÷(65536-THTL) TF1 อินเตอร์รัพท์
ขำ T1 C/T=1 8บิต 8 บิต
TR1
GATE
ขำ INT1
รู ปที่ 3-9 โครงสร้ำงในโหมด 1 ของวงจรไทเมอร์ เคำน์เตอร์ 1

ควำมถี่ในแต่ละจุดจะเป็ นดังรู ปที่ 3-10


1 1
f0  f  f0 
t 12
OSC(f0) ÷12 ÷(65536-THTL) TF1
1 1
f  f0  
12  65536  THTL 
TR1
รู ปที่ 3-10 ควำมถี่ในแต่ละจุดสำหรับโหมด 1 ของวงจรไทเมอร์เคำน์เตอร์ 1

ดังนั้นคำบเวลำในโหมด 1 จะได้

ตัวอย่ำง ถ้ำวงจรใช้คริ สตอล 12 MHz และกำหนดให้ TH,TL= 0000H จงหำคำบเวลำที่วงจรไทเมอร์ เกิ ด


โอเวอร์ โฟลว
วิธีทำ จำกไดอะแกรมด้ำนบนคำบเวลำที่ได้จะเป็ น
1 1
T 
f  1 1 
 f0   
 12  65536  THTL  

แทนค่ำควำมถี่คริ สตอลและค่ำที่กำหนดในรี จิสเตอร์ TH


หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 71
1 1
T =
f  1 1 
 f0   
 12  65536  THTL  
= 1
 1 1 
12MHz   
 12  65536  0000  

= 1
 1 1 
12 10  
6

 12 65536 
= 1
 1 
110 
6

 65536 
= 655366
110 
= 65536 106 วินำที

ดัง นั้น เวลำสู ง สุ ด ที่ ใ ห้ ว งจรไทเมอร์ ท ำงำนได้ต่ อ 1 ครั้ ง ถ้ำ ใช้ค ริ ส ตอล 12 MHz คื อ 65536
ไมโครวินำทีหรื อ 65.536 มิลลิวินำที ในทำงกลับกันหำกต้องกำรให้วงจรไทเมอร์ ต้ งั เวลำตำมที่กำหนด
สำมำรถคำนวณได้ดงั นี้

ตัวอย่ำง ถ้ำวงจรใช้คริ สตอล 12 MHz ต้องกำรให้วงจรไทเมอร์ทำงำน 10 มิลลิวินำที จงหำค่ำที่ตอ้ งตั้งค่ำ


ใน TH,TL
วิธีทำ จำก T 
1 1
f  1 1 
 f0   
 12  65536  THTL  

แทนค่ำ 10mS = 1
 1 1 
 f0   
 12  65536  THTL  

= 1
 1 1 
12MHz   
 12  65536  THTL  

= 1
 1 1 
12 10   
6

 12  65536  THTL  
72 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

= 1
 1 
110  
6

  65536  THTL  
1
= 1
 65536  THTL  110 10mS 
6

65536  THTL = 1106 10mS

THTL = 65536  1106 10 103 


= 65536  10 103 
= 65536 10000
= 55536 10

จะต้องตั้งค่ำรี จิสเตอร์ TH,TL =5553610


=D8F0H
ต้องตั้งค่ำในรี จิสเตอร์ TH =D8H
และต้องตั้งค่ำในรี จิสเตอร์ TL =F0H

โหมด 2
ในโหมด 2 เป็ นโหมดที่ ใ ช้รี จิ ส เตอร์ ต้ งั ค่ ำ (TH, TL) ครบทุ ก บิ ต แต่ จ ะเพิ่ ม ค่ ำ ของข้อมู ล ใน
รี จิสเตอร์ เฉพำะ TL เพียงตัวเดียว เมื่อเกิดโอเวอร์ โฟลวจะมีกำรโหลดค่ำข้อมูลจำกรี จิสเตอร์ TH มำไว้ใน
รี จิสเตอร์ TL โดยอัตโนมัติ (Auto reload) ซึ่ งกำรทำงำนในลักษณะนี้ จะใช้ในกำรกำหนดอัตรำเร็ วในกำร
สื่ อสำรทำงพอร์ ตอนุ กรมที่เรี ยกว่ำอัตรำบอด (Baud rate) สำหรับกำรใช้งำนโดยละเอียดจะกล่ำวอีกครั้ง
ในบทกำรสื่ อสำรทำงพอร์ตอนุกรม

OSC ÷12
C/T=0 8 บิต
สัญญำณ
TL1 TF1 อินเตอร์รัพท์
ขำ T1 C/T=1
TR1
GATE TH1
ขำ INT1 8 บิต
รู ปที่ 3-11 โครงสร้ำงในโหมด 2 ของวงจรไทเมอร์เคำน์เตอร์ 1
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 73

โหมด 3
ในโหมด 3 เป็ นโหมดที่ทำงำนผสมกันโดยใช้รีจิสเตอร์ ต้ งั ค่ำข้อมูลจำกวงจรไทเมอร์เคำน์เตอร์ 1
เท่ำนั้น แต่ใช้บิตควบคุ มกำรเริ่ มทำงำน TR0 และ TR1 โดยบิตที่ใช้แสดงกำรโอเวอร์ โฟลวจะเป็ น TF0
และ TF1 ดังรู ปที่ 3-12

OSC ÷12
C/T=0 8 บิต
สัญญำณ
TL0 TF0 อินเตอร์รัพท์
ขำ T0 C/T=1
TR0
GATE
ขำ INT0 8 บิต
สัญญำณ
OSC ÷12 TH0 TF1 อินเตอร์รัพท์
TR1

รู ปที่ 3-12 โครงสร้ำงในโหมด 3

3.3 สรุปสำระสำคัญ
ภำษำแอสเซมบลี ของไมโครคอนโทรลเลอร์ เป็ นภำษำที่ ใกล้เคียงกับภำษำเครื่ องมำกที่สุดโดย
เป็ นภำษำที่มนุ ษย์สำมำรถเข้ำใจได้ สำหรับภำษำแอสเซมบลีของไมโครคอนโทรลเลอร์ MCS-51 มีอยู่
ด้วยกัน 5 โหมด ซึ่ งในแต่ละโหมดมีวิธีกำรเข้ำถึงข้อมูลในหน่วยควำมจำแตกต่ำงกันไป เช่น กำรป้ อนค่ำ
เข้ำโดยตรง กำรป้ อนค่ำผ่ำนรี จิสเตอร์ กำรป้ อนค่ำโดยอำศัยรี จิสเตอร์ เป็ นตัวชี้ตำแหน่งหน่วยควำมจำ กำร
อ่ำนค่ำจำกหน่วยควำมจำภำยนอก
วงจรไทเมอร์ /เคำน์เตอร์ เป็ นวงจรที่ถูกบรรจุอยูภ่ ำยในตัวไมโครคอนโทรลเลอร์ มีกำรทำงำนที่
เป็ นอิสระจำกกำรประมวลผลคำสั่งของไมโครคอนโทรลเลอร์ สำหรับไมโครคอนโทรลเลอร์ MCS-51 มี
วงจรไทเมอร์/เคำน์เตอร์ อย่ำงน้อย 2 วงจร ทั้งนี้ ข้ ึนอยูก่ บั เบอร์ ที่เลือกมำใช้งำน มีโหมดกำรทำงำนทั้งหมด
4 โหมด ซึ่ งในแต่ละโหมดมีคุณสมบัติในกำรทำงำนแตกต่ำงกันไป ทั้งนี้ ข้ ึนอยูก่ บั กำรวิธีใช้งำนรี จิสเตอร์
ตั้งค่ำ TH และ TL ในแต่โหมด
74 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

แบบฝึ กหัดหน่ วยที่ 3


คำชี้แจง ให้นกั ศึกษำตอบคำถำมต่อไปนี้ให้สมบรู ณ์
1. ชุดคำสั่งของไมโครคอนโทรลเลอร์ จะมีกำรเข้ำถึงข้อมูลได้กี่โหมดอะไรบ้ำง

2. ชุดคำสั่งที่มีกำรเข้ำถึงข้อมูลในรี จิสเตอร์ แบบโดยตรง รี จิสเตอร์ ที่สำมำรถเข้ำถึงได้มีกี่ตวั


อะไรบ้ำง

3. ชุดคำสัง่ ที่มีกำรเข้ำถึงข้อมูลโดยทำงอ้อมผ่ำนกำรชี้ตำแหน่งจำกรี จิสเตอร์ รี จิสเตอร์ ที่สำมำรถชี้


ตำแหน่งได้เข้ำถึงได้มีกี่ตวั อะไรบ้ำง

4. วงจรไทเมอร์ /เคำน์เตอร์ โดยทัว่ ไปของไมโครคอนโทรลเลอร์ MCS-51 มีกี่วงจรอะไรบ้ำง

5. รี จิสเตอร์ กำหนดโหมดกำรทำงำน TMOD สำมำรถกำหนดโหมดให้กบั วงจรไทเมอร์ /เคำน์เตอร์


ได้กี่วงจรอะไรบ้ำง

6. บิตที่ใช้งำนในรี จิสเตอร์ไทเมอร์ควบคุม TCON มีกี่บิตอะไรบ้ำง แต่ละบิตมีหน้ำที่อย่ำงไร

7. หำกกำหนดให้วงจรไทเมอร์ ทำงำนในโหมด 0 รี จิสเตอร์ TL จะใช้งำนกี่บิต และใช้ทำหน้ำที่ใด

8. หำกกำหนดให้วงจรไทเมอร์ ทำงำนในโหมด 1 และไม่มีกำรเติมค่ำลงในรี จิสเตอร์ ต้ งั ค่ำ


(TH,TL) วงจรไทเมอร์ กี่แมชชีนไซเคิลจึงจะเกิดโอเวอร์ โฟลว
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 75

แบบทดสอบหลังเรียนหน่ วยที่ 3
คำสั่ ง ให้นกั ศึกษำเลือกคำตอบที่ถูกต้องที่สุดเพียงคำตอบเดียว
1. ชุดคำสั่งโหมดกำรกำหนดค่ำลงรี จิสเตอร์ 5. กำรเข้ำถึงข้อมูลในหน่วยควำมจำใช้งำน
โดยตรงคือโหมดใด ทัว่ ไปช่วงบน (Upper) ต้องใช้โหมดใด
ก. Register addressing mode ก. Register addressing mode
ข. Immediate addressing mode ข. Immediate addressing mode
ค. Direct addressing mode ค. Direct addressing mode
ง. Register indirect addressing mode ง. Register indirect addressing mode
จ. Indexed addressing mode จ. Indexed addressing mode
2. ชุดคำสั่งโหมดกำรเข้ำถึงแบบกำหนดชื่อ 6. โหมดของคำสั่งที่นำค่ำในหน่วยควำมจำเก็บ
รี จิสเตอร์ คือโหมดใด โปรแกรมมำใช้งำนคือโหมดใด
ก. Register addressing mode ก. Register addressing mode
ข. Immediate addressing mode ข. Immediate addressing mode
ค. Direct addressing mode ค. Direct addressing mode
ง. Register indirect addressing mode ง. Register indirect addressing mode
จ. Indexed addressing mode จ. Indexed addressing mode
3. ชุ ด ค ำสั่ ง โหมดกำรอ้ำ งข้อ มู ล ของไมโคร- 7. หน่ วยควำมจำส่ ว นใดใช้ก ำรอ้ำ งแอดเดรส
คอนโทรลเลอร์ตระกูล MCS-51 มีกี่โหมด แบบโดยตรงไม่ได้
ก. 1 โหมด ก. หน่วยควำมจำใช้งำนทัว่ ไปช่วงบน (Upper)
ข. 2 โหมด ข. หน่วยควำมจำใช้งำนทัว่ ไปช่วงล่ำง (Lower)
ค. 3 โหมด ค. หน่วยควำมจำใช้งำนทัว่ ไปช่วงซ้ำย (Left)
ง. 4 โหมด ง. หน่วยควำมจำใช้งำนทัว่ ไปช่วงขวำ (Right)
จ. 5 โหมด จ. หน่วยควำมจำใช้งำนทัว่ ไปช่วงกลำง (Mid)
4. กำรอ้ำงแอดเดรสแบบใช้ค่ำแอดเดรสโดยตรง 8. รี จิสเตอร์ ใช้งำนชี้ตำแหน่ง (Ri) ใช้ได้ท้ งั หมด
คือโหมดใด กี่ตวั อะไรบ้ำง
ก. Register addressing mode ก. 2 ตัว คือ R0, R1
ข. Immediate addressing mode ข. 4 ตัว คือ R0,… R3
ค. Direct addressing mode ค. 6 ตัว คือ R0,… R5
ง. Register indirect addressing mode ง. 8 ตัว คือ R0,… R7
จ. Indexed addressing mode จ. 10 ตัว คือ R0,… R9
76 เอกสำรประกอบกำรสอนวิชำไมโครคอนโทรลเลอร์

9. ไมโครคอนโทรลเลอร์ MCS-51 จะมีวงจร 13. บิตสำหรับสั่งรันวงจรไทเมอร์ (TR) อยู่


ไทเมอร์ เคำน์เตอร์ ต่ำสุ ดกี่วงจร รี จิสเตอร์ใด
ก. 1 วงจร ก. SCON
ข. 2 วงจร ข. TCON
ค. 3 วงจร ค. SMOD
ง. 4 วงจร ง. TMOD
จ. 5 วงจร จ. TRUN
10. รี จิสเตอร์ สำหรับตั้งค่ำ (เป็ นตัวนับ) ในแต่ละ 14. กำรเลือกกำรทำงำนให้เป็ นวงจรไทเมอร์ หรื อ
วงจรมีกี่ตวั เป็ นวงจรเคำน์เตอร์ กำหนดที่บิตใด
ก. 1 ตัวคือ TR ก. C/T
ข. 2 ตัวคือ TH, TL ข. TR
ค. 3 ตัวคือ TR, TH , TL ค. TF
ง. 4 ตัวคือ TR, TH , TL, TF ง. TH
จ. 5 ตัวคือ TR, TH , TL, TF, TMOD จ. TL
11. รี จิสเตอร์ ใช้งำนทัว่ ไปใช้ได้ท้ งั หมดกี่ตวั 15. ไทเมอร์ โหมด 0 รี จิสเตอร์ TL ทำหน้ำที่ใด
อะไรบ้ำง ก. หำร 4
ก. 2 ตัว คือ R0, R1 ข. หำร 8
ข. 4 ตัว คือ R0,… R3 ค. หำร 16
ค. 6 ตัว คือ R0,… R5 ง. หำร 32
ง. 8 ตัว คือ R0,… R7 จ. หำร 64
จ. 10 ตัว คือ R0,… R9 16. กำรกำหนดโหมดกำรทำงำนของวงจรไท
12. คำสั่งใดเป็ นคำสั่งในชุดคำสั่งทำง เมอร์ กำหนดในรี จิสเตอร์ ใด
คณิ ตศำสตร์ ก. SMOD
ก. ANL A,Rn ข. TMOD
ข. MOV A,Rn ค. TRUN
ค. SUBB A,Rn ง. SCON
ง. OR A,Rn จ. TCON
จ. XOR A,Rn
หน่ วยที่ 3 ชุดคำสัง่ และวงจรไทเมอร์เคำน์เตอร์ 77
17. โหมดที่มีกำรเติมค่ำอัตโนมัติเมื่อเกิดโอเวอร์ 19. โหมดใดใช้สำหรับสร้ำงสัญญำณบอด (Baud
โฟลวคือโหมดใด rate) สำหรับสื่ อสำรพอร์ ตอนุกรม
ก. โหมด 0 ก. โหมด 0
ข. โหมด 1 ข. โหมด 1
ค. โหมด 2 ค. โหมด 2
ง. โหมด 3 ง. โหมด 3
จ. โหมด 4 จ. โหมด 4
18. กำรทำงำนในโหมด 1 รี จิสเตอร์ ต้ งั ค่ำ TH,TL 20. เมื่อวงจรไทเมอร์ 1 ทำงำนจนเกิดกำรโอเวอร์
ทำงำนร่ วมกันทั้งหมดกี่บิต โฟลวจะส่ งผลให้เกิดสิ่ งใด
ก. 2 บิต ก. บิต TF1 จะมีค่ำเป็ นลอจิก 0
ข. 4 บิต ข. บิต TF1 จะมีค่ำเป็ นลอจิก 1
ค. 8 บิต ค. บิต TF0 จะมีค่ำเป็ นลอจิก 0
ง. 16 บิต ง. บิต TF0 จะมีค่ำเป็ นลอจิก 1
จ. 32 บิต จ. บิต TR1 จะมีค่ำเป็ นลอจิก 1

เฉลยแบบทดสอบก่อนเรี ยน
1. จ 2. ข 3. ก 4. ค 5. ก 6. ง 7. จ 8. ก 9. ง 10. ก
11. ข 12. ข 13. ง 14. ก 15. ก 16. ง 17. ง 18. ข 19. ค 20. ค

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ก 3. จ 4. ค 5. ง 6. จ 7. ก 8. ก 9. ข 10. ข
11. ง 12. ค 13. จ 14. ก 15. ง 16. ข 17. ค 18. ง 19. ค 20. ข
หน่ วยที่ 4
การสื่ อสารทางพอร์ ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก
หัวข้อเรื่ อง
4.1 การสื่ อสารทางพอร์ตอนุกรม
4.2 การขัดจังหวะการทางาน
4.3 การใช้งานวงจรว็อชด็อก

สาระสาคัญ
การสื่ อสารทางพอร์ ตอนุ กรมเป็ นการสื่ อสารที่ ใช้สายสัญญาณจานวนน้อยและสามารถส่ งได้
ไกลแต่มีขอ้ ด้อยที่ส่งข้อมูลได้ชา้ ในบทเรี ยนนี้ กล่าวถึงการใช้งานสื่ อสารผ่านทางพอร์ ตอนุ กรมในโหมด
ต่าง ๆ บทนี้ ได้การขัดจังหวะการทางานหรื อเรี ยกทับศัพท์ว่าการอินเตอร์ รัพต์ และวงจรเฝ้าระวังการ
แฮ้งค์ของซี พียทู ี่เรี ยกว่าวงจรว็อชด็อก

สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้ เกี่ ยวกับการสื่ อสารทางพอร์ ตอนุ กรมที่มีใช้งานในไมโครคอนโทรลเลอร์ การ
ขัดจังหวะการทางาน และวงจรว็อชด็อก

จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับการสื่ อสารทางพอร์ ตอนุกรม
2. เพื่อให้มีความรู ้เกี่ยวกับการขัดจังหวะการทางาน
3. เพื่อให้มีความรู ้เกี่ยวกับการใช้งานวงจรว็อชด็อก
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับการสื่ อสารทางพอร์ ตอนุกรมได้
2. บอกเกี่ยวกับการขัดจังหวะการทางานได้
3. บอกเกี่ยวกับการใช้งานวงจรว็อชด็อกได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
80 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 4
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. วิธีการส่ งข้อมูลอนุกรมที่ตอ้ งส่ งสัญญาณ 5. บิตเริ่ มต้นของส่ งแบบอะซิ งโครนัสมีสถานะใด
นาฬิกาไปพร้อมคือวิธีใด ก. มีสถานะเป็ นลอจิก 0
ก. การส่ งแบบโครนัส ข. มีสถานะเป็ นลอจิก 1
ข. การส่ งแบบโครซิ งนัส ค. มีสถานะเป็ นขาลอย (High Z)
ค. การส่ งแบบอะซิ งโครนัส ง. มีสถานะเช่นเดียวกับด้านรับ
ง. การส่ งแบบซิ งโครนัส จ. มีสถานะเป็ นแบบใดก็ได้ตามการ
จ. การส่ งแบบโครนัสซิ ง กาหนด
2. วิธีการส่ งข้อมูลอนุกรมที่ไม่ตอ้ งส่ งสัญญาณ 6. บิตแรกของข้อมูลที่ส่งออกจากการส่ ง
นาฬิกาไปพร้อมคือวิธีใด แบบอะซิงโครนัสคือบิตใด
ก. การส่ งแบบโครนัส ก. บิต D0
ข. การส่ งแบบโครซิ งนัส ข. บิต D2
ค. การส่ งแบบอะซิ งโครนัส ค. บิต D4
ง. การส่ งแบบซิ งโครนัส ง. บิต D6
จ. การส่ งแบบโครนัสซิ ง จ. บิต D7
3. อัตราเร็ วในการรับส่ งแบบอะซิ งโครนัส 7. การสื่ อสารแบบอนุกรมที่ส่งแบบฟูลดูเพล็กมี
เรี ยกว่าอะไร ลักษณะใด
ก. อัตราบอด (Baud rate) ก. สามารถส่ งได้ที่ละ 1 ไบต์
ข. อัตราเร็ ว (Speed rate) ข. สามารถส่ งได้อย่างเดียว
ค. อัตราส่ ง (Send rate) ค. สามารถรับได้อย่างเดียว
ง. อัตราสื่ อสาร (Communication rate) ง. สามารถรับส่ งต่างเวลากัน
จ. อัตราบิต (Bit rate) จ. สามารถรับส่ งได้ในเวลาเดียวกัน
4. สภาวะปกติของสัญญาณของการส่ งแบบอะ 8. เมื่อต้องการส่ งข้อมูลออกพอร์ ตอนุกรมทาได้
ซิงโครนัสมีสถานะใด โดยนาข้อมูลไปไว้ในรี จิสเตอร์ใด
ก. มีสถานะเป็ นลอจิก 0 ก. STXD
ข. มีสถานะเป็ นลอจิก 1 ข. SCON
ค. มีสถานะเป็ นขาลอย (High Z) ค. SMOD
ง. มีสถานะเป็ นเช่นเดียวกับด้านรับ ง. SBUF
จ. มีสถานะใด ๆ ก็ได้ตามการกาหนด จ. SRXD
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 81
9. เมื่อรับข้อมูลเข้าพอร์ ตอนุกรมครบแล้ว 13. เมื่อทาการรับข้อมูลเข้ามาทางพอร์ตอนุกรม
สามารถไปรับมาใช้งานได้ที่รีจิสเตอร์ใด ครบ 1 ไบต์ จะเกิดสิ่ งใด
ก. STXD ก. บิต RI จะมีค่าเป็ นลอจิก 1
ข. SCON ข. บิต RI จะมีค่าเป็ นลอจิก 0
ค. SMOD ค. บิต TI จะมีค่าเป็ นลอจิก 1
ง. SBUF ง. บิต TI จะมีค่าเป็ นลอจิก 0
จ. SRXD จ. บิต TF จะมีค่าเป็ นลอจิก 1
10. การสื่ อสารแบบอนุกรมแบบอะซิงโครนัส 8 14. การอินเตอร์ รัพต์มีกี่แหล่ง (รวมรี เซต)
บิต (ไม่มีพาริ ต้ ีบิต) คือโหมดใด ก. 4 แหล่ง
ก. โหมด 0 ข. 5 แหล่ง
ข. โหมด 1 ค. 6 แหล่ง
ค. โหมด 2 ง. 7 แหล่ง
ง. โหมด 3 จ. 8 แหล่ง
จ. โหมด 1 และโหมด 3 15. รี จิสเตอร์เปิ ด/ปิ ดการตอบสนองการ
11. โหมดใดที่กาหนดอัตราบอด (Baud rate) จาก อินเตอร์ รัพต์คือรี จิสเตอร์ ใด
วงจร Timer1 หรื อ Timer2 ในการสื่ อสาร ก. IO
แบบอนุกรม ข. IR
ก. โหมด 0 ค. IF
ข. โหมด 1 ง. IE
ค. โหมด 2 จ. IP
ง. โหมด 3 16. รี จิสเตอร์ กาหนดลาดับความสาคัญของการ
จ. โหมด 1 และโหมด 3 อินเตอร์ รัพต์คือรี จิสเตอร์ ใด
12. เมื่อทาการส่ งข้อมูลออกพอร์ ตอนุกรมครบ 1 ก. IO
ไบต์ จะเกิดสิ่ งใด ข. IP
ก. บิต RI จะมีค่าเป็ นลอจิก 1 ค. IR
ข. บิต RI จะมีค่าเป็ นลอจิก 0 ง. IF
ค. บิต TI จะมีค่าเป็ นลอจิก 1 จ. IE
ง. บิต TI จะมีค่าเป็ นลอจิก 0
จ. บิต TF จะมีค่าเป็ นลอจิก 1
82 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

17. บิตที่แสดงการเกิดการอินเตอร์ รัพต์ที่เข้ามา 19. เมื่อเรี ยกใช้งานวงจรว็อชด็อก (Watch dog)


ทางขา INT1 คือบิตใด แล้วจะต้องดาเนินการอย่างไร
ก. IO1 ก. คอยรี เซตวงจรว็อชด็อกก่อนครบ
ข. IR1 เวลาที่กาหนด
ค. IF1 ข. ไม่ตอ้ งดาเนินการใด ๆ
ง. IE1 ค. ป้ อนค่าใหม่เมื่อเกิดโอเวอร์ โฟลว์
จ. IP1 ง. รอรับค่าจากรี จิสเตอร์
18. สิ่ งใดคือหน้าที่ของวงจรว็อชด็อก (Watch จ. คอยตรวจสอบสถานะของวงจร
dog) 20. ไมโครคอนโทรลเลอร์ MCS-51 เบอร์ใดมี
ก. รี เซตซี พียเู มื่อเกิดการค้าง (แฮ้งค์) วงจรว็อชด็อก (Watch dog)
ข. สร้างสัญญาณนาฬิกาให้กบั ซี พียู ก. AT89C2051
ค. สร้างความถี่ ข. AT89C4051
ง. รับสัญญาณ ADC ค. AT89C51
จ. รับส่ งข้อมูลผ่าน IR ง. AT89C52
จ. AT89S52
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 83

การสื่ อสารทางพอร์ ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก


หน่ วยการเรี ยนนี้ เป็ นการศึกษาเพื่อให้นกั ศึกษาสามารถใช้งานได้อย่างเต็มประสิ ทธิ ภาพตาม
ศักยภาพที่มีอยูภ่ ายในตัวไมโครคอนโทรลเลอร์ MCS-51 เรื่ องต่าง ๆ มีดงั นี้
- การสื่ อสารทางพอร์ตอนุกรม (Serial port communication)
- การขัดจังหวะการทางาน (Interrupt)
- การใช้งานวงจรว็อชด็อก (Watch dog)

4.1 การสื่ อสารทางพอร์ ตอนุกรม


การสื่ อสารข้อมูล หมายถึง การรับส่ งข้อมูลระหว่างอุปกรณ์ สาหรับการสื่ อสารข้อมูลที่เกี่ยวข้อง
กับไมโครคอนโทรลเลอร์ โดยทัว่ ไปการรับส่ งมีดว้ ยกัน 2 แบบคือ
1. การรั บส่ งข้ อมูลแบบขนาน เป็ นการรับส่ งข้อมูลที่มีการรับหรื อส่ งข้อมูลขนาด 1 ไบต์ต่อครั้ง
ซึ่ ง ข้อมู ล ทุ ก บิ ตจะปรากฏในเวลาเดี ย วกัน การส่ งแบบขนานมี ข ้อดี ตรงที่ ส่ งข้อมู ล ได้เร็ ว แต่ ต้องใช้
สายสัญญาณจานวนมากตามจานวนบิต ดังนั้นจึงไม่เหมาะสมกับการใช้สื่อสารข้อมูลในระยะทางไกล
เพราะสิ้ นเปลืองกับจานวนสายสัญญาณ
2. การรับส่ งข้ อมูลแบบอนุกรม เป็ นการรับส่ งข้อมูลออกไปที่ละ 1 บิตโดยจะค่อย ๆ ทยอยส่ งบิต
ต่อไปจนครบ 1 ไบต์ผา่ นสายสัญญาณตัวเดียวกัน การส่ งแบบนี้ มีขอ้ เสี ยตรงที่ส่งข้อมูลได้ช้า แต่มีขอ้ ดี
ตรงที่ใช้สายสัญญาณน้อยจึงเหมาะกับการสื่ อสารในระยะไกล

รู ปแบบของการสื่ อสารทางพอร์ตอนุกรม
วิธีการรับส่ งข้อมูลแบบอนุกรมมี 2 วิธีคือ
1. แบบซิ งโครนั ส (Synchronous) เป็ นการรั บ ส่ ง ข้อมู ล อนุ กรมที่ จะต้องส่ งสั ญญาณนาฬิ ก า
(Clock) จากตัวส่ งร่ วมไปด้วย เพื่อใช้ในการเลื่อนข้อมูลแต่ละบิตที่ได้ส่งออกไป ดังนั้นวิธีน้ ี
สายสัญญาณจะต้องใช้ 3 เส้นคือ
- สายสัญญาณข้อมูล (Data)
- สายสัญญาณนาฬิกา (Clock)
- สายกราวด์ (Ground)

รู ปที่ 4-1 รู ปแบบการส่ งข้อมูลแบบซิ งโครนัส


84 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

2. แบบอะซิ ง โครนั ส (Asynchronous) เป็ นการรั บ ส่ ง ข้อ มู ล แบบอนุ ก รมแบบที่ ไ ม่ ต้อ งส่ ง
สัญญาณนาฬิ กาเพื่อเลื่ อนข้อมูลร่ วมด้วย แต่ใช้การกาหนดอัตราเร็ วในการรั บส่ งข้อมูลที่
เท่ า กันของภาครั บ กับ ภาคส่ ง อัตราเร็ ว นี้ เรี ย กกันว่า อัต ราบอด (Baud rate) ซึ่ งระบุ เป็ น
จานวนบิตต่อวินาที (bps: Bit per second) สาหรับไมโครคอนโทรลเลอร์ MCS-51 มีวงจร
รับส่ งข้อมู ลที่ ทางานแบบนี้ อยู่ภายในตัวเรี ยกว่า UART (Universal asynchronous receiver
transmitter)

รู ปแบบของข้อมูลในการสื่ อสารแบบอะซิงโครนัส

รู ปที่ 4-2 ลักษณะของข้อมูลในการสื่ อสารแบบอะซิงโครนัส

รู ปแบบของข้ อมูล ที่ส่งแบบอะซิ งโครนัสเรี ยงตามลาดับ ประกอบด้วย


1. บิตเริ่ มต้ น (Start bit) มีขนาด 1 บิต โดยจะมีลอจิกตรงกันข้ามกับสถานะปกติของสายสื่ อสาร
โดยบิตนี้ทาหน้าที่บ่งบอกให้วงจรด้านรับ รู ้ตาแหน่งของข้อมูลที่จะเรี ยงหน้าเข้ามา
2. บิตข้ อมูล ( Data) มีขนาด 8 บิต เรี ยงกันมาโดยเริ่ มจากบิตที่มีความสาคัญต่า (LSB) เข้ามาก่อน
3. บิตตรวจสอบพาริ ตี้ (Parity bit) มีขนาด 1 บิต จะใช้หรื อไม่ใช้ก็ได้ข้ ึนอยู่กบั ความต้องการของ
ผูใ้ ช้งาน โดยบิตนี้ ทาหน้าที่ตรวจสอบความถู กต้องของข้อมูลที่รับเข้ามา การตรวจสอบจะตรวจสอบ
จานวนลอจิก 1 ในไบต์น้ นั ๆ ซึ่งมีได้ 2 ลักษณะคือ
3.1 พาริ ตี้ค่ ู (Even parity) คือบิ ตข้อมูล ที่ เป็ นลอจิ ก 1 เป็ นจานวนคู่ ไมโครคอนโทรลเลอร์
MCS-51 มี แ ฟล็ ก ที่ ใ ช้ต รวจสอบพาริ ต้ ี ที่ เ ป็ นแบบพาริ ต้ ี คู่ ซ่ ึ งอยู่ ใ นรี จิ ส เตอร์ PSW เมื่ อ
ตรวจสอบพบว่าข้อมู ลในรี จิสเตอร์ A มี ลอจิก 1 เป็ นจานวนคู่ บิตนี้ จะเป็ น 0 แต่หากว่า มี
ลอจิก 1 เป็ นจานวนคี่บิตนี้ จะเป็ น 1 เมื่อดาเนินการส่ งไปกับขบวนข้อมูล ด้านภาครับนาไป
ตรวจสอบหากข้อมู ล เท่ า กับ ด้า นส่ ง จานวนลอจิ ก 1 ทั้ง 9 บิ ต (ข้อมู ล 8 พาริ ต้ ี 1) จะเป็ น
จานวนคู่ หากมีการผิดพลาด 1 บิตจานวนลอจิกที่เป็ น 1 จะเป็ นจานวนคี่ ภาครับก็จะทราบ
ได้วา่ ข้อมูลที่รับเข้ามาเกิดการผิดพลาดขึ้น
3.2 พาริ ตี้คี่ (Odd parity) คื อบิ ตข้อ มู ล ที่ เป็ นลอจิ ก 1 เป็ นจ านวนคี่ ไมโครคอนโทรลเลอร์
MCS-51 ไม่มีแฟล็กที่ใช้ตรวจสอบพาริ ต้ ีชนิดนี้
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 85
4. บิตหยุด (Stop bit) เป็ นบิตสุ ดท้ายปิ ดขบวนข้อมูลที่เพิ่มขึ้นมาเพื่อระบุถึงขอบเขตการสิ้ นสุ ดของ
ข้อมูลในไบต์น้ นั ๆ ซึ่ งบิตหยุดนี้ มีดว้ ยกัน 3 ขนาดให้ผูใ้ ช้เลือกตามความเหมาะสมคือขนาด 1 บิต 1.5 บิต
และ 2 บิต โดยมีระดับลอจิกเดียวกันกับสภาวะปกติของสายสัญญาณ

ลักษณะของการสื่ อสารทางพอร์ตอนุกรม
การรับส่ งข้อมูลแบบอนุกรมแบ่งตามลักษณะการส่ งได้ 3 แบบ
1. แบบซิมเพล็ก (Simplex) เป็ นการส่ งข้อมูลแบบทางเดียว หรื อการส่ งแบบทิศทางเดียว
2. แบบฮาล์ ฟดู เพล็ก (Half duplex) เป็ นการรั บส่ งข้อมู ลแบบ 2 ทิ ศทาง ใช้ส ายสัญญาณตัว
เดียวกัน โดยจะต้องสลับเวลากันในการรับและการส่ งข้อมูล
3. แบบฟู ล ดู เพล็ก (Full duplex) เป็ นการรั บ ส่ ง ข้อมู ล แบบ 2 ทิ ศ ทางในเวลาเดี ยวกัน จึ ง ใช้
สายสัญญาณแยกกันในการรับและส่ งข้อมูล

Tx Rx Simplex

Tx Rx
Half duplex
Rx Tx
Tx Rx
Rx Tx Full duplex

รู ปที่ 4-3 ลักษณะการสื่ อสารอนุกรม

MCS-51 มีพอร์ ตอนุ กรมในตัวที่เป็ นแบบฟูลดู เพล็ก คือสามารถรับส่ งข้อมูลได้ในเวลาเดียวกัน


โดยมีรีจิสเตอร์ ที่เกี่ยวข้องในส่ วนของพอร์ ตอนุกรมอยู่ 2 ตัว คือ SBUF และ SCON

รี จิสเตอร์ SBUF (Serial data buffer register)


เป็ นรี จิสเตอร์ ขนาด 8 บิต ใช้ในการพักข้อมูล (Buffer) เพื่อส่ งข้อมูลออกทางพอร์ ตอนุ กรม และ
เป็ นรี จิสเตอร์ ใช้เก็บข้อมูลที่รับมาทางพอร์ ตอนุ กรม โดยไมโครคอนโทรลเลอร์ MCS-51 มีรีจิสเตอร์
บัฟเฟอร์ ของพอร์ ตอนุ กรมแยกออกจากกันระหว่างด้านรั บ และด้า นส่ ง ซึ่ งเมื่ อนาข้อมูล ไปใส่ ไ ว้ใ น
รี จิสเตอร์ SBUF ไมโครคอนโทรลเลอร์ จะดาเนินการใส่ ลงในรี จิสเตอร์ SBUF ด้านส่ งโดยอัตโนมัติ และ
หากอ่านข้อมูลจากรี จิสเตอร์ SBUF จะถู กกาหนดให้อ่านจากรี จิสเตอร์ SBUF ด้านรับ (พิจารณาจากรู ป
โครงสร้างภายในของพอร์ตอนุกรมประกอบ รู ปที่ 4-4 และรู ปที่ 4-5)
86 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รี จิสเตอร์ SCON (Serial port control register)


รี จิสเตอร์ SCON เป็ นรี จิสเตอร์ ขนาด 8 บิตที่อยูภ่ ายในหน่ วยความจาภายในใช้งานพิเศษ โดยมี
หน้าที่กาหนดโหมดการทางานในวงจรสื่ อสารทางพอร์ ตอนุกรม โดยมีบิตต่าง ๆ ดังนี้

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 SM1 เป็ นบิตเลือกโหมดการทางานดังตารางที่ 4-1

ตารางที่ 4-1 บิตเลือกโหมดการทางานวงจรสื่ อสารทางพอร์ตอนุกรม


SM0 SM1 โหมด ลักษณะการทางาน อัตราบอด (Baud rate)
0 0 0 ซิงโครนัส ความถี่ OSC 12
0 1 1 อะซิงโครนัส 8 บิต (ไม่มีพาริ ต้ ีบิต) กาหนดจาก Timer1 หรื อ Timer2
1 0 2 อะซิงโครนัส 9 บิต (รวมพาริ ต้ ี 1 บิต) ความถี่ OSC 64 หรื อ 32
1 1 3 อะซิงโครนัส 9 บิต (รวมพาริ ต้ ี 1 บิต) กาหนดจาก Timer1 หรื อ Timer2

SM2 ใช้กาหนดการสื่ อสารแบบมัลติโพรเซสเซอร์ (Multi-processor)

REN (Receiver enable) ใช้กาหนดการรับข้อมูลของพอร์ ตข้อมูล


“0” ไม่อนุญาตให้รับข้อมูลทางพอร์ ตอนุกรม
“1” อนุญาตให้รับข้อมูลทางพอร์ตอนุกรมได้

TB8 เป็ นข้อมูลบิตที่ 9 ที่ตอ้ งการส่ งในโหมด 2 และ 3 (เก็บพาริ ต้ ี)

RB8 เป็ นข้อมูลบิตที่ 9 ที่รับมาได้จากการส่ งในโหมด 2 และ 3 (เก็บพาริ ต้ ี)

TI เป็ นแฟลกที่ใช้บ่งบอกว่าส่ งข้อมูล 1 ไบต์ครบเรี ยบร้อยแล้ว

RI เป็ นแฟลกที่ใช้บ่งบอกว่ารับข้อมูล 1 ไบต์ครบเรี ยบร้อยแล้ว

โหมดการสื่ อสารทางพอร์ตอนุกรม (Serial port mode)


ไมโครคอนโทรลเลอร์ MCS-51 สามารถกาหนดโหมดในการสื่ อสารทางพอร์ ตอนุกรมได้
ทั้งหมด 4 โหมดคือ
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 87
1. โหมด 0 ซิงโครนัส
2. โหมด 1 อะซิงโครนัส 8 บิต (ไม่มีพาริ ต้ ีบิต)
3. โหมด 2 อะซิงโครนัส 9 บิต (รวมพาริ ต้ ี 1 บิต)
4. โหมด 3 อะซิงโครนัส 9 บิต (รวมพาริ ต้ ี 1 บิต)

โหมด 0
โหมด 0 เป็ นการรับส่ งข้อมูลแบบซิ งโครนัส (Synchronous) ซึ่ งจะรับหรื อส่ งข้อมูลผ่านทางขา
Rx และใช้ขา Tx เป็ นตัวส่ งสัญญาณนาฬิกาเพื่อใช้ในการเลื่อนข้อมูลโดยสัญญาณนาฬิกา เท่ากับค่าของ
แมชชีนไซเคิล (OSC12 )

โหมด 1
โหมด 1 เป็ นการรับส่ งข้อมูลแบบอะซิ งโครนัส (Asynchronous) โดยจานวนบิตข้อมูลทั้งหมดมี
จานวน 10 บิต ประกอบด้วย (เรี ยงตามลาดับ)
1. บิตเริ่ มต้น (Start Bit) ขนาด 1 บิต
2. บิตข้อมูล (Data) ขนาด 8 บิต
3. บิตหยุด (Stop Bit) ขนาด 1 บิต (อาจใช้ 1.5 บิตหรื อ 2 บิตก็ได้ตามต้องการ)
อัตราเร็ วในการส่ งข้อมูลหรื ออัตราบอดได้มาจากวงจรไทเมอร์ 1 หรื อไทเมอร์ 2 โดยผูใ้ ช้งานสามารถ
เลือกได้

โหมด 2
โหมด 2 เป็ นการรับส่ งข้อมูลแบบอะซิ งโครนัส (Asynchronous) จานวนข้อมูลทั้งหมดมีจานวน
11 บิต ประกอบด้วย (เรี ยงตามลาดับ)
1. บิตเริ่ มต้น (Start bit) ขนาด 1 บิต
2. บิตข้อมูล (Data) ขนาด 8 บิต
3. บิตพาริ ต้ ี (Parity) ขนาด 1 บิต ในการส่ งจะถูกนามาจากบิต TB8 และในการรับจะนาไปไว้
ในบิต RB8 โดยทั้ง 2 บิตนี้อยูใ่ นรี จิสเตอร์ SCON
4. บิตหยุด (Stop bit) ขนาด 1 บิต (อาจใช้ 1.5 บิตหรื อ 2 บิตก็ได้ตามต้องการ)
อัตราเร็ วในการส่ งข้อมูลหรื ออัตราบอดได้มาจากความถี่ OSC หาร 64 หรื อ ความถี่ OSC หาร 32
โดยผูใ้ ช้งานสามารถเลือกได้
88 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

โหมด 3
โหมด 3 เป็ นการรับส่ งข้อมูลแบบอะซิ งโครนัส (Asynchronous) มีลกั ษณะเช่นเดียวกับโหมด 2
ต่างกันที่แหล่งกาเนิ ดอัตราบอดในการส่ งข้อมูล ซึ่ งในโหมด 3 ได้มาจากวงจรไทเมอร์

อัตราบอด (Baud rate)


อัตราบอด (Baud rate) เป็ นอัตราเร็ วในการส่ งข้อมูล โดยต้องกระตุน้ วงจรภายในก่อนที่จะทา
การส่ งหรื อการรับข้อมูล แต่ทาครั้งแรกเพียงครั้งเดียววงจรภายในจะทางานตลอด ซึ่ งในแต่ละโหมดมี
การกาหนดต่างกันดังนี้

โครงสร้างของโหมด 0
การสื่ อสารทางพอร์ ตอนุกรมในโหมด 0 มีโครงสร้างของพอร์ตดังรู ปที่ 4-4

8051 Internal BUS

Write
to
SBUF
DSQ
CL SBUF RxD P3.0
(Send Data)
Shift
Zero Detector

Start Shift
S6 Tx Clk Tx Control
TI Send
Serial Port
Interrupt TxD P3.1
Rx Clk RI Receive (Send Clock)
REN
Start Rx Control Shift
RI Shift Clock
RxD P3.0
Input Shift REG.
Shift (Read Data)
Load SBUF

SBUF
Read SBUF

8051 Internal BUS

รู ปที่ 4-4 การทางานในโหมด 0


หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 89
Tx Clock และ Rx Clock จะรับสัญญาณมาจากที่เดียวกันโดยเป็ นสัญญาณที่เกิดขึ้นทุก ๆ แมชชีนไซเคิล
ดังนั้นอัตราบอดจึงมีค่าเท่ากับความถี่ OSC 12

โครงสร้างโหมด 1 และโหมด 3
อัตราเร็ วในการส่ งข้อมูลทางพอร์ ตอนุ กรม (อัตราบอด) ในโหมด 1 และโหมด 3 มีโครงสร้าง
แบบเดียวกัน แหล่งกาเนิดสัญญาณอัตราบอดได้มาจาก 2 แหล่ง คือจากวงจร Timer 1 หรื อวงจร Timer 2
ทั้งนี้ ข้ ึนอยู่กบั การกาหนดค่าที่บิต TCLK และ RCLK ซึ่ งอยู่ในรี จิสเตอร์ T2CON แหล่งสัญญาณอัตรา
บอดที่มาจากวงจร Timer1 สามารถเลือกว่าให้ผา่ นวงจรหาร 2 หรื อไม่หาร โดยเลือกได้จากการกาหนดที่
บิต SMOD ในรี จิสเตอร์ PCON สิ่ งที่ต่างกันของโหมด 1 กับโหมด 3 คือในโหมด 1 เป็ นการสื่ อสารแบบ
8 บิต ส่ วนในโหมด 3 เป็ นการสื่ อสารแบบ 9 บิตซึ่ งรวมบิตพาริ ต้ ีร่วมเข้าไปด้วย การทางานของโหมด 1
และโหมด 3 เป็ นดังรู ปที่ 4-5

8051 Internal BUS


Write
to
SBUF
Timer 1 D S
Timer 2
CL Q SBUF
Shift TxD
÷2 Zero Detector
SMOD
0 1
TCLK 0 Start Shift Data
1
÷16 Tx Clk
Tx Control
TI Send
Serial Port Interrupt
RCLK 0 1
÷16
1 to 0 Rx Clk Receive
translation RI
detector
Start Rx Control Shift

Bit Detector
Input Shift REG.
RxD Load SBUF Shift

SBUF
Read SBUF
8051 Internal BUS

รู ปที่ 4-5 การทางานในโหมด 1 และ 3


90 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

การคานวณอัตราบอดในโหมด 1 และโหมด 3
จากโครงสร้างของโหมด 1 และ 3 สามารถหาค่าที่ตอ้ งกาหนดในรี จิสเตอร์ ต้ งั ค่าจากอัตราบอด
ที่ได้จากวงจรไทเมอร์ 1 และไทเมอร์ 2 ดังนี้

เมื่อใช้วงจรไทเมอร์ 1 กาเนิดสัญญาณอัตราการส่ ง (Baud rate)


จากโครงสร้างในการสื่ อสารทางพอร์ ตอนุ กรมของโหมด 1 และโหมด 3 หากต้องการใช้งาน
แหล่งสัญญาณมาจากวงจรไทเมอร์ 1 ต้องโยกสวิทช์บิต TCLK และ RCLK เท่ากับให้มีค่าลอจิกเป็ น 0
(ซึ่ งค่าเริ่ มต้นของบิตนี้จะมีค่าลอจิกเป็ น 0 อยูแ่ ล้ว)

Timer 1 Timer 2
=Baud Rate×16
÷2
SMOD 0 =Baud Rate
1
TCLK 0 1 Start
÷16 Tx Clk
RCLK 0 1 ÷16
=Baud Rate×32 Rx Clk
Start

รู ปที่ 4-6 สัญญาณ Baud rate แต่ละจุด

สาหรับการใช้แหล่งสัญญาณจากวงจรไทเมอร์ 1 มีให้เลือก 2 แบบโดยการกาหนดที่บิต SMOD

SMOD=1 แหล่งสัญญาณที่มาจากวงจรไทเมอร์ 1 ที่ไม่ผา่ นวงจรหาร 2 อัตราเร็ วหาได้จาก


1
Baud rate = Over Flow of Timer1 Auto Reload Mode  
16
 OSC 1  1
=    ……………………(1)
 12  256  TH 1  16

SMOD=0 แหล่งสัญญาณที่มาจากวงจรไทเมอร์ 1 ที่ผา่ นวงจรหาร 2 อัตราเร็ วหาได้จาก


1 1
Baud rate = Over Flow of Timer1 Auto Reload Mode   
2 16
 OSC 1  1 1
=      …………….…….(2)
 12  256  TH 1  2 16
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 91
ตัวอย่าง ต้องการ Baud rate 9600 bps จงหาค่าข้อมูลในรี จิสเตอร์ TH1 เมื่อใช้คริ สตอล 11.0592 MHz
วิธีทา กรณี ให้ SMOD= “1”
 OSC 1  1
จากสมการ Baud rate =   
 12  256  TH 1  16

11.0592  106 1  1
  
 9600 =  12  256  TH 1  16

11.0592 106 1 1
 
256-TH1 = 12 16 9600
11.0592 106
256 
TH1 = 12 16  9600 = 250
วิธีทา กรณี ให้ SMOD = “0”
 OSC 1  1 1
   
จากสมการ Baud rate =  12  256  TH 1  2 16

11.0592 106 1  1
  
 9600 =  12  256  TH 1  32
11.0592 106 1 1
256-TH1 =  
12 32 9600
11.0592 106
TH1 = 256  = 253
12  32  9600

เมื่อใช้วงจรไทเมอร์ 2 กาเนิดสัญญาณอัตราการส่ ง (Baud rate)


เมื่อใช้งาน Timer 2 ต้องกาหนดให้ Timer 2 อยูใ่ นโหมดกาเนิดสัญญาณ Baud rate ดังนี้

RCLK TCLK CP/RL2 TR2


1 1 X 1

บิต TCLK RCLK และ TR2 บิตทั้ง 3 นี้อยูใ่ นรี จิสเตอร์ T2CON
1
Baud rate = Overflowof Timer 2 ( BaudRateGen.Mode) 
16
 OSC 1  1
=   
 2 65536   RCAP 2 H , RCAP 2 L   16
92 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่าง ต้องการ Baud rate 9600 bps จงหาค่าข้อมูลในรี จิสเตอร์ RCAP2H, RCAP2L เมื่อใช้คริ สตอล
11.0592 MHz
 OSC 1  1
จากสมการ Baud rate =   
 2 65536   RCAP 2 H , RCAP 2 L   16
11.0592 106  1
 9600 =  
1

 2 65536   RCAP 2 H , RCAP 2 L   16
11.0592 106 1 1
65536 – (RCAP2H,RCAP2L) =  
2 16 9600
11.0592 106
RCAP2H,RCAP2L = 65536  = 6550010
2 16  9600
= FFDCH ; RCAP2H=FFH ,RCAP2L=DCH
โครงสร้างโหมด 2
การสื่ อสารทางพอร์ ตอนุกรมในโหมด 2 จากโครงสร้างของพอร์ตดังรู ปที่ 4-7

8051 Internal BUS


Write
to
SBUF
OSC/2 D S
CL Q SBUF
Shift TxD
÷2 Zero Detector
SMOD
0 1
Start Shift Data
Tx Clk
Tx Control
TI Send
÷16
Serial Port Interrupt
÷16

1 to 0 Rx Clk RI Receive
detector Start Rx Control Shift
translation
Bit Detector
Input Shift REG.
RxD Load SBUF Shift

SBUF
Read SBUF
8051 Internal BUS

รู ปที่ 4-7 การทางานในโหมด 2


หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 93
อัตราการเร็ วของการสื่ อสารข้อมูลของพอร์ ตอนุกรมในโหมด 2 มีโครงสร้างของวงจรดังรู ป ซึ่ ง
จะเห็นว่า Tx Clock และ Rx Clock จะรับสัญญาณผ่านจากวงจรหาร 16 ที่ถูกส่ งมาจาก 2 แหล่งที่กาเนิ ด
OSC
จาก ซึ่ งสามารถเลือกได้วา่ จะให้ผา่ นวงจรหาร 2 หรื อไม่ โดยการกาหนดที่บิต SMOD ดังนี้
2
OSC 1
SMOD=1 Baud rate = 
2 16
OSC 1 1
SMOD=0 Baud rate =  
2 2 16

รู ปที่ 4-8 แหล่งจ่ายสัญญาณบอด (a) โหมด 0 (b) โหมด 2 (c)โหมด 1 และโหมด 3

การเขียนโปรแกรมใช้งานพอร์ตอนุกรม
ในการเขียนโปรแกรมเพื่อใช้งานพอร์ ตอนุกรมสามารถใช้งานได้ 2 วิธีคือ
- แบบวนตรวจสอบการรับส่ ง (Polling)
- แบบอินเตอร์ รัพต์ (Interrupt)

1. แบบวนตรวจสอบการรั บส่ ง (Polling) เป็ นการเขียนโปรแกรมที่ตอ้ งมีการวนตรวจสอบการ


สิ้ นสุ ดของการรับส่ งข้อมูล มีสิ่งที่ตอ้ งทาดังนี้
- สร้างสัญญาณกาหนดอัตราเร็ วในการสื่ อสารอนุกรม (อัตราบอด)
- ส่ งข้อมูลที่ตอ้ งการ
- ตรวจสอบการข้อมูล
94 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ส่ ว นของโปรแกรมสร้ า งสั ญ ญาณก าหนดอัต ราเร็ ว ในการสื่ อ สารอนุ ก รม Baud rate
Baud rate
โปรแกรมนี้ ทาเพียงครั้ งแรกเพียงครั้ ง เดี ยว วงจรที่ กาเนิ ด Baud rate จะทางานตลอดไป
จนกว่าจะหยุด Timer1 ด้วยคาสั่ง CLR TR1 โปรแกรมกาเนิดอัตราเร็ วการสื่ อสารอนุกรม

ตัวอย่างโปรแกรมการสร้ างสั ญญาณ Baud rate ด้ วยภาษาแอสเซมบลี


MOV TH1,#…. ;Value in baud rate setting
MOV TMOD,#00100000B ; (Timer 1 mode 2) 8 bit auto-reload
MOV SCON,#01010000B ; Serial mode 1 ( 8 bit UART)
SETB TR1 ; Start Timer 1

ตัวอย่างโปรแกรมการสร้ างสั ญญาณ Baud rate ด้ วยภาษาซี


TH1=……. ; //Value in baud rate setting
TMOD=0x20; //Timer 1 mode 2 (8 bit auto-reload)
SCON=0x50; // Serial mode 1 ( 8 bit UART)
TR1=1; //Start Timer 1

การส่ ง ข้อ มู ล ท าได้โดยการนาข้อมู ล ที่ ต้องการส่ ง ออกทางพอร์ ต อนุ ก รม เขี ย นลง


Send data
(คัดลอกไปไว้) ในรี จิสเตอร์ SBUF พอร์ ตอนุ กรมจะทาการส่ งข้อมูลโดยอัตโนมัติจน
ครบทุกบิต เมื่อส่ งข้อมูลออกครบเรี ยบร้อยแล้วบิต TI จะถูกเซตเป็ นลอจิก 1 เราสามารถตรวจสอบการส่ ง
เสร็ จด้วยการตรวจสอบที่บิต TI โปรแกรมส่ งข้อมูลออกทางพอร์ ตอนุกรม

ตัวอย่ างโปรแกรมการส่ งข้ อมูลผ่ านพอร์ ตอนุกรมด้ วยภาษาแอสเซมบลี


MOV SBUF,A ;Value to send from ACC
JNB TI,$ ;Wait transmit until done
CLR TI ;Clear transmitter flag

ตัวอย่ างโปรแกรมการส่ งข้ อมูลผ่ านพอร์ ตอนุกรมด้ วยภาษาซี


SBUF = sdata; //Value to send from variable(sdata)
while(TI= =0) //Wait transmit until done
{}
TI=0; //Clear transmitter flag
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 95
การรับข้อมูลทาได้โดยการตรวจสอบที่บิต RI เมื่อมีค่าเป็ นลอจิก 1 แสดงว่าข้อมูล
Receive data
ที่รับเข้ามาครบ 1 ไบต์แล้ว เมื่ออ่านข้อมูลจากรี จิสเตอร์ SBUF เสร็ จแล้วต้องเคลียร์
บิต RI เพื่อรอรับข้อมูลไบต์ถดั ไป โปรแกรมส่ งข้อมูลออกทางพอร์ ตอนุกรม

ตัวอย่ างโปรแกรมการรับข้ อมูลผ่ านพอร์ ตอนุกรมด้ วยภาษาแอสเซมบลี


JNB RI,$ ;Wait receive until done
MOV A,SBUF ;Read value from SBUF
CLR RI ;Clear receiver flag

ตัวอย่างโปรแกรมการรับข้ อมูลผ่ านพอร์ ตอนุกรมด้ วยภาษาซี


while(RI= =0); //Wait receive until done
sdata= SBUF; //Read value from SBUF
RI=0; //Clear receiver flag

การรับส่ งที่กล่าวมานั้นไม่ได้ใช้การอินเตอร์ รัพต์ ดังนั้นเมื่อทาการส่ งจึงต้องรอให้ส่งข้อมูลไบต์


นั้นเสร็ จสิ้ นก่อนถึงจะไปทาอย่างอื่น ในทานองเดียวกันการรับข้อมูลต้องรอรับจนกว่าข้อมูลจะครบ 1
ไบต์ถึงจะอ่านได้

2. แบบอินเตอร์ รัพต์ (Interrupt) การสื่ อสารทางพอร์ ตอนุกรมของไมโครคอนโทรลเลอร์ ตระกูล


MCS-51 สามารถตรวจสอบการรั บ ส่ ง ส าเร็ จ เสร็ จ สิ้ น ได้ จ ากการขัด จัง หวะการท างานหรื อการ
อินเตอร์ รัพต์ ซึ่ งกาหนดการตอบสนองได้ที่รีจิสเตอร์ IE (ในรายละเอียดจะขอกล่ าวอีกครั้งในบทการ
ขัดจังหวะการทางาน) โดยค่าเริ่ มต้นไมโครคอนโทรลเลอร์ จะไม่มีการตอบสนองการอินเตอร์ รัพต์ทุก
ชนิด ซึ่ งเราสามารถกาหนดให้มีการตอบสนองต่อการอินเตอร์ รัพต์จากพอร์ ตอนุ กรมโดยกาหนดลอจิก
ที่บิต ES ให้มีค่าเป็ นลอจิก 1 และกาหนดบิตที่ยอมให้ระบบอินเตอร์ รัพต์เริ่ มทางานที่บิต EA โดยให้เป็ น
ลอจิก 1 เช่นกัน
เมื่ อ ด าเนิ น การส่ ง ข้อ มู ล ออกทางพอร์ ต อนุ ก รมเสร็ จ หรื อมี ข ้ อ มู ล เข้ า มาครบ 1 ไบต์ จ ะเกิ ด
อินเตอร์ รัพ ต์ ไมโครคอนโทรลเลอร์ MCS-51 จะกระโดดไปท างานตอบสนองการอิ นเตอร์ รัพ ต์ที่
ตาแหน่งตอบสนองการอินเตอร์ รัพต์จากพอร์ ตอนุกรมที่แอดเดรส 0023H
ดังนั้นในระหว่างการส่ งข้อมูลไม่ควรให้มีการตอบสนองการอินเตอร์ รัพต์ เพราะจะได้ไม่เกิ ดการ
อินเตอร์ รัพต์จากการรับข้อมูล สามารถทาได้โดยการปิ ดการตอบสนองการอินเตอร์ รัพต์ที่บิต EA ซึ่ งใช้
คาสั่ง
CLR EA ;Disable all interrupt
96 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ในขณะที่ ร อรั บ ข้อ มู ล แบบวนตรวจสอบ ไมโครคอนโทรลเลอร์ MCS-51 จะไม่
หมายเหตุ
สามารถทางานอย่างอื่นได้ ดังนั้นควรเลื อกใช้วิธีการอิ นเตอร์ รัพต์แทน โดยเมื่อส่ ง
ข้อมูลเสร็ จสิ้ นจึงเปิ ดการตอบสนองการอินเตอร์ รัพต์เพื่อให้ตอบสนองต่อการรับข้อมูล สาหรับการเปิ ด
อินเตอร์ รัพต์ใช้คาสั่ง
SETB EA ;Enable all interrupt

4.2 การขัดจังหวะการทางาน
การขัดจังหวะการทางานหรื อเรี ยกทับศัพท์วา่ การอินเตอร์ รัพต์ (Interrupt) เป็ นการขัดจังหวะการ
ทางานปกติของไมโครคอนโทรลเลอร์ ซึ่ งในไมโครคอนโทรลเลอร์ MCS-51 สามารถตอบสนองการ
อินเตอร์ รัพต์ได้ท้ งั หมดจาก 7 แหล่ง (หนังสื อบางเล่มเป็ น 6 แหล่งโดยไม่นบั การรี เซตเป็ นการขัดจังหวะ)
ในแต่ละแหล่ งของสัญญาณอิ นเตอร์ รัพต์จะทาให้ไมโครคอนโทรเลอร์ ตอบสนองการอินเตอร์ รัพต์ที่
แตกต่างกันไป การตอบสนองเป็ นการกระโดดไปทางานในตาแหน่ง (แอดเดรสของหน่วยความจาเก็บ
โปรแกรม) ที่ตอบสนองต่อการอินเตอร์ รัพต์ (Interrupt vector) ซึ่ งตาแหน่งตอบสนองในแต่ละประเภท
เป็ นดังตารางที่ 4-2

ตารางที่ 4-2 ตาแหน่งตอบสนองจากการอินเตอร์ รัพต์จากแหล่งต่าง ๆ


แหล่งอินเตอร์ รัพต์ ตาแหน่งตอบสนอง แฟลกแสดง แหล่งที่มา
Reset 0000H - สัญญาณภายนอก
External interrupt 0 (INT0) 0003H IE0 สัญญาณภายนอก
Timer 0 000BH TF0 การทางานภายใน
External interrupt 1 (INT1) 0013H IE1 สัญญาณภายนอก
Timer 1 001BH TF1 การทางานภายใน
Serial port 0023H TI,RI การทางานภายใน
Timer 2 002BH TF2,EXF2 การทางานภายใน

ค่าเริ่ มต้นของไมโครคอนโทรลเลอร์ จะไม่ตอบสนองการอิ นเตอร์ รัพต์ทุกชนิ ด ยกเว้นแต่การ


อินเตอร์ รัพต์จากการรี เซต สาหรับการรี เซตจะตอบสนองเมื่อได้รับลอจิก 1 ที่ของ RESET เป็ นเวลาไม่
น้อยกว่า 2 แมชชีนไซเคิล ซึ่งการอินเตอร์ รัพต์ชนิดนี้เป็ นอินเตอร์ รัพต์ที่สาคัญที่สุดไม่สามารถปฏิเสธการ
อินเตอร์ รัพต์ได้ การตอบสนองต่อการอิ นเตอร์ รัพ ต์ชนิ ดนี้ จะกระโดดกลับ ไปท างานในคาสั่งแรกที่
ตาแหน่งเริ่ มต้นใหม่ ( แอดเดรส 0000H)
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 97
สาหรับการอินเตอร์ รัพต์ชนิ ดอื่นผูใ้ ช้งานสามารถกาหนดการตอบสนองได้ หรื ออาจเรี ยกว่าให้
สามารถตอบสนองหรื อปฏิเสธการตอบสนองได้ ซึ่ งการกาหนดให้มีการตอบสนองหรื อไม่น้ นั สามารถ
ทาได้โดยการก าหนดค่ าลอจิ กของบิ ตควบคุ ม ในรี จิสเตอร์ IE (Interrupt enable) และสามารถกาหนด
ลาดับความสาคัญของการอินเตอร์ รัพต์ในแต่ละประเภทได้ในกรณี ที่ได้รับสัญญาณการอินเตอร์ รัพต์เข้า
มาพร้อม ๆ กัน การกาหนดลาดับของความสาคัญนั้นสามารถทาได้โดยการกาหนดลอจิกในรี จิสเตอร์ IP
(Interrupt priority) โดยมีรายละเอียดดังนี้

รี จิสเตอร์ IE (Interrupt enable register)


รี จิสเตอร์ IE เป็ นรี จิสเตอร์ ขนาด 8 บิตที่สามารถเข้าถึ งได้ในระดับบิต ซึ่ งเป็ นรี จิสเตอร์ ที่อยูใ่ น
หน่ วยความจาภายในใช้ง านพิ เศษ (SFR) ที่ แอดเดรส A8H ในแต่ ล ะบิ ตของรี จิส เตอร์ IE จะเป็ นการ
กาหนดการตอบสนองการอินเตอร์ รัพต์ในแต่ละชนิดโดยการกาหนดลอจิกดังนี้
0 ไม่ตอบสนองต่อการอินเตอร์ รัพต์
1 ตอบสนองต่อการอินเตอร์ รัพต์

EA - ET2 ES ET1 EX1 ET0 EX0

EA Enable all เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์ท้ งั หมด

ET2 Enable timer 2 เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จากวงจรไทเมอร์ 2

ES Enable serial port เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จากพอร์ ตอนุกรม

ET1 Enable timer 1 เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จากวงจรไทเมอร์ 1

EX1 Enable external interrupt 1 เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จาก


สัญญาณภายนอกที่ขา INT1

ET0 Enable timer 0 เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จากวงจรไทเมอร์ 0

EX0 Enable external interrupt 0 เป็ นบิตกาหนดการตอบสนองการอินเตอร์ รัพต์จาก


สัญญาณภายนอกที่ขา INT0

หากเปรี ยบบิตควบคุมการตอบสนองการอินเตอร์ รัพต์ที่อยูใ่ นรี จิสเตอร์ IE เป็ นสวิทช์ ก็สามารถ


เขียนเป็ นโครงสร้างเสมือนได้ดงั รู ปที่ 4-9
98 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

EX0
INT0 IE0
ET0
TF0
EX1
INT1 IE1
อินเตอร์รัพต์
ET1
TF1 EA
RI ES
TI
TF2 ET2
EXF2

รู ปที่ 4-9 โครงสร้างเสมือนของการควบคุมบิตตอบสนองการอินเตอร์ รัพต์

รี จิสเตอร์ IP (Interrupt priority register)


ไมโครคอนโทรลเลอร์ MCS-51 มีการอินเตอร์ รัพต์ชนิดเดียวที่สาคัญมากและเป็ นอินเตอร์ รัพต์ที่
ไม่สามารถปฏิ เสธได้คือรี เซตดังที่ได้กล่าวมาแล้ว ส่ วนการอินเตอร์ รัพต์ชนิ ดอื่นสามารถเลือกให้มีการ
ตอบสนองหรื อไม่ก็ได้ แต่ถา้ เลือกให้สามารถตอบสนองการอินเตอร์ รัพต์ต้ งั แต่ 2 แหล่งขึ้นไป แล้วเกิ ด
เหตุการณ์ที่มีสัญญาณขออินเตอร์ รัพต์ข้ ึนพร้ อมกัน ไมโครคอนโทรลเลอร์ ได้จดั ลาดับความสาคัญไว้
แล้ว โดยอินเตอร์ รัพต์ที่มีความสาคัญมากกว่าจะถู กตอบสนองก่อน สาหรับลาดับความสาคัญของการ
อินเตอร์ รัพต์ที่ไมโครคอนโทรลเลอร์ กาหนดไว้ดงั ตารางที่ 4-3

ตารางที่ 4-3 ลาดับความสาคัญของอินเตอร์ รัพต์ชนิ ดต่าง ๆ


แหล่งอินเตอร์ รัพต์ ลาดับความสาคัญ
External interrupt 0 (INT0) 1(สู งสุ ด)
Timer 0 2
External interrupt 1 (INT1) 3
Timer 1 4
Serial port 5
Timer 2 6(ต่าสุ ด)

ผูใ้ ช้งานสามารถแก้ไขลาดับความสาคัญของการอิ นเตอร์ รัพต์ในแต่ละชนิ ดได้โดยการแก้ไข


ลอจิกกาหนดความสาคัญของรี จิสเตอร์ IP ได้ดงั นี้
0 ลาดับความสาคัญต่า
1 ลาดับความสาคัญสู ง
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 99

- - PT2 PS PT1 PX1 PT0 PX0

PT2 Priority timer 2 เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จากวงจรไทเมอร์ 2

PS Priority serial port เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จากพอร์ ตอนุกรม

PT1 Priority timer 1 เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จากวงจรไทเมอร์ 1

PX1 Priority external interrupt 1 เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จาก


สัญญาณภายนอกที่ขา INT1
PT0 Priority timer 0 เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จากวงจรไทเมอร์ 0

PX0 Priority external interrupt 0 เป็ นบิตกาหนดความสาคัญของการอินเตอร์ รัพต์จาก


สัญญาณภายนอกที่ขา INT0

กรณี ที่มีการกาหนดลาดับความสาคัญให้มีความสาคัญในระดับเดี ยวกัน เช่ น ให้สูงหรื อให้ต่ า


เหมือนกัน แล้วเกิดการขอขัดจังหวะพร้อมกัน ไมโครคอนโทรลเลอร์ จะเลือกตัดสิ นใจทางานตามตาราง
ลาดับความสาคัญ

รี จิสเตอร์ TCON (Timer/Counter control register)


เป็ นรี จิสเตอร์ ขนาด 8 บิต ใช้ในการควบคุมการทางานโดยแต่ละบิตของรี จิสเตอร์ มีหน้าที่ต่าง ๆ
4 บิตบนใช้ควบคุมวงจรไทเมอร์ เคาน์เตอร์ ดงั ที่ได้กล่าวมาแล้วในบทที่ 3 สาหรับบทนี้ เป็ นการศึกษาการ
ขัดจังหวะซึ่งบิตที่ใช้งานจะเป็ น 4 บิตล่างดังนี้

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Timer/Counter Interrupt

IE1 (Interrupt 1 edge flag) เป็ นบิตใช้แสดงการเกิดอินเตอร์ รัพต์ โดยจะมีค่าเป็ นลอจิก


IE1
1 เมื่อมีสัญญาณอินเตอร์ รัพต์เข้ามาทางขา INT1 และจะกลับเป็ นลอจิก 0 เมื่อมีการไป
100 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ทางานในโปรแกรมตอบสนองการอินเตอร์ รัพต์ (ลักษณะของสัญญาณอินเตอร์ รัพต์จะ
ถูกกาหนดที่บิต IT1)
IT1 (Interrupt 1 type control bit) เป็ นบิตที่ใช้กาหนดลักษณะของสัญญาณที่จะเข้ามา
IT1 อินเตอร์ รัพต์ของวงจรที่ 1 โดยสามารถกาหนดได้ 2 ลักษณะจากการกาหนดลอจิกใน
บิตนี้ คือ
1. กาหนดให้ IT1 = 0 จะรับรู ้สัญญาณอินเตอร์ รัพต์ที่ระดับลอจิก 0 ของสัญญาณ
2. กาหนดให้ IT1 = 1 จะรับรู ้สัญญาณอินเตอร์ รัพต์ที่ขอบขาลงของสัญญาณ

INT1 IT1=0
IE1
IT1=1

รู ปที่ 4-10 การกาหนดการรับรู ้ลกั ษณะของสัญญาณอินเตอร์ รัพต์

IE0 (Interrupt 0 edge flag) เป็ นบิ ต ใช้แ สดงการอิ น เตอร์ รั พ ต์ ของวงจร 0 ซึ่ งการ
IE0
ทางานของบิตนี้จะมีการทางานเช่น เดียวกันกับบิต IE1
IT0 (Interrupt 1 type control bit) เป็ นบิตที่ใช้กาหนดลักษณะของสัญญาณที่เข้ามาใน
IT0
วงจรอินเตอร์ รัพต์ 0 การทางานเป็ นเช่นเดียวกับ IT1 คือ
1. กาหนดให้ IT0 = 0 จะรับรู ้สัญญาณอินเตอร์ รัพต์ที่ระดับลอจิก 0 ของสัญญาณ
2. กาหนดให้ IT0 = 1 จะรับรู ้สัญญาณอินเตอร์ รัพต์ที่ขอบขาลงของสัญญาณ

4.3 การใช้ งานวงจรว็อชด็อก


ว็อ ชด็ อ ก (Watch dog ) หากแปลตรง ๆ น่ า จะแปลได้ค วามว่า “หมาเฝ้ า ยาม” ซึ่ งในวงจร
ไมโครคอนโทรลเลอร์ จะเป็ นวงจรที่คอยเฝ้าระวังการหยุดทางานของไมโครคอนโทรลเลอร์ โดยไม่ทราบ
สาเหตุหรื อที่เรี ยกกันว่า “การแฮ้ งค์ ” โดยวงจรว็อชด็อกจะเป็ นตัวคอยรี เซตไมโครคอนโทรลเลอร์ เมื่อ
เกิ ดการแฮงค์ ภายในวงจรว็อชด็อกจะมีวงจรตั้งเวลาคล้าย ๆ กับวงจรไทเมอร์ เมื่อสั่งให้วงจรว็อชด็อก
เริ่ มทางานตัวนับค่าจะเริ่ มนับค่าไปเรื่ อย ๆ จนถึงค่าสู งสุ ดวงจรว็อชด็อกเมื่อถึงค่าสู งสุ ดจะส่ งสัญญาณไป
รี เซ็ ต ไมโครคอนโทรเลอร์ แต่ ถ้า เขี ย นโปรแกรมส่ ง สั ญญาณไปล้า งตัวนับ ก่ อนที่ จะนับ ถึ ง ค่ า สู ง สุ ด
ไมโครคอนโทรเลอร์ ก็จะไม่ถูกรี เซตจากวงจรว็อชด็อก ดังนั้นเพื่อให้ไมโครคอนโทรลเลอร์ สามารถ
ทางานเดิมได้อย่างต่อเนื่ องจะต้องเขียนโปรแกรมล้างตัวนับของวงจรว็อชด็อกภายในเวลาที่กาหนดอยู่
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 101
ตลอดเวลา ซึ่ งถ้าหากไมโครคอนโทรลเลอร์ เกิดการแฮงค์ (โปรแกรมปกติหยุดทางาน) จะไม่มีการล้าง
ตัวนับในวงจรว็อชด็อกเมื่ อตัวนับถึ ง ค่าสู งสุ ดจะส่ งสัญญาณไปรี เซ็ ตไมโครคอนโทรลเลอร์ สาหรั บ
วงจรว็อชด็อกมีอยูใ่ นไมโครคอนโทรลเลอร์ บางเบอร์ เท่านั้น เช่น AT89S51, AT89S52 เป็ นต้น

4.4 สรุปสาระสาคัญ
การสื่ อสารผ่านทางพอร์ ตอนุ กรมเป็ นการสื่ อสารที่ใช้วิธีการส่ งแบบทยอยส่ งทีละบิ ต สาหรั บ
ไมโครคอนโทรลเลอร์ MCS-51 มีวงจรสื่ อสารผ่านพอร์ ตอนุ กรมบรรจุอยูภ่ ายในตัว 1 วงจร มีโหมดการ
ทางานทั้งหมด 4 โหมด แต่โหมดที่นิยมใช้งานมากที่สุดคือโหมด 1 เป็ นโหมดสื่ อสารแบบอะซิ งโครนัส
8 บิตและไม่ส่งบิตพาริ ต้ ี การสื่ อสารแบบอะซิ งโครนัสคือการสื่ อสารที่ไม่ตอ้ งส่ งสัญญาณนาฬิกาเพื่อใช้
เลื่ อนข้อมู ลแต่ใช้วิธีการกาหนดอัตราเร็ วในการสื่ อสารแทน การกาหนดอัตราเร็ วนี้ เรี ยกว่าอัตราบอด
(Baud rate) ไมโครคอนโทรลเลอร์ MCS-51 สามารถสร้ างอัตราบอดได้จากวงจรไทเมอร์ 2 วงจรคื อ
วงจรไทเมอร์ 1 และวงจรไทเมอร์ 2
การอินเตอร์ รัพต์คือการขัดจังหวะการทางานปกติของสายคาสั่งโปรแกรมไมโครคอนโทรลเลอร์
สาหรับไมโครคอนโทรลเลอร์ MCS-51สามารถมีอินเตอร์ รัพต์ได้ท้ งั หมด 7 แหล่งในแต่ละแหล่งจะมี
ตาแหน่ งของโปรแกรมตอบสนองการอิ นเตอร์ รัพต์แตกต่า งกันไป ตาแหน่ ง การตอบสนองนี้ เรี ยกว่า
อินเตอร์รัพต์เวกเตอร์
วงจรว็อชด็อกเป็ นวงจรที่ใช้ป้องกันไมโครคอนโทรลเลอร์ หยุดทางานหรื อทางานผิดพลาดไป
จากวงรอบการทางานปกติดโดยไม่ทราบสาเหตุเป็ นผลให้เกิดอาการค้างหรื อเรี ยกว่าเครื่ องแฮ้งค์ ซึ่ งวงจร
จะทาหน้าที่รีเซตไมโครคอนโทรลเลอร์ หากประสบปั ญหาดังกล่าว ทาให้ไมโครคอนโทรลเลอร์ สามารถ
กลับไปเริ่ มต้นทางานได้ตามปกติ
102 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบฝึ กหัดหน่ วยที่ 4


คาชี้แจง ให้นกั ศึกษาตอบคาถามต่อไปนี้ให้สมบรู ณ์
1. การสื่ อสารอนุกรมมีกี่วธิ ี อะไรบ้าง

2. รู ปแบบของข้อมูลในการสื่ อสารแบบอะซิ งโครนัสเป็ นอย่างไร

3. อัตราบอด (Baud rate) คืออะไร

4. การสื่ อสารแบบฟูลดูเพล็กเป็ นการสื่ อสารที่มีลกั ษณะใด

5. รี จิสเตอร์ SBUF มีหน้าที่อย่างไรบ้าง

6. จงแสดงวิธีหาค่าข้อมูลที่ตอ้ งกาหนดลงรี จิสเตอร์ TH1 เมื่อใช้คริ สตอล 11.0592 MHz เพื่อให้ได้


อัตราบอดที่ 4800 bps โดยกาหนดให้ SMOD มีค่าเป็ นลอจิก 1

7. การอินเตอร์ รัพต์คืออะไร

8. หน้าที่ของวงจรว็อชด็อกคืออะไร
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 103

แบบทดสอบหลังเรียนหน่ วยที่ 4
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. วิธีการส่ งข้อมูลอนุกรมที่ตอ้ งส่ งสัญญาณ 5. บิตแรกของข้อมูลที่ส่งออกจากการส่ ง
นาฬิกาไปพร้อมคือวิธีใด แบบอะซิงโครนัสคือบิตใด
ก. การส่ งแบบอะซิ งโครนัส ก. บิต D0
ข. การส่ งแบบซิ งโครนัส ข. บิต D2
ค. การส่ งแบบโครนัสซิ ง ค. บิต D4
ง. การส่ งแบบโครนัส ง. บิต D6
จ. การส่ งแบบโครซิ งนัส จ. บิต D7
2. วิธีการส่ งข้อมูลอนุกรมที่ไม่ตอ้ งส่ งสัญญาณ 6. บิตเริ่ มต้นของส่ งแบบอะซิ งโครนัสมีสถานะใด
นาฬิกาไปพร้อมคือวิธีใด ก. มีสถานะเป็ นลอจิก 1
ก. การส่ งแบบโครซิ งนัส ข. มีสถานะเป็ นลอจิก 0
ข. การส่ งแบบซิ งโครนัส ค. มีสถานะเช่นเดียวกับด้านรับ
ค. การส่ งแบบอะซิ งโครนัส ง. มีสถานะเป็ นขาลอย (High Z)
ง. การส่ งแบบโครนัส จ. มีสถานะเป็ นแบบใดก็ได้ตามการ
จ. การส่ งแบบโครนัสซิ ง กาหนด
3. อัตราเร็ วในการรับส่ งแบบอะซิงโครนัส 7. การสื่ อสารแบบอนุกรมที่ส่งแบบฟูลดูเพล็กมี
เรี ยกว่าอะไร ลักษณะใด
ก. อัตราสื่ อสาร (Communication rate) ก. สามารถส่ งได้ที่ละ 1 ไบต์
ข. อัตราเร็ ว (Speed rate) ข. สามารถส่ งได้อย่างเดียว
ค. อัตราส่ ง (Send rate) ค. สามารถรับได้อย่างเดียว
ง. อัตราบอด (Baud rate) ง. สามารถรับส่ งต่างเวลากัน
จ. อัตราบิต (Bit rate) จ. สามารถรับส่ งได้ในเวลาเดียวกัน
4. สภาวะปกติของสัญญาณของการส่ งแบบอะ 8. เมื่อต้องการส่ งข้อมูลออกพอร์ ตอนุกรมทาได้
ซิงโครนัสมีสถานะใด โดยนาข้อมูลไปไว้ในรี จิสเตอร์ใด
ก. มีสถานะเป็ นลอจิก 1 ก. SMOD
ข. มีสถานะเป็ นลอจิก 0 ข. SRXD
ค. มีสถานะเป็ นขาลอย (High Z) ค. SBUF
ง. มีสถานะเป็ นเช่นเดียวกับด้านรับ ง. STXD
จ. มีสถานะใด ๆ ก็ได้ตามการกาหนด จ. SCON
104 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

9. โหมดใดที่กาหนดอัตราบอด (Baud rate) จาก 13. เมื่อทาการรับข้อมูลเข้ามาทางพอร์ตอนุกรม


วงจร Timer1 หรื อ Timer2 ในการสื่ อสาร ครบ 1 ไบต์ จะเกิดสิ่ งใด
แบบอนุกรม ก. บิต RI จะมีค่าเป็ นลอจิก 1
ก. โหมด 0 ข. บิต TI จะมีค่าเป็ นลอจิก 0
ข. โหมด 1 ค. บิต TF จะมีค่าเป็ นลอจิก 1
ค. โหมด 2 ง. บิต RI จะมีค่าเป็ นลอจิก 0
ง. โหมด 3 จ. บิต TI จะมีค่าเป็ นลอจิก 1
จ. โหมด 1 และโหมด 3 14. รี จิสเตอร์เปิ ด/ปิ ดการตอบสนองการ
10. การสื่ อสารแบบอนุกรมแบบอะซิงโครนัส 8 อินเตอร์ รัพต์คือรี จิสเตอร์ ใด
บิต (ไม่มีพาริ ต้ ีบิต) คือโหมดใด ก. IF
ก. โหมด 0 ข. IE
ข. โหมด 1 ค. IP
ค. โหมด 2 ง. IO
ง. โหมด 3 จ. IR
จ. โหมด 1 และโหมด 3 15. การอินเตอร์ รัพต์มีกี่แหล่ง (รวมรี เซต)
11. เมื่อรับข้อมูลเข้าพอร์ ตอนุกรมครบแล้ว ก. 4 แหล่ง
สามารถไปรับมาใช้งานได้ที่รีจิสเตอร์ใด ข. 5 แหล่ง
ก. SMOD ค. 6 แหล่ง
ข. SRXD ง. 7 แหล่ง
ค. STXD จ. 8 แหล่ง
ง. SBUF 16. รี จิสเตอร์ กาหนดลาดับความสาคัญของการ
จ. SCON อินเตอร์ รัพต์คือรี จิสเตอร์ ใด
12. เมื่อทาการส่ งข้อมูลออกพอร์ ตอนุกรมครบ 1 ก. IR
ไบต์ จะเกิดสิ่ งใด ข. IF
ก. บิต TI จะมีค่าเป็ นลอจิก 0 ค. IE
ข. บิต TF จะมีค่าเป็ นลอจิก 1 ง. IO
ค. บิต RI จะมีค่าเป็ นลอจิก 1 จ. IP
ง. บิต RI จะมีค่าเป็ นลอจิก 0
จ. บิต TI จะมีค่าเป็ นลอจิก 1
หน่ วยที่ 4 การสื่ อสารทางพอร์ตอนุกรม การอินเตอร์ รัพต์ และว็อชด็อก 105
17. บิตที่แสดงการเกิดการอินเตอร์ รัพต์ที่เข้ามา 19. เมื่อเรี ยกใช้งานวงจรว็อชด็อก (Watch dog)
ทางขา INT1 คือบิตใด แล้วจะต้องดาเนินการอย่างไร
ก. IE1 ก. ไม่ตอ้ งดาเนินการใด ๆ
ข. IO1 ข. คอยรี เซตวงจรว็อชด็อกก่อนครบ
ค. IR1 เวลาที่กาหนด
ง. IF1 ค. ป้ อนค่าใหม่เมื่อเกิดโอเวอร์ โฟลว์
จ. IP1 ง. รอรับค่าจากรี จิสเตอร์
18. สิ่ งใดคือหน้าที่ของวงจรว็อชด็อก (Watch จ. คอยตรวจสอบสถานะของวงจร
dog) 20. ไมโครคอนโทรลเลอร์ MCS-51 เบอร์ใดมี
ก. สร้างความถี่ วงจรว็อชด็อก (Watch dog)
ข. รับสัญญาณ ADC ก. AT89C51
ค. รับส่ งข้อมูลผ่าน IR ข. AT89C52
ง. รี เซตซี พียเู มื่อเกิดการค้าง (แฮ้งค์) ค. AT89S52
จ. สร้างสัญญาณนาฬิกาให้กบั ซี พียู ง. AT89C2051
จ. AT89C4051

เฉลยแบบทดสอบก่อนเรี ยน
1. ง 2. ค 3. ก 4. ข 5. ก 6. ก 7. จ 8. ง 9. ง 10. ข
11. จ 12. ค 13. ก 14. ง 15. ง 16. ข 17. ง 18. ก 19. ก 20. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ค 3. ง 4. ก 5. ก 6. ข 7. จ 8. ค 9. จ 10. ข
11. ง 12. จ 13. ก 14. ข 15. ง 16. จ 17. ก 18. ง 19. ข 20. ค
หน่ วยที่ 5
การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์
หัวข้อเรื่ อง
5.1 ขั้นตอนในการพัฒนาโปรแกรม
5.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์
5.3 การสร้างฟังก์ชนั่ รองขึ้นใช้เอง

สาระสาคัญ
การเขียนโปรแกรมควบคุมการทางานไมโครคอนโทรลเลอร์ดว้ ยภาษาซี เป็ นการเขียนโปรแกรม
ที่มีความยืดหยุน่ มากกว่าและสามารถพัฒนางานได้เร็ วกว่าการเขียนโปรแกรมด้วยภาษาแอสเซมบลี การ
เขี ย นโปรแกรมด้วยภาษาซี ข องไมโครคอนโทรลเลอร์ MCS-51 นี้ เป็ นมาตรฐาน ANSI C ดัง นั้นเมื่ อ
นักศึก ษาสามารถเขี ยนโปรแกรมควบคุ มการทางานไมโครคอนโทรลเลอร์ MCS-51 นี้ ได้นักศึ กษาก็
สามารถนาความรู ้ของการเขียนโปรแกรมภาษาซีไปใช้งานด้านอื่น ๆ ได้
สมรรถนะประจาหน่วยการเรี ยนรู ้
แสดงความรู ้ เกี่ ยวกับการเขี ยนผังงาน (Flow chart) การตรวจสอบความถู กต้องของการเขีย น
โปรแกรมจากผังงาน และสามารถเขียนโปรแกรมจากผังงาน
จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับขั้นตอนในการพัฒนาโปรแกรม
2. เพื่อให้มีความรู ้เกี่ยวกับภาษาซีสาหรับไมโครคอนโทรลเลอร์
3. เพื่อให้มีความรู ้เกี่ยวกับการสร้างฟังก์ชนั่ รองขึ้นใช้เอง
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับขั้นตอนในการพัฒนาโปรแกรมได้
2. บอกเกี่ยวกับภาษาซีสาหรับไมโครคอนโทรลเลอร์ ได้
3. บอกวิธีการสร้างฟังก์ชนั่ รองขึ้นใช้เองได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
108 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 5
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
รู ปใช้ตอบคาถามข้อที่ 1-5

1 2 3 4 5

1. ผังงานรู ปทรงใดใช้แทนกระบวนการ 4. ผังงานรู ปทรงใดใช้แทนจุ ดเชื่ อมต่อไปหน้า


ประมวลผล อื่น
ก. 1 ก. 1
ข. 2 ข. 2
ค. 3 ค. 3
ง. 4 ง. 4
จ. 5 จ. 5
2. ผังงานรู ปทรงใดใช้แทนการตัดสิ นใจ 5. ผังงานรู ปทรงใดใช้แทนกระบวนการที่เตรี ยม
ก. 1 ไว้แล้ว
ข. 2 ก. 1
ค. 3 ข. 2
ง. 4 ค. 3
จ. 5 ง. 4
3. ผังงานรู ปทรงใดใช้แทนจุดเริ่ มต้นหรื อ จ. 5
จุดสิ้ นสุ ดของโปรแกรม 6. ตัวแปรชนิดใดมีขนาด 8 บิตและขอบเขตเป็ น
ก. 1 0-255
ข. 2 ก. char
ค. 3 ข. unsigned char
ง. 4 ค. int
จ. 5 ง. unsigned int
จ. long
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 109
7. ตัวแปรชนิดใดที่สามารถใส่ ค่าได้ไม่เกิน ง. 5+x;
60000 จ. inc x,5;
ก. char 12. ค าสั่ ง ใดใช้ ต รวจสอบเงื่ อ นไขก่ อ นท างาน
ข. unsigned char ตามที่เตรี ยมไว้
ค. int ก. if
ง. unsigned int ข. do
จ. long ค. goto
8. ตัวแปรชนิดใดที่สามารถใส่ ค่าได้ไม่เกิน ง. for
30000 จ. while(1)
ก. char 13. for(n=0;n<=10;n++) จะทางานกี่รอบ
ข. unsigned char ก. 7 รอบ
ค. int ข. 8 รอบ
ง. unsigned int ค. 9 รอบ
จ. long ง. 10 รอบ
9. คาสั่งใดใช้เพิ่มค่าในตัวแปร x ขึ้น 1 ค่า จ. 11 รอบ
ก. x++; 14. คาสั่งใดใช้วนรอบการทางานไม่รู้จบ
ข. x--; ก. if
ค. x+1; ข. do
ง. x-1; ค. while(1)
จ. x+x; ง. goto
10. คาสั่งใดใช้ลดค่าในตัวแปร x ลง 1 ค่า จ. for
ก. x+ +; 15. ในแต่ละ case ก่อนออกต้องใช้คาสั่งใด
ข. x - -; ก. goto
ค. x+1; ข. for
ง. x-1; ค. break;
จ. x+x; ง. if
11. คาสั่งใดใช้เพิ่มค่าในตัวแปร x ขึ้น 5 ค่า จ. do
ก. x+++++;
ข. x+5;
ค. x=x+5;
110 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

16. ฟังก์ชนั่ ที่ไม่มีการคืนค่าต้องใส่ คานาหน้า 19. ฟังก์ชนั่ ที่รับค่าไม่เกิน 50000 ไว้ในตัวแปร A


ฟังก์ชนั่ ว่าอะไร ในวงเล็บท้ายชื่อฟังก์ชนั่ ต้องใส่ คาว่าอะไร
ก. void ก. (A)
ข. main ข. (char A)
ค. return ค. (unsigned char A)
ง. int ง. (int A)
จ. while(1) จ. (unsigned int A)
17. ฟั งก์ชนั่ ที่ไม่มีการรับค่าในวงเล็บท้ายชื่ อต้อง 20. ฟังก์ชนั่ ใดที่ไม่มีการรับค่าและไม่ส่งคืนค่า
ใส่ คาว่าอะไร ก. timecon(void)
ก. void ข. void timecon()
ข. main ค. void timecon(void)
ค. return ง. void timecon(int a)
ง. int จ. int timecon(void)
จ. while(1)
18. การส่ งค่าคืนก่อนจบฟังก์ชนั่ ใช้คาสั่งใด
ก. void
ข. main
ค. return
ง. int
จ. while(1)
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 111

การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์
การใช้งานไมโครคอนโทรลเลอร์ นอกจากจะต้องมีวงจรไมโครคอนโทรลเลอร์ และมีส่วนของ
วงจรเชื่ อ มต่ อ กับ อุ ป กรณ์ ภายนอกเพื่ อ ใช้ใ นการควบคุ ม งานต่ า ง ๆ ตามต้องการที่ เ รี ย กว่า ฮาร์ ด แวร์
(Hardware) แล้วจาเป็ นต้องมีชุดคาสั่งหรื อโปรแกรมไว้สาหรับสั่งงานให้ไมโครคอนโทรลเลอร์ ทางาน
ตามที่ตอ้ งการซึ่ งเรี ยกว่าซอฟท์แวร์ (Software) ในบทนี้ เป็ นการเรี ยนรู ้หลักการเขียนโปรแกรมควบคุม
การทางานของไมโครคอนโทรลเลอร์

5.1 ขั้นตอนในการพัฒนาโปรแกรม
โปรแกรมคอมพิ วเตอร์ ที่ นามาใช้ง านได้น้ ัน ไม่ ส ามารถเริ่ ม ต้นจากจากการเขี ย นค าสั่ ง ด้ว ย
ภาษาคอมพิวเตอร์ ได้ทนั ที จะต้องมีการวิเคราะห์ วางแผน และปฏิบตั ิตามกระบวนการทางาน ซึ่ งแบ่ง
ออกเป็ น 5 ขั้นตอน คือ
1. วิเคราะห์ ปัญหา โดยจะเริ่ มจากการวิเคราะห์ผลลัพธ์ ที่ตอ้ งการ (Output) แล้วย้อนกลับไป
ยังข้อมูลที่นาเข้าสู่ ระบบ (Input) ตลอดจนข้อมูลอื่น ๆ ที่เกี่ยวข้อง ในการที่จะนาไปใช้ใน
การประมวลผล
2. ออกแบบวิธีการแก้ปัญหา เมื่อทราบผลลัพธ์ที่ตอ้ งการและข้อมูลที่นาเข้าสู่ ระบบแล้ว ต้อง
กาหนดการวางแผนในการแก้ปัญหา โดยใช้วิธีเขียนลาดับขั้นตอนการแก้ปัญหาที่เรี ยกว่า
อัลกอริ ทึม (Algorithm ) และใช้เครื่ องมือสาหรับช่วยในการเขียนอัลกอริ ทึมเช่น การเขียน
รหัสจาลอง (Pseudo code) การเขียนผังงาน (Flowchart) เป็ นต้น
3. เขียนโปรแกรม เลือกภาษาคอมพิวเตอร์ ที่เหมาะสม โดยพิจารณาจากความสามารถของ
ผูเ้ ขียนโปรแกรมและประสิ ทธิ ภาพของภาษาคอมพิวเตอร์ น้ นั ๆ ให้เหมาะสมกับระบบงานที่
ต้องการแล้วเขียนชุดคาสัง่ เป็ นภาษาคอมพิวเตอร์ ตามอัลกอริ ทึมที่ได้ออกแบบไว้
4. ทดสอบและแก้ ไขโปแกรม ภายหลังจากเขียนโปรแกรมเสร็ จสิ้ น จะต้องทาการทดสอบ
โปรแกรมเพื่อหาข้อผิดพลาด (Error) ซึ่ งข้อผิดพลาดที่พบในขั้นตอนการทดสอบโปรแกรม
นั้น
5. จัดทาเอกสารประกอบ เมื่อโปแกรมผ่านการทดสอบแล้วก็จะต้องจัดทาเอกสารประกอบซึ่ ง
มีรายละเอียดของวิธีการใช้งานโปรแกรม วิธีการติดตั้งโปรแกรม ตลอดจนขั้นตอนในการ
พัฒนาโปรแกรม รวมถึงอัลกอริ ทึมและโปรแกรมต้นฉบับ (Source code) เพื่อประโยชน์ใน
กรณี ที่ตอ้ งการแก้ไขหรื อปรับปรุ งโปรแกรมภายหลัง1

ดร. ศรี ไพร ศักดิ์รุ่งไพรศาลกุล “หลักการเขียนโปรแกรม” http://www.gotoknow.org/blogs/posts/269964


1
112 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนวิธี หรื อ Algorithm (ภาษาไทย : อัลกอริ ทึม) หมายถึ งกระบวนการแก้ปัญหาที่สามารถ


เข้าใจได้ มีลาดับหรื อวิธีการในการแก้ไขปั ญหาใดปั ญหาหนึ่งอย่างเป็ นขั้นเป็ นตอนและชัดเจน เมื่อนาเข้า
อะไร แล้ว จะต้อ งได้ผ ลลัพ ธ์ เ ช่ น ไร ซึ่ งแตกต่ า งจากการแก้ปั ญ หาแบบสามัญ ส านึ ก หรื อ ฮิ ว ริ ส ติ ก
(Heuristic) โดยทัว่ ไปขั้นตอนวิธี จะประกอบด้วย วิธีการเป็ นขั้น ๆ และมีส่วนที่ตอ้ งทาแบบวนซ้ า หรื อ
เวียนเกิดโดยใช้ตรรกะ และ/หรื อ ในการเปรี ยบเทียบในขั้นตอนต่าง ๆ จนกระทัง่ เสร็ จสิ้ นการทางาน
ในการทางานอย่างเดียวกัน เราอาจจะเลือกขั้นตอนวิธีที่ต่างกันเพื่อแก้ปัญหาได้ โดยที่ผลลัพธ์ที่ได้
ในขั้นสุ ดท้ายจะออกมาเหมือนกันหรื อไม่ก็ได้ และจะมีความแตกต่าง ที่จานวนและชุ ดคาสั่งที่ใช้ต่างกัน
ซึ่ งส่ งผลให้เวลาและขนาดหน่วยความจาที่ตอ้ งการต่างกัน หรื อเรี ยกได้อีกอย่างว่ามีความซับซ้อนต่างกัน
การนาขั้นตอนวิธีไปใช้ ไม่จากัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กบั ปั ญหา
อื่น ๆ ได้เช่น การออกแบบวงจรไฟฟ้ า, การทางานเครื่ องจักรกล, หรื อแม้กระทัง่ ปั ญหาในธรรมชาติ เช่น
วิธีของสมองมนุษย์ในการคิดเลข หรื อวิธีการขนอาหารของแมลง2

ผั ง งาน (Flowchart) คื อ รู ป ภาพ (Image) หรื อ สั ญ ลัก ษณ์ ( Symbol) ที่ ใ ช้ เ ขี ย นแทนขั้น ตอน
คาอธิ บาย ข้อความ หรื อคาพูดที่ ใช้ในอัล กอริ ทึม (Algorithm) เพราะการนาเสนอขั้นตอนของงานให้
เข้าใจตรงกัน ระหว่างผูเ้ กี่ยวข้อง ด้วยคาพูด หรื อข้อความทาได้ยากกว่า3
ผังงานในการเขียนโปรแกรมเป็ นรู ปทรงเลขาคณิ ต ที่บรรจุรายละเอียดกระบวนการประมวลผล
โดยมีรูปทรงในการใช้งานหลัก ๆ (เฉพาะงานไมโครคอนโทรลเลอร์ ) ดังนี้

ตารางที่ 5-1 ผังงานหลักที่ใช้งานไมโครคอนโทรลเลอร์


รู ปทรง ชนิดการประมวลผล ตัวอย่างเส้นทาง
จุ ด เริ่ ม ต้น หรื อ จุ ด สิ้ น สุ ด
ของโปรแกรม

กระบวนการประมวลผล

การตัดสิ นใจ

ชุ ด กระบวนการที่ เตรี ย ม
ไว้แล้ว (โปรแกรมย่อย)

http://www.com5dow.com
2

http://158.108.203.7/student/simple/?t46.html
3
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 113
ตารางที่ 5-1 ผังงานหลักที่ใช้งานไมโครคอนโทรลเลอร์ (ต่อ)
รู ปทรง ชนิดการประมวลผล ตัวอย่างเส้นทาง
จุดเชื่ อมในหน้าเดียวกัน

จุดเชื่อมในหน้าอื่น

ตัวอย่างการเขียนลาดับขั้นขั้นตอนวิธี และการแปลงเป็ นผังงาน


ยกตัวอย่างในชีวติ ประจาวันเพื่อให้ง่ายต่อการจินตนาการ โจทย์ การทาไข่เจียวหมูสับ
ขั้นที่ 1 เขียนลาดับขั้น (Algorithm)
1. เตรี ยมวัสดุ ไข่,หมูสับ,กระทะ,เตาไฟ,น้ ามันพืช ,ถ้วย,จาน 6. ถ้ากระทะร้อนใส่ ไข่ลงไป
2. เอากระทะตั้งไฟ (อุ่นกระทะ) 7. รอให้หนึ่งด้านสุ ก
3. ใส่ น้ ามันพืช 8. กลับด้าน
4. ตอกไข่ใส่ ถว้ ยใส่ หมูสับ 9. รอให้ดา้ นที่ 2 สุ ก
5. ตีจนเข้ากัน 10. ตักออกใส่ จาน (เสร็ จ)
ขั้นที่ 2 แปลงลาดับขั้นเป็ นผังงาน (Flowchart)
เริ่ ม

เตรี ยมวัสดุ ไข่,หมูสับ,กระทะ... B

เอากระทะตั้งไฟ ใส่ ไข่ลงกระทะ

ใส่ น้ ามันพืช
ด้าน 1 สุ กหรื อไม่
ไม่ใช่
ตอกไข่ใส่ ถว้ ยใส่ หมูสับ ใช่
กลับด้าน
ตีไข่
ด้าน 2 สุ กหรื อไม่
ไม่ใช่ ไม่ใช่
เข้ากันหรื อไม่ ใช่
ใช่ ตักใส่ จาน
กระทะร้อนหรื อไม่
ไม่ใช่ เสร็ จ
ใช่
B
114 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่างการเขียนโปรแกรมไมโครคอนโทรลเลอร์
ตัวอย่างจงเขียนโปรแกรมไฟวิง่ ไบนารี่ ออกทางพอร์ ต 1
ขั้นที่ 1 เขียนลาดับขั้น (Algorithm) ขั้นที่ 2 แปลงลาดับขั้นเป็ นผังงาน (Flowchart)
1. กาหนดค่าตัวแปรที่ตอ้ งการใช้ เริ่ ม
2. นาค่าของตัวแปรส่ งเข้าไปยังพอร์ ต 1
กาหนดตัวแปร,ค่าเริ่ มต้น
3. หน่วงเวลา
4. เพิ่มค่าตัวแปร 1 ค่า ส่ งค่าตัวแปรไปยังพอร์ ต 1
5. กระโดดกลับไปทาในขั้นตอนที่ 2
หน่วงเวลา

เพิ่มค่าตัวแปร 1 ค่า

ขั้นที่ 3 แปลงผังงานเป็ นโปรแกรม


1. เขียนเป็ นภาษาแอสแซมบลี
ORG 0000H
START: MOV A,#00H
LOOP: MOV P1,A
LCALL DELAY
INC A
SJMP LOOP
//---------------Delay Program-------------------
DELAY: MOV R5,#10
DELAY1: MOV R6,#100
DELAY2: MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY2

DJNZ R5,DELAY1
RET

2. เขียนเป็ นภาษาซี
#include<reg52.h>
void delay(int count);
void main(void)
{
unsigned char value=0;
while(1)
{
P1=value;
delay(1000);
value++;
}
} //ต่อหน้าถัดไป
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 115
void delay(int count)
{
int x,y;
for(x=0;x<count;x++)
{
for(y=0;y<500;y++) 
{
}
}
}

1. เป็ นโปรแกรมย่อยที่เป็ นโปรแกรมหน่วงเวลาที่เขียนด้วยภาษาแอสเซมบลี


2. เป็ นฟังก์ชนั่ ย่อยที่ทาหน้าที่หน่วงเวลาที่เขียนด้วยภาษาซี

5.2 ภาษาซีสาหรับไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์ ไม่วา่ จะเป็ นตระกูลใดก็ตามจะทางานได้ก็ต่อเมื่อมีชุดคาสัง่ ที่สงั่ ให้ทางาน
ตามที่ตอ้ งการที่เรี ยกว่าโปรแกรม โดยคาสั่งหรื อโปรแกรมที่ไมโครคอนโทรลเลอร์ เข้าใจและสามารถ
ทางานได้อยูใ่ นรู ปของรหัสลอจิก 0 และ 1 หากนาลอจิกมาจับกลุ่มก็เป็ นเลขฐาน 16 ที่เรี ยกว่าภาษาเครื่ อง
ซึ่ งภาษาเครื่ องเป็ นภาษาที่มนุ ษย์ไม่สามารถเข้าใจได้เนื่ องจากเป็ นเลขฐาน 16 ทั้งหมด ดังนั้นในการเขียน
โปรแกรมจึงจาเป็ นต้องใช้ภาษาที่มนุ ษย์สามารถเข้าใจได้ โดยภาษาที่มนุ ษย์เข้าใจได้และใกล้เคี ยงกับ
ภาษาเครื่ องมากที่สุดคือภาษาแอสเซมบลี แต่เนื่ องจากการพัฒนางานโดยใช้ภาษาแอสเซมบลีเป็ นไปได้
ยากและซับซ้อน เพื่อให้ง่ายและรวดเร็ วต่อการพัฒนาโปรแกรมใช้งานไมโครคอนโทรลเลอร์ ภาษาที่
เหมาะสมคือภาษาซี สาหรับไมโครคอนโทรลเลอร์ ตระกู ล MCS-51 มีภาษาซี ของหลายบริ ษทั สาหรับ
เอกสารประกอบการเรี ยนเล่มนี้ เลือกใช้โปรแกรมภาษาซี ของบริ ษทั Keil Software ที่ชื่อว่า Keil uVision
โดยสามารถดาวน์โหลดเพื่อใช้งานได้ที่ http://www.keil.com ไม่วา่ จะใช้ภาษาใดในการเขียนโปรแกรม
เป้ าหมายคือต้องการภาษาเครื่ องเพื่ อบรรจุลงในตัวไมโครคอนโทรลเลอร์ ดังนั้นโปรแกรม Keil uVision
เป็ นเครื่ องมือที่ใช้ในการแปลงภาษาซี ให้เป็ นภาษาเครื่ องที่ใช้กบั ไมโครคอนโทรลเลอร์ MCS-51

โครงสร้างของภาษาซี
ภาษาซี เป็ นภาษาที่ ได้รับความนิ ยมสู งเป็ นภาษาโครงสร้างง่ายต่อการทาความเข้าใจง่ายต่อการ
นาไปพัฒนาต่อ สามารถเขียนโปรแกรมแยกเป็ นส่ วน ๆ โดยแต่ละส่ วนสามารถเรี ยกใช้งานได้จากส่ วน
อื่นของโปรแกรมทาให้สามารถแบ่งงานให้หลายคนไปพัฒนาได้ การเขียนโปรแกรมเป็ นส่ วน ๆ เรี ยกว่า
ฟั ง ก์ชั่น โครงสร้ า งของภาษาซี มี ส่ วนประกอบ 2 ส่ วนคื อ ส่ วนหัวโปรแกรมและส่ วนตัวโปรแกรม
ส่ วนตัวโปรแกรมจะมีฟังก์ชนั่ หลักชื่ อว่า main( ) เพื่อเป็ นส่ วนหลักในการทางาน และอาจมีฟังก์ชนั่ อื่นที่
ผูใ้ ช้เขียนขึ้นเพื่อใช้งานเรี ยกว่าฟังก์ชนั่ รอง
116 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

หัวโปรแกรม

ตัวโปรแกรม
ฟังก์ชนั่ หลัก main( )

ฟังก์ชนั่ รองที่เขียนเพิม่ ขึ้น

รู ปที่ 5-1 โครงสร้างภาษาซี

ตัวแปรในภาษาซี
การประกาศตัวแปรคือการจองพื้นที่ในหน่วยความจาเพื่อนาไปใช้งานในฟั งก์ชนั่ โดยการใช้ชื่อ
ตัวแปรแทนการกาหนดเป็ นค่าแอดเดรสของหน่วยความจา รู ปแบบของการประกาศตัวแปรเป็ นดังนี้
ชนิดของตัวแปร ชื่อตัวแปร;

หรื อ ชนิดของตัวแปร ชื่อตัวแปรที่1,ชื่อตัวแปรที่ 2,… ;

หลักการตั้งชื่อตัวแปรในภาษาซี
หลักการตั้งชื่อตัวแปรมีขอ้ กาหนดหลัก ๆ อยู่ 4 ประการด้วยกันคือ
1. ชื่อที่ต้ งั ต้องไม่ซ้ ากับคาสงวนของภาษาซี (คาที่ภาษาซี มีใช้งานอยูแ่ ล้ว) เช่น printf, bit, ...
2. การใช้ตวั อักษรใหญ่กบั ตัวอักษรเล็กถือว่าเป็ นคนละตัว
3. ตัวแรกของชื่อตัวแปรต้องเป็ นตัวอักษรเท่านั้นตัวถัดไปเป็ นตัวเลขได้
4. ชื่อตัวแปรห้ามเว้นวรรค

ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์ Keil

ตารางที่ 5-2 ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์


ชนิด ขนาด(บิต) ขอบเขต
bit* 1 0,1
char 8 -128 ถึง +127
unsigned char 8 0 ถึง 255
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 117
ตารางที่ 5-2 ชนิดของตัวแปรในภาษาซีสาหรับไมโครคอนโทรลเลอร์ (ต่อ)
ชนิด ขนาด(บิต) ขอบเขต
enum 8/16 -128 ถึง +127 หรื อ -32768 ถึง +32767
int 16 -32768 ถึง +32767
unsigned int 16 0 ถึง 65535
long 32 -2147483648 ถึง +2147483647
unsigned long 32 0 ถึง 4294967295
float 32 ±1.175494E-38 ถึง ±3.402823E+38
sbit* 1 0,1
sfr* 8 0 ถึง 255
* bit, sbit, sfr เป็ นชนิดตัวแปรที่ไม่เป็ นมาตรฐาน ANSI C แต่เป็ นเฉพาะ Keil เท่านั้น

พอยน์เตอร์
พอยน์เตอร์ เป็ นตัวชี้ ตาแหน่งข้อมูลของตัวแปรอื่นที่เก็บในหน่วยความจา โดยตัวพอยน์เตอร์ เป็ น
ตัว เก็ บ ต าแหน่ ง แทนการเก็ บ ข้อ มู ล ในการใช้ ง านพอยน์ เ ตอร์ จ ะใช้เ ครื่ อ งหมาย * น าหน้า และใช้
เครื่ องหมาย & เมื่อต้องการค่าตาแหน่งของตัวแปรอื่นโดยมีรูปแบบดังนี้
รู ปแบบ
ชนิดของตัวแปร * ชื่อตัวแปร;
ตัวอย่าง
int *n;
int i;
i=10;
n=&i;

อาร์เรย์
อาร์ เรย์เป็ นการเพิ่มความสามารถในการเก็บข้อมูลของตัวแปรให้สามารถเก็บเป็ นชุ ดได้ โดยใช้
ชื่ อตัวแปรเดิมได้ การใช้งานตัวแปรอาร์ เรย์จะใช้เครื่ องหมาย [ ] ต่อท้ายตัวแปรโดยภายในวงเล็บเป็ น
ตัวเลข ซึ่ งสามารถใช้งานได้หลายมิติ มีรูปแบบดังนี้
รู ปแบบ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข]; // เป็ นอาร์เรย์ 1 มิติ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข,ตัวเลข]; // เป็ นอาร์เรย์ 2 มิติ
ชนิดของตัวแปร ชื่อตัวแปร[ตัวเลข,ตัวเลข,ตัวเลข]; // เป็ นอาร์เรย์ 3 มิติ
118 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่างอาร์ เรย์ 1 มิติ


int x[4]; x[0] x[1] x[2] x[3]

ตัวอย่างอาร์ เรย์ 2 มิติ


int x[3,3];
x[0,0] x[0,1] x[0,2]

x[1,0] x[1,1] x[1,2]

x[2,0] x[2,1] x[2,2]

ตัวอย่างอาร์ เรย์ 3 มิติ


int x[3,3,2]; x[0,0,0]
x[0,0,1] x[0,1,1]
x[0,1,0] x[0,2,0]
x[0,2,1]

x[1,0,0] x[1,1,0] x[1,2,1]


x[1,0,0] x[1,1,0] x[1,2,0]

x[2,0,0] x[2,1,0] x[2,2,1]


x[2,0,0] x[2,1,0] x[2,2,0]

ตัวดาเนินการในภาษาซี
ตัวดาเนินการในภาษาซี แบ่งตามลักษณะการกระทาได้ 3 กลุ่มด้วยกันคือ
1. ตัวกระทาทางคณิ ตศาสตร์
2. ตัวกระทาทางลอจิก
3. ตัวกระทาเปรี ยบเทียบ
โดยในแต่ละลักษณะมีรายละเอียดดังต่อไปนี้

ตารางที่ 5-3 ตัวกระทาทางคณิ ตศาสตร์


ตัวกระทาทางคณิ ตศาสตร์
เครื่ องหมาย การกระทา ตัวอย่าง คาอธิบาย
+ บวก x=y+z; x เท่ากับค่าในตัวแปร y บวกกับค่าในตัวแปร z
- ลบ x=y-z; x เท่ากับค่าในตัวแปร y ลบด้วยค่าในตัวแปร z
* คูณ x=y*z; x เท่ากับค่าในตัวแปร y คูณด้วยค่าในตัวแปร z
/ หาร x=y/z; x เท่ากับค่าในตัวแปร y หารด้วยค่าในตัวแปร z
% หารเอาเศษ x=y%z; x เท่ากับเศษของการหารระหว่างตัวแปร y กับตัวแปร z
++ เพิ่ม 1 ค่า x++; เพิ่มค่าในตัวแปร x ขึ้น 1 ค่า
-- ลด 1 ค่า x--; ลดค่าในตัวแปร x ลง 1 ค่า
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 119
ตารางที่ 5-4 ตัวกระทาทางลอจิก
ตัวกระทาทางลอจิก
เครื่ องหมาย การกระทา ตัวอย่าง คาอธิบาย
& แอนด์ x=y&z; x เท่ากับค่าในตัวแปร y แอนด์กบั ค่าในตัวแปร z
| ออร์ x=y|z; x เท่ากับค่าในตัวแปร y ออร์ กบั ค่าในตัวแปร z
^ เอ็กซ์คลูซิฟออร์ x=y^z; x เท่ากับค่าในตัวแปร y เอ็กซ์คลูซิฟออร์ กบั z
! อินเวิร์ต x=!y; x เท่ากับค่าตรงข้ามของค่าในตัวแปร y
<< เลื่อนไปทางซ้าย x=x<<1; เลื่อนข้อมูลใน x ไปทางซ้ายไป 1 บิต
>> เลื่อนไปทางขวา x=x>>2; เลื่อนข้อมูลใน x ไปทางขวาไป 2 บิต

ตารางที่ 5-5 ตัวกระทาการเปรี ยบเทียบ


ตัวกระทาการเปรี ยบเทียบ
เครื่ องหมาย การกระทา ตัวอย่าง คาอธิบาย
> มากกว่า x>10 x มากกว่า 10
< น้อยกว่า x<10 x น้อยกว่า 10
>= มากกว่าหรื อเท่ากับ x>=10 x มากกว่าหรื อเท่ากับ 10
<= น้อยกว่าหรื อเท่ากับ x<=10 x น้อยกว่าหรื อเท่ากับ 10
== เท่ากับ x= =10 x เท่ากับ 10
!= ไม่เท่ากับ x!=10 x ไม่เท่ากับ 10
&& แอนด์ x&&y x แอนด์ y (เป็ นการแอนด์ทางลอจิกบิตต่อบิต)
|| ออร์ x||y x ออร์ y (เป็ นการออร์ ทางลอจิกบิตต่อบิต)

การดาเนินการแบบทางเลือก
ในการเขียนโปรแกรมเพื่อให้ไมโครคอนโทรลเลอร์ ทางานในสิ่ งที่ตอ้ งการ นอกจากฟั งก์ชนั่ ที่
สั่งให้ทางานเป็ นลาดับแล้ว จาเป็ นต้องใช้ฟังก์ชนั่ ที่มีการทางานแบบให้เลือกเส้นทางการทางาน โดยการ
ท าตามเงื่ อ นไข หรื อ การให้ ท าซ้ า แบบมี เ งื่ อนไขหรื อไม่ มี เ งื่ อ นไข โดยฟั ง ก์ ชั่น ที่ มี ก ารท างานแบบ
ทางเลือกในภาษาซี มีดว้ ยกัน 4 ฟังก์ชนั่ คือ
1. ฟังก์ชนั่ if
2. ฟังก์ชนั่ if-else
3. ฟังก์ชนั่ if-else if-else
4. ฟังก์ชนั่ switch
120 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ฟังก์ชนั่ if (ทางเลือกเดียว)
ฟังก์ชนั่ if เป็ นฟั งก์ชนั่ ที่มีการตรวจสอบเงื่อนไข โดยถ้าเงื่อนไขเป็ นจริ งจะทางานตามชุดฟังก์ชนั่
ที่กาหนดไว้
รู ปแบบ if (เงื่อนไข)
เท็จ
{ เงื่อนไข
……… จริ ง
ชุดฟังก์ชนั่ เมื่อเงื่อนไขเป็ นจริ ง
……… ชุดฟังก์ชนั่
}

ตัวอย่าง
if (x==10) ตรวจสอบเงื่อนไขว่า x เท่ากับ 10 หรื อไม่
{
P1=0x0F;
} ถ้า x เท่ากับ 10 ให้พอร์ต 1 มีค่าเป็ น 0FH

*หากชุดฟังก์ชนั่ ที่ให้ทางานเมื่อเงื่อนไขเป็ นจริ งมีเพียงฟังก์ชนั่ เดียว ไม่ตอ้ งใส่ วงเล็บปี กกา {…}

ฟังก์ชนั่ if-else (สองทางเลือก)


เมื่อต้องการตรวจสอบเงื่ อนไขและมีชุดฟั งก์ชนั่ ให้ทางานเมื่อเงื่อนไขเป็ นจริ ง และมีชุดฟั งก์ชนั่
ให้ทางานเมื่อเงื่อนไขเป็ นเท็จ เราจะใช้ฟังก์ชนั่ if-else มาใช้งาน
รู ปแบบ
if (เงื่อนไข)
{ เท็จ
เงื่อนไข
……… ชุดฟังก์ชนั่ เมื่อเงื่อนไขเป็ นจริ ง
จริ ง
}
else ชุดฟังก์ชนั่ เมื่อ ชุดฟังก์ชนั่ เมื่อ
{ เงื่อนไขเป็ นเท็จ เงื่อนไขเป็ นจริ ง
……… ชุดฟังก์ชนั่ เมื่อเงื่อนไขเป็ นเท็จ
}
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 121
ตัวอย่าง
if (x==10) ตรวจสอบเงื่อนไขว่า x เท่ากับ 10 หรื อไม่
{
P1=0x0F;
} ถ้า x เท่ากับ 10 ให้พอร์ต 1 มีค่าเป็ น 0FH
else
{
P1=0xF0; ถ้า x ไม่เท่ากับ 10 ให้พอร์ต 1 มีค่าเป็ น F0H
}

ฟังก์ชนั่ if-else if....else (หลายทางเลือก)


เมื่อต้องการตรวจสอบเงื่อนไขหลายเงื่อนไข และมีชุดฟังก์ชนั่ ให้ทางานในแต่ละเงื่อนไขเมื่อ
เงื่อนไขเป็ นจริ ง สามารถใช้ฟังก์ชนั่ if-else if มาใช้งานได้

รู ปแบบ
if (เงื่อนไข 1)
ชุดฟังก์ชนั่ เมื่อ จริ ง
{ เงื่อนไข 1
เงื่อนไข 1 เป็ นจริ ง
……… ชุดฟังก์ชนั่ เมื่อ เท็จ
} เงื่อนไข 1 เป็ นจริ ง
ชุดฟังก์ชนั่ เมื่อ จริ ง
เงื่อนไข 2
else if (เงื่อนไข 2) เงื่อนไข 2 เป็ นจริ ง
{ เท็จ
……… ชุดฟังก์ชนั่ เมื่อ
} เงื่อนไข 2 เป็ นจริ ง
else if (เงื่อนไข… ชุดฟังก์ชนั่ เมื่อ
… ไม่มีเงื่อนไขใดเป็ นจริ ง
else
{
……… ชุดฟังก์ชนั่ เมื่อ
} ไม่มีเงื่อนไขใดเป็ นจริ ง
122 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่าง
if (x<10) ตรวจสอบเงื่อนไขว่า x น้อยกว่า 10 หรื อไม่
P1=0x03;
else if (x<20)
P1=0x0F; ตรวจสอบเงื่อนไขว่า x น้อยกว่า 20 หรื อไม่
else if (x<30)
P1=0x30;
else ตรวจสอบเงื่อนไขว่า x น้อยกว่า 30 หรื อไม่
P1=0xF0;

ถ้า x ไม่เท่ากับค่าใดเลย

ฟังก์ชนั่ switch...case (หลายทางเลือก)


ฟังก์ชนั่ switch…case เป็ นฟังก์ชนั่ หลายทางเลือกอีกฟั งก์ชนั่ หนึ่ งที่มีการทางานคล้าย ๆ ฟังก์ชนั่
if-else if…else ต่างตรงที่การตรวจสอบเงื่อนไขจะใช้การตรวจสอบการเท่ากันเท่านั้น โดยเมื่อตรวจสอบ
ค่าแล้วเท่ากับค่าที่กาหนดให้ทาฟังก์ชนั่ ที่เตรี ยมไว้
รู ปแบบ
switch (ตัวแปร)
{ เลือกตัวแปร
case ค่าที่ 1: ชุดฟังก์ชนั่ 1;
จริ ง
break; ชุดฟังก์ชนั่ 1 เท่ากับค่าที่ 1
case ค่าที่ 2: ชุดฟังก์ชนั่ 2; เท็จ
break; จริ ง
case ค่าที่ 3: ชุดฟังก์ชนั่ 3; ชุดฟังก์ชนั่ 2 เท่ากับค่าที่ 2
break; เท็จ
… จริ ง
default : ชุดฟังก์ชนั่ เมื่อค่าใน ชุดฟังก์ชนั่ 3 เท่ากับค่าที่ 3
ตัวแปรไม่ตรงกับค่าใดๆ; เท็จ
break;
} ชุดฟังก์ชนั่ เมื่อค่าตัวแปร
ไม่เท่ากับค่าใดเลย
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 123
ตัวอย่าง
switch (value) ตรวจสอบค่าในตัวแปร value
{
case 1:
P1=0x03;break; ถ้า value เท่ากับ 1 ให้พอร์ต 1 มีค่าเป็ น 03H
case 2:
P1=0x0F;break;
case 3: ถ้า value เท่ากับ 2 ให้พอร์ต 1 มีค่าเป็ น 0FH
P1=0x30;break;
default:
P1=0x00;break; ถ้า value เท่ากับ 3 ให้พอร์ต 1 มีค่าเป็ น 30H
}

ถ้า value ไม่เท่ากับใดเลยให้พอร์ ต 1 มีค่าเป็ น 00H

การดาเนินการแบบวนซ้ า
การเขี ย นโปรแกรมสั่ ง งานไมโครคอนโทรลเลอร์ ต้อ งมี ก ารท างานแบบวนซ้ า หรื อวนรอบ
เพื่อที่ จะทางานในชุ ดคาสั่งเดิ ม ลักษณะการทางานมี ท้ งั แบบมีเงื่ อนไขหรื อไม่มีเงื่ อนไข ในภาษาซี มี
ฟังก์ชนั่ สั่งงานให้ไมโครคอนโทรลเลอร์ ทางานซ้ ามีดงั นี้
1. ฟังก์ชนั่ for
2. ฟังก์ชนั่ while
3. ฟังก์ชนั่ while(1)
4. ฟังก์ชนั่ goto
5. ฟังก์ชนั่ do-while

ฟังก์ชนั่ for
ฟังก์ชนั่ for เป็ นฟังก์ชนั่ ที่ใช้ในกรณี ที่ทราบจานวนรอบที่จะทางานซ้ า โดยมีรูปแบบดังนี้
รู ปแบบ
for (ค่6.าเริ่ มต้น;เงื่อนไข;เพิม่ หรื อลดค่า) ค่าเริ่ มต้นตัวนับรอบ
{ 7. เท็จ ตรวจสอบเงื่อนไข
8.
…… ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
} 9. จริ ง
10. ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า

เพิ่มหรื อลดค่าตัวนับรอบ
ไม่เท่ากับค่าใดเลย
124 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่าง
กาหนด x เป็ นตัวนับและให้เริ่ มต้นที่ 0
for (x=0;x<10;x++)
{
P1=x;
ตรวจเงื่อนไขจะทาซ้ าเมื่อ x<10
}
เพิ่มค่า x ขึ้น 1 ค่า
ให้พอร์ ต 1 เท่ากับค่า x

ฟังก์ชนั่ while
ฟังก์ชนั่ while เป็ นฟังก์ชนั่ ที่ให้ทางานวนซ้ าหรื อวนรอบโดยมีการตรวจสอบเงื่อนไขก่อนถ้าหาก
เงื่ อนไขเป็ นจริ งจะทางานตามชุ ดฟั งก์ชั่นที่เตรี ยมไว้ เมื่อทางานในชุ ดฟั งก์ชนั่ ที่ เตรี ยมไว้เสร็ จจะมีการ
ตรวจสอบเงื่ อนไขอีก หากเงื่ อนไขเป็ นจริ งจะทางานในชุ ดฟั งก์ชั่นที่เตรี ยมไว้โดยทาแบบนี้ ไปเรื่ อย ๆ
จนกว่าเงื่อนไขจะเป็ นเท็จจะออกจากวงรอบการทาซ้ า โดยมีรูปแบบดังนี้
รู ปแบบ
while1.(ทดสอบเงื่อนไข)
{ 2.
3.
…… ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
} 4. เท็จ ทดสอบเงื่อนไข
5.
จริ ง
ตัวอย่าง
ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
while (x<100) เงื่อนไขคือ x น้อยกว่า 100
{
P1=x;
x=x+2; ให้พอร์ ต 1 เท่ากับ x
}

เพิ่มค่าใน x อีก 2

ในกรณี ที่ตอ้ งการให้ทางานวนซ้ าตลอดโดยไม่ตอ้ งทดสอบเงื่อนไข สามารถทาได้โดยใช้ฟังก์ชนั่


while(1) และ ฟังก์ชนั่ goto

หมายเหตุ x++; มีค่าเท่ากับ x= x+1;


x--; มีค่าเท่ากับ x= x-1;
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 125

ฟังก์ชนั่ while(1)
ฟังก์ชนั่ while เป็ นฟังก์ชนั่ ที่ให้ทางานวนซ้ าหรื อวนรอบไม่รู้จบ เนื่องจาก 1 คือเป็ นจริ งตลอดไป
รู ปแบบ
while1.(1)
{ 2.
3.
…… ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
} 4.

ตัวอย่าง
while (1)
{
P1=x; ให้พอร์ ต 1 เท่ากับ x
x=x+1;
}
เพิ่มค่าใน x อีก 1

ฟังก์ชนั่ goto
ฟั ง ก์ชั่น goto เป็ นฟั ง ก์ ชั่น ที่ ใ ห้ท างานวนซ้ า หรื อวนรอบไม่ รู้จ บ โดยผลการท าเช่ น เดี ย วกับ
ฟังก์ชนั่ while(1) ต่างตรงที่ฟังก์ชนั่ goto ต้องกาหนดตาแหน่งที่กระโดดไปที่เรี ยกว่า ลาเบล (Label)
รู ปแบบ
goto1.label;

ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า


ตัวอย่าง

… ลาเบลชื่อ Loop1
Loop1:
P1=x;
x=x++; ให้พอร์ ต 1 เท่ากับ x
goto Loop1;
เพิ่มค่าใน x อีก 1

กระโดดไปยังลาเบล Loop1
126 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ฟังก์ชนั่ do-while
ฟั งก์ชั่น do-while เป็ นฟั งก์ชั่นที่ ให้ทางานวนซ้ าหรื อวนรอบ โดยมีการตรวจสอบเงื่ อนไขการ
ทางานคล้ายกับฟั งก์ชนั่ while ต่างตรงที่ฟังก์ชนั่ do-while จะทางานในชุ ดฟั งก์ชนั่ ที่เตรี ยมไว้ทาซ้ าไป
ก่อน 1 รอบแล้วจึงตรวจสอบเงื่อนไข

รู ปแบบ
do 1.
{ 2.
3. ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า ชุดฟังก์ชนั่ ที่ตอ้ งการทาซ้ า
……
4. (ทดสอบเงื่อนไข);
} while
5. จริ ง
ทดสอบเงื่อนไข
ตัวอย่าง เท็จ
do
{
P1=x;
x=x+2; ให้พอร์ ต 1 เท่ากับ x
} while (x<100);
เพิ่มค่าใน x อีก 2

เงื่อนไขคือ x น้อยกว่า 100

5.3 การสร้ างฟังก์ชั่นรองขึน้ ใช้ เอง


ฟั งก์ชั่นต่าง ๆ ที่ ได้กล่ าวมาแล้วเป็ นฟั งก์ชั่นที่ ภาษาซี มีให้ใช้งาน แต่ถ้าหากผูใ้ ช้งานต้องการ
ฟังก์ชนั่ ที่มีการทางานตามลักษณะเฉพาะส่ วนอย่างใดอย่างหนึ่งที่มีการเรี ยกใช้งานซ้ า ๆ หรื อเพื่อแยกงาน
ให้เป็ นส่ วน ๆ ให้ง่ายต่อการเขียนโปรแกรมสามารถเขียนขึ้นเพื่อใช้งานเองได้โดยฟั งก์ชนั่ ที่เขียนขึ้นใช้
เองมีดว้ ยกัน 4 ประเภทคือ
- ฟังก์ชนั่ ที่ไม่รับค่าและไม่ส่งคืนค่า
- ฟังก์ชนั่ ที่รับค่าแต่ไม่ส่งคืนค่า
- ฟังก์ชนั่ ที่ไม่รับค่าแต่ส่งคืนค่า
- ฟังก์ชนั่ ที่รับค่าและส่ งคืนค่า
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 127

ฟังก์ชนั่ ที่ไม่รับค่าและไม่ส่งคืนค่า
เป็ นฟังก์ชนั่ รองที่เขียนขึ้นโดยการรวมชุ ดฟังก์ชนั่ เพื่อให้ทางานอย่างหนึ่งอย่างใด โดยเป็ นอิสระ
จากฟังก์ชนั่ หลัก (main) ซึ่ งข้อกาหนดในการประกาศใช้ของฟังก์ชนั่ ประเภทนี้มีดงั นี้
1. ข้อกาหนดในการไม่ รับค่ า ทาโดยใส่ (void) หลังชื่อฟังก์ชนั่
2. ข้อกาหนดในการไม่ ส่งคืนค่ า ทาโดยใส่ void หน้าชื่อฟังก์ชนั่
รู ปแบบ
#include <reg52.h> -ประกาศใช้งานฟังก์ชนั่ ต้องใส่ ;
void ชื่อฟังก์ชนั่ (void); -สร้างฟังก์ชนั่ ไม่ตอ้ งใส่
void main(void)
{ ประกาศใช้งานฟังก์ชนั่ ที่เขียนขึ้น
………
ชื่อฟังก์ชนั่ ( ); ฟังก์ชนั่ หลัก
………
} เรี ยกใช้ฟังก์ชนั่ ที่เขียนขึ้น
void ชื่อฟังก์ชนั่ (void)
{
ชุดฟังก์ชนั่ รองที่เขียนขึ้น
ชุดฟังก์ชนั่ ที่ตอ้ งการให้ทางาน
}

ตัวอย่าง
#include <reg52.h>
void delay(void); ประกาศใช้งานฟังก์ชนั่ delay
void main(void)
{
………
delay( ); ฟังก์ชนั่ หลัก
………
}
void delay(void)
{ เรี ยกใช้ฟังก์ชนั่ delay
int x,y;
for (x=0;x<10000;x++)
{
for (y=0;y<1000;y++) ชุดฟังก์ชนั่ ของฟังก์ชนั่ delay
{
}
}
}
128 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ฟังก์ชนั่ ที่รับค่าแต่ไม่ส่งคืนค่า
เป็ นฟั งก์ชนั่ ที่เขียนขึ้นเพื่อแบ่งย่อยการทางานของฟั งก์ชนั่ หลัก (main) โดยมี การส่ งค่าเพื่อให้
ฟังก์ชนั่ รองที่เขียนขึ้นนาไปประมวลผลอย่างใดอย่างหนึ่ งตามที่ผสู ้ ร้างฟั งก์ชนั่ ต้องการ ซึ่ งข้อกาหนดใน
การประกาศใช้ของฟังก์ชนั่ ประเภทนี้มีดงั นี้

1. ข้อกาหนดในการรั บค่ า ทาโดยกาหนดชนิ ดตัวแปร พร้อมตัวแปรที่จะรับค่าท้ายชื่ อฟั งก์ชนั่


รองที่สร้างขึ้น เช่น (int x)
2. ข้อกาหนดในการไม่ ส่งคืนค่ า ทาโดยใส่ void หน้าชื่อฟังก์ชนั่
รู ปแบบ
#include <reg52.h>
void ชื่อฟังก์ชนั่ (ชนิดตัวแปร ตัวแปร); ประกาศใช้งานฟังก์ชนั่ รองที่เขียนขึ้น
void main(void)
{
………
ชื่อฟังก์ชนั่ (ตัวแปร); ฟังก์ชนั่ หลัก
………
} เรี ยกใช้ฟังก์ชนั่ ที่เขียนขึ้น
void ชื่อฟังก์ชนั่ (ชนิดตัวแปร ตัวแปร)
{
ชุดฟังก์ชนั่ รองที่เขียนขึ้น
ชุดฟังก์ชนั่ ที่มีการนาตัวแปรมาใช้
}
ตัวอย่าง
#include <reg52.h>
void delay(int x);
void main(void) ประกาศใช้งานฟังก์ชนั่ delay
{
………
delay(10000); ฟังก์ชนั่ หลัก
………
}
void delay(int x) เรี ยกใช้ฟังก์ชนั่ delay โดยส่ งค่า
{
int y; 10000 เพื่อใช้ในการประมวลผล
for (y=0;y<x;y++)
{

}
}
ชุดฟังก์ชนั่ ของฟังก์ชนั่ delay
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 129

ฟังก์ชนั่ ที่ไม่รับค่าแต่ส่งคืนค่า
เป็ นฟังก์ชนั่ ที่เขียนขึ้นเพื่อแบ่งย่อยการทางานของฟังก์ชนั่ หลัก (main) เพียงแต่ไม่ได้ส่งข้อมูลเข้า
โปรแกรมเพื่อช่วยให้ทาการประมวลผล แต่มีการส่ งข้อมูลกลับมายังฟังก์ชนั่ หลัก ซึ่ งมีขอ้ กาหนดในการ
ประกาศใช้ของฟังก์ชนั่ ประเภทนี้มีดงั นี้
1. ข้อกาหนดในการไม่ รับค่ า ทาโดยใส่ (void) หลังชื่อฟังก์ชนั่
2. ข้อกาหนดในการส่ งคืนค่ า ทาโดยใส่ กาหนดชนิ ดของข้อมูลที่จะส่ งคืนหน้าชื่อฟังก์ชนั่ รอง
ที่สร้างขึ้น
รู ปแบบ
#include <reg52.h>
ชนิดของข้อมูล ชื่อฟังก์ชนั่ (void); ประกาศใช้งานฟังก์ชนั่ รองที่เขียนขึ้น
void main(void)
{
………
ฟังก์ชนั่ หลัก
ชื่อตัวแปรรับค่า=ชื่อฟังก์ชนั่ ( );
}
ชนิดของข้อมูล ชื่อฟังก์ชนั่ (void) เรี ยกใช้ฟังก์ชนั่ ที่เขียนขึ้น
{
ชุดฟังก์ชนั่ ที่สร้างขึ้น ชุดฟังก์ชนั่ รองที่เขียนขึ้น
return(ตัวแปรที่ตอ้ งการส่ งค่าคืน);
}
ตัวอย่าง
#include <reg52.h>
unsigned char ReadSW(void); ประกาศใช้งานฟังก์ชนั่ ReadSW
void main(void)
{
unsigned char x; ฟังก์ชนั่ หลัก
x=ReadSW( );
………
} รับค่าจากฟังก์ชนั่ ReadSW ไว้ใน
unsigned char ReadSW(void);
{ ตัวแปร x
unsigned char a;
a=P1+1;

}
return(a); ชุดฟังก์ชนั่ ของฟังก์ชนั่ ReadSW

ส่ งค่า a คืนไปยังฟังก์ชนั่ หลัก


130 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ฟังก์ชนั่ ที่รับค่าและส่ งคืนค่า


เป็ นฟั งก์ชนั่ ที่เขียนขึ้นเพื่อแบ่งย่อยการทางานของฟั งก์ชนั่ หลัก (main) โดยมี การส่ งค่าเพื่อให้
ฟังก์ชนั่ ที่เขียนขึ้นนาไปประมวลค่าอย่างใดอย่างหนึ่ง และส่ งค่ากลับมายังฟังก์ชนั่ หลัก ซึ่ งข้อกาหนดใน
การประกาศใช้ของฟังก์ชนั่ ประเภทนี้มีดงั นี้
1. ข้อกาหนดในการรับค่ า ทาโดยกาหนดชนิดตัวแปร พร้อมตัวแปรที่จะรับค่าท้ายชื่ อฟังก์ชนั่
รองที่สร้างขึ้น เช่น (int x)
2. ข้อกาหนดในการส่ งคืนค่ า ทาโดยใส่ กาหนดชนิ ดของข้อมูลที่จะส่ งคืนหน้าชื่อฟังก์ชนั่ รอง
รู ปแบบ
#include <reg52.h>
ชนิดข้อมูลส่ งคืน ชื่อฟังก์ชนั่ (ชนิดตัวแปร ตัวแปร); ประกาศใช้งานฟังก์ชนั่ รองที่เขียนขึ้น
void main(void)
{
………
ฟังก์ชนั่ หลัก
ตัวแปรรับค่า ชื่ อฟังก์ชนั่ (ตัวแปร);
………
} เรี ยกใช้ฟังก์ชนั่ ที่เขียนขึ้น
ชนิดข้อมูลส่ งคืน ชื่อฟังก์ชนั่ (ชนิดตัวแปร ตัวแปร)
{
ชุดฟังก์ชนั่ ที่มีการนาตัวแปรมาใช้ ชุดฟังก์ชนั่ รองที่เขียนขึ้น
return (ตัวแปรที่ตอ้ งการส่ งค่าคืน)
}

ตัวอย่าง ประกาศใช้งานฟังก์ชนั่ Cal_time


#include <reg52.h>
int Cal_time(int x);
void main(void)
{
ฟังก์ชนั่ หลัก
int time;
………
time =Cal_time(1000);
เรี ยกใช้ฟังก์ชนั่ Cal_time โดยส่ ง
……… ค่า 1000 เพื่อใช้ในการประมวลผล
}
int Cal_time(int x)
{
int y; ชุดฟังก์ชนั่ ของฟังก์ชนั่ Cal_time
y=(x*2)+140;
return (y);
} ส่ งค่า y คืนไปยังฟังก์ชนั่ หลัก
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 131

5.4 สรุปสาระสาคัญ
ขั้นตอนในการพัฒ นาโปรแกรมคอมพิ ว เตอร์ (รวมทั้ง ไมโครคอนโทรลเลอร์ ) หลัก ๆ มี 5
ขั้นตอนเริ่ มจาก การวิเคราะห์ปัญหา การออกแบบวิธีแก้ปัญหา เขียนโปรแกรมและทดสอบโปรแกรม
และสุ ดท้ายคือการทาเอกสารประกอบเพื่อประโยชน์ในกรณี ที่ตอ้ งการแก้ไขหรื อปรับปรุ งในอนาคต
ภาษาที่ใช้ในการพัฒนาโปรแกรมไมโครคอนโทรลเลอร์ เลื อกใช้ภาษาซี ซ่ ึ งเป็ นภาษาที่ได้รับ
ความนิ ยมสู งเป็ นภาษาโครงสร้างง่ายต่อการทาความเข้าใจง่ายต่อการนาไปพัฒนาต่อ ส่ วนประกอบของ
ภาษาซี มีอยู่ด้วยกัน 2 ส่ วนคื อส่ วนหัวโปรแกรมและส่ วนตัวโปรแกรม ส าหรั บ ส่ วนตัวโปรแกรมจะ
ประกอบด้วยฟั งก์ชนั่ หลักซึ่ งจาเป็ นต้องมีซ่ ึ งเป็ นส่ วนที่ใช้สั่งงานให้ไมโครคอนโทรลเลอร์ โดยตรง และ
ฟั งก์ชั่นรองซึ่ งอาจจะมี หรื อไม่มีก็ได้ข้ ึนอยู่กบั ความซับซ้อนของโปรแกรม ฟั งก์ชั่นรองมีลกั ษณะเป็ น
โปรแกรมย่อยที่เขียนขึ้นเพื่อประมวลผลอย่างใดอย่างหนึ่งที่มีการใช้งานซ้ า ๆ
132 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบฝึ กหัดหน่ วยที่ 5


คาชี้แจง ให้นกั ศึกษาตอบคาถามต่อไปนี้ให้สมบรู ณ์
1. รู ปทรงผังงานที่ใช้กบั การเขียนโปรแกรมไมโครคอนโทรลเลอร์ มีอะไรบ้าง

2. กฎการตั้งชื่อตัวแปรในภาษาซี มีอะไรบ้าง

3. ตัวแปรแต่ละชนิดมีขอบเขตการใช้งานอย่างไรบ้าง

4. ฟังก์ชนั่ การดาเนิ นการแบบทางเลือกมีอะไรบ้าง

5. ฟังก์ชนั่ การดาเนิ นการแบบวนซ้ ามีอะไรบ้าง

6. การเขียนฟังก์ชนั่ ขึ้นใช้เองแบบไม่มีการรับค่าและไม่ส่งคืนค่ามีลกั ษณะใด


หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 133
7. การเขียนฟังก์ชนั่ ขึ้นใช้เองแบบมีการรับค่าและไม่ส่งคืนค่ามีลกั ษณะใด

8. เขียนผังงานของสิ่ งที่กระทาในชีวติ ประจาวันมา 1 อย่าง


134 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียนหน่ วยที่ 5
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
รู ปใช้ตอบคาถามข้อที่ 1-5

1 2 3 4 5

1. ผังงานรู ปทรงใดใช้แทนกระบวนการ 4. ผังงานรู ปทรงใดใช้แทนกระบวนการที่เตรี ยม


ประมวลผล ไว้แล้ว
ก. 1 ก. 1
ข. 2 ข. 2
ค. 3 ค. 3
ง. 4 ง. 4
จ. 5 จ. 5
2. ผัง งานรู ปทรงใดใช้ แ ทนจุ ด เริ่ มต้ น หรื อ 5. ผังงานรู ปทรงใดใช้แทนจุ ดเชื่ อมต่อไปหน้า
จุดสิ้ นสุ ดของโปรแกรม อื่น
ก. 1 ก. 1
ข. 2 ข. 2
ค. 3 ค. 3
ง. 4 ง. 4
จ. 5 จ. 5
3. ผังงานรู ปทรงใดใช้แทนการตัดสิ นใจ 6. ตัวแปรชนิดใดมีขนาด 8 บิตและขอบเขตเป็ น
ก. 1 0-255
ข. 2 ก. int
ค. 3 ข. unsigned int
ง. 4 ค. char
จ. 5 ง. unsigned char
จ. long
หน่ วยที่ 5 การเขียนโปรแกรมภาษาซีสาหรับไมโครคอนโทรลเลอร์ 135
7. ตัวแปรชนิดใดที่สามารถใส่ ค่าได้ไม่เกิน ง. x=x+5;
60000 จ. 5+x;
ก. int 12. ค าสั่ ง ใดใช้ ต รวจสอบเงื่ อ นไขก่ อ นท างาน
ข. unsigned int ตามที่เตรี ยมไว้
ค. char ก. do
ง. unsigned char ข. if
จ. long ค. goto
8. ตัวแปรชนิดใดที่สามารถใส่ ค่าได้ไม่เกิน ง. for
30000 จ. while(1)
ก. unsigned char 13. คาสั่งใดใช้วนรอบการทางานไม่รู้จบ
ข. char ก. do
ค. unsigned int ข. if
ง. int ค. goto
จ. long ง. while(1)
9. คาสั่งใดใช้เพิ่มค่าในตัวแปร x ขึ้น 1 ค่า จ. for
ก. x++; 14. ในแต่ละ case ก่อนออกต้องใช้คาสั่งใด
ข. x+x; ก. break;
ค. x-1; ข. goto
ง. x- -; ค. for
จ. x+1; ง. if
10. คาสั่งใดใช้ลดค่าในตัวแปร x ลง 1 ค่า จ. do
ก. x-1; 15. for(n=0;n<=10;n++) จะทางานกี่รอบ
ข. x+ +; ก. 7 รอบ
ค. x - -; ข. 8 รอบ
ง. x+x; ค. 9 รอบ
จ. x+1; ง. 10 รอบ
11. คาสั่งใดใช้เพิ่มค่าในตัวแปร x ขึ้น 5 ค่า จ. 11 รอบ
ก. inc x,5;
ข. x+++++;
ค. x+5;
136 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

16. ฟั ง ก์ ชั่น ที่ ไ ม่ มี ก ารคื น ค่ า ต้อ งใส่ ค าน าหน้ า 19. ฟังก์ชนั่ ที่รับค่าไม่เกิน 50000 ไว้ในตัวแปร A
ฟังก์ชนั่ ว่าอะไร ในวงเล็บท้ายชื่อฟังก์ชนั่ ต้องใส่ คาว่าอะไร
ก. main ก. (A)
ข. return ข. (char A)
ค. void ค. (int A)
ง. int ง. (unsigned char A)
จ. while(1) จ. (unsigned int A)
17. ฟั งก์ชนั่ ที่ไม่มีการรับค่าในวงเล็บท้ายชื่ อต้อง 20. ฟังก์ชนั่ ใดที่ไม่มีการรับค่าและไม่ส่งคืนค่า
ใส่ คาว่าอะไร ก. timecon(void)
ก. main ข. void timecon(void)
ข. while(1) ค. void timecon(int a)
ค. return ง. void timecon()
ง. int จ. int timecon(void)
จ. void
18. การส่ งค่าคืนก่อนจบฟังก์ชนั่ ใช้คาสั่งใด
ก. void
ข. return
ค. main
ง. int
จ. while(1)

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ค 3. ก 4. จ 5. ง 6. ข 7. ง 8. จ 9. ก 10. ข
11. ค 12. ก 13. จ 14. ค 15. ค 16. ก 17. ก 18. ค 19. จ 20. ค

เฉลยแบบทดสอบหลังเรี ยน
1. ง 2. ก 3. ค 4. ง 5. จ 6. ง 7. ข 8. จ 9. ก 10. ค
11. ง 12. ข 13. ง 14. ก 15. จ 16. ค 17. จ 18. ข 19. จ 20. ข
หน่ วยที่ 6
เครื่ องมือช่ วยพัฒนางานไมโครคอนโทรลเลอร์
หัวข้อเรื่ อง
6.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง
6.2 เครื่ องมือจาลองการทางาน
6.3 เครื่ องมือโหลดไฟล์ลงชิพไมโครคอนโทรลเลอร์

สาระสาคัญ
เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ เป็ นเครื่ องมืออานวยความสะดวกทาให้สามารถ
พัฒนางานได้ง่ายและเร็ ว เครื่ องมือที่นามาใช้ 3 อย่างด้วยกัน คือ เครื่ องมือแปลงภาษาซี เป็ นภาษาเครื่ อง
เครื่ องมือจาลองการทางาน และเครื่ องมือโหลดไฟล์ลงชิพ

สมรรถนะประจาหน่วยการเรี ยนรู ้
รู ้และความเข้าใจการใช้งานและสามารถใช้เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์

จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีความรู ้เกี่ยวกับเครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง
2. เพื่อให้มีความรู ้เกี่ยวกับเครื่ องมือจาลองการทางาน
3. เพื่อให้มีความรู ้เกี่ยวกับเครื่ องมือโหลดไฟล์ลงชิพไมโครคอนโทรลเลอร์
จุดประสงค์ เชิ งพฤติกรรม
1. บอกเกี่ยวกับเครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ องได้
2. บอกเกี่ยวกับเครื่ องมือจาลองการทางานได้
3. บอกเกี่ยวกับเครื่ องมือโหลดไฟล์ลงชิพไมโครคอนโทรลเลอร์ ได้
4. ทาแบบฝึ กหัดเสร็ จทันเวลาและทาแบบทดสอบผ่านเกณฑ์ที่กาหนด
138 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียนหน่ วยที่ 6
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เครื่ องมือช่วยในการพัฒนางานหลัก ๆ มีกี่ 5. หากใส่ สกุลไฟล์เอกสารไม่ถูกต้องผลที่จะ
ชนิด เกิดขึ้นคือข้อใด
ก. 1 ชนิด ก. ไม่สามารถพิมพ์โปรแกรมได้
ข. 2 ชนิด ข. ข้อความจะเป็ นสี จางทั้งหมด
ค. 3 ชนิด ค. ข้อความจะเป็ นตัวเอียงทั้งหมด
ง. 4 ชนิด ง. ข้อความจะมีลกั ษณะเดียวกัน
จ. 5 ชนิด จ. ไม่มีผลที่ต่างกัน
2. เครื่ องมือที่ใช้แปลงภาษาซีเป็ นภาษาเครื่ อง 6. การเลือกออปชัน่ ใดเพื่อให้เครื่ องมือแปลง
คือข้อใด ภาษาซีเป็ นภาษาเครื่ องสร้างไฟล์ภาษาเครื่ อง
ก. Keil uVision ก. Create HEX File
ข. MS Word ข. Generate HEX File
ค. Proteus ค. Build HEX File
ง. ISP Programmer 3.0a ง. Open HEX File
จ. Protel99SE จ. Make HEX File
3. การเลื อ กเบอร์ ซี พี ยูเ พื่ อ ใช้เ ขี ย นโปรแกรม 7. เมื่ อ พิ ม พ์ โ ปรแกรมเสร็ จ สิ้ น แล้ ว ต้อ งการ
จะต้องทาในขั้นตอนใด แปลงเป็ นภาษาเครื่ องจะต้องทาอย่างไร
ก. หลังเปิ ดใช้เครื่ องมือแปลงภาษา ก. คลิกที่ปุ่ม Make Target
ข. ถัดจากการสร้างโปรเจคไฟล์ ข. คลิกที่ปุ่ม Open Target
ค. ก่อนทาการแปลงภาษา ค. คลิกที่ปุ่ม Build Target
ง. ก่อนเปิ ดใช้เครื่ องมือแปลงภาษา ง. คลิกที่ปุ่ม Generate Target
จ. ไม่ตอ้ งเลือก จ. คลิกที่ปุ่ม Create Target
4. การสร้างไฟล์เอกสารสาหรับเขียนภาษาซี 8. หากการแปลงไม่ มี ข ้อ ผิ ด พลาดจะปรากฏ
จะต้องตั้งชื่อไฟล์เป็ นสกุลใด ข้อความใด
ก. .DOC ก. “main” - OK.
ข. .XLS ข. “main” - Pass.
ค. .BAS ค. “main” - 0 Error(s), 0 Warning (s).
ง. .HEX ง. “main” - 0 Warning (s), 0 Error(s).
จ. .C จ. “main” - 0 Erase (s), 0 Warming (s).
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 139
9. เครื่ องมื อ ที่ ใ ช้ในการจาลองการท างานของ 13. การต่อสายเชื่อมทาได้โดยวิธีใด
ไมโครคอนโทรลเลอร์คือข้อใด ก. คลิกขวาที่ตวั อุปกรณ์ 2 ครั้ง
ก. Keil uVision ข. คลิกที่ปลายขาอุปกรณ์ 2 ครั้ง
ข. MS Word ค. คลิกที่ตวั อุปกรณ์
ค. Proteus ง. คลิกที่โดนขาอุปกรณ์
ง. ISP Programmer 3.0a จ. คลิกที่ปลายขาอุปกรณ์
จ. Protel99SE 14. หากต้องการลบอุปกรณ์ทาได้โดยวิธีใด
10. ก่อนการจัดวางอุปกรณ์ เพื่อจาลองการทางาน ก. คลิกขวาที่ตวั อุปกรณ์ 2 ครั้ง
จะต้องทาสิ่ งใดก่อน ข. คลิกซ้ายที่ตวั อุปกรณ์ 2 ครั้ง
ก. ล้างพื้นที่ใช้งาน ค. คลิกซ้าย-ขวาที่ตวั อุปกรณ์
ข. ลบอุปกรณ์ในช่องรายการ ง. กดปุ่ ม Delete
ค. ลากอุปกรณ์วางได้โดยตรง จ. กดแป้นพิมพ์ Delete
ง. วางสายเชื่อมต่อก่อน 15. การโหลดไฟล์ภาษาเครื่ องลงตัวซีพียเู พื่อ
จ. เลื อกอุปกรณ์ที่ตอ้ งการมาไว้ในช่ อง จาลองการทางานทาได้โดยวิธีใด
รายการ ก. ดับเบิลคลิกที่ตวั ซี พียูแล้วโหลดไฟล์
11. อุปกรณ์ใดที่ไม่สามารถจาลองการทางานได้ ในช่อง Program file
ก. ไม่มีขาไฟเลี้ยง ข. คลิกปุ่ ม Open file
ข. LED ค. เข้าเมนู Option แล้วเลือกไฟล์
ค. ลาโพง ง. เข้าเมนู Source แล้วเลือกไฟล์
ง. อุปกรณ์ที่ไม่มีโมเดล จ. คลิกปุ่ ม Code
จ. ไม่มีตวั ถัง (Foot print) 16. การกาหนดค่าคริ สตอลทาได้โดยวิธีใด
12. เลือกไมโครคอนโทรลเลอร์ ที่ Category ใด ก. ดับเบิลคลิกที่ปุ่ม Clock Frequency
ก. Microcontroller ICs ข. ดับเบิลคลิกที่ตวั ไมโครคอนโทรลเลอร์ ใส่
ข. Microprocessor ICs ค่าในช่อง Clock Frequency
ค. Microfarad ICs ค. คลิกขวาที่ตวั ไมโครคอนโทรลเลอร์ ใส่ ค่า
ง. Microprogrammer ICs ในช่อง Clock Frequency
จ. Microcomputer ICs ง. คลิกซ้ายที่ตวั ไมโครคอนโทรลเลอร์ ใส่ ค่า
ในช่อง Clock Frequency
จ. ดับเบิลคลิกที่ตวั ไมโครคอนโทรลเลอร์ ใส่
ค่าในช่อง Clock Frequency
140 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

17. เครื่ องมือสาหรับอัดไฟล์ภาษาเครื่ องลงตัวชิพ 19. วงจรที่ใช้โปรแกรมลงตัวชิ พไอซี AT89Sxx


ไอซี AT89Sxx คือข้อใด ใช้สายสัญญาณกี่เส้น
ก. Keil uVision ก. 1 เส้น
ข. MS Word ข. 2 เส้น
ค. Proteus ค. 3 เส้น
ง. ISP Programmer 3.0a ง. 4 เส้น
จ. Protel99SE จ. 5 เส้น
18. วงจรที่ใช้โปรแกรมลงตัวชิ พไอซี AT89Sxx 20. ไมโครคอนโทรลเลอร์ ที่โปรแกรมผ่านพอร์ ต
คือข้อใด อนุกรมคือข้อใด
ก. STD200 ก. AT89C52
ข. ISP200 ข. AT89S52
ค. STK200 ค. P89S51RD2
ง. SPK200 ง. P89C51AF2
จ. STK500 จ. P89V51RD2
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 141

เครื่ องมือช่ วยพัฒนางานไมโครคอนโทรลเลอร์


การพัฒนาไม่ว่าจะเป็ นการพัฒนาในเรื่ องใดก็ตามหากมีเครื่ องมือช่วยพัฒนางานที่มีคุณภาพจะ
ทาให้งานนั้น ๆ สามารถพัฒนาไปได้เร็ วและจะส่ งผลให้ผพู ้ ฒั นางานสามารถใช้ความสามารถได้เต็มที่
สาหรับไมโครคอนโทรลเลอร์ MCS-51 มีเครื่ องมือช่วยพัฒนางานมากมาย อันเนื่ องมาจากสาเหตุที่ เป็ น
ไมโครคอนโทรลเลอร์ ที่เกิดขึ้นมานาน และได้รับความนิยมอย่างต่อเนื่ อง สาหรับหนังสื อเล่มนี้ เลือกใช้
เครื่ องมือที่ได้รับความนิยมมาช่วยพัฒนางานโดยมีเครื่ องมือ 3 ชนิด คือ
1. เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง
2. เครื่ องมือจาลองการทางาน
3. เครื่ องมือโหลดไฟล์ลงชิพไมโครคอนโทรลเลอร์

6.1 เครื่ องมือแปลงภาษาซีเป็ นภาษาเครื่ อง


เครื่ องมือที่ใช้แปลงภาษาซี เป็ นภาษาเครื่ องหรื อที่เรี ยกกันว่า ซี คอมไพเลอร์ (C Compiler) เป็ น
โปรแกรมคอมพิวเตอร์ ชนิ ดหนึ่ งที่ถูกสร้างขึ้นเพื่อใช้สาหรับแปลงภาษาซี เป็ นภาษาเครื่ อง โปรแกรมที่
ได้รับความนิยมมากและเป็ นโปรแกรมที่ ใช้ประกอบการเรี ยนวิชาไมโครคอนโทรลเลอร์ คือ โปรแกรม
Keil µVision4 เป็ นผลิตภัณฑ์ของบริ ษทั Keil Software สามารถดาวน์โหลดโปรแกรมเวอร์ ชนั่ เพื่อการ
ทดลอง ได้ที่ http://www.keil.com เป็ นเครื่ อ งมื อที่ มี คุ ณภาพดี เยี่ย มคื อ สามารถแปลงภาษาซี ใ ห้เ ป็ น
ภาษาเครื่ อง โดยภาษาเครื่ องที่ได้มีขนาดเล็กที่สุด (เมื่อเทียบกับโปรแกรมแปลงภาษาซี ที่เป็ นผลิตภัณฑ์
ของบริ ษทั อื่น) การใช้งานมีข้ นั ตอนทั้งหมด 6 ขั้นตอนคือ
1. สร้างโปรเจคไฟล์
2. สร้างไฟล์ภาษาซี
3. ตั้งค่าออปชัน่
4. เขียนโปรแกรมภาษาซี
5. แปลงภาษาซีเป็ นภาษาเครื่ อง
6. ทดสอบโปรแกรม

รู ปที่ 6-1 หน้าต่างโปรแกรมเมื่อเริ่ มโปรแกรม


142 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รู ปที่ 6-2 หน้าต่างของโปรแกรม Keil µVision4

รายละเอียดการใช้งานโปรแกรม Keil µVision4 แต่ละขั้นตอนมีดงั นี้

ขั้นตอนที่ 1 สร้างโปรเจคไฟล์
เป็ นขั้นตอนแรกที่ตอ้ งทาก่ อนที่จะเริ่ มเขียนโปรแกรม ซึ่ งขั้นตอนการสร้ างโปรเจคไฟล์ทาได้
ตามลาดับดังนี้
1. สร้างโปรเจคไฟล์ โดยคลิกเมนู Project เลือก New ?Vision Project…

1 สร้างโปรเจคไฟล์

รู ปที่ 6-3 ขั้นตอนในการสร้างโปรเจคไฟล์

2. สร้างโฟลเดอร์ ใหม่เพื่อแยกส่ วนไฟล์งานที่จะสร้างขึ้นโดยใช้ชื่อตามต้องการ


2 สร้างโฟลเดอร์ ใหม่

รู ปที่ 6-4 ขั้นตอนการสร้างโฟลเดอร์ ใหม่


หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 143
3. ตั้งชื่อโปรเจคไฟล์ในช่อง File name แล้วกด Save (แนะนาให้ต้ งั ชื่อว่า main)

3 ตั้งชื่อโปรเจคไฟล์

รู ปที่ 6-5 ขั้นตอนการตั้งชื่ อโปรเจคไฟล์

4. เลือกเบอร์ไมโครคอนโทรลเลอร์แล้วกดปุ่ ม OK (ในเล่มนี้ เลือกใช้เบอร์ AT89S52 ของ


Atmel)

4 เลือกเบอร์ไมโครคอนโทรลเลอร์

รู ปที่ 6-6 ขั้นตอนการเลือกเบอร์ ไมโครคอนโทรลเลอร์

5. กดปุ่ ม Yes

รู ปที่ 6-7 หน้าต่างที่ปรากฏหลังเลือกเบอร์ ไมโครคอนโทรลเลอร์


144 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนที่ 2 สร้างไฟล์ภาษาซี
6. สร้างไฟล์เอกสารเพื่อใช้พิมพ์โปรแกรมโดยทาการคลิกที่เมนู File เลือก New

6 สร้างไฟล์เอกสารใหม่

รู ปที่ 6-8 การสร้างไฟล์เอกสารใหม่เพื่อเขียนโปรแกรม

7. จะได้แผ่นงาน Text1 ดังรู ป

รู ปที่ 6-9 ผลที่ได้จากการสร้างไฟล์

8. บันทึกไฟล์ โดยคลิกเมนู File เลือก Save หรื อคลิกที่ไอคอนบันทึกรู ปแผ่นดิสค์


8 บันทึกไฟล์

รู ปที่ 6-10 ขั้นตอนการบันทึกไฟล์


หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 145
9. ตั้งชื่อไฟล์ ตามต้องการและใส่ สกุลของไฟล์เป็ น .c (แนะนาตั้งชื่อเป็ น main.c)

9 ตั้งชื่อไฟล์ main.c

รู ปที่ 6-11 ตั้งชื่อไฟล์

10. เพิ่มไฟล์ภาษาซี (ในขั้นตอนข้อที่ 9) ลงในกรุ๊ ป โดยการคลิกขวาที่ Source Group1 เลือก


Add File to Group ‘Source Group1’

10 คลิก Add File to Group…

รู ปที่ 6-12 ขั้นตอนการเพิ่มไฟล์ภาษาซี ใน Source group

11. คลิกที่ไฟล์ (main.c ที่ได้บนั ทึกในขั้นตอนที่ 9 ) กดปุ่ ม Add แล้วกดปุ่ ม Close หรื อใช้วธิ ีการ
ดับเบิลคลิกที่ไฟล์

11 คลิกไฟล์เพื่อเพิ่มในกรุ๊ ป

รู ปที่ 6-13 การเลือกไฟล์เพื่อเพิม่ ใน Source group


146 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
12. ผลจากดาเนินการในข้อที่ 11 จะปรากฏไฟล์ที่ได้จากการ add ในกรุ๊ ปดังรู ปที่ 6-14 (ใน
โฟลเดอร์ Source Group1)

12 ปรากฏไฟล์สกุล .C
รู ปที่ 6-14 รายชื่อไฟล์ที่ถูกเพิ่มเข้าไปใน Source Group1

ขั้นตอนที่ 3 ตั้งค่าออปชัน่
เป็ นขั้นตอนตั้งค่าคุณสมบัติการใช้งานโดยมีข้ นั ตอนดังนี้

13. คลิกขวาที่โฟลเดอร์ Target 1 เลือก Options for Target ‘Target 1’

13 คลิก Options for Target ‘Target 1’

รู ปที่ 6-15 ขั้นตอนการตั้งค่า Option

14. คลิกที่แท็ป Target แก้ค่าความถี่คริ สตอลตามที่ตอ้ งการใช้งาน ในที่น้ ีใช้ค่า 11.0592


14 ความถี่คริ สตอลที่ใช้งาน

รู ปที่ 6-16 หน้าต่างการแก้ค่าความถี่คริ สตอล


หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 147
15. คลิกแท็ป Output เลือก Create HEX File เป็ นตัวเลือกให้สร้างไฟล์ภาษาเครื่ อง

15 เลือกสร้างไฟล์ภาษาเครื่ อง

รู ปที่ 6-17 หน้าต่างที่ใช้เลือกการสร้างไฟล์ภาษาเครื่ อง

ขั้นตอนที่ 4 เขียนโปรแกรมภาษาซี
เขียนชุ ดฟั งก์ชนั่ ภาษาซี ที่ตอ้ งการให้ไมโครคอนโทรลเลอร์ ทางานตามต้องการลงในหน้าต่าง
ไฟล์ .c ที่สร้างขึ้น

รู ปที่ 6-18 หน้าต่างเพื่อใช้เขียนโปรแกรม


148 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนที่ 5 แปลงภาษาซีเป็ นภาษาเครื่ อง


เป็ นขั้นตอนที่ ใช้สาหรั บแปลงชุ ดฟั งก์ชั่นที่เขียนขึ้นด้วยภาษาซี ให้เป็ นภาษาเครื่ อง (ไฟล์สกุล
HEX) เพื่ อให้ไ มโครคอนโทรลเลอร์ ท างานตามต้องการ โดยนาไปอัดลงชิ พ ไมโครคอนโทรลเลอร์
ขั้นตอนการดาเนินการดังนี้

16. คลิกที่ปุ่ม Build target หรื อเข้าทางเมนู Project หากผูใ้ ช้งานมีการแก้ไขโปรแกรมที่เขียนขึ้น


แล้วยังไม่ได้แปลงไฟล์จะปรากฏเครื่ องหมายดอกจัน ( * ) ท้ายชื่อไฟล์

16 คลิกเพื่อแปลงภาษาซีเป็ นภาษาเครื่ อง

รู ปที่ 6-19 ปุ่ มไอคอนที่ใช้ในการแปลงเป็ นภาษาเครื่ อง

17. หากไม่มีขอ้ ผิดพลาด หน้าต่างจะปรากฏข้อความดังรู ปที่ 6-20

17 ข้อความแสดงผลการแปลงที่ไม่มีขอ้ ผิดพลาด

รู ปที่ 6-20 ผลที่ได้เมื่อแปลงแล้วผลที่ได้ไม่มีขอ้ ผิดพลาด

18. หากมีขอ้ ผิดพลาด หน้าต่างจะปรากฏข้อความ ให้ตรวจสอบข้อผิดพลาดแล้วทาการแก้ไข


เมื่อแก้ไขเสร็ จต้องบันทึกแล้วจึงแปลงใหม่อีกครั้ง

18 ข้อความแสดงผลการแปลงที่มีขอ้ ผิดพลาด ซึ่ งอยูใ่ กล้ ๆ บรรทัดที่ 9

รู ปที่ 6-21 ผลที่ได้เมื่อแปลงแล้วผลที่ได้มีขอ้ ผิดพลาด


หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 149

ขั้นตอนที่ 6 ทดสอบโปรแกรม
โปรแกรม Keil µVision4 มี ส่ ว นที่ ใ ช้ ส าหรั บ ทดสอบโปรแกรมที่ ผู ้ใ ช้ เ ขี ย นขึ้ นมา โดยตัว
โปรแกรมก็สามารถทดสอบได้ในเบื้องต้นที่ไม่มีการต่อวงจรภายนอก เพื่อให้ผใู ้ ช้งานสามารถดูผลได้

19. คลิกที่เมนู Debug เลือก Start/Stop debug session (คลิกเพื่อเริ่ ม/หยุด ส่ วนทดสอบ
โปรแกรม)

19 คลิกเพื่อเริ่ ม/หยุด ส่ วนการทดสอบโปรแกรม

รู ปที่ 6-22 ปุ่ มเพื่อใช้ทดสอบโปรแกรม

20. ปุ่ มที่ใช้เพื่อรันโปรแกรม


21. ปุ่ มที่ใช้เพื่อรี เซต

20 ปุ่ มสาหรับเริ่ มทดสอบโปรแกรม (Run)

21 ปุ่ มสาหรับเริ่ มต้นใหม่ (Reset)

รู ปที่ 6-23 ปุ่ มเพื่อใช้ในการทดสอบโปรแกรม


150 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
22. เลือกให้แสดงข้อมูลพอร์ ตทาได้โดยการคลิกเมนู Peripherals เลือก I/O Port คลิกพอร์ตที่
ต้องการแสดง

22 เลือกพอร์ ตที่ตอ้ งการแสดง

รู ปที่ 6-24 แสดงการเลือกแสดงพอร์ ต

6.2 เครื่ องมือจาลองการทางาน


ในการพัฒนาระบบไมโครคอนโทรลเลอร์ เมื่อได้ไฟล์ภาษาเครื่ องจากการใช้งานโปรแกรม Keil
ในขั้นตอนการเขียนโปรแกรม จะต้องนาไฟล์ภาษาเครื่ องที่ได้ไปอัดลงชิพไมโครคอนโทรลเลอร์ แล้วจึง
นาไมโครคอนโทรลเลอร์ ไปใช้กบั วงจรใช้งานจริ ง เพื่อตรวจสอบการทางานจากผลของโปรแกรมที่เขียน
ขึ้น ถ้าการทางานของไมโครคอนโทรลเลอร์ ไม่ถูกต้องตามความต้องการของผูใ้ ช้งาน ต้องกลับไปแก้ไข
โปรแกรมใหม่แล้วนาไมโครคอนโทรลเลอร์ กลับไปอัดโปรแกรมที่ได้จากการแก้ไขใหม่ แล้วเอากลับมา
ใส่ ยงั วงจรใช้งานเพื่อดูการทางาน โดยทาขั้นตอนนี้ ซ้ า ๆ จนกว่าจะสามารถทางานได้ตามความต้องการ
ได้อย่างถูกต้อง
ความก้าวหน้าทางเทคโนโลยีทาให้มีเครื่ องมือจาลองพฤติกรรม (Simulation) ไว้ใช้งาน ทาให้เรา
สามารถพัฒนางานและลดขั้นตอนได้อย่างมาก เครื่ องมื อดังกล่าวนี้ คือโปรแกรมคอมพิวเตอร์ ที่ชื่อว่า
Proteus เป็ นซอฟท์แวร์ จาลองการทางานของวงจรอิ เล็ก ทรอนิ ก ส์ ที่มี ล ักษณะโดดเด่ นกว่า โปรแกรม
จาลองการทางานโปรแกรมจาลองอื่น ๆ กล่าวคือสามารถจาลองพฤติกรรมของไมโครคอนโทรลเลอร์
ไมโครโปรเซสเซอร์ ได้หลากหลายเบอร์ หลากหลายตระกูล สาหรับการใช้งานทาได้โดยการวาดวงจร
ไมโครคอนโทรลเลอร์ พร้อมวงจรเชื่ อมต่อ นาไฟล์ภาษาเครื่ องที่ได้จากการเขียนโปรแกรมภาษาซี โหลด
ลงตัว ไมโครคอนโทรลเลอร์ แล้ว จ าลองพฤติ ก รรมของไมโครคอนโทรลเลอร์ โปรแกรม Proteus
สามารถดาวน์โหลดเวอร์ ชนั่ เพื่อการทดลองได้ที่ http://www.labcenter.com
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 151

รู ปร่ างหน้าตาของโปรแกรม Proteus

เครื่ องมือหมุนอุปกรณ์ที่เลือก
พื้นที่ใช้งาน

แถบเลือกโหมด

เครื่ องมือควบคุมการจาลอง

รู ปที่ 6-25 หน้าต่างของโปรแกรม Proteus

โปรแกรม Proteus เป็ นโปรแกรมจาลองพฤติกรรมของวงจรอิเล็กทรอนิ กส์ มีโครงสร้างของ


โปรแกรมคล้าย ๆ กับโปรแกรมจาลองพฤติกรรมวงจรอิเล็กทรอนิ กส์ทวั่ ๆ ไปคือมีพ้ืนที่สาหรับต่อวงจร
มี อุป กรณ์ ใ ห้เ ลื อกใช้ง านมี เครื่ องมื อวัด แบบต่ า ง ๆ มี แ หล่ ง จ่ า ยประเภทต่ า ง ๆ โดยส่ วนต่ า ง ๆ ของ
โปรแกรมดังรู ปที่ 6-25, 6-26 , 6-27, 6-28

1. แถบเลือกโหมดที่ตอ้ งการใช้งาน (ที่ใช้บ่อย) A โหมดเลือก


A. โหมดเลือก B โหมดอุปกรณ์
B. โหมดอุปกรณ์
C. โหมดจุดเชื่ อมต่อ C โหมดจุดเชื่ อมต่อ
D. โหมดแหล่งจ่าย
E. โหมดเครื่ องมือวัด D โหมดแหล่งจ่าย

E โหมดเครื่ องมือวัด

รู ปที่ 6-26 แถบเครื่ องมือใช้งาน


152 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
2. แถบหมุนอุปกรณ์ ใช้ปรับมุมอุปกรณ์

รู ปที่ 6-27 แถบเครื่ องมือใช้ปรับมุมอุปกรณ์

3. แถบควบคุมพฤติกรรม (Play-Step-Pause-Stop) การใช้เหมือนเครื่ องเล่นทัว่ ไป

รู ปที่ 6-28 ปุ่ มควบคุมการจาลองการพฤติกรรม

การใช้งานโปรแกรม Proteus
การใช้งานโปรแกรม Proteus มีข้ นั ตอนอยู่ 5 ขั้นตอนคือ
1. เลือกอุปกรณ์อิเล็กทรอนิกส์ที่ตอ้ งการ
2. การวางอุปกรณ์
3. เชื่อมต่อสาย
4. โหลดไฟล์ภาษาเครื่ องลงชิพไมโครคอนโทรลเลอร์
5. จาลองพฤติกรรมและสังเกตผล

เลือกอุปกรณ์อิเล็กทรอนิกส์
การเลือกใช้อุปกรณ์ ของโปรแกรม Proteus จะต่างจากโปรแกรมจาลองพฤติ กรรมอื่ นๆตรงที่
จะต้องเลือกอุปกรณ์ที่ตอ้ งการใช้ไว้ในรายการใช้งานก่อน แล้วค่อยนาอุปกรณ์ในรายการมาวางในพื้นที่
ต่อใช้งาน ซึ่ งการเลือกอุปกรณ์มีข้ นั ตอนดังนี้
1. เลือกโหมดอุปกรณ์ (ไอคอนรู ปออปแอมป์ )
2. กดปุ่ ม P

1 คลิกเลือกโหมดอุปกรณ์

2 คลิกปุ่ ม P
รู ปที่ 6-29 การเลือกอุปกรณ์
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 153
3. คลิกรายการอุปกรณ์ในหมวด ( Category) จะปรากฏรายการอุปกรณ์ในหมวด
4. ดับเบิลคลิกอุปกรณ์ที่ตอ้ งการใช้งาน

3 คลิกหมวดอุปกรณ์

4 ดับเบิลคลิกอุปกรณ์ที่ตอ้ งการใช้

รู ปที่ 6-30 รายการอุปกรณ์

5. เลือกอุปกรณ์ที่ตอ้ งการใช้ให้ครบ เสร็ จแล้วกดปุ่ ม OK อุปกรณ์ที่เลือกทั้งหมดจะปรากฏใน


ช่องรายการ

5 อุปกรณ์ที่ได้จากการเลือก

รู ปที่ 6-31 รายการอุปกรณ์ที่ได้รับการเลือก


154 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

การวางอุปกรณ์
เมื่อเลือกอุปกรณ์ที่ตอ้ งการใช้เสร็ จแล้วในขั้นตอนที่ผา่ นมา ขั้นตอนนี้ คือการนาอุปกรณ์ที่เลือก
มาวางในพื้นที่ใช้งาน ปฏิบตั ิดงั นี้
1. คลิกอุปกรณ์ที่ตอ้ งการวางจากช่องรายการอุปกรณ์
2. คลิกหมุน (หากต้องการหมุน)
3. วางตัวอุปกรณ์โดยการ
- คลิกครั้งที่ 1 ในพื้นที่ใช้งานเพื่อใช้อุปกรณ์
- คลิกครั้งที่ 2 เพื่อวางในตาแหน่งที่ตอ้ งการ
4. การย่อขยายมุมมอง (Zoom in/Zoom out) ทาได้โดยการกลิ้งลูกกลิ้งเมาส์
5. การลบอุปกรณ์โดยการคลิกขวาที่ตวั อุปกรณ์ 2 ครั้ง

รู ปที่ 6-32 การวางอุปกรณ์

การเชื่อมต่อสาย
ในการเชื่อมต่อสายสัญญาณ ทาได้ดงั นี้
1. เลื่อนเมาส์ ไปยังขาอุปกรณ์ที่ตอ้ งการต่อสายสัญญาณ เมื่อโปรแกรมพร้อมที่จะเชื่ อมต่อสาย
จะปรากฏเป็ นสี่ เหลี่ยมบริ เวณขาอุปกรณ์ ทาการกดคลิกเมาส์เพื่อเริ่ มต่อสาย
2. ลากเมาส์ไปยังขาอุปกรณ์ที่ตอ้ งการต่อขาคลิกเมาส์เมื่อปรากฏเป็ นสี่ เหลี่ยม
3. การเชื่อมต่อระหว่างสายสัญญาณ ทาได้โดยการคลิกที่สายสัญญาณเพื่อเริ่ มการเชื่ อมได้เลย
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 155

1 คลิกเริ่ มต่อสาย 2 คลิกต่อสาย 3 สายเชื่อมต่อ

(a) (b) (c)


รู ปที่ 6-33 ขั้นตอนการเชื่อมต่อสาย

รู ปที่ 6-34 วงจรเมื่อต่อเชื่ อมสายสัญญาณเสร็ จแล้ว

โหลดไฟล์ภาษาเครื่ องลงชิพ
ขั้นตอนนี้เป็ นขั้นตอนการนาไฟล์ภาษาเครื่ องที่ได้จากการเขียนโปรแกรมภาษาซี แล้วผ่านการ
แปลงมา โดยมีข้ นั ตอนดังนี้
1. ดับเบิลคลิกที่ตวั ไมโครคอนโทรลเลอร์ (ในพื้นที่ต่อวงจร) จะปรากฏหน้าต่างกาหนดค่า
2. โหลดไฟล์ภาษาเครื่ อง (ไฟล์สกุล HEX)
3. แก้ค่าความถี่คริ สตอลตามที่ออกแบบไว้ (การทดลองในเล่มนี้ใช้ 11.0592MHz)

คลิกเพื่อโหลดไฟล์ภาษาเครื่ อง 2

3 แก้ความถี่เป็ น 11.0592MHz

รู ปที่ 6-35 หน้าต่างการโหลดไฟล์และการแก้ค่าความถี่


156 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

จาลองพฤติกรรม
เมื่อทาทุกขั้นตอนจนครบแล้ว พร้อมที่จะจาลองพฤติกรรมของวงจรไมโครคอนโทรลเลอร์ ที่มี
โปรแกรมที่ได้จากการโหลดจากขั้นตอนที่ผา่ นมา ขั้นตอนการจาลองพฤติกรรมมีปุ่มใช้งานหลัก ๆ 2 ปุ่ ม
คือ
1. ปุ่ ม Play เพื่อเริ่ มจาลองพฤติกรรม
2. ปุ่ ม Stop เพื่อหยุดการจาลอง

1 ปุ่ มเริ่ มจาลอง

2 ปุ่ มหยุดการจาลอง

รู ปที่ 6-36 การจาลองพฤติกรรม

6.3 เครื่ องมืออัดไฟล์ภาษาเครื่ องลงชิพ


เมื่อดาเนิ นการเขียนโปรแกรมและได้จาลองพฤติกรรมโดยผลเป็ นไปตามความต้องการแล้ว
เพื่อให้สามารถใช้งานได้จริ ง จาเป็ นต้องต่อวงจรจริ งเพื่อทดสอบการใช้งาน ไมโครคอนโทรลเลอร์ ใน
ตระกูล MCS-51 ที่สามารถใช้งานได้ขอแนะนาว่าให้เป็ นไมโครคอนโทรลเลอร์ ที่มีหน่ วยความจาเก็บ
โปรแกรมภายในแบบแฟลช ซึ่ งเป็ นหน่วยความจาที่สามารถลบและบันทึกซ้ าได้หลายครั้ง
ไมโครคอนโทรลเลอร์ MCS-51 ที่ มีหน่ วยความจาเก็บโปรแกรมภายในแบบแฟลชที่สามารถ
โปรแกรมตัวเองได้ในขณะที่ยงั อยูใ่ นวงจรใช้งานที่เรี ยกว่า ISP (In system programming) และมีจาหน่าย
ในประเทศไทยมีอยู่สองบริ ษทั ได้แก่ ไมโครคอนโทรลเลอร์ ของบริ ษทั Atmel มีตวั อักษรเริ่ มต้นด้วย
AT89S จะโปรแกรมตัวเองผ่านทางพอร์ ต 1 และไมโครคอนโทรลเลอร์ ของบริ ษทั Philips มีตวั อักษร
เริ่ มต้นด้วย P89 จะโปรแกรมตัวเองผ่านทางพอร์ ตอนุกรม
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 157
การโปรแกรมลงชิพไมโครคอนโทรลเลอร์ ของบริ ษทั Atmel ที่มีตวั อักษรเริ่ มต้นด้วย AT89S จะ
ใช้โปรแกรม ISP–Flash Programmer 3.0a ซึ่ ง เป็ นโปรแกรมที่ มีขนาดเล็ก สามารถรั นได้โดยที่ ไ ม่ต้อง
ติดตั้ง ใช้วงจรเชื่ อมต่อกับคอมพิวเตอร์ แบบ STK200 ใช้อุปกรณ์ จานวนต่อน้อยชิ้นและง่ายต่อการสร้าง
รายละเอียดของวงจรเป็ นดังรู ปที่ 6-37

รู ปที่ 6-37 วงจร STK200 วงจรโปรแกรมข้อมูลลงชิพผ่านทางพอร์ ต LPT

จากรู ป ที่ 6-37 เป็ นวงจรที่ ไ ม่ มี ส่ ว นที่ เ ป็ นวงจรบัฟ เฟอร์ ที่ ใ ช้ใ นการจัด รู ป สั ญ ญาณที่ ม าจากพอร์ ต
เครื่ องพิมพ์ของเครื่ องคอมพิวเตอร์ เพื่อป้ องกันการเสี ยหายอาจเกิดขึ้นกับพอร์ ตเครื่ องพิมพ์ จึงต้องใส่ ตวั
ต้านทานอนุ กรมไปกับสายสัญญาณเชื่ อมต่อซึ่ งใช้ค่าระหว่าง 47 โอห์มจนถึง 240 โอห์ม (ในรู ปวงจรใช้
ค่า 100 โอห์ม) ความยาวของสายสัญญาณระหว่างพอร์ ตเครื่ องพิมพ์ถึงวงจรไมโครคอนโทรลเลอร์ ไม่
ควรเกิ น 50 เซนติ เ มตรเนื่ อ งจากอาจท าให้ เ กิ ด ปั ญ หาในการใช้ ง านได้ สามารถดาวน์ โ หลดได้ที่
http://www.kmitl.ac.th/~kswichit/IspPgm30a/ISP-Pgm30a.html โปรแกรม ISP Flash Programmer 3.0a
สามารถใช้กบั ไมโครคอนโทรลเลอร์ ในตระกูล MCS-51 ได้ท้ งั หมด 5 เบอร์ คือ AT89S51, AT89S52,
AT89S53, AT89S8252 ซึ่งหน้าตาโปรแกรมเป็ นดังรู ปที่ 6-38
1 เลือกเบอร์ MCU

3 ปุ่ มอัดข้อมูลในบัฟเฟอร์ลงชิพ

2 เลือกไฟล์ที่ตอ้ งการอัดลงชิพ

รู ปที่ 6-38 โปรแกรม ISP Flash Programmer 3.0a


158 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
การใช้งานโปรแกรมอย่างแรกต้องตรวจสอบการเชื่ อมต่อกับวงจรไมโครคอนโทรลเลอร์ ก่อนว่าติดต่อได้
หรื อไม่ โดยการกดปุ่ มอ่านข้อมูลจากชิ พ (ปุ่ ม Read) ซึ่ งต้องเลือกเบอร์ ไมโครคอนโทรลเลอร์ ที่ใช้งาน
ก่อนแล้ว ถ้าโปรแกรมไม่สามารถติดต่อกับวงจรไมโครคอนโทรลเลอร์ ได้จะเป็ นดังรู ป 6-39

รู ปที่ 6-39 หน้าต่างหากติดต่อกับวงจรไมโครคอนโทรลเลอร์ ไม่ได้

แต่ถา้ โปรแกรมติดต่อกับวงจรไมโครคอนโทรลเลอร์ ได้จะเป็ นดังรู ป 6-40

รู ปที่ 6-40 หน้าต่างหากติดต่อกับวงจรไมโครคอนโทรลเลอร์ ได้

การโปรแกรมลงชิ พ ไมโครคอนโทรลเลอร์ ข องบริ ษัท Philips เบอร์ P89V51RD2 จะใช้


โปรแกรมชื่ อ Flash magic สามารถดาวน์โหลดโปรแกรมได้ที่ http://www.flashmagictool.com สาหรับ
การโปรแกรมจะโปรแกรมผ่านทางพอร์ ตอนุกรมซึ่ งวงจรเป็ นดังรู ปที่ 6-41

รู ปที่ 6-41 วงจรสื่ อสารทางพอร์ตอนุกรมที่ใช้โปรแกรมข้อมูลลงชิพ

การเลื อกใช้งานเบอร์ ที่เหมาะสมนั้นสาหรับการเรี ยนการสอนในวิชาไมโครคอนโทรลเลอร์ น้ ี


เป็ นการเรี ยนรู ้ การทางานในระดับพื้นฐานซึ่ งทั้งสองเบอร์ ใช้งานได้ท้ งั หมด โดยแต่ละตัวมีขอ้ ดี ขอ้ เสี ย
เฉพาะการโปรแกรมตัวเองที่แตกต่างกันดังตารางที่ 6-1
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 159
ตารางที่ 6-1 เปรี ยบเทียบความแตกต่างเฉพาะการโปรแกรมตัวเองของไมโครคอนโทรลเลอร์
เบอร์(ของบริ ษทั ) ราคา พอร์ต คอมพิวเตอร์ อุปกรณ์เสริ ม
AT89S52 (Atmel) ถูก LPT PC เท่านั้น -
P89V51RD2(Philips) แพง RS232 PC หรื อ Notebook USB to RS232 ( สาหรับNB)

6.4 สรุปสาระสาคัญ
เครื่ องมือที่นามาใช้ในการพัฒนางานด้านไมโครคอนโทรลเลอร์มี 3 ชนิดคือ
1. เครื่ องมื อที่ ใ ช้แปลงภาษาซี เป็ นภาษาเครื่ อง เลื อกใช้โปรแกรม Keil µVision4 เนื่ องจากเป็ น
โปรแกรมที่มีประสิ ทธิ ภาพในการแปลงภาษาสู งสุ ด นัน่ ก็คือได้ภาษาเครื่ องที่ มีขนาดเล็กที่สุด
เมื่อเทียบกับโปรแกรมอื่น ๆ ที่มีใช้ในปั จจุบนั
2. เครื่ องมือที่ใช้จาลองการทางาน ในการนาวงจรไมโครคอนโทรเลอร์ ที่ใช้งานจริ ง จะต้องนาไฟล์
ภาษาเครื่ องที่ได้ไปอัดลงชิ พไมโครคอนโทรลเลอร์ เพื่อตรวจสอบการทางาน ซึ่ งหากใช้วิธีการ
จาลองการทางานจะทาให้ทราบผลที่เร็ วกว่า เครื่ องมื อที่ใช้ในการจาลองนี้ เลื อกใช้โปรแกรม
Proteus เนื่องจากสามารถจาลองการทางานของไมโครคอนโทรลเลอร์ได้ดีที่สุด
3. ไมโครคอนโทรลเลอร์ เบอร์ ที่ ข้ ึ นต้นด้วย AT89S มี หน่ วยความจาเก็ บโปรแกรมภายในแบบ
แฟลชที่ ส ามารถโปรแกรมตัว เองได้ใ นขณะที่ ย งั อยู่ใ นวงจรใช้ง านที่ เรี ย กว่า ISP (In system
programming) เครื่ องมือที่ใช้งานในการโปรแกรมข้อมูลลงชิพไอซี ไมโครคอนโทรเลอร์ น้ ีชื่อว่า
ISP Flash Programmer 3.0a
160 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบฝึ กหัดหน่ วยที่ 6


คาชี้แจง ให้นกั ศึกษาตอบคาถามต่อไปนี้ให้สมบรู ณ์
1. เครื่ องมือที่ใช้พฒั นางานไมโครคอนโทรลเลอร์ มีกี่ชนิดอะไรบ้าง

2. จงบอกขั้นตอนการเตรี ยมเครื่ องมือเพื่อใช้เขียนโปรแกรมภาษาซี

3. เมื่อทาการแปลงเป็ นภาษาเครื่ องไม่ผา่ นสังเกตได้อย่างไรและต้องแก้ไขอย่างไร

4. จงบอกขั้นตอนการใช้เครื่ องมือจาลองการทางานของไมโครคอนโทรลเลอร์

5. จงบอกขั้นตอนการใช้เครื่ องมืออัดไฟล์ภาษาเครื่ องลงชิพไมโครคอนโทรลเลอร์


หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 161

แบบทดสอบหลังเรียนหน่ วยที่ 6
คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เครื่ องมือที่ใ ช้แปลงภาษาซี เป็ นภาษาเครื่ อง 5. หากใส่ ส กุ ล ไฟล์เ อกสารไม่ ถู ก ต้องผลที่ จ ะ
คือข้อใด เกิดขึ้นคือข้อใด
ก. Keil uVision ก. ไม่สามารถพิมพ์โปรแกรมได้
ข. MS Word ข. ข้อความจะมีลกั ษณะเดียวกัน
ค. Proteus ค. ข้อความจะเป็ นสี จางทั้งหมด
ง. ISP Programmer 3.0a ง. ข้อความจะเป็ นตัวเอียงทั้งหมด
จ. Protel99SE จ. ไม่มีผลที่ต่างกัน
2. เครื่ องมือช่วยในการพัฒนางานหลัก ๆ มีกี่ 6. การเลื อ กออปชั่นใดเพื่ อให้ เครื่ องมื อแปลง
ชนิด ภาษาซีเป็ นภาษาเครื่ องสร้างไฟล์ภาษาเครื่ อง
ก. 1 ชนิด ก. Create HEX File
ข. 2 ชนิด ข. Generate HEX File
ค. 3 ชนิด ค. Build HEX File
ง. 4 ชนิด ง. Open HEX File
จ. 5 ชนิด จ. Make HEX File
3. การเลื อ กเบอร์ ซี พี ยูเ พื่ อ ใช้เ ขี ย นโปรแกรม 7. เมื่ อ พิ ม พ์ โ ปรแกรมเสร็ จ สิ้ น แล้ ว ต้อ งการ
จะต้องทาในขั้นตอนใด แปลงเป็ นภาษาเครื่ องจะต้องทาอย่างไร
ก. หลังเปิ ดใช้เครื่ องมือแปลงภาษา ก. คลิกที่ปุ่ม Make Target
ข. ก่อนทาการแปลงภาษา ข. คลิกที่ปุ่ม Build Target
ค. ก่อนเปิ ดใช้เครื่ องมือแปลงภาษา ค. คลิกที่ปุ่ม Open Target
ง. ถัดจากการสร้างโปรเจคไฟล์ ง. คลิกที่ปุ่ม Generate Target
จ. ไม่ตอ้ งเลือก จ. คลิกที่ปุ่ม Create Target
4. การสร้ า งไฟล์เ อกสารส าหรั บ เขี ย นภาษาซี 8. หากการแปลงไม่ มี ข ้อ ผิ ด พลาดจะปรากฏ
จะต้องตั้งชื่อไฟล์เป็ นสกุลใด ข้อความใด
ก. .DOC ก. “main” - OK.
ข. .C ข. “main” - Pass.
ค. .BAS ค. “main” - 0 Warning (s), 0 Error(s).
ง. .HEX ง. “main” - 0 Error(s), 0 Warning (s).
จ. .XLS จ. “main” - 0 Erase (s), 0 Warming (s).
162 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

9. เครื่ องมื อที่ ใ ช้ในการจาลองการท างานของ 13. การต่อสายเชื่อมทาได้โดยวิธีใด


ไมโครคอนโทรลเลอร์คือข้อใด ก. คลิกขวาที่ตวั อุปกรณ์ 2 ครั้ง
ก. Keil uVision ข. คลิกที่ปลายขาอุปกรณ์
ข. MS Word ค. คลิกที่ปลายขาอุปกรณ์ 2 ครั้ง
ค. ISP Programmer 3.0a ง. คลิกที่ตวั อุปกรณ์
ง. Proteus จ. คลิกที่โดนขาอุปกรณ์
จ. Protel99SE 14. หากต้องการลบอุปกรณ์ทาได้โดยวิธีใด
10. ก่อนการจัดวางอุปกรณ์ เพื่อจาลองการทางาน ก. คลิกซ้ายที่ตวั อุปกรณ์ 2 ครั้ง
จะต้องทาสิ่ งใดก่อน ข. คลิกซ้าย-ขวาที่ตวั อุปกรณ์
ก. ล้างพื้นที่ใช้งาน ค. คลิกขวาที่ตวั อุปกรณ์ 2 ครั้ง
ข. วางสายเชื่อมต่อก่อน ง. กดปุ่ ม Delete
ค. ลบอุปกรณ์ในช่องรายการ จ. กดแป้นพิมพ์ Delete
ง. ลากอุปกรณ์วางได้โดยตรง 15. การโหลดไฟล์ภาษาเครื่ องลงตัวซีพียเู พื่อ
จ. เลื อกอุปกรณ์ที่ตอ้ งการมาไว้ในช่ อง จาลองการทางานทาได้โดยวิธีใด
รายการ ก. คลิกปุ่ ม Open file
11. อุปกรณ์ใดที่ไม่สามารถจาลองการทางานได้ ข. เข้าเมนู Option แล้วเลือกไฟล์
ก. ไม่มีขาไฟเลี้ยง ค. เข้าเมนู Source แล้วเลือกไฟล์
ข. อุปกรณ์ที่ไม่มีโมเดล ง. คลิกปุ่ ม Code
ค. LED จ. ดับเบิลคลิกที่ตวั ซี พียูแล้วโหลดไฟล์
ง. ลาโพง ในช่อง Program File
จ. ไม่มีตวั ถัง (Foot Print) 16. การกาหนดค่าคริ สตอลทาได้โดยวิธีใด
12. เลือกไมโครคอนโทรลเลอร์ ที่ Category ใด ก. ดับเบิลคลิกที่ตวั ไมโครคอนโทรลเลอร์ ใส่
ก. Microcontroller ICs ค่าในช่อง Clock Frequency
ข. Microfarad ICs ข. ดับเบิลคลิกที่ปุ่ม Clock Frequency
ค. Microprocessor ICs ค. คลิกขวาที่ตวั ไมโครคอนโทรลเลอร์ ใส่ ค่า
ง. Microprogrammer ICs ในช่อง Clock Frequency
จ. Microcomputer ICs ง. คลิกซ้ายที่ตวั ไมโครคอนโทรลเลอร์ ใส่ ค่า
ในช่อง Clock Frequency
จ. ดับเบิลคลิกที่ตวั ไมโครคอนโทรลเลอร์ ใส่
ค่าในช่อง Clock Frequency
หน่ วยที่ 6 เครื่ องมือช่วยพัฒนางานไมโครคอนโทรลเลอร์ 163
17. เครื่ องมือสาหรับอัดไฟล์ภาษาเครื่ องลงตัวชิพ 19. ไมโครคอนโทรลเลอร์ ที่โปรแกรมผ่านพอร์ ต
ไอซี AT89Sxx คือข้อใด อนุกรมคือข้อใด
ก. Keil uVision ก. AT89C52
ข. ISP Programmer 3.0a ข. AT89S52
ค. MS Word ค. P89V51RD2
ง. Proteus ง. P89S51RD2
จ. Protel99SE จ. P89C51AF2
18. วงจรที่ใช้โปรแกรมลงตัวชิ พไอซี AT89Sxx 20. วงจรที่ใช้โปรแกรมลงตัวชิ พไอซี AT89Sxx
คือข้อใด ใช้สายสัญญาณกี่เส้น
ก. STD200 ก. 1 เส้น
ข. STK200 ข. 2 เส้น
ค. ISP200 ค. 3 เส้น
ง. SPK200 ง. 4 เส้น
จ. STK500 จ. 5 เส้น

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ก 3. ข 4. จ 5. ง 6. ก 7. ค 8. ค 9. ค 10. จ
11. ง 12. ข 13. จ 14. ก 15. ก 16. ข 17. ง 18. ค 19. จ 20. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ค 3. ง 4. ข 5. ข 6. ก 7. ข 8. ง 9. ง 10. จ
11. ข 12. ค 13. ข 14. ค 15. จ 16. ก 17. ข 18. ข 19. ค 20. จ
หน่ วยที่ 7
ใบงานการทดลอง
หัวข้อเรื่ อง
ใบงานที่ 7.1 การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์ )
ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์
ใบงานที่ 7.4 การสร้างวงจรเอาท์พุทพอร์ ต
ใบงานที่ 7.5 การใช้งานพอร์ ตทาหน้าที่เป็ นเอาท์พุทพอร์ ตเบื้องต้น
ใบงานที่ 7.6 การสร้างวงจรสวิตช์
ใบงานที่ 7.7 การใช้งานพอร์ ตทาหน้าที่เป็ นอินพุทพอร์ ตเบื้องต้น
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา
ใบงานที่ 7.9 การสร้างวงจรขับลาโพง
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่ วน
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วน
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่ วน
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ ไฟฟ้ากระแสตรง
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ ไฟฟ้ากระแสตรง
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD)
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD)

สาระสาคัญ
ใบงานในหน่ วยการเรี ยนนี้ เป็ นใบงานที่ รวบรวมขึ้ นเพื่อให้ผูเ้ รี ยนสามารถเรี ยนรู ้ การใช้งาน
ไมโครคอนโทรลเลอร์ ข้ นั พื้นฐาน ตลอดจนมีทกั ษะในการสร้างวงจรเพื่อประยุกต์ใช้งานได้ดว้ ยตนเอง
166 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
โดยใบงานมี ท้ งั หมด 21 ใบงานซึ่ ง เป็ นใบงานขั้นพื้นฐานเพื่ อให้นัก ศึ กษาที่ ย งั ไม่มี พ้ื นฐานการเขี ย น
โปรแกรมควบคุมงานด้วยไมโครคอนโทรลเลอร์ มาก่อนสามารถเรี ยนรู ้ได้ โดยในแต่ละใบงานมีตวั อย่าง
การเขี ย นโปรแกรมขั้น พื้ นฐานเพื่ อให้นัก ศึ ก ษาสามารถเข้า ใจได้ง่ า ยและเป็ นแนวทางที่ จะฝึ กเขี ย น
โปรแกรมควบคุมงานในโจทย์แบบฝึ กหัดได้

สมรรถนะประจาหน่วยการเรี ยนรู ้
ปฏิ บตั ิ การสร้ างวงจรไมโครคอนโทรลเลอร์ และวงจรเชื่ อมต่อได้ดว้ ยตนเอง เขี ยนโปรแกรม
สั่งงานด้วยภาษาซี โดยใช้โปรแกรม Keil uVision จาลองการทางานด้วยโปรแกรม Proteus และทดลอง
ด้วยวงจรไมโครคอนโทรลเลอร์ ที่สร้างขึ้น

จุดประสงค์การเรี ยนรู ้
จุดประสงค์ ทวั่ ไป
1. เพื่อให้มีทกั ษะในการสร้าง (ประกอบ) วงจรไมโครคอนโทรลเลอร์ และวงจรต่อพ่วง
2. เพื่อให้มีทกั ษะในการตรวจสอบวงจรในกรณี ที่วงจรไม่ทางาน
3. เพื่อให้มีทกั ษะในการแก้ไขปั ญหาในกรณี ที่วงจรไม่ทางาน
4. เพื่อให้มีความรู ้เกี่ยวกับการเขียนโปรแกรมภาษาซี สาหรับไมโครคอนโทรลเลอร์
5. เพื่อให้เข้าใจการทางานของวงจรด้วยการจาลองการทางานด้วยโปรแกรม Proteus
6. เพื่อให้สามารถทดลองด้วยวงจรจริ งที่สร้างขึ้นเอง
7. เพื่อให้มีความรับผิดชอบในการจัดทาใบงานให้เสร็ จทันเวลา
จุดประสงค์ เชิ งพฤติกรรม
1. สร้าง (ประกอบ) วงจรไมโครคอนโทรลเลอร์ และวงจรต่อพ่วงได้
2. ตรวจสอบวงจรในกรณี ที่วงจรไม่ทางานได้
3. แก้ไขปั ญหาในกรณี ที่วงจรไม่ทางานได้
4. เขียนโปรแกรมภาษาซี ควบคุมไมโครคอนโทรลเลอร์ ตามตัวอย่างได้
5. เขียนโปรแกรมภาษาซี ควบคุมไมโครคอนโทรลเลอร์ ในงานที่มอบหมายได้
6. ทดลองวงจรด้วยการจาลองการทางานด้วยโปรแกรม Proteus ได้
7. ทดลองด้วยวงจรจริ งที่สร้างขึ้นเองได้
8. ทาใบงานเสร็ จทันเวลา
ใบงานที่ 7.1
การสร้ างวงจรภาคจ่ ายไฟในแผงวงจรไมโครคอนโทรลเลอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้ างวงจรภาคจ่ายไฟเพื่อนาไปใช้งานในวงจรไมโครคอนโทรลเลอร์
กับวงจรต่อพ่วงได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรภาคจ่ายไฟได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรภาคจ่ายไฟได้
3. บอกขั้นตอนการประกอบวงจรลงแผ่นวงจรพิมพ์เอนกประสงค์ได้
4. สร้าง (ประกอบ) วงจรภาคจ่ายไฟได้
5. ทดสอบการทางานวงจรภาคจ่ายไฟได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์แบบจุดไข่ปลาขนาด 8 ซ.ม.× 12 ซ.ม. 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.1-2 ประกอบด้วย
2.1 DC Jack 1 ตัว 2.5 ตัวต้านทาน 820 Ω ¼ W 1 ตัว
2.2 ไดโอดบริ ดจ์ 1.5 A 1 ตัว 2.6 LED 1 ตัว
2.3 ตัวเก็บประจุ 1000 uF/25 V 1 ตัว 2.7 ไอซี 7805 1 ตัว
2.4 ตัวเก็บประจุ 0.1 uF 1 ตัว 2.8 คอนเน็คเตอร์ 2×2 2 ตัว
3. หัวแร้ง 1 ตัว
4. ตะกัว่ บัดกรี 1 ม้วน
5. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรภาคจ่ายไฟ
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
168 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.1


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซี เบอร์ ใดที่ใช้ทาหน้าที่รักษาระดับแรงดัน 5. ตัวเก็บประจุ ค่าต่ าที่ ต่อด้านออกของไอซี ท า
ให้ได้ 5 โวลต์ หน้าที่ใด
ก. LM741 ก. จัดขั้วแรงดันให้วงจร
ข. MAX232 ข. รักษาระดับแรงดัน
ค. LM7805 ค. กรองแรงดัน
ง. AT89S52 ง. รักษาระดับแรงดัน
จ. LM555 จ. ลดสัญญาณรบกวน
2. อุป กรณ์ ใ ดใช้ท าหน้า ที่ก รองแรงดันในภาค 6. ตัวต้านทานที่ ต่ออนุ ก รมกับ LED ท าหน้าที่
จ่ายไฟ ใด
ก. ไดโอดบริ ดจ์ 1.5 A ก. จัดขั้วแรงดันให้วงจร
ข. ตัวเก็บประจุ 1000 uF ข. รักษาระดับแรงดัน
ค. LED ค. จากัดกระแสให้แก่ LED
ง. ไอซีเรกกูเลเตอร์ ง. รักษาระดับแรงดัน
จ. ตัวเก็บประจุ 0.1 uF จ. ลดสัญญาณรบกวน
3. ประโยชน์ของ LED ในภาคจ่ายไฟคือข้อใด 7. ก่อนการประกอบวงจรควรทาสิ่ งใด
ก. เพิ่มความสวยงาม ก. วางแผนการจัด วางอุ ป กรณ์ ล งบน
ข. กรองแรงดัน แผ่นวงจรพิมพ์
ค. รักษาระดับแรงดัน ข. ตัดขาอุปกรณ์ให้พอดี
ง. แสดงให้ทราบว่าวงจรมีไฟเลี้ยงแล้ว ค. เลือกลงอุปกรณ์ตามความพอใจ
จ. ลดสัญญาณรบกวน ง. หาปลัก๊ พ่วงเพื่อเสี ยบหัวแร้ง
4. ไดโอดบริ ดจ์ในวงจรของใบงานทาหน้าที่ใด จ. บัดกรี อุปกรณ์ที่มีขนาดเล็ก
ก. จัดขั้วแรงดันให้วงจร 8. หลังจากบัดกรี DC Jack ลงในแผ่นวงจรแล้ว
ข. รักษาระดับแรงดัน ขั้นตอนถัดไปควรลงอุปกรณ์ใด
ค. กรองแรงดัน ก. ตัวต้านทาน
ง. รักษาระดับแรงดัน ข. ตัวเก็บประจุ 1000 uF
จ. ลดสัญญาณรบกวน ค. LED
ง. ไอซีเรกกูเลเตอร์
จ. ตัวเก็บประจุ 0.1 uF
ใบงานที่ 7.1 การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์ 169

9. แรงดันตกคร่ อมตัวเก็บประจุ 1000 uF ขณะป้ อนแหล่งจ่ายควรมีค่าเท่าใด


ก. 0 โวลต์หรื อใกล้เคียง
ข. 5 โวลต์หรื อใกล้เคียง
ค. 12 โวลต์หรื อใกล้เคียง
ง. ต่ากว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
จ. สู งกว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
10. แรงดันระหว่างขา 2 กับขา 3 ของไอซี ควรมีค่าเท่าใด
ก. 0 โวลต์หรื อใกล้เคียง
ข. 5 โวลต์หรื อใกล้เคียง
ค. 12 โวลต์หรื อใกล้เคียง
ง. ต่ากว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
จ. สู งกว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
170 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
การเรี ยนรู ้การทางานตลอดจนการเขียนโปรแกรมควบคุมการทางานของไมโครคอนโทรลเลอร์
MCS-51 หากเรี ยนรู ้และทดลองด้วยการจาลองการทางานเพียงอย่างเดี ยวนักศึกษาจะได้เพียงความรู ้ ใน
การเขียนโปรแกรมควบคุมงาน แต่ไม่ได้ทกั ษะในการปฏิบตั ิงาน ซึ่ งการทดลองจากวงจรจริ งที่นกั ศึกษา
ได้ลงมือสร้ างวงจรด้วยตนเองจะส่ งผลให้นกั ศึกษาเกิ ดทักษะในทางปฏิ บตั ิในหลาย ๆ ด้านทั้งการอ่าน
วงจร การบัดกรี วงจร การแก้ปัญหาอันอาจเกิดขึ้นได้ในหลากหลายกรณี วงจรหลักจะเป็ นแผ่นวงจรที่ใช้
ในการทดลองเพื่อทดสอบผลการทางานจากโปรแกรมที่เขียนขึ้น ซึ่งแผงวงจรหลักประกอบด้วย
1. วงจรภาคจ่ายไฟ
2. วงจรไมโครคอนโทรลเลอร์
3. วงจรเชื่อมต่อคอมพิวเตอร์ สาหรับการโปรแกรมตัวเอง
ใบงานที่ 7.1 นี้เป็ นใบงานสร้างวงจรภาคจ่ายไฟ ซึ่งเป็ นวงจรที่มีหน้าที่ในการจ่ายกระแสไฟฟ้าที่
มีแรงดันประมาณ 5 โวลต์ให้กบั วงจรไมโครคอนโทรลเลอร์ และวงจรต่อพ่วงต่าง ๆ ที่ นกั ศึกษาจะได้
เรี ยนรู ้ในใบงานถัดไป สาหรับการสร้ างวงจรภาคจ่ายไฟเลื อกใช้แบบใช้แหล่งจ่ายไฟตรงภายนอกเพื่อ
สะดวกในการใช้งาน ดังรู ปที่ 7.1-1

รู ปที่ 7.1-1 วงจรภาคจ่ายไฟ

การทางานของวงจร คอนเน็คเตอร์ J1 รับไฟฟ้ าจากแหล่งจ่ายภายนอกที่เป็ นไฟฟ้ ากระแสตรง


แล้ว เช่น ดีซีอะแด็พเตอร์ สาหรับเครื่ องเล่นต่าง ๆ ที่มีแรงดันไฟฟ้า 12 โวลต์หรื อใช้ชุดหม้อแปลงสาหรับ
คอมพิวเตอร์โน้ตบุค ในกรณี ที่ใช้ชุดหม้อแปลงสาหรับคอมพิวเตอร์โน้ตบุคจะมีค่าแรงดันหลากหลายค่า
แตกต่างกันไปทั้งนี้ ข้ ึนอยูก่ บั รุ่ นของเครื่ องโน้ตบุคที่ใช้งานแรงดันบางรุ่ นสู งถึง 20 โวลต์ หากเลือกรุ่ นที่
ให้แรงดันสู งจะส่ งผลให้ไอซี 7805 ร้อนมากกว่าปกติ ดังนั้นควรเลื อกชุ ดแปลงไฟเครื่ องคอมพิวเตอร์
โน้ตบุคที่มีแรงดันเอาท์พุทไม่สูงเกิ นไป BD1 เป็ นไดโอดบริ ดจ์ทาหน้าที่ปรับขั้วแรงดันให้ถูกต้องเพื่อ
ป้ องกันอันตรายจากการจ่ า ยแรงดันจากภายนอกที่ ผิดขั้วและเนื่ องจากวงจรมี ก ระแสไหลผ่า นอย่า ง
ต่อเนื่ องต้องเลื อกไดโอดที่ ท นกระแสได้สู งกว่าปกติ C1 เป็ นตัวเก็บ ประจุ ฟิลเตอร์ ใส่ เสริ ม เนื่ องจาก
แหล่งจ่ายแรงดันภายนอกที่นามาใช้งานอาจมีการฟิ ลเตอร์ ไม่เพียงพอ R1,LED1 เป็ นตัวแสดงสถานะเมื่อ
ใบงานที่ 7.1 การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์ 171

วงจรได้รับการป้ อนไฟจากแหล่งจ่ายภายนอก ไอซี เบอร์ 7805 เป็ นไอซี ทาหน้าที่รักษาระดับแรงดันให้ได้


เอาท์พุท 5 โวลต์ C2 ทาหน้าที่ลดสัญญาณรบกวนก่อนจ่ายกระแสให้กบั วงจรอื่นต่อไป

6. การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยเว้นพื้นที่ไว้สาหรับวางวงจรไมโครคอนโทรลเลอร์
2. วางคอนเน็คเตอร์ J1 โดยหันด้านช่ องเสี ยบออกด้านนอกแผ่นวงจรพิมพ์เอนกประสงค์เพื่อ
สะดวกในการใช้งานเมื่อเสี ยบแหล่งจ่ายภายนอกเข้ากับวงจร
3. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.1-2

รู ปที่ 7.1-2 วงจรภาคจ่ายไฟที่ใช้สร้าง

แนวทางการสร้ างวงจรภาคจ่ ายไฟ นักศึกษาสามารถจัดวางอุปกรณ์ได้อิสระตามความคิดของตนเอง


โดยใช้วงจรจ่ายไฟในรู ปที่ 7.1-2 ซึ่ งประกอบวงจรลงแผ่นวงจรพิมพ์เอนกประสงค์แบบไข่ปลาขนาด
8×12 เซนติเมตรโดยจะต้องวางแผนในการจัดวางอุปกรณ์ ต่าง ๆ ของวงจรในตาแหน่ งที่เหมาะสมและ
จะต้องเว้นพื้นที่ สาหรับวงจรไมโครคอนโทรลเลอร์ แนวทางการวางตาแหน่ งตลอดจนแนวการบัดกรี
เป็ นดังรู ปที่ 7.1-3

7805
103

รู ปที่ 7.1-3 แนวการจัดวางและแนวการบัดกรี ของวงจรภาคจ่ายไฟ


172 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. การทดสอบการทางานของวงจร
1. ตรวจสอบการเชื่อมต่อโดยใช้มลั ติมิเตอร์ วดั ความต่อเนื่องตรวจสอบกับวงจรรู ปที่ 7.1-1
2. เสี ยบแหล่งจ่ายภายนอก (DC adaptor) เข้าคอนเน็คเตอร์ J1
3. LED1 ต้องติดสว่าง หาก LED1 ไม่ติดให้ปลดแหล่งจ่ายออกแล้วตรวจสอบการเชื่ อมต่อใหม่
4. วัดแรงดันจุดต่าง ๆ ตามตารางที่ 7.1-1

ตารางที่ 7.1-1 ตารางบันทึกแรงดันจุดต่าง ๆ


จุดวัดแรงดัน ค่าแรงดันที่วดั ได้
1. คร่ อมตัวเก็บประจุ C1
2. แรงดันขา 1 เทียบกับขา 2 ของไอซี U1
3. แรงดันขา 3 เทียบกับขา 2 ของไอซี U1

5. หากวัดแรงดันไฟฟ้าที่ขา 3 เทียบกับขา 2 ของไอซี U1 แรงดันที่ได้ไม่ใกล้เคียงกับ 5 โวลต์ให้


ปลดแหล่งจ่ายออกแล้วทาการตรวจสอบการเชื่อมต่อใหม่ ทาการแก้ไขวงจรจนได้แรงดันที่มี
ค่าเท่ากับหรื อใกล้เคียง 5 โวลต์

8. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.1 การสร้างวงจรภาคจ่ายไฟในแผงวงจรไมโครคอนโทรลเลอร์ 173

แบบทดสอบหลังเรียน ใบงานที่ 7.1


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซี เบอร์ ใดที่ใช้ทาหน้าที่รักษาระดับแรงดัน 5. ตัวเก็บประจุ ค่าต่ าที่ ต่อด้านออกของไอซี ท า
ให้ได้ 5 โวลต์ หน้าที่ใด
ก. LM741 ก. จัดขั้วแรงดันให้วงจร
ข. LM7805 ข. รักษาระดับแรงดัน
ค. MAX232 ค. ลดสัญญาณรบกวน
ง. AT89S52 ง. กรองแรงดัน
จ. LM555 จ. รักษาระดับแรงดัน
2. อุป กรณ์ ใ ดใช้ท าหน้า ที่ก รองแรงดันในภาค 6. ตัวต้า นทานที่ ต่ออนุ ก รมกับ LED ท าหน้าที่
จ่ายไฟ ใด
ก. ไดโอดบริ ดจ์ 1.5 แอมป์ ก. จัดขั้วแรงดันให้วงจร
ข. LED ข. รักษาระดับแรงดัน
ค. ไอซีเรกกูเลเตอร์ ค. รักษาระดับแรงดัน
ง. ตัวเก็บประจุ 1000 uF ง. ลดสัญญาณรบกวน
จ. ตัวเก็บประจุ 0.1 uF จ. จากัดกระแสให้แก่ LED
3. ประโยชน์ของ LED ในภาคจ่ายไฟคือ 7. ก่อนการประกอบวงจรควรทาสิ่ งใด
ก. เพิ่มความสวยงาม ก. ตัดขาอุปกรณ์ให้พอดี
ข. แสดงให้ทราบว่าวงจรมีไฟเลี้ยงแล้ว ข. เลือกลงอุปกรณ์ตามความพอใจ
ค. กรองแรงดัน ค. วางแผนการจัด วางอุ ป กรณ์ ล งบน
ง. รักษาระดับแรงดัน แผ่นวงจรพิมพ์
จ. ลดสัญญาณรบกวน ง. หาปลัก๊ พ่วงเพื่อเสี ยบหัวแร้ง
4. ไดโอดบริ ดจ์ในวงจรของใบงานทาหน้าที่ใด จ. บัดกรี อุปกรณ์ที่มีขนาดเล็ก
ก. รักษาระดับแรงดัน 8. หลังจากบัดกรี DC Jack ลงในแผ่นวงจรแล้ว
ข. จัดขั้วแรงดันให้วงจร ขั้นตอนถัดไปควรลงอุปกรณ์ใด
ค. กรองแรงดัน ก. ตัวต้านทาน
ง. รักษาระดับแรงดัน ข. LED
จ. ลดสัญญาณรบกวน ค. ไอซีเรกกูเลเตอร์
ง. ตัวเก็บประจุ 1000 uF
จ. ตัวเก็บประจุ 0.1 uF
174 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. แรงดันตกคร่ อมตัวเก็บประจุ 1000 uF ขณะป้ อนแหล่งจ่ายควรมีค่าเท่าใด
ก. ต่ากว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
ข. สู งกว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
ค. 0 โวลต์หรื อใกล้เคียง
ง. 5 โวลต์หรื อใกล้เคียง
จ. 12 โวลต์หรื อใกล้เคียง
10. แรงดันระหว่างขา 2 กับขา 3 ของไอซี ควรมีค่าเท่าใด
ก. ต่ากว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
ข. สู งกว่าค่าแหล่งจ่ายภายนอกเล็กน้อย
ค. 12 โวลต์หรื อใกล้เคียง
ง. 5 โวลต์หรื อใกล้เคียง
จ. 0 โวลต์หรื อใกล้เคียง

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ข 3. ง 4. ก 5. จ 6. ค 7. ก 8. ข 9. ง 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ง 3. ข 4. ข 5. ค 6. จ 7. ค 8. ง 9. ก 10. ง
ใบงานที่ 7.2
การสร้ างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์ )
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรประมวลผลหลักได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรประมวลผลหลักได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรประมวลผลหลักได้
3. บอกขั้นตอนการประกอบวงจรลงแผ่นวงจรพิมพ์เอนกประสงค์ได้
4. สร้าง (ประกอบ) วงจรประมวลผลหลักได้
5. ทดสอบการทางานของวงจรประมวลผลหลักได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์ใบงานที่ 7.1 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.2-2 ประกอบด้วย
2.1 สวิตช์กดติดปล่อยดับ 1 ตัว 2.6 ตัวต้านทาน 9 ขา 10 kΩ 1 ตัว
2.2 ตัวต้านทาน 10 kΩ ¼ W 1 ตัว 2.7 ไอซี AT89S52 1 ตัว
2.3 ตัวเก็บประจุ 10 uF/25 V 1 ตัว 2.8 คอนเน็คเตอร์ 8×2 4 ตัว
2.4 ตัวเก็บประจุ 22 pF 2 ตัว 2.9 คอนเน็คเตอร์ 6 ขา 1 ตัว
2.5 คริ สตอล 11.0592 MHz 1 ตัว 2.10 ซอกเก็ตไอซี 40 ขา 1 ตัว
3. หัวแร้ง 1 ตัว
4. ตะกัว่ บัดกรี 1 ม้วน
5. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรประมวลผลหลัก
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
176 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.2


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซี หลักของวงจรไมโครคอนโทรลเลอร์ คือ 5. ตัวต้านทานและตัวเก็บประจุที่ต่อเข้าขารี เซต
ข้อใด การทางานเป็ นวงจรชนิดใด
ก. LM741 ก. RC filter
ข. LM7805 ข. RC time constant
ค. AT89S52 ค. RC switching
ง. LM393 ง. RC differential
จ. 74HC573 จ. RC coupling
2. ซอกเก็ตที่ใช้กบั ไอซี ไมโครคอนโทรลเลอร์ มี 6. การจัดวางไอซี ในใบงานควรคานึงถึงสิ่ งใด
ขนาดกี่ขา ก. ตาแหน่งของพอร์ ตเชื่อมต่อภายนอก
ก. 14 ขา ข. การเชื่อมต่อกับชุดไฟเลี้ยง
ข. 16 ขา ค. การจัดวางของวงจรรี เซต
ค. 20 ขา ง. ตาแหน่งของคริ สตอล
ง. 28 ขา จ. คอนเน็คเตอร์สายโปรแกรม ISP
จ. 40 ขา 7. สิ่ งที่ไม่ควรทาในการบัดกรี คริ สตอลคือข้อใด
3. คริ สตอลที่ใช้มีค่าความถี่เท่าใด ก. จัดวางใกล้ขาไอซีมากที่สุด
ก. 4 MHz ข. ใช้ค วามร้ อ นในการบัด กรี ใ ห้ น้อ ย
ข. 8 MHz ที่สุด
ค. 11.0592 MHz ค. ใช้เวลาบัดกรี ให้ส้ นั ที่สุด
ง. 18.432 MHz ง. หลีกเลี่ยงการสะเทือน
จ. 24 MHz จ. ลอยขาให้สูงเพื่อระบายความร้อน
4. ตัวต้านทาน 9 ขา 10 kΩ ทาหน้าที่ใด 8. การทดสอบไฟเลี้ ยงไอซี ต้องวัดที่ ข าใดของ
ก. พูลอัพ ซอกเก็ต
ข. พูลดาวน์ ก. ขาที่ 31 เทียบกับขาที่ 20
ค. จากัดกระแส ข. ขาที่ 9 เทียบกับขาที่ 20
ง. ควบคุมการทางานของไอซี ค. ขาที่ 40 เทียบกับขาที่ 20
จ. เชื่อมต่อสัญญาณ ง. ขาที่ 20 เทียบกับขาที่ 10
จ. ขาที่ 16 เทียบกับขาที่ 8
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 177
9. ขา EA (ขาที่ 31) จะต้องมีค่าแรงดันเท่าใด
ก. 0 โวลต์
ข. 12 โวลต์
ค. 3.3 โวลต์
ง. เท่ากับขา 3 ของไอซีรักษาระดับแรงดัน
จ. ต่ากว่าค่าแหล่งจ่ายที่ต่อจากภายนอกเล็กน้อย
10. แรงดันที่ขารี เซต (ขาที่ 9) ขณะกดสวิตช์รีเซตจะต้องมีค่าแรงดันเท่าใด
ก. ประมาณ 5 โวลต์
ข. 0 โวลต์
ค. 12 โวลต์
ง. 3.3 โวลต์
จ. ต่ากว่าค่าแหล่งจ่ายที่ต่อจากภายนอกเล็กน้อย
178 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ไมโครคอนโทรลเลอร์ ที่ใช้ศึกษาในวิชานี้เป็ นไมโครคอนโทรลเลอร์ ตระกูล MCS-51 ที่สามารถ
โปรแกรมตนเองได้ใ นขณะที่ อยู่ในระบบที่ เรี ยกว่า ISP (In system programming) เป็ นผลิ ตภัณฑ์ของ
บริ ษ ัท แอตเมล (ATMEL) เบอร์ AT89S52 โดยวงจรหลัก เป็ นหัว ใจหลัก ของการศึ ก ษาการท างาน
ตลอดจนการศึกษาการเขียนโปรแกรมควบคุมการทางานของไมโครคอนโทรลเลอร์ วงจรประมวลผล
หลัก (ซึ่ งต่อไปนี้จะเรี ยกว่าวงจรไมโครคอนโทรลเลอร์ ) เป็ นดังรู ปที่ 7.2-1

รู ปที่ 7.2-1 วงจรไมโครคอนโทรลเลอร์

การทางานของวงจรมีดงั นี้ ไอซี U2 เป็ นไมโครคอนโทรลเลอร์ ซ่ ึ งเป็ นหัวใจของวงจรทั้งหมด


R3 เป็ นตัวต้านทานพูลอัพเพื่อให้แรงดันในแต่ละบิตของพอร์ ต 0 ที่มีค่าเป็ นลอจิก 1 ให้มีแรงดันเป็ น 5
โวลต์ R2, C3 และ SW1 จัดวงจรเป็ นวงจรรี เซต โดยที่ R2, C3 เป็ นวงจรรี เซตอัตโนมัติเมื่อวงจรได้รับ
ไฟเลี้ยง (Power on reset) X1, C4, C5 จัดวงจรเป็ นวงจรสัญญาณนาฬิกา

6. การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมในพื้นที่ส่วนที่เหลือจากวงจรภาคจ่ายไฟ
2. จัดวางคอนเน็คเตอร์ J5, J6 ชิดขอบแผ่นวงจรพิมพ์เอนกประสงค์เพื่อสะดวกในการเชื่อมต่อ
กับวงจรต่อพ่วงในใบงานถัด ๆ ไป
3. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.2-2
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 179

รู ปที่ 7.2-2 วงจรไมโครคอนโทรลเลอร์ ที่ใช้สร้าง

แนวทางการสร้ างวงจร ประกอบวงจรโดยให้ค อนเน็ ค เตอร์ พ อร์ ต 0 และพอร์ ต 2 ชิ ด ขอบ


แผ่นวงจรพิมพ์เอนกประสงค์เพื่อสะดวกในการต่อเชื่ อมกับวงจรต่อพ่วงซึ่ งจะได้ศึกษาในใบงานถัด ๆ ไป
7805
103

รู ปที่ 7.2-3 แนวการจัดวางและแนวการบัดกรี ของวงจรไมโครคอนโทรลเลอร์


180 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. การทดสอบการทางานของวงจร
1. ทดสอบวงจรขณะที่ยงั ไม่ใส่ ไอซี AT89S52 ลงในแผงวงจร
2. ตรวจสอบการเชื่อมต่อโดยใช้มลั ติมิเตอร์ วดั ความต่อเนื่องตรวจสอบกับวงจรรู ปที่ 7.2-1
3. ดาเนินการตรวจสอบจุดต่าง ๆ ตามตารางที่ 7.2-1

ตารางที่ 7.2-1 ตารางวัดความต่อเนื่องเพื่อตรวจสอบวงจร


ผลการวัดความต่อเนื่อง
ลาดับ จุดวัด หมายเหตุ
วัดจริ ง ค่าที่ควรจะได้
1 VCC (40) 7805 (3) ถึงกัน -
2 GND (20) 7805 (2) ถึงกัน -
3 RST (9) VCC (40) ถึงกัน กดสวิตช์รีเซต
4 RST (9) VCC (40) ไม่ถึงกัน ปล่อยสวิตช์รีเซต
5 EA (31) VCC (40) ถึงกัน -
6 MOSI (6) J2 (1)
7 MISO (7) J2 (2)
8 SCK (8) J2 (3)
ถึงกัน
9 RST (9) J2 (4)
10 GND (20) J2 (5)
11 GND (20) J2 (6)

4. ตรวจสอบแรงดันโดยวัดแรงดันขณะที่ป้อนแหล่งจ่ายเข้าวงจรตามตารางที่ 7.2-2

ตารางที่ 7.2-2 ตารางวัดแรงดันเพื่อตรวจสอบวงจร


ผลการวัด
ลาดับ จุดวัด หมายเหตุ
วัดจริ ง ค่าที่ควรจะได้
1 VCC (40) GND (20) แรงดันประมาณ 5 V -
2 RST (9) GND (20) แรงดันประมาณ 5 V กดสวิตช์รีเซต
3 RST (9) GND (20) แรงดัน 0 V ปล่อยสวิตช์รีเซต
4 EA (31) GND (20) แรงดันประมาณ 5 V -

5. หากผลการตรวจสอบไม่ถูกต้องให้ทาการแก้ไขจนได้ผลที่ถูกต้อง
6. ตรวจสอบการต่อคริ สตอลด้วยสายตา โดยการต่อให้ต่อใกล้ขาไอซี ให้มากที่สุด
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 181

8. สรุปผลการปฏิบัติงาน
182 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.2


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซี หลักของวงจรไมโครคอนโทรลเลอร์ คือ 5. ตัวต้านทานและตัวเก็บประจุที่ต่อเข้าขารี เซต
ข้อใด การทางานเป็ นวงจรชนิดใด
ก. LM741 ก. RC filter
ข. LM7805 ข. RC time constant
ค. LM393 ค. RC switching
ง. 74HC573 ง. RC differential
จ. AT89S52 จ. RC coupling
2. ซอกเก็ตที่ใช้กบั ไอซี ไมโครคอนโทรลเลอร์ มี 6. การจัดวางไอซี ในใบงานควรคานึงถึงสิ่ งใด
ขนาดกี่ขา ก. การเชื่อมต่อกับชุดไฟเลี้ยง
ก. 28 ขา ข. การจัดวางของวงจรรี เซต
ข. 40 ขา ค. ตาแหน่งของคริ สตอล
ค. 14 ขา ง. ตาแหน่งของพอร์ ตเชื่อมต่อภายนอก
ง. 16 ขา จ. คอนเน็คเตอร์สายโปรแกรม ISP
จ. 20 ขา 7. สิ่ งที่ไม่ควรทาในการบัดกรี คริ สตอลคือข้อใด
3. คริ สตอลที่ใช้มีค่าความถี่เท่าใด ก. ใช้เวลาบัดกรี ให้ส้ นั ที่สุด
ก. 4 MHz ข. หลีกเลี่ยงการสะเทือน
ข. 8 MHz ค. จัดวางใกล้ขาไอซีมากที่สุด
ค. 11.0592 MHz ง. ใช้ค วามร้ อ นในการบัด กรี ใ ห้ น้อ ย
ง. 18.432 MHz ที่สุด
จ. 24 MHz จ. ลอยขาให้สูงเพื่อระบายความร้อน
4. ตัวต้านทาน 9 ขา 10 kΩ ทาหน้าที่ใด 8. การทดสอบไฟเลี้ ยงไอซี ต้องวัดที่ ข าใดของ
ก. จากัดกระแส ซอกเก็ต
ข. ควบคุมการทางานของไอซี ก. ขาที่ 31 เทียบกับขาที่ 20
ค. เชื่อมต่อสัญญาณ ข. ขาที่ 40 เทียบกับขาที่ 20
ง. พูลอัพ ค. ขาที่ 9 เทียบกับขาที่ 20
จ. พูลดาวน์ ง. ขาที่ 20 เทียบกับขาที่ 10
จ. ขาที่ 16 เทียบกับขาที่ 8
ใบงานที่ 7.2 การสร้างวงจรประมวลผลหลัก (วงจรไมโครคอนโทรลเลอร์) 183
9. ขา EA (ขาที่ 31) จะต้องมีค่าแรงดันเท่าใด
ก. 0 โวลต์
ข. 12 โวลต์
ค. 3.3 โวลต์
ง. เท่ากับขา 3 ของไอซีรักษาระดับแรงดัน
จ. ต่ากว่าค่าแหล่งจ่ายที่ต่อจากภายนอกเล็กน้อย
10. แรงดันที่ขารี เซต (ขาที่ 9) ขณะกดสวิตช์รีเซตจะต้องมีค่าแรงดันเท่าใด
ก. 0 โวลต์
ข. ต่ากว่าค่าแหล่งจ่ายที่ต่อจากภายนอกเล็กน้อย
ค. ประมาณ 5 โวลต์
ง. 12 โวลต์
จ. 3.3 โวลต์

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. จ 3. ค 4. ก 5. ข 6. ก 7. จ 8. ค 9. ง 10. ก

เฉลยแบบทดสอบหลังเรี ยน
1. จ 2. ข 3. ค 4. ง 5. ข 6. ง 7. จ 8. ข 9. ง 10. ค
ใบงานที่ 7.3
การสร้ างวงจรโปรแกรมข้ อมูลลงไมโครคอนโทรลเลอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ ได้
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ ได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ ได้
3. บอกขั้นตอนการประกอบวงจรได้
4. สร้าง (ประกอบ) วงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ ได้
5. ทดสอบการทางานของวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ ได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 1 แผ่น
2. อุปกรณ์อิเล็กทรอนิกส์ตามรู ปที่ 7.3-2 ประกอบด้วย
2.1 สายแลนยาว 50 ซ.ม. 1 เส้น 2.4 คอนเน็คเตอร์ 6 ขา 1 ตัว
2.2 คอนเน็คเตอร์ DB25 ตัวผู ้ 1 ตัว 2.5 ไส้คอนเน็คเตอร์ 6 ตัว
2.3 ฝาคอนเน็คเตอร์ DB25 1 ชุด 2.6 ตัวต้านทาน 100 Ω ¼ W 4 ตัว
3. หัวแร้ง 1 ตัว
4. ตะกัว่ บัดกรี 1 ม้วน
5. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
186 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.3


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. คอนเน็คเตอร์ ของสาย ISP ที่ต่อเข้ากับเครื่ อง 5. สาย ISP ในใบงานใช้สายอะไรมาใช้งาน
คอมพิวเตอร์ มีขนาดเท่าใด ก. สายโทรศัพท์ภายใน
ก. 6 ขา ข. สายแลน
ข. 9 ขา ค. สาย AV
ค. 15 ขา ง. สายโคแอคเชียล
ง. 25 ขา จ. สายยูเอสบี
จ. 36 ขา 6. ความยาวของสาย ISP ควรมีขนาดเท่าใด
2. ค อ น เ น็ ค เ ต อ ร์ ข อ ง ส า ย ISP ฝั่ ง เ ค รื่ อ ง ก. ไม่เกิน 10 เซนติเมตร
คอมพิวเตอร์เป็ นชนิดใด ข. ไม่เกิน 30 เซนติเมตร
ก. DB25 male ค. ไม่เกิน 60 เซนติเมตร
ข. DB25 female ง. ไม่ต่ากว่า 60 เซนติเมตร
ค. DB9 male จ. ไม่ต่ากว่า 80 เซนติเมตร
ง. DB9 female 7. ตัวต้านทานในสาย ISP ทาหน้าที่ใด
จ. DB15 female ก. จากัดกระแส
3. คอมพิ ว เตอร์ ที่ ส ามารถใช้ ง านกับ สาย ISP ข. ป้ องกันอันตรายของพอร์ ต
ต้องมีคุณสมบัติตามข้อใด คอมพิวเตอร์
ก. คอมพิวเตอร์ ต้ งั โต๊ะ ค. ป้ องกันการลัดวงจร
ข. คอมพิวเตอร์โน้ตบุค ง. เชื่อมต่อสัญญาณ
ค. คอมพิ ว เตอร์ ที่ มี พ อร์ ต เครื่ อ งพิ ม พ์ จ. เพิ่มความสวยงาม
แบบขนาน 8. การใส่ ท่อหดที่ขาตัวต้านทานเพื่ออะไร
ง. คอมพิวเตอร์ที่มีพอร์ตอนุกรม ก. ป้ องกันอันตรายของพอร์ ต
จ. คอมพิวเตอร์ที่มีพอร์ตยูเอสบี คอมพิวเตอร์
4. จานวนสาย ISP (รวมกราวด์) ใช้กี่เส้น ข. จากัดกระแส
ก. 3 เส้น ค. เชื่อมต่อสัญญาณ
ข. 4 เส้น ง. เพิ่มความสวยงาม
ค. 5 เส้น จ. ป้ องกันการลัดวงจร
ง. 7 เส้น
จ. 8 เส้น
ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 187
9. สิ่ งแรกสาหรับการต่อคอนเน็คเตอร์ ฝั่งไมโครคอนโทรลเลอร์ คือข้อใด
ก. เชื่อมต่อไส้คอนเน็คเตอร์ เข้ากับสายก่อน
ข. ใส่ ไส้คอนเน็คเตอร์ ในปลอกก่อนเชื่อมต่อสาย
ค. ต่อตัวต้านทานก่อน
ง. ทาสิ่ งใดก่อนก็ได้
จ. เสี ยบหัวแร้ง
10. โปรแกรมที่ใช้ในการทดสอบสายคือโปรแกรมใด
ก. Keil C51 uVsion
ข. Proteus
ค. Protel99SE
ง. ISP3.0a Programmer
จ. NI MultiSim
188 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ไมโครคอนโทรลเลอร์ เบอร์ AT89S52 เป็ นไมโครคอนโทรลเลอร์ที่สามารถโปรแกรมตนเองได้
ขณะที่อยู่ในระบบที่เรี ยกว่าเรี ยกว่า ISP (In system programming) สาหรับการโปรแกรมตนเองจะต้อง
ผ่า นวงจรโปรแกรมที่ เรี ยกว่า STK200 เป็ นวงจรที่ ใ ช้โปรแกรมข้อมู ล ลงไมโครคอนโทรลเลอร์ โดย
เชื่ อมต่อผ่านทางพอร์ ตขนานของคอมพิวเตอร์ หรื อที่เรี ยกว่าพอร์ ตเครื่ องพิมพ์ขนาด 25 ขา (LPT1) ดังรู ป
ที่ 7.3-1

รู ปที่ 7.3-1 วงจรเชื่ อมต่อคอมพิวเตอร์ สาหรับโปรแกรมตัวเองแบบ STK200

การท างานของวงจร ตัวต้านทาน R4-R7 ใส่ ไว้เพื่อป้ องกันอันตรายอันอาจขึ้ นกับพอร์ ตของ


เครื่ องคอมพิวเตอร์

6. การดาเนินการสร้ างวงจร
เชื่ อมต่อสายจากคอนเน็คเตอร์ DB25 (คอนเน็คเตอร์ ที่ใช้ต่อกับพอร์ ตเครื่ องพิมพ์) ในส่ วนของ
สายสัญญาณใช้ตวั ต้านทาน R4-R7 ต่ออนุกรมเข้าวงจรหลักผ่านทางคอนเน็คเตอร์ J2 ดังรู ปที่ 7.3-2

รู ปที่ 7.3-2 แนวการจัดวางและแนวการบัดกรี ของวงจรภาคจ่ายไฟ


ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 189
แนวทางการสร้างวงจร สายไฟในเชื่ อมต่อใช้สายแลนที่มีความยาว 50 เซนติเมตร (หากต้องการ
ยาวกว่านี้ไม่ควรเกิน 60 เซนติเมตรจะส่ งผลให้การโปรแกรมลงไมโครคอนโทรลเลอร์ ลม้ เหลวได้) และ
ตรงจุดบัดกรี ตวั ต้านทานกับสาย LAN ให้ใช้ท่อหดเพื่อป้ องกันการลัดวงจร

7. การทดสอบการทางานของวงจร
การสร้างวงจรโปรแกรมข้อมูลลงชิพไอซี จะต้องดาเนิ นการทดสอบการใช้งานของวงจรด้วยกันสอง
ขั้นตอนคือ

ขั้นตอนที่หนึ่ง ทดสอบโดยการวัดค่าความต้านทานของสายระหว่างคอนเน็คเตอร์ ด้านที่ เชื่ อมต่อกับ


พอร์ ตเครื่ องพิมพ์กบั คอนเน็คเตอร์ ที่ต่อกับวงจรซี พียหู ลักโดยวัดค่าตามตารางที่ 7.3-1

ตารางที่ 7.3-1 ตารางบันทึกผลการวัดค่าความต้านทานของการเชื่อมต่อ


จุดที่วดั ความต้านทาน ค่าที่ควรจะได้ ค่าที่วดั ได้
1. ขา 2 (DB25) กับขา 12 (DB25) 0Ω
2. ขา 3 (DB25) กับขา 11 (DB25) 0Ω
3. ขา 6 (DB25) กับขา 4 (J2) 100 Ω
4. ขา 7 (DB25) กับขา 6 (J2) 100 Ω
5. ขา 9 (DB25) กับขา 3 (J2) 100 Ω
6. ขา 10 (DB25) กับขา 5 (J2) 100 Ω
7. ขา 24,25 (DB25) กับขา 1,2 (J2) 0Ω

หากค่าที่วดั ได้ไม่ใกล้เคียงกับค่าที่ควรจะได้ให้ทาการตรวจสอบและแก้ไขวงจรใหม่จนกว่าจะ
ใกล้เคียงกับค่าที่ควรจะวัดได้

ขั้นตอนที่สอง ทดสอบวงจรโปรแกรมลงไมโครคอนโทรลเลอร์ ดว้ ยการวิธีทดลองการโปรแกรมข้อมูล


ลงตัวชิพไมโครคอนโทรลเลอร์ เครื่ องมือที่ใช้คือโปรแกรม ISP3.0a โดยมีข้ นั ตอนการทดสอบดังนี้
1. ต่อสายโปรแกรมตัวเองเข้าพอร์ ต LPT ของคอมพิวเตอร์
2. เชื่อมต่อปลายสาย STK200 เข้ายังคอนเน็คเตอร์ J2 บนแผงวงจรหลัก
3. ป้อนแรงดันให้แผงวงจรหลัก (เสี ยบแหล่งจ่ายไฟตรงภายนอกเข้าที่ดีซีคอนเน็คเตอร์)
4. เรี ยกใช้โปรแกรม ISP3.0a พร้อมเลือกเบอร์ไมโครคอนโทรลเลอร์เป็ นเบอร์ 89S52
5. ทดสอบการอ่านข้อมูลจากหน่วยความจาเก็บโปรแกรมโดยกดปุ่ ม Read ผลลัพธ์ที่ได้จะมีได้
2 กรณี คือ
190 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
a. ติดต่อได้จะปรากฏหน้าต่างดังรู ปที่ 7.3-3 (a)
b. ติดต่อไม่ได้จะปรากฏหน้าต่างดังรู ปที่ 7.3-3 (a) ดาเนิ นการตรวจสอบการทาสาย
โปรแกรมตัวเอง STK200 และตรวจสอบวงจรไมโครคอนโทรลเลอร์ ใหม่อีกครั้ง

(a) (b)
รู ปที่ 7.3-3 (a) ผลเมื่อติดต่อได้ (b) ผลเมื่อติดต่อไม่ได้

6. ทดสอบการเขียนข้อมูลจากหน่วยความจาเก็บโปรแกรม (ทดสอบเมื่อสามารถอ่านข้อมูลจาก
หน่วยความจาเก็บโปรแกรมในขั้นตอนที่ 5 ได้แล้ว)
a. กดปุ่ ม Disp Buffer จะปรากฏหน้าต่างดังรู ปที่ 7.3-4

รู ปที่ 7.3-4 ข้อมูลในบัฟเฟอร์ ที่ได้จากการกดปุ่ ม Disp Buffer

b. กดปุ่ ม Fill Buffer เพื่อทาการป้อนข้อมูล 00 ตั้งแต่แอดเดรส 0000-001F โดยตรงดัง


รู ปที่ 7.3-5

รู ปที่ 7.3-5 หน้าต่างการป้ อนข้อมูลโดยตรงลงในบัฟเฟอร์


ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 191
c. ผลการป้อนข้อมูลจะเป็ นดังรู ปที่ 7.3-6 แล้วกดปุ่ ม Close

รู ปที่ 7.3-6 ผลจากการป้อนข้อมูลโดยตรงลงในบัฟเฟอร์ (สองแถวแรกจะเป็ น 00)

d. กดปุ่ ม Write เพื่อทาการโปรแกรมข้อมูลที่อยูใ่ นบัฟเฟอร์ ลงในหน่วยความจาเก็บ


โปรแกรม ผลลัพธ์ที่ได้จะมีได้ 3 กรณี คือ
i. สามารถโปรแกรมได้จะปรากฏหน้าต่างดังรู ปที่ 7.3-7 (a) และสาเร็ จเมื่อ
สิ้ นสุ ดจะปรากฏหน้าต่างดังรู ปที่ 7.3-7 (b)

(a) (b)
รู ปที่ 7.3-7 (a) สามารถโปรแกรมได้ (b) เขียนโปรแกรมสาเร็ จ

ii. สามารถโปรแกรมได้จะปรากฏหน้าต่างดังรู ปที่ 7.3-8 (a) แต่ไม่สาเร็ จจะ


ปรากฏหน้ า ต่ า งดั ง รู ปที่ 7.3-8 (b) ด าเนิ น การตรวจสอบการท าสาย
โปรแกรมตัวเอง STK200 และตรวจสอบวงจรไมโครคอนโทรลเลอร์ ใหม่
อีกครั้งหากพอร์ต 2 เชื่อมต่อวงจรใดอยูใ่ ห้ปลดวงจรนั้นออกก่อน

(a) (b)
รู ปที่ 7.3-8 (a) สามารถโปรแกรมได้ (b) เขียนโปรแกรมไม่สาเร็ จ
192 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
iii. ติ ด ต่ อ เพื่ อ ท าการโปรแกรมไม่ ไ ด้ จ ะปรากฏหน้ า ต่ า งดั ง รู ปที่ 7.3-9
ดาเนินการตรวจสอบการทาสายโปรแกรมตัวเอง STK200 และตรวจสอบ
วงจรไมโครคอนโทรลเลอร์ ใหม่อีกครั้ง

รู ปที่ 7.3-9 ไม่สามารถติดต่อเพื่อทาการโปรแกรมได้

8. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.3 การสร้างวงจรโปรแกรมข้อมูลลงไมโครคอนโทรลเลอร์ 193

แบบทดสอบหลังเรียน ใบงานที่ 7.3


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. คอนเน็คเตอร์ ของสาย ISP ที่ต่อเข้ากับเครื่ อง จ. 8 เส้น
คอมพิวเตอร์ มีขนาดเท่าใด 5. สาย ISP ในใบงานใช้สายอะไรมาใช้งาน
ก. 9 ขา ก. สาย AV
ข. 6 ขา ข. สายโทรศัพท์ภายใน
ค. 15 ขา ค. สายโคแอคเชียล
ง. 25 ขา ง. สายแลน
จ. 36 ขา จ. สายยูเอสบี
2. คอนเน็คเตอร์ของสาย ISP ฝั่งเครื่ อง 6. ความยาวของสาย ISP ควรมีขนาดเท่าใด
คอมพิวเตอร์เป็ นชนิดใด ก. ไม่เกิน 10 เซนติเมตร
ก. DB9 male ข. ไม่เกิน 30 เซนติเมตร
ข. DB9 female ค. ไม่เกิน 60 เซนติเมตร
ค. DB15 female ง. ไม่ต่ากว่า 60 เซนติเมตร
ง. DB25 male จ. ไม่ต่ากว่า 80 เซนติเมตร
จ. DB25 female 7. ตัวต้านทานในสาย ISP ทาหน้าที่ใด
3. คอมพิวเตอร์ ที่สามารถใช้งานกับสาย ISP ก. จากัดกระแส
ต้องมีคุณสมบัติตามใด ข. ป้ องกันอันตรายของพอร์ ต
ก. คอมพิวเตอร์ที่มีพอร์ตอนุกรม คอมพิวเตอร์
ข. คอมพิวเตอร์ที่มีพอร์ตยูเอสบี ค. ป้ องกันการลัดวงจร
ค. คอมพิวเตอร์โน้ตบุค ง. เพิ่มความสวยงาม
ง. คอมพิวเตอร์ ต้ งั โต๊ะ จ. เชื่อมต่อสัญญาณ
จ. คอมพิ ว เตอร์ ที่ มี พ อร์ ต เครื่ อ งพิ ม พ์ 8. การใส่ ท่อหดที่ขาตัวต้านทานเพื่ออะไร
แบบขนาน ก. ป้ องกันอันตรายของพอร์ ต
4. จานวนสาย ISP (รวมกราวด์) ใช้กี่เส้น คอมพิวเตอร์
ก. 3 เส้น ข. จากัดกระแส
ข. 5 เส้น ค. ป้ องกันการลัดวงจร
ค. 4 เส้น ง. เชื่อมต่อสัญญาณ
ง. 7 เส้น จ. เพิม่ ความสวยงาม
194 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. สิ่ งแรกสาหรับการต่อคอนเน็คเตอร์ ฝั่งไมโครคอนโทรลเลอร์ คือข้อใด
ก. ต่อตัวต้านทานก่อน
ข. ทาสิ่ งใดก่อนก็ได้
ค. ใส่ ไส้คอนเน็คเตอร์ ในปลอกก่อนเชื่อมต่อสาย
ง. เชื่อมต่อไส้คอนเน็คเตอร์ เข้ากับสายก่อน
จ. เสี ยบหัวแร้ง
10. โปรแกรมที่ใช้ในการทดสอบสายคือโปรแกรมใด
ก. Keil C51 uVsion
ข. Proteus
ค. Protel99SE
ง. NI MultiSim
จ. ISP3.0a Programmer

เฉลยแบบทดสอบก่อนเรี ยน
1. ง 2. ก 3. ค 4. ค 5. ข 6. ค 7. ข 8. จ 9. ก 10. ง

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ง 3. จ 4. ข 5. ง 6. ค 7. ข 8. ค 9. ง 10. จ
ใบงานที่ 7.4
การสร้ างวงจรเอาต์ พตุ พอร์ ต
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรต่อพ่วงที่ทาหน้าที่เป็ นวงจรเอาต์พุตพอร์ต
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรเอาต์พุตพอร์ตได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรเอาต์พุตพอร์ตได้
3. บอกขั้นตอนการประกอบวงจรเอาต์พุตพอร์ตได้
4. สร้าง (ประกอบ) วงจรเอาต์พุตพอร์ตได้
5. ทดสอบการทางานของวงจรเอาต์พุตพอร์ตได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ขนาด 8 ซ.ม. × 12 ซ.ม. 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.4-7(a) ประกอบด้วย
3.1 ไอซี 74HC573 1 ตัว 3.4 ซอกเก็ตไอซี 20 ขา 1 ตัว
3.2 LED 8 ตัว 3.5 คอนเน็คเตอร์ 2×2 2 ตัว
3.3 ตัวต้านทาน 180 Ω ¼ W 8 ตัว 3.6 คอนเน็คเตอร์ 8×2 1 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรเอาต์พุตพอร์ต
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
196 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.4


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซีที่ใช้ในวงจรเอาต์พุตพอร์ตใช้เบอร์ใด 5. LED ในวงจรเอาต์พุตพอร์ ตมีกี่ตวั
ก. LM7805 ก. 1 ตัว
ข. 74HC573 ข. 2 ตัว
ค. AT89S52 ค. 5 ตัว
ง. LM741 ง. 6 ตัว
จ. LM339 จ. 8 ตัว
2. ไอซีที่ใช้ในวงจรเอาต์พุตพอร์ตทาหน้าที่ใด 6. ข้อที่ตอ้ งคานึงถึงในการประกอบวงจร
ก. ขยายแรงดัน เอาต์พุตพอร์ตคือข้อใด
ข. ขยายกระแส ก. จัดวางคอนเน็คเตอร์พอร์ตให้ตรงกับคอน
ค. ขยายสัญญาณ เน็คเตอร์วงจรไมโครคอนโทรลเลอร์
ง. ขับกระแสให้กบั LED ข. ตาแหน่งของ ไฟเลี้ยงวงจร
จ. ป้ องกันไอซี ไมโครคอนโทรลเลอร์ ค. ตาแหน่งของ LED
เสี ยหาย ง. ตาแหน่งของไอซี
3. ตัวต้านทานในวงจรเอาต์พุตพอร์ ตมีกี่ตวั จ. ตาแหน่งของตัวต้านทาน
ก. 1 ตัว 7. เมื่อประกอบวงจรเสร็ จทดสอบการเชื่ อมต่อ
ข. 2 ตัว ขากราวด์ของไอซี จะต่อกับขาใด
ค. 5 ตัว ก. 1
ง. 6 ตัว ข. 9
จ. 8 ตัว ค. 15
4. ตัวต้านทานในวงจรเอาต์พุตพอร์ ตทาหน้าที่ ง. 10
ใด จ. 20
ก. จากัดแรงดันให้กบั LED 8. การวัดค่าแรงดันไฟเลี้ ยงไอซี บฟั เฟอร์ จะต้อง
ข. จากัดกระแสให้กบั LED วัดระหว่างขาใด
ค. แบ่งแรงดัน ก. ขา 1 กับ ขา 10
ง. แบ่งกระแส ข. ขา 1 กับ ขา 20
จ. ไบอัสไอซี ค. ขา 9 กับ ขา 10
ง. ขา 10 กับ ขา 20
จ. ขา 15 กับ ขา 20
ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 197
9. แรงดันไฟเลี้ยงไอซี ควรมีค่ากี่โวลต์
ก. ประมาณ 3.3 โวลต์
ข. ประมาณ 5 โวลต์
ค. ประมาณ 9 โวลต์
ง. ประมาณ 12 โวลต์
จ. ประมาณ 15 โวลต์
10. เมื่อเชื่อมต่อกับวงจรไมโครคอนโทรลเลอร์ แล้วกดปุ่ มรี เซตผลจะเป็ นเช่นใด
ก. LED จะติดสว่างทุกตัว
ข. LED จะดับทุกตัว
ค. LED จะติดสว่างและดับสลับกัน
ง. ไฟเลี้ยงไอซี ขบั จะลดลง
จ. ไม่มีอะไรเกิดขึ้น
198 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ส่ วนที่สาคัญมากของระบบไมโครคอนโทรลเลอร์ ทุกชนิ ดส่ วนหนึ่ งคือพอร์ ต ที่สามารถส่ งค่า
ลอจิกออกไปยังอุปกรณ์ เชื่ อมต่อภายนอกได้ เพื่อใช้ในการควบคุมอุปกรณ์ ที่เชื่ อมต่อภายนอกตามที่ได้
ออกแบบไว้ สาหรับไมโครคอนโทรลเลอร์ ตระกูล MCS-51 ชนิ ดที่มีขา 40 ขาจะมีพอร์ ตให้ใช้งาน 4
พอร์ตและชนิด 20 ขามีพอร์ตให้ใช้งาน 2 พอร์ต โดยโครงสร้างของพอร์ตเป็ นดังรู ป 7.4-1

Read ADDR/Data Read VCC


Latch VCC Latch
Ctrl
Internal
Pull-up
P0.x P1.x
Int. bus D Q Pin Int. bus D Q Pin

Write to CL Q Write to CL Q
Latch Latch

Read Read
Pin Pin

(a) แสดงโครงสร้างพอร์ต 0 (b) แสดงโครงสร้างพอร์ต 1

Read VCC Read


Latch ADDR Latch VCC
Ctrl
Alternate
O/P Function
P2.x P3.x
Int. bus D Q Pin Int. bus D Q Pin
Write to CL Q Write to CL Q
Latch Latch

Read Read
Pin Pin Alternate
I/P Function
(c) แสดงโครงสร้างพอร์ต 2 (d) แสดงโครงสร้างพอร์ต 3
รู ปที่ 7.4-1 แสดงโครงสร้างพอร์ตของไมโครคอนโทรลเลอร์ MCS-51

พอร์ ตของไมโครคอนโทรลเลอร์ขนาด 40 ขาไม่สามารถจ่ายกระแสปริ มาณสู งได้ จึงไม่สามารถ


ขับโหลดโดยตรงได้ ดังนั้นเมื่อนาพอร์ ตมาใช้งานเป็ นเอาต์พุตพอร์ ต จึงจาเป็ นต้องมีอุปกรณ์ ช่วยขับที่
เรี ยกว่า บัฟเฟอร์ (Buffer) สาหรับใบงานนี้นาพอร์ ตมาใช้งานเป็ นเอาต์พุตพอร์ ตโดยขับแอลอีดี

การใช้ งานแอลอีดี (LED)


แอลอีดี ( LED ) เป็ นอุปกรณ์ อิเล็กทรอนิ กส์ ชนิ ดหนึ่ งที่สร้ างมาจากสารกึ่งตัวนา ซึ่ งแสงสี ที่ได้
จาก LED เป็ นแสงสี ที่มีคลื่ นความถี่ เดี ย ว โดยเกิ ดจากการใช้ชนิ ดของสารกึ่ ง ตัวนา LED สี แดง เขีย ว
ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 199
เหลือง เทคโนโลยีการผลิต LED มีมาตั้งแต่ประมาณปี ค.ศ. 1960 LED ทาจากสารกึ่งตัวนาที่หลากหลาย
วัสดุและมีการเจือสารที่แตกต่างกันจาพวก แกลเลียม อินเดียม สารหนู ไนโตรเจน และสารเรื องแสง1 เมื่อ
นามาทาเป็ นสารกึ่ งตัวนาชนิ ด N และ P แล้วนามาต่อกันเหมือนไดโอดจะมีคุณสมบัติคล้ายกับไดโอด
กล่าวคือ เมื่อจัดวงจรให้ LED รับไบอัสตรงจะมีกระแสไหลผ่านได้ แต่เมื่อจัดวงจรให้รับไบอัสกลับจะ
ไม่มีกระไหลผ่าน เพียงแต่คุณสมบัติที่ต่างกันคือเมื่อจ่ายกระแสให้ไหลผ่าน LED ในขณะไบอัสตรง จะ
ทาให้เกิดพลังงานขึ้นในรู ปพลังงานโปรตอนผลคือเกิดแสงสว่างนัน่ เอง ส่ วนไดโอดทัว่ ไปพลังงานจะอยู่
ในรู ปของพลังงานความร้อน คุณสมบัติของ LED ขณะไบอัสตรงคือ
1. แรงดันตกคร่ อมประมาณ 2 โวลต์ (สี แดง เขียว เหลือง หากใช้สีอื่นให้ดูค่าในดาต้าชี ต)
2. กระแสประมาณ 10-25 มิลลิแอมป์
กระแสที่ไหลผ่าน LED จะเป็ นปฏิภาคโดยตรงกับแรงดันตกคร่ อมและความสว่าง กล่าวคือถ้าจ่ายกระแส
ต่ าแรงดันตกคร่ อมจะต่ าและความสว่างจะน้อยลงอายุการใช้งานนาน แต่ถ้าจ่ายกระแสสู งแรงดันตก
คร่ อมจะสู งขึ้นความสว่างก็มากขึ้น อายุการใช้งานสั้น ( LED สี ขาวและสี น้ าเงิ นจะใช้กระแสสู งกว่าใน
การไบอัส และแรงดันตกคร่ อมจะสู งกว่าทั้งนี้ ก่อนใช้งานให้นกั ศึกษาเปิ ดดูรายละเอียดในดาต้าชี ตของ
LED ที่นามาใช้งาน) สาหรับวงจรไบอัส LED เป็ นดังรู ปที่ 7.4-2

จากรู ปที่ 7.4-2 เมื่อใช้กฎแรงดันของเคอร์ชอฟฟ์ (KVL) จะได้วา่


VCC = VR+V LED
ถ้าใช้แหล่งจ่าย 5 โวลต์จะได้สมการ (แรงดันตกคร่ อม LED 2 โวลต์)
5 = V R+ 2
VR = 5-2
รู ปที่ 7.4-2 แสดงวงจรไบอัส = 3 โวลต์
LED เบื้องต้น

กระแสที่ไหลผ่าน LED เป็ นกระแสที่ไหลผ่านตัวต้านทานเช่นเดียวกันจะมีขนาดเท่ากัน (ตามกฎ


วงจรอนุกรม) คือใช้กระแสไหลผ่าน LED 15 มิลลิแอมป์ ดังนั้นตัวต้านทานจึงมีค่าเท่ากับ
VR
R =
I
3
=
15 103
= 200 โอห์ม

U.S. DOE ENERGY STAR, 2008


1
200 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

วงจรขับ LED
จากที่ได้กล่าวมาแล้วในข้างต้นว่า พอร์ ตของไมโครคอนโทรลเลอร์ MCS-51 ขนาด 40 ขาจะไม่
สามารถจ่ายกระแสให้กบั โหลดโดยตรงได้ ดังนั้นเมื่อนาพอร์ ตมาใช้งานเป็ นเอาต์พุตพอร์ต คือเป็ นพอร์ ต
สาหรับจ่ายกระแสให้กบั โหลด จาเป็ นต้องใช้อุปกรณ์ช่วยขับหรื อที่เรี ยกว่า บัฟเฟอร์ (Buffer) ซึ่ งการใช้
บัฟเฟอร์ ที่ง่ายต่อการใช้งานคื อใช้ไอซี บฟั เฟอร์ เบอร์ 74HC541 หรื อเบอร์ 74HC573 โดยไอซี บฟั เฟอร์
เบอร์ 74HC541 เป็ นไอซี Tri-stage และเบอร์ 74HC573 เป็ นไอซี D-Flip flop ซึ่ งทั้ง 2 เบอร์ สามารถใช้
งานได้เช่นกัน แต่ในโปรแกรมจาลองการทางาน Proteus ไอซี บฟั เฟอร์ 74HC573 มีโมเดลในการจาลอง
การพฤติกรรม แต่ 74HC541 ไม่มี เนื่องจากภายในของไอซี บฟั เฟอร์ มีวงจรมากมาย เมื่อจ่ายกระแสให้แก่
โหลดแรงดันที่ออกจึงลดลง ดังนั้นต้องลดค่าความต้านทานลงเล็กน้อยเพื่อให้ความสว่างยังคงเดิม โดย
วงจรขับเป็ นดังรู ปที่ 7.4-3 และรู ปที่7.4-4

รู ปที่ 7.4-3 แสดงวงจรขับที่ใช้ไอซีเบอร์ 74HC541

รู ปที่ 7.4-4 แสดงวงจรขับที่ใช้ไอซีเบอร์ 74HC573


ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 201

6. การดาเนินการสร้ างวงจร
เพื่อให้นกั ศึกษาสามารถประยุกต์ใช้งานได้ จาเป็ นต้องมีการทดลองจากวงจรใช้งานจริ งอุปกรณ์
จริ งและต่อวงจรจริ ง ใบงานนี้เป็ นการสร้างวงจรต่อพ่วงที่เป็ นวงจรขับ LED ซึ่ งเป็ นวงจรเชื่อมต่อสาหรับ
ใช้งานพอร์ต 0 เป็ นเอาต์พุตพอร์ตโดยใช้ขบั LED วงจรสมบูรณ์เป็ นดังรู ปที่ 7.4-5

รู ปที่ 7.4-5 วงจรวงจรสมบูรณ์ที่ใช้ทาการทดลอง

วงจรขับ LED เป็ นวงจรที่ตอ้ งใช้แผ่นวงจรพิมพ์คนละแผ่นกับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.4-6

รู ปที่ 7.4-6 ส่ วนของวงจรหลักและส่ วนของวงจรขับ LED ซึ่ งแยกกับคนละแผ่นวงจรพิมพ์


202 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ประกอบวงจรเฉพาะส่ วนของวงจรขับ LED ลงแผ่นวงจรพิมพ์เอนกประสงค์แผ่นใหม่ จัดวาง
ตาแหน่ งของคอนเน็คเตอร์ ให้ตรงกับแผ่นวงจรพิมพ์ของวงจรจรหลักในใบงานที่ 7.2 โดยจะต้องเว้น
พื้นที่สาหรับวงจรอื่นในการทดลองในใบงานต่อ ๆ ไป แนวทางการวางตาแหน่งตลอดจนแนวการบัดกรี
วงจรขับ LED และแนวทางจัดวางเป็ นดังรู ปที่ 7.4-7

รู ปที่ 7.4-7 (a) วงจรขับ LED (b) แนวทางจัดวางบนแผ่นวงจรต่อพ่วง

การทางานของวงจร
วงจรรู ปที่ 7.4-7 เป็ นวงจรต่อพ่วงสาหรับขับ LED ซึ่ งวงจรนี้ใช้ไอซี U3 เบอร์ 74HC573 เป็ นตัว
ขับกระแสให้กบั LED ทั้ง 8 ตัว รี ซิสเตอร์ R8-R15 เป็ นตัวจากัดกระแสให้กบั LED สาหรับ Jumper ใส่
ไว้ปลดวงจรเฉพาะส่ วน LED ออก (ตัดการจ่ายกระแสให้กบั LED ) เพื่อนาไอซีบฟั เฟอร์ไปขับวงจรอื่น
ซึ่งจะได้ศึกษาในบทถัด ๆ ไป
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยเว้นพื้นที่ไว้สาหรับวงจรในการทดลองในบทต่อ ๆ ไป
2. วางคอนเน็ ค เตอร์ J7 โดยหัน ด้า นช่ อ งเสี ย บออกด้า นนอกโดยให้ต าแหน่ ง ตรงกับ J5 ของ
แผ่นวงจรหลัก (เมื่อวางแผ่นวงจรเทียบชิดกัน)
3. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.4-7
ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 203

7. การทดสอบการทางานของวงจร
การทดสอบวงจรขับ LED ซึ่งเป็ นวงจรเอาต์พุตพอร์ตให้นกั ศึกษาทาการทดสอบการทางานของ
วงจรใน 2 ขั้นตอน
ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ ตแวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมกับวงจรหลักเฉพาะส่ วนของไฟเลี้ยง 5 โวลต์และ 0 โวลต์ดงั รู ปที่ 7.4-8
2. ป้ อนลอจิก 1, 0 (จัม๊ สายไฟจากไฟเลี้ ยง 5 โวลต์และ 0 โวลต์) เข้าที่อินพุทของไอซี บฟั เฟอร์
แต่ละบิตแล้วตรวจสอบการทางานตามตาราง หากผลการทดลองที่ได้ไม่ตรงกับผลที่ควรได้
ให้นกั ศึกษาทาการแก้ไขจนได้ผลเช่นเดียวกันกับผลที่ควรได้

ตารางที่ 7.4-1 ทดสอบบิต


เอาต์พุต ทดสอบกับบิต
ผลที่ควรได้
อินพุท D7 D6 D5 D4 D3 D2 D1 D0
ป้อนลอจิก 1 LED ติดสว่าง
ป้อนลอจิก 0 LED ดับ
7805
103

74HC573

AT89S52

รู ปที่ 7.4-8 การต่อเชื่อมกับวงจรหลักเพื่อทดสอบทางฮาร์ ตแวร์


204 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้


1. ต่อเชื่ อมวงจรเอาต์พุตกับวงจรหลักดังรู ปที่ 7.4-8
2. เขียนโปรแกรมเพื่อทดสอบการทางานของพอร์ตโดยใช้โปรแกรม Keil uVision ดังนี้
#include<REGX52.H>
void delay(int n); //declare function
void main(void)
{
unsigned char value=0; //get variable
while(1)
{
P0=value; //send to port 0
delay(100); //delay
value++; //next value
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}
3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX File)
4. นาไฟล์ภาษาเครื่ องที่ได้ทาการโปรแกรมข้อมูลลงชิพซีพียู โดยเชื่ อมต่อวงจรเป็ นดังรู ป 7.4-9
7805
103

74HC573

AT89S52

รู ปที่ 7.4-9 ต่อเชื่ อมวงจรเอาต์พุตพอร์ ตกับวงจรหลักเพื่อทดลองทางซอฟท์แวร์


ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 205
5. สังเกตผลที่ได้หากวงจรทางานตามปกติ LED จะสว่างเป็ นเลขฐานสองเริ่ มจากค่า 00H เพิ่ม
จังหวะละ 1 ค่าขึ้นไปเรื่ อย ๆ หากไม่แสดงผลให้ดาเนินการแก้ไข

8. สรุปผลการปฏิบัติงาน
206 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.4


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซีที่ใช้ในวงจรเอาต์พุตพอร์ตใช้เบอร์ใด 5. LED ในวงจรเอาต์พุตพอร์ ตมีกี่ตวั
ก. LM7805 ก. 1 ตัว
ข. AT89S52 ข. 2 ตัว
ค. 74HC573 ค. 5 ตัว
ง. LM741 ง. 6 ตัว
จ. LM339 จ. 8 ตัว
2. ไอซีที่ใช้ในวงจรเอาต์พุตพอร์ตทาหน้าที่ใด 6. ข้ อ ที่ ต้ อ งค านึ ง ถึ ง ในการประกอบวงจร
ก. ขับกระแสให้กบั LED เอาต์พุตพอร์ตคือข้อใด
ข. ป้ องกันไอซี ไมโครคอนโทรลเลอร์ ก. ตาแหน่งของ ไฟเลี้ยงวงจร
เสี ยหาย ข. ตาแหน่งของ LED
ค. ขยายแรงดัน ค. จัดวางคอนเน็คเตอร์ พอร์ ตให้ตรงกับคอน
ง. ขยายกระแส เน็คเตอร์ วงจรไมโครคอนโทรลเลอร์
จ. ขยายสัญญาณ ง. ตาแหน่งของไอซี
3. ตัวต้านทานในวงจรเอาต์พุตพอร์ ตมีกี่ตวั จ. ตาแหน่งของตัวต้านทาน
ก. 1 ตัว 7. เมื่อประกอบวงจรเสร็ จทดสอบการเชื่ อมต่อ
ข. 2 ตัว ขา 1 ของไอซี จะต่อกับขาใด
ค. 5 ตัว ก. 1
ง. 6 ตัว ข. 9
จ. 8 ตัว ค. 15
4. ตัวต้านทานในวงจรเอาต์พุตพอร์ ตทาหน้าที่ ง. 10
ใด จ. 20
ก. แบ่งแรงดัน 8. การวัดค่าแรงดันไฟเลี้ ยงไอซี บฟั เฟอร์ จะต้อง
ข. แบ่งกระแส วัดระหว่างขาใด
ค. ไบอัสไอซี ก. ขา 1 กับ ขา 10
ง. จากัดกระแสให้กบั LED ข. ขา 5 กับ ขา 10
จ. จากัดแรงดันให้กบั LED ค. ขา 10 กับ ขา 20
ง. ขา 12 กับ ขา 20
จ. ขา 15 กับ ขา 20
ใบงานที่ 7.4 การสร้างวงจรเอาต์พตุ พอร์ต 207
9. แรงดันไฟเลี้ยงไอซี ควรมีค่ากี่โวลต์
ก. ประมาณ 1.5 โวลต์
ข. ประมาณ 3.3 โวลต์
ค. ประมาณ 5 โวลต์
ง. ประมาณ 9 โวลต์
จ. ประมาณ 12 โวลต์
10. เมื่อเชื่อมต่อกับวงจรไมโครคอนโทรลเลอร์ แล้วกดปุ่ มรี เซตผลจะเป็ นเช่นใด
ก. LED จะดับทุกตัว
ข. LED จะติดสว่างทุกตัว
ค. LED จะติดสว่างและดับสลับกัน
ง. ไฟเลี้ยงไอซี ขบั จะลดลง
จ. ไม่มีอะไรเกิดขึ้น

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ง 3. จ 4. ข 5. จ 6. ก 7. ก 8. ง 9. ข 10. ก

เฉลยแบบทดสอบหลังเรี ยน
1. ค 2. ก 3. จ 4. ง 5. จ 6. ค 7. ง 8. ค 9. ค 10. ข
ใบงานที่ 7.5
การใช้ งานพอร์ ตทาหน้ าทีเ่ ป็ นเอาต์ พตุ พอร์ ตเบื้องต้ น
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมให้ไมโครคอนโทรลเลอร์ ส่งค่าออกทางพอร์ ตโดยใช้งานพอร์ ตทา
หน้าที่เป็ นเอาต์พุตพอร์ต

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสั่งได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นใช้งานได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.4 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
210 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.5


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เมื่ อพิมพ์โปรแกรมตามตัวอย่างถู ก ต้องแล้ว 5. คาสั่งใดใช้แทนแผนผังงานในการวนซ้ าแบบ
ผลการแปลงจะเป็ นอย่างไร รู ้จานวนรอบ
ก. “main” - OK. ก. while(1)
ข. “main” - Pass. ข. do
ค. “main” - 0 Error(s), 0 Warning (s). ค. for
ง. “main” - 0 Warning (s), 0 Error(s). ง. go
จ. “main” - 0 Erase (s), 0 Warming (s). จ. void
2. เมื่อต้องการส่ งข้อมูล 0x55 ออกทางพอร์ ต 0 6. ไมโครคอนโทรลเลอร์ ที่ใช้จาลองการทางาน
ต้องใช้คาสั่งใด ด้วยโปรแกรม Proteus ใช้เบอร์ใด
ก. Out P0,0x55; ก. AT89S51
ข. Send P0(0x55); ข. AT89C51
ค. P0(0x55); ค. AT89S52
ง. P0=0x55; ง. AT89C52
จ. Out P0(0x55); จ. AT8052
3. แผนผังงานใดใช้แทนขั้นตอนการกาหนดตัว 7. LED ที่ ใ ช้จ าลองการท างานด้ว ยโปรแกรม
แปร Proteus อยูใ่ น Category ใด
ก. มนซ้ายขวา ก. Optoelectronic
ข. สี่ เหลี่ยมผืนผ้า ข. Opto isolator
ค. สี่ เหลี่ยมขนมเปี ยกปูน ค. Light electronic
ง. สี่ เหลี่ยมผืนผ้าแบบมีเส้นคาดซ้ายขวา ง. Diode
จ. ทรงกลม จ. Semiconductor
4. แผนผังงานใดใช้แทนขั้นตอนการส่ งข้อมู ล 8. สิ่ งใดในโปรแกรม Proteus ไม่จาเป็ นต้องต่อ
ออกพอร์ต วงจร
ก. สี่ เหลี่ยมผืนผ้า ก. สัญญาณนาฬิกาของไอซี
ข. มนซ้ายขวา ข. ลอจิกควบคุมไอซี
ค. สี่ เหลี่ยมขนมเปี ยกปูน ค. ไฟเลี้ยงของ LED
ง. สี่ เหลี่ยมผืนผ้าแบบมีเส้นคาดซ้ายขวา ง. กราวด์ของ LED
จ. ทรงกลม จ. กราวด์ของไอซี
ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 211
9. ไฟล์สกุลใดที่นาไปโปรแกรมลงตัวไมโครคอนโทรลเลอร์ในวงจรจริ ง
ก. C
ข. DOC
ค. HEX
ง. BIN
จ. EXE
10. ปุ่ มใดของ ISP3.0a ที่ใช้สาหรับโปรแกรมไฟล์ภาษาเครื่ องลงตัวไมโครคอนโทรลเลอร์
ก. Read
ข. Write
ค. Open File
ง. Save File
จ. Verify
212 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ไมโครคอนโทรลเลอร์ MSC-51 ในแต่ละพอร์ ตมีรีจิสเตอร์ ที่มีแอดเดรสประจาพอร์ ตเมื่อเขียน
โปรแกรมควบคุมด้วย Keil uVision สามารถกาหนดได้โดยตรงดังตารางที่ 7.5-1

ตารางที่ 7.5-1 แอดเดรสของแต่พอร์ ตที่สามารถใช้ชื่อแทนได้โดยตรง


พอร์ต แอดเดรสของพอร์ต โปรแกรม Keil สามารถกาหนดโดยตรงได้เป็ น
0 80H P0
1 90H P1
2 A0H P2
3 B0H P3

รี จิสเตอร์ ของพอร์ ตแต่ละพอร์ ตสามารถเข้าถึงได้ในระดับบิตดังนั้นหากมีการใช้งานเพียงบิตใด


บิตหนึ่ งให้ทาหน้าที่เป็ นเอาท์พุตพอร์ ต สามารถเขี ยนโปรแกรมสั่งงานให้บิตดังกล่าวมีค่าเป็ นลอจิกที่
ต้องการได้จากก าหนดค่ า เข้า ไปโดยตรง ตัวอย่างเช่ น บิ ต P2.7 ต่ อควบคุ ม รี เลย์ผ่า นการควบคุ ม จาก
ทรานซิสเตอร์ NPN ดังรู ปที่ 7.5-1
Vcc VS

RY1
31 40
12V 5A
Vcc
EA

D1
Vcc
1N4002
C3 R3
10uF 3.9K
9 28 Q1
RST P2.7
SW1 BC337
R2 R2
10K 220

X1
11.0592MHz 18
XTAL2
19
XTAL1
GND

22pFx2 20 AT89S52

รู ปที่ 7.5-1 วงจรควบคุมรี เลย์


#include<REGX52.H>
sbit RELAY=P2^7; //use "RELAY" instead P2.7
void main(void)
{
RELAY=0; //Off Relay
}
ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 213
สาหรับการส่ งค่าออกพอร์ ตที่ครบทั้ง 8 บิตในครั้งเดียว สามารถทาได้โดยการกาหนดค่าโดยตรง
เข้าที่รีจิสเตอร์ ของพอร์ ตที่ตอ้ งการใช้งาน ค่าที่กาหนดได้จะต้องมีขนาด 8 บิต ซึ่ งสามารถกาหนดเป็ น
เลขฐานสิ บได้ต้ งั แต่ค่า 0-255 และกาหนดเป็ นเลขฐานสิ บหกตั้งแต่ค่า 0x00 – 0xFF วิธีการกาหนดค่าลง
ในรี จิสเตอร์พอร์ตทาได้ 2 วิธี คือ
1. กาหนดโดยตรง เช่น P0=0x3F;
2. กาหนดผ่านตัวแปรอื่น เช่น P0=value;
ตัวอย่างเช่นต่อ LED ไว้ที่พอร์ต 0 ต้องการให้ LED ติดสว่าง 4 ตัว และดับ 4 ตัวค่าที่ตอ้ งนาเข้าไปไว้ใน
รี จิสเตอร์พอร์ต 0 คือค่า 0x0F คาสั่งที่ใช้จะเป็ น P0=0x0F; ดังนี้
#include<REGX52.H>
void main(void)
{
P0=0x0F; //LED on/off -> 00001111
}

6. การดาเนินการทดลอง
การทดลองใบงานที่ 7.5 นี้ เป็ นการทดลองการใช้งานพอร์ ต โดยใช้วงจรต่อพ่วงสาหรับใช้งาน
พอร์ต 0 เป็ นเอาต์พุตพอร์ตโดยใช้ขบั LED เป็ นวงจรที่ได้สร้างขึ้นในใบงานที่ 7.4 ดังรู ปที่ 7.5-2

รู ปที่ 7.5-2 วงจรที่ใช้เชื่ อมต่อระหว่างไมโครคอนโทรลเลอร์ กบั LED

การจ าลองการท างานใช้โ ปรแกรม Proteus ดัง ที่ ไ ด้ก ล่ า วมาแล้ว ส าหรั บ การทดลองวงจร
ไมโครคอนโทรลเลอร์ ที่ขบั โหลดโดยผ่านพอร์ ต 0 ใช้อุปกรณ์อิเล็กทรอนิกส์ดงั นี้
214 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180 Ω MINRES180R
4. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
5. LED LED-YELLOW

รู ปที่ 7.5-3 การต่อวงจรเพื่อจาลองพฤติกรรมใน Proteus

แผ่นวงจรจริ งที่ใช้ทดลองใบงานที่ 7.5 เป็ นดังรู ปที่ 7.5-4


7805
103

74HC573

AT89S52

รู ปที่ 7.5-4 วงจรจริ งที่ใช้ทดลอง


ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 215
การทดลองที่ 1 เขียนโปรแกรมเพื่อให้พอร์ ต 0 ขับ LED ให้ติดสว่างเป็ นลักษณะไฟวิ่งไบนารี (รู ปแบบ
การวิง่ แบบการเพิ่มค่าเลขฐาน 2) โดยการใช้คณิ ตศาสตร์คานวณ ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมขับพอร์ต 0 จากโจทย์ที่กาหนดข้างต้นสามารถเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรที่ตอ้ งการใช้
2. นาค่าตัวแปรส่ งออกพอร์ ต
3. หน่วงเวลา
4. เพิ่มค่าตัวแปร
5. กลับไปทางานในลาดับที่ 2
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม หน่วงเวลา

กาหนดตัวแปร,ค่าเริ่ มต้น กาหนดตัวแปร x,y


จริ ง
ส่ งค่าตัวแปรไปยังพอร์ ต 0 y+1<500?
เท็จ
หน่วงเวลา (n) จริ ง
x+1<n ?
เพิ่มค่าตัวแปร 1 ค่า เท็จ
จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(int n); //declare function
void main(void)
{
unsigned char value=0; //get variable
while(1)
{
216 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
P0=value; //send to port 0
delay(100); //delay
value++; //next value
}
}

void delay(int n) //delay function


{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมจาก delay(100); เป็ นตัวเลขอื่น แล้วสังเกตผล
4. ทดลองแก้โปรแกรมจาก value++; เป็ น value--; แล้วสังเกตผล

การทดลองที่ 2 เขียนโปรแกรมเพื่อให้พอร์ ต 0 ขับ LED ให้ติดสว่างเป็ นลักษณะไฟไล่เรี ยงกันไปที่ละ 1


ตัว โดยการกาหนดค่าพอร์ ตโดยตรง ดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน การเขียนลาดับงานได้ดงั นี้


1. นาค่ารู ปแบบส่ งออกพอร์ ต
2. หน่วงเวลา
3. นาค่ารู ปแบบส่ งออกพอร์ ต
4. เรี ยกใช้ฟังก์ชนั่ หน่วงเวลา
5. ใช้กระบวนการซ้ า 1-2 ตามรู ปแบบที่ตอ้ งการ
6. กลับไปทางานในลาดับที่ 2
ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 217
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้
เริ่ ม
หน่วงเวลา
ส่ งค่าออกพอร์ ต 0 ค่าแรก กาหนดตัวแปร x,y
หน่วงเวลา (n) จริ ง
y+1<500?
ส่ งค่าออกพอร์ ต 0 ค่าที่ 2 เท็จ
จริ ง
x+1<n ?
หน่วงเวลา (n)
เท็จ
จบ
ส่ งค่าออกพอร์ ต 0 ค่าสุ ดท้าย

หน่วงเวลา (n)

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(int count); //declare delay program
void main(void)
{
while(1)
{
P0=0x01; //get Port 0 is 0000 0001
delay(100);
P0=0x02; //get Port 0 is 0000 0010
delay(100);
P0=0x04; //get Port 0 is 0000 0100
delay(100);
P0=0x08; //get Port 0 is 0000 1000
delay(100);
P0=0x10; //get Port 0 is 0001 0000
delay(100);
P0=0x20; //get Port 0 is 0010 0000
delay(100);
P0=0x40; //get Port 0 is 0100 0000
delay(100);
P0=0x80; //get Port 0 is 1000 0000
delay(100);
}
}
218 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
void delay(int count)
{
int x,y;
for(x=0;x<count;x++)
{
for(y=0;y<500;y++)
{
}
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมจาก P0=0x…; เป็ นตัวเลขอื่น แล้วสังเกตผล

การทดลองที่ 3 เขียนโปรแกรมเพื่อให้พอร์ต 0 ขับ LED ให้ติดสว่างเป็ นลักษณะไฟรู ปแบบตามต้องการ


โดยการเก็บค่ารู ปแบบไว้ในตัวแบบอาร์ เรย์ ดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน การเขียนลาดับงานได้ดงั นี้


1. กาหนดค่ารู ปแบบไว้ในตัวแปรอาร์ เรย์
2. นาค่าตัวแปรอาร์ เรย์ส่งออกพอร์ ต
3. หน่วงเวลา
4. นาค่าถัดไปอาร์ เรย์ถดั ไปออกพอร์ ต
5. ตรวจสอบจานวนข้อมูลครบหรื อไม่ถา้ ครบ
ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 219
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม
กาหนดตัวแปรเก็บจานวนรู ปแบบ

กาหนดรู ปแบบในตัวแปรอาร์ เรย์


หน่วงเวลา
ส่ งค่าตัวแปรออกพอร์ ต
กาหนดตัวแปร x,y
หน่วงเวลา (count) จริ ง
y+1<500?
ไม่ครบ
เปลี่ยนตัวแปรถัดไปแล้ว เท็จ
ครบจานวนหรื อไม่ จริ ง
x+1<count ?
ครบ
เท็จ
เริ่ มต้นตัวแปรแรก จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(int count); //declare delay program
void main(void)
{
int n;
unsigned char value[]={ 0x00,0x01,0x03,0x07,0x0f,0x1e,
0x3c,0x78,0xf0,0xe0,0xc0,0x80};
while(1)
{
for(n=0;n<12;n++) //Exported data contains 12 values
{
P0=value[n]; //send data to port 0
delay(100);
}
}
}
void delay(int count) //delay program
{
int x,y;
for(x=0;x<count;x++)
{
for(y=0;y<500;y++)
{}
}
}
220 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ค่าที่กาหนดในตัวแปรอาร์เรย์ (unsigned char value[ ]={…) เป็ นค่าอื่น แล้ว
สังเกตผล

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมควบคุมการติดดับของ LED (ไฟวิง่ ) ที่ต่ออยูท่ ี่พอร์ ต 0 ดังรู ปที่ 7.5-5 โดยให้มี
รู ปแบบไฟวิ่งอย่างน้อย 4 รู ปแบบ (กาหนดขึ้นเอง) และมีความเร็ วในแต่ละรู ปแบบให้มีความแตกต่างกัน
โดยทดลองผลทั้งการจาลองการทางานด้วยโปรแกรม Proteus และทดลองด้วยวงจรจริ ง

รู ปที่ 7.5-5 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย


ใบงานที่ 7.5 การใช้งานพอร์ตทาหน้าที่เป็ นเอาต์พตุ พอร์ตเบื้องต้น 221

แบบทดสอบหลังเรียน ใบงานที่ 7.5


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เมื่ อพิมพ์โปรแกรมตามตัวอย่างถู ก ต้องแล้ว 5. คาสั่งใดใช้แทนแผนผังงานในการวนซ้ าแบบ
ผลการแปลงจะเป็ นอย่างไร รู ้จานวนรอบ
ก. “main” - 0 Error(s), 0 Warning (s). ก. for
ข. “main” - 0 Warning (s), 0 Error(s). ข. while(1)
ค. “main” - 0 Erase (s), 0 Warming (s). ค. do
ง. “main” - OK. ง. go
จ. “main” - Pass. จ. void
2. เมื่อต้องการส่ งข้อมูล 0x55 ออกทางพอร์ ต 0 6. ไมโครคอนโทรลเลอร์ ที่ใช้จาลองการทางาน
ต้องใช้คาสั่งใด ด้วยโปรแกรม Proteus ใช้เบอร์ใด
ก. P0(0x55); ก. AT89S51
ข. P0=0x55; ข. AT89C52
ค. Out P0,0x55; ค. AT89C51
ง. Send P0(0x55); ง. AT89S52
จ. Out P0(0x55); จ. AT8052
3. แผนผังงานใดใช้แทนขั้นตอนการกาหนดตัว 7. LED ที่ ใ ช้จ าลองการท างานด้ว ยโปรแกรม
แปร Proteus อยูใ่ น Category ใด
ก. มนซ้ายขวา ก. Opto isolator
ข. สี่ เหลี่ยมผืนผ้าแบบมีเส้นคาดซ้ายขวา ข. Light electronic
ค. สี่ เหลี่ยมผืนผ้า ค. Diode
ง. สี่ เหลี่ยมขนมเปี ยกปูน ง. Optoelectronic
จ. ทรงกลม จ. Semiconductor
4. แผนผังงานใดใช้แทนขั้นตอนการส่ งข้อมู ล 8. สิ่ งใดในโปรแกรม Proteus ไม่จาเป็ นต้องต่อ
ออกพอร์ต วงจร
ก. มนซ้ายขวา ก. ไฟเลี้ยงของ LED
ข. สี่ เหลี่ยมขนมเปี ยกปูน ข. กราวด์ของ LED
ค. สี่ เหลี่ยมผืนผ้าแบบมีเส้นคาดซ้ายขวา ค. กราวด์ของไอซี
ง. สี่ เหลี่ยมผืนผ้า ง. สัญญาณนาฬิกาของไอซี
จ. ทรงกลม จ. ลอจิกควบคุมไอซี
222 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. ไฟล์สกุลใดที่นาไปโปรแกรมลงตัวไมโครคอนโทรลเลอร์ในวงจรจริ ง
ก. C
ข. DOC
ค. BIN
ง. HEX
จ. EXE
10. ปุ่ มใดของ ISP3.0a ที่ใช้สาหรับโปรแกรมไฟล์ภาษาเครื่ องลงตัวไมโครคอนโทรลเลอร์
ก. Write
ข. Read
ค. Open File
ง. Save File
จ. Verify

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ง 3. ข 4. ก 5. ค 6. ง 7. ก 8. จ 9. ค 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ข 3. ค 4. ง 5. ก 6. ข 7. ง 8. ค 9. ง 10. ก
ใบงานที่ 7.6
การสร้ างวงจรสวิตช์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรต่อพ่วงที่ทาหน้าที่เป็ นวงจรอินพุต
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรสวิตช์ได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรสวิตช์ได้
3. บอกขั้นตอนการประกอบวงจรสวิตช์ได้
4. สร้าง (ประกอบ) วงจรสวิตช์ได้
5. ทดสอบการทางานของวงจรสวิตช์ได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.4 (วงจรต่อพ่วง) 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.6-4 (a) ประกอบด้วย
3.1 สวิตช์กดติดปล่อยดับ 4 ตัว 3.3 คอนเน็คเตอร์ 8×2 1 ตัว
3.2 ตัวต้านทาน 10 kΩ ¼ W 4 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรสวิตช์
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
224 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.6


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. สวิตช์ที่ นามาใช้ใ นใบงานอิ น พุ ตพอร์ ตเป็ น 5. การต่อตัวต้านทานในวงจรสวิตช์ตอ้ งต่อแบบ
แบบใด ใด
ก. กดติดกดดับ ก. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ งต่อ
ข. กดติดปล่อยดับ กราวด์
ค. โยกสองตาแหน่ง ข. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ งต่อ
ง. กระดก ไฟเลี้ยง
จ. เลื่อน ค. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ งต่อ
2. จานวนสวิต ช์ ที่ ใ ช้ใ นใบงานอิ น พุ ตพอร์ ต มี สวิตช์
ทั้งหมดกี่ตวั ง. ต่อคร่ อมสวิตช์
ก. 1 ตัว จ. ต่ออนุกรมระหว่างสวิตช์กบั ขาพอร์ ต
ข. 3 ตัว 6. ไฟบวกที่ต่อเข้ากับตัวต้านทานมีค่าเท่าใด
ค. 4 ตัว ก. ประมาณ 3 โวลต์
ง. 5 ตัว ข. ประมาณ 5 โวลต์
จ. 8 ตัว ค. ประมาณ 9 โวลต์
3. ตัวต้านทาน 10 kΩ ทาหน้าที่ใด ง. ประมาณ 12 โวลต์
ก. พูลอัพขาพอร์ต จ. ประมาณ 15 โวลต์
ข. พูลดาวน์ขาพอร์ต 7. สิ่ งที่ตอ้ งคานึงถึงประการแรกของการ
ค. จากัดกระแสขาพอร์ ต ประกอบวงจรสวิตช์คือข้อใด
ง. แบ่งแรงดันให้ขาพอร์ ต ก. ตาแหน่ ง การวางคอนเน็ ค เตอร์ ต้อง
จ. ไบอัสให้กบั ขาพอร์ ต ตรงกับของวงจรหลัก
4. หน้าที่ของสวิตช์ในใบงานอินพุตพอร์ตคือข้อใด ข. ตาแหน่งการวางตัวต้านทาน
ก. ส่ งต่อสัญญาณเข้าขาพอร์ ต ค. ตาแหน่งการวางสวิตช์
ข. รี เซตซีพียู ง. ตาแหน่งการเดินสายไฟเลี้ยง
ค. ไบอัสสวิตช์ จ. ตาแหน่งการเดินสายกราวด์
ง. ลัด ขาพอร์ ต ลงกราวด์ เ มื่ อ มี ก ารกด
สวิตช์
จ. ลัดขาพอร์ ต เข้า บวกไฟเลี้ ย งเมื่ อมี การ
กดสวิตช์
ใบงานที่ 7.6 การสร้างวงจรสวิตช์ 225
8. เมื่อกดสวิตช์ในวงจรสวิตช์ผลที่ได้ควรเป็ นอย่างไร
ก. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์
ข. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์ทุกบิต
ค. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์ทุกบิต
ง. LED ที่ต่อไว้ที่พอร์ ต 0 ดับทุกตัว
จ. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์
9. เมื่อไม่มีการกดสวิตช์ในวงจรสวิตช์ขาพอร์ ตที่ต่อกับสวิตช์ควรเป็ นอย่างไร
ก. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์
ข. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์
ค. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์ทุกบิต
ง. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์ทุกบิต
จ. LED ที่ต่อไว้ที่พอร์ ต 0 ดับทุกตัว
10. หากกดสวิตช์เพียง 1 ตัวแล้วทาให้ขาพอร์ตเป็ นลอจิก 0 จานวน 2 ขาเกิดจากสิ่ งใด
ก. ขาพอร์ ตที่ต่อกับสวิตช์ที่ถูกกดมีการลัดกับขาอื่น
ข. สวิตช์เสี ย
ค. ต่อตัวต้านทานผิดด้าน
ง. ต่อสวิตช์ผดิ ด้าน
จ. สวิตช์ไม่ได้ต่อกราวด์
226 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ไมโครคอนโทรลเลอร์ MCS-51 ในขนาดตัวถัง DIP ขนาด 40 ขา ทุกพอร์ ตยกเว้นพอร์ ต 0 จะมี
ตัวต้านทานพูลอัพ (ตัวต้านทานต่อที่ขาพอร์ ตเข้ากับไฟเลี้ยง) อยูภ่ ายในตัวไมโครคอนโทรลเลอร์ โดยมี
ค่าประมาณ 50 กิโลโอห์ม ดังนั้นเมื่อเวลาลอยขาพอร์ ตแล้วมีการส่ งลอจิก 1 ออกมาทางขาพอร์ต แรงดัน
ที่ขาพอร์ ตจะมีค่า 5 โวลต์ (โดยประมาณ) เมื่อต้องการใช้งานพอร์ ตให้ทาหน้าที่เป็ นอิน พุตพอร์ ต ก็เพียง
ส่ งสัญญาณลอจิกจากอุปกรณ์อินพุตเข้าที่ขาพอร์ ตได้โดยตรงสาหรับอุปกรณ์อิน พุตนั้นมีระดับสัญญาณ
ลอจิ ก 1 และ 0 ที่ 5 โวลต์และ 0 โวลต์ตามล าดับ แต่ ถ้า หากอุ ป กรณ์ อินพุ ตมี แรงดันลอจิ ก ที่ แตกต่ า ง
จาเป็ นต้องใช้อุปกรณ์ปรับระดับหรื อจัดรู ปสัญญาณ เพื่อให้ได้ระดับลอจิกที่ไมโครคอนโทรลเลอร์ นาไป
ใช้งานได้
สาหรับบทนี้เสนอการนาพอร์ ตมาทางานเป็ นอินพุตพอร์ ต โดยใช้สวิตช์ชนิ ดกดติดปล่อยดับเป็ น
อุปกรณ์อินพุต ซึ่ งการใช้สวิตช์เป็ นอุปกรณ์อิน พุตจะต้องใช้การต่อสวิตช์กบั ขาพอร์ ตกับกราวด์ โดยใช้
ตัวต้านทานต่อพูลอัพขนาด 10 กิโลโอห์ม เป็ นตัวช่ วยให้เป็ นระดับลอจิก 1 ในขณะที่ไม่มีการกดสวิตช์
ซึ่งวงจรสวิตช์ที่ใช้งานเป็ นดังรู ปที่ 7.6-1
Vcc

R12
10k ไม่กดสวิตช์ กดสวิตช์
Port S1 VCC
สัญญาณกระเด้งกระดอน

(a) (b)
รู ปที่ 7.6-1 วงจรสวิตช์ที่ใช้เชื่ อมต่อกับไมโครคอนโทรลเลอร์ และสัญญาณที่เกิดขึ้น

สวิตช์เมื่อผ่านการใช้งานมาสักระยะหนึ่ งหน้าสัมผัสของสวิตช์จะเกิ ดคราบซึ่ งอาจเกิ ดจากฝุ่ น


หรื อสนิมเมื่อใช้งานสวิตช์จะเกิดสัญญาณรบกวนดังรู ปที่ 7.6-1(b) สัญญาณรบกวนที่เกิดจากหน้าสัมผัส
สวิตช์ไม่สะอาดเรี ยกว่าสัญญาณกระเด้งกระดอน (Bouncing) ซึ่ งจะเกิ ดก่อนบริ เวณรอยต่อของลอจิกที่
เปลี่ยนแปลง หากโปรแกรมที่ใช้งานไม่ได้เตรี ยมแก้ไขไว้จะส่ งผลให้โปรแกรมใช้งานเกิดการรวนได้ ซึ่ ง
ไมโครคอนโทรลเลอร์ จะเข้าใจว่าเป็ นการกดสวิตช์หลายครั้ง ดังนั้นเมื่อใช้งานจริ งสามารถแก้ไขปั ญหานี้
ได้ 2 แนวทางคือ
1. แก้ ทางฮาร์ ดแวร์ โดยการสร้ างวงจรปรั บปรุ งสัญญาณเพื่อกาจัดสัญญาณกระเด้งกระดอน
เช่นการใช้ตวั เก็บประจุต่อคร่ อมหน้าสัมผัสสวิตช์
2. แก้ ทางซอฟท์ แวร์ จะใช้การเขียนโปรแกรมหน่วงเวลาระยะหนึ่ งหลังจากรับรู ้การกดสวิตช์
ครั้งแรกเพื่อให้ช่วงสัญญาณรบกวนผ่านไปก่อนถึงจะรับค่าลอจิกจริ งอีกครั้ง
ใบงานที่ 7.6 การสร้างวงจรสวิตช์ 227

6. การดาเนินการสร้ างวงจร
ใบงานนี้ เป็ นการสร้ างวงจรต่อพ่วงเพิ่มเติมจากใบงานที่ 7.4 เฉพาะวงจรสวิตช์ซ่ ึ งประกอบด้วย
ตัวต้านทาน 10 กิโลโอห์มจานวน 4 ตัว และสวิตช์กดติดปล่อยดับจานวน 4 ตัววงจรสมบรู ณ์สาหรับการ
ทดลองเขียนโปรแกรมรับสวิตช์เป็ นดังรู ปที่ 7.6-2

รู ปที่ 7.6-2 วงจรสมบรู ณ์สาหรับการทดลองเขียนโปรแกรมรับสวิตช์

วงจรสวิตช์ที่สร้างต่อขยายเพิ่มเติมจากวงจรเดิมที่สร้างไว้ในใบงานที่ 7.4 เป็ นดังรู ปที่ 7.6-3

รู ปที่ 7.6-3 วงจรสวิตช์สร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.4


228 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ให้นกั ศึกษาต่อวงจรสวิตช์เพิ่มเติมลงในแผงวงจรแผ่นเดี ยวกันใบงานที่ 7.4 สาหรับวงจรและ
แนวทางเป็ นดังรู ปที่ 7.6-4

รู ปที่ 7.6-4 (a) วงจรสวิตช์ (b) แนวทางจัดวางโดยใช้แผ่นปริ้ นวงจรเดิมของใบงานที่ 7.4

การทางานของวงจร
วงจรรู ปที่ 7.6-4 เป็ นวงจรต่อพ่วงสาหรั บส่ งค่าลอจิ กให้กบั ไมโครคอนโทรลเลอร์ ซึ่ งจัดเป็ น
วงจรในภาคอินพุตในระดับที่ง่ายที่สุด วงจรนี้ใช้สวิตช์กดติดปล่อยดับเป็ นตัวควบคุมระดับลอจิกที่ส่งเข้า
สู่ ไมโครคอนโทรลเลอร์ และใช้ตวั ต้านทานพูลอัพเพื่อให้ได้ระดับลอจิก 1 ในสภาวะที่ไม่ได้กดสวิตช์
และเมื่อทาการกดสวิตช์จะทาให้ระดับลอจิกเป็ น 0
การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยใช้พ้นื ที่ที่ได้เว้นไว้จากการทดลองในใบงานที่ 7.4
2. วางคอนเน็ ค เตอร์ J8 โดยหัน ด้า นช่ อ งเสี ย บออกด้า นนอกโดยให้ต าแหน่ ง ตรงกับ J6 ของ
แผ่นวงจรหลัก (เมื่อวางแผ่นวงจรเทียบชิดกัน)
3. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.6-4 (a)
ใบงานที่ 7.6 การสร้างวงจรสวิตช์ 229
แนวทางการสร้ างวงจร
ประกอบวงจรสวิตช์ลงแผ่นปริ้ นอเนกประสงค์แผ่นเดี ยวกับวงจรขับ LED ในใบงานที่ 7.4 จัด
วางให้ตาแหน่งคอนเน็คเตอร์ ตรงกันกับคอนเน็คเตอร์ ของพอร์ ต 2 ของวงจรไมโครคอนโทรลเลอร์ แนว
ทางการวางตาแหน่งอุปกรณ์ตลอดจนแนวการบัดกรี เป็ นดังรู ปที่ 7.6-2(b)

7. การทดสอบการทางานของวงจร
ทดสอบการทางานของวงจรมีดว้ ยกัน 2 ขั้นตอนคือ ทดสอบทางฮาร์ ดแวร์ และทางซอฟต์แวร์
103
7805

74HC573

AT89S52

รู ปที่ 7.6-3 การต่อเชื่อมวงจรไมโครคอนโทรลเลอร์ กบั วงจรสวิตช์

ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ ตแวร์ ดาเนินการดังนี้


1. ต่อเชื่ อมวงจรต่อพ่วงเข้ากับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.6-3
2. วัดแรงดันที่พอร์ต 2 ในบิตที่ต่อเชื่ อมกับสวิตช์บนั ทึกผลลงในตาราง หากผลการทดลองที่ได้
ไม่ตรงกับผลที่ควรได้ให้นกั ศึกษาทาการแก้ไขจนได้ผลเช่นเดียวกันกับผลที่ควรได้

ตารางที่ 7.6-1 ตารางบันทึกผลการทดสอบวงจร


พอร์ ต 2 ตาแหน่งบิตทดสอบ
สวิตช์ P2.3 P2.2 P2.1 P2.0 ผลที่ควรได้
สวิตช์ที่ทดสอบ S1 S2 S3 S4
แรงดันเมื่อกดสวิทช์ 0 โวลต์
แรงดันเมื่อไม่ได้กดสวิทช์ 5 โวลต์
230 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้


1. ต่อเชื่ อมวงจรต่อพ่วงเข้ากับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.6-3
2. เขียนโปรแกรมเพื่อทดสอบการทางานของพอร์ตโดยใช้โปรแกรม Keil uVision ดังนี้
#include<REGX52.H>
sbit S1=P2^3; //use "S1" instead P2.3
sbit S2=P2^2; //use "S2" instead P2.2
sbit S3=P2^1; //use "S3" instead P2.1
sbit S4=P2^0; //use "S4" instead P2.0
void main(void)
{
P0=0x00; //OFF all LED
while(1)
{
if(S1==0) //if switch S1 is pressed
{P0=0x01;} //LED1 ON
else if(S2==0) //if switch S2 is pressed
{P0=0x02;} //LED2 ON
else if(S3==0) //if switch S3 is pressed
{P0=0x04;} //LED3 ON
else if(S4==0) //if switch S4 is pressed
{P0=0x08;} //LED4 ON
else //No switch is pressed
{P0=0x00;} //OFF all LED
}
}

3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX File)


4. นาไฟล์ภาษาเครื่ องที่ได้อดั ลงชิพซีพียู ทดสอบการกดสวิตช์สังเกตผลที่เกิดขึ้น หากวงจร
ทางานปกติ LED จะติดสว่างตามสวิตช์ที่กด

8. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.6 การสร้างวงจรสวิตช์ 231

แบบทดสอบหลังเรียน ใบงานที่ 7.6


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. สวิตช์ที่ นามาใช้ใ นใบงานอิ น พุ ตพอร์ ตเป็ น 5. การต่อตัวต้านทานในวงจรสวิตช์ตอ้ งต่อแบบ
แบบใด ใด
ก. กดติดปล่อยดับ ก. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ ง
ข. โยกสองตาแหน่ง ต่อกราวด์
ค. กดติดกดดับ ข. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ ง
ง. กระดก ต่อสวิตช์
จ. เลื่อน ค. ต่อคร่ อมสวิตช์
2. จานวนสวิต ช์ ที่ ใ ช้ใ นใบงานอิ น พุ ตพอร์ ต มี ง. ด้านหนึ่ งต่อกับขาพอร์ ตอีกด้านหนึ่ ง
ทั้งหมดกี่ตวั ต่อไฟเลี้ยง
ก. 1 ตัว จ. ต่ อ อนุ กรมระหว่ า งสวิ ต ช์ ก ั บ ขา
ข. 3 ตัว พอร์ต
ค. 4 ตัว 6. ไฟบวกที่ต่อเข้ากับตัวต้านทานมีค่าเท่าใด
ง. 5 ตัว ก. ประมาณ 1.5 โวลต์
จ. 8 ตัว ข. ประมาณ 3 โวลต์
3. ตัวต้านทาน 10 kΩ ทาหน้าที่ใด ค. ประมาณ 5 โวลต์
ก. พูลดาวน์ขาพอร์ต ง. ประมาณ 9 โวลต์
ข. จากัดกระแสขาพอร์ ต จ. ประมาณ 12 โวลต์
ค. พูลอัพขาพอร์ต 7. สิ่ งที่ ต้ อ งค านึ ง ถึ ง ประการแรกของการ
ง. แบ่งแรงดันให้ขาพอร์ ต ประกอบวงจรสวิตช์คือข้อใด
จ. ไบอัสให้กบั ขาพอร์ ต ก. ตาแหน่งการวางตัวต้านทาน
4. หน้าที่ของสวิตช์ในใบงานอินพุตพอร์ตคือข้อใด ข. ตาแหน่งการวางสวิตช์
ก. ส่ งต่อสัญญาณเข้าขาพอร์ ต ค. ตาแหน่งการเดินสายไฟเลี้ยง
ข. ลัด ขาพอร์ ต ลงกราวด์ เ มื่ อ มี ก ารกด ง. ตาแหน่งการเดินสายกราวด์
สวิตช์ จ. ตาแหน่ ง การวางคอนเน็ ค เตอร์ ต้อง
ค. ลัดขาพอร์ ต เข้า บวกไฟเลี้ ย งเมื่ อมี การ ตรงกับของวงจรหลัก
กดสวิตช์
ง. รี เซตซีพียู
จ. ไบอัสสวิตช์
232 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
8. เมื่อกดสวิตช์ในวงจรสวิตช์ผลที่ได้ควรเป็ นอย่างไร
ก. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์ทุกบิต
ข. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์ทุกบิต
ค. LED ที่ต่อไว้ที่พอร์ ต 0 ดับทุกตัว
ง. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์
จ. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์
9. เมื่อไม่มีการกดสวิตช์ในวงจรสวิตช์ขาพอร์ ตที่ต่อกับสวิตช์ควรเป็ นอย่างไร
ก. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์
ข. แรงดันที่ขาพอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์
ค. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 0 โวลต์ทุกบิต
ง. พอร์ ตที่เชื่อมต่อกับสวิตช์มีค่า 5 โวลต์ทุกบิต
จ. LED ที่ต่อไว้ที่พอร์ ต 0 ดับทุกตัว
10. หากกดสวิตช์เพียง 1 ตัวแล้วทาให้ขาพอร์ตเป็ นลอจิก 0 จานวน 2 ขาเกิดจากสิ่ งใด
ก. สวิตช์เสี ย
ข. ต่อตัวต้านทานผิดด้าน
ค. ขาพอร์ ตที่ต่อกับสวิตช์ที่ถูกกดมีการลัดกับขาอื่น
ง. ต่อสวิตช์ผดิ ด้าน
จ. สวิตช์ไม่ได้ต่อกราวด์

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ค 3. ก 4. ง 5. ข 6. ข 7. ก 8. จ 9. ข 10. ก

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ค 3. ค 4. ข 5. ง 6. ค 7. จ 8. ง 9. ก 10. ค
ใบงานที่ 7.7
การใช้ งานพอร์ ตทาหน้ าทีเ่ ป็ นอินพุตพอร์ ตเบื้องต้ น
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมให้ไมโครคอนโทรลเลอร์ รับค่าจากพอร์ ตโดยให้พอร์ ตทาหน้าที่
เป็ นอินพุตพอร์ต

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสั่งได้ถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. เขียนวงจรเพื่อทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นใช้งานได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.6 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
234 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.7


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หากต้อ งการชื่ อ แทนสวิ ต ช์ ที่ ต่ อ กับ พอร์ ต 5. หากผังงานเป็ นผังรู ปตรวจสอบเงื่อนไขโดยมี
เพียงบิตเดียวจะต้องทาอย่างไร เงื่อนไขที่ไม่เท่ากันต้องใช้คาสั่งใด
ก. ประกาศด้วยคาสั่ง sbit ก. if
ข. ประกาศด้วยคาสั่ง bit ข. while(1)
ค. ประกาศด้วยคาสัง่ port ค. do
ง. ประกาศด้วยคาสั่ง define ง. for
จ. ประกาศด้วยคาสั่ง bit(port.x) จ. loop
2. การใช้คาสั่ง Switch-case เงื่อนไขเป็ นเช่นไร 6. การอ่านค่าทั้งพอร์ ตที่เชื่ อมต่อกับวงจรสวิตช์
ก. ค่าใน case ต้องมากกว่าค่าใน switch เป็ นอ่านค่าครั้งละกี่บิต
ข. ค่าใน case ต้องน้อยกว่าค่าใน switch ก. 1 บิต
ค. ค่าใน case ต้องเท่ากันกับค่าใน switch ข. 4 บิต
ง. ค่ า ใน case ต้ อ งไม่ เ ท่ า กั น กั บ ค่ า ใน ค. 5 บิต
switch ง. 6 บิต
จ. ค่าใน case ต้องตรงข้ามกับค่าใน switch จ. 8 บิต
3. ผังงาน ของการตรวจสอบเงื่อนไขใช้แบบใด 7. หากชอร์ ต บิ ต ลงกราวด์ ค่ า ที่ อ่ า นได้จ ะเป็ น
ก. รู ปสี่ เหลี่ยมผืนผ้า อย่างไร
ข. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา ก. มีค่าเป็ นลอจิก 0
ค. รู ปทรงกลม ข. มีค่าเป็ นลอจิก 1
ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา ค. มีค่าเท่ากับ 0x00
จ. รู ปสามเหลี่ยม ง. มีค่าเท่ากับ 0x0f
4. ผังงาน ของคาสั่ง Switch ใช้แบบใด จ. มีค่าเท่ากับ 0xff
ก. รู ปสี่ เหลี่ยมผืนผ้า 8. สวิต ช์ที่ ใ ช้ใ นใบงาน ในโปรแกรม Proteus
ข. รู ปทรงกลม ใช้ชื่อว่าอะไร
ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา ก. Switch
ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
ข. Button
จ. รู ปสามเหลี่ยม
ค. SW
ง. SW_SPST
จ. SW_button
ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 235
9. หากจาลองด้วยโปรแกรม Proteus ผ่านแต่วงจรจริ งไม่ทางานควรตรวจสอบที่ใด
ก. ขาพอร์ ตที่เชื่อมต่อสวิตช์
ข. ไฟเลี้ยงวงจรไมโครคอนโทรลเลอร์
ค. ไฟเลี้ยงวงจรสวิตช์
ง. ไอซีขบั LED
จ. การบัดกรี ตวั ต้านทาน
10. หากกดสวิตช์แล้วมีการตอบสนองไม่เหมือนกับการจาลองควรตรวจสอบที่ใด
ก. ไฟเลี้ยงวงจรไมโครคอนโทรลเลอร์
ข. ไฟเลี้ยงวงจรสวิตช์
ค. ไอซีขบั LED
ง. ขาพอร์ ตที่เชื่อมต่อสวิตช์
จ. การบัดกรี ตวั ต้านทาน
236 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน

พอร์ ตของไมโครคอนโทรลเลอร์ MCS-51 ในแต่ละพอร์ ตสามารถทางานเป็ นอิน พุตพอร์ ตได้


ทันที โดยที่ ไม่ตอ้ งมี การตั้ง ค่าใด ๆ เพียงแต่ค่าเดิ มในรี จิสเตอร์ พอร์ ตจะต้องมี ค่าเป็ นลอจิ ก 1 ในบิตที่
ต้องการเป็ นอินพุตพอร์ต

รู ปที่ 7.7-1 วงจรสวิตช์ที่ต่อเข้ากับพอร์ ตไมโครคอนโทรลเลอร์

การใช้งานพอร์ตให้ทาหน้าที่เป็ นอินพุตพอร์ตเป็ นการตรวจสอบค่าลอจิกในบิตที่ตอ้ งการให้เป็ น


อินพุตพอร์ต การตรวจสอบสถานะสามารถทาได้ 2 แบบคือ
1. การตรวจสอบเฉพาะบิต
2. การตรวจสอบทั้งพอร์ต (8 บิต)

การตรวจสอบเฉพาะบิต สามารถทาได้ 2 วิธีคือ


1. ตรวจสอบจากการอ่ า นค่ า เฉพาะบิ ต วิ ธี ก ารนี้ จ ะต้องท าการประกาศชื่ อแทนบิ ตไว้ก่ อ น
ฟั ง ก์ชั่น main ด้วยค าสั่ ง sbit และค าสั่ งที่ ใ ช้ใ นการตรวจสอบสามารถใช้ค าสั่ ง if, while,
do…while ตัวอย่างเช่นต้องการตรวจสอบการกดสวิตช์ S1 ที่ต่อไว้ที่บิต P2.3
#include<REGX52.H>
sbit S1=P2^3; //use "S1" instead P2.3
void main(void)
{
P0=0x00; //OFF all LED
while(1)
{
if(S1==0) //if switch S1 is pressed
{P0=0xFF;}
else
{P0=0x00;}
}
}
ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 237
2. ตรวจสอบจากการอ่านค่าทั้งพอร์ ตแล้วทาการกรองบิตที่ไม่เกี่ยวข้องออกให้เหลือเฉพาะบิต
ที่ตอ้ งการตรวจสอบ วิธีการนี้ ไม่ตอ้ งประกาศชื่ อแทนบิตไว้ล่วงหน้า สาหรับการกรองใช้
คาสั่ง and ด้วยค่าที่ตอ้ งการกรอง เช่นต้องการกรองบิต P2.3 จะต้อง and ด้วย 00001000B ซึ่ ง
ผลของการกรองจะเกิดได้ 2 กรณี คือ
ก. สวิตช์ถูกกด บิต P2.3 มีค่าเป็ น 0 โดยไม่สนใจบิตอื่น เมื่อทาการ and ผลที่ได้จะเป็ น
00000000B
P2.3=0 x x x x 0 x x x

And ด้วยข้อมูล 0 0 0 0 1 0 0 0

ผลการ and 0 0 0 0 0 0 0 0

ข. สวิตช์ไม่ถูกกด บิต P2.3 มีค่าเป็ น 1 โดยไม่สนใจบิตอื่น เมื่อทาการ and ผลที่ได้จะ


เป็ น 00001000B
P2.3=0 x x x x 1 x x x

And ด้วยข้อมูล 0 0 0 0 1 0 0 0

ผลการ and 0 0 0 0 1 0 0 0

ผลของการ and จะได้ผลลัพธ์เป็ นศูนย์เมื่อมีการกดสวิตช์และผลลัพธ์ไม่เป็ นศูนย์เมื่อไม่มี


การกด เขียนโปรแกรมเพื่อตรวจสอบการกดสวิตช์ที่ต่อไว้ที่บิต P2.3 จะได้
#include<REGX52.H>
void main(void)
{
P0=0x00; //OFF all LED
while(1)
{
if((P2 & 0x08)==0) //if switch S1 is pressed
{P0=0xFF;}
else
{P0=0x00;}
}
}

การตรวจสอบทั้งพอร์ ต (8 บิต) เป็ นวิธีการตรวจสอบโดยอ่านค่ามาตรวจสอบทั้งพอร์ ต ( 8 บิต) โดย


สามารถทาได้ 2 วิธีคือ
1. อ่านค่าแล้วตรวจสอบจากค่าที่เตรี ยมไว้ก่อนหน้า เช่นสวิตช์ S1 ที่ต่อไว้ที่บิต P2.3 เมื่อถู กกดค่า
ของพอร์ต 2 จะมีค่าเป็ น 0xF7 การเขียนโปรแกรมก็ทาการเตรี ยมค่า S1 ให้มีค่าเป็ น 0xF7 ไว้ก่อน
เมื่อต้องการตรวจสอบจะทาการตรวจกับค่า S1 ดังตัวอย่าง
#include<REGX52.H>
#define S1 0xF7 //define switch S1 value
void main(void)
{
P0=0x00; //OFF all LED
238 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
while(1)
{
if(P2==S1) //if switch S1 is pressed
{P0=0xFF;}
else
{P0=0x00;}
}
}
2. ตรวจสอบค่าของพอร์ ตเมื่อสวิตช์ถูกกดโดยตรง เช่ นสวิตช์ S1 ที่ต่อไว้ที่บิต P2.3 เมื่อทาการกด
สวิตช์เฉพาะบิต P2.3 จะเป็ น 0 ดังนั้นค่าของพอร์ ต 2 จะมีค่าเป็ น 0xF7 ดังนี้
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 HEX
1 1 1 1 0 1 1 1 0xF7
เขียนเป็ นโปรแกรมได้
#include<REGX52.H>
void main(void)
{
P0=0x00; //OFF all LED
while(1)
{
if(P2==0xF7) //if switch S1 is pressed
{P0=0xFF;}
else
{P0=0x00;}
}
}

6. การดาเนินการทดลอง
การทดลองใบงานที่ 7.7 เป็ นการทดลองการใช้งานพอร์ ตให้ทางานเป็ นอินพุตพอร์ ตโดยวงจรใช้
ทดลองเป็ นดังรู ปที่ 7.7-2

รู ปที่ 7.7-2 วงจรที่ใช้ในการทดลอง


ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 239
การทดลองด้วยวิธีการจาลองการทางานของวงจรไมโครคอนโทรลเลอร์ ดว้ ยโปรแกรม Proteus
โดยใช้อุปกรณ์อิเล็กทรอนิกส์ดงั นี้ (การกดสวิตช์ในเวลาจาลองทาได้โดยการคลิกเมาส์ที่ตวั สวิตช์)
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180  MINRES180R
4. รี ซิสเตอร์ 10 k MINRES10 K
5. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
6. LED LED-YELLOW
7. สวิตช์กดติดปล่อยดับ BUTTON

รู ปที่ 7.7-3 แสดงการต่อวงจรเพื่อจาลองพฤติกรรมใน Proteus

หมายเหตุ การที่เลือกใช้ LED สี เหลืองในการจาลองการทางานด้วยโปรแกรม Proteus เพื่อให้


เห็นผลชัดเมื่อแสดงผลที่จอคอมพิวเตอร์ เท่านั้นในการใช้งานจริ งนักศึกษาสามารถเลือกใช้ LED
สี ใดก็ได้ตามความต้องการ แต่ถา้ หากใช้สีที่มีคุณสมบัติของแรงดันตกคร่ อมกับกระแสที่ไหล
ผ่านมีความแตกต่างจาเป็ นต้องคานวณหาค่าความต้านทานจากัดกระแสใหม่ให้เหมาะสมกับ
LED ที่นามาใช้งาน
240 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ทดลองการทางานด้วยวงจรจริ ง จากวงจรรู ปที่ 7.7-2 ได้สร้างเป็ นวงจรจริ งในใบงานที่ 7.6 เมื่อ
นาวงจรมาเชื่อมต่อกับวงจรไมโครคอนโทรลเลอร์ เพื่อใช้ทดลองจริ งจะเป็ นดังรู ปที่ 7.7-4

7805
103

74HC573
AT89S52

รู ปที่ 7.7-4 วงจรจริ งที่ใช้ทดลองในใบงาน 7.7

การทดลองที่ 1 เขียนโปรแกรมใช้งานวงจรสวิตช์ 4 ตัวควบคุมการทางานของ LED โดยมีเงื่อนไขคือเมื่อ


มีการกดสวิตช์ LED ทั้ง 8 ที่ ต่ออยู่ที่พ อร์ ต 0 ทั้ง หมดต้องติ ดดับโดยมี รูปแบบแตกต่ างกันไป ซึ่ งการ
ดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมจากโจทย์ที่กาหนดข้างต้นเขียนลาดับงานได้ดงั นี้
1. กาหนดค่าตัวแปรให้กบั สวิตช์แต่ละตัว
2. อ่านค่าสวิตช์ (ทั้ง 8 บิต)
3. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 1 ให้ส่งรู ปแบบการติดดับรู ปแบบ 1 ออกพอร์ต 0
4. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 2 ให้ส่งรู ปแบบการติดดับรู ปแบบ 2 ออกพอร์ต 0
ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 241
5. ถ้าค่าที่อา่ นเป็ นค่าการกดสวิตช์ 3 ให้ส่งรู ปแบบการติดดับรู ปแบบ 3 ออกพอร์ต 0
6. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 4 ให้ส่งรู ปแบบการติดดับรู ปแบบ 4 ออกพอร์ต 0
7. วนซ้ าข้อ 2
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้
เริ่ ม

กาหนดตัวแปรให้กบั สวิตช์แต่ละตัว

อ่านค่าการกดสวิตช์จากพอร์ ต

เป็ นค่าสวิตช์ 1 หรื อไม่ ใช่


ให้พอร์ ต 0 มีค่ารู ปแบบ 1
ไม่ใช่
เป็ นค่าสวิตช์ 2 หรื อไม่ ใช่
ให้พอร์ ต 0 มีค่ารู ปแบบ 2
ไม่ใช่
เป็ นค่าสวิตช์ 3 หรื อไม่ ใช่
ให้พอร์ ต 0 มีค่ารู ปแบบ 3
ไม่ใช่
เป็ นค่าสวิตช์ 4 หรื อไม่ ใช่
ให้พอร์ ต 0 มีค่ารู ปแบบ 4
ไม่ใช่

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
#define sw1 0xf7 //define sw1 value from Port2
#define sw2 0xfb //define sw2 value from Port2
#define sw3 0xfd //define sw3 value from Port2
#define sw4 0xfe //define sw4 value from Port2
void main(void)
{
while(1)
{
switch(P2) //Read Port2
{
case sw1: //if Port2 equal sw1
P0=0x01;
break;
case sw2: //if Port2 equal sw2
P0=0x02;
break;
case sw3: //if Port2 equal sw3
P0=0x04;
242 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
break;
case sw4: //if Port2 equal sw4
P0=0x08;
break;
default: //if Port2 not equal any switch
P0=0x00;
break;
}
}
}
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมจาก P0=0x…; เป็ นตัวเลขอื่น แล้วสังเกตผล

การทดลองที่ 2 เขียนโปรแกรมใช้งานวงจรสวิตช์ 4 ตัวควบคุมการทางานของ LED โดยให้ทางานเป็ น


ไฟวิง่ ที่มีรูปแบบแตกต่างกันไปแล้วแต่การกดสวิตช์ ซึ่ งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมจากโจทย์ที่กาหนดข้างต้นเขียนลาดับงานได้ดงั นี้
1. กาหนดค่าตัวแปรให้กบั สวิตช์แต่ละตัว
2. อ่านค่าสวิตช์ (ทั้ง 8 บิต)
3. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 1 เรี ยกใช้ชุดฟังก์ชนั่ ไฟวิ่งรู ปแบบ 1
4. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 2 เรี ยกใช้ชุดฟังก์ชนั่ ไฟวิ่งรู ปแบบ 2
5. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 3 เรี ยกใช้ชุดฟังก์ชนั่ ไฟวิ่งรู ปแบบ 3
6. ถ้าค่าที่อ่านเป็ นค่าการกดสวิตช์ 4 เรี ยกใช้ชุดฟังก์ชนั่ ไฟวิ่งรู ปแบบ 4
7. วนซ้ าข้อ 2
ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 243
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปรให้กบั สวิตช์แต่ละตัว

อ่านค่าการกดสวิตช์จากพอร์ ต

เป็ นค่าสวิตช์ 1 หรื อไม่ ใช่


ไฟวิง่ รู ปแบบ 1
ไม่ใช่
เป็ นค่าสวิตช์ 2 หรื อไม่ ใช่
ไฟวิง่ รู ปแบบ 2
ไม่ใช่
เป็ นค่าสวิตช์ 3 หรื อไม่ ใช่
ไฟวิง่ รู ปแบบ 3
ไม่ใช่
เป็ นค่าสวิตช์ 4 หรื อไม่ ใช่
ไฟวิง่ รู ปแบบ 4
ไม่ใช่

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
#define sw1 0xf7 //define sw1 value from Port2
#define sw2 0xfb //define sw2 value from Port2
#define sw3 0xfd //define sw3 value from Port2
#define sw4 0xfe //define sw4 value from Port2
void delay(int count); //define delay program
void Pro1(void); //define pattern 1 program
void Pro2(void); //define pattern 2 program
void Pro3(void); //define pattern 3 program
void Pro4(void); //define pattern 4 program
int n;
//----------------pattern of light------------------------
code unsigned char value1[]={0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
code unsigned char value2[]={0x01,0x03,0x07,0x0f,
0x1f,0x3f,0x7f,0xff};
code unsigned char value3[]={0x00,0x01,0x03,0x06,
0x0c,0x18,0x30,0x60,0xc0,0x80};
code unsigned char value4[]={0x80,0xc0,0x60,0x30,
0x18,0x0c,0x06,0x03,0x01,0x00};

void main(void)
{
P0=0x00;
244 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
while(1)
{
switch(P2) //read sw value from P2
{
case sw1: //if sw1 is pressed
Pro1(); //run pattern 1 program
break;
case sw2: //if sw2 is pressed
Pro2(); //run pattern 2 program
break;
case sw3: //if sw3 is pressed
Pro3(); //run pattern 3 program
break;
case sw4: //if sw4 is pressed
Pro4(); //run pattern 4 program
break;
default:
P0=0x00;
break;
}
}
}
//----------------pattern 1 Program-----------------------
void Pro1(void)
{
do
{
for(n=0;n<8;n++)
{
P0=value1[n];
delay(200);
}
}while(P2==0xff);
}
//----------------pattern 2 Program-----------------------
void Pro2(void)
{
do
{
for(n=0;n<8;n++)
{
P0=value2[n];
delay(200);
}
}while(P2==0xff);
}
//----------------pattern 3 Program-----------------------
void Pro3(void)
{
do
{
for(n=0;n<10;n++)
{
P0=value3[n];
delay(200);
}
}while(P2==0xff);
}
ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 245

//----------------pattern 4 Program-----------------------
void Pro4(void)
{
do
{
for(n=0;n<10;n++)
{
P0=value4[n];
delay(200);
}
}while(P2==0xff);
}
//----------------delay Program-----------------------
void delay(int count)
{
int x,y;
for(x=0;x<count;x++)
{
for(y=0;y<500;y++)
{}
if(P2<0xff) // Check the switch
{ n=12;
x=count;
}
}
}

7. สรุปผลการปฏิบัติงาน
246 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมควบคุมการติดดับของ LED (ไฟวิ่ง) ที่ต่ออยู่ที่พอร์ ต 0 โดยให้รับค่ารู ปแบบ
จากสวิตช์ กาหนดให้ใช้ฟังก์ชนั่ if ในการตรวจสอบเงื่อนไข ทดลองผลทั้งการจาลองการทางานด้วย
โปรแกรม Proteus และทดลองด้วยวงจรจริ ง

รู ปที่ 7.7-5 วงจรที่ใช้ในการทดลอง


ใบงานที่ 7.7 การใช้งานพอร์ตทาหน้าที่เป็ นอินพุตพอร์ตเบื้องต้น 247

แบบทดสอบหลังเรียน ใบงานที่ 7.7


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หากต้อ งการชื่ อ แทนสวิ ต ช์ ที่ ต่ อ กับ พอร์ ต 5. หากผังงานเป็ นผังรู ปตรวจสอบเงื่อนไขโดยมี
เพียงบิตเดียวจะต้องทาอย่างไร เงื่อนไขที่ไม่เท่ากันต้องใช้คาสั่งใด
ก. ประกาศด้วยคาสั่ง bit ก. while(1)
ข. ประกาศด้วยคาสั่ง sbit ข. do
ค. ประกาศด้วยคาสัง่ port ค. if
ง. ประกาศด้วยคาสั่ง define ง. for
จ. ประกาศด้วยคาสั่ง bit(port.x) จ. loop
2. การใช้คาสั่ง Switch-case เงื่อนไขเป็ นเช่นไร 6. การอ่านค่าทั้งพอร์ ตที่เชื่ อมต่อกับวงจรสวิตช์
ก. ค่าใน case ต้องมากกว่าค่าใน switch เป็ นอ่านค่าครั้งละกี่บิต
ข. ค่าใน case ต้องน้อยกว่าค่าใน switch ก. 1 บิต
ค. ค่ า ใน case ต้ อ งไม่ เ ท่ า กั น กั บ ค่ า ใน ข. 2 บิต
switch ค. 4 บิต
ง. ค่าใน case ต้องเท่ากันกับค่าใน switch ง. 8 บิต
จ. ค่าใน case ต้องตรงข้ามกับค่าใน switch จ. 16 บิต
3. ผังงานของการตรวจสอบเงื่อนไขใช้แบบใด 7. หากชอร์ ต บิ ต ลงกราวด์ ค่ า ที่ อ่ า นได้จ ะเป็ น
ก. รู ปสี่ เหลี่ยมผืนผ้า อย่างไร
ข. รู ปทรงกลม ก. มีค่าเป็ นลอจิก 1
ค. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา ข. มีค่าเป็ นลอจิก 0
ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา ค. มีค่าเท่ากับ 0x00
จ. รู ปสามเหลี่ยม ง. มีค่าเท่ากับ 0x0f
4. ผังงานของคาสั่ง Switch ใช้แบบใด จ. มีค่าเท่ากับ 0xff
ก. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา 8. สวิต ช์ ที่ ใ ช้ใ นใบงาน ในโปรแกรม Proteus
ข. รู ปสี่ เหลี่ยมผืนผ้า ใช้ชื่อว่าอะไร
ค. รู ปทรงกลม ก. Switch
ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา ข. SW
จ. รู ปสามเหลี่ยม ค. SW_SPST
ง. Button
จ. SW_button
248 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. หากจาลองด้วยโปรแกรม Proteus ผ่านแต่วงจรจริ งไม่ทางานควรตรวจสอบที่ใด
ก. ไฟเลี้ยงวงจรสวิตช์
ข. ไอซีขบั LED
ค. ขาพอร์ ตที่เชื่อมต่อสวิตช์
ง. ไฟเลี้ยงวงจรไมโครคอนโทรลเลอร์
จ. การบัดกรี ตวั ต้านทาน
10. หากกดสวิตช์แล้วมีการตอบสนองไม่เหมือนกับการจาลองควรตรวจสอบที่ใด
ก. ไฟเลี้ยงวงจรไมโครคอนโทรลเลอร์
ข. ขาพอร์ตที่เชื่อมต่อสวิตช์
ค. ไฟเลี้ยงวงจรสวิตช์
ง. ไอซีขบั LED
จ. การบัดกรี ตวั ต้านทาน

เฉลยแบบทดสอบก่อนเรี ยน
1. ก 2. ค 3. ข 4. ง 5. ก 6. จ 7. จ 8. ข 9. ก 10. ง

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ง 3. ค 4. ก 5. ค 6. ง 7. ข 8. ง 9. ค 10. ข
ใบงานที่ 7.8
การเขียนโปรแกรมหน่ วงเวลา
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาวิธีการเขียนโปรแกรมหน่วงเวลา

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้ถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นใช้งานได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.6 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
250 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.8


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การกาหนดโหมดของวงจรไทเมอร์ สามารถ 5. การตรวจสอบการโอเวอร์โฟลวของวงจร
กาหนดที่รีจิสเตอร์ ใด ไทเมอร์ จะต้องใช้ผงั งานรู ปร่ างใด
ก. TCON ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. TNOD ข. รู ปทรงกลม
ค. TMOD ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. CMOD ง. รู ปสามเหลี่ยม
จ. TR1 จ. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้าย
2. การปิ ด/เปิ ดการอินเตอร์ รัพต์รวม กาหนดที่ ขวา
บิตใด 6. หากกระบวนการในผังงานกาหนดว่า “วงจร
ก. ET1 ไทเมอร์ 1 เริ่ มทางาน” จะต้องเขี ยนคาสั่งว่า
ข. EA อะไร
ค. IA ก. TR1=1;
ง. TR1 ข. TR1=0;
จ. TF1 ค. TF1=1;
3. การปิ ด/เปิ ดการอินเตอร์ รัพต์ของวงจร ง. TF1=0;
ไทเมอร์ 1 กาหนดที่บิตใด จ. TR0=1;
ก. ET1 7. หากกระบวนการในผังงานกาหนดว่า “วงจร
ข. EA ไทเมอร์ 1 ทางานครบหรื อไม่” จะต้องเขียน
ค. IA คาสั่งว่าอะไร
ง. TR1 ก. While(TR1= =0)
จ. TF1 ข. While(TF1= =0)
4. การปิ ด/เปิ ดการอินเตอร์ รัพต์จะต้องใช้ผงั งาน ค. While(TR0= =0)
รู ปร่ างใด ง. While(TF0= =0)
ก. รู ปทรงกลม จ. While(ET1= =0)
ข. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ค. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
ง. รู ปสี่ เหลี่ยมผืนผ้า
จ. รู ปสามเหลี่ยม
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 251
8. หากกาหนดให้วงจรไทเมอร์ ทางาน 50mS จะต้องทางานกี่ครั้งถึงจะได้เวลา 5 วินาที
ก. 10 ครั้ง
ข. 25 ครั้ง
ค. 50 ครั้ง
ง. 75 ครั้ง
จ. 100 ครั้ง
9. วิธีตรวจสอบการใช้เวลาทางานของวงจรจากการจาลองด้วยโปรแกรม Proteus ทาได้โดยวิธีใด
ก. ดูจากจากโปรแกรมนาฬิกา
ข. ดูจากจากนาฬิกาของเครื่ องคอมพิวเตอร์
ค. ดูจากแถบบาร์ ดา้ นล่างโปรแกรม Proteus
ง. ดูจากแถบบาร์ดา้ นข้างโปรแกรม Proteus
จ. ดูจากแถบบาร์ดา้ นบนโปรแกรม Proteus
10. หากการทดลองวงจรจริ งมี LED ติดดับพร้อมกันสองตัวสิ่ งที่เป็ นไปได้คือข้อใด
ก. ต่อ LED ผิดขั้ว
ข. LED ต่างสี กนั
ค. ไอซีขบั LED เสี ย
ง. ไฟเลี้ยงวงจรผิดปกติ
จ. เกิดการลัดวงจรก่อนเข้า LED
252 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
การหน่วงเวลาของไมโครคอนโทรลเลอร์ ไม่วา่ จะเป็ นไมโครคอนโทรลเลอร์ ในตระกูลใดก็ตาม
คือการเขียนโปรแกรมให้ตวั ซี พียไู ปทางานอื่นชัว่ ขณะเพื่อรอการทางานใด ๆ ตามต้องการ เช่นการติดดับ
ของหลอดไฟ การหน่วงเวลาสามารถเขียนโปรแกรมได้ 2 ลักษณะคือ
1. แบบใช้โปรแกรมคานวณคณิ ตศาสตร์
2. แบบใช้วงจรไทเมอร์

แบบใช้ โปรแกรมคานวณคณิตศาสตร์
เป็ นการเขียนโปรแกรมให้ไมโครคอนโทรลเลอร์ ไปคานวณคณิ ตศาสตร์ ซึ่ งมีลกั ษณะเหมือน
การนับเลขให้ได้ตามจานวนที่ต้ งั ค่าไว้ การนับแต่ละค่าซี พียูจะต้องใช้เวลาในการทางาน ดังนั้นหาก
ตัวเลขมีค่ามากซี พียูก็จะใช้เวลามาก ซึ่ งการใช้งานในลักษณะนี้ ได้นามาใช้งานมาแล้วในใบงานที่ 7.5
และใบงานที่ 7.7 ที่ผา่ นมา โดยสร้างเป็ นฟังก์ชนั่ ย่อย
หน่วงเวลา

void delay(int n) กาหนดตัวแปร x,y


{
int x,y;
for(x=0;x<n;x++) จริ ง
{ y+1<500?
for(y=0;y<500;y++)
{ เท็จ
} จริ ง
} x+1<n ?
}
เท็จ
จบ

แบบใช้ วงจรไทเมอร์
วงจรไทเมอร์ เป็ นวงจรที่มีอยูภ่ ายในตัวไมโครคอนโทรลเลอร์ ซึ่ งทางานได้ 2 ลักษณะคือทางาน
เป็ นวงจรไทเมอร์ เมื่อใช้ความถี่ภายใน และทางานเป็ นวงจรเคาน์เตอร์ เมื่อรับความถี่จากภายนอก สาหรับ
การใช้งานเป็ นวงจรไทเมอร์ ในบทเรี ยนนี้จะใช้งานในด้านการหน่วงเวลาซึ่ งใช้งานในโหมด 1 เป็ นโหมด
ที่ ใ ช้ง านคล้า ยกับ โหมด 0 เพี ย งแต่ ใ ช้รีจิ ส เตอร์ ต้ งั ค่ า ทั้ง สองตัวครบทุ ก บิ ต คื อใช้ง านครั้ งละ 16 บิ ต
เนื่ องจากสามารถตั้งค่าในการหน่วงได้มากกว่าในโหมดอื่น การทางานจะเหมือนกับวงจรนับเลขไบนารี่
ขนาด 16 บิตที่สามารถตั้งค่าเริ่ มต้นได้นนั่ เอง การทางานของวงจรเริ่ มจากเมื่อได้รับสัญญาณนาฬิกาจาก
OSC ผ่านวงจรหาร 12 ความถี่จะลดลง 12 เท่าผ่านสวิตช์สองตัวแล้วเข้าสู่ รีจิสเตอร์ ทาให้ค่าในรี จิสเตอร์
ตั้งค่าจะเพิ่มขึ้นครั้งละ 1 ค่าทุก ๆ 1 ลู กคลื่น โดยจะเพิ่มขึ้นเรื่ อย ๆ จนกระทั้งรี จิสเตอร์ ต้ งั ค่ามีค่าลอจิก
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 253
เป็ นลอจิก 1 ครบทั้ง 16 บิตคือมีค่าเป็ น FFFFH และเมื่อได้รับสัญญาณอีก 1 ลู กจะเกิ ดการล้นของข้อมูล
(Over flow) บิตแสดงการล้น (TF: Over flow flag) จะมีค่าเป็ นลอจิก 1 โดยโครงสร้างของโหมด 1 เป็ น
ดังรู ปที่ 7.8-1

OSC ÷12
C/T=0
สัญญาณ
TL1 TH1 TF1 อินเตอร์รัพต์
ขา T1 C/T=1 8 บิต 8 บิต
TR1
GATE
ขา INT1
รู ปที่ 7.8-1 โครงสร้างในโหมด 1 ของวงจรไทเมอร์ /เคาน์เตอร์ 1

ค่าความถี่ ณ ตาแหน่งต่าง ๆ ของบล็อกไดอะแกรมเป็ นดังรู ปที่ 7.8-2 เริ่ มจากความถี่ที่เกิดขึ้นจาก


ภาคผลิตความถี่ (OSC) เป็ นความถี่ ต้ งั ต้น (f0) โดยมี ค่าเท่ากับความถี่ ของคริ สตอลที่นามาต่อใช้งานใน
วงจรไมโครคอนโทรลเลอร์ ผ่านบล็อกหาร 12 ความถี่ จะถู กหารลงไป 12 หลังจากนั้นความถี่ จะผ่าน
บล็อกรี จิสเตอร์ THTL เพื่อนับค่าขึ้นไปจนเกิดการล้นของข้อมูลแล้วบิต TF1 จึงมีค่าเป็ นลอจิก 1 การนับ
ค่านี้ เปรี ยบเสมื อนการหารความถี่ ที่สามารถกาหนดค่าของตัวหารได้จากการกาหนดค่าการหารลงใน
รี จิสเตอร์ TH,TL

1 1
𝑓0 = 𝑓 = 𝑓0 ×
𝑡 12

OSC(f0) ÷12 ÷(65536-THTL) TF1


1 1
𝑓 = 𝑓0 × ×
12 (65536 − 𝑇𝐻𝑇𝐿)
TR1
รู ปที่ 7.8-2 ความถี่ในแต่ละจุดสาหรับโหมด 0 ของวงจรไทเมอร์ /เคาน์เตอร์ 1

ดังนั้นคาบเวลาในโหมด 1 จะได้
254 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตัวอย่าง เช่นถ้าวงจรใช้คริ สตอล 12 MHz หาค่าที่ตอ้ งกาหนดในรี จิสเตอร์ TH1,TL1 เมื่อต้องการให้วงจร


ไทเมอร์ทางานเป็ นเวลาเวลา 1 mS
1
วิธีทา จากสมการ T =
 1 1 
 f0   
 12  65536  THTL  
1
1 mS =
 1 1 
12 MHz   
 12  65536  THTL  
1
1 mS =
 1 
 1MHz  
  65536  THTL  
1 1
 65536  THTL  = 1MHz 1 mS 
65536  THTL = 1MHz 1 mS
THTL = 65536  1MHz 1 mS 
= 65536  1000
= 64536
= FC18H
 ต้องตั้งค่าใน TH = FCH
และต้องตั้งค่าใน TL = 18H

ในกรณี ที่ใช้คริ สตอล 11.0592MHz ในเวลาเดียวกัน (ต้องการเวลา 1 ms) จะได้วา่


 11.0592 MHz 
THTL = 65536    1 mS 
 12 
= 65536 - 921.6
= 64614.4
ปั ดเศษทิ้งเนื่ องจากการกาหนดค่าลงในรี จิสเตอร์ จะต้องเป็ นค่าจานวนเต็มและการใช้งานไทเมอร์ ตอ้ งมี
คาสั่งอื่น ๆ ที่ใช้เตรี ยมการทางานที่ทาให้เวลาเพิ่มขึ้นดังนั้นค่าที่ใช้เป็ น 64614 เมื่อแปลงเป็ นเลขฐาน 16
จะได้ FC66H
 ต้องตั้งค่าใน TH = FCH
และต้องตั้งค่าใน TL = 66H
ค่าที่ใช้กาหนดในรี จิสเตอร์ TH,TL เมื่อใช้กบั คริ สตอลทั้ง 2 ความถี่เพื่อให้ได้เวลาเป็ นมิลลิวนิ าทีดงั ตาราง
ที่ 7.8-1
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 255
ตารางที่ 7.8-1 ค่าที่ใช้กาหนดในรี จิสเตอร์ TH,TL เพื่อให้ได้เวลาที่ตอ้ งการ
11.0592 MHz 12 MHz 11.0592 MHz 12 MHz
Time Time
(ms) THTL THTL THTL THTL (ms) THTL THTL THTL THTL
(DEC) (HEX) (DEC) (HEX) (DEC) (HEX) (DEC) (HEX)
1 64614 FC66 64536 FC18 16 50790 C666 49536 C180
2 63692 F8CC 63536 F830 17 49868 C2CC 48536 BD98
3 62771 F533 62536 F448 18 48947 BF33 47536 B9B0
4 61849 F199 61536 F060 19 48025 BB99 46536 B5C8
5 60928 EE00 60536 EC78 20 47104 B800 45536 B1E0
6 60006 EA66 59536 E890 21 46182 B466 44536 ADF8
7 59084 E6CC 58536 E4A8 22 45260 B0CC 43536 AA10
8 58163 E333 57536 E0C0 23 44339 AD33 42536 A628
9 57241 DF99 56536 DCD8 24 43417 A999 41536 A240
10 56320 DC00 55536 D8F0 25 42496 A600 40536 9E58
11 55398 D866 54536 D508 26 41574 A266 39536 9A70
12 54476 D4CC 53536 D120 27 40652 9ECC 38536 9688
13 53555 D133 52536 CD38 28 39731 9B33 37536 92A0
14 52633 CD99 51536 C950 29 38809 9799 36536 8EB8
15 51712 CA00 50536 C568 30 37888 9400 35536 8AD0
31 36966 9066 34536 86E8 51 18534 4866 14536 38C8
32 36044 8CCC 33536 8300 52 17612 44CC 13536 34E0
33 35123 8933 32536 7F18 53 16691 4133 12536 30F8
34 34201 8599 31536 7B30 54 15769 3D99 11536 2D10
35 33280 8200 30536 7748 55 14848 3A00 10536 2928
36 32358 7E66 29536 7360 56 13926 3666 9536 2540
37 31436 7ACC 28536 6F78 57 13004 32CC 8536 2158
38 30515 7733 27536 6B90 58 12083 2F33 7536 1D70
39 29593 7399 26536 67A8 59 11161 2B99 6536 1988
40 28672 7000 25536 63C0 60 10240 2800 5536 15A0
41 27750 6C66 24536 5FD8 61 9318 2466 4536 11B8
42 26828 68CC 23536 5BF0 62 8396 20CC 3536 0DD0
43 25907 6533 22536 5808 63 7475 1D33 2536 09E8
44 24985 6199 21536 5420 64 6553 1999 1536 0600
45 24064 5E00 20536 5038 65 5632 1600 536 0218
46 23142 5A66 19536 4C50 66 4710 1266
47 22220 56CC 18536 4868 67 3788 0ECC
48 21299 5333 17536 4480 68 2867 0B33
49 20377 4F99 16536 4098 69 1945 0799
50 19456 4C00 15536 3CB0 70 1024 0400
71 102 0066

ค่าเวลาในตารางเป็ นค่าเวลาจานวนเต็ม เมื่อคานวณจะมีเศษที่เป็ นทศนิยมแต่การกาหนดค่าลงใน


รี จิสเตอร์ จะต้องเป็ นจานวนเต็มดังนั้นค่าเวลาจะคลาดเคลื่อนอยูบ่ า้ ง และในกรณี ที่ตอ้ งการค่าเวลาที่เป็ น
ทศนิยมนักศึกษาสามารถคานวณใช้งานเองได้ดงั ตัวอย่างข้างต้น
256 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

การใช้งานไทเมอร์แบบใช้การขัดจังหวะการทางาน (Interrupt)
การขัดจังหวะการทางานที่ได้กล่าวมาแล้วในบทที่ 4 มีท้ งั หมดจาก 7 แหล่ง ซึ่ งการขัดจังหวะแต่
ละแหล่งมีตาแหน่งที่ตอบสนองต่อการอินเตอร์ รัพต์ (Interrupt vector) ต่างกันไป ดังตารางที่ 7.8-2

ตารางที่ 7.8-2 ตาแหน่งที่ตอบสนองต่อการอินเตอร์ รัพต์


แหล่งอินเตอร์ รัพต์ ตาแหน่งตอบสนอง หมายเลข
Reset 0000H -
External Interrupt 0 (INT0) 0003H 0
Timer 0 000BH 1
External Interrupt 1 (INT1) 0013H 2
Timer 1 001BH 3
Serial Port 0023H 4
Timer 2 002BH 5

รี จิสเตอร์ควบคุมการอินเตอร์รัพต์ คือรี จิสเตอร์ IE (รายละเอียดได้กล่าวมาแล้วในบทที่ 6 ) ซึ่งใน


บทนี้ ใช้รีจิสเตอร์ IE ควบคุมการทางานของวงจรไทเมอร์ 1 โดยควบคุมที่บิต ET1 และ EA โดยการ
ควบคุมทาได้ดงั นี้

ET1=1; ยอมให้อินเตอร์ รัพต์จากวงจรไทเมอร์ 1 ได้


EA=1; ยอมไมโครคอนโทรลเลอร์ รับสัญญาณอินเตอร์ รัพต์ได้

รู ปแบบการใช้งานอินเตอร์รัพต์ในภาษาซี
ในการเขียนโปรแกรมภาษาซี เพื่อใช้งานการอินเตอร์ รัพต์ สามารถทาได้โดยการระบุหมายเลข
การอินเตอร์ รัพต์ทา้ ยฟังก์ชนั่ ตอบสนองการอินเตอร์ รัพต์ โดยมีรูปแบบดังนี้
#include<REGX52.H>
void ชือ่ ฟังก์ชน่ ั (void); //โปรแกรมทีจ่ ะสร้างขึน้ เพือ่ ตอบสนองการอินเตอร์ร ัพต์
void main (void)
{
ET1=1; //เปิ ดการอินเตอร์ร ัพต์จากวงจรไทเมอร์
EA=1; //เปิ ดการอินเตอร์ร ัพต์ทงหมด
ั้ (Enable All)


}
void ชือ่ ฟังก์ชน่ ั (void) interrupt 3 //โปรแกรมตอบสนองการอินเตอร์ร ัพต์จากวงจรไทเมอร์
{
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 257

6. การดาเนินการทดลอง
การทดลองใบงานที่ 7.8 เป็ นการทดลองการเขียนโปรแกรมหน่วงเวลาให้ได้เวลาตามต้องการ
วงจรใช้ทดลองเป็ นวงจรเดิมที่ใช้ทดลองในใบงานที่ 7.7 แต่ไม่ได้ใช้งานสวิตช์ ซึ่งวงจรเป็ นดังรู ปที่ 7.8-3

รู ปที่ 7.8-3 วงจรที่ใช้ในการทดลอง

การทดลองด้วยวิธีการจาลองการทางานของวงจรไมโครคอนโทรลเลอร์ ต่อโปรแกรมหน่วงเวลา
ที่เขียนขึ้นด้วยโปรแกรม Proteus ใช้วงจรในการจาลองการทางานเช่นเดียวกับวงจรที่ใช้จาลองการทางาน
ในใบงานที่ 7.5 ซึ่งใช้อุปกรณ์อิเล็กทรอนิกส์ ต่อวงจรดังนี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180  MINRES180R
4. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
5. LED LED-YELLOW

หมายเหตุ นักศึกษาสามารถคัดลอกไฟล์จาลองการทางานของวงจรไมโครคอนโทรลเลอร์ ดว้ ย


โปรแกรม Proteus ที่ใช้ในใบงานที่ 7.5 มาใช้งานได้โดยไม่ตอ้ งสร้างไฟล์ใหม่
258 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รู ปที่ 7.8-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

การทดลองทางานของวงจรไมโครคอนโทรลเลอร์ดว้ ยวงจรจริ ง ใช้วงจรเดิมที่ได้สร้างมาแล้วใน


ใบงานที่ 7.6 ดังรู ปที่ 7.8-5
7805
103

74HC573

AT89S52

รู ปที่ 7.8-5 วงจรจริ งที่ใช้ทดลอง


ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 259
การทดลองที่ 1 เขียนโปรแกรมไฟวิ่งโดยวิ่งจังหวะล่ะ 0.5 วินาที โดยใช้วงจรไทเมอร์ ในการการหน่ วง
เวลาการติดดับของ LED ซึ่ งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมจากโจทย์ที่กาหนดข้างต้นเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรที่ตอ้ งการใช้
2. นาค่าตัวแปรส่ งออกพอร์ ต
3. หน่วงเวลา
4. เพิ่มค่าตัวแปร
5. กลับไปทางานในลาดับที่ 2
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้
หน่วงเวลา
เริ่ ม
กาหนดค่าเริ่ มต้นใน TH,TL
กาหนดตัวแปร,ค่าเริ่ มต้น
วงจรไทเมอร์ เริ่ มทางาน
ส่ งค่าตัวแปรไปยังพอร์ ต 0
เท็จ
ครบเวลา?
หน่วงเวลา
จริ ง
เพิ่มค่าตัวแปร 1 ค่า เท็จ
ครบ 50 รอบ?
จริ ง
จบ
แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม
Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(void); //declare delay program
void main (void)
{
unsigned char value;
TMOD=0x10; //set timer1 to mode1
260 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
while(1)
{
P0=value; //send value to port 0
delay(); //delay
value++; //increment value
}
}
void delay(void)
{
int i;
for(i=0;i<50;i++) //50 loop (50x10ms=500ms=0.5S)
{
TH1=0xDC; //add value to TH,TL
TL1=0x00; //for 10mS. Period
TF1=0; //clear flag
TR1=1; //start timer1
while(TF1==0) //wait for end of the period
{}
TR1=0; //stop timer1
}
}
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้โปรแกรมจาก for(i=0;i<50;i++) เป็ นตัวเลขอื่นเช่น 100, 500, 1000 แล้วสังเกตผล

การทดลองที่ 2 เขียนโปรแกรมไฟวิ่งให้มีการเปลี่ยนแปลงในแต่ละจังหวะใช้เวลา 0.5 วินาที โดยใช้การ


หน่วงเวลาที่ใช้วงจรไทเมอร์ เป็ นตัวทางาน แต่ใช้การเขียนโปรแกรมแบบใช้งานอินเตอร์ รัพต์จากวงจรไท
เมอร์ 1 และใช้วงจรเดียวกับวงจรในการทดลองที่ 1 ซึ่ งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมจากโจทย์ที่กาหนดข้างต้นเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรที่ตอ้ งการใช้
2. นาค่าตัวแปรส่ งออกพอร์ ต
3. หน่วงเวลา
4. เพิ่มค่าตัวแปร
5. กลับไปทางานในลาดับที่ 2
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 261
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

โปรแกรมตอบสนองการอินเตอร์รัพต์
เริ่ ม
กาหนดค่าเริ่ มต้นใน TH,TL
กาหนดตัวแปร,ค่าเริ่ มต้น
เคลียร์แฟล็ก
วงจรไทเมอร์ เริ่ มทางาน

ใช่ เพิ่มตัวนับจานวนอินเตอร์ รัพต์ 1 ค่า


อินเตอร์รัพต์ครบ
50 ครั้ง หรื อไม่
ไม่ใช่ จบ
ส่ งค่าตัวแปรออกพอร์ ต เพิ่มค่าตัวแปร 1 ค่า

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(void); //declare delay program
int i; //Variable cycle count
void main (void)
{
unsigned char value=0x01;
TMOD=0x10; //set timer1 to mode1
TH1=0xDC; //add value to TH,TL
TL1=0x00; //for 10mS. Period
TF1=0; //clear flag
ET1=1;
EA=1;
while(1)
{
i=0;
TR1=1; //start timer1
while(i<50)
{
P0=value;
}
value++;
}
}
void delay(void) interrupt 3
{
TH1=0xDC; //add value to TH,TL
TL1=0x00; //for 10mS. Period
TF1=0; //clear flag
i++; //Add up the variables.
}
262 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมไฟจราจรสี่ แยกโดยให้ LED แต่ละตัวแทนไฟสี ต่าง ๆ ดังนี้
B

D3
D7
D6
D5

D2
D1
A
D3
D2
D1
D7
D6
D5

รู ปที่ 7.8-6 ตาแหน่งการจัดวางของ LED

ตารางที่ 7.8-3 สถานะการทางานของ LED ในงานที่มอบหมาย


ถนน ถนนเส้นทาง A ถนนเส้นทาง B
เวลา
LED D7 D6 D5 D4 D3 D2 D1 D0 หมายเหตุ
(วินาที)
แทนไฟจราจรสี แดง เหลือง เขียว - แดง เหลือง เขียว -
A หยุด - - - - ติด - 25
ติด – หมายถึง LED
B วิง่ - - - - ติด - - 5
ตาแหน่งนั้น ๆ
A วิง่ - - ติด - - - - 25
ติด ดับ
B หยุด - ติด - - - - - 5
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 263
วงจรที่ใช้ทดลองใช้วงจรเดียวกับการทดลองที่ 1 ดังรู ป 7.8-7

รู ปที่ 7.8-7 วงจรที่ใช้ในการทดลอง


264 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.8


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การกาหนดโหมดของวงจรไทเมอร์ สามารถ 5. การตรวจสอบการโอเวอร์โฟล์วของวงจร
กาหนดที่รีจิสเตอร์ ใด ไทเมอร์ จะต้องใช้ผงั งานรู ปร่ างใด
ก. TMOD ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. TCON ข. รู ปทรงกลม
ค. TNOD ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. CMOD ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้าย
จ. TR1 ขวา
2. การปิ ด/เปิ ดการอินเตอร์ รัพต์รวม กาหนดที่ จ. รู ปสามเหลี่ยม
บิตใด 6. หากกระบวนการในผังงานกาหนดว่า “วงจร
ก. ET1 ไทเมอร์ 1 เริ่ มทางาน” จะต้องเขี ยนคาสั่งว่า
ข. IA อะไร
ค. TR1 ก. TR1=0;
ง. EA ข. TF1=1;
จ. TF1 ค. TR0=1;
3. การปิ ด/เปิ ดการอิ น เตอร์ รั พ ต์ข องวงจรไท ง. TF1=0;
เมอร์ 1 กาหนดที่บิตใด จ. TR1=1;
ก. EA 7. หากกระบวนการในผังงานกาหนดว่า “วงจร
ข. IA ไทเมอร์ 1 ทางานครบหรื อไม่” จะต้องเขียน
ค. ET1 คาสั่งว่าอะไร
ง. TR1 ก. While(TF1= =0)
จ. TF1 ข. While(TR1= =0)
4. การปิ ด/เปิ ดการอินเตอร์ รัพต์จะต้องใช้ผงั งาน ค. While(TR0= =0)
รู ปร่ างใด ง. While(TF0= =0)
ก. รู ปทรงกลม จ. While(ET1= =0)
ข. รู ปสี่ เหลี่ยมผืนผ้า
ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. รู ปสามเหลี่ยม
ใบงานที่ 7.8 การเขียนโปรแกรมหน่วงเวลา 265
8. หากกาหนดให้วงจรไทเมอร์ ทางาน 50mS จะต้องทางานกี่ครั้งถึงจะได้เวลา 5 วินาที
ก. 10 ครั้ง
ข. 100 ครั้ง
ค. 25 ครั้ง
ง. 50 ครั้ง
จ. 75 ครั้ง
9. วิธีตรวจสอบการใช้เวลาทางานของวงจรจากการจาลองด้วยโปรแกรม Proteus ทาได้โดยวิธีใด
ก. ดูจากจากโปรแกรมนาฬิกา
ข. ดูจากจากนาฬิกาของเครื่ องคอมพิวเตอร์
ค. ดูจากแถบบาร์ดา้ นข้างโปรแกรม Proteus
ง. ดูจากแถบบาร์ ดา้ นล่างโปรแกรม Proteus
จ. ดูจากแถบบาร์ดา้ นบนโปรแกรม Proteus
10. หากการทดลองวงจรจริ งมี LED ติดดับพร้อมกันสองตัวสิ่ งที่เป็ นไปได้คือข้อใด
ก. ต่อ LED ผิดขั้ว
ข. LED ต่างสี กนั
ค. เกิดการลัดวงจรก่อนเข้า LED
ง. ไอซีขบั LED เสี ย
จ. ไฟเลี้ยงวงจรผิดปกติ

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ข 3. ก 4. ง 5. จ 6. ก 7. ข 8. จ 9. ค 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ง 3. ค 4. ข 5. ง 6. จ 7. ก 8. ข 9. ง 10. ค
ใบงานที่ 7.9
การสร้ างวงจรขับลาโพง
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรต่อพ่วงที่ทาหน้าที่เป็ นวงจรขับลาโพง
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรขับลาโพงได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรขับลาโพงได้
3. บอกขั้นตอนการประกอบวงจรขับลาโพงได้
4. สร้าง (ประกอบ) วงจรขับลาโพงได้
5. ทดสอบการทางานของวงจรขับลาโพงได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.4 (วงจรต่อพ่วง) 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.9-5(a) ประกอบด้วย
3.1 ลาโพง 2 นิ้ว 0.25 W 8Ω 1 ตัว 3.3 ตัวเก็บประจุ 1 uF/25V 1 ตัว
3.2 ตัวเก็บประจุ 220 uF/25V 1 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปและจุดประสงค์เชิงพฤติกรรม
2. ศึกษาทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
3. ดาเนินการสร้างวงจรสวิตช์
4. วัดและทดสอบการทางานของวงจร
5. สรุ ปผลการปฏิบตั ิงาน
268 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.9


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. อุปกรณ์ที่นามาใช้เป็ นวงจรความถี่ ต่าผ่านใน 5. ลาโพงในใบงานวงจรขับลาโพงทาหน้าที่ใด
ใบงานคือข้อใด ก. ส่ งผ่านความถี่ต่า
ก. ขดลวด ข. กรองความถี่สูงทิ้ง
ข. ทรานซิสเตอร์ ค. รักษาระดับความถี่
ค. ตัวเก็บประจุ ง. เปลี่ยนสัญญาณไฟฟ้าเป็ นเสี ยง
ง. ไดโอด จ. ปรับสมดุลวงจร
จ. ไอซี 6. การประกอบวงจรความถี่ ต่าผ่านในใบงานนี้
2. อุ ปกรณ์ ท้ งั หมดที่ ต่อเพิ่มในใบงานวงจรขับ ใช้ต่อบิตใด
ลาโพงมีกี่ตวั ก. บิต P0.1
ก. 3 ตัว ข. บิต P0.2
ข. 4 ตัว ค. บิต P0.4
ค. 5 ตัว ง. บิต P0.3
ง. 6 ตัว จ. บิต P0.0
จ. 7 ตัว 7. การต่อตัวเก็บประจุค่าต่ าในใบงานนี้ จะต้อง
3. ตัวเก็บประจุค่าสู งที่ต่ออนุ กรมกับลาโพงทา ต่ออย่างไร
หน้าที่ใด ก. ต่อระหว่างไฟเลี้ยงกับขั้วลาโพง
ก. กรองความถี่สูงทิง้ ข. ต่อระหว่างกราวด์กบั ขั้วลาโพง
ข. รักษาระดับความถี่ ค. ต่ อ ระหว่ า งเอาต์ พุ ต ไอซี ขั บ กั บ ขั้ ว
ค. ไบอัสวงจร ลาโพง
ง. ส่ งผ่านความถี่ต่า ง. ต่อระหว่างไฟเลี้ยงกับกราวด์
จ. ปรับสมดุลวงจร จ. ต่อระหว่างขั้วลาโพงกับขั้วลาโพง
4. ตัวเก็บประจุค่าต่าที่ต่อขาไอซี ขบั ลงกราวด์ทา 8. การต่อลาโพงในใบงานจะต้องต่ออย่างไร
หน้าที่ใด ก. ต่อระหว่างไฟเลี้ยงกับกราวด์
ก. ส่ งผ่านความถี่ต่า ข. ต่อระหว่างตัวเก็บประจุค่าต่ากับกราวด์
ข. กรองความถี่สูงทิ้ง ค. ต่อระหว่างเอาต์พุตไอซีขบั กับกราวด์
ค. รักษาระดับความถี่ ง. ต่อระหว่างเอาต์พุตไอซีขบั
ง. ไบอัสวงจร จ. ต่ อ ระหว่ า งตั ว เก็ บ ประจุ ค่ า ต่ า กั บ
จ. ปรับสมดุลวงจร ไฟเลี้ยง
ใบงานที่ 7.9 การสร้างวงจรขับลาโพง 269
9. การทดสอบเบื้องต้นของวงจรขับลาโพงทาได้โดยวิธีใด
ก. ปลดไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้กราวด์เขี่ยขาจัม๊ บิต P0.0
ข. ปลดไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้ไฟบวกเขี่ยขาจัม๊ บิต P0.0
ค. ปลดไฟเลี้ยง แล้วใช้กราวด์เขี่ยขาลาโพง
ง. ป้ อนไฟเลี้ยง แล้วใช้ไฟบวกเขี่ยขาลาโพง
จ. ป้ อนไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้กราวด์เขี่ยขาจัม๊ บิต P0.0
10. การตรวจสอบลาโพงควรใช้วธิ ีใด
ก. วัดกระแสไฟเข้าลาโพง
ข. วัดแรงดันไฟคร่ อมลาโพง
ค. สังเกตจากสภาพภายนอก
ง. ใช้มิเตอร์ วดั ค่าความต้านทานของลาโพง
จ. นาลาโพงต่อเข้าเครื่ องขยายเสี ยง
270 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ไมโครคอนโทรลเลอร์ สามารถสร้างลอจิกที่เปลี่ยนไปเปลี่ยนมาระหว่างลอจิก 1 กับลอจิก 0 จาก
โปรแกรมที่เขียนขึ้น และเมื่อให้ลอจิกมีการเปลี่ยนแปลงที่คงที่ก็จะได้ความถี่ข้ ึนมา ซึ่ งความถี่ที่สร้างขึ้น
สามารถสร้างความถี่ในช่วงความถี่ที่มนุ ษย์สามารถได้ยินได้ที่เรี ยกว่าความถี่เสี ยง (ช่วงความถี่ 20 Hz ถึง
20 kHz) โดยมีรูปร่ างของคลื่นที่สร้างขึ้นที่เป็ นคลื่นสี่ เหลี่ ยมซึ่ งมีองค์ประกอบไฟฟ้ ากระแสตรงอยูด่ ว้ ย
เมื่อนามาใช้งานโดยตรงอาจทาให้เกิดอันตรายต่อลาโพงได้
คลื่ นรู ปสี่ เหลี่ ยมเป็ นคลื่ นที่ เกิ ดจากการรวมกันของความถี่ ต้ งั ต้น (Fundamental) กับคลื่ นลู กที่
เรี ยกว่า ฮาร์โมนิก (Harmonic) ลาดับคี่ หมายถึงเป็ นการรวมกันของความถี่ 1, 3, 5, 7, 9, …เท่าของความถี่
ตั้งต้น โดยแสดงดังรู ปที่ 7.9-1

รู ปที่ 7.9-1 แสดงผลของการรวมกันของคลื่นซายน์ทาให้เกิดรู ปคลื่นสี่ เหลี่ยม

ความถี่ที่ตอ้ งการคือความถี่ต้ งั ต้นเท่านั้น (ในทางปฏิบตั ิทาได้ยาก) ทาได้โดยการสร้างวงจรกรอง


ความถี่ที่ให้ความถี่ต่าผ่านที่เรี ยกว่าโลว์พาสฟิ ลเตอร์ (Low pass filter) โดยให้ความถี่ที่เป็ นความถี่ต้ งั ต้น
ผ่านเท่านั้น ใบงานนี้ ใช้ไอซี ขบั วงจรเดิมของใบงานที่ 7.4 โดยเลือกขับเฉพาะบิต P0.0 เพียงบิตเดียวและ
ใช้ตวั เก็บประจุเพียงสองตัวดังรู ปที่ 7.9-2

รู ปที่ 7.9-2 แสดงวงจรสวิตช์ที่ใช้เชื่อมต่อกับไมโครคอนโทรลเลอร์


ใบงานที่ 7.9 การสร้างวงจรขับลาโพง 271

6. การดาเนินการสร้ างวงจร
วงจรสมบูรณ์ที่จะในไปใช้ในการทดลองการเขียนโปรแกรมสร้างเสี ยงในใบงานที่ 7.10

รู ปที่ 7.9-3 วงจรสมบูรณ์ที่ใช้ในการทดลองการสร้างเสี ยง

วงจรขับลาโพงที่สร้างต่อขยายเพิ่มเติมจากวงจรเดิมที่สร้างไว้ในใบงานที่ 7.6

รู ปที่ 7.9-4 วงจรขับลาโพงสร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.6


272 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
วงจรและแนวทางการสร้างเฉพาะส่ วนวงจรขับลาโพง

รู ปที่ 7.9-5 (a) วงจรขับลาโพง (b) แนวทางจัดวางโดยใช้แผ่นปริ้ นวงจรเดิมของใบงานที่ 7.6

การทางานของวงจร
วงจรรู ปที่ 7.9-5 (a) เป็ นวงจรขับลาโพงโดยรับสัญญาณความถี่ ที่สร้างขึ้นจากโปรแกรม วงจรนี้
ใช้ไอซี ขบั ตัวเดี ยวกันกับวงจรขับ LED เพียงแต่ใช้งานเพียงบิตเดี ยวเฉพาะบิ ตที่ ขบั ลาโพงคือบิต P0.0
และใช้ตวั เก็บประจุจานวน 2 ตัวสาหรับตัดองค์ประกอบไฟตรงและลดองค์ประกอบของความถี่สูงก่อน
ต่อลาโพงเพื่อลดอันตรายที่อาจเกิดขึ้นกับลาโพง

การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยใช้พ้นื ที่ที่ได้เว้นไว้จากการทดลองในใบงานที่ 7.6
2. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.9-5 (a)

แนวทางการสร้ างวงจร
ประกอบวงจรสวิตช์ลงแผ่นปริ้ นอเนกประสงค์แผ่นเดี ยวกับวงจรขับ LED ในใบงานที่ 7.6 จัด
วางให้ตาแหน่ งตัวเก็บประจุให้อยู่ในตาแหน่ งบัดกรี ง่ายที่สุด สาหรับแนวทางการวางตาแหน่ งอุปกรณ์
ตลอดจนแนวการบัดกรี เป็ นดังรู ปที่ 7.9-5(b)
ใบงานที่ 7.9 การสร้างวงจรขับลาโพง 273

7. การทดสอบการทางานของวงจร
การทดสอบการทางานเชื่ อมต่อแผงวงจรต่อพ่วงเข้ากับวงจรไมโครคอนโทรลเลอร์ เป็ นดังรู ป

7805
103

74HC573
AT89S52

รู ปที่ 7.9-6 การต่อเชื่อมวงจรไมโครคอนโทรลเลอร์ กบั วงจรขับลาโพง

ทดสอบการทางานของวงจรในใบงานที่ 7.9 ทดลองได้จากซอฟท์แวร์ โดยดาเนินการดังนี้


1. ต่อเชื่ อมวงจรต่อพ่วงเข้ากับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.9-6
2. เขียนโปรแกรมเพื่อทดสอบการทางานวงจรขับลาโพงโดยใช้โปรแกรม Keil uVision ดังนี้
#include<REGX52.H>
void delay(void);
sbit spk=P0^0; //use speaker connect to P0.0
void main(void)
{
while(1)
{
spk=!spk; //invert logic speaker
delay();
}
}
void delay(void)
{
TH1=0xEE; //add value to TH,TL
TL1=0x00; //for 5mS. Period
TF1=0; //clear flag
TR1=1; //start timer1
while(TF1==0) //wait for end of the period
{}
}
274 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX File)
4. นาไฟล์ภาษาเครื่ องที่ได้โปรแกรมลงตัวไมโครคอนโทรลเลอร์ ฟังเสี ยงที่ได้จากลาโพง

8. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.9 การสร้างวงจรขับลาโพง 275

แบบทดสอบหลังเรียน ใบงานที่ 7.9


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. อุปกรณ์ที่นามาใช้เป็ นวงจรความถี่ ต่าผ่านใน 5. ลาโพงในใบงานวงจรขับลาโพงทาหน้าที่ใด
ใบงานคือข้อใด ก. เปลี่ยนสัญญาณไฟฟ้าเป็ นเสี ยง
ก. ตัวเก็บประจุ ข. ส่ งผ่านความถี่ต่า
ข. ขดลวด ค. กรองความถี่สูงทิ้ง
ค. ทรานซิสเตอร์ ง. รักษาระดับความถี่
ง. ไดโอด จ. ปรับสมดุลวงจร
จ. ไอซี 6. การประกอบวงจรความถี่ ต่าผ่านในใบงานนี้
2. อุ ปกรณ์ ท้ งั หมดที่ ต่อเพิ่มในใบงานวงจรขับ ใช้ต่อบิตใด
ลาโพงมีกี่ตวั ก. บิต P0.2
ก. 1 ตัว ข. บิต P0.1
ข. 2 ตัว ค. บิต P0.0
ค. 3 ตัว ง. บิต P0.4
ง. 4 ตัว จ. บิต P0.3
จ. 5 ตัว 7. การต่อตัวเก็บประจุค่าต่ าในใบงานนี้ จะต้อง
3. ตัวเก็บประจุค่าสู งที่ต่ออนุ กรมกับลาโพงทา ต่ออย่างไร
หน้าที่ใด ก. ต่ อ ระหว่ า งเอาต์ พุ ต ไอซี ขั บ กั บ ขั้ ว
ก. กรองความถี่สูงทิง้ ลาโพง
ข. ส่ งผ่านความถี่ต่า ข. ต่อระหว่างไฟเลี้ยงกับขั้วลาโพง
ค. รักษาระดับความถี่ ค. ต่อระหว่างกราวด์กบั ขั้วลาโพง
ง. ไบอัสวงจร ง. ต่อระหว่างไฟเลี้ยงกับกราวด์
จ. ปรับสมดุลวงจร จ. ต่อระหว่างขั้วลาโพงกับขั้วลาโพง
4. ตัวเก็บประจุค่าต่าที่ต่อขาไอซี ขบั ลงกราวด์ทา 8. การต่อลาโพงในใบงานจะต้องต่ออย่างไร
หน้าที่ใด ก. ต่อระหว่างไฟเลี้ยงกับกราวด์
ก. ส่ งผ่านความถี่ต่า ข. ต่อระหว่างเอาต์พุตไอซีขบั กับกราวด์
ข. รักษาระดับความถี่ ค. ต่อระหว่างเอาต์พุตไอซีขบั
ค. ไบอัสวงจร ง. ต่อระหว่างตัวเก็บประจุค่าต่ากับกราวด์
ง. กรองความถี่สูงทิง้ จ. ต่ อ ระหว่ า งตั ว เก็ บ ประจุ ค่ า ต่ า กั บ
จ. ปรับสมดุลวงจร ไฟเลี้ยง
276 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. การทดสอบเบื้องต้นของวงจรขับลาโพงทาได้โดยโดยวิธีใด
ก. ปลดไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้กราวด์เขี่ยขาจัม๊ บิต P0.0
ข. ป้ อนไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้กราวด์เขี่ยขาจัม๊ บิต P0.0
ค. ปลดไฟเลี้ยง กดสวิตช์รีเซตแล้วใช้ไฟบวกเขี่ยขาจัม๊ บิต P0.0
ง. ปลดไฟเลี้ยง แล้วใช้กราวด์เขี่ยขาลาโพง
จ. ป้ อนไฟเลี้ยง แล้วใช้ไฟบวกเขี่ยขาลาโพง
10. การตรวจสอบลาโพงควรใช้วธิ ีใด
ก. วัดกระแสไฟเข้าลาโพง
ข. วัดแรงดันไฟคร่ อมลาโพง
ค. ใช้มิเตอร์ วดั ค่าความต้านทานของลาโพง
ง. สังเกตจากสภาพภายนอก
จ. นาลาโพงต่อเข้าเครื่ องขยายเสี ยง

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ก 3. ง 4. ข 5. ง 6. จ 7. ค 8. ข 9. จ 10. ง

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ค 3. ข 4. ง 5. ก 6. ค 7. ก 8. ง 9. ข 10. ค
ใบงานที่ 7.10
การเขียนโปรแกรมสร้ างความถีเ่ สี ยง
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมสร้างความถี่เสี ยง

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นใช้งานได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.9 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
278 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.10


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เมื่ อ ต้อ งการใช้ ค าว่ า “Speaker” แทน บิ ต 0 5. ค าสั่ ง กลั บ ค่ า ลอจิ ก ที่ บิ ต SPK จะต้ อ งใช้
ของพอร์ต 0 ต้องใช้คาสั่งใด ผังงานแบบใด
ก. sbit Speaker=P0^0; ก. รู ปทรงกลม
ข. bit Speaker=P0^0; ข. รู ปสี่ เหลี่ยมผืนผ้า
ค. sbit Speaker=P0.0; ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. bit Speaker=P0.0; ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. sbit Speaker=P0(0); จ. รู ปสามเหลี่ยม
2. เมื่ อ ต้อ งการใช้ง านวงจรไทเมอร์ 0 และ 1 6. ฟั ง ก์ ชั่น การสร้ า งเสี ย งซึ่ งเป็ นฟั ง ก์ ชั่น รอง
ทางานในโหมด 1 ต้องใช้คาสั่งใด จะต้องใช้ผงั งานแบบใด
ก. TMOD=0x01; ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. TMOD=0x10; ข. รู ปทรงกลม
ค. TMOD=0x11; ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. TMOD=0x22; ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. TMOD=0x33; จ. รู ปสามเหลี่ยม
3. หากต้อ งการสร้ า งความถี่ 1 kHz ต้อ งเขี ย น 7. ถ้ า ผัง งานมี ก ารตรวจสอบว่ า “ครบเวลา
โปรแกรมหน่วงเวลามีคาบเวลาเท่าใด หรื อไม่” ควรใช้คาสั่งใด
ก. 100 µS. ก. while(TR1==0)
ข. 200 µS. ข. while(TR1=1)
ค. 300 µS. ค. while(TF1=0)
ง. 400 µS. ง. while(TF1=1)
จ. 500 µS. จ. while(TF1==0)
4. การกลับ ค่ า ลอจิ ก ที่ บิ ต SPK ให้ เ ป็ นค่ า ตรง 8. การทดลองด้วยโปรแกรม Proteus ลาโพงอยู่
ข้ามใช้คาสั่งใด ใน Category ใด
ก. SPK != SPK; ก. Speakers
ข. SPK => SPK; ข. Sounders
ค. SPK =< SPK; ค. Speakers & sounders
ง. SPK =! SPK; ง. Speakers & buzzer
จ. SPK =$ SPK; จ. Loudspeaker & sounders
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 279
9. หากต้องการให้เกิ ดเสี ยงออกลาโพงในการทดลองด้วยโปรแกรม Proteus คอมพิวเตอร์ ที่ใช้ตอ้ งมี
คุณสมบัติใด
ก. ปกติเปิ ดฟังเพลงได้
ข. มีพอร์ตอนุกรม
ค. มีพอร์ต LPT
ง. มีพอร์ต USB
จ. มีพอร์ต HDMI
10. หากเขียนโปรแกรมส่ งเสี ยงออกผิดบิตที่ต่อลาโพงผลจะที่ตามมาจะเป็ นอย่างไร
ก. ลาโพงจะเสี ยงหาย
ข. ไอซีขบั เสี ยงจะร้อน
ค. มีเสี ยงออกลาโพงปกติ
ง. มีเสี ยงออกลาโพงแต่เบามาก
จ. ไม่มีเสี ยงออกลาโพง
280 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
การสร้างเสี ยงสาหรับไมโครคอนโทรลเลอร์ น้ นั เป็ นการสร้างความถี่ค่า ๆ หนึ่ งออกพอร์ ตนัน่ เอง
และการสร้างความถี่ เป็ นการส่ งค่าลอจิก “0” และ “1” ออกพอร์ ตโดยมีการหน่ วงเวลาตามที่กาหนดใน
การส่ งลอจิกแต่ละค่า ตัวอย่างเช่นต้องการสร้างความถี่ 1 kHz ดังรู ปที่ 7.10-1

0.5mS

1mS
รู ปที่ 7.10-1 คาบเวลาของรู ปคลื่นของสัญญาณที่ความถี่ 1 kHz

ส่ วนที่สาคัญที่สุดของโปรแกรมการสร้างเสี ยงคือส่ วนของฟั งก์ชนั่ หน่ วงเวลาที่เขียนขึ้นใช้งาน


ซึ่ งจะต้องมีความผิดพลาดน้อยที่สุด และสามารถคานวณหาคาบเวลาที่แน่นอนได้ วิธีที่ดีคือการใช้วงจร
ไทเมอร์ เป็ นตัวทางานในส่ วนนี้ จากความถี่ ขา้ งบนจะต้องหน่ วงเวลา 0.5 มิลลิ วินาที เพื่อทาการหน่ วง
เวลาให้ลอจิก 1 และ 0 ให้ปรากฏในอัตราที่เท่ากัน การหาค่าที่ตอ้ งกาหนดลงในรี จิสเตอร์ TH,TL เพื่อให้
ได้คาบเวลาที่ตอ้ งการได้ดงั นี้
1
จากสมการ T =
 1 1 
 f0   
 12  65536  THTL  
1
0.5 mS =
 1 1 
11.0592 MHz   
 12  65536  THTL  

 11.0592 MHz 
THTL = 65536    0.5ms 
 12 

THTL = 65075

= FE 33H

 ต้องตั้งค่าใน TH = FEH
และต้องตั้งค่าใน TL = 33H
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 281

ความรู ้เรื่ องโน้ตดนตรี


ก่อนที่จะเขียนโปรแกรมให้ไมโครคอนโทรลเลอร์ สร้างเสี ยงตามโน้ตดนตรี จาเป็ นต้องมีความรู ้
เบื้องต้นเกี่ยวกับโน้ตสากล เพื่อให้การสร้างเสี ยงไม่เกิดการผิดเพี้ยนของเสี ยง

ตัวโน้ ต และตัวหยุด ตัวโน้ต เป็ นสัญลักษณ์ที่ใช้แทน ความสั้น-ยาวของเสี ยง ตัวหยุด เป็ นสัญลักษณ์ที่ใช้


แทน ความสั้น-ยาวของความเงียบ

ลักษณะของตัวโน้ ตและตัวหยุด

การเปรียบเทียบค่ าของตัวโน้ ต

จะเห็นว่า โน้ต ตัวขาว มีค่าเท่ากับ 1/2 ของโน้ตตัวกลม


โน้ต ตัวดา มีค่าเท่ากับ 1/4 ของโน้ตตัวกลม
โน้ต ตัวเขบ็ต 1 ชั้น มีค่าเท่ากับ 1/8 ของโน้ตตัวกลม
โน้ต ตัวเขบ็ต 2 ชั้น มีค่าเท่ากับ 1/16 ของโน้ตตัวกลม
282 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

โน้ ตโยงเสี ยง

โน้ ตประจุด

ระดับเสี ยง หมายถึง ความสู งต่าของเสี ยงดนตรี ซึ่งมีชื่อเรี ยกเรี ยงตามลาดับจากต่าไปหาเสี ยงสู ง


รวมทั้งหมด 7 ชื่อ ดังนี้

ชื่อระดับเสี ยง โด เร มี ฟา ซอล ลา ที
ชื่อตัวอักษร C D E F G A B
ชื่อตัวเลข 1 2 3 4 5 6 7

บนคียข์ องเปี ยโน จะใช้ตวั อักษรแทนชื่ อของระดับเสี ยง โดยเริ่ มต้นไล่จาก A ไป G แล้ววน


กลับมาซ้ าชุดเดิมอีก จนเสี ยงสู งขึ้นไปเรื่ อย ๆ

ABCDE FGABCDE FGABCDE FGAB

รู ปที่ 7.10-2 ตัวอักษรแทนชื่อของระดับเสี ยงบนคียข์ องเปี ยโน


ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 283
กุญแจประจาหลัก หมายถึ งเครื่ องหมายที่กาหนดชื่ อระดับเสี ยงลงในบรรทัด 5 เส้น รวมทั้งเส้น
น้อยด้วย เพื่อให้ส ามารถบอกเป็ นชื่ อของระดับ เสี ย งได้กุญแจประจาหลักมี หลายชนิ ด แต่ ละชนิ ดจะ
กาหนดชื่อตัวโน้ตในระดับเสี ยงที่แตกต่างกัน ตามความเหมาะสมในการใช้

กุญแจซอล ( G Clef) กาหนดให้เส้นที่ 2 ของบรรทัด 5 เส้นมีชื่อเป็ น G ใช้บนั ทึกโน้ตที่มีระดับเสี ยงสู ง


เช่น กีตาร์ ฟลุท้ ขลุ่ย แซกโซโฟน ทรัมเป็ ท

กุญแจฟา ( F Clef) กาหนดให้เส้นที่ 4 ของบรรทัด 5 เส้นมีชื่อเป็ น F ใช้บนั ทึกโน้ตที่มีระดับเสี ยงต่า เช่น


กีตาร์ เบสส์ ทรอมโบน ทูบา ดับเบิลเบสส์ กลอง

กุญแจอัลโต ( Alto Clef) กาหนดให้เส้นที่ 3 ของบรรทัด 5 เส้นมีชื่อเป็ น C ใช้บนั ทึกโน้ตที่มีระดับเสี ยง


ต่า เช่น วิโลลา

กุญแจเทเนอร์ (Tenor Clef) กาหนดให้เส้นที่ 4 ของบรรทัด 5 เส้นมีชื่อเป็ น C ใช้บนั ทึกโน้ตที่มีระดับ


เสี ยงต่ากว่ากุญแจอัลโต เช่น เชลโล บาสซู น

ABCDE F GABCDE F GABCDE F GAB


รู ปที่ 7.10-3 กลุ่มเสี ยงบนคียข์ องเปี ยโน
284 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ค่าที่ตอ้ งกาหนดในรี จิสเตอร์ TH, TL เพื่อให้น่วงเวลาให้โน้ตแต่ละตัว


โน้ตแต่ละตัวมีความถี่แตกต่างกันไป สามารถคานวณหาความถี่ได้จากสู ตร
 x
 
freq = 55  2  12 

จากความถี่ที่ได้สามารถคานวณหาค่าการหน่วงเวลาในการสร้างพัลส์เพื่อที่จะต้องกาหนดค่าเริ่ มต้นของ
วงจรไทเมอร์ โดยการกาหนดค่าในรี จิสเตอร์ TH,TL ดังตารางที่ 7.10-1

ตารางที่ 7.10-1 ความถี่ในแต่ละตัวโน้ต


Octave Note Frequency delay Machine USE
x HEX
Name Name (Hz) time(mS) Cycle Value
Bass C 15 130.81 3.822 62013.64 62014 F23E
Bass C#/Db 16 138.59 3.608 62210.87 62211 F303
Bass D 17 146.83 3.405 62397.95 62398 F3BE
Bass D#/Eb 18 155.56 3.214 62573.98 62574 F46E
Bass E 19 164.81 3.034 62739.87 62740 F514
Bass F 20 174.61 2.864 62896.54 62897 F5B1
Bass F#/Gb 21 185.00 2.703 63044.92 63045 F645
Middle G 22 196.00 2.551 63185.00 63185 F6D1
Middle G#/Ab 23 207.65 2.408 63316.79 63317 F755
Middle A 24 220.00 2.273 63441.20 63441 F7D1
Middle A#/Bb 25 233.08 2.145 63559.17 63559 F847
Middle B 26 246.94 2.025 63669.76 63670 F8B6
Middle C 27 261.63 1.911 63774.82 63775 F91F
Middle C#/Db 28 277.18 1.804 63873.43 63873 F981
Middle D 29 293.66 1.703 63966.52 63967 F9DF
Middle D#/Eb 30 311.13 1.607 64054.99 64055 FA37
Middle E 31 329.63 1.517 64137.93 64138 FA8A
Middle F 32 349.23 1.432 64216.27 64216 FAD8
Treble F#/Gb 33 369.99 1.351 64290.92 64291 FB23
Treble G 34 392.00 1.276 64360.04 64360 FB68
Treble G#/Ab 35 415.30 1.204 64426.39 64426 FBAA
Treble A 36 440.00 1.136 64489.06 64489 FBE9
Treble A#/Bb 37 466.16 1.073 64547.12 64547 FC23
Treble B 38 493.88 1.012 64603.34 64603 FC5B
Treble C 39 523.25 0.956 64654.95 64655 FC8F
Treble C#/Db 40 554.37 0.902 64704.72 64705 FCC1
Treble D 41 587.33 0.851 64751.72 64752 FCF0
Treble D#/Eb 42 622.25 0.804 64795.03 64795 FD1B
Treble E 43 659.26 0.758 64837.43 64837 FD45
Treble F 44 698.46 0.716 64876.13 64876 FD6C
High F#/Gb 45 739.99 0.676 64913.00 64913 FD91
High G 46 783.99 0.638 64948.02 64948 FDB4
High G#/Ab 47 830.61 0.602 64981.20 64981 FDD5
High A 48 880.00 0.568 65012.53 65013 FDF5
High A#/Bb 49 932.33 0.536 65042.02 65042 FE12
High B 50 987.77 0.506 65069.67 65070 FE2E
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 285

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมสร้างความถี่เสี ยงเป็ นดังรู ปที่ 7.10-4

รู ปที่ 7.10-4 วงจรสมบูรณ์ที่ใช้ทดลองการเขียนโปรแกรมสร้างเสี ยง

การจาลองการทางานใช้โปรแกรม Proteus สาหรับการทดลองผลของโปรแกรมการสร้างความถี่


เสี ยงซึ่งใช้อุปกรณ์อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
4. คาปาซิเตอร์ 1uF, 220uF PCELECT1U450V, PCELECT220U35V
5. ลาโพง SPEAKER

หมายเหตุ การจาลองการทางานของไมโครคอนโทรลเลอร์ จากโปรแกรมการสร้างความถี่เสี ยง


โดยเสี ยงที่ จะได้ยินเป็ นเสี ยงจากลาโพงของคอมพิวเตอร์ ดังนั้นหากเครื่ องคอมพิวเตอร์ ไม่มี
ลาโพงหรื อไม่สามารถเปิ ดฟังเพลงในเวลาปกติได้จะไม่สามารถจาลองการทางานนี้ได้
286 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รู ปที่ 7.10-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

แผ่นวงจรจริ งที่ใช้ทดลองเป็ นแผ่นวงจรที่สร้างมาแล้วในใบงานที่ 7.9 เป็ นดังรู ปที่ 7.10-6


7805
103

74HC573

AT89S52

รู ปที่ 7.10-6 วงจรจริ งที่ใช้ทดลอง


ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 287
การทดลองที่ 1 การเขียนโปรแกรมสร้างเสี ยงของโน้ตต่าง ๆ โดยใช้ค่าความถี่ของโน้ตในแต่ละตัวจาก
ตารางที่ 7.10-1 ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
เขียนลาดับงาน การเขียนโปรแกรมขับพอร์ต 0 จากโจทย์ที่กาหนดข้างต้นสามารถเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรที่ตอ้ งการใช้
2. สร้างฟังก์ชนั่ สร้างความถี่เสี ยง
3. เรี ยกใช้ฟังก์ชนั่ สร้างเสี ยงในเสี ยงต่างๆ
4. กลับไปทางานในลาดับที่ 3
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม
สร้างเสี ยง
กาหนดตัวแปร,ค่าเริ่ มต้น
เซต TH,TL ตามค่าความถี่ที่รับมา
สร้างเสี ยงความถี่ที่ 1
สร้างความถี่

ครบเวลา?
ไม่
สร้างเสี ยงความถี่ที่ n ใช่
จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void sound(int f,t);
code unsigned char sfh[]={0x00,0xf2,0xf3,0xf5,
0xf5,0xf6,0xf7,0xf8,0xf9};
code unsigned char sfl[]={0x00,0x3e,0xbe,0x14,
0xb1,0xd1,0xd1,0xb6,0x1f};
sbit spk=P0^0; //use speaker connect P0.0
void main (void)
288 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
{ TMOD=0x11; //use timer0,timer1 to mode 1
while(1)
{ sound(1,16);sound(0,1); // 16 equal Whole Note
sound(2,16);sound(0,1);
sound(3,16);sound(0,1);
sound(4,16);sound(0,1);
sound(5,16);sound(0,1);
sound(6,16);sound(0,1);
sound(7,16);sound(0,1);
sound(8,16);sound(0,1);
}
}
void sound(int f,t)
{
int n,l;
l=t*3;
for(n=0;n<l;n++)
{
TH0=0x4c;
TL0=0x00;
TF0=0;
TR0=1;
do
{
TH1=sfh[f]; //read value for time of note TH
TL1=sfl[f]; //read value for time of note TL
TF1=0;
TR1=1;
if(f!=0) //if f is not zero to gen freq.
{
spk=!spk; //invert old logic
}
else //if f is equal zero not gen freq.
{
spk=0; //off speaker
}
while(TF1==0)
{}
}while(TF0==0);
TR0=0;
TR1=0;
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ขอ้ มูลในตัวแปร sfh[ ], sfl[ ]; เป็ นค่าจากความถี่อื่น (ดูจากตาราง) แล้วสังเกตผล

การทดลองที่ 2 การเขียนโปรแกรมสร้างเสี ยงเพลงโดยสร้างความถี่จากโน้ตต่าง ๆ จากตารางที่ 7.10-1


ซึ่ งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 289
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน การเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรที่ตอ้ งการใช้
2. สร้างฟังก์ชนั่ สร้างความถี่เสี ยง
3. เรี ยกใช้ฟังก์ชนั่ สร้างเสี ยงในเสี ยงต่างๆ
4. กลับไปทางานในลาดับที่ 3

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม
สร้างเสี ยง
กาหนดตัวแปร,ค่าเริ่ มต้น
เซต TH,TL ตามค่าความถี่ที่รับมา
สร้างเสี ยงความถี่ที่ 1
สร้างความถี่

ครบเวลา?
ไม่
สร้างเสี ยงความถี่ที่ n ใช่
จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.h>
void sound(int f,t);
code unsigned char sfh[]={0x00,0xF9,0xF9,0xFA,0xFA,
0xFB,0xFB,0xFC,0xFC,0xFC,0xF7};
code unsigned char sfl[]={0x00,0x1F,0xDF,0x8A,0xD9,
0x68,0xE9,0x5B,0x8F,0xEF,0xD1};
sbit spk=P0^0; //use speaker connect P0.0

void main (void)


{ TMOD=0x11; //use timer0,timer1 to mode 1
while(1)
290 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
{ sound(6,4);sound(0,1); //note 668542
sound(6,5);sound(0,1);
sound(8,2);sound(0,1);
sound(5,4);sound(0,1);
sound(4,2);sound(0,1);
sound(5,2);sound(0,1);
sound(2,5);sound(0,1);
//-------------------------
sound(4,2);sound(0,1);
sound(1,2);sound(0,1);
sound(10,2);sound(0,1); //6 low
sound(1,2);sound(0,1);
sound(2,2);sound(0,1);
sound(4,2);sound(0,1);
sound(5,2);sound(0,1);
sound(6,2);sound(0,1);
sound(8,2);sound(0,1);
sound(5,2);sound(0,1);
sound(6,2);sound(0,1);
sound(8,2);sound(0,1);
sound(9,2);sound(0,1);
sound(6,8);sound(0,1);
//---------------------
sound(8,5);sound(0,1);
sound(6,2);sound(0,1);
sound(5,4);sound(0,1);
sound(4,2);sound(0,1);
sound(5,2);sound(0,1);
sound(2,3);sound(0,1);
//---------------------------
sound(4,2);sound(0,1);
sound(1,2);sound(0,1);
sound(10,2);sound(0,1); //6 low
sound(1,2);sound(0,1);
sound(2,2);sound(0,1);
sound(4,2);sound(0,1);
sound(5,2);sound(0,1);
sound(6,2);sound(0,1);
sound(8,2);sound(0,1);
sound(5,2);sound(0,1);
sound(4,2);sound(0,1);
sound(5,1);sound(0,1);
sound(4,1);sound(0,1);
sound(2,2);sound(0,1);
sound(4,8);sound(0,10);
}
}
void sound(int f,t)
{
int n,l;
l=t*3;
for(n=0;n<l;n++)
{
TH0=0x4c;
TL0=0x00;
TF0=0;
TR0=1;
do
{
ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 291
TH1=sfh[f]; //read value for time of note TH
TL1=sfl[f]; //read value for time of note TL
TF1=0;
TR1=1;
if(f!=0) //if f is not zero to gen freq.
{
spk=!spk; //invert old logic
}
else //if f is equal zero not gen freq.
{
spk=0; //off speaker
}
while(TF1==0)
{}
}while(TF0==0);
TR0=0;
TR1=0;
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง

7. สรุปผลการปฏิบัติงาน
292 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมสร้างเสี ยงเพลง (นักศึกษาเป็ นผูเ้ ลือกเพลงตามต้องการ) โดยใช้ค่าความถี่ของ
ตัวโน้ตที่ ใ ช้ง านจากตารางที่ 7.10-1 ทดลองผลทั้ง การจาลองการท างานด้วยโปรแกรม Proteus และ
ทดลองด้วยวงจรจริ ง

รู ปที่ 7.10-7 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย


ใบงานที่ 7.10 การเขียนโปรแกรมสร้างความถี่เสี ยง 293

แบบทดสอบหลังเรียน ใบงานที่ 7.10


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. เมื่ อ ต้อ งการใช้ ค าว่ า “Speaker” แทน บิ ต 0 5. ค าสั่ ง กลับ ค่ า ลอจิ ก ที่ บิ ต SPK จะต้อ งใช้ผ งั
ของพอร์ต 0 ต้องใช้คาสั่งใด งาน (Flow Chart) แบบใด
ก. bit Speaker=P0^0; ก. รู ปทรงกลม
ข. sbit Speaker=P0^0; ข. รู ปสามเหลี่ยม
ค. sbit Speaker=P0.0; ค. รู ปสี่ เหลี่ยมผืนผ้า
ง. bit Speaker=P0.0; ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
จ. sbit Speaker=P0(0); จ. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
2. เมื่ อ ต้อ งการใช้ง านวงจรไทเมอร์ 0 และ 1 6. ฟั ง ก์ ชั่น การสร้ า งเสี ย งซึ่ งเป็ นฟั ง ก์ ชั่น รอง
ทางานในโหมด 1 ต้องใช้คาสั่งใด จะต้องใช้ผงั งานแบบใด
ก. TMOD=0x01; ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. TMOD=0x10; ข. รู ปทรงกลม
ค. TMOD=0x22; ค. รู ปสามเหลี่ยม
ง. TMOD=0x11; ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. TMOD=0x33; จ. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
3. หากต้อ งการสร้ า งความถี่ 1 kHz ต้อ งเขี ย น 7. ถ้ า ผัง งานมี ก ารตรวจสอบว่ า “ครบเวลา
โปรแกรมหน่วงเวลามีคาบเวลาเท่าใด หรื อไม่” ควรใช้คาสั่งใด
ก. 5 µS. ก. while(TR1==0)
ข. 50 µS. ข. while(TF1==0)
ค. 500 µS. ค. while(TR1=1)
ง. 50 mS. ง. while(TF1=0)
จ. 500 mS. จ. while(TF1=1)
4. การกลับ ค่ า ลอจิ ก ที่ บิ ต SPK ให้ เ ป็ นค่ า ตรง 8. การทดลองด้วยโปรแกรม Proteus ลาโพงอยู่
ข้ามใช้คาสั่งใด ใน Category ใด
ก. SPK =! SPK; ก. Speakers
ข. SPK != SPK; ข. Sounders
ค. SPK => SPK; ค. Speakers & buzzer
ง. SPK =< SPK; ง. Speakers & sounders
จ. SPK =$ SPK; จ. Loudspeaker & sounders
294 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. หากต้องการให้เกิ ดเสี ยงออกลาโพงในการทดลองด้วยโปรแกรม Proteus คอมพิวเตอร์ ที่ใช้ตอ้ งมี
คุณสมบัติใด
ก. มีพอร์ตอนุกรม
ข. ปกติเปิ ดฟังเพลงได้
ค. มีพอร์ต LPT
ง. มีพอร์ต USB
จ. มีพอร์ต HDMI
10. หากเขียนโปรแกรมส่ งเสี ยงออกผิดบิตที่ต่อลาโพงผลจะที่ตามมาจะเป็ นอย่างไร
ก. ลาโพงจะเสี ยงหาย
ข. ไอซีขบั เสี ยงจะร้อน
ค. ไม่มีเสี ยงออกลาโพง
ง. มีเสี ยงออกลาโพงปกติ
จ. มีเสี ยงออกลาโพงแต่เบามาก

เฉลยแบบทดสอบก่อนเรี ยน
1. ก 2. ค 3. ง 4. ง 5. ข 6. ค 7. จ 8. ค 9. ก 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ง 3. ค 4. ก 5. ค 6. จ 7. ข 8. ง 9. ข 10. ค
ใบงานที่ 7.11
การสร้ างวงจรแสดงผลตัวเลข 7 ส่ วน
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรแสดงผลเป็ นตัวเลข 7 ส่ วนชนิดที่เป็ น LED
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรแสดงผลเป็ นตัวเลข 7 ส่ วนได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรแสดงผลเป็ นตัวเลข 7 ส่ วนได้
3. บอกขั้นตอนการประกอบวงจรแสดงผลเป็ นตัวเลข 7 ส่ วนได้
4. สร้าง (ประกอบ) วงจรแสดงผลเป็ นตัวเลข 7 ส่ วนได้
5. ทดสอบการทางานของวงจรแสดงผลเป็ นตัวเลข 7 ส่ วนได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.9 (วงจรต่อพ่วง) 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.11-6(a) ประกอบด้วย
3.1 ตัวเลข 7 ส่ วน 2 หลัก CC 1 ตัว 3.3 ตัวต้านทาน 4.7 kΩ ¼ W 2 ตัว
3.2 ทรานซิสเตอร์ BC547 2 ตัว 3.4 ตัวต้านทาน 220 Ω ¼ W 2 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรสวิตช์
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
296 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.11


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ ใ ช้ใ นใบงาน 5. ทรานซิ สเตอร์ ที่ต่อเข้ากับขาร่ วมของตัวเลข
ประกอบด้วย LED กี่ตวั เจ็ดส่ วนในใบงานทาหน้าที่ใด
ก. 1 ตัว ก. ควบคุมแรงดัน
ข. 2 ตัว ข. ควบคุมอุณหภูมิ
ค. 4 ตัว ค. ควบคุมการทางานแต่ละหลัก
ง. 8 ตัว ง. ควบคุมกระแส
จ. 16 ตัว จ. ควบคุมความสว่าง
2. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ใช้ในใบงานมี 6. อุ ปกรณ์ ที่ ควรลงปริ้ นเป็ นลาดับแรกของใบ
กี่หลัก งานนี้คือข้อใด
ก. 1 หลัก ก. ตัวต้านทาน
ข. 2 หลัก ข. ตัวเลขเจ็ดส่ วน
ค. 3 หลัก ค. ทรานซิสเตอร์
ง. 4 หลัก ง. ตัวเก็บประจุ
จ. 5 หลัก จ. ไดโอด
3. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ ใ ช้ใ นใบงาน 7. การเชื่ อมต่อขาร่ วมของตัวเลขเจ็ดส่ วนจะต้อง
เป็ นชนิดใด ต่อกับขาใดของทรานซิ สเตอร์
ก. แคโทดร่ วม ก. เบส
ข. แอโนดร่ วม ข. อิมิตเตอร์
ค. บริ ดจ์ ค. คอลเลคเตอร์
ง. โมดูล ง. ซอส
จ. เมตริ กซ์ จ. เดรน
4. ตัวต้า นทานที่ ต่อระหว่า งไอซี กบั ตัวเลขเจ็ด 8. การบัง คับ ให้ ท รานซิ ส เตอร์ ท างาน (เพื่ อ
ส่ วนทาหน้าที่ใด ทดสอบวงจร) ต้องทาอย่างไร
ก. แบ่งกระแส ก. ป้อนไฟบวกที่ RB
ข. แบ่งแรงดัน ข. ป้อนไฟบวกที่ RC
ค. ควบคุมอุณหภูมิ ค. ป้อนไฟบวกที่ RE
ง. จากัดกระแส ง. ป้อนกราวด์ที่ RB
จ. จากัดแรงดัน จ. ป้อนกราวด์ที่ RC
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 297
9. การทดสอบเซกเมนต์วา่ ส่ วนนั้น ๆ ทางานหรื อไม่ตอ้ งทาอย่างไร
ก. บังคับทรานซิสเตอร์ทางานแล้วป้อนลอจิก 0 ที่ไอซี ขบั บิตนั้น ๆ
ข. บังคับทรานซิสเตอร์หยุดทางานแล้วป้อนลอจิก 1 ที่ไอซี ขบั บิตนั้น ๆ
ค. บังคับทรานซิสเตอร์หยุดทางานแล้วป้อนลอจิก 0 ที่ไอซี ขบั บิตนั้น ๆ
ง. บังคับทรานซิสเตอร์ทางานแล้วป้อนลอจิก 1 ที่ไอซี ขบั บิตนั้น ๆ
จ. บังคับทรานซิ สเตอร์ ทางานแล้วป้ อนกระแสที่ไอซี ขบั บิตนั้น ๆ
10. เมื่อประกอบวงจรเสร็ จและทาการเชื่ อมต่อกับวงจรไมโครคอนโทรลเลอร์ ทาการกดสวิตช์รีเซตผล
ควรเป็ นเช่นไร
ก. ตัวเลขเจ็ดส่ วนดับทุกส่ วน
ข. ตัวเลขเจ็ดส่ วนติดบ้างดับบ้าง
ค. LED 8 ตัวดับทั้งหมด
ง. ตัวเลขเจ็ดส่ วนกระพริ บ
จ. ตัวเลขเจ็ดส่ วนติดสว่างทุกส่ วน
298 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
LED ตัวเลข 7 ส่ วนที่เราเรี ยกกันว่า 7-Segment ประกอบขึ้นด้วย LED จานวน 8 ตัวโดยที่ LED
จานวน 7 ตัวถู กจัดวางให้สามารถแสดงเป็ นตัวเลขต่าง ๆ อีกหนึ่ งตัวถูกจัดวางให้แสดงเป็ นจุดทศนิ ยม
LED ที่ต่ออยูภ่ ายในตัวถังทุกตัวจะมีขาต่อร่ วมกันเรี ยกว่าขาคอมมอน (Common) โดยมี 2 แบบคือ
1. ต่อขาแคโทดร่ วมกัน เรี ยกว่า คอมมอนแคโทด (Common cathode)
2. ต่อขาแอโนดร่ วมกัน เรี ยกว่า คอมมอนแอโนด (Common anode)
ตัวแสดงผลตัวเลข 7 ส่ วนมีลกั ษณะการต่อภายในดังรู ปที่ 7.11-1

รู ปที่ 7.11-1 โครงสร้างภายในของ LED 7 Segment (a) แบบแอโนดร่ วม (b) แบบแคโทดร่ วม

รู ปที่ 7.11-2 แสดงชื่ อในแต่ละส่ วนของการติดสว่าง (ต่อไปใช้คาว่าเซกเมนต์แทน) และตาแหน่งขาแบบ


หลักเดียวและแบบสองหลักที่เป็ นแบบมัลติเพล็ก (โครงสร้างภายในแสดงในรู ปที่ 7.11-3(a))

รู ปที่ 7.11-2 ชื่อเรี ยกของส่ วนต่าง ๆ และตาแหน่งการจัดขาของ LED 7 Segment แบบเดี่ยวและคู่

รู ปที่ 7.11-3 (a) โครงสร้างภายในของ 7 Segment เบอร์ TOD-3261AG-B1 (b) ตาแหน่งหลัก (digit)
1
ตาแหน่งการจัดขาของ 7-Segment เป็ นของเบอร์ TOD-3261AG-B หากใช้งานเบอร์อื่นต้องดูตาแหน่งขาจากดาต้าชีต
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 299

6. การดาเนินการสร้ างวงจร
การสร้างวงจรแสดงผลตัวเลข 7 ส่ วนเป็ นวงจรที่สร้ างเพิ่มเติมจากใบงานที่ 7.9 โดยเพิ่มเฉพาะ
ส่ วนการแสดงผลตัวเลข 7 ส่ วนซึ่ งใช้อุปกรณ์เพิ่มเติมคือ LED ตัวเลข 7 ส่ วนแบบมัลติเพล็กชนิ ดแคโทด
ร่ วม ตัวต้านทาน 4.7 กิโลโอห์ม 2 ตัวและ 220 โอห์ม 2 ตัว วงจรสมบรู ณ์เป็ นดังรู ปที่ 7.11-4

รู ปที่ 7.11-4 วงจรสมบรู ณ์สาหรับการทดลอง

วงจรแสดงผลตัวเลข 7 ส่ วนที่สร้างต่อขยายเพิ่มเติมจากวงจรต่อพ่วงเดิม เป็ นดังรู ปที่ 7.11-5

รู ปที่ 7.11-5 วงจรแสดงผลตัวเลข 7 ส่ วนสร้างเพิ่มจากวงจรเดิมในใบงานที่ 7.4


300 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ให้นกั ศึกษาต่อวงจรแสดงผลตัวเลข 7 ส่ วนเพิ่มเติ มลงในแผงวงจรแผ่นเดี ยวกันใบงานที่ 7.9
โดยใช้ไอซี ขบั ตัวเดิมในใบงาน 7.4 สาหรับวงจรและแนวทางเป็ นดังรู ปที่ 7.11-6 (7-Segment เป็ นเบอร์
TOD-3261AG-B)

รู ปที่ 7.11-6 (a) วงจรแสดงผลตัวเลข 7 ส่ วน (b) แนวทางจัดวางใช้แผ่นปริ้ นวงจรเดิมของใบงานที่ 7.4

การทางานของวงจร
วงจรรู ปที่ 7.11-6(a) เป็ นวงจรต่อพ่วงสาหรับแสดงผลตัวเลข 7 ส่ วน วงจรนี้ ใช้ไอซี U3 เบอร์
74HC573 ตัวเดิมที่เป็ นตัวขับกระแสให้กบั LED ทั้ง 8 ตัวในใบงานที่ 7.4 เพียงแต่ใบงานนี้ เปลี่ยนมาขับ
ตัวเลข 7 ส่ วนแทน และเพื่อให้สามารถขับโหลดได้เต็มความสามารถขณะทาการทดลองให้นกั ศึกษาปลด
ตัวลัด (Jumper) J11 เพื่อปลด LED ให้ลอยออกจากวงจรจะส่ งผลให้ไอซี ทาการขับตัวเลข 7 ส่ วนเพียง
อย่างเดียว
การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยใช้พ้นื ที่ส่วนที่ได้เว้นไว้จากใบงานก่อนหน้านี้
2. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.11-6
หมายเหตุ ข้อควรระวังตรวจสอบขาทรานซิ สเตอร์ ให้ถูกต้องก่อนการประกอบวงจร เพื่อป้ องกัน
ข้อผิดพลาดจากการที่ทรานซิ สเตอร์ ไม่ทางานจากการต่อขาผิดพลาด
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 301

7. การทดสอบการทางานของวงจร
การทดสอบวงจรแสดงผลด้วยตัวเลข 7 ส่ วน ซึ่ งเป็ นวงจรเอาต์พุ ต พอร์ ตให้นัก ศึก ษาท าการ
ทดสอบการทางานของวงจรใน 2 ขั้นตอน
ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ดแวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เฉพาะส่ วนของไฟเลี้ยง 5 โวลต์และ 0 โวลต์ดงั รู ปที่
7.11-7 103
7805

74HC573

AT89S52

รู ปที่ 7.11-7 การต่อเชื่อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ดแวร์

2. ทาการทดสอบการติดดับในแต่ละเซกเมนต์ในแต่ละหลักดังนี้
2.1 ไบอัส ให้ท รานซิ ส เตอร์ Q1 ท างานและให้ Q2 ไม่ ท างาน โดยการต่ อไฟเลี้ ย ง 5
โวลต์เข้าที่คอนเน็คเตอร์ J8 เฉพาะที่ต่อไปยังขาเบสของ Q1 และต่อไฟเลี้ยง 0 โวลต์
เข้าที่คอนเน็คเตอร์ J8 เฉพาะที่ต่อไปยังขาเบสของ Q2
2.2 ป้ อนลอจิก 1, 0 (จัม๊ สายไฟจากไฟเลี้ ยง 5 โวลต์และ 0 โวลต์) เข้าที่อินพุตของไอซี
บัฟเฟอร์ แต่ละบิตแล้วตรวจสอบการทางานตามตาราง 7.11-1 หากผลการทดลองที่
ได้ไม่ตรงกับผลที่ควรได้ให้นกั ศึกษาทาการแก้ไขจนได้ผลเช่นเดียวกันกับผลที่ควร
ได้ (เมื่อทาการป้อนลอจิก 1 เข้าที่บิตใดเซกเมนต์ที่ต่อกับบิตนั้นจะต้องสว่าง)
302 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
2.3 เปลี่ยนการไบอัสให้ทรานซิ สเตอร์ Q1 หยุดทางานและให้ Q2 ทางาน โดยการต่อ
ไฟเลี้ ย ง 0 โวลต์เข้า ที่ คอนเน็ ค เตอร์ J8 เฉพาะที่ ต่อไปยัง ขาเบสของ Q1 และต่ อ
ไฟเลี้ยง 5 โวลต์เข้าที่คอนเน็คเตอร์ J8 เฉพาะที่ต่อไปยังขาเบสของ Q2
2.4 ทาการทดลองซ้ าเช่ นเดี ยวกับข้อ 2.2 แล้วตรวจสอบการทางานตามตาราง 7.11-1
หากผลการทดลองที่ ได้ไม่ตรงกับผลที่ ควรได้ให้นักศึ กษาทาการแก้ไขจนได้ผล
เช่นเดียวกันกับผลที่ควรได้

ตารางที่ 7.11-1 ตารางตรวจสอบการทางานของวงจรแสดงผลตัวเลข 7 ส่ วน


เอาต์พุต ทดสอบกับบิต
การ บิต D7 D6 D5 D4 D3 D2 D1 D0 ผลที่ควรได้
ควบคุมหลัก เซกเมนต์ dp g f e d c b a
Q1 ทางาน ป้อนลอจิก 1 เซกเมนต์ติดสว่าง
Q2 ไม่ทางาน ป้อนลอจิก 0 เซกเมนต์ดบั
Q1 ไม่ทางาน ป้อนลอจิก 1 เซกเมนต์ติดสว่าง
Q2 ทางาน ป้อนลอจิก 0 เซกเมนต์ดบั

ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้


1. ต่อเชื่ อมวงจรเอาต์พุตกับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.11-8
7805
103

74HC573

AT89S52

รู ปที่ 7.11-8 ต่อเชื่ อมวงจรแสดงผลตัวเลขกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดลองทางซอฟท์แวร์


ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 303
2. เขียนโปรแกรมเพื่อทดสอบการทางานของพอร์ตโดยใช้โปรแกรม Keil uVision ดังนี้
#include<REGX52.H>
void delay(int n); //declare delay program
sbit com1=P2^7; //common 1 connect to P2.7
sbit com2=P2^6; //common 2 connect to P2.6
void main(void)
{
code unsigned char value[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};
int i;
while(1)
{
for(i=0;i<10;i++) // #
{ // |
com1=1; // |
com2=0; // > test 7 segment digit 1
P0=value[i]; // |
delay(100); // |
} // #
for(i=0;i<10;i++) // #
{ // |
com1=0; // |
com2=1; // > test 7 segment digit 2
P0=value[i]; // |
delay(100); // |
} // #
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}
3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX file)
4. นาไฟล์ภาษาเครื่ องที่ได้อดั ลงชิพซีพียู
5. สังเกตผลที่ได้หากวงจรทางานตามปกติ ตัวแสดงผลตัวเลข 7 ส่ วนจะติดเป็ นตัวเลข 0-9 ครั้ง
ละ 1 หลักโดยหลักหน้าจะติดก่อนเมื่อแสดงครบแล้วหลักหลังจะแสดงตัวเลข 0-9 ต่อไป
โดยจะติดสลับหลักไปตลอด หากแสดงผลไม่ถูกต้องให้ดาเนินการแก้ไข

8. สรุปผลการปฏิบัติงาน
304 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.11


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ ใ ช้ใ นใบงาน 5. ทรานซิ สเตอร์ ที่ต่อเข้ากับขาร่ วมของตัวเลข
ประกอบด้วย LED กี่ตวั เจ็ดส่ วนในใบงานทาหน้าที่ใด
ก. 2 ตัว ก. ควบคุมการทางานแต่ละหลัก
ข. 4 ตัว ข. ควบคุมแรงดัน
ค. 6 ตัว ค. ควบคุมอุณหภูมิ
ง. 8 ตัว ง. ควบคุมกระแส
จ. 10 ตัว จ. ควบคุมความสว่าง
2. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ใช้ในใบงานมี 6. อุ ปกรณ์ ที่ ควรลงปริ้ นเป็ นลาดับแรกของใบ
กี่หลัก งานนี้คือข้อใด
ก. 1 หลัก ก. ตัวต้านทาน
ข. 2 หลัก ข. ทรานซิสเตอร์
ค. 4 หลัก ค. ตัวเลขเจ็ดส่ วน
ง. 6 หลัก ง. ตัวเก็บประจุ
จ. 8 หลัก จ. ไดโอด
3. ตัวเลขเจ็ดส่ วน (7-Segment) ที่ ใ ช้ใ นใบงาน 7. การเชื่ อมต่อขาร่ วมของตัวเลขเจ็ดส่ วนจะต้อง
เป็ นชนิดใด ต่อกับขาใดของทรานซิ สเตอร์
ก. แอโนดร่ วม ก. คอลเลคเตอร์
ข. แคโทดร่ วม ข. เบส
ค. บริ ดจ์ ค. อิมิตเตอร์
ง. โมดูล ง. ซอส
จ. เมตริ กซ์ จ. เดรน
4. ตัวต้า นทานที่ ต่อระหว่า งไอซี กบั ตัวเลขเจ็ด 8. การบัง คับ ให้ ท รานซิ ส เตอร์ ท างาน (เพื่ อ
ส่ วนทาหน้าที่ใด ทดสอบวงจร) ต้องทาอย่างไร
ก. แบ่งกระแส ก. ป้อนไฟบวกที่ RC
ข. แบ่งแรงดัน ข. ป้อนไฟบวกที่ RE
ค. ควบคุมอุณหภูมิ ค. ป้อนกราวด์ที่ RB
ง. จากัดแรงดัน ง. ป้อนไฟบวกที่ RB
จ. จากัดกระแส จ. ป้อนกราวด์ที่ RC
ใบงานที่ 7.11 การสร้างวงจรแสดงผลตัวเลข 7 ส่วน 305
9. การทดสอบเซกเมนต์วา่ ส่ วนนั้น ๆ ทางานหรื อไม่ตอ้ งทาอย่างไร
ก. บังคับทรานซิสเตอร์ทางานแล้วป้อนลอจิก 0 ที่ไอซี ขบั บิตนั้น ๆ
ข. บังคับทรานซิสเตอร์ทางานแล้วป้อนลอจิก 1 ที่ไอซี ขบั บิตนั้น ๆ
ค. บังคับทรานซิสเตอร์หยุดทางานแล้วป้อนลอจิก 1 ที่ไอซี ขบั บิตนั้น ๆ
ง. บังคับทรานซิสเตอร์หยุดทางานแล้วป้อนลอจิก 0 ที่ไอซี ขบั บิตนั้น ๆ
จ. บังคับทรานซิ สเตอร์ ทางานแล้วป้ อนกระแสที่ไอซี ขบั บิตนั้น ๆ
10. เมื่อประกอบวงจรเสร็ จและทาการเชื่ อมต่อกับวงจรไมโครคอนโทรลเลอร์ ทาการกดสวิตช์รีเซตผล
ควรเป็ นเช่นไร
ก. ตัวเลขเจ็ดส่ วนดับทุกส่ วน
ข. ตัวเลขเจ็ดส่ วนติดบ้างดับบ้าง
ค. ตัวเลขเจ็ดส่ วนติดสว่างทุกส่ วน
ง. ตัวเลขเจ็ดส่ วนกระพริ บ
จ. LED 8 ตัวดับทั้งหมด

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ข 3. ก 4. ง 5. ค 6. ข 7. ค 8. ก 9. ง 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ง 2. ค 3. ข 4. จ 5. ก 6. ค 7. ก 8. ง 9. ข 10. ค
ใบงานที่ 7.12
การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วน
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วน

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองด้วยวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.11 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
308 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.12


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หากต้องการควบคุ มทรานซิ สเตอร์ ที่ต่อที่บิต 5. ค าสั่ ง ที่ สั่ ง ทรานซิ ส เตอร์ ท างานหรื อหยุ ด
P2.6 ด้วยคาว่า TR1 จะต้องใช้คาสั่งใด ทางานควรใช้ผงั งานรู ปใด
ก. bit TR1=P2^6; ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. sbit TR1=P2^6; ข. รู ปทรงกลม
ค. setbit TR1=P2^6; ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. set TR1=P2^6; ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. bsit TR1=P2^6; จ. รู ปสามเหลี่ยม
2. จากวงจรในใบงานหากต้องการให้ติดเป็ นเลข 6. จากผังงาน “ส่ งค่าข้อมูลตัวเลขออกพอร์ ต 0”
1 ต้องส่ งค่าใดออกพอร์ ต 0 ควรใช้คาสั่งใด
ก. 0x01 ก. P0!=data;
ข. 0x02 ข. P0=data;
ค. 0x04 ค. P0=!data;
ง. 0x06 ง. P0>=data;
จ. 0x08 จ. P0<=data;
3. คาสั่งใดที่ ทาให้ทรานซิ สเตอร์ ที่ขาเบสต่อที่ 7. เหตุใดการแสดงผลแต่ละหลักต้องหน่วงเวลา
บิต P2.6 นากระแส ให้ติดค้างไว้ระยะเวลาหนึ่ง
ก. P2=0x26; ก. ให้วงจรทางานได้ทนั
ข. P2=0x06; ข. ลดกระแสในวงจร
ค. P2=0x40; ค. เพิ่มความสว่าง
ง. P2=0x04; ง. ลดแรงดันที่ส่งไปยังตัวเลขเจ็ดส่ วน
จ. P2=0x64; จ. ต้องการประหยัดพลังงาน
4. ฟั งก์ชนั่ การแสดงผลซึ่ งเป็ นชุ ดคาสั่งที่ สร้ าง 8. ตัวเลขเจ็ ดส่ วนในโปรแกรม Proteus อยู่ใ น
ขึ้นควรใช้ผงั งานรู ปใด Category ใด
ก. รู ปสี่ เหลี่ยมผืนผ้า ก. Optoelectronic
ข. รู ปสามเหลี่ยม ข. Opto isolator
ค. รู ปทรงกลม ค. Light electronic
ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา ง. Diode
จ. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา จ. Semiconductor
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 309
9. สิ่ งใดที่ตอ้ งทาในโปรแกรม Proteus แต่ในวงจรจริ งไม่จาเป็ นต้องทา
ก. ตัวต้านทานพูลดาวน์ที่ขาคอลเลคเตอร์
ข. ตัวต้านทานพูลอัพที่ขาคอลเลคเตอร์
ค. ลอจิกขา EN
ง. ลอจิกขา LT
จ. กราวด์ทรานซิสเตอร์
10. การทดลองในวงจรจริ งต้องปลดกราวด์ LED 8 ตัวในใบงานเก่าออกเพื่ออะไร
ก. เพิ่มแรงดันให้แก่ตวั เลขเจ็ดส่ วน
ข. เพิ่มความเร็ วให้แก่ตวั เลขเจ็ดส่ วน
ค. เพิ่มกระแสให้กบั ทรานซิ สเตอร์
ง. เพิ่มเวลาให้แก่ตวั เลขเจ็ดส่ วน
จ. เพิ่มความสว่างให้แก่ตวั เลขเจ็ดส่ วน
310 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ตัวแสดงผลตัวเลข 7 ส่ วนที่เราเรี ยกกันว่า 7-Segment ประกอบขึ้นด้วย LED จานวน 8 ตัวโดยที่
ใช้ LED จานวน 7 ตัวถูกจัดวางให้สามารถแสดงเป็ นตัวเลขต่าง ๆ อีก 1 ตัวไว้แสดงเป็ นจุดทศนิยมสาหรับ
ใบงานที่ 7.12 เป็ นใบงานเพื่อศึกษาวิธีการเขียนโปรแกรมเพื่อแสดงผลเป็ นตัวเลข โดยศึกษาการเขียน
โปรแกรมเพื่อแสดงผลตัวเลข 2 แบบคือ
1. แสดงผลด้วยตัวเลข 7 ส่ วน 1 หลักแบบขับตรง
2. แสดงผลด้วยตัวเลข 7 ส่ วน 2 หลักแบบมัลติเพล็ก

แสดงผลด้ วยตัวเลข 7 ส่ วน 1 หลักแบบขับตรง ไมโครคอนโทรลเลอร์ ตระกูล MCS-51 ขนาด 40 ขา


ไม่สามารถขับโหลดโดยตรงได้ เนื่ องจากถูกออกแบบมาให้ขบั กระแสเอาท์พุทไม่สูงมากนัก ดังนั้นเมื่อ
ต้องการขับโหลดที่ตอ้ งการกระแสสู งจาเป็ นต้องพึ่งอุปกรณ์ ช่วยขับกระแสหรื อที่เรี ยกกันว่า บัฟเฟอร์
(Buffer) ซึ่งอาจใช้ ทรานซิ สเตอร์ มอสเฟต หรื อไอซี ทั้งนี้ ข้ ึนอยูก่ บั ความเหมาะสม เช่น หากต้องการขับ
ทั้ง 8 บิต (1 พอร์ ต) ที่ไม่ตอ้ งการกระแสสู งมากนัก ก็ควรเลือกใช้ไอซี ขบั เนื่ องจากราคาถูก ประหยัดเนื้อที่
และสะดวกในการออกแบบดังรู ปที่ 7.12-1

รู ปที่ 7.12-1 วงจรขับตัวเลข 7 ส่ วนแบบ 1 หลัก

การเขียนโปรแกรมเพื่อแสดงผลเป็ นตัวเลขที่ตอ้ งการสามารถเขียนโปรแกรมขับพอร์ ตโดยตรง


เช่นเดียวกับการเขียนโปรแกรมขับ LED 8 ตัวในใบงานที่ 7.5 ที่ผา่ นมาแล้วเพียงแต่ค่าที่ส่งออกพอร์ ตเป็ น
ค่าที่ทาให้ตวั เลข 7 ส่ วนติดสว่างเป็ นตัวเลขที่ตอ้ งการ ดังตัวอย่างแสดงตัวเลข 0-9
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 311
#include<REGX52.H>
void delay(int n); //declare delay program
void main(void)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
int i;
while(1)
{
for(i=0;i<10;i++) // #
{ // |
P0=value[i]; // send number to 7 segment
delay(100); // |
} // #
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}

แสดงผลด้ วยตัวเลข 7 ส่ วน 2 หลักแบบมัลติเพล็ก กรณี ที่ขบั 7-Segment แบบหลายหลัก หากการต่อ


สายสัญญาณขับตัวแสดงผลโดยตรงหลักต่อหลักจะทาให้ตอ้ งใช้สายสัญญาณจานวนมาก ดังนั้นในทาง
ปฏิบตั ิจึงต้องใช้หลักการขับโดยวิธีอื่น เพื่อลดจานวนของสายสัญญาณหนึ่งในวิธีการลดสายสัญญาณคือ
การต่อแบบ “มัลติเพล็ก” (Multiplex) (นิ ยมใช้ต้ งั แต่ 2-4 หลักหากมากกว่านี้ จะเกิดการกระพริ บได้) การ
แสดงผลด้วยวิธีมลั ติเพล็กจะต้องใช้ตวั แสดงผลที่มีการต่อขาของเซกเมนต์ร่วมกันเช่ นเบอร์ TOD-3261
ดังรู ป 7.12-2 หรื อเชื่อมต่อเองจากตัวแสดงผลตัวเลข 7 ส่ วนแบบทัว่ ไป
10 5 digit 1 digit 2
digit 1 digit 2

a b c d e f g dp a b c d e f g dp

3 9 8 6 7 4 1 2 (a) (b)

รู ปที่ 7.12-2 โครงสร้างภายในของตัวแสดงผลตัวเลข 7 ส่ วนแบบมัลติเพล็ก

หมายเหตุ วงจรแสดงผลที่มีจานวนหลักของตัวเลขมากกว่า 4 หลักหากใช้วธิ ี มลั ติเพล็กจะเกิดการ


กระพริ บดังนั้นการแสดงผลจะต้องใช้วงจรแสดงผลแบบ SPI (Serial Peripheral Interface) แทน
312 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
วิธีการแสดงผลจากตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบมัลติเพล็ก สามารถทาได้โดยการให้ติด
สว่างในแต่ละหลักต่างคนละเวลากัน สาหรับตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบมัลติเพล็กแบบ 2 หลัก มี
ขั้นตอนการแสดงผลคือส่ งค่าตัวเลขเพื่อให้หลักแรกติดสว่างก่อนในช่วงเวลาหนึ่งแล้วดับไปหลังจากนั้น
ส่ งค่าตัวเลขให้ติดหลักที่ 2 ให้ติดในช่วงเวลาที่เท่ากันแล้วดับไปวนทาซ้ าไปเรื่ อย ๆ ตราบที่ยงั ต้องการให้
แสดงผลอยูเ่ พื่อให้สามารถมองเห็นได้ วงจรขับสาหรับแสดงผลจากตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบ
มัลติเพล็กแบบ 2 หลักเป็ นดังรู ปที่ 7.13-3

รู ปที่ 7.12-3 วงจรขับสาหรับแสดงผลจากตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบมัลติเพล็กแบบ 2 หลัก

วิธีการแสดงผลจากตัวแสดงผลตัวเลข 7 ส่ วนที่ต่อแบบมัลติเพล็กแบบ 2 หลัก ยกตัวอย่างเช่น


ต้องการแสดงตัวเลข “12” ซึ่งมีข้ นั ตอนดังนี้
1. สั่งทรานซิ สเตอร์ หยุดทางานทั้ง 2 ตัว (ส่ งลอจิก 0 ) เพื่อให้ตวั แสดงผลตัวเลข 7 ส่ วนหยุด
ทางานแม้วา่ จะมีการส่ งข้อมูลเข้าทางขา a ถึง dp ก็ตาม
2. ส่ งสัญญาณข้อมูลตัวเลข “1” (0x06) ทางพอร์ต 0
3. สั่งเฉพาะหลักที่ 1 ทางานและหลักที่ 2 ไม่ทางานโดยการสั่งทรานซิ สเตอร์ ทางานเฉพาะ Q1
(ส่ งลอจิก 1 ไปยังเบสของ Q1 ) ส่ วนทรานซิ สเตอร์ Q2 ยังคงหยุดทางาน (จากการสั่งข้อ 1)
ผลจะทาให้ตวั แสดงผลตัวเลข 7 ส่ วนหลักที่ 1 ติดสว่างเป็ นตัวเลข 1
4. หน่วงเวลาชัว่ ขณะเพื่อให้ตวั เลขมีความสว่าง
5. สั่งให้หลักที่ 1 ไม่ทางานโดยสั่งทรานซิ สเตอร์ หยุดทางานเฉพาะ Q1 (ส่ งลอจิก 0 ไปยังเบส
ของ Q1 ) ทรานซิ สเตอร์ Q2 ยัง คงหยุดท างาน (จากการสั่ งข้อ 1) ช่ วงเวลานี้ ตวั แสดงผล
ตัวเลข 7 ส่ วนจะดับ
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 313
6. ส่ งสัญญาณข้อมูลตัวเลข “2” (0x5B) ทางพอร์ ต 0
7. สัง่ เฉพาะหลักที่ 2 ทางานและหลักที่ 1 ไม่ทางานโดยการสั่งทรานซิ สเตอร์ ทางานเฉพาะ Q2
(ส่ งลอจิก 1 ไปยังเบสของ Q2 ) ส่ วนทรานซิ สเตอร์ Q1 ยังคงหยุดทางาน (จากการสั่งข้อ 5)
ผลจะทาให้ตวั แสดงผลตัวเลข 7 ส่ วนหลักที่ 2 ติดสว่างเป็ นตัวเลข 2
8. หน่วงเวลาชัว่ ขณะเพื่อให้ตวั เลขมีความสว่าง
9. สั่งให้หลักที่ 2 ไม่ทางานโดยสั่งทรานซิ สเตอร์ หยุดทางานเฉพาะ Q2 (ส่ งลอจิก 0 ไปยังเบส
ของ Q2 ) ทรานซิ สเตอร์ Q1 ยัง คงหยุดท างาน (จากการสั่ งข้อ 5) ช่ วงเวลานี้ ตวั แสดงผล
ตัวเลข 7 ส่ วนจะดับ
10. วนกลับไปทาซ้ าจากขั้นตอนที่ 1 การดาเนินการเช่นนี้ จะเห็นการแสดงเป็ นตัวเลข “12”

รู ปที่ 7.12-4 แสดงเส้นทางของสัญญาณเพื่อแสดงเลข “1”ในหลักที่ 1 (ขั้นตอนที่ 2-4)

รู ปที่ 7.12-5 แสดงเส้นทางของสัญญาณเพื่อแสดงเลข “2”ในหลักที่ 2 (ขั้นตอนที่ 6-8)


314 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
การแสดงตัวเลขสาหรับตัวแสดงผลตัวเลข 7 ส่ วนจะขึ้นอยูก่ บั การออกแบบวงจรว่าต้องการให้
บิตใดต่อกับส่ วนใดของตัวเลข ตัวอย่างเช่นการต่อดังรู ปที่ 7.12-6

รู ปที่ 7.12-6 บิตเชื่อมต่อกับขาของตัวแสดงผลตัวเลข 7 ส่ วน

หากต่อบิตเชื่ อมต่อกับขาของตัวแสดงผลตัวเลข 7 ส่ วนเป็ นดังรู ปที่ 7.12-7 เมื่อต้องการให้ส่วน


ใดสว่างทาได้โดยส่ งลอจิก “1” แต่หากต้องการให้ส่วนใดไม่สว่างทาได้โดยส่ งลอจิก “0” ไปยังส่ วนนั้น
ดังตาราง

ตารางที่ 7.12-1 ข้อมูลที่ส่งออกพอร์ ตเพื่อให้ติดสว่างเป็ นตัวเลข


ข้อมูลที่ตอ้ งส่ งออกพอร์ ตเพื่อให้ 7-Segment ติดเป็ นตัวเลข
บิตของพอร์ ต P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
HEX
ส่ วนของตัวเลข dp. g f e d c b a

0 0 0 1 1 1 1 1 1 0x3F
1 0 0 0 0 0 1 1 0 0x06
2 0 1 0 1 1 0 1 1 0x5B

ผลการแสดง 3 0 1 0 0 1 1 1 1 0x4F
4 0 1 1 0 0 1 1 0 0x66
บนตัวเลข 7
5 0 1 1 0 1 1 0 1 0x6D
ส่ วน 6 0 1 1 1 1 1 0 1 0x7D
7 0 0 0 0 0 1 1 1 0x07
8 0 1 1 1 1 1 1 1 0x7F
9 0 1 1 0 1 1 1 1 0x6F
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 315

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมแสดงผลตัวเลข 7 ส่ วนเป็ นดังรู ปที่ 7.12-7

รู ปที่ 7.12-7 วงจรสมบูรณ์ที่ใช้ทดลองการเขียนโปรแกรมแสดงผล

การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์


อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180 , 220 , 4.7 k, 10 k MINRES180R, MINRES220R
MINRES4K7, MINRES10K
4. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
5. 7-Segment แบบ 2 หลักคอมมอนแคโทด 7SEG-MPX2-CC-BLUE
6. ทรานซิสเตอร์ เบอร์ BC547 BC547

หมายเหตุ สาหรับการจาลองการทางาน จาเป็ นต้องต่อรี ซิสเตอร์ พูลอัพ 10 k ที่ขาคอลเลกเตอร์


(R11,R12) เพื่อให้มีค่าแรงดันที่แน่นอนในกรณี ที่ทรานซิ สเตอร์ หยุดนากระแส (เมื่อต่อวงจรจริ ง
ไม่ใส่ ก็ได้)
316 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รู ปที่ 7.12-8 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

แผ่นวงจรจริ งที่ใช้ทดลองใช้แผ่นวงจรที่สร้างไว้ในใบงานที่ 7.11 เป็ นดังรู ปที่ 7.12-9


7805
103

74HC573

AT89S52

รู ปที่ 7.12-9 วงจรจริ งที่ใช้ทดลอง


ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 317
การทดลองที่ 1 การทดลองการแสดงผลเป็ นตัว เลข 0 ถึ ง 9 วนไปเรื่ อ ย ๆ โดยใช้วงจรทดลองที่ ใ ช้
7-Segment ที่ให้แสดงแสดงเพียงหลักเดียว ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน การทดลองที่ 1 เป็ นการทดลองเขียนโปรแกรมสั่งการให้แสดงผลเป็ นตัวเลข 1 หลัก


ดังนั้นต้องเขียนคาสั่งบังคับให้ทรานซิ สเตอร์ Q1 ทางานเพียงตัวเดียวโดยไม่ให้ทรานซิ สเตอร์ Q2 ทางาน
(ใช้คาสั่ง P2=0x80;) พอร์ ตของไมโครคอนโทรลเลอร์ ในตระกูล MCS-51 ทุกพอร์ ตจะมีค่าเริ่ มต้น (ค่า
เดิมหลังจากการเริ่ มทางาน) เป็ น 0xFF นัน่ หมายถึงทุกบิตของทุกพอร์ ตจะมีลอจิก 1 ส่ งออกมาแล้ว ดังนั้น
หากป้ อนไฟเข้าวงจรแม้ไม่มีการใส่ โปรแกรมใด 7-Segment แสดงผลจะแสดงเป็ นเลข 8 ซึ่ งเป็ นเพราะ
ได้รับลอจิก 1 จากพอร์ ตนัน่ เอง จากโจทย์สามารถเขียนลาดับงาน ในการเขียนโปรแกรมแสดงตัวเลข 0
ถึง 9 สามารถเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปร โดยเก็บค่าแสดงเลข 0 ถึง 9 ที่ตอ้ งการใช้
2. นาค่าตัวแปรส่ งออกพอร์ ต
3. หน่วงเวลา
4. เพิ่มค่าตัวแปร
5. กลับไปทางานในลาดับที่ 2

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

ส่ งค่าตัวแปรไปยังพอร์ ต 0

หน่วงเวลา

เพิ่มค่าตัวแปร 1 ค่า
318 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(int n); //declare delay program
void main(void)
{
code unsigned char value[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};
int i;
P2=0x80; //Q1->0n , Q2->Off
while(1)
{
for(i=0;i<10;i++) // #
{ // |
P0=value[i]; // send number to 7 segment
delay(100); // |
} // #
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมจาก P2=0x80; เป็ น P2=0x40; แล้วสังเกตผล

การทดลองที่ 2 การทดลองการแสดงผลตัวเลข 2 หลักโดยแสดงผลเป็ นตัวเลข 00 ถึ ง 99 เมื่อครบ 99


แล้ววนเริ่ ม 00 ใหม่ ซึ่ งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 319
เขียนลาดับงาน การเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปร โดยเก็บค่าแสดงเลข 0 ถึง 9 ที่ตอ้ งการใช้
2. กาหนดตัวแปรนับรอบการอินเตอร์ รัพท์
3. การแสดงผล
- หากยังไม่ครบเวลาให้แสดงผล
- หากครบเวลาแล้วค่าตัวนับเลขเดิมยังไม่ถึง 99 ให้เพิ่มตัวนับเลข
- หากครบเวลาแล้วค่าตัวนับเลขเดิมเป็ นค่า 99 ให้ตวั นับเลขกลับเป็ น 0 ใหม่
4. กลับไปทางานในลาดับที่ 3
แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม หน่วงเวลาแบบอินเตอร์ รัพต์

กาหนดตัวแปร,ค่าเริ่ มต้น รี เซตแฟลก

กาหนดตัวแปรนับค่า เพิ่มค่าตัวแปรนับค่า

แสดงผล จบ

แสดงผล

กาหนดตัวแปร,ค่าเริ่ มต้น

แสดงผลหลักสิ บ

แสดงผลหลักหน่วย

จบการแสดงผล

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(void); //delay time for count
void delay_display(void); //delay time for display
void display(char num); //display program
sbit com1=P2^7; //common off digit 1
sbit com2=P2^6; //common off digit 2
320 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
unsigned int t=0; //variable for count time interrupt
void main(void)
{
char count=0; //variable for count number
com1=0; //Off Q1
com2=0; //Off Q2
TMOD=0x10; //timer1 mode 1
TH1=0xDC; //set TH1 for 10mS timer
TL1=0x00; //set TL1 for 10mS timer
TF1=0; //clear flag timer1
ET1=1; //Enable interrupt timer1
EA=1; //Enable interrupt all
TR1=1; //Run (Start) timer1
while(1)
{
if (t<50) //if time < 0.5S (10mSx50=0.5S)
{
display(count); //display count number
}
else if(count<99) //if finish time and count num<99
{
t=0; //reset count time interrupt
count++; //increment count number
}
else
{
t=0; //reset count time interrupt
count=0; //restart count number
}
}
}
void display(char num)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
P0=value[num/10]; //send Ten digits
com1=1; //On Q1
delay_display(); //slight delay for display
com1=0; //Off Q1
P0=value[num%10]; //send digit number
com2=1; //On Q2
delay_display(); //slight delay for display
com2=0; //Off Q2
}
void delay_display(void)
{
int i;
for(i=0;i<1000;i++);
}
void delay(void) interrupt 3
{
t++; //increment count time interrupt
TH1=0xDC; //set TH1 for 10mS timer
TL1=0x00; //set TL1 for 10mS timer
TF1=0; //clear flag timer1
}
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 321
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมจาก else if(count<99) ; เป็ น else if (count<59); และจาก if (t<50);
เป็ น else if (t<100); แล้วสังเกตผล

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขี ย นโปรแกรมจับ เวลา 59 วิ น าที โดยเริ่ ม จาก 59, 58, 57, …, 00 และเมื่ อ ถึ ง เวลา 00 ให้
โปรแกรมหยุดนับ โดยแสดงค่ า 00 ค้า งไว้ ท าการทดลองผลทั้ง การจาลองการทางานด้วยโปรแกรม
Proteus และทดลองด้วยวงจรจริ ง วงจรที่ใช้ทดลองเป็ นดังรู ปที่ 7.12-10

รู ปที่ 7.12-10 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย


322 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.12


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หากต้องการควบคุ มทรานซิ สเตอร์ ที่ต่อที่บิต 5. ค าสั่ ง ที่ สั่ ง ทรานซิ ส เตอร์ ท างานหรื อหยุ ด
P2.6 ด้วยคาว่า TR1 จะต้องใช้คาสั่งใด ทางานควรใช้ผงั งานรู ปใด
ก. bit TR1=P2^6; ก. รู ปทรงกลม
ข. setbit TR1=P2^6; ข. รู ปสี่ เหลี่ยมผืนผ้า
ค. sbit TR1=P2^6; ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. set TR1=P2^6; ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. bsit TR1=P2^6; จ. รู ปสามเหลี่ยม
2. จากวงจรในใบงานหากต้องการให้ติดเป็ นเลข 6. จากผังงาน “ส่ งค่าข้อมูลตัวเลขออกพอร์ ต 0”
1 ต้องส่ งค่าใดออกพอร์ ต 0 ควรใช้คาสั่งใด
ก. 0x01 ก. P0!=data;
ข. 0x06 ข. P0=!data;
ค. 0x02 ค. P0>=data;
ง. 0x04 ง. P0=data;
จ. 0x08 จ. P0<=data;
3. คาสั่งใดที่ ทาให้ทรานซิ สเตอร์ ที่ขาเบสต่อที่ 7. เหตุใดการแสดงผลแต่ละหลักต้องหน่วงเวลา
บิต P2.6 นากระแส ให้ติดค้างไว้ระยะเวลาหนึ่ง
ก. P2=0x40; ก. เพิ่มความสว่าง
ข. P2=0x26; ข. ให้วงจรทางานได้ทนั
ค. P2=0x06; ค. ลดกระแสในวงจร
ง. P2=0x04; ง. ลดแรงดันที่ส่งไปยังตัวเลขเจ็ดส่ วน
จ. P2=0x64; จ. ต้องการประหยัดพลังงาน
4. ฟั งก์ชนั่ การแสดงผลซึ่ งเป็ นชุ ดคาสั่งที่ สร้ าง 8. ตัวเลขเจ็ ดส่ วนในโปรแกรม Proteus อยู่ใ น
ขึ้นควรใช้ผงั งานรู ปใด Category ใด
ก. รู ปสี่ เหลี่ยมผืนผ้า ก. Opto isolator
ข. รู ปทรงกลม ข. Light electronic
ค. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา ค. Semiconductor
ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา ง. Diode
จ. รู ปสามเหลี่ยม จ. Optoelectronic
ใบงานที่ 7.12 การเขียนโปรแกรมแสดงผลตัวเลข 7 ส่วน 323
9. สิ่ งใดที่ตอ้ งทาในโปรแกรม Proteus แต่ในวงจรจริ งไม่จาเป็ นต้องทา
ก. ตัวต้านทานพูลดาวน์ที่ขาคอลเลคเตอร์
ข. ลอจิกขา EN
ค. ตัวต้านทานพูลอัพที่ขาคอลเลคเตอร์
ง. ลอจิกขา LT
จ. กราวด์ทรานซิสเตอร์
10. การทดลองในวงจรจริ งต้องปลดกราวด์ LED 8 ตัวในใบงานเก่าออกเพื่ออะไร
ก. เพิ่มแรงดันให้แก่ตวั เลขเจ็ดส่ วน
ข. เพิ่มความสว่างให้แก่ตวั เลขเจ็ดส่ วน
ค. เพิ่มความเร็ วให้แก่ตวั เลขเจ็ดส่ วน
ง. เพิ่มกระแสให้กบั ทรานซิ สเตอร์
จ. เพิ่มเวลาให้แก่ตวั เลขเจ็ดส่ วน

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ง 3. ค 4. จ 5. ก 6. ข 7. ค 8. ก 9. ข 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ค 2. ข 3. ก 4. ง 5. ข 6. ง 7. ก 8. จ 9. ค 10. ข
ใบงานที่ 7.13
การเขียนโปรแกรมรับสวิตช์ เพื่อแสดงผลตัวเลข 7 ส่ วน
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่ วน

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.11 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
326 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.13


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ค าสั่ ง ตรวจสอบว่ า สวิ ต ช์ ถู ก กดหรื อ ไม่ ใ ช้ 5. ฟั ง ก์ ชั่ น วนตรวจสอบว่ า มี ก ารกดสวิ ต ช์
คาสั่งใด (ประกาศใช้บิตแล้ว) หรื อไม่ ควรใช้ผงั งานรู ปใด
ก. if(SW==0) ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. if(SW==1) ข. รู ปทรงกลม
ค. if(SW>=0) ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. if(SW<=0) ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. if(SW!=0) จ. รู ปสามเหลี่ยม
2. คาสั่งใดที่ตดั เอาเฉพาะเลขหลักหน่ วย (ของ 6. หากกระบวนการผัง งานเป็ น “เพิ่ ม ค่ า หลัก
ตัวเลขสองหลัก) สิ บ” ควรใช้คาสั่งใด
ก. num=num/10; ก. value < 10;
ข. num=num%10; ข. value=value+10;
ค. num=num#10; ค. value +10;
ง. num=num*10; ง. value <= 10;
จ. num=num$10; จ. value || 10;
3. ค าสั่ ง ใดที่ ต ัด เอาเฉพาะเลขหลัก สิ บ (ของ 7. หากกระบวนการในผังงานเป็ น “SW1 ถูกกด
ตัวเลขสองหลัก) ?” ควรใช้คาสั่งใด
ก. num=num%10; ก. if (SW1==0)
ข. num=num#10; ข. for (SW1==0)
ค. num=num*10; ค. do (SW1==0)
ง. num=num/10; ง. int (SW1==0)
จ. num=num$10; จ. char (SW1==0)
4. ฟั งก์ชนั่ อ่านสวิตช์ซ่ ึ งเป็ นชุ ดคาสั่งที่สร้ างขึ้น
ควรใช้ผงั งานรู ปใด
ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. รู ปทรงกลม
ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. รู ปสามเหลี่ยม
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 327
8. ถ้าผลการจาลองด้วยโปรแกรม Proteus การติดของตัวเลขเจ็ดส่ วนไม่เป็ นตัวเลขตามที่ตอ้ งการเกิ ด
จากสิ่ งใด
ก. เลือกใช้ทรานซิสเตอร์ผดิ ชนิด
ข. เลือกใช้ตวั เลขเจ็ดส่ วนผิดคอมมอน
ค. เลือกใช้สวิตช์ผดิ แบบ
ง. เลือกใช้ตวั ต้านทางผิดชนิด
จ. ต่อขาทรานซิ สเตอร์ ผดิ
9. หากวงจรทางานปกติแต่เขียนโปรแกรมตัวเลขติดเพียงหลักเดียวเป็ นผลจากสิ่ งใด
ก. ไอซีเสี ย
ข. สายต่อพอร์ ตดาต้าขาด
ค. การบัดกรี ไม่สมบูรณ์
ง. กาหนดพอร์ ตดาต้าผิด
จ. กาหนดบิตควบคุมทรานซิ สเตอร์ ผดิ ตาแหน่ง
10. ในกรณี ที่ทดลองด้วยวงจรจริ งแล้วตัวเลขเจ็ดส่ วนติดเพียงหลักเดียวควรเริ่ มตรวจสอบจากที่ใด
ก. ทรานซิ สเตอร์ หลักที่ไม่ติด
ข. ขาร่ วมของหลักที่ไม่ติด
ค. รี ซิสเตอร์ ขาเบสของทรานซิ สเตอร์ หลักที่ไม่ติด
ง. พอร์ ตที่ต่อขาเบสของทรานซิ สเตอร์ หลักที่ไม่ติด
จ. แนวการบัดกรี หลักที่ไม่ติด
328 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ใบงานที่ 7.12 ที่ผา่ นมาเป็ นใบงานที่ศึกษาการแสดงผลด้วยตัวแสดงผล ตัวเลข 7 สาหรับใบงาน
นี้ เป็ นการต่อยอดโดยเพิ่มการรับค่าจากสวิตช์ (ที่ต่อไว้แล้วในในงานที่ 7.6 ) เพื่อนามาใช้ประโยชน์ใน
การแสดงผล ใบงานที่ 7.12 การทดลองที่ 2 ใช้ตวั แปร count เป็ นตัวนับตัวเลข ดังนั้นเมื่อค่าในตัวแปรนี้ มี
ค่าเป็ นเช่นไรการแสดงผลจะเป็ นเช่นนั้น
ใบงานที่ 7.13 เป็ นใบงานที่ศึกษาวิธีการเขียนโปรแกรมเพื่อรับสวิตช์มาควบคุมการแสดงผลด้วย
ตัวเลข 7 ส่ วน เนื่องจากตัวแสดงผลตัวเลข 7 ส่ วนมีจานวน 2 หลักตัวแปรที่นามาใช้งานเพื่อเก็บค่าตัวเลข
เพื่อแสดงผลจึงใช้เป็ น char เพราะสามารถเก็บตัวเลขที่เป็ นบวกได้สูงสุ ด 127 แต่ใช้เพื่อแสดงผลสู งสุ ด
เพียง 99 เท่านั้น

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมรับค่าจากสวิตช์เพื่อแสดงผลที่ตวั เลข 7 ส่ วน
เป็ นดังรู ปที่ 7.13-1

รู ปที่ 7.13-1 วงจรสมบูรณ์ที่ใช้ทดลอง


ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 329
การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์
อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180, 220, 4.7k, 10k MINRES180R, MINRES220R
MINRES4K7, MINRES10K
4. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
5. 7-Segment แบบ 2 หลักคอมมอนแคโทด 7SEG-MPX2-CC-BLUE
6. ทรานซิสเตอร์ เบอร์ BC547 BC547
7. สวิตช์กดติดปล่อยดับ BUTTON

รู ปที่ 7.13-2 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

หมายเหตุ วงจรสวิตช์ที่ใช้ในการทดลองด้วยวิธีการจาลองการทางานด้วยโปรแกรม Proteus


ไม่ได้ต่อตัวต้านทานพูลอัพไว้และสามารถทางานได้เนื่ องจากภายในพอร์ ต 2 มีตวั ต้านทานพูลอัพ
ภายในอยูแ่ ล้ว แต่สาหรับวงจรจริ งได้ใส่ ไว้เพื่อที่จะสามารถใช้งานสวิตช์ในพอร์ ต 0 ได้
330 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
แผ่นวงจรจริ งที่ใช้ทดลองใช้แผ่นวงจรที่สร้างไว้แล้วในใบงานที่ 7.11 เป็ นดังรู ปที่ 7.13-3

7805
103

74HC573
AT89S52

รู ปที่ 7.13-3 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการแสดงผลเป็ นตัวเลข 2 หลัก โดยสามารถตั้งค่าตัวเลขที่แสดงผลได้จาก


การรับค่าจากสวิตช์ที่ต่ออยูก่ บั พอร์ ต 2 โดยใช้งานเพียง 2 ตัว ให้มีผลที่แสดงดังนี้คือ
- สวิตช์ S1สาหรับเพิม่ ค่าเฉพาะหลักสิ บ (0-9)
- สวิตช์ S2สาหรับเพิ่มค่าเฉพาะหลักหน่วย (0-9)
ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับ งาน การทดลองที่ 1 เป็ นการทดลองเขียนโปรแกรมรั บค่าจากสวิตช์แนวคิดในการเขีย น


โปรแกรมคือกาหนดให้ตวั แปรเก็บตัวเลขเป็ นแบบโกลบอล (ทุกฟั งก์ชนั่ สามารถมองเห็นตัวแปรนี้ ) เมื่อ
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 331
กดสวิตช์ S1 ให้บวกตัวแปรเก็บตัวเลขครั้งละสิ บแต่ตอ้ งมีการตรวจสอบว่าจะบวกได้หรื อไม่ (บวกแล้ว
จะต้องไม่เกิน 99) และเมื่อกดสวิตช์ S1 ให้บวกตัวแปรเก็บตัวเลขครั้งละหนึ่งเฉพาะหลักหลังโดยต้องมี
การตรวจสอบว่าจะบวกได้หรื อไม่(เลขเดิมต้องน้อยกว่า 9) สามารถเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรนับค่า
2. สร้างฟังก์ชนั่ การสแกนรับการกดสวิตช์
-ตรวจการกดสวิตช์หากสวิตช์ SW1 ถูกกดให้เพิ่มตัวหลักสิ บ 1 ค่า
-ตรวจการกดสวิตช์หากสวิตช์ SW2 ถูกกดให้เพิม่ ตัวหลักหน่วย 1 ค่า
3. สร้างฟังก์ชนั่ การแสดงผลโดยนาค่าตัวนับมาแสดงผล
4. เรี ยกใช้ฟังก์ชนั่ การกดสวิตช์
5. เรี ยกใช้ฟังก์ชนั่ แสดงผล
6. กลับไปทางานในลาดับที่ 4

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

กาหนดตัวแปรนับค่า

ตรวจสอบการกดสวิตช์

แสดงผล

ตรวจสอบการกดสวิตช์
yes
SW1 ถูกกด ? ถ้าตัวนับน้อยกว่า 90 ให้เพิ่ม 10 ถ้าไม่ ให้หลักสิ บเป็ น 0
no
yes
SW2 ถูกกด ? ถ้าตัวนับหลักหน่วยน้อยกว่า 9 ให้เพิ่ม 1
no ถ้าไม่ใช่ให้หลักหน่วยเป็ น 0

จบ
332 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay_display(void); //delay time for display
void display(char num); //display program
void read_sw(void); //read switch program
sbit com1=P2^7; //common off digit 1
sbit com2=P2^6; //common off digit 2
sbit S1=P2^3; //switch 1
sbit S2=P2^2; //switch 2
char count=0; //variable for number display
void main(void)
{
com1=0; //Off Q1
com2=0; //Off Q2
while(1)
{
read_sw(); //read switch
display(count); //display count number
}
}
void display(char num)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
P0=value[num/10]; //send Ten digits
com1=1; //On Q1
delay_display(); //slight delay for display
com1=0; //Off Q1
P0=value[num%10]; //send digit number
com2=1; //On Q2
delay_display(); //slight delay for display
com2=0; //Off Q2
}
void delay_display(void)
{
int i;
for(i=0;i<1000;i++);
}
void read_sw(void)
{
if(S1==0) //if s1 is pressed
{ if(count<90) //if <90 then +10
count=count+10;
else //if more than 89 then ten unit=0
count=count%10;
}
else if (S2==0) //if s2 is pressed
{ if(count%10<9) //if digit number <9 then +1
count++;
else //if digit number=9 then -9
count=count-9;
}
while(S1==0 || S2==0) //wait S1 and S2 not been pressed
{
display(count); //display count number
}
}
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 333
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมจากการอ่านค่าสวิตช์ S1 และ S2 เป็ น S3 และ S4 แล้วสังเกตผล

การทดลองที่ 2 การทดลองการแสดงผลเป็ นตัวเลข 2 หลัก โดยสามารถตั้งค่าตัวเลขที่แสดงผลได้จาก


การรับค่าจากสวิตช์เช่นเดียวกับการทดลองที่ 1 โดยเพิ่มอีก 2 เงื่อนไขจากสวิตช์ตวั ที่เหลือให้มีคุณสมบัติ
ของโปรแกรม ดังนี้
- สวิตช์ S1สาหรับเพิ่มค่าเฉพาะหลักสิ บ (0-9)
- สวิตช์ S2 สาหรับเพิ่มค่าเฉพาะหลักหน่วย (0-9)
- สวิตช์ S3 สาหรับเริ่ มนับเลขเริ่ มจาก 0 จนถึงค่าที่ต้ งั ไว้เมื่อครบจึงหยุด
- สวิตช์ S4 สาหรับหยุดนับเลขแล้วแสดงค่าตัวเลขตั้งค่า

เขียนลาดับงาน เขียนเพิ่มเติมจากการทดลองที่ 1 โดยเพิ่มเงื่อนไขของการนับค่าตัวเลข(ใช้ความรู ้จากใบ


งานที่ 7.12) ที่มีการควบคุ มการเริ่ มนับหรื อหยุดนับจากสวิตช์ S3 และ S4 ซึ่ งใช้ควบคุมการทางานของ
วงจรไทเมอร์ สามารถเขียนลาดับงานได้ดงั นี้
1. กาหนดตัวแปรนับค่า
2. สร้างฟังก์ชนั่ การสแกนรับการกดสวิตช์
-ตรวจการกดสวิตช์หากสวิตช์ S1 ถูกกดให้เพิ่มตัวตั้งค่าหลักสิ บ 1 ค่า
-ตรวจการกดสวิตช์หากสวิตช์ S2 ถูกกดให้เพิม่ ตัวตั้งค่าหลักหน่วย 1 ค่า
-ตรวจการกดสวิตช์หากสวิตช์ S3 ถูกกดให้วงจรไทเมอร์ เริ่ มทางาน
-ตรวจการกดสวิตช์หากสวิตช์ S4 ถูกกดให้ วงจรไทเมอร์ หยุดทางาน
3. สร้างฟังก์ชนั่ การแสดงผลโดยนาค่าตัวนับมาแสดงผล
4. เรี ยกใช้ฟังก์ชนั่ การกดสวิตช์
-ถ้ายังไม่สงั่ ให้เริ่ มนับให้แสดงผลตัวแปรตั้งค่า
-ถ้าสั่งให้เริ่ มนับให้เริ่ มตั้งแต่ 00 โดยเพิ่มค่าการแสดงผลเมื่อครบเวลาที่ต้ งั ไว้ หากครบเวลา
ให้เพิ่มตัวแสดงผลขึ้น 1 ค่าไปเรื่ อย ๆ จนถึงค่าที่ต้ งั ไว้ถึงหยุด
-ถ้าหากสั่งให้หยุดนับให้แสดงค่าตัวเลขที่ต้ งั ค่าไว้
5. กลับไปทางานในลาดับที่ 4
334 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

กาหนดตัวแปรนับค่า

ตรวจสอบการกดสวิตช์

yes
มีการสั่งเริ่ มนับหรื อไม่
no
แสดงผลตัวเลขตั้งค่า
ครบเวลาหรื อไม่
no yes
แสดงผลตัวเลขนับ
ตัวนับ = เลขตั้งค่าหรื อไม่
no yes

เพิ่มค่าตัวนับ หยุดนับ

ตรวจสอบการกดสวิตช์
yes
SW1 ถูกกด ? ถ้าตัวนับน้อยกว่า 90 ให้เพิ่ม 10 ถ้าไม่ ให้หลักสิ บเป็ น 0
no
yes
SW2 ถูกกด ? ถ้าตัวนับหลักหน่วยน้อยกว่า 9 ให้เพิม่ 1
no ถ้าไม่ใช่ให้หลักหน่วยเป็ น 0

SW3 ถูกกด ? วงจรไทเมอร์เริ่ มทางาน

SW4 ถูกกด ? วงจรไทเมอร์หยุดทางาน

จบ
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 335
แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม
Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay(void); //delay time for count
void delay_display(void); //delay time for display
void display(char num); //display program
void read_sw(void); //read switch program
sbit com1=P2^7; //common off digit 1
sbit com2=P2^6; //common off digit 2
sbit S1=P2^3; //switch 1
sbit S2=P2^2; //switch 2
sbit S3=P2^1; //switch 3
sbit S4=P2^0; //switch 4
char setnum=0; //variable for number setting
unsigned int t=0; //variable for count time interrupt
void main(void)
{
char count; //variable for number display
com1=0; //Off Q1
com2=0; //Off Q2
TMOD=0x10; //timer1 mode 1
TH1=0xDC; //set TH1 for 10mS timer
TL1=0x00; //set TL1 for 10mS timer
TF1=0; //clear flag timer1
ET1=1; //Enable interrupt timer1
EA=1; //Enable interrupt all
TR1=1; //Run (Start) timer1
while(1)
{
read_sw(); //read switch
if(TR1==0)
{
count=0;
display(setnum); //display setting number
}
else
{
if(t<50)
{
display(count); //display count number
}
else
{
t=0;
if(count<setnum)
count++;
else
TR1=0;
}
}
}
}
void display(char num)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
P0=value[num/10]; //send Ten digits
com1=1; //On Q1
336 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
delay_display(); //slight delay for display
com1=0; //Off Q1
P0=value[num%10]; //send digit number
com2=1; //On Q2
delay_display(); //slight delay for display
com2=0; //Off Q2
}
void delay_display(void)
{
int i;
for(i=0;i<1000;i++);
}
void delay(void) interrupt 3
{
t++; //increment count time interrupt
TH1=0xDC; //set TH1 for 10mS timer
TL1=0x00; //set TL1 for 10mS timer
TF1=0; //clear flag timer1
}
void read_sw(void)
{
if(S1==0) //if s1 is pressed
{ if(setnum<90) //if <90 then +10
setnum=setnum+10;
else //if more than 89 then ten unit=0
setnum=setnum%10;
}
else if (S2==0) //if s2 is pressed
{ if(setnum%10<9) //if digit number <9 then +1
setnum++;
else //if digit number=9 then -9
setnum=setnum-9;
}
else if (S3==0) //if s2 is pressed
TR1=1;
else if (S4==0) //if s2 is pressed
TR1=0;
while(S1==0 || S2==0) //wait S1 and S2 Not pressed
{
display(setnum); //display setting number
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขตัวเลขโปรแกรมจาก if(t<50); เป็ น 100, 200 แล้วสังเกตผล
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 337

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมตั้งเวลา (ลดลง 1 ค่าใช้เวลา 1 วินาที) โดยนับเวลาถอยหลังจนถึง 00 แล้วจึง
หยุด ใช้สวิตช์รับค่าเวลาจากการตั้งค่า (เช่นเดียวกับการทดลองที่ 2) ทาการทดลองผลทั้งการจาลองการ
ทางานด้วยโปรแกรม Proteus และทดลองด้วยวงจรจริ ง วงจรที่ใช้ทดลองเป็ นดังรู ปที่ 7.13-4

รู ปที่ 7.13-4 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย


338 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.13


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ค าสั่ ง ตรวจสอบว่ า สวิ ต ช์ ถู ก กดหรื อ ไม่ ใ ช้ 5. ฟั ง ก์ ชั่ น วนตรวจสอบว่ า มี ก ารกดสวิ ต ช์
คาสั่งใด (ประกาศใช้บิตแล้ว) หรื อไม่ ควรใช้ผงั งานรู ปใด
ก. if(SW==1) ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. if(SW==0) ข. รู ปทรงกลม
ค. if(SW>=0) ค. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้าย
ง. if(SW<=0) ขวา
จ. if(SW!=0) ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
2. คาสั่งใดที่ตดั เอาเฉพาะเลขหลักหน่ วย (ของ จ. รู ปสามเหลี่ยม
ตัวเลขสองหลัก) 6. หากกระบวนการผัง งานเป็ น “เพิ่ ม ค่ า หลัก
ก. num=num/10; สิ บ” ควรใช้คาสัง่ ใด
ข. num=num#10; ก. value=value+10;
ค. num=num*10; ข. value < 10;
ง. num=num%10; ค. value +10;
จ. num=num$10; ง. value <= 10;
3. ค าสั่ ง ใดที่ ต ัด เอาเฉพาะเลขหลัก สิ บ (ของ จ. value || 10;
ตัวเลขสองหลัก) 7. หากกระบวนการในผังงานเป็ น “SW1 ถูกกด
ก. num=num/10; ?” ควรใช้คาสั่งใด
ข. num=num%10; ก. for (SW1==0)
ค. num=num#10; ข. char (SW1==0)
ง. num=num*10; ค. if (SW1==0)
จ. num=num$10; ง. do (SW1==0)
4. ฟั งก์ชนั่ อ่านสวิตช์ซ่ ึ งเป็ นชุ ดคาสั่งที่สร้ างขึ้น จ. int (SW1==0)
ควรใช้ผงั งานรู ปใด
ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. รู ปทรงกลม
ค. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
ง. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
จ. รู ปสามเหลี่ยม
ใบงานที่ 7.13 การเขียนโปรแกรมรับสวิตช์เพื่อแสดงผลตัวเลข 7 ส่วน 339
8. ถ้าผลการจาลองด้วยโปรแกรม Proteus การติดของตัวเลขเจ็ดส่ วนไม่เป็ นตัวเลขตามที่ตอ้ งการเกิ ด
จากสิ่ งใด
ก. เลือกใช้ทรานซิสเตอร์ผดิ ชนิด
ข. เลือกใช้สวิตช์ผดิ แบบ
ค. เลือกใช้ตวั ต้านทางผิดชนิด
ง. เลือกใช้ตวั เลขเจ็ดส่ วนผิดคอมมอน
จ. ต่อขาทรานซิ สเตอร์ ผดิ
9. หากวงจรทางานปกติแต่เขียนโปรแกรมตัวเลขติดเพียงหลักเดียวเป็ นผลจากสิ่ งใด
ก. ไอซีเสี ย
ข. สายต่อพอร์ ตดาต้าขาด
ค. การบัดกรี ไม่สมบูรณ์
ง. กาหนดบิตควบคุมทรานซิ สเตอร์ ผดิ ตาแหน่ง
จ. กาหนดพอร์ ตดาต้าผิด
10. ในกรณี ที่ทดลองด้วยวงจรจริ งแล้วตัวเลขเจ็ดส่ วนติดเพียงหลักเดียวควรเริ่ มตรวจสอบจากที่ใด
ก. รี ซิสเตอร์ ขาเบสของทรานซิ สเตอร์ หลักที่ไม่ติด
ข. พอร์ ตที่ต่อขาเบสของทรานซิ สเตอร์ หลักที่ไม่ติด
ค. แนวการบัดกรี หลักที่ไม่ติด
ง. ทรานซิ สเตอร์ หลักที่ไม่ติด
จ. ขาร่ วมของหลักที่ไม่ติด

เฉลยแบบทดสอบก่อนเรี ยน
1. ก 2. ข 3. ง 4. ค 5. ง 6. ข 7. ก 8. ข 9. จ 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ง 3. ก 4. ง 5. จ 6. ก 7. ค 8. ง 9. ง 10. จ
ใบงานที่ 7.14
การเขียนโปรแกรมนับพัลส์ ด้วยวงจรเคาน์ เตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ เพื่อแสดงผลตัวเลข 7 ส่ วน

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.11 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
342 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.14


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การเปลี่ยนโหมดให้ทางานเป็ นวงจร 5. จากวงจรในใบงานวงจรแสดงตัวเลข 2 หลัก
เคาน์เตอร์ตอ้ งทาในบิตใด ตัวแปรที่ใช้เก็บตัวเลขควรเป็ นชนิดใด
ก. GATE ก. char
ข. C/T ข. int
ค. TR1 ค. unsigned int
ง. TF1 ง. long
จ. EA จ. unsigned long
2. บิตกาหนดรู ปแบบการทางานของวงจร 6. กระบวนการกาหนดโหมดการท างานวงจร
เคาน์เตอร์ อยูใ่ นรี จิสเตอร์ ใด เคาน์เตอร์ควรใช้ผงั งานรู ปใด
ก. SMOD ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. SCON ข. รู ปทรงกลม
ค. TIME ค. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
ง. TMOD ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. TCON จ. รู ปสามเหลี่ยม
3. ขารับสัญญาณภายนอกเข้าวงจรเคาน์เตอร์ 1 7. จากผังงาน “วงจรเคาน์เ ตอร์ 1 เริ่ ม ท างาน”
คือขาใด ต้องใช้คาสั่งใด
ก. T0 ก. TF1=1;
ข. T1 ข. TR1=1;
ค. INT0 ค. TR1=0;
ง. INT1 ง. TF1=0;
จ. ET1 จ. TG1=1;
4. หากต้อ งการวงจรเคาน์ เ ตอร์ 1 ท างานใน 8. จากผัง งาน “วงจรเคาน์ เ ตอร์ 1 หยุ ด รั บ
โหมด 1 ต้องใช้คาสั่งใด สัญญาณ” ต้องใช้คาสั่งใด
ก. TMOD=0x10; ก. TR1=1;
ข. TMOD=0x20; ข. TF1=1;
ค. TMOD=0x30; ค. TR1=0;
ง. TMOD=0x40; ง. TF1=0;
จ. TMOD=0x50; จ. TG1=1;
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 343
9. การทดลองด้วยโปรแกรม Proteus ใช้อุปกรณ์ใดส่ งสัญญาณเข้าวงจรเคาน์เตอร์
ก. สวิตช์
ข. รี ซิสเตอร์
ค. ทรานซิสเตอร์
ง. ไดโอด
จ. LED
10. วิธีป้อนสัญญาณเข้าวงจรเคาน์เตอร์ในการทดลองวงจรจริ งทาได้โดยวิธีใด
ก. ลัดสายจากขา P3.2/INT0 ไปวงจรสวิตช์
ข. ลัดสายจากขา P3.3/INT1 ไปวงจรสวิตช์
ค. ลัดสายจากขา P3.6/WR ไปวงจรสวิตช์
ง. ลัดสายจากขา P3.4/T0 ไปวงจรสวิตช์
จ. ลัดสายจากขา P3.5/T1 ไปวงจรสวิตช์
344 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ใบงานที่ 7.12 ที่ผา่ นมาเป็ นใบงานที่ศึกษาการแสดงผลด้วยตัวแสดงผล ตัวเลข 7 สาหรับใบงาน
นี้เป็ นการต่อยอดโดยเพิ่มการรับค่าสัญญาณพัลส์จากภายนอกเข้าวงจรเคาน์เตอร์ ค่าในรี จิสเตอร์ ต้ งั ค่าที่ใช้
ในวงจรไทเมอร์ จะกลายเป็ นรี จิสเตอร์นบั จานวนพัลส์แทน ซึ่งการเปลี่ยนหน้าที่จากวงจรไทเมอร์ ให้เป็ น
วงจรเคาน์เตอร์ (วงจรนับพัลส์ จากสัญญาณภายนอก) ทาได้โดยการกาหนดที่บิต C/T ให้มีค่าเป็ นลอจิก 1
ทาให้แหล่งสัญญาณเพิ่มค่าในรี จิสเตอร์ ต้ งั ค่า (TH,TL) ได้จากสัญญาณภายนอกแทนดังรู ปที่ 7.14-1 เป็ น
การใช้งานวงจรเคาน์เตอร์โหมด 1

OSC ÷12
C/T=0
สัญญาณ
TL1 TH1 TF1 อินเตอร์รัพท์
ขา T1 C/T=1 8 บิต 8 บิต
TR1
GATE
ขา INT1
รู ปที่ 7.14-1 โครงสร้างในโหมด 1 ของวงจรเคาน์เตอร์ 1

การปรั บ เปลี่ ย นโหมดให้ว งจรท างานในโหมดวงจรเคาน์ เ ตอร์ จะต้อ งแก้ไ ขค่ า ก าหนดใน
รี จิสเตอร์ TMOD ดังนี้

GATE C/T M1 M0 GATE C/T M1 M0

Timer 1 Timer 0
GATE = 0 เพื่อใช้บิต TR ในการสัง่ การให้เริ่ มทางานหรื อหยุดทางานได้
C/T = 1 เพื่อให้วงจรทางานในโหมดวงจรเคาน์เตอร์
M1-M0 = 01 เพื่อทางานในโหมด 1

ดัง นั้นหากใช้งานวงจรเคาน์ เตอร์ วงจรที่ 1 จะต้องก าหนดค่ า เป็ น 0101 xxxx ลงในรี จิส เตอร์
TMOD ซึ่งวงจรไทเมอร์ 0 ไม่ได้ใช้งานดังนั้นกาหนดเป็ นอะไรก็ได้ (เพื่อสะดวกกาหนดเป็ น 0000 แทน)
จานวนพัลส์ ที่รับเข้ามาได้ดูจากค่าที่ ปรากฏอยู่ในรี จิสเตอร์ THTL สาหรับคาสั่งการกาหนดโหมดใน
ภาษาซีเป็ นดังนี้
TMOD=0x50; //0x50 is 01010000
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 345

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ เพื่อแสดงผลที่
ตัวแสดงผลตัวเลข 7 ส่ วนโดยเพิ่มสวิตช์ต่อเข้าที่ขา T1 เป็ นตัวป้อนสัญญาณ ดังรู ปที่ 7.14-2

รู ปที่ 7.14-2 วงจรสมบูรณ์ที่ใช้ทดลอง

เพื่อสะดวกกับการทดลอง นักศึกษาสามารถใช้สวิตช์ที่ต่อใช้งานเดิมจากใบงานที่ 7.6 โดยทาการ


พ่วงสายจากสวิตช์ S1 ที่เดิมต่อไว้ที่บิต P2.3 พ่วงเข้ามายังขา T1 ดังรู ป 7.14-3

รู ปที่ 7.14-3 การพ่วงสายจากสวิตช์ S1 เข้ามายังขา T1


346 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์
อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีบฟั เฟอร์ 74HC573
3. รี ซิสเตอร์ 180, 220, 4.7k, 10k MINRES180R, MINRES220R
MINRES4K7, MINRES10K
4. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
5. 7-Segment แบบ 2 หลักคอมมอนคาโถด 7SEG-MPX2-CC-BLUE
6. ทรานซิสเตอร์ เบอร์ BC547 BC547
7. สวิตช์กดติดปล่อยดับ BUTTON

รู ปที่ 7.14-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

หมายเหตุ วงจรสวิตช์ที่ใช้ในการทดลองด้วยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ใช้


เพียง 1 ตัวแต่เมื่อทาการทดลองในวงจรจริ งให้ต่อพ่วงจากสวิตช์ที่ต่อใช้งานเดิมที่ได้สร้างขึ้นใน
ใบงานที่ 7.6
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 347
แผ่นวงจรจริ งที่ใช้ทดลองใช้แผ่นวงจรที่ สร้ างไว้ในใบงานที่ 7.11 โดยทาการพ่วงสายจากพอร์ ต P2.3
(หรื อใช้บิตอื่นก็ได้ตามความต้องการ) ดังรู ปที่ 7.14-5

7805
103

74HC573
AT89S52

รู ปที่ 7.14-5 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการนับการกดสวิตช์โดยแสดงผลเป็ นตัวเลข 2 หลัก โดยใช้วงจรเคาน์เตอร์


เป็ นตัวนับครั้งของการกดสวิตช์ ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน การเขียนโปรแกรมนับพัลส์ สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดโหมดของวงจรไทเมอร์ เคาน์เตอร์ให้ทางานในโหมดเคาน์เตอร์
2. สร้างฟังก์ชนั่ การแสดงผลโดยนาค่าตัวนับมาแสดงผล
3. เรี ยกใช้ฟังก์ชนั่ แสดงผลโดยรับค่ามาจากรี จิสเตอร์ TL
4. กลับไปทางานในลาดับที่ 3
348 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

กาหนดโหมดที่ TMOD

แสดงผลจาก TL

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม Keil


µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay_display(void); //delay time for display
void display(char num); //display program
sbit com1=P2^7; //common off digit 1
sbit com2=P2^6; //common off digit 2
void main(void)
{
com1=0; //Off Q1
com2=0; //Off Q2
TMOD=0x50; //Counter Mode
TR1=1; //Start counter
while(1)
{
display(TL1); //display count number
}
}
void display(char num)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
P0=value[num/10]; //send Ten digits
com1=1; //On Q1
delay_display(); //slight delay for display
com1=0; //Off Q1
P0=value[num%10]; //send digit number
com2=1; //On Q2
delay_display(); //slight delay for display
com2=0; //Off Q2
}
void delay_display(void)
{
int i;
for(i=0;i<1000;i++);
}
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 349
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขปรับเปลี่ยนการใช้วงจรนับจากวงจรไทเมอร์ 1 เป็ นวงจรไทเมอร์ 0 แล้วเปลี่ยน
สายพ่วงสวิตช์ไปเข้าที่ขา T0 แล้วสังเกตผล

การทดลองที่ 2 การทดลองเขี ย นโปรแกรมลดค่ า ตัว เลขที่ ก าหนดไว้ (ก าหนดเป็ นเลข 99)โดยรั บ


สัญญาณกระตุน้ การลดค่าจากวงจรเคาน์เตอร์

เขียนลาดับงาน (Algorithm) สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรนับค่า
2. สร้างฟังก์ชนั่ การแสดงผลโดยนาค่าตัวนับลบค่าในรี จิสเตอร์ TL มาแสดงผล
3. เมื่อครบแล้วจึงหยุดนับแล้วปิ ดการทางานของวงจรเคาน์เตอร์
4. หากยังไม่ครบให้กลับไปทางานในลาดับที่ 2

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปรตั้งค่า

กาหนดโหมดที่ TMOD

TL=ตัวแปรตั้งค่า ?
หยุดรับสัญญาณจาก T1

แสดงผลจาก TL1-ตัวแปรตั้งค่า แสดงผลจาก TL1-ตัวแปรตั้งค่า

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<REGX52.H>
void delay_display(void); //delay time for display
void display(char num); //display program
sbit com1=P2^7; //common off digit 1
sbit com2=P2^6; //common off digit 2
char setnum=99; //variable of setting number
350 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

void main(void)
{
com1=0; //Off Q1
com2=0; //Off Q2
TMOD=0x50; //Counter Mode
TR1=1; //Start counter
while(1)
{
if(TL1!=setnum)
{
display(setnum-TL1); //display count number
}
else
{
TR1=0; //Stop counter
display(setnum-TL1); //display count number
}
}
}
void display(char num)
{
code unsigned char value[]={ 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
P0=value[num/10]; //send Ten digits
com1=1; //On Q1
delay_display(); //slight delay for display
com1=0; //Off Q1
P0=value[num%10]; //send digit number
com2=1; //On Q2
delay_display(); //slight delay for display
com2=0; //Off Q2
}
void delay_display(void)
{
int i;
for(i=0;i<1000;i++);
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขตัวเลขโปรแกรมจาก char setnum=99;; เป็ นค่าอื่น (ไม่เกิน 99) แล้วสังเกตผล

7. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 351

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมลดค่าตัวเลขที่กาหนด โดยสามารถตั้งค่าตัวเลขจากสวิตช์ S2,S3 ได้ (การเขียน
โปรแกรมตั้งค่าตัวเลขทาเช่ นเดี ยวกับใบงานที่ 7.13) รั บสัญญาณกระตุ น้ การลดค่าจากวงจรเคาน์เตอร์
(วงจรไทเมอร์ 1) ทาการทดลองผลทั้งการจาลองการทางานด้วยโปรแกรม Proteus และทดลองด้วยวงจร
จริ ง วงจรที่ใช้ทดลองเป็ นดังรู ปที่ 7.14-6

รู ปที่ 7.14-6 วงจรที่ใช้ทาการทดลองในงานที่มอบหมาย


352 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.14


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การเปลี่ยนโหมดให้ทางานเป็ นวงจร 5. จากวงจรในใบงานวงจรแสดงตัวเลข 2 หลัก
เคาน์เตอร์ตอ้ งทาในบิตใด ตัวแปรที่ใช้เก็บตัวเลขควรเป็ นชนิดใด
ก. GATE ก. int
ข. TR1 ข. unsigned int
ค. C/T ค. char
ง. TF1 ง. long
จ. EA จ. unsigned long
2. บิ ต ก าหนดรู ปแบบการท างานของวงจร 6. กระบวนการกาหนดโหมดการท างานวงจร
เคาน์เตอร์ อยูใ่ นรี จิสเตอร์ ใด เคาน์เตอร์ควรใช้ผงั งานรู ปใด
ก. TMOD ก. รู ปสี่ เหลี่ยมผืนผ้า
ข. SMOD ข. รู ปทรงกลม
ค. SCON ค. รู ปสามเหลี่ยม
ง. TIME ง. รู ปสี่ เหลี่ยมขนมเปี ยกปูนแหลมซ้ายขวา
จ. TCON จ. รู ปสี่ เหลี่ยมผืนผ้ามีเส้นคัน่ ซ้ายขวา
3. ขารับสัญญาณภายนอกเข้าวงจรเคาน์เตอร์ 1 7. จากผังงาน “วงจรเคาน์เ ตอร์ 1 เริ่ ม ท างาน”
คือขาใด ต้องใช้คาสั่งใด
ก. T0 ก. TF1=1;
ข. INT0 ข. TR1=0;
ค. INT1 ค. TF1=0;
ง. T1 ง. TR1=1;
จ. ET1 จ. TG1=1;
4. หากต้อ งการวงจรเคาน์ เ ตอร์ 1 ท างานใน 8. จากผัง งาน “วงจรเคาน์ เ ตอร์ 1 หยุ ด รั บ
โหมด 1 ต้องใช้คาสั่งใด สัญญาณ” ต้องใช้คาสั่งใด
ก. TMOD=0x10; ก. TR1=1;
ข. TMOD=0x50; ข. TR1=0;
ค. TMOD=0x20; ค. TF1=1;
ง. TMOD=0x30; ง. TF1=0;
จ. TMOD=0x40; จ. TG1=1;
ใบงานที่ 7.14 การเขียนโปรแกรมนับพัลส์ดว้ ยวงจรเคาน์เตอร์ 353
9. การทดลองด้วยโปรแกรม Proteus ใช้อุปกรณ์ใดส่ งสัญญาณเข้าวงจรเคาน์เตอร์
ก. รี ซิสเตอร์
ข. ทรานซิสเตอร์
ค. สวิตช์
ง. ไดโอด
จ. LED
10. วิธีป้อนสัญญาณเข้าวงจรเคาน์เตอร์ในการทดลองวงจรจริ งทาได้โดยวิธีใด
ก. ลัดสายจากขา P3.5/T1 ไปวงจรสวิตช์
ข. ลัดสายจากขา P3.3/INT1 ไปวงจรสวิตช์
ค. ลัดสายจากขา P3.2/INT0 ไปวงจรสวิตช์
ง. ลัดสายจากขา P3.4/T0 ไปวงจรสวิตช์
จ. ลัดสายจากขา P3.6/WR ไปวงจรสวิตช์

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ง 3. ข 4. จ 5. ก 6. ค 7. ข 8. ค 9. ก 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ค 2. ก 3. ง 4. ข 5. ค 6. จ 7. ง 8. ข 9. ค 10. ก
ใบงานที่ 7.15
การสร้ างวงจรขับมอเตอร์ ไฟฟ้ากระแสตรง
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรขับมอเตอร์ไฟฟ้ากระแสตรงได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรขับมอเตอร์ไฟฟ้ากระแสตรงได้
3. บอกขั้นตอนการประกอบวงจรขับมอเตอร์ไฟฟ้ากระแสตรงได้
4. สร้าง (ประกอบ) วงจรขับมอเตอร์ไฟฟ้ากระแสตรงได้
5. ทดสอบการทางานของวงจรขับมอเตอร์ไฟฟ้ากระแสตรงได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ขนาด 8 ซ.ม. × 12 ซ.ม. 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.15-10 (a) ประกอบด้วย
3.1 ไอซี L298D 1 ตัว 3.4 มอเตอร์ ไฟตรง 6V 1 ตัว
3.2 ไดโอด 1N4001 1 ตัว 3.5 สวิตช์กดติดปล่อยดับ 2 ตัว
3.3 ตัวเก็บประจุ 100 uF 1 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
356 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.15


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซีขบั มอเตอร์ไฟฟ้ากระแสตรงแบบ 5. หากป้ อนแรงดันให้เกิ นพิกดั ของมอเตอร์ อีก
H-Bridge คือเบอร์ใด เล็กน้อยผลที่จะเกิดขึ้นคือสิ่ งใด
ก. LM7805 ก. มอเตอร์หยุดหมุน
ข. AT89S52 ข. ลัดวงจร
ค. L293D ค. มอเตอร์ หมุนตามเข็ม
ง. 74HC573 ง. มอเตอร์หมุนทวนเข็ม
จ. ULN2803 จ. มอเตอร์ หมุนเร็ วขึ้น
2. ไอซี ขบั มอเตอร์ เบอร์ ใดที่สามารถขับกระแส 6. เมื่อต้องการกลับทิศทางการหมุนของมอเตอร์
ได้สูงถึง 4 แอมป์ จะต้องทาอย่างไร
ก. L298 ก. เพิม่ แรงดันให้มากขึ้น
ข. L293D ข. เพิ่มกระแสให้สูงขึ้น
ค. UCN5804 ค. สลับขั้วการป้ อนไฟ
ง. ULN2003 ง. กลับแกนมอเตอร์
จ. ULN2803 จ. พันขดลวดในทิศทางใหม่
3. การทดเฟื องเพื่อให้รอบของมอเตอร์ ต่าลง ผล 7. CCW: Counter clock wise หมายถึงอะไร
ที่ได้อีกอย่างหนึ่งตามมาคือสิ่ งใด ก. มอเตอร์หยุดหมุน
ก. แรงบิดต่าลง ข. ลัดวงจร
ข. แรงบิดสู งขึ้น ค. มอเตอร์หมุนตามเข็ม
ค. แรงดันย้อนกลับสู งขึ้น ง. มอเตอร์หมุนทวนเข็ม
ง. ใช้กระแสมากขึ้น จ. มอเตอร์ หมุนเร็ วขึ้น
จ. ความร้อนสู งขึ้น 8. เหตุใดจึงไม่สามารถใช้ไมโครคอนโทรลเลอร์
4. ในวงจร H-Bridge แบบใช้สวิตช์เมื่อให้สวิตช์ ขับมอเตอร์โดยตรงได้
ทางานทุกตัวผลที่จะเกิดขึ้นคือสิ่ งใด ก. แรงดันต่าเกินไป
ก. มอเตอร์หยุดหมุน ข. กระแสต่าเกินไป
ข. ลัดวงจร ค. มอเตอร์จะเสี ยหาย
ค. มอเตอร์หมุนตามเข็ม ง. ไมโครคอนโทรลเลอร์จะเสี ยหาย
ง. มอเตอร์หมุนทวนเข็ม จ. การควบคุมมอเตอร์ จะซับซ้อนขึ้น
จ. มอเตอร์ หมุนเร็ วขึ้น
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 357
9. การลดสัญญาณรบกวนที่เกิดจากการทางานของมอเตอร์ จะต้องทาอย่างไร
ก. ป้ องแรงดันตามพิกดั
ข. ลดความร้อนของมอเตอร์
ค. ต่อตัวเก็บประจุคร่ อมขั้วไฟมอเตอร์
ง. ต่อตัวเก็บประจุอนุกรมขั้วไฟมอเตอร์
จ. ต่อตัวต้านทานอนุกรมกับมอเตอร์
10. เมื่อมอเตอร์ รับภาระโหลดสู งขึ้นผลที่ตามมาคือข้อใด
ก. มอเตอร์ หยุดหมุน
ข. มอเตอร์ จะดึงกระแสสู งขึ้น
ค. มอเตอร์หมุนเร็ วขึ้น
ง. มอเตอร์ ร้อนขึ้นอย่างรวดเร็ ว
จ. มอเตอร์ เกิดการสั่น
358 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
มอเตอร์ ไฟฟ้ ากระแสตรง (DC motor) เป็ นเครื่ องกลไฟฟ้ าชนิ ดหนึ่ งที่มีหน้าที่เปลี่ ยนพลังงาน
งานไฟฟ้าไปเป็ นพลังงานกล โดยเมื่อได้รับการป้ อนพลังงานไฟฟ้าที่เป็ นไฟฟ้ากระแสตรงจะทาให้แกน
ของมอเตอร์ หมุน แต่เนื่ องจากการทางานของมอเตอร์ ไฟฟ้ากระแสตรงต้องการกระแสไฟฟ้าในปริ มาณ
สู งกว่าความสามารถที่ไมโครคอนโทรลเลอร์ จะจ่ายให้ได้ จึงจาเป็ นที่จะต้องมีวงจรขับมอเตอร์โดยเฉพาะ
เพื่อทาหน้าที่ขบั มอเตอร์ให้ทางานตามต้องการได้

รู ปที่ 7.15-1 ตัวอย่างมอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กแบบปกติ

รู ปที่ 7.15-2 ตัวอย่างมอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กแบบที่มีชุดเฟื องทดรอบ

มอเตอร์ ไฟฟ้ ากระแสตรงขนาดเล็ก จะถูกนามาใช้ในโครงงานที่มีกลไกการเคลื่อนไหวจะมีค่า


แรงดันไฟฟ้าในการทางานในช่วง 1.5 โวลต์ถึง 12 โวลต์

การควบคุมการทางานของมอเตอร์ ไฟฟ้ากระแสตรงนั้นมีความยุง่ ยากน้อย เพียงป้ อนไฟเข้าที่ข้ วั


มอเตอร์ เมื่อต้องการให้มอเตอร์ หมุนและเมื่อต้องการให้มอเตอร์ หยุดหมุนก็เพียงหยุดการป้ อนไฟฟ้า หรื อ
ถ้าหากต้องการให้มอเตอร์ หมุนกลับทิศทางก็สามารถทาได้โดยการสลับขั้วไฟฟ้ าที่จ่ายให้กบั มอเตอร์
เพียงเท่านี้ มอเตอร์ ไฟฟ้ ากระแสตรงก็จะสามารถหมุนกลับทิศทางได้ในทันที สาหรับวงจรขับมอเตอร์ ที่
สามารถควบคุ ม ทิ ศ ทางการหมุ น ได้จ ะประกอบด้วยอุ ปกรณ์ ที่ ถู ก จัด วางที่ มี ล ัก ษณะคล้า ยตัว H ใน
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 359
ภาษาอังกฤษจึงเรี ยกวงจรขับมอเตอร์ ไฟฟ้ ากระแสตรงในลักษณะนี้ ว่าวงจรขับแบบ H-Bridge ลักษณะ
ของวงจรเป็ นดังรู ปที่ 7.15-3

รู ปที่ 7.15-3 วงจรขับแบบ H-Bridge

จากรู ปที่ 7.15-3 เป็ นวงจรขับแบบ H-Bridge ที่ใช้สวิตช์ ในสภาวะแรกเริ่ มที่สวิตช์ทุกตัวยังไม่


ทางานมอเตอร์ จะไม่ได้รับกระแสไฟฟ้าทาให้มอเตอร์ ไม่หมุน เมื่อทาการควบคุมให้สวิตซ์ทางานโดยให้
S1 และ S4 ทางานจะทาให้มอเตอร์ หมุนตามเข็มนาฬิกา (CW: Clock wise) ในขณะเดียวกันหากต้องการ
ให้ม อเตอร์ หมุนกลับ ทิศทางโดยให้ ม อเตอร์ หมุนทวนเข็มนาฬิ กา (CCW: Counter clock wise) ก็เพีย ง
สลับการทางานของสวิตช์โดยให้ S1, S4 ไม่ทางานและให้สวิตช์ S2, S3 ทางานแทน การควบคุมดังกล่าว
จะมีลกั ษณะดังรู ปที่ 17.15-4

รู ปที่ 7.15-4 การควบคุมการหมุนของมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge

ตารางที่ 7.15-1 การควบคุมมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge แบบใช้สวิตช์


สถานะของสวิตช์
สถานะของมอเตอร์ไฟฟ้ากระแสตรง
S1 S2 S3 S4
OFF OFF OFF OFF ไม่หมุน
ON OFF OFF ON หมุนตามเข็มนาฬิกา (CW)
OFF ON ON OFF หมุนทวนเข็มนาฬิกา (CCW)
360 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
วงจรขับมอเตอร์ ที่เป็ นลักษณะ H-Bridge สามารถเปลี่ ยนจากการใช้สวิตช์มาเป็ นรี เลย์ โดยใช้
รี เลย์ที่เป็ นชนิ ด SPDT (Single pole double throw) ดังรู ปที่ 7.15-5 และการควบคุ มทิศทางการหมุนเป็ น
ดังรู ป 7.15-6

รู ปที่ 7.15-5 วงจรขับมอเตอร์ แบบ H-Bridge ที่ใช้รีเลย์

รู ปที่ 7.15-6 การควบคุมการหมุนของมอเตอร์ดว้ ยวงจรขับแบบ H-Bridge ที่ใช้รีเลย์

สาหรับการใช้งานจริ งมีไอซี ที่ถูกออกแบบมาเพื่อการนี้ โดยเฉพาะคือมีคุณสมบัติที่เป็ นวงจรขับ


แบบ H-Bridge ในกรณี ที่ใช้กบั มอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กที่ใช้กระแสไม่เกิน 600 มิลลิแอมป์ จะ
ใช้ไอซี เบอร์ L293D แต่หากมอเตอร์ ไฟฟ้ ากระแสตรงใช้กระแสสู งเกิ นค่าดังกล่ าวแต่ไม่เกิ น 4 แอมป์
จะต้องใช้ไอซีเบอร์ L298 ในใบงานนี้ใช้มอเตอร์ ไฟฟ้ากระแสตรงขนาดเล็กซึ่ งจะใช้ไอซี เบอร์ L293D ใน
การทดลองโดยโครงสร้างของไอซีเป็ นดังรู ปที่ 7.15-7

รู ปที่ 7.15-7 โครงสร้างไอซีขบั มอเตอร์กระแสตรงขนาดเล็กเบอร์ L293D


ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 361

6. การดาเนินการสร้ างวงจร
การสร้ า งวงจรขับ มอเตอร์ ไ ฟฟ้ ากระแสตรงในใบงานนี้ เป็ นการสร้ างวงจรต่ อพ่วงที่ ต้องใช้
แผ่นวงจรพิมพ์เอนกประสงค์แผ่นใหม่ ซึ่ งวงจรนี้ ประกอบด้วยอุปกรณ์หลัก 4 รายการประกอบด้วยไอซี
L293D ไดโอด 1N4001 ตัวเก็บประจุ 100 uF และสวิตช์ วงจรสมบูรณ์เป็ นดังรู ปที่ 7.15-8

รู ปที่ 7.15-8 วงจรสมบรู ณ์สาหรับการทดลอง

วงจรขับมอเตอร์ไฟฟ้ากระแสตรงใช้แผ่นวงจรพิมพ์คนละแผ่นกับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่


7.15-9

รู ปที่ 7.15-9 ส่ วนของวงจรหลักและวงจรขับมอเตอร์ไฟฟ้ากระแสตรงที่แยกคนละแผ่นวงจรพิมพ์


362 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ให้นกั ศึกษาประกอบวงจรขับมอเตอร์ ไฟฟ้ากระแสตรงลงในแผ่นวงจรเอนกประสงค์แผ่นใหม่
โดยให้วางแผนการจัดวางให้คอนเน็คเตอร์ ตรงกับคอนเน็คเตอร์ พอร์ ต 0 ของวงจรหลักเพื่อสะดวกในการ
เชื่ อมต่อและให้เว้นพื้นที่ไว้สาหรั บใบงานถัดไปที่จะต้องมีการใช้งานของพอร์ ต 2 แนวทางการจัดวาง
ตลอดการบัดกรี วงจรขับมอเตอร์ไฟฟ้ากระแสตรงเป็ นดังรู ปที่ 7.15-10

รู ปที่ 7.15-10 (a) วงจรขับมอเตอร์ไฟฟ้ากระแสตรง (b) แนวทางจัดวาง

การทางานของวงจร
วงจรรู ปที่ 7.15-10 (a) เป็ นวงจรต่อพ่วงสาหรับวงจรขับมอเตอร์ ไฟฟ้ ากระแสตรง ซึ่ งวงจรนี้ ใช้
ไอซี ขบั สาเร็ จรู ปเบอร์ L293D สามารถขับมอเตอร์ ขนาดเล็กได้ไม่เกิน 1 แอมป์ และใช้ไดโอด 1N4001
ต่อผ่านเข้าขา VS เพื่อเป็ นไฟเลี้ยงมอเตอร์ ไฟฟ้ ากระแสตรงและป้ องกันสัญญาณรบกวนที่เกิดขึ้นจากการ
ทางานของมอเตอร์ โดยการใช้ตวั เก็บประจุ 100 uF ต่อเข้าที่ขา VS

การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยเว้นพื้นที่ไว้สาหรับต่อใบงานถัดไป
2. วางคอนเน็คเตอร์ ขอแผ่นใหม่ โดยให้ตรงกับตาแหน่งคอนเน็คเตอร์ พอร์ตของวงจรหลัก
3. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.15-10
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 363

7. การทดสอบการทางานของวงจร
การทดสอบวงจรขับ มอเตอร์ ไฟฟ้ ากระแสตรงซึ่ งเป็ นวงจรเอาต์พุตพอร์ ตให้นักศึกษาทาการ
ทดสอบการทางานของวงจรใน 2 ขั้นตอน
ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ดแวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เฉพาะส่ วนของไฟเลี้ยง 5 โวลต์และ 0 โวลต์ดงั รู ปที่
7.15-11
7805
103

L298D

AT89S52

รู ปที่ 7.15-11 การต่อเชื่อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ดแวร์

2. ทาการทดสอบการทางานของวงจรขับมอเตอร์ ไฟฟ้ากระแสตรง โดยใช้สายไฟหมายเลข 1


และ 2 ป้อนลอจิกตามตารางที่ 7.15-1

ตารางที่ 7.15-1 ตารางตรวจสอบการทางานของวงจรขับมอเตอร์ไฟฟ้ากระแสตรง


ค่าลอจิกทดสอบ
ผลที่ควรได้
สายไฟ 1 สายไฟ 2
0 0 มอเตอร์ ไม่หมุน
0 1 มอเตอร์หมุน
1 0 มอเตอร์หมุนกลับทาง
1 1 มอเตอร์ ไม่หมุน
364 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
หากผลของการทดลองไม่ตรงกับค่าที่ ควรจะได้ ให้ทาการตรวจสอบและแก้ไขวงจร
ใหม่จนกว่าผลการทดสอบตรงกับค่าที่ควรจะได้
ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมวงจรขับมอเตอร์ไฟฟ้ากระแสตรงกับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.15-12

7805
103

L298D
AT89S52

รู ปที่ 7.15-12 ต่อเชื่ อมวงจรขับมอเตอร์ไฟฟ้ากระแสตรงกับวงจรไมโครคอนโทรลเลอร์

2. เขียนโปรแกรมเพื่อทดสอบการทางานของพอร์ตโดยใช้โปรแกรม Keil uVision ดังนี้


#include<REGX52.H>
void delay(int n); //declare delay program
sbit EN=P0^0; //Enable connect to P0.0
sbit A1=P0^1; //1A and 4A connect to P0.1
sbit A2=P0^2; //2A and 3A connect to P0.2
void main(void)
{
EN=1;
while(1)
{
A1=0;
A2=0;
delay(5000);
A1=0;
A2=1;
delay(5000);
A1=1;
A2=0;
delay(5000);
A1=1;
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 365
A2=1;
delay(5000);
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{
}
}
}
3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX file)
4. นาไฟล์ภาษาเครื่ องที่ได้อดั ลงชิพซีพียู
5. สังเกตผลที่ได้หากวงจรทางานตามปกติ มอเตอร์ จะนิ่งก่อนหลังจากนั้นจะเริ่ มหมุนและหมุน
กลับทางหลังจากนั้นจะหยุดหมุน หากการหมุนผิดไปจากที่กล่าวให้ดาเนินการแก้ไข

8. สรุปผลการปฏิบัติงาน
366 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.15


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซี ข ับ มอเตอร์ ไ ฟฟ้ า กระแสตรงแบบ H- 5. เมื่อต้องการกลับทิศทางการหมุนของมอเตอร์
Bridge คือเบอร์ใด จะต้องทาอย่างไร
ก. L293D ก. เพิ่มกระแสให้สูงขึ้น
ข. 74HC573 ข. สลับขั้วการป้ อนไฟ
ค. LM7805 ค. เพิม่ แรงดันให้มากขึ้น
ง. AT89S52 ง. กลับแกนมอเตอร์
จ. ULN2803 จ. พันขดลวดในทิศทางใหม่
2. ไอซี ขบั มอเตอร์ เบอร์ ใดที่สามารถขับกระแส 6. หากป้ อนแรงดันให้เกิ นพิกดั ของมอเตอร์ อีก
ได้สูงถึง 4 แอมป์ เล็กน้อยผลที่จะเกิดขึ้นคือสิ่ งใด
ก. UCN5804 ก. ลัดวงจร
ข. ULN2003 ข. มอเตอร์หมุนตามเข็ม
ค. ULN2803 ค. มอเตอร์หมุนทวนเข็ม
ง. L298 ง. มอเตอร์ หมุนเร็ วขึ้น
จ. L293D จ. มอเตอร์หยุดหมุน
3. การทดเฟื องเพื่อให้รอบของมอเตอร์ ต่าลง ผล 7. CCW: Counter clock wise หมายถึงอะไร
ที่ได้อีกอย่างหนึ่งตามมาคือสิ่ งใด ก. มอเตอร์หมุนตามเข็ม
ก. แรงดันย้อนกลับสู งขึ้น ข. มอเตอร์หมุนทวนเข็ม
ข. ใช้กระแสมากขึ้น ค. มอเตอร์ หมุนเร็ วขึ้น
ค. แรงบิดสู งขึ้น ง. มอเตอร์หยุดหมุน
ง. แรงบิดต่าลง จ. ลัดวงจร
จ. ความร้อนสู งขึ้น 8. เหตุใดจึงไม่สามารถใช้ไมโครคอนโทรลเลอร์
4. ในวงจร H-Bridge แบบใช้สวิตช์เมื่อให้สวิตช์ ขับมอเตอร์โดยตรงได้
ทางานทุกตัวผลที่จะเกิดขึ้นคือสิ่ งใด ก. ไมโครคอนโทรลเลอร์จะเสี ยหาย
ก. มอเตอร์หมุนตามเข็ม ข. การควบคุมมอเตอร์ จะซับซ้อนขึ้น
ข. มอเตอร์หมุนทวนเข็ม ค. แรงดันต่าเกินไป
ค. มอเตอร์ หมุนเร็ วขึ้น ง. กระแสต่าเกินไป
ง. มอเตอร์หยุดหมุน จ. มอเตอร์จะเสี ยหาย
จ. ลัดวงจร
ใบงานที่ 7.15 การสร้างวงจรขับมอเตอร์ไฟฟ้ากระแสตรง 367
9. การลดสัญญาณรบกวนที่เกิดจากการทางานของมอเตอร์ จะต้องทาอย่างไร
ก. ต่อตัวเก็บประจุคร่ อมขั้วไฟมอเตอร์
ข. ต่อตัวเก็บประจุอนุกรมขั้วไฟมอเตอร์
ค. ต่อตัวต้านทานอนุกรมกับมอเตอร์
ง. ป้ องแรงดันตามพิกดั
จ. ลดความร้อนของมอเตอร์
10. เมื่อมอเตอร์ รับภาระโหลดสู งขึ้นผลที่ตามมาคือข้อใด
ก. มอเตอร์หยุดหมุน
ข. มอเตอร์ หมุนเร็ วขึ้น
ค. มอเตอร์ เกิดการสั่น
ง. มอเตอร์ ร้อนขึ้นอย่างรวดเร็ ว
จ. มอเตอร์ จะดึงกระแสสู งขึ้น

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ก 3. ข 4. ข 5. จ 6. ค 7. ง 8. ข 9. ค 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ง 3. ค 4. จ 5. ข 6. ง 7. ข 8. ง 9. ก 10. จ
ใบงานที่ 7.16
การเขียนโปรแกรมควบคุมมอเตอร์ ไฟฟ้ ากระแสตรง
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.15 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
370 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.16


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การเพิ่มขีดความสามารถในการขับมอเตอร์ 5. ขณะที่มอเตอร์ ยงั หมุนด้วยแรงเฉื่ อยไม่ควร
ของ ICL 293D ทาโดยวิธีใด สั่งกลับทิศทางเพราะเหตุใด
ก. เพิ่มค่าแรงดัน VS ก. จะทาให้มอเตอร์มีความร้อนสู ง
ข. อนุกรมชุ ดขับเข้าด้วยกัน ข. จะทาให้มอเตอร์ เกิดการสั่น
ค. ขนานชุดขับเข้าด้วยกัน ค. จะทาให้ขดลวดของมอเตอร์ เกิดการ
ง. เพิ่มค่าตัวเก็บประจุที่ขา VS ลัดวงจร
จ. ติดแผ่นระบายความร้อน ง. จะทาให้เกิดสนามแม่เหล็กรบกวนวงจร
2. เมื่อขา EN รับลอจิก 0 มอเตอร์ ที่ต่อไว้จะเป็ น จ. จะทาให้มอเตอร์ ดึงกระแสสู งกว่าปกติ
อย่างไร 6. หากส่ งค่าลอจิกเดียวกันเข้าที่ขา A และ B
ก. ไม่หมุน ผลจะเป็ นอย่าง (EN = 1)
ข. หมุนตามเข็มนาฬิกา ก. มอเตอร์หมุนตามเข็มนาฬิกา
ค. หมุนทวนเข็มนาฬิกา ข. มอเตอร์หมุนทวนเข็มนาฬิกา
ง. หมุนช้าๆ ค. มอเตอร์ ไม่หมุน
จ. หมุนอย่างรวดเร็ ว ง. สภาวะคงค่าเดิมก่อนหน้า
3. การควบคุมความเร็ วของมอเตอร์ไฟฟ้า จ. วงจรขับเสี ยหาย
กระแสตรงนิยมควบคุมแบบใด 7. การควบคุมความเร็ วมอเตอร์ แบบ PWM ผล
ก. เพิ่ม/ลด ค่าแรงดันแหล่งจ่าย ที่ได้จะเป็ นอย่างเมื่อเทียบกับการต่อตรง
ข. เพิ่ม/ลด กระแสของแรงจ่าย ก. ปรับความเร็ วได้สูงกว่าแบบต่อตรง
ค. PCM: Pulse code modulation ข. ปรับความเร็ วได้ต่ากว่าแบบต่อตรง
ง. PWM: Pulse width modulation ค. ความเร็ วคงที่กว่าแบบต่อตรง
จ. PPM: Pulse position modulation ง. สัญญาณรบกวนน้อยกว่าแบบต่อตรง
4. หากต้องการใช้คาว่า EN แทนขา enable ที่ต่อ จ. วงจรขับเสี ยหายน้อยกว่าต่อตรง
ไว้ที่บิต P2.7 ต้องใช้คาสั่งใด 8. การตรวจสอบสวิตช์วา่ ถูกกดหรื อไม่ เพื่อเป็ น
ก. sbit EN = P2.7; เงื่อนไขในการควบคุมมอเตอร์จะต้องใช้
ข. sbit EN = P2^7; ฟังก์ชนั่ ใด
ค. sbit EN (P2.7); ก. if
ง. sbit EN P2^7; ข. for
จ. sbit EN = P2(7); ค. while (1)
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 371
ง. do
จ. else
9. หากต้องการให้มอเตอร์หยุดหมุนเมื่อ EN, A, B ต่ออยูก่ บั Bit D2, D1, D0 ของพอร์ต 2 จะต้องใช้
คาสั่งใด
ก. P2 = 0x04;
ข. P2 = 0x05;
ค. P2 = 0x06;
ง. P2 = 0x15;
จ. P2 = 0x16;
10. เมื่อต้องการให้มอเตอร์ ทางานซ้ า ๆ รู ปแบบเดิมตามจานวนที่ตอ้ งการจะต้องใช้ฟังก์ชนั่ ใด
ก. while
ข. for
ค. if
ง. do
จ. switch
372 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
ใบงานที่ 7.15 ที่ผ่านมาเป็ นใบงานที่สร้ างวงจรต่อพ่วงที่ใช้ขบั มอเตอร์ ไฟฟ้ ากระแสตรงโดยใช้
ไอซี เบอร์ L293D ซึ่ งไอซี เบอร์ น้ ี สามารถขับมอเตอร์ ที่ใช้กระแสต่อเนื่ องได้ไม่เกิ น 600 มิลลิแอมป์ และ
กระแสสู งสุ ดชัว่ ขณะ (Peak) ไม่เกิน 1.2 แอมป์ แต่ในวงจรที่ใช้ในใบงานได้ถูกออกแบบให้ขนานชุ ดขับ
เข้าด้วยกันทาให้วงจรสามารถขับมอเตอร์ ที่กินกระแสต่อเนื่ องได้สูงขึ้นไม่เกิน 1.2 แอมป์ การควบคุมการ
ทางานมีขาที่ใช้ในการควบคุม 3 ขาได้แก่ขา EN, A, B ดังรู ปที่ 7.16-1

รู ปที่ 7.16-1 วงจรขับมอเตอร์ไฟฟ้ากระแสตรงที่ใช้ไอซี L293

จากวงจรในรู ปที่ 7.16-1 ลอจิกที่ใช้ในการควบการทางานของของไอซีเพื่อให้มอเตอร์ ทางาน


หรื อหยุดทางานเป็ นไปตามตารางที่ 7.16-1

ตารางที่ 7.16-1 ลอจิกที่ใช้การควบคุมทางานของไอซีขบั มอเตอร์ไฟฟ้ากระแสตรง


ค่าลอจิกที่ขาควบคุม
ผลที่เกิดขึ้นที่มอเตอร์
EN A B
0 X X มอเตอร์ ไม่หมุน
1 0 0 มอเตอร์ ไม่หมุน
1 0 1 มอเตอร์หมุน
1 1 0 มอเตอร์หมุนกลับทาง
1 1 1 มอเตอร์ ไม่หมุน
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 373
ในการควบคุมความเร็ วมอเตอร์ ไฟฟ้ ากระแสตรงจะใช้การควบคุมปริ มาณการไหลของกระแส
ผ่านตัวมอเตอร์ โดยใช้เทคนิ คการผสมคลื่นทางความกว้างของพัลซ์เข้าที่ขา EA ที่เรี ยกเทคนิ คนี้วา่ PWM
(Pulse width modulation) ตัวอย่างวงจร H-Bridge รับไฟเลี้ยงสาหรับมอเตอร์ เท่ากับ 12 โวลต์ผลที่ได้จาก
การใช้ PWM ในการควมคุมความเร็ วเป็ นดังรู ปที่ 7.16-2

รู ปที่ 7.16-2 ผลที่ได้จากการใช้ PWM ในการควมคุมความเร็ วมอเตอร์

6. การดาเนินการทดลอง
วงจรสมบู รณ์ ที่ ใ ช้ท ดลองใบงานการเขี ย นโปรแกรมควบคุ ม การท างานของมอเตอร์ ไ ฟฟ้ า
กระแสตรง ดังรู ปที่ 7.14-2

รู ปที่ 7.16-3 วงจรสมบรู ณ์สาหรับการทดลอง


374 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์
อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีขบั มอเตอร์แบบ H-Bridge L293D
3. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
4. มอเตอร์ไฟฟ้ากระแสตรง MOTOR-DC
5. ไดโอด 1N4001
6. สวิตช์กดติดปล่อยดับ BUTTON

รู ปที่ 7.16-4 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus

การทดลองการทางานด้วยวงจรจริ ง จะใช้แผ่นวงจรจริ ง 2 แผ่นประกอบด้วยวงจรหลักคือวงจร


ไมโครคอนโทรลเลอร์ และวงจรต่อพ่วงที่ในใบงานนี้ใช้แผ่นวงจรต่อพ่วงที่สร้างขึ้นในใบงานที่ 7.15 คือ
วงจรขับมอเตอร์ ไฟฟ้ากระแสตรง การทดลองให้ ทาการเชื่ อมต่อระหว่างแผ่นวงจรหลักกับแผ่นวงจรขับ
มอเตอร์ ผา่ นพอร์ ต 0 และพอร์ต 2 ดังรู ปที่ 7.16-5
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 375

7805
103

L298D
AT89S52

รู ปที่ 7.16-5 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการบังคับให้มอเตอร์ หมุน ตามเข็มและทวนเข็มนาฬิ กา อย่างละ 5 วินาที


สลับกันไป ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรที่ตอ้ งการใช้งาน
2. ส่ งค่าลอจิกให้มอเตอร์ หมุนตามเข็ม
3. หน่วงเวลา 5 วินาที
4. ส่ งค่าลอจิกให้มอเตอร์ หมุนทวนเข็ม
5. หน่วงเวลา 5 วินาที
6. กลับไปทางานในลาดับที่ 2
376 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

หมุนมอเตอร์ ตามเข็ม

หน่วงเวลา 5 วินาที

หมุนมอเตอร์ทวนเข็ม

หน่วงเวลา 5 วินาที

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม Keil


µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
void delay(int t);
sbit EN=P0^0;
sbit cw=P0^1;
sbit ccw=P0^2;
void main (void)
{
EN=1;
TMOD=0x10;
while(1)
{ cw=0;
delay(5000); // 5000=5 second delay
cw=1;
ccw=0;
delay(5000);
ccw=1;
}
}
void delay(int t)
{
int i;
for(i=0;i<t;i++)
{
TH1=0xFC; //set for 1 milisecond
TL1=0x66;
TF1=0;
TR1=1;
while(TF1==0);
TR1=0;
}
}
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 377
ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขปรับเปลี่ยนในฟังก์ชนั่ หน่วงเวลา (delay) แล้วสังเกตผล

การทดลองที่ 2 การทดลองการควบคุมมอเตอร์ ที่มีการตรวจจับเซนเซอร์ 2 ตัว (ใช้สวิตช์กดติดปล่อยดับ


เป็ นตัวเซนเซอร์ ) โดยมีเงื่อนไขดังนี้
- ถ้าไม่ได้รับสัญญาณเซนเซอร์ (สวิตช์ไม่ถูกกด) ให้มอเตอร์ หยุดหมุน
- ถ้าได้รับสัญญาณเซนเซอร์จากตัวที่ 1 ให้มอเตอร์หมุนตามเข็มนาฬิกา
- ถ้าได้รับสัญญาณเซนเซอร์จากตัวที่ 2 ให้มอเตอร์ หมุนทวนเข็มนาฬิกา

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรที่ตอ้ งการใช้งาน
2. ส่ งค่าลอจิกให้มอเตอร์ หยุดหมุน
3. ตรวจสอบเซนเซอร์ 1 ถ้าได้รับการกดให้มอเตอร์ หมุนตามเข็มนาฬิกา
4. ตรวจสอบเซนเซอร์ 2 ถ้าได้รับการกดให้มอเตอร์ หมุนทวนเข็มนาฬิกา
5. กลับไปทางานในลาดับที่ 3

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปรตั้งค่า

ส่ งลอจิกมอเตอร์ หยุดหมุน

เซนเซอร์ 1 ถูกกด ? มอเตอร์หมุนตามเข็ม

เซนเซอร์ 2 ถูกกด ? มอเตอร์หมุนตามเข็ม

ส่ งลอจิกมอเตอร์ หยุดหมุน
378 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
sbit EN=P0^0;
sbit cw=P0^1;
sbit ccw=P0^2;
sbit sensor1=P2^0;
sbit sensor2=P2^1;
void main (void)
{
EN=1;
cw=0;
ccw=0;
while(1)
{
if(sensor1==0)
{
cw=1;
}
else if(sensor2==0)
{
ccw=1;
}
else
{
cw=0;
ccw=0;
}
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองการส่ งสัญญาณพัลซ์เพื่อลดความเร็ วโดดส่ งให้กบั ขา EN ของวงจรขับมอเตอร์ แล้ว
สังเกตผล

7. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 379

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมปรับความเร็ วมอเตอร์ โดยสวิตช์ต้ งั สองตัวเป็ นตัวควบคุมความเร็ วดังนี้
- สวิตช์ S1 เมื่อถูกกดความเร็ วมอเตอร์ จะเพิ่มขึ้น
- สวิตช์ S2 เมื่อถูกกดความเร็ วมอเตอร์ จะลดขึ้น
ทาการทดลองผลทั้งการจาลองการทางานด้วยโปรแกรม Proteus และทดลองด้วยวงจรจริ ง วงจร
ที่ใช้ทดลองเป็ นดังรู ปที่ 7.16-6

รู ปที่ 7.16-6 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย


380 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.16


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การเพิ่มขีดความสามารถในการขับมอเตอร์ 5. ขณะที่มอเตอร์ยงั หมุนด้วยแรงเฉื่ อยไม่ควรสั่ง
ของ ICL 293D ทาโดยวิธีใด กลับทิศทางเพราะเหตุใด
ก. เพิ่มค่าแรงดัน VS ก. จะทาให้มอเตอร์ เกิดการสั่น
ข. ขนานชุดขับเข้าด้วยกัน ข. จะทาให้มอเตอร์มีความร้อนสู ง
ค. อนุกรมชุ ดขับเข้าด้วยกัน ค. จะทาให้มอเตอร์ ดึงกระแสสู งกว่าปกติ
ง. ติดแผ่นระบายความร้อน ง. จะทาให้ขดลวดของมอเตอร์ เกิดการ
จ. เพิ่มค่าตัวเก็บประจุที่ขา VS ลัดวงจร
2. เมื่อขา EN รับลอจิก 0 มอเตอร์ ที่ต่อไว้จะเป็ น จ. จะทาให้เกิดสนามแม่เหล็กรบกวนวงจร
อย่างไร 6. หากส่ งค่าลอจิกเดียวกันเข้าที่ขา A และ B ผล
ก. ไม่หมุน จะเป็ นอย่าง (EN = 1)
ข. หมุนตามเข็มนาฬิกา ก. มอเตอร์ ไม่หมุน
ค. หมุนทวนเข็มนาฬิกา ข. มอเตอร์หมุนตามเข็มนาฬิกา
ง. หมุนช้าๆ ค. มอเตอร์หมุนทวนเข็มนาฬิกา
จ. หมุนอย่างรวดเร็ ว ง. สภาวะคงค่าเดิมก่อนหน้า
3. การควบคุมความเร็ วของมอเตอร์ไฟฟ้า จ. วงจรขับเสี ยหาย
กระแสตรงนิยมควบคุมแบบใด 7. การควบคุมความเร็ วมอเตอร์ แบบ PWM ผลที่
ก. PCM: Pulse code modulation ได้จะเป็ นอย่างเมื่อเทียบกับการต่อตรง
ข. PWM: Pulse width modulation ก. ความเร็ วคงที่กว่าแบบต่อตรง
ค. PPM: Pulse position modulation ข. สัญญาณรบกวนน้อยกว่าแบบต่อตรง
ง. เพิ่ม/ลด ค่าแรงดันแหล่งจ่าย ค. วงจรขับเสี ยหายน้อยกว่าต่อตรง
จ. เพิ่ม/ลด กระแสของแรงจ่าย ง. ปรับความเร็ วได้ต่ากว่าแบบต่อตรง
4. หากต้องการใช้ EN แทนขา enable ที่ต่อไว้ที่ จ. ปรับความเร็ วได้สูงกว่าแบบต่อตรง
บิต P2.7 ต้องใช้คาสั่งใด 8. การตรวจสอบสวิตช์วา่ ถูกกดหรื อไม่ เพื่อเป็ น
ก. sbit EN P2^7; เงื่อนไขในการควบคุมมอเตอร์จะต้องใช้
ข. sbit EN = P2(7); ฟังก์ชนั่ ใด
ค. sbit EN = P2.7; ก. for
ง. sbit EN = P2^7; ข. if
จ. sbit EN (P2.7); ค. while (1)
ใบงานที่ 7.16 การเขียนโปรแกรมควบคุมมอเตอร์ไฟฟ้ากระแสตรง 381
ง. do
จ. else
9. หากต้องการให้มอเตอร์หยุดหมุนเมื่อ EN, A, B ต่ออยูก่ บั Bit D2, D1, D0 ของพอร์ต 2 จะต้องใช้
คาสั่งใด
ก. P2 = 0x01;
ข. P2 = 0x02;
ค. P2 = 0x03;
ง. P2 = 0x04;
จ. P2 = 0x05;
10. เมื่อต้องการให้มอเตอร์ ทางานซ้ า ๆ รู ปแบบเดิมตามจานวนที่ตอ้ งการจะต้องใช้ฟังก์ชนั่ ใด
ก. for
ข. while
ค. do
ง. switch
จ. if

เฉลยแบบทดสอบก่อนเรี ยน
1. ค 2. ก 3. ง 4. ข 5. จ 6. ค 7. ข 8. ก 9. ก 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ก 3. ข 4. ง 5. ค 6. ก 7. ง 8. ข 9. ง 10. ก
ใบงานที่ 7.17
การสร้ างวงจรขับสเต็ปเปอร์ มอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรขับสเต็ปเปอร์มอเตอร์
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรขับสเต็ปเปอร์มอเตอร์ ได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรขับสเต็ปเปอร์มอเตอร์ ได้
3. บอกขั้นตอนการประกอบวงจรขับสเต็ปเปอร์มอเตอร์ ได้
4. สร้าง (ประกอบ) วงจรขับสเต็ปเปอร์มอเตอร์ ได้
5. ทดสอบการทางานของวงจรขับสเต็ปเปอร์มอเตอร์ ได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.15 (วงจรต่อพ่วง) 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.17-10 (a) ประกอบด้วย
3.1 ไอซี ULN2803 1 ตัว
3.2 สเต็ปเปอร์มอเตอร์ 1 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรขับสเต็ปเปอร์มอเตอร์
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
384 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.17


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซีสาหรับขับสเต็ปเปอร์มอเตอร์ในใบงาน 5. สายไฟร่ วมกลางของสเต็ปเปอร์ มอเตอร์
ใช้เบอร์ใด จะต้องต่อกับจุดใด
ก. ULN2003 ก. กราวด์ไอซี
ข. ULN2803 ข. ไฟเลี้ยงไอซี
ค. L293 ค. ไฟเลี้ยงวงจร
ง. L298D ง. ขาพอร์ ตไอซีขบั
จ. LM7805 จ. ขาร่ วมไอซี ขบั
2. ข้อใดเป็ นสเต็ปเปอร์ มอเตอร์ แบบมีสายต่อ 6 6. การเรี ยงเฟสของสายมอเตอร์ ที่ถูกต้องผลจะ
สาย เป็ นเช่นไร
ก. Unipolar ก. มอเตอร์ หมุนอย่างต่อเนื่ อง
ข. Bipolar ข. มอเตอร์จะหมุนเพียงรอบเดียว
ค. Tri polar ค. มอเตอร์จะหมุนสลับไปมา
ง. Double polar ง. มอเตอร์ จะหมุนและหยุดสลับกัน
จ. Single polar จ. มอเตอร์จะขยับครั้งละหนึ่งเฟสไปด้านเดียวกัน
3. การใส่ ไดโอดคร่ อมขดลวดมอเตอร์ เพื่อ 7. วงจรในใบงานหากไม่ต่อขาร่ วมไดโอดเข้ากับ
ประโยชน์ตามข้อใด ไฟเลี้ยงของมอเตอร์ จะมีผลอย่างไร
ก. ป้ องกัน Over current ก. ทาให้มอเตอร์เสี ยหายได้
ข. ป้ องกัน Forward EMF ข. ทาให้ไอซีขบั เสี ยหายได้
ค. ป้ องกัน Back EMF ค. ทาให้ไมโครคอนโทรลเลอร์ เสี ยหายได้
ง. ป้ องกัน Over temp ง. ทาให้วงจรจ่ายไฟเสี ยหาย
จ. ป้ องกันการวัดลงจร จ. ทาให้ไดโอดเสี ยหายได้
4. ไอซีขบั มอเตอร์ตามใบงานมีการจัดวงจร 8. การทดสอบการทางานของวงจรขับสเต็ปเปอร์
ภายในเป็ นแบบใด มอเตอร์ จะต้องทาอย่างไร
ก. Fix bias ก. ป้อนกราวด์ที่อินพุตแบบเรี ยงเฟส
ข. Emitter follower ข. ป้ อนไฟเลี้ยงที่อินพุตแบบเรี ยงเฟส
ค. Voltage stabilizer ค. ป้อนกราวด์ที่อินพุตแบบสลับเฟส
ง. Darlington ง. ป้ อนไฟเลี้ยงที่อินพุตแบบสลับเฟส
จ. Feed back controlled จ. ป้ อนไฟเลี้ยงและกราวด์สลับกัน
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 385
9. หากป้ อนไฟเลี้ยงเข้าขดลวดมอเตอร์ โดยค้างไว้เป็ นเวลานานผลจะเป็ นเช่นไร
ก. มอเตอร์เสื่ อม
ข. กระแสจะค่อยสู งขึ้น
ค. แรงดันตกคร่ อมจะค่อย ๆ ต่าลง
ง. มุมต่อสเต็ปจะเปลี่ยนไป
จ. ขดลวดจะเสี ยหายได้
10. หากต้องการใช้ไอซี ULN2803 ให้สามารถขับกระแสได้สูงขึ้นจะต้องทาอย่างไร
ก. เพิ่มค่าแหล่งจ่ายกระแสไฟฟ้า
ข. อนุกรมชุดขับกระแส
ค. ขนานชุดขับกระแส
ง. ติดแผ่นระบายความร้อน
จ. ส่ งสัญญาณแบบ PWM
386 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
สเต็ปเปอร์ มอเตอร์ หรื อที่บางคนเรี ยกว่าสเต็ปปิ้ งมอเตอร์ เป็ นมอเตอร์ ที่ทางานโดยอาศัยพลังงาน
จากไฟฟ้ ากระแสตรงเช่นเดียวกับมอเตอร์ กระแสตรง แต่มีความความแตกต่างจากมอเตอร์ กระแสตรงที่
เมื่ อ ป้ อ นไฟให้ ก ับ สเต็ ป เปอร์ ม อเตอร์ จ ะขยับ เพี ย งเล็ ก น้อ ยเพื่ อ เข้า สเต็ ป ในขณะที่ ม อเตอร์ ไ ฟฟ้ า
กระแสตรงทัว่ ไปจะหมุนตราบที่ยงั มีพลังงานจ่ายให้แก่ตวั มัน ทั้งนี้ เป็ นเพราะโครงสร้างของสเต็ปเปอร์
มอเตอร์ นนั่ เอง โดย สเต็ปเปอร์ มอเตอร์ มีดว้ ยกัน 2 แบบคือ
1. Bipolar เป็ นสเต็ปเปอร์มอเตอร์ที่มีขดลวด 2 ขดมีสายไฟให้ต่อใช้งาน 4 เส้นดังรู ปที่ 7.17-1 (a)
2. Unipolar เป็ นสเต็ปเปอร์มอเตอร์ที่มีขดลวด 4 ขด (2 ขดแบบมีแท็ปกลาง) โดยมี 2 แบบ
2.1 แบบมีสายไฟให้ต่อใช้งาน 5 เส้น ดังรู ปที่ 7.17-1 (b)
2.2 แบบมีสายไฟให้ต่อใช้งาน 6 เส้น ดังรู ปที่ 7.17-1 (c)

รู ปที่ 7.17-1 โครงสร้างสเต็ปเปอร์ Bipolar และ Unipolar

ใบงานนี้ เลือกใช้สเต็ปเปอร์ มอเตอร์ แบบ Unipolar ซึ่ งมี ขดลวดอยู่ภายในจานวน 4 ขด (ที่ จริ ง
เป็ น 2 ขดที่มีจุดแท็ปกลาง) โดยจานวนรอบของขดลวดทั้ง 4 ขดจะมีค่าความต้านทานเท่ากัน ดังนั้นก่อน
ใช้งานต้องท าการหาตาแหน่ ง สายที่ ใ ช้งานว่า เป็ นสายตาแหน่ ง ใดของขดลวด ค่ าความต้า นทานของ
ขดลวดของสเต็ปเปอร์ มอเตอร์ ที่มีสายต่อแบบ 5 เส้นเมื่อวัดค่าความต้านทานของสายทุกเส้นจะสามารถ
อ่านค่าได้ทุกเส้น นั้นหมายความว่าทุกเส้นเชื่อมต่อถึงกัน และมีสายไฟเพียงเส้นเดียวเท่านั้นที่วดั ค่าความ
ต้านทานเทียบกับเส้นอื่น ๆ แล้วมีค่าความต้านทานที่วดั ได้ในแต่ละเส้นเท่ากันทั้งหมด สายไฟเส้นนั้น
เป็ นสายร่ วม นาสายร่ วมต่อกับไฟบวก 5 โวลต์ นาสายไฟเส้นที่เหลือต่อลงกราวด์ครั้งละเส้นเรี ยงกัน โดย
สลับกันไปมา จนกว่าสเต็ปเปอร์ มอเตอร์ หมุนไปทางด้านเดียวกัน สาหรับสเต็ปเปอร์ มอเตอร์ ที่มีสายต่อ
แบบ 6 เส้น เมื่อทาการวัดค่าความต้านทานจะมีเพียง 3 เส้น 2 ชุ ดที่วดั แล้วอ่านค่าความต้านทาน ได้และ
ในแต่ละชุ ดจะมีเส้นเดี ยวที่มีสายร่ วม โดยเมื่อวัดค่าความต้านทานของสายร่ วมกับสายเส้ นอื่น จะมีค่า
ความต้านทานเท่ากัน เมื่อนามาใช้งานจะต้องนาสายร่ วมทั้ง 2 เส้นของทั้ง 2 ชุ ดมาต่อร่ วมกัน (แบบ 5
เส้ นต่อไว้แล้วภายในตัวมอเตอร์ ) สาหรั บวงจรขับจะต้องใช้วงจรขับที่ ออกแบบมาสาหรั บขับขดลวด
เช่ นเดี ยวกับวงจรขับรี เลย์ โดยวงจรจะต้องมีไดโอดต่อคร่ อมขดลวด เพื่อใช้ขจัดแรงดันจะที่เกิ ดขึ้นเมื่อ
ทรานซิสเตอร์หยุดนากระแส วงจรเป็ นดังรู ปที่ 7.17-2
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 387

รู ปที่ 7.17-2 แสดงวงจรขับสเต็ปเปอร์มอเตอร์ที่ใช้ทรานซิ สเตอร์

ในทางปฏิบตั ิสามารถใช้ไอซีที่เป็ นทรานซิสเตอร์ อาร์ เรย์อยูภ่ ายในแทนการใช้ทรานซิ สเตอร์ ได้


โดยไอซี น้ ี มีวงจรภายในเป็ นวงจรทรานซิ สเตอร์ จานวนหลายชุ ด ได้แก่เบอร์ ULN2003, ULN2803 ซึ่ ง
เบอร์ ULN2003 มีวงจรทรานซิสเตอร์ภายใน 7 ชุด และเบอร์ ULN2803 มี 8 ชุดโดยในแต่ละชุดเป็ นวงจร
ทรานซิ สเตอร์ น้ ี มีการจัดวงจรภายในเป็ นแบบวงจรทรานซิ สเตอร์ ที่ต่อแบบดาร์ ลิงตัน ซึ่ งสามารถขับ
โหลดกระแสสู งโดยใช้กระแสเบสต่า (ลอจิกที่ป้อนเข้ามาทางอินพุท) จากลักษณะการทางานของวงจรใน
แต่ละชุ ดจะมี ลกั ษณะการทางานเช่ นเดี ยวกับวงจรน็ อตเกตในวงจรดิ จิตอล สาหรับการขับสเต็ปเปอร์
มอเตอร์ จะใช้งานเพียง 4 ชุ ดเท่านั้นดังรู ปที่ 7.17-3 (a) ในกรณี ที่ตอ้ งการขับสเต็ปเปอร์ มอเตอร์ ที่มีกาลัง
มากเป็ นมอเตอร์ ที่ ต้อ งการกระแสสู ง ซึ่ งการขับ กระแสสู ง สามารถใช้ไ อซี เ บอร์ ULN2803 มี ว งจร
ทรานซิ สเตอร์ 8 ชุด โดยทาการขนานกัน 2 ชุ ดต่อการขับมอเตอร์ 1 ขด ดังรู ปที่ 7.17-3 (b) ภายในไอซี มี
ไดโอดป้ องกันแรงดันย้อนกลับ (Back EMF) เตรี ยมไว้สาหรับโหลดที่เป็ นขดลวด ดังนั้นเมื่อใช้งานจริ ง
ไม่ตอ้ งต่อไดโอดเพิ่มภายนอก เพียงแต่ตอ้ งต่อขาร่ วมของไดโอดเข้ากับแหล่งจ่ายที่เชื่ อมเข้าที่จุดร่ วมของ
ขดลวด

รู ปที่ 7.17-3 วงจรขับสเต็ปเปอร์มอเตอร์ แบบใช้ไอซี ULN2803


388 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

6. การดาเนินการสร้ างวงจร
การสร้างวงจรขับสเต็ปเปอร์ มอเตอร์ ในใบงานนี้ เป็ นการสร้างเพิ่มเติมจากใบงาน 7.15 โดยเพิ่ม
เฉพาะส่ วนของวงจรขับสเต็ปเปอร์ ซึ่ งใช้อุป กรณ์ เพิ่มเติ มเพียงตัวเดี ยวคื อไอซี เบอร์ ULN2803 วงจร
สมบูรณ์เป็ นดังรู ปที่ 7.17-4

รู ปที่ 7.17-4 วงจรสมบรู ณ์สาหรับการทดลอง

วงจรขับสเต็ปเปอร์มอเตอร์ ที่สร้างต่อขยายเพิ่มเติม โดยเป็ นวงจรต่อพ่วงซึ่ งอยูค่ นละแผ่นกับวงจร


ไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.17-5

รู ปที่ 7.17-5 ส่ วนของวงจรหลักและวงจรขับสเต็ปเปอร์มอเตอร์ ที่แยกคนละแผ่นวงจรพิมพ์


ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 389
ให้นกั ศึกษาประกอบวงจรขับสเต็ปเปอร์ มอเตอร์ ลงในแผ่นวงจรเดิมในใบงานที่ 7.15 โดยให้
วางแผนการจัดวางไอซี ULN2803 ในตาแหน่งที่สะดวกในการบัดกรี วงจรขับสเต็ปเปอร์ มอเตอร์ เป็ นดัง
รู ปที่ 7.17-6

รู ปที่ 7.17-6 (a) วงจรขับสเต็ปเปอร์มอเตอร์ (b) แนวทางจัดวาง

การทางานของวงจร
วงจรรู ปที่ 7.17-6 (a) เป็ นวงจรต่อพ่วงสาหรับวงจรขับสเต็ปเปอร์ มอเตอร์ ซึ่ งวงจรนี้ใช้ไอซี ขบั ที่
เป็ นทรานซิ สเตอร์ อาร์ เรย์เบอร์ ULN2803 โดยวงจรสามารถขับสเต็ปเปอร์ มอเตอร์ ขนาดเล็ก ที่มีแรงดัน
ขดลวดขนาด 5 โวลต์โดยไอซี จะทาหน้าที่คล้ายสวิตช์ต่อลงกราวด์เมื่อมีสัญญาณควบคุ มที่เป็ นลอจิก 1
เข้ามาทางอินพุท

การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยใช้พ้นื ที่วา่ งที่มีอยู่
2. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.17-6
390 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. การทดสอบการทางานของวงจร
การทดสอบวงจรขับสเต็ปเปอร์ มอเตอร์ ซ่ ึ งเป็ นวงจรเอาต์พุตพอร์ ตให้นกั ศึกษาทาการทดสอบ
การทางานของวงจรใน 2 ขั้นตอน
ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ดแวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์ เฉพาะส่ วนของไฟเลี้ยง 5 โวลต์และ 0 โวลต์ดงั รู ปที่
7.17-7 103
7805

L298D

AT89S52
ULN2803

รู ปที่ 7.17-7 การต่อเชื่อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ดแวร์

2. ทาการทดสอบการทางานของวงจรขับสเต็ปเปอร์ มอเตอร์ โดยใช้สายไฟต่อเข้ากับกราวด์


ป้ อนเข้า กับ ขาอิ นพุ ท ของไอซี ULN2803 ในขาที่ ใ ช้งานขับมอเตอร์ ท าการทดสอบตาม
ตารางที่ 7.17-1

ตารางที่ 7.17-1 ตารางทดสอบการทางานของวงจรขับสเต็ปเปอร์มอเตอร์


ต่อกราวด์เข้าขดลวด
จังหวะ ผลที่ควรได้
A B C D
1  - - - มอเตอร์ ข ยับ จัง หวะ 1 สเต็ ป
2 -  - - โดยจะขยับ ไปทิ ศทางเดี ย วกัน
3 - -  หากขยับกลับไปกลับมาให้เรี ยง
4 - - -  สายเฟสขดลวดใหม่
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 391
ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้
1. ต่อเชื่ อมวงจรขับสเต็ปเปอร์มอเตอร์ กบั วงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.17-8

7805
103

L298D
AT89S52

ULN2803

รู ปที่ 7.17-8 ต่อเชื่ อมวงจรขับสเต็ปเปอร์มอเตอร์ กบั วงจรไมโครคอนโทรลเลอร์

2. เขียนโปรแกรมเพื่อทดสอบการทางานของพอร์ตโดยใช้โปรแกรม Keil uVision ดังนี้


#include<REGX52.H>
void delay(int n); //declare delay program
sbit coil_A=P2^7; //Coil A connect to P2.7
sbit coil_B=P2^6; //Coil A connect to P2.6
sbit coil_C=P2^5; //Coil A connect to P2.5
sbit coil_D=P2^4; //Coil A connect to P2.4

void main(void)
{
while(1)
{
coil_A=0;delay(100);coil_A=1;
coil_B=0;delay(100);coil_B=1;
coil_C=0;delay(100);coil_C=1;
coil_D=0;delay(100);coil_D=1;
}
}
void delay(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<100;y++)
{
}
}
}
392 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX file)
4. นาไฟล์ภาษาเครื่ องที่ได้อดั ลงชิพซีพียู
5. สังเกตผลที่ได้หากวงจรทางานตามปกติ มอเตอร์ จะนิ่งก่อนหลังจากนั้นจะเริ่ มหมุนและหมุน
กลับทางหลังจากนั้นจะหยุดหมุน หากการหมุนผิดไปจากที่กล่าวให้ดาเนินการแก้ไข

8. สรุปผลการปฏิบัติงาน
ใบงานที่ 7.17 การสร้างวงจรขับสเต็ปเปอร์มอเตอร์ 393

แบบทดสอบหลังเรียน ใบงานที่ 7.17


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ไอซีสาหรับขับสเต็ปเปอร์มอเตอร์ในใบงาน 5. สายไฟร่ วมกลางของสเต็ปเปอร์ มอเตอร์
ใช้เบอร์ใด จะต้องต่อกับจุดใด
ก. L293 ก. กราวด์ไอซี
ข. L298D ข. ไฟเลี้ยงไอซี
ค. LM7805 ค. ไฟเลี้ยงวงจร
ง. ULN2003 ง. ขาร่ วมไอซี ขบั
จ. ULN2803 จ. ขาพอร์ ตไอซีขบั
2. ข้อใดเป็ นสเต็ปเปอร์ มอเตอร์ แบบมีสายต่อ 6 6. การเรี ยงเฟสของสายมอเตอร์ ที่ถูกต้องผลจะ
สาย เป็ นเช่นไร
ก. Bipolar ก. มอเตอร์จะหมุนสลับไปมา
ข. Unipolar ข. มอเตอร์ จะหมุนและหยุดสลับกัน
ค. Tri polar ค. มอเตอร์จะขยับครั้งละหนึ่งเฟสไปด้านเดียวกัน
ง. Double polar ง. มอเตอร์ หมุนอย่างต่อเนื่ อง
จ. Single polar จ. มอเตอร์จะหมุนเพียงรอบเดียว
3. การใส่ ไดโอดคร่ อมขดลวดมอเตอร์เพื่อ 7. วงจรในใบงานหากไม่ต่อขาร่ วมไดโอดเข้ากับ
ประโยชน์ตามข้อใด ไฟเลี้ยงของมอเตอร์ จะมีผลอย่างไร
ก. ป้ องกัน Over current ก. ทาให้มอเตอร์เสี ยหายได้
ข. ป้ องกัน Forward EMF ข. ทาให้ไมโครคอนโทรลเลอร์ เสี ยหายได้
ค. ป้ องกัน Over temp ค. ทาให้วงจรจ่ายไฟเสี ยหาย
ง. ป้ องกันการวัดลงจร ง. ทาให้ไอซีขบั เสี ยหายได้
จ. ป้ องกัน Back EMF จ. ทาให้ไดโอดเสี ยหายได้
4. ไอซีขบั มอเตอร์ตามใบงานมีการจัดวงจร 8. การทดสอบการทางานของวงจรขับสเต็ปเปอร์
ภายในเป็ นแบบใด มอเตอร์ จะต้องทาอย่างไร
ก. Darlington ก. ป้อนกราวด์ที่อินพุตแบบสลับเฟส
ข. Fix bias ข. ป้ อนไฟเลี้ยงที่อินพุตแบบสลับเฟส
ค. Emitter follower ค. ป้อนกราวด์ที่อินพุตแบบเรี ยงเฟส
ง. Voltage stabilizer ง. ป้ อนไฟเลี้ยงที่อินพุตแบบเรี ยงเฟส
จ. Feed back controlled จ. ป้ อนไฟเลี้ยงและกราวด์สลับกัน
394 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. หากป้ อนไฟเลี้ยงเข้าขดลวดมอเตอร์ โดยค้างไว้เป็ นเวลานานผลจะเป็ นเช่นไร
ก. มอเตอร์เสื่ อม
ข. ขดลวดจะเสี ยหายได้
ค. กระแสจะค่อยสู งขึ้น
ง. แรงดันตกคร่ อมจะค่อย ๆ ต่าลง
จ. มุมต่อสเต็ปจะเปลี่ยนไป
10. หากต้องการใช้ไอซี ULN2803 ให้สามารถขับกระแสได้สูงขึ้นจะต้องทาอย่างไร
ก. ขนานชุดขับกระแส
ข. ส่ งสัญญาณแบบ PWM
ค. เพิ่มค่าแหล่งจ่ายกระแสไฟฟ้า
ง. อนุกรมชุดขับกระแส
จ. ติดแผ่นระบายความร้อน

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ก 3. ค 4. ง 5. จ 6. จ 7. ข 8. ข 9. จ 10. ค

เฉลยแบบทดสอบหลังเรี ยน
1. จ 2. ข 3. จ 4. ก 5. ง 6. ค 7. ง 8. ง 9. ข 10. ก
ใบงานที่ 7.18
การเขียนโปรแกรมควบคุมสเต็ปเปอร์ มอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.17 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
396 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.18


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การควบคุมสเต็ปเปอร์ มีกี่แบบ 5. หากต้องการให้สเต็ปเปอร์มอเตอร์หมุนกลับ
ก. 2 แบบ ทิศทางต้องดาเนินการอย่างไร
ข. 3 แบบ ก. ส่ งข้อมูลขับแบบเรี ยงถอยหลังตามตาราง
ค. 4 แบบ ข. ส่ งข้อมูลขับแบบสลับ
ง. 5 แบบ ค. สลับขั้วมอเตอร์
จ. 6 แบบ ง. เปลี่ยนขั้วมอเตอร์ เป็ นกราวด์
2. การขับสเต็ปเปอร์มอเตอร์แบบใดให้แรงบิด จ. สลับไฟเลี้ยงไอซี
สู งสุ ด 6. หากใช้สเต็ปเปอร์ขนาด 1.8 องศา/สเต็ปขับ
ก. เต็มสเต็ปหนึ่งเฟส แบบครึ่ งสเต็ปจะต้องขับกี่จงั หวะถึงจะได้มุม
ข. เต็มสเต็ปสองเฟส 90 องศา
ค. ครึ่ งสเต็ป ก. 50
ง. แบบผสม ข. 100
จ. สองสเต็ปหนึ่งเฟส ค. 150
3. การขับสเต็ปเปอร์มอเตอร์แบบใดสามารถให้ ง. 200
มุมต่อสเต็ปน้อยกว่าปกติได้ จ. 250
ก. เต็มสเต็ปหนึ่งเฟส 7. สภาวะที่มอเตอร์ หยุดนิ่งเมื่อใช้ความเร็ วใน
ข. เต็มสเต็ปสองเฟส การขับสู งถึงจุด ๆ หนึ่งเรี ยนว่าสภาวะใด
ค. ครึ่ งสเต็ป ก. Balance
ง. แบบผสม ข. Saturation
จ. สองสเต็ปหนึ่งเฟส ค. Resonance
4. หากใช้สเต็ปเปอร์ขนาด 1.8 องศา ต่อสเต็ป ง. Cutoff
จะต้องขับกี่สเต็ปจึงจะหมุนครบหนึ่งรอบ จ. Active
ก. 50 8. คาสั่งที่ใช้ขบั สเต็ปเปอร์ มอเตอร์ แบบโดยตรง
ข. 100 ในกรณี ที่ต่ออยูก่ บั พอร์ ต 2 จะใช้คาสั่งใด
ค. 150 ก. P2 (data);
ง. 200 ข. P2 data;
จ. 250 ค. P2 [data];
ง. P2 = data;
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 397
จ. P2 = <data;
9. หากต้องการขับมอเตอร์แบบ 1 เฟส ให้หมุน 2 รอบ จะใช้คาสัง่ ใดในการวนซ้ าเพื่อให้ได้จานวนรอบ
ที่ตอ้ งการ
ก. for (i=1; i<=50;i++)
ข. for (i=1; i<=100;i++)
ค. for (i=1; i<=150;i++)
ง. for (i=1; i<=200;i++)
จ. for (i=1; i<=250;i++)
10. คาสั่งที่ใช้สาหรับการวนซ้ าจนกว่าจะมีการกด SW1 จะต้องใช้คาสั่งตามข้อใด
ก. if (SW1 == 0)
ข. if (SW1 != 0)
ค. switch (SW1 != 0)
ง. while (SW1 = = 0)
จ. while (SW1 ! = 0)
398 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
จากใบงาน 7.17 ที่ผ่านมาเป็ นใบงานที่สร้างวงจรต่อพ่วงที่ใช้ขบั สเต็ปเปอร์ มอเตอร์ โดยใช้ไอซี
เบอร์ ULN2803 ใบงานเลือกใช้สเต็ปเปอร์ มอเตอร์ แบบ Unipolar ซึ่ งเป็ นสเต็ปเปอร์ ที่สามารถควบคุ ม
การทางานได้ง่าย คุ ณสมบัติในการขยับในแต่ละสเต็ปของมอเตอร์ ที่พบโดยทัว่ ไปมี 1.8 องศาต่อสเต็ป
และ 7.5 องศาต่อสเต็ป การควบคุมการหมุนของมอเตอร์สามารถควบคุมการทางานได้ 3 แบบ คือ
1. แบบเต็มสเต็ป 1 เฟส (Full step 1 phase) ซึ่ งเป็ นการขับครั้งละ 1 เฟสเรี ยงกันไป ทาให้
มอเตอร์ หมุนไปครั้งละ 1 สเต็ป ถ้ามอเตอร์ มีคุณสมบัติ 1.8 องศาต่อสเต็ปก็จะหมุนไปครั้งละ 1.8 องศา
โดยมีข้ นั ตอนขับเฟสดังรู ปที่ 7.18-1

รู ปที่ 7.18-1 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบเต็มสเต็ป 1 เฟส

ตารางที่ 7.18-1 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบเต็มสเต็ป 1 เฟส


สเต็ปที่ ขดลวด A ขดลวด B ขดลวด C ขดลวด D รู ปที่ 7.18-1
1 ทางาน (a)
2 ทางาน (b)
3 ทางาน (c)
4 ทางาน (d)

2. แบบเต็มสเต็ป 2 เฟส (Full step 2 phase) เป็ นการขับครั้งละ 2 เฟส โดยมีคุณสมบัติที่ดี


ขึ้นคือแรงบิดมากขึ้นเนื่ องจากมีการขับครั้งละ 2 เฟส ทาให้เกิ ดสนามแม่เหล็กมากขึ้นนัน่ เอง แต่มุมใน
การหมุนจะมีค่าเท่ากันกับแบบเต็มสเต็ป 1 เฟส โดยมีข้ นั ตอนขับเฟสดังรู ปที่ 7.18-2

รู ปที่ 7.18-2 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบเต็มสเต็ป 2 เฟส


ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 399
ตารางที่ 7.18-2 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบเต็มสเต็ป 2 เฟส
สเต็ปที่ ขดลวด A ขดลวด B ขดลวด C ขดลวด D รู ปที่ 7.18-2
1 ทางาน ทางาน (a)
2 ทางาน ทางาน (b)
3 ทางาน (c)
4 ทางาน ทางาน (d)

3. แบบครึ่ งสเต็ป (Haft step) เป็ นการควบคุ ม ให้มอเตอร์ หมุ นไปครั้ งละครึ่ งของสเต็ป
ดังนั้นหากมอเตอร์ มอเตอร์ มีคุณสมบัติ 1.8 องศาต่อสเต็ปก็จะหมุนไปครั้งละ 0.9 องศา ทาได้ตาแหน่งที่
เที่ยงตรงมากขึ้นเมื่อนาไปประยุกต์ใช้งาน วิธีการขับจะใช้การผสมกันระหว่างแบบเต็มสเต็ป 1 เฟสกับ
แบบเต็มสเต็ป 2 เฟส ซึ่ งมีข้ นั ตอนขับเฟสดังรู ปที่ 7.18-3

รู ปที่ 7.18-3 แสดงการเคลื่อนที่เมื่อขับมอเตอร์แบบครึ่ งสเต็ป

ตารางที่ 7.18-3 รู ปแบบการกระตุน้ ขดลวดของมอเตอร์แบบครึ่ งสเต็ป


สเต็ปที่ ขดลวด A ขดลวด B ขดลวด C ขดลวด D รู ปที่ 7.18-3
1 ทางาน (a)
2 ทางาน ทางาน (b)
3 ทางาน (c)
4 ทางาน ทางาน (d)
5 ทางาน (e)
6 ทางาน ทางาน (f)
7 ทางาน (g)
8 ทางาน ทางาน (h)
400 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ ดังรู ปที่ 7.18-4

รู ปที่ 7.18-4 วงจรสมบรู ณ์สาหรับการทดลอง

การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์


อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. ไอซีขบั มอเตอร์ ULN2803
3. สเต็ปเปอร์มอเตอร์ MOTOR-STEPPER

รู ปที่ 7.18-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus


ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 401
การทดลองการทางานด้วยวงจรจริ ง จะใช้แผ่นวงจรจริ ง 2 แผ่นประกอบด้วยวงจรหลักคือวงจร
ไมโครคอนโทรลเลอร์ และวงจรต่อพ่วงที่ในใบงานนี้ใช้แผ่นวงจรต่อพ่วงที่สร้างขึ้นในใบงานที่ 7.17 คือ
วงจรขับสเต็ปเปอร์ มอเตอร์ การทดลองให้ทาการเชื่อมต่อระหว่างแผ่นวงจรหลักกับแผ่นวงจรขับมอเตอร์
ผ่านพอร์ ต 2 ดังรู ปที่ 7.18-6

7805
103

L298D
AT89S52

ULN2803

รู ปที่ 7.18-6 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการบังคับให้สเต็ปเปอร์มอเตอร์ หมุนไปทางเดียวตลอดแบบเต็มสเต็ป 1 เฟส


ซึ่งการดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรที่ตอ้ งการใช้งาน 6. ส่ งค่าลอจิกให้มอเตอร์ หมุนไปหน้าสเต็ปที่ 3
2. ส่ งค่าลอจิกให้มอเตอร์ หมุนไปหน้าสเต็ปที่ 1 7. หน่วงเวลา
3. หน่วงเวลา 8. ส่ งค่าลอจิกให้มอเตอร์ หมุนไปหน้าสเต็ปที่ 4
4. ส่ งค่าลอจิกให้มอเตอร์ หมุนไปหน้าสเต็ปที่ 2 9. หน่วงเวลา
5. หน่วงเวลา 10. กลับไปทางานในลาดับที่ 2
402 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม A

กาหนดตัวแปร,ค่าเริ่ มต้น ส่ งค่าสเต็ป 3 ออกพอร์ ต


B
ส่ งค่าสเต็ป 1 ออกพอร์ ต หน่วงเวลา

หน่วงเวลา ส่ งค่าสเต็ป 4 ออกพอร์ ต

ส่ งค่าสเต็ป 2 ออกพอร์ ต หน่วงเวลา

หน่วงเวลา B

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม Keil


µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
void delay(int t);
void main(void)
{
unsigned char step[]={0x1f,0x2f,0x4f,0x8f};
P2=0xF0; //clear Port control Stepper Motor
TMOD=0x10; //Timer1 Mode 1
while(1)
{
P2=step[0];
delay(50);
P2=step[1];
delay(50);
P2=step[2];
delay(50);
P2=step[3];
delay(50);
}
}
void delay(int t)
{
int i;
for(i=0;i<t;i++)
{
TH1=0xFC; //set for 1 milisecond
TL1=0x66;
TF1=0;
TR1=1;
while(TF1==0)
{}
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 403
TR1=0;
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขค่าในตัวแปร step[ ] โดยให้เรี ยงกลับด้านเป็ น{0x8f,0x4f,0x2f,0x1f} แล้ว
สังเกตผล

การทดลองที่ 2 การทดลองการบังคับให้สเต็ปเปอร์ มอเตอร์ หมุนตามเข็มและทวนเข็มนาฬิกา อย่างละ


1 รอบสลับกันไป

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. กาหนดตัวแปรที่ตอ้ งการใช้งาน 5. ส่ งค่าลอจิกให้มอเตอร์หมุนทวนเข็ม
2. ส่ งค่าลอจิกให้มอเตอร์ หมุนตามเข็ม 6. หน่วงเวลา
3. หน่วงเวลา 7. ตรวจสอบจานวนสเต็ปว่าครบ 1 รอบหรื อ
4. ตรวจสอบจานวนสเต็ปว่าครบ 1 รอบหรื อ ยังหากยังไม่ครบให้ส่งค่าสเต็ปถัดไปแล้ว
ยังหากยังไม่ครบให้ส่งค่าสเต็ปถัดไปแล้ว วนกลับไปลาดับที่ 6
วนกลับไปลาดับที่ 3 8. กลับไปทางานในลาดับที่ 2

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม
B
กาหนดตัวแปร, ค่าเริ่ มต้น

ส่ งค่าสเต็ปให้หมุนตามเข็ม

หน่วงเวลา

ใช่
ครบ 1 รอบ ? มอเตอร์หมุนตามเข็มสเต็ปถัดไป
ไม่ใช่
A
404 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ส่ งค่าสเต็ปให้หมุนทวนเข็ม

หน่วงเวลา

ใช่
ครบ 1 รอบ ? มอเตอร์หมุนทวนเข็มสเต็ปถัดไป
ไม่ใช่
B

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
void delay(int t);
void main(void)
{
unsigned char step[]={0xf1,0xf2,0xf4,0xf8};
unsigned int n,i;
P0=0xF0; //clear Port control Stepper Motor
TMOD=0x10; //Timer1 Mode 1
while(1)
{
i=0;
for(n=0;n<200;n++)
{
P0=step[i];
if(i<3)
{i++;}
else
{i=0;}
delay(100);
}
for(n=0;n<200;n++)
{
P0=step[i];
if(i>0)
{i--;}
else
{i=3;}
delay(100);
}
}
}
void delay(int t)
{
int i;
for(i=0;i<t;i++)
{
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 405
TH1=0xFC; //set for 1 milisecond
TL1=0x66;
TF1=0;
TR1=1;
while(TF1==0)
{}
TR1=0;
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมให้สามารถหมุนในทิศทางเดียวมากกว่า 1 รอบแล้วสังเกตผล

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมควบคุมสเต็ปเปอร์ มอเตอร์ แบบเต็มคลื่น 2 เฟส โดยให้มอเตอร์ หมุนทวนเข็ม
นาฬิกา 5 รอบแล้วหมุนตามเข็มนาฬิกา 5 รอบแล้วหยุด วงจรที่ใช้ในการทดลองเป็ นดังรู ป วงจรที่ใช้
ทดลองเป็ นดังรู ปที่ 7.18-7

รู ปที่ 7.18-7 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย


406 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.18


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การควบคุมสเต็ปเปอร์ มีกี่แบบ 5. หากต้องการให้สเต็ปเปอร์ มอเตอร์หมุนกลับ
ก. 1 แบบ ทิศทางต้องดาเนินการอย่างไร
ข. 2 แบบ ก. ส่ งข้อมูลขับแบบสลับ
ค. 3 แบบ ข. สลับขั้วมอเตอร์
ง. 4 แบบ ค. สลับไฟเลี้ยงไอซี
จ. 5 แบบ ง. เปลี่ยนขั้วมอเตอร์ เป็ นกราวด์
2. การขับสเต็ปเปอร์มอเตอร์แบบใดให้แรงบิด จ. ส่ งข้อมูลขับแบบเรี ยงถอยหลังตามตาราง
สู งสุ ด 6. หากใช้สเต็ปเปอร์ขนาด 1.8 องศา/สเต็ป ขับ
ก. ครึ่ งสเต็ป แบบครึ่ งสเต็ปจะต้องขับกี่จงั หวะถึงจะได้มุม
ข. เต็มสเต็ปหนึ่งเฟส 90 องศา
ค. เต็มสเต็ปสองเฟส ก. 100
ง. แบบผสม ข. 150
จ. สองสเต็ปหนึ่งเฟส ค. 200
3. การขับสเต็ปเปอร์ มอเตอร์แบบใดสามารถให้ ง. 250
มุมต่อสเต็ปน้อยกว่าปกติได้ จ. 300
ก. ครึ่ งสเต็ป 7. สภาวะที่มอเตอร์ หยุดนิ่งเมือใช้ความเร็ วใน
ข. เต็มสเต็ปหนึ่งเฟส การขับสู งถึงจุด ๆ หนึ่งเรี ยนว่าสภาวะใด
ค. เต็มสเต็ปสองเฟส ก. Active
ง. แบบผสม ข. Balance
จ. สองสเต็ปหนึ่งเฟส ค. Cutoff
4. หากใช้สเต็ปเปอร์ขนาด 1.8 องศา ต่อสเต็ป ง. Resonance
จะต้องขับกี่สเต็ปจึงจะหมุนครบหนึ่งรอบ จ. Saturation
ก. 100 8. คาสั่งที่ใช้ขบั สเต็ปเปอร์ มอเตอร์ แบบโดยตรง
ข. 200 ในกรณี ที่ต่ออยูก่ บั พอร์ ต 2 จะใช้คาสั่งใด
ค. 300 ก. P2 (data);
ง. 400 ข. P2 data;
จ. 500 ค. P2 = <data;
ง. P2 [data];
ใบงานที่ 7.18 การเขียนโปรแกรมควบคุมสเต็ปเปอร์มอเตอร์ 407
จ. P2 = data;
9. หากต้องการขับมอเตอร์แบบ 1 เฟส ให้หมุน 2 รอบ จะใช้คาสัง่ ใดในการวนซ้ าเพื่อให้ได้จานวนรอบ
ที่ตอ้ งการ
ก. for (i=1; i<=100;i++)
ข. for (i=1; i<=200;i++)
ค. for (i=1; i<=300;i++)
ง. for (i=1; i<=400;i++)
จ. for (i=1; i<=500;i++)
10. คาสั่งที่ใช้สาหรับการวนซ้ าจนกว่าจะมีการกด SW1 จะต้องใช้คาสั่งตามข้อใด
ก. if (SW1 = = 0)
ข. if (SW1 != 0)
ค. switch (SW1 != 0)
ง. while (SW1 ! = 0)
จ. while (SW1 = = 0)

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ข 3. ค 4. ง 5. ก 6. ข 7. ค 8. ง 9. ข 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ค 2. ค 3. ก 4. ข 5. จ 6. ก 7. ง 8. จ 9. ก 10. ง
ใบงานที่ 7.19
การเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
410 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.19


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ส่ วนประกอบของเซอร์โวมอเตอร์ มีกี่ส่วน 5. คาบเวลาของพัลส์ 1 ไซเคิลจะต้องมีค่าเท่าใด
ก. 3 ส่ วน ก. 10 ms
ข. 4 ส่ วน ข. 15 ms
ค. 5 ส่ วน ค. 20 ms
ง. 6 ส่ วน ง. 25 ms
จ. 7 ส่ วน จ. 30 ms
2. สายไฟที่ใช้ต่อกับเซอร์ โวมอเตอร์ มีกี่เส้น 6. แรงดันใช้งานปกติของเซอร์ โวมอเตอร์ มีค่า
ก. 2 เส้น เท่าใด
ข. 3 เส้น ก. 3.3 V
ค. 4 เส้น ข. 5 V
ง. 5 เส้น ค. 9 V
จ. 6 เส้น ง. 12 V
3. มุมในการเคลื่อนที่ของเซอร์ โวมอเตอร์ มีค่า จ. 15 V
เท่าใด 7. การป้ องกันการเคลื่อนตาแหน่งจากโหลด
ก. 60 จะต้องทาอย่างไร
ข. 90 ก. เพิ่มแรงดันให้กบั เซอร์ โวมอเตอร์
ค. 135 ข. เพิ่มกระแสให้กบั เซอร์ โวมอเตอร์
ง. 150 ค. ส่ งสัญญาณพัลส์ค่าเดิมอย่างต่อเนื่อง
จ. 180 ง. ทดเฟื องให้มากขึ้น
4. หากส่ งพัลส์ที่มีความกว้าง 2 ms เซอร์ โว จ. ลดภาระโหลดให้นอ้ ยลง
มอเตอร์ จะเคลื่อนที่ไปกี่องศา 8. หากต้องการใช้คาว่า servo แทนบิต P2.7
ก. 60 เพื่อให้ในการส่ งสัญญาณพัลส์จะต้องใช้คาสัง่
ข. 90 ใด
ค. 135 ก. sbit servo = P2^7;
ง. 150 ข. sbit servo P2^7;
จ. 180 ค. sbit servo P2.7;
ง. bit servo P2^7;
จ. bit servo P2.7;
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 411
9. เมื่อต้องการใช้คาสั่ง _nop(); จะต้องเพิ่มไลบารี่ ใดเข้าในโปรแกรมหลัก
ก. stdio.h
ข. math.h
ค. conio.h
ง. intrins.h
จ. time.h
10. เซอร์ โวที่ใช้ในการจาลองการทางานในโปรแกรม Proteus ใช้ชื่อว่าอะไร
ก. MOTOR-SERVO
ข. MOTOR-PWMSERVO
ค. PWM-SERVO
ง. SERVO-MOTOR
จ. PWM-SERVOMOTOR
412 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
เซอร์ โวมอเตอร์ เป็ นมอเตอร์ ที่ส ามารถควบคุ มการเคลื่ อนที่ ไปยังมุ มที่ ต้องการได้ด้วยวงจร
ควบคุมแบบป้ อนกลับภายใน เซอร์ โวมอเตอร์ ขนาดเล็กนิ ยมใช้กนั มากในเครื่ องเล่นบังคับวิทยุเช่ น รถ
เรื อ เครื่ องบิน เซอร์โวมอเตอร์ ประกอบขึ้นจากส่ วนประกอบหลัก ๆ 3 ส่ วนคือ
1. มอเตอร์ไฟฟ้ากระแสตรงขนาดเล็ก
2. ชุดเกียร์ ทดรอบ
3. วงจรควบคุม

รู ปที่ 7.19-1 ภายในเซอร์ โวมอเตอร์ 1

เซอร์ โวมอเตอร์ จะมีคอนเน็คเตอร์ สาหรับต่อใช้งาน 3 ขา โดยใช้ต่อกับแหล่งจ่ายไฟ 2 ขาและอีก


หนึ่งขาจะใช้ต่อกับสัญญาณควบคุม เซอร์โวมอเตอร์ จะใช้ไฟฟ้ากระแสตรงในการทางานมีแรงดันใช้งาน
อยูใ่ นช่วง 4-6 โวลต์ (สาหรับรุ่ นกาลังแรงบิดสู งจะใช้แรงดันสู งถึง 12 โวลต์) การเรี ยงขาคอนเน็คเตอร์
จะเป็ นมาตรฐานแบบเดียวกัน มีความต่างกันบ้างตรงสี ของสายไฟขึ้นอยูก่ บั บริ ษทั ผูผ้ ลิตดังรู ปที่ 7.19-2

รู ปที่ 7.19-2 คอนเน็คเตอร์ เซอร์ โวมอเตอร์ ของแต่ละบริ ษทั 2


1
รู ปจาก http://www.pyroelectro.com
2
รู ปจาก http://www.imagesco.com/servo/connection-types.html
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 413
การควบคุ ม เซอร์ โวมอเตอร์ ใ ห้เคลื่ อนไปยังมุ มที่ ต้องการสามารถท าได้โดยการส่ ง พัล ส์ ที่ มี
ค่าประมาณ 1 ms - 2 ms ดังรู ปที่ 7.19-3 โดยสัญญาณของพัลส์ ใน 1 ลูกคลื่นมีคาบเวลาประมาณ 20 ms
เซอร์ โวมอเตอร์ จะสามารถเคลื่อนที่ต้ งั แต่มุม 0 องศาจนถึง 180 องศา ซึ่ งโครงสร้างของเซอร์ โวมอเตอร์
ไม่สามารถที่จะหมุนที่มุมเกินกว่าที่กาหนดไว้ได้
ในการใช้งานเซอร์ โวมอเตอร์ ที่มีการรับภาระโหลดอาจจะทาให้ตาแหน่ งเคลื่ อนได้หากไม่ส่ง
สัญญาณควบคุมแบบต่อเนื่ อง โดยปกติระบบเกียร์ ภายในจะทาการล็อกตาแหน่งไว้แล้วในระดับหนึ่ งแต่
ไม่สามารถคงตาแหน่ งเดิ มไว้ได้หากการต่อใช้งานมีการรับภาระโหลด ในกรณี ที่ตอ้ งการล็อกตาแหน่ ง
จะต้องส่ งพัลส์ควบคุมตาแหน่งอย่างต่อเนื่อง

รู ปที่ 7.19-3 สัญญาณพัลส์ที่ใช้ควบคุมเซอร์โวมอเตอร์

เนื่ องจากไมโครคอนโทรลเลอร์ ที่ใช้ศึกษาเป็ นตระกูล MCS-51 และใช้คริ สตอล 11.0592MHz


จานวนสัญญาณนาฬิกาจะต้องใช้ 12 ลูกคลื่นจะทางานได้ครบ 1 แมชชีนไซเคิล ส่ งผลให้การประมวลผล
ของคาสั่งใช้เวลานาน ดังนั้นการหน่วงเวลาคาบเวลาน้อยมาก ๆ ในระดับไมโครวินาทีจึงทาให้เที่ยงตรง
ได้ยากแม้ว่าจะใช้งานด้วยวงจรไทเมอร์ ก็ตาม ซึ่ งในใบงานนี้ จะต้องใช้การหน่ วงเวลาด้วยโปรแกรมใน
ระดับไมโครวินาทีจึงไม่สามารถใช้การทางานด้วยวงจรไทเมอร์ เช่นกัน

สาหรับการเขียนโปรแกรมหน่วงเวลาเพื่อให้สามารถสร้างสัญญาณพัลส์ ที่ตอ้ งการจะใช้วิธีการ


ทดลองใส่ ค่าแล้ววัดทดสอบเพื่อให้ได้คาบเวลาที่ตอ้ งการแทนการใช้ไทเมอร์ โดยมีการใช้คาสั่ง _nop();
มาช่วยในการสร้างคาบเวลาเพื่อให้ได้เวลาใกล้เคียงกับที่ตอ้ งการ ซึ่ งคาสั่งดังกล่าวจะไม่มีการประมวลผล
ใด ๆ แต่จะใช้เวลาในการทาค าสั่งจานวน 1 แมชชี นไซเคิ ลหรื อใช้สัญญาณ 12 ลู กคลื่ น การใช้คาสั่ ง
ดังกล่าวจะต้องเพิม่ ไลบารี่ เข้ามาในโปรแกรมซึ่ งจะต้องประกาศที่หวั โปรแกรมดังนี้

#include <intrins.h>
414 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

6. การดาเนินการทดลอง
วงจรสมบูรณ์ที่ใช้ทดลองใบงานการเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์ ดังรู ปที่ 7.19-4

รู ปที่ 7.19-4 วงจรสมบรู ณ์สาหรับการทดลอง

การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์


อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. เซอร์ โวมอเตอร์ MOTOR-PMWSERVO

รู ปที่ 7.19-5 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus


ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 415
การทดลองการทางานด้วยวงจรจริ ง จะใช้แผ่นวงจรหลักคือวงจรไมโครคอนโทรลเลอร์ เพียง
แผ่นเดียว โดยใช้วธิ ี โยงสายไฟเชื่อมต่อเซอร์ โวมอเตอร์ เพื่อใช้ทดลอง ดังรู ปที่ 7.19-6

7805
103

AT89S52

รู ปที่ 7.19-6 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการบังคับให้เซอร์ โวมอเตอร์ หมุนไปที่มุม 0 องศา 180 องศาและ 90 องศา


โดยควบคุมเซอร์ โวมอเตอร์เพียงตัวเดียว (ปลดตัวที่สองออก) วงจรที่ใช้ในการทดลองเป็ นดังรู ปที่ 7.19-7

รู ปที่ 7.19-7 วงจรสมบรู ณ์สาหรับการทดลองที่ 1


416 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
การดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. ส่ งค่าลอจิก 1 และ ลอจิก 0 ให้พลั ส์ที่เซอร์โวมอเตอร์จะหมุนไปที่มุม 0 องศา
2. ส่ งค่าลอจิก 1 และ ลอจิก 0 ให้พลั ส์ที่เซอร์โวมอเตอร์จะหมุนไปที่มุม 180 องศา
3. ส่ งค่าลอจิก 1 และ ลอจิก 0 ให้พลั ส์ที่เซอร์โวมอเตอร์จะหมุนไปที่มุม 90 องศา
4. กลับไปทางานในลาดับที่ 1

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

สร้างพัลส์สาหรับ 0 องศา

สร้างพัลส์สาหรับ 180 องศา

สร้างพัลส์สาหรับ 90 องศา

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม Keil


µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
#include <intrins.h>
void delay (int n);

sbit servo1=P2^7;
void main(void)
{
int pulse,i;
while(1)
{
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 417
//------------------ 0 degree------------------------
pulse=122;
for(i=0;i<100;i++)
{
servo1=1;
delay(pulse-47);
servo1=0;
delay(1575-pulse); //1 period of cycle
}
//------------------ 180 degree------------------------
pulse=200;
for(i=0;i<100;i++)
{
servo1=1;
delay(pulse-47);
servo1=0;
delay(1575-pulse); //1 period of cycle
}
//------------------ 90 degree------------------------
pulse=160;
for(i=0;i<100;i++)
{
servo1=1;
delay(pulse-47);
servo1=0;
delay(1575-pulse); //1 period of cycle
}
}
}
void delay(int n)
{
while(n--){
_nop_();
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขค่าตัวแปร pulse เพื่อให้เซอร์ โวมอเตอร์ เคลื่อนไปยังมุม 45 องศาและ 135 องศา
แล้วสังเกตผล

การทดลองที่ 2 การทดลองการบัง คับ ให้เซอร์ โวมอเตอร์ 2 ตัวให้เคลื่ อนที่ ในมุ มที่ ต่างกันระหว่า ง 0
องศากับ 180 สลับกัน วงจรที่ใช้ในการทดลองใช้วงจรรู ปที่ 7-19-3

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. ส่ งพัลส์ที่เซอร์ โวมอเตอร์ ตวั ที่ 1 จะหมุนไปที่มุม 0 องศา
2. ส่ งพัลส์ที่เซอร์ โวมอเตอร์ ตวั ที่ 2 จะหมุนไปที่มุม 180 องศา
3. หน่วงเวลา
418 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
4. ส่ งพัลส์ที่เซอร์ โวมอเตอร์ ตวั ที่ 1 จะหมุนไปที่มุม 180 องศา
5. ส่ งพัลส์ที่เซอร์ โวมอเตอร์ ตวั ที่ 2 จะหมุนไปที่มุม 0 องศา
6. หน่วงเวลา
7. กลับไปทางานในลาดับที่ 1

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้

เริ่ ม

กาหนดตัวแปร,ค่าเริ่ มต้น

ส่ งพัลส์เซอร์ โวตัวที่ 1 ไปที่ 0 องศา

ส่ งพัลส์เซอร์ โวตัวที่ 2 ไปที่ 180 องศา

หน่วงเวลา

ส่ งพัลส์เซอร์ โวตัวที่ 1 ไปที่ 0 องศา

ส่ งพัลส์เซอร์ โวตัวที่ 2 ไปที่ 180 องศา

หน่วงเวลา

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
#include <intrins.h>
void delay(int n);
void delay2(int n);
sbit servo1=P2^7;
sbit servo2=P2^6;
void main(void)
{
int pulse,i;
while(1)
{
//------------------ 0 degree servo 1------------------------
pulse=122;
for(i=0;i<5;i++)
{
servo1=1;
delay(pulse-47);
ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 419
servo1=0;
delay(1575-pulse); //1 period of cycle
}
//------------------ 180 degree servo 2------------------------
pulse=200;
for(i=0;i<5;i++)
{
servo2=1;
delay(pulse-47);
servo2=0;
delay(1575-pulse); //1 period of cycle
}
//---------------delay-------------------
delay2(1000);
//------------------ 180 degree servo 1------------------------
pulse=200;
for(i=0;i<5;i++)
{
servo1=1;
delay(pulse-47);
servo1=0;
delay(1575-pulse); //1 period of cycle
}
//------------------ 0 degree servo 2------------------------
pulse=122;
for(i=0;i<5;i++)
{
servo2=1;
delay(pulse-47);
servo2=0;
delay(1575-pulse); //1 period of cycle
}
//---------------delay-------------------
delay2(1000);
}
}
void delay(int n)
{
while(n--){
_nop_();
}
}
void delay2(int n) //delay function
{
int x,y;
for(x=0;x<n;x++)
{
for(y=0;y<500;y++)
{}
}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมให้สามารถเคลื่อนที่ไปยังมุมอื่น ๆ แล้วสังเกตผล
420 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมควบคุมเซอร์ โวมอเตอร์ จานวน 2 ตัวให้เคลื่อนที่ไปยังมุมที่แตกต่างกันโดยให้
ทางานในแต่ละจังหวะดังนี้

ตารางที่ 7.19-1 มุมของการเคลื่อนที่ของเซอร์ โวมอเตอร์ในงานที่มอบหมาย


มุมของการเคลื่อนที่ของเซอร์โวมอเตอร์
จังหวะที่
มอเตอร์ ตวั ที่ 1 มอเตอร์ ตวั ที่ 2
1 0 180
2 45 135
3 90 90
4 135 45
5 180 0

วงจรที่ใช้ทดลองเป็ นดังรู ปที่ 7.19-8

รู ปที่ 7.19-8 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย


ใบงานที่ 7.19 การเขียนโปรแกรมควบคุมเซอร์โวมอเตอร์ 421

แบบทดสอบหลังเรียน ใบงานที่ 7.19


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. ส่ วนประกอบของเซอร์ โวมอเตอร์ มีกี่ส่วน 5. แรงดันใช้งานปกติของเซอร์ โวมอเตอร์ มีค่า
ก. 2 ส่ วน เท่าใด
ข. 3 ส่ วน ก. 3.3 V
ค. 4 ส่ วน ข. 5 V
ง. 5 ส่ วน ค. 9 V
จ. 6 ส่ วน ง. 12 V
2. สายไฟที่ใช้ต่อกับเซอร์ โวมอเตอร์ มีกี่เส้น จ. 15 V
ก. 1 เส้น 6. คาบเวลาของพัลส์ 1 ไซเคิลจะต้องมีค่าเท่าใด
ข. 2 เส้น ก. 10 ms
ค. 3 เส้น ข. 15 ms
ง. 4 เส้น ค. 20 ms
จ. 5 เส้น ง. 25 ms
3. หากส่ งพัลส์ที่มีความกว้าง 2ms เซอร์ โว จ. 30 ms
มอเตอร์ จะเคลื่อนที่ไปกี่องศา 7. การป้ องกันการเคลื่อนตาแหน่งจากโหลด
ก. 60 จะต้องทาอย่างไร
ข. 90 ก. ส่ งสัญญาณพัลส์ค่าเดิมอย่างต่อเนื่อง
ค. 135 ข. เพิ่มแรงดันให้กบั เซอร์ โวมอเตอร์
ง. 150 ค. เพิ่มกระแสให้กบั เซอร์ โวมอเตอร์
จ. 180 ง. ทดเฟื องให้มากขึ้น
4. มุมในการเคลื่อนที่ของเซอร์ โวมอเตอร์ มีค่า จ. ลดภาระโหลดให้นอ้ ยลง
เท่าใด 8. หากต้องการใช้คาว่า servo แทนบิต P2.7
ก. 60 เพื่อให้ในการส่ งสัญญาณพัลส์จะต้องใช้คาสัง่
ข. 90 ใด
ค. 135 ก. bit servo P2^7;
ง. 150 ข. bit servo P2.7;
จ. 180 ค. sbit servo = P2^7;
ง. sbit servo P2^7;
จ. sbit servo P2.7;
422 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. เมื่อต้องการใช้คาสั่ง _nop(); จะต้องเพิ่มไลบารี่ ใดเข้าในโปรแกรมหลัก
ก. conio.h
ข. intrins.h
ค. stdio.h
ง. math.h
จ. time.h
10. เซอร์ โวที่ใช้ในการจาลองการทางานในโปรแกรม Proteus ใช้ชื่อว่าอะไร
ก. MOTOR-PWMSERVO
ข. MOTOR-SERVO
ค. PWM-SERVO
ง. PWM-SERVOMOTOR
จ. SERVO-MOTOR

เฉลยแบบทดสอบก่อนเรี ยน
1. ก 2. ข 3. จ 4. จ 5. ค 6. ข 7. ค 8. ก 9. ง 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ข 2. ค 3. จ 4. จ 5. ข 6. ค 7. ก 8. ค 9. ข 10. ก
ใบงานที่ 7.20
การสร้ างวงจรแสดงผลจอผลึกเหลว (LCD)
1. จุดประสงค์ ทวั่ ไป
เพื่อให้นกั ศึกษาสามารถสร้างวงจรแสดงผลจอผลึกเหลว (LCD)
2. จุดประสงค์ เชิงพฤติกรรม
1. บอกส่ วนประกอบของวงจรแสดงผลจอผลึกเหลว (LCD)ได้
2. บอกการทางานของอุปกรณ์ต่าง ๆ ของวงจรแสดงผลจอผลึกเหลว (LCD)ได้
3. บอกขั้นตอนการประกอบวงจรแสดงผลจอผลึกเหลว (LCD)ได้
4. สร้าง (ประกอบ) วงจรแสดงผลจอผลึกเหลว (LCD)ได้
5. ทดสอบการทางานของวงจรแสดงผลจอผลึกเหลว (LCD)ได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด
3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ ) 1 แผ่น
2. แผ่นวงจรพิมพ์เอนกประสงค์ขนาด 8 ซ.ม. × 12 ซ.ม. 1 แผ่น
3. อุปกรณ์อิเล็กทรอนิกส์ตามวงจรรู ปที่ 7.20-3 (a) ประกอบด้วย
3.1 จอผลึกเหลว LCD 16x2 character 1 ตัว
3.2 โพเทนทิโอมิเตอร์ 10 k 1 ตัว
4. หัวแร้ง 1 ตัว
5. ตะกัว่ บัดกรี 1 ม้วน
6. มัลติมิเตอร์ 1 เครื่ อง
4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการสร้างวงจรแสดงผลจอผลึกเหลว (LCD)
3. วัดและทดสอบการทางานของวงจร
4. สรุ ปผลการปฏิบตั ิงาน
424 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.20


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. LCD ในงานไมโครคอนโทรลเลอร์ แบ่งได้กี่ 5. แรงดันไฟเลี้ยง LCD มีค่าเท่าใด
แบบ ก. 3.3 V
ก. 2 แบบ ข. 5 V
ข. 3 แบบ ค. 9 V
ค. 4 แบบ ง. 12 V
ง. 5 แบบ จ. 15 V
จ. 6 แบบ 6. ขาควบคุมใดขณะใช้งานสามารถต่อลงกราวด์
2. ตัวควบคุมสาหรับ LCD ชนิดตัวอักษรนิยมใช้ ได้โดยตรง
เบอร์ใด ก. RS
ก. HD4478 ข. E
ข. HD61830 ค. VO
ค. ULN2803 ง. R/W
ง. ULN2003 จ. CS
จ. TIP2955 7. โพเทนทิโอมิเตอร์ที่ใช้ในการปรับความคมชัด
3. ตัวควบคุมสาหรับ LCD ชนิดกราฟฟิ กนิยมใช้ ใช้ค่าเท่าใด
เบอร์ใด ก. 5 k
ก. HD4478 ข. 10 k
ข. HD61830 ค. 15 k
ค. ULN2803 ง. 20 k
ง. ULN2003 จ. 25 k
จ. TIP2955 8. LCD ชนิดที่มีแสงส่ องด้านหลังใช้แรงดันขับ
4. ขาที่ใช้ปรับความคมชัดของ LCD คือขาใด แหล่งกาเนิดแสงกี่โวลต์
ก. VSS ก. 3.3 V
ข. VDD ข. 5 V
ค. VO ค. 9 V
ง. RS ง. 12 V
จ. R/W จ. 15 V
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 425
9. การจัดวางคอนเน็คเตอร์ ในวงจรต่อพ่วง LCD ต้องคานึงถึงข้อใดเป็ นอันดับแรก
ก. ตาแหน่งของขา LCD
ข. ตาแหน่งของขาพอร์ ตไมโครคอนโทรลเลอร์
ค. พื้นที่ใช้สอยที่เหลือ
ง. ตาแหน่งของไฟเลี้ยงวงจร
จ. ตาแหน่งคอนเน็คเตอร์ ของวงจรหลัก
10. LCD ที่ใช้ในใบงานมีขนาดเท่าใด
ก. 16 ตัวอักษร 1 บรรทัด
ข. 16 ตัวอักษร 2 บรรทัด
ค. 20 ตัวอักษร 1 บรรทัด
ง. 20 ตัวอักษร 2 บรรทัด
จ. 40 ตัวอักษร 2 บรรทัด
426 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
อุปกรณ์ แสดงผลของเครื่ องใช้ไฟฟ้ าหรื อเครื่ องใช้ที่เป็ นอิเล็กทรอนิ กส์ ในปั จจุบนั จะเลื อกใช้
LCD ในการแสดงผลเป็ นส่ วนใหญ่ เช่ น เครื่ องคิดเลข นาฬิ กา เครื่ องมือวัดแบบตัวเลข และอื่นๆอี ก
มากมาย ซึ่ง LCD สามารถแบ่งได้ 3 แบบคือ
1. Segment display ชนิด LCD module
2. Character LCD module
3. Graphic LCD module

ส่ วนประกอบหลักของจอผลึกเหลว (LCD) ภายในประกอบด้วยส่ วนหลัก 3 ส่ วนด้วยกันคือ


1. ตัวแสดงผล (Display) เป็ นตัวแสดงผลให้เราได้มองเห็น ในลักษณะการปิ ดและเปิ ดกับแสง
ก็คือส่ วนที่เป็ นตัวกระจกบรรจุผลึกเหลว
2. ตัวขับ (Driver) เป็ นตัวรับสัญญาณจากตัวควบคุ มมาขับให้ตวั แสดงผลแสดงข้อมูลตามที่
กาหนด
3. ตัวควบคุม (Controller) เป็ นตัวรับข้อมูลจากอุปกรณ์ภายนอก มาควบคุมการทางานของตัว
LCD Module เบอร์ที่นิยมใช้คือ
- HD4478 ใช้ควบคุม Character LCD module
- HD61830ใช้ควบคุม Graphic LCD module
ใบงานนี้ใช้งาน LCD แบบ Character LCD module ขนาด 16 ตัวอักษร 2 บรรทัดมีตวั ควบคุมจึงเป็ น
เบอร์ HD4478 รายละเอียดการทางานของขาต่าง ๆ ของ LCD เป็ นดังตารางที่ 7.20-1

ตารางที่ 7.20-1 รายละเอียดการทางานของขาต่าง ๆ ของ LCD แบบ Character LCD module


ลาดับขา ชื่อขา รายละเอียดการทางานของขา
1 VSS GND(0V)
2 VDD Power supply for Logic (+5V)
3 V0 Power supply for LCD drive
4 RS Register selection (H: Data register, L: Instruction register)
5 R/W Read/write selection (H: Read, L: Write)
6 E Enable signal for LCM
7~14 DB0~DB7 Data bus line
15 LEDA Power supply for backlight(+5V)
16 LEDK Power supply for backlight(0V)
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 427

6. การดาเนินการสร้ างวงจร
การสร้ า งวงจรแสดงผลจอผลึ ก เหลว (ต่อไปนี้ ใช้คาว่า LCD แทนจอแสดงผลผลึ ก เหลว) ใน
ใบงานนี้เป็ นการสร้างวงจรต่อพ่วงที่ตอ้ งใช้แผ่นวงจรพิมพ์เอนกประสงค์แผ่นใหม่ วงจรใช้อุปกรณ์หลัก
2 รายการประกอบด้วยจอ LCD ขนาด 16 ตัวอักษร 2 บรรทัดและโพเทนทิโอมิเตอร์ ขนาด 10 k สาหรับ
ปรับความคมชัดหน้าจอ วงจรสมบูรณ์เป็ นดังรู ปที่ 7.20-1

รู ปที่ 7.20-1 วงจรสมบรู ณ์สาหรับการทดลอง

วงจรแสดงผล LCD ที่สร้างใช้แผ่นวงจรพิมพ์คนละแผ่นกับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.20-2

รู ปที่ 7.20-2 ส่ วนของวงจรหลักและวงจรแสดงผลจอ LCD ที่แยกคนละแผ่นวงจรพิมพ์


428 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ให้นกั ศึกษาประกอบวงจรแสดงผลจอ LCD ลงในแผงวงจรเอนกประสงค์แผ่นใหม่ โดยให้วาง
แผนการจัดวางให้คอนเน็คเตอร์ ตรงกับคอนเน็คเตอร์ พอร์ ต 0 และพอร์ ต 2 ของวงจรหลักเพื่อสะดวกใน
การเชื่อมต่อ แนวทางการจัดวางตลอดการบัดกรี วงจรเป็ นดังรู ปที่ 7.20-3

รู ปที่ 7.20-3 (a) วงจรแสดงผลจอผลึกเหลว (LCD) (b) แนวทางจัดวาง

การทางานของวงจร
วงจรรู ปที่ 7.20-3 (a) เป็ นวงจรต่อพ่วงสาหรับวงจรแสดงผลจอ LCD ซึ่ งวงจรนี้ ใช้ LCD ขนาด
16 ตัวอักษร 2 บรรทัด และมีตวั ต้านทานปรับค่าได้เป็ นตัวปรับความคมชัด วงจรต่อใช้งานสาหรับการ
ทดลองการเชื่อมต่อแบบ 8 บิต และสามารถใช้งานสาหรับการทดลองการเชื่อมต่อแบบ 4 บิตได้เช่นกัน

การดาเนินการสร้ างวงจร
1. จัดวางอุปกรณ์ตาแหน่งที่เหมาะสมโดยใช้พ้นื ที่วา่ งที่มีอยู่
2. บัดกรี เชื่อมต่ออุปกรณ์ต่าง ๆ ให้ได้ตามวงจรในรู ปที่ 7.20-3

7. การทดสอบการทางานของวงจร
การทดสอบวงจรแสดงผลจอ LCD ซึ่ งเป็ นวงจรเอาต์พุตพอร์ ตให้นกั ศึกษาทาการทดสอบการ
ทางานของวงจรใน 2 ขั้นตอน
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 429
ขั้นตอนที่หนึ่ง ทดสอบการทางานของวงจรทางฮาร์ ดแวร์ โดยต่อเชื่ อมกับวงจรไมโครคอนโทรลเลอร์
เฉพาะส่ วนของไฟเลี้ยง 5 โวลต์และ 0 โวลต์ดงั รู ปที่ 7.20-4 ทาการปรับโพเทนทิโอมิเตอร์ (ตัวต้านทาน
ปรั บ ค่ า ได้) ทวนเข็ ม สุ ด และตามเข็ ม สุ ด ผลที่ ไ ด้จะสั ง เกตเห็ นส่ วนแสดงผลในแต่ ล ะต าแหน่ ง ของ
ตัวอักษรเรื องขึ้นและจางหายไป หากปรับแล้วไม่มีการเปลี่ยนแปลงใดให้ทาการตรวจสอบแก้ใข

7805
103

16

16
AT89S52

รู ปที่ 7.20-4 การต่อเชื่อมกับวงจรไมโครคอนโทรลเลอร์ เพื่อทดสอบทางฮาร์ดแวร์

ขั้นตอนทีส่ อง ทดสอบการทางานของวงจรทางซอฟท์แวร์ ดาเนินการดังนี้


1. ต่อเชื่ อมวงจรแสดงผลจอ LCD กับวงจรไมโครคอนโทรลเลอร์ ดงั รู ปที่ 7.20-5
7805
103

16

16

AT89S52
1

รู ปที่ 7.20-5 ต่อเชื่ อมวงจรแสดงผลจอ LCD กับวงจรไมโครคอนโทรลเลอร์


430 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
2. เขียนโปรแกรมเพื่อทดสอบการทางานของ LCD โดยใช้โปรแกรม Keil uVision ดังนี้
2.1 เขียนโปรแกรม Header file โดยบันทึกเป็ น lcd8.h ดังนี้
#define LCD_clear() LCD_command(0x1) // Clear display LCD
#define LCD_origin() LCD_command(0x2) // Set to origin LCD
#define LCD_row1() LCD_command(0x80) // Begin at Line 1
#define LCD_row2() LCD_command(0xC0) // Begin at Line 2
sbit LCD_en = P2^7;
sbit LCD_rs = P2^6;
void LCD_delay(unsigned char ms);
void LCD_enable();
void LCD_command(unsigned char command);
void LCD_putc(unsigned char ascii);
void LCD_puts(unsigned char *lcd_string);
void LCD_init();
void LCD_delay(unsigned char ms)
{
unsigned char n;
unsigned int i;
for (n=0; n<ms; n++)
{
for (i=0; i<10; i++)
{i=i;}
}
}
void LCD_enable()
{
LCD_en = 1;
LCD_delay(10);
LCD_en = 0;
}
void LCD_command(unsigned char command)
{
LCD_rs = 0; // Clear for COMMAND
P0 =command;
LCD_enable();
LCD_delay(10);
}
void LCD_putc(unsigned char ascii)
{
LCD_rs = 1; // Set for DATA
P0 =ascii;
LCD_enable();
LCD_delay(10);
}
void LCD_puts(unsigned char *lcd_string)
{
while (*lcd_string)
{
LCD_putc(*lcd_string++);
}
}
void LCD_init()
{
LCD_delay(256); //delay wait LCD is ready
LCD_en = 0;
LCD_rs = 0;
LCD_command(0x38); //Function set 8bit,2line,5x7
LCD_command(0x0C); //DisplayON,CursorOFF,BlinkOFF
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 431
LCD_command(0x06); //Entry Mode look like Word
LCD_command(0x01); //Clear SCREEN
LCD_delay(256);
}

2.2 เขียนโปรแกรมหลัก ดังนี้


#include<reg52.h>
#include<lcd8.h>
void main(void)
{
LCD_init();
LCD_row1();
LCD_puts("Hello MCS-51");
LCD_row2();
LCD_puts("Microcontroller");
while(1)
{}
}

3. คอมไพล์เพื่อให้ได้ไฟล์ภาษาเครื่ อง (HEX file)


4. นาไฟล์ภาษาเครื่ องที่ได้อดั ลงชิพซีพียู
5. สังเกตผลที่ได้หากวงจรทางานตามปกติ LCD จะแสดงข้อความ “Hello MCS-51” ในแถวที่
1 และแสดง “Microcontroller” ในแถวที่ 2 หากการแสดงผลผิ ด เพี้ ย นไปจากที่ ก ล่ า วให้
ดาเนินการแก้ไข

8. สรุปผลการปฏิบัติงาน
432 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบหลังเรียน ใบงานที่ 7.20


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. LCD ในงานไมโครคอนโทรลเลอร์ แบ่งได้กี่ 5. ขาควบคุมใดขณะใช้งานสามารถต่อลงกราวด์
แบบ ได้โดยตรง
ก. 1 แบบ ก. RS
ข. 2 แบบ ข. E
ค. 3 แบบ ค. VO
ง. 4 แบบ ง. R/W
จ. 5 แบบ จ. CS
2. ตัวควบคุมสาหรับ LCD ชนิดตัวอักษรนิยมใช้ 6. แรงดันไฟเลี้ยง LCD มีค่าเท่าใด
เบอร์ใด ก. 3.3 V
ก. TIP2955 ข. 5 V
ข. HD4478 ค. 9 V
ค. HD61830 ง. 12 V
ง. ULN2803 จ. 15 V
จ. ULN2003 7. LCD ชนิดที่มีแสงส่ องด้านหลังใช้แรงดันขับ
3. ตัวควบคุมสาหรับ LCD ชนิดกราฟฟิ กนิยมใช้ แหล่งกาเนิดแสงกี่โวลต์
เบอร์ใด ก. 3.3 V
ก. TIP2955 ข. 5 V
ข. HD4478 ค. 9 V
ค. HD61830 ง. 12 V
ง. ULN2803 จ. 15 V
จ. ULN2003 8. โพเทนทิโอมิเตอร์ที่ใช้ในการปรับความคมชัด
4. ขาที่ใช้ปรับความคมชัดของ LCD คือขาใด ใช้ค่าเท่าใด
ก. RS ก. 2.5 k
ข. R/W ข. 5 k
ค. VDD ค. 10 k
ง. VO ง. 15 k
จ. VSS จ. 20 k
ใบงานที่ 7.20 การสร้างวงจรแสดงผลจอผลึกเหลว (LCD) 433
9. LCD ที่ใช้ในใบงานมีขนาดเท่าใด
ก. 16 ตัวอักษร 1 บรรทัด
ข. 16 ตัวอักษร 2 บรรทัด
ค. 20 ตัวอักษร 1 บรรทัด
ง. 20 ตัวอักษร 2 บรรทัด
จ. 40 ตัวอักษร 2 บรรทัด
10. การจัดวางคอนเน็คเตอร์ ในวงจรต่อพ่วง LCD ต้องคานึงถึงข้อใดเป็ นอันดับแรก
ก. ตาแหน่งของขา LCD
ข. ตาแหน่งของขาพอร์ ตไมโครคอนโทรลเลอร์
ค. ตาแหน่งคอนเน็คเตอร์ ของวงจรหลัก
ง. พื้นที่ใช้สอยที่เหลือ
จ. ตาแหน่งของไฟเลี้ยงวงจร

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. ก 3. ข 4. ค 5. ข 6. ง 7. ข 8. ข 9. จ 10. ข

เฉลยแบบทดสอบหลังเรี ยน
1. ค 2. ข 3. ค 4. ง 5. ง 6. ข 7. ข 8. ค 9. ข 10. ค
ใบงานที่ 7.21
การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD)
1. จุดประสงค์ ทวั่ ไป
เพื่อศึกษาการเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD)

2. จุดประสงค์ เชิงพฤติกรรม
1. พิมพ์คาสัง่ ได้อย่างถูกต้อง
2. เขียนแผนผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
3. เขียนโปรแกรมจากผังงานของโปรแกรมในแบบฝึ กหัดที่มอบหมายได้
4. ทดลองโดยวิธีการจาลองการทางานด้วยโปรแกรม Proteus ได้
5. ทดลองจากวงจรจริ งที่สร้างขึ้นได้
6. ปฏิบตั ิงานตามใบงานเสร็ จทันเวลาที่กาหนด

3. เครื่ องมือและอุปกรณ์
1. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.2 (วงจรไมโครคอนโทรลเลอร์ )
2. วงจรโปรแกรมตัวเองใบงานที่ 7.3
3. แผ่นวงจรพิมพ์เอนกประสงค์ใบงานที่ 7.20 (วงจรต่อพ่วง)
4. แหล่งจ่ายไฟกระแสตรงภายนอก

4. ลาดับขั้นการปฏิบัติงาน
1. ศึกษาจุดประสงค์ทวั่ ไปจุดประสงค์เชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวข้อง
2. ดาเนินการทดลอง
3. สรุ ปผลการปฏิบตั ิงาน
4. ดาเนินการในงานที่มอบหมาย
436 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบทดสอบก่อนเรียน ใบงานที่ 7.21


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. การเชื่อมต่อบัสข้อมูลกับ LCD สามารถทาได้ 5. หากใส่ ขอ้ ความเกินในบรรทัดแรกข้อความ
กี่แบบ ส่ วนเกินจะปรากฏในบรรทัดใด
ก. 1 แบบ ก. 2
ข. 2 แบบ ข. 3
ค. 3 แบบ ค. 4
ง. 4 แบบ ง. 5
จ. 5 แบบ จ. 6
2. การเชื่อมต่อแบบ 4 บิตจะต่อใช้บิตใดในการ 6. LCD 16x2 ที่ใช้จาลองการทางานใน
เชื่อมต่อ โปรแกรม Proteus ใช้ชื่อว่าอะไร
ก. D0-D3 ก. LCD16x2
ข. D1-D4 ข. LCD16CHAR2LN
ค. D2-D5 ค. LM016L
ง. D3-D6 ง. LM1602
จ. D4-D7 จ. LN16L2
3. หน่วยความจาใน LCD ที่ใช้เก็บข้อมูลเพื่อ 7. ขั้นตอนแรกก่อนใช้งาน LCD เรี ยกว่าอะไร
แสดงผลคือข้อใด ก. Introduction
ก. CGROM ข. Integer
ข. DDRAM ค. Innovation
ค. DR ง. Interview
ง. IR จ. Initialize
จ. IO 8. รหัสคาสั่งที่ใช้ลา้ งหน้าจอ LCD คือข้อใด
4. แอดเดรสของ DDRAM แถวที่สองของ LCD ก. 0x01
เริ่ มที่ตาแหน่งใด ข. 0x02
ก. 10H ค. 0x80
ข. 20H ง. 0xC0
ค. 30H จ. 0xE0
ง. 40H
จ. 50H
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 437
9. สัญญาณ enable ที่ตอ้ งส่ งให้กบั LCD มีลกั ษณะใด
ก. พัลส์บวก
ข. พัลส์ลบ
ค. ขอบสัญญาณขาขึ้น
ง. ขอบสัญญาณขาลง
จ. สัญญาณที่มีลอจิกตรงข้ามกับสถานะเดิม
10. เมื่อต้องการแสดงข้อความในตาแหน่งแรกของบรรทัดแรกต้องส่ งรหัสคาสัง่ ใดให้กบั LCD
ก. 0x00
ข. 0x10
ค. 0x20
ง. 0x40
จ. 0x80
438 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

5. ทฤษฎีพืน้ ฐาน
จอแสดงผลผลึกเหลว (ต่อไปนี้ใช้คาว่า LCD แทนจอแสดงผลผลึกเหลว) ที่ใช้ในการทดลองเป็ น
แบบ Character LCD มีตวั ควบคุมเบอร์ HD4478 ซึ่งการแสดงผลหน้าจอทั้งตัวอักษรและสัญลักษณ์ใด ๆ
นั้นจะมีรูปแบบตัวอักษรและสัญลักษณ์ บรรจุไว้ภายในแล้ว เพียงแต่ผูใ้ ช้งานเขียนโปรแกรมดึ งขึ้นมา
แสดงผลที่หน้าจอตามตาแหน่งที่ตอ้ งการ ในการใช้งานสามารถต่อใช้งานได้ 2 แบบคือ 4 บิต (D7-D4)
และ 8 บิต (D7-D0) การต่อใช้งานแบบ 4 บิตข้อมูลที่ส่งให้ LCD ในครั้งแรกเป็ นข้อมูลใน 4 บิตบนและ
ข้อมูลที่ส่งครั้งถัดมาเป็ น 4 บิตล่าง โครงสร้างภายในของไอซี HD4478 เป็ นดังรู ปที่ 7.21-1
CL
Address Timing generation
7 CL
Register (IR)

counter(AC) circuit
Instruction

Instruction
decoder

M
7 7

Common signal driver


16 bit Shift Register
RS 8
8 7
R/W 16 16
I/O Buffer

Display data COM1~ Com14


E RAM
7 (DD RAM)
4
80x8 bit
control circuit
DB4~DB7
Cursor blink
Register (DR)

8
4 8 8
DATA

DB0~DB3 7
8 8
Segment signal driver
40 bit latch circuit

Character generator Character generator


RAM ROM
40
(CG RAM) (CG ROM) 40 SEG1 ~ SEG40
512 bit 7200 bit
busy 5 5
flag 40
Parallel/seial data conversion circuit
(Parallel data Serial data) 40 bit shift register D

รู ปที่ 7.21-1 แสดงโครงสร้างภายในตัวควบคุม HD4478

หน้าที่ของส่ วนประกอบภายในตัวควบคุม HD4478 มีดงั นี้


1. บัฟเฟอร์ อินพุท-เอาท์ พุท (I/O Buffer) เป็ นส่ วนที่ใช้ในการติดต่อข้อมูลจากภายนอก เพื่อที่จะ
รับส่ งข้อมูลกับตัวควบคุม
2. รีจิสเตอร์ คาสั่ ง (Instruction Register: IR) เป็ นรี จิสเตอร์ ที่ใช้รับข้อมูลคาสั่งจากภายนอก
3. รี จิสเตอร์ ข้อมูล (Data Register: DR) เป็ นรี จิสเตอร์ ที่ใช้รับข้อมูลแสดงผลจากอุปกรณ์ภายนอก
เพื่ อ ส่ งต่ อ ให้ ห น่ ว ยความจ าเก็ บ ข้ อ มู ล แสดงผล หรื อน าไปสร้ า งตั ว อัก ษรเพิ่ ม เติ ม ใน
หน่วยความจาเก็บตัวอักษร
4. หน่ ว ยความจ าเก็ บ ข้ อ มู ล แสดงผล (Display Data RAM: DD RAM) เป็ นหน่ ว ยความจ าเก็ บ
ตาแหน่งตัวอักษรที่ใช้แสดงผลหน้าจอ ซึ่ งการทางาน ตัวควบคุ มจะนาค่าจาก DDRAM ไปเปิ ด
ตารางจาก CGROM (Look-up table) เพื่อนาไปแสดงผลที่หน้าจอ แอดเดรสของ DDRAM เป็ น
ดังรู ป 7.21-2
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 439
1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 ... 78 79 80 ตาแหน่งตัวอักษร (dec)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 ... 4D 4E 4F แอดเดรส DDRAM(Hex)

1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 ... 38 39 40 ตาแหน่งตัวอักษร (dec)


00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 ... 25 26 27 แอดเดรส DDRAM แถว 1 (Hex)

40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 ... 65 66 67 แอดเดรส DDRAM แถว 2 (Hex)

รู ปที่ 7.21-2 แสดงแอดเดรส DDRAM ของ LCD

จากรู ป 7.21-2 เป็ นแอดแดรสของตัวอัก ษรที่แสดงบนจอ LCD ซึ่ ง LCD ในแต่ ละขนาดจะมี
แอดเดรสของจานวนตัวอักษรต่อบรรทัดแตกต่างกันไป ซึ่ งในบางขนาดมีจานวนอักษรต่อบรรทัดน้อย
กว่าตาแหน่งที่มีอยูจ่ ริ ง ดังนั้นการแสดงผลจะแสดงให้มองเห็นไม่ครบในทุกแอดเดรส โดยแอดเดรสของ
DDRAM ของจอ LCD ในแต่ละขนาดเป็ นดังนี้

แอดเดรส DDRAM ของ LCD ขนาด 16 ตัวอักษร 1 แถว เมื่อเซตเป็ น 1 แถว (N=0) จะเป็ นดังรู ปที่ 7.21-3
0C
0D
0A
0B

0E
0F
00
01
02
03
04
05
06
07
08
09

รู ปที่ 7.21-3 แอดเดรส DDRAM ของ LCD ขนาด 16x1 เมื่อเซตให้แสดงแดงแบบ 1 แถว

แอดเดรส DDRAM ของ LCD ขนาด 16 ตัวอักษร 1 แถว เมื่อเซตเป็ น 2 แถว (N=1) จะได้เสมือน 8 ตัวอักษร
2 แถวที่วางเรี ยงกันดังรู ปที่ 7.21-4
00
01
02
03
04
05
06
07
40
41
42
43
44
45
46
47

รู ปที่ 7.21-4 แอดเดรส DDRAM ของ LCD ขนาด 16x1 เมื่อเซตให้แสดงแดงแบบ 2 แถว

แอดเดรส DDRAM ของ LCD ขนาด 16 ตัวอักษร 2 แถว จะเป็ นดังรู ปที่ 7.21-5
0C
0D
0A
0B

0E
0F
00
01
02
03
04
05
06
07
08
09

4C
4D
4A
4B

4E
4F
40
41
42
43
44
45
46
47
48
49

รู ปที่ 7.21-5 แอดเดรส DDRAM ของ LCD ขนาด 16x2


440 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แอดเดรส DDRAM ของ LCD ขนาด 20 ตัวอักษร 2 แถว จะเป็ นดังรู ปที่ 7.21-6

0C
0D
0A
0B

0E
0F
00
01
02
03
04
05
06
07
08
09

10
11
12
13
4C
4D
4A
4B

4E
4F
40
41
42
43
44
45
46
47
48
49

50
51
52
53
รู ปที่ 7.21-6 แอดเดรส DDRAM ของ LCD ขนาด 20x2

แอดเดรส DDRAM ของ LCD ขนาด 16 ตัวอักษร 4 แถว แอดเดรสของแถวที่ 3 จะเป็ นการนาแอดเดรส
ในตาแหน่งที่ 17 ของแถวที่ 1 มาเป็ นแอดเดรสแรกของแถวที่ 3 และแอดเดรสของแถวที่ 4 จะเป็ นการนา
แอดเดรสในตาแหน่งที่ 17 ของแถวที่ 2 มาเป็ นแอดเดรสแรกของแถวที่ 4 จะเป็ นดังรู ปที่ 7.21-7

0C
0D
0A
0B

0E
0F
00
01
02
03
04
05
06
07
08
09

4C
4D
4A
4B

4E
4F
40
41
42
43
44
45
46
47
48
49

1C
1D
1A
1B

1E
1F
10
11
12
13
14
15
16
17
18
19

5C
5D
5A
5B

5E
5F
50
51
52
53
54
55
56
57
58
59

รู ปที่ 7.21-7 แอดเดรส DDRAM ของ LCD ขนาด 16x4

ดังนั้นถ้าใช้งาน LCD 16x4 จะต้องให้ขอ้ ความแสดงได้ไม่เกิน 16 ตัวอักษร ซึ่ งหากเกินข้อความจะ


ไปปรากฏในบรรทัดอื่นในตาแหน่งแอดเดรสต่อเนื่ องจากตาแหน่ งสุ ดท้ายของบรรทัดแรก เช่ น ให้แสดง
ข้อความ “Hello Microcontroller MCS-51” ซึ่ งเป็ นข้อความในบรรทัดแรกจะล้นไปยังบรรทัดที่ 3 เนื่องจาก
แอดเดรส DDRAM ของตัวอักษรแรกบรรทัดที่ 3 เป็ นแอดเดรสต่อจากแอดเดรส DDRAM ของตัวอักษรตัว
สุ ดท้ายของบรรทัดแรก ผลที่ได้จะเป็ นดังรู ปที่ 7.21-8

รู ปที่ 7.21-8 ผลที่ได้เมื่อป้ อนข้อมูลเกินบรรทัด ของ LCD ขนาด 16x4


ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 441
แอดเดรส DDRAM ของ LCD ขนาด 20 ตัวอักษร 4 แถว จะเป็ นดังรู ปที่ 7.21-9

0C
0D
0A
0B

0E
0F
00
01
02
03
04
05
06
07
08
09

10
11
12
13
4C
4D
4A
4B

4E
4F
40
41
42
43
44
45
46
47
48
49

50
51
52
53
1C
1D
1A
1B

1E
1F
14
15
16
17
18
19

20
21
22
23
24
25
26
27
5C
5D
5A
5B

5E
5F
54
55
56
57
58
59

60
61
62
63
64
65
66
67
รู ปที่ 7.21-9 แอดเดรส DDRAM ของ LCD ขนาด 20x4

ซึ่ งแอดเดรสแรกของแถวที่ 3 และแถวที่ 4 เป็ นเช่ นเดียวกับ LCD 16x4 คือเป็ นแอดเดรสต่อจาก
2 แถวแรก ดังนั้นในการใช้งาน ถ้าให้แสดงข้อความเกิ น 20 ตัวอักษรในแถวแรก ตัวอักษรที่เกิ นมาจะ
ปรากฏในบรรทัดที่ 3 ซึ่ งถ้าให้แสดงข้อความเช่นเดียวกับ LCD 16x4 คือข้อความ “Hello Microcontroller
MCS-51” ผลที่ได้จะเป็ นดังรู ปที่ 7.21-10

รู ปที่ 7.21-10 ผลที่ได้เมื่อป้ อนข้อมูลเกินบรรทัด ของ LCD ขนาด 20x4

5. หน่ วยความจาเก็บตัวอักษรชนิดแรม (Character generator RAM: CGRAM) เป็ นหน่วยความจา


ที่เก็บตัวอักษร ซึ่งผูใ้ ช้งานสามารถสร้างได้ 8 ตัวอักษร ที่ตาแหน่ง 00H-0FH
6. แฟลกแจ้ งสถานะของการทางาน (Busy flag) เป็ นแฟลกที่ทาหน้าที่แจ้งสถานการทางานของตัว
ควบคุมให้แก่อุปกรณ์ภายนอก
7. ขาต่ อใช้ งาน LCD Module ที่ใช้ในบทนี้มีขาใช้งานทั้งสิ้ น 14 ขา โดยที่แต่ละขามีหน้าที่ต่าง ๆ
ดังนี้ตารางที่ 7.21-1

ตารางที่ 7.21-1 หน้าที่ของขาต่าง ๆ ของจอผลึกเหลว


ขาที่ ชื่อ หน้าที่
1 VSS ต่อกราวด์
2 VDD ต่อไฟเลี้ยง 5 โวลต์
3 VO เป็ นขาอินพุทใช้ปรับความเข้มของการแสดงผล
442 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ตารางที่ 7.21-1 หน้าที่ของขาต่าง ๆ ของจอผลึกเหลว (ต่อ)


ขาที่ ชื่อ หน้าที่
4 RS เป็ นขาอินพุทใช้แยกประเภทของข้อมูลที่เข้ามา
“0” ข้อมูลที่รับเข้ามาเป็ นคาสั่งควบคุม
“1” ข้อมูลที่รับเข้ามาเป็ นข้อมูลแสดงผล
5 R/W เป็ นขาอินพุทใช้เลือกการอ่านหรื อเขียนข้อมูลกับ LCD
“0” กาหนดให้เขียนข้อมูลลง LCD ( LCD รับข้อมูลเข้า)
“1” กาหนดให้อ่านข้อมูลจาก LCD ( LCD ส่ งข้อมูลออก)
6 E เป็ นขา Enable LCD ( กระตุน้ LCD ให้รับ-ส่ งข้อมูล)
7-14 D0-D7 เป็ นขาที่ใช้เป็ นทางผ่านของข้อมูล

คาสั่ งทีใ่ ช้ กบั LCD


คาสั่งที่ใช้กบั LCD มีรายละเอียดดังนี้
1. คาสั่ งล้างหน้ าจอ (Clear display)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1
เป็ นค าสั่ ง ที่ เ ขี ย นช่ อ งว่า ง (20H) เข้า ไปใน DDRAM ทั้ง หมด และท าการก าหนดต าแหน่ ง ของ
DDRAM เป็ น 00 และตัวเคอร์ เซอร์ จะกลับไปอยู่ตาแหน่งบนสุ ดด้านซ้ายมือของจอ แล้วจะทาการ
เซตบิต I/D=1

2. คาสั่ งกลับไปยังตาแหน่ งบนสุ ดด้ านซ้ ายมือของจอ (Return home)


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 1 *
เป็ นคาสั่งให้ตวั เคอร์ เซอร์ จะกลับ ไปอยู่ตาแหน่ ง บนสุ ดด้านซ้า ยมื อของจอ แต่ ขอ้ มู ล บนจอยังคง
ข้อความเดิม

3. คาสั่ งเลือกโหมดป้ อนข้ อมูล (Entry mode)


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 I/D S

เป็ นคาสัง่ เลือกโหมดการป้ อนข้อมูลโดยกาหนดที่บิตดังนี้


ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 443
บิต I/D เป็ นตัวกาหนดว่าเมื่อเขียนหรื ออ่านข้อมูลแล้วแอดเดรสของ DDRAM จะเพิ่มขึ้นหรื อลดลง
- I/D= “0” แอดเดรส DDRAM จะลดลง
- I/D= “1” แอดเดรส DDRAM จะเพิ่มขึ้น
บิต S เป็ นตัวกาหนดลักษณะการแสดงผล เมื่อมีการป้อนข้อมูล
- S= “0” ตัวอักษรเดิมจะอยูก่ บั ที่ตวั เคอร์ เซอร์ (รอตัวใหม่) จะถูกดันไปด้วยขวามือ
- S= “1” ตัวเคอร์เซอร์ (รอตัวใหม่) จะอยูก่ บั ที่ตวั อักษรเดิมจะถูกดันไปซ้ายมือ
โดยจะได้รูปแบบการแสดงผลดังตารางที่ 7.21-2 เมื่อส่ งข้อความ “ MCS51” เรี ยงตามลาดับ

ตารางที่ 7.21-2 ผลการแสดงจากใช้คาสั่งโหมดการป้ อนข้อมูล


CODE ยังไม่ส่ง ส่ งตัว “M” ส่ งตัว “C” ส่ งตัว “S” ส่ งตัว “5” ส่ งตัว “1”

04 _ _M _ CM _ SCM _ 5 SCM _ 1 5 SCM

05 _ _M _ CM _ SCM _ 5 SCM _ 1 5 SCM

06 _ M_ MC_ MCS_ MCS5 _ MCS5 1 _

07 _ M_ MC_ MCS_ MCS5 _ MCS5 1 _

ดังนั้นเมื่อใช้งานจริ ง โหมดป้ อนข้อมูล (Entry mode) จะนิยมใช้กนั 2 โหมดคือ


- โหมดแสดงข้อความเหมือนกับการใช้งานโปรแกรมพิมพ์เอกสาร CODE 06
- โหมดแสดงข้อความเหมือนกับการใช้งานเครื่ องคิดเลข CODE 07

4. คาสั่ งควบคุมการแสดงผล (Display on/off control)


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 D C B

D ใช้ควบคุมการปิ ดเปิ ดหน้าจอ


“0” ปิ ดหน้าจอแสดงผล
“1” เปิ ดหน้าจอแสดงผล
C ใช้ควบคุมตัวเคอร์ เซอร์
“0” ไม่แสดงตัวเคอร์ เซอร์
“1” แสดงตัวเคอร์เซอร์
444 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
B ใช้ควบคุมการกระพริ บของตัวเคอร์เซอร์
“0” ไม่กระพริ บ
“1” กระพริ บ โดยมีระยะเวลาการกระพริ บประมาณ 379.2 mS

5. คาสั่ งควบคุมการเลื่อนเคอร์ เซอร์ และข้ อมูลตัวอักษร (Cursor or display shift)


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 1 S/C R/L * *
ใช้ควบคุมการเลื่อนเคอร์เซอร์และตัวอักษรบนจอ LCD โดยมีลกั ษณะดังตารางที่ 7.21-3

ตารางที่ 7.21-3 ค่าลอจิกที่ใช้ควบคุมการเลื่อนเคอร์ เซอร์


S/C R/L ลักษณะของการเลื่อน
0 0 เลื่อนเคอร์เซอร์ไปทางซ้าย 1 ตาแหน่ง
0 1 เลื่อนเคอร์เซอร์ไปทางขวา 1 ตาแหน่ง
1 0 เลื่อนตัวอักษรที่เกิดใหม่ไปทางซ้าย 1 ตาแหน่ง
1 1 เลื่อนตัวอักษรที่เกิดใหม่ไปทางขวา 1 ตาแหน่ง

6. คาสั่ งกาหนดฟังก์ชันการทางาน (Function Set)


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 1 DL N F * *
DL ใช้กาหนดจานวนบิตที่ใช้ในการติดต่อบัสข้อมูล
“0” เป็ นการติดต่อแบบ 4 บิต (D7-D4)
“1” เป็ นการติดต่อแบบ 8 บิต
N ใช้กาหนดจานวนบรรทัดของจอ LCD
“0” LCD แบบ 1 บรรทัด
“1” LCD แบบ 2 บรรทัด (และใช้กบั LCD ที่มากกว่า 2 บรรทัด)
F กาหนดความละเอียดของตัวอักษรของ LCD
“0” เป็ นการแสดงผลแบบ 5x7
“1” เป็ นการแสดงผลแบบ 5x10
7. คาสั่ งกาหนดแอดเดรสของ CGRAM (Set CGRAM address)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 1 CGRAM Address
เป็ นการกาหนดแอดเดรสของ CGRAM ก่อนที่จะทาการอ่านหรื อเขียนข้อมูล
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 445
8. คาสั่ งกาหนดแอดเดรสของ DDRAM (Set DDRAM address)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 DDRAM Address
เป็ นคาสั่งกาหนดแอดเดรสใน DDRAM ก่อนที่จะทาการอ่านหรื อเขียนข้อมูล (DDRAM คือส่ วนที่
แสดงผลหน้าจอ) โดยจานวนแอดเดรสขึ้นอยูก่ บั การตั้งค่า N ด้วย โดยถ้า
- N= “0” (1 บรรทัด) แอดเดรสของ DDRAM อยูใ่ นช่วง 00H-4FH
- N= “1” (2 บรรทัด) แอดเดรสของ DDRAM อยูใ่ นช่วง 00H-27H ในบรรทัดแรกและ 40H-
67H ในบรรทัดที่ 2

9. คาสั่ งอ่านแฟลก Busy (ยังไม่พร้อม) และแอดเดรส


RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 BF Address
เป็ นคาสั่งอ่าน Busy Flag โดยถ้าอ่านมาแล้ได้ค่า
- BF= “0” แสดงว่า LCD กาลังประมวลผลภายในอยูไ่ ม่พร้อมจะรับข้อมูลใหม่
- BF= “1” แสดงว่า LCD ว่างแล้วพร้อมจะรับข้อมูลใหม่ได้
แอดเดรส (DB0-DB6) เป็ นค่าแอดเดรสของ CGRAM หรื อ DDRAM ที่อ่านได้

10. คาสั่ งเขียนข้ อมูลลง CGRAM หรื อ DDRAM (Write Data to CGRAM or DDRAM)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 Write data

เป็ นคาสั่งเขียนข้อมูลเข้าไปใน CGRAM หรื อ DDRAM โดยเมื่อเขียนข้อมูลเสร็ จแล้วแอดเดรสของ


หน่วยความจาดังกล่าวจะเพิ่มขึ้นหรื อลดลง 1 ตาแหน่งโดยอัตโนมัติ ตามการกาหนดใน Entry mode
การที่จะเขียนข้อมูลลงใน CGRAM หรื อ DDRAM จะต้องกาหนดแอดเดรสของหน่วยความจานั้น ๆ
ขึ้นมาก่อนที่จะเขียนข้อมูล (แอดเดรสของ CGRAM กับ DDRAM อยูค่ นละที่กนั ข้อมูลจึงไม่ทบั กัน)

11. คาสั่ งอ่ านข้ อมูลจาก CGRAM หรื อ DDRAM (Read Data from CGRAM or DDRAM)
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1 data

เป็ นคาสั่งอ่านค่าจาก CGRAM หรื อ DDRAM โดยก่อนที่จะอ่านต้องกาหนดแอดเดรสก่อน


446 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

ขั้นตอนการใช้ งานจอผลึกเหลว (LCD)


ในการที่จะให้ LCD แสดงข้อความตามต้องการนั้น ต้องส่ งคาสั่งเพื่อกาหนดลักษณะการทางาน
ของ LCD ก่อนเรี ยกกันว่าการ “Initialize” ซึ่ งเป็ นการกาหนดโหมดการทางาน แล้วจึงส่ งข้อมูลที่ตอ้ งการ
แสดง (เป็ นกระบวนการใส่ ค่าแอดเดรสของ CGROM ลงใน DDRAM)
สาหรับการเขียนหรื ออ่านข้อมูลใน DDRAM หรื อ CGRAM ต้องทาการกาหนดแอดเดรส (ส่ งค่า
แอดเดรส) ที่ตอ้ งการกระทาก่อน ในการส่ งค่าให้กบั LCD นั้น เป็ นการเขียนค่าและการรับค่าจาก LCD
เป็ นการอ่านค่า ดังนั้น จะต้องควบคุมที่ขา R/W ส่ วนการแยกกันว่าส่ งคาสั่งหรื อส่ งข้อมูล จะถูกควบคุมที่
ขา RS ทั้งนี้จะต้องกระตุน้ ที่ขา E เพื่อให้ LCD ได้กระทาตามต้องการ
ขั้นตอนการ Initialization เป็ นการก าหนดค่ า เพื่ อให้ LCD ท างานตามต้องการก่ อนที่ จะป้ อน
ข้อมูลให้กบั LCD โดยมีวธิ ี ที่แตกต่างกันสาหรับการเชื่อมต่อแบบ 8 บิต และ 4 บิต ซึ่ งการเชื่ อมต่อแบบ 4
บิตเป็ นการทยอยส่ งข้อมูลครั้งละ 4 บิต โดยครั้งแรกส่ ง 4 บิตบนครั้งถัดไปส่ ง 4 บิตล่าง ผังงานของการ
Initialization ของการเชื่อมต่อแบบ 8 บิต และ 4 บิตเป็ นดังรู ปที่ 7.21-11 และ 7.21-12 ตามลาดับ

รู ปที่ 7.21-11 ผังงานการ Initialization ของการเชื่ อมต่อแบบ 8 บิต


ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 447

รู ปที่ 7.21-12 ผังงานการ Initialization ของการเชื่ อมต่อแบบ 4 บิต

6. การดาเนินการทดลอง
ใบงานนี้ เ ป็ นการทดลองการเขี ย นโปรแกรมแสดงผลที่ จอ LCD ประเภทตัว อัก ษร โดยการ
ทดลองจะทดลองทั้งการเชื่ อมต่อแบบ 8 บิตและ 4 บิต ในช่ วงแรกจะเป็ นการทดลองโดยการเชื่ อมต่อ
แบบ 8 บิต ซึ่งวงจรสมบูรณ์ที่ใช้ทดลองเป็ นดังรู ปที่ 7.21-13
448 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

รู ปที่ 7.21-13 วงจรสมบรู ณ์สาหรับการทดลอง

การจาลองการท างานใช้โปรแกรม Proteus สาหรั บการทดลองผลของโปรแกรมใช้อุปกรณ์


อิเล็กทรอนิกส์ดงั นี้
1. ไมโครคอนโทรลเลอร์ AT89C52
2. รี ซิสเตอร์เน็ตเวิร์ก RESPACK-8
3. จอแสดงผล LCD 16x2 LM016L

รู ปที่ 7.21-14 วงจรที่ใช้จาลองการทางานด้วยโปรแกรม Proteus


ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 449
การทดลองการทางานด้วยวงจรจริ ง จะใช้แผ่นวงจรหลัก คือวงจรไมโครคอนโทรลเลอร์ และ
แผ่นวงจรต่ อพ่วงที่ ไ ด้ส ร้ า งขึ้ นแล้วในใบงานที่ 7.20 ท าการเชื่ อมต่อบอร์ ดทั้ง สองเพื่อใช้ทดลองการ
แสดงผลจอ LCD ดังรู ปที่ 7.21-15

7805
103

16

16
AT89S52

รู ปที่ 7.21-15 วงจรจริ งที่ใช้ทดลอง

การทดลองที่ 1 การทดลองการการแสดงผลที่เป็ นข้อความ โดยใช้การเชื่ อมต่อแบบ 8 บิตวงจรที่ใช้ใน


การทดลองใช้วงจรดังรู ปที่ 7.21-15

การดาเนินการทดลองมีข้ นั ตอนดังนี้
1. เขียนลาดับงาน
2. แปลงลาดับงานเป็ นผังงาน
3. แปลงผังงานเป็ นโปรแกรม
4. แปลงโปรแกรมภาษาซีเป็ นภาษาเครื่ องด้วย Keil uVision
5. จาลองการทางานด้วยโปรแกรม Proteus
6. ทดลองด้วยวงจรจริ ง

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. เขียนโปรแกรม Header file ซึ่ งเป็ นไฟล์สาหรับเก็บฟังก์ชนั่ การควบคุมการทางานของ LCD
2. เพิ่ม Header file เข้าในโปรแกรมหลัก
3. เขียนโปรแกรมแสดงข้อความบนจอผลึกเหลว
450 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

สร้าง header file 8 bit

เพิ่ม header file เข้าโปรแกรมหลัก

ส่ งข้อความออกจอ LCD

จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision ซึ่งมี 2 ไฟล์ดว้ ยกันคือ Header file และไฟล์หลัก แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
1. เขียนโปรแกรม Header file โดยบันทึกเป็ น lcd8.h ดังนี้
#define LCD_clear() LCD_command(0x1) // Clear display LCD
#define LCD_origin() LCD_command(0x2) // Set to origin LCD
#define LCD_row1() LCD_command(0x80) // Begin at Line 1
#define LCD_row2() LCD_command(0xC0) // Begin at Line 2
sbit LCD_en = P2^7;
sbit LCD_rs = P2^6;
void LCD_delay(unsigned char ms);
void LCD_enable();
void LCD_command(unsigned char command);
void LCD_putc(unsigned char ascii);
void LCD_puts(unsigned char *lcd_string);
void LCD_init();
void LCD_delay(unsigned char ms)
{
unsigned char n;
unsigned int i;
for (n=0; n<ms; n++)
{
for (i=0; i<10; i++)
{i=i;}
}
}
void LCD_enable()
{
LCD_en = 1;
LCD_delay(10);
LCD_en = 0;
}
void LCD_command(unsigned char command)
{
LCD_rs = 0; // Clear for COMMAND
P0 =command;
LCD_enable();
LCD_delay(10);
}
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 451
void LCD_putc(unsigned char ascii)
{
LCD_rs = 1; // Set for DATA
P0 =ascii;
LCD_enable();
LCD_delay(10);
}
void LCD_puts(unsigned char *lcd_string)
{
while (*lcd_string)
{
LCD_putc(*lcd_string++);
}
}
void LCD_init()
{
LCD_delay(256); //delay wait LCD is ready
LCD_en = 0;
LCD_rs = 0;
LCD_command(0x38); //Function set 8bit,2line,5x7
LCD_command(0x0C); //DisplayON,CursorOFF,BlinkOFF
LCD_command(0x06); //Entry Mode look like Word
LCD_command(0x01); //Clear SCREEN
LCD_delay(256);
}

2. เขียนโปรแกรมหลัก ดังนี้
#include<reg52.h>
#include<lcd8.h>
void main(void)
{
LCD_init();
LCD_row1();
LCD_puts("Hello MCS-51");
LCD_row2();
LCD_puts("Microcontroller");
while(1)
{}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขค่า Address DDRAM ในฟังก์ชนั่ LCD_row1(); และ LCD_row2(); โดยดูจาก
ค่าแอดเดรสของ LCD ดังที่ได้กล่าวมาแล้วข้างต้น แล้วสังเกตผล

การทดลองที่ 2 จากการทดลองครั้งที่ 1 เป็ นการแสดงผลที่เป็ นข้อความ ซึ่ งการแสดงผลเป็ นการส่ งค่า


รหัส ASCII ของตัวอักษรที่ต้องการแสดงไว้ยงั แอดเดรสของ DDRAM สาหรั บ การทดลองนี้ เป็ นการ
แสดงผลตัวเลขซึ่ งจะต้องแปลงตัวเลขที่ตอ้ งการแสดงเป็ นรหัส ASCII ในแต่ละตัวก่อนส่ งค่ารหัสไปยัง
ตาแหน่งที่ตอ้ งการแสดง เพื่อให้สะดวกในการเขียนโปรแกรมสามารถใช้ฟังก์ชนั่ sprintf ในการแปลงค่า
452 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ตัวเลขให้เป็ นรหัส ASCII ของตัวอักษรได้ ซึ่ งจะต้องเพิ่มไลบารี่ stdio.h เข้าไปยังโปรแกรมหลักเพื่อใช้
งานฟังก์ชนั่ sprintf นี้ สาหรับฟังก์ชนั่ ที่ใช้แสดงค่าตัวเลขเป็ นดังนี้
void LCD_putv(unsigned long v)
{
char buf[10],*n; // for display use sprint
n=&buf; // for display use sprint
sprintf (buf,"%lu",v);
LCD_puts(n);
}

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. เพิม่ Header file stdio.h เข้าในโปรแกรมหลัก
2. เพิ่ม Header file lcd8.h เข้าในโปรแกรมหลัก
3. เขียนโปรแกรมแสดงค่าข้อความบนจอ LCD
4. เขียนโปรแกรมแสดงค่าตัวเลขบนจอ LCD

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

เพิ่ม stdio.h เข้าโปรแกรมหลัก

เพิ่ม lcd8.h เข้าโปรแกรมหลัก

ส่ งข้อความออกจอ LCD

ส่ งตัวเลขออกจอ LCD

จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
#include<reg52.h>
#include<lcd8.h>
#include<stdio.h>
void LCD_putv(unsigned long v);
void main(void)
{
LCD_init();
LCD_row1();
LCD_puts("Test number send");
LCD_row2();
LCD_putv(1234);
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 453

while(1)
{}
}
void LCD_putv(unsigned long v)
{
char buf[10],*n;
n=&buf;
sprintf (buf,"%lu",v);
LCD_puts(n);
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขโปรแกรมให้สามารถใส่ ค่าตัวเลขที่มีจุดทศนิ ยมได้ดว้ ย แล้วสังเกตผล

การทดลองที่ 3 การทดลองการแสดงผลที่ เ ป็ นข้อความที่ มี ก ารเชื่ อมต่ อแบบ 4 บิ ตวงจรที่ ใ ช้ใ นการ


ทดลองใช้วงจรดังรู ปที่ 7.21-16

รู ปที่ 7.21-16 วงจรสมบูรณ์ที่มีการเชื่อมต่อแบบ 4 บิตที่ใช้ทดลอง

เขียนลาดับงาน สามารถเขียนลาดับงานได้ดงั นี้


1. เขียนโปรแกรม Header file ที่มีฟังก์ชนั่ ในการใช้การติดต่อกับ LCD แบบ 4 บิตซึ่ งเป็ นไฟล์
สาหรับเก็บฟังก์ชนั่ การควบคุมการทางานของ LCD
2. เพิ่ม Header file เข้าในโปรแกรมหลัก
3. เขียนโปรแกรมแสดงข้อความบนจอ LCD
454 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แปลงลาดับงานเป็ นผังงาน จากลาดับงานสามารถเขียนเป็ นผังงานได้ดงั นี้


เริ่ ม

สร้าง header file 4 bit

เพิ่ม header file เข้าโปรแกรมหลัก

ส่ งข้อความออกจอ LCD

จบ

แปลงผังงานเป็ นโปรแกรม จากผังงานสามารถเขียนเป็ นโปรแกรมภาษาซี โดยพิมพ์ลงในโปรแกรม


Keil µVision ซึ่งมี 2 ไฟล์ดว้ ยกันคือ Header file และไฟล์หลัก แล้วทาการแปลงภาษาซีเป็ นภาษาเครื่ อง
1. เขียนโปรแกรม Header file โดยบันทึกเป็ น lcd4.h ดังนี้
#define LCD_clear() LCD_command(0x1) /* Clear display LCD */
#define LCD_origin() LCD_command(0x2) /* Set to origin LCD */
#define LCD_row1() LCD_command(0x80) // Begin at Line 1
#define LCD_row2() LCD_command(0xC0) // Begin at Line 2
#define Data_port P0 // data port connection

sbit LCD_en = P2^7;


sbit LCD_rs = P2^6;
/****************** Prototype(s) ************************/
void LCD_delay(unsigned char ms);
void LCD_enable();
void LCD_command(unsigned char command);
void LCD_putc(unsigned char ascii);
void LCD_puts(unsigned char *lcd_string);
void LCD_init();
/****************** Sources *****************************/
void LCD_delay(unsigned char ms)
{
unsigned char n;
unsigned int i;
for (n=0; n<ms; n++)
{
for (i=0; i<10; i++)
{i=i;}
}
}
void LCD_enable()
{
LCD_en = 1;
LCD_delay(10);
LCD_en = 0;
}
void LCD_command(unsigned char command)
{
LCD_rs = 0; //"0" is a COMMAND
ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 455
Data_port =(command & 0xF0)|0x0F; //keep value D0-D3
LCD_enable();
Data_port =(command<<4)|0x0F; //keep value D0-D3
LCD_enable();
} void LCD_putc(unsigned char ascii)
{
LCD_rs = 1; //"1" is a DATA
Data_port =(ascii & 0xF0)|0x0F; //keep value D0-D3
LCD_rs = 1; //"1" is a DATA
LCD_enable();
Data_port =(ascii<<4)|0x0F; //keep value D0-D3
LCD_rs = 1; //"1" is a DATA
LCD_enable();
}
void LCD_puts(unsigned char *lcd_string)
{
while (*lcd_string)
{
LCD_putc(*lcd_string++);
}
}
void LCD_init()
{
LCD_delay(256); //delay wait LCD is ready
LCD_en = 0;
LCD_rs = 0;
LCD_command(0x33); //Function set
LCD_command(0x32); //Function set
LCD_command(0x28); //Function set 4bit,2line,5x7
LCD_command(0x0C); //DisplayON,CursorOFF,BlinkOFF
LCD_command(0x06); //EntryMode looklike Word
LCD_command(0x01); // Clear SCREEN
LCD_delay(256);
}

2. เขียนโปรแกรมหลัก ดังนี้
#include<reg52.h>
#include<lcd4.h>
void main(void)
{
LCD_init();
LCD_row1();
LCD_puts("Hello MCS-51");
LCD_row2();
LCD_puts("Microcontroller");
while(1)
{}
}

ทดลองการทางาน
1. จาลองการทางานด้วยโปรแกรม Proteus
2. ทดลองด้วยวงจรจริ ง
3. ทดลองแก้ไขข้อความในการแสดงผล แล้วสังเกตผล
456 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

7. สรุปผลการปฏิบัติงาน

8. งานทีม่ อบหมาย
จงเขียนโปรแกรมแสดงผลจอ LCD โดยใช้วงจรที่มีการเชื่ อมต่อแบบ 4 บิต ให้แสดงผลสถานะ
ของสวิตช์จานวน 2 ตัว (การทดลองจริ งใช้สายจั้มลงกราวด์แทนการกดสวิตช์) วงจรที่ใช้ดงั รู ปที่ 7.17-17

รู ปที่ 7.21-17 วงจรที่ใช้ในการทดลองในงานที่ได้รับมอบหมาย


ใบงานที่ 7.21 การเขียนโปรแกรมแสดงผลจอผลึกเหลว (LCD) 457

แบบทดสอบหลังเรียน ใบงานที่ 7.21


คาสั่ ง ให้นกั ศึกษาเลือกคาตอบที่ถูกต้องที่สุดเพียงคาตอบเดียว
1. หน่วยความจาใน LCD ที่ใช้เก็บข้อมูลเพื่อ 5. แอดเดรสของ DDRAM แถวที่สองของ LCD
แสดงผลคือข้อใด เริ่ มที่ตาแหน่งใด
ก. DDRAM ก. 10H
ข. CGROM ข. 20H
ค. DR ค. 30H
ง. IR ง. 40H
จ. IO จ. 50H
2. การเชื่อมต่อบัสข้อมูลกับ LCD สามารถทาได้ 6. LCD 16x2 ที่ใช้จาลองการทางานใน
กี่แบบ โปรแกรม Proteus ใช้ชื่อว่าอะไร
ก. 1 แบบ ก. LM1602
ข. 2 แบบ ข. LN16L2
ค. 3 แบบ ค. LM016L
ง. 4 แบบ ง. LCD16x2
จ. 5 แบบ จ. LCD16CHAR2LN
3. การเชื่อมต่อแบบ 4 บิตจะต่อใช้บิตใดในการ 7. รหัสคาสั่งที่ใช้ลา้ งหน้าจอ LCD คือข้อใด
เชื่อมต่อ ก. 0x01
ก. D0-D3 ข. 0x02
ข. D1-D4 ค. 0x80
ค. D2-D5 ง. 0xC0
ง. D3-D6 จ. 0xE0
จ. D4-D7 8. เมื่อต้องการแสดงข้อความในตาแหน่งแรก
4. หากใส่ ขอ้ ความเกินในบรรทัดแรกข้อความ ของบรรทัดแรกต้องส่ งรหัสคาสัง่ ใดให้กบั
ส่ วนเกินจะปรากฏในบรรทัดใด LCD
ก. 2 ก. 0x00
ข. 3 ข. 0x10
ค. 4 ค. 0x20
ง. 5 ง. 0x40
จ. 6 จ. 0x80
458 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
9. ขั้นตอนแรกก่อนใช้งาน LCD เรี ยกว่าอะไร
ก. Interview
ข. Initialize
ค. Introduction
ง. Integer
จ. Innovation
10. สัญญาณ enable ที่ตอ้ งส่ งให้กบั LCD มีลกั ษณะใด
ก. ขอบสัญญาณขาขึ้น
ข. ขอบสัญญาณขาลง
ค. พัลส์ลบ
ง. พัลส์บวก
จ. สัญญาณที่มีลอจิกตรงข้ามกับสถานะเดิม

เฉลยแบบทดสอบก่อนเรี ยน
1. ข 2. จ 3. ข 4. ง 5. ข 6. ค 7. จ 8. ก 9. ก 10. จ

เฉลยแบบทดสอบหลังเรี ยน
1. ก 2. ข 3. จ 4. ข 5. ง 6. ค 7. ก 8. จ 9. ข 10. ง
โครงงาน งานวิจัย

1. จุดประสงค์ ทวั่ ไป
1. ส่ งเสริ มให้นกั ศึกษานาความรู ้ ทักษะไปบูรณาการสร้างงานและปฏิบตั ิได้จริ ง
2. ให้นกั ศึกษาฝึ กกระบวนการทางานอย่างเป็ นระบบ เป็ นผูร้ ู ้จกั คิดอย่างมีเหตุผล
3. ส่ งเสริ มให้นกั ศึกษามีความคิดริ เริ่ มสร้างสรรค์
4. ให้นกั ศึกษาได้เรี ยนรู ้การทางานเป็ นกลุ่ม
5. ส่ งเสริ มให้นกั ศึกษามีเจตคติที่ดีต่อวิชาไมโครคอนโทรลเลอร์

2. จุดประสงค์ เชิงพฤติกรรม
1. เพื่อให้เข้าใจโครงสร้ างและหลักการทางานของไมโครคอนโทรลเลอร์ การใช้ชุ ดค าสั่ ง
การประยุกต์ใช้งานไมโครคอนโทรลเลอร์ กบั งานอื่น ๆ
2. เพื่อให้สามารถเขียนโปรแกรมควบคุ ม วิเคราะห์และทดสอบระบบการทางาน ประยุกต์
ไมโครคอนโทรลเลอร์ กบั งานอื่น ๆ
3. เพื่อให้มีกิจนิ สัยในการทางานด้วยความประณี ตรอบคอบและปลอดภัย ตระหนักถึงคุณภาพ
ของงาน และมีจริ ยธรรมในงานอาชีพ

3. กิจกรรม
1. นักศึกษาแบ่งกลุ่ม ๆ ละ 2 คน โดยแบ่งกลุ่มแบบคละความสามารถ
2. แต่ละกลุ่มช่วยกันระดมความคิดเห็นนาความรู ้ที่ได้จากการศึกษาวิชาไมโครคอนโทรลเลอร์
มาประยุกต์เป็ นโครงงาน
3. นักศึกษาส่ งโครงร่ างโครงงานตามกาหนดเวลา
4. นักศึกษาดาเนินงานตามกาหนดเวลาในแผนการปฏิบตั ิงาน
5. ครู ติดตามให้คาปรึ กษาแนะนา ประเมินผลโครงงาน
6. นักศึกษาส่ งโครงงาน
460 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

4. การจัดทาโครงงาน
การท าโครงงานเป็ นกิ จ กรรมส่ งเสริ มให้ นั ก ศึ ก ษาได้ น าความรู ้ ที่ ไ ด้ ศึ ก ษาในรายวิ ช า
ไมโครคอนโทรลเลอร์ ไปประยุกต์ใช้งานจริ ง ทาให้มีประสบการณ์ตรงในการคิด วิเคราะห์และศึกษา
ค้นคว้าค้นหาวิธีการแก้ปัญหาด้วยการลงมือทาด้วยตนเอง ฝึ กให้เรี ยนรู ้การทางานอย่างเป็ นระบบ รู ้จกั
คิดอย่างมีเหตุผล เกิดความคิดสร้างสรรค์ และเป็ นการส่ งเสริ มให้มีเจตคติต่อวิชาไมโครคอนโทรลเลอร์
สอดคล้องกับพระราชบัญญัติการศึกษาแห่งชาติ พ.ศ. ๒๕๔๒ ดังนี้
มาตรา ๒๒ การจัดการศึกษาต้องยึดหลักว่าผูเ้ รี ยนทุกคนมีความสามารถ เรี ยนรู ้และพัฒนาตนเอง
ได้ และถื อว่าผูเ้ รี ยนมีความสาคัญที่สุด กระบวนการจัดการศึกษาต้องส่ งเสริ มให้ผูเ้ รี ยนสามารถพัฒนา
ตามธรรมชาติและเต็มตามศักยภาพ
มาตรา ๒๔ การจัดกระบวนการเรี ย นรู ้ ให้สถานศึ กษาและหน่ วยงาน ที่ เกี่ ยวข้องดาเนิ นการ
ดังต่อไปนี้
(๑) จัด เนื้ อ หาสาระและกิ จ กรรมให้ ส อดคล้อ งกับ ความสนใจและความถนัด ของผู ้เ รี ย น
โดยคานึงถึงความแตกต่างระหว่างบุคคล
(๒) ฝึ กทักษะ กระบวนการคิด การจัดการ การเผชิญสถานการณ์ และการประยุกต์ความรู ้มาใช้
เพื่อป้ องกันและแก้ไขปั ญหา
(๓) จัดกิจกรรมให้ผูเ้ รี ยนได้เรี ยนรู ้จากประสบการณ์จริ ง ฝึ กการปฏิบตั ิให้ทาได้ คิดเป็ น ทาเป็ น
รักการอ่านและเกิดการใฝ่ รู ้อย่างต่อเนื่อง

ขั้นตอนการทาโครงงาน
ขั้นตอนที่ 1 การคิดเลือกหัวเรื่ องและการศึกษาเอกสารที่เกี่ยวข้อง
ขั้นตอนที่ 2 การเขียนเค้าโครงของโครงงาน ซึ่งมีหวั ข้อดังนี้
หัวข้อรายการ รายละเอียดที่ตอ้ งระบุ
1.ชื่อโครงงาน 1. ทาอะไร
2.ชื่อผูท้ าโครงงาน 2. ผูร้ ับผิดชอบโครงงานนี้
3.ชื่อที่ปรึ กษาโครงงาน 3. ผูท้ รงคุณวุฒิต่าง ๆ
4. หลักการและเหตุผล 4. เหตุผลและความคาดหวัง
5.จุดหมาย / วัตถุประสงค์ 5. สิ่ งที่ตอ้ งการให้เกิดเมื่อสิ้ นสุ ดการทาโครงงาน
6.สมมุติฐานของการศึกษาโครงงาน 6. สิ่ งที่คาดว่าจะเกิดเมื่อสิ้ นสุ ดการทาโครงงาน
7.ขั้นตอนการดาเนิ นงาน 7. ขั้นตอนการทางาน เครื่ องมือ วัสดุอุปกรณ์ สถานที่
8. ปฏิบตั ิโครงงาน 8. วัน เวลา และกิจกรรมดาเนินงานต่าง ๆ ตั้งแต่ตน้ จนเสร็ จ
โครงงาน งานวิจยั 461
หัวข้อรายการ รายละเอียดที่ตอ้ งระบุ
9.ผลที่คาดว่าจะได้รับ 9. สภาพของผลที่ตอ้ งการให้เกิดทั้งที่เป็ นผลผลิต
กระบวนการ และผลกระทบ
10. บรรณานุกรม 10. ชื่อเอกสารข้อมูล ที่ได้จากแหล่งต่าง ๆ

ขั้นตอนที่ 3 การปฏิบตั ิโครงงาน เป็ นการดาเนิ นงานตามแผน ที่กาหนดไว้ในเค้าโครงของโครงงาน และ


ต้องมีการจดบันทึกข้อมูลต่าง ๆให้ละเอียด และต้องจัดทาอย่างเป็ นระบบเพื่อที่จะได้ใช้เป็ น
ข้อมูลต่อไป
ขั้นตอนที่ 4 การเขียนรายงาน เป็ นการเขียนรายงานฉบับสมบูรณ์ในรู ปแบบวิจยั 5 บท ซึ่งต้องใช้ภาษาที่
เข้าใจง่าย กระชับ ชัดเจน และครอบคลุมประเด็นสาคัญของโครงงาน
ขั้นตอนที่ 5 การแสดงผลงาน เป็ นการนาเสนอผลงานโครงงานที่ได้จดั ทาขึ้น

5. การเขียนรายงานการวิจัย
การเขียนรายงานเป็ นวิธีการสื่ อความหมายเพื่อให้ผอู ้ ื่นเข้าใจแนวคิด วิธีดาเนินการศึกษาค้นคว้า
หาข้อมูลที่ได้ ตลอดจนข้อสรุ ปและข้อเสนอแนะต่าง ๆ เกี่ ยวกับโครงงาน ในการเขียนรายงานนักศึกษา
ควรใช้ภาษาที่อ่านง่าย ชัดเจน กระชับ และตรงไปตรงมา

องค์ ประกอบของรายงานวิจัย
1. ภาคความนา จะกล่ า วถึ ง ความส าคัญ ของเรื่ อ งที่ ศึ ก ษา จุ ด ประสงค์ ปั ญหา หรื อ สมมุ ติฐ าน
ขอบเขตของการศึ กษา นิ ยามศัพท์ที่ใช้เฉพาะ และอธิ บายถึ งวิธีการที่ใช้ในการศึกษาวิจยั อย่างละเอียด
และรวมทั้งการศึกษาค้นคว้าของผูอ้ ื่นที่เกี่ยวข้องโดยละเอียด
2. ภาคเนื้อเรื่ อง เป็ นส่ วนที่กล่าวถึงข้อเท็จจริ งต่าง ๆ ที่เกี่ยวข้องกับเนื้อเรื่ องโดยตรง เป็ นการเสนอ
ผลการศึ ก ษาค้นคว้า ทั้ง หมด เพื่ อพิ สู จน์ใ นภาคนี้ อาจจะแบ่ งออกเป็ นตอน หรื อบทเพื่ อให้ผูอ้ ่ านเห็ น
จุดสาคัญของเนื้ อความตามลาดับ และต่อเนื่ อง มี การแบ่งออกเป็ นหัวข้อใหญ่ และข้อย่อย และข้อคิ ด
สนับสนุน
3. ภาคสรุ ป เป็ นการสรุ ปที่นกั วิจยั ได้วิเคราะห์ ข้อคิดเห็นที่ได้จากการวิจยั ผูว้ จิ ยั จะต้องเน้นให้เห็น
ถึงผลที่ได้จากการวิจยั ทั้งหมด แต่ตอ้ งทาให้รัดกุม เพื่อเป็ นการทบทวนความจาของผูอ้ ่าน ในการสรุ ปนั้น
ควรจะประกอบไปด้วย
3.1 บทสรุ ปที่เป็ นการย่อเนื้อความ
3.2 บทสรุ ปที่เป็ นการวิเคราะห์ในลักษณะรวบยอด หรื อเป็ นประเด็นสาคัญ
3.3 อภิปรายความเห็นของผูว้ จิ ยั
462 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
3.4 ข้ อ เสนอแนะ ซึ่ งแบ่ ง ออกเป็ นข้ อ เสนอแนะในการแก้ ไ ขปั ญ หาในเรื่ องของวิ จ ั ย
และข้อเสนอแนะของผูท้ ี่สนใจในการดาเนินการคนต่อไป
4. บรรณานุกรม คือ รายชื่อหนังสื อที่ใช้ในการอ้างอิงในงานวิจยั ทั้งหมด
5. ภาคผนวก เป็ นส่ วนที่รวมลักษณะของกลุ่มตัวอย่าง แบบสอบถาม วิธีการสัมภาษณ์ เป็ นต้น

สาหรับหัวข้อในการเขียนรายงานการวิจยั ประกอบไปด้วย 3 ส่ วนใหญ่ ที่มีรายละเอียดในแต่ละ


หัวข้อย่อย ดังนี้
1. ส่ วนนา
2. ส่ วนเนื้อความ และ
3. ส่ วนอ้างอิง
ในส่ วนนา ประกอบไปด้วยเรื่ องใหญ่ 6 เรื่ อง
1. ตัวเรื่ อง
2. หน้าอนุมตั ิ
3. กิตติกรรมประกาศ
4. สารบัญ
5. สารบัญตาราง
6. สารบัญรู ป

ส่ วนเนื้ อความในส่ วนเนื้ อความนี้ เป็ นส่ วนสาคัญของการวิจยั เนื่ องจากเนื้ อความใหญ่ ๆ ของงานวิจยั จะ
อยูใ่ นส่ วนนี้ซ่ ึ งประกอบไปด้วย
1. บทนา ซึ่งประกอบไปด้วย
1.1 ความเป็ นมาของปัญหา หรื อประเด็นปั ญหา ได้แก่ปัญหาที่ผวู ้ จิ ยั จะต้องตอบ หรื อ
สมมุติฐานที่จะต้องทดสอบ
1.2 ความสาคัญของปั ญหา
1.3 วัตถุประสงค์ของการวิจยั
1.4 วิธีการการดาเนินงานวิจยั
1.5 ข้อตกลงเบื้องต้น และข้อจากัด
1.6 คาจากัดความ หรื อนิยามศัพท์
2. หลักการและทฤษฎี เป็ นส่ วนสรุ ปข้อมูลที่ได้จากการศึกษาหาข้อมูล หลักการ ทฤษฎี หรื อวิธีการ
ที่ จ ะน ามาใช้ใ นการพัฒ นาโครงงาน ซึ่ งรวมถึ ง การระบุ ผ ลงานของผู ้ อื่ น ที่ ผูจ้ ัด ท าโครงงานน ามา
เปรี ยบเทียบหรื อพัฒนาเพิ่มเติมด้วย
โครงงาน งานวิจยั 463
3. วิธีดาเนินการ อธิ บายขั้นตอนการดาเนิ นงานโดยละเอียด ระบุปัญหาหรื ออุปสรรคที่พบ วิธีการที่
ใช้แก้ไข พร้อมทั้งวัสดุอุปกรณ์ที่ตอ้ งใช้ในการทาโครงงาน
4. ผลการศึ ก ษา นาเสนอข้อมู ล หรื อระบบที่ พ ฒ ั นาได้ โดยอาจแสดงเป็ นรู ปภาพ ตาราง กราฟ
ข้อความ ทั้งนี้ตอ้ งการสื่ อความหมายให้ผอู ้ ื่นเข้าใจได้ง่าย
5. สรุ ปผลและข้อเสนอแนะ การสรุ ปผลการดาเนิ นงาน เป็ นการอธิ บายผลสรุ ปที่ได้จากการทา
โครงงาน ถ้ามีการตั้งสมมุติฐานควรระบุถึงข้อมูลที่ได้สนับสนุ นหรื อคัดค้านสมมุตติฐานที่ต้ งั ไว้หรื อยัง
สรุ ปไม่ได้ การนาผลการทดลองหรื อพัฒนาไปใช้ประโยชน์ อุปสรรคของการทาโครงงานหรื อข้อสังเกต
ที่ ส าคัญหรื อข้อผิดพลาดบางประการที่ เกิ ดขึ้ นจากการท าโครงงานนี้ และควรมี ข ้อเสนอแนะในการ
ปรั บ ปรุ ง โครงงานเพื่ อ เป็ นแนวทางให้ ผู อ้ ื่ น ศึ ก ษาค้น คว้า ต่ อ ไปในอนาคต นอกจากนี้ ควรกล่ า วถึ ง
ประโยชน์ที่ผจู ้ ดั ทาและผูใ้ ช้จะได้ประโยชน์จากการทาโครงงานด้วย

ส่ วนอ้างอิงในส่ วนนี้จะเป็ นส่ วนสุ ดท้ายของงานวิจยั ซึ่ งประกอบด้วย


1. บรรณานุกรม รวบรวมรายชื่อหนังสื อ วารสารเอกสารและ /หรื อเว็บไซต์ ที่ผจู ้ ดั ทาโครงงานใช้
ศึกษา ค้นคว้ารายละเอียด ที่นามาใช้ประโยชน์ในการทาโครงงาน ทั้งนี้ เขียนเอกสารบรรณานุกรมต้องให้
ถูกต้องตามหลักการเขียนด้วย
2. ภาคผนวก ส่ ว นที่ เ พิ่ ม เติ ม จากรายงานเพื่ อ ให้ เ ข้า ใจเนื้ อ เรื่ องได้ ดี ข้ ึ น เช่ น สถิ ติ รู ปภาพ
แบบสอบถาม
464 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์

แบบขออนุมัติโครงงาน
ชื่อโครงงาน.................................................................................................................................................
ระยะเวลาดาเนินการ....................................................................................................................................
สถานที่ดาเนินการ........................................................................................................................................
งบประมาณค่าใช้จ่าย....................................................................................................................................
ผูจ้ ดั ทาโครงงาน
1. ......................................................................................
2. ......................................................................................

ลงชื่อ.........................................................หัวหน้าโครงงาน
(...............................................................)
…........./................./.................

ความเห็นของอาจารย์ประจาวิชา
.....................................................................................................................................................................
.....................................................................................................................................................................

ลงชื่อ...........................................ครู ประจาวิชา
(...................................................)
............/................./................
ความเห็นของหัวหน้าแผนกวิชา
.....................................................................................................................................................................
.....................................................................................................................................................................

ลงชื่อ.......................................................หัวหน้าแผนกวิชา
(...................................................)
............/................./................
โครงงาน งานวิจยั 465
แบบเสนอโครงงาน
ชื่อโครงงาน.................................................................................................................................................
ระยะเวลาดาเนินการ....................................................................................................................................
สถานที่ดาเนินการ........................................................................................................................................
ผูจ้ ดั ทาโครงงาน
1. ......................................................................................
2. ......................................................................................
ชื่อที่ปรึ กษาโครงงาน ..................................................................................................................................
ชื่อที่ปรึ กษาโครงงานร่ วม............................................................................................................................
ระยะเวลาดาเนินงาน ...................................................................................................................................

รายละเอียดเกี่ยวกับโครงงาน
1. ที่มา และความสาคัญของโครงงาน (อธิบายถึงแนวคิดและเหตุผลของการทาโครงงาน)
.....................................................................................................................................................................
.........................................................................................................................................................
2. วัตถุประสงค์ (สิ่ งที่ตอ้ งการในการทาโครงงาน ระบุเป็ นข้อ ๆ )
.....................................................................................................................................................................
.........................................................................................................................................................
3. ขอบเขตโครงงาน (คุณลักษณะ ขอบเขต เงื่อนไขและข้อจากัดของโครงงาน)
.....................................................................................................................................................................
.........................................................................................................................................................
4. หลักการและทฤษฎีที่เกี่ยวข้อง (ความรู ้ หลักการ หรื อทฤษฎีที่สนับสนุนการทาโครงงาน)
.....................................................................................................................................................................
.........................................................................................................................................................
5. วิธีการดาเนินงาน (กาหนดแนวทางการดาเนินงาน เครื่ องมือและอุปกรณ์ งบประมาณ และขั้นตอน
การปฏิบตั ิงาน)
แนวทางการดาเนินงาน .........................................................................................................................
เครื่ องมือและอุปกรณ์.............................................................................................................................
งบประมาณ.............................................................................................................................................
466 เอกสารประกอบการสอนวิชาไมโครคอนโทรลเลอร์
ขั้นตอนการปฏิบตั ิงาน
ภาคเรี ยนที่ ................ปี การศึกษา ..................
ที่ กิจกรรม / รายการที่ปฏิบตั ิ ระยะเวลาดาเนินการ (เดือน) หมายเหตุ

6. ผลที่คาดว่าจะได้รับ (ผลลัพธ์ที่ตอ้ งการให้เกิดขึ้นเมื่อสิ้ นสุ ดการทาโครงงาน)


.....................................................................................................................................................................
.........................................................................................................................................................
7. แหล่งอ้างอิง (เอกสารหรื อแหล่งข้อมูลต่าง ๆ ที่นามาใช้ในการทาโครงงาน)
.....................................................................................................................................................................
.........................................................................................................................................................
467

บรรณานุกรม

- ธีรวัฒน์ ประกอบผล. การประยุกต์ ใช้ งานไมโครคอนโทรลเลอร์ . กรุ งเทพฯ : สมาคมส่ งเสริ ม


เทคโนโลยี(ไทย-ญี่ปุ่น), 2540.
- ธีรวัฒน์ ประกอบผล. การพัฒนาไมโครคอนโทรลเลอร์ ด้วยภาษาซี . กรุ งเทพฯ : สมาคมส่ งเสริ ม
เทคโนโลยี(ไทย-ญี่ปุ่น), 2545.
- อุดม รานอก. ภาษาซีสาหรับงานควบคุมไมโครคอนโทรลเลอร์ MCS-51. กรุ งเทพฯ :
อินโฟเพรส, 2548.
- ดอนสัน ปงผาบ. ไมโครคอนโทรลเลอร์ และการประยุกต์ ใช้ งาน 1. กรุ งเทพฯ : สมาคมส่ งเสริ ม
เทคโนโลยี(ไทย-ญี่ปุ่น), 2549.
- ทีมงานสมาร์ ทเลิร์นนิ่ง. เรียนรู้ ไมโครคอนโทรลเลอร์ MCS-51 ด้ วยภาษา C พร้ อมโครงงาน.
กรุ งเทพฯ : ห้างหุ น้ ส่ วนสามัญสมาร์ ทเลิร์นนิ่ง, 2543
- ประจิน พลังสันติกุล, ชัยวัฒน์ ลิ้มจิตรวิไล. ปฏิบัติการไมโครคอนโทรลเลอร์ MCS-51 กับ
Keil C51. กรุ งเทพฯ : บริ ษทั อินโนเวทีฟ อ็กเพอริ เมนท์ จากัด
- ชัยวัฒน์ ลิ้มจิตรวิไล, วรพจน์ กรแก้ววัฒนกุล. เรียนรู้ และปฏิบัติการไมโครคอนโทรลเลอร์
กรุ งเทพฯ : บริ ษทั อินโนเวทีฟ อ็กเพอริ เมนท์ จากัด
- KEIL SOFTWARE. Cx Compiler. USA : Keil Software
- Muhamad Ali Mazidi, Janice Gillispie Mazidi. The 8051 Microcontroller and Embedded
System. New Jersey : Prentice Hall, 2000
- Robert T Paynter. Introductory Electronic Devices and Circuit : Prentice Hall, 1991
- Michael J Pont. Embedded C. USA : Addison-Wesley. 2000
- Kenneth J Ayala. The 8051 Microcontroller Architecture, Programming and Application.
New York : West Publishing Company, 1991
- Michael J Pont. Programming Embedded System I. USA
- I Scott Mackenzie. The 8051 Microcontroller. USA : Prentice Hall, 1992
- Chris Braithwaite, Fred Cowan, Hassan Parchizadeh. 8051 Microcontroller an Applications-
Based Introduction. Amsterdam : Elsevier, 2004
ภาคผนวก
469
470
471
472
473
474
475
476
477
478
479
480
481

You might also like