Learning Community

ผลงานวิทยานิพนธ์
ของคุณ พนิต เวชศิลป์
ภาควิชาวิศวกรรมคอมพิวเตอร์
สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง

ปรับแก้ไขโดยนาย รุ่งโรจน์ โรจนโพธิ์ ( ธันวาคม 2548 )




Learning Community
• Home
• Jini Beginning
- บทเรียนที่ 1
- บทเรียนที่ 2
- บทเรียนที่ 3
- บทเรียนที่ 4
- บทเรียนที่ 5
- บทเรียนที่ 6
- บทเรียนที่ 7
- บทเรียนที่ 8
- บทเรียนที่ 9


บทที่ 6 ทฤษฎีของฮาร์ดแวร์ำ

6.1 ไมโครคอนโทรลเลอร์ ในตระกูล 8051

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

รูปที่ 6-1 แสดงหน่วยการทำงานทั่วไปของระบบไมโครโพรเซสเซอร์

คุณลักษณะของไมโครคอนโทรลเลอร์ 8051

  • หน่วยประมวลผลกลาง 8 บิต
  • หน่วยประมวลผลสำหรับข้อมูลแบบบิต
  • ความสามารถในการอ้างตำแหน่งของหน่วยความจำโปรแกรม 64 กิโลไบต์
  • ความสามารถในการอ้างอิงตำแหน่งความจำข้อมูล 64 กิโลไบต์
  • หน่วยความจำโปรแกรมภายในขนาด 4 กิโลไบต์แบบ EPROM (เบอร์ 8751) หรือแบบ ROM(เบอร์ 8051)
  • หน่วยความจำแบบ RAM ภายในจำนวน 128 ไบต์
  • พอร์ตอินพุต/เอาท์พุทแบบขนานจำนวน 32 เส้น ซึ่งสามารถแยกทำงานได้อย่างอิสระ
  • วงจรนับ/จับเวลาขนาด 16 บิต จำนวนสองวงจร
  • วงจรสื่อสารแบบอนุกรมแบบฟูลดูเพล็กซ์ (Full Duplex)
  • วงจรควบคุมการอินเทอร์รัปท์จากแหล่งสัญญาณ 6 ประเภท พร้อมการกำหนดลำดับความสำคัญได้สองระดับ
  • วงจรออสซิลเลเตอร์ภายใน

6.1.1 ลักษณะของไมโครคอนโทรลเลอร์ 8051

โดยทั่วไป ไมโครคอนโทรลเลอร์ ในตระกูลนี้จะมีรูปร่างไอซีแบบ ดูอัล อินไลน์ เพกเกจ (DIP) ขนาด 40 ขาดังแสดงในภาพ
 

รูปที่ 6-2 แสดงการกำหนดหน้าที่ขาสัญาณของไอซี 8051

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

6.1.2 การใช้งานพอร์ตของไมโครคอนโทรลเลอร์ 8051

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

ต้องเริ่มด้วยการส่งข้อมูลที่มีค่าเป็น 1 ออกมาทางบิตของพอร์ตนั้นก่อนเป็นอันดับแรก เพื่อหยุดการทำงานของทราสซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาท์พุทของบิตนั้น ทำให้ขาสัญญาณของบิตถูกต่อเข้ากับตัวต้านทานซึ่งทำหน้าที่ พูลอัพ(Pull-up) ภายในซึ่งมีผลให้บิตนั้น ๆ ของพอร์ต 1 , 2 และ3 เป็นภาวะของลอจิกสูง ตัวต้านทานนี้มีค่าประมาณ 50 กิโลโอห์ม ซึ่งเป็นค่าที่สูงมาก และทำให้อุปกรณ์ภายนอกสามารถขับสัญญาณของพอร์ตเหล่านี้เป็นลอจิกต่ำได้ง่าย สำหรับบิตของพอร์ต 0 นั้นแม้ว่าจะมีหลักการทำงาน คล้ายคลึงกับบิตของพอร์ตอื่น ๆ แต่เนื่องจากการที่ไม่มีตัวต้านทาน ทำหน้าที่พูลอัพ ภายในไว้ ทำให้เมื่อทรานซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาท์พุทนั้นหยุดทำงาน ก็จะเป็นผลให้ขาสัญญาณนี้อยู่ในสภาวะอิมพีแดนซ์สูงแทน

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

เมื่อมีการส่งข้อมูลที่มีค่าเป็น 0 ให้กับแต่ละบิตของพอร์ตทุกพอร์ต ข้อมูลนี้จะถูกส่งให้กับ ฟลิปฟลอป(Flip-Flop) ซึ่งจะค้างค่านี้ไว้ และมีผลทำให้ทรานซิสเตอร์ที่ทำหน้าที่ขับสัญญาณเอาท์พุทนั้นทำงานดังนั้นขาสัญญาณก็จะมีสภาวะลอจิกเป็นต่ำด้วย

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

6.1.3 ระบบอินเทอร์รัปท์ของ 8051

ใน 8051 มีอินเทอร์รัปท์อยู่ 2 ประเภทคือ อินเทอร์รัปท์ภายใน และภายนอก โดยอินเทอร์รัปท์ภายในจะเกิดภายในตัว 8051 เอง ได้แก่สัญญาณจาก ไทเมอร์แฟลก 0 (TF0) ไทเมอร์แฟลก 1(TF1) และพอร์ต อนุกรม สำหรับอินเทอร์รัปท์ภายนอกเกิดจากสัญญาณที่กระตุ้นเข้ามาที่ขาสัญญาณ INT0 และ INT1 ส่วนการที่ตัวไมโครคอนโทรลเลอรร์จะยอมให้มีการทำงานเมื่อเกิดอินเทอร์รัปท์หรือไม่ ต้องโปรแกรมไปที่ รีจิสเตอร์อินเทอร์รัปท์ อีนาเบิ้ล (IE) ถ้ามีอินเทอร์รัปท์จากหลาย ๆ ทางเข้ามาพร้อมกันสามารถจัดลำดับความสำคัญของอินเทอร์รัปท์ต่าง ๆ โดยโปรแกรมไปที่ อินเทอร์รัปท์ไพออริตี้(IP) มีรายละเอียดดังนี้

6.1.3.1 อินเตอร์รัปท์ อีนาเบิ้ล

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

รูปที่ 6-3 แสดงบิตต่าง ๆ ของรีจิสเตอร์อินเตอร์รัปท์อีนาเบิ้ล

บิต

ชื่อบิต

ตำแหน่งบิต

รายละเอียด

IE.7

EA

AFH

ถ้าเซตยอมให้มีการอินเทอร์รัปท์

IE.6

-

AEH

ไม่ใช้งาน

IE.5

ET2

ADH

อีนาเบิ้ล อินเทอร์รัปท์จากไทเมอร์2 (8052)

IE.4

ES

ACH

อีนาเบิ้ล อินเทอร์รัปท์จากพอร์ตอนุกรม

IE.3

ET1

ABH

อีนาเบิ้ล อินเทอร์รัปท์จากไทเมอร์ 1

IE.2

EX1

AAH

อีนาเบิ้ล อินเทอร์รัปท์จากขาสัญญาณ INT0

IE.1

ET0

A9H

อีนาเบิ้ล อินเทอร์รัปท์จากไทเมอร์ 0

IE.0

EX0

A8H

อีนาเบิ้ล อินเทอร์รัปท์จากขาสัญญาณ INT0

ตารางที่ 6-1 แสดงรายละเอียดของรีจิสเตอร์อินเทอร์รัปท์อีนาเบิ้ลในบิตต่าง ๆ

6.1.3.2 รีจิสเตอร์อินเทอร์รัปท์ไพออริตี้

เป็นรีจิสเตอร์ที่สามารถเข้าถึงข้อมูลระดับบิตใช้จัดลำดับความสำคัญของการอินเทอร์รัปท์ซึ่งสามารถจัดได้สองระดับ ถ้าเป็น 1 หมายความว่ามีความสำคัญสูงสุด ถ้าเป็น 0 หมายความว่ามีลำดับความสำคัญต่ำสุด

ลำดับ

อินเทอร์รัปท์

 

1 (สูงสุด)

IE0

 

2

TF0

 

3

IE1

 
4  (ต่ำสุด)

พอร์ตอนุกรม

 

ตารางที่ 6-2 แสดงลำดับการตั้งค่าความสำคัญของอินเทอร์รัปต์

 

บิต

ชื่อบิต

ตำแหน่งบิต

รายละเอียด

 

IP.7

-

-

ไม่ใช้งาน

 

IP.6

-

0BDH

ไม่ใช้งาน

 

IP.5

PT2

0BCH

ใช้กับ ไทเมอร์2(8052)

 

IP.4

PS

0BBH

ใช้กับพอร์ตอนุกรม

 

IP.3

PT1

0BAH

ใช้กับไทเมอร์1

 

IP.2

PX1

0B9H

ใช้กับอินเทอร์รัปท์จาก INT1

 

IP.1

PT0

0B8H

ใช้กับไทเมอร์0

 
IP.0

PX0

0B7H

ใชักับอินเทอร์รัปท์จาก INT0

ตารางที่ 6-3 แสดงบิตและหน้าที่ต่าง ๆ ของรีจิสเตอร์อินเทอร์รัปต์ไพออริตี้

จากตารางแสดงการอินเทอร์รัปท์จากแหล่งต่าง ๆ ที่มีผลกับไมโครคอนโทรลเลอร์ ตัวไมโครคอนโทรลเลอร์จะต้องได้รับการเซตค่า บิตต่าง ๆ ในรีจิสเตอร์อินเทอร์รัปท์ อีนาเบิ้ล เป็นาการกำหนดว่าจะให้อินเทอร์รัปท์ใดเกิดขื้นได้บ้าง จากตารางยังแสดงให้เห็นอีกว่าเมื่อมีการอินเทอร์รัปท์พเข้ามาจะมีผลต่อแฟลกใด เช่นถ้า สัญญาณ INT0 เป็น 1 บิต IE0 จะเป็น 1 หมายความว่าถูกอินเทอร์รัปท์ โดยแฟลกต่าง ๆ ที่มีผลต่อการถูกอินเทอร์รัปท์แสดงให้เห็นได้ดังตาราง

อินเทอร์รัปท์

แฟลก

ประกอบอยู่ในรีจิสเตอร์

เอ็กเตอร์นอล 0

IE0

TCON.1

เอ็กเตอร์นอล 1

IE1

TCON.3

ไทเมอร์ 1

TF1

TCON.7

ไทเมอร์ 0

TF0

TCON.5

พอร์ตอนุกรม

TI

SCON.0

พอร์ตอนุกรม

RI

SCON.1

ไทเมอร์ 2

TF2

T2CON.7 (8052)

ไทเมอร์ 2

EXF2

T2CON.6 (8052)

ตารางที่ 6-4 แสดงแพลกที่จะทำงานเมื่อถูกอินเทอร์รัปต์

จากตารางจะเห็นว่า ถ้ามีการอินเทอร์รัปท์จากภายนอกเข้ามา ตัวที่จะอินเทอร์รัปท์ 8051 คือบิตแฟลก IE0 ซึ่งอยู่ในรีจิสเตอร์ TCON ถ้ามีการสื่อสารแบบอนุกรม เมื่อข้อมูลถูกส่งไปหมดแล้วจะอินเทอร์รัปท์ 8051 ทางแฟลก TI ถ้ารับข้อมูลหมดแล้วจะอินเทอร์รัปท์ 8051 ทางบิตแฟลก RI ซึ่งอยู่ในรีจิสเตอร์ SCON และถ้าใช้ ไทเมอร์ 0 ในการนับเมื่อเกิดโอเวอร์โฟลว สามารถอินเทอร์รัปท์ 8051 ได้ทางบิต TF0

6.1.3.3 การทำงานของระบบหลังจากถูกอินเทอร์รัปท์

