#include <p30f2010.h> //เปิดใช้งานไลบรารี dspic30F2010
#include<uart.h> //เปิดใช้งานไลบรารี uart เพื่อส่งข้อมูลแบบ RS-232
_FOSC(CSW_FSCM_OFF & XT_PLL4); // โหมดการทำงาน แบบ XT คริสตอล 4 - 10 MHz มี PLLx4 คือ ทวีคูณความถี่ของ clock 4 เท่า
_FWDT(WDT_OFF); //ปิดการทำงาน watchdog Timer
#define Fcy 7372800.0 //Fcy = (Fosc*PLLx)/4
#define BAUD_RATE 9600.0
#define BAUD_RATE_GEN (Fcy/(16*BAUD_RATE))-1;
void uart1_init()
{
unsigned int ConfigU1MODE,ConfigU1STA,BaudRate;
CloseUART1(); //ปิดการทำงาน uart
ConfigU1MODE = UART_EN & // Enable UART1
UART_IDLE_CON & // UART1 working in idle mode
UART_RX_TX& // UART1 normal pin (TX==>RF3 pin,RX==>RF2 pin)
UART_DIS_WAKE & // Disable wake-up on start UART
UART_DIS_LOOPBACK & // Disable loop back mode
UART_DIS_ABAUD & // Disable autobaud mode
UART_NO_PAR_8BIT & // Set data 8 bit ,no parity bit
UART_1STOPBIT; // Set 1 stop bit
ConfigU1STA = UART_INT_TX_BUF_EMPTY & // Interrupt on buffer empty mode
UART_TX_PIN_NORMAL & // TX Break bit normal
UART_INT_RX_CHAR& // UART interrupt receive mode
UART_ADR_DETECT_DIS & // Disable detect address mode
UART_RX_OVERRUN_CLEAR; // Reset buffer over run
BaudRate = BAUD_RATE_GEN;
OpenUART1(ConfigU1MODE, ConfigU1STA, BaudRate); //เปิดการใช้งาน Uart1
}
void Uart1_PrintStr(unsigned char *str_uart){ //ฟังก์ชันการส่งข้อมูล RS-232
putsUART1((unsigned int *)str_uart);
while(BusyUART1());
}
int main(void)
{
unsigned char ch; //ประกาศตัวแปรชื่อ ch เป็นตัวอักษร 8 บิต
uart1_init(); //เรียกใช้งานฟังก์ชัน Uart1
_TRISD0 = 0; //กำหนดให้พอร์ต D0 เป็น output
_LATD0 = 0; //port D0 OFF
for(;;){ //for loop สำหรับรับค่าจาก RS - 232
while(DataRdyUART1()){ //เมื่อมีการรับค่าจาก RS – 232 (จากการกดคีย์บอร์ด)
ch = ReadUART1(); //เก็บค่าที่ได้ไว้ที่ตัวแปร ch
if(ch != 13){ //ถ้าค่าที่ได้ไม่ใช่ 13 หรือการกด Enter
putcUART1(ch); //ส่งข้อมูลที่เก็บค่าในตัวแปร ch ออก RS - 232
_LATD0 = !_LATD0; //กลับสถานะที่เกิดที่พอร์ต D0 จาก OFF เป็น ON
if(_LATD0 == 1){ //ถ้า D0 ON
Uart1_PrintStr(" D0 HIGH.\n\r"); //ส่งค่า D0 HIGH ออก RS - 232
}
else{ //ถ้า D0 OFF
Uart1_PrintStr(" D0 LOW.\n\r"); //ส่งค่า D0 LOW ออก RS - 232
}
}
else{ //Loop ch!=13 ถ้ากด Enter
putsUART1((unsigned int *)"\n\r"); //ขึ้นบรรทัดใหม่
}
while(BusyUART1()); //รอจนกว่า Uart1 จะทำงานเสร็จเรียบร้อย
}
}
return 0; // Reset ค่าเริ่มต้น
}
โปรแกรมนี้เป็นการใช้งาน Uart1 เพื่อทำการเปิด – ปิด พอร์ต D0 คือการรับค่าจากคีย์บอร์ดปุ่มใดๆก็ได้ยกเว้น ปุ่ม Enter เพื่อควบคุมพอร์ต D0 และแสดงสถานะออกมาที่ Hyperterminal แต่ถ้ากด Enter ที่ Hyperterminal ก็จะขึ้นบรรทัดใหม่