โครงสร้างของพอร์ต
การที่จะให้ไมโครคอนโทรลเลอร์ติดต่อกับอุปกรณ์ภายนอกได้ เช่นการรับข้อมูลจากอุปกรณ์ภายนอก (INPUT)หรือการส่งข้อมูลให้กับอุปกรณ์ภายนอก (OUTPUT) ก็จะต้องติดต่อผ่านพอร์ต (PORT) หรืออาจกล่าวได้ว่าพอร์ตคือช่องทางสำหรับการโอนย้ายข้อมูลระหว่งไมโครคอนโทรลเลอร์กับอุปกรณ์ภายนอกนั้นเอง
รูป 1 แสดงโครงสร้างภายในของพอร์ต
1.1 การใช้งานไมโครคอนโทรลเลอร์ให้เป็นพอร์ตอินพุต (INPUT PORT)
การกำหนดให้พอร์ตหรือบิตใดๆ ของไมโครคอนโทรลเลอร์เป็นพอร์ตอินพุต หรือส่วนในการรับค่าของข้อมูลเข้ามาดังแสดงในรูป 5.2 จะเริ่มต้นด้วยการเขียนข้อมูลให้กับพอร์ตหรือบิตนั้นๆ เป็นสถานะลอจิก "1" แล้วจึงส่งไปแต่ละบิตของพอร์ตที่ต้องการใช้งาน เพื่อให้เป็นพอร์ตอินพุต เช่นใช้คำสั่ง MOV P3, #0FFH หรือคำสั่ง SETB P1.5 จะทำให้วงจรส่วนของการคงสภาวะข้อมูล หรือวงจรแลตซ์(Latch)* ซึ่งสร้างมาจากวงจร ดี ฟลิป-ฟลอป (D flip-flop) จะให้เอาต์พุต Q มีสถานะลอจิกเป็น "1" แล้วจะผ่านไปที่วงจรกลับสัญญาณ (Inverter) เพื่อให้หยุดการทำงานของเฟต (FET)* ซึ่งจะทำให้ขาสัญญาณของพอร์ตถูกเชื่อมต่อเข้ากับวงจรพูลอัป * ที่เป็นตัวต้านทานภายใน (Internal Pull up) โดยตรง ส่งผลให้ขาพอร์ตนั้นมีสถานะลอจิกเป็น "1" และสามารถจะรับสัญญาณที่เป็นลอจิก "0" จากอุปกรณ์ภายนอกได้ ข้อมูลจากอุปกรณ์ภายนอกที่ต่ออยู่ก็จะถูกส่งเข้ามาเก็บไว้ในวงจรบัฟเฟอร์ภายในพอร์ต เพื่อรอให้ซีพียูมาทำการอ่านค่าเข้าไป ดังนั้นอุปกรณ์ภายนอกที่เราจะนำมาเชื่อมต่อกับพอร์ตอินพุต จึงนิยมกำหนดให้ทำงานในสภาวะลอจิก "0"
รูป 2 แสดงการกำหนดเป็นพอร์ตอินพุตโดยให้สถานะเป็น "1" ตำแหน่งบิตที่ต้องการ
1.2 การอ่านค่าลอจิกจากพอร์ต
การอ่านค่าลอจิกจากพอร์ตทำได้ 2 ลักษณะด้วยกันคือ การอ่านค่าจากขาพอร์ตโดยตรง (Read Pin) และ การอ่านค่าจากวงจรแลตซ์ของแต่ละพอร์ต (Read Latch) ในกรณีที่พอร์ตต่อกับขาเบสของทรานซิสเตอร์ * ชนิด NPN ให้เป็นทรานซิสเตอร์สวิตซ์ และที่ขาอิมิตเตอร์ของทรานซิสเตอร์ต่อลงกราวด์ (ดูรูป 5.3 ประกอบ) ถ้าหากมีการส่งข้อมูลให้เป็นลอจิก "1" ไปยังทรานซิสเตอร์ จะทำให้ทรานซิสเตอร์ทำงาน (นำกระแส) ส่งผลให้สถานะลอจิกที่ขาพอร์ตเป็นลอจิก "0" ด้วยเหตุผล เมื่อทรานซิสเตอร์นำกระแส จะเสมือนว่าขาพอร์ตนั้นถูกต่อลงกราวด์ ( VBE=0.6 V * ) ดังนั้นถ้าหากอ่านค่าลอจิกที่ขาพอร์ตโดยตรง (Read Pin) จะได้ผลตรงกันข้ามกับค่าลอจิกที่ส่งออกมา แต่ถ้าหากทำการอ่านค่าลอจิกที่วงจรแลตซ์ (Read Latch) จะได้สถานะลอจิกตรงกับค่าที่ส่งออกพอร์ตจริง ด้วยเหตุผลนี้ในการอ่านค่าลอจิกจากพอร์ตจึงต้องเลือกวิธีการให้เหมาะสมกับอุปกรณ์ที่นำมาต่อด้วย
การอ่านค่าลอจิกจากพอร์ตทำได้ 2 ลักษณะด้วยกันคือ การอ่านค่าจากขาพอร์ตโดยตรง (Read Pin) และ การอ่านค่าจากวงจรแลตซ์ของแต่ละพอร์ต (Read Latch) ในกรณีที่พอร์ตต่อกับขาเบสของทรานซิสเตอร์ * ชนิด NPN ให้เป็นทรานซิสเตอร์สวิตซ์ และที่ขาอิมิตเตอร์ของทรานซิสเตอร์ต่อลงกราวด์ (ดูรูป 5.3 ประกอบ) ถ้าหากมีการส่งข้อมูลให้เป็นลอจิก "1" ไปยังทรานซิสเตอร์ จะทำให้ทรานซิสเตอร์ทำงาน (นำกระแส) ส่งผลให้สถานะลอจิกที่ขาพอร์ตเป็นลอจิก "0" ด้วยเหตุผล เมื่อทรานซิสเตอร์นำกระแส จะเสมือนว่าขาพอร์ตนั้นถูกต่อลงกราวด์ ( VBE=0.6 V * ) ดังนั้นถ้าหากอ่านค่าลอจิกที่ขาพอร์ตโดยตรง (Read Pin) จะได้ผลตรงกันข้ามกับค่าลอจิกที่ส่งออกมา แต่ถ้าหากทำการอ่านค่าลอจิกที่วงจรแลตซ์ (Read Latch) จะได้สถานะลอจิกตรงกับค่าที่ส่งออกพอร์ตจริง ด้วยเหตุผลนี้ในการอ่านค่าลอจิกจากพอร์ตจึงต้องเลือกวิธีการให้เหมาะสมกับอุปกรณ์ที่นำมาต่อด้วย
รูป 3 แสดงสถานะของทรานซิสเตอร์ชนิด NPN เมื่อนำมาต่อเป็นทรานซิสเตอร์สวิตซ์
1.3 การใช้งานไมโครคอนโทรลเลอร์ให้เป็นพอร์ตเอาต์พุต(OUTPUT PORT)
การกำหนดให้มีลักษณะเป็นพอร์ตเอาต์พุต เราสามารถจะส่งข้อมูลที่เป็นลอจิกที่ต้องการออกไปได้โดยตรง เช่นถ้าเราต้องการส่งข้อมูลที่เป็นสถานะลอจิก "0" ออกไปทางพอร์ต P1 ทั้ง 8 บิต ก็สามารถที่จะเขียนโดยใช้คำสั่ง MOV P1,#00H จะทำให้เอาต์พุตของวงจรแลตซ์เป็นสถานะลอจิก "0" ซึ่งจะส่งต่อไปให้กับวงจรกลับสัญญาณทำให้มีสถานะลอจิกเป็น "1" แล้วจึงส่งต่อไปขับเฟต(FET) ให้ทำงาน ส่งผลให้ตำแหน่งของพอร์ตที่กำหนดให้ทำงานจะเป็นสถานะลอจิก "0" ในทำนองเดียวกันถ้าหากเราต้องการจะส่งข้อมูลลอจิก "1" ออกไป ก็สามารถเขียนข้อมูล "1" ไปยังวงจรแลตซ์ วงจรขับก็จะหยุดการทำงานเป็นผลทำให้ที่ขาของพอร์ตเชื่อมต่อกับวงจรพูลอัปภายในเกิดเป็นสถานะลอจิก "1" ที่ขาพอร์ตนั้น ซึ่งจะคล้ายกับการกำหนดให้เป็นขาอินพุต เพียงแต่แตกต่างกันที่กระบวนการในการเคลื่อนย้ายข้อมูล โดยถ้าเป็นอินพุต จะมีสัญญาณมาอ่านข้อมูลที่บัฟเฟอร์ แต่ถ้าเป็นเอาต์พุตจะไม่มีการอ่านข้อมูลที่บัฟเฟอร์แต่อย่างใด เว้นแต่ในกรณีที่ต้องการตรวจสอบข้อมูลที่ส่งออกมาทางเอาต์พุตเท่านั้น
การกำหนดให้มีลักษณะเป็นพอร์ตเอาต์พุต เราสามารถจะส่งข้อมูลที่เป็นลอจิกที่ต้องการออกไปได้โดยตรง เช่นถ้าเราต้องการส่งข้อมูลที่เป็นสถานะลอจิก "0" ออกไปทางพอร์ต P1 ทั้ง 8 บิต ก็สามารถที่จะเขียนโดยใช้คำสั่ง MOV P1,#00H จะทำให้เอาต์พุตของวงจรแลตซ์เป็นสถานะลอจิก "0" ซึ่งจะส่งต่อไปให้กับวงจรกลับสัญญาณทำให้มีสถานะลอจิกเป็น "1" แล้วจึงส่งต่อไปขับเฟต(FET) ให้ทำงาน ส่งผลให้ตำแหน่งของพอร์ตที่กำหนดให้ทำงานจะเป็นสถานะลอจิก "0" ในทำนองเดียวกันถ้าหากเราต้องการจะส่งข้อมูลลอจิก "1" ออกไป ก็สามารถเขียนข้อมูล "1" ไปยังวงจรแลตซ์ วงจรขับก็จะหยุดการทำงานเป็นผลทำให้ที่ขาของพอร์ตเชื่อมต่อกับวงจรพูลอัปภายในเกิดเป็นสถานะลอจิก "1" ที่ขาพอร์ตนั้น ซึ่งจะคล้ายกับการกำหนดให้เป็นขาอินพุต เพียงแต่แตกต่างกันที่กระบวนการในการเคลื่อนย้ายข้อมูล โดยถ้าเป็นอินพุต จะมีสัญญาณมาอ่านข้อมูลที่บัฟเฟอร์ แต่ถ้าเป็นเอาต์พุตจะไม่มีการอ่านข้อมูลที่บัฟเฟอร์แต่อย่างใด เว้นแต่ในกรณีที่ต้องการตรวจสอบข้อมูลที่ส่งออกมาทางเอาต์พุตเท่านั้น
ไอซีไมโครคอนโทรลเลอร์เบอร์ AT89CX051 ที่ตำแหน่งพอร์ตสามารถเป็นทั้งอินพุตพอร์ตและเอาต์พุตพอร์ต และที่พอร์ตจะมี Resister Pull up ไว้ภายในแล้ว ยกเว้นที่พอร์ต P1.0 และ P1.1 ต้องใช้ R Pull Up จากภายนอก การใช้งานเป็นพอร์ตเอาต์พุตในแต่ละบิต ของแต่ละพอร์ตมีความสามารถในการรับกระแสเข้าหรือที่เรียกว่า กระแสซิงค์ (Sink current) ได้สูงสุด 20mA และทุกขารวมกันในแต่ละพอร์ต ในกรณีที่ใช้งานพร้อมกัน จะสามารถรับกระแสเข้าได้รวมกันสูงสุดไม่เกิน 80 mA ดังนั้นในการใช้งานทุกขาเป็นพอร์ตเอาต์พุต เพื่อไม่ให้เกิดปัญหาเกี่ยวกับความสามารถในการรับกระแสเข้าจึงควรต่อวงจรบัปเฟอร์ ทางเอาต์พุตเพื่อช่วยป้องกัน ไอซีเสียหายจากการรับกระเข้าเกินกำหนด แต่ในวงจรที่เราใช้ทดลองจะมีไอซี 74HCT245 ต่อไว้ให้แล้ว ที่ตำแหน่งของบิตเมื่อให้เอาต์พุตมีสัญญาณออกเป็นลอจิก "0" จะรับกระแสเข้ามาเรียกว่า IOL (Sink Current) ที่ตำแหน่งของบิตเมื่อให้เอาต์พุตมีสัญญาณออกเป็นลอจิก "1" จะมีกระแสจ่ายออกมาเรียกว่า IOH (Source Current) |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น