?? main.lst
字號:
C51 COMPILER V7.50 MAIN 04/25/2008 10:51:19 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 BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安銘朗電子科技有限責(zé)任公司
3 * All rights reserved.
4 *
5 * 文件名稱: main.c
6 * 文件標(biāo)識: none
7 * 適用器件: C8051F040
8 *
9 * 摘 要: 本文件是串口0、1測試程序,將跳線器JP7、JP11短接。使用外部22.1184MHz晶振。
10 * 功能:Uart驅(qū)動程序,包括初始化、波特率設(shè)置,單字節(jié)發(fā)送接收、字符串發(fā)送接受等。
11 * 程序運行時向PC機發(fā)送"WWW.MLARM.COM";接收到PC機的數(shù)據(jù)后,再將該數(shù)據(jù)發(fā)送
12 * 回PC機。按開發(fā)板上鍵盤,將該鍵值發(fā)送到PC機.串口調(diào)試最好應(yīng)用支持中文格式
13 * 的串口調(diào)試助手,否則不能正常顯示。
14 *
15 * 當(dāng)前版本:1.2
16 * 作 者:張寧強
17 * 完成日期:2006年1月10日
18 *
19 * 歷史版本:1.0
20 * 原作者 : 李林利 盧陽
21 * 完成日期:2005年6月1日
22 *************************************************************************************/
23
24 /************************************************************************************/
25 // 引用外部頭文件
26
27 #include "c8051f040.h"
28 #include "Const.h"
29 #include "uart.h"
30 #include "delay.h"
31
32 //sbit LED=P3^7;
33 // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
34 // datasheet
35 ////////////////////////////////////////////////////////////////////////////////
36 #define CANCTRL 0x00 //Control Register
37 #define CANSTAT 0x01 //Status register
38 #define ERRCNT 0x02 //Error Counter Register
39 #define BITREG 0x03 //Bit Timing Register
40 #define INTREG 0x04 //Interrupt Low Byte Register
41 #define CANTSTR 0x05 //Test register
42 #define BRPEXT 0x06 //BRP Extension Register
43 ////////////////////////////////////////////////////////////////////////////////
44 //IF1 Interface Registers
45 ////////////////////////////////////////////////////////////////////////////////
46 #define IF1CMDRQST 0x08 //IF1 Command Rest Register
47 #define IF1CMDMSK 0x09 //IF1 Command Mask Register
48 #define IF1MSK1 0x0A //IF1 Mask1 Register
49 #define IF1MSK2 0x0B //IF1 Mask2 Register
50 #define IF1ARB1 0x0C //IF1 Arbitration 1 Register
51 #define IF1ARB2 0x0D //IF1 Arbitration 2 Register
52 #define IF1MSGC 0x0E //IF1 Message Control Register
53 #define IF1DATA1 0x0F //IF1 Data A1 Register
54 #define IF1DATA2 0x10 //IF1 Data A2 Register
55 #define IF1DATB1 0x11 //IF1 Data B1 Register
C51 COMPILER V7.50 MAIN 04/25/2008 10:51:19 PAGE 2
56 #define IF1DATB2 0x12 //IF1 Data B2 Register
57 ////////////////////////////////////////////////////////////////////////////////
58 //IF2 Interface Registers
59 ////////////////////////////////////////////////////////////////////////////////
60 #define IF2CMDRQST 0x20 //IF2 Command Rest Register
61 #define IF2CMDMSK 0x21 //IF2 Command Mask Register
62 #define IF2MSK1 0x22 //IF2 Mask1 Register
63 #define IF2MSK2 0x23 //IF2 Mask2 Register
64 #define IF2ARB1 0x24 //IF2 Arbitration 1 Register
65 #define IF2ARB2 0x25 //IF2 Arbitration 2 Register
66 #define IF2MSGC 0x26 //IF2 Message Control Register
67 #define IF2DATA1 0x27 //IF2 Data A1 Register
68 #define IF2DATA2 0x28 //IF2 Data A2 Register
69 #define IF2DATB1 0x29 //IF2 Data B1 Register
70 #define IF2DATB2 0x2A //IF2 Data B2 Register
71 ////////////////////////////////////////////////////////////////////////////////
72 //Message Handler Registers
73 ////////////////////////////////////////////////////////////////////////////////
74 #define TRANSREQ1 0x40 //Transmission Rest1 Register
75 #define TRANSREQ2 0x41 //Transmission Rest2 Register
76
77 #define NEWDAT1 0x48 //New Data 1 Register
78 #define NEWDAT2 0x49 //New Data 2 Register
79
80 #define INTPEND1 0x50 //Interrupt Pending 1 Register
81 #define INTPEND2 0x51 //Interrupt Pending 2 Register
82
83 #define MSGVAL1 0x58 //Message Valid 1 Register
84 #define MSGVAL2 0x59 //Message Valid 2 Register
85
86 ////////////////////////////////////////////////////////////////////////////////
87 //Global Variables
88 ////////////////////////////////////////////////////////////////////////////////
89
90 //#define QUENEUART 4
91 //#define QUENECAN 8 //兩個緩存隊列的數(shù)組大小,用常量表示,方便修改
92 //xdata最大可以64K,但是F040有4K+256B的內(nèi)部RAM,所以此處xdata可取4K范圍
93 //idata為內(nèi)部256B快速尋址RAM區(qū)域 pdata為外部尋址空間 data為idata中的前128B bdata是data中的16B
94
95 char data MsgNum,status;
96 unsigned char xdata CAN_Data[8],UART_Data[4],CAN_Datachannel[64];
97 unsigned int data pp=0,able1=0,able2=0;
98 unsigned int data ii,jjj=0;pcan=0,puart=0,puart1=0;canlength=0,func=0,pchanh=0,pchanl=0,channelable=0;
99 bit bdata nexten=1;
100
101 unsigned long data BDR;
102 sbit LED = P1^3;
103 sfr16 CAN0DAT = 0xD8;
104
105
106
107 ////////////////////////////////////////////////////////////////////////////////
108 // Function PROTOTYPES
109 ////////////////////////////////////////////////////////////////////////////////
110
111 // Initialize Message Object
112 void clear_msg_objects (void);
113 void init_msg_object_TX (char MsgNum,ID);
114 void init_msg_object_RX (char MsgNum,ID);
115 void start_CAN (void);
116 void receive_data (char MsgNum);
117 void CAN_trans (char MsgNum);
C51 COMPILER V7.50 MAIN 04/25/2008 10:51:19 PAGE 3
118
119
120 /************************************************************************************
121 // 系統(tǒng)初始化功能子程序
122 *************************************************************************************/
123 /************************************************************************************
124 // 系統(tǒng)初始化功能子程序
125 *************************************************************************************/
126 /***********************************************************************************
127 * 函數(shù)名稱:SYSCLK_Init;
128 *
129 * 函數(shù)功能描述:系統(tǒng)時鐘初始化,使用外部22.1184MHz晶振作為時鐘源,using the PLL;
130 * This routine initializes the system clock to use an external 22.1184 MHz
131 * crystal oscillator multiplied by a factor of 9/2 using the PLL as its
132 * clock source. The resulting frequency is 22.1184 MHz * 8/2 = 88.45 MHz
133 *
134 * 輸入?yún)?shù):none;
135 *
136 * 返回數(shù)據(jù):none;
137 *
138 * 注意: none;
139 ************************************************************************************/
140
141 void SYSCLK_Init (void)
142 {
143 1
144 1 int n; // local variable used in delay FOR loop.
145 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
146 1 SFRPAGE = CONFIG_PAGE; // switch to config page to config oscillator
147 1
148 1 OSCXCN = 0x77; // start external oscillator; 22.1 MHz Crystal
149 1 // system clock is 22.1 MHz / 2 = 11.05 MHz
150 1 for (n=0;n<255;n++); // delay about 1ms
151 1 while ((OSCXCN & 0x80) == 0); // wait for oscillator to stabilize
152 1 CLKSEL |= 0x01; // switch to external oscillator
153 1 OSCICN = 0x00; // Disable the internal osc.
154 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
155 1
156 1 }
157
158 /***********************************************************************************
159 * 函數(shù)名稱:PORT_Init;
160 *
161 * 函數(shù)功能描述:配置端口初始化,配置交叉開關(guān)和端口;
162 *
163 * 輸入?yún)?shù):none;
164 *
165 * 返回數(shù)據(jù):none;
166 *
167 * 注意: none;
168 ************************************************************************************/
169 void PORT_Init (void)
170 {
171 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
172 1
173 1 SFRPAGE = CONFIG_PAGE; //Port SFR's on Configuration page
174 1 XBR3 = 0x80; // Configure CAN TX pin (CTX) as push-pull digital output
175 1 XBR0 = 0x05; //設(shè)置XBR0
176 1 XBR1 = 0x14; //設(shè)置XBR1
177 1 XBR2 = 0x44; //打開交叉開關(guān)和弱上拉
178 1 P0MDOUT = 0x10; //設(shè)置P0口輸出
179 1 P1MDOUT = 0x00; //設(shè)置P1口輸出
C51 COMPILER V7.50 MAIN 04/25/2008 10:51:19 PAGE 4
180 1 P1|=0x08;
181 1 P3MDOUT = 0xff; //設(shè)置P3口輸出
182 1 P4MDOUT = 0xff; //設(shè)置P4為輸出口
183 1 P5MDOUT = 0x00; //設(shè)置P5為輸入口
184 1 P5 = 0xff;
185 1 P6MDOUT = 0xff; //設(shè)置P6為輸出口
186 1 P7MDOUT = 0x3b; //設(shè)置P7為輸出口,P7.2為數(shù)字輸入
187 1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -