『分享』使用AVR來撰寫RS232傳輸程式

小編之前工作上常會需要用到使用RS232來控制生產線機台彼此之間的動作同步,這些機台皆是使用RS232來進行機台彼此之間的資訊交流與傳輸,本篇文章會分享AVR如何藉由Rs232來達到機台之間彼此的傳輸,備註:以下為AVR燒錄至晶片中的程式代碼非電腦控制程式代碼。
    AVR與RS232程式範例(相關解說資訊請參考程式碼中註解)  

/* Define */
#ifndef F_CPU
#define F_CPU 16000000UL // IC fequence
#endif
#define baud 9600 //baud rate
/* Include */
#include <avr/io.h>
#include <util/delay.h>
unsigned char getRs232Valu;
/* port init function */
void PortInit(void)
{
     DDRA  = 0xFF;
     /* Set port A input */
     PORTA = 0xFF;
     /* Set port ping 1111 1111  設定全亮 */
}
/* Rs232 init function */
void uart0_init(void)
{
     UCSRB=0X00;
     UCSRA=0X00;
     UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
     UBRRL=(F_CPU/16/(baud+1))%256;
     UBRRH=(F_CPU/16/(baud+1))/256;
     UCSRB|=(1<<TXEN)|(1<<RXEN);
}
/* rs232 get function */
unsigned char uart0_read(void)
{
     while(!(UCSRA&(1<<RXC)));
     return UDR;
}
 /* Rs232 send function */
void uart0_send(unsigned char i)
{
    while(!(UCSRA&(1<<UDRE)));
    UDR=i;
}
int main(void)
{
    /**** Set init value ****/
    PortInit();
    uart0_init();
    while(1)
    {
        /****   以下為 RS232 control Function 相關動作流程 ****/
        /* get date ,傳送date到AVR */
        getRs232Valu = uart0_read();
        /* sent date , 發送資料到電腦 */
        uart0_send(getRs232Valu);
     }
}