- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2024-06-14 17:41:01
新手上路
- 积分
- 13
|
void InitUart2(uint BAUD) //9600bps@11.0592MHz
{
P_SW2 &= ~0x01; //UART2/USART2: RxD2(P1.0), TxD2(P1.1)
S2CON = 0x10; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = (65536 - (FOSC/4/BAUD)); //设定定时初值
T2H = (65536 - (FOSC/4/BAUD))>>8; //设定定时初值
AUXR |= 0x10; //定时器2开始计时
IE2 = 0x01; //使能串口中断
EA = 1;
b485Send2 = 0; //处于接收
}
void Uart2() interrupt 8
{
//接收
if (S2CON & 0x02)
{
S2CON &= ~0x02; //清除S2RI位
receTimeOut2 = 10; //通讯超时值这个地方很重要 10ms
receBuf2[receCount2] = S2BUF; //把接收到的数据送往接收缓冲区
receCount2++; //接收地址偏移寄存器加1
}
//发送
if (S2CON & 0x01)
{
S2CON &= ~0x01; //清除S2TI位
busy2 = 0; //清忙标志
}
}
void uartsends2(uchar buff[],uchar len)
{
uchar i;
for(i=0;i<len;i++)
{
S2BUF = buff;
busy2 = 1;
while (busy2); 一直卡到这里
}
}
void Begin_send2(void)
{
b485Send2 = 1; //处于发送
Delay1ms();
Delay1ms();
uartsends2(sendBuf2,sendCount2);
b485Send2 = 0; //处于接收
Delay1ms();
Delay1ms();
receCount2 = 0; //清接收地址偏移寄存器
}
|
|