|
附件是用KEIL建立的工程项目,在P3口跑了个流水灯,可以在纯软件仿真下观察效果。
系统使用资源:
Program Size: data=84.0 xdata=423 code=3263
STC89C58的资源:ROM 32K,RAM:1280 BYTE,可以容纳。
从51其他型号到STC89C58RD+移植要点:
修改启动代码STARTUP.A51,内容如下:
$NOMOD51
IDATALEN EQU 80H
;
XDATASTART EQU 0H
XDATALEN EQU 400H
;
PDATASTART EQU 0H
PDATALEN EQU 0H
IBPSTACK EQU 0
IBPSTACKTOP EQU 0FFH+1
XBPSTACK EQU 1
XBPSTACKTOP EQU 3FFH+1
PBPSTACK EQU 0
PBPSTACKTOP EQU 0FFFFH+1
;
PPAGEENABLE EQU 0
;
PPAGE EQU 0
;
PPAGE_SFR DATA 0A0H
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
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 PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
LJMP ?C_START
END
大致意思:
XDATASTART EQU 0H
XDATALEN EQU 400H
XDATASTART表示片外RAM的起始地址,
XDATALEN表示片外RAM的容量,大小为1024BYTE。
XBPSTACK EQU 1 在片外RAM里设置堆栈
XBPSTACKTOP EQU 3FFH+1 堆栈栈顶地址+1
之后,将内存清空,并跳转到C语言的MIAN处。
废话就不多说了,赶快下载下来测试下吧!
UCOS上流水灯.rar
(269.99 KB, 下载次数: 187)
|
|