Lab9. Control LED by RS – 232


#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