?? r591_init.lst
字號(hào):
C51 COMPILER V7.50 R591_INIT 08/16/2008 17:34:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE R591_INIT
OBJECT MODULE PLACED IN r591_init.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE r591_init.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*******************************底層數(shù)據(jù)處理 written by Meng Zhao BJUT********************************/
3 /*********this program is used to exchange data format & set CANfilter & initiate CAN Controller *******/
4
5 /* Get data from receivebuffer or send data to transmitbuffer,exchange data fromat between buffer and CANO
-pen*/
6
7 #include "can.h"
8 #include "canpc.h"
9 #include "can.h"
10 #include "REG591.h"
11
12 unsigned char rec_status=0;
13 unsigned char send_status=0;
14
15
16 /*Receive*/
17 void Rec_message(CAN_MSG data *ReceiveBuf)
18 {
19 1 unsigned long identifier;
20 1 unsigned char length;
21 1 unsigned char i;
22 1
23 1 if(CANSTA&0X01)
24 1 {
25 2 CANADR=RX;
26 2 length=CANDAT&0X0F;
27 2 identifier=(unsigned long )CANDAT;
28 2 identifier<<=8;
29 2 identifier |= (unsigned long) CANDAT;
30 2 identifier>>=5;
31 2
32 2 for(i=0;i<length;i++)
33 2 {
34 3 ReceiveBuf->BUF[i]=CANDAT;
35 3 }
36 2
37 2 ReceiveBuf->ID=identifier;
38 2 ReceiveBuf->LEN=length;
39 2 CANCON=0X0C;
40 2 rec_status=1;
41 2 }
42 1 }
43
44 /*Send*/
45 void Trans_message(CAN_MSG data *TransBuf)
46 {
47 1 unsigned long ID;
48 1 unsigned char length;
49 1 unsigned char i;
50 1
51 1 while(!TBS);
52 1 length=TransBuf->LEN;
53 1 ID=(unsigned char)(TransBuf->ID<<5);
54 1 CANADR=TX;
C51 COMPILER V7.50 R591_INIT 08/16/2008 17:34:28 PAGE 2
55 1 CANDAT=0X0F&length;
56 1 CANDAT=(unsigned char)(TransBuf->ID>>3);
57 1 CANDAT=ID&0XF0;
58 1 for(i=0;i<length;i++)
59 1 {
60 2 CANDAT=TransBuf->BUF[i];
61 2 }
62 1 CANCON=0X01;
63 1 send_status=1;
64 1 }
65
66 /*set CANfilter*/
67 void SetCanfilter(unsigned char filternum,unsigned long CANID,bit RTR,unsigned char AMR0,unsigned char AM
-R1,unsigned char AMR2,unsigned char AMR3)
68 {
69 1 CANADR=ACFEN;
70 1 switch(filternum)
71 1 {
72 2 case 0:
73 2 CANDAT&=0XFE;
74 2 break;
75 2 case 1:
76 2 CANDAT&=0XFB;
77 2 break;
78 2 case 2:
79 2 CANDAT&=0XEF;
80 2 break;
81 2 case 3:
82 2 CANDAT&=0XBF;
83 2 break;
84 2 }
85 1
86 1
87 1 CANADR=ACR10+(filternum*8);//* 驗(yàn)收濾波器的配置 Bank1的濾波器1配置為接收ID */
88 1 CANDAT=(unsigned char)(CANID>>3);
89 1 if(RTR)
90 1 CANDAT=((unsigned char)(CANID<<5))|0X10;
91 1 else
92 1 CANDAT=(unsigned char)((CANID<<5)&0XE0);
93 1 CANADR=AMR10+(filternum*8);
94 1 CANDAT=AMR0;
95 1 CANDAT=AMR1;
96 1 CANDAT=AMR2;
97 1 CANDAT=AMR3;
98 1 CANADR=ACFEN;
99 1 switch(filternum)
100 1 {
101 2 case 0:
102 2 CANDAT|=0X01;
103 2 break;
104 2 case 1:
105 2 CANDAT|=0X04;
106 2 break;
107 2 case 2:
108 2 CANDAT|=0X10;
109 2 break;
110 2 case 3:
111 2 CANDAT|=0X40;
112 2 break;
113 2 }
114 1
115 1 }
C51 COMPILER V7.50 R591_INIT 08/16/2008 17:34:28 PAGE 3
116 /*initiate the pelican*/
117 void Can_init() //將BTR0,BTR1 做形參,以便進(jìn)行波特率變換
118 {
119 1 unsigned char j;
120 1 CANMOD=0X01; //復(fù)位
121 1 P1M1=P1M1&0XFD;//TXDC設(shè)置為推免模式
122 1 P1M2=P1M2|0X02;
123 1 EA=1;
124 1 ECAN=1;
125 1
126 1 CANSTA=0X03;//使能接收和發(fā)送中斷
127 1 CANADR=BTR0;//CAN為速率為125kbit/s
128 1 CANDAT=0X42;
129 1 CANADR=BTR1;
130 1 CANDAT=0X2B;
131 1 CANADR=ACR10;//初始化濾波器
132 1 for(j=0;j<32;j++)
133 1 {
134 2 CANDAT=0X00;
135 2 }
136 1
137 1 CANADR=ACFMOD;//使用單驗(yàn)收濾波器,僅使用標(biāo)準(zhǔn)楨
138 1 CANDAT=0X55;
139 1 CANADR=ACFPRIO;//如果信息通過(guò)濾波器,產(chǎn)生接收中斷
140 1 CANDAT=0X55;
141 1 CANADR=ACFEN;//使能各濾波器
142 1 CANDAT=0X55;
143 1 CANMOD=0X00;//選擇操作模式,退出CAN控制器復(fù)位模式
144 1 }
145
146
147 void reset_communication(void)
148 {
149 1 CANOpen_init(0X46);
150 1 }
151
152
153
154
155
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 427 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 17
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -