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

MCS-51 Microcontroller


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


ผู้ออกแบบไมโครโปรเซสเซอร์ชิพเดี่ยวจะพยายามรวมส่วนที่มีความสำคัญ ในการทำงานของระบบไมโครโปรเซสเซอร์พื้นฐานลงในไอซีเพียงตัวเดียวให้มากที่สุด ไมโครโปรเซสเซอร์ชิพเดี่ยวจะต้องมีส่วนสำคัญที่พบได้ในไมโครโปรเซสเซอร์ทั่วไปทั้งหมดหรือเกือบทั้งหมด ซึ่งส่วนเหล่านี้ได้แก่ ROM (หรือ EPROM) RAM พอร์ตขนาน วงจรนาฬิกา และโดยปกติจะมีการรวมพอร์ตอนุกรมเข้าไปด้วย

จะเห็นได้ว่าไมโครโปรเซสเซอร์ชิพเดี่ยวนั้นมีความซับซ้อนทางโครงสร้างมากกว่าไมโครโปรเซสเซอร์ทั่วไป เพราะมันมีส่วนที่ทำหน้าที่เกี่ยวกับ I/O เพิ่มเข้ามาด้วย และเนื่องจากความซับซ้อนของมัน ไมโครโปรเซสเซอร์ชิพเดี่ยวจึงไม่ถูกพัฒนาร่วมกับไมโครโปรเซสเซอร์ทั้วไปในยุคแรกๆ โดยไมโครโปรเซสเซอร์ชิพเดี่ยวส่วนใหญ่ถูกพัฒนาขึ้รหลังจากการสร้างไมโครโปรเซสเซอร์ทั่วไปนั้นเข้าสู่ยุคที่สองแล้ว


ไมโครโปรเซสเซอร์ชิพเดี่ยวขนาด 4 บิต เริ่มถูกวางจำหน่ายช่วงกลางทศวรรษที่ 1970 โดยบริษัท Texas Instrument ได้เปิดตัวไมโครโปรเซสเซอร์ชิพเดี่ยวขนาด 4 บิต ตระกูล TMS-1000 และบริษัท Fairchild เปิดตัวระบบชิพคู่ ขนาด 8 บิต ที่มีชื่อเรียกว่า F8 ในช่วงเวลาใกล้เคียงกัน สินค้าทั้งสองใช้สถาปัตยกรรมที่มีความเป็นเอกลักษณ์และมีความจำกัด


เริ่มมีการผลิต ไมโครโปรเซสเซอร์ชิพเดี่ยวขนาด 8 บิต ในปี ค.ศ. 1977 และ 1978 ซึ่งช่วงนั้นบริษัท Motorola ได้เปิดตัวไมโครโปรเซสเซอรืชิพเดี่ยวเบอร์ 6800 และบริษัท Intel ได้เปิดตัวไมโครโปรเซสเซอร์ชิพเดี่ยวที่ใช้สถาปัตยกรรมของ 8080 ในปัจจุบันยังมีการนำไมโครโปรเซสเซอร์ทั้งสองรุ่นนี้มาใช้


บรรดาไมโครคอนโทรลเลอร์ที่มีการผลิตจากบริษัทต่างๆ จำนวนมากนั้น ไมโครคอนโทรลเลอร์จากบริษัทอินเทล (Intel Corporation) ในตระกูล MCS-51 ได้มีการนำไปใช้งานกันอย่างแพร่หลายมาก นับตั้งแต่ปี ค.ศ. 1980 เป็นต้นมา โดยเป็นไมโครคอนโทรลเลอร์รุ่นที่สองถัดจากตระกูล MCS-48 ในระยะที่ผ่านมาได้มีอีกหลายบริษัท เช่น Phillips Siemens เป็นต้น ได้รับลิขสิทธิ์ ในการไปผลิตจำหน่าย และได้มีการเพิ่มประสิทธิภาพ และหน่วยการทำงานต่างๆมากขึ้น ทำให้ปัจจุบันมีไมโครคอนโทรลเลอร์หลายรุ่น (version) ซึ่งมีสถาปัตยกรรมพื้นฐานที่เหมือนกัน เพียงแต่มีขนาดหรือจำนวนหน่วยทำงานภายในที่แตกต่างกันออกไป เพื่อความเหมาะสมในงานประยุกต์ต่างๆตามความต้องการ ดังแสดงในตาราง โดยมีทั้งลักษณะที่ใช้เทคโนโลยีการผลิตวงจรรวมความจุสูงมาก (LSI*) แบบ HMOS หรือ CHMOS ซึ่งมีคุณลักษณะที่สูงมากขึ้นและสิ้นเปลืองกำลังไฟฟ้าน้อยกว่ามาก อย่างไรก็ตาม การอ้างถึงไมโครคอนโทรลเลอร์ MCS-51 หรือไมโครโปรเซสเซอร์ชิพเดี่ยว ในบทความนี้จะเรียกว่า CPU หรือ MCS-51 แทน

Embedded Controller
คุณลักษณะพื้นฐานของ MCS-51

หน่วยการทำงานพื้นฐานของไมโครคอนโทรลเลอร์เบอร์ต่างๆที่อยุ่ในตระกูล MCS-51 ประกอบด้วย

  • หน่วยประมวลผลกลางขนาด 8 บิต
  • หน่วยประมวลผลสำหรับข้อมูลแบบบิต (Boolean Processor)
  • ความสามารถในการอ้างตำแหน่งของหน่วยความจำโปรแกรม 64K bytes
  • ความสามารถในการอ้างตำแหน่งของหน่วยความจำข้อมูล 64K bytes
  • หน่วยความจำโปรแกรมภายในขนาด 4 K bytes แบบ EPROM (เบอร์ 8751) หรือแบบ ROM (เบอร์ 8051)
  • พอร์ตอินพุต เอาท์พุตแบบขนานจำนวน 32 ช่อง ซึ่งสามารถแยกการทำงานได้อย่างอิสระ
  • วงจรนับ จับเวลาขนาด 16 บิต จำนวนสองวงจร และสามวงจรเฉพาะเบอร์ 8052 8032 และ 8752
  • วงจรสื่อสารข้อมูลอนุกรมแบบ Full Duplex
  • วงจรควบคุมการ Interrupt จากแหล่งกำเนิดสัญญาณ 6 ประเภท พร้อมการกำหนดลำดับความสำคัญได้สองระดับ
  • วงจรออสซิลเลเตอร์ภายใน

สถาปัตยกรรมของ MCS-51 และโปรแกรมมิ่งโมเดล (MCS-51 Architecture and Programming Model)

MCS-51 Architecture and Programming Model

จาก บล็อกไดอะแกรม แสดงสถาปัตยกรรมของ MCS-51 เราจะเห็นว่า การเชื่อมต่อของชิพกับภายนอกนั้นไม่มีความซับซ้อนมากนัก ตัวชิพดังแสดงในรูปจะมีขาสัญญาณจำนวน 32 ขาสำหรับใช้เป็นพอร์ต I/O จำนวน 4 พอร์ต ที่สามารถส่งข้อมูลได้สองทิศทาง นอกจากนี้ตัวชิพยังมีขาป้อนไฟเลี้ยง ขาสำหรับใช้เชื่อมต่อคลิสตอลที่สร้างสัญญาณนาฬิกา และขาส่งสัญญาณกำกับจังหวะการทำงาน และขาส่งสัญญาณควบคุม

เมื่อเปรียบเทียบชิพ MCS-51 กับ Z80 ที่มีขาเกี่ยวกับการควบคุมและขาให้จังหวะการทำงานมากมายนั้น เราพบว่า MCS-51 มีโครงสร้างภายนอกที่ไม่สลับซับซ้อน ซึ่งก็หมายความว่าเราจะต้องเพิ่มเติมอุปกรณ์ภายนอกเพียงไม่กี่ชิ้นในการที่จะทำให้ระบบที่ใช้ MCS-51 ทำงาน


แต่ในทางกลับกัน โครงสร้างภายในของ MCS-51 จะมีความสลับซับซ้อนพอสมควร เราจะพบส่วนที่ทำหน้าที่สำคัญในไมโครโปรเซสเซอร์ได้ในตรงกลางบล็อกไดอะแกรม ซึ่งรวมถึง ALU แอคคิวมูเลเตอร์ สแต็กพอยน์เตอร์ รีจิสเตอร์ชั่วคราว TMP1 และ TMP2 และรีจิสเตอรืที่มีหน้าที่ต่างๆทั้วไปเช่น รีจิสเตอร์ B โดยส่วนต่างๆเหล่านี้จะเชื่อมต่อกับบัสภายในของ MCS-51


พอร์ต I/O แต่ละตัวจะถูกเชื่อมต่อกับบัสข้อมูลภายในขนาด 8 บิต โดยผ่านรีจิสเตอร์ที่ต่ออนุกรม ดังรูป รีจิสเตอรืเหล่านี้มีหน้าที่ในการเก็บข้อมูลในช่วงที่มีการโอนย้ายข้อมูลของ I/O และควบคุมการทำงานของพอร์ต I/O จากบล็อกไดอะแกรมนี้ยังแสดงถึง ROM และ RAM ของ MCS-51 ด้วย

การจัดเรียงขาของ MCS-51

ไมโครคอนโทรลเลอร์ขนาด 8 บิต ในตระกูล MCS-51 มีการจัดเรียงขาทั้งหมด 40 ขาดังนี้

MCS-51 Pin Layout

MCS-51 Clock

หน้าที่ของขาต่างๆ

Port0
เป็นพอร์ตชนิดสองทิศทาง (bi-directional port) ทำหน้าที่เป็น data bus สลับกันกับ address bus ของ CPU ในการติดต่อกับหน่วยความจำภายนอก จะใช้ส่งรหัส address 8 บิต ด้านต่ำ ที่ได้จากรีจิสเตอร์ Program counter (PC) ในกรณีติดต่อกับหน่วยความจำโปรแกรมภายนอกเช่น ROM หรือ EPROM หรือรับรหัส address จากรีจิสเตอร์ Data pointer (DPTR) ในกรณีติดต่อกับหน่วยความจำข้อมูล (RAM) ภายนอก โดยมีลักษณะการทำงานแบบ multiplex หรือสลับหน้าที่การทำงานได้ คือภายหลังจากทำการส่งรหัส address ออกไปแล้ว CPU จะทำให้พอร์ตนี้อยู่ในสภาวะ high impedance (ในการอ่านข้อมูลหรือรหัสคำสั่งจากหน่วยความจำภายนอก) หรือส่งข้อมูลออกไปยังหน่วยความจำข้อมูล (RAM) ภายนอก

Port1
เป็นพอร์ตชนิดสองทิศทาง (bi-directional port) ใช้เป็นพอร์ตรับ-ส่งข้อมูล (I/O Port) นอกจากนี้ขา P1.0 (Port1 bit0) ยังใช้เป็นขา T2 ของ Timer2 และขา P1.1 เป็นขา T2EX สำหรับ CPU เบอร์ 8052 8032 และ 8752

Port2
เป็นพอร์ตชนิดสองทิศทาง (bi-directional port) ในช่วงที่มีการติดต่อกับหน่วยความจำภายนอก จะใช้ส่งรหัส address 8 บิตบนจากรีจิสเตอร์ PC (PC8-15) ในการติดต่อกับหน่วยความจำข้อมูล (RAM) ภายนอก

Port3
เป็นพอร์ตชนิดสองทิศทาง (bi-directional port) ใช้เป็นพอร์ตรับ-ส่งข้อมูล (I/O Port) นอกจากนี้ยังใช้ทำหน้าที่พิเศษหรือ alternate function ดังต่อไปนี้

RXD
เป็นขาที่ใช้รับข้อมูลอนุกรมในโหมด 0 โหมด 1 โหมด 2 และ โหมด 3 และใช้ส่งข้อมูลอนุกรมในโหมด 0

TXD
เป็นขาที่ใช้ส่งข้อมูลอนุกรมในโหมด 0 โหมด 1 โหมด 2 และ โหมด 3 และเป็นขา shift clock ให้ shift register ภายนอกในโหมด 0

INT0
เป็นขาอินเตอรัพต์ลำดับ 0 ซึ่งสามารถปฏิเสธและตอบรับการอินเตอรัพต์ทางรีจิสเตอร์ IE และสามารถเลือกการทริกและจัดลำดับความสำคัญในการตอบรับการอินเตอรัพต์ก่อนหลังได้ทางรีจิสเตอร์ IP

INT1
เป็นขาอินเตอรัพต์ลำดับ 1 เช่นเดียวกับ INT0

T0
เป็นขาอินพุตรับสัญญาณนาฬิกาจากภายนอกมานับในกรณีที่กำหนดให้รีจิสเตอร์ Timer0 (T0) ทำงานเป็นรีจิสเตอร์รับสัญญาณภายนอกหรือเป็น Counter ในกรณีนี้รีจิสเตอร์

T0
จะเพิ่มค่าการนับทีละหนึ่ง ตามการเปลี่ยนแปลงของระดับสัญญาณที่ขา T0 ในลักษณะลอจิกสูงเป็นลอจิกต่ำ ซึ่ง CPU จะทำการตรวจสอบสภาวะสัญญาณที่ขา T0 ในทุกๆ machine cycle ถ้าพบว่าใน machine cycle แรก ขาT0 มีสภาวะลอจิกสูงและใน machine cycle ถัดไป ขา T0 มีสภาวะลอจิกต่ำ รีจิสเตอร์ T0 จึงจะเพิ่มค่าขึ้น 1 ดังนั้นสัญญาณอินพุตภายนอกจะต้องเป็นสภาวะลอจิกสูงอย่างน้อย 12 คาบสัญญาณนาฬิกา และอยู่ในสภาวะลอจิกต่ำอีก 12 คาบ กล่าวคือจะต้องมีความถี่เท่ากับหรือต่ำกว่าความถี่สัญญาณนาฬิกาหาร24 จึงจะนับค่าได้ถูกต้องตามจำนวนคาบของสัญญาณที่เข้ามา

T1
เป็นขาอินพุตเช่นเดียวกับ T0 โดยมีรีจิสเตอร์ T1 เป็นตัวนับ

RD
เป็นสัญญาณเอาท์พุตแบบ active low ใช้ strobe การทำงานกับ RAM ภายนอกเพื่อให้จังหวะการทำงาน โดยในการใช้งานจะต่อเข้ากับขา RD (Read strobe) หรือขา OE (Output Enable) ของ RAM ภายนอก เพื่อบอกว่า CPU ต้องการอ่านข้อมูลจาก RAM ดังกล่าว

WR
เป็นสัญญาณเอาท์พุตแบบ active low ใช้ strobe การทำงานกับ RAM ภายนอกเพื่อให้จังหวะการทำงาน โดยในการใช้งานจะต่อเข้ากับขา WR (Write strobe) หรือ WE (Write Enable) ของ RAM ภายนอก เพื่อบอกว่า CPU ต้องการเขียนข้อมูลไปที่ RAM ดังกล่าว

PSEN
(Program Store Enable) เป็นขาสัญญาณใช้ strobe การทำงานกับ ROM/EPROM ที่เก็บโปรแกรมว่าต้องการอ่าน (fetch) รหัสคำสั่ง โดยให้หน่วยความจำภายนอกนั้นส่งรหัสคำสั่งออกมาทาง data bus ได้ เพราะ CPU พร้อมที่จะอ่านคำสั่งแล้ว โดยขา PSEN จะต่อเข้ากับขา OE (Output Enable) ของ ROM หรือ EPROM

RST
เป็นขารีเซ็ตระบบทั้งหมดของ CPU มีการทำงานแบบ active high โดยถ้าต้องการรีเซ็ต จะต้องทำให้ขา RST อยู่ในสภาวะลอจิกสูงอยู่ 2 machine cycle นอกจากนี้ยังเป็นขารับแรงดันไฟเลี้ยงให้กับ RAM ภายใน กรณีไฟดับหรือไม่ได้จ่ายไฟเลี้ยง โดยจะกินกระแสไฟฟ้าประมาณ 100mA ในเบอร์ 80C32

ALE
เป็นขาเอาท์พุตที่เกิดขึ้นทุก machine cycle โดยในแต่ละ machine cycle ที่ขา ALE จะมีสภาวะลอจิกสูงอยู่สองครั้ง ในช่วง period2 state1 ถึง period1 state2 และ period2 state4 ถึง period1 state5 ดังนั้นถ้าใช้ crystal ความถี่ 12 MHz สัญญาณ ALE จะมีความถี่ 2 MHz หรือ 1 ใน 6 ของความถี่สัญญาณนาฬิกา สัญญาณ ALE มีประโยชน์ในการ latch หรือคงค่ารหัส address เมื่อทำการติดต่อกับหน่วยความจำข้อมูลหรือหน่วยความจำโปรแกรมภายนอก ทั้งนี้เนื่องจากพอร์ต 0 ต้องทำการสลับเปลี่ยนหน้าที่จาก address bus ที่ส่งรหัส address ของหน่วยความจำภายนอก ไปเป็น data bus จึงจำเป็นต้อง latch ค่า address นี้ค้างเอาไว้ให้กับหน่วยความจำภายนอกตลอดเวลาติดต่อ โดยอาศัยสัญญาณจากขา ALE นี้ไปควบคุมไอซีแลทช์ ให้คงค่า address ออกทางเอาท์พุตของไอซีตลอดเวลา โดยหน่วยความจำภายนอกจะรับรหัส address จาก CPU ผ่านทางเอาทืพุตของไอซีแลทช์ หลังจากนั้น พอร์ต 0 จะเปลี่ยนไปทำหน้าที่เป็น data bus ต่อไป (ช่วงที่พอร์ต 0 ส่งรหัส address ออกมา เป็นช่วงเวลาใกล้เคียงกับที่สัญญาณ ALE เปลี่ยนเป็นลอจิกสูง)

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

XTAL1
เป็นขาอินพุตรับสัญญาณนาฬิกา โดยโครงสร้างภายในจะต่อกับอินพุตของอินเวอร์เตอร์ลอจิกเกต ในการใช้งานจะต่อร่วมกับขา XTAL2 หรือรับสัญญาณนาฬิกาแบบ TTL จากภายนอกโดยตรง

XTAL2
เป็นขาที่โครงสร้างภายในจะต่อจากเอาท์พุตของลอจิกเกต สามารถต่อร่วมกับขา XTAL1 เพื่อสร้างวงจรกำเนิดสัญญาณนาฬิกา โดยอาศัย LC Network หรือ crystal ต่อระหว่างขา XTAL1 และ XTAL2 เพื่อกำหนดความถี่เรโซแนนซ์

Vcc
เป็นขาต่อแหล่งจ่ายไฟเลี้ยง + 5 โวลต์

Vss
เป็นขาต่อกราวด์


สำหรับกรณีเบอร์ที่มีหน่วยความจำโปรแกรมภายใน

ALE/PROG
กรณีใช้เป็นขา PROG (EPROM Program Pulse) จะใช้เป็นอินพุตรับสัญญาณที่มีคาบเวลา 50 mS ต่อไบต์ในช่วงโปรแกรม EPROM ภายในสำหรับ CPU ที่สร้างโดยเทคโนโลยี HMOS เช่น 8731 และ 8751 และใช้รับสัญญาณพัลส์ 2.5 mS ต่อไบต์สำหรับ CHMOS

EA/Vpp
กรณีใช้เป็น Vpp (EPROM Programming Voltage) ใช้ป้อนแรงดัน 21โวลต์ ในระหว่างโปรแกรม EPROM กรณี HMOS (8731 และ 8751) และ 12.75 โวลต์กรณี CHMOS (8751)

ข้อมูลของสัญญาณจากพอร์ต

