ไมโครคอนโทรลเลอร์
 เข้าสู่ระบบ - สมัครสมาชิก  

 

 

สถาปัตยกรรมและโครงสร้างของไมโครคอนโทรลเลอร์ตระกูล MCS -51

ในสมัยก่อนการเรียนการสอนและการประยุกต์ใช้งานที่ควบคุมด้วยระบบคอมพิวเตอร์หรือไมโครโปรเซสเซอร์จะต้องใช้ความพยายามสูงในการต่อวงจรควบคุมที่มีส่วนประกอบของวงจรจำนวนมากและซับซ้อน ยิ่งไปกว่านั้น ภาษาแอสเซมบลี (Assembly) ที่ใช้เขียนเพื่อควบคุมไมโครโปรเซสเซอร์ก็ทำได้ลำบาก เพราะเครื่องมือต่างๆมีอย่างจำกัด ซึ่งยุคแรกๆซีพียูขนาด 8 บิตจะมีเบอร์ Z80, 6502, 8085 และไมโครคอนโทรลเลอร์ 8084 ของอินเทลเท่านั้น  แต่ในปัจจุบันมีไมโครคอนโทรลเลอร์ MCS-51 ซึ่งเป็นไมโครคอนโทรลเลอร์รุ่นใหม่ที่สามารถต่อใช้งานได้โดยไม่จำเป็นต้องมีวงจรประกอบมาก มีความสะดวกในการใช้งาน รวมทั้งมีเครื่องมือในการพัฒนาโปรแกรมหลากหลาย สามารถเขียนได้ทั้งภาษาแอสเซมบลีและภาษาระดับสูง เช่น ภาษาซี ภาษาเบสิก เป็นต้น  MCS-51 เป็นไมโครคอนโทรลเลอร์ที่ออกแบบมาเพื่อสนองความต้องการของผู้ใช้แบบสำเร็จในไอซีตัวเดียว คือ มีสายสัญญาณอินพุต/เอาต์พุตภายในตัว พอร์ตของอินพุตและเอาต์พุตบัฟเฟอร์ที่เชื่อมต่อกับวงจรภายนอก (interface)  และสายสัญญาณควบคุมอื่นๆที่ใช้สำหรับแยกสายสัญญาณข้อมูลกับสายสัญญาณกำหนดตำแหน่งหน่วยความจำ และยังมีชุดคำสั่งพิเศษเพื่อจัดการข้อมูลเพิ่มขึ้นอีก นอกจากนั้นยังมีวงจรนับเวลาและตั้งเวลาด้วย ข้อสำคัญคือ มีการพัฒนาภายในไมโครคอนโทรลเลอร์ให้มีหน่วยความจำเป็นแบบแฟลช (Flash Memory) ทำให้สามารถโปรแกรมข้อมูลในหน่วยความจำโปรแกรมได้โดยไม่ต้องถอดตัวไมโครคอนโทรลเลอร์ออกจากวงจร เรียกว่า การโปรแกรมภายในวงจร (In-System Programming) และมีการติดต่อแบบ SPI (Serial Peripheral Interface) ทำให้การพัฒนาและการแก้ไขปรับปรุงโปรแกรมทำได้สะดวก

1.1 คุณสมบัติของไมโครคอนโทรลเลอร์ MCS-51

 1.    เป็นมโครคอนโทรลเลอร์ขนาด8บิต

2.    มีหน่วยความจำภายในแบบแฟลซขนาด 4 กิโลไบต์ หรือ 8 กิโลไบต์ ที่โปรแกรมได้ภายในวงจร สามารถเขียนและลบได้เป็นพันครั้ง

3.   มีสายสัญญาณสำหรับต่อกับอินพุต/เอาต์พุตได้ 32 เส้น(แบบ 2 ทิศทาง)

 4.   มีหน่วยความจำชั่วคราว(RAM) ภายในขนาด 128 กิดลไบต์ หรือ 256 กิโลไบต์

 5.   ใช้ความถี่สัญญาณนาฬิกาตั้งแต่ 0 Hz จนถึง 24 MHz

 6.   มีวงจรตั้งเวลาและนับเวลาขนาด16 บิต จำนวน 2ชุด หรือ3ชุด

7.   มีวงจรรับสัญญาณอินเตอร์รัพต์ได้ไม่ต่ำกว่า6ชนิด

8.   สามารถต่อขยายหน่วยความจำภายนอกได้สูงสุด 64 กิโลไบต์

9.   มีวงจรสื่อสาร 2 ทางเต็มอัตรา (full duplex) และมีคำสั่งที่ใช้ภาษาแอสเซมบลี

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

 ประวัติภาษาแอสแซมบลี้

 

ภาษาแอสแซมบลี้ เป็นภาษาที่ใช้สัญลักษณ์ในการสื่อความหมาย ภาษาแอสแซมบลีมีลักษณะคำสั่งที่ขึ้นกับเครื่อง คอมพิวเตอร์ที่ใช้งานและมีการแปลคำสั่งให้เป็นภาษาเครื่อง นอกจากภาษาเครื่อง  และภาษาแอสแซมบลีแล้ว ยังมีภาษาระดับสูง เช่น Basic Cobol FORTRANซึ่งเป็นภาษา ที่มีคำสั่งใกล้เคียงกับภาษาอังกฤษมาก ทำให้ผู้เขียนโปรแกรม สามารถเขียนโปรแกรมได้สะดวกและรวดเร็วแต่ว่า  โปรแกรมที่เขียนด้วยภาษาระดับสูงต้องใช้เนื้อที่เก็บในหน่วยความจำเป็นจำนวนมากอีกทั้งทำงานได้ช้ากว่า ภาษาแอสแซมบลีดังนั้นภาษาระดับสูงจึงไม่นิยมนำมาประยุกต์ใช้กับการทำงาน ที่ระบบการควบคุม ที่มีความสำคัญมาก ภ าษาแอสแซมบลี  เหมาะกับโปรแกรมที่ใช้เนื้อที่ในหน่วยความจำไม่มากนัก ทั้งทำงานได้รวดเร็วและ ในการควบคุม การทำงานของเครื่องคอมพิวเตอร์                         ได้โดยตรง
คำสั่งปฏิบัติการของภาษาแอสแซมบลีแบ่งออกเป็น4ชนิดคือ

- Machine Instruction เป็นคำสั่งที่ทำให้เกิดการปฏิบัติการ (Execution) ชุดของคำสั่งอยู่ใน ; Assembler'instruction set
- Assembler instruction เป็นคำสั่งที่บอกแอสแซมเบอร์ให้ทำการระหว่างการแอสแซมบลี
- Macro instruction เป็นคำสั่งที่บอกแอสเซมเบอร์ให้ดำเนินการกับชุดของคำสั่งที่ได้บอก ไว้ก่อนแล้ว ซึ่งจากชุดของคำสั่ง แอสเซมเบลอร์จะผลิตชุดของคำสั่ง ซึ่งต่อไปจะดำเนินการ เหมือนหนึ่งว่าชุด ของคำสั่งนี้เป็นส่วนหนึ่งของ Source program แต่เริ่มแรก
- Pseudo instruction เป็นคำสั่งที่บอกให้แอสเซมเบลอร์รู้ว่า ควรปฏิบัติการ เช่นไรกับข้อมูล
                   การBranch อย่างมีข้อแม้ แมคโคร และ listing ซึ่งปกติแล้วคำสั่งเหล่านี้จะไม่ผลิตคำสั่งภาษาเครื่องให้
การพัฒนางานทางด้านไมโครคอนโทรลเลอร์ด้วยภาษา Assembly นั้น ถือว่ายังเป็นที่นิยมอยู่มากในบ้านเรา เรียกได้ว่าเป็นส่วนใหญ่เลย ในขณะที่ต่างประเทศนั้น ภาษา Assembly จะนิยมรองลงมาจากภาษา C ที่ใช้กันเป็นอันดับหนึ่ง อาจจะเป็นเพราะว่าความคุ้นเคย หรือเพราะความตรงไปตรงมาของภาษา Assembly ที่เป็นจุดเด่นอย่างหนึ่งก็ได้ ไม่ว่าจะอย่างไรก็ตาม การเข้าถึงภาษา Assembly ได้นั้น ถือว่าเป็นการเรียนรู้และเข้าใจได้ลึกซึ้งที่สุด และถ้ารู้จักนำมาประยุกต์ใช้งานให้เหมาะสมแล้ว ก็จะเป็นประโยชน์ต่อการพัฒนาเทคโนโลยีต่าง ๆ เป็นอย่างมาก สำหรับชิพตระกูล MCS-51 นั้นมา

คำสั่งภาษาแอสแซมบลี ถูกแบ่งออกเป็น 4 เขต ดังนี้
1. Label Operation code
2. Operandor Comment Field
3. Field Or Mnemonic Address
4. Field Field


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

ตัวอย่าง เช่น
GETCOUNT : MOV CX,DX ;Initialize count

เลเบลฟิลด์ (Label Field)

                   เลเบลฟิลด์แรกในคำสั่งภาษาแอสแซมบลี เป็นการให้ชื่อกับตำแหน่งที่อยู่ของคำสั่ง ภาษาแอสแซมบลีคำสั่งนั้น ซึ่งทำให้คำสั่งอื่น ๆ ในโปรแกรมสามารถอ้างถึงคำสั่งที่มีเลเบลนั้น โดยใช้ชื่อของเลเบลได้แทนที่จะใช้ตำแหน่งที่อยู่ของคำสั่ง ทุกคำสั่งในภาษาแอสแซมบลีสามารถ ใช้เลเบลได้ นิยมใช้กันเลเบลจะเป็น Target ของคำสั่ง jump หรือ Procedure call เลเบลหนึ่งประกอบด้วยตัวอักษรได้ถึง 31 ตัวอักษร ซึ่งอาจเป็น ตัวอักษร A ถึง Z ตัวเลข 0 ถึง 9 สัญลักษณ์พิเศษ ?@._$ ตัวแรกในเลเบลจะต้องไม่ใช่ตัวเลข อีกทั้งต้องไม่มีช่องว่างในเลเบล ถ้าต้องการทำให้ดูเหมือน มีช่องว่างให้ใช้เครื่องหมายขีดเส้นใต้ (_) แทนนอกจากนั้น อักษรต่อไปนี้คือ AH,AL,AX,BH, BX,CH.CL,DH,DL,DI,DS,ES,SI, และ SP เป็นอักษรแทนรีจิสเตอร์ จะนำไปใช้เป็นเลเบลไม่ได้

คำสั่งที่เป็น Mnemonic ก็จะนำไปใช้เป็นเลเบลไม่ได้
GET_COUNT : MOV CX,DI ;initialize code JMP GET_COUNT

                  ตัวอย่างข้างต้นนี้ คำสั่ง JMP ทำให้การประมวลผลข้อมูลแบบเรียงลำดับคำสั่งเปลี่ยนไป เพราะเป็นคำสั่งควบคุมที่ทำให้คอมพิวเตอร์ไปทำงานที่คำสั่งที่มีเลเบล GET_COUNT ไมโครโปรเซสเซอร์ 8088 ทำให้เกิดการย้ายการทำงาน ได้ใน 2 วิธีคือ ถ้าคำสั่งที่มีเลเบลอยู่ใน Code segment เดียวกันกับคำสั่งควบคุมให้ย้ายที่การทำงาน 8088 จะโหลดออฟเซตของเลเบลใส่ลงใน Instruction pointer (IP) โดยที่ ค่าของ Code segment (CS) รีจิสเตอร์ไม่เปลี่ยนแปลงถ้าคำสั่งที่มีเลเบลอยู่ต่าง Code segment กับคำสั่งควบคุม 8088 จะโหลดออฟเซตของเลเบลใส่ใน IP และค่าของเซกเมนต์ใน CS ถ้าเป็นการใช้วิธีที่ 1 เลเบลจะต้องตามด้วยโคลอน (: ) แต่ถ้าเป็นการใช้วิธีที่ 2 ก็ไม่ต้องมีเครื่องหมายโคลอน

                 คำสั่งการทำงาน (Mnemonic Field) หน้าที่หลักของแอสแซมเบลอร์คือการแปลคำสั่งการทำงาน ให้เป็นคำสั่งที่เครื่อง คอมพิวเตอร์เข้าใจได้ แอสแซมเบลอร์ทำการแปลโดยใช้ตารางซึ่งจะแปลคำสั่งที่เป็น Mnemonic ให้เป็นชุดของเลขฐานสองซึ่ง เครื่องคอมพิวเตอร์สามารถทำงานได้ แอสแซมเบลอร์ทำงานมากกว่า การแปลคำสั่งของรหัสปฏิบัติการ มันต้องพิจารณาได้ด้วยว่าคำสั่งปฏิบัติการนั้นต้องการ ออปเปอเรนต์กี่ตัว และชนิดของออปเปอเรนต์ คำสั่งบางคำสั่งไม่ต้องการออกเปอเรนต์ บางคำสั่งก็ต้องการออปเปอเรนด์เพียงตัวเดียว และบางครั้งก็ต้องการ ออปเปอเรนต์ ถึงสองตัว ออปเปอแรนด์ฟิลด์ (Operand field) ออปเปอแรนด์ฟิลด์ บอกไมโครโปรเซสเซอร์ 8088 ว่าสามารถจะไปนำข้อมูลที่จะมา ปฏิบัติการได้จากไหน ตัวอย่งเช่น MOV CX,DX ออปเปอแรนด์ฟิลด์ CX,DX บอกไมโครโปรเซสเซอร์ว่า ให้ลอกข้อความที่อยู่ในรีจิสเตอร์ DX มาไว้ในรีจิสเตอร์ CX คำสั่งต้องการออปเปอแรนด์ 2 ตัวต้องใช้เครื่องหมาย , คั่นระหว่างออปเปอแรนด์ทั้งสองนั้น ออปเปอแรนด์ตัวแรกเป็น Destination operand และออปเปอแรนด์ตัวที่สองเป็น Source operand Source operand อ้างถึงค่าที่จะบวก ลบ เปรียบเทียบผลลัพธ์เก็บใน Destination operand

การใช้ DEBUG เขียนโปรแกรม
                   คำสั่ง D (Dump) คำสั่ง F (fill) คำสั่ง A (Assemble) คำสั่ง G (G) คำสั่ง U (Unassemble) คำสั่ง R (Registers) คำสั่ง N (Name) และคำสั่ง W (Write) คำสั่ง Q (Quit) DEBUG เป็นโปรแกรม ซึ่งใช้ในการตรวจสอบหาข้อผิดพลาดของโปรแกรมแอสแซมบลี นอกจากนี้ยังสามารถใช้ DEBUG เขียนโปรแกรมภาษาแอสแซมบลี สั้น ๆ เพราะว่ามี Overhead น้อย ในส่วนนี้จะแสดงคำสั่งของ DEBUG และผลที่แสดงบนจอภาพ และใช้ DEBUG เขียนโปรแกรมสั้น ๆ เริ่มด้วยเมื่อผู้ใช้โหลด DOS เรียบร้อยแล้ว จะเห็น Prompt A> บนจอภาพ ในการใช้ DEBUG ให้พิมพ์ debug ตามด้วย ก็จะได้ prompt ของ debug คือ A>debug พิมพ์บรรทัดนี้ - debug's prompt charactor

คำสั่ง D (Dump)
- d100 พิมพ์บรรทัดนี้
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………

                 ดังที่ปรากฏในจอภาพ คือค่าที่อยู่ในคอมพิวเตอร์ ค่าที่แสดงเป็นเลขฐานสิบหก โดยที่เลขฐานสิบหก 2 ตัวคือ 1 ไบต์ ค่าของเลขฐานสิบหก 2 ตัว มีค่าอยู่ระหว่าง 00h ถึง FFh หรือค่า 0 ถึง 255 ของเลขฐานสิบนั่นเอง บนจอภาพจะบอก address คือตำแหน่งที่อยู่ในหน่วยความจำและ Content คือค่าที่อยู่ในตำแหน่งนั้น ๆ ตำแหน่งที่อยู่ในหน่วยความจำ คือค่าในคอลัมน์แรก เช่น 5BA5:0100 จะเห็นว่าตำแหน่งที่อยู่ประกอบด้วยสองส่วน คั่นด้วยเครื่องหมาย : ค่าทางซ้ายมือคือ 5BA5 ซึ่งในเครื่องที่คุณใช้อาจได้เป็นค่าอื่น หมายถึงค่าของเซ็กเมนต์ และค่าทางขวามือ คือ ออฟเซตค่าที่อยู่ในหน่วยความจำ อยู่ในส่วนถัดมา โดยที่แต่ละบรรทัดจะมี 16 ค่า หรือ 16 ไบต์ เรียงลำดับดังนี้
0 1 2 3 4 5 6 7 8 9 A B C D E F
5BA5 : 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
5BA5 : 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………


