以下是点对多点通信系统的从程序。
/**************************************************************/
/*说明:UART点对多点多机通信从机程序 */
/*UART1以9600bps,8位数据,1位地址,1位停止模式发送。 */
/*当地址位时,确认呼叫,接收后面字符,并检查结束0。 */
/***************************************************************/
Include <msp430x14x.h>
Void Init(void);
#define ADDR 0x01;
Char Data[20],Buffer[20];
Unsigned charj,count;
Void main()
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
Init();
_EINT();
While(1);
}
Void Init(void)
{
UCTL1&=~SWRST; //SWRDT复位,UART允许
UCTL1=0x10+MM; //8位数据位,1位停止位,地址位模式
UBR01=0x03;
UBR11=0x00;
UMCTL1=0x4A; //使用32kHZ晶振,波特率为9600bps
UTCTL1=0x10; //选定ACLK(32kHZ晶振)为时钟源
ME2|=0x30; //UART发送,接收模块允许。
P3SEL=0xC0; //P3.6、P3.7由UART1发送模块占用
P3DIR=0x40; // P3.6输出
IE2=URXIE1; //接收允许中断
}
#pragma vector=UART1RX_VECTOR
__interrupt void UART1RX(void)
{
If(URCTL&URXWIE) //接收为地址方式时等待正确的地址出现
{
If(RXBUF1==ADDR) //地址正确,改变为接收数据方式,准备接收
{
URCTL1&=~URXWIE;
Count=0;
}
}
Else //接收为数据方式时
{
Data[count]=RXBUF1; //数据存入Data数组中
If(Data[count++]==0) //是否到达末尾
{
URCTL1|=URXWIE; //到达末尾时改变接收为地址方式
For(j=0;j<count;j++)
Buffer[j]=Data[j]; //复制字符串
}
}
}