บทที่ 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
|