📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 03/21/2003 10:24:32 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\KEIL_V7\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /************************************************************************
2 * 广州周立功单片机发展有限公司 http://www.zlgmcu.com *
3 ************************************************************************/
4 /************************************************************************
5 * *
6 * SJA1000 BasicCAN模式的通讯测试 *
7 * *
8 ************************************************************************/
9 /************************************************************************
10 * *
11 * 目的: 建立直观的BasicCAN测试平台 *
12 * 文件名: main.c *
13 * *
14 * 模块名: sjanetdemo *
15 * *
16 * 目标系统: 任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN系统*
17 * *
18 * 应用语言: Keil C51 *
19 * *
20 ************************************************************************
21 * 版本 :V1.0 *
22 * *
23 ************************************************************************
24 * 广州周立功单片机发展有限公司 保留所有的版权 *
25 ************************************************************************/
26
27 #include <reg66x.h>
28 #include <intrins.h>
29 #include "time_module.C"
30
31
32 #include "sja_bcanconf.h"
33 #include "668I2C.H"
34
35 #define uchar unsigned char
36 #define ulong unsigned long
37 #define uint unsigned int
38
39 static uchar data SetSystemBuf[10]; //系统设置数据缓冲区
40 static uchar data BandRateBuf; //设置总线波特率值缓冲区
41 static uchar idata EditMsSendCount; //编辑自动发送的频率
42 static uchar idata EditMsSendSave; //保存自动发送的频率
43 static uchar idata SendDataCount; //发送数据显示
44
45 static uchar bdata CanBusFlag=0; //can标志
46 sbit CanRcv_Good=CanBusFlag^0; //成功接收标志
47 sbit CanSend_Good=CanBusFlag^1; //成功发送标志
48 sbit CanErrFlag=CanBusFlag^2; //can总线错误标志
49 sbit CanDtOverFlag=CanBusFlag^3; //can总线超载标志
50 sbit CanWuiFlag=CanBusFlag^4; //can总线唤醒中断
51
52 uchar idata DispBuf[4],RcvBuf[4],buf[10];
53 unsigned char xdata *SJA_BCANAddress;
54
55 void CanSend(void);
C51 COMPILER V7.01 MAIN 03/21/2003 10:24:32 PAGE 2
56 void InitCPU(void); //初始化函数
57 // 配置sja1000
58 uchar Config_SJA(void); //配置sja1000
59 void CanRcv_Prg(void); //can总线数据接收后处理
60 void CanSend_Prg(void); //can发送数据
61 void CanErr_Prg(void); //发现错误后处理
62 void CanDtOver_Prg(void); //超载处理
63 void CanWui_Prg(void); //唤醒中断处理
64
65 void AutoSendDataToCanBus(void); //自动发送
66 uchar status,couter1,couter2;
67
68 // 外部中断0
69 /*-------------------------------------------------------------------------------------------
70 外部中断0处理程序
71 -------------------------------------------------------------------------------------------*/
72 void ex0_Val(void) interrupt 0 using 1
73 {
74 1 SJA_BCANAddress=REG_INTERRUPT;
75 1 CanBusFlag=*SJA_BCANAddress; //保存sja1000中断标志
76 1 }
77
78 /*-------------------------------------------------------------------------------------------
79 main程序
80 -------------------------------------------------------------------------------------------*/
81 void main(void)
82 {
83 1 //状态字
84 1 for(couter1=0;couter1<250;couter1++)
85 1 for(couter2=0;couter2<250;couter2++);
86 1 DispBuf[0]=1;
87 1 DispBuf[1]=2;
88 1 DispBuf[2]=3;
89 1 DispBuf[3]=4;
90 1 ISendStr(0x50,0x30,DispBuf,4);
91 1 for(couter1=0;couter1<250;couter1++)
92 1 for(couter2=0;couter2<250;couter2++);
93 1 status=Config_SJA(); //配置sja1000
94 1 InitCPU();
95 1 for(couter1=0;couter1<250;couter1++)
96 1 for(couter2=0;couter2<250;couter2++); //初始化,开外中断0和串口中断
97 1 if(status!=0)
98 1 {
99 2 couter1=3;
100 2 ISendStr(0x50,0x30,(uchar*)&couter1,1); //配置sja1000出现错误,改DISPBUF[].
101 2 }
102 1 TimeOut_Start(20); //20*50us=1ms,定时周期1ms
103 1 buf[0]=0xaa; //ID10-3
104 1 buf[1]=0x08; //数据帧8个有效数据
105 1 buf[2]=0x05;
106 1 buf[3]=0x05;
107 1 buf[4]=0x05;
108 1 buf[5]=0x05;
109 1 buf[6]=0x05;
110 1 buf[7]=0x05;
111 1 buf[8]=0x05;
112 1 buf[9]=0x05;
113 1 BCAN_DATA_WRITE(buf); //将编辑的数据发送到can总线
114 1 BCAN_CMD_PRG(TR_CMD);
115 1 while(1)
116 1 {
117 2 if(_testbit_(T0IR)) //1ms时间到
C51 COMPILER V7.01 MAIN 03/21/2003 10:24:32 PAGE 3
118 2 {
119 3 AutoSendDataToCanBus();
120 3 TimeOut_Start(20); //20*50us=1ms,定时周期1ms
121 3 }
122 2 for(couter1=0;couter1<250;couter1++)
123 2 for(couter2=0;couter2<250;couter2++);
124 2 if(_testbit_(CanRcv_Good)) CanRcv_Prg(); //是接收中断标志
125 2 if(_testbit_(CanSend_Good)) CanSend_Prg(); //是发送中断标志
126 2 if(_testbit_(CanErrFlag)) CanErr_Prg(); //是错误中断标志
127 2 if(_testbit_(CanDtOverFlag))CanDtOver_Prg();//是超载中断标志
128 2 if(_testbit_(CanWuiFlag)) CanWui_Prg(); //是唤醒中断标志
129 2 }
130 1 }
131 static bit CanSendFlag=1; //移位计数
132
133 void CanSend(void) //发送键
134 {
135 1 if(!CanSendFlag)
136 1 {
137 2 BCAN_DATA_WRITE(SetSystemBuf); //将编辑的数据发送到can总线
138 2 BCAN_CMD_PRG(TR_CMD);
139 2 }
140 1 }
141
142 void InitCPU(void)
143 {
144 1 EA =1;
145 1 IT0 =1;
146 1 EX0 =1;
147 1 PX0 =1;
148 1 }
149
150 uchar Config_SJA(void)
151 {
152 1 uchar data status=0;
153 1 Delay_50us(100) ;
154 1 TimeOut_Start(20); //设置开始计时、看是否配置超市
155 1 BandRateBuf = ByteRate_1000k;
156 1 BCAN_ENTER_RETMODEL(); //复位 成功返回1 只是发储复位请求
157 1 if(BCAN_CREATE_COMMUNATION()) //检测控制器接口是否正常,发出测试值,失败返回1
158 1 {
159 2 status = CAN_INTERFACE_ERR; //返回0XFF
160 2
161 2 couter1=2;
162 2 ISendStr(0x50,0x30,(uchar*)&couter1,1); //配置sja1000出现错误,改DISPBUF[].
163 2
164 2 return(status);
165 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -