วันศุกร์ที่ 20 มีนาคม พ.ศ. 2552

พอร์ตอินพุตและเอาต์พุต

พอร์ต มีความหมายถึงแอดเดรสหนึ่งที่ได้รับการกำหนดไว้เพื่อการโอนย้ายข้อมูลระหว่าง

ไมโคร คอนโทรลเลอร์กับอุปกรณ์ภายนอก การกำหนดประเภทของการติดต่อขึ้นอยู่กับทิศทางการ

ไหลของข้อมูลเมื่อพิจารณาจากไมโครคอนโทรลเลอร์เป็นหลัก

(ดูรูปที่ 4.1) ดังนั้นการนำเข้าข้อมูลจากวงจรภายนอกจึงเรียกว่า การอินพุต (input)

และในกรณีตรงกันข้ามเพื่อส่งออกข้อมูลก็จะเรียกว่า การเอาต์พุต (output)

เมื่อพิจารณาถึงวิธีการส่งข้อมูลภายในพอร์ตจะสามารถแยกประเภทของพอร์ตออก

ได้เป็นสองลักษณะ คือพอร์ตแบบขนาน (Parallel port) ซึ่งทำการส่งจำนวนบิต

ข้อมูลทั้งหมดออกมาหรือนำเข้าไปพร้อมกันในคราวเดียว และพอร์ตแบบอนุกรม (Serial port)

ซึ่งทำการโอนย้ายข้อมูลคราวละบิตๆ จนครบจำนวน แต่สำหรับในบทนี้จะกล่าว ถึงเฉพาะ

ในส่วนของพอร์ตแบบขนานเท่านั้น สำหรับการทำงานของพอร์ตแบบอนุกรมจะได้กล่าวภายหลัง


พอร์ตแบบขนานของ 8051


8051 มีโครงสร้างของพอร์ตที่สามารถใช้งานแบบขนานได้จำนวนทั้งหมดสี่พอร์ต

เรียกชื่อเรียงตามลำดับว่าพอร์ต0,1,2 และ 3 และเป็นพอร์ตขนาด 8 บิตทั้งหมด

การใช้งานพอร์ตสามารถทำได้ทั้งในลักษณะของเส้น สัญญาณเดี่ยวๆหรือกลุ่มของสัญญาณ

ได้ นอกจากนี้พอร์ต 0,2 และ 3 ยังสามารถนำไปใช้งานอื่นๆ ที่ไม่ใช่เป็นพอร์ต อินพุต/เอาต์พุต

ได้โดยพอร์ต 0 จะทำหน้าที่มัลติเพล็กซ์ ระหว่างบัสแอดเดรสไบต์ต่ำและ

บัส ข้อมูลสำหรับการติดต่อ กับวงจรประกอบร่วมข้อมูลบัสแอดเดรสไบต์สูงซึ่งจะ

ส่งออกมาทางพอร์ต 2 สำหรับพอร์ต 3 นั้น นอกเหนือไปจาก ความสามารถเช่นพอร์ต

ปกติแล้วสามารถนำไปเป็นขาสัญญาณของการอินเตอร์รัปต์ต่างๆ ซึ่งรวมทั้งการสร้างสัญญาณ

ควบคุม RD\ และ WR\ เพื่อทำหน้าที่อ่านหรือเขียนหน่วยความจำข้อมูลภายนอกด้วย

การใช้งานพอร์ตลักษณะงานแบบ อื่นๆที่ไม่ใช่เป็นพอร์ต/เอาต์พุทนี้จะดำเนินการโดย 8051 เองโดยอัตโนมัติ


โครงสร้างการทำงานของพอร์ต 8051


จากลักษณะโครงสร้างของแต่ละบิตภายในพอร์ตทั้งหมดของ 8051 ซึ่งได้แสดง

ไว้ในรูปที่ 4.2 นั้นจะเห็นว่ามีความคล้ายคลึงกันตามลักษณะโครงสร้างที่

เรียกว่า Quasi-bidirectional port ยกเว้นพอร์ต 0ซึ่งเพียง แต่ไม่มี

ตัวต้านทานทำหน้าที่ Pull-up สัญญาณไว้ภายในเท่านั้น วงจรประกอบอื่นภาย

ในยังมีฟลิปฟลอปแบบ D ซึ่งมีผลทำให้ พอร์ตสามารถแลตช์หรือค้างสภาวะ

ของสัญญาณได้ นอกจากนี้ในส่วนเอาต์พุตของฟลิปฟลอปเฉพาะของพอร์ต 0 และพอร์ต 2

จะมีโครงสร้างที่ทำหน้าที่คล้ายกับสวิตช์เพิ่มเติมขึ้น เพื่อควบคุมให้เอาต์พุตนี้ต่อเข้ากับส่วนของ

ทรานซิสเตอร์ในระหว่างที่ไม่ได้มีการทำงานในลักษณะของบัสแอดเดรสหรือบัสข้อมูลด้วย

สำหรับบัฟเฟอร์จำนวนสองตัวของทุกบิตในพอร์ตนั้นมีการทำงานแยกกันโดยอิสระ

โดยตัวที่อยู่ทางด้านบนจะยอมให้สัญญาณผ่านได้ก็ต่อ เมื่อมีการอ่านค่าข้อมูลที่ค้าง

ไว้ส่วนอีกตัวหนึ่งซึ่งอยู่ทางด้านล่างจะถูกใช้งานเฉพาะเมื่อได้มีการอ่านสถานะของขา สัญญาณเท่านั้น




การใช้งานพอร์ตเป็นการอินพุต


การใช้งานพอร์ตเป็นการอินพุตข้อมูลจะต้องเริ่มด้วยการส่งข้อมูลที่มีค่าเป็น 1 ออกมาทางบิตของพอร์ต

นั้นก่อนเป็นลำดับแรก เพื่อหยุดการทำงานของทรานซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาต์พุตของบิตนั้น

ทำให้ขาสัญญาณของบิตถูกต่อเข้ากับตัวต้านทานซึ่งทำหน้าที่ Pull-up ภายในซึ่งมีผลให้บิตนั้นๆ

ของพอร์ต 1,2 และ 3 เป็น สภาวะของลอจิกสูง ตัวต้านทานนี้มีค่าประมาณ 50 K โอห์ม

ซึ่งเป็นค่าที่สูงมาก และทำให้อุปกรณ์ภายนอกสามารถขับสัญญาณของพอร์ตเหล่านี้เป็นลอจิกต่ำ

ได้ง่าย สำหรับบิตของพอร์ต 0 นั้น แม้ว่าจะมีหลักการทำงานที่คล้ายคลึงกัน กับบิตของพอร์ตอื่นๆ

แต่เนื่องจากการที่ไม่มีตัวต้านทานทำหน้าที่ Pull-up ภายในไว้ ทำให้เมื่อทรานซิสเตอร์ที่ทำหน้าที่

ขับสัญญาณเอาต์พุตนั้นหยุดการทำงาน ก็จะเป็นผลให้ขาสัญญาณนี้อยู่ในสภาวะอิมพีแดนซ์สูงแทน
การใช้งานพอร์ตเป็นการเอาต์พุต


เมื่อมีการส่งข้อมูลที่มีค่าเป็น 0 ให้กับแต่ละบิตของพอร์ตทุกพอร์ต

ข้อมูลนี้จะถูกส่งให้กับฟลิปฟลอปซึ่งจะค้างค่านี้ไว้ และมีผลทำ

ให้ทรานซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาต์พุตนั้นทำงาน ดังนั้นขาสัญญาณก็จะมีสภาวะ

ลอจิกเป็นลอจิกต่ำส่วนการส่งข้อมูลที่มีค่าเป็น 1 ออกมานั้น

ในกรณีที่เป็นการทำงานในแต่ละบิตของพอร์ต 1,2 หรือ 3 จะทำ

ให้ทรานซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาต์พุตนั้นหยุดการทำงาน

มีผลทำให้ขาของสัญญาณเป็นลอจิกสูงด้วยตัว ต้านทานที่ Pull-up

อยู่ภายในนั้น แต่สำหรับการทำงานในแต่ละบิตทางพอร์ต 0 นั้นจะมีผลที่แตกต่างออกไป

โดยขา สัญญาณจะเป็นสภาวะอิมพีแดนซ์สูงแทน เนื่องจาก

ไม่มีตัวต้านทานภายในเชื่อมต่ออยู่นั่นเอง ดังนั้นในการใช้งานพอร์ต 0 เป็นการเอาต์พุตข้อมูล

จึงจำเป็นต้องใช้ตัวต้านทานภายนอก Pull-up สัญญาณไว้กับลอจิกสูงแทน
ความสามารถอีกประการหนึ่งเกี่ยวกับพอร์ตอินพุต/เอาต์พุตของ 8051

เป็นวิธีการอ่านลิจิกจากพอร์ตซึ่งมีได้สองวิธีคือ การอ่านค่าลอจิกที่ขาสัญญาณ (Port pin)

และวิธีการอ่านลอจิกของการแลตช์ที่พอร์ต (Port latch) ดังจะสังเกต

ได้จากรูปที่ 4.2 วิธีการอ่านค่าจากพอร์ต ทั้งสองแบบนี้จะช่วยให้ระบบทำงานได้ด้วยความถูกต้องมาก

ยิ่งขึ้น ยกตัวอย่างเช่น หากว่าพอร์ตถูกนำไปต่อกับขาเบสของทรานซิสเตอร์แบบ NPN

และขาอิมิตเตอร์ต่อกับกราวด์ ของระบบ เมื่อมีการส่งค่า 1 ออกไปจะมีผลทำให้ทรานซิสเตอร์ทำงาน

ในขณะนั้นถ้าซีพียูมีการอ่านค่าลิจิกจากขา สัญญาณของพอร์ตนี้ก็จะได้ค่าลอจิกต่ำ

เนื่องจากมองเห็นค่าศักย์ไฟฟ้าระหว่างขาเบสและขาอิมิตเตอร์ซึ่งมีค่าประมาณ 0.6 โวลต์แทน

ดังนั้นในกรณีเช่นนี้หากว่าเป็นการอ่านค่าจากลอจิกของการแลตช์ ก็จะได้รับค่าระดับลอจิกสูงซึ่งเป็นค่า

ที่ถูกต้องสภาพที่เป็นจริง



ลักษณะสมบัติของพอร์ตอินพุต/เอาต์พุต

ดังได้กล่าวแล้วว่าพอร์ต 1,2 และ 3 ของ 8051 มีตัวต้านทาน (ซึ่งสร้างขึ้นจาก FET)

ทำหน้าที่ Pull-up ขาสัญญาณไว้และมีค่าประมาณ 50 K โอห์ม ซึ่งถือว่ามีค่าที่สูงมาก

เป็นผลให้การเปลี่ยนแปลงระดับสัญญาณลอจิก จากสูงไปต่ำทำได้อย่างรวดเร็ว แต่ในกรณีตรงข้าม

จะใช้เวลาการเปลี่ยนแปลงระดับสัญญาณนานกว่ามาก ทั้งนี้เนื่อง จากว่ากระแสจะ

ไหลผ่านตัวต้านทานนี้ได้น้อยมาก ดังนั้นในการแก้ปัญหาจึงได้มีการออกแบบตัวต้าน

ทานเพิ่มขึ้นอีกหนึ่ง ตัวขนานไว้โดยมีค่าประมาณ 1K โอห์ม เรียกว่า Speed-up resistor

ซึ่งยอมให้กระแสไหลผ่านได้มากขึ้นประมาณ 50-100 เท่า และจะมีการเชื่อมต่อตัว

ต้านทานที่เพิ่มขึ้นนี้เฉพาะเมื่อมีการเปลี่ยนระดับสัญญาณจากลอจิกต่ำไปเป็นลอจิก สูงเท่านั้น

โดยใช้เวลาประมาณ 2 คล็อกไซเคิล 4.6 คำสั่งการใช้งานพอร์ตอินพุต/เอาต์พุต เนื่องจาก 8051

ใช้หลักการที่เรียกว่า Memory mapped system กล่าวคือ การอ้างถึงพอร์ตรีจิสเตอร์

หรืออุปกรณ์ต่างๆ ภายในระบบ จะเป็นการติดต่อกับหน่วยความจำตำแหน่งหนึ่งเท่านั้น

ดังนั้นในการดำเนินการเพื่อนำ เข้าหรือส่งออกข้อมูลกับพอร์ต จึงใช้คำสั่งการอ่านค่า

จากหน่วยความจำซึ่งถูกออกแบบให้เป็นตำแหน่งของพอร์ตหรือ คำสั่งการเขียนค่าข้อมูลไปยังตำแหน่ง

หน่วยความจำนั้นแทน ดังนั้นจะสังเกตเห็นได้ว่าในตารางชุดคำสั่งของ 8051

จะไม่มีคำสั่งที่เกี่ยวกับการทำงานพอร์ตแต่ประการใด เช่น คำสั่ง IN (นำเข้าข้อมูลจากพอร์ต)

หรือคำสั่ง OUT(ส่ง ข้อมูลออกจากพอร์ต) เป็นต้น นอกจากนี้ 8051

ยังมีชุดคำสั่งที่จัดการข้อมูลแบบบิตได้โดยตรง (Single-bit Operation)

ดังนั้นเรา สามารถที่จะใช้คำสั่งนี้จัดการพอร์ตอินพุต/เอาต์พุตทั้งหมดแบบเส้นสัญญาณเดี่ยว

ได้โดยการใช้คำสั่ง SETB เพื่อ กำหนดค่าเป็น 1 หรือคำสั่ง CLR เพื่อทำให้บิตมีค่าเป็น

0 คำสั่งเหล่านี้มีประโยชน์มากและทำให้ลดความซับซ้อนในการ ใช้คำสั่งภายในโปรแกรมลงได้มาก

ไม่มีความคิดเห็น:

แสดงความคิดเห็น