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]); //每发送一个字节就产生一次中断,等待发送完成 //UTX0IF为1表示一个字节发送完成,后面就不发送了
}
i=0;
U0CSR|=0x02;
_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 |= 10; //U0GCR 与 U0BAUD 配合 U0BAUD |=216; // 波特率设为 57600
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–);
}
void UartSend_String(char *Data, int len){ int j;
Delay_ms(7);
P0_1=1;
for(j=0;j<len;j++) {
U0DBUF = *Data++;
while(!UTX0IF); //每发送一个字节就产生一次中断,等待发送完成 //UTX0IF为1表示一个字节发送完成,后面就不发送了
UTX0IF = 0;
}
Delay_ms(20);
_temptxflag=0;
RS485_TX_EN=0;
}
#pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) //接受完成后,进行数据发送,发送完成在尽心接受
{
temp=U0DBUF; URX0IF = 0;
Recdata[i++]=temp;
}
串口助手发送5个字节的数组,在程序分布调试中,只能接受到最后一个字节。中断也就进入一次
VV:
串口助手的配置和CC2530的配置一样么?