📄 xram.lst
字号:
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 1
DOS C51 COMPILER V3.96, COMPILATION OF MODULE XRAM
OBJECT MODULE PLACED IN XRAM.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE XRAM.C DB OE
stmt level source
1
2 //----------------------------------------------------------------
3 // C8051F020实验核心模块测试程序
4 // XDATA RAM实验
5 //
6 // 实现功能:通过交叉开关,将UART0配置到P00,P01引脚上,实现:
7 // 1.通过计算机向模块发送命令控制底板上的LED灯
8 // 2.串口通信协议是基于字符的,可使用超级终端进行调试。支持BACKSPACE
9 // 键,但是不支持其它功能键和方向键。
10 //
11 // XRAM说明:
12 // 1.底板上外边扩展的XRAM地址空间分布:
13 // 62LV256: 0-0x7FFF,32K
14 // CCP2201: 0x8000-0xBFFF
15 // 大容量RAM,可通过核心板上跳线选择使用RTC的电池作为长期存储设备;
16 // 62LV2568:0xC000-0xFFFF
17 // HRAM3:HRAM0,共16页
18 // 当使用62LV1024时共有8页
19 //
20 // 实验条件:
21 // 1.底板上JP1的1,2,4,6跳线插上跳线帽接通
22 //
23 // 说明:
24 // 本模块中配套的测试程序都是以消息驱动的,如果对程序实现思想不甚清楚,
25 // 可与公司联系
26 //
27 // scj,scj@sina.com,2007/04
28 //---------------------------------------------------------------
29 // 修改记录
30 // 版本 时间 人员 内容
31 // 1.0 2007/4/30 scj 建立文件,实现基本功能
32 // 1.1 2007/6/4 scj 根据底板V122修改功能
33 //
34 //---------------------------------------------------------------
35 //----------------------------------------------------------------------------------------------------
36 // 命令说明:
37 // 字符通信协议,所有的命令以回车符结束
38 // 命令字符不区分大小写
39 // 键盘控制字符支持Backspace,其它控制键不支持
40 //
41 // 应答:命令操作成功,最后都将返回\r\nOK\r\n
42 // 命令错误,返回\r\nError\r\n
43 // 具体命令:
44 // 1.控制LED
45 // 命令格式:setled=灯序号,开关状态 \r
46 // 参数: 灯序号: 2,LED2
47 // 开关状态:ON,打开灯;OFF,关闭灯
48 // 应答: \r\nOK\r\n
49 // 2.测试SRAM,U2
50 // 命令格式:testsram\r
51 // 参数: 无
52 // 应答: 发送测试的结果;如果测试中发现错误,可能出现了芯片焊接问题或损坏问题
53 // 3.测试TRAM,U4
54 // 命令格式:testtram\r
55 // 参数: 无
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 2
56 // 应答: 发送每个页面的测试结果;测试过程中会修改RAM中保存的内容
57 // 4.向指定页面写入字符串
58 // 命令格式:writetram=页面\r
59 // 参数: 页面,0-15
60 // 应答: \r\nOK\r\n;\r\nError\r\n
61 // 说明: 写入的字符串均在页面的0偏移处开始写入,即0xC000地址空间;用户发送的字符串长度不要超过接收缓
-冲区的长度
62 // 5.读取指定页面从0偏移处开始的指定长度数据
63 // 命令格式:readtram=页面,长度\r
64 // 参数: 页面序号:欲写入的页面,0-15;
65 // 长度:要读出的字节个数
66 // 应答: 16进制的方式显示264个字节的内容;同时每个16进制后的括号内显示该字符;字节间用空格隔开
67 // \r\nOK\r\n
68
69 #include "F020.h"
70 #include <string.h>
71 #include <ctype.h>
72 #include <stdlib.h>
73
74 #define T62LV2568 0
75 #define T62LV1024 1
76
77 // 根据核心板上焊接的芯片选择相应的TRAM类型(芯片U4)
78 //#define TRAM_TYPE T62LV2568
79 #define TRAM_TYPE T62LV1024
80
81 #if(TRAM_TYPE==T62LV2568)
#define RAM_PAGE 16
#else
84 #define RAM_PAGE 8
85 #endif
86
87
88 //--------------------------------------------
89 // 数据类型定义
90 //--------------------------------------------
91
92 // 基本数据类型
93 typedef unsigned char BYTE; // 8位无符号数
94 typedef unsigned int WORD; // 16位无符号数
95 typedef unsigned long DWORD; // 32位无符号数
96
97 // 结构体
98 typedef struct
99 {
100 BYTE base; // DIDA次数
101 BYTE second; // 秒
102 BYTE minute; // 分
103
104 }S_TIME;
105
106
107 //--------------------------------------------
108 // 引脚定义
109 //--------------------------------------------
110 #define P_LED2 P31
111
112
113 //--------------------------------------------
114 // 宏定义
115 //--------------------------------------------
116
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 3
117 // 系统消息定义
118 #define SECD_SIGNAL 0x01
119 #define MINU_SIGNAL 0x02
120 #define UART0RECV_SIGNAL 0x04
121
122
123 // 常量定义
124
125 //定时器0定时,使用SYSCLK/12作为时钟源
126 //定时计算方法,TH0:TL0= 65536-t*SYSCLK/12
127 //定时25ms,TH0:TL0=0x4C 00
128 #define TMR0H 0x4C
129 #define TMR0L 0x00
130
131 #define TICKS_PER_SEC 40
132
133 #define RECVBUF_LEN 50
134
135
136 code BYTE ASCII_CODE[]={"0123456789ABCDEF"};
137 code BYTE TESTDATA[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xFF,0xFE,0xFC,0xFA,0xF8,0xF4,0xF2};
138 //--------------------------------------------
139 // 函数声明
140 //--------------------------------------------
141 void CommandProc(char *pRecvString);
142 void SendString(char *pSendString);
143
144 void SendHex(BYTE nData);
145 void SendWordHex(WORD wData);
146 void SendBuf(BYTE buf);
147
148
149 BYTE TestSRAM();
150 BYTE TestTRAM();
151
152 char strncmps(char *pString1,char *pString2,int iLen);
153 //--------------------------------------------
154 // 全局变量定义
155 // 全局变量以g_开头
156 // 位变量: g_b
157 // 无符号字节变量: g_c
158 // 无符号双字节变量: g_w
159 // 无符号4字节变量: g_dw
160 // 有符号数在类型前加s,比如char型位g_sc
161 // 结构体为g_s后为大写
162 //--------------------------------------------
163 data BYTE g_cMainSignal; // 主消息变量
164
165 data S_TIME g_sTime; // 主时钟
166
167 data BYTE g_cRecvPointer; // 接收指针
168 data BYTE g_cRecvLength; // 接收数据长度
169 idata BYTE g_cRecvBuffer[RECVBUF_LEN]; // 接收缓冲区,idata
170
171 //-----------------------------------------------
172 // 初始化函数
173 //
174 //-----------------------------------------------
175 void Timer_Init()
176 {
177 1
178 1 PCON = 0;
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 4
179 1
180 1 //.......................................
181 1 // 设置定时器的时钟信号
182 1 // - T4M T2M T1M T0M - - -
183 1 // 0 1 0 1 0 0 0 0
184 1 // 1:使用SYSCLK;0:使用SYSCLK/12
185 1 // 定时器0,1,2,4均使用SYSCLK
186 1 //.......................................
187 1 CKCON = 0x70;
188 1
189 1
190 1 //......................................
191 1 // 定时0工作在16位定时器模式
192 1 // 定时器1工作在8位重载模式
193 1 //......................................
194 1
195 1 TMOD = 0x21;
196 1
197 1 //....................................
198 1 // T0作为系统节拍时钟
199 1 // 定时计算方法= 65536-t*SYSCLK
200 1 //.....................................
201 1 TH0 = TMR0H;
202 1 TL0 = TMR0L;
203 1
204 1 //.......................................
205 1 // T1作为串口0时钟
206 1 // 串口0波特率=SYSCLK/16*(256-TMR1LOAD)
207 1 // T1波特率=9600
208 1 //.......................................
209 1
210 1 TH1 = 0xB8;
211 1 TL1 = 0xB8;
212 1
213 1 TCON = 0x00;
214 1
215 1
216 1 //..................................................
217 1 // T2 and T3 not used
218 1 //..................................................
219 1 RCAP2H = 0x00; // Timer 2 Capture Register High Byte
220 1 RCAP2L = 0x00; // Timer 2 Capture Register Low Byte
221 1 TH2 = 0x00; // Timer 2 High Byte
222 1 TL2 = 0x00; // Timer 2 Low Byte
223 1 T2CON = 0x00; // Timer 2 Control Register
224 1
225 1 TMR3RLL = 0x00; // Timer 3 Reload Register Low Byte
226 1 TMR3RLH = 0x00; // Timer 3 Reload Register High Byte
227 1 TMR3H = 0x00; // Timer 3 High Byte
228 1 TMR3L = 0x00; // Timer 3 Low Byte
229 1 TMR3CN = 0x00; // Timer 3 Control Register
230 1
231 1 //.....................................................
232 1 // T4 作为串口1波特率发生器
233 1 // T4波特率=SYSCLK/32*(65536-RCAP4H:RCAP4L)
234 1 // T4波特率=9600
235 1 //.....................................................
236 1 RCAP4H = 0xFF; // Timer 4 Capture Register High Byte
237 1 RCAP4L = 0xDC; // Timer 4 Capture Register Low Byte
238 1 TH4 = 0xFF; // Timer 4 High Byte
239 1 TL4 = 0xDC; // Timer 4 Low Byte
240 1 T4CON = 0x30; // Timer 4 Control Register
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 5
241 1
242 1
243 1 }
244
245 //...........................................................
246 // 功能:UART0初始化
247 // 输入参数:无
248 // 输出参数:无
249 // 注意:1.应该首先使用交叉开关为UART0分配相应的引脚
250 // 2.初始化定时器1作为波特率发生器
251 //..........................................................
252 void UART0_Init()
253 {
254 1
255 1 SCON0 = 0x50; // 8位波特率异步通信模式
256 1
257 1 REN0 = 1; // 使能UART0接收
258 1 TR1 = 1; // 启动定时器1
259 1 }
260
261 //--------------------------------------------------
262 // 只使用外部RAM
263 //------------------------------------------------
264 void EMI_Init()
265 {
266 1 EMI0CF = 0x2F;
267 1 //EMI0TC = 0x8B; // 系统时钟为22。1184,地址建立时间和WR,RD时间不能太短,否则可能导致访问RAM错误
268 1 // 具体时间参数可以参考数据手册,8B
269 1 EMI0TC = 0xFF;
270 1 }
271 //......................................................
272 // 功能:配置交叉开关和端口方向
273 // 输入参数:无
274 // 输出参数:无
275 // 注意:该函数使能交叉开关
276 // TX0,RX0被分配到P00,P01
277 //.....................................................
278
279 void Port_IO_Init()
280 {
281 1 // P0.0 - TX0 (UART0), Open-Drain, Digital
282 1 // P0.1 - RX0 (UART0), Open-Drain, Digital
283 1 // P0.2 - SCK (SPI0), Open-Drain, Digital
284 1 // P0.3 - MISO (SPI0), Open-Drain, Digital
285 1 // P0.4 - MOSI (SPI0), Open-Drain, Digital
286 1 // P0.5 - NSS (SPI0), Open-Drain, Digital
287 1 // P0.6 - SDA (SMBus), Open-Drain, Digital
288 1 // P0.7 - SCL (SMBus), Open-Drain, Digital
289 1
290 1 // P1.0 - Skipped, Open-Drain, Analog
291 1 // P1.1 - Skipped, Open-Drain, Analog
292 1 // P1.2 - Skipped, Open-Drain, Analog
293 1 // P1.3 - Skipped, Open-Drain, Analog
294 1 // P1.4 - Skipped, Open-Drain, Analog
295 1 // P1.5 - Skipped, Open-Drain, Analog
296 1 // P1.6 - Skipped, Open-Drain, Analog
297 1 // P1.7 - Skipped, Open-Drain, Analog
298 1
299 1 // P2.0 - TX1 (UART1), Open-Drain, Digital
300 1 // P2.1 - RX1 (UART1), Open-Drain, Digital
301 1 // P2.2 - INT0 (Tmr0), Open-Drain, Digital
302 1 // P2.3 - INT1 (Tmr1), Open-Drain, Digital
C51 COMPILER V3.96, SN-83203013 XRAM 09/15/07 22:18:10 PAGE 6
303 1 // P2.4 - Unassigned, Open-Drain, Digital
304 1 // P2.5 - Unassigned, Open-Drain, Digital
305 1 // P2.6 - Unassigned, Open-Drain, Digital
306 1 // P2.7 - Unassigned, Open-Drain, Digital
307 1
308 1 // P3.0 - Unassigned, Open-Drain, Digital
309 1 // P3.1 - Unassigned, Push-Pull, Digital
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -