打印

关于ISP下载的一点问题

[复制链接]
2606|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
comeon_000|  楼主 | 2007-9-7 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近做了一个利用单片机SPI口向S51下载程序的程序,预下载的程序通过仿真器测试通过,下载后,检验下载的数据也一致,可是下到S51以后,重新加电似乎S51没有正常运行.
    初步怀疑是数据下载的地址可能不太对,下载的数据是通过仿真器生成的HEX文件提取的,有没有哪位朋友对HEX文件格式比较了解啊

相关帖子

沙发
comeon_000|  楼主 | 2007-9-7 20:14 | 只看该作者

不知道我的理解对不对

//:CCAAAARRDD……DDZZ

使用特权

评论回复
板凳
comeon_000|  楼主 | 2007-9-7 20:16 | 只看该作者

欢迎大家拍板

上述代码用S51仿真器测试通过,可是下到S51后用S51就不能正常运行,我觉得可能是我对S51ISP的下载理解有问题

使用特权

评论回复
地板
comeon_000|  楼主 | 2007-9-8 08:55 | 只看该作者

顶一顶

使用特权

评论回复
5
comeon_000|  楼主 | 2007-9-8 11:07 | 只看该作者

大家有时间给小弟讲解讲解啊

使用特权

评论回复
6
NE5532| | 2007-9-8 13:21 | 只看该作者

你校验能过不?

使用特权

评论回复
7
comeon_000|  楼主 | 2007-9-8 13:41 | 只看该作者

校验通过了

难道是S51工作条件没有满足,S51不是上电后,通过电容把RST脚拉高两个机器周期后便自动开始工作了吗 

使用特权

评论回复
8
comeon_000|  楼主 | 2007-9-8 15:06 | 只看该作者

发现了一个奇怪的问题

用另一个ISP下载器把程序烧录到S51 加密的就能正常运行,不加密的不能运行
难道和这个有关,我的ISP下载程序还没有写加密位

使用特权

评论回复
9
comeon_000|  楼主 | 2007-9-8 15:40 | 只看该作者

还是搞不通

各位有没有把HEX文件成功下载到单片机的阿 讲讲经验 不胜感激

使用特权

评论回复
10
NE5532| | 2007-9-8 17:34 | 只看该作者

跟加密与否没有关系,找自己程序问题吧。

使用特权

评论回复
11
comeon_000|  楼主 | 2007-9-8 18:01 | 只看该作者

纳闷中

我也觉得可能是程序的问题,可是感觉好怪啊 
我现在把加密位加上了 往S51里写程序成功并且能够正常运行
是什么样的程序问题能够使下载后的程序不加密不能正常运行呢
下面是我的程序
ACK    BIT    10H
SLA    DATA    50H
SUBA    DATA    51H
NUMBYTE    DATA    52H
SDA    BIT    P3.5
SCL    BIT    P3.4
MTD    EQU    30H
MRD    EQU    40H
PCF8574    EQU    4AH
AT24C64 EQU     0AAH

        ORG    0000H
    AJMP    MAIN
MAIN:    MOV    R4,#0F0H
    DJNZ    R4,$
WRPCF8574:
        MOV     R7,#00H
IWBLOOP:
        MOV     R0,#MTD
        MOV     A,R7
        CLR     ACC.1
        MOV     @R0,A
        MOV     SLA,#4AH
        LCALL   SENTDATA
        LCALL   DELAY
        INC     R7
        CJNE    R7,#0FFH,IWBLOOP
    SJMP    $
WRONG:
        SJMP    $

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:SENTS_SUB_DATA
;程序功能:发送NUMDATA个数据给有子地址器件
;入口条件:SLA,器件地址;NUMDATA,发送字节数;MTD,发送缓冲区
;出口    :ACK=0,发送正常;ACK=1,发送失败
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SENTS_SUB_DATA:
        LCALL   START
        MOV     A,SLA
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,RCV_SUB_RETURN
        MOV     R0,#MTD
SENTS_SUB_NEXT:
        MOV     A,@R0
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,SENDRETURN
        INC     R0
        DJNZ    NUMBYTE,RCV_SUB_NEXT
SENTS_SUB_RETURN:
        LCALL   STOP
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:RCV_SUB_DATA
;程序功能:从有子地址器件接收NUMDATA个数据
;入口条件:SLA,器件地址;NUMDATA,接收字节数;MRD,接收缓冲区
;出口    :MRD存放接收的数据;ACK=0,接收正常;ACK=1,接收失败
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RCV_SUB_DATA:
        LCALL   START
        MOV     A,SLA
        INC     A
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,RCVRETURN
        MOV     R0,#MRD
RCV_SUB_LAST:
        LCALL   RDBYTE
        MOV     @R0,A
        DJNZ    NUMBYTE,RCV_SUB_NEXT
        LCALL   MNACK
RCV_SUB_RETURN:
        LCALL   STOP
        RET
RCV_SUB_NEXT:
        LCALL   MACK
        INC     R0
        SJMP    RCV_SUB_LAST

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:SENTSDATA
;程序功能:发送数据给无子地址器件
;入口条件:SLA,器件地址;MTD,发送缓冲区
;出口    :ACK=0,发送正常;ACK=1,发送失败
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SENTDATA:
        LCALL   START
        MOV     A,SLA
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,SENDRETURN
        MOV     R0,#MTD
SEND:
        MOV     A,@R0
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,SENDRETURN
SENDRETURN:
        LCALL   STOP
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:RCVDATA
;程序功能:从无子地址器件接收NUMDATA个数据
;入口条件:SLA,器件地址;MRD,接收缓冲区
;出口    :MRD存放接收的数据;ACK=0,接收正常;ACK=1,接收失败
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RCVDATA:
        LCALL   START
        MOV     A,SLA
        INC     A
        LCALL   WRBYTE
        LCALL   CACK
        JB      ACK,RCVRETURN
        MOV     R0,#MRD
RCVLAST:
        LCALL   RDBYTE
        MOV     @R0,A
        LCALL   MNACK
RCVRETURN:
        LCALL   STOP
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:START
;程序功能:发送I2C起始条件
;入口条件:无
;出口    :无
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:
    SETB    SDA
           NOP
        NOP
    SETB    SCL
        NOP
        NOP
    CLR    SDA
        NOP
        NOP
    CLR    SCL
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:STOP
;程序功能:发送I2C停止条件
;入口条件:无
;出口    :无
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STOP:
    CLR    SDA
        NOP
    SETB    SCL
        NOP
        NOP
    SETB    SDA
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:MACK
;程序功能:发送应答信号
;入口条件:无
;出口    :无
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MACK:
    CLR    SDA
    NOP
    SETB    SCL
        NOP
        NOP
    CLR    SCL
    NOP
    NOP
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:MNACK
;程序功能:发送非应答信号
;入口条件:无
;出口    :无
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MNACK:
    SETB    SDA
    NOP
    SETB    SCL
        NOP
        NOP
    CLR    SCL
    NOP
    NOP
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:CACK
;程序功能:接收从机应答
;入口条件:无
;出口    :ACK=0,发送正常;ACK=1,发送故障
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CACK:

    SETB    SDA
    SETB    SCL
    CLR    ACK
    JNB    SDA,CEND
    SETB    ACK
CEND:
    CLR    SCL
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:WRBYTE
;程序功能:发送一个字节数据
;入口条件:A,预发出的数据
;出口    :无
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRBYTE:
    MOV    R0,#08H
WLP:
    RLC    A
    JC    WR1
    CLR    SDA
        SJMP    SENT

WR1:
    SETB    SDA
SENT:
    SETB    SCL
        NOP
        NOP
    CLR    SCL
    DJNZ    R0,WLP
    RET
DELAY:  MOV     R6,#0FFH
LOOP:   MOV     R5,#0FFH
        DJNZ    R5,$
        DJNZ    R6,LOOP
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序名称:RDBYTE
;程序功能:接收一个字节数据
;入口条件:无
;出口    :A,接收的数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RDBYTE:
       MOV      R0,#08H
RLP:
       SETB     SDA
       NOP
       SETB     SCL
       MOV      C,SDA
       MOV      A,R2
       CLR      SCL
       RLC      A
       MOV      R2,A
       DJNZ     R0,RLP
       RET
       END
这是一个I2C的8574驱动程序,用S51仿真器测试通过,
现在下载到S51里然后不加加密位不能运行,加上加密位就能运行
问题怪怪的

使用特权

评论回复
12
NE5532| | 2007-9-8 22:31 | 只看该作者

堆栈在哪里设置的?

使用特权

评论回复
13
diannaoza| | 2007-9-9 04:54 | 只看该作者

JNB ACK,LOOP

当无应答时,会不会堆栈溢出呀
 当i2c无应答时。ack=0
JNB    ACK,LOOP
只入栈,无出栈。


死循了。
我看到的

使用特权

评论回复
14
comeon_000|  楼主 | 2007-9-9 10:09 | 只看该作者

对不起大家,程序贴错了

现在改过来了 只是一个简单的I2C驱动程序 没有用到堆栈 
而且此程序用我自己写的ISP软件下到S51里并写上加密位可以正常运行了
难道堆栈会影响到加密位吗

使用特权

评论回复
15
comeon_000|  楼主 | 2007-9-9 18:59 | 只看该作者

顶一下

大家给提提意见啊 

使用特权

评论回复
16
qjy_dali| | 2007-9-9 22:10 | 只看该作者

加密不加密不是问题所在

我以前也写过下载S51,S52的程序,用的是XILINX下载线。你在编写自己的工具时,要多编一些可以帮助调试的命令,这样比较好查问题

使用特权

评论回复
17
comeon_000|  楼主 | 2007-9-9 22:28 | 只看该作者

如果不是加密问题,那就是我对程序下载的理解问题了

到底HEX文件的数据写完以后 还要做什么处理吗 

使用特权

评论回复
18
comeon_000|  楼主 | 2007-9-10 09:05 | 只看该作者

我就是不能确定 是我的预下载程序出问题了 还是下载程序

使用特权

评论回复
19
comeon_000|  楼主 | 2007-9-10 15:45 | 只看该作者

顶一下,这里人气好旺 一不小心就沉下去了

使用特权

评论回复
20
comeon_000|  楼主 | 2007-12-31 11:24 | 只看该作者

求助

还有哪位仁兄编过S51的ISP下载程序 来谈谈经验哈~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

58

帖子

0

粉丝