找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1145|回复: 11
打印 上一主题 下一主题
收起左侧

C51单片机E2PROM拷贝程序,用MASM51编译通过,烧入单片机后led2亮2s后无反应,请汇...

[复制链接]
跳转到指定楼层
楼主
ID:655665 发表于 2021-9-7 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C51单片机,E2PROM  24C01-24C256母、子片拷贝的程序,
程序如下:
;***********************
;Copy Ee24 to Ee24
;************************
Debug equ 01
JbE24Bak bit 00h;=1 Slave
sda bit p3.2
scl bit p3.3
sda_bak bit p3.5;bak ee24c16
scl_bak bit scl
Led1 bit p3.7
Led2 bit p3.4
;*********************************
AdrL equ 08h
AdrH Equ AdrL+1
AdrMaxL Equ AdrH+1
AdrMaxh Equ AdrmaxL+1
;***********************************
Temp equ 21h
SpData equ Temp+64
;*************************************
ORG 0000H;;
LJMP start1
ORG 0003H;;
reti;
Ljmp int0
reti;
ORG 000BH;
reti;
ORG 0013H
reti;
ORG 001BH;
reti
ORG 0023H;
reti
;**************************************
start1:
        mov b,#7fh
        MOV R0,#01H;
clrram: INC R0;
        MOV @R0,#00h;
        Djnz r1,$;R1
        Djnz r1,$
        Djnz r1,$
        djnz b,clrram
        MOV SP,#spdata;
;**** read ee24 if =err then led_err =1
        Lcall ReadEe24data
        jnb f0,DoNext1
;***** led1 =Ligh
       clr Led1
       Ljmp Delay2S
DoNext1:
       setb JbE24bak
       Lcall ReadEe24data ;Read Slave
       jnb f0,Main
       clr Led2
Delay2S:
        mov r7,#0
Led11:
        Lcall Delay;call Delay
        djnz r7,Led11
        Sjmp Main1
;################################
Main:
        Clr JbE24Bak
        mov Dpl,AdrL
        mov Dph,AdrH
        Lcall ReadEe24Data
        Setb JbE24Bak
        mov Dpl,AdrL
        mov Dph,AdrH
        Lcall WriteEe24Data
;**********************
        Lcall ReadDip
        add a,AdrL
        mov Adrl,a
        mov a,AdrH
        addc a,#0
        mov AdrH,a
;**********************
        EE24c01 equ 128
;**********************
        mov AdrMaxL,#EE24c01
        mov AdrMaxH,#0
        mov a,b
        jz JbOver
RlAdr:
        mov a,AdrMaxl
        rlc a
        mov AdrMaxL,a
        mov a,AdrmaxH
        rlc a
        mov AdrMaxH,a
        djnz b,RlAdr
;******** jb Over
JbOver:
        mov a,Adrl
        add a,#01
        mov R7,a
        mov a,AdrH
        addc a,#0
        mov r6,a; r6r7=Adr+1
;************ sub
        clr c
        mov a,r7
        subb a,AdrMaxL
        mov r7,a
        mov a,r6
        subb a,Adrmaxh
        jc main
;Over
Main1:
        nop
        if Debug =1
        mov p1,#0ffh
        mov p3,#0ffh
        mov Pcon,#02
        Else
        endif
;************************
ReadDip:
        mov a,p1
        anl a,#0f0h
        swap a
        mov b,a
        cjne a,#05,Rdd1
        mov a,#32
        ret
rdd1:
        cjne a,#06,rdd2
        mov a,#32
        ret
rdd2:
        cjne a,#07,rdd3
rdd4:
        mov a,#64
        ret
rdd3:
        jnc rdd4
        mov a,#16
        ret
;*****************
IntEe24:
        Lcall ReadDip
        mov r1,a
        cjne a,#16,Ee24Type
        clr a
        sjmp rade1
Ee24type:
        mov a,#01
Rade1:
        mov R0,#Temp
        ret
;************************
ReadEe24Data:
        Lcall IntEe24
;********************
;Dptr=Ee24Adr
;R0=RamAdrCpu
;R1=DataNumber
;a=0 24c01~14c16
;a=1 24c32~24c512
;use a,b
;********************
rdee:
      Lcall star_ee
      mov R7,a
;*************************
;a=0 24c01~24c16
;a=1 >24c16
      jz Rree32
;>24c32
;in order: 1010,000 r/w
      mov a,#0a0h
      Lcall w1bt
      Lcall cack
      jb f0,rdee_end
;** in adr_h
      mov a,dph
      sjmp Rree321
Rree32:
       mov a,dph
;**************************
       rl a;
       orl a,#0a0h
;**************************
Rree321:
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
        mov a,dpl
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        Lcall star_ee
;*************************
        mov a,r7
;*************************
        jz Rr32
;** 24c32 slave =10100001h
        mov a,#0a1h
        sjmp Rr33
Rr32:
        mov a,dph
;**************************
        rl a
        orl a,#0a1h; slar
;**************************
Rr33:
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
;************ Read @R1 Number
ReadNext:
         Lcall r1bt
         mov @r0,a
         inc r0
         Lcall mack
         djnz r1,ReadNext
         Lcall mnack
         Lcall stop_ee
rdee_end:
         ret
;****************************
delay:
        push acc
        mov b,#04
delay2:
        mov a,#0ffh
delay1:
        dec a
        jnz delay1
        djnz b,delay2
        pop acc
        ret
;**********
Jbsda1:
       jb JbE24Bak,ste11
       setb sda
       sjmp ste12
ste11:
       setb sda_bak
ste12:
       ret

Jbsda0:
       jb JbE24Bak,ste13
       clr sda
       sjmp ste14
ste13:
       clr sda_bak
ste14:
       ret
;*****************************
star_ee:
         Lcall jbsda1
         setb scl
         Lcall jbsda0
         clr scl
         ret
stop_ee:
         Lcall jbsda0
         setb scl
         Lcall jbsda1
         ret
mack:
         Lcall jbsda0
         setb scl
         nop
         nop
         clr scl
         Lcall jbsda1
         ret
mnack:
       Lcall jbsda1
       setb scl
       nop
       nop
       clr scl
       Lcall jbsda0
       ret
cack:
        Lcall jbsda1
        setb scl
        nop
        nop
        clr f0

       jb jbE24bak,jee23
       jnb sda,cend
       sjmp jee24
jee23:
       jnb sda_bak,cend
jee24:
       setb f0
cend:
       clr scl
       ret
w1bt:
       mov B,#08
wlp:
       rlc a
       jc wr1
wr0:
       Lcall jbsda0
       setb scl
       nop
       nop
       clr scl;********
       Ljmp wlp1
wr1:
       Lcall jbsda1
       setb scl
       nop
       nop
       clr scl
       Lcall jbsda0
wlp1:
       nop
       djnz B,wlp
       ret
r1bt:
       mov b,#08
rlp:
       Lcall jbsda1
       setb scl
       nop
;******
       jb jbE24bak,jee12
       jnb sda ,rd0
       sjmp rd1
jee12:
       jnb sda_bak,rd0

rd1:
      setb c
      rlc a
      clr scl
      Ljmp rlp1
rd0:
      clr c
      rlc a
      clr scl
rlp1:
      nop
      djnz b,rlp
      ret
;*******************************
WriteEe24Data:
          Lcall IntEe24
;******************************
;Dptr=Ee24Adr
;R0=RamAdrCpu
;R1=DataNumber
;a=0 24c01~14c16
;a=1 24c32~24c512
;use a,b
;*****************************
wree:
     Lcall star_ee
;*************************
;a=0 24c01~24c16
;a=1 >24c16
     jz Wree32
;>24c32
;in order: 1010,000 r/w
      mov a,#0a0h
      Lcall w1bt
      Lcall cack
      jb f0,wree_end
;** in adr_h
      mov a,dph
      sjmp wree321
Wree32:
        mov a,dph
;**************************
      rl a
      orl a,#0a0h;slaw
;**************************
wree321:
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
       mov a,dpl
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
;*******************************
Wrnext:
       mov a,@r0
       inc r0
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
       djnz r1,WrNext
       Lcall stop_ee
       Lcall Delay;10Ms
wree_end:
       ret
       END

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 9#
ID:624769 发表于 2021-9-8 00:21 | 只看该作者
hmsd 发表于 2021-9-7 22:28
谢谢您的回复,受教了。
最近在写E2PROM复制器的程序,就是把两个24C32,将其中一个里面的数据,通过单
...

我不知道你擅长用什么代码, 看你的代码, 感觉有点 硬上汇编的样子. 虽然汇编本来就是难解读,但是你是乱在框架都没.  虽然,汇编属于 行 代码, 但是 也是有框的. 简单来讲, 首先你要有个框,比方说,
ORG     0000H
LJMP    MAIN
这里你可以先空着,先把MAIN 做出来
ORG     0100H
MAIN:
这里你不知道写啥,也先空着,然后就是搭建 MAIN 里面的主循环了
MAIN_LOOP:
这里可以先空着,慢慢构架,
但是,切记不要跳出这个主循环,用到JMP的不能跳出 MAIN_LOOP 范围,就算跳出去,也要JMP回来。CALL 的任何东西, 都要有RET 保证返回。
LJMP  MAIN_LOOP      这个就是死循环了,主程序就一直在这个范围里面跑了。
然后, 开始搭建子程序,写完一个,用RET 结束, 在MAIN_LOOP 里面 CALL
最好子程序 用
xxxxxxx  segment code
RSEG xxxxxx     的方式来分段,方便编译,也可以明确知道是不同子程序。
别的也不知道说什么,多看看别人的例程吧。
然后,你要读 AT24C02 的话, 用Y_G_G那个,你就只要搭建 MAIN 函数 去 CALL 他的 WRITE_BYTE 就好了。不是省事很多么?

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

沙发
ID:401564 发表于 2021-9-7 16:10 | 只看该作者
咋又问这汇编IIC了,我充满了问号?你确定人家看你这代码能看得明白?什么注释都没有
以下我是写的用于验证24C01的IIC读写,可以复制调用
;=========================================================================================
;WRITE_BYTE---------向U3写入一个字节-----------------------------------------------
WRITE_BYTE:                MOV         B,#08                                        ;要写入的是8个位
WRITE_BYTE_1:         CLR         SCL                                                        ;在这里要先把SCL拉低,如果是高的话,SDA的变化会被当是启动/停止的信号
                                CALL        DELAY_1                                                ;
                                RLC         A                                                        ;A带进位左移一位
                                MOV         SDA,C                                        ;IIC协议是从高位先输入,最高位MSM位移成了C
                                CALL        DELAY_1                                                ;
                                SETB         SCL                                                ;时钟的上升沿写入
                                CALL        DELAY_1                                                ;
                                DJNZ         B,WRITE_BYTE_1                        ;要写入的字节数是8
                                CLR         SCL                                                         ;如果不拉低,从机会在SDA线产生变化时认为是启始位,或者是停止位
                                CALL        DELAY_1                                                ;
                                SETB         SDA                                                 ;释放SDA线
                                CALL        DELAY_1                                                ;
                                SETB         SCL                                                ;时钟高电平
                                MOV                IIC_COUNT,#200                        ;
REP:                         DJNZ        IIC_COUNT,WRITE_BYTE_REP        ;
                                SETB        IIC_F                                                ;IIC没有能完成写入
                                JMP                WRITE_BYTE_END                        ;读取100次之后还不应答,就退出
WRITE_BYTE_REP:        CALL        DELAY_1                                                ;
                                MOV         C,SDA                                         ;把SDA位送到C
                                JC                 REP                                                ;IIC协议:在第九个时钟把SDA拉低,作为应答,如果是高电平,就继续等待
                                CLR                IIC_F                                        ;IIC已经完成写入
WRITE_BYTE_END:        CLR         SCL                                                        ;时钟低电平
RET                                                                                                ;
;=========================================================================================
;READ_BYTE----------从U3读一个字节-------------------------------------------------
READ_BYTE:                 SETB        SDA                                                        ;要释放SDA
                                MOV         B,#8                                                ;要写入的字节数是8位
READ_BYTE_1:         CALL        DELAY_1                                                ;
                                SETB         SCL                                                ;时钟高
                                CALL        DELAY_1                                                ;
                                MOV         C,SDA                                           ;SDA线的状态传送到C
                                RLC         A                                                        ;A左移一位,C变成最低位,IIC协议是从最高位开始读出的
                                CLR         SCL                                                        ;
                                DJNZ         B,READ_BYTE_1                         ;要读取的字节数是8
RET                                                                                                        ;
;=========================================================================================
START:                        SETB        SDA                                                        ;
                                CALL        DELAY_1                                                ;
                                SETB        SCL                                                        ;SCL=0
                                CALL        DELAY_1                                                ;
                                CLR                SDA                                                ;SDA由1>0,启动
                                CALL        DELAY_1                                                ;
                                CLR         SCL                                                        ;
RET                                                                                                ;
STOP:                        CLR                SDA                                                ;SDA=0
                                CALL        DELAY_1                                                ;
                                SETB        SCL                                                        ;
                                CALL        DELAY_1                                                ;
                                SETB        SDA                                                        ;SDA从0>1,停止
                                CALL        DELAY_1                                                ;
                                CLR                SCL                                                ;
RET                                                                                                ;
;=========================================================================================
DELAY_1:                PUSH          DEL1                                                ;
                            PUSH          DEL2                                                ;
                                MOV                DEL1,#40                                ;延时,让从机有时间响应
DELAY_1_0:                MOV                DEL2,#100                                ;
                                DJNZ        DEL2,$                                                ;
                                DJNZ        DEL1,DELAY_1_0                                ;
                                POP                DEL2                                                ;
                                POP                DEL1                                                ;
RET                                                                                                ;
;=======================================================================================

回复

使用道具 举报

板凳
ID:624769 发表于 2021-9-7 16:23 | 只看该作者
汇编本来看起来就累,  你还没注释, 没注释也就算了,  还有好多无用代码. 麻烦你整理一下再发好吗?
ORG 0000H;;
LJMP start1
ORG 0003H;;
reti;
Ljmp int0
reti;

你这里, 都RETI 了 后面那么 LJMP INT0 肯定是 不会动作的, 查了一遍 你发的代码 确实没有 INT0 标号,但是问题是, 没有INT0 标号, 你编译能通过? 不会报错?
回复

使用道具 举报

地板
ID:624769 发表于 2021-9-7 16:38 | 只看该作者
话说.... 你这51的汇编是跟谁学的?
学51的汇编就老老实实 用A51 不好么?
   if Debug =1   都用出来了。。。。
看你也有写过  jb  f0,wree_end    这个代码。
你这里不是应该: jb Debug,.........   的么?
就算你上面  Debug  一定要  equ  01
你这里 也应该  MOV   A,#01  然后:  CJNE   A,#Debug, ........  的吧?
唉,眼睛疼……
回复

使用道具 举报

5#
ID:655665 发表于 2021-9-7 18:03 | 只看该作者
188610329 发表于 2021-9-7 16:23
汇编本来看起来就累,  你还没注释, 没注释也就算了,  还有好多无用代码. 麻烦你整理一下再发好吗?
ORG 000 ...

谢谢大神,您费心了,当时编译时时将这句屏蔽掉的。以下是重新整理过的,烦请大神给看看。
;***********************
;Copy Ee24 to Ee24
;************************
Debug equ 01
JbE24Bak bit 00h;=1 Slave
sda bit p3.2
scl bit p3.3
sda_bak bit p3.5;bak ee24c16
scl_bak bit scl
Led1 bit p3.7
Led2 bit p3.4
;*********************************
AdrL equ 08h
AdrH Equ AdrL+1
AdrMaxL Equ AdrH+1
AdrMaxh Equ AdrmaxL+1
;***********************************
Temp equ 21h
SpData equ Temp+64
;*************************************
ORG 0000H;
LJMP start1
ORG 0003H;
ORG 000BH;
ORG 0013H
ORG 001BH;
ORG 0023H;
;**************************************
start1:
        mov b,#7fh
        MOV R0,#01H;
clrram: INC R0;
        MOV @R0,#00h;
        Djnz r1,$;
        Djnz r1,$
        Djnz r1,$
        djnz b,clrram
        MOV SP,#spdata;
;**** read ee24 if =err then led_err =1
        Lcall ReadEe24data
        jnb f0,DoNext1
;***** led1 =Ligh
       clr Led1
       Ljmp Delay2S
DoNext1:
       setb JbE24bak
       Lcall ReadEe24data ;Read Slave
       jnb f0,Main
       clr Led2
Delay2S:
        mov r7,#0
Led11:
        Lcall Delay;call Delay
        djnz r7,Led11
        Sjmp Main1
;################################
Main:
        Clr JbE24Bak
        mov Dpl,AdrL
        mov Dph,AdrH
        Lcall ReadEe24Data
        Setb JbE24Bak
        mov Dpl,AdrL
        mov Dph,AdrH
        Lcall WriteEe24Data
;**********************
        Lcall ReadDip
        add a,AdrL
        mov Adrl,a
        mov a,AdrH
        addc a,#0
        mov AdrH,a
;**********************
        EE24c01 equ 128
;**********************
        mov AdrMaxL,#EE24c01
        mov AdrMaxH,#0
        mov a,b
        jz JbOver
RlAdr:
        mov a,AdrMaxl
        rlc a
        mov AdrMaxL,a
        mov a,AdrmaxH
        rlc a
        mov AdrMaxH,a
        djnz b,RlAdr
;******** jb Over
JbOver:
        mov a,Adrl
        add a,#01
        mov R7,a
        mov a,AdrH
        addc a,#0
        mov r6,a; r6r7=Adr+1
;************ sub
        clr c
        mov a,r7
        subb a,AdrMaxL
        mov r7,a
        mov a,r6
        subb a,Adrmaxh
        jc main
;Over
Main1:
        nop
        if Debug =1
        mov p1,#0ffh
        mov p3,#0ffh
        mov Pcon,#02
        Else
        endif
;************************
ReadDip:
        mov a,p1
        anl a,#0f0h
        swap a
        mov b,a
        cjne a,#05,rdd1
        mov a,#32
        ret
rdd1:
        cjne a,#06,rdd2
        mov a,#32
        ret
rdd2:
        cjne a,#07,rdd3
rdd4:
        mov a,#64
        ret
rdd3:
        jnc rdd4
        mov a,#16
        ret
;*****************
IntEe24:
        Lcall ReadDip
        mov r1,a
        cjne a,#16,Ee24Type
        clr a
        sjmp rade1
Ee24type:
        mov a,#01
Rade1:
        mov R0,#Temp
        ret
;************************
ReadEe24Data:
        Lcall IntEe24
;********************
;Dptr=Ee24Adr
;R0=RamAdrCpu
;R1=DataNumber
;a=0 24c01~14c16
;a=1 24c32~24c512
;use a,b
;********************
rdee:
      Lcall star_ee
      mov R7,a
;*************************
;a=0 24c01~24c16
;a=1 >24c16
      jz Rree32
;>24c32
;in order: 1010,000 r/w
      mov a,#0a0h
      Lcall w1bt
      Lcall cack
      jb f0,rdee_end
;** in adr_h
      mov a,dph
      sjmp Rree321
Rree32:
       mov a,dph
;**************************
       rl a;
       orl a,#0a0h
;**************************
Rree321:
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
        mov a,dpl
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        Lcall star_ee
;*************************
        mov a,r7
;*************************
        jz Rr32
;****************** 24c32 slave =10100001h
        mov a,#0a1h
        sjmp Rr33
Rr32:
        mov a,dph
;**************************
        rl a
        orl a,#0a1h; slar
;**************************
Rr33:
        Lcall w1bt
        Lcall cack
        jb f0,rdee_end
;************ Read @R1 Number
ReadNext:
         Lcall r1bt
         mov @r0,a
         inc r0
         Lcall mack
         djnz r1,ReadNext
         Lcall mnack
         Lcall stop_ee
rdee_end:
         ret
;****************************
delay:
        push acc
        mov b,#04
delay2:
        mov a,#0ffh
delay1:
        dec a
        jnz delay1
        djnz b,delay2
        pop acc
        ret
;**************************
Jbsda1:
       jb JbE24Bak,ste11
       setb sda
       sjmp ste12
ste11:
       setb sda_bak
ste12:
       ret

Jbsda0:
       jb JbE24Bak,ste13
       clr sda
       sjmp ste14
ste13:
       clr sda_bak
ste14:
       ret
;*****************************
star_ee:
         Lcall jbsda1
         setb scl
         Lcall jbsda0
         clr scl
         ret
stop_ee:
         Lcall jbsda0
         setb scl
         Lcall jbsda1
         ret
mack:
         Lcall jbsda0
         setb scl
         nop
         nop
         clr scl
         Lcall jbsda1
         ret
mnack:
       Lcall jbsda1
       setb scl
       nop
       nop
       clr scl
       Lcall jbsda0
       ret
cack:
        Lcall jbsda1
        setb scl
        nop
        nop
        clr f0
       jb jbE24bak,jee23
       jnb sda,cend
       sjmp jee24
jee23:
       jnb sda_bak,cend
jee24:
       setb f0
cend:
       clr scl
       ret
w1bt:
       mov B,#08
wlp:
       rlc a
       jc wr1
wr0:
       Lcall jbsda0
       setb scl
       nop
       nop
       clr scl
;**************************
       Ljmp wlp1
wr1:
       Lcall jbsda1
       setb scl
       nop
       nop
       clr scl
       Lcall jbsda0
wlp1:
       nop
       djnz B,wlp
       ret
r1bt:
       mov b,#08
rlp:
       Lcall jbsda1
       setb scl
       nop
;****************
       jb jbE24bak,jee12
       jnb sda ,rd0
       sjmp rd1
jee12:
       jnb sda_bak,rd0

rd1:
      setb c
      rlc a
      clr scl
      Ljmp rlp1
rd0:
      clr c
      rlc a
      clr scl
rlp1:
      nop
      djnz b,rlp
      ret
;*******************************
WriteEe24Data:
          Lcall IntEe24
;******************************
;Dptr=Ee24Adr
;R0=RamAdrCpu
;R1=DataNumber
;a=0 24c01~14c16
;a=1 24c32~24c512
;use a,b
;*****************************
wree:
     Lcall star_ee
;*************************
;a=0 24c01~24c16
;a=1 >24c16
     jz Wree32
;>24c32
;in order: 1010,000 r/w
      mov a,#0a0h
      Lcall w1bt
      Lcall cack
      jb f0,wree_end
;** in adr_h
      mov a,dph
      sjmp wree321
Wree32:
        mov a,dph
;**************************
      rl a
      orl a,#0a0h;slaw
;**************************
wree321:
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
       mov a,dpl
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
;*******************************
Wrnext:
       mov a,@r0
       inc r0
       Lcall w1bt
       Lcall cack
       jb f0,wree_end
       djnz r1,WrNext
       Lcall stop_ee
       Lcall Delay;10Ms
wree_end:
       ret
       END

回复

使用道具 举报

6#
ID:624769 发表于 2021-9-7 20:50 | 只看该作者
hmsd 发表于 2021-9-7 18:03
谢谢大神,您费心了,当时编译时时将这句屏蔽掉的。以下是重新整理过的,烦请大神给看看。
;*********** ...

从 start1 开始 往下走,第一个强制跳转是: LJMP Delay2S, 我们跟着跳过去 继续往下走,又一个强制跳转到 SJMP Main1,我们跟过去,从Main1 继续往下, 越过那个奇怪的 (if else endif)  反正没有跳转,继续往下, rdd1 上面 我看到 RET!!!  这个 RET 回去哪里? 你 Debug 的话, 这个地方应该会卡住吧?
回复

使用道具 举报

7#
ID:624769 发表于 2021-9-7 21:12 | 只看该作者
hmsd 发表于 2021-9-7 18:03
谢谢大神,您费心了,当时编译时时将这句屏蔽掉的。以下是重新整理过的,烦请大神给看看。
;*********** ...

我觉得.......

你还是把沙发的Y_G_G 的那个代码封装一下,然后直接调用吧……  你自己就写个 CALL 然后老老实实一步步走,看着你想写分支,但是好像汇编真的不适合你,你不如 C 语言 汇编 混合编写吧, 要写IF 就去C 要JMP就回汇编,自己写的也舒服。
回复

使用道具 举报

8#
ID:655665 发表于 2021-9-7 22:28 | 只看该作者
188610329 发表于 2021-9-7 21:12
我觉得.......

你还是把沙发的Y_G_G 的那个代码封装一下,然后直接调用吧……  你自己就写个 CALL 然 ...

谢谢您的回复,受教了。
最近在写E2PROM复制器的程序,就是把两个24C32,将其中一个里面的数据,通过单

片机复制到另一个里面去,可总是写不好,思路一直很混乱。请大神给指点个好的

思路,按您的思路,我再重新写程序。
回复

使用道具 举报

10#
ID:401564 发表于 2021-9-8 09:17 | 只看该作者
你又是PIC汇编,又是8051汇编,照说会两门汇编语言的,就不应该是新手了,一个IIC也不是什么难事了
一口是吃不成胖子的,你得一步一步来,IIC最主要就是从机地址和应答,先学好这两个
不可能一上来就是上千行汇编代码,你叫别人一看,头能不晕吗?
我自己几个月前写的,全是带中文注释的,我看着都头晕,更别说是看别人的......
回复

使用道具 举报

11#
ID:655665 发表于 2021-9-8 10:51 | 只看该作者
188610329 发表于 2021-9-8 00:21
我不知道你擅长用什么代码, 看你的代码, 感觉有点 硬上汇编的样子. 虽然汇编本来就是难解读,但是你是乱在 ...

188610329 大神辛苦了,谢谢您。
回复

使用道具 举报

12#
ID:655665 发表于 2021-9-8 10:52 | 只看该作者
Y_G_G 发表于 2021-9-8 09:17
你又是PIC汇编,又是8051汇编,照说会两门汇编语言的,就不应该是新手了,一个IIC也不是什么难事了
一口是吃不 ...

Y_G_G  大神辛苦了,谢谢您。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表