📄 lin_main.lst
字号:
C51 COMPILER V8.08 LIN_MAIN 04/19/2009 00:05:50 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LIN_MAIN
OBJECT MODULE PLACED IN LIN_MAIN.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LIN_MAIN.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "INCLUDE.H"
2 //#include <reg52.h>
3 //#include "LIN_HARDWARE.C"
4 //#include "LIN_LLC.C"
5 //#include "LIN_MANAGE.C"
6 //#include "LIN_API.C"
7 /* Private typedef ----------定义主机和从机的状态机-------------------------------------------------*/
8 /* Private typedef ------------从机状态机----------------------------------------------- */
9
10 typedef enum //LIN主节点接收状态
11 {
12 rece_break,
13 rece_synch,
14 rece_ID,
15 rece_data,// 等待数据态
16 send_data
17 } LIN_SLAVE_state;
18
19 LIN_SLAVE_state LIN_SLAVE = rece_break; //LIN总线接收初始化
20 /***************************************************************************/
21
22 typedef enum
23 {
24 task1,
25 task2,
26 task3
27 } TASK_schedule_state;
28
29
30 TASK_schedule_state TASK_schedule=task1;
31 /*******************************************************************************/
32
33 //定义是否可以执行从机程序
34 bit slave_en=1;
35 bit task_en=1;
36 uchar i,SBUF_temp;
37 sbit p11=P1^1;
38
39 void LIN_Init()
40 {
41 1 ET0=1;
42 1 P1=0xff;
43 1 }
44
45 void main()
46 {
47 1 LIN_Init();
48 1 while (1)//while语句用来循环发送报文
49 1 {
50 2 if(task_en)
51 2 {
52 3 p11=~p11;
53 3 task_en=0;
54 3 slave_en=1;
55 3 }
C51 COMPILER V8.08 LIN_MAIN 04/19/2009 00:05:50 PAGE 2
56 2
57 2 if(slave_en)
58 2 {
59 3 switch (LIN_SLAVE)
60 3 {
61 4 case rece_break: //查询的方式去检查数据帧
62 4 while(1)
63 4 {
64 5 // SetTime(5000); //当需要在一段时间都没有接收到同步间隔信号时跳出这一次的等待
65 5 if(ReceSynchBreak())
66 5 {
67 6 LIN_SLAVE = rece_synch;
68 6 break;
69 6 }
70 5
71 5 else
72 5 {
73 6 // overtime_flag=0;
74 6 // time_n=0;
75 6 // TR0=0;
76 6 // ET0=0;
77 6 LIN_SLAVE = rece_break;
78 6 // task_en=1;
79 6 break;
80 6 }
81 5
82 5 }
83 4 // P2=0x00;
84 4 LIN_SLAVE = rece_synch;
85 4 P2=0x03;
86 4 break;
87 4
88 4 case rece_synch:
89 4 if(ReceSynch()) LIN_SLAVE = rece_ID;
90 4 else LIN_SLAVE = rece_break;
91 4 break;
92 4
93 4 case rece_ID:
94 4 if(ReceID()==ID)
95 4 {
96 5 LIN_SLAVE = send_data;//定义此从机是收还是发
97 5 num=JudgeLength(ID);
98 5 // P2=0x07;
99 5 }//判断是否是自己的ID
100 4
101 4 else LIN_SLAVE = rece_break;// WaitHeader
102 4 break;
103 4
104 4 case rece_data: //接收数据
105 4 overtime_flag=0;
106 4 SetTime(5000);
107 4 ReceiveData(rece_datas,num);
108 4 check_sum=ReceChecksum();
109 4 LIN_SLAVE=rece_break;
110 4 error_flag=JudgeChecksum(rece_datas,num);
111 4 if(overtime_flag&error_flag)
112 4 {
113 5 ErrorCounter+=8;
114 5 UartSend(0x01);
115 5 error_flag=0;
116 5 overtime_flag=0;
117 5 if(ErrorCounter>=64);
C51 COMPILER V8.08 LIN_MAIN 04/19/2009 00:05:50 PAGE 3
118 5 }
119 4 else
120 4 {
121 5 ErrorCounter-=1;
122 5 }
123 4
124 4 TR0=0;
125 4 ET0=0;
126 4 time_n=0;
127 4 task_en=1;
128 4 break;
129 4
130 4 case send_data:
131 4 SendData(send_datas,num);
132 4 check_sum=checksum(send_datas,num);
133 4 SendChecksum(check_sum);
134 4 LIN_SLAVE = rece_break;
135 4 task_en=1;
136 4 break;
137 4 }
138 3 }
139 2
140 2 }
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 632 ----
CONSTANT SIZE = 1 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 1
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -