#include <p30f2010.h> //เปิดใช้งานไลบรารี dspic30F2010
#include<uart.h> //เปิดใช้งานไลบรารี uart เพื่อส่งข้อมูลแบบ RS-232
#include<stdio.h> //เปิดใช้งานไลบรารี stdio.h เพื่อการแปลงข้อมูล
_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(); //ปิดการทำงาน Uart1
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 บิต
char buffer[30]; //ประกาศตัวแปรชื่อ buffer เป็นตัวอักษร 8 บิต ขนาด 30 ตัวอักษร
uart1_init(); //เรียกใช้งานฟังก์ชัน Uart1
TRISB = 0; //กำหนดให้พอร์ต B เป็น output
_LATB0 = 0; //port B0 OFF
_LATB1 = 0; //port B1 OFF
_LATB2 = 0; //port B2 OFF
Uart1_PrintStr("Press 1-3 Key For Turn on LED\n\r"); //ส่งค่า Press 1-3 Key For Turn on LED ออก RS - 232
for(;;){ //for loop สำหรับรับค่าจาก RS - 232
while(DataRdyUART1()){ //เมื่อมีการรับค่าจาก RS – 232 (จากการกดคีย์บอร์ด)
ch = ReadUART1(); //เก็บค่าที่ได้ไว้ที่ตัวแปร ch
if(ch != 13){ //ถ้าค่าที่ได้ไม่ใช่ 13 หรือการกด Enter
if(ch == '1'){ //ถ้าค่าที่เก็นไว้ที่ตัวแปร ch = 1 (การกดเลข 1 บนคีย์บอร์ด)
_LATB0 = !_LATB0; //port B0 ON
_LATB1 = 0; //port B1 OFF
_LATB2 = 0; //port B2 OFF
sprintf(buffer,"Number:%c LED1 HIGH\r\n",ch); //แปลงค่า Number:1 LED1 HIGH เก็บไว้ที่ตัวแปร buffer
putsUART1((unsigned int *)buffer); //ส่งค่า Number:1 LED1 HIGH ที่เก็บไว้ที่ buffer ออก RS - 232
}
else if(ch == '2'){ //ถ้าค่าที่เก็นไว้ที่ตัวแปร ch = 2 (การกดเลข 2 บนคีย์บอร์ด)
_LATB1 = !_LATB1; //port B1 ON
_LATB0 = 0; //port B0 OFF
_LATB2 = 0; //port B2 OFF
sprintf(buffer,"Number:%c LED2 HIGH\r\n",ch); //แปลงค่า Number:2 LED2 HIGH เก็บไว้ที่ตัวแปร buffer
putsUART1((unsigned int *)buffer); //ส่งค่า Number:2 LED2 HIGH ที่เก็บไว้ที่ buffer ออก RS - 232
}
else if(ch == '3'){ //ถ้าค่าที่เก็นไว้ที่ตัวแปร ch = 2 (การกดเลข 2 บนคีย์บอร์ด)
_LATB2 = !_LATB2; //port B2 ON
_LATB1 = 0; //port B1 OFF
_LATB0 = 0; //port B0 OFF
sprintf(buffer,"Number:%c LED3 HIGH\r\n",ch); ////แปลงค่า Number:3 LED3 HIGH เก็บไว้ที่ตัวแปร buffer
putsUART1((unsigned int *)buffer); //ส่งค่า Number:3 LED3 HIGH ที่เก็บไว้ที่ buffer ออก RS - 232
}
}
else{ //ถ้ากด Enter บนคีย์บอร์ด
Uart1_PrintStr("Turn off LED\n\r"); //lส่งค่า Turn off LED ออก RS - 232
_LATB0 = 0; //port B0 OFF
_LATB1 = 0; //port B1 OFF
_LATB2 = 0; //port B2 OFF
}
while(BusyUART1()); //รอจนกว่า Uart1 จะทำงานเสร็จเรียบร้อย
}
}
return 0; //Reset ค่าเริ่มต้น
}
โปรแกรมนี้เป็นการรับค่าจากคีย์บอร์ดเพื่อเปิด – ปิด พอร์ต B0 – B2 คือการกด เลข 1 เพื่อเปิด B0 กดเลข 2 เพื่อเปิด B1 กดเลข 3 เพื่อเปิด B2 กด Enter เพื่อปิดทั้งหมด และส่งค่าสถานะออก RS – 232