MSP430的485通信程序(接收字符串指令)

原文地址:http://www.eeworld.com.cn/mcu/article_2016081828680.html

**************************************************************

程序功能:通过RS485端口一次一次地收发数据
---------------------------------------------------------------
测试说明:用示波器观察RS485端口A、B信号线

                上的波形或者用RS485接收器接收发回
                 的字符,在串口助手上显示。
***************************************************************/
#include  <msp430x14x.h>

#define DRE_out     P3DIR |= BIT3     //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE          P3OUT |= BIT3     //设置485芯片处于发送状态 
#define RE          P3OUT &= ~BIT3    //设置485芯片处于接收状态
typedef unsigned char uchar;

unsigned char string[8] ;
uchar RX_flag;

void Set_UART1(void);
void PutString0(uchar *ptr);
void Send1Char(uchar sendchar);
void PutString(uchar *ptr);


/****************主函数****************/
void main(void)
{
    unsigned int i;
   
    WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗
    P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
    DRE_out;
    RE;
    Set_UART1();
    _EINT();
   
    while (1)
    {    
      while( IFG2 & URXIFG1 );     //等待收到test命令字符
      if(RX_flag==1)  
         {  
             RX_flag=0;
             if(string[1]=='a')
             {
               DE;   
               for(i=0;i<3200;i++);
               PutString0("a11.5522.33e ");
               Send1Char('\n');
               for(i=0;i<3200;i++);
               RE;
               //LPM3;
             }
         }
        
      }
    
}
/*******************************************
函数名称:Set_UART1
功    能:设置MCU的UART1对应的寄存器
参    数:无
返回值  :无
********************************************/
void Set_UART1(void)
{
    P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口    
    ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD
    UCTL1 |= CHAR;                            //选择8-bit字符
    UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK
    UBR01 = 0x03;                             //波特率9600
    UBR11 = 0x00;
    UMCTL1 = 0x4a;                            //调整
    UCTL1 &= ~SWRST;                          //初始化UART状态机 
    IE2 |= URXIE1 ;            // 中断允许寄存器设置,接收中断允许
}


//串口接收中断,接收字符串指令.
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
   static uchar rxcount = 0;
    // LPM3_EXIT;
     if(RXBUF1 == 'e')
     {
       RX_flag =1;
       rxcount = 0;  
     }
     else
     {
       string[rxcount++] = RXBUF1;
     }   
}

 

 

/*******************************************
函数名称:Send1Char
功    能:向PC机发送一个字符
参    数:sendchar--要发送的字符
返回值  :无
********************************************/
void Send1Char(uchar sendchar)
{
      while (!(IFG2 & UTXIFG1));    //等待发送寄存器为空         
      TXBUF1 = sendchar; 
   
}
/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串并换行指令
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString(uchar *ptr)
{
      while(*ptr != '\0')
      {
            Send1Char(*ptr++);                     // 发送数据
      }
      while (!(IFG2 & UTXIFG1));
      TXBUF1 = '\n';                              //发送换行指令
}
/*******************************************
函数名称:PutSting0
功    能:向PC机发送字符串,无换行
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString0(uchar *ptr)
{
      while(*ptr != '\0')
      {
            Send1Char(*ptr++);                     // 发送数据
      }
}

关键字:MSP430  485通信  字符串指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值