首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MSP430之RS485主从模式工作

MSP430之RS485主从模式工作

msp430串口通讯有rs232,还有rs485,具体可查下rs485资料,实际制作了一些代码供大家使用。
#include "msp430x44x.h" void Init(void); void Tinit(void); int Data[6]={0XFE,0XFD,0XFC,0XFB,0XFA,0XF9}; unsigned int i,j,p,COUNT=0; void main(void) { WDTCTL=WDTPW+WDTHOLD; FLL_CTL0&=0xBF ; P6DIR=0XFF; P6OUT=0X00; Init(); Tinit(); _EINT(); while(1); } void Init(void) { UCTL1&=~SWRST; //SWRST复位,USART允许 UCTL1=CHAR+MM; //8位数据位,1位停止位,地址位模式 UBR01=0X03; UBR11=0X00; UMCTL1=0X4A; //使用32KHZ晶振时钟,波特率为9600BPS UTCTL1=SSEL0; //选定为ACLK为时钟源 ME2|=UTXE1 + URXE1; //UART1发送及接收模块允许 P4SEL=BIT0+BIT1; //定义P4.0,P4.1口为发送及接收 P4DIR|=BIT0+BIT2; //P4.0,P4.2是输出 P4DIR&=~BIT1; P4OUT |=BIT2; } void Tinit(void) { TACTL = TASSEL0 + TACLR; CCTL0 |= CCIE; CCTL0 &=~CCIFG; CCR0 = 32768; TACTL |= MC0; } interrupt[TIMERA0_VECTOR] void Timer_A (void) { if(i<5) {if(COUNT==0) { UTCTL1|=TXWAKE; TXBUF1=0X01; while((UTCTL1&0X01)==0); } else { UTCTL1&=~TXWAKE; TXBUF1=Data[i++]; while((UTCTL1&0X01)==0); } COUNT=1; } else {
if(p==0)
{
UTCTL1|=TXWAKE;
TXBUF1=0X02;
while((UTCTL1&0X01)==0);
p=1;
}
else
{
UTCTL1&=~TXWAKE;
TXBUF1=Data[j++];
while((UTCTL1&0X01)==0);
}
}
if(j>5)
{
i=0;
j=0;
COUNT=0;
p=0;
}
}

#include "msp430x44x.h" void Init(void); void Out_data(void); unsigned int j,t,i; void main(void) { WDTCTL=WDTPW+WDTHOLD; //FLL_CTL0&=0xBF ; Init(); _EINT(); while(1); //{ //Out_data(); // } } void Init(void) { P6DIR=0XFF; P6OUT=0XFF; UCTL1|=CHAR+MM; //8位数据位,1位停止位,地址位模式 URCTL1|=URXWIE; //只有地址字符使URXIFG置位 UBR01=0X03; UBR11=0X00; UMCTL1=0X4A; //使用32KHZ晶振时钟,波特率为9600BPS UTCTL1|=SSEL0; //选定为ACLD为时钟源 ME2|=URXE1+UTXE1; //UART1发送及接收模块允许 P4SEL|=BIT1+BIT0; //定义P4.0,P4.1口为发送及接收 P4DIR|=BIT2+BIT0; P4DIR &=~ BIT1; P4OUT &=~BIT2; UCTL1&=~SWRST; //SWRST复位,USART允许 IE2|=URXIE1; //接收中断允许 } void Out_data(void) { if(j<10) TXBUF1=j++; else j=0; for(t=0;t<5000;t++); } interrupt[USART1RX_VECTOR] void USATR1RX(void) { if(URCTL1&URXWIE) { if(RXBUF1==49) {URCTL1&=~URXWIE; for(t=0;t<5000;t++); P4OUT|=BIT2; // TXBUF1=5; // for(t=0;t<10000;t++); loop: if(i>0) {TXBUF1=i; i=i-1; for(t=0;t<10000;t++); goto loop; } else i=9; P4OUT&=~BIT2; URCTL1|=URXWIE; } } }
返回列表