รายวิชา 9560206 ไมโครโปรเซสเซอร์ในงานอุตสาหกรรม รายวิชา 9560206 ไมโครโปรเซสเซอร์ในงานอุตสาหกรรม อ.โสภณ มหาเจริญ บทที่ 2 ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์
วัตถุประสงค์ 2.1 เพื่อให้ผู้เรียนเข้าใจความแตกต่างระหว่างไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ 2.2 เพื่อให้ผู้เรียนเรียนรู้ตัวแปรและการใช้ตัวแปร 2.3 เพื่อให้ผู้เรียนเรียนรู้หลักการเขียนโครงสร้างภาษา ซีได้
เนื้อหาประจำบท ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ หน่วยประมวลผลกลาง หน่วยความจำ ตัวแปรและการประกาศตัวแปร ค่าคงที่ใน Arduino นิพจน์และตัวดำเนินการของ Arduino การตรวจสอบเงื่อนไขในภาษาซีของ Arduino
ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ ไมโครโปรเซสเซอร์ที่ใช้อยู่เมื่ออดีตที่ผ่านมา และเป็นที่นิยมเช่น Z80 จะไม่มีหน่วยความจำ RAM,ROM และ Port อยู่ในตัวชิป ทำให้ต้องต่อหน่วยความจำโปรแกรมภายนอกเพิ่ม และต้องใช้ ICs ขยายพอร์ตเพิ่มเติม ข้อดีคือ สามารถเพิ่มหน่วยความจำได้ตลอด ส่วนไมโครคอนโทรลเลอร์จะมีวงจรพื้นฐานประกอบอยู่ภายในชิป เช่น หน่วยความจำ RAM, ROM และ I/O Port ดังนั้น ในระบบไมโครคอนโทรลเลอร์จึงมีขนาดเล็กกว่า และราคาต่ำกว่าระบบไมโครโปรเซสเซอร์
ไมโครโปรเซสเซอร์กับไมโครคอนโทรลเลอร์ External Memory ROM I/O port RAM I/O port Data bus/address bus Data bus/address bus หน่วยประมวลผลกลาง (CPU) ALU (CPU) Timer/counter ALU วงจรกำเนิด สัญญาณนาฬิกา วงจรกำเนิด สัญญาณนาฬิกา โครงสร้างพื้นฐานของไมโครโปรเซสเซอร์ โครงสร้างพื้นฐานของไมโครคอนโทรลเลอร์
หน่วยประมวลผลกลาง (CPU) ซีพียู ของไมโครคอนโทรลเลอร์ประกอบด้วยวงจรต่างๆ ได้แก่ วงจรควบคุมเวลาและระบบการทำงาน ซึ่งจะทำหน้าที่จัดการทั้งหมดของวงจรทั้งประมวลผลและควบคุมคำสั่งที่ได้รับ
หน่วยประมวลผลกลาง (CPU) การคำนวณทางคณิตศาสตร์และลอจิก (ALU: Arithmetic and Logic Unit) ทำหน้าที่คำนวณและประมวลผลทางคณิตศาสตร์และลอจิก วงจรถอดรหัสคำสั่ง(Instruction Decoder) ทำหน้าที่แปลงคำสั่งทั้งหมดให้เป็นภาษาเครื่อง (Machine Language) วงจรควบคุมการทำงานของ Counter (Program Counter) วงจรควบคุมสัญญาณนาฬิกา (Oscillator) ตลอดจนหน่วยความจำภายใน Register, adder, Subtraction, Buffer และอื่นๆ ที่ใช้ในการเก็บข้อมูลและการประมวลผลของซีพียู
หน่วยความจำ (Memory Unti) หน่วยความจำแบบแฟลช (Flash Program Memory) ปัจจุบันหน่วยความจำแบบแฟลช (flash ROM) ได้ถูกนำมาใช้กับไมโครคอนโทรลเลอร์หลายบริษัท หลายรุ่น โดยมีคุณสมบัติในการเขียนโปรแกรมและลงโปรแกรมได้มากกว่า 100,000 ครั้งซึ่งการทำงานจะมีความเร็วที่สูงมากเหมาะกับการพัฒนางานที่มีขนาดใหญ่
หน่วยความจำโปรแกรม (Data Memory RAM)
หน่วยความจำแบบอีอีพรอม (EEPROM Data Memory ) หน่วยความจำแบบ EEPROM (electrically erasable programmable read-only memory) เป็นหน่วยความจำที่สามารถเขียนและลบโปรแกรมด้วยกระแสไฟฟ้า ในหน่วยความจำถาวรของ PROM โดยภายในมีการพัฒนาให้ RAM ที่มีหน่วยความจำชั่วคราวให้เก็บข้อมูลได้ถาวรแบบหน่วยความจำ ROM โดยสามารถเขียนและลบโปรแกรมจำนวนหลายๆ ครั้งได้
ตัวแปรและการประกาศตัวแปร แบ่งออกเป็น 2 แบบคือ ตัวแปร (Variable) คือการใช้แทนตัวเลข ตัวอักษร หรือข้อความ เพื่อใช้นำมาประมวลผลตามคำสั่งต่างๆ ในโปรแกรม การประกาศตัวแปร (Declaration) คือ การบอกให้คอมไพเลอร์รู้ตัวแปรที่ใช้เป็นชนิดอะไร ชื่ออะไร และเก็บไว้ที่ส่วนไหนของหน่วยความจำ
ค่าคงที่ใน Arduino ในภาษาซีที่ใช้ใน Arduino มีการกำหนดค่าตัวแปรที่แบบค่าคงที่ (constant) ไว้จำนวนหนึ่งให้ผู้ใช้เรียกใช้เพื่ออำนวยความสะดวกและช่วยให้สามารถอ่านความหมายของคำสั่งในโปรแกรมได้ง่ายและตรงความหมายมากยิ่งขึ้น
FALSE เป็นค่าคงที่แบบ Boolean มีค่าเป็น ศูนย์ หรือ เท็จ หรือ FALSE ค่าคงที่ใน Arduino FALSE เป็นค่าคงที่แบบ Boolean มีค่าเป็น ศูนย์ หรือ เท็จ หรือ FALSE TRUE เป็นค่าคงที่แบบ Boolean มีค่าเป็นค่าใดๆ ที่ไม่ใช่ ศูนย์ ซึ่งอาจเป็น 1 หรือ -1 หรือ ค่าอื่นใดก็ได้ที่ไม่ใช่ศูนย์ จะถือเป็น จริง หรือ FALSE ทั้งหมด HIGH ใช้แทนสถานะโลจิก HIGH หรือ Logic “1” LOW ใช้แทนสถานะโลจิก LOW หรือ Logic “0” INPUT ใช้ในการกำหนดค่า สถานะ Input ให้กับฟังก์ชั่น pinMode( ) OUTPUT ใช้ในการกำหนดค่า สถานะ Output ให้กับฟังก์ชั่น pinMode( )
ค่าคงที่ใน Arduino นอกจากค่าคงที่ในส่วนที่มีการ จอง หรือ กำหนดไว้แล้วจาก Compiler ใน Arduino ยังมี ค่าคงที่ อีกแบบหนึ่ง ซึ่งก็คือ ค่าคงที่แบบตัวเลขจำนวนเต็มที่ถูกกำหนดจากผู้ใช้เอง ซึ่งได้แก่ค่าคงที่อยู่ในรูปของค่าตัวเลขจำนวนเต็มแบบต่างๆ แต่เนื่องจาก คุณสมบัติของตัวแปร สำหรับ ใช้ในการเก็บค่าตัวเลขจำนวนเต็มนั้นเช่น Signed, unsigned, short, long ดังนั้นในการกำหนดค่าตัวเลขให้กับ Compiler ก็ต้องมีการระบุให้ Compiler ทราบด้วยว่า ตัวเลขที่กำหนดไปนั้นเป็นค่าตัวเลขแบบใด โดย Arduino กำหนดให้ใช้ รหัสตัวอักษร ต่อท้ายตัวเลข เพื่อกำหนดค่า คุณสมบัติเฉพาะของตัวเลข ตามต้องการ โดยใช้รหัสตัวอักษร U และ L ต่อท้ายเช่น
ค่าคงที่ใน Arduino U หรือ u ใช้บอกให้ Compiler รู้ว่าตัวเลขที่กำหนดเป็นแบบ unsigned เช่น 33U L หรือ l ใช้บอกให้ Compiler รู้ว่าตัวเลขที่กำหนดเป็นแบบ Long เช่น 100000L UL หรือ ul ใช้บอกให้ Compiler รู้ว่าตัวเลขที่กำหนดเป็นแบบ unsigned long เช่น 32767ul หมายเหตุ อักษรตัวเล็กหรือตัวใหญ่ใช้เหมือนกัน
ตัวแปรและการประกาศตัวแปร ประเภทข้อมูล ขนาด ค่าที่เก็บได้ char , signed char 8 -128 ถึง +127 unsigned Signed char 0 ถึง 255 int ,signed int 16 -32768 ถึง +32767 unsigned int 0 ถึง 65535 short int ,signed short int unsigned short int long int 32 -2147483648 ถึง +2147483647 float 3.4E-38 ถึง 3.4E+38 double 64 1.7E-308 ถึง 1.7E+308
นิพจน์และตัวดำเนินการของ Arduino นิพจน์ (Expression) คือ ประโยคคำสั่ง ซึ่งถือเป็นองค์ประกอบพื้นฐานที่ใช้สำหรับประโยคแบบที่เป็นเชิงซ้อนของภาษาซี โดยนิพจน์ใช้สำหรับใช้ในการสั่งให้นำเอาจำนวน 2 จำนวน มากระทำกัน โดยมีเครื่องหมาย (Operator) เป็นตัวแสดงการกระทำกันของจำนวนทั้ง 2 โดยค่าของจำนวนทั้ง 2 นั้นอาจเป็น ค่าคงที่ ค่าตัวแปร หรือ ค่าข้อมูลใดๆ ก็ได้
นิพจน์และตัวดำเนินการของ Arduino ตัวดำเนินการ (Operator) คือ เครื่องหมายใดๆ ที่ใช้ทำหน้าที่แสดงการกระทำกันของจำนวน 2 จำนวน ซึ่งอาจเป็น การกระทำกันระหว่างข้อมูลกับข้อมูล ข้อมูลกับตัวแปร หรือ ตัวแปรกับตัวแปรก็ได้ โดยตัวดำเนินการ ที่ใช้ในภาษาซี จะมีอยู่ด้วยกันหลายประเภท เพื่อใช้ทำหน้าที่ที่แตกต่างกัน อันได้แก่
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมาย ทางคณิตศาสตร์ (Arithmetic operator) เครื่องหมาย การกำหนดค่า (Assignment operator) เครื่องหมาย แบบยูนารี (Unary operator) เครื่องหมาย เปรียบเทียบ (Comparative operator) เครื่องหมาย เชิงตรรกะ หรือ การกระทำทางโลจิก (Logical operator) เครื่องหมาย การกระทำแบบบิต (Bit operator) เครื่องหมาย การกำหนดเงื่อนไข (Conditional operator)
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายทางคณิตศาสตร์ ตัวดำเนินการ ความหมาย + ใช้แทนการ บวก - ใช้แทนการ ลบ * ใช้แทนการ คูณ / ใช้แทนการ หาร % ใช้แทนการ mod หรือการหารแบบเอาเศษที่ได้จากการหารมาใช้
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายสำหรับกำหนดค่า ตัวดำเนินการ ความหมาย = ใช้ในการกำหนดค่าให้ตัวแปร ++ การเพิ่มค่า -- การลดค่า += การเพิ่มค่าเท่ากับค่าทางขวา -= การลดค่าเท่ากับค่าทางขวา *= นำตัวเองคูณกับค่าทางขวา /= นำตัวเองหารกับค่าทางขวา %= นำตัวเอง mod กับค่าทางขวา
นิพจน์และตัวดำเนินการของ Arduino ยูนารี Unary ในภาษาซี สามารถกำหนดค่าใช้กับตัวแปรได้อีกแบบหนึ่ง ซึ่งเรียกว่าการให้ค่าแบบ ยูนารีโดยใช้เครื่องหมาย ++ หรือ – ในการกำหนดค่า เช่น X++ เป็นการเพิ่มค่าให้ x ซึ่งมีความหมายเหมือนกับ x = x+1 X-- เป็นการเพิ่มค่าให้ x ซึ่งมีความหมายเหมือนกับ x = x-1
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายที่ใช้ในการเปรียบเทียบ ตัวดำเนินการ ความหมาย == มีความหมาย หมายถึง เท่ากับ != มีความหมาย หมายถึง ไม่เท่ากับ < มีความหมาย หมายถึง น้อยกว่า > มีความหมาย หมายถึง มากกว่า <= มีความหมาย หมายถึง น้อยกว่าหรือเท่ากับ >= มีความหมาย หมายถึง มากกว่าหรือเท่ากับ
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายการกระทำทางลอจิก ตัวดำเนินการ ความหมาย && มีความหมาย หมายถึง Logical AND ซึ่งเปรียบได้กับ และ || มีความหมาย หมายถึง Logical OR ซึ่งเปรียบได้กับ หรือ ! มีความหมาย หมายถึง NOT ซึ่งเปรียบได้กับ ไม่
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายการกระทำแบบบิต ตัวดำเนินการ ความหมาย & มีความหมาย หมายถึง Bitwise AND ซึ่งเป็นการ AND ของบิต || มีความหมาย หมายถึง Bitwise OR ซึ่งเป็นการ OR ของบิต ^ มีความหมาย หมายถึง Bitwise XOR ซึ่งเป็นการ XOR ของบิต ~ มีความหมาย หมายถึง Bitwise NOT ซึ่งเป็นการ NOT ของบิต >> มีความหมาย หมายถึง Bit Shift Right ซึ่งเป็นการเลื่อนบิตไปทางขวา << มีความหมาย หมายถึง Bit Shift Left ซึ่งเป็นการเลื่อนบิตไปทางซ้าย
นิพจน์และตัวดำเนินการของ Arduino เครื่องหมายสัญลักษณ์อื่นๆ ที่ใช้ ; เครื่องหมาย เซมิโคลอน (;) ใช้สำหรับบอกการสิ้นสุดประโยคคำสั่ง { } เครื่องหมายวงเล็บปีกกา (Curly Braces) ใช้กำหนดขอบเขตของประโยคคำสั่งหรือ โปรแกรมย่อยต่างๆ // เครื่องหมายแสดงจุดเริ่มต้นของคำอธิบายในบรรทัดคำสั่ง (comment) โดยข้อความใดๆ ตามหลังเครื่องหมายนี้ ภายในบรรทัดเดียวกัน จะถือว่าเป็นคำอธิบาย และจะไม่ถูกนำไปแปลด้วย /* */ เครื่องหมายแสดงขอบเขตของการเขียนคำอธิบาย (Comment)
การตรวจสอบเงื่อนไขในภาษาซีของ Arduino เงื่อนไขที่ควรเรียนรู้ได้แก่ if, if…else, for, switch case, while, do…while, break, continue, goto, return
การตรวจสอบเงื่อนไขในภาษาซีของ Arduino โดยคำสั่งสำหรับตรวจสอบเงื่อนไขเหล่านี้ จะใช้ควบคู่กับ เครื่องหมาย เปรียบเทียบ และเครื่องหมายทางโลจิก สำหรับใช้กำหนดเงื่อนไขการทำงานให้กับคำสั่ง ซึ่งได้แก่ == มีความหมายว่า เท่ากับ != มีความหมายว่า ไม่เท่ากับ < มีความหมายว่า น้อยกว่า > มีความหมายว่า มากกว่า <= มีความหมายว่า น้อยกว่าหรือเท่ากับ >= มีความหมายว่า มากกว่าหรือเท่ากับ && มีความหมายว่า Logical AND ซึ่งเปรียบได้กับ และ || มีความหมายว่า Logical OR ซึ่งเปรียบได้กับ หรือ ! มีความหมายว่า Logical NOT ซึ่งเปรียบได้กับ ไม่
สรุปประจำบท ไมโครโปรเซสเซอร์เป็นวงจรที่มีโครงสร้างตรรกะ คล้ายกับหน่วยประมวลผลกลางของดิจิตอลคอมพิวเตอร์ ซึ่งโครงสร้างของมันจะประกอบด้วยไอซีแบบ LSI ทำหน้าที่จัดการข้อมูล ทำการคำนวณภายใต้การควบคุมของโปรแกรม เราอาจเรียกไมโครโปรเซสเซอร์อีกอย่างหนึ่งว่าเป็นการประมวลผลข้อมูล การประมวลผลข้อมูลเป็นหน้าที่หลักของไมโครโปรเซสเซอร์ ไมโครคอนโทรลเลอร์ (อังกฤษ: microcontroller มักย่อว่า µC, uC หรือ MCU) คือ อุปกรณ์ควบคุมขนาดเล็ก ซึ่งบรรจุความสามารถที่คล้ายคลึงกับระบบคอมพิวเตอร์ โดยในไมโครคอนโทรลเลอร์ได้รวมเอาซีพียู, หน่วยความจำ และพอร์ต ซึ่งเป็นส่วนประกอบหลักสำคัญของระบบคอมพิวเตอร์เข้าไว้ด้วยกัน โดยทำการบรรจุเข้าไว้ในตัวถังเดียวกัน
แบบฝึกหัด 1. จงระบุหน้าที่การทำงานของ เครื่องหมายดังต่อไปนี้ พร้อมระบุปัญหาหากขาดไป ; , { }, //, /* */ 2. จงยกสถานการณ์ตัวอย่างในการใช้ คำสั่งเงื่อนไขดังต่อไปนี้ให้สมบูรณ์ if, if…else, for, switch case, while, do…while 3. จงยกสถานการณ์ตัวอย่างในการใช้ ตัวดำเนินการทางคณิตศาสตร์ดังต่อไปนี้ให้สมบูรณ์พร้อมอธิบายลำดับความสำคัญ + - * / %