📄 lin_main.c
字号:
#include "INCLUDE.H"
//#include <reg52.h>
//#include "LIN_HARDWARE.C"
//#include "LIN_LLC.C"
//#include "LIN_MANAGE.C"
//#include "LIN_API.C"
/* Private typedef ----------定义主机和从机的状态机-------------------------------------------
typedef enum
{
Idle,
send_break,
// VerifyBreak,
send_synch,
// VerifSynch,
send_ID,
} LIN_MASTER_state; */
typedef enum
{
Init,
send_data,
rece_data
} LIN_SLAVE_state;
LIN_SLAVE_state LIN_SLAVE = Init;
typedef enum
{
task1,
task2,
task3
} TASK_schedule_state;
TASK_schedule_state TASK_schedule=task1;
/*******************************************************************************/
//定义是否可以执行从机程序
bit lin_en=0;
bit task_en=0;
uchar i;
void LIN_Init()
{
task_en=1;
}
void main()
{
LIN_Init();
while(1)
{ //任务调度
if(task_en)
{
delay_ms(100);
switch(TASK_schedule)
{
case task1:
ID=SLAVE1_ID;
LIN_SLAVE = rece_data;
TASK_schedule=task2;
lin_en=1;
break;
case task2:
ID=SLAVE2_ID;
LIN_SLAVE = send_data;
TASK_schedule=task3;
lin_en=1;
break;
case task3:
ID=SLAVE3_ID;
LIN_SLAVE = send_data;
TASK_schedule=task1;
lin_en=1;
break;
}
task_en=0;
}
if(lin_en)
{
SendSynchBreak(); //主机任务
SendSynch();
SendID(ID);
num=JudgeLength(ID);
switch(LIN_SLAVE) //从机任务
{
case Init:
LIN_SLAVE = Init;
break;
case send_data: //发送数据
SendData(send_datas,num);
check_sum=checksum(send_datas,num);
SendChecksum(check_sum);
LIN_SLAVE = Init;
lin_en=0;
task_en=1;
break;
case rece_data: //接收数据
overtime_flag=0;
SetTime(5000);
ReceiveData(rece_datas,num);
check_sum=ReceChecksum();
error_flag=JudgeChecksum(rece_datas,num);
if(overtime_flag|error_flag)
{
ErrorCounter+=8;
UartSend(0x01);
error_flag=0;
overtime_flag=0;
if(ErrorCounter>=64);
}
else
{
ErrorCounter-=1;
}
lin_en=0;
task_en=1;
ET0=0;
time_n=0;
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -