Thaimicrotron.com |
Home |
|
การเชื่อมต่อพอร์ตอนุกรม
(Serial Port) กับไมโครคอนโทรลเลอร์ |
|
|
(แบบ Hardware) |
|
|
|
|
|
วัตถุประสงค์ |
|
|
|
|
|
|
|
|
|
|
|
การใช้งาน hardware Uart |
|
|
การใช้งานพอร์ตอนุกรม |
|
|
|
|
|
- ไมโครคอนโทรลเลอร ์ตระกูล PIC จะมีวงจรสื่อสารอนุกรม UART
(Universal Asynchronous Receiver Transmitter) แบบ Full
Duplex คือ สามารถรับและส่งข้อมูล ได้พร้อมกันอยู่ 1 ชุด สำหรับ
PIC16F6xx จะเป็นขา RB1(PIN-7) เป็นขารับข้อมูล (RX ) และ RB2(PIN-8) เป็นขา
ส่งข้อมูล (TX)
- สำหรับ CCS PICC นั้นเราไม่จำเป็นต้องรู้การทำงานของ
Register ควบคุมพอร์ตอนุกรมเลย เพียงแต่
เมื่อใช้ฟังก์ชั่น #use rs232 โดยกำหนดขา
TX,RX ให้ตรงกับ hardware ของ PIC16F6xx คอมไพเลอร์จะรู้ว่าเราต้องการที่จะใชพอร์ตอนุกรมแบบ
hardware
- การเชื่อมต่อกับ PC นั้นจะใช้ MAX232
เป็นตัวปรับระดับสัญญาณจาก MCU เป็นระดับสัญญาณของ RS232C
|
|
|
|
|
|
การกำหนดค่าเริ่มต้น สำหรับการใช้งานพอร์ตอนุกรมแบบ
Hardware (Initial hardware
Serial Port) |
|
|
- #use
rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8
เมื่อให้ xmit=PIN_B2,rcv=PIN_B1
เป็นการ กำหนดค่าเริ่มต้นในการใช้งานพอร์ตอนุกรมแบบ hardware
|
|
|
|
|
|
การใช้งานฟังก์ชั่นการเขียนอ่านพอร์ตอนุกรม |
|
|
- kbhit(); ตรวจสอบว่ามีข้อมูลส่งมาหรือไม่
- getc(); อ่านข้อมูล
1 byte จาก buffer
- printf(); ส่งข้อมูลออกทางพอร์ตอนุกรม
|
|
|
|
|
|
|
|
|
ตัวอย่างการรับส่งข้อมูลอนุกรมแบบ Hardware |
|
|
RS232.C |
|
|
#include <16F628.h>
#use delay(clock=4000000)
#fuses XT,PUT,BROWNOUT,MCLR,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
void main()
{
int c;
printf("Hello World\r\n");
while(1)
{
if(kbhit()) //Check data Receive
{
c=getc(); //Get data
printf("%c",c); //Echo
}
}
}
|
|
|
|
|
|
|
DOWNLOAD |
|
|
|
|
|
ผลการทำงาน |
|
|
เมื่อเริ่มต้นจะส่ง "Hello World"
ไปยัง PC หลังจากนั้นเมื่อได้รับอักษรใดจาก PC ก็จะส่งอักษรนั้นกลับไป (Echo) |
|
|
|
|
|
|
|
|
|
|
|
- เมื่อเราต้องการใช้งาน PORTB ทั้ง 8 bit หรือเพื่มพอร์ตอนุกรมในการใช้งานเพิ่มขึ้นอีก
1 พอร์ต จึงต้องใช้ขาอื่นของ MCU เป็นพอร์ตสื่อสารอนุกรม
- แต่การใช้งานพอร์ตอนุกรมแบบ software นั้นจะเป็นแบบแบบฮาล์ฟดูเพลกซ์
(Half Duplex) เป็นการส่งและรับข้อมูลแบบสลับกัน คือเมื่อด้านหนึ่งส่ง
อีกด้านหนึ่ง เป็นฝ่ายรับ สลับกัน ไม่สามารถรับ-ส่งในเวลาเดียวกันได้
- จากการทดลองนี้จะใช้ขา RA0(PIN-17) เป็นขาส่งข้อมูล (TX ) และ RA1(PIN-18)
เป็นขา รับข้อมูล (RX)
- การเชื่อมต่อกับ PC นั้นจะใช้ MAX232
เป็นตัวปรับระดับสัญญาณจาก MCU เป็นระดับสัญญาณของ RS232C
|
|
|
|
|
|
การกำหนดค่าเริ่มต้น สำหรับการใช้งานพอร์ตอนุกรมแบบ
Software (Initial
hardware
Serial Port) |
|
|
- #use
rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8
เมื่อกำหนดให้ Tx,Rx เป็นขาอื่นที่ไม่ใช่
Hardware UART Compiler จะใช้ software จำลองการทำงานให้
|
|
|
|
|
|
|
|
|
การใช้งาน Software
Uart |
|
|
|
|
|
|
|
|
|
|
|
ASCII Code
( American Standard Code for Information Interchange) |
|
|
คือตารางรหัสมาตรฐานที่นิยมใช้ในการรับส่งข้อมูลแบบอนุกรม ประกอบด้วยรหัสควบคุม
00H-1FH และรหัสตัวอักษร 20H-7FH |
|
|
ข้อมูลตัวอักษร (Character) |
|
|
เป็นข้อมูลขนาด 1 ไบท์มีค่าตั้งแต่ 20H-7FH ในรหัส ASCII และ
80H-FFH เป็นรหัสตัวอักษรเพิ่มเติม เช่นภาษาไทย |
|
|
ข้อมูลสตริง (String) |
|
|
ข้อมูลสตริง คือข้อมูลตัวอักษรที่ต่อกันเป็นสายยาวและแสดงจุดสิ้นสุดข้อมูลด้วยค่า
NULL หรือ 00 |
|
|
|
|
|
|
|