หน่วยความจำโปรแกรมของ MCS-51 เป็นบริเวรหน่วยความจำสำหรับเก็บข้อมูลและคำสั่งใช้งานต่างๆ ซึ่งแม้ว่าจะไม่มีการจ่ายกระแสไฟฟ้าให้กับระบบข้อมูลเหล่านั้นก็ยังไม่สูญหาย โครงสร้างของหน่วยความจำโปรแกรมมีลักษณะเช่นเดียวกับหน่วยความจำที่บรรจุอยู่ในไอซี หน่วยความจำประเภทต่างๆ เช่น หน่วยความจำแบบ ROM (Read Only Memory) หรือ EPROM (Erasable Programmable Read Only Memory) เป็นต้น
MCS-51 สามารถอ่านข้อมูลหน่วยความจำโปรแกรมได้สูงสุดไม่เกิน 64 กิโลไบต์ และแยกหน่วยความจำโปรแกรมออกเป็น 2 ลักษณะ คือ หน่วยความจำโปรแกรมภายใน (Internal Program Memory) ซึ่งเป็นหน่วยความจำ ROM หรือ EPROM ที่อยู่ภายในตัวไอซีไมโครคอนโทรลเลอร์เอง และหน่วยความจำโปรแกรมภายนอก (External Program Memory) ซึ่งเป็นการใช้ไอซีหน่วยความจำมาทำหน้าที่เป็นหน่วยความจำโปรแกรมของระบบ
หน่วยความจำโปรแกรมภายใน
ไมโครคอนโทรลเลอร์ในตระกูล MCS-51 มีขนาดของหน่วยความจำโปรแกรมถายในแตกต่างกันออกไปเพื่อความเหมาะสมกับการนำไปใช้งานในลักษณะต่างๆ กัน เช่น
8051 และ 8052 มีหน่วยความจำแบบ ROM ขนาด 4 และ 8 KB
8751 มีหน่วยความจำแบบ EPROM ขนาด 4 KB ข้อมูลที่ถูกเขียนไว้ภายในสามารถลบได้ด้วยการใช้แสงอัลตราไวโอเลต และนำมาอัดโปรแกรมใหม่ได้อีก (ปัจจุบันไม่น่าจะมีขายในท้องตลาดแล้ว เพราะเปลี่ยนไปใช้แบบ EEPROM หรือการใช้ Boot Loader โหลด Hex Code โดยตรงกับคอมพิวเตอร์ผ่านสาย USB)
8031 และ 8032 จะไม่มีหน่วยความจำโปรแกรมอยู่ภายในตัว MCU เลย ดังนั้นการนำไปใช้งานจึงต้องใช้หน่วยความจำโปรแกรมภายนอก ซึ่งการใช้งานลักษณะนี้จะทำให้เสียความสามารถบางประการ เกี่ยวกับพอร์ต Input/Output ไปเนื่องจากต้องนำไปใช้เป็นสัญญาณควบคุม เกี่ยวกับการจัดการติดต่อหน่วยความจำภายนอกแทน
หน่วยความจำโปรแกรมภายนอก
หน่วยความจำโปรแกรมภายนอกเป็นการใช้หน่วยความจำ EPROM หรือ ROM เชื่อมต่อเข้ากับระบบของ 8051 โดยอาจจะมีสาเหตุได้หลายประการ เช่น เป็นการทดลองทำต้นแบบจำนวนน้อย หรืออาจต้องการลดต้นทุนการผลิต เพราะราคาของไมโครคอนโทรลเลอร์แบบที่ไม่มีหน่วยความจำโปรแกรมภายในราคาจะต่ำกว่ากว่าแบบที่มีหน่วยความจำโปรแกรมภายใน
บางครั้งอาจจะมีสาเหตุมาจากความจำเป็นอื่นๆ เช่น การที่หน่วยความจำภายในของ MCU มีความจุไม่เพียงพอกับการใช้งาน หรืออาจจะเป็นว่าการที่ใช้ไอซีหน่วยความจำจะทำให้สามารถจัดหาเครื่องมือ (Tools) ช่วยการพัฒนาระบบที่ใช้งานกันแพร่หลายและราคาถูกได้ ซึ่งจะช่วยลดเวลาในการพัฒนาระบบลงได้มาก เป็นต้น
ไมโครคอนโทรลเลอร์เบอร์ต่างๆ ของ MCS-51 สามารถขยายให้ใช้งานหน่วยความจำภายนอกได้ทั้งสิ้น โดยกรณีที่มีหน่วยความจำโปรแกรมภายในอยู่แล้ว การอ้างตำแหน่ง Address ที่มีทั้งในหน่วยความจำโปรแกรมภายในและภายนอกนั้น จะต้องทำการพิจารณาระดับลอจิกของสัญญาณ EA ในขณะนั้นด้วย
ในประสบการณ์การทำงานที่ผ่านมาของผมมักจะใช้ 8031 กับหัวเครื่องโทรศัพท์ที่เป็นระบบ Key-Telaphone (โทรศัพท์ที่ใช้กับออฟฟิตหรือสำนักงาน) เสียส่วนใหญ่ แต่ปัจจุบันเครื่องโทรศัพท์เหล่านี้มักเปลี่ยนไปเป็นระบบ IP-Phone ซึ่งผมก็ไม่ได้ทำงานในสายงานนั้นมานานแล้ว เลยไม่ทราบว่าเขาเปลี่ยนไปใช้ MCU ของตระกูลไหนกัน
ที่กล่าวมาเป็นการจัดการหน่วยความจำแบบมาตรฐานที่มีมากับ MCU ของ MCS-51 แต่ปัจจุบันอาจมีการปรับเปลี่ยนรูปแบบแตกย่อยออกไปอีกตามแต่ละของบริษัทที่นำลิขสิทธิ ไปผลิตต่อซึ่งมีอยู่มากมาย
(ขอบคุณข้อมูลบางส่วนจากหนังสือ การใช้งานไมโครคอนโทรลเลอร์ 8051 ของสำนักพิมพ์ SE-ED)