最近没事看着手头不少闲置的STC的单片机,拿来捣鼓下.之前一直用PIC的单片机,使用结构体变量没出现什么问题,这次换成STC的单片机发现编译没问题,运行起来确不正常,百度一下发现也有人遇到类似的问题,但是按照他们的方法也没能解决. 下图是网上的提问:
按照他的方法依然运行不正常,这个问题一直困扰着我,STC的规格书也是写的不清楚,后面我就猜想会不会启动文件STARTUP.A51的问题,于是我仔细看了一下,发现有这么一段代码:
代码:
- STARTUP1:
- IF IDATALEN <> 0
- MOV R0,#IDATALEN - 1
- CLR A
- IDATALOOP: MOV @R0,A
- DJNZ R0,IDATALOOP
- ENDIF
- IF XDATALEN <> 0
- MOV DPTR,#XDATASTART
- MOV R7,#LOW (XDATALEN)
- IF (LOW (XDATALEN)) <> 0
- MOV R6,#(HIGH (XDATALEN)) +1
- ELSE
- MOV R6,#HIGH (XDATALEN)
- ENDIF
- CLR A
- XDATALOOP: MOVX @DPTR,A
- INC DPTR
- DJNZ R7,XDATALOOP
- DJNZ R6,XDATALOOP
- ENDIF
找出这一句IF XDATALEN <> 0,会不会是这里导致的?我把0改成1,IF XDATALEN <> 1,结果正常了.
还有就是结构体要加上关键字xdata,如下: