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

📄 lin_hal.c

📁 周立功dp51h附带lin总线通讯代码,包括master和slave
💻 C
字号:
#define LIN_HAL_GLOBALS

#include "reg52.h"
#include "lin_cfg.h"

sbit P1_1=P1^1;
l_u8 time_couter;
l_u8 time_cout_l;
l_u8 time_cout_h;
l_u8 rec_cout;

unsigned char display(unsigned char  *sd)
{unsigned char disp_buf[8]; 
	EA=0;
  	disp_buf[0] = (sd[0]%16);			// 装载" dp-932"
    disp_buf[1] = (sd[0]/16);		
    disp_buf[2] = 31;
    disp_buf[3] = (sd[1]%16);
    disp_buf[4] = (sd[1]/16);
    disp_buf[5] = 31;
    disp_buf[6] = (sd[2]%16);	
    disp_buf[7] = (sd[2]/16);
    ZLG7290_SendBuf(disp_buf,8);
	EA=1;
	return 0;
}
l_bool 	l_sys_init(void)
{
l_u8 i;
	//INT1
	IT1=1;			//下降沿触发
	PX1=0;
	//T0;
	TMOD=TMOD|0X01;	//16位定时器
	PT0=0X01;
	//T1;
	TMOD=TMOD|0X20;	//8位之装载定时器
	TH1=BAUDRATERELOADVAL;
	//T2
	T2CON=0;
	TH2=0XEE;
	TL2=0;
	//COM
	PCON=0X80;
	//********************
	TH0=-25000/256;
	TL0=-25000%256;
	TR0=1;
	do
	{
		TXD=1;
		RXD=1;
		SLNP=0;
		i=200;
		while(i--);
		SLNP=1;
		i=200;
		while(i--);
   	}
	while(RXD==0&&TF0==0);
	TR0=0;
	if(TF0==1)
	{	
		TF0=0;
		return(1);
	}
	TF0=0;
	//INTERRUPT
	//EX1=1;//INT1
	ET2=1;
	EA=1;
	return (0);
}

void l_delay(l_u8 tm)
{
	while(tm--);
}

l_u8 checksum8(l_u8 *chk8,l_u8 num)
{
l_u8 temp=0;
	for( ;num>0;num--)
	{
		temp=temp+*chk8;
		if(temp<*chk8)
			temp++;
		chk8++;
	}
	return(0xff-temp);	
}
l_bool l_send_break(void)
{
	
	if(BAUDRATERELOADVAL<128)
	{
		PCON=PCON&0X7F;
	}
	TH1=255-(TICKSPERBIT*2);
	TL1=TH1;
	TR1=1;
	SCON=0X40;
	SBUF=0X80;	
	while(TI==0);
	PCON=PCON|0X80;
	TH1=BAUDRATERELOADVAL;
	TL1=TH1;
	TR1=1;
	SCON=0X50;
	return(0);
}

void l_send_bytes(l_u8 DATA)
{
	
	TR1=1;
	TL1=TH1;
	SCON=0X50;
	SBUF=DATA;	
	while(TI==0);
	TI=0;
	TR1=0;
	SCON=0X00;
}
l_bool l_rec_data(l_u8 * temp,l_u8 num)
{
l_u8 l_chksum;
	PCON=PCON|0X80;
	TH1=BAUDRATERELOADVAL;
	TL1=TH1;
	TR1=1;
	SCON=0X50;
	rec_cout=0;
	time_couter=0;
	time_cout_h=0;//MAXFRAMETIME_H;
	time_cout_l=0;//MAXFRAMETIME_L;
	TH0=time_cout_h;
	TL0=time_cout_l;
	TR0=1;
	ET0=1;
	for(l_chksum=0;l_chksum<num;l_chksum++)
	{
		while(RI==0&&time_couter!=MAXFRAMETIME_HH);
		temp[l_chksum]=SBUF;
		RI=0;
	}
	while(RI==0&&time_couter!=MAXFRAMETIME_HH);
	RI=0;
	TR0=0;
	ET0=0;
	l_chksum=SBUF;
	temp[2]=l_chksum;

	SCON=0X00;
	if(time_couter!=MAXFRAMETIME_HH)
	{
		if(l_chksum==checksum8(temp,num))
		{
			
			return(0);
		}
		else
		{
			return(1);
		}
	}
	else
	{
		return(1);
	}
}
void l_send_data(l_u8 * temp,l_u8 num)
{
l_u8 l_chksum;
	TR1=1;
	TL1=TH1;
	SCON=0X50;
	for(l_chksum=0;l_chksum<num;l_chksum++)
	{
		SBUF=*temp;
		while(TI==0);
		TI=0;
		temp++;
	}
	temp=temp-num;
	SBUF=checksum8(temp,num);
	while(TI==0);
	TI=0;
//	TR1=0;//
//	SCON=0X00;//
}
void T0_ISR() interrupt 1
{

TF0=0;
TH0=time_cout_l;
TL0=time_cout_h;
time_couter++;
}

⌨️ 快捷键说明

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