วันพุธที่ 29 พฤษภาคม พ.ศ. 2556

ภาษาแอสแซมบลี้

ภาษาแอสแซมบลี้
                การเรียนรู้เพื่อใช้งานไมโครคอนโทรลเลอร์ สิ่งที่สำคัญในลำดับต่อมาจากที่ทำความเข้าใจถึงโครงสร้างทางฮาร์ดแวร์แล้วนั่นคือ การเขียนโปรแกรมเพื่อกำหนดให้ไมโครคอนโทรลเลอร์ทำงานข้อมูลของโปรแกรมที่ไมโครคอนโทรลเลอร์ต้องการจะอยู่ในรูปของรหัสเลขฐานสิบหกหรือที่เรียกกันว่าภาษาเครื่อง หรือ แมชีนโค้ด (Machine Code) แต่เนื่องจากการเขียนโปรแกรมในลักษณะที่เป็นภาษาเครื่องนี้ ผู้เขียนโปรแกรมต้องทำการเปิดตารางรหัสคำสั่งซึ่งเป็นเรื่องที่ยุ่งยากและทำให้การตรวจสอบโปรแกรมที่เขียนขึ้นกระทำได้ยากจึงใช้การเขียนโปรแกรมด้วยภาษา
แอสแซมเบลอร์(Assembler) ทำการแปลภาษาแอสแซมบลีที่เขียนขึ้นนั้นเป็นภาษาเครื่องแล้วเขียนลงในหน่วยความจำโปรแกรมของไมโครคอนโทรลเลอร์ต่อไป



โครงสร้างของโปรแกรมภาษาแอสแซมบลี
                ประกอบด้วย 4 ส่วนหลักคือ
1.       ลาเบล (Label) ใช้ในการอ้างถึงบรรทัดใดบรรทัดหนึ่งของโปรแกรมที่ทำการเขียนขึ้น
2.       รหัสนีโมนิก (Mnemonic) เป็นส่วนแสดงคำสั่งของไมโครคอนโทรลเลอร์ที่ต้องการให้กระทำ
3.       โอเปอร์แรนด์ (Operand) เป็นส่วนที่แสดงถึงตัวกระทำหรือถูกกระทำและข้อมูลที่ใช้ในการกระทำตามคำสั่งที่กำหนดโดยรหัสนีโมนิกก่อนหน้านี้
4.       คอมเมนต์ (Comment) เป็นส่วนที่ผู้เขียนโปรแกรมเขียนขึ้นเพื่อใช้ในการอธิบายคำสั่งที่กระทำ หรือผลของการกระทำคำสั่งในบรรทัดหรือโปรแกรมย่อยนั้นๆ ทั้งนี้เพื่อช่วยให้ผู้เขียนสามารถตรวจสอบโปรแกรมที่เขียนขึ้นได้ง่ายรวมถึงเป็นประโยชน์ต่อผู้ที่นำโปรแกรมนั้นมาศึกษาใหม่อีกด้วย
ชุดคำสั่งของไมโครคอนโทรลเลอร์  MCS-51
                ไมโครคอนโทรลเลอร์MCS-51 ประกอบด้วยคำสั่งทั้งหมดจำนวนมากซึ่งนำมาแสดงไว้ในตารางของชุดคำสั่งต่างๆ ซึ่งสามารถจะจัดกลุ่มคำสั่งเหล่านี้ตามลักษณะและหน้าที่การทำงานที่คล้ายคลึงกัน เพื่อความสะดวกต่อการศึกษา ทำความเข้าใจและใช้งาน ดังนี้

                1. กลุ่มการถ่ายเทข้อมูล คือ กลุ่มคำสั่งในการโอนย้ายข้อมูล ทำหน้าที่ในโอนย้ายข้อมูลระหว่างรีจิสเตอร์ หรือหน่วยความจำภายในแรม โดยมีรายละเอียดดังนี้ ชุดคำสั่งในการถ่ายเทแรม ภายในซึ่งเวลาที่ใช้ในหนึ่งคำสั่งนั้น จะเป็นเวลาเมื่อขณะที่ความถี่ในการทำงานของหน่วยประมวลผลกลาง ที่ความถี่ 12 เมกะเฮิรตซ์ และรายละเอียดของแต่ละคำสั่งมีดังนี้ MOV :จะทำงานในลักษณะเป็นการถ่ายเทข้อมูลที่มีขนาดเป็นไบต์ หรือ บิตก็ได้ จากแหล่งกำเนิดเข้าสู่ตัวรับข้อมูลในฟิลด์โอเปอร์แรนด์ PUSH:จะทำงานโดยเพิ่มค่ารีจิสเตอร์ SP ก่อนแล้วจึงทำการถ่ายเทข้อมูลไบต์จากแหล่งกำเนิดไปบริเวณสแต็กตามตำแหน่งที่รีจิสเตอร์ SP กำหนด POP:การถ่ายเทข้อมูลขนาด ไบต์จากบริเวณตำแหน่งที่รีจิสเตอร์ SP กำหนดไปยังรีจิสเตอร์ที่โอเปอร์แรนด์ กำหนดและหลังจากนั้นรีจิสเตอร์ SP จะลดค่าลง XCH:คำสั่งแลกเปลี่ยนไบต์ระหว่างแหล่งกำเนิดโอเปอร์แรนด์กับรีจิสเตอร์ AXCHD คำสั่งในการแลกเปลี่ยนขนาดนิบเบิลทางอันดับต่ำของแหล่งกำเนิดโอเปอร์
แรนด์กับนิบเบิลอันดับต่ำลงของแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลของรีจีสเตอร์ R0-R7 มาเก็บไว้ในแอกคิวมูเลเตอร์

MOV A, direct
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลของหน่วยความจำข้อมูลภายในมาเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลมาเก็บไว้ที่แอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอดเดรสของ หน่วยความจำข้อมูลภายใน ที่กำหนดไว้                ในรีจีสเตอร์ R0 หรือ R1 มาเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอกคิวมูเลเตอร์ไปเก็บไว้ในรีจีสเตอร์ R0-R7
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลจากแอดเดรสของหน่วย ความจำข้อมูลภายใน ที่กำหนดมา                เก็บไว้ ในรีจีสเตอร์ R0-R7
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลมาเก็บไว้ที่รีจีสเตอร์ R0-R7
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลจากแอกคิวมูเลเตอร์มาเก็บไว้ที่หน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลที่อยู่ภายในรีจีสเตอร์ R0-R7 มาเก็บไว้ที่หน่วยความจำข้อมูล              ภายใน
                จำนวนไบต์ : 3
                การทำงาน : นำข้อมูลจากหน่วยความจำข้อมูล ภายในแอดเดรสหนึ่ง มาเก็บไว้ที่ หน่วย ความจำข้อมูล ภายในอีกแอดเดรสหนึ่ง

MOV direct, #data
                จำนวนไบต์ : 3
                การทำงาน : นำข้อมูลจากแอกคิวมูเลเตอร์มาเก็บไว้ที่หน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลจากแอดเดรสของหน่วยความจำข้อมูลภายใน ที่กำหนดไว้ ในรีจีสเตอร์ R0 หรือ R1 มาเก็บไว้ในหน่วยความจำ ข้อมูลภายในที่กำหนด
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจาก แอกคิวมูเลเตอร์ มาเก็บไว้ที่หน่วยความจำข้อมูลภายใน               ที่กำหนด โดยค่า ของรีจีสเตอร์ R0 หรือ R1
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลจากหน่วยความจำข้อมูล ภายในแอดเดรสหนึ่ง มาเก็บไว้ที่ หน่วย ความจำข้อมูลภายใน อีกแอดเดรสหนึ่ง ที่กำหนดโดยค่าของ R0 หรือ R1 MOV @Rn, #data
                จำนวนไบต์ : 3
                การทำงาน : นำข้อมูลไปเก็บไว้ที่หน่วยความจำข้อมูลที่กำหนดโดยค่าของ R0      หรือ R1
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลในระดับบิต จากหน่วยความจำภายใน มาเก็บไว้ในแฟลกทด             ซึ่งอยู่ในรีจีสเตอร์ PSW
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลในแฟลกทด ไปเก็บไว้ที่หน่วยความจำข้อมูลภายใน ที่        สามารถเข้าถึง ระดับบิตได้
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอดเดรสของหน่วยความจำข้อมูลภายนอก ที่กำหนดไว้              ในรีจีสเตอร์ R0 หรือ R1 มาเก็บไว้ในแอกคิวมูเลเตอร์

MOVX A, @DPTR
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอดเดรสของหน่วยความจำข้อมูลภายนอก ที่กำหนดไว้              ในรีจีสเตอร์ DPTR มาเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอกคิวมูเลเตอร์ ไปเก็บไว้ที่แอดเดรสของหน่วยความจำ              ข้อมูล ภายนอก ที่กำหนดไว้ในรีจีสเตอร์ R0 หรือ R1
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากแอกคิวมูเลเตอร์ มาเก็บไว้ในหน่วยความจำข้อมูล          ภายนอกที่ แอดเดรส ซึ่งกำหนดไว้ในรีจีสเตอร์ DPTR
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากหย่วยความจำข้อมูลภายนอก ในตำแหน่งแอดเดรสที่    ได้รับการ กำหนดด้วยค่าของรีจีสเตอร์ รวมกับค่าในรีจีสเตอร์ PC
                จำนวนไบต์ : 1
                การทำงาน : นำข้อมูลจากหน่วยความจำโปรแกรมภายนอก ในตำแหน่งแอดเดรส              ที่ได้รับ การกำหนดด้วยค่าของรีจีสเตอร์ รวมกับค่าในรีจีสเตอร์ PC
                จำนวนไบต์ : 1
                การทำงาน : แลกเปลี่ยนข้อมูลระหว่างรีจีสเตอร์ กับข้อมูลภายในรีจีสเตอร์
                R0-R7
                จำนวนไบต์ : 2
                การทำงาน : แลกเปลี่ยนข้อมูลระหว่างรีจีสเตอร์ กับหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 1
                การทำงาน : แลกเปลี่ยนข้อมูลระหว่าง กับข้อมูลภายในแอดเดรสที่ถูกชี้โดย R0              หรือ R1

XCHD A, @Rn
                จำนวนไบต์ : 1
                การทำงาน : แลกเปลี่ยนข้อมูล บิต 0-3 ของรีจีสเตอร์ กับข้อมูล บิต 3-0 ภายใน                 แอดเดรสของหน่วยความจำที่ชี้โดยรีจีสเตอร์ R0 หรือ R1
                จำนวนไบต์ : 2
                การทำงาน : เพิ่มค่าของรีจีสเตอร์ตัวชี้สแต็ก (SP) ไปหนึ่งตำแหน่ง จากนั้นนำค่า                ของ ข้อมูลในหน่วยความจำที่กำหนดไปเก็บไว้ในแอดเดรสที่ชี้โดย SP
                จำนวนไบต์ : 2
                การทำงาน : นำข้อมูลในแอดเดรสที่ถูกชี้โดย SP กลับคืนหน่วยความจำใน           แอดเดรสที่กำหนดไว้ แล้วลดค่าของ SP ไปหนึ่งตำแหน่ง

                2. กลุ่มคำสั่งทางคณิตศาสตร์ เช่น การบวก ลบ คูณ และหารข้อมูลภายในตัว รีจิสเตอร์ต่างๆ ช่วงเวลาการทำงาน ของแต่ละคำสั่งนั้นจะกำหนดที่ความถี่ของสัญญาณนาฬิกาที่ 12 เมกะเฮิรตซ์ คำสั่งทางคณิตศาสตร์ส่วนใหญ่ใช้เวลา 1 ms ยกเว้นคำสั่ง INC DPTR ซึ่งใช้เวลา 2 msโดยที่คำสั่งการคูณและหารใช้เวลา 4 ms โดยมีรายละเอียดการใช้คำสั่งมีดังนี้ INC:เป็นการบวกหนึ่งกับโอเปอร์แรนด์และใส่ค่าใหม่กลับเข้าที่ตัวโอเปอร์แรนด์นั้นๆ DEC:เป็นการลบออกจากตัวเลขที่อยู่ในแหล่งกำเนิดโอเปอร์แรนด์ และนำผลลัพธ์ที่ได้มาเก็บไว้ที่ตัวโอเปอร์แรนด์นั้นADD:เป็นการบวกในแอกคิวมูเลเตอร์เข้ากับค่าในแหล่งกำเนิดโอเปอร์แรนด์ ADDC:เป็นการบวกค่าต่างๆ ในแอกคิวมูเลเตอร์เข้ากับค่าในแหล่งกำเนิดโอเปอร์-แรนด์และบวกกับบิตทดด้วย SUBB:เป็นการนำเลขที่แหล่งกำเนิดโอเปอร์แรนด์ ลบออกจากตัวเลขใน และนำค่าบิตตัวทดมาลบออกอีกและผลลัพธ์ที่ได้นำมาใส่ลงในแอกคิวมูเลเตอร์ MUL:เป็นการคูณแบบไม่คิดตัวเครื่องหมายของตัวเลขที่อยู่ใน แอกคิวมูเลเตอร์กับเลขใน รีจิสเตอร์ แล้วได้ผลลัพธ์ ไบต์ นำมาเก็บไว้ที่ AB โดย จะรับอันดับต่ำส่วน จะรับอันดับสูง DIV:เป็นคำสั่งในการหารแบบไม่คิดเครื่องหมายที่อยู่ในแอกคิวมูเลเตอร์แล้วหารตัวเลขในรีจิสเตอร์ B แล้วนำผลลัพธ์ไปเก็บในแอกคิวมูเลเตอร์และเศษของการหารตัวเลข จะเก็บไว้ในรีจิสเตอร์ DA:สำหรับการบวกกันทางตัวเลข BCD เป็นการปรับค่ารวม ซึ่งเป็นผลมาจากการบวกกันทางไบนารี่ของระบบตัวเลข BCD ขนาด 2หลักสองจำนวน การปรับค่าตัวเลขผลรวมด้วยการใช้คำสั่ง DA จะได้ผลลัพธ์กลับมาที่แอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการบวกค่าในแอกคิวมูเลเตอร์ เข้ากับข้อมูลในหน่วยความจำ        ข้อมูลภายใน แล้วนำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : ทำการบวกค่าในแอกคิวมูเลเตอร์เข้ากับข้อมูลในรีจีสเตอร์ R0-R7    ขนาด บิต แล้วนำผลลัพ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : ทำการบวกค่าในแอกคิวมูเลเตอร์เข้ากับข้อมูล บิต ในแอดเดรสของ              หน่วยความจำที่ถูกชี้โดย R0 หรือ R1 แล้วนำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการลบค่าในแอกคิวมูเลเตอร์ด้วยค่าของแฟลกทด (C) แล้วลบด้วย               ข้อมูล data ขนาด บิต นำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการลบค่าในแอกคิวมูเลเตอร์ด้วยค่าของแฟลกทด แล้วลบด้วย      ข้อมูล ในหน่วยความจำ ข้อมูลภายใน นำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : ทำการลบค่าในแอกคิวมูเลเตอร์ด้วยค่าของแฟลกทด แล้วลบด้วย      ข้อมูลในรีจีสเตอร์ R0-R7 ขนาด บิต นำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : ทำการลบค่าในแอกคิวมูเลเตอร์ด้วยค่าของแฟลกทด แล้วลบด้วย      ข้อมูล ในหน่วยความจำ ที่ถูกชี้โดย R0 หรือ R1 นำผลลัพธ์ไปเก็บไว้ในแอกคิวมู       เลเตอร์
                จำนวนไบต์ : 1
                การทำงาน : ทำการคูณค่าในแอกคิวมูเลเตอร์ด้วยค่าในรีจีสเตอร์ B นำผลคูณไบต์               ล่างเก็บไว้ใน แอกคิวมูเลเตอร์ และผลคูณไบต์บนเก็บไว้ในรีจีสเตอร์ B

DIV AB
                จำนวนไบต์ : 1
                การทำงาน : ทำการหารค่าในแอกคิวมูเลเตอร์ด้วยค่าในรีจีสเตอร์ B นำผลหารไบต์             บนเก็บไว้ใน แอกคิวมูเลเตอร์ และเศษการหารไบต์ล่างเก็บไว้ในรีจีสเตอร์ B
                จำนวนไบต์ : 1
                การทำงาน : ทำการเพิ่มค่าในแอกคิวมูเลเตอร์ขึ้นหนึ่งค่า แล้วนำค่าที่เพื่มขึ้นไป   เก็บไว้ใน แอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการเพิ่มค่าของข้อมูลในหน่วยความจำข้อมูลภายในขึ้นหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : ทำการเพิ่มค่าของข้อมูลในรีจีสเตอร์ R0-R7 ขึ้นหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : ทำการเพิ่มค่าของข้อมูลในหน่วยความจำข้อมูลภายในที่ถูกชี้ โดยรีจี                สเตอร์ R0 หรือ R1 ขึ้นหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : ทำการเพิ่มค่าของข้อมูลในรีจีสเตอร์ DPTR ขึ้นหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : ทำการลดค่าในแอกคิวมูเลเตอร์ ลงหนึ่งค่า แล้วนำค่าที่ลดลงนี้ ไปเก็บ            ไว้ใน รีจีสเตอร์ A
                จำนวนไบต์ : 2
                การทำงาน : ทำการลดค่าของข้อมูลในหน่วยความจำข้อมูลภายในลงหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : ทำการลดค่าของข้อมูลในหน่วยความจำข้อมูลภายในลงหนึ่งค่า

