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

📄 16c554.c

📁 16C554VX1128MAX4359-MAX4456P89LPC952 驱动开发
💻 C
字号:
#include <REG952.H>
#include <intrins.H>
#include "16C554.h"
#include "uart.h"

#define uchar unsigned char
#define uint unsigned int

uchar d554,s[8]={0x08,0x18,0x28,0x38,0x00,0x10,0x20,0x30};

#define RBUF_SIZE554 8
#define SIZEMASK554  0x7

static unsigned char r_in554 = 0;
static unsigned char r_out554 = 0;
static unsigned char rbuf554[RBUF_SIZE554];


static void Serial_Int1(void) interrupt 2 using 0
{
	uchar c,k;
	EA=0;
	for(k=0;k<8;k++)
	{
		c = 0x0f&SC16C554_Read(s[k]|ISR); 	  //获取中断状态 
		
		if(c==0x04)
		{	
			d554=k;
			while(!SC16C554_Read(s[d554]|LSR)&0x1);   //等待接收到的数据准备好
			if (((r_in554 +1)&SIZEMASK554)!=r_out554)
			{
				rbuf554[r_in554]=SC16C554_Read(s[d554]|RHR); //接收数据
				r_in554=(r_in554+1)&SIZEMASK554;
			}
		}
	}					
	EA=1;    
}  	

char com_getchar554(uchar *ch) 
{
	uchar b;
	EX1=0;
	if (com_rbuflen554()==0)
	{
		EX1=1;
		return 0;
	}
	b=rbuf554[r_out554];
	r_out554=(r_out554+1)&SIZEMASK554;
	
	*ch=b;	
	EX1=1;
	return (1);
}

/*计算接收缓冲器长度*/
unsigned char com_rbuflen554(void)
{
	return ((r_in554 -r_out554)&SIZEMASK554);
}

//*************************************************************************
//函数名: SC16C554_Write
//功 能: 写SC16C554 寄存器
//入参数: reg=要写的寄存器地址,val=要写的值
//出参数: 无
//*************************************************************************
void SC16C554_Write(unsigned char Reg, unsigned char Val)
{
	EA=0;
	P5=Reg;
	_nop_(); 
	P4=0xEF&P4;
	P0 = Val;
	_nop_();        //_nop_()1us
   	P4=0x10|P4;
	EA=1;
}

//*************************************************************************
//函数名: SC16C554_Read
//功 能: 读SC16C554寄存器
//入参数: reg=要读的寄存器地址
//出参数: 寄存器值
//*************************************************************************
unsigned char SC16C554_Read(unsigned char Reg)
{
 	
	unsigned char RegData;
	EA=0;
	P5=Reg;
	_nop_(); 
	P4=0xDF&P4;
	RegData = P0;
	P4=0x20|P4;
	return RegData;
	EA=1;
}

void SC16C554_SET(uchar PortID,uint baudrate)
{
	uchar dll,dlm;
	dll=(uchar)(1562500/baudrate);
	dlm=(uchar)(1562500/baudrate/256);
	SC16C554_Write(PortID|LCR,0x80);  //设置波特率
	SC16C554_Write(PortID|DLL,dll); //设置DLL 低位
	SC16C554_Write(PortID|DLM,dlm); //设置DLL 高位
	SC16C554_Write(PortID|LCR,0x03);  //8位数据,1 位停止位,无奇偶校验位
	SC16C554_Write(PortID|MCR,0x0);	  //清除外部输出
	SC16C554_Write(PortID|FCR,0x0f);  //FIFO							 
	SC16C554_Write(PortID|IER,0x00);  //设置16C554禁止所有中断
	SC16C554_Write(PortID|IER,0x01); 	//允许554receiver ready interrupt
	SC16C554_Write(PortID|MCR,0x08);	//打开554串口总开关	
}

⌨️ 快捷键说明

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