⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xram.lst

📁 F020集成以太网接口核心模块SRAM例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
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 + -