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

📄 uart.c

📁 使用ch375和stc 51写的usb鼠标的代码
💻 C
字号:
#ifndef __UART_C__
#define __UART_C__
#endif

#include "head.h"
#include <reg52.h>
#include <string.h>
#include "uart.h"

extern uint8 eaCount;
//-----------------------------------
// 串行口通讯子程序
// 串行口初始化
// 晶振22.0592M, SMOD=1, 使用6T, 波特率115200
//波特率=晶振频率/(256-定时器计数)/(一条指令的机器周期)
//-----------------------------------
void ComInit(void)
{
    TMOD = 0x21;         	//T1为方式2, t0模式1
    TH0=0x00;				//定时器0用于定时
   	TL0=0x00;
    TH1  = 0xFe;         	//
    TL1  = 0xFe;
    PCON = PCON | 0x80;  	//SMOD=1
    SCON = 0x50;         	//串行口工作在方式3
    TR0 = 1;
    TR1 = 1;
    ET0=1;
    EA = 1;
}
// 发送数据
void SendChar(unsigned char buff)
{
    SBUF = buff;
    while( !TI );
    TI=0;
}

//发送数组
void uartPut(uint8 dat[], uint8 len)
{
		uint8 i;
		ENTER_CRITICAL();
		for(i=0; i<len; i++)
		{
				SendChar(dat[i]);
		}
		EXIT_CRITICAL();
}

//--------------------------------
//发送字符串
//--------------------------------
void  uartPutStr(uint8 *str)
{
		uint8 len;
		len = strlen(str);
		uartPut(str, len);
}

//------------------------------------------
//把bsd码数据转换成ascii码的
//如:123转换为 49(1) 50(2) 51(3)
//dat[]是2个字节的数组,存放16进制返回数据
//原始数据放到dat[0]
//-------------------------------------------
void bcdToAscii(uint8 dat[])
{
		uint8 idata temp;
		temp = dat[0];
		dat[0] = (temp>>4);
		if(0<=dat[0] && dat[0]<10)					//数字0-9
		{
				dat[0] += 48;					//转换到数字对应的ascii码0(48)1(49)
		}
		else											//数字10(a)-15(f)
		{
				dat[0] += 55;					//转换到数字对应的ascii码10(a)(65)
		}
		dat[1] = (temp&0x0f);
		if(0<=dat[1] && dat[1]<10)					//数字0-9
		{
				dat[1] += 48;					//转换到数字对应的ascii码0(48)1(49)
		}
		else											//数字10(a)-15(f)
		{
				dat[1] += 55;					//转换到数字对应的ascii码10(a)(65)
		}
}

//-----------------------------------------------
//发送数字, 一个数字由两个ASCII码组成, 为16进制
//比如, 0xef发送为e和f两个字符
//----------------------------------------------
void uartPutNum(uint8 *num, len)
{
		uint16 	idata n;
		uint8 	idata temp[2];
		if(NULL!=num)
		{
				 for(n=0; n<len; n++)
				 {
				 			*(temp) = *(num+n);
				 			bcdToAscii(temp);
				 			uartPut(temp, 2);
				 }
		}
}

//---------------------------------------------------------
//函数功能:
//打印字符串, 和一个已知长度的数字数组
//参数说明:
//format		字符串, 在有%的地方打印数字
//num				数字数组指针
//len				数字数组长度
//---------------------------------------------------------
void uartPrint(const char *format, uint8 *num, uint8 len)
{
		if(NULL!=format)
		{
				uint16 idata count, i;
				i=strlen(format);
				for(count=0; count<i; count++)
				{
						if('%'!=(*(format+count)))
						{
								uartPut(format+count, 1);
						}
						else
						{
								uartPutNum(num, len);
						}
				}
		}
		else
		{
				return;
		}

}

⌨️ 快捷键说明

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