?? rs232_basiccan.lst
字號:
C51 COMPILER V7.06 RS232_BASICCAN 03/17/2008 09:43:17 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE RS232_BASICCAN
OBJECT MODULE PLACED IN RS232_basiccan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RS232_basiccan.c DEBUG OBJECTEXTEND
stmt level source
1 #include<REG52.H>
2 #include<SJA_BCANCONF.H>
3 #include<SJA_BCANFUNC.C>
4 //************************函數聲明*****************************//
5 void T1_int(void);
6 void Sja_1000_Init(void);
7 //************************變量定義*****************************//
8 unsigned char data send_data[10],rcv_data[10]; //發送和接收數組定義
9 unsigned char bdata flag_init;
10 unsigned char j,k=2;
11 sbit rcv_flag=flag_init^0; //接收中斷標志
12 sbit err_flag=flag_init^2; //錯誤中斷標志
13 bit send_flag=0;
14 sbit CAN_RESET=P2^0;
15 sbit LED1=P3^4;
16 sbit LED0=P3^5;
17 void open_close_led(void)
18 {
19 1 if(rcv_data[4]==0X02)
20 1 {LED0=0;} //OPEN THE LIGHT
21 1 else if(rcv_data[4]==0X03)
22 1 {LED0=1;} //close the light
23 1
24 1 if(rcv_data[5]==0X02)
25 1 {LED1=0;} //OPEN THE LIGHT
26 1 else if(rcv_data[5]==0X03)
27 1 {LED1=1;} //close the light
28 1 }
29 //***********************主函數*******************************//
30 void main(void)
31 {
32 1 CAN_RESET=0; //SJA1000退出硬件復位模式
33 1 Sja_1000_Init(); //initialize Sja100
34 1 T1_int(); //initialize T1
35 1 PX0=1; //外部中斷0高優先級
36 1 EX0=1; //外部中斷0開放
37 1 ES=1; //串口中斷開放
38 1 EA=1; //開放全局中斷
39 1 flag_init=0x00;
40 1 while(1)
41 1 {
42 2 if(rcv_flag)
43 2 {
44 3 rcv_flag=0;
45 3 BCAN_DATA_RECEIVE(rcv_data); //接收數據
46 3 BCAN_CMD_PRG(0x04); //釋放接收緩沖區
47 3 ES=0; //串口中斷禁止
48 3 for(j=2;j<10;j++) //發送8組數據到串口
49 3 {
50 4 SBUF=rcv_data[j];
51 4 while(TI==0)
52 4 {}
53 4 TI=0;
54 4 }
55 3 ES=1; //串口中斷開放
C51 COMPILER V7.06 RS232_BASICCAN 03/17/2008 09:43:17 PAGE 2
56 3 open_close_led();
57 3 }
58 2 if(send_flag)
59 2 {
60 3 send_flag=0;
61 3 send_data[0]=0xA8;
62 3 send_data[1]=0x08; //報文ID:540
63 3 BCAN_DATA_WRITE(send_data); //寫入數據到緩沖區函數
64 3 BCAN_CMD_PRG(0x01); //調用發送請求
65 3 }
66 2 if(err_flag) //總線錯誤處理
67 2 {
68 3 err_flag=0;
69 3 Sja_1000_Init();
70 3 }
71 2 }
72 1 }
73 //******************************外部中斷0*******************//
74 void ex0_int(void) interrupt 0 using 1
75 {
76 1 SJA_BCANAdr=REG_INTERRUPT;
77 1 flag_init=*SJA_BCANAdr;
78 1 }
79 //******************************T1初始化********************//
80 void T1_int(void)
81 {
82 1 TMOD=0x20; //定時器1設為方式2
83 1 TL1=0xFD; //定時器初值
84 1 TH1=0xFD;
85 1 SCON=0x50; //串口設為方式1,REN=1允許接收
86 1 TR1=1; //啟動定時器1
87 1 }
88 void UART_int(void) interrupt 4 using 3/*串口中斷接受數據*/
89 {
90 1 send_data[k]=SBUF; //寫串口數據到發送數組
91 1 RI=0; //接收中斷清零
92 1 k++; //
93 1 if(k==10) //接收到8組數據
94 1 {k=2; //
95 2 send_flag=1; //置位發送標志
96 2 }
97 1
98 1
99 1 }
100
101 //******************************SJA1000初始化********************//
102 void Sja_1000_Init(void)
103 { BCAN_ENTER_RETMODEL(); //進入復位
104 1 BCAN_SET_BANDRATE(0x0b); //設置波特率800K/S
105 1 BCAN_SET_OBJECT(0xaa,0x00); //設置地址ID:550
106 1 BCAN_SET_OUTCLK(0xaa,0x48); //設置輸出方式,禁止COLOCKOUT輸出
107 1 BCAN_QUIT_RETMODEL(); //退出復位模式
108 1 SJA_BCANAdr=REG_CONTROL; //地址指針指向控制寄存器
109 1 *SJA_BCANAdr|=0x1e; //開放錯誤\接收\發送中斷
110 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 691 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.06 RS232_BASICCAN 03/17/2008 09:43:17 PAGE 3
DATA SIZE = 25 5
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -