สถาปัตยกรรมและโครงสร้างของไมโครคอนโทรลเลอร์ตระกูล 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) เป็นคำสั่งที่ควบคุมการทำงานของอินพุทและเอาท์พุท และทิศทางการไหลของข้อมูลที่จะเข้าหรือออกจากระบบคอมพิวเตอร์
|