การใช้งานโมดูล UART
     ก่อนอื่นขออธิบายก่อนนะครับว่า UART คืออะไร UART ย่อมาจากคำว่า Universal Asynchronous Receiver Transmitter คือการสื่อสาร
ข้อมูลอนุกรมกับอุปกรณ์อื่น เป็นการสื่อสารแบบ Full duplex คือการรับและส่งข้อมูลได้ในเวลาเดียวกัน

     สำหรับไมโครคอนโทรลเลอร์ เบอร์ 16F877 นั้น จะมีโมดูล UART ให้ใช้งาน 1 โมดูล ซึ่งติดต่อผ่านทางขา TX และ RX ที่ขา RC6 และ RC7 ตามลำดับ ดังรูปด้านล่าง
     การใช้งานโมดูล UART ด้วยคอมไพเลอร์ CCS ได้จัดเตรียม Build-in function ไว้ให้เรียบร้อยแล้ว สามารถเรียกใช้งานฟังก์ชั่นได้เลย
โดยสามารถใช้งาน UART ได้ทั้งแบบ Hardware หรือ แบบ Software ก็ได้

     แบบ Hardware หมายถึงการใช้งานตัวโมดูล Uart ที่มีอยู่ในไมโครคอนโทรลเลอร์ ซึ่งการใช้งานแบบ Hardware สามารถที่จะรับส่งข้อ
มูลผ่านทางอินเตอร์รัปต์ได้

     แบบ Software หมายถึงการใช้ Software จำลองการทำงานของการของ Uart ขึ้นมา ไม่สามารถรับและส่งข้อมูลด้วยวิธีอินเตอร์รัปต์ได้
ตัวอย่างการใช้งาน UART แบบ Hardware

[กลับหน้าหลัก]

#include <16f877.h>
#device adc=16
#FUSES NOWDT                          //No Watch Dog Timer
#FUSES HS                                    //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                            //No Power Up Timer
#FUSES NOBROWNOUT            //No brownout reset
#FUSES NOLVP                            //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                           //No EE protection
#FUSES WRT                                //Program Memory Write Protected
#FUSES NODEBUG                      //No Debug mode for ICD
#FUSES NOPROTECT                 //Code not protected from reading

#use delay(clock=20000000)

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)

void main (void)
{
char data;

     printf("www.mcuthailand.com\n\r");
     putc('>');

     while(true){
     data = getc();
     putc(data);
     if(data==0x0d){
     putc('>');
     }
}

}

ตัวอย่างโปรแกรม
     จากตัวอย่างนี้ใช้ไมโครคอนโทรลเลอร์เบอร์ PIC16F877 ทำงานที่ความถี่ 20 MHz อัตรา Baud rate 9600 ใช้งาน Uart แบบ Hardware ขา RC6 เป็นขา TX ทำหน้าที่ส่งข้อมูล และขา RC7 เป็นขา RX ทำหน้าที่รับข้อมูล
ตัวอย่างการใช้งาน UART แบบ Software
     ตัวอย่างนี้เป็นการใช้งาน Uart แบบ Software โดยสามารถกำหนดขาใดก็ได้ให้เป็นขา TX และ RX นอกเหนือจากขา RC6 และ RC7 ซึ่งเป็นขา Hardward ของ Uart จากรูปด้านล่างจะกำหนดให้ขา RD0 และขา RD1 เป็นขา TX และขา RX ตามลำดับ สื่อสารกันที่อัตรา Baud rate 9600

#include <16f877.h>
#device adc=16
#FUSES NOWDT                          //No Watch Dog Timer
#FUSES HS                                    //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                            //No Power Up Timer
#FUSES NOBROWNOUT            //No brownout reset
#FUSES NOLVP                            //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                           //No EE protection
#FUSES WRT                                //Program Memory Write Protected
#FUSES NODEBUG                      //No Debug mode for ICD
#FUSES NOPROTECT                 //Code not protected from reading

#use delay(clock=20000000)

#use rs232(baud=9600,xmit=pin_d0,rcv=pin_d1)

void main (void)
{
char data;

     printf("www.mcuthailand.com\n\r");
     putc('>');

     while(true){
     data = getc();
     putc(data);
     if(data==0x0d){
     putc('>');
     }
}

}

ตัวอย่างโปรแกรม