导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助[guest]

 *第18243篇: 求助

  
楼 主:guest 2003年12月24日11:18
 求助
我是一个初学者,麻烦各位大侠看看这个计米器程序,编到89c51中刚开始能工作,过一段
时间就死机,有人说我的i2c读写有问题,不知原因在哪里?请跟我联系(zhaobozhong@yahoo.com.cn),切盼指点:

        sda   equ p3.7
        scl   equ p3.6
        xybz  equ f0
        buf   equ 30h
        p_adr equ 00h

        org 0000h
        ajmp rd24c
        org 0001h
        ajmp rd24c
    org 001bh
        ajmp time1
        org 000bh
        ajmp time
        org 0013h
        ajmp main
       

        org 80h
rd24c:    mov 20h,#00h
        mov 40h,#150
        mov 45h,#00h
    mov 46h,#00h
    mov 47h,#00h
    mov dptr,#p_adr
rd24c1:    clr ea
        acall fbzm
        acall csxy
        jb xybz,rd24c1
        acall fdpl
        acall fjsm
        mov a,r3
        acall fsmw
        acall csxy
        jb xybz,rd24c1
        mov r0,#buf
        mov r2,#00h
rd24c2: mov r1,#08h
rd24c3: setb scl
        setb sda
        mov c,sda
        rlc a
        clr scl
        djnz r1,rd24c3
        mov @r0,a
        inc r0
        inc r2
        cjne r2,#04h,ww
        acall fjsm        
    mov tmod,#26h
    mov th1,#0c8h
    mov tl1,#0c8h
    mov th0,#0fbh
    mov tl0,#0fbh
        mov ip,#04h        
    mov ie,#86h
        mov tcon,#18h    
    mov sp,#70h    
next:    lcall disp    
    lcall key
    lcall ankey
    sjmp next    
    nop
    nop
    nop
ww:     acall fyd
        ajmp rd24c2
fbzm:   setb sda
        setb scl
        mov a,dph
        clr c
        rlc a
        anl a,#0fh
        orl a,#0a0h
        mov r3,a
        inc r3
fsmw:   clr sda
fsmw1:  mov r1,#08h
fsmw2:  clr scl
        rlc a
        mov sda,c
        setb scl
        djnz r1,fsmw2
        clr scl
        ret
csxy:   setb sda
        setb scl
        clr xybz
        jnb sda,csxy1
        setb xybz
csxy1:  clr scl
        ret
fyd:    clr sda
        setb scl
        nop
        clr scl
        setb sda
        ret
fjsm:   clr sda
        setb scl
        nop
        setb sda
        ret
fdpl:   mov a,dpl
facc:   acall fsmw1
        acall csxy
        ret

time:    push acc    
    push psw
        setb p2.7
    inc 20h        
    mov a,20h
    cjne a,#0ah,reti2
    mov 20h,#00h
    mov a,32h
    add a,#01h
    mov 32h,a
    cjne a,#64h,reti1
    mov 32h,#00h
    mov a,33h
    add a,#01h
    mov 33h,a
    cjne a,#64h,reti1
    mov 33h,#00h
    
reti1:  mov a,33h
        mov a,30h
    mov a,31h
        mov a,32h
        cjne a,30h,reti2
        mov a ,33h
        cjne a,31h,reti2
        clr p2.7
        ljmp reti3
        nop

reti3:  lcall delay1
        ljmp main
        nop
        nop

reti2:  pop psw    
    pop acc
    reti    
    nop
    nop

disp:   mov dptr,#table
loop1:    mov b,#10
        mov a,32h
        div ab
        mov 79h,b
        mov 7ah,a
        mov b,#10
        mov a,33h
        div ab
        mov 7bh,b
        mov 7ch,a
        mov a,79h
        movc a,@a+dptr
    mov p0,a
    clr p1.0
    acall delay1
    setb p1.0
    mov a,7ah
    add a,#0ah
        movc a,@a+dptr
    mov p0,a
    clr p1.1
    acall delay1
    setb p1.1
    mov a,7bh
        movc a,@a+dptr
    mov p0,a
    clr p1.2
    acall delay1
    setb p1.2
    mov a,7ch
        movc a,@a+dptr
    mov p0,a
    clr p1.3
    acall delay1
    setb p1.3
    ret
        nop
        nop

table:  db 05h,0bdh,26h,34h
        db 9ch,54h,44h,3dh
        db 04h,14h,01h,0b9h
        db 22h,30h,98h,50h
        db 40h,39h,00h,10h
    nop
    nop

key:    jnb p2.0,rete
    jnb p2.4,rete
    ret
    nop
    nop

rete:   lcall disp
    reti

ankey:  clr ea
        mov 40h,#150
        
lx:     mov a,40h
        dec a
        jz l9
        mov 40h,a
        lcall de10ms
        jnb p2.0,l1
        jnb p2.1,l6
        jnb p2.4,l7
        lcall disp
        ajmp lx
        nop
        nop
lx2:    lcall disp
        mov a,44h
        mov 34h,a
        mov a,43h
        mov 33h,a
        mov a,42h
        mov 32h,a
        ljmp l6

l7:     ljmp l71

