【HC89S003F4开发板】 3串口调试

HC89S003F4开发板串口调试

使用资料自带的demo

主程序

/************************************系统初始化****************************************/
	WDTCCR = 0x00; //关闭看门狗
		           //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
	CLKSWR = 0x51;	//选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
	CLKDIV = 0x01;	//Fosc 1分频得到Fcpu,Fcpu=16MHz 
/**********************************UART配置初始化**************************************/
	P2M0 = P2M0&0x0F|0x80;	//P21设置为推挽输出
	P0M1 = P0M1&0x0F|0x20;	//P03设置为上拉输入
	TXD_MAP = 0x21;	//TXD映射P21
	RXD_MAP = 0x03;	//RXD映射P03		
	T4CON = 0x06;	//T4工作模式:UART1波特率发生器
	//波特率计算
	//波特率 = 1/16 * (T4时钟源频率 / 定时器4预分频比) / (65536 - 0xFF98)
	//       = 1/16 * ((16000000 / 1) / 104)
	//		 = 9615.38(误差0.16%)

	//波特率9600
	//反推初值 = (65536 - ((T4时钟源频率 / 定时器4预分频比) * (1 / 16)) / 波特率)
	//		   = (65536 - (16000000 * (1 / 16) / 9600))
	//		   = (65536 - 104.167)
	//         = FF98
	
    TH4 = 0xFF;
	TL4 = 0x98;							             //波特率9600
	SCON2 = 0x02;						             //8位UART,波特率可变
	SCON = 0x10;					               //允许串行接收
	IE |= 0X10;							             //使能串口中断
	EA = 1;							              	 //使能总中断
    
	while(1)
	{
		if(guc_Uartflag)
		{
			IE &=~ 0x10;				            //失能UART1中断
			for(guc_i= 0;guc_i<guc_Uartcnt;guc_i++)
			{
				SBUF = guc_Uartbuf_a[guc_i];  //发送8位串口数据
				while(!(SCON & 0x02));
				SCON &=~ 0x02;			          //清除发送中断标志位
			}
			IE |= 0x10;					            //UART1中断使能
			guc_Uartflag = 0;
			guc_Uartcnt = 0;
			SCON |= 0x10;				            //UART1接收使能
		}	
	}

中断接收程序

void UART1_Rpt(void) interrupt UART1_VECTOR
{
	if(SCON & 0x01)	//判断接收中断标志位
	{
		guc_Uartbuf_a[guc_Uartcnt++] = SBUF;//转存8位串口接收数据
		if(guc_Uartcnt >= 5)
		{
			SCON &=~ 0x10;	//失能UART1接收
			guc_Uartflag = 1;
		}
		  SCON &=~ 0x01; //清除接收中断标志位
	}									
}

实际效果

image
image

连续打印

封装成函数

void PrintString(char* buf)
{
	int sub = 0;
	while(buf[sub] != 0)
	{				
		SBUF = buf[sub];  //·¢ËÍ8λ´®¿ÚÊý¾Ý
		while(!(SCON & 0x02));
		SCON &=~ 0x02;			          //Çå³ý·¢ËÍÖжϱê־λ
		sub++;
	}
}

主程序while里改成

    char sendbuf[] = "串口发送
";
    PrintString(sendbuf);

实际输出

image

原文地址:https://www.cnblogs.com/yywBlogW/p/11367456.html