单片机 485 通信
#include<ioCC2530.h>
void SendCahar(unsigned char temp)
{
U0DBUF = temp;
;
}
void main(void)
{
int j;
InitUART();
while(1)
{
if(i==5) _tempRtflag=1;
if(_tempRtflag==1)
{
Delay_ms(7);
P0_1=1;
for(j=0;j<i;j++)
{
SendCahar(Recdata[j]);
}
i=0;
_tempRtflag=0;
//开启串口中断
Delay_ms(10);
P0_1=0;
}
}
}
void InitUART()
{
//晶振配置
CLKCONCMD &= ~0x40; //设置系统时钟源为 32MHZ 晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为 32M
CLKCONCMD &= ~0x47; //设置系统主时钟频率为 32MHZ
SLEEPCMD |= 0x04; //关闭不用的RC振荡器
//I/O口配置
P0DIR = 0x02; //485发送接受控制位
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5 用作串口,第二功能
P2DIR &= ~0XC0; //P0 优先作为 UART0 ,优先级
//串口配置
U0CSR |= 0x80; //UART 方式
U0GCR |= 11; //U0GCR 与 U0BAUD 配合
U0BAUD |= 216; // 波特率设为 115200
UTX0IF = 0; //UART0 TX 中断标志初始置位 1 (收发时候)置0表示禁止中断
P0_1=0; //默认是接受数据
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; // 开总中断,接收中断
}
void Delay_ms(unsigned int xms) //i=xms 即延时 i 毫秒
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void) //接受完成后,进行数据发送,发送完成在尽心接受
{
while((URX0IF))
{
URX0IF = 0; //中断标志置0,等待下一次发送,中断发生时置
Recdata[ i++]=U0DBUF; //U0CSR读取缓冲区的字节后,就为0 了
}
}
串口调试助手 向485发送数组,通过分布调试,一直显示接收到的数据不完整