โครงสร้างสถาปัตยกรรมของไมโครคอนโทรลเลอร์ 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