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

 *第23717篇: [求助]P0端口问题

  
楼 主:CHITIE 2004年7月14日12:32
 [求助]P0端口问题
ORG 0010H
      AJMP INIT
      ORG 0023H
      AJMP JIESHOU
INIT: MOV SP,#80H;栈底
      MOV IP,#08H;定义中断级别
      MOV TMOD,#20H;定时器T1为方式二
      MOV SCON,#50H;串行口为方式一
      MOV PCON,#00H;令SMOD=0
      MOV TH1,#0F4H;给TH1重装初值
      MOV TL1,#0F4H;波特率为2400(11.0592晶振)
      SETB TR1;启动T1
      SETB ES
      SETB EA


        AJMP $;等待

JIESHOU:PUSH PSW;可以连续接收上位机发来的数据
        PUSH DPH
        PUSH DPL
        PUSH ACC
        CLR ES;关中断不引起连续触发
        CLR RI

        MOV A,SBUF;保存收到的数据
        CJNE A,#32H,KEY1;如果单片机收到32H则将P0状态送回计算机
        MOV A,P0
        LJMP KEY
        
   KEY1:CJNE A,#33H,KEY2;如果单片机收到33H则将P0状态送回计算机
        MOV A,P1
        LJMP KEY
        
   KEY2:CJNE A,#34H,KEY3 ;如果单片机收到34H则将P0状态送回计算机   
        MOV A,P2
        LJMP KEY
        
   KEY3:CJNE A,#1H,KEY4 ;如果单片机收到1H,P0状态=FEH并送回计算机
        MOV P0,#0FEH
        LJMP KEY
        
   KEY4:CJNE A,#2H,KEY5;如果单片机收到1H,P0状态=FDH并送回计算机
        MOV P0,#0FDH
        LJMP KEY
        
   KEY5:CJNE A,#3H,KEY;如果单片机收到1H,P0状态=FBH并送回计算机
        MOV P0,#0FBH
        LJMP KEY
             
       
   KEY:MOV SBUF,A
       


 WAIT:JNB   TI,WAIT ;等待发送完
      CLR TI
      CLR A


KEY7:SETB ES;恢复中断

        POP ACC
        POP DPL
        POP DPH
        POP PSW

        RETI
        END


现在可以实现通信,但是P0端口不能锁存,整了好几天了,还不见好
我真的糊涂了,是硬件的问题还是软件的问题?故障表现为向P0端口送数,
一闪就灭(端口接的指示灯)如果换成向P1或者P2送数则可以锁存,注:P0口
接10K上拉电阻,换过2K,4.7K,20K均不见效,求高手指教,

向提供帮助的人致敬,谢谢你们。

  
2楼:justrong 2004年7月14日15:41
 尽管你的程序结构有重大问题,但在逻辑上是
尽管你的程序结构有重大问题,但在逻辑上是没问题的!出现你说的现象有可能你上下位机的波特率不一致或者是你的上位机在不停的发1,2,3这其中的两个以上值。我认为你最好是手工单字节调试。
  
3楼:CHITIE 2004年7月14日23:18
 首先要谢谢你提供帮助,才学习单片机不久,
首先要谢谢你提供帮助,才学习单片机不久,还有很多不了解的东西要学习,在这里也有人说过我的程序有结构上的问题,但这是我能想到的唯一办法了,

上下位机的波特率应该没问题,明天换个晶振式式看,另外连续发送的不是1H,2H,3H,而是从上位机,连续发送32H,33H,34H,到单片机,需要他来控制单片机将P0,P1,P2
的状态送回计算机,换成P2,P1端口就可以了,都会急死了,电脑程序方面我做了0.5--2秒
间隔可调的连续发送周期(发送32H,33H,34H,),时间长短没有影响,1.2.3S是电脑程序中按钮
发送出来的,每点机一次就发送一次,其它时间在不停的发送32.33.34,是不是连续发送的原因,我现在都糊涂了,整了45天了,没结果还望大侠百忙中多多指教


向所有提供帮助的人致敬

  ORG 0010H
      AJMP INIT
      ORG 0023H
      AJMP JIESHOU
INIT: MOV SP,#80H;栈底
      MOV IP,#08H;定义中断级别
      MOV TMOD,#20H;定时器T1为方式二
      MOV SCON,#50H;串行口为方式一
      MOV PCON,#00H;令SMOD=0
      MOV TH1,#0F4H;给TH1重装初值
      MOV TL1,#0F4H;波特率为2400(11.0592晶振)
      SETB TR1;启动T1
      SETB ES
      SETB EA


        AJMP $;等待

JIESHOU:PUSH PSW;可以连续接收上位机发来的数据
        PUSH DPH
        PUSH DPL
        PUSH ACC
        CLR ES;关中断不引起连续触发
        CLR RI

        MOV A,SBUF;保存收到的数据
        CJNE A,#32H,KEY1;如果单片机收到32H则将P0状态送回计算机
        MOV A,P0
        LJMP KEY

   KEY1:CJNE A,#33H,KEY2;如果单片机收到33H则将P0状态送回计算机
        MOV A,P1
        LJMP KEY

   KEY2:CJNE A,#34H,KEY3 ;如果单片机收到34H则将P0状态送回计算机
        MOV A,P2
        LJMP KEY

   KEY3:CJNE A,#1H,KEY4 ;如果单片机收到1H,P0状态=FEH并送回计算机
        MOV P0,#0FEH
        LJMP KEY

   KEY4:CJNE A,#2H,KEY5;如果单片机收到1H,P0状态=FDH并送回计算机
        MOV P0,#0FDH
        LJMP KEY

   KEY5:CJNE A,#3H,KEY;如果单片机收到1H,P0状态=FBH并送回计算机
        MOV P0,#0FBH
        LJMP KEY


   KEY:MOV SBUF,A

 WAIT:JNB   TI,WAIT ;等待发送完
      CLR TI

KEY7:SETB ES;恢复中断

        POP ACC
        POP DPL
        POP DPH
        POP PSW


        RETI

        END

  
4楼:justrong 2004年7月15日10:51
 你的程序逻辑如下图所示,你看一下与你的初
你的程序逻辑如下图所示,你看一下与你的初衷是否相符。程序中ACC的值除了在接受到32H,33H,34H时分别为P0,P1,P2口的值,其他任何时候都为零,所以你看一下PC机接收到的值是否为零。
另外在初学51编程时应该多画画流程图;在不知道中断机制的情况下尽量少用中断。

  
5楼:guest 2004年7月14日17:35
 easy
p0口要接上拉电阻,这是最基本的啊。
  
6楼:CHITIE 2004年7月14日23:46
 上拉电阻接了,要是端口高电平发光关也可以
上拉电阻接了,要是端口高电平发光关也可以亮,反接发光管
  
7楼:guest 2004年7月14日17:37
 在说
P0口要低电平使指示灯亮,即P0口为吸电流。

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

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


[上一篇主题]:急急!!求助

[下一篇主题]:[求助]关于pcf8563问题