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

📄 main_block0.lst

📁 一个用SST单片机实现单字节FLASH数据存储代替EEPROM的实用例子
💻 LST
字号:
C51 COMPILER V7.50   MAIN_BLOCK0                                                           11/04/2005 23:41:37 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN_BLOCK0
OBJECT MODULE PLACED IN MAIN_BLOCK0.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE MAIN_BLOCK0.c OPTIMIZE(4,SPEED) BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS

line level    source

   1          //#pragma
   2          /*********************************************************************************************************
             -**
   3          * IAP_SST.c - SST89X564/554 SST89X516/58/54/52RD2的IAP在使用中编程
   4          *              和如何使用地址不连续的BLOCK1块和BLOCK0一起作为程序存储区的演示程序
   5          *            弘微科技(SPAC)  田伯运    
   6          *               WEB: www.spacltd.com.cn         TEL:0755-26010579   E-MAIL:andy.tian@spacltd.com.cn
   7          *
   8          * 功能介绍: 
   9          *               1.主要是演示SST的MCU(SST89X564/554 SST89X516/58/54/52RD2)的内部FLASH在线擦除编程
  10          *               2.如何使用地址定位指令,使地址不连续的两个存储块都做为程序存储区使用,将原本
  11          *         8K的程序存储区的SST89E/V52RD2变为16K的程序存储区.*
  12          *                 解决方法:在连接选项"KEIL C51/PROJECT/OPTIONS FOR TARGET/BL51 LOCATE/CODE"中
  13          *                                       加入模块定位命令:*TOOL(0XF800),BLOCK1(0XF900)
  14          *       3.如何在C51中嵌入A51汇编语言.
  15          *               4.如何使用SOFTICE进行在线仿真SST单片机内部的1K扩展RAM和FLASH存储单元的擦除,改写,内容读取(实时显示)
  16          *               5.也可作为软件仿真的逻辑分析仪功能的一个演示例子
  17          *
  18          *   功能,可以对单片机内部的FLASH存储器的内容改写更新,包括扇区擦除,字节编程,字节校验
  19          *   等常用函数,用户可根据这些基本功能,延伸出MCU的程序在线升级,数据存储等功能.
  20          *       本例子是对内部BLOCK1的FLASH的0X1000H地址的一个扇区(128个字节单元),写入00--0X80
  21          *   的数据.如果编程成功,则闪烁P1.2,P1.3两个灯,如果编程失败,则点亮P1.2灯.
  22          **********************************************************************************************************
             -*/
  23          #include <SST89x5xxRD2.H>               //加入SST MCU单片机的头文件,这样就剩去了许多的特殊寄存器的声明,                                                         
  24          #include <stdio.h>                              
  25          
  26          /*********************************************************************************************************
             -**
  27          * Global Variable Definition
  28          **********************************************************************************************************
             -*/
  29          #define SST89X516_564RD 1
  30          #define SST89X5XRD              0
  31          
  32          #if SST89X516_564RD
  33          unsigned short int EEPROM_ADDR_START = 0x01000;         
  34          //定义SST89EV564,89EV516RD2的数据存储起始地址在BLOCK1的0X1000-0X1FFF
  35          #endif
  36          
  37          #if SST89X5XRD
              unsigned short int EEPROM_ADDR_START = 0x0F000; 
              //定义SST89EV554,89EV5XRD2的数据存储起始地址在BLOCK1的0XF000-0XFFFF
              #endif
  41          
  42          unsigned int test_addr =0xf802;         //测试的FLASH地址单元为0xf802
  43          const unsigned char SECT_SIZE = 0x80; /* 定义一个扇区的字节数为0x80=128个*/
  44          unsigned char ErrorCode; /*show the result of the operation*/
  45          sbit LED_ERR = P1^2;
  46          sbit LED_OK  = P1^3;
  47          
  48          /*********************************************************************************************************
             -**
  49          * Function Prototype,用到的函数声明
  50          **********************************************************************************************************
C51 COMPILER V7.50   MAIN_BLOCK0                                                           11/04/2005 23:41:37 PAGE 2   

             -*/
  51          /*********************************************************************************************************
             -**
  52          * 用到的外部函数声明
  53          **********************************************************************************************************
             -*/
  54          extern void sector_erase(unsigned short int dataAddr);  //扇区擦除函数,擦除的地址为dataAddr
  55          extern void byte_program(unsigned short int dataAddr, unsigned char dataByte);//字节编程函数
  56          extern bit byte_modify(unsigned short int dataAddr, unsigned char dataByte);//字节编程函数
  57          extern unsigned char byte_verify(unsigned short int dataAddr); //字节校验函数
  58          extern int ready();             //检查是否擦除或编程的操作是否已经完成
  59          extern void error();            //超时错误
  60          extern void DelayUs(unsigned char n);           //一个外部在BLOCK1块内的C51函数
  61          extern void DelayMs(unsigned char n);           //一个外部在BLOCK1块内的C51函数
  62          extern void delay_100ms(unsigned char n);       //延时100MS函数,一个外部在BLOCK1块内的C51函数
  63          
  64          /*********************************************************************************************************
             -**
  65          * IAP演示主程序
  66          **********************************************************************************************************
             -*/
  67          void main()
  68          {
  69   1              unsigned short int destAddr = EEPROM_ADDR_START;//擦除与编程的首地址
  70   1      
  71   1              //----------------------测试FLASH_IAP在线编程的功能演示4:正常显示为:P1口显示暗灯的数据加一--------------
             -----------
  72   1              //--可使用VIEW->MEMORY WINDOW->B1:0X1000查看SST MCU内部BLOCK1 FLASH存储器内容(B1:0X0000-0X1FFF)或(B1:0XE0
             -00-0XFFFF)的变化--------------------
  73   1              SFCF=0x41;                                                              //使BLOCK1显示在0XE000-0XFFFF之间(SST89EV554,89EV5XRD2)
  74   1              //SFCF=0x43;                                                            //??使BLOCK1定位在0X0000-0X1FFF之间(SST89EV564,89EV516RD2)
  75   1              sector_erase(0xf100);
  76   1              byte_modify(test_addr, 0xe7);                                   //将0X1002存储器单元的内容修改为0X34
  77   1              byte_modify(test_addr, 0x23);                                   //将0X1002存储器单元的内容修改为0X98
  78   1              byte_modify(test_addr, 0x45);                                   //将0X1002存储器单元的内容修改为0X98
  79   1              P1|=0x01;
  80   1              while(P1&0x01);                                                         //如果P1.0=1,则一直原地循环
  81   1              //----------------------测试FLASH_IAP在线编程的功能演示4-------------------------
  82   1      
  83   1              while(1)
  84   1                      {       
  85   2                              LED_OK=~LED_OK;                                 //闪烁成功和错误指示灯(P1.3和P1.2),表示编程成功
  86   2                              LED_ERR=~LED_ERR;
  87   2                              delay_100ms(10);//调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序1
  88   2                              DelayMs(3);             //调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序2
  89   2                              DelayUs(3);             //调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序3
  90   2                      }
  91   1      }
  92          
C51 COMPILER V7.50   MAIN_BLOCK0                                                           11/04/2005 23:41:37 PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION main (BEGIN)
                                           ; SOURCE LINE # 67
                                           ; SOURCE LINE # 68
                                           ; SOURCE LINE # 69
0000 850000      R     MOV     destAddr,EEPROM_ADDR_START
0003 850000      R     MOV     destAddr+01H,EEPROM_ADDR_START+01H
                                           ; SOURCE LINE # 73
0006 75B141            MOV     SFCF,#041H
                                           ; SOURCE LINE # 75
0009 7F00              MOV     R7,#00H
000B 7EF1              MOV     R6,#0F1H
000D 120000      E     LCALL   _sector_erase
                                           ; SOURCE LINE # 76
0010 7DE7              MOV     R5,#0E7H
0012 AF00        R     MOV     R7,test_addr+01H
0014 AE00        R     MOV     R6,test_addr
0016 120000      E     LCALL   _byte_modify
                                           ; SOURCE LINE # 77
0019 7D23              MOV     R5,#023H
001B AF00        R     MOV     R7,test_addr+01H
001D AE00        R     MOV     R6,test_addr
001F 120000      E     LCALL   _byte_modify
                                           ; SOURCE LINE # 78
0022 7D45              MOV     R5,#045H
0024 AF00        R     MOV     R7,test_addr+01H
0026 AE00        R     MOV     R6,test_addr
0028 120000      E     LCALL   _byte_modify
                                           ; SOURCE LINE # 79
002B 439001            ORL     P1,#01H
002E         ?C0001:
                                           ; SOURCE LINE # 80
002E E590              MOV     A,P1
0030 20E0FB            JB      ACC.0,?C0001
0033         ?C0003:
                                           ; SOURCE LINE # 83
                                           ; SOURCE LINE # 84
                                           ; SOURCE LINE # 85
0033 B293              CPL     LED_OK
                                           ; SOURCE LINE # 86
0035 B292              CPL     LED_ERR
                                           ; SOURCE LINE # 87
0037 7F0A              MOV     R7,#0AH
0039 120000      E     LCALL   _delay_100ms
                                           ; SOURCE LINE # 88
003C 7F03              MOV     R7,#03H
003E 120000      E     LCALL   _DelayMs
                                           ; SOURCE LINE # 89
0041 7F03              MOV     R7,#03H
0043 120000      E     LCALL   _DelayUs
                                           ; SOURCE LINE # 90
0046 80EB              SJMP    ?C0003
0048 22                RET     
             ; FUNCTION main (END)

C51 COMPILER V7.50   MAIN_BLOCK0                                                           11/04/2005 23:41:37 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
_byte_modify . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
ErrorCode. . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0000H  1
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
_DelayMs . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
_DelayUs . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
LED_ERR. . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0092H  1
SFCF . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B1H  1
CCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D8H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  destAddr . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0000H  2
WDTC . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C0H  1
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
EEPROM_ADDR_START. . . . . . . . . . .  PUBLIC   DATA   U_INT    0001H  2
test_addr. . . . . . . . . . . . . . .  PUBLIC   DATA   U_INT    0003H  2
_delay_100ms . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
SECT_SIZE. . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0005H  1
IEA. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00E8H  1
LED_OK . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0093H  1
IPA. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00F8H  1
_sector_erase. . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     73    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -