⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 王绍伟先生的单片机入门资料
💻 C
字号:
/*************************************************/

/**************串行口控制********************/

/*************2003年1月24日*********************/

/************WROTE BY WANGSW********************/

/*
UART所需的定时器由T1或T2提供,而不是T0

	SCON:串行口控制寄存器
	SM0(9F),SM1(9E)
		SM0,SM1|工作方式|        说明 			|所用波特率 
        	   0,0     |  方式0       |同步移位寄存器|       Fosc/12                 
      		   0,1     |  方式1       | 10位异步收发       |由定时器控制 
       	   1,0     |  方式2       | 11位异步收发       |Fosc/32或Fosc/64     
       	   1,1     |  方式3       | 11位异步收发       |由定时器控制
       SM2(9D)		多机通信0:单机,1:多机
       REN(9C)		接收控制0:禁止接收,1:允许接收    
       TB8	(9B)		发送数据第九位
       RB8	(9A)		接收数据第九位
       TI	(99)		发送中断标记
       RI	(98)		接收中断标志
*/

#include "reg52x2.h"
#include <stdlib.h>
#include <stdio.h>
#include "define.h"

#include "string.h"

#include "uart.h"

static void UartInterruptServer(void);





/******************************************************************************************
*函数名:		UartInterruptServer
*参数:			无
*返回值:		无
*描述:			串口中断服务子程序
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
static void UartInterruptServer(void) interrupt 4
{
	ES = 0;
	RI = 0;
	//msg_queue_in(MSG_KEY, SBUF);		/*用串口模拟按键*/

	msg_queue_in(MSG_UART,SBUF);
	ES=1;
}









/******************************************************************************************
*函数名:		uart_init
*参数:			eBaudRate
*返回值:		无
*描述:			串口初始化程序,主要设定了波特率以及T1作为波特率产生
				器的工作方式等,并且指定了串口数据以及命令存放堆栈
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void uart_init(UartBaudrate eBaudRate)
{
	ES = 0;			/*关串行口中断*/	
	
	

	SETBIT(PCON, 7);
	
	TMOD &= 0x0F;
	TMOD |= 0x20;
	ET1 = 0;				/*中断无效*/
	TH1 = eBaudRate;
	TL1 = eBaudRate;
	TR1 = 1;				/*定时器开启*/
	SCON = 0x50;

	ES = 1;				/*串行口中断printf需要串口关闭*/
}


extern void uart_send_byte(byte val)
{
	bool bES;
	bES = ES;		
	ES = 0;
	SBUF = val;
	while(!TI);
	TI = 0;
	ES = bES;
}


/******************************************************************************************
*函数名:		uart_send_data
*参数:			pData
*返回值:		len
*描述:			以串口发送以pData为首地址,len长度的字节数据
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void uart_send_string(byte* pData, byte len)
{
	bool bES;
	byte data i;
	byte data j;
	bES = ES;		/*禁止串口产生中断,而以查询的方式发送数据*/
	ES = 0;
	if(len)
	{
		i = len;
		while(i--)
		{
			SBUF = *pData++;
			while(!TI);
			TI = 0;
		}
	}
	else
	{
		i = strlen(pData);
		while(i--)
		{
			j = *pData++;
			if(j == 0x0A)
			{
				SBUF = 0x0D;
				while(!TI);
				TI = 0;
			}
			SBUF = j;
			while(!TI);
			TI = 0;
		}
	}

	ES = bES;
}




/******************************************************************************************
*函数名:		uart_process
*参数:			无
*返回值:		无
*描述:			串口处理程序,
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void uart_process(void)
{
/*
	添加自己的代码
*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -