📄 lin_hal.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 + -