เมื่อไมโครคอนโทรลเลอร์ 8051 ถูกอินเทอร์รัปท์ จะต้องกระโดดไปทำโปรแกรมตอบสนองการอินเทอร์รัปท์โดยตำแหน่งที่จะกระโดดไปเรียกว่า อินเทอร์รัปท์เวกเตอร์ (Interrupt Vector) เมื่อทำโปรแกรมตอบสนองการอินเทอร์รัปท์เรียบร้อยแล้ว ไมโครคอนโทรลเลอร์ 8051 จะกระโดดกลับมายังตำแหน่งเดิม โดยก่อนที่จะกระโดดไปทำโปรแกรมตอบสนองการอินเทอร์รัปท์จะต้องเก็บค่าตำแหน่งเดิมไว้ โดยเก็บค่า โปรแกรม เคาท์เตอร์ (Program Counter) ลงหน่วยความจำที่ถูกชี้โดยรีจิสเตอร์ สแตกพอยท์เตอร์ (Stack Pointer ) เมื่อทำโปรแกรมตอบสนองการอินเทอร์รัปท์เสร็จแล้วจะคืนค่าในหน่วยความจำในสแตค ให้โปรแกรมเคาท์เตอร์ ตามเดิม ค่าอินเทอร์รัปท์ของไมโครคอนโทลเลอร์ 8051 แสดงในตาราง

อินเทอร์รัปท์

อินเทอร์รัปท์เวกเตอร์

ซิสเตม รีเซต

0000H

เอ็กเตอร์นอล 0

0003H

ไทเมอร์ 0

00BH

เอ็กเตอร์นอล 1

0013H

ไทเมอร์ 1

001BH

พอร์ตอนุกรม

0023H

ไทเมอร์ 2

002BH

ตารางที่ 6-5 แสดงอินเทอร์รัปต์เวกเตอร์ของอินเทอร์รัปต์ต่าง ๆ

6.1.3.4 การเขียนโปรแกรมอินเทอร์รัปท์

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

-      ส่วนการโปรแกรมค่าในรีจิสเตอร์ อินเทอร์รัปท์ อีนาเบิ้ล

-      ส่วนการโปรแกรมค่าในรีจิสเตอร์ อินเตอร์รัปไพออริตี้

สำหรับโปรแกรมตอบสนองการอินเทอร์รัปท์ถือว่าเป็นโปรแกรมย่อยโปรแกรมหนึ่งและต้องมีการจบโปรแกรมด้วยค่า RETI (Return from Interrupt)

รูปที่ 6-4 แสดงการจัดตำแหน่งโปรแกรมในหน่วยความจำ
การเขียนโปรแกรมต้องทำการเริ่มต้นโปรแกรมหลักให้พ้นจากหน่วยความจำซึ่งเก็บอินเทอร์รัปท์เวกเตอร์ เพราะโปรแกรมหลักอาจจะยาวจนทับส่วนอินเทอร์รัปท์เวกเตอร์ทำให้เกิดความผิดพลาดในการทำงานได้

6.1.4 การส่งข้อมูลแบบอนุกรมของ 8051

ไมโครคอนโทลเลอร์ 8051 มีพอร์ตอนุกรมเพื่อการติดต่อเป็นพอร์ตอินพุท/เอาท์พุท แบบอนุกรมโดยใช้ที่พอร์ต 3 ที่ขาสัญญาณ 10 (RxD) และขา 11 (TxD) โดยการส่งข้อมูลนั้นจะส่งข้อมูลทีละบิตจนครบไบต์ ซึ่งเมื่อเปรียบเทียบกับการส่งข้อมูลแบบขนานแล้วจะช้ากว่าแต่ส่งได้ไกลกว่า


พอร์ตอนุกรมของไมโครคอนโทลเลอร์ 8051 ทำงานแบบฟูลดูเพล็กซ์ คือสามารถรับและส่งข้อมูลได้ในเวลาเดียวกัน ซึ่งจะมีบัฟเฟอร์สำหรับเก็บข้อมูลให้ใช้คือ SBUF และ SCON ซึ่งเป็นรีจิสเตอร์ที่อยู่ใน รีจิสเตอร์ฟังก์ชันพิเศษ (Special Function Register) โดยรีจิสเตอร์ บัฟเฟอร์พอร์ตอนุกรม(SBUF) จะอยู่ในตำแหน่ง 99H ถ้าเขียนข้อมูลไปที่ตำแหน่งนี้จะเป็นการส่งข้อมูลออกทางพอร์ตอนุกรม และถ้าอ่านข้อมูลที่ตำแหน่งนี้ จะเป็นการอ่านข้อมูลทางพอร์ตอนุกรม

รูปที่ 6-5 แสดงการรับส่งข้อมูลระหว่างริจิสเตอร์กับบัสภายใน
 

รีจิสเตอร์ที่ทำหน้าที่ความคุมการส่งข้อมูลแบบอนุกรมคือ รีจิสเตอร์ความคุมพอร์ตอนุกรม(Serail Port Control Register) อยู่ที่ตำแหน่ง 98H เป็นรีจิสเตอร์ที่เข้าถึงข้อมูลระดับบิตได้ มีรายละเอียดดังนี้

บิต

ชื่อ

ตำแหน่ง

ความหมาย

SCON.7

SM0

9FH

บิตเลือกโหมดการทำงานบิต 0

SCON.6

SM1

9EH

บิตเลือกโหมดการทำงานบิต 1

SCON.5

SM2

9DH

บิตเลือกโหมดการทำงานบิต 2

SCON.4

REN

9CH

บิตแฟลกกำหนดยอมให้มีการรับข้อมูล

SCON.3

TB8

9BH

ค่าของบิต 9 สำหรับการส่งข้อมูลในโหมด 2 และ 3 สามารถเซต และ เคลียร์โดยซอฟแวร์

SCON.2

RB8

9AH

ค่าของบิตที่ 9 เมื่อรับข้อมูลเข้ามา

SCON.1

TI

99H

บิตแฟลกแสดงการอินเตอร์รัปท์ภายหลังการส่งข้อมูลออกไปโดยจะ เซต เมื่อส่งข้อมูลไปหมดแล้วและสามารถ เคลียร์โดยซอฟแวร์

SCON.0

RI

98H

แฟลกแสดงการอินเทอร์รัปท์ภายหลังการรับส่งข้อมูลเข้ามาสามารถ เคลียร์โดยซอฟแวร์

ตารางที่ 6-6 แสดงบิตต่าง ๆ ของริจิสเตอร์ SCOM

SM0

SM1

Mode

ความหมาย

Baud Rate

0

0

0

Shift Register

เปลี่ยนแปลงไม่ได้(Oscillator Frequency / 12)

0

1

1

8-bit UART

สามารถเปลี่ยนแปลงได้โดยกำหนดจาก ไทเมอร์

1

0

2

9-bit UART

เปลี่ยนแปลงไม่ได้(Oscillator Frequency /12 หรือ 64)

1

1

3

9-bit UART

สามารถเปลี่ยนแปลงได้โดยกำหนดจาก ไทเมอร์

ตารางที่ 6-7 แสดงโหมดต่าง ๆ ของการรับส่งข้อมูลแบบอนุกรม

โหมดของการทำงาน

8-บิต ชิฟรีจิสเตอร์ (โหมด 0)

ใช้ขารับRxD ในการรับส่งข้อมูลโดยต่อกับ ชิฟรีจิสเตอร์ ภายนอก ส่วนขา TxD จะเป็นเอาท์พุท ชิฟรีจิสเตอร์ คลอก เพื่อกระตุ้นรีจิสเตอร์ภายนอกให้เลื่อนบิตถ้ามีการส่งข้อมูลหรือรับข้อมูล 8 บิต จะเริ่มที่บิตต่ำสุดก่อน โดยมีค่าอัตราการส่ง(Baud Rate) เท่ากับ 1/12 ของความถี่ที่ใช้บนชิพในการส่งข้อมูลจะทำโดยเขียนข้อมูลไปที่รีจิสเตอร์ SBUF ข้อมูลจะถูกส่งออกมาทางขา RxD โดยจะสอดคล้องกับสัญญาณที่ออกมาทางขา TxD ซึ่งสัญญาณของขา TxD จะถูกส่งออกมาทุก ๆ รอบของแมชชีน

8-บิต UART สามารถเปลี่ยนแปลงอัตราการรับส่งข้อมูล(โหมด 1)

ในโหมดนี้จะส่งข้อมูลแบบ 10 บิตซึ่งประกอบด้วยบิตเริ่มต้น (เป็น 0) ข้อมูล 8 บิต และบิตจบ(เป็น 1) นอกจากนั้นยังสามารถกำหนดค่า อัตราการรับส่งข้อมูลได้โดยค่าอัตราการส่งนี้จะแปรตามตัวจับเวลาตัวที่ 1 ในโหมดนี้ จะส่งข้อมูลออกทาง TxD และรับข้อมูลทาง RxD ถ้าเป็นการรับข้อมูลเข้าตัวบิตหยุด จะเข้ามาทาง RB8 ใน SCONค่าอัตราการรับส่งข้อมูลที่ใช้รับส่งจะถูกกำหนดด้วย ไทเมอร์ 1 หลังจากโปรแกรมไปในตัวไทเมอร์ 1 แล้วสามารถเลือกค่า อัตราการรับส่งข้อมูลได้อีกสองค่าคือ จากไทเมอร์ 1 โอเวอร์โฟลว หาร 32 กับค่าไทเมอร์ 1 โอเวอร์โฟลว หาร16 การส่งข้อมูลจะทำการเขียนข้อมูล 8 บิตไปที่ SBUF โดยบิตที่ 9 (บิตหยุด) ให้เขียนลงใน TB8 ใน SCON จากนั้นข้อมูลจะถูกส่งออกมาทางขา TxD โดยส่ง บิตเริ่ม ออกมาก่อนตามด้วยข้อมูล 8 บิตและจบด้วยบิตจบ เมื่อข้อมูลถูกส่งออกไปหมดแล้ว อินเทอร์รัปท์แฟลก (TI) จะเป็น 1 ดังนั้นการเขียนข้อมูลลงใหม่จะต้องตรวจสอบที่บิตนี้การรับข้อมูลจะเริ่มจากเมื่อมีการเปลี่ยนแปลงลอจิกจาก 1 เป็น 0 ทางขา RxD หมายความว่า เริ่มรับบิตเริ่มต้น จากนั้นเมื่อข้อมูลอีก 8 บิตจะถูกเก็บลงใน SBUF และบิตหยุด จะถูกเก็บในบิต RB8 ของรีจิสเตอร์ SCON เมื่อข้อมูลเข้ามาครบแล้วบิต อินเทอร์รัปท์แฟลก จะถูกเซต ด้งนั้นในการอ่านข้อมูลจะอ่านได้เมื่อบิต RI ถูกเซตแล้ว เมื่ออ่านข้อมูลไปแล้วจะต้องเคลียร์บิตนี้

9-บิต UART อัตราการรับส่งข้อมูลเปลี่ยนแปลงไม่ได้ (โหมด 2)

การทำงานในโหมดนี้ไม่สามารถกำหนดค่า อัตราการรับส่งข้อมูลได้ ซึ่งค่า อัตราการรับส่งข้อมูล จะมีสองค่าคือ 1/16 และ 1/32 ของสัญญาณนาฬิกาบนชิพ การรับส่งข้อมูลจะเป็นข้อมูล 9 บิต บิตเริ่มต้นและบิตหยุด รวมทั้งหมด 11 บิต โดยข้อมูล 9 บิตจะเป็นจำนวนข้อมูล 8 บิต และบิตที่โปรแกรมได้อีก 1 บิต ซึ่งบิตนี้จะใช้เป็นพาริตี้บิต ในการส่งข้อมูลจะต้องเขียนไปที่บิต TB8 ในรีจิสเตอร์ SCON สำหรับการรับข้อมูลบิตที่ 9 จะถูกเก็บในบิต RB8

9-บิต UART สามารถเปลี่ยนแปลงอัตราการรับส่งข้อมูล(โหมด 3)

คล้ายกับโหมด 2 แต่สามารถกำหนดค่า อัตราการรับส่งข้อมูลได้ โดยการโปรแกรมไปที่ไทเมอร์ 1 หลังจากโปรแกรมแล้วยังสามารถเลือกได้อีก 2 ค่าคือ ความถี่การ โอเวอร์โฟลว ของไทเมอร์ 1 หารด้วย 16 และหารด้วย 32

การกำหนดค่าอัตราการรับส่งข้อมูลของพอร์ตอนุกรม

ในโหมด 0 และ 2 ไม่สามารถกำหนดค่าอัตราการส่งเองได้ โดยในโหมด 0 ค่าอัตราการรับส่งข้อมูลเป็น ความถี่ออสซิลเลเตอร์ หารด้วย 12 ในโหมด 2 จะมีสองค่าคือ ความถี่ออสซิลเลเตอร์หารด้วย 16 และ 64 สองค่านี้เรียกว่า SMOD 0 และ SMOD 1 ซึ่งสามารถกำหนดได้ในรีจิสเตอร์ PCON บิตที่ 7 ใน

รีจิสเตอร์ PCON นี้ไม่สามาถเข้าถึงข้อมูลระดับบิตได้ การเขียนข้อมูลลงไปทีละบิตจะต้องใช้วิธีที่เรียกว่า อ่าน-เปลี่ยนแปลง-เขียน (Read-Modify-Write) หรืออ่านค่าขึ้นมาแล้วเขียนลงไปใหม่ โหมด 1 และโหมด 3 กำหนดค่าอัตราการรับส่งข้อมูลได้ดังรูป


 

  รูปที่ 6-6 แสดงการกำหนดอัตราการรับส่งข้อมูลในโหมดต่าง ๆ

การใช้ค่าไทเมอร์ 1 กำหนดค่า อัตราการรับส่งข้อมูล ทำได้โดยกำหนดค่าลงใน ไทเมอร์ 1 ทำได้โดยการโปรแกรมที่ TMOD ให้ทำงานแบบ 8 บิต รีโหลดอัตโนมัติ (Auto Reload) (โหมด 2) โดยเขียนค่าไปที่ TH1 ถ้าต้องการอัตราการรับส่งข้อมูล ต่ำ ๆ สามารถใช้ โหมด 16 บิต ได้โดยโปรแกรมเป็น TMOD = 0001xxxxB ค่าอัตราการรับส่งข้อมูล ที่ส่งออกมาจะมีค่าเท่ากับ ความถี่ของไทเมอร์ 1 โอเวอร์โฟลว หารด้วย 32 (หรือหารด้วย 16 ถ้า SMOD=1)

6.2 การสื่อสารในรูปแบบพอร์ตอนุกรมโดยใช้อินฟาเรด

ในการสื่อสารระหว่างคอมพิวเตอร์กับ ไมโครคอนโทรลเลอร์แบบอนุกรมนั้น มีข้อดี คือระยะของการสื่อสารมากกว่าแบบขนาน โดยแบบอนุกรมจะส่งข้อมูลทีละบิต แล้วไปเข้า UART จัดการให้เป็นข้อมูลแบบขนานอีกครั้ง โดยต้องมีการกำหนดอัตราการรับส่งข้อมูลให้ตรงกัน ระหว่างตัวไมโครคอนโทรลเลอร์ และ อัตราการรับส่งข้อมูลของพอร์ตอนุกรม ของคอมพิวเตอร์มาตรฐานที่ใช้มีสองแบบคือ อาร์เอส232(RS232 )และ อาร์เอส232(RS485) ในที่นี้จะกล่าวเฉพาะ RS232

6.2.1 มาตรฐานการสื่อสาร แบบ อาร์เอส232

เป็นการสื่อสารแบบอนุกรม ซึ่งระดับโวลเตจแตกต่างจากที่ใช้ในระบบดิจิทอลทั่วไปโดยระดับสัญญาณของ อาร์เอส232 เป็นแบบไบโพลาร์ (Bipolar) จะแทนระดับลอจิกด้วยไฟฟ้าสองขั้ว ระดับโวลเตจทางด้านลบช่วง –3V ถึง 20V แทนค่าลอจิก 1 และโวลเตจทางด้านช่วงบวกช่วง +3 V ถึง +12V
แทนค่าลอจิก 0

รูปที่ 6-7 แดสงการเปรียบเทียบระดับโวลเตจของระบบดิจิตอลกับการสื่อสารโดยอาร์เอส 232

ดังนั้นในการใช้งานถ้าจะส่งข้อมูลที่เป็นดิจิตอลเช่นพอร์ตอนุกรมของไมโครคอนโทรลเลอร์ติดต่อกับคอมพิวเตอร์โดยใช้มาตรฐานอาร์เอส232 ต้องมีอุปกรณ์หรือวงจรพิเศษเพื่อทำการแปลงระดับโวลเตจให้ถูกต้องตามมาตรฐาน

6.2.2 วงจรกำเนิดสัญญาณนาฬิกา

เป็นวงจรที่ให้กำเนิดสัญญาณนาฬิกาในรูปแบบ ของคลื่นต่อเนื่องในระดับโวลเตจทีทีแอล(TTL) หรือสัญญาณต่อเนื่องแบบดิจิตอล


 


            ในการให้กำเนิดสัญญาณนาฬิกานั้นให้ไอซีเบอร์ 555 โดยมีลักษณะดังรูป
 

รูปที่ 6-11 แสดงการเชื่อมต่อวงจรเพื่อสร้างสัญญาณนาฬิกา

การคำนวณความถี่ต้องใช้ค่าความต้านทาน และค่าตัวเก็บประจุ RA, RB และ C ตามลำดับ โดยสูตรเป็นดังนี้

 F = 1.44/(RA + 2RB)C

6.3 สเต็ปปิ้งมอเตอร์และการขับสเต็ปปิ้งมอเตอร์

สเต็ปปิ้งมอเตอร์

            เป็นมอเตอร์ที่มีการแยกการจ่ายไฟให้ขดลวดเป็นหลาย ๆ ขดเพื่อให้แต่ละการจ่ายไฟเข้าแต่ละขดทำให้เกิดการเหนี่ยวนำทำให้ตัวแม่เหล็กซึ่งเป็นแกน หมุนไปทีละสเตป ใช้ในงานที่ต้องการความละเอียด ซึ่งต่างจากดีซีมอเตอร์ หรือมอเตอร์กระแสตรงธรรมดา ที่มีขดลวดเพียงขดเดียว   ดังรูป

รูปที่ 6-11 แสดงวงจรภายในสเตปปิ้งมอเตอร์

จากรูปจะเห็นว่า การที่จะทำให้มอเตอร์หมุนไปทีละสเตปต้องจ่ายขั้วที่ขั้วเบอร์ 1 และที่เหลือ ต้องจ่ายไฟขั้งตรงข้ามและต้องจ่ายให้ถูกจังหวะเพื่อการหมุนจะได้เป็นสเตปต่อเนื่องกันไป

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

6.3.1 การขับสเตปปิ้งมอเตอร์

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

รูปที่ 6-12 แสดงรายละเอียดของไอซี

จากรูปสัญญาณควบคุมต่างใช้ระดับโวลเตจ ทีทีแอลส่วนไฟที่จ่ายให้สเตปปิ้งมอเตอร์จะออกมาเป็นจังหวะตามที่กำหนดไว้ที่ขาโดยการขับแบ่งเป็น 3 โหมดคือ

  • เวฟไดรฟว์ ไฟที่ออกจากเอาท์พุทเป็นจังหวะ A-B-C-D ซึ่งเป็นโหมดที่ประหยัดพลังงานและได้ความแม่นยำในเรื่องของทางหรือการวัดค่า
  • สองเฟส ไฟที่ออกจากเอาท์พุทเป็นจังหวะ  AB-BC-CD-DA โหมดนี้จะได้ความเร็วกับทอร์กที่ดี
  • ครื่งสเตป  ไฟที่ออกจากเอาท์พุท จะเป็นจังหวะ A-AB-B-BC-C-CD-D-DA ซึ่งมีแปดช่วง สเตป





Last update : June 17, 2009 17:00 ( Thailand )

Apple, Mac, iMac, iPhone and iPod are trademarks of Apple, Inc.

Jini, Java and all Java-based are trademarks of Sun Microsystems, Inc.



JiniSoft Corporation

Copyright @ 1990 - 2009   Mr. Roongroj Rojanapo ( )

99/2 Soi Ramindra 14, Ramindra Road, Bangkane, Bangkok 10230, Thailand


E-mail : roongroj @ mac.com
SMS : 081 615-5135  ( iPhone )
FAX : 02   943-6433