DEC @Rn
                จำนวนไบต์ : 1
                การทำงาน : ทำการลดค่าของข้อมูลในหน่วยความจำข้อมูลภายในที่ถูกชี้ โดยรีจี  สเตอร์ R0 หรือ R1 ลงหนึ่งค่า
                จำนวนไบต์ : 1
                การทำงาน : คำสั่งนี้ใช้ปรับค่าข้อมูลในรีจิสเตอร์ ภายหลังการบวกเลขที่ใช้     รหัส BCD(Binary Code Decimal) โดยคำสั่งนี้จะทำตามหลังคำสั่งบวก ADD หรือ   ADDC ในกรณีที่เลข นำมาบวกเป็นเลขรหัส BCD ทั้งนี้เพื่อให้ผลลัพธ์ที่ได้จาก  การบวกถูกเปลี่ยนกลับเป็นค่าเลขรหัส BCD ด้วย โดยการทำงานของคำสั่งจะ             ตรวจสอบค่าในรีจิสเตอร์ ภายหลังกระทำคำสั่งบวก

                3. กลุ่มคำสั่งทางตรรกศาสตร์หรือ แบบลอจิก ทำหน้าที่เกี่ยวกับการประมวลผลแบบ ลอจิกต่างๆ เช่น การ AND OR หรือ EX-OR ระหว่างข้อมูลในรีจิสเตอร์ นั่นเอง โดยมีการใช้คำสั่งดังนี้ CPL:เป็นการใช้คำสั่งกลับค่าหรือคอมพลีเมนต์ ข้อมูลในแอกคิวมูเลเตอร์จะไม่มีผลใดๆ ต่อค่าของแฟลก หรือการอ้างถึงตำแหน่งแอดเดรสนั้นตามบิตนั้นๆ RL, RLC, RR, RRC, SWAP:ทั้ง คำสั่งนี้เป็นคำสั่งในการทำงานการวนบิตบนตัวของแอกคิวมูเลเตอร์ซึ่ง RL เป็นการวนบิตทางขวา, RLC เป็นการทำการวนทางซ้ายผ่านบิตทด, RRC เป็นการวนขวาผ่านบิตทด และ SWAPเป็นการวนซ้ายสี่ครั้ง ANL:เป็นการ ADD กันทางตรรกศาสตร์ ระหว่างแหล่งกำเนิดสองโอเปอร์แรนด์ ซึ่งจะสั่งให้ทำงานในรูปแบบของตรรกศาสตร์ทางข้อมูลขนาดเป็นไบต์หรือบิต
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในแอกคิวมูเลเตอร์ กับข้อมูล data ขนาด               บิต แล้วนำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในหน่วยความจำข้อมูลภายในกับค่าของรีจี             สเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในรีจีสเตอร์ R0-R7 กับค่าของรีจีสเตอร์               นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในหน่วยความจำข้อมูลภายในที่ถูกชี้ โดยรี              จีสเตอร์ R0 หรือ R1 กับค่าในรีจีสเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูล ในหน่วยความจำข้อมูลภายในกับค่าของรี               จีสเตอร์ นำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 3
                การทำงาน : ทำการแอนด์ค่าของข้อมูล ในหน่วยความจำข้อมูลภายใน กับข้อมูล data ขนาด บิต แล้วนำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในแฟลกทด กับค่าของข้อมูลในระดับบิต                ของรีจีสเตอร์ แล้วนำผลลัพธ์ไปเก็บไว้ในแฟลกทด
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในแฟลกทด กับค่าคอมพลีเมนต์ ของ        ข้อมูลในระดับบิต ของรีจีสเตอร์ โดยข้อมูลของรีจีสเตอร์ไม่มีการเปลี่ยนแปลง       จากนั้นนำผลลัพธ์ไปเก็บไว้ใน แฟลกทด (ค่าคอมพลีเมนต์ คือค่าที่ตรงข้ามกับค่า                ของข้อมูล)
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าในแอกคิวมูเลเตอร์ กับข้อมูล data ขนาด บิต นำ        ผลลัพธ์ ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในหน่วยความจำข้อมูลภายใน กับค่าของรีจี                สเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการออร์ค่าของข้อมูลในรีจีสเตอร์ R0-R7 กับค่าของรีจีสเตอร์   นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการออร์ค่าของข้อมูลในหน่วยความจำข้อมูลภายใน ที่ถูกชี้โดยรีจี               สเตอร์ R0 หรือ R1 กับค่าในรีจีสเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในหน่วยความจำข้อมูลภายใน กับค่าของรีจี                สเตอร์ นำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 3
                การทำงาน : ทำการออร์ค่าของข้อมูลในหน่วยความจำข้อมูลภายใน กับข้อมูล data              ขนาด บิต นำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในแฟลกทด กับค่าของข้อมูลในระดับบิต    ของรีจีสเตอร์ แล้วนำผลลัพธ์ไปเก็บไว้ในแฟลกทด
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในแฟลกทด กับค่าคอมพลีเมนต์ของข้อมูล  ในระดับบิต ของรีจีสเตอร์ โดยข้อมูลของรีจีสเตอร์ไม่มีการเปลี่ยนแปลง จากนั้น   นำผลลัพธ์ไปเก็บไว้ในแฟลกทด
                จำนวนไบต์ : 2
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าในแอกคิวมูเลเตอร์กับข้อมูล data ขนาด 8  บิต นำผลลัพธ์ไปเก็บไว้ในแอกคิวมูเลเตอร์
                จำนวนไบต์ : 2
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าในหน่วยความจำข้อมูลภายใน กับค่าของรีจี              สเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าของข้อมูลในรีจีสเตอร์ R0-R7 กับค่าของรีจี               สเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจีสเตอร์ A
                จำนวนไบต์ : 1
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าของข้อมูล ในหน่วยความจำข้อมูลภายใน ที่               ถูกชี้โดย รีจีสเตอร์ R0 หรือ R1 กับค่าในรีจีสเตอร์ นำผลลัพธ์ไปเก็บไว้ในรีจี           สเตอร์ A
                จำนวนไบต์ : 2
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าของข้อมูล ในหน่วยความจำข้อมูลภายใน   กับค่าของ รีจีสเตอร์ นำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 3
                การทำงาน : ทำการเอ็กคลูซีฟ-ออร์ค่าของข้อมูล ในหน่วยความจำข้อมูลภายใน   กับข้อมูล data ขนาด บิต นำผลลัพธ์ไปเก็บไว้ในหน่วยความจำข้อมูลภายใน
                จำนวนไบต์ : 1
                การทำงาน : ทำการเคลียร์ค่าของรีจีสเตอร์ ให้เท่ากับ 00H
                จำนวนไบต์ : 1
                การทำงาน :ทำการกลับสถานะของข้อมูลในรีจีสเตอร์ ให้มีค่าตรงข้าม
                จำนวนไบต์ : 1
                การทำงาน : ทำการหมุนข้อมูลในแต่ละบิตของรีจีสเตอร์ วนทางซ้าย บิต จะ หมุนวนมายังบิต 0
                จำนวนไบต์ : 1
                การทำงาน : ทำการหมุนข้อมูลในแต่ละบิตของรีจีสเตอร์ วนทางซ้ายผ่าน         แฟลกทด โดยบิต จะหมุนไปยังแฟลกทด และข้อมูลของแฟลกทดเดิมจะหมุน              เข้ามาในบิต 0
                จำนวนไบต์ : 1
                การทำงาน : ทำการหมุนข้อมูลในแต่ละบิตของรีจีสเตอร์ วนทางขวา บิต จะ หมุนวนมายังบิต 7
                จำนวนไบต์ : 1
                การทำงาน : ทำการหมุนข้อมูลในแต่ละบิตของรีจีสเตอร์ วนทางขวาผ่าน         แฟลกทด โดยบิต จะหมุนไปยังแฟลกทด และข้อมูลของแฟลกทดเดิมจะหมุน              เข้ามาในบิต 7
                จำนวนไบต์ : 1
                การทำงาน : แลกเปลี่ยนข้อมูลระหว่างบิต 0-3 กับบิต 4-7 ของรีจีสเตอร์ A

                4. กลุ่มคำสั่งแบบบูลีนหรือแบบบิต ซึ่งเป็นความสามารถของไมโครคอนโทรลเลอร์ MCS-51 ที่จะดำเนินการประมวลผลแบบบิต แทนที่จะเป็นข้อมูลทั้งไบต์เช่นปกติ โดยมีชุดคำสั่งที่จัดการโดยตรง ทุกคำสั่งจะเข้าถึงข้อมูลโดยตรงในระดับบิต โดยมีการบิตแอดเดรสได้ตั้งแต่ 00H - 7FH ในพื้นที่ 128 บิต หน่วยความจำข้อมูลภายในและบิตแอดเดรส 80H - FFH ในบริเวณกลุ่มรีจิสเตอร์ฟังก์ชั่นพิเศษ (SFR)
ANL C, bit
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในแฟลกทด กับค่าของข้อมูลในระดับบิต                ของรีจีสเตอร์ แล้วนำผลลัพธ์ไปเก็บไว้ในแฟลกทด
ANL C, /bit
                จำนวนไบต์ : 2
                การทำงาน : ทำการแอนด์ค่าของข้อมูลในแฟลกทด กับค่าคอมพลีเมนต์ ของ        ข้อมูลในระดับบิต ของรีจีสเตอร์ โดยข้อมูลของรีจีสเตอร์ไม่มีการเปลี่ยนแปลง       จากนั้นนำผลลัพธ์ไปเก็บไว้ใน แฟลกทด (ค่าคอมพลีเมนต์ คือค่าที่ตรงข้ามกับค่า                ของข้อมูล)
ORL C, bit
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในแฟลกทด กับค่าของข้อมูลในระดับบิต    ของรีจีสเตอร์ แล้วนำผลลัพธ์ไปเก็บไว้ในแฟลกทด

ORL C, /bit
                จำนวนไบต์ : 2
                การทำงาน : ทำการออร์ค่าของข้อมูลในแฟลกทด กับค่าคอมพลีเมนต์ของข้อมูล  ในระดับบิต ของรีจีสเตอร์ โดยข้อมูลของรีจีสเตอร์ไม่มีการเปลี่ยนแปลง จากนั้น   นำผลลัพธ์ไปเก็บไว้ในแฟลกทด
                จำนวนไบต์ : 1
                การทำงาน : ทำการเคลียร์ค่าของแฟลกทดให้เท่ากับ "0"
                จำนวนไบต์ : 2
                การทำงาน : ทำการเคลียร์ค่าของข้อมูลในบิตที่กำหนดให้เท่ากับ "0"
                จำนวนไบต์ : 1
                การทำงาน : ทำการคอมพลีเมนต์ หรือกลับสถานะลอจิกของแฟลกทด
                จำนวนไบต์ : 2
                การทำงาน : ทำการคอมพลีเมนต์หรือกลับสถานะลอจิกของข้อมูลในบิตที่กำหนด
                จำนวนไบต์ : 1
                การทำงาน : ทำการเซตค่าของแฟลกทดให้เท่ากับ "1"
