โครงสร้างสถาปัตยกรรมของไมโครคอนโทรลเลอร์ MCS-51
ความก้าวหน้าทางเทคโนโลยีไมโครคอนโทรลเลอร์มักนำมนุษยชาติไปสู่จุดหมายใหม่อยู่เสมอ
การเกิดขึ้นของ ไมโครคอนโทรลเลอร์MCS-51โดยIntelผู้ยิ่งใหญ่ด้านไมโครโปรเซสเซอร์ ได้จุดประกายในการนำไมโครคอนโทรลเลอร์ไปใช้ในการควบคุมระบบแทนที่ไมโครโปรเซสเซอร์
นับจากนั้นบรรดาผู้ผลิตซิปใหญ่น้อยก็หันมาพัฒนาและผลิตไมโครคอนโทรลเลอร์กันอย่างมากมาย
Zilog พัฒนาไมโครคอนโทรลเลอร์ตระกูล Z8x
ในขณะที่ Motorola นำเสนอไมโครคอนโทรลเลอร์ตระกูล
68xx ด้าน ST-Thomson ก็แนะนำไมโครคอนโทรลเลอร์ตระกูล
ST6x ออกสู่ตลาด ในขณะเดียวกัน Siemens และ Phillips นำเทคโนโลยีของไมโครคอนโทรลเลอร์
ตระกูล MCS-51 มาพัฒนาต่อให้มีขีดความสามารถสูง ขึ้น
เป็นเบอร์ SAB80C535 , SAB80C537 , 80C552 เป็นต้น
การเปลี่ยนแปลงทางไมโครคอนโทรลเลอร์ไมโครคอนโทรลเลอร์เกิดขึ้นอีกครั้งเมื่อ
Atmel พัฒนาหน่วย
ความจำโปรแกรมในไมโครคอนโทรลเลอร์เป็นแบบแฟรชทำให้สามารถลบเขียนหน่วยความจำโปรแกรมได้นับพันครั้งส่งผลให้ความจำเป็นในการใช้หน่วยความจำโปรแกรมภายนอกซึ่งเดิมบรรจุในอีพรอมลดน้อยลง
ขนาดของระบบก็เล็กลงราคาถูกลงเป็นอย่างมาก อย่างไรก็ตามไมโครคอนโทรลเลอร์ทั้งหมด
ที่กล่าวมาพัฒนาในลักษณะของ CISC คำสั่งหนึ่งคำสั่ง
ของไมโครคอนโทรลเลอร์จะใช้สัญญาณนาฬิกาหลายลูก
จำนวนคำสั่งที่ผู้ใช้งานต้องจดจำมีจำนวนมาก จน กระทั่ง Microchip ได้ทำการพัฒนาไมโครคอนโทรลเลอร์ในลักษณะ RISC ขึ้น
โดยในการทำงานหนึ่งคำสั่งจะ ใช้สัญญาณนาฬิกาเพียงลูกเดียว และมีจำนวนคำสั่งเพียง 33-35 คำสั่งเท่านั้น โมโครคอนโทรลเลอร์ที่ microchip
พัฒนาคือ ไมโครคอนโทรลเลอร์ตระกูล PIC
ไมโครคอนโทรลเลอร์ตระกูล PIC เริ่มเข้ามามีบทบาทอย่างมากในช่วงปลายศตวรรษที่
20 เริ่มได้
รับความนิยมใช้งานอย่างแพร่หลายทั้งในสหรัฐอเมริกาและในยุโรป
สินค้าและผลิตภัณฑ์จำนวนมากใช้ ไมโครคอนโทรลเลอร์ ตระกูลนี้ในการควบคุมการ
ทำงานส่งผลให้ความต้องการเรียนรู้และใช้งานไมโครคอนโทรลเลอร์
ตระกูลนี้ในประเทศไทยเริ่มมีมากขึ้น ประกอบกับเริ่มมีการนำเข้า
ไมโครคอนโทรลเลอร์ตระกูล PIC เข้ามาจำหน่าย ในประเทศไทย
ทว่าการ ให้ข้อมูลเป็นไปอย่างมีข้อจำกัด
ทำให้การเรียนรู้และใช้งานไมโครคอนโทรลเลอร์ตระกูล นี้เป็นไปอย่างไม่ราบรื่น
ทั้งที่ตัว ไมโครคอนโทรลเลอร์เองมีคุณสมบัติที่เหมาะสม อย่างมากในการนำมาใช้ควบคุม
ระบบขนาดเล็กถึงขนาดกลาง
PIC16F84 Theory&Practical
Approach จึงเกิดขึ้น ในการอธิบายการทำงานของ
ไมโครคอนโทรลเลอร์ตระกูล PIC จะต้องเลือกใช้เบอร์ที่สามารถนำมาพัฒนาได้
นั่นคือสามารถอ่าน-เขียน-ลบ หน่วยความจำโปรแกรมภายใน ไมโครคอนโทรลเลอร์ได้ภาย
ใต้งบประมาณที่ประหยัดที่สุด PIC16F84 จึงถูก
เลือกมาเป็นตัวแทนในการอธิบาย และเรียนรู้การใช้งานไมโครคอนโทรลเลอร์ ตระกูล PIC
เนื่องจาก PIC16F84 มีหน่วยความจำโปรแกรมขนาด 1 กิโลไบต์ เป็นหน่วยความจำแบบแฟลช
สามารถลบ-เขียนได้นับพันครั้ง มีพอร์ตอินพุตและเอาต์พุตให้ใช้งาน 13 บิต สามารถใช้วงจรกำเนิดสัญญาณนาฬิกาแบบคริสตอลหรือวงจร RC ก็ได้ กินกำลังงานไฟฟ้าต่ำ สามารถใช้แบตเตอรี่เป็นแหล่งจ่ายไฟได้
ด้านการโปรแกรมใช้วงจรหรือเครื่อง โปรแกรมที่มีราคาถูกมาก
วงจรอย่างง่ายที่สุดที่สามารถโปรแกรม PIC16F84
ได้ใช้เพียงตัวต้านทาน , ตัวเก็บประจุ
และไดโอตไม่กี่ตัวเท่านั้น ในขณะที่ซอฟต์แวร์ที่ใช้ในการพัฒนาก็มีราคาถูก
สำหรับบางท่านที่สามรถเข้าไปดูข้อมูล ในอินเตอร์เน็ตก็อาจ
ค้นหาซอฟต์แวร์ที่ใช้ในการโปรแกรมได้ฟรี ๆ
ไมโครคอนโทรลเลอร์
MCS-51
เป็นไมโครคอนโทรลเลอร์ขนาด 8 บิตที่มีอุปกรณ์สนับสนุนประกอบอยู่ภายในหลายอย่างได้แก่
หน่วยความจำสำหรับเก็บข้อมูล หน่วยความจำสำหรับเก็บโปรแกรม ตัวตั้งเวลา/ตัวนับ อุปกรณ์รับส่งข้อมูลแบบอนุกรม
เนื่องจากโครงสร้างของไมโครคอนโทรลเลอร์มีอุปกรณ์สนับสนุนประกอบอยู่ภายในนี้เอง ทำให้การใช้งานง่ายขึ้นและมีประสิทธิภาพมากขึ้นโดยไม่ต้องมีการเชื่อมต่ออุปกรณ์ภายนอกเพิ่มเติมมากเหมือนกับ
ตัวไมโคร-โปรเซสเซอร์ทั่วไป
นอกจากนี้หากเราต้องการใช้งานไมโครคอนโทรลเลอร์ร่วมกับ อุปกรณ์อื่นเพิ่มเติมเช่น
ไอซี 8255 หรือหน่วยความจำภายนอก ยังสามารถนำมาเชื่อมต่อเพิ่มเติมเข้ากับไมโครคอนโรลเลอร์ได้อีกด้วย
โครงสร้างภายในของไมโครคอนโทรลเลอร์ MCS-51
โครงสร้างภายในพื้นฐานของไมโครคอนโทรลเลอร์ MCS-51 แสดงในรูปที่ 2.10 ประกอบด้วยอุปกรณ์ต่างๆ ดังนี้
-หน่วยประมวลผลกลางขนาด 8 บิต
-หน่วยประมวลผลสำหรับข้อมูลแบบบิต (BOOLEAN PROCRSSOR)
-ความสามารถในการอ้างตำแหน่งของหน่วยความจำโปรแกรม 64 กิโลไบต์
-ความสามารถในการอ้างตำแหน่งของหน่วยความจำข้อมูล 64 กิโลไบต์
-หน่วยความจำโปรแกรมภายในขนาด 4 กิโลไบต์ แบบ
อีพรอม (เบอร์ 8451)
-หน่วยความจำแบบ แรม ภายในจำนวน 128 ไบต์
-พอร์ตอินพุต/เอาต์พุตแบบขนานจำนวน 32 เส้น ซึ่งสามารถแยกทำงานได้อย่างอิสระ
-วงจรนับ/จับเวลาขนาด 16 บิต จำนวนสองวงจร
-วงจรสื่อสารแบบอนุกรมแบบดูเพล็กเต็ม(FULL
DUPLEX)
-วงจรควบคุมการอินเตอร์รัปต์จากแหล่งกำเนิดสัญญาณ
6 ประเภท พร้อมการกำหนด ลำดับ
-วงจรผลิตสัญญาณนาฬิกาภายในซึ่งโครงสร้างการทำงานทั้งหมดของไมโครคอน-โทรลเลอร์จะ
อาศัยหลักการทำงานที่เกี่ยวข้องกัน โดยอาศัยหลักการทำงานที่เป็นไป ตามโครงสร้างเสมอ
แสดงโครงสร้างภายในของไมโครคอนโทรลเลอร์ MCS-51
โดยมากแล้วไมโครคอนโทรลเลอร์ตระกูลนี้มักจะมีรูปร่างของไอซีเป็นแบบขนาด 40 ขา ดังแสดงในรูปที่ 2.2 ซึ่งแต่ละขาสัญญาณจะมีหน้าที่ที่ระบุชัดเจนตามสัญลักษณ์ชื่อย่อ
ที่กำกับในแต่ละขา อย่างไรก็ตามจะมีบางขาสัญญาณที่อาจจะมีหน้าที่ได้มากกว่าหนึ่งอย่าง
(ซึ่งเขียนกำกับไว้ว่า ALTERNATE FUNCTION ในรูปที่
2.2) ซึ่งจะไม่สามารถใช้งานในเวลาเดียวกันได้
ตัวอย่างเช่นขาสัญญาณบิต 0 ของพอร์ต 3 (ใช้ตัวย่อเป็น P3.0) อาจจะใช้เป็นขาสัญญาณเอาต์พุต
หรืออินพุตตามปกติ ภายในไมโครคอนโทรลเลอร์ MCS-51 ซึ่งประกอบด้วยหน่วยการทำงานต่างๆ
ภายในไอซีMCS-51 จำนวนมาก
โดยแต่ละบล็อกซึ่งเป็นวงจรควบคุมรีจิสเตอร์ (REGISTER) หรือหน่วยความจำภายในของไอซี
MCS-51 จะถูกเชื่อมต่อเข้าด้วยกันผ่านทางเส้นสัญญาณที่เรียกว่าบัสข้อมูลภายใน
รีจิสเตอร์และหน่วยความจำเหล่านี้จะถูกนำไปใช้ระหว่างการประมวลผลคำสั่ง หน้าที่ของโปรแกรมที่ผู้ใช้สร้างขึ้นมาก็เป็นการควบคุมการรับหรือส่งข้อมูลระหว่างรีจิสเตอร์เหล่านี้
ซึ่งอาจจะมีการดำเนินการร่วมกับหน่วยการดำเนินงานประมวลผลทางคณิตศาสตร์และลิจิกหรือเรียกว่า
ARITHMATIC AND LOGIC UNIT: ALU
โครงสร้างหน่วยความจำภายในไมโครคอนโครลเลอร์
MCS-51
ไมโครคอนโทรลเลอร์ MCS-51 แยกการจัดการหน่วยความจำออกเป็นสองส่วนอย่างชัดเจน
คือ หน่วยความจำโปรแกรม (PROGRAM MEMORY) และหน่วยความจำข้อมูล
(DATA MEMORY) หน่วยความจำทั้งสองนี้ มีหน้าที่แตกต่างไปจากกัน
และใช้วิธีการอ้างแอดเดรสสัญญาณการติดต่อแยกออกจากกัน
แสดงรูปร่างและการจัดวางขาต่างๆ ของไมโครคอนโทรลเลอร์ MCS-51
1. หน่วยความจำโปรแกรม
หน่วยความจำโปรแกรมของไมโครคอนโทรลเลอร์
MCS-51
เป็นบริเวณหน่วยความจำสำหรับเก็บข้อมูลและคำสั่งใช้งานต่างๆ ซึ่งแม้ว่าจะไม่มีการจ่ายกระแสไฟฟ้าให้กับระบบข้อมูลเหล่านี้ก็ยังคงอยู่ไม่สูญหายโครงสร้างของหน่วยความจำโปรแกรม
มีลักษณะเช่นเดียวกับหน่วยความจำที่บรรจุอยู่ในไมโครคอนโทรลเลอร์ MCS-51 ของหน่วยความจำ ประเภทต่างๆ เช่น หน่วยความจำแบบรอม (READ ONLY
MEMORY) หรือ อีพรอม (ERASABLE PROGRAMABLE READ ONLY MEMORY)
ในไมโครคอนโทรลเลอร์ MCS-51 สามารถอ่านข้อมูลหน่วยความจำโปรแกรมนี้ได้สูงสุดไม่เกิน
64 กิโลไบต์ และแยกประเภทของหน่วยความจำโปรแกรมเป็น 2
ลักษณะ ตามตำแหน่งของหน่วยความจำนั้น คือ หน่วยความจำโปรแกรมภายใน (INTERNAL
PROGRAM MEMORY) ซึ่งเป็นหน่วยความจำรอม หรือ อีพรอม
ที่อยู่ภายในตัวไอซีของไมโคร-คอนโทรลเลอร์เอง
และหน่วยความจำโปรแกรมภายนอก (EXTERNAL PROGRAM MEMORY) ซึ่งเป็นการใช้ไอซีหน่วยความจำมาทำหน้าที่เป็นหน่วยความจำโปรแกรมของระบบ
แสดงการใช้หน่วยความจำสำหรับเก็บโปรแกรม
ไมโครคอนโทรลเลอร์เบอร์ต่างๆ ของตระกูล 8051 นี้สามารถขยายให้ใช้งาน ในหน่วยความจำภายนอกได้ทั้งสิ้น
โดยกรณีที่มีหน่วยความจำโปรแกรมภายในอยู่แล้ว การอ้างตำแหน่งแอดเดรสที่มีทั้งในหน่วยความจำโปรแกรมภายในและภายนอกนั้นจะต้องทำการควบคุมระดับลอจิกของสัญญาณ
ในขณะนั้นด้วย ขนาดหน่วยความจำโปรแกรมภายในของไมโครคอนโทรลเลอร์เบอร์ต่างๆ ภายในตระกูล
8051 จะแตกต่างกันออกไป เพื่อความเหมาะสมกับการนำไปใช้งานลักษณะต่างๆเช่น
-8051 และ 8052 มีหน่วยความจำแบบรอม 4 และ 8 กิโลไบต์
-8751 มีหน่วยความจำแบบ อีพรอม ขนาด 4 กิโลไบต์
ข้อมูลที่จัดเก็บภายในนี้ ซึ่งสามารถใช้แสง อุลตร้าไวโอเลตลบและนำกลับไปบรรจุโปรแกรมใหม่ได้อีกครั้งหนึ่ง
-8031 และ 8032 ไม่มีหน่วยความจำโปรแกรมอยู่ภายในตัวไอซี
ดังนั้นในการนำไปใช้งานจึงจำเป็นต้องอาศัยหน่วยความจำโปรแกรมภายนอกเสมอ
แสดงหน่วยความจำสำหรับเก็บข้อมูลภายในไมโครคอนโทรลเลอร์
MCS-51
2. หน่วยความจำข้อมูล
หน่วยความจำข้อมูล
(DATA
MEMORY) ซึ่งโดยพื้นฐานแล้วเป็นหน่วยความจำแรมสามารถเขียนหรืออ่านข้อมูลได้
(READ OR WRITE MEMORY) ใช้สำหรับเก็บข้อมูลหรือตัวแปร ที่เกิดขึ้นในขณะที่กำลังประมวลผลโปรแกรมไว้เป็นการชั่วคราว
ซึ่งโดยพื้นฐานแล้วหน่วยความจำข้อมูลจัดเป็นหน่วยความจำแรมแบบสแตติกดังนั้นเมื่อไม่มีการจ่ายไฟฟ้าให้กับระบบก็จะมีผลทำให้ข้อมูลที่จัดเก็บไว้ภายในหน่วยความจำนี้สูญไป
พื้นที่ของหน่วยความจำข้อมูลของไมโคร-คอนโทรลเลอร์ MCS-51
มีได้สูงสุดไม่เกิน 64 กิโลไบต์
และแยกประเภทออกเป็นสองลักษณะตามตำแหน่งที่ตั้งของหน่วยความจำนั้น ตามลักษณะของหน่วยความจำโปรแกรมภายในซึ่งก็เป็นแรมที่อยู่ภายในตัวไอซีในตระกูลของไมโครคอนโทรลเลอร์
และหน่วยความจำข้อมูลภายนอกซึ่งเป็นการใช้ไอซีหน่วยความจำแรมมาเพิ่มเติมเข้าไปในวงจรลักษณะเดียวกับ
การนำไอซีอีพรอมมาใช้งานเป็นหน่วยความจำโปรแกรมนั่นเอง
แสดงการจัดหน่วยความจำข้อมูล
โดยที่หน่วยความจำสำหรับเก็บข้อมูลของไมโครคอนโทรลเลอร์
MCS-51
นี้สามารถแบ่งออกเป็น 2 ส่วนคือ ในส่วนที่เป็นหน่วยความจำสำหรับเก็บข้อมูลภายในไอซี
และหน่วยความจำสำหรับเก็บข้อมูลภายนอกไมโครคอนโทรลเลอร์ MCS-51 ทุกๆ เบอร์จะมีหน่วยความจำเก็บข้อมูลทั่วๆ ไปภายในไอซีอย่างน้อยคือ 128
ไบต์ ไปจนถึง 256 ไบต์ทั้งนี้
ขึ้นกับเบอร์ของไอซี หน่วยความจำสำหรับเก็บ ข้อมูลภายในไอซีในบริเวณ 128 ไบต์เรียกว่า LOWER 128 และในบริเวณ 128 ไบต์หลัง ที่มีเพิ่มในบางเบอร์มีชื่อเรียกว่า UPPER 128 แสดงดังรูปที่ 2.6
แสดงการต่อกับหน่วยความจำข้อมูลภายนอกไอซี
3. รีจิสเตอร์ที่เกี่ยวกับไมโครคอนโทรลเลอร์
MCS-51
รีจิสเตอร์ในกลุ่มนี้จะเป็นรีจิสเตอร์ขนาด 16บิตที่ใช้งานเพื่อเก็บข้อมูลของตัวแอดเดรสเป็นสำคัญโดยค่าที่อยู่ภายในแอดเดรสนี้จะนำไปเป็นค่าของข้อมูลที่ส่งออกไปทางบัสแอดเดรส
ในส่วนของไมโครคอนโทรลเลอร์ เพื่อบอกตำแหน่งที่ต้องการติดต่อ รีจิสเตอร์ที่จัดในกลุ่มนี้ประกอบด้วย
รีจิสเตอร์ใช้งานทั่วไป (GENERAL-PURPUSE REGISTERS) รีจิสเตอร์ในกลุ่มนี้จัดเป็นพื้นที่หน่วยความจำที่ใช้ในการสนับสนุนในการประมวลผล
การทำงานจากหน่วยประมวลผลทางคณิตศาสตร์และลอจิก (ALU) เพื่อให้สามารถจัดการข้อมูลให้เร็วที่สุด
นอกจากนี้โปรแกรมที่ไม่ได้ใช้คำสั่งเหล่านี้ก็ยังใช้เป็นการเก็บข้อมูลตัวแปรภายในโปรแกรม
จะเห็นได้ว่าชื่อของรีจิสเตอร์ไม่ว่าจะอยู่ในรีจิสเตอร์แบงก์ใด ก็จะมีชื่อว่า R0
ถึง R7 เหมือนกันทั้งสิ้น
ดังนั้นในการใช้งานผู้ใช้จะต้องให้ความระมัดระวังว่า ต้องการรีจิสเตอร์นั้นๆ
จากแบงก์ใดๆ ซึ่งการกำหนดเลือกแต่ละกลุ่มของรีจิสเตอร์นี้ก็ทำได้ง่าย เพียงการกำหนดค่าของบิตที่อยู่ภายในแฟลก (PSW) เท่านั้นอย่างไรก็ตามโดยทั่วไปก็มักจะมีการใช้งานรีจิสเตอร์
R0 ถึง R7 เฉพาะในแบงก์ 0 เท่านั้น
ดังนั้นพื้นที่ของแบงก์อื่นๆ ที่เหลือก็สามารถนำมาใช้ในลักษณะของหน่วยความจำแรม
แสดงการเลือกใช้รีจิสเตอร์ใช้งานทั่วไป R0-R7 ในแต่ละกลุ่ม
รีจิสเตอร์หน้าที่พิเศษ
เป็นรีจิสเตอร์หน้าที่พิเศษ (SFR) เป็นรีจิสเตอร์สำหรับ
การควบคุมหน้าที่ และการทำงานของอุปกรณ์หรือพอร์ตของไมโครคอนโทรลเลอร์ MCS-51
ทั้งหมด ตำแหน่งของรีจิสเตอร์เหล่านี้จะจัดอยู่ในบริเวณแอดเดรส 80H
- FFH การใช้งานรีจิสเตอร์หน้าที่พิเศษเหล่านี้สามารถทำได้ทั้งการระบุชื่อของรีจิสเตอร์
หรือตำแหน่งแอดเดรส ที่เป็นของรีจิสเตอร์นั้นก็ได้ การจัดพื้นที่หน่วยความจำสำหรับรีจิสเตอร์หน้าที่พิเศษเหล่านี้
โดยมีข้อสังเกตว่ารีจิสเตอร์ที่อยู่ในตำแหน่งแอดเดรสที่มีจำนวนเป็นทวีคูณของค่า 8
จะสามารถอ้างถึงในระดับบิตได้ด้วย (นั่นคือแอดเดรส 80H 88H
90H A0H A8H B0H B8H D0H E0H และ F0H) -แอกคิวมูเลเตอร์ (ACCUMULATOR) หรือ ACC
เป็นรีจิสเตอร์ขนาด 8 บิต ทำหน้าที่ในการเก็บข้อมูลที่จะส่งให้กับหน่วยทำงานภายในหน่วยประมวลผลกลาง
และเก็บผลลัพธ์ที่ได้จากการทำงานเท่านั้น การทำงานของรีจิสเตอร์นั้มีลักษณะเช่นเดียวกับตัวแอกคิวมูเลเตอร์ของโปรเซส-เซอร์ทั่วไป การใช้งานในโปรแกรมซึ่งใช้เรียกเป็น รีจิสเตอร์ A
แสดงโครงสร้างของแต่ละพอร์ตในไมโครคอนโทรลเลอร์
MCS-51