ลอจิกสูง
(logic high) ที่พอร์ต 1 พอร์ต 2 และ พอร์ต 3 เป็นสภาวะที่พอร์ตมีระดับแรงดันสูงสุดที่ 2.4 โวลต์ จ่ายกระแสไหลออก 80 ไมโครแอมแปร์ จาการทดสอบที่อุณหภูมิห้อง 0 องศา ถึง 70 องศาเซลเซียส ที่แรงดัน Vcc 5 โวลต์ +/- 10 %

ลอจิกต่ำ
(logic low) ที่พอร์ต 1 พอร์ต 2 พอร์ต 3 ขา ALE และ PSEN เป็นสภาวะที่มีระดับแรงดันสูงสุดที่ 0.45 โวลต์ ดึงกระแสไหลเข้า 1.6 มิลลิแอมแปร์ จาการทดสอบที่อุณหภูมิห้อง 0 องศา ถึง 70 องศาเซลเซียส ที่แรงดัน Vcc 5 โวลต์ +/- 10 %

Instruction Cycle (คาบเวลาในการประมวลผลคำสั่ง)

1 instruction cycle มี 1 ถึง 4 machine cycles โดย 1 machine cycle แบ่งเป็น 6 states
1 state เท่ากับ 2 period ของสัญญาณนาฬิกา ดังนั้น 1 machine cycle มี 12 periods
ดังนั้นถ้าใช้สัญญาณนาฬิกา 12 MHz ถ้าคำสั่ง 1 คำสั่งมีขนาด 1 byte (1 machine cycle) หรือ 1 instruction cycle จะเท่ากับ 1 µS ดังนั้นความเร็วในการประมวลผลโดยเฉลี่ยเท่ากับ 1 MIPS (Million of Instructions Per Second ใช้ระบุจำนวนการประมวลผลคำสั่ง 1 ล้านคำสั่ง ต่อวินาที)

หน่วยความจำโปรแกรมของ MCS-51

หน่วยความจำโปรแกรมหรือ program memory เป็นหน่วยความจำสำหรับเก็บรหัสคำสั่ง (machine code) สำหรับโปรแกรมต่างๆ รวมไปถึงข้อมูลต่างๆที่เก็บในลักษณะเป็น look up table ไมโครคอนโทรลเลอร์ตระกูล MCS-51 ในบางเบอร์จะมีหน่วยความจำโปรแกรมบรรจุอยู่ภายในชิพ และบางเบอร์ก็ไม่มีหน่วยความจำโปรแกรมภายใน หน่วยความจำโปรแกรมภายในอาจอยู่ในรูปแบบของ ROM (Read Only Memory) หรือ EPROM (Erasable Programmable Read Only Memory) ในแบบใดแบบหนึ่ง


MCS-51 มีความสามารถในการติดต่อหน่วยความจำ ภายนอกได้สูงสุด 64 กิโลไบต์ (65536 bytes) เนื่องจากถูกออกแบบมาให้มีพอร์ตที่ทำหน้าที่เป็น address bus อยู่ 2 พอร์ต หรือ 16 เส้นสัญญาณ และติดต่อกับหน่วยความจำโปรแกรมภายในชิพได้ตามขนาดของหน่วยความจำโปรแกรมภายในเช่น 4 หรือ 8 กิโลไบต์


1.หน่วยความจำโปรแกรมภายใน


8051 และ 8052 มีหน่วยความจำชนิด ROM ภายในชิพขนาด 4 และ 8 กิโลไบต์ ตามลำดับ เหมาะกับการใช้งานทางอุตสาหกรรมที่มีจำนวนการผลิตมาก ซึ่งจะทำให้ต้นทุนการผลิตต่อหน่วยต่ำลง
8751 และ 8752 มีหน่วยความจำชนิด EROM ภายในชิพขนาด 4 และ 8 กิโลไบต์ ตามลำดับ โดยหน่วยความจำ EPROM ภายในชิพนี้สามารถลบข้อมูลออกได้โดยใช้แสงอุลตร้าไวโอเล็ต และสามารถบรรจุโปรแกรมลงไปใหม่ได้ เหมาะสำหรับการผลิตชิ้นงานต้นแบบ
8031 และ 8032 ไม่มีหน่วยความจำโปรแกรมภายใน การใช้งานจึงต้องอาศัยหน่วยความจำโปรแกรมภายนอก เหมาะกับงานพัฒนาโปรแกรมหรืองานที่เหมาะสมที่จะใช้หน่วยความจำมาตรฐานภายนอกมากกว่า เช่นโปรแกรมที่มีขนาดใหญ่กว่า program memory ภายในจะบรรจุได้หมด


2.หน่วยความจำโปรแกรมภายนอก


ไมโครคอนโทรลเลอร์ตระกูล MCS-51 ทุกเบอร์ สามารถต่อพ่วงหน่วยความจำโปรแกรมภายนอกได้สูงสุด 64 กิโลไบต์ โดยสามารถกำหนดการเลือกให้ CPU อ่านรหัสคำสั่งจากหน่วยความจำภายในหรือภายนอกได้ที่ขาสัญญาณ EA (External Access) โดยขา EA นี้เป็นขาสัญญาณอินพุตชนิดทำงานที่ลอจิคต่ำ (active low) ถ้าขาสัญญาณนี้ถูกต่อลงกราวด์จะเป็นการให้ CPU เลือกอ่านหน่วยความจำภายในก่อน เมื่อรีจิสเตอร์ชี้ตำแหน่งโปรแกรม Program Counter (PC) ทำการอ่านมาถึง address สุดท้ายของหน่วยความจำโปรแกรมภายใน address ถัดไปที่รีจิสเตอร์ PC จะทำการชี้ค่าคือaddress แรกของหน่วยความจำโปรแกรมภายนอกอัตโนมัติ

จังหวะเวลา (Timing) การติดต่อระหว่าง CPU และหน่วยความจำโปรแกรมภายนอก

External Program memory Read Cycle

ในช่วงเวลา 1 machine cycle จะเห็นว่า CPU จะทำการติดต่อกับ program memory เพื่อ fetch รหัสคำสั่งถึงสองครั้งด้วยกัน โดยในช่วงต้นของการติดต่อกับหน่วยความจำภายนอกช่วงกลางคาบเวลาของ ALE CPU จะส่งรหัส address ไบต์สูง (A8 – A15) ออกมาที่พอร์ต2 และในช่วงเวลาใกล้กัน CPU ก็จะส่งรหัส address ไบต์ต่ำ (A0 – A7) ออกมาที่พอร์ต0 ในเวลาใกล้กับขอบขาลงของสัญญาณ ALE จากนั้น CPU จะขับสัญญาณ PSEN เป็นลอจิกต่ำ พร้อมกับทำให้พอร์ต0 ว่างอยู่ในสภาวะ high impedance เพื่อสลับไปทำหน้าที่เป็น data bus เพื่อรอการสุ่มข้อมูลเข้า (การออกแบบวงจรมักใช้ ไอซีแลทช์ภายนอก ค้างสภาวะสัญญาณรหัส address ไบต์ต่ำที่รับมาทางอินพุตจากพอร์ต0 ไว้ และเอาท์พุตของไอซีแลทช์จะต่อกับ address bus 8 บิตล่างของหน่วยความจำ program memory ภายนอก) และมักนำสัญญาณ PSEN ในการ enable หรือควบคุมให้ program memory ภายนอก ส่งข้อมูล (รหัสคำสั่ง) ออกมาทาง data bus เมื่อ program memory ส่งรหัสคำสั่งออกมาแล้ว CPU จะสุ่มอ่านรหัสคำสั่งนั้นเข้าไป และจะขับสัญญาณ PSEN และ ALE เป็นลอจิกสูงอีกครั้ง จากนั้นในช่วงกลางคาบเวลาสัญญาณ ALE ลูกที่สองใน machine cycle เดียวกัน พอร์ต2 จะส่งรหัส address ไบต์สูงของรหัสคำสั่ง หรืออาจเป็น operand ที่อยู่ในไบต์ถัดไปของรหัสคำสั่งออกมา ในเวลาใกล้เคียงกัน ราวขอบขาลงของ ALE พอร์ต0 ก็จะส่งรหัส address ไบต์ต่ำออกมาเช่นเดียวกัน จากนั้น CPU จะขับสัญญาณ PSEN เป็นลอจิกต่ำ เพื่อติดต่อกับ program memory ให้ส่งรหัสคำสั่งหรือ operand ออกมาต่อไป (access time ของ EPROM นับตั้งแต่ได้รับสัญญาณ enable จนถึงส่งข้อมูลออกมาที่ data bus ใช้เวลาประมาณ 100 – 300 nS

การเชื่อมต่อระหว่าง CPU กับหน่วยความจำ Program Memory ภายนอก

การเชื่อมต่อกับ program memory สำหรับ MCS-51 จะมีพอร์ต0 ที่ทำหน้าที่ address bus สลับกับ data bus ซึ่งแตกต่างไปจากระบบของไมโครโปรเซสเซอร์อย่าง Z-80 ที่มี address bus แยกต่างหากจาก data bus ดังนั้นในระบบของ MCS-51 จึงต้องอาศัยไอซีแลทช์ ซึ่งใช้สำหรับคงค่า address ไบต์ต่ำไว้
จำนวนเส้นสัญญาณที่ใช้เป็น address bus สามารถคำนวณได้จากขนาดของหน่วยความจำที่นำมาต่อในระบบ ยกตัวอย่างเช่น หน่วยความจำ EPROM เบอร์ 2764 ตัวเลขสองหลักท้าย 64 มีความหมายว่าเป็น EPROM ที่มีจำนวนบิตของข้อมูลขนาด 64 กิโลบิต โดยมีบัสข้อมูลขนาด 8 บิต เราจะเรียกขนาดของ EPROM นี้ว่าเป็น 8k x 8 (8 กิโลไบต์ 8 บิต หรือ 8192 ไบต์ 8 บิต) โดยสามารถนำไปคำนวนหา address bus ได้ดังนี้

Bus calculation

จำนวนเส้นสัญญาณที่เป็น address bus ที่ต้องต่อกับ CPU คือ 13 เส้น (A0 – A12) data bus 8 เส้น ส่วนเส้นสัญญาณแจ้งการติดต่อจะเป็นดังนี้คือ ขาเลือกให้ตัว EPROM ทำงาน CE (Chip Enable) หรือขาสั่งให้ส่งข้อมูลออกทาง data bus ของ EPROM OE (Output Enable) ขาใดขาหนึ่งจะต่อลงกราวนด์ ส่วนอีกขาหนึ่งจะต่อกับขา PSEN ของ CPU


นอกจากนี้เมื่อต้องการเพิ่มขนาดของ program memory ให้กับระบบ (ต่อเพิ่มได้ไม่เกิน 64 กิโลไบต์) สามารถทำได้โดยการต่อ EPROM จำนวนหลายตัว (ถ้า program memory ที่มีใช้มีความจุน้อย เช่น 2 k 8k และ 16k) โดยต่อผ่านไอซีถอดรหัสเพื่อทำการ enable ให้ EPROM แต่ละตัวทำงานอยุ่ในช่วง address ที่เหมาะสม ซึ่งจากตัวอย่างการต่อดังรูป จะใช้ไอซี 3 to 8 Line Demultiplexer มาประยุกต์ใช้เป็นไอซี decoder เลือก EPROM โดย EPROM เบอร์0 จะถูกติดต่อในช่วง address 0000H ถึง 1FFFH และเบอร์1 ถูกติดต่อในช่วง address 2000H ถึง 3FFFH เบอร์2 ติดต่อในช่วง 4000H ถึง 5FFFH และเบอร์3 ในช่วง 6000H ถึง 7FFFH
สิ่งที่ควรคำนึงถึงในการต่อ EPROM หลายตัวกับ CPU คือ ขา PSEN มีความสามารถในการขับสัญญาณที่จำกัด ดังนั้นการต่อขา PSEN เข้ากับขา CE และ OE จำนวนหลายตัวต้องเพิ่มไอซีประเภท buffer เช่นเบอร์ 74LS244 ในการขับกระแส

External Program memory interface

External Program memories interface

MCS-51 Internal RAM

MCS-51 Memory Map

หน่วยความจำข้อมูลของ MCS-51

MCS-51 สามารถติดต่อกับหน่วยความจำข้อมูลได้สองลักษณะคือ การติดต่อกับหน่วยความจำข้อมูลภายในชิพ (internal data memory) และการติดต่อกับหน่วยความจำข้อมูลภายนอก (external data memory) การติดต่อหรือเข้าถึง (access) หน่วยความจำ data memory ภายในชิพ สามารถอ้างถึงได้สองแบบคือ การอ้างถึงโดยตรง (Direct addressing) และการอ้างถึงโดยอ้อม (Indirect Addressing) ส่วนการอ้างถึง data memory ภายนอกจะสามารถอ้างถึงโดยอ้อมเท่านั้น
หน่วยความจำข้อมูล (RAM) ภายในชิพ MCS-51

MCS-51 มีหน่วยความจำข้อมูล (RAM) หรือ data memory ภายในชิพขนาด 128 ไบต์ และเฉพาะเบอร์ 8032 8752 และ 8052 จะมีขนาด 256 ไบต์ โดยหน่วยความจำข้อมูลภายในช่วง 128 ไบต์แรกนั้น ถูกออกแบบมาให้ทำหน้าที่เป็นรีจิสเตอร์ใช้งานทั่วไปและใช้เก็บข้อมูลทั่วไป หรือการเก็บข้อมูลแบบสแต็ก ส่วนอีก 128 ไบต์ถัดไปในเบอร์เช่น 8032 จะใช้เก็บข้อมูลทั่วไปได้ ซึ่งโดยปกติ address ดังกล่าวจะจองไว้สำหรับรีจิสเตอร์พิเศษ (Special Function Register) ซึ่งมี address อยู่ในช่วงดังกล่าวเหมือนกัน แต่จะมีการอ้างถึงเพื่อใช้งานแยกกัน การจัดสรรหน่วยความจำภายในทั้งหมดเป็นดังนี้

Address 00H -07H เป็นตำแหน่งของรีจิสเตอร์ใช้งานทั่วไป จำนวน 8 ตัว คือ R0 – R7 ซึ่งอยู่ใน bank ลำดับ 0 (Bank#0)
Address 08H -0FH เป็นตำแหน่งของรีจิสเตอร์ใช้งานทั่วไป จำนวน 8 ตัว คือ R0 – R7 ซึ่งอยู่ใน bank ลำดับ 1 (Bank#1)
Address 10H -17H เป็นตำแหน่งของรีจิสเตอร์ใช้งานทั่วไป จำนวน 8 ตัว คือ R0 – R7 ซึ่งอยู่ใน bank ลำดับ 2 (Bank#2)
Address 18H -1FH เป็นตำแหน่งของรีจิสเตอร์ใช้งานทั่วไป จำนวน 8 ตัว คือ R0 – R7 ซึ่งอยู่ใน bank ลำดับ 3 (Bank#3)

โดยรีจิสเตอร์ในแบงก์ลำดับ 0 ถึง 3 สามารถเลือกใช้ได้คราวละ 1 bank เท่านั้น โดยการกำหนดค่าในบิต RS0 และ RS1 ในรีจิสเตอร์ PSW (Program Status Word) ที่เป็นรีจิสเตอร์ในกลุ่มหน้าที่พิเศษ โดยรีจิสเตอร์ R0 ถึง R7 ในแบงก์ที่เลือก เป็นรีจิสเตอร์ขนาด 8 บิต ซึ่งใช้งานทั่วไป เช่นใช้เก็บข้อมูลชั่วคราวหรือใช้สำหรับการโอนย้ายข้อมูลออกไปภายนอกเป็นต้น ส่วนพื้นที่ในช่วงแบงก์อื่นๆ ภายในช่วง 00H ถึง 1FH ซึ่งไม่ได้ถูกเลือกใช้งานเป็นรีจิสเตอร์ R0-R7 เราสามารถนำมาใช้เก็บข้อมูลทั่วไปได้เป็นไบต์ โดยสามารถเข้าถึงในแบบโดยตรงและโดยอ้อมได้

Address 20H ถึง 2FH เป็นตำแหน่งของหน่วยความจำข้อมูลภายใน ซึ่งในแต่ละไบต์สามารถเข้าถึงข้อมูลได้ทั้งแบบโดยตรงและโดยอ้อม โดยการเข้าถึงข้อมูลโดยตรง (direct addressing) จะอาศัยคำสั่งที่มีโอเปอแรนด์เป็น "direct" และการอ้างถึงโดยอ้อมจะใช้คำสั่งที่มีโอเปอแรนด์เป็น "@Ri" นอกจากนี้ในช่วง addressดังกล่าวทั้ง 16 ไบต์ หรือ 128 บิต ยังสามารถเข้าถึงข้อมูลแบบบิตได้ (bit addressing) ซึ่งเป็นการเข้าถึงข้อมูลทีละบิต โดยอาศัยคำสั่งที่มีโอเปอแรนด์เป็น "@bit"

Address 30H ถึง 7FH เป็นตำแหน่งที่ใช้เก็บข้อมูลทั่วไป ซึ่งเรียกว่า scratch pad area และยังสามารถใช้เป็นหน่วยความจำแบบสแต็ก (stack area) โดยมีขนาด 80 ไบต์ การเข้าถึงข้อมูลส่วนนี้ทำได้ทั้งแบบโดยตรงและโดยอ้อม

Address 80H ถึง FFH จากที่กล่าวในตอนแรก address ช่วงดังกล่าว ปกติจะเป็นตำแหน่งของรีจสเตอร์หน้าที่พิเศษ (Special Function Register: SFR) แต่ในบางเบอร์จะมีพื้นที่ว่างของ RAM เพื่อให้เก็บข้อมูลทั่วไปได้ เช่นเบอร์ 8032 เป็นต้น การเข้าถึง RAM ในส่วนนี้จะต้องอ้างโดยอ้อมผ่านรีจิสเตอร์ R0 หรือ R1 เท่านั้น โดยคำสั่งที่มีโอเปอแรนด์เป็น “@Ri” ส่วนการอ้างถึงข้อมูลเฉพาะในรีจิสเตอร์ SFR จะต้องอ้างถึงโดยตรง โดยคำสั่งที่มีโอเปอแรนด์เป็น "@direct" และรีจิสเตอร์ SFR บางตัวยังสามารถเข้าถึงข้อมูลในแบบบิตได้ โดยอาศัยคำสั่งที่มีโอเปอแรนด์เป็น "@bit"

หน่วยความจำข้อมูล (RAM) ภายนอก

MCS-51 สามารถติดต่อกับหน่วยความจำข้อมูลภายนอกได้สูงสุด 64 กิโลไบต์ เช่นเดียวกับหน่วยความจำโปรแกรมภายนอก โดย data memory ภายนอกนี้ ไม่สามารถใช้เก็บข้อมูลแบบสแต็กแบบ hardware stack ได้ (โดยอาศัยคำสั่ง PUSH และ POP หรือการดำเนินการเก็บข้อมูลในรีจิสเตอร์ PC เมื่อกระโดดไปทำงานในโปรแกรมย่อยต่างๆ ) แต่ต้องอาศัยการเขียนโปรแกรมเก็บข้อมูลที่ต้องการไว้ชั่วคราวใน RAM ภายนอก หรือที่เรียกว่า software stack แทน


SPECIAL FUNCTION REGISTER (SFR)

รีจิสเตอร์หน้าที่พิเศษ (SFR) เป็นรีจิสเตอร์สำหรับควบคุมหน้าที่และการทำงานของอุปกรณ์ต่างๆ หรือพอร์ตของ MCS-51 ทั้งหมด โดยมีตำแหน่งในหน่วยความจำที่ 80H ถึง FFH การใช้งานรีจิสเตอร์พิเศษสามารถทำได้โดยการระบุชื่อของรีจิสเตอร์ (เฉพาะ Accumulator) หรือตำแหน่งของรีจิสเตอร์นั้น โดยรีจิสเตอร์ SFR มีดังต่อไปนี้

รีจิสเตอร์ รีจิสเตอร์ หน้าที่
ACC
ACCUMULATOR ทำหน้าที่เก็บข้อมูลที่จะส่งให้กับหน่วยทำงานภายใน และเก็บผลลัพธ์ที่ได้จากการทำงานนั้น
B B Register ใช้สำหรับทำคำสั่งคูณและหารเลข และเก็บผลลัพธ์ไบต์บนจากการคูณ หรือเก็บผลลัพธ์ที่เป็นเศษจากากรหาร และใช้เก็บข้อมูลทั่วไปได้
PSW Program Status Word ทำหน้าที่บอกถึงแฟล็ก แสดงสภาวะการทำงานต่างๆ รวมถึงบิตในการเลือกรีจิสเตอร์แบงก์
SP Stack Pointer เป็นรีจิสเตอร์ขนาด 8 บิต ทำหน้าที่เก็บตำแหน่งของหน่วยความจำ data memory ที่ใช้เป็นหน่วยความจำสแต็ก ซึ่งไว้เก็บข้อมูลจากรีจิสเตอรืต่างๆ หรือค่า address ในตำแหน่งถัดไป ซึ่ง CPU ต้องกลับมาทำงานภายหลังจากการทำงานในโปรแกรมย่อยบริการอินเตอรัพต์ โดยภายหลังจากการเริ่มจ่ายไฟฟ้าหรือรีเซ็ต ค่าใน SP จะเป็น 07H
DPTR Data Pointer (DPH และ DPL) เป็นรีจิสเตอร์ขนาด 16 บิต ที่สามารถแยกการทำงานได้เป็นรีจิสเตอร์ 8 บิต สองตัวคือ DPH และ DPL ซึ่งใช้เก็บค่า address ของหน่วยความจำ program memory หรือ data memory ในกรณี CPU ต้องการอ่านหรือเขียนข้อมูล (เฉพาะ data memory) โดยคำสั่งเท่านั้น
P0 Port0 เป็นพอร์ตที่ใช้ติดต่อกับหน่วยความจำภายนอก โดยส่งรหัส address 8 บิตล่าง หรือข้อมูล 8 บิต เมื่อ CPU ต้องการ fetch รหัสคำสั่งหรืออ่านเขียนข้อมูลกับหน่วยความจำภายนอก และยังสามารถใช้งานเป็นพอร์ตอินพุตและเอาท์พุตได้ตามปกติ
P1 Port1 เป็นพอร์ตอินพุตและเอาท์พุต
P2 Port2 ใช้ส่งรหัส address 8 บิต ด้านสูงในขณะ CPU ต้องการติดต่อกับหน่วยความจำภายนอกในการ fetch รหัสคำสั่งหรืออ่านและเขียนข้อมูล
P3 Port3 เป็นพอร์ตอินพุตและเอาท์พุต หรือเป็นเส้นสัญญาณสำหรับทำหน้าที่อื่น เช่น WR RD INT0 และ INT1 เป็นต้น
IP Interrupt Priority Register ใช้จัดลำดับความสำคัญในการอินเตอรัพต์จากแหล่งต่างๆ
IE Interrupt Enable Register ใช้ปฏิเสธหรือยอมรับการอินเตอรรัพต์จากแหล่งต่างๆ
TMOD Timer/Counter Mode Control ใช้กำหนดการทำงานและเลือกโหมดการทำงานของ Timer0 และ Timer1
TCON Timer/Counter Control Register ใช้เลือกประเภทสัญญาณการอินเตอรัพต์ภายนอกรวมถึงการกำหนดการทำงานของ Timer0 และ Timer1 และเป็นแฟลกแสดงสภาวะต่างๆ
TH0 Timer/Counter0 (High byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์บนของ Timer0 ขนาด 16 บิต
TL0 Timer/Counter0 (Low byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์ล่างของ Timer0 ขนาด 16 บิต
TH1 Timer/Counter1 (High byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์บนของ Timer1 ขนาด 16 บิต
TL1 Timer/Counter1 (Low byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์ล่างของ Timer1 ขนาด 16 บิต
SCON Serial Port Control register ใช้กำหนดการทำงานและควบคุมในการส่งข้อมูล/รับข้อมูลอนุกรม ทางพอร์ตอนุกรม
SBUF Serial Port Buffer ใช้เก็บข้อมูลอนุกรมที่รับเข้ามา และ/หรือใช้ในการส่งข้อมูลอนุกรมเมื่อโอนย้ายข้อมูลที่จะส่งมายังรีจิสเตอร์ SBUF นี้
PCON Power Control Register ใช้ควบคุมการทำงานของ CPU ในโหมดการทำงานแบบประหยัดพลังงาน โดยเมื่ออยู่ในโหมด Power down mode จะเป็นการลดกำลังไฟฟ้าที่จ่ายให้กับส่วนของโปรเซสเซอร์ภายในลง แต่ยังมีกำลังไฟฟ้าจ่ายให้กับหน่วยความจำ RAM ภายในชิพ โดยต้องต่อขา RST (Reset) เข้าโดยตรงกับแหล่งจ่ายไฟ (RAM ภายในจะรับไฟเข้าทางขา RST) เมื่ออยู่ใน Idle Mode เป็นการสั่งให้โปรเซสเซอร์หยุดทำงานชั่วขณะ โดยจะกลับมาอยู่ในสภาวะปกติเมื่อทำการ reset หรือเกิดการอินเตอรัพต์อย่างใดอย่างหนึ่ง นอกจากนี้ยังมีบิตควบคุมการทวีคูณอัตราการส่ง/รับ (Baud rate) ข้อมูลอนุกรมอีกด้วย (Power down และ Idle mode มีเฉพาะเบอร์ที่สร้างด้วยเทคโนโลยี CHMOS เท่านั้น เช่น 80C31 และ 80C32 ป็นต้น)
TH2 Timer/Counter2 (High byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์บนของ Timer2 ขนาด 16 บิต
TL2 Timer/Counter2 (Low byte) เป็นรีจิสเตอร์นับค่าจำนวนคาบสัญญาณ แบบเพิ่มค่า (forward) โดยเป็นรีจิสเตอร์ขนาด 8 บิตส่วนไบต์ล่างของ Timer2 ขนาด 16 บิต
RCAP2H Timer2 Reload/Capture (High byte) ใช้เก็บค่าจำนวนนับเริ่มต้นที่จะโหลดให้ หรือเก็บจำนวนคาบสัญญาณที่นับได้ที่ capture ออกมากับ Timer2
RCAP2L
Timer2 Reload/Capture (Low byte) ใช้เก็บค่าจำนวนนับเริ่มต้นที่จะโหลดให้ หรือเก็บจำนวนคาบสัญญาณที่นับได้ที่ capture ออกมากับ Timer2
T2CON Timer/Counter 2 Control Register ใช้ควบคุมและเลือกโหมดการทำงานทั้งหมดที่เกี่ยวกับ Timer2


หมายเหตุ

รีจิสเตอร์ TH2 TL2 RCAP2H RCAP2L และ T2CON มีเฉพาะในไมโครคอนโทรลเลอร์ตระกูล MCS-51 เบอร์ 8052 8032 และ 8752 เท่านั้น
รีจิสเตอร์ทำหน้าที่พิเศษทุกตัวมีขนาด 8 บิต รีจิสเตอร์ DPTR 16 บิต สามารถใช้งานรวมกัน 16 บิต หรือใช้งานแยกกันเป็นรีจิสเตอร์ DPH และ DPL ขนาด 8 บิตได้ นอกจากนี้รีจิสเตอร์ Time0 Timer1 และ Timer2 ยังแยกการทำงานเป็นรีจิสเตอร์ 8 บิต สองตัวได้เช่นกัน
รีจิสเตอร์นับโปรแกรม (Program Counter: PC) ไม่อยู่ในกลุ่มรีจิสเตอรืทำหน้าที่พิเศษ

จังหวะเวลา (Timing) การติดต่อระหว่าง CPU และหน่วยความจำ data memory ภายนอก

RAM Read and Write Cycle

ช่วงเวลาเริ่มต้นของการติดต่อกับหน่วยความจำ RAM ภายนอก CPU จะส่งรหัส addressไบต์ต่ำ A0 – A7 ออกมาช่วงขอบขาลงของสัญญาณ ALE ในขณะที่จะส่งรหัส address ไบต์สูง A8 – A15 ออกมาที่กลางคาบเวลาของสัญญาณ ALE จากนั้น CPU จะขับสัญญาณ RD (ในการอ่านข้อมูลจาก RAM ภายนอก) หรือสัญญาณ WR (กรณีเขียนข้อมูลลงหน่วยความจำ RAM ภายนอก) ให้เป็นลอจิกต่ำ จากนั้นกรณีอ่านข้อมูล CPU จะปล่อยให้พอร์ต0 ทำหน้าที่เป็น data bus โดยอยู่ในสภาวะ high impedance เพื่อรอสุ่มอ่านข้อมูลที่จะส่งมา ส่วนกรณีส่งข้อมูลออก CPU จะทำการส่งข้อมูลที่จะเขียนลง RAM โดยเว้นช่วงเวลาอยู่ระยะหนึ่งหลังจากส่งรหัส address ออกมา เพื่อรอให้ RAM ภายนอกพร้อมที่จะรับข้อมูลเข้าไปทาง data bus เมื่อ RAMภายนอกได้รับข้อมูลทาง data bus แล้ว CPUจะขับสัญญาณ WR เป็นลอจิกสูงเพื่อเลิกการติดต่อ และกรณีอ่านข้อมูลจาก RAM ภายนอก เมื่อ CPU สุ่มอ่านข้อมูลเข้ามาเสร็จแล้ว ก็จะขับสัญญาณ RD เป็นลอจิกสูงเพื่อสิ้นสุดการติดต่อ


การเชื่อมต่อระหว่าง CPU กับ Data Memory ภายนอก

การเชื่อมต่อกับ RAM ภายนอก โดยทั่วไป จะทำเช่นเดียวกับการติดต่อกับ program memory (ROM/EPROM) ภายนอก โดยอาศัยไอซีแลทช์ในการคงค่าสัญญาณ address ให้กับ RAM ภายนอกด้วย จำนวนเส้นสัญญาณ address bus สามารถคำนวณได้เช่นเดียวกับการติดต่อกับ program memory ภายนอก ตัวเลขสองหลักท้ายของเบอร์ RAM จะแสดงถึงจำนวนกิโลบิต เช่น 6264 เป็น RAM ขนาด 64 กิโลบิต 62256 เป็น RAM ขนาด 256 กิโลบิต การคำนวณหาจำนวน address bus ที่นำมาต่อกับ CPU กับ RAM สามารถคำนวณได้ดังนี้


bus calculation

ไอซีหน่วยความจำมาตรฐาน จะมีขา CE (Chip Enable) สำหรับเลือกให้ชิพไอซีทำงาน ขา OE (Output Enable) สำหรับเลือกให้ส่งข้อมูลออกทาง data bus ขา R/W (Read/Write) ถ้าเป็นลอจิกสูง จะเป็นการบอกให้นำข้อมูลออกทาง data bus แต่ถ้าเป็นลอจิกต่ำจะเป็นการสั่งให้ RAM รับข้อมูลที่ data bus เข้าไป และบันทึกลงในหน่วยความจำในตำแหน่งที่ปรากฏที่ address bus การต่อพ่วงเข้ากับ CPU จะนำขา CE ของ RAM ต่อเข้ากับขา ALE ของ CPU และ ขา OE ของ RAM ต่อเข้ากับขา RD ของ CPU ขา R/W ของ RAM ต่อกับขา WR ของ CPU ตามลำดับ


เช่นเดียวกับที่กล่าวมาในเรื่องการเชื่อมต่อกับหน่วยความจำโปรแกรมภายนอก ขา ALE ของ CPU มีความสามารถในการขับสัญญาณที่จำกัด การต่อใช้งานกับ RAM หลายตัวอาจต้องอาศัยไอซีบัฟเฟอร์เพื่อให้ขับกระแสได้มากขึ้น


โครงสร้างการทำงานของพอร์ต

พอร์ตต่างๆของไมโครคอนโทรลเลอร์ตระกูล MCS-51 มีหน้าที่ในการรับส่งข้อมูลกับอุปกรณ์ภายนอก อีกทั้งยังทำหน้าที่เป็นเส้นสัญญาณเชื่อมต่อระหว่าง CPU และหน่วยความจำภายนอกอีกด้วย MCS-51 มีพอร์ตแบบขนานขนาด 8 บิต จำนวน 4 พอร์ต โยแต่ละพอร์ตมีโครงสร้างการทำงานที่แตกต่างกันดังนี้

บทความนี้ยังไม่สมบูรณ์ยังมีต่อ...


BACK