ซึ่งก็คือค่าที่เรียงอยู่ในหน่วยความจำดังรูป
: 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ……………………
ส่วนของหน่วยความจำ
:0100 00
: 0101 00
: 0102 00
: 0103 00
: 0104 00
: 0105 00
: 0106 00
:010E 00
:010F 00
การหาค่า absolute address ทำโดยการ Shift ค่าของ เซกเมนต์ 4 บิตทางซ้ายแล้วบวกด้วยค่าของออฟเซต
เซกเมนต์ เ 05BA50
ออฟเซต เ __0100
Ablolute address 05BA50

รูปแบบการเขียนโปรแกรม

ชนิดของคำสั่งในภาษาแอสแซมบลี

(Type  of  Assembly  Instruction)

 

คำสั่งภาษาแอสแซมบลีแบ่งตามผลของคำสั่งต่อการปฏิบัติงาน

- คำสั่งเครื่อง  (Machine  Instruction)  เป็นคำสั่งอยู่ในรูปตัวอักษร  ที่เทียบได้กับคำสั่งในภาษาเครื่อง  คำสั่งต่อคำสั่ง  คำสั่งนี้เมื่อผ่านการแอสแซมบลีเรียบร้อยแล้ว  จะเป็นคำสั่งที่เครื่อง  Execute  จริง ๆ

- คำสั่งแอสแซมเบลอร์  (Assembler  Instruction)  เป็นคำสั่งบอกให้แอสแซมเบลอร์รู้ในขณะแอสแซมบลี  ได้แก่  คำสั่ง  DS(Define  Storage)  คำสั่ง  DC (Define  Constant)  คำสั่ง  END  เป็นต้น  โดยปกติแอสแซมเบลอร์จะไม่แปลคำสั่งเหล่านี้  ยกเว้น  DC

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

คำสั่งภาษาแอสแซมเบลอร์แบ่งตามหน้าที่

-     คำสั่งเคลื่อนย้ายข้อมูล  (  Information  Move)  คำสั่งชนิดนี้จะย้ายข้อมูลจากที่หนึ่งไปยังอีกที่หนึ่งในระบบคอมพิวเตอร์  เช่น  MVC  จะย้ายข้อมูลที่อยู่ในหน่วยความจำของระบบจากที่หนึ่งไปยังอีกที่หนึ่ง  หรือ  LR  จะย้ายข้อมูลจากรีจิสเตอร์ตัวหนึ่งไปยังรีจิสเตอร์อีกตัวหนึ่ง

-     คำสั่งคำนวณ  (Arithmetic  Instriction)  คำสั่งนี้จะทำการคำนวณ  ทางคณิตศาสตร์และLigic  เช่น  Add,  Multiply,  AND,  OR,  NOR  เป็นต้น  บางทีก็เปลี่ยนข้อมูลจากรูปหนึ่งไปอีกรูปหนึ่ง

-   คำสั่งเปรียบเทียบ  ( Comparison  Instruction)  เป็นคำสั่งที่เปรียบเทียบข้อมูล  2  ตัว  โดยไม่เปลี่ยนแปลงข้อมูลเดิม  เช่น  ต้องการเปรียบเทียบข้อมูลในรีจิสเตอร์หมายเลข  3  กับข้อมูลที่อยู่ในรีจิสเตอร์หมายเลข  10  ว่ามากกว่า  น้อยกว่าหรือ เท่ากัน  โดยใช้คำสั่ง  CR  เป็นต้น

-   คำสั่งเปลี่ยนทิศทางการทำงาน  (Transfer  of  control  Instruction)  เป็นคำสั่งที่สั่งให้ข้ามไปทำคำสั่งอื่น  ทั้งชนิดมีเงื่อนไขและไม่มีเงื่อนไข  ถ้ามีเงื่อนไข  ต้องตรวจสอบเงื่อนไขจาก  CC  (Condition  Code)  เสียก่อน  คำสั่งชนิดนี้ได้แก่  BC  (Branch  on  Condition)   BCT  (Branch  on  Count)  เป็นต้น

-   คำสั่งอินพุทและเอาท์พุท  (Input/Output  Instruction)  เป็นคำสั่งที่ควบคุมการทำงานของอินพุทและเอาท์พุท  และทิศทางการไหลของข้อมูลที่จะเข้าหรือออกจากระบบคอมพิวเตอร์ 

 

 

Advertising Zone    Close

Online: 1 Visits: 35,869 Today: 7 PageView/Month: 74

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