การเชื่อมต่อพอร์ตอนุกรม (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
    }
}
 
 
     
 
DOWNLOAD
 
     
  ผลการทำงาน  
  เมื่อเริ่มต้นจะส่ง "Hello world" ไปยัง PC หลังจากนั้นเมื่อได้รับอักษรใดจาก PC ก็จะส่งอักษรนั้นกลับไป (Echo)