📄 main_block0.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 + -