โครงสร้างไมโครคอนโทรลเลอร์ ตระกูล PIC
รูปที่1.โครงสร้างของไมโครคอนโทรลเลอร์
ในการเขียนโปรแกรมด้วยภาษาซีให้กับไมโครคอนโทรลเลอร์ต้องคำนึงถึงขนาดของหน่วยความจำของไมโครคอนโทรลเลอร์ด้วย เพราะหากเขียนให้โปรแกรมที่มีขนาดความจุมากกว่าขนาดของหน่วยความจำโปรแกรมไมโครคอนโทรลเลอร์ ก็ไม่สามารถบรรจุโปรแกรมลงได้ครบสมบูรณ์ ทั้งนี้ต้องระมัดระวังในการใช้หน่วยความจำแบบอื่นในไมโครคอนโทรลเลอร์ด้วย
ในไมโครคอนโทรลเลอร์ สามารถแบ่งหน่วยความจำได้ 3 แบบคือ
1.หน่วยความจำแบบแฟลช(Flash Program Memory) โดยปกติไมโครคอนโทรลเลอร์หลายๆยี่ห้อถูกออกแบบให้มีคุณสมบัติในการโปรแกรมและการลบโปรแกรมได้มากกว่า 100,000 ครั้งและการทำงานมีความเร็วสูงเหมาะใช้ในการพัฒนางานที่มีขนาดใหญ่ หน่วยความจำนี้มีขนาด1KB - 32KB
2.หน่วยความจำข้อมูล(Data Memory RAM) หนวยความจำนี้เป็นหน่วยความจำชั่วคราว ใช้เก็บข้อมูลขณะประมวลผล เมื่อหยุดจ่ายไฟเลี้ยง ข้อมูลก็หายไป มีความจุตั้งแต่ 64-1536 Bytes
3.หน่วยความจำข้อมูลอีอีพรอม(EEPROM Data Memory) เป็นหน่วยความจำที่สามารถเขียนและและลบโปรแกรมได้ด้วยกระแสไฟฟ้าในหน่วยความจำรอม มีความจุขนาดถึง 256 Bytes
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 เนื่องจากเบอร์อื่นๆก็มีขาใช้งานที่คล้ายคลึงกัน เพียงแต่จำนวนและขนาดหรือสเป็คอาจแตกต่างกันเท่านั้นเอง
RA0/AN0 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง0
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง1
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง2
- ขาสัญญาณอินพุตสำหรับ ADC ช่อง3
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง1
- ขาสัญญาณ slave select สื่อสาร Serial Port แบบ Synchronize
- ขาสัญญาณเอาท์พุตสำหรับเปรียบเทียบ ADC ช่อง2
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 จะสามารถอินเตอร์รัพท์แบบนี้ได้
RC0/T1OSO/TICK1 - ขาสัญญาณติดต่อ I/O Port
- ขาสัญญาณเอาท์พุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณอินพุตของสัญญาณ Clock Timer1
- ขาสัญญาณอินพุตวงจรออสซิลเลเตอร์ของ Timer1
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP2
- ขาสัญญาณเอาท์พุตวงจร PWM
- ขาสัญญาณเอาท์พุตวงจรเปรียบเทียบสัญญาณโมดูล CCP1
- ขาสัญญาณ Clock ของวงจร SPI(SCK)
- ขาสัญญาณ Clock ของวงจร I2C(SCL)
- ขาสัญญาณอินพุต Serial Data ของระบบ SPI(SDI)
- ขาสัญญาณ Data ของวงจร I2C(SDA)
- ขาสัญญาณเอาท์พุต Serial Data ของระบบ SPI(SDO)
- ขาสัญญาณส่ง Data/Serial Port(TxD)
- ขาสัญญาณ Clock/Synchronize(CK)
- ขาสัญญาณส่ง Data/Serial Port(RxD)
- ขาสัญญาณ Data/Synchronize(DT)
พอร์ตD(PORTD)มีจำนวน 8 ขา คือ RD0-RD7 เป็นขาสัญญาณ I/O แบบดิจิตอล และยังทำหน้าที่ขยายพอร์ตแบบขนานด้วย(PSP:Parallel Slave Port)
RD0/PSP0 - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 0
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 1
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 2
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 3
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 4
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 5
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 6
- ขาขยายสัญญาณพอร์ตแบบขนานบิต 7
RE0/AN5/RD - ขาสัญญาณติดต่อ I/O Port
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการอ่าน(RD:Read)
- ขาสัญญาณอินพุต ADC ช่อง5
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเขียน(WR:Write)
- ขาสัญญาณอินพุต ADC ช่อง6
- ขาขยายสัญญาณพอร์ตแบบขนานควบคุมการเลือกอุปกรณ์(CS:Chip Select)
- ขาสัญญาณอินพุต ADC ช่อง7
- ขารับแรงดันโปรแกรม(Programming Voltage)
OSC2/CLKOUT - ขารับสัญญาณ clock / สำหรับต่อคริสตัล
VDD - ขารับแรงดันไฟเลี้ยง +5V
VSS - ขาต่อกราวด์