Hardware เบื้องต้นของ PIC16F84(A)

PIC16F84A จะมีโครงสร้างแบบ RISC(Reduced Instruction Set Computer) PIC ในตระกูล 16xxx จะมีคำสั่งให้ใช้ทั้งหมด 35 คำสั่ง หากต้องการทราบลายละเอียดเพิ่มเติมสามารถ Download Datasheet ของ PIC16F84A ไปอ่านได้ครับ

โครงสร้างขาของ PIC16F84A

OSC1/CLKIN : Oscillator crystal input /
External clock source input.

OSC2/CLKOUT : Oscillator crystal output.
ทั้งสองขานี้จะต่อกับ crystal หรือ resonator ในกรณีที่อยู่ใน crystal oscillator mode(ใช้สัญญาณนาฬิกาจากภายนอก)

MCLR(inv) : Master clear(reset)input /
Programming voltage input. เมื่อขานี้เป็น LOW แล้ว MCU จะถูก reset อีกหน้าที่หนึ่งของขานี้ก็คือจะเป็น input ของ voltage programming ขณะที่ทำการ program ตัว MCU

RA0 - RA3 : Bi-directional I/O port. เป็นพอร์ตแบบ สองทิศทาง คือเลือกให้เป็น INPUT หรือ OUTPUT ก็ได้อย่างใดอย่างหนึ่ง

RA4/T0CKI : Bi-directional I/O port. เป็นพอร์ตแบบสองทิศทาง คือเลือกให้เป็น INPUT หรือ OUTPUT ก็ได้อย่างใดอย่างหนึ่ง อีกหน้าที่หนึ่งก็คือ Clock input to the TMR0 timer/counter. เป็น input ของ สัญญาณนาฬิกาเพื่อป้อนให้กับ Timer 0 ซึ่งอยู่ภายใน MCU ในกรณีที่เลือกว่าแหล่งของสัญญาณนาฬิกาที่ป้อนให้กับ Timer 0 ให้ใช้จากภายนอก

RB0/INT : Bi-directional I/O port. เป็นพอร์ตแบบสองทิศทาง คือเลือกให้เป็น INPUT หรือ OUTPUT ก็ได้ อย่างใดอย่างหนึ่ง อีกหน้าที่หนึ่งก็คือ External interrupt pinรับสัญญาณ interrupt เมื่อเกิดการเปลี่ยนแปลงของสัญญาณที่ขานี้
RB1 - RB7 : Bi-directional I/O port. เป็นพอร์ตแบบสองทิศทาง คือเลือกให้เป็น INPUT หรือ OUTPUT ก็ได้ อย่างใดอย่างหนึ่ง

VSS : Ground

VDD : Positive supply(+2.0V to +5.5V)

 

ใจเย็นๆ ครับอย่าพึ่งมึนครับ รูปมันทำให้ดูยากเฉยๆเท่านั้นเอง เดี๋ยวจะอธิบายทีละส่วนครับ

 

ภายใน program memory อาจสามารถแบ่งเป็นส่วนๆ ได้ดังนี้

 

Reset Vector ( 0000h ) เมื่อการ reset เกิดขึ้นเนื่องจากมีการป้อนไฟเข้า MCU เป็นครั้งแรก หรือเกิด WDT(Watchdog Timer) time-out หรือในกรณีอื่นๆ โปรแกรมจะเริ่มต้นหลังจาก reset ณ ตำแหน่งนี้

Peripheral Interrupt Vector ( 0004h ) เมื่อเกิดการ interrupt ขึ้น program memory pointer จะชี้มายัง ณ ตำแหน่งนี้
Configuration word ( 2007h ) การทำงานเบื้องต้นของ PIC จะถูกกำหนดที่หน่วยความจำตรงนี้ ไม่ว่าจะเป็น Enable/Disable Power-up timer, Enable/Disable Watchdog timer, Oscillator Selection bits(กำหนดที่มาของสัญญาณนาฬิกา) หน่วยความจำที่ตำแหน่งนี้ไม่สามารถเขียนได้ด้วยการเขียนโปรแกรม จะต้องกำหนดในขณะทำการเขียนโปรแกรมลงสู่ Flash memory ของ MCU

 

