📄 sja1000_peli.lst
字号:
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SJA1000_PELI
OBJECT MODULE PLACED IN SJA1000_PELI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SJA1000_PELI.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89x51.h>
2 #include "SJA1000_PELI.h"
3
4 bit g_TiFlag=0;
5 bit g_RiFlag=0;
6
7
8
9 unsigned char xdata *SJA_BASE_ADDR = 0x0000;
10
11 //写数据
12 void SJARegWrite(unsigned char regAddr,unsigned char setData)
13 {
14 1 *(SJA_BASE_ADDR+regAddr) = setData;
15 1 }
16 //读数据
17 unsigned char SJARegRead(unsigned char regAddr)
18 {
19 1 unsigned char tempData;
20 1 tempData = *(SJA_BASE_ADDR+regAddr);
21 1 return tempData;
22 1 }
23 //寄存器自测试
24 bit SJARegSelfTest(void)
25 {
26 1 bit flag;
27 1
28 1 SJARegWrite(9,0xaa);
29 1 if (SJARegRead(9) == 0xaa)
30 1 {
31 2 flag = 0;
32 2 }
33 1
34 1 else
35 1 {
36 2 flag = 1;
37 2 }
38 1
39 1 if (!flag)
40 1 {
41 2 SJARegWrite(9,0x55);
42 2 if (SJARegRead(9) == 0x55)
43 2 {
44 3 flag = 0;
45 3 }
46 2 else
47 2 {
48 3 flag = 1;
49 3 }
50 2 }
51 1
52 1 return flag ;
53 1 }
54 //进入复位模式
55 bit SJAEnterRstMode(void)
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 2
56 {
57 1 bit flag;
58 1 unsigned char tempData;
59 1
60 1 tempData = SJARegRead(0);
61 1 tempData = tempData|0x01;
62 1 SJARegWrite(0,tempData);
63 1
64 1 if((SJARegRead(0)&0x01)==1)
65 1 {
66 2 flag = 0;
67 2 }
68 1 else
69 1 {
70 2 flag = 1;
71 2 }
72 1 return flag;
73 1 }
74 //退出复位模式
75 bit SJAEnterWorkMode(void)
76 {
77 1 bit flag;
78 1 unsigned char tempData;
79 1
80 1 tempData = SJARegRead(0);
81 1 tempData = tempData&0xfe;
82 1 SJARegWrite(0,tempData);
83 1
84 1 if((SJARegRead(0)&0x01)==0)
85 1 {
86 2 flag = 0;
87 2 }
88 1 else
89 1 {
90 2 flag = 1;
91 2 }
92 1 return flag;
93 1 }
94
95 //设置时钟分频,输出控制寄存器
96 bit SJAClkOut(unsigned char OCR,unsigned char CDR)
97 {
98 1 bit flag;
99 1
100 1 SJARegWrite(8,OCR);
101 1 SJARegWrite(31,CDR);
102 1
103 1 if((SJARegRead(8)==OCR)&(SJARegRead(31)==CDR))
104 1 {
105 2 flag = 0;
106 2 }
107 1 else
108 1 {
109 2 flag = 1;
110 2 }
111 1 return flag;
112 1 }
113 //中断使能设置
114 bit SJASetInterrupt(unsigned char ENA_INT)
115 {
116 1 bit flag;
117 1
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 3
118 1 SJARegWrite(4,ENA_INT);
119 1
120 1 if (SJARegRead(4) == ENA_INT)
121 1 {
122 2 flag = 0;
123 2 }
124 1 else
125 1 {
126 2 flag = 1;
127 2 }
128 1 return flag;
129 1 }
130 //波特率设置
131 bit SJASetBaudRate(unsigned char BTR0,unsigned char BTR1)
132 {
133 1 bit flag;
134 1 SJARegWrite(6,BTR0);
135 1 SJARegWrite(7,BTR1);
136 1
137 1 if((SJARegRead(6)==BTR0)&(SJARegRead(7)==BTR1))
138 1 {
139 2 flag = 0;
140 2 }
141 1 else
142 1 {
143 2 flag = 1;
144 2 }
145 1 return flag;
146 1 }
147 //验收代码寄存器设置
148 bit SJASetACR( unsigned char ACR0,
149 unsigned char ACR1,
150 unsigned char ACR2,
151 unsigned char ACR3 )
152 {
153 1 bit flag;
154 1
155 1 SJARegWrite(16,ACR0);
156 1 SJARegWrite(17,ACR1);
157 1 SJARegWrite(18,ACR2);
158 1 SJARegWrite(19,ACR3);
159 1
160 1 if ((SJARegRead(16) ==ACR0)&(SJARegRead(17) ==ACR1)
161 1 &(SJARegRead(18) ==ACR2)&(SJARegRead(19) ==ACR3))
162 1 {
163 2 flag = 0;
164 2 }
165 1 else
166 1 {
167 2 flag = 1;
168 2 }
169 1 return flag;
170 1 }
171 //屏蔽寄存器设置
172 bit SJASetAMR( unsigned char AMR0,
173 unsigned char AMR1,
174 unsigned char AMR2,
175 unsigned char AMR3 )
176 {
177 1 bit flag;
178 1
179 1 SJARegWrite(20,AMR0);
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 4
180 1 SJARegWrite(21,AMR1);
181 1 SJARegWrite(22,AMR2);
182 1 SJARegWrite(23,AMR3);
183 1
184 1 if ((SJARegRead(20) ==AMR0)&(SJARegRead(21) ==AMR1)
185 1 &(SJARegRead(22) ==AMR2)&(SJARegRead(23) ==AMR3))
186 1 {
187 2 flag = 0;
188 2 }
189 1 else
190 1 {
191 2 flag = 1;
192 2 }
193 1 return flag;
194 1 }
195 //SJA初始化
196 void SJAInit(void)
197 {
198 1 bit flag;
199 1
200 1 flag = SJARegSelfTest(); //SJA自测试
201 1 while(flag)
202 1 {
203 2 flag = SJARegSelfTest();
204 2
205 2 }
206 1
207 1
208 1 flag = SJAEnterRstMode(); //进行复位模式
209 1 while(flag)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -