EEPROM 应用说明 1 适用产品 :SM59D03G2 SM59D04G2 series 2 应用范围 : 针对需使用 EEPORM 功能替换 STC 89C5X 的应用及汇编语言之范例程序 ( 使用内部扩充内存为暂存区 ) 3 功能说明 : 3.1 本公司上述产品 EEPORM 功能皆可替换 STC89C5X, 仅需对特殊功能缓存器定义 ( 详见表 1) 及 ISP 命令定义 ( 详见表 2) 作小修正即可 3.2 此 EEPROM 空间与 STC 相同需以每 512 bytes 为一单位 3.3 新茂产品执行页抹除功能时, 需先宣告该页之高地址, 以避免误抹除至其它页 表 1 SyncMOS and STC 特殊功能缓存器定义比较表 X: 表示不使用 Mnemonic STC Register Address SyncMOS Register Address ISP_DATA E2H F6H ISP_ADDRH E3H F4H ISP_ADDRL E4H F5H ISP_CMD E5H F7H ISP_TRIG E6H X ISP_CONTR E7H X SCONF X BFH 表 2 SyncMOS and STC ISP 命令定义比较表 ISP_CMD STC 定义值 SyncMOS 定义值 ISP_IAP_BYTE_READ 1 X ISP_IAP_BYTE_PROGRAM 2 80 ISP_IAP_SECTOR_ERASE 3 82 X: 表示不使用 1/9
4 如何转换 STC 程序至 SyncMOS 程序 : 4.1 ISP 模块启动 (ISP Enable):( 此程序 SyncMOS 必须加入 ) ISP_enable: CLR EA MOV ISP_DATA,#055H ;// Enable ISP function key sequence 1 MOV ISP_DATA,#0AAH ;// Enable ISP function key sequence 2 MOV ISP_DATA,#055H ;// Enable ISP function key sequence 3 ORL SCONF,#04H ; // Set ISP Enable SFR 4.2 ISP 模块关闭 (ISP Disable):( 此程序 SyncMOS 必须加入 ) ISP_disable: ANL SCONF,#0FBH ; // Disable ISP Enable SFR SETB EA 4.3 ISP 字符写入 (ISP Byte Program): // 与 STC 相同, 当字符为 FFH 时, 才可对其写入 ; 否则不行, 需先对该页执行页抹除功能 // STC 字符写入范例程序 ISP_Byte_Program: MOV ISP_DATA,#ONE_DATA MOV ISP_ADDRH,#BYTE_ADDR_HIGH MOV ISP_ADDRL,#BYTE_ADDR_LOW CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000 MOV ISP_CMD,#ISP_IAP_BYTE_PROGRAM MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP MOV ISP_CONTR,#00000000 MOV ISP_CMD,# 00000000 SETB EA 2/9
//SyncMOS 字符写入范例程序 ISP_Byte_Program: ACALL ISP_enable MOV ISP_DATA,ONE_DATA MOV ISP_ADDRH,BYTE_ADDR_HIGH MOV ISP_ADDRL,BYTE_ADDR_LOW MOV ISP_CMD,# ISP_IAP_BYTE_PROGRAM ACALL ISP_disable 4.4 ISP 字符读出 (Byte Read) // STC 字符读出范例程序 ISP_Byte_read: MOV ISP_ADDRH,#BYTE_ADDR_HIGH MOV ISP_ADDRL,#BYTE_ADDR_LOW CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000 MOV ISP_CMD,#ISP_IAP_BYTE_READ MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP MOV A,ISP_DATA MOV ISP_CONTR,#00000000 MOV ISP_CMD,# 00000000 SETB EA // SyncMOS 字符读出范例程序 ISP_Byte_read: CLR A MOV DPH, #BYTE_ADDR_HIGH MOV DPL, #BYTE_ADDR_LOW MOVC A,@A+DPTR 3/9
4.5 ISP 页抹除 (ISP Page Erase) // STC 页抹除范例程序 ISP_Sector_erase: MOV ISP_ADDRH,#SECTOR_FIRST_BYTE_ADDR_HIGH MOV ISP_ADDRL, #SECTOR_FIRST_BYTE_ADDR_LOW CLR EA MOV ISP_CONTR,#WAIT_TIME ORL ISP_CONTR,#10000000 MOV ISP_CMD,#ISP_IAP_SECTOR_ERASE MOV ISP_TRIG,#46H MOV ISP_TRIG,#0B9H NOP MOV A,ISP_DATA MOV ISP_CONTR,#00000000 MOV ISP_CMD,# 00000000 SETB EA // SyncMOS 页抹除范例程序 ISP_Sector_erase: ACALL ISP_enable MOV ISP_ADDRH,#SECTOR_FIRST_BYTE_ADDR_HIGH MOV ISP_ADDRL,#SECTOR_FIRST_BYTE_ADDR_LOW MOV ISP_CMD,#ISP_IAP_SECTOR_ERASE MOV ISP_CMD,#ISP_IAP_SECTOR_ERASE ACALL ISP_disable 5 汇编程序范例 :( 使用内部扩充内存为暂存区, 完整范例程序请至新茂网站下载 : 4/9
EEPROM_ASM_20071127.rar) 5.1 程序表头宣告 : ISP_IAP_BYTE_PROGRAM EQU 0x80; ISP_IAP_SECTOR_ERASE EQU 0x82; SFR ONE_DATA =0x20; SFR BYTE_ADDR_HIGH =0x21; SFR BYTE_ADDR_LOW =0x22; SFR ISP_DATA =0xF6; SFR ISP_ADDRH =0xF4; SFR ISP_ADDRL =0xF5; SFR ISP_CMD =0xF7; SFR RCON =0xB5; SFR SCONF =0xBF; SFR SECTOR_FIRST_BYTE_ADDR_HIGH =0x23; SFR SECTOR_FIRST_BYTE_ADDR_LOW =0x24; 5.2 内部扩充内存模块启动 (Expanded RAM enable): ======== ; Expand RAM enable. ======== Enable_expand_RAM: ORL SCONF,#02h ;// xxxx xx1x 5.3 内部扩充内存模块关闭 (Expanded RAM disable): ======== ; Expand RAM disable. ======== Disable_expand_RAM: ANL SCONF,#0FDh ;// xxxx xx0x 5.4 ISP 位数据写入 (ISP Byte Program) 5/9
; First Byte program, ; Address:0x2600~~0x26ff, data:0~~255 ; Address:0x2700~~0x27ff, data:0~~255 MOV DPTR,#2600H MOV R1,#00h ;data Byte_program: MOV BYTE_ADDR_HIGH,DPH MOV BYTE_ADDR_LOW,DPL MOV ONE_DATA,R1 CALL ISP_Byte_Program ;// ISP_Byte_Program 子程序参考 4-3 INC DPTR MOV A,DPH INC R1 CJNE A,#028h,Byte_program 5.5 ISP 位数据读出 (ISP Byte Read) == ; Read data,address:0x2600~0x26ff, data:0x00~0xff ; Save data to expanded RAM 0x0100~0x01FF, ; OME=1,expanded 768 byte RAM, ; One page of data ram = 256 bytes, ; Expanded RAM have three pages.rcon,#01h, page one Read_data: MOV DPTR,#02600h MOV RCON,#01H ;change expanded RAM to page 1, MOV R0,#00h Read_data1: MOV BYTE_ADDR_HIGH,DPH MOV BYTE_ADDR_LOW,DPL CALL ISP_Byte_read ;// ISP_Byte_Read 子程序参考 4-4 MOVX @R0,A INC R0 6/9
INC DPTR MOV A,DPH CJNE A,#027h,Read_data1 == ; Read data,address:0x2700~0x27ff, data:0x00~0xff ; Save data to expanded RAM 0x0200~0x02FF, ; OME=1,expanded 768 byte RAM, ; One page of data ram = 256 bytes, ; Expanded RAM have three pages.rcon,#02h, page two == Read_data2: MOV DPTR,#02700h MOV RCON,#02H ;change expanded RAM to page 2, MOV R0,#00h Read_data3: MOV BYTE_ADDR_HIGH,DPH MOV BYTE_ADDR_LOW,DPL CALL ISP_Byte_read ;// ISP_Byte_Read 子程序参考 4-4 MOVX @R0,A INC R0 INC DPTR MOV A,DPH CJNE A,#028h,Read_data3 5.6 ISP 页抹除 (ISP Page Erase): ;First page erase ;Erase from 0x2600~0x27FF; ;Only need to define Hi-Byte Address Page_erase: MOV SECTOR_FIRST_BYTE_ADDR_HIGH,#026h CALL ISP_Sector_erase ;// ISP_Sector_erase 子程序参考 4-5 6 缓存器说明 :SCONF ISPFAH ISPFAL ISPFD ISPC 7/9
6.1 系统控制缓存器 -System Control Register(SCONF,0xBFH) Bit-7 Bit-0 Unused Unused Unused Unused Unused ISPE OME ALEI - - - - - R/W R/W R/W * * * * * 0 0 0 ALE: 功能为降低 EMI, 初始值为 0( 开启 ), 会有频率产生,ALE pin 输出信号为 Fosc/6 HZ;ALEI 设为 1( 关闭 ), 没有频率产生, 对 EMI 干扰较小. OME: 0 ( 关闭 )-- 768 bytes RAM 为关闭状态.( 注 1) 1 ( 开启 )-- 768 bytes RAM 为开启状态. 注 1:SM59D04G2 初始值为关闭. ISPE:ISP 模块启动 关闭控制 初始值为 0( 关闭 );ISPE 设为 1 时,ISP 模块启动 ( 需配合 ISPD 顺序放入 0x55H 0xAAH 0x55H,ISP 功能才真正完全启动 ) 6.2 ISP 高地址缓存器 -ISP Flash Address-High Register(ISPFAH,0xF4H) bit-7 bit-0 FA15 FA14 FA13 FA12 FA11 FA10 FA9 FA8 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 6.3 ISP 低地址缓存器 -ISP Flash Address-Low Register(ISPFAL,0xF5H) bit-7 bit-0 FA7 FA6 FA5 FA4 FA3 FA2 FA1 FA0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 6.4 ISP 数据缓存器 -ISP Flash Data Register(ISPFD,0xF6H) bit-7 bit-0 8/9
FD7 FD6 FD5 FD4 FD3 FD2 FD1 FD0 R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 6.5 ISP 控制缓存器 -ISP Control Register(ISPC,0xF7H) bit-7 bit-0 START Unused Unused Unused Unused Unused ISPF1 ISPF0 R/W - - - - - R/W R/W 0 * * * * * 0 0 ISPF[1:0]:ISP 功能选择 ISPF1 ISPF0 ISP Function 0 0 Byte Program 0 1 Chip Protect 1 0 Page Erase 1 1 Chip Erase 6.5.1 ISP 执行 Page Erase 功能时, 需于 ISPFAH 缓存器中填入欲清除之 page 6.5.2 ISPFAH 填入值为 0x00H 或 0x01H 时会清除 0x1000H 至 0x11FFH 之 512 bytes 资料, 以此类推 START:ISP 功能启动, 此 Bit 设为 1 时, 将执行 ISPF[1:0] 所选择之 ISP 功能 9/9