MSP430F149的串口RS485接口
RS485通信基本原理和使用方法同RS232,不同點(diǎn)如下。
本文引用地址:http://m.butianyuan.cn/article/201611/322347.htmRS232接口只能實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的通信方式,但這種方式不能實(shí)現(xiàn)聯(lián)網(wǎng)功能,便出現(xiàn)了RS485解決了這個(gè)問(wèn)題。RS485采用差分信號(hào)負(fù)邏輯,+2V~+6V表示“1”,- 6V~- 2V表示“0”。雙機(jī)通信時(shí)只需A-A,B-B連接。
硬件電路一般采用SN65176等RS485電平轉(zhuǎn)換芯片。與MCU相連時(shí)有三個(gè)引腳:DE(RE同DE連在一起),DI(接受引腳),RO(發(fā)送引腳)。MCU發(fā)送一幀信號(hào)時(shí),要先使能DE=1;接收信號(hào)前要先使能DE=0(即RE=0)。
二、實(shí)例
2.1 發(fā)送字符8.N.1.2400
#define DRE_out P3DIR |= BIT3 //連接485芯片的DE,RE端口的IO設(shè)置為輸出狀態(tài)
#define DE P3OUT |= BIT3 //設(shè)置485芯片處于發(fā)送狀態(tài)
void Set_UART1(void)
{
P3SEL |= 0xC0; //將P3.6,P3.7選做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //選擇8-bit字符
UTCTL1 |= SSEL0; //驅(qū)動(dòng)時(shí)鐘選擇ACLK
UBR01 = 0x0D; //波特率2400
UBR11 = 0x00;
UMCTL1 = 0x6B; //調(diào)整
UCTL1 &= ~SWRST; //初始化UART狀態(tài)機(jī)
}
main
{
DRE_out;
DE;
Set_UART1();
TXDATA = 0X30;
TXBUF1 = TXDATA; //這里可直接賦值傳送固定的數(shù)據(jù)
while(!(IFG2 & UTXIFG1)); //等待發(fā)送結(jié)束
……
}
2.2 中斷函數(shù)接收字符8.N.1.2400
void Set_UART1(void)
{
P3SEL |= 0xC0; //將P3.6,P3.7選做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //選擇8-bit字符
UTCTL1 |= SSEL0; //驅(qū)動(dòng)時(shí)鐘選擇ACLK
UBR01 = 0x0D; //波特率2400
UBR11 = 0x00;
UMCTL1 = 0x6B; //調(diào)整
UCTL1 &= ~SWRST; //初始化UART狀態(tài)機(jī)
IE2 |= URXIE1; //使能UART1接收中斷
}
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX (void)
{
Disp1Char(pX++,pY,RXBUF1);
if(pX == 16)
{
pX = 0;
pY ^= 1;
}
}
評(píng)論