การจัดการหน่วยความจำและการเชื่อมต่อ


       หน่วยความจำของไมโครคอนโทรเลอร์ 8051 แบ่งเป็น 2 ประเภท คือ
                    1. หน่วยความจำโปรแกรม( Program Memory ) หน่วยความจำประเภทนี้ คือ ROM ใช้เก็บโปรแกรมที่ใช้
ในการควคุมระบบ ซึ่งเป็นหน่วยความจำประเภท non-volatile
                    2. หน่วยความจำข้อมูล ( Data Memory ) หน่วยความจำประเภทนี้ได้แก่ RAM
หน่วยความจำโปรแกรม
                    ใน 8051 จะแบ่งหน่วยความจำประเภทนี้เป็นอีก 2 ประเภท หน่วยความจำโปรแกรมภายนอก( external
memory ) กล่าวคือ ROM ที่มาต่อภายนอกตัว 8051 ส่วนอีกประเภทหนึ่ง คือ หน่วยความจำภายใน( internal memory )
ได้แก่ ROM ภายในตัวไมโครคอนโทรเลอร์เอง การเลือกใช้หน่วยความจำโปรแกรมภายนอกหรือหน่วยความจำโปรแกรม
ภายในทำได้โดยการ.ให้สัญญาณทางไฟฟ้าที่ขา EA/ โดย
                             - สัญญาณทางไฟฟ้าที่ขา EA/ เป็นลอจิก 0 หมายถึง หน่วยความจำโปรแกรมภายนอก
                             - สัญญาณทางไฟฟ้าที่ขา EA/ เป็นลอจิก 1 หมายถึง หน่วยความจำโปรแกรมภายใน
*หมายเหตุ หน่วยความจำโปรแกรมนั้น ไมโครคอนโทรเลอร์ตระกูล 8051 สามารถอ้างข้อมูลได้ 64 กิโลไบต์
      
                      พิจรณาตัวอย่างการเชื่อมต่อ 8051 กับหน่วยความจำโปรแกรมภายนอก 


หน่วยความจำข้อมูล
                      หน่วยความจำข้อมูลมีหน้าที่สำหรับเก็บข้อมูล หรือตัวแปรที่เกิดขึ้นในขณะที่กำลังประมวลผลโปรแกรม
ไว้เป็นการชั่วคราว โดยพื้นฐานแล้วหน่วยความจำข้อมูลจัดเป็นหน่วยความจำ RAM แบบสแตติก ดังนั้นเมื่อไม่มีการ จ่าย
ไฟฟ้าให้กับระบบ ก็จะมีผลทำให้ข้อมูลที่จัดเก็บไว้ภายในหน่วยความจำนี้สูญหายไป
                      พื้นที่ของหน่วยความจำข้อมูล ของ 8051 สามารถมีได้สูงสุดไม่เกิน 64 กิโลไบต์ และแยกประเภทออกเป็น
สองลักษณะตามตำแหน่งที่ตั้งของหน่วย ความจำนั้น
                      -หน่วยความจำโปรแกรมภายใน (Internal Data Memory) ซึ่ง เป็น RAM ที่อยู่ภายในตัวของไอซีไมโคร
คอนโทรลเลอร์เอง
                      -หน่วยความจำข้อมูลภายนอก (External Data Memory) ซึ่งเป็นการใช้ไอซีหน่วยความจำ RAM มาเพิ่ม
เติมเข้าไปในวงจร ลักษณะเดียวกับการนำไอซี EPROM มาใช้งานเป็นหน่วยความจำโปรแกรมนั่นเอง รูปที่ 3.1 การจัดพื้นที่หน่วยความจำข้อมูลสำหรับไมโครคอนโทรลเลอร์

หน่วยความจำข้อมูลภายใน
                      หน่วยความจำข้อมูลภายในของ 8051 มีจำนวนทั้งหมด 256 ไบต์ โดยจำแนกออกได้เป็นสองลักษณะ
คือพื้นที่เฉพาะสำหรับตัวประมวลผลกลาง หรือเรียกว่า รีจิสเตอร์ R0-R7 และพื้นที่ใช้งานทั่วไปสำหรับโปรแกรมใช้งาน
ที่ผู้ใช้สร้างขึ้นมา
     


            หน่วยความจำขนาด 128 ไบต์แรก
                      
บริเวณแอดเดรส 00H - 1FH
จำนวน 32 ไบต์จำแนกออกเป็นกลุ่ม(Blank) 8 ไบต์ จำนวน 4 กลุ่ม ซึ่งมีชื่อ
เรียกว่า รีจีสเตอร์ R0 - R7 ดังตารางต่อไปนี้
                                __________________________________________________
                                   แอดเดรส                รีจิสเตอร์แบงค์            ชื่อรีจิสเตอร์ใช้งาน 
                                   00H-07H                        0                            R0-R7
                                   08H-0FH                        1                            R0-R7
                                   10H-17H                        2                            R0-R7
                                   18H-1FH                        3                            R0-R7
 
จะเป็นได้ว่าชื่อของรีจิสเตอร์ไม่ว่าจะอยู่ในรีจิสเตอร์แบงค์ใด ก็จะมีชื่อ R0 ถึง R7 เหมือนกันทั้งสิ้น (ดูรูปที่ 3.2) ดังนั้นในการ
ใช้งานผู้ใช้จะต้องให้ความระมัดระวังว่าต้องการรีจิสเตอร์นั้นๆ จากแบงค์ใด การสวิตช์ เลือกแต่ละกลุ่มของรีจิสเตอร์นี้ก็ทำได้
ง่าย เพียงการกำหนดค่าของบิตที่อยู่ภายในรีจิสเตอร์ PSW เท่านั้นตามตาราง ต่อไปนี้
                              
                       _______________________________________________________________
                             รีจิเตอร์แบงค์              บิต RS0             บิต RS1        ตำแหน่งหน่วยความจำ  
                                     0                          0                      0                      0000H
                                     1                          0                      1                      0008H
                                     2                          1                      0                      0010H
                                     3                          1                      1                      0018H

อย่างไรก็ตามโดยทั่วไปก็มักจะมีการใช้งานรีจิสเตอร์ R0-R7 เฉพาะในแบงก์ 0 เท่านั้น ดังนั้นพื้นที่ของ แบงก์อื่นๆ ที่เหลือก็
สามารถนำมาใช้ในลักษณะของหน่วยความจำข้อมูลภายในปกติด้วยการอ้างถึงหมายเลขของ แอดเดรสนั้นๆ โดยตรง
                      บริเวณแอดเดรส 20H 2FH จำนวน 16ไบต์ บริเวณพื้นที่เป็นส่วนสำหรับผู้ใช้ซึ่งจะมีความพิเศษต่างไป
หน่วยความจำส่วนอื่นๆ เนื่องจากผู้ใช้อาจสามารถอ้างถึงหน่วยความจำบริเวณนี้ได้ทั้งในลักษณะของ ไบต์ข้อมูล เช่น ปกติ
หรืออาจจะเป็น บิตข้อมูล ได้โดยตรง ดังนั้นหากว่ามองในลักษณะบิตข้อมูลแล้ว ก็จะมีพื้นที่ตัวแปรแบบบิตให้ใช้ งานได้มาก
ถึง128 บิต โดยตำแหน่งแรกของบิตจะเป็นบิตซึ่งริ่มต้นนับจากบิตนัยสำคัญต่ำสุด(LSB) ของแอดเดรส 20H เรื่อยไปจนกระทั่ง
ถึงบิตที่ 127 ซึ่งเป็นบิตนัยสำคัญสูงสุด (MSB) ของแอดเดรส 2FH (ดูรูปที่ 3.3)

ความสามารถในการใช้งานพื้นที่ส่วนนี้แบบบิตข้อมูลดดยตรงนี้นับว่าน่าสนใจมาก และถือเป็นการใช้งาน 8051 อย่างเต็ม
ประสิทธิภาพทีเดียว เนื่องจากว่า 8051 ได้รับการออกแบบมาก็มักจะเป็นเพียงการอ่านค่าสถานะลอจิก ของเส้นสัญญาณ หรือ
กรณีการส่งออกข้อมูลก็จะเป็นการกำหนดสภาวะลอจิกให้กับวงจรภายนอกผ่านทางบิตใดบิต หนึ่งอยู่แล้ว ดังนั้นหากว่ามีการ
กำหนดบิตหรืออ่านค่าของบิตมาโดยตรง แทนที่จะต้องทำลอจิกขั้นต้นกับข้อมูลทั้งไบต์ เพื่อต้องการทราบผลเพียงหนึ่งบิต
เช่นที่กระทำกันในโปรเซสเซอร์โดยทั่วไป ก็จะเพิ่มความสะดวกและรวดเร็วในการ เขียนโปรแกรมควบคุมมาก รายละเอียดใน
ส่วนนี้จะได้กล่าวถึงอีกครั้งหนึ่งเมื่อศึกษาถึงการใช้งานพอร์ต อินพุต/เอาต์พุตต่อไป
                         บริเวณแอดเดรส 30H - 7FH เป็นบริเวณที่สามารถนำไปใช้งานได้อย่างอิสระ โดยสามารถอ้างถึงได้
เฉพาะ ในลักษณะของไบต์ข้อมูลตามปกติเท่านั้น
                หน่วยความจำขนาด 128 ไบต์ถัดไป
                         พื้นที่ตั้งแต่บริเวณตั้งแต่แอดเดรส 80H-FFH เป็นบริเวณของหน่วยความจำที่มีการใช้งานเฉพาะจาก
8051เท่านั้น โดยจะนำมาใช้เป็นตำแหน่งของ รีจิสเตอร์หน้าที่พิเศษ (Special-Function Register หรือ SFR) จำนวน 20
ตำแหน่ง ดังแสดงแผนภาพในรูป         สำหรับไมโครคอนโทรลเลอร์เบอร์ 8051 จะมีหน่วยความจำข้อมูลภายในสำหรับ
การใช้งานเพิ่มมากขึ้น กว่าเบอร์อื่นๆ เช่น 8031 หรือ 8751 อีก 128 ไบต์ โดยจะอยู่บริเวณช่วงแอดเดรส 80H ถึง FFH เช่น
กัน ซึ่งแม้ว่า จะเป็นพื้นที่ที่มีหมายเลขแอดเดรสเดียวกับส่วนของรีจิสเตอร์หน้าที่พิเศษ แต่ในความเป็นจริงแล้วจะเป็นพื้นที่
หน่วย ความจำอีกบริเวณหนึ่ง ซึ่งมีการซ้อนเกย (Overlap) กันให้อยู่ในบริเวณแอดเดรสส่วนนี้ ซึ่งหากว่าผู้ใช้งานต้องการ จะเก็บข้อมูลในพื้นที่บริเวณนี้ก็จะต้องใช้การอ้างถึงหน่วยความจำแบบโดยอ้อม (Indirect Addressing) เท่านั้น
                       
              _____________________________________________________ 
                   ชื่อรีจิสเตอร์                     ความสามารถในการอ้างถึงแบบบิตได้            
                       ACC                                              *
                         B                                                 *
                        PSW                                              *
                         SP                                                *
                       DPTR                                             *
                         P0                                                *
                         P1                                                *
                         P2                                                *
                         P3                                                *
                         IP                                                 *
                         IE                            
                       TMOD                        
                       TCON                         
                         TH0                          
                         TL0
                         TH1
                         TL1
                         SCON
                         SBUF                                                      * แทนได้
                         PCON                   
              _____________________________________________________

                รีจิสเตอร์หน้าที่พิเศษ
                         รีจิสเตอร์หน้าที่พิเศษ (SFR) เป็นรีจิสเตอร์สำหรับการควบคุมหน้าที่และการทำงานของอุปกรณ์หรือพอร์ต
ของ 8051 ทั้งหมด โดยมีตำแหน่งอยู่ในบริเวณแอดเดรส 80H-FFH                          การใช้งานรีจิสเตอร์หน้าที่ิเศษเหล่านี้
สามารถทำได้ทั้งการระบุถึงชื่อของรีจิสเตอร์หรือตำแหน่งแอดเดรสที่เป็นของรีจิสเตอร์นั้นก็ได้                          ตารางต่อไปนี้แสดงเห็นลักษณะการจัดพื้นที่หน่วยความจำ สำหรับรีจิสเตอร์หน้าที่พิเศษเหล่านี้โดยมีข้อ
สังเกตว่ารีจิสเตอร์ที่อยู่ตำแหน่งแอดเดรสที่เป็นจำนวนทวีคูณของค่า 8 จะสามารถอ้างถึงในระดับบิตได้ด้วย (นั่นคือ แอดเดรส 80H,88H,90H,98H,A0H,A8H,B0H,B8H,D0H,E0H และ F0H)
                          แอกคิวมูเลเตอร์ (Accumulator) หรือ ACC
                          เป็นรีจิสเตอร์ขนาด 8 บิตทำหน้าที่ในการเก็บข้อมูลที่จะส่งให้กับหน่วยทำงานภายในซีพียูและเก็บผลลัพธ์ ที่ได้จากการทำงานนั้น การทำงานของรีจิสเตอร์นี้มีลักษณะเช่นเดียวกับตัวแอกคิวมูเลเตอร์ของโปรเซสเซอร์ทั่วไปการใช้งานภาย
ในโปรแกรมจะเรียกว่า รีจิสเตอร์ A
                          รีจิสเตอร์ B เป็นรีจิสเตอร์ที่ใช้สำหรับการทำคำสั่งการคูณแลหารตัวเลข ในกรณีที่ไม่ใช้ในการคำนวณ
ทางด้าน คณิตศาสตร์ ก็สามารถนำไปใช้งานเช่นเดียวกับรีจิสเตอร์ทั่วไปได้
                          โปรแกรมเคาน์เตอร์ (Program Counter)                           เป็นรีจิสเตอร์ที่ใช้ในการชี้ตำแหน่งแอดเดรสของหน่วยความจำโปรแกรม ซึ่งจะต้องไปทำงานในลำดับถัด ไป การใช้งานภายในโปรแกรมจะเรียกว่า รีจิสเตอร์ PC
                          สแต็กพอยน์เตอร์ (Stack Pointer)
                          เป็นรีจิสเตอร์ขนาด 8 บิตทำหน้าที่เก็บตำแหน่งของตัวชี้หรือพอยน์เตอร์ (Pointer) ของบริเวณสแต็ก
(Stack) สำหรับเก็บขอ้มูลแอกคิวมูเลเตอร์ รีจิสเตอร์ต่างๆ รวมทั้งข้อมูลจากโปรแกรมโดยปกติแล้วเมื่อทำการเริ่มต้น ระบบ
ใหม่ภายหลังจากการเริ่มจ่ายไฟฟ้า หรือมีการรีเซต (Reset) เกิดขึ้นค่าภายในสแต็กพอยน์เตอร์จะมีค่า 07H ซึ่ง เป็นตำแหน่ง
แอดเดรสภายในบริเวณเนื้อที่ 128 ไบต์แรกของหน่วยความจำข้อมูลภายใน การใช้งานภายในโปรแกรม จะเรียกว่า รีจิสเตอร์ SP
                         ตัวชี้ข้อมูล หรือ ดาต้าพอยน์เตอร์ (Data Pointer)
                         เป็นรีจิสเตอร์ขนาด 16 บิต ซึ่งเรียกว่า DPTR และสามารถใช้งานแยกออกเป็นรีจิสเตอร์ขนาด 8 บิตสอง
ตัวคือ รีจิสเตอร์ DPH และ DPL เพื่อเก็บค่าของแอดเดรสของหน่วยความจำที่ต้องใช้งานภายในโปรแกรมหรืออาจจะเป็น
แอดเดรสของอุปกรณ์ภายนอก ซึ่งกำหนดให้ติดต่อกันโดยใช้ตำแหน่งของหน่วยความจำภายในโปรแกรม
                         โปรแกรมสเตตัสเวิร์ด (PSW)
                         รีจิสเตอร์นี้ทำหน้าที่บอกถึงแฟล็กสภาวะการทำงานต่างๆ รวมทั้งบิตสำหรับการกำหนดเลือกแบงก์(Bank)
ของรีจิสเตอร์ที่ใช้งานด้วย ดังแสดง
        *ชื่อบิต: PSW     ต่ำแหน่ง: D0h      ค่าบิตเริ่มต้น: 0000 0111
                     ______________________________________________
                     ชื่อบิต                        ต่ำแหน่ง                      ความหมาย
                      CY                           PSW.7                         Carry Flag
                      AC                           PSW.6                         Auxiliary Carry Flag
                      F0                            PWS.5                         Flag 0
                      RS1                          PSW.4                         Select Blank bit 1       
                      RS0                          PSW.3                         Select Blank bit 0
                      OV                           PSW.2                         Overflow Flag
                       _                             PSW.1
                      P                              PSW.0                         Parity Flag     

                         - รีจิสเตอร์ที่เกี่ยวข้องกับพอร์ต (Port Register)
                         รีจิสเตอร์เหล่านี้จะมีความเกี่ยวข้องกับการทำงานของพอร์ตอินพุต/เอาท์พุตโดยตรง ซึ่งแต่ละตัวจะเป็น
รีจิสเตอร์ขนาด 8 บิต สามารถใช้งานได้ทั้งในลักษณะของการอินพุต หรือการเอาต์พุตข้อมูลได้ การดำเนินการใดๆ ที่ เกี่ยว
กับพอร์ตทั้งสี่นี้จะมีผลทำให้ข้อมูลที่ตำแหน่งของพอร์ตเหล่านี้เปลี่ยนแปลงไปเช่นกน นอกจากนี้พอร์ต P0 และ P2 ยังสามารถ
นำมาใช้ในการติดต่อกับหน่วยความจำโปรแกรมหรือหน่วยความจำข้อมูลภายนอกได้ โดยพอร์ต P2 จะเป็นค่าของแอดเดรส 8 บิตบนของหน่วยความจำ ส่วนพอร์ต P0 นั้นในช่วงเริ่มแรกจะเป็นค่าของแอดเดรส 8 บิต ล่างของหน่วยความจำช่วงเวลาต่อมา
จึงจะนำพอร์ต P0 ไปใช้เป็นบัสสำหรับการรับหรือส่งข้อมูลกับหน่วยอุปกรณ์ ภายนอก สำหรับพอร์ต P3นั้นนอกเหนือจากจะใช้
ในฐานะของพอร์ตอินพุต/เอาต์พุตเช่นปกติแล้ว ยังนำมาใช้ในฐานะ บัสควบคุมเกี่ยวกับสัญญาณอินเตอร์รัปต์ได้อีกด้วย
                         รีจิสเตอร์ SBUF
                         เป็นบัฟเฟอร์ขนาด 8 บิต สำหรับการสื่อสารข้อมูลแบบอนุกรมทั้งการรับและส่งข้อมูล ซึ่งตามความเป็น
