谢谢!
我改了一下,适合我从ROM中,读8位的数据
/****************************************************************************************
*
* 文件名: main.c
* 项目名: 20160308
* 版 本: v1.0
* 日 期:
*
****************************************************************************************/
#include<KF8F4158.h>
/*
* KF8FXXX 对应 FLASH_OP_VERSION 0
* KF8FXXXX/KF8V/KF8TS/KF8L FLASH_OP_VERSION 1
* KF8S系列请咨询技术支持
* */
#define FLASH_OP_VERSION 0
//数组
void array_0()
{ __asm
.db 0x01 //十六进制
.db 1 //十进制
.db 2
.db 3
__endasm;
}
#pragma save
#pragma disable_warning 59
#pragma disable_warning 85
unsigned char readflash(void *p,unsigned int i)
{ // *p高8位:STK00 ,*p低8位:STK01
// i高8位:STK02 ,i低8位:STK03
__asm
BANKSEL STK00
MOV R0, STK01
MOV R1, STK00
CLR PSW, 0
RRC STK02
RRC STK03
MOV R7, PSW
ADD R0, STK03
JNB PSW, 0
INC R1
ADD R1, STK02
BANKSEL NVMADDRH
MOV NVMADDRH, R1
MOV NVMADDRL, R0
MOV R1, R7
MOV R0,#0x81 // 读BLOCK EEPROM命令
MOV NVMCTL0,R0
NOPZ
NOPZ
NOPZ
NOPZ
#if FLASH_OP_VERSION == 0
MOV R0,R7
JNB R1, 0
MOV R0,R6
#elif FLASH_OP_VERSION == 1
MOV R0,#NVMDATAH
JNB R1, 0
INC R0
LD R0,[R0]
#else
#error "unknow FLASH_OP_VERSION"
#endif
__endasm;
}
#pragma restore
unsigned char i;
void main()
{
i = readflash(array_0,0);
}
|