SETB bit
                การทำงาน : ทำการเซตค่าของข้อมูลในบิตที่กำหนดให้เท่ากับ "1"

            5. กลุ่มคำสั่งในการกระโดดไปยังตำแหน่งต่างๆภายในโปรแกรม ซึ่งจะเปลี่ยนลำดับของการประมวลผลภายในโปรแกรมไปยังส่วนต่างๆแทนที่จะดำเนินการไปเป็นลำดับ ต่อเนื่องโดยที่คำสั่ง JMP จะแบ่งเป็น ลักษณะ คือ SJMP, LJMP, AJMP ซึ่งในแต่ละคำสั่ง จะมีข้อแตกต่างของการกระโดดไปยังแอดเดรสไกลสุดที่ต่างกัน คำสั่ง JMP ซึ่งเป็นแบบโมนีชิก ที่สามารถจะใช้ได้โดยมีรายละเอียดการใช้งานของคำสั่งดังต่อไปนี้ SMP:จะเป็นการกระโดดแบบการย้ายอันดับตำแหน่งของแอดเดรสตำแหน่งเดิมซึ่งจะสามารถกระโดดได้ -128 ถึง +127 ไบต์ AJMP:ลักษณะแบบนี้จะสามารถกระโดดได้ไกลสุดประมาณ กิโลไบต์ ซึ่งจะใช้หน่วยความจำเพียง ไบต์เท่านั้นในการกำหนด LJMP:ลักษณะแบบนี้จะสามารถกระโดดได้ไกลสุดประมาณ 64 กิโลไบต์ ซึ่งจะใช้หน่วยความจำเพียง ไบต์เท่านั้นในการกำหนด JMP @A+DPTR:เป็นการควบคุมการกระโดดไปยังโปรแกรมที่ต้องการเฉพาะภายในส่วนต่างๆ
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูมาทำงานยังแอดเดรสที่กำหนดด้วยค่าสัมพัทธ์ (rel)
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูมาทำงานยังแอดเดรสที่ระบุไว้ addr11 มีขอบเขต กิโลไบต์ (000H-7FFH)
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูมาทำงานยังแอดเดรสที่ระบุไว้ addr16 มีขอบเขต 64               กิโลไบต์ (0000H-FFFFH)
                จำนวนไบต์ : 1
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยังแอดเดรส ของหน่วยความจำโปรแกรม              ในตำแหน่ง ที่ได้รับการกำหนดด้วยค่าของรีจีสเตอร์ รวมกับค่าใน DPTR
                จำนวนไบต์ : 1
                การทำงาน : เป็นคำสั่งที่ทำให้เกิดการเลื่อนแอดเดรสไปหนึ่งแอดเดรส
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของรีจีสเตอร์ ไม่เท่ากับค่าในหน่วยความจำข้อมูล
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของรีจีสเตอร์ ไม่เท่ากับค่าของ data
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของรีจีสเตอร์ R0-R7 ไม่เท่ากับค่าของ data
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อข้อ มูลในหน่วยความจำที่ชี้โดยรีจีสเตอร์ R0 หรือ R1 ไม่เท่ากับค่าของ           data
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อทำ การลดค่าของรีจีสเตอร์ R0-R7 ลงหนึ่งค่า แล้วผลลัพธ์ไม่เท่ากับ "0"
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อทำ การลดค่าของข้อมูลในหน่วยความจำที่กำหนดลงหนึ่งค่า แล้วผลลัพธ์            ไม่เท่ากับศูนย์
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง โปรแกรมย่อยซึ่งมีแอดเดรสอยู่ภายใน              ขอบเขต สัมบูรณ์แบบใกล้ ซึ่งมีค่าเทท่ากับ กิโลไบต์ (000H-7FFH) และจะ               กลับมายังโปรแกรมหลักก็ต่อเมื่อพบคำสั่ง RET
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง โปรแกรมย่อยซึ่งมีแอดเดรสอยู่ภายใน              ขอบเขต สัมบูรณ์แบบใกล ซึ่งสามารถอ้างแอดเดรส ได้สูงสุด 64 กิโลไบต์ และจะ    กลับมายังโปรแกรมหลักก็ต่อเมื่อพบคำสั่ง RET
                จำนวนไบต์ : 1
                การทำงาน : กำหนดให้ว๊พียูกระโดดไปยัง โปรแกรมย่อยกลับไปยัง       โปรแกรมหลัก เป็นคำสั่ง สุดท้ายของทุกโปรแกรมย่อย ยกเว้นโปรแกรมย่อย                บริการอินเตอร์รัปต์
                จำนวนไบต์ : 1
                การทำงาน : กำหนดให้ว๊พียูกระโดดออกจาก โปรแกรมย่อยบริการอินเตอร์รัปต์                 กลับไปยัง โปรแกรมหลัก เป็นคำสั่งสุดท้ายของโปรแกรมย่อยการบริการอินเตอร์      รัปต์
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อบิต ของรีจีสเตอร์ที่ทำการตรวจสอบเกิดการเซต ใช้ได้กับรีจีสเตอร์ที่    สามารถเข้าถึงได้ในระดับบิต
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อบิต ของรีจีสเตอร์ที่ทำการตรวจสอบเกิดการเซต ใช้ได้กับรีจีสเตอร์ที่    สามารถเข้าถึงได้ในระดับบิต หลังจากกระโดดแล้วจะทำการเคลียร์บิตที่ทำการ                ตรวจสอบนั้นให้เป็น "0"
                จำนวนไบต์ : 3
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อบิต ของรีจีสเตอร์ที่ทำการตรวจสอบไม่เกิดการเซต หรือกระโดดเมื่อบิตที่            ทำการตรวจสอบนั้นเป็น "0" ใช้ได้กับรีจีสเตอร์ที่สามารถเข้าถึงได้ในระดับบิต
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของแอกคิวมูเลเตอร์ หรือรีจีสเตอร์ ไม่เป็น "0"
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของแอกคิวมูเลเตอร์ หรือรีจีสเตอร์ เป็น "0"
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของแฟลกทด ( C ) ไม่เกิดการเซตหรือเป็น "0"
                จำนวนไบต์ : 2
                การทำงาน : กำหนดให้ซีพียูกระโดดไปยัง แอดเดรสปลายทางตามค่าสัมพัทธ์     (rel) เมื่อค่า ของแฟลกทด ( C ) ไม่เกิดการเซตหรือเป็น "1"
               
                6. โครงสร้างการอินเตอร์รัปต์ของไมโครคอนโทรลเลอร์ MCS-51 ไมโครคอนโทรลเลอร์ MCS-51สัญญาณที่เข้ามาทำการอินเตอร์รัปต์ MCS-51 สามารถที่จะกำหนดเลือกเพื่อยินยอม (หรืออีนาเบิล : ENABLE) และห้าม (หรือดิสเอเบิล : DISABLE) ไม่ให้มีการอินเตอร์รัปต์แต่ละประเภทได้ โดยการกำหนดบิตของข้อมูลที่เกี่ยวข้องซึ่งมักจะอยู่ภายในรีจิสเตอร์ TCON และ SCON นอกจากนี้ยังมีตำแหน่งบิตภายในรีจิสเตอร์ IE (INTERRUPT ENABLE REGISTER) ซึ่งทำหน้าที่เสมือนกับเป็นสวิตซ์หลักที่เกี่ยวข้องกับสัญญาณอินเตอร์รัปต์ทั้งหมด หากว่ากำหนดไม่ให้เกิดการอินเตอร์รัปต์แล้วการกำหนดบิตเพื่อห้ามหรือยินยอมของแต่ละอินเตอร์รัปต์ก็จะไม่มีผลใดๆเกิดขึ้น ยังแสดงให้เห็นว่าสัญญาณอินเตอร์รัปต์แต่ละประเภทยังสามารถกำหนดระดับความสำคัญ (PRIORITY) ของการอินเตอร์-รัปต์ได้สองลักษณะ คือ ระดับความสำคัญสูงหรือต่ำ (HIGH OR LOW PRIORITY) กล่าวคือขณะที่กำลังประมวลผลอยู่ภายในส่วนของโปรแกรมย่อยบริการอินเตอร์รัปต์ของสัญญาณที่มีระดับความสำคัญต่ำอยู่ ก็อาจจะถูกขัดจังหวะให้ไปประมวลผลของสัญญาณอินเตอร์รัปต์ที่มีระดับความสำคัญสูงกว่า แต่หากว่าเป็นสัญญาณอินเตอร์รัปต์ที่มีระดับความสำคัญต่ำเช่นเดียวกันแล้ว ก็ต้องรอให้เสร็จสิ้นการประมวลผลที่ ดำเนินการอยู่ก่อน
                7. การรีเซตโดยความหมายของการรีเซตเป็นการบังคับให้มีการเริ่มต้นใหม่อีกครั้งหนึ่ง ซึ่ง มักจะกระทำโดยการกำหนดสภาวะของสัญญาณที่ขารีเซตของไอซี MCS-51 ให้เป็นระดับลอจิก ที่เหมาะสมเท่านั้น การรีเซตด้วยวิธีนี้ถือว่าเป็นการอินเตอร์รัปต์อย่างหนึ่งได้ แต่จะมีลักษณะต่างออกไปจากการอินเตอร์รัปต์ของสัญญาณนี้ได้ ซึ่งมีศัพท์เฉพาะเรียกว่า NON-MASKABLE INTERRUPT นอกจากนี้การดำเนินการของโปรแกรมก็แตกต่างออกไปด้วย โดยจะไม่มีการเก็บค่าของคำสั่งที่กำลังจะไปทำในลำดับต่อไปภายในรีจิสเตอร์ PC เมื่อมีการรีเซตเกิดขึ้นโปรแกรม จะถูกสั่งให้กระโดดไปยังแอดเดรส 0000 ทันที ซึ่งตำแหน่งนี้จะเป็นตำแหน่งเริ่มต้นของการทำงานของไมโคร-คอนโทรลเลอร์ MCS-51 เมื่อเริ่มจ่ายไฟให้กับระบบเมื่อใดก็ตามที่มีการรีเซตเกิดขึ้นค่าสภาวะต่างๆ ภายในไมโครคอนโทรลเลอร์จะถูกกำหนดกลับไปเป็นค่าเริ่มต้นใหม่อีกครั้ง


ไม่มีความคิดเห็น:

แสดงความคิดเห็น