串口工作不太正常,大家帮帮忙

2019-07-16 06:55发布

我遇到的另一个问题,似乎我想不出问题所在。 使用AT89S51的,项目是通过RS485的数据流,每个uC站号,并选择指定的数据 ,现在我只是测试的串口... 发现是串口不是象我想象中的那样工作。。。。代码如下:我的想法是UC上不断发送,读取的P1和输出P2的值的命中率。如果我短的UC Tx和Rx端口,那么我应该收到与我发送相同的数据。我要证明我已接收到的数据,swaped ACC和它输出到P2 ,P0.0到P0.0(MAX1232)给我的复位发生器的脉冲



  1. $MOD51
  2. org 0000H
  3. ljmp INItiAL

  4. org 0100H
  5. INITIAL:
  6. setb P0.0
  7. mov TH1,#0FDH
  8. mov TMOD,#20H
  9. setb TR1
  10. clr P0.0
  11. mov PCON,#00H
  12. mov SCON,#0D0H
  13. clr TI
  14. clr RI
  15. MULAI:
  16. setb P0.0
  17. mov A,P1
  18. mov P2,A
  19. mov SBUF,A
  20. clr P0.0
  21. clr TI
  22. jb RI,SERIAL_RECEIVED
  23. ljmp MULAI

  24. org 0150H
  25. SERIAL_RECEIVED:
  26. clr P0.0
  27. mov A,SBUF
  28. swap A
  29. setb P0.0
  30. mov P2,A
  31. jmp SERIAL_RECEIVED
复制代码大家有没有什么意见。谢谢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
A670521546
2019-07-16 09:04
不太明白你的意思
我有一个是用C语言写的,在串口调试助手上输入什么,就接受什么
可能端口和你的不大一样
#include<reg51.h>
#define uchar unsigned char
sbit P3_0=P3^0;
uchar a,flag;
void main()
{
     TMOD=0x20;                  //设置定时器 1 为模式2
     TH1=0xfd;                  //装初值设定波特率
     TL1=0xfd;
     TR1=1;                       //启动定时器
     SM0=0;                       // 串口通信模式设置
     SM1=1;
     REN=1;                        // 串口允许接收数据
     EA=1;                         //开总中断
     ES=1;                          //开串行中断
     while(1)
     {
       if(flag==1)        //如果有数据则进入这个语句
       {
           ES=0;                //进入发送数据时先关闭串行中断
           flag=0;
           SBUF=a;             //将数据原样发回
           while(!TI);           //等待数据发完
          TI=0;
          ES=1;                  //退出进再开串行中断
       }
    }
}
void serial() interrupt 4       // 串行中断函数
{   P3_0=SBUF;                    //将数据发送给 P3_0 口显示(测试用)
    a=SBUF;                     //收取数据
    flag=1;                     //标志置位
    RI=0;
}

一周热门 更多>