关于MOVC不能取指令数据的问题请教
芯片型号:STC15H2K64S4开发环境,MDK
开发语言:ASM
问题描述:
自己做一个ISP的程序,会检测应用区是否有合格的数据,测试使用IAP READ 可以取得数据,使用MOVC取的数据不是实际数据,相关问题代码如下:
check_userarea:
mov DPTR, #0x7FFE
lcall iap_byte_read
xrl A, #0x5A
jz code_81
clr C
ret
code_81:
mov RAM_22, #0x10
mov RAM_23, #0
mov R7, #0
code_85:
mov a, RAM_23
jnz code_98
mov a, RAM_22
xrl a, #0x80
jz code_A8
code_98:
mov DPL, RAM_23
mov DPH, RAM_22
lcall iap_byte_read
; clr A
; movc A, @A+DPTR
add A, R7
mov R7, A
code_A6:
inc RAM_23
mov a, RAM_23
jnz $+4
inc RAM_22
sjmp code_85
code_A8:
mov A, R7
jnz code_AE
setb C
sjmp code_AF
code_AE:
clr C
code_AF:
ret
使用指令中的
lcall iap_byte_read
可以取到数据并通过校验,而
; clr A
; movc A, @A+DPTR
则取的数据通不校验。
请虾给予赐教
movc 和 iap_byte_read 读取EEPROM的地址是不一样的,需要增加偏移量
21cnsound 发表于 2024-6-27 14:40
movc 和 iap_byte_read 读取EEPROM的地址是不一样的,需要增加偏移量
都是从dptr偏移0的,可以确认地址是一样的 beacon 发表于 2024-6-27 16:19
都是从dptr偏移0的,可以确认地址是一样的
IAP操作按EEPROM的物理地址访问,MOVC读取EEPROM是EEPROM物理地址+程序大小偏移量。
当然,如果STC15H2K64S4在STC-ISP软件中设置了EEPROM为64k,程序大小偏移量就为0了。
你在STC-ISP软件中设置的EEPROM大小是64K吗? 21cnsound 发表于 2024-6-28 09:54
IAP操作按EEPROM的物理地址访问,MOVC读取EEPROM是EEPROM物理地址+程序大小偏移量。
当然,如果STC15H2K ...
那大抵是这个问题了,现在设置为64K正常了,那比如设置0.5K的EEPROM,那偏移是给512还是64-0.5K的位置呢? beacon 发表于 2024-6-28 15:20
那大抵是这个问题了,现在设置为64K正常了,那比如设置0.5K的EEPROM,那偏移是给512还是64-0.5K的位置呢 ...
63.5 beacon 发表于 2024-6-28 15:20
那大抵是这个问题了,现在设置为64K正常了,那比如设置0.5K的EEPROM,那偏移是给512还是64-0.5K的位置呢 ...
64K-0.5K是EEPROM的首地址。
你这样记就容易理解了,64K FLASH/EEPROM的结束地址始终是0xFFFF,设置的EEPROM是从后向前规划使用的。
0.5K EEPROM的IAP地址范围是0x0000-0x01FF,MOVC访问首地址=0xFFFF-0x01FF=0xFE00 清楚了,结构图如下
| code | eeprom |
0 FE00 FFFF
访问code区时,使用movc a, @a + dptr, 此时a为0即可
访问eeprom时,此时dptr的基址就是FE00,再偏移A才能访问
具体是否是这样,有时间再做个测试看看
页:
[1]