ไมโครคอนโทรลเลอร์ MCS-51

ไมโครคอนโทรลเลอร์ MCS-51


หากนำ CPUเบอร์ Z-80 มาประกอบเป็นคอมพิวเตอร์ ต้องนำไอซีหน่วยความจำ , พอร์ทมาประกอบเป็นระบบ ถ้าเป็นไมโครคอนโทรลเลอร์ภายในชิพไอซีซึ่งมีหน่วยความจำ,พอร์ทประกอบอยู่ในไอซีเพียงตัวเดียวเป็นคอมพิวเตอร์ชิพ เดี่ยว เช่นถ้ามีไอซีไมโครคอนโทรลเลอร์ ซึ่งสามารถสร้างเป็นระบบคอมพิวเตอร์ได้ เพียงป้อนแหล่งจ่ายไฟและสัญญาณนาฬิกาเข้าไป หากนำไมโครคอนโทรลเลอร์ 8051 มาทดลองใช้งานง่ายๆ เช่นถ้านำไมโครคอนโทรลเลอร์ เบอร์ตระกูล MCS-51 สร้างเป็น NAND gate 3 อินพุท ดังรูปที่ 1โดยอ่านค่าจาก พอร์ทอินพุทเข้ามา 3 บิต ถ้าทุกบิตเป็น "1" หมดให้เอาท์บิต P1.7 เป็นลอจิก "0" สามารถใช้ MCS-51 เป็นพอร์ทได้ทันที เพราะมีพอร์ทในตัว จากรูปที่ 1 สามารถเขียนไดอะแกรมการทำงานได้ดังรูปที่ 2



รูปที่ 1 ตัวอย่างการใช้ MCS-51 เป็น NAND gate

LOOP: MOV C,P1.4 ; อ่านค่าบิต P1.4 เก็บในแฟลก C
ANL C,P1.5 ; AND ค่าใน C กับบิต P1.5
ANL C,P1.6 ; AND ค่าใน C กับบิต P1.6
CPL C ; สลับค่า C
MOV P1.7,C ; นำค่า C ออกไปที่ P1.7
SJMP LOOP ; กระโดดกลับ



รูปที่ 2 การเขียนโปรแกรมให้ MCS-51 ทำงานเป็น NAND gate

จากโปรแกรมและผังงานใช้งาน 8051 เป็น NAND gateทำได้โดย อ่านค่าจากบิตต่างๆ และทำการ AND กัน จากนั้นกลับค่าพร้อมกับส่งออกทางบิต P1.7 ซึ่งขาที่บิตต่างๆสามารถใช้งานเป็นอินพุทและเอาท์พุทได้ ถ้าใช้ Z-80 ต้องสร้างพอร์ทอินพุท และเอาท์พุทประกอบด้วย

โครงสร้างของ MCS-51
ไมโครคอนโทรลเลอร์ตระกูล MCS-51 มีจำนวนมาก ขึ้นกับโครงสร้างภายใน บางเบอร์มีหน่วยความจำภายในเป็นแบบรอม บางเบอร์เป็นแบบอีพรอม บางเบอร์มีแรมภายใน 128 ไบท์ บางเบอร์มี 256 ไบท์ เป็นต้น คุณสมบัติที่สำคัญของ MCS-51 มีดังนี้
- หน่วยความจำรอม 4 กิโลไบท์
- หน่วยความจำแรม 128 ไบท์
- พอร์ทอินพุทและเอาท์พุท ขนาด 8 บิต 4 พอร์ท
- Timer 16 บิต 2 ตัว
- สามารถอินเทอร์รัพท์ได้ 5 แหล่ง
- วงจรออสซิลเลเตอร์และวงจรนาฬิกาบนชิพ
- พอร์ทอนุกรมสามารถรับส่งข้อมูลแบบ Full Duplex ความเร็วสูง
- อ้างหน่วยความจำโปรแกรมภายนอกได้ 64 กิโลไบท์
- อ้างหน่วยความจำข้อมูลภายภายนอกได้ 64 กิโลไบท์
- สามารถประมวลผลทีละบิต
- อ้างหน่วยความจำแบบบิตได้ 210 ตำแหน่ง
- หนึ่งวัฏจักรคำสั่งกินเวลาประมาณ 1 ไมโครวินาทีขณะทำงานด้วย Clock 12 เมกะเฮิร์ท

ตัวอย่าง ไมโครคอนโทรลเลอร์ตระกูล MCS-51 และลักษณะต่างๆ สามารถแสดงได้ ดังตารางที่ 1 สำหรับไดอะแกรมโครงสร้างภายในแสดงดังรูปที่ 3

ตารางที่ 1 แสดงไมโครคอนโทรลเลอร์ตระกูล MCS-51 เบอร์ต่างๆ



รูปที่ 3 แสดงโครงสร้างภายในของ MCS-51


การจัดขาต่าง ๆ ของ MCS-51
ไอซี ไมโครคอนโทรลเลอร์ 8051 โครงสร้าง ไอซี เป็นแบบ DIP มีขาทั้งหมด 40 ขา โดยขาต่างๆ เป็นขาพอร์ทอินพุท , ขาพอร์ทเอาท์พุท , ขาสัญญาณควบคุม ,ขาตำแหน่งหน่วยความจำข้อมูลดังรูปที่ 4



รูปที่ 4 แสดงขาต่างๆของ 8051


ความหมายขาต่างๆ มีดังนี้
1. พอร์ท 0 (Port 0)
พอร์ท 0 ได้แก่ขา 32-39 สามารถเป็นพอร์ทอินพุทและเอาท์พุทได้ ซึ่งในการติดต่อกับหน่วยความจำภายนอกสามารถเป็นขาบัสตำแหน่ง และบัสข้อมูลได้
2. พอร์ท 1 (Port 1)
พอร์ท 1 ได้แก่ขา 1-8 เป็นพอร์ท 8 บิต สามารถอ้างทีละบิตได้ เป็น P1.0, P1.1,…etc
3. พอร์ท 2 (Port 2)
พอร์ท 2 ได้แก่ขา 21-28 สามารถทำงานได้ 2 หน้าที่ เป็นพอร์ท 8 บิต และเป็นขาแอดเดรส 8 บิต ในการอ้างหน่วยความจำภายนอก
4. พอร์ท 3 (Port 3)
พอร์ท 3 ได้แก่ขา 10-17 สามารถทำงานได้ 2 หน้าที่ เป็นพอร์ทอินพุทและเอาท์พุท และเป็นขาควบคุมต่างๆ ดังตารางที่ 2

ตารางที่ 2 แสดงบิตและหน้าที่ต่างๆ ของพอร์ท 3

5. (Program Store Enable)
ขา ได้แก่ขา29 เป็นขาที่ส่งสัญญาณออก ขานี้ทำการแอคทีฟเมื่อ MCS-51 ต้องการอ่าน Codeโปรแกรมภายนอก โดยปกติถ้าหน่วยความจำภายนอกเป็นอีพรอมขา ต่อกับขา Output Enable ของอีพรอม
6. ALE (Address Latch Enable)
เนื่องจากพอร์ท 0 สามารถเป็นขาอ้างตำแหน่ง และขาข้อมูล MCS-5 ซึ่งมีขา ALE ได้แก่ขา 30 ขานี้ใช้ผสมสัญญาณบัสตำแหน่งของพอร์ท 0 ในการใช้งานระบบ MCS-51 นั้น ต้องมีอุปกรณ์มาต่อกับพอร์ท 0 ที่ทำหน้าที่ Latch สัญญาณบัสตำแหน่ง เมื่อ MCS-51 ติดต่อกับ หน่วยความจำภายนอก MCS-51 ส่งสัญญาณบัสตำแหน่งออกมาก่อนทาง พอร์ท 0 จากนั้นส่งสัญญาณ ALE มา Latch อุปกรณ์ภายนอก ให้เก็บค่าบัสตำแหน่งของพอร์ท 0 ไว้เพื่อใช้พอร์ท 0 เป็นบัสข้อมูลต่อไป
7. (External Access)
ขา ได้แก่ขา 31 ในสภาวะเป็นลอจิก "1" ใช้กับเบอร์ 8051/8052 เพื่อให้อ่านโปรแกรมจากหน่วยความจำภายใน และในสภาวะเป็นลอจิก "0" ทำให้ MCS-51 ทำโปรแกรมโดยอ่านจากหน่วยความจำโปรแกรมภายนอก (เมื่อ เป็น "0" ขา ทำการแอคทีฟ) หากเป็นเบอร์ 8031หรือ 8032 ขา เป็น "0" เสมอ เพราะไม่มีโปรแกรมหน่วยความจำภายใน หากใช้เบอร์ 8051/8052 ซึ่งมีหน่วยความจำภายในและให้ขา เป็น " 0 " ซึ่งหยุดการทำงานของรอมภายในและอ่านโปรแกรมจากอีพรอมภายนอกแทน
8. RST (Reset)
ขา RST ได้แก่ขา 9 เป็นขารีเซต MCS-51 โดยให้เป็นสภาวะลอจิก "1" อย่างน้อย 2 Machine Cycles จึงสามารถรีเซตระบบได้

ความถี่สัญญาณนาฬิกาบนชิพ (ON-chip Oscillator Inputs)
ได้แก่ขา 18-19 เป็นวงจรออสซิลเลเตอร์บนชิพ ซึ่งปกติทำการต่อคริสตัล ความถี่ 12 เมกะเฮิร์ท กับตัวเก็บประจุ หรืออาจใช้สัญญาณนาฬิกาจากต้นกำเนิดชนิด ทีทีแอลต่อกับ XTAL1 และ XTAL2 ดังรูปที่ 5




รูปที่ 5 ขาของ MCS-51 ที่ใช้ต่อกับ XTAL

Power Connections
ใน MCS - 51 นำแหล่งจ่ายไฟ 5 โวลท์ ต่อเข้ากับ Vcc (ขา 40) ส่วนขา Vss (ขา 20) ต่อลง กราวด์

โครงสร้างของพอร์ทอินพุทและเอาท์พุท (I/O Port Structure)
ขาของพอร์ทแสดงโครงสร้างภายในได้ ดังรูปที่ 6 โดยมีโครงสร้างเป็น Field-effect Transistor ต่ออยู่กับขาภายนอก และมีความต้านทานต่อ Pull-up อยู่สำหรับพอร์ท 1, 2, 3 เมื่อเป็นพอร์ท 0 ไม่มีตัวต้านทาน Pull-up ภายใน เพราะต้องใช้เป็นขาบัสตำแหน่ง และบัสข้อมูล




รูปที่ 6 โครงสร้างพอร์ททั้ง 4 ของ MCS-51

พอร์ทนี้สามารถเป็นอินพุทและเอาท์พุทกับอุปกรณ์ภายนอกได้ ในการอ่านข้อมูลจากพอร์ทอ่านได้ 2 แบบได้แก่ Read Latch และ Read Pin โดย Read Latch หมายถึงการอ่านข้อมูลที่ถูก Latch เอาไว้เข้าสู่บัสภายในของ MCS-51 เช่นการทำคำสั่ง CPL P1.5 ถ้าเป็นการ Read Pin ซึ่งเป็นการใช้พอร์ทเป็นอินพุท โดยอ่านค่าจากขาของไอซีเข้าสู่บัสภายใน โดยการอ่านแบบ Read Latch และ Read Pin มีสัญญาณมาควบคุมที่บัฟเฟอร์ดังรูปที่ 7




รูปที่ 7 การต่อพอร์ทเข้ากับระบบบัสภายในของ MCS-51

โครงสร้างหน่วยความจำ
หน่วยความจำสำหรับ MCS-51 มี 2 ชนิดได้แก่ หน่วยความจำที่ใช้เก็บโปรแกรมรอม กับหน่วยความจำที่ใช้เก็บข้อมูล ในการประมวลผลแรม MCS-51 บางเบอร์ เช่น 8051, 8052 มีหน่วยความจำภายในชิพ และ MCS-51 ทุกเบอร์สามารถอ้างหน่วยความจำ โปรแกรมภายนอกได้มากที่สุด 64 กิโลไบท์ สำหรับหน่วยความจำแรมภายใน ประกอบไปด้วยพื้นที่ใช้งานทั่วไป , รีจีสเตอร์ชุด , พื้นที่ใช้งานระดับบิต และรีจีสเตอร์ฟังก์ชั่นพิเศษ ไดอะแกรมของหน่วยความจำของ 8031 แสดงได้ดังรูปที่ 8




รูปที่ 8 การจัดหน่วยความจำของ MCS-51

ใน 8031 มีหน่วยความจำภายใน ตั้งแต่ตำแหน่ง 00H ถึง FFH และสามารถอ้างหน่วยความจำโปรแกรมภายนอกได้ 64 กิโลไบท์ ตำแหน่งที่อ่านข้อมูลจากหน่วยความจำโปรแกรมขา ทำการแอคทีฟ ซึ่ง 8031 สามารถอ้างหน่วยความจำภายนอกได้ 64 กิโลไบท์ ตำแหน่งโดยการติดต่อกับหน่วยความจำนี้ขา และ ทำการแอคทีฟ สำหรับหน่วยความจำข้อมูลภายในสามารถแบ่งได้ดังนี้
1.ชุดรีจีสเตอร์ 4 ชุดแต่ละชุดเรียกว่ารีจีสเตอร์ชุด ที่ตำแหน่ง 00H ถึง 1FH โดย แต่ละชุด ประกอบด้วยรีจีสเตอร์ R0 ถึง R7
2.หน่วยความจำที่สามารถเข้าถึงข้อมูลระดับบิตได้ ตำแหน่ง 20H ถึง 2FH
3.หน่วยความจำใช้งานทั่วไปตำแหน่ง 30H ถึง 7FH
4.รีจีสเตอร์ฟังก์ชั่นพิเศษ ตำแหน่ง 80H ถึง FFH
แผนผังการจัดการหน่วยความจำข้อมูลภายใน แสดงได้ดังรูปที่ 9 จากแผนผังแสดงถึง การอ้างตำแหน่ง หน่วยความจำภายในซึ่งอ้างได้ 2 แบบ ได้แก่ การอ้างไปที่ตำแหน่งของไบท์ (เขียนหมายเลขด้านนอก) หรือการอ้างไปที่ตำแหน่งของบิต (เขียนหมายเลขตำแหน่งด้านใน) โดยตำแหน่งของหน่วยความจำ ที่อ้างเป็นแบบบิตที่แน่นอน




รูปที่ 9 ตำแหน่งของหน่วยความจำแบบไบท์และแบบบิต

หน่วยความจำใช้งานทั่วไป
จากรูปที่ 9 แสดงถึง หน่วยความจำแรม สำหรับใช้งานทั่วไปจำนวน 80 ไบท์ ตั้งแต่ ตำแหน่ง 30H ถึง 7FH ซึ่งตำแหน่งนี้สามารถอ้างตำแหน่ง Direct Addressing Mode หรือ Indirect Addressing Mode ได้ ตัวอย่าง เช่น ถ้าอ่านข้อมูลที่อยู่ในตำแหน่ง 5FH มาเก็บใน รีจีสเตอร์ A สามารถเขียนคำสั่งได้ดังนี้

MOV A,5FH

การย้ายข้อมูลนี้เป็นการย้ายข้อมูลจากตำแหน่งที่เก็บโดยตรง (ตำแหน่ง 5FH) เป็นการอ้างตำแหน่งแบบ Direct Addressing Mode ซึ่งสามารถอ่านข้อมูลโดยใช้รีจีสเตอร์ R0 หรือ R1 ที่ตัวชี้ตำแหน่งได้ เป็นการอ้างตำแหน่งแบบ Indirect Addressing Mode ตัวอย่างเช่น
MOV R0,#5FH
MOV A,@R0

การเขียนโปรแกรมนี้ หมายถึง เก็บค่า 5FH ไว้ใน R0 จากนั้นอ่านค่าที่ R0 ชี้อยู่คือตำแหน่ง 5FH มาเก็บไว้ที่รีจีสเตอร์ A ถ้าในตำแหน่ง 5FH มี 80 อยู่ ค่า 80 ถูกเก็บใน A ดังรูปที่ 10



รูปที่ 10 ขั้นตอนต่าง ๆ ในการอ่านข้อมูล

Bit - addressable RAM
ใน MCS-51 มีหน่วยความจำซึ่งสามารถอ้างข้อมูลในระดับบิตได้ตั้งแต่ตำแหน่ง 20H ถึง 2FH รวม 16 ไบท์ โดยสามารถ SET , CLEAR , AND , OR ทางลอจิกได้ จำนวนบิตที่ใช้งานได้ทั้งหมดมีจำนวน 128 บิต (8บิต X 16ไบท์) เมื่อต้องการรีเซตบิตตำแหน่งที่ 67H สามารถเขียนคำสั่งได้ดังนี้

SETB 67H

จากรูปที่ 9 แสดงบิตที่ 67H อยู่ในตำแหน่งไบต์ที่ 2CH

ชุดรีจีสเตอร์ (Register Banks)
หน่วยความจำข้อมูลภายใน ที่ใช้เป็นชุดรีจีสเตอร์ มีทั้งหมด 32 ตำแหน่ง โดยมี 4 ชุด แต่ละชุดมีรีจีสเตอร์ 8 ตัว คือ R0 ถึง R7 โดยชุดแรกอยู่ในตำแหน่ง 00H - 07H เมื่ออ่านค่าจากตำแหน่ง 05H มาเก็บไว้ในรีจีสเตอร์ A เขียนโปรแกรมได้ดังนี้
MOV A,R5

การอ้างตำแหน่งแบบ Register Addressing ซึ่งขนาดของรหัสคำสั่งมีขนาด 1 ไบท์ ถ้าเขียนคำสั่งเป็น MOV A,05H ผลที่ได้เหมือนกัน แต่การเขียนแบบนี้ถ้าแปลงเป็นรหัสคำสั่ง มีขนาด 2 ไบท์ ซึ่งทำโปรแกรมยาวกว่าแบบแรกในการติดต่อกับรีจีสเตอร์ชุดนั้น สามารถเลือกให้ชุดใด แอคทีฟได้โดยเขียนข้อมูลไปที่ Program Status Word ซึ่งอยู่ในส่วนของรีจีสเตอร์ฟังก์ชั่นพิเศษ เช่น ถ้าโปรแกรมให้ ชุด 3 แอคทีฟ ย้ายข้อมูลจากรีจีสเตอร์ A ไปที่ตำแหน่ง 18H ได้ดังนี้

MOV R0,A

ถ้าไม่มีการเลือกชุดเป็นการติดต่อกับรีจีสเตอร์ชุดแรกเสมอ

รีจีสเตอร์ฟังก์ชั่นพิเศษ (Special Function Register)
ใน MCS-51 รีจีสเตอร์ใช้หน่วยความจำแรมภายในชิพ โดยส่วนหนึ่งเป็น รีจีสเตอร์พิเศษ ซึ่งมีทั้งหมด 21 ตัว โดยรีจีสเตอร์พิเศษต่างๆ เริ่มที่หน่วยความจำ ตั้งแต่ 80H ถึง FFH ซึ่งมีทั้งหมด 128 ตำแหน่ง แต่เป็นรีจีสเตอร์ฟังก์ชั่นพิเศษ เพียง 21 ตำแหน่ง หากเป็น8032 / 8051 ใช้ 26 ตำแหน่ง หรือมี SFR 26 ตัว
จากรูปที่ 9 แสดงตำแหน่งหน่วยความจำของรีจีสเตอร์ บางตัวสามารถเข้าถึงข้อมูลแบบบิตได้ เช่นถ้าเขียนโปรแกรมเป็น
SETB 0E0H

เป็นการรีเซตบิต 0 ของ Accumulator เนื่องจากตำแหน่ง E0H เป็นตำแหน่งของรีจีสเตอร์ A และเป็นตำแหน่งบิตแรกของ รีจีสเตอร์ A ด้วย คำสั่ง SETB (Set Bit) มีผลต่อบิตเท่านั้น แต่ไม่มีผลต่อไบต์ หากต้องการติดต่อกับพอร์ท 1 ซึ่งไบท์ของพอร์ท 1 อยู่ที่ตำแหน่ง 90H แต่ตำแหน่งของระดับบิตอยู่ที่ตำแหน่ง 90H ถึง 97H รีจีสเตอร์ในกลุ่มรีจีสเตอร์ฟังก์ชั่นพิเศษมีดังนี้

Program Status Word
รีจีสเตอร์นี้เรียกย่อ ๆ ว่า PSW อยู่ที่ตำแหน่ง D0H ซึ่งสามารถเข้าถึงข้อมูลระดับบิตได้โดยรีจีสเตอร์นี้เป็นตัวบอกสภาวะต่าง ๆ ของไมโครคอนโทรลเลอร์ ความหมายของแต่ละบิตแสดงได้ดังตารางที่ 3



ตารางที่ 3 แสดงบิตและหน้าที่ต่าง ๆ ใน PSW

1. แฟลกตัวทด Carry Flag (CF) บิตนี้เป็นบิตที่ 7 ของ PSW บิตนี้มีความสำคัญหากมีการกระทำทางคณิตศาสตร์โดยบิตนี้รีเซต เมื่อเกิดการทดของบิตที่ 7 ขณะทำการบวกเลข หรือ รีเซต เมื่อเกิดการยืมของบิตที่ 7 เมื่อเกิดการลบเลข ตัวอย่างเช่น ถ้าค่าใน Accumulator มีค่าเป็น FFH แล้วทำคำสั่งนี้

ADD A,#1

ค่าใน Accumulator เปลี่ยนเป็น 00H และบิต CY ใน PSW ถูกรีเซตนอกจากนี้ บิต CY สามารถใช้เป็น "Boolean Accumulator" ได้ซึ่งเป็น รีจีสเตอร์ขนาด 1 บิตได้ ตัวอย่างเช่น ถ้า AND บิตที่ 25H กับ CY ผลลัพธ์ที่ได้ถูกเก็บใน CY ซึ่งเขียนคำสั่งได้ดังนี้
2. แฟลกตัวช่วยทด Auxiliary Carry Flag เมื่อมีการบวกแบบ Binary -Code -Decimal (BCD) บิต Auxiliary Carry Flag(AC) หรือบิตตัวช่วยทดถูกรีเซต เมื่อมีการทดจากบิตที่ 3ไปบิตที่ 4 หรือถ้าใน Lower Nibble มีค่าระหว่าง 0AH-0FH เนื่องจากรหัส BCD มีค่าได้มากที่สุดแค่ 9 ถ้ามีการบวกเลขแบบ BCD ต้องตามด้วยคำสั่ง DAA (Decimal Adjust Accumulator) เพื่อปรับค่าที่มีค่าเกิน 9 โดยบวกเลข 6 เข้าไป สามารถเป็นรหัส BCD ที่แทนเลขฐานสิบได้
3. แฟลกศูนย์ Flag 0 เป็น Flag ที่ผู้ใช้สามารถใช้งานทั่วไปได้
4. บิตเลือกชุดรีจีสเตอร์ (Register Bank Select Bits) ใน MCS-51 มีชุดรีจีสเตอร์อยู่ 4 ชุด ถ้าเลือกให้ชุดใดแอคทีฟกำหนดได้ในบิต RS1 และ RS2 ของ PSW และเคลียร์ตัวเองเมื่อระบบถูกรีเซต ถ้าต้องการติดต่อกับรีจีสเตอร์ ชุด 3 โดยย้ายข้อมูลจาก R7 (ตำแหน่ง 1FH) มาเก็บใน Accumulator เขียนโปรแกรมได้ดังนี้

SETB RS1
SETB RS0
MOV A,R7

ในโปรแกรม Assembled สามารถรับรู้สัญลักษณ์ RS1 และ RS2 ได้ เช่น คำสั่ง SETB RS1 มีความหมายเท่ากับ SETB0D4H หรือรีเซตบิตตำแหน่งที่ D4H
5. แฟลกค่าเกิน Overflow Flag แฟลก OV ถูกรีเซต หลังจากการกระทำทางคณิตศาสตร์แล้วเกิด Overflow คือ จำนวนที่เกิดจากการบวกหรือการลบ มีค่าเกินกว่าที่จำนวนไบท์เป็นไปได้คือ มากกว่า +128 หรือน้อยกว่า -125 ตัวอย่างเช่น ถ้าเกิดการบวกเลขสองจำนวนนี้เกิดการรีเซตบิต OV ขึ้นใน PSW



6. บิตพาริตี้ (Parity Bit ) พาริตี้บิต(P) เป็นบิตที่แสดงค่าพาริตี้ของรีจีสเตอร์ Accumulator ซึ่งอาจเป็นตัวตรวจสอบความถูกต้อง ของข้อมูลได้ โดยรีเซตหรือเคลียร์ขึ้นกับ Accumulator เช่น ถ้า Accumulator มีค่า 10101101B บิต p เป็น "1"

รีจีสเตอร์ B (B Register)
รีจีสเตอร์ B อยู่ตำแหน่ง F0H ของหน่วยความจำข้อมูลภายใน เป็นรีจีสเตอร์ที่สามารถใช้งานทั่วไปได้ โดยทั่วไปรีจีสเตอร์นี้ใช้คูณหรือหารกับรีจิสเตอร์ Accumulator เช่นการทำคำสั่ง MUL AB ซึ่งเป็นการคูณแบบ 8 บิตโดยผลลัพธ์ที่ได้มีขนาด 16 บิต ซึ่งรีจีสเตอร์ A เก็บค่า 8 บิตต่ำ และรีจีสเตอร์ B เก็บค่า 8 บิตสูง สำหรับการหารโดยการทำคำสั่ง DIV AB โดยค่าใน A ถูกหารด้วย B ผลลัพธ์ที่ได้เก็บในรีจีสเตอร์ AB โดย B เก็บค่า 8 บิตต่ำ และ A เก็บค่า 8บิตสูง รีจีสเตอร์ B นี้สามารถเข้าถึงข้อมูลระดับบิตได้ โดยตำแหน่งของบิตคือตำแหน่ง F0H ถึง F7H

ตัวชี้สแตค (Stack Pointer)
Stack Pointer (SP) เป็นรีจีสเตอร์ขนาด 8 บิต อยู่ตำแหน่ง 81H การเขียนค่าเข้าไปในตำแหน่งที่ SP ชี้อยู่นี้ เป็นการ "Pushing" สำหรับการอ่านค่าที่ SP ชี้อยู่ เป็นการ "Poping" ค่าของ SP เพิ่มขึ้นหนึ่ง ก่อนที่เขียนข้อมูลลงไป และลดลงหนึ่งเมื่ออ่านข้อมูลออกไป หากโปรแกรมทำคำสั่ง Call ใช้รีจีสเตอร์สแตคนี้เก็บค่าตำแหน่งเดิมของโปรแกรม (PC) ก่อนทำโปรแกรมย่อย เมื่อทำโปรแกรมย่อยเสร็จแล้ว คืนค่าในสแตคให้กับ PC ตามเดิม โดยปกติค่า PC กำหนดให้อยู่ในแรมภายใน ต้องการให้มี SP เริ่มที่ตำแหน่ง 60H ต้องเขียนคำสั่งดังนี้

MOV SP,#5FH

การเขียนคำสั่งหากใช้กับเบอร์ 8031/ 8051 เก็บค่าสแตคได้ 32 ไบท์ เพราะหน่วยความจำของแรมภายในสิ้นสุดที่ 7FH แต่กำหนดให้ SP มีค่าเท่ากับ 5FH ซึ่งเริ่มใช้งานที่ตำแหน่ง 60H ถ้า MCS - 51 ถูกรีเซต ค่า SP ถูกกำหนดเองเป็น 07H ซึ่งทับกับรีจีสเตอร์ชุด 1 ถ้างานที่ออกแบบขึ้น ต้องใช้ รีจีสเตอร์ชุด 1 ด้วยควรกำหนดค่า SP ก่อน

รีจีสเตอร์ Data Pointer (DPTR)
รีจีสเตอร์นี้ใช้สำหรับ ชี้ตำแหน่งรหัสโปรแกรม หรือ ข้อมูลในหน่วยความจำ โดยเป็นรีจีสเตอร์ขนาด 16 บิต ซึ่งประกอบด้วยรีจีสเตอร์ 2 ตัว คือ DPL ตำแหน่งที่ 82H โดยเก็บเป็น 8 บิตต่ำ และ DPH ตำแหน่งที่ 83H โดยเก็บค่า 8 บิตสูง รีจีสเตอร์ทั้งสองตัวนี้รวมกันกเป็นรีจีสเตอร์ 16 บิต ถ้าต้องการเก็บค่า 55H ไปยังตำแหน่งของหน่วยความจำข้อมูลภายนอกตำแหน่งที่ 1000H เขียนโปรแกรมได้ดังนี้

MOV A,#55H
MOV DPTR#1000H
MOVX @DPTR,A

ในบรรทัดแรกเป็นการอ้างตำแหน่งแบบ Immediate Addressing ซึ่งเก็บค่า 55H ลงในรีจีสเตอร์ A จากนั้นเก็บค่า 1000H ลงในรีจีสเตอร์ 1 บิต DPTR เพื่อชี้ไปที่ตำแหน่งหน่วยความจำบรรทัดที่ 3 เป็นการอ้างตำแหน่งแบบ Indirect Addressing ซึ่งเก็บค่าใน A คือ 55H ลงในตำแหน่งที่ DPTR ชี้อยู่คือตำแหน่ง 1000H

รีจีสเตอร์พอร์ท (Port Registers)
ใน MCS- 51 ค่าของพอร์ทเป็นค่าของหน่วยความจำ หากต้องการส่งข้อมูลจากพอร์ท ทำการอ่านค่าในตำแหน่งที่หน่วยความจำที่พอร์ทนั้น ใน MCS-51 พอร์ท 0 อยู่ที่ตำแหน่ง 80H ,พอร์ท 1 อยู่ที่ตำแหน่ง 90H , พอร์ท 2 อยู่ที่ตำแหน่ง A0H และพอร์ท 3 อยู่ที่ตำแหน่ง B0H พอร์ท 0 , 2 และ 3 โดยทั่วไปไม่ใช้ หากมีการติดต่อกับหน่วยความจำภายนอก หรือใช้เป็นพอร์ทพิเศษ (เช่น Interrupts , Serial Port ) โดยปกติแล้วใช้ พอร์ท 1 ในการติดต่อกับอุปกรณ์ภายนอก พอร์ททุกพอร์ทสามารถอ้างถึงข้อมูลในระดับบิตได้ ตัวอย่าง เช่นถ้าพอร์ท 1 บิต 7 ต่อกับหลอดไฟไว้ดังรูปที่ 11 โดยมีเกตแบบ OC ช่วยขับกระแสการปิดเปิดหลอดไฟทำได้โดยการรีเซตหรือเคลียร์บิต 7 ของพอร์ท 1 นี้



รูปที่ 11 การใช้ MCS-51 ปิด-เปิดหลอดไฟ

ต้องการเปิดไฟคำสั่งดังนี้
SETB P1.7
ต้องการปิดไฟคำสั่งดังนี้
CLR P1.7
การติดต่อกับพอร์ทในระดับนี้ ซึ่งใช้คำสั่งในการอ้างข้อมูลระดับบิตได้ เช่น บิต 7 ของพอร์ท 1 ตรงกับตำแหน่งระดับบิต คือ ตำแหน่ง 97H เขียนคำสั่งได้ดังนี้
CLR 97H

รีจีสเตอร์เวลา (Timer Registers)
ใน MCS - 51 เบอร์ 8051 มีรีจีสเตอร์ที่ใช้นับ และจับเวลาขนาด 16 บิต 2 ตัวคือ Timer 0 อยู่ที่ตำแหน่ง 8AH และ 8CH โดยตำแหน่ง 8AH หมายถึง TL0 ซึ่งเป็น 8 ไบท์ต่ำ และ 8CH หมายถึง 8 ไบท์สูง TH0 รีจีสเตอร์อีกตัวคือ Timer 1 โดยแบ่งเป็น TL1 อยู่ที่ตำแหน่ง 8BH เป็นไบต์ต่ำและ TH1 อยู่ที่ตำแหน่ง 8DH เป็นไบท์สูง การใช้ Timer ต้องกำหนดการทำงานในรีจีสเตอร์ TMOD (Timer / Counter Mode Control Register) ซึ่งอยู่ที่ตำแหน่ง 88H ก่อน

พอร์ทอนุกรม (Serial Port Register )
MCS - 51 มีพอร์ทสื่อสารอนุกรมอยู่ภายในชิพ ซึ่งสามารถรับหรือส่งข้อมูลแบบอนุกรมให้เขียนข้อมูลไปที่รีจิสเตอร์ SBUF (Serial Data Buffer) ซึ่งอยู่ที่ตำแหน่ง 99H ถ้าต้องการส่งข้อมูลแบบอนุกรมให้เขียนข้อมูลไปที่รีจีสเตอร์นี้ พอร์ทอนุกรมสามารถโปรแกรมให้ทำงานได้ 4 โหมด โดยโปรแกรมผ่านรีจีสเตอร์ SCON (Serial Port Control Register) ตำแหน่ง 98H

อินเทอร์รัพท์ (Interrupt Port Register )
MCS - 51 สามารถอินเทอร์รัพท์ได้ 5 ตำแหน่ง โดยมี 2-priorily ตัว อินเทอร์รัพท์ทำการ Disable หลังจากระบบได้รีเซต และ Enabled หลังจากที่เขียนข้อมูลไปที่รีจีสเตอร์ IE หรือตำแหน่ง A8H ลำดับความสำคัญสามารถรีเซตได้ที่รีจีสเตอร์ IP หรือตำแหน่ง B8H

Control Register (PCON)
รีจีสเตอร์ PCON อยู่ที่ตำแหน่ง 87H ใช้หยุดการทำงานของ MCS - 51 โดยหยุดจ่ายสัญญาณนาฬิกาให้ระบบ ทำให้ข้อมูลต่างๆ ภายใน MCS - 51 ไม่มีการเปลี่ยนแปลงซึ่งสามารถลดพลังงานไฟฟ้าที่จ่ายให้ MCS - 51 ลง

หน่วยความจำภายนอก (External Memory)
MCS-51 สามารถอ้างหน่วยความจำข้อมูลภายนอกได้ 64 กิโลไบท์ MCS-51 ใช้พอร์ท 0 ในการอ้างตำแหน่งหน่วยความจำ 8 บิตล่าง และใช้พอร์ท 0 เป็นพอร์ทข้อมูลด้วย โดยใช้ขา ALE เป็น Latch ข้อมูลพอร์ท 0 และใช้พอร์ท 2 เป็นขาอ้างตำแหน่ง 8 บิตบน (รวมขาอ้างตำแหน่ง 16 เส้น ซึ่งอ้างได้ 64 กิโลไบท์ ) นอกจากพอร์ท 0 ใช้งาน 2 หน้าที่ ในการติดต่อกับหน่วยความจำ ใช้วิธีมัลติเพล็กท์ระหว่างตำแหน่งกับข้อมูล ถ้าต้องการติดต่อกับหน่วยความจำที่เก็บข้อมูล 8 บิต และเก็บได้ 64 กิโลไบท์ ต้องใช้สายสัญญาณ 24 เส้นเป็นขาแอดเดรส 16 เส้น และขาข้อมูล 8 เส้น ดังรูปที่ 12 ถ้าใช้วิธีมัลติเพล็กท์ ใช้ขา A0 - A7 เป็นขาข้อมูล D0- D7 ใช้สายสัญญาณเพียง 16 เส้น รูปที่ 12 เมื่อต้องการติดต่อกับหน่วยความจำ ทำการส่งสัญญาณแอดเดรส A0 -A15 ออก 16 เส้น จากนั้นขา A0-A7 เปลี่ยนเป็น D0- D7 ในการติดต่อกับหน่วยความจำภายนอก MCS - 51 ใช้วิธีนี้



รูปที่ 12 ไดอะแกรมกลุ่มสัญญาณที่ใช้อ่านข้อมูล


การติดต่อกับหน่วยความจำโปรแกรมภายนอก
การอ่านข้อมูลที่หน่วยความจำโปรแกรมภายนอก MCS - 51 ส่งค่าตำแหน่งหน่วยความจำออกไป ซึ่งค่าตำแหน่งเก็บอยู่ใน PC ส่งออกทางพอร์ท 0 และพอร์ท 2 จากนั้นส่งขา ALE เป็นลอจิก "0" เพื่อLatch ขาแอดเดรส ของ 8 บิตต่ำคือพอร์ท 0 และส่งสัญญาณทางขา PSEN เป็นลอจิก " 0 " เพื่ออ่านข้อมูลซึ่งได้ Opcode เข้าไปทางขาบัสข้อมูล คือพอร์ท 0 ไดอะแกรมเวลาการอ่านข้อมูลจากหน่วยความจำภายนอก แสดงได้ดังรูปที่ 13



รูปที่ 13 ไดอะแกรมการอ่านข้อมูลจากหน่วยความจำโปรแกรมภายนอก

รูปที่ 13 ช่วงเวลาการทำงานของ MCS - 51 ใน S2 MCS - 51 ส่งค่าตำแหน่งหน่วยความจำโปรแกรม (ค่า PC) ทางพอร์ท 0 และ พอร์ท 2 จากนั้นส่งขา ALE เป็น " 0 " เพื่อ Latch อุปกรณ์ภายนอกคงค่าตำแหน่งไบท์ต่ำไว้ (พอร์ท 0 ) เพื่อใช้พอร์ท 0 เป็นขาข้อมูลต่อไป จากนั้นส่งขา PSEN เป็น " 0 " เพื่ออ่าน Opcode เข้าทางพอร์ท 0
การต่อหน่วยความจำกับ MCS - 51 แสดงได้ดังรูปที่ 14 โดยขา ต่อเป็น "0" เพื่อให้ MCS - 51 อ่านหน่วยความจำโปรแกรมภายนอกสำหรับการ มัลติเพล็กท์ ใช้ฟลิปฟลอป 8 ตัวเบอร์ 74373 เก็บค่าตำแหน่ง 8 บิตต่ำไว้ เมื่อ MCS - 51 ส่งค่าตำแหน่งพอร์ทออกไปจากนั้นส่งขา ALE ให้เป็น "0" ซึ่งใช้ขานี้ต่อกับ 74373 เพื่อ Latch ข้อมูลสำหรับขา ต่อกับขา Output Enable ของหน่วยความจำดังรูปที่ 14



รูปที่ 14 การต่อ MCS - 51 กับหน่วยความจำโปรแกรมภายนอก

การติดต่อกับหน่วยความจำข้อมูลภายนอก
หน่วยความจำข้อมูลภายนอก MCS - 51 สามารถอ่าน และ เขียนได้ ในการติดต่อกับหน่วยความจำข้อมูลภายนอก MCS - 51 ส่งขาแอดเดรส ออกทางพอร์ท 0 และ พอร์ท 2 จากนั้นส่งขา ALE เพื่อไป Latch Address 8 บิตต่ำ โดยการอ่านเขียนข้อมูลนั้นใช้ขา หรือ P3.7 และขา หรือ P3.6 ตามลำดับ
ไดอะแกรมเวลาการอ่านและเขียนข้อมูลกับหน่วยความจำภายนอกแสดงดังรูปที่ 15



รูปที่ 15 ไดอะแกรมเวลาการอ่านและเขียนข้อมูลกับหน่วยความจำภายนอก

ตำแหน่งของหน่วยความจำภายนอกมีได้ถึง 64 กิโลไบท์ ชุดรีจีสเตอร์ที่ใช้เก็บค่าตำแหน่งของหน่วยความจำภายนอกใช้ชุดรีจีสเตอร์ 16 บิต คือ DPTR ใช้รีจีสเตอร์ 8 บิตได้ 2 ตัว คือ R0 และ R1 ในการติดต่อกับหน่วยความจำภายนอกใช้คำสั่ง MOVX
ถ้า MCS - 51 ทำคำสั่ง MOVX A , @DPTR หมายถึงให้อ่านค่าในตำแหน่งที่ DPTR ชี้อยู่ เก็บในชุดรีจีสเตอร์ A ไดอะแกรมเวลาเป็นดังรูปที่ 2.16 โดย Machine Cycle แรกเป็นการอ่านค่า Opcode ของโปรแกรม ให้ทำคำสั่ง MOVX A , @DPTR ซึ่งการอ่านค่าโปรแกรมได้ Opcode เข้ามา จากนั้น MCS - 51 อ่านข้อมูลตำแหน่งที่ DPTR ชี้อยู่ใน Machine Cycle ต่อไปนำค่า DPTR ส่งออกเป็นค่าแอดเดรส โดย DPH ส่งออกทางพอร์ท 2 และ DPL ส่งออกทางพอร์ท 0 จากนั้นขา ALE เป็น "0" เพื่อ Latch ข้อมูลแอดเดรส 8 บิตต่ำ และ เป็น "0" จากนั้นข้อมูลอ่านเข้าทางบัสข้อมูลคือพอร์ท 0 ไดอะแกรมเวลาการทำงานแสดงได้ดังรูปที่ 16



รูปที่ 16 สัญญาณต่างๆ ที่เกิดขึ้นขณะทำคำสั่ง MOVX

การเชื่อมต่อหน่วยความจำข้อมูลกับ MCS-51 ให้ 8051 ทำงานกับหน่วยความจำแสดงได้ดังรูปที่ 17 เป็นการเชื่อมต่อแรมขนาด 1 กิโลไบท์ ใช้ขา แอดเดรส เพียง 10 เส้น ดังนั้น A8 และ A9 ต่อกับ P2.0 และ P2.1 ส่วนขา ต่อกับลอจิก "1" เพื่อให้อ่านโปรแกรมจากรอมภายใน และขา ไม่ใช้เพราะไม่ได้ต่อรอมแสดงได้ดังรูปที่ 17



รูปที่ 17 การต่อหน่วยความจำโปรแกรมกับ MCS-51

ข้อสังเกตขนาดที่ MCS-51 ติดต่อกับหน่วยความจำโปรแกรม หรือหน่วยความจำข้อมูลภายนอกใช้ขาแอดเดรส เหมือนกัน ต่างกันที่ ถ้าติดต่อกับหน่วยความจำโปรแกรมขา ทำการแอคทีฟ ถ้าติดต่อกับหน่วยความจำข้อมูลขา , ทำการแอคทีฟและ MCS-51 ติดต่อกับหน่วยความจำโปรแกรม ด้วยคำสั่งMOVC และติดต่อกับหน่วยความจำข้อมูลด้วยคำสั่ง MOVX

Reset Operation
การรีเซตหรือเริ่มต้นทำงานใหม่ของ MCS-51 ให้ลอจิก "1" ที่ขา RST เป็นเวลา 2 Machine Cycles (1 Machine Cycle เท่ากับ 12 Clock ) จากนั้นให้กลับเป็นลอจิก "0" การรีเซตอาจทำได้โดยใช้สวิตซ์กด ดังรูปที่ 18 (ก) หรือใช้วิธี Power-up โดยใช้ตัว R-C ต่อเป็นวงจรดังรูปที่ 18



รูปที่ 18 การรีเซต MCS-51

เมื่อ MCS-51 ถูกรีเซตค่ารีจีสเตอร์ต่างๆถูกกำหนดค่าดังตารางที่ 4 โดย PC อยู่ที่ตำแหน่ง เริ่มต้น คือ 0000H เมื่อขา RST กลับเป็น "0" MCS -51 เริ่มทำโปรแกรมที่ตำแหน่งแรก

ตารางที่ 4 แสดงค่าต่างๆ ที่เกิดหลังการรีเซต




1