|
การเชื่อมต่อพอร์ตอนุกรม
(Serial Port) กับไมโครคอนโทรลเลอร์ |
|
|
(แบบ Software) |
|
|
|
|
|
วัตถุประสงค์ |
|
|
- การควบคุมการทำงานของพอร์ตอนุกรมโดยใช้ software
|
|
|
|
|
|
|
|
|
การใช้งาน software Uart โดยใช้ ขา RX=RA0 ,TX=RA1 |
|
|
การใช้งานพอร์ตอนุกรม |
|
|
|
|
|
- เมื่อเราต้องการใช้งาน PORTB ทั้ง 8 bit หรือเพื่มพอร์ตอนุกรมในการใช้งานเพิ่มขึ้นอีก
1 พอร์ต จึงต้องใช้ขาอื่นของ MCU เป็นพอร์ตสื่อสารอนุกรม
- แต่การใช้งานพอร์ตอนุกรมแบบ software นั้นจะเป็นแบบแบบฮาล์ฟดูเพลกซ์
(Half Duplex) เป็นการส่งและรับข้อมูลแบบสลับกัน คือเมื่อด้านหนึ่งส่ง
อีกด้านหนึ่ง เป็นฝ่ายรับ สลับกัน ไม่สามารถรับ-ส่งในเวลาเดียวกันได้
- จากการทดลองนี้จะใช้ขา RA0(PIN-17) เป็นขาส่งข้อมูล (TX ) และ RA1(PIN-18)
เป็นขา รับข้อมูล (RX)
- การเชื่อมต่อกับ PC นั้นจะใช้ MAX232
เป็นตัวปรับระดับสัญญาณจาก MCU เป็นระดับสัญญาณของ RS232C
|
|
|
|
|
|
การกำหนดค่าเริ่มต้น สำหรับการใช้งานพอร์ตอนุกรม
(Initial Software
Serial Port) |
|
|
- Soft_Uart_Init(port, rx, tx,
baudrate, inverted);
- Soft_Uart_Init(PORTA, 1, 0, 9600, 0);
เป็นการ กำหนดค่าเริ่มต้นในการใช้งานพอร์ตอนุกรมแบบ software
โดยใช้ PORTA, RA1=RX , RA0=TX ,baudrate=9600, inverted=0 ไม่กลับโลจิก
(inverted=1 จะกลับโลจิก)
|
|
|
|
|
|
การใช้งานฟังก์ชั่นการเขียนอ่านพอร์ตอนุกรม |
|
|
- unsigned short Soft_Uart_Read(unsigned short
*received); ตรวจสอบว่ามีข้อมูลส่งมาครบแล้วหรือไม่ถ้าครบแล้ว
received
ไม่เป็น 0 ฟังก์ชั่นนี้จะReturn ค่าที่ได้รับมา
- Soft_Usart_Write();
ส่งข้อมูล 1 byte
|
|
|
|
|
|
- ฟังก์ชั่นส่งข้อมูล String
void TxStrSw(char
*Str);
- เป็นการส่งข้อมูล String ที่ปิดท้ายด้วย NULL (null terminate string)
- ดังนั้นการกำหนดข้อมูล stringจะต้องปิดท้ายด้วย NULL หรือเขียนแทนด้วย
character \x0
- เช่น char
Msg[]="Hello world \r\n\x0";
|
|
|
|
|
|
NOTE: |
|
|
- เนื่องจากเป็นพอร์ตอนุกรมโดยใช้ software จึงไม่ได้มีการ Interrupt เหมือน
hardware ดังนั้นจึงต้องเขียนโปรแกรมวนมาอ่านให้ทัน
|
|
|
|
|
|
ตัวอย่างการรับส่งข้อมูลอนุกรมแบบ Software |
|
|
EXAM6 |
|
|
//***PIC16F628***
//Clock 4Mhz
//Compiler mikroC 5.0
//Describtion: Test Software UART with PORTA
//Send "Hello world" to Software UART Port
//and Echo when receive char
// RX RA1(PIN-18)
// TX RA0(PIN-17)
//Send C-String with NULL-Terminate
void TxStrSw(char *Str)
{
int i;
i=0;
while(Str[i]!=0)
{
Soft_UART_Write(Str[i]);
i++;
}
}
unsigned short RxBuff,RcvOK;
char Msg[]="Hello world \r\n\x0";
void main()
{
CMCON=7; //Set PORTA is digital output
//initialize Soft UART(8 bit, 9600 baud rate, no parity bit...
Soft_Uart_Init(PORTA, 1, 0, 9600, 0);
//Send Message
TxStrSw(Msg);
while (1)
{
do
{
RxBuff = Soft_Uart_Read(&RcvOK); // receive RxBuff
} while (RcvOK);
Soft_UART_Write(RxBuff); // send RxBuff via UART
}
}
|
|
|
|
|
|
|
|
|
|
|
|
|
ผลการทำงาน |
|
|
เมื่อเริ่มต้นจะส่ง "Hello world"
ไปยัง PC หลังจากนั้นเมื่อได้รับอักษรใดจาก PC ก็จะส่งอักษรนั้นกลับไป (Echo) |
|
|
|
|
|
|
|
|
|
|