l21:    mov a,32h
        mov 30h,a
        mov a,33h
        mov 31h,a
        mov a,43h
        mov 33h,a
        mov a,42h
        mov 32h,a
  
l6:     jnb p2.1,l25
l9:     setb ea
        ljmp next

l25:    lcall disp
        ajmp l21
        nop

l1:     jnb p2.0,l11
        mov a,33h
        mov 43h,a
        mov a,32h
        mov 42h,a
        mov a,30h
        mov 32h,a
        mov a,31h
        mov 33h,a
        lcall disp

l31:    mov 41h,#1bh
        mov 40h,#180
l32:    mov a,40h
        dec a
        jz lx2
        mov 40h,a
        lcall de10ms
        jnb p2.2,l311
        jnb p2.3,l5
        jnb p2.1,l21
        lcall disp
        ajmp l32
        nop
        nop

l11:    lcall disp
        ajmp l1
    nop

L313:dec a
        mov 41h,a
        AJMP L12
l5:     mov a,41h
       cjne a,#02h,L313

l12:    lcall de10ms
    mov a,32h
    add a,#01h
    mov 32h,a
    cjne a,#64h,l312
        mov 32h,#00h
        mov a,33h
    add a,#01h
    mov 33h,a
        cjne a,#64h,l312
        mov 33h,#00h
        
l312:   jnb p2.2,l311
        ljmp l31
        nop
        nop
L51:dec a
        mov 41h,a
        AJMP L55
l5:     mov a,41h
       cjne a,#02h,l51

l55:    lcall de10ms
        mov a,32h
    dec a
        mov 32h,a
        cjne a,#0ffh,l51
        mov 32h,#63h
        mov a,33h
    dec a
    mov 33h,a
        cjne a,#0ffh,l51
        mov 33h,#63h

l51:    jnb p2.3,l5
        ljmp l31
        nop
        nop

l70:    clr tr0
        setb tr1
        
time2:  lcall disp
        ajmp time2

time1:  mov a,45h
        add a,#01h
        mov 45h,a
        cjne a,#32h,time2
        mov 45h,#00h
        mov a,46h
        add a,#01h
        mov 46h,a
        cjne a,#64h,time2
        mov 46h,#00h
        mov a,47h
        add a,#01h
        mov 47h,a
        cjne a,#32h,time2
        mov 47h,#00h
        clr tr1
        setb tr0
        ajmp l71
        nop
        nop

l71:    jnb p2.4,l73
        mov 32h,#00h
        mov 33h,#00h

l72:    ljmp l6

l73:    lcall disp
        ajmp l71

main:   mov dptr,#p_adr
wr24c1: clr ea
        acall fbzm
        acall csxy
        jb xybz,wr24c1
        acall fdpl
        mov r0,#buf
        mov r2,#00h
wr24c2: mov a,@r0
        acall facc
        inc r0
        inc r2
        cjne r2,#04h,wr24c2
        acall fjsm
        acall de10ms
        setb ea
        ljmp l70
        nop

de10ms: mov a,41h
        mov r7,a
        nop
loop2:  lcall disp
        djnz r7,loop2
        ret
        nop

delay1: mov r6,#80h
        djnz r6,$
        ret
        nop
        nop
end

  
2楼:guest 2003年12月24日12:19
 我没有仔细看你的程序,但是凭经验讲一个原
我没有仔细看你的程序,但是凭经验讲一个原则。不要在程序中始终查询一个标志(字或位),设置一个定时器,如果隔一定时间没有查询到需要的信息,需要有跳出循环的办法,重新在进入进行新的查询。
  
3楼:guest 2003年12月24日16:51
 谢谢!我试试看
  
4楼:guest 2003年12月25日10:50
 l5:     mov a,41h
 

l5:     mov a,41h
       cjne a,#02h,L313   ;标点符号有错,点号不是西文的点是汉字的点,
                                       ;而且两处L5,编译不知道怎么通过的
                          ;目前还没看程序
;第一处
L5:     MOV  A , 41H
        CJNE  A ,#02H , L313
;第二处
L5:     MOV  A , 41H
        CJNE  A , #02H , L51


  
5楼:guest 2003年12月25日10:55
 ;第一处
L5:     MOV  A

;第一处
L5:     MOV  A , 41H
        CJNE  A ,#02H , L313

;第二处
L5:     MOV  A , 41H
        CJNE  A , #02H , L51
;两处调用,有同名字
;且CJNE 这行标点是汉字的标点,不是西文的,不知道怎么编译通过的
;没看程序

  
6楼:guest 2003年12月25日19:34
 我已重新编过该程序原意帮忙者请联系
我已重新编过该程序就是不好用,原因是:1、 I2C读写有时好。2、P2.4按一次使32H.33H为零,按两次32H.33H又回到原值,不知何故?3、有时会死机。EMAIL:zhaobozhong@yahoo.com.cn
  
7楼:guest 2003年12月26日16:35
 为什么没人理我,帮我编一下要多少?zhaobozhong@yahoo.com.cn

>>>>>>对该主题发表你的看法

本主题贴数7,分页: [第1页]


[上一篇主题]:1片at29c040芯片可以同时取代6264和27c512吗?

[下一篇主题]:如何装载嵌入式系统?