📄 lcdc_040.lst
字号:
C51 COMPILER V7.08 LCDC_040 04/24/2008 15:54:41 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE LCDC_040
OBJECT MODULE PLACED IN lcdc_040.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe lcdc_040.c DB OE
line level source
1
2
3
4 ////////////////////////////////////////////////////////////////////////////////
5 // Includes
6 ////////////////////////////////////////////////////////////////////////////////
7
8 #include <c8051f040.h> // SFR declarations
9
10 // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
11 // datasheet 212页表18.2 寄存器索引号
12 ////////////////////////////////////////////////////////////////////////////////
13 #define CANCTRL 0x00 //Control Register
14 #define CANSTAT 0x01 //Status register
15 #define ERRCNT 0x02 //Error Counter Register
16 #define BITREG 0x03 //Bit Timing Register
17 #define INTREG 0x04 //Interrupt Low Byte Register
18 #define CANTSTR 0x05 //Test register
19 #define BRPEXT 0x06 //BRP Extension Register
20 ////////////////////////////////////////////////////////////////////////////////
21 //IF1 Interface Registers
22 ////////////////////////////////////////////////////////////////////////////////
23 #define IF1CMDRQST 0x08 //IF1 Command Rest Register
24 #define IF1CMDMSK 0x09 //IF1 Command Mask Register
25 #define IF1MSK1 0x0A //IF1 Mask1 Register
26 #define IF1MSK2 0x0B //IF1 Mask2 Register
27 #define IF1ARB1 0x0C //IF1 Arbitration 1 Register
28 #define IF1ARB2 0x0D //IF1 Arbitration 2 Register
29 #define IF1MSGC 0x0E //IF1 Message Control Register
30 #define IF1DATA1 0x0F //IF1 Data A1 Register
31 #define IF1DATA2 0x10 //IF1 Data A2 Register
32 #define IF1DATB1 0x11 //IF1 Data B1 Register
33 #define IF1DATB2 0x12 //IF1 Data B2 Register
34 ////////////////////////////////////////////////////////////////////////////////
35 //IF2 Interface Registers
36 ////////////////////////////////////////////////////////////////////////////////
37 #define IF2CMDRQST 0x20 //IF2 Command Rest Register
38 #define IF2CMDMSK 0x21 //IF2 Command Mask Register
39 #define IF2MSK1 0x22 //IF2 Mask1 Register
40 #define IF2MSK2 0x23 //IF2 Mask2 Register
41 #define IF2ARB1 0x24 //IF2 Arbitration 1 Register
42 #define IF2ARB2 0x25 //IF2 Arbitration 2 Register
43 #define IF2MSGC 0x26 //IF2 Message Control Register
44 #define IF2DATA1 0x27 //IF2 Data A1 Register
45 #define IF2DATA2 0x28 //IF2 Data A2 Register
46 #define IF2DATB1 0x29 //IF2 Data B1 Register
47 #define IF2DATB2 0x2A //IF2 Data B2 Register
48 ////////////////////////////////////////////////////////////////////////////////
49 //Message Handler Registers
50 ////////////////////////////////////////////////////////////////////////////////
51 #define TRANSREQ1 0x40 //Transmission Rest1 Register
52 #define TRANSREQ2 0x41 //Transmission Rest2 Register
53
54 #define NEWDAT1 0x48 //New Data 1 Register
55 #define NEWDAT2 0x49 //New Data 2 Register
C51 COMPILER V7.08 LCDC_040 04/24/2008 15:54:41 PAGE 2
56
57 #define INTPEND1 0x50 //Interrupt Pending 1 Register
58 #define INTPEND2 0x51 //Interrupt Pending 2 Register
59
60 #define MSGVAL1 0x58 //Message Valid 1 Register
61 #define MSGVAL2 0x59 //Message Valid 2 Register
62
63 ////////////////////////////////////////////////////////////////////////////////
64 //Global Variables
65 ////////////////////////////////////////////////////////////////////////////////
66 #define uchar unsigned char
67 #define uint unsigned int
68 #define ulong unsigned long
69
70
71 union intchar{
72 uint tempval;
73 struct{uchar hi;uchar low;}bytek;
74 };
75
76 bit isnewdata;
77 data uchar temppage;
78 data uchar status;
79 xdata uchar sdata[8]={0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
80
81
82
83 uchar xdata rdata[8];
84
85 char MsgNum;
86
87 int i;
88 bit lcdtoken=0;
89
90 sfr16 CAN0DAT = 0xD8;//CAN数据寄存器的低地址
91
92 #define uchar unsigned char
93 #define uint unsigned int
94
95 uchar xdata virt_port;
96 bit SPI_BUSY;
97
98 sbit LcdCs=P2^5;
99
100
101
102 ////////////////////////////////////////////////////////////////////////////////
103 // Function PROTOTYPES
104 ////////////////////////////////////////////////////////////////////////////////
105
106 // Initialize Message Object
107 void clear_msg_objects (void);
108 void init_msg_object_TX (char MsgNum,uint id);
109 void init_msg_object_RX (char MsgNum,uint id);
110 void start_CAN (void);
111
112 void external_osc (void);
113 void config_IO (void);
114
115 void stop_CAN (void);
116 void delay(int tim);
117 void receive_data(uchar MsgNum,char *p,char len);
C51 COMPILER V7.08 LCDC_040 04/24/2008 15:54:41 PAGE 3
118 void transmit(char MsgNum,char *p,char len);
119
120
121 void spi_init();
122 void writecode(uchar ins);
123 void writedata(uchar d);
124 void lcdchar (void);
125 void lcdinit();
126 void writelcd(uchar spi_data);
127
128
129 /*void delay(uint d)
130 {uint i,j;
131 for(i=0;i<d;i++);
132 {
133 for(j=10;j>0;j--);
134 }
135
136 }
137 */
138
139 ////////////////////////////////////////////////////////////////////////////////
140 // MAIN Routine
141 ////////////////////////////////////////////////////////////////////////////////
142 #define LEN 8
143
144 main () {
145 1 //char vid;
146 1 // disable watchdog timer
147 1 //xdata uchar ss1[8]={0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18};
148 1 //xdata uchar ss2[8]={0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28};
149 1 WDTCN = 0xde;
150 1 WDTCN = 0xad;
151 1
152 1 //configure Port I/O
153 1 config_IO();
154 1
155 1 // switch to external oscillator
156 1 external_osc();
157 1 spi_init();
158 1
159 1 ////////////////////////////////////////////////////////////////////////////////
160 1 // Configure CAN communications
161 1 //
162 1 // IF1 used for procedures calles by main program
163 1 // IF2 used for interrupt service procedure receive_data
164 1 //
165 1 // Message Object assignments:
166 1 // 0x02: Used to transmit commands to toggle its LED, arbitration number 1
167 1 //
168 1 ////////////////////////////////////////////////////////////////////////////////
169 1
170 1 // Clear CAN RAM
171 1 clear_msg_objects();
172 1
173 1 // Initialize message object to transmit data
174 1 init_msg_object_RX (0x04,2);
175 1
176 1 // Initialize message object to receive data
177 1 init_msg_object_TX (0x02,1);
178 1
179 1 //init_msg_object_TX (0x03,4);
C51 COMPILER V7.08 LCDC_040 04/24/2008 15:54:41 PAGE 4
180 1
181 1
182 1 // Enable CAN interrupts in CIP-51
183 1 EIE2 = 0x20;
184 1 EIE1= 0x01;
185 1
186 1
187 1 //Function call to start CAN
188 1 start_CAN();
189 1
190 1 //Global enable 8051 interrupts
191 1 EA = 1;
192 1
193 1 //Loop and wait for interrupts
194 1 while (1)
195 1 {
196 2 if(lcdtoken==1)
197 2 {
198 3 lcdtoken=0;
199 3 lcdinit();
200 3 lcdchar();
201 3 for(i=0;i<1000;i++)
202 3 delay(1000);
203 3 }
204 2
205 2 // transmit(3,ss2,LEN);
206 2
207 2
208 2 }
209 1 }
210
211
212 ////////////////////////////////////////////////////////////////////////////////
213 // Set up C8051F040
214 ////////////////////////////////////////////////////////////////////////////////
215
216 // Switch to external oscillator
217 void external_osc (void)//晶振初始化
218 {
219 1 int n; // local variable used in delay FOR loop.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -