📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 12/24/2007 11:05:46 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2
3 /*================================================================================*=
4 *文 件 名:main.c
5 *描 述:CAN网络中的从节点程序,包括时钟同步信息接收函数,握手函数,
6 利用定时计数器T0中断,进行同步计数,中断信号来自主节点。
7 每一次程序接收到主节点的同步信息时,中断一次,当中断次数到时,
8 执行节点功能函数。
9 *节点任务:点亮和熄灭LED灯
10 =*================================================================================*/
11 #include "reg52.h"
12 #include "can.h"
13
14
15 #define MainID (0xaa)
16 #define MyID (0xbb)
17 #define SID2 (0xcc)
18 #define SID3 (0xdd)
19 #define SID4 (0xee)
20 #define TimeOut (50) //同步节拍
21
22 sbit LED = P1^0;
23 //JA1000 发送缓存区
24 tByte SendData[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
25 tByte RecvData[11];
26
27
28 void Sys_Iint();
29 void SendAsk(tByte const ID);
30 void GetMes(void);
31 void MyTask();
32
33 static unsigned char TimeTickCom;
34 static bit RecvTickTask;
35 static bit SendAskTask;
36 static bit SendMesTask;
37
38 void main()
39 {
40 1
41 1 SJAInit(MyID); //SJA初始化
42 1 Sys_Iint(); //系统初始化
43 1 while(1)
44 1 {
45 2 if(RecvTickTask)
46 2 {
47 3 GetMes();
48 3 SendAsk(MyID); //发送握手信号为我的ID
49 3 TF0 = 1; //T0中断,处理时钟同步
50 3 }
51 2 if(SendMesTask)
52 2 {
53 3 SendMesTask = 0; //清除任务,保证不占用总线
54 3 TimeTickCom = 0; //清空同步计数器
55 3 MyTask(); //节点功能
C51 COMPILER V7.06 MAIN 12/24/2007 11:05:46 PAGE 2
56 3 RecvTickTask = 1; //本节点任务完成,准备接受下一个同步信息
57 3 }
58 2 }
59 1 }
60
61 void Sys_Iint()
62 {
63 1 ET0 = 1;
64 1 EA = 1;
65 1 RecvTickTask = 1; //多任务时用
66 1 }
67
68 void T0_ISR() interrupt 1 using 1
69 {
70 1 if((TimeTickCom++) == TimeOut)
71 1 {
72 2 SendMesTask = 1; //同步时间到,发送数据
73 2 RecvTickTask = 1; //停止接受同步信息
74 2 TF0 = 0; //清除中断标志位
75 2 }
76 1 }
77
78 void SendAsk(tByte const ID) //发送握手信号
79 {
80 1 SendData[0] = ID;
81 1 SJASendData(SendData,8,MainID,0xff,0x08);
82 1 }
83
84 void GetMes(void)
85 {
86 1 while(SJARecvData(RecvData,4));
87 1 }
88
89 void MyTask()
90 {
91 1 LED = !LED;
92 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 115 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -