| 
                
                  | tgs0910   
         
  
 | 分享:        ▼         
 
 
   不好意思时常麻烦大大的帮忙 老大请教一下我18楼的程式对吗
 就算用2颗8051对接也无法收到信号
 谢谢
 我今天又去买两个75176
 我共有六个75176
 但是只有一个可以这样接还收的到东西
 程式是用大大帮小弟改的程式
 ORG   00h
 MOV   TMOD,#00100000B
 MOV   TH1,#0FDH
 SETB   TR1
 ORL   PCON,#80H
 MOV   SCON,#01111000B
 clr   20h.0
 START:
 jnb   ri, checkp21
 clr   ri
 mov   a, sbuf
 cjne   a, #30h, chkrcv31h
 setb   p1.1
 setb   20h.0
 jmp   checkp21
 chkrcv31h:
 cjne   a, #31h, rcvother
 setb   p1.2
 jnb   20h.0, checkp21
 setb   p1.3         ; 收到 30h, 31h
 clr   20h.0
 jmp   checkp21
 rcvother:
 clr   20h.0       ; 非 30h, 31h
 checkp21:
 setb   p2.1         ; pull high p2.1 for input
 jnb   p2.1, START_9
 jmp   START
 
 START_9:
 mov   dptr, #table
 next:   mov   a,#0
 movc   a,@a+dptr
 cjne   a,#'$',trans
 jmp   START
 
 trans: mov   sbuf,a
 jnb   ti,$
 clr   ti
 inc   dptr
 ajmp   next
 table: DB     30h, 31h, '$'
 谢谢
 
 
 [ 此文章被tgs0910在2006-04-19 21:23重新编辑 ] 
 
 |  
                  | 
                
                  | 
 |  
                  |  x0  [20 楼]
                    
                    
                     From:台湾中华电信 
 |  Posted:2006-04-19 21:16 | |  |  
                
                  | tgs0910   
         
  
 | 分享:        ▲
                    
                      ▼         
 
   老大小弟终于找出问题的所在了原来是小弟的面包版太旧了
 有些接触不良
 小弟换了一块就没这个问题了
 谢谢大大的帮忙
 不过小弟还有些问题
 可否麻烦大大有空时帮帮小弟谢谢
 ORG     00h
 MOV     TMOD,#00100001B
 MOV     TH1,#0FDH
 SETB    TR1
 ORL     PCON,#80H
 MOV     SCON,#01110000B
 ;
 LOOP:   MOV     P1,#11111111B
 JNB     RI,K0
 CLR     RI
 ;
 MOV     A,SBUF
 ;
 C1:     CJNE    A,#FFH,C2
 CLR     P1.0
 JMP     K0
 ;
 C2:     CJNE    A,#31H,C3
 CLR     P1.1
 JMP     K0
 ;
 C3:     CJNE    A,#32H,C4
 CLR     P1.2
 JMP     K0
 ;
 C4:     CJNE    A,#33H,C5
 CLR     P1.3
 JMP     K0
 ;
 C5:     CJNE    A,#34H,C6
 CLR     P1.4
 JMP     K0
 ;
 C6:     CJNE    A,#35H,C7
 CLR     P1.5
 JMP     K0
 ;
 C7:     CJNE    A,#36H,C8
 CLR     P1.6
 JMP     K0
 ;
 C8:     CJNE    A,#37H,LOOP
 CLR     P1.7
 JMP     K0
 ;
 K0:     MOV     P2,#11111111B
 JB      P2.0,K1
 MOV     A,#FFH
 ACALL   DELAY
 JMP     K8
 ;
 K1:     JB      P2.1,K2
 MOV     A,#31H
 ACALL   DELAY
 JMP     K8
 ;
 K2:     JB      P2.2,K3
 MOV     A,#32H
 ACALL   DELAY
 JMP     K8
 ;
 K3:     JB      P2.3,K4
 MOV     A,#33H
 ACALL   DELAY
 JMP     K8
 ;
 K4:     JB      P2.4,K5
 MOV     A,#34H
 ACALL   DELAY
 JMP     K8
 ;
 K5:     JB      P2.5,K6
 MOV     A,#35H
 ACALL   DELAY
 JMP     K8
 ;
 K6:     JB      P2.6,K7
 MOV     A,#36H
 ACALL   DELAY
 JMP     K8
 ;
 K7:     JB      P2.7,K9
 MOV     A,#37H
 ACALL   DELAY
 JMP     K8
 ;
 K9:     JMP     LOOP
 ;
 K8:     MOV     SBUF,A
 JNB     TI,$
 CLR     TI
 JMP     LOOP
 ;
 DELAY:  MOV     R4,#40
 
 ;
 TIMER:  MOV     TH0,#3CH
 MOV     TL0,#B0H
 SETB    TR0
 ;
 WAIT:   JB      TF0,OK
 AJMP    WAIT
 ;
 OK:     CLR     TF0
 DJNZ    R4,TIMER
 RET
 
 ;
 END
 小弟这样写哪里有问题请大大帮小弟看一下
 为什么不能用
 小弟看过可以用 一只脚来选择要用哪一段程式
 然后把那一只脚接地就永远用那一段程式来执行
 就是第一段把 P1.1 SETB 时就发射30H
 第二段把 P1.1 SETB 时就发射31H
 
 请问大大知道大概要如何写
 谢谢
 
 |  
                  | 
                
                  | 
 |  
                  |  x0  [22 楼]
                    
                    
                     From:台湾
 |  Posted:2006-04-29 18:11 | |  |  
                
                  | cmovies 
         
  
 | 分享:        ▲
                    
                      ▼         
 
   小弟这样写哪里有问题请大大帮小弟看一下为什么不能用
 -> 我不晓得你所谓的不能用是指什么问题?
 唯一能看出不太合理的地方是收到资料后, 如果 P2 没有被按下那么 P1 的动作立刻就消失了
 LOOP:   MOV   P1,#11111111B <- 就是这行
 就算 P2 有被按下, 两秒钟后 P1 得动作也会消失 (DELAY 在 12 MHz 应该是两秒吧!?)
 
 如果你的程式是想要发送端的 P2 被按了哪些, 接收端的 P1 相对应的脚位就拉 High 其他为 Low.
 那直接把 P2 送出去就好了
 ORG   00h
 MOV   TMOD,#00100001B
 MOV   TH1,#0FDH
 SETB  TR1
 ORL   PCON,#80H
 MOV   SCON,#01110000B
 MOV   P1,#11111111B
 LOOP:
 JNB   RI,K0
 CLR   RI
 MOV   A,SBUF
 MOV   P1, A
 K0:
 MOV   P2,#11111111B
 NOP
 MOV   A,P2
 CPL   A
 MOV   SBUF,A
 CALL  DELAY
 JMP   LOOP
 
 DELAY:
 MOV   R4,#40
 TIMER:
 MOV   TH0,#3CH
 MOV   TL0,#B0H
 CLR   TF0
 SETB  TR0
 WAIT:
 JNB   TF0,WAIT
 DJNZ  R4,TIMER
 RET
 
 END
 
 小弟看过可以用 一只脚来选择要用哪一段程式
 然后把那一只脚接地就永远用那一段程式来执行
 就是第一段把 P1.1 SETB 时就发射30H
 第二段把 P1.1 SETB 时就发射31H
 -> 这跟你用 JB 来判别要送哪个资料有什么不一样吗???
 LOOP:
 JB    P0.0, CODE1
 JMP   CODE2
 CODE1:
 ;
 JMP   LOOP
 CODE2:
 ;
 JMP   LOOP
 
 |  
                  | 
                
                  | 
 |  
                  |  x0  [23 楼]
                    
                    
                     From:台湾中华电信 
 |  Posted:2006-04-30 23:52 | |  |  |