本人正在用ARM通过max485对台达变频器通讯,<br />大家看看程序有没有问题<br />/****************************************************************************<br />* 文件名:SENDSTR.C<br />* 功能:向串口发送数据。<br /><br />****************************************************************************/<br />#include "config.h"<br /><br />#define INT8U unsigned char <br />#define UART_BPS 19200 /* 定义通讯波特率 */<br />INT8U OUT_BUF2[17]={0x3a, 0x30,0x31, 0x30,0x36, 0x32,0x30,0x30,0x31, 0x30,0x30,0x31,0x32, 0x43,0x37, 0x0D,0x0A};//通讯协议<br />/****************************************************************************<br />* 名称:DelayNS()<br />* 功能:长软件延时<br />* 入口参数:dly 延时参数,值越大,延时越久<br />* 出口参数:无<br />****************************************************************************/<br />void DelayNS(uint32 dly)<br />{ uint32 i;<br /><br /> for(; dly>0; dly--) <br /> for(i=0; i<5000; i++);<br />}<br /><br /><br />//#define UART_BPS 19200 /* 定义通讯波特率 */<br />/****************************************************************************<br />* 名称:UART0_Ini()<br /><br />****************************************************************************/<br />void UART1_Ini(void)<br />{ uint16 Fdiv;<br /><br /> U1LCR = 0x87; // DLAB = 1,可设置波特率<br /> Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率<br /> U1DLM = Fdiv / 256; <br /> U1DLL = Fdiv % 256; <br /> U1LCR = 0x07;<br />}<br /> <br /><br />/****************************************************************************<br />* 名称:UART0_SendByte()<br />* 功能:向串口发送字节数据,并等待发送完毕。<br />* 入口参数:data 要发送的数据<br />* 出口参数:无<br />****************************************************************************/<br />void UART1_SendByte(uint8 data)<br />{ <br /> U1THR = data; // 发送数据<br /> while( (U1LSR&0x40)==0 ); // 等待数据发送完毕<br />}<br /><br /><br />/****************************************************************************<br />* 名称:UART0_SendStr()<br />* 功能:向串口发送一字符串<br />****************************************************************************/<br />void UART1_SendStr()<br />{ <br /> INT8U i;<br /> <br /> for(i=0;i<17;i++)<br /> {<br /> IO0SET|=0x10;<br /> UART1_SendByte(OUT_BUF2);<br /> IO0CLR|=0x10;<br /> }<br /> <br />}<br /><br /><br /><br />/****************************************************************************<br />* 名称:main()<br />* 功能:<br />****************************************************************************/<br />int main(void)<br />{ <br /> PINSEL0 = 0x00050000;// 设置I/O连接到P0.4(收发控制IO)<br /> IO0DIR=0x10; <br /> UART1_Ini();<br /><br /> while(1) <br /> { <br /> UART1_SendStr();<br /> DelayNS(10);<br /> }<br /> return(0);<br />}<br /><br /><br />不知道发送程序有没有问题,调试到<br /> U1THR = data; // 发送数据<br /> while( (U1LSR&0x40)==0 ); // 等待数据发送完毕<br /><br />变频器就显示通讯错误。<br /> |
|