迪文屏串口5寄存器如下
发送数据我采用的不是中断,而是查询发送标志位实现的。
串口5不像串口2一样(串口2可以位寻址,串口5不行),所以如果采用查询模式,需要判断寄存器的数据,我的写法比较简单,没有使用移位操作来判断(高手勿喷)。
程序如下所示:
//发送一个字节
void u5_send_byte(u8 byte)
{EA = 0;SBUF3_TX = byte;while(!(SCON3T & 0X01 == 0X01));//判断TI未是否发送完成 置1---发送完成SCON3T &= 0XFE;//TI位第一位清0EA = 1;
}//发送数据
void u5_send_bytes( u8 *bytes,u16 len)
{u16 i;for(i=0;i<len;i++)u5_send_byte(bytes[i]);
}
但调试过程中也遇到了一点小问题,迪文官方对串口5初始化代码如下:
void UART5_Init(u32 bdt)
{u16 tmp;SCON3T = 0X80;SCON3R = 0X80;tmp=FOSC/8/bdt;BODE3_DIV_H = (u8)(tmp>>8);BODE3_DIV_L = (u8)tmp;;IEN1 |= 0X30;//接收中断使能 发送中断使能
}
官网接收与发送全部使用的是中断处理,如果使用查询“发送标志”的方法来实现串口发送,这里需要把发送中断使能屏蔽掉,寄存器如下
需将程序改为如下:
void UART5_Init(u32 bdt)
{u16 tmp;SCON3T = 0X80;SCON3R = 0X80;tmp=FOSC/8/bdt;BODE3_DIV_H = (u8)(tmp>>8);BODE3_DIV_L = (u8)tmp;;IEN1 |= 0X20;//接收中断使能 发送不中断使能
}
这样的话就能使用查询的方法是串口5发送数据了
本文章记录开发过程及帮助遇到同样困难的网友。