📄 发送.lst
字号:
C51 COMPILER V7.50 发送 01/15/2009 10:05:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 发送
OBJECT MODULE PLACED IN 发送.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 发送.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <c8051f040.h> // SFR declarations
2
3 // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
4 // datasheet
5 ////////////////////////////////////////////////////////////////////////////////
6 #define CANCTRL 0x00 //Control Register
7 #define CANSTAT 0x01 //Status register
8 #define ERRCNT 0x02 //Error Counter Register
9 #define BITREG 0x03 //Bit Timing Register
10 #define INTREG 0x04 //Interrupt Low Byte Register
11 #define CANTSTR 0x05 //Test register
12 #define BRPEXT 0x06 //BRP Extension Register
13 ////////////////////////////////////////////////////////////////////////////////
14 //IF1 Interface Registers
15 ////////////////////////////////////////////////////////////////////////////////
16 #define IF1CMDRQST 0x08 //IF1 Command Rest Register
17 #define IF1CMDMSK 0x09 //IF1 Command Mask Register
18 #define IF1MSK1 0x0A //IF1 Mask1 Register
19 #define IF1MSK2 0x0B //IF1 Mask2 Register
20 #define IF1ARB1 0x0C //IF1 Arbitration 1 Register
21 #define IF1ARB2 0x0D //IF1 Arbitration 2 Register
22 #define IF1MSGC 0x0E //IF1 Message Control Register
23 #define IF1DATA1 0x0F //IF1 Data A1 Register
24 #define IF1DATA2 0x10 //IF1 Data A2 Register
25 #define IF1DATB1 0x11 //IF1 Data B1 Register
26 #define IF1DATB2 0x12 //IF1 Data B2 Register
27 ////////////////////////////////////////////////////////////////////////////////
28 //IF2 Interface Registers
29 ////////////////////////////////////////////////////////////////////////////////
30 #define IF2CMDRQST 0x20 //IF2 Command Rest Register
31 #define IF2CMDMSK 0x21 //IF2 Command Mask Register
32 #define IF2MSK1 0x22 //IF2 Mask1 Register
33 #define IF2MSK2 0x23 //IF2 Mask2 Register
34 #define IF2ARB1 0x24 //IF2 Arbitration 1 Register
35 #define IF2ARB2 0x25 //IF2 Arbitration 2 Register
36 #define IF2MSGC 0x26 //IF2 Message Control Register
37 #define IF2DATA1 0x27 //IF2 Data A1 Register
38 #define IF2DATA2 0x28 //IF2 Data A2 Register
39 #define IF2DATB1 0x29 //IF2 Data B1 Register
40 #define IF2DATB2 0x2A //IF2 Data B2 Register
41 ////////////////////////////////////////////////////////////////////////////////
42 //Message Handler Registers
43 ////////////////////////////////////////////////////////////////////////////////
44 #define TRANSREQ1 0x40 //Transmission Rest1 Register
45 #define TRANSREQ2 0x41 //Transmission Rest2 Register
46
47 #define NEWDAT1 0x48 //New Data 1 Register
48 #define NEWDAT2 0x49 //New Data 2 Register
49
50 #define INTPEND1 0x50 //Interrupt Pending 1 Register
51 #define INTPEND2 0x51 //Interrupt Pending 2 Register
52
53 #define MSGVAL1 0x58 //Message Valid 1 Register
54 #define MSGVAL2 0x59 //Message Valid 2 Register
55
C51 COMPILER V7.50 发送 01/15/2009 10:05:20 PAGE 2
56 ////////////////////////////////////////////////////////////////////////////////
57 //Global Variables
58 ////////////////////////////////////////////////////////////////////////////////
59 #define uchar unsigned char
60 uchar sdata[9]={0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31};//发送缓冲区
61 char MsgNum;
62 char status;
63 int i;
64 int j;
65 int MOTwoIndex = 0;
66 int MOOneIndex = 0;
67 int StatusCopy;
68 int RXbuffer [4];
69 int TXbuffer [8];
70 int MsgIntNum;
71 int Temperature;
72 sbit BUTTON = P2^0;
73 sbit BUTTON1= P2^1;
74 sbit BUTTON2= P2^2;
75 sbit BUTTON3= P2^3;
76 sbit LED = P1^6;
77 sfr16 CAN0DAT = 0xD8;
78
79
80
81 ////////////////////////////////////////////////////////////////////////////////
82 // Function PROTOTYPES
83 ////////////////////////////////////////////////////////////////////////////////
84
85 // Initialize Message Object
86 void clear_msg_objects (void);
87 void init_msg_object_TX (char MsgNum,int id);
88 void init_msg_object_RX (char MsgNum);
89 void start_CAN (void);
90 void transmit_data(char MsgNum);
91 void receive_data (char MsgNum);
92 void external_osc (void);
93 void config_IO (void);
94 void delay(int tim);
95 void uart_init();
96 void time_init();
97
98 void delay(int tim)
99 { int i,j;
100 1 for(i=0;i<tim;i++)
101 1 {for(j=0;j<i;j++);}
102 1 }
103
104 ////////////////////////////////////////////////////////////////////////////////
105 // MAIN Routine
106 ////////////////////////////////////////////////////////////////////////////////
107 void main (void) {
108 1
109 1
110 1 // disable watchdog timer
111 1 WDTCN = 0xde;
112 1 WDTCN = 0xad;
113 1
114 1 //configure Port I/O
115 1 config_IO();
116 1 uart_init();
117 1 time_init();
C51 COMPILER V7.50 发送 01/15/2009 10:05:20 PAGE 3
118 1
119 1 // switch to external oscillator
120 1 external_osc();
121 1
122 1
123 1 ////////////////////////////////////////////////////////////////////////////////
124 1 // Configure CAN communications
125 1 //
126 1 // IF1 used for procedures calles by main program
127 1 // IF2 used for interrupt service procedure receive_data
128 1 //
129 1 // Message Object assignments:
130 1 // 0x02: Used to transmit commands to toggle its LED, arbitration number 1
131 1 //
132 1 ////////////////////////////////////////////////////////////////////////////////
133 1
134 1 // Clear CAN RAM
135 1 clear_msg_objects();
136 1
137 1 // Initialize message object to transmit data
138 1 init_msg_object_TX (0x02,1);
139 1
140 1 // Initialize message object to receive data
141 1 init_msg_object_RX (0x01);
142 1
143 1 // Enable CAN interrupts in CIP-51
144 1 EIE2 = 0x20;
145 1
146 1 //Function call to start CAN
147 1 start_CAN();
148 1
149 1 //Global enable 8051 interrupts
150 1 EA = 1;
151 1 // IE=0x90;
152 1 //IP=0x00;//uart0中断优先级为低
153 1 //EIP2=0x20;//can0中断优先级为高
154 1 //Loop and wait for interrupts
155 1
156 1 while(1) //循环发送一组数组数据
157 1 {
158 2 for(j=0;j<9;j++)
159 2 {
160 3 transmit_data(0x02);
161 3 delay(500);
162 3 }
163 2
164 2 }
165 1
166 1
167 1 }
168
169
170 ////////////////////////////////////////////////////////////////////////////////
171 // Set up C8051F040
172 ////////////////////////////////////////////////////////////////////////////////
173
174 // Switch to external oscillator
175 void external_osc (void)//系统晶振配置
176 {
177 1 int n; // local variable used in delay FOR loop.
178 1 SFRPAGE = CONFIG_PAGE; // switch to config page to config oscillator
179 1 OSCXCN = 0x77; // start external oscillator; 22.1 MHz Crystal
C51 COMPILER V7.50 发送 01/15/2009 10:05:20 PAGE 4
180 1 // 采用外部时钟且为2分频
181 1 // system clock is 22.1184MHz / 2 = 11.0592 MHz
182 1 for (n=0;n<255;n++); // delay about 1ms
183 1 while ((OSCXCN & 0x80) == 0); // wait for oscillator to stabilize
184 1 CLKSEL |= 0x01; // switch to external oscillator
185 1 }
186
187 void config_IO (void) // IO口配置
188 {
189 1 SFRPAGE = CONFIG_PAGE; // Port SFR's on Configuration page
190 1 XBR3 = 0x80; // Configure CAN TX pin (CTX) as push-pull digital output
191 1 P1MDOUT |= 0x40; // Configure P1.6 as push-pull to drive LED
192 1 XBR2 = 0x40; // Enable Crossbar/low ports
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -