📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 12/15/2008 11:44:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include <stdio.h>
3 #include "serial.h"
4 #include <at89x52.h>
5 #include <string.h>
6 #include "SJA1000.h"
7 #include <ABSACC.H>
8
9 extern unsigned char TxBuf[LenTxBuf];
10 extern unsigned char RxBuf[LenRxBuf];
11 extern unsigned char receiveflag;
12
13
14 sfr AUXR = 0x8E; //STC89C54RD+
15 unsigned char canbuf[16];
16 unsigned char bCanRcvFlag;
17
18 void delay()
19 {
20 1 int i,j;
21 1 for(i = 0; i++; i<10000)
22 1 {
23 2 for(j = 0; j++; j<10000)
24 2 {
25 3 }
26 2 }
27 1 }
28
29
30 void InitialCan()
31 {
32 1 WriteDataToSJA1000(REG_CAN_MOD,0x01); //进入复位,对can进行初始化
33 1
34 1 WriteDataToSJA1000(REG_CAN_CDR,0x88); //时钟分频寄存器
35 1 WriteDataToSJA1000(REG_CAN_IER ,0x8B); //中断允许寄存器
36 1
37 1
38 1 WriteDataToSJA1000(REG_CAN_AMR0,0xff); //验收屏蔽寄存器0~3
39 1 WriteDataToSJA1000(REG_CAN_AMR1,0xff);
40 1 WriteDataToSJA1000(REG_CAN_AMR2,0xff);
41 1 WriteDataToSJA1000(REG_CAN_AMR3,0xff);
42 1
43 1 WriteDataToSJA1000(REG_CAN_ACR0,0x00); //验收码寄存器0~3
44 1 WriteDataToSJA1000(REG_CAN_ACR1,0x01);
45 1 WriteDataToSJA1000(REG_CAN_ACR2,0x00);
46 1 WriteDataToSJA1000(REG_CAN_ACR3,0x00);
47 1
48 1
49 1 WriteDataToSJA1000(REG_CAN_BTR0,0x49); //总线定时器0
50 1 WriteDataToSJA1000(REG_CAN_BTR1,0xC9); //总线定时器1 //50kbps 采样3次 16MHZ
51 1
52 1 WriteDataToSJA1000(REG_CAN_OCR,0xAA); //输出控制寄存器
53 1 WriteDataToSJA1000(REG_CAN_RBSA,0x00); //接收缓冲器起始地址寄存器
54 1 WriteDataToSJA1000(REG_CAN_RXERR,0x00); //接收错误计数器
55 1 WriteDataToSJA1000(REG_CAN_TXERR,0x00); //发送错误寄存器
C51 COMPILER V7.06 MAIN 12/15/2008 11:44:57 PAGE 2
56 1
57 1
58 1 WriteDataToSJA1000(REG_CAN_MOD,0x08); //模式寄存器---单滤波方式
59 1 //P1_0 = 0;
60 1 }
61
62 int main()
63 {
64 1 unsigned char rlen,i,j;
65 1 unsigned char rbuf[14];
66 1
67 1 P1_1 =0;
68 1
69 1 P1_0 = 1;
70 1
71 1 InitSerialBuffer();
72 1 InitSerial();
73 1 // bCanRcvFlag = 0;
74 1
75 1
76 1
77 1 EA=1; //cpu中断允许标志
78 1 EX0=1; //外部中断0中断允许位
79 1 IT0=1; //跳变方式
80 1 ES=1; //串口中断允许位
81 1 AUXR=0x03; //禁止外扩
82 1
83 1 InitialCan(); //初始化SJA1000
84 1
85 1 // PELICAN_HW_INIT( 0xAA,0x88,0x04,0x8B); 调试结束后,再检查看看原有的驱动程序为什么不能正常工作
86 1
87 1
88 1 delay();
89 1 delay();
90 1
91 1
92 1 while(receiveflag)
93 1 {
94 2 P1_0 = 0;
95 2 receiveflag=0;
96 2 rlen=ReceivedBytes();
97 2 for(i=0;i<rlen;i++)
98 2 {
99 3 getbyte(&rbuf[i]);
100 3 }
101 2
102 2 // EA=0; //cpu禁止中断
103 2 TI=0; //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
104 2
105 2 //canbuf[9]={0x88,0x50,0x00,0x20,0x00,0x01,0x0a,S,H}; //帧信息+4个识别码+帧号(0x01)
106 2 //+固定字节(表示后续字节长度)+两个
-固定起始字符(SH)
107 2
108 2 canbuf[0] = 0x88 ; //帧信息
109 2 canbuf[1] = 0x50 ;
110 2 canbuf[2] = 0x00 ;
111 2 canbuf[3] = 0x20 ;
112 2 canbuf[4] = 0x00 ;
113 2 canbuf[5] = 0x01 ; //帧号(0x01
114 2
115 2 for(i = 0; i < 7; i++)
116 2 for(j = 6; j < 13; j++)
C51 COMPILER V7.06 MAIN 12/15/2008 11:44:57 PAGE 3
117 2 {
118 3 canbuf[j] = rbuf[i];
119 3 }
120 2
121 2
122 2 canbuf[13] = 0x88 ; //帧信息
123 2 canbuf[14] = 0x50 ;
124 2 canbuf[15] = 0x00 ;
125 2 canbuf[16] = 0x20 ;
126 2 canbuf[17] = 0x00 ;
127 2 canbuf[18] = 0x02 ; //帧号0x01
128 2
129 2 for(i = 7; i < rlen; i++)
130 2 for(j = 19; j < (12+rlen); j++)
131 2 {
132 3 canbuf[j] = rbuf[i];
133 3 }
134 2
135 2 SJASendData(canbuf,0x01);
136 2 // EA=1; //cpu开中断
137 2 TI=1; //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
138 2
139 2
140 2 // TX帧信息:0x88--发送缓冲器首址, FF=1--扩展帧 RTR=0--数据帧
141 2 // ID0 0x50
142 2 // ID1 0x00
143 2 // ID2 0x20
144 2 // ID3 0x00
145 2
146 2 }
147 1 /* while(1)
148 1 {
149 1
150 1 if(bCanRcvFlag)
151 1 {
152 1 P1_0 = 0;
153 1 bCanRcvFlag=0;
154 1
155 1 SJARcvData(canbuf,&rcanlen);
156 1
157 1 EA=0; //cpu禁止中断
158 1 TI=0; //TI=1时申请中断,cpu相应中断后,发送下一帧数据。任何方式下,该位都必须由软件清0
159 1
160 1 for(i=0;i<rcanlen;i++)
161 1 {
162 1
163 1 SBUF=canbuf[i];
164 1 while(!TI);
165 1 TI=0;
166 1 }
167 1
168 1 EA=1;
169 1
170 1 WriteDataToSJA1000(REG_CAN_CMR,0x04); //0x04:释放;接收缓冲器FXFIFO中载有信息的内存空间被释放
171 1
172 1 }
173 1
174 1 }*/
175 1
176 1 }
177
C51 COMPILER V7.06 MAIN 12/15/2008 11:44:57 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 320 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 17
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -