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