พอร์ตอินพุต/เอาต์พุตของ 8051


พอร์ตอินพุตและเอาต์พุ
                พอร์ต มีความหมายถึงแอดเดรสหนึ่งที่ได้รับการกำหนดไว้เพื่อการโอนย้ายข้อมูลระหว่างไมโคร คอนโทรลเลอร์
กับอุปกรณ์ภายนอก การกำหนดประเภทของการติดต่อขึ้นอยู่กับทิศทางการไหลของข้อมูลเมื่อพิจารณาจากไมโครคอนโทรล
เลอร์เป็นหลัก (ดูรูปที่ 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 คำสั่งเหล่านี้มีประโยชน์มากและทำให้ลดความซับซ้อนในการ ใช้
คำสั่งภายในโปรแกรมลงได้มาก


[ บทเรียน ] [ 204471 ] [ รายวิชา ]
[ ภาควิชาวิศวกรรมคอมพิวเตอร์ ] [ คณะวิศวกรรมศาสตร์ ] [ มหาวิทยาลัยเกษตรศาสตร์ ]