หน่วยความจำของ RAM ภายใน PIC16F84(A) จะมีโครงสร้างเป็นแบ่งเป็น bank โดยจะมีขนาด 80 bytes(00h-4Fh) ต่อ bank ในกรณีของ PIC16F84A จะมี 2 banks Memory ในส่วนนี้จะถูกแบ่งออกเป็น 2 ส่วนคือ
ส่วนแรก 12 bytes(00h-0Bh) ของแต่ละ bank ซึ่งจะถูกเรียกว่า SFR(Special Function Registers) จะใช้สำหรับบันทึกสถานะการทำงานของ PIC, เงื่อนไขของการกำหนดสถานะของ port ว่าเป็น input/output ports และเงื่อนไขอื่นๆ ส่วนที่สองจะมีขนาด 68 bytes(0Ch-4Fh) ซึ่งเริ่มตั้งแต่ ไบต์ที่ 13 จะถูกเรียกว่า GPR(General Purpose Registers) ซึ่งสามารถใช้เป็นหน่วยความจำที่จะเก็บผลลัพธ์ และเงื่อนไขต่างๆ เพื่อใช้ในการประมวลผลโปรแกรมขณะโปรแกรมทำงาน ถึงแม้ว่า PIC16F84A จะมี 2 bank แต่ SFR จะมีทั้งหมดเพียง 16 ชนิดไม่ใช่ 24 ชนิด โดย SFR บางตัวจะมีอยู่ทั้ง 2 bank ส่วน GPR ถึงแม้จะเปลี่ยน bank ก็ยังคงชี้ไปยังตำแหน่งเดิมเพราะ 16F84A มี GPR อยู่เพียง bank เดียวเท่านั้น และเมื่อไม่มีไฟฟ้าจ่ายให้กับ PIC ค่าใน memory ส่วนนี้จะหายไปหมด อย่างไรก็ตามพื้นที่ใน GPR สามารถเขียนใหม่กี่ครั้งก็ได้ ไม่มีข้อจำกัดจำนวนครั้ง

ตัวแปรใน SFR มีดังนี้

INDF : จะเก็บค่าของ Data memory ที่ถูกชี้แบบ indirect addressing

TMR0 : เป็นTimer counter ของ Timer 0

PCL : เก็บค่า 8 bits ล่างของ program counter

STATUS : จะเก็บค่า Flag ของผลลัพธ์ที่เกิดจากการคำนวณ

FSR : เป็น pointer ใช้สำหรับอ้างอิง data memory แบบ indirect

PORTA : เก็บค่าสถานะของ PORTA

PORTB : เก็บค่าสถานะของ PORTB

EEDATA : เก็บค่าของ Data ที่ EEPADR ชี้อยู่

EEADR : ตำแหน่งของ EEPROM ที่ต้องการอ้างถึง

PCLATH : เป็น 5 bits บนของ program counter

INTCON : ใช้คำคุมการเกิด Interruption

OPTION_REG : ใช้สำหรับกำหนด Mode การทำงานของ MCU

TRISA : ใช้กำหนด Mode ของ PORTA ว่าเป็น INPUT หรือ OUTPUT

TRISB : ใช้กำหนด Mode ของ PORTB ว่าเป็น INPUT หรือ OUTPUT

EECON1 : เป็น register ที่ใช้ควบคุม EEPROM

EECON2 : เป็น register ที่ใช้ป้องกันการเขียน EEPROM

POWER ON Timer

:

เป็น Timer ที่ใช้สำหรับสร้างช่วงระยะเวลาก่อนที่จะใช้ MCU ทำงานเพื่อรอจนกระทั่งแรงดันไฟฟ้าที่ป้อนให้กับ MCU จะนิ่งในกรณีเมื่อมีการป้อนไฟเข้าไปใหม่

OSC StartTimer

:

เป็น Timer ที่ใช้สำหรับสร้างช่วงระยะเวลาก่อนที่จะใช้ MCU ทำงานเพื่อรอจนกระทั่งสัญญาณนาฬิกาที่ป้อนให้กับ MCU จะนิ่งในกรณีเมื่อมีการป้อนไฟเข้าไปใหม่

POW ON Reset

:

จะทำการ RESET วงจรภายใน PIC ใหม่เมื่อมีการป้อนไฟเข้าไปใหม่

Watchdog Timer

:

เป็น Timer สำหรับจับเวลาว่าโปรแกรมบางช่วงใน PIC ทำงานนานเกินไปหรือไม่ เพื่อป้องกันอาการที่เรียกว่า Dead Lock ซึ่ง Timer ตัวนี้จะต้องทำการ clear ด้วยคำสั่งทาง software เมื่อ timer ตัวนี้นับจนกระทั่ง time-out เกิดขึ้น PIC จะกลับไปอยู่ในสถานะเหมือนกับสภาพที่มีการป้อนไฟเข้าไปใหม่

 

BACK