📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 09/15/2005 21:50:42 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe MAIN.C DB OE SMALL ROM(LARGE)
line 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 <P8xc5x2.H>
*** WARNING C318 IN LINE 27 OF MAIN.C: can't open file 'P8xc5x2.H'
28 #include <intrins.h>
29
30 //#include "time_module.C"
31 //#include "sja_bcanFunc.C"
32 //ji#include "seriele.c"
33 //ji#include "keyled.c"
34 #include "SJA_BCANCONF.h" //add by ji
35 #include "time_module.h" //add by ji
36 //数据类型定义
37 #define uchar unsigned char
38 #define ulong unsigned long
39 #define uint unsigned int
40
41
42 //设置系统数据缓冲区
43 static uchar data SetSystemBuf[10]; //系统设置数据缓冲区
44
45 static uchar data BandRateBuf; //设置总线波特率值缓冲区
46
47 static uchar idata EditMsSendCount; //编辑自动发送的频率
48 static uchar idata EditMsSendSave; //保存自动发送的频率
49
50 static uchar idata SendDataCount; //发送数据显示
51
52 static uchar idata SendFrq; //自动发送的频率
53 bit AutoSendFlag;
54 static bit MoveFlag=0; //移位计数
C51 COMPILER V7.20 MAIN 09/15/2005 21:50:42 PAGE 2
55
56 unsigned int AutoSendFrameID;
57 unsigned int TestSendData;
58
59 //键盘操作函数
60 extern void Write_Xdata(unsigned char value); // 将info送入外部地址xadr中
61 extern uchar Read_Xdata(uint Xadr); //从外部地址xadr中读取数据
62 extern void Key_Scan(void); //键盘扫描程序
63 extern uchar Key_Get(void); //取键盘值
64 extern void PushKey(uchar keynum); //将键值送入按键处理队列
65 extern uchar PopKey(void); //
66
67 void Key_handle(void); //处理键值
68
69 void FundationKey(void); //功能键
70 void MoveKey(void); //移位键
71 void SearchKey(void); //检索键
72 void EnterKey(void); //确认键
73 void IncKey(void); //增加键
74 void QuitKey(void); //退出键
75 void CanSendKey(void); //发送键
76
77 void EnterNext(void); //按确认键后进入下一小项处理
78 //led 送显
79 //ji#define LED_SelBit() disp_pt++;if(disp_pt>4)disp_pt=0//位选
80 //jiextern void Show_LED(void); //显示处理
81 //jiextern void Write_DispBuf(uchar buf0,uchar buf1,uchar buf2,uchar buf3,uchar buf4);//写入显示缓
-冲区
82 //jiextern uchar GetLedData(void); //将显示的值换算
83 //jiextern void Error_disp(uchar ErrByte); //将错误字送显
84
85 void InitCPU(void); //初始化函数
86 // 配置sja1000
87 uchar Config_SJA(void); //配置sja1000
88 void CanRcv_Prg(void); //can总线数据接收后处理
89 void CanSend_Prg(void); //can发送数据
90 void CanErr_Prg(void); //发现错误后处理
91 void CanDtOver_Prg(void); //超载处理
92 void CanWui_Prg(void); //唤醒中断处理
93
94 void UartRcv_Prg(void); //串口接收到数据处理
95
96 //jivoid DrecDisplay(uchar *databuf); //直通显示处理函数
97 //jivoid TestDispPrg(void); //测试处理函数
98 //jivoid ClearDispPrg(uchar *databuf); //消隐处理函数
99 //jivoid FlightDispPrg(uchar *databuf); //闪烁处理函数
100 //jivoid LiftCrcDispPrg(uchar *databuf); //左循环显示处理
101 //jivoid RightCrcDispPrg(uchar *databuf); //右循环显示处理
102
103 void AutoSendDataToCanBus(void); //自动发送
104
105 //提取波特率的对应值
106 //jiunsigned char ValueToBandRate(void);
107
108
109 // 外部中断0
110 static uchar bdata CanBusFlag=0; //can标志
111 sbit CanRcv_Good=CanBusFlag^0; //成功接收标志
112 sbit CanSend_Good=CanBusFlag^1; //成功发送标志
113 sbit CanErrFlag=CanBusFlag^2; //can总线错误标志
114 sbit CanDtOverFlag=CanBusFlag^3; //can总线超载标志
115 sbit CanWuiFlag=CanBusFlag^4; //can总线唤醒中断
C51 COMPILER V7.20 MAIN 09/15/2005 21:50:42 PAGE 3
116
117 /*-------------------------------------------------------------------------------------------
118 外部中断0处理程序
119 -------------------------------------------------------------------------------------------*/
120 void ex0_Val(void) interrupt 0 using 1
121 {
122 1 SJA_BCANAdr=REG_INTERRUPT;
123 1 CanBusFlag=*SJA_BCANAdr; //保存sja1000中断标志
124 1 }
125
126 /*-------------------------------------------------------------------------------------------
127 main程序
128 -------------------------------------------------------------------------------------------*/
129
130 void main(void)
131 {
132 1 uchar status; //状态字
133 1 uchar i;
134 1
135 1 Delay_50us(100) ; //50us*100=5ms
136 1 status=Config_SJA(); //配置sja1000
137 1 InitCPU(); //初始化
138 1 if(status!=0)
139 1 for(;;); //Error_disp(status); //配置sja1000出现错误
140 1 //ji else
141 1 //ji {
142 1 //ji Disp_Can(); //无措显示CAN1
143 1 //ji Exe_Scon(0xaa,0,0);
144 1 //ji }
145 1 //ji Write_Xdata(0x00); //设置并行方式
146 1 TimeOut_Start(20); //20*50us=1ms,定时周期1ms
147 1 while(1)
148 1 {
149 2 if(_testbit_(T0IR)) //ms时间到
150 2 {
151 3 i++;
152 3 //ji LED_SelBit(); //位选
153 3 //ji Key_Scan();
154 3 //ji Show_LED();
155 3 if(i>=SendFrq)
156 3 {
157 4 i=0;
158 4 AutoSendDataToCanBus();
159 4 }
160 3 TimeOut_Start(20); //20*50us=1ms,定时周期1ms
161 3 }
162 2 // CanBusFlag=Read_Xdata(REG_INTERRUPT); //modify by ji
163 2 if(_testbit_(CanRcv_Good))
164 2 CanRcv_Prg(); //是接收中断标志
165 2 //ji if(_testbit_(CanSend_Good)) CanSend_Prg(); //是发送中断标志
166 2 //ji if(_testbit_(CanErrFlag)) CanErr_Prg(); //是错误中断标志
167 2 //ji if(_testbit_(CanDtOverFlag))CanDtOver_Prg();//是超载中断标志
168 2 //ji if(_testbit_(CanWuiFlag)) CanWui_Prg(); //是唤醒中断标志
169 2 //ji if(_testbit_(UartRcvGood)) UartRcv_Prg(); //串口接收成功标志
170 2
171 2 //ji Key_handle(); //键盘队列处理
172 2 }
173 1
174 1 }
175
176
177 /*-------------------------------------------------------------------------------------------
C51 COMPILER V7.20 MAIN 09/15/2005 21:50:42 PAGE 4
178 按键队列处理程序
179 -------------------------------------------------------------------------------------------*/
180 /*ji
181 void Key_handle(void)
182 {
183 uchar TempData;
184 TempData=PopKey();
185 switch(TempData)
186 {
187 case Key0:
188 SearchKey();
189 break;
190 case Key1:
191 IncKey();
192 break;
193 case Key2:
194 break;
195 case Key3:
196 QuitKey();
197 break;
198 case Key4:
199 FundationKey();
200 break;
201 case Key5:
202 MoveKey();
203 break;
204 case Key6:
205 EnterKey();
206 break;
207 case Key7:
208 CanSendKey();
209 break;
210
211 default:
212 break;
213 }
214
215 }
216
217
218
219 //功能键处理
220 bit FunckeyFlag=0; //进入功能标志
221 static uchar data FunckeyCount; //功能选项计数
222 void FundationKey(void)
223 {
224 uchar i;
225 ClearDispAttr();
226 MoveFlag=0;
227 AutoSendFlag =0;
228 if(FunckeyFlag)
229 {
230 if(++FunckeyCount>3)FunckeyCount=0;
231 switch(FunckeyCount)
232 {
233 case 0:
234 FunckeyFlag=0;
235 Disp_Can(); //上电显示CAN1
236 DispFlag=0x00;
237 break;
238 case 1:
239 if((ReadSjaReg(REG_CONTROL)&0x01)==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -