小編之前工作上常會需要用到使用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);
}
}