MSP430F149程序——RS485

  • Post author:
  • Post category:其他




一、引脚说明



1.1 接口定义

485引脚 功能说明
DE、RE 置为高电平则处于发送状态,置为低电平则处于接收状态



1.2 硬件连接

485引脚 430引脚
DE、RE P4.0



二、移植文件

将 485.c 、 485.h 文件加入到工程文件夹下



2.1 485.c

#include <msp430x14x.h>
#include "485.h"

//9600.8.N.1

extern char str[30];//最终显示的字符串
char data = 0;
void Set_UART1(void)
{
        UCTL1 |= SWRST; //置为1
	UCTL1 |= CHAR; //选择8-bit字符
	UTCTL1 |= SSEL1; //驱动时钟选择外部时钟
	UBR01 = 0x41; //波特率9600
	UBR11 = 0x03;
	UMCTL1 = 0x00; //调整
        ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
	UCTL1 &= ~SWRST; 置为0  初始化UART状态机
	IE2 |= URXIE1; // 中断允许寄存器设置,接收中断允许
        P3SEL |= BIT6 + BIT7; //将P3.6,P3.7选做UART1的通信端口
        P3DIR |= BIT6; //设置TX口方向为输出
        DRE_out;//连接485芯片的DE,RE端口的IO设置为输出状态
}

void Send1Char(char sendchar)//发送一个字符
{
	while (!(IFG2 & UTXIFG1)); //等待发送寄存器为空
	TXBUF1 = sendchar;
}

void PutString0(char *ptr)//基于发送一个字符函数实现发送字符串
{
	while (*ptr != '\0')
	  Send1Char(*ptr++); // 发送数据         
}

void _485(void)
{
      Set_UART1();//UART1初始化
      DE;//设置485芯片处于发送状态
      PutString0("1你好天朝hello world........test485");
      delay_ms(5);
      _EINT();//打开串行中断
      RE;//设置485芯片处于接收状态
}


//串口接收中断,接收字符串指令.
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx(void)
{  
    data = RXBUF1;//data保存接收到的字符

    //测试代码 收到什么发什么
    DE;//设置485芯片处于发送状态
    Send1Char(data);
    delay_ms(5);
    RE;//设置485芯片处于接收状态
    
    /*
    str[i]=data;
    i++;
    if(i==10)//缓冲区满就发出
    {
        str[i]=0;
        i=0;
        DE;//设置485芯片处于发送状态
        PutString0(str);
        delay_ms(5);
        RE;//设置485芯片处于接收状态
    }
    */
    /*
    if(data=='#')//监听到结束字符'#' 就发出之前的字符串并显示在液晶上
    {
        str[i - 1]=0;
        mLCD_ClearLCD();
        mLCD_WriteStrings(0,0,"revice",0);
        mLCD_WriteStrings(0,16,str,0);
        mLCD_LCDDISP();
        DE;//设置485芯片处于发送状态
        PutString0(str);
        delay_ms(5);
        RE;//设置485芯片处于接收状态
        i=0;
    }
    */
}



2.2 485.h


#define CPU_F ((double)8000000)        //内部延时函数所需时钟频率/Hz
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)(x)/1000.0))

#define DRE_out   P4DIR |= BIT0 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE        P4OUT |= BIT0 //设置485芯片处于发送状态
#define RE        P4OUT &= ~BIT0 //设置485芯片处于接收状态

void Set_UART1(void);
void PutString0(char *ptr);
void Send1Char(char sendchar);
void _485(void);

由 LiangJian 写于 2019 年 10 月 15 日



版权声明:本文为qq_29916855原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。