จริงแล้วบัฟเฟอร์นี้มีอยู่ด้วยกันสองชุดและแยกจากกันอย่างชัดเจน สำหรับการส่งและการรับ โดยซีพียูจะทำการจัด การเลือก
บัฟเฟอร์ที่เหมาะสมให้โดยอัตโนมัติ
                          - รีจิสเตอร์ PCON
                          เป็นรีจิสเตอร์ที่ใช้ในการควบคุมหน้าที่การทำงานในสามลักษณะ ซึ่งได้แก่ การควบคุมการทำงานของโปร
โซสเซอร์ (บิต IDL และ PD) การกำหนดอัตราการทวีคูณของอัตราเร็วในการสื่อสารข้อมูลอนุกรม(บิต SMOD) และแฟล็ก
สภาวะสำหรับการใช้งานทั่วไป (บิต GR0 และ GR1)
                *ชื่อบิต: PCON ต่ำแหน่ง: 97h ค่าบิตเริ่มต้น: 0xxx 0000
                     _______________________________________________
                                ชื่อ                   ต่ำแหน่ง                 ความหมาย        
                             SMOD                  PCON.7 บิตทวีคูณของอัตราบอดปรกติ
                                 -                      PCON.6
                                -                       PCON.5
                                -                       PCON.4
                             GF1                     PCON.3 แฟลกสำหรับให้ผู้ใช้ ใช้งานทั่วไป Flag 0
                             GF0                     PCON.2 แฟลกสำหรับให้ผู้ใช้ ใช้งานทั่วไป Flag 1
                             PD                      PCON.1 บิตสำหรับการกำหนด Power down
                             IDL                     PCON.0 บิตสำหรับการกำหนด idel mode

                           บิต PD (Power down) เป็นการกำหนดให้ลดกำลังไฟฟ้าที่จ่ายให้กับส่วนของโปรเซสเซอร์ภายในลงโดย
ยังคงมีกำลังไฟฟ้าจ่ายให้กับส่วนหน่วยความจำข้อมูลภายในผ่านทางขาสัญญาณ RST วิธีการนี้มักนำมาใช้ในกรณีที่มีการตรวจ
สอบการไม่มีกำลังไฟฟ้า (Power failure) โดยวงจรตรวจสอบภายนอกจะต้องมีการอินเตอร์รัปต์เข้ามา เพื่อทำการเก็บข้อมูลที่
กำลังประมวลผลอยู่ก่อนและเมื่อมีกระแสไฟฟ้าจ่ายให้เป็นปกติแล้ว จึงค่อยนำข้อมูลนั้นมาประมวลผลต่อไป
                            บิต IDL (Idle Mode) เป็นการกำหนดให้โปรเซสเซอร์หยุดการทำงานชั่วขณะ (Sleep)และจะกลับมาอยู่
ในสภาพปกติอีกครั้งเมื่อ ทำการรีเซตทางฮาร์ดแวร์ หรือมีการอินเตอร์รัปต์อย่างใดอย่างหนึ่งเกิดขึ้นการทำงานในลักษณะนี้
สามารถเกิดขึ้นได้ ก็เนื่องจากว่าสภาวะการหยุดการทำงานชั่วขณะนั้น เป็นเพียงการห้ามไม่ให้มีสัญญาณนาฬิกาจ่ายให้ส่วนของ โปรเซสเซอร์เท่านั้น ส่วนของวงจรการอินเตอร์รัปต์พอร์ตอนุกรมและวงจรนับ/จับเวลา ยังคงมีสัญญาณนาฬิกาอยู่ เป็นปกติ                             -รีจิสเตอร์ IP,IE,TMOD,TMOD,SCON
                            เป็นกลุ่มของรีจิสเตอร์ที่ทำหน้าที่กำหนดการควบคุม และการทำงานของการอินเตอร์รัปต์ต่างๆ ของ
8051


[ บทเรียน ] [ 204471 ] [ รายวิชา ]
[ ภาควิชาวิศวกรรมคอมพิวเตอร์ ] [ คณะวิศวกรรมศาสตร์ ] [ มหาวิทยาลัยเกษตรศาสตร์ ]