Lab 1 : การใช งานภาษาแอสเซมบล ี้กับ...
Transcript of Lab 1 : การใช งานภาษาแอสเซมบล ี้กับ...
-
By Panyayot Chaikan Page 1 of 13 Lab3_HW_2_2553
Lab 1 : การใชงานภาษาแอสเซมบลีก้ับซีพียู AVR 1.1 แนะนําซีพียู AVR
ไมโครคอนโทรลเลอร เปนหนวยประมวลผลขนาดเล็ก ซ่ึงรวมเอาความสามารถของไมโครโพรเซสเซอรกับอุปกรณเชือ่มตอภายนอก เชนหนวยความจํา อุปกรณอินพุตเอาตพุต วงจรกําเนิดสัญญาณนาฬิกา เขามารวมอยูภายในไอซีชิพเพียงตัวเดยีว สงผลใหระบบควบคุมซึ่งใชไมโครคอนโทรลเลอรเปนหนวยประมวลผลมีขนาดของวงจรควบคมุเล็กและสะดวกตอการใชงาน แมวาระบบไมโครคอนโทรลเลอรจะมีหลายๆ อุปกรณอยูภายในไอซีชิพตัวเดยีว แตก็มีความสามารถจาํกัด เมื่อเทียบกับระบบซึ่งใชไมโครโพรเซสเซอร ยกตัวอยางเชน หนวยความจํา จะมใีหใชเพียงไมมากนกั ดังนัน้ระบบไมโครคอนโทรลเลอรจะเหมาะสมสาํหรับการควบคุมงานที่ไมซับซอนและตองการความสามารถในการประมวลผลที่ไมสูงมากนกั ยกตัวอยางเชนในระบบ Embedded system หรือระบบสมองกลฝงตัว เชนเครื่องซักผา เตาอบไมโครเวฟ เครื่องปรับอากาศ เปนตน สถาปตยกรรมของไมโครคอนโทรลเลอรที่ใชงานอยูในปจจุบันมใีหเลือกใชงานมากมายหลายตวั ยกตวัอยางเชน
- MCS-51 (8-bit) ออกแบบโดย intel - MCS-96 (16-bit) ออกแบบโดย intel - PIC ออกแบบโดย Microchip Technology - AVR ออกแบบโดย Atmel - ARM ออกแบบโดย ARM Holdings - 68HC11 ออกแบบโดย Motorola - Rabbit 2000 ออกแบบโดย Rabbit Semiconductor
ในอดีต ไมโครคอนโทรลเลอรที่นิยมใชงานกันคือตระกูล MCS-51 แตในปจจุบนัความตองการความสามารถในการประมวลผลมีเพิ่มขึ้น ทําใหมีสถาปตยกรรมอื่นๆ ที่มีประสิทธิภาพสูงกวาเริ่มไดรับความนิยมในการใชงานขึ้นมาแทนในแลบนี้จะสอนใหนักศึกษาไดเรียนรูสถาปตยกรรม AVR เนื่องจากมีประสิทธิภาพที่สูง และมรีาคาถูกกวาสถาปตยกรรมอื่นในราคาที่ใกลเคียงกัน นอกจากนี้ยังมขีอดีคือมี ฟรีแวรหลายตวัใหใชงานสําหรับพัฒนาระบบไดทั้งภาษาระดับต่ําคือภาษาแอสเซมบลี้และภาษาระดบัสูงเชน ภาษาซี เปนตน
-
By Panyayot Chaikan Page 2 of 13 Lab3_HW_2_2553 สถาปตยกรรมของ AVR แบงออกเปน 2 ตระกูลคือ
- 8-bit AVR - 32-bit AVR ในแลบนีจ้ะกลาวถึงสถาปตยกรรมของ AVR ขนาด 8 บิตเทานั้น โดยในสถาปตยกรรม AVR
ออกแบบโดย ATMEL เมื่อป 1996 เปนซีพียูแบบ RISC (Reduced Instruction Set Computer) มีสถาปตยกรรมการตอหนวยความจําแบบ Harvard ซ่ึงแยกหนวยความจําโปรแกรมและหนวยความจําขอมูลออกจากกนัโดยเด็ดขาด ดังแสดงในรูปที ่ 1.1 โดยใชหนวยความจําแบบ Flash สําหรับเปนหนวยความจําโปรแกรม และใชหนวยความจําแบบ SRAM สําหรับหนวยความจําขอมูล และนอกจากนี้ยังมหีนวยความจําแบบ EEPROM ซ่ึงสามารถเก็บขอมูลเอาไวไดโดยไมจําเปนตองมีไฟเลีย้งอีกดวย
รูปที่ 1.1 เปรียบเทียบการจดัการหนวยความจําของสถาปตยกรรมแบบ Von-Neumann และ Harvard จากรูปที่ 1.1 จะเห็นวาโพรเซสเซอรที่ใชสถาปตยกรรมแบบ Harvard จะแยกหนวยความจําสําหรับ
เก็บขอมูลออกจากโปรแกรมอยางชัดเจน สถาปตยกรรม AVR และ MCS-51 จะใชรูปแบบนี้ในการจัดการหนวยความจํา สวนสถาปตยกรรมแบบ Von-neumann การตัดสินใจวาจะเก็บโปรแกรมหรือขอมูลจะแบงเก็บอยางไรจะทําไดอยางอิสระ โดยขึน้อยูกับโปรแกรมเมอร หรืออาจจะเปนระบบปฏิบัติการเปนผูดําเนินการให
ลักษณะเดนของสถาปตยกรรม AVR คือ คําสั่งสวนใหญสามารถทํางานไดเสร็จภายใน 1 clock cycle ตัวซีพียู AVR ขนาด 8 บิตจะแบงออกเปนประเภทการใชงานได 5 กลุม ไดแก
- tinyAVR เปนซีพียูในรุนเล็ก ซ่ึงตองการความเล็กกะทัดรัดของวงจร โดยเหมาะกับระบบควบคุมขนาดเล็กๆ ที่ตองการหนวยความจําและวงจรสนับสนุนไมมากนัก ซีพียใูนรุนนี้จะมีราคาถูกกวากลุมอื่น
- megaAVR จะมีช่ืออีกอยางวา ATmega โดยมีวงจรสนับสนุนภายในเพิม่เติมตลอดจนเพิ่มขนาดของหนวยความจําใหใชงานมากกวาตระกลู Tiny เหมาะกับงานควบคมุทั่วๆ ไป
-
By Panyayot Chaikan Page 3 of 13 Lab3_HW_2_2553
- XMEGA เพิ่มความละเอียดของวงจร A/D จากปกติมีความละเอียด 10 บิตในรุนเล็กกวาเปน 12 บิต และวงจร DMA controller ซ่ึงชวยลดภาระของซีพียูในการควบคุมการรับสงขอมูลระหวางอุปกรณ I/O กบัหนวยความจํา
- FPSLIC (AVR core with FPGA) สําหรับงานที่ตองการควบคุมทีต่องการความยืดหยุนในขั้นตอนการออกแบบและพฒันา โดยผูออกแบบสามารถออกแบบวงจรในระดับฮารดแวรเพิ่ม เติมดวยภาษาบรรยายฮารดแวร (HDL: Hardware Description Language) เชน ภาษา VHDL หรือภาษา Verilog และใหวงจรที่ออกแบบทํางานรวมกับซีพียู AVR core
- Application Specific AVR เปนซีพียูที่ออกแบบมาโดยเพิม่วงจรควบคุมเฉพาะดานเขาไปซึ่งไมพบในซีพียกูลุมอื่นๆ เชนวงจร USB controller หรือวงจร CAN bus เปนตน
ซีพียู AVR มีใหเลือกใชงานหลายเบอร แตละเบอรจะมีขนาด ราคา ความสามารถ และขนาด
หนวยความจําตลอดจนถึงวงจรสนับสนุนภายในทีแ่ตกตางกันออกไป ในหวัขอแลบ ป 3 เทอม 2 นี้ จะเลือกใชซีพียูรุน ATmega328P ใหนกัศึกษาใชเปนหลัก ซ่ึงมีคุณสมบตัิดังนี ้
- หนวยความจําโปรแกรมแบบ FLASH ขนาด 32 กิโลไบต - หนวยความจําขอมูลแบบ SRAM ขนาด 2 กิโลไบต - หนวยความจําขอมูลแบบ EEPROM ขนาด 1 กิโลไบต - สนับสนุนการเชื่อมตอแบบ I2C bus - พอรตอินพุตเอาตพุตจํานวน 23 บิต - วงจรสื่อสารอนุกรม - วงจรนับ/จับเวลาขนาด 8 บิต จํานวน 2 ตัว และขนาด 16 บิตจํานวน 1 ตัว - สนับสนุนชองสัญญาณสําหรับสราง Pulse Width Modulation (PWM) จํานวน 6 ชองสัญญาณ - วงจรแปลงอนาลอกเปนดิจิตอลขนาด 10 บิตในตวัจํานวน 8 ชอง - ทํางานไดตั้งแตยานแรงดัน 1.8-5.5 Volts - ความถี่ใชงานสูงสุด 20 MHz
รูปที่ 1.2 ซีพียู ATMEGA328P แบบตัวถัง PDIP ขนาด 28 ขา
-
By Panyayot Chaikan Page 4 of 13 Lab3_HW_2_2553
รูปที่ 1.3 โครงสรางภาษาแอสเซมบลี้ของสถาปตยกรรม AVR 1.2 แนะนําภาษาแอสเซมบลี้ของ AVR
โครงสรางภาษาแอสเซมบลี้ของ AVR แสดงใหเห็นดังรูปที่ 1.1 ซ่ึงจะเห็นวามีความแตกตางจากภาษาแอสเซมบลี้ของสถาปตยกรรมอื่นๆ ไมมากนัก ในการเขียนโปรแกรมภาษาแอสเซมบลี้ เราจะตองทําการใชชุดคําสั่งของซีพียูในการเขาถึงหนวยความจําและขอมูลในรีจิสเตอรโดยตรง สงผลใหภาษาแอสเซมบลี้มีความยุงยากในการใชงานมากกวาระดับสงูทั่วไป อยางไรก็ดีภาษาแอสเซมบลี้มีขอดีกวาภาษาอื่นตรงที่ขนาดของโปรแกรมมีขนาดเล็กมาก และมีความเร็วในการทํางานที่สูงกวาภาษาอื่นๆ การเรียนรูภาษาแอสซมบลี้ ชวยใหนกัศึกษาสามารถเขาใจการทํางานภายในของไมโครโพรเซสเซอรไดเปนอยางดี การเขาใจภาษาแอสเซมบลี้จะชวยใหนกัศึกษาสามารถที่จะดีบกั (Debug) เพือ่ทําการตรวจสอบการทํางานของโปรแกรมในกรณีที่โปรแกรมที่เขียนขึ้นดวยภาษาระดับสูงมปีญหาได สําหรับรายละเอยีดเชิงลึกในการเขียนโปรแกรมภาษาแอสเซมบลี้ ขอใหนกัศึกษาไดศึกษาจากเอกสาร AVR Assembler User Guide ในเอกสารแลบนี้จะทําการยกตวัอยางการเขียนภาษาแอสเซมบลี้อยางงายเพื่อเปนพืน้ฐานในการนาํซีพียูไปประยกุตใชงานระดบัสงูขึ้นในโอกาสตอไป
การเขียนโปรแกรมภาษาแอสเซมบลี้ จะตองทําการเขาถึงรีจิสเตอรของซีพียูโดยตรง ซีพียู AVR มีรีจิสเตอรใชงานทั่วไปจํานวน 32 ตัวคือ R0-R31 ในการเขียนโปรแกรม แนะนําใหนกัศึกษาใชงานรีจิสเตอรตั้งแต R16 เปนตนไป นอกจากนี้ รีจิสเตอร R26-R31 ยังสามารถนํามาทําเปนรีจิสเตอรขนาด 16 บิต ไดจํานวน 3 ตัวคือ รีจิสเตอร X, Y และ Z รูปที่ 1.4 และ 1.5 แสดงชุดคําสัง่ของสถาปตยกรรม AVR
สวน Data Segment ซึ่งเก็บอยูใน SRAM
สวน Data Segment ซึ่งเก็บอยูใน EEPROM
สวน Code Segment ซึ่งเก็บอยูใน Flash memory
label
สวนอธิบาย (Comment) จะอยูหลังเครื่องหมาย semicollon
-
By Panyayot Chaikan Page 5 of 13 Lab3_HW_2_2553
รูปที่ 1.4 ชุดคําสั่งของ AVR
-
By Panyayot Chaikan Page 6 of 13 Lab3_HW_2_2553
รูปที่ 1.5 ชุดคําสั่งของ AVR (ตอ)
-
By Panyayot Chaikan Page 7 of 13 Lab3_HW_2_2553 1.3 แนะนําซอฟตแวร AVRStudio
โปรแกรม AVRStudio เปนซอฟตแวรทีพ่ัฒนาโดย ATMEL ซ่ึงแจกจายใหใชงานไดฟรี ซ่ึงใชเปนสภาพแวดลอมในการพฒันาโปรแกรมดวยภาษาแอสเซมบลี้หรือภาษาซีก็ได ในแลบนี้จะยกตัวอยางการใชซอฟตแวร AVRStudio ในการพัฒนาโปรแกรมภาษาแอสเซมบลี้ เรียกใชงานโปรแกรมจาก Start menu->All Programs->ATmel AVR Tools->AVR Studio 4 โปรแกรมจะแสดงหนาตาง ดังรูป ใหเลือกกดปุม New Project เลือกสรางโปรเจกตดวยภาษาแอสเซมบลี้ ดังรูป โดยปอนชื่อโปรเจกตลงไป
-
By Panyayot Chaikan Page 8 of 13 Lab3_HW_2_2553 เลือกซีพียูรุน ATmega328P และสภาพแวดลอม AVR Simulator2 จากนั้นกดปุม Finish จะขึ้นสภาพแวดลอมการพฒันาโปรแกรมดังรูป
-
By Panyayot Chaikan Page 9 of 13 Lab3_HW_2_2553 1.4 แนะนําซอฟตแวรชุด Proteus
เปนซอฟตแวรสําหรับจําลองการทํางานของวงจรไฟฟา ซ่ึงสามารถจําลองการทํางานของวงจรไดตั้งแตวงจรอนาลอก วงจรดจิิตอลตลอดจนถึงไมโครโพรเซสเซอรและไมโครคอนโทรลเลอร โดยผูทดลองสามารถนําไฟลนามสกุล .HEX ซ่ึงไดจากการแอสเซมเบลอรโปรแกรมที่เขียนขึ้นดวยภาษาแอสเซมบลี้มาทําการจําลองบนสภาพแวดลอมการเชื่อมตอไมโครคอนโทรลเลอรกับอุปกรณภายนอกเสมือนจรงิได ตัวชุดโปรแกรม Proteus ประกอบไปดวยซอฟตแวรยอยหลายตัว ในแลบนี้จะใชโปรแกรมยอยช่ือ ISIS ในการจําลองการทํางานของไมโครคอนโทรลเลอร AVR
รูปที่ 1.6 โปรแกรม ISIS 7.0 สําหรับจําลองการทํางานของไมโครคอนโทรลเลอร
1.5 การทดลอง 1.5.1 การออกแบบวงจรอานคาจากสวิทชและแสดงผลออกทาง 7-segment LED
ใหนกัศึกษาเปดโปรแกรม ISIS คลิกเลือก New Design เลือกขนาดของกระดาษเปน Landscape A4ทําการวาดวงจรเพื่อทําการอานคาจากสวิทชดังรูปที่ 1.7 กดปุม จากนั้นดับเบิลคลิกที่ เพื่อเลือกใชอุปกรณจากไลบรารีตอไปนี้
Category Sub-Category Device คําอธิบาย Microprocessor ICs AVR Family ATMEGA328P ไมโครคอนโทรลเลอร AVR Optoelectronics 7-Segment Displays 7-SEG-COM-CAT ชนิด Common Cathode Switches & Relays Switches DIPSW-4 Dip Switch 4 ตัวใน 1 package Resistors Generic RES ตัวตานทาน
ปุม Play เพื่อเริ่มการจําลองการทํางาน
-
By Panyayot Chaikan Page 10 of 13 Lab3_HW_2_2553
รูปที่ 1.7 วงจรอานคาจากสวทิชแสดงผลทาง 7-segment LED
รายการ ลายเซ็น วัน-เดือน-ป
#checkpoint1 วาดวงจรดังรูปที ่1.7 โดยใชโปรแกรม ISIS7.0 1.5.2 การเขียนโปรแกรมภาษาแอสเซมบลี้เพื่ออานคาจากสวิทชแสดงผลทาง 7-segment LED
เขียนโปรแกรมภาษาแอสเซมบลี้เพื่อใชควบคุมไมโครคอนโทรลเลอรของวงจรในรปูที่ 1.7 โดยตวัโปรแกรมแสดงใหเห็นในรปูที่ 1.8 การทํางานของตัวโปรแกรม จะทาํการอานคาจากดิปสวิทชขนาด 4 บิตเขามาทางพอรต C บิตที่ 0-3 และทําการแปลงคาไบนารีที่ได ซ่ึงมีคา 0-15 ไปแสดงผลทางแอลอีดี 7 เซกเมนต คา 0-F ใหนักศึกษาเขียนโปรแกรมภาษาแอสเซมบลี้ดวย AVR Studio จากนั้นใชคําสั่ง Build เพื่อแปลงภาษาแอสเซมบลี้ใหเปนภาษาเครื่องของ AVR ซ่ึงจะไดไฟลเอาตพุตนามสกุล .HEX
-
By Panyayot Chaikan Page 11 of 13 Lab3_HW_2_2553
รูปที่ 1.8 โปรแกรมภาษาแอสเซมบลี้สําหรับอานคาจากสวิทชแสดงผลทาง 7-segment LED
ในการใชซอฟตแวร ISIS ทําการจําลองการทํางานของโปรแกรมภาษาแอสเซมบลี้ที่เขียนขึ้นนั้นสามารถทําไดโดยคลิกขวาทีต่ัวไมโครคอนโทรลเลอร เลือก popup menu ช่ือ Edit Properties จะขึ้น ไดอะลอกบอกซดังรูปที่ 1.9 ซ่ึงผูทดลองตองระบุช่ือไฟลนามสกุล .HEX ที่ไมโครคอนโทรลเลอรจะตองโหลดขึ้นมาจําลองการทํางาน และใหส่ังทาํการดิสเอเบิลการรีเซ็ทซีพียูจากภายนอกดวย จากนัน้กดปุม เพื่อเร่ิมจําลองการทํางานของซีพียู
-
By Panyayot Chaikan Page 12 of 13 Lab3_HW_2_2553
รูปที่ 1.8 การเซ็ทคาควบคุมไมโครคอนโทรลเลอรในโปรแกรม ISIS
รายการ ลายเซ็น วัน-เดือน-ป #checkpoint2 ทดสอบจําลองการทํางานของโปรแกรมภาษาแอสเซมบลี้กับโปรแกรม ISIS7.0
1.5.3 โจทยปญหาการออกแบบวงจรและเขียนโปรแกรมภาษาแอสเซมบลี้
จงออกแบบวงจรไมโครคอนโทรลเลอร AVR สําหรับอานคาจากดิปสวทิช 4 ตัว และแสดงผลคาตัวเลขที่อานจากสวิทชออกสูแอลอีดี 7 เซกเมนต 2 หลัก โดยกําหนดใหคา 4 บิตที่อานจากสวิทชเปนตวัเลขจํานวนเต็มแบบมีเครื่องหมาย โดยการทํางานของโปรแกรมจะแสดงผลตามตารางที่ 1.1
ระบุช่ือไฟลนามสกุล .HEX
ดิสเอเบิลการรับสัญญาณรีเซ็ทจากภายนอก
เลือกวงจรกําเนิดสัญญาณนาฬิกาภายในซีพียู 8 MHz
-
By Panyayot Chaikan Page 13 of 13 Lab3_HW_2_2553
ตารางที่ 1.1 การแสดงผลของแอลอีดีเมื่อมอิีนพุตสภาวะตางๆ
อินพุตที่อานจากสวิทช คาที่แสดงผลบนแอลอีดี 7 เซกเมนตจํานวน 2 หลัก
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
รายการ ลายเซ็น วัน-เดือน-ป #checkpoint3 วงจรที่ออกแบบโดย ISIS7.0 #checkpoint4 ทดสอบโปรแกรมภาษาแอสเซมบลี้กับวงจรที่ออกแบบดวย โปรแกรม ISIS7.0
------------------------------