原创 【TI博客大赛】MSP430之RS485主从模式工作

2012-11-30 13:20 2078 8 8 分类: MCU/ 嵌入式

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; } } }

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条