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

📄 uart.bak

📁 STC51系列单片机通过vk3x系列芯片扩展串口的源码
💻 BAK
字号:
#include "stc51reg.h"

//***************************************************************
void config()
{
	WDT_CONTR = 0x00;	// Watchdog Timer Control Register 关闭看门狗定时器。
	PCON  = 0x00;

    SCON = 0x50;     // Serial Port Control Register
    SCON &= 0xFC; 	 //clear interrupt pending flags
    TH1   = 0xFD;    // Timer 1 High Byte
    TL1   = 0xFD;
    TMOD  = 0x20;    // Timer Mode Register
    TCON  = 0x40;    // Timer Control Register 


}
//初始化单片机
//*************************************************************************

//********************************************************************
void uart_sendByte(unsigned char dat)
{
	SBUF=dat;
	while(!TI);				  //waite for data to transmit completely
    SCON &= 0xFD;
}
//通过串口发送1个字节的数据,dat为发送的数据
//**************************************************************************

//***************************************************************************
unsigned char uart_recByte(void)
{
	unsigned char rec=0;
	while(!RI);			   	  //waite to recieve data in SBUF0
	rec=SBUF;
    SCON &= 0xFE;
	return rec;
}
//接收一个字节的数据,函数返回读取到的数据
//***************************************************************************

//***************************************************************************
unsigned char read_reg(unsigned char port,unsigned char reg)
{
	uart_sendByte(((port-1)<<4)+reg);
	return uart_recByte();
}
//读取寄存器的值,port为子串口的路数,reg为寄存器的地址,返回值是寄存器的值
//***************************************************************************

//****************************************************************************
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
	uart_sendByte(0x80+((port-1)<<4)+reg);
	uart_sendByte(dat);
}
//往寄存器里面写数据,port为子串口的路数,reg为寄存器的地址,dat 为写入寄存器的值
//****************************************************************************

//*******************************************************************************
unsigned char *read_fifo(unsigned char port,unsigned char num)
{
	unsigned char n;
	unsigned char * dat;
	uart_sendByte(0x40+((port-1)<<4)+num);
	for(n=0;n<num;n++)
	{	
		*(dat+n)=uart_recByte();	
	}
	return dat;
}
//读取fifo中的数据,port为子串口的路数,num是读取的数据的个数,函数返回读取到的
//数据的首地址指针
//*****************************************************************************

//*****************************************************************************
void write_fifo(unsigned char port,unsigned char *p,unsigned char num)
{
	unsigned char n;
	uart_sendByte(0xc0+((port-1)<<4)+num);	
	for(n=0;n<num;n++)
	uart_sendByte(*(p+n));
}
//写fifo,port为子串口的路数,num是读取的数据的个数,p是将要写入数据的首地址
//****************************************************************************







/*
#include "C8051F020.h"
 // P0.0 = UART TX0        (Push-Pull Output)
 // P0.1 = UART RX0        (Open-Drain Output/Input)
//***************************************************************
void config()
{
	WDTCN = 0x07;	// Watchdog Timer Control Register
    WDTCN = 0xDE;   // Disable WDT
    WDTCN = 0xAD;

	PCON  = 0X00;
    P0MDOUT = 0x01; // Output configuration for P0 
    P1MDOUT = 0x40; // Output configuration for P1 


	XBR0   = 0x04;	// XBAR0: Initial Reset Value
	XBR1   = 0x00;	// XBAR1: Initial Reset Value
	XBR2   = 0xC0;	// XBAR2: Initial Reset Value

    SCON0 = 0x50;    // Serial Port Control Register
    SCON0 &= 0xFC; 	//clear interrupt pending flags

    CKCON = 0x10;   // Clock Control Register
    TH1   = 0xF9;    // Timer 1 High Byte

    TMOD  = 0x20;    // Timer Mode Register
    TCON  = 0x40;    // Timer Control Register 
				     // P0.0 = UART TX0        (Push-Pull Output)
					 // P0.1 = UART RX0        (Open-Drain Output/Input)

}
//初始化单片机
//*************************************************************************

//********************************************************************
void uart_sendByte(unsigned char dat)
{
	SBUF0=dat;
	while(!TI0);				  //waite for data to transmit completely
    SCON0 &= 0xFD;
}
//通过串口发送1个字节的数据,dat为发送的数据
//**************************************************************************

//***************************************************************************
unsigned char uart_recByte(void)
{
	unsigned char rec=0;
	while(!RI0);			   	  //waite to recieve data in SBUF0
	rec=SBUF0;
    SCON0 &= 0xFE;
	return rec;
}
//接收一个字节的数据,函数返回读取到的数据
//***************************************************************************

//***************************************************************************
unsigned char read_reg(unsigned char port,unsigned char reg)
{
	uart_sendByte(((port-1)<<4)+reg);
	return uart_recByte();
}
//读取寄存器的值,port为子串口的路数,reg为寄存器的地址,返回值是寄存器的值
//***************************************************************************

//****************************************************************************
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
	uart_sendByte(0x80+((port-1)<<4)+reg);
	uart_sendByte(dat);
}
//往寄存器里面写数据,port为子串口的路数,reg为寄存器的地址,dat 为写入寄存器的值
//****************************************************************************

//*******************************************************************************
unsigned char *read_fifo(unsigned char port,unsigned char num)
{
	unsigned char n;
	unsigned char * dat;
	uart_sendByte(0x40+((port-1)<<4)+num);
	for(n=0;n<num;n++)
	{	
		*(dat+n)=uart_recByte();	
	}
	return dat;
}
//读取fifo中的数据,port为子串口的路数,num是读取的数据的个数,函数返回读取到的
//数据的首地址指针
//*****************************************************************************

//*****************************************************************************
void write_fifo(unsigned char port,unsigned char *p,unsigned char num)
{
	unsigned char n;
	uart_sendByte(0xc0+((port-1)<<4)+num);	
	for(n=0;n<num;n++)
	uart_sendByte(*(p+n));
}
//写fifo,port为子串口的路数,num是读取的数据的个数,p是将要写入数据的首地址
//****************************************************************************


*/






⌨️ 快捷键说明

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