โครงสร้างไมโครคอนโทรลเลอร์
โครงสร้างไมโครคอนโทรลเลอร์ในตระกูล PIC นั้นมีหลายลักษณะ มีทั้งไอซีแบบ 8 ขา(DIP 8 Pins), 14 ขา(DIP 14 Pins), 18 ขา(DIP 18 Pins), 28 ขา(DIP 28 Pins), 40 ขา(DIP 40 Pins) เป็นต้น มีให้ลือกมากมายว่า จะใช้ขนาดหน่วยความจำโปรแกรมขนาดเท่าใดให้เหมาะสมกับงานที่ออกแบบรูปที่1.โครงสร้างของไมโครคอนโทรลเลอร์
หน่วยประมวลผลกลาง(Central Processing Unit : CPU) หน่วยประมวลผลกลางจะประกอบไปด้วยวงจรต่างๆหลากหลาย ที่จำเป็นสำหรับประมวลผล และการคำนวณ เช่น วงจรถอดรหัสคำสั่ง, วงจรควบคุมสัญญาณนาฬิกา, วงจรควบคุมการทำงาน, วงจรตั้งเวลา และรวมทั้งหน่วยคำนวณทางลอจิกและคณิตศาตร์ (ALU) เป็นต้น
หน่วยความจำ(Memory Unit)
ในการเขียนโปรแกรมด้วยภาษาซีให้กับไมโครคอนโทรลเลอร์ต้องคำนึงถึงขนาดของหน่วยความจำของไมโครคอนโทรลเลอร์ด้วย เพราะหากเขียนให้โปรแกรมที่มีขนาดความจุมากกว่าขนาดของหน่วยความจำโปรแกรมไมโครคอนโทรลเลอร์ ก็ไม่สามารถบรรจุโปรแกรมลงได้ครบสมบูรณ์ ทั้งนี้ต้องระมัดระวังในการใช้หน่วยความจำแบบอื่นในไมโครคอนโทรลเลอร์ด้วย
ในไมโครคอนโทรลเลอร์ สามารถแบ่งหน่วยความจำได้ 3 แบบคือ
1.หน่วยความจำแบบแฟลช(Flash Program Memory) โดยปกติไมโครคอนโทรลเลอร์หลายๆยี่ห้อถูกออกแบบให้มีคุณสมบัติในการโปรแกรมและการลบโปรแกรมได้มากกว่า 100,000 ครั้งและการทำงานมีความเร็วสูงเหมาะใช้ในการพัฒนางานที่มีขนาดใหญ่ หน่วยความจำนี้มีขนาด1KB - 32KB
2.หน่วยความจำข้อมูล(Data Memory RAM) หนวยความจำนี้เป็นหน่วยความจำชั่วคราว ใช้เก็บข้อมูลขณะประมวลผล เมื่อหยุดจ่ายไฟเลี้ยง ข้อมูลก็หายไป มีความจุตั้งแต่ 64-1536 Bytes
3.หน่วยความจำข้อมูลอีอีพรอม(EEPROM Data Memory) เป็นหน่วยความจำที่สามารถเขียนและและลบโปรแกรมได้ด้วยกระแสไฟฟ้าในหน่วยความจำรอม มีความจุขนาดถึง 256 Bytes
ในการเขียนโปรแกรมด้วยภาษาซีให้กับไมโครคอนโทรลเลอร์ต้องคำนึงถึงขนาดของหน่วยความจำของไมโครคอนโทรลเลอร์ด้วย เพราะหากเขียนให้โปรแกรมที่มีขนาดความจุมากกว่าขนาดของหน่วยความจำโปรแกรมไมโครคอนโทรลเลอร์ ก็ไม่สามารถบรรจุโปรแกรมลงได้ครบสมบูรณ์ ทั้งนี้ต้องระมัดระวังในการใช้หน่วยความจำแบบอื่นในไมโครคอนโทรลเลอร์ด้วย
ในไมโครคอนโทรลเลอร์ สามารถแบ่งหน่วยความจำได้ 3 แบบคือ
1.หน่วยความจำแบบแฟลช(Flash Program Memory) โดยปกติไมโครคอนโทรลเลอร์หลายๆยี่ห้อถูกออกแบบให้มีคุณสมบัติในการโปรแกรมและการลบโปรแกรมได้มากกว่า 100,000 ครั้งและการทำงานมีความเร็วสูงเหมาะใช้ในการพัฒนางานที่มีขนาดใหญ่ หน่วยความจำนี้มีขนาด1KB - 32KB
2.หน่วยความจำข้อมูล(Data Memory RAM) หนวยความจำนี้เป็นหน่วยความจำชั่วคราว ใช้เก็บข้อมูลขณะประมวลผล เมื่อหยุดจ่ายไฟเลี้ยง ข้อมูลก็หายไป มีความจุตั้งแต่ 64-1536 Bytes
3.หน่วยความจำข้อมูลอีอีพรอม(EEPROM Data Memory) เป็นหน่วยความจำที่สามารถเขียนและและลบโปรแกรมได้ด้วยกระแสไฟฟ้าในหน่วยความจำรอม มีความจุขนาดถึง 256 Bytes
พอร์ตอินพุตและเอาท์พุต(I/O Port) ไมโครคอนโทรลเลอร์ทุกตัวต้องมีขาต่อใช้งาน และสามารถเป็นได้ทั้งขาสัญญาณออกและขาสัญญาณเข้า จึงจะสามารถติดต่อกับอุปกรณ์ภายนอก หรือนำไปใช้งานอื่นได้ เช่น จอแสดงผล, ปุ่มกด, เซ็นเซอร์ เป็นต้น ในการใช้งานจะแบ่งพอร์ตออกเป็นพอร์ตละกี่บิตก็แล้วแต่ ส่วนใหญ่ตามมาตรฐานพอร์ตหนึ่งจะมี 8 บิต(ขาต่อใช้งาน 8 ขา) ส่วนจะมีกี่พอร์ตก็ตามแต่เบอร์ใช้งานที่ถูกออกแบบมา เช่น ไมโครคอนโทรลเลอร์เบอร์ PIC16F877 ก็จะมีพอร์ตใช้งานอยู่ 5 พอร์ต คือ
1.PORTA พอร์ตA มี 6 pins
2.PORTB พอร์ตB มี 8 pins
3.PORTC พอร์ตC มี 8 pins
4.PORTD พอร์ตD มี 8 pins
5.PORTE พอร์ตE มี 3 pins
1.PORTA พอร์ตA มี 6 pins
2.PORTB พอร์ตB มี 8 pins
3.PORTC พอร์ตC มี 8 pins
4.PORTD พอร์ตD มี 8 pins
5.PORTE พอร์ตE มี 3 pins
สำหรับหน้าที่การใช้งานของขา อินพุต/เอาท์พุตในพอร์ตต่างๆนี้
ขอยกตัวอย่างจากไมโครคอนโทรลเลอร์เบอร์ PIC16F877 เนื่องจากเบอร์อื่นๆก็มีขาใช้งานที่คล้ายคลึงกัน เพียงแต่จำนวนและขนาดหรือสเป็คอาจแตกต่างกันเท่านั้นเอง
ขอยกตัวอย่างจากไมโครคอนโทรลเลอร์เบอร์ PIC16F877 เนื่องจากเบอร์อื่นๆก็มีขาใช้งานที่คล้ายคลึงกัน เพียงแต่จำนวนและขนาดหรือสเป็คอาจแตกต่างกันเท่านั้นเอง
พอร์ตA(PORTA) มีจำนวน 6 ขา คือ RA0-RA5 เป็นขาสัญญาณ I/O แบบดิจิตอลและขาต่อสัญญาณอินพุตอะนาล็อกได้ด้วย ซึ่งก็คือ เป็นขาต่อสัญญาณ ADC(Analog to Digital Converter ) เข้านั่นเอง
RA0/AN0 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง0
RA0/AN0 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง0
RA1/AN1 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง1
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง1
RA2/AN2 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง2
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง2
RA3/AN3 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง3
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง3
RA4/TOCK1/C1OUT - ขาสัญญาณนาฬิกาอินพุต Timer0
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง1
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง1
RA5/AN4/SS - ขาสัญญาณอินพุตสำหรับ ADC ช่อง4
- ขาสัญญาณ slave select สื่อสาร Serial Port แบบ Synchronize
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง2
- ขาสัญญาณ slave select สื่อสาร Serial Port แบบ Synchronize
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง2
พอร์ตB(PORTB)มีจำนวน 8 ขา คือ RB0-RB7 เป็นขาสัญญาณ I/O แบบดิจิตอลที่มีวงจรพูลอัพ(R-Pull-up) บางขาสามารถใช้เป็นขาอินพุตในการ Interrupt จากภายนอกได้ด้วย
RB0/INT - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับรับสัญญาณ Interrupt จากภายนอก
RB1 - ขาสัญญาณติดต่อ I/O Port
RB2 - ขาสัญญาณติดต่อ I/O Port
RB3/LVP - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตรับแรงดันโปรแกรมต่ำ(5V) ถ้ามีการ Enable
RB4-RB7 - ขาสัญญาณติดต่อ I/O Port
- ภายในมีวงจรพูลอัพและ Interrupt Logic หากมีการ Enable จะสามารถอินเตอร์รัพท์แบบนี้ได้
RB0/INT - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับรับสัญญาณ Interrupt จากภายนอก
RB1 - ขาสัญญาณติดต่อ I/O Port
RB2 - ขาสัญญาณติดต่อ I/O Port
RB3/LVP - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตรับแรงดันโปรแกรมต่ำ(5V) ถ้ามีการ Enable
RB4-RB7 - ขาสัญญาณติดต่อ I/O Port
- ภายในมีวงจรพูลอัพและ Interrupt Logic หากมีการ Enable จะสามารถอินเตอร์รัพท์แบบนี้ได้
พอร์ตC(PORTC)มีจำนวน 8 ขา คือ RC0-RC7 เป็นขาสัญญาณ I/O แบบดิจิตอล และ timer, I2C, PWM
RC0/T1OSO/TICK1 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณเอาท์พุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณอินพุตของสัญญาณ Clock Timer1
RC0/T1OSO/TICK1 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณเอาท์พุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณอินพุตของสัญญาณ Clock Timer1
RC1/T1OSI/CCP2 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP2
- ขาสัญญาณอินพุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP2
RC2/CCP1 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP1
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP1
RC3/SCK/SCL - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณ Clock ของวงจร SPI(SCK)
- ขาสัญญาณ Clock ของวงจร I2C(SCL)
- ขาสัญญาณ Clock ของวงจร SPI(SCK)
- ขาสัญญาณ Clock ของวงจร I2C(SCL)
RC4/SDI/SDA - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุต Serial Data ของระบบ SPI(SDI)
- ขาสัญญาณ Data ของวงจร I2C(SDA)
- ขาสัญญาณอินพุต Serial Data ของระบบ SPI(SDI)
- ขาสัญญาณ Data ของวงจร I2C(SDA)
RC5/SDO - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณเอาท์พุต Serial Data ของระบบ SPI(SDO)
- ขาสัญญาณเอาท์พุต Serial Data ของระบบ SPI(SDO)
RC6/TxD/CK - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณส่ง Data/Serial Port(TxD)
- ขาสัญญาณ Clock/Synchronize(CK)
- ขาสัญญาณส่ง Data/Serial Port(TxD)
- ขาสัญญาณ Clock/Synchronize(CK)
RC7/RxD/DT - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณส่ง Data/Serial Port(RxD)
- ขาสัญญาณ Data/Synchronize(DT)
- ขาสัญญาณส่ง Data/Serial Port(RxD)
- ขาสัญญาณ Data/Synchronize(DT)
พอร์ตD(PORTD)มีจำนวน 8 ขา คือ RD0-RD7 เป็นขาสัญญาณ I/O แบบดิจิตอล และยังทำหน้าที่ขยายพอร์ตแบบขนานด้วย(PSP:Parallel Slave Port)
RD0/PSP0 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 0
RD1/PSP1 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 1
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 1
RD2/PSP2 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 2
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 2
RD3/PSP3 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 3
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 3
RD4/PSP4 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 4
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 4
RD5/PSP5 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 5
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 5
RD6/PSP6 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 6
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 6
RD7/PSP7 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 7
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 7
พอร์ตE(PORTE)มีจำนวน 3 ขา คือ RE0-RE2 เป็นขาสัญญาณ I/O แบบดิจิตอลและขาอินพุตของสัญญาณ ADC(Analog to Digital Converter)ด้วย
RE0/AN5/RD - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการอ่าน(RD:Read)
- ขาสัญญาณอินพุต ADC ช่อง5
RE0/AN5/RD - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการอ่าน(RD:Read)
- ขาสัญญาณอินพุต ADC ช่อง5
RE1/AN6/WR - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเขียน(WR:Write)
- ขาสัญญาณอินพุต ADC ช่อง6
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเขียน(WR:Write)
- ขาสัญญาณอินพุต ADC ช่อง6
RE2/AN7/CS - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเลือกอุปกรณ์(CS:Chip Select)
- ขาสัญญาณอินพุต ADC ช่อง7
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเลือกอุปกรณ์(CS:Chip Select)
- ขาสัญญาณอินพุต ADC ช่อง7
***ในการใช้งานพอร์ตนั้นจะต้องกำหนดสถานะให้เป็น อินพุต/เอาท์พุต ที่รีจิสเตอร์ TRISTATE เสียก่อน***
ส่วนขาใช้งานที่เหลือ นอกจากพอร์ตใช้งานแล้ว ได้แก่
MCLR/VPP - ขาสัญญาณ Reset (Master Clear Input)
- ขารับแรงดันโปรแกรม(Programming Voltage)
- ขารับแรงดันโปรแกรม(Programming Voltage)
OSC1/CLKIN - ขารับสัญญาณ clock / สำหรับต่อคริสตัล
OSC2/CLKOUT - ขารับสัญญาณ clock / สำหรับต่อคริสตัล
VDD - ขารับแรงดันไฟเลี้ยง +5V
VSS - ขาต่อกราวด์
OSC2/CLKOUT - ขารับสัญญาณ clock / สำหรับต่อคริสตัล
VDD - ขารับแรงดันไฟเลี้ยง +5V
VSS - ขาต่อกราวด์