yjyhlj 发表于 前天 09:27

关于32G12K128和51老程序兼容的问题?

昨天测试了STC32G12K128芯片,把老的STC8C2K60S2芯片的程序灌进去会出现莫名其妙的死机,查到最后发现是一系列的延时程序出现了死机,查询下载工具上给出的延时程序,和51的的确不同,但因为老程序是用汇编写的,要全部改成是C251程序工作量太大,项目跟进没有时间,请问是否有办法简单处理。给出出错的几段程序。


RX8025_WAIT:      PUSH 0
                MOV 0,#12
                DJNZ 0,$
                POP 0
                RET




;实际时间为199.155MS               
Wait_200MS:      PUSH 07
                PUSH 06
                PUSH 05
                MOV R7,#12
                MOV R6,#57
                MOV R5,#120
WAIT_200MS_AGAIN:
                DJNZ R5,$
                DJNZ R6,WAIT_200MS_AGAIN
                DJNZ R7,WAIT_200MS_AGAIN
                POP 05
                POP 06
                POP 07
                RET
               
WAIT_1US:      PUSH 07
                MOV R7,#1
                LJMP WAIT_US
WAIT_4US:      PUSH 07
                MOV R7,#4
                LJMP WAIT_US
WAIT_8US:      PUSH 07
                MOV R7,#8
                LJMP WAIT_US
WAIT_14US:      PUSH 07
                MOV R7,#14
                LJMP WAIT_US
WAIT_16US:      PUSH 07
                MOV R7,#16
                LJMP WAIT_US
WAIT_30US:      PUSH 07
                MOV R7,#30
                LJMP WAIT_US
WAIT_40US:      PUSH 07
                MOV R7,#40
                LJMP WAIT_US
WAIT_60US:      PUSH 07
                MOV R7,#60
                LJMP WAIT_US
WAIT_100US:      PUSH 07
                MOV R7,#100
                LJMP WAIT_US
WAIT_240US:      PUSH 07
                MOV R7,#240
                LJMP WAIT_US
WAIT_480US:      LCALL WAIT_240US
                LCALL WAIT_240US
                RET
;1US等待
WAIT_US:      NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
               
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                DJNZ R7,WAIT_US
                POP 07
                RET
               
DIS_WAIT:      LCALL WAIT_1MS
                RET

;实际时间为1151US               
WAIT_1MS:      PUSH 07
                PUSH 06
                MOV R7,#20H
D0_1MS:                MOV R6,#0FH
                DJNZ R6,$
                DJNZ R7,D0_1MS
                POP 06
                POP 07
                RET
;实际时间为
WAIT_20MS:      PUSH 07
                PUSH 06
                MOV R7,#20
D0_20MS:      MOV R6,#248
                DJNZ R6,$
                DJNZ R7,D0_20MS
                POP 06
                POP 07
               
;实际时间为76US
WAIT_76US:      PUSH 07
                MOV R7,#0
                DJNZ R7,$
                POP 07
                RET

;实际时间为1151US               
WAIT_1600US:      PUSH 07
                PUSH 06
                MOV R7,#20
D0_1600US:      MOV R6,#0
                DJNZ R6,$
                DJNZ R7,D0_1600US
                POP 06
                POP 07
                RET
               

WAIT:      PUSH 7
                MOV R7,#40
WAIT_AGAIN:
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                DJNZ R7,WAIT_AGAIN
                POP 7
                RET

DebugLab 发表于 前天 12:52

使用ISP软件可生成软件延时的ASM代码

最新版ISP软件:
https://www.stcaimcu.com/data/download/Tools/AiCube-ISP-v6.96A.zip

zxcv1973 发表于 前天 17:33

这些延时程序不会死机,估计是其他方面的原因
页: [1]
查看完整版本: 关于32G12K128和51老程序兼容的问题?