迪文串口5使用查询方式发送数据

迪文屏串口5寄存器如下

迪文串口5使用查询方式发送数据_第1张图片

发送数据我采用的不是中断,而是查询发送标志位实现的。

串口5不像串口2一样(串口2可以位寻址,串口5不行),所以如果采用查询模式,需要判断寄存器的数据,我的写法比较简单,没有使用移位操作来判断(高手勿喷)。

程序如下所示:

//发送一个字节
void u5_send_byte(u8 byte)
{
	
	EA = 0;
	
	SBUF3_TX = byte;
	
	while(!(SCON3T & 0X01 == 0X01));//判断TI未是否发送完成 置1---发送完成
	
	SCON3T &= 0XFE;//TI位第一位清0
	
	EA = 1;
}

//发送数据 
void u5_send_bytes( u8 *bytes,u16 len)
{
	u16 i;

	for(i=0;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发送数据了

本文章记录开发过程及帮助遇到同样困难的网友。

你可能感兴趣的:(单片机,嵌入式硬件)