这段代码要改成这样,例如:发送01 06 00 01 00 17 接收01 06 00 01 00 17
有大神帮我改改吗,刚学还有很多不懂
void Uart3_Init(void)
{
S3CON |= 0x50; //串口3选择定时器3为波特率发生器,启动串行接收器
S3CON &= 0x70; //8位数据,可变波特率
T3H=(65536-(MAIN_Fosc/12/4/BAUD))/256;
T3L=(65536-(MAIN_Fosc/12/4/BAUD))%256;
T4T3M |= 0x08; //允许定时器3运行
IE2 |= 0x08; // 串口3中断打开
IE2 &= 0xDF; // 关闭定时器3中断
EA = 1; // 总中断打开
}
void SendDataByUart3(uint8 dat)
{
S3BUF = dat; //写数据到UART数据寄存器
while(!(S3CON&S3TI)); //在停止位没有发送时,S3TI为0即一直等待
S3CON&=~S3TI; //清除S3CON寄存器对应S3TI位(该位必须软件清零)
}
void U3SendString(uint8 *s)
{
IE2 &= 0xF7; // 串口3中断关闭
while (*s) //检测字符串结束标志
{
SendDataByUart3(*s++); //发送当前字符
}
IE2 |= 0x08; // 串口3中断打开
}
int main()
{
P0M1 &= 0xFE; P0M0 &= 0xFE; //设置P0.0为准双向口
P0M1 &= 0xFD; P0M0 |= 0x02; //设置P0.1为推挽输出
rs485_dr=0; //控制485接收
Uart3_Init();
while(1)
{
if(temp1==50) //接收到的数为“2”
{
rs485_dr=1; //控制485发送
U3SendString("Hello World\r\n"); //通过串口2发送字符串“FIYU”
uart3_rflage=0; //清零串口2接收标识符
rs485_dr=0; //控制485接收
delay_ms(10); //初始化后延时
temp1=0; //清零接收的临时数据
}
}
}
void Uart3() interrupt 17 using 1
{
IE2 &= 0xF7; // 串口3中断关闭
if (S3CON & S3RI) //串行接收到停止位的中间时刻时,该位置1
{
S3CON &= ~S3RI; //清除S3CON寄存器对应S3RI位(该位必须软件清零)
temp1 = S3BUF; //把串口3缓存SBUF寄存器数据存放到数组temp1中
uart3_rflage = 1;
}
if (S3CON & S3TI) //在停止位开始发送时,该位置1
{
S3CON &= ~S3TI; //清除S3CON寄存器对应S3TI位(该位必须软件清零)
}
IE2 |= 0x08; // 串口3中断打开
}
|