1、大体框架:实现单片机和PC机之间的通讯。
PC机(USB接口)发送字符,经过USB 转RS232,再经过RS232转RS485,到单片机(RS485 接口)接收字符。
2、程序设计如下: 分步调试的过程中,无论发送什么样的字符,RXBUF1变量始终是0X01。求指导!!!
/***********************************************
程序功能:通过RS485端口接收传感器的数据,然后通过RS232把数据传出到显示屏
------------------------------------------------
测试说明:首先查看RS485接收到的数据,然后用串口调试工具,查看发出的数据,最后再调试显示屏上面内容是否显示正确
温湿度传感器的数据命令格式:01 03 00 00 00 02 C4 0B;01设备地址,03功能号,02表示数据长度,C4 0B表示CRC校验码
************************************************/
#include
#define DRE_out P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE P3OUT |= BIT3 //设置485芯片处于发送状态 ,DE为高电平,
#define RE P3OUT &= ~BIT3 //设置485芯片处于接收状态(RE为低电平,接收器输出使能
char tmp;
void Set_UART1(void);
/****************主函数****************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
DRE_out;
RE; //设置485处于接收状态
Set_UART1();
while (1)
{
_EINT(); //打开全局中断
while(IFG2 & URXIFG1);
tmp=RXBUF1;
}
}
/*******************************************
函数名称:Set_UART1
功 能:设置MCU的UART1对应的寄存器
参 数:无
返回值 :无
********************************************/
void Set_UART1(void)
{
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD(接收中断使能)
P3DIR |=BIT6; //输出
P3DIR &=~BIT7; //输入
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x03; //波特率9600
UBR11 = 0x00;
UMCTL1 = 0x4A; //调整
UCTL1 &= ~SWRST; //初始化UART状态机
IE2 |= URXIE1; // 使能USART1的接收中断
}
//发送字符串
void SendString(void)
{
unsigned int i;
for(i=0;i<=7;i++)
{
while(!(IFG2 & UTXIFG1)); //等待发送结束 ,UTXIFG1发送中断标志
TXBUF1 = send_data_buf; //发送字符
}
}
//------------------------------------------------------------------------------
//延时函数
void Delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i
}
//-----------------------------------------------------------------------------
//延时函数
void Delay_ms(char n)
{
unsigned int i,j,k;
for(i=0;i
{
for(k=0;k<5;k++)
{
for(j=0;j<200;j++);
}
}
}