📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 01/21/2007 21:09:42 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安铭朗电子科技有限责任公司
3 * All rights reserved.
4 *
5 * 文件名称: main.C
6 * 文件标识: none
7 * 适用器件: C8051F040
8 *
9 * 摘 要: 本文件是LED灯闪硕实验程序;LED灯每隔1秒亮1秒;将跳线器JP4短接;使用外部
10 * 22.1184MHz晶振,应用PLL倍频到100MHZ.
11 *
12 * 当前版本:1.2
13 * 作 者:张宁强
14 * 完成日期:2006年1月10日
15 *
16 * 历史版本:1.0
17 * 原作者 : 李林利 卢阳
18 * 完成日期:2005年6月1日
19 *************************************************************************************/
20 /************************************************************************************/
21 // 引用外部头文件
22
23 #include "c8051f040.h"
24 #include "Const.h"
25 #include "timer.h"
26 #include "lcd.h"
27 /************************************************************************************/
28
29 // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
30 // datasheet
31 ////////////////////////////////////////////////////////////////////////////////
32 #define CANCTRL 0x00 //Control Register
33 #define CANSTAT 0x01 //Status register
34 #define ERRCNT 0x02 //Error Counter Register
35 #define BITREG 0x03 //Bit Timing Register
36 #define INTREG 0x04 //Interrupt Low Byte Register
37 #define CANTSTR 0x05 //Test register
38 #define BRPEXT 0x06 //BRP Extension Register
39 ////////////////////////////////////////////////////////////////////////////////
40 //IF1 Interface Registers
41 ////////////////////////////////////////////////////////////////////////////////
42 #define IF1CMDRQST 0x08 //IF1 Command Rest Register
43 #define IF1CMDMSK 0x09 //IF1 Command Mask Register
44 #define IF1MSK1 0x0A //IF1 Mask1 Register
45 #define IF1MSK2 0x0B //IF1 Mask2 Register
46 #define IF1ARB1 0x0C //IF1 Arbitration 1 Register
47 #define IF1ARB2 0x0D //IF1 Arbitration 2 Register
48 #define IF1MSGC 0x0E //IF1 Message Control Register
49 #define IF1DATA1 0x0F //IF1 Data A1 Register
50 #define IF1DATA2 0x10 //IF1 Data A2 Register
51 #define IF1DATB1 0x11 //IF1 Data B1 Register
52 #define IF1DATB2 0x12 //IF1 Data B2 Register
53 ////////////////////////////////////////////////////////////////////////////////
54 //IF2 Interface Registers
55 ////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.50 MAIN 01/21/2007 21:09:42 PAGE 2
56 #define IF2CMDRQST 0x20 //IF2 Command Rest Register
57 #define IF2CMDMSK 0x21 //IF2 Command Mask Register
58 #define IF2MSK1 0x22 //IF2 Mask1 Register
59 #define IF2MSK2 0x23 //IF2 Mask2 Register
60 #define IF2ARB1 0x24 //IF2 Arbitration 1 Register
61 #define IF2ARB2 0x25 //IF2 Arbitration 2 Register
62 #define IF2MSGC 0x26 //IF2 Message Control Register
63 #define IF2DATA1 0x27 //IF2 Data A1 Register
64 #define IF2DATA2 0x28 //IF2 Data A2 Register
65 #define IF2DATB1 0x29 //IF2 Data B1 Register
66 #define IF2DATB2 0x2A //IF2 Data B2 Register
67 ////////////////////////////////////////////////////////////////////////////////
68 //Message Handler Registers
69 ////////////////////////////////////////////////////////////////////////////////
70 #define TRANSREQ1 0x40 //Transmission Rest1 Register
71 #define TRANSREQ2 0x41 //Transmission Rest2 Register
72
73 #define NEWDAT1 0x48 //New Data 1 Register
74 #define NEWDAT2 0x49 //New Data 2 Register
75
76 #define INTPEND1 0x50 //Interrupt Pending 1 Register
77 #define INTPEND2 0x51 //Interrupt Pending 2 Register
78
79 #define MSGVAL1 0x58 //Message Valid 1 Register
80 #define MSGVAL2 0x59 //Message Valid 2 Register
81
82 ////////////////////////////////////////////////////////////////////////////////
83
84 /************************************************************************************
85 // 常量及全局变量定义
86 *************************************************************************************/
87
88 sbit LED = P2^3; // LED='1' 灯亮
89 unsigned char flag;
90 unsigned int i;
91
92
93 void clear_msg_objects (void);
94 void init_msg_object_TX (char MsgNum);
95 void init_msg_object_RX (char MsgNum);
96 void start_CAN (void);
97 void transmit_Byte (char MsgNum);
98 /************************************************************************************
99 // 子函数声明
100 *************************************************************************************/
101
102 void SYSCLK_Init (void);
103 void PORT_Init (void);
104 void LED_state(unsigned char flag);
105
106 /************************************************************************************
107 // 主循环程序
108 *************************************************************************************/
109
110 void main (void)
111 {
112 1 char data SFRPAGE_SAVE;
113 1
114 1 WDTCN = 0xde; //关闭看门狗定时器
115 1 WDTCN = 0xad;
116 1
117 1 PORT_Init ();
C51 COMPILER V7.50 MAIN 01/21/2007 21:09:42 PAGE 3
118 1 lcd_init();
119 1 dis_clr();
120 1 dis_start0();
121 1
122 1 // Clear CAN RAM
123 1 clear_msg_objects();
124 1
125 1 // Initialize message object to transmit data
126 1 init_msg_object_TX (0x02);
127 1
128 1 // Initialize message object to receive data
129 1 init_msg_object_RX (0x01);
130 1
131 1 // Enable CAN interrupts in CIP-51
132 1 EIE2 = 0x20;
133 1
134 1 //Function call to start CAN
135 1 start_CAN();
136 1
137 1 //Global enable 8051 interrupts
138 1 EA = 1;
139 1
140 1 SYSCLK_Init (); //初始化
141 1
142 1
143 1
144 1 Timer0_init(SYSCLK/20); //50ms中断一次
145 1 i=0;
146 1 flag=0;
147 1 SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
148 1 SFRPAGE = SFR_PAGE_0; // set SFR page 0
149 1
150 1 ET0=1;
151 1
152 1 TR0 = 1; // 打开定时器Timer0
153 1
154 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
155 1
156 1 while (1)
157 1 {
158 2 LED_state(flag); // 改变LED状态
159 2 }
160 1 }
161
162 /************************************************************************************
163 // 系统初始化功能子程序
164 *************************************************************************************/
165
166 /***********************************************************************************
167 * 函数名称:SYSCLK_Init;
168 *
169 * 函数功能描述:系统时钟初始化,使用外部22.1184MHz晶振作为时钟源,using the PLL;
170 * This routine initializes the system clock to use an external 22.1184 MHz
171 * crystal oscillator multiplied by a factor of 9/2 using the PLL as its
172 * clock source. The resulting frequency is 22.1184 MHz * 9/2 = 100(99.6) MHz
173 *
174 * 输入参数:none;
175 *
176 * 返回数据:none;
177 *
178 * 注意: none;
179 ************************************************************************************/
C51 COMPILER V7.50 MAIN 01/21/2007 21:09:42 PAGE 4
180 void SYSCLK_Init (void)
181 {
182 1 int i; // delay counter
183 1
184 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
185 1
186 1 SFRPAGE = CONFIG_PAGE; // set SFR page
187 1
188 1 OSCXCN = 0x67; // start external oscillator with
189 1 // 22.1184MHz crystal
190 1
191 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
192 1
193 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
194 1
195 1 CLKSEL = 0x01; // Select the external osc. as
196 1 // the SYSCLK source
197 1
198 1 OSCICN = 0x00; // Disable the internal osc.
199 1
200 1
201 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
202 1 }
203 // Switch to external oscillator
204 void external_osc (void)
205 {
206 1 int n; // local variable used in delay FOR loop.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -