打印

高手给指点一下:我的8251怎么不能同时发送和接收呢?

[复制链接]
1974|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-4-6 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是我做的89C52简单的发送和接收程序,我在电脑上用串口调试助手进行调试,示波器发现8251的rxd,txd只能有一个有波形,就是发送和接收只能进行其中一个.(新电脑串口绝对没问题,换了好几块正确的电路板都是这个问题)
第二个问题是DAT8251 = data_temp[m];这句话有问题,发送不出数据,只有写成比如:DAT8251 =0X52才能发送一个字母 R, DAT8251 =0X48发送一个字母 H  ;为什么我写成DAT8251 = data_temp[0]就不能发送字母R呢?
请各位老师和大虾们指导一下!
#include "reg52.h"
#include "stdlib.h"
#include "absacc.h"
#include "intrins.h"
#include "test.h"
#include "math.h"
#define uchar unsigned char
#define uint  unsigned int
#define COM8251 XBYTE[0x8601]
#define DAT8251 XBYTE[0x8600]
uchar data_temp[10]={0x52,0x55,0x56,0x57,0x58,0x00};
uchar temp[10]={11,22};
 uchar m=0,n=0,k;  
uchar s;
void  initmcu(void);
void  wait(uchar p,q);    
void main(void) 
{  
    COM8251 = 0x00;
    DAT8251 = 0x00;
    DAT8251 = 0x00;
    COM8251 = 0x40;//以上为8251复位部分
    wait(11,82);
    COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16
    wait(11,82);
    COM8251 = 0x35;  
    wait(11,82);   
    while(1)
    {
        m=0;
      while(data_temp[m]!=0x00)
        {
            DAT8251 = data_temp[m];//写
            temp[m] = DAT8251;
            m++;
        }    
    }
}
void  wait(uchar p,q)
{
   uchar  i,j;                //(2*j+3)*i+4
   for (i=p;i>0;i--)
      for (j=q;j>0;j--);
}

相关帖子

沙发
sjnh| | 2007-4-6 15:00 | 只看该作者

..

while(data_temp[m]!=0x00)
        {
            DAT8251 = data_temp[m];//写
            temp[m] = DAT8251;
            m++;
        } 

速度很快,就是说,你一块送进去5个数,当然要覆盖前面的

使用特权

评论回复
板凳
ccjchen|  楼主 | 2007-4-6 19:12 | 只看该作者

你说的对,但是我已经将while(1)中的内容该成了:

也就是把while(1)内部改成了:
while(1)
{
   DAT8251 = data_temp[0];//写
}

就这么简单,发送的竟然和DAT8251 = 0x52发送的竟然内容不一样啊 

使用特权

评论回复
地板
ccjchen|  楼主 | 2007-4-7 17:44 | 只看该作者

两种情况运行结果为什么不一样呢?

while(1)
{
DAT8251 =data_temp[0]; 
}
单步汇编结果如下:
MOV R0,#00H
MOVX A,@R0
MOV DPTR,#8700H
MOV @DPTR,A
运行的结果为 0

while(1)
{
DAT8251 =0x52;
}
汇编为:
MOV DPTR,#8700H
MOV A,#52H
MOV @DPTR,A
运行结果为52H,
以上两种情况运行结果为什么不一样呢?

使用特权

评论回复
5
ccjchen|  楼主 | 2007-4-8 18:53 | 只看该作者

我做了如下改动就好拉!不过我的程序还是不能同时发送和接

uchar  data data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58};在其中加了data 我用串口调试助手接受正常,而且串口调试助手中显示的RX接收速度异常快,但是其中的TX发送频率无论如何该发送速度都很慢,用示波器查看8251的rxd无波形,而txd有波形,或者是正好反过来.就是不能同时有,请大虾们,再帮指导一下.

使用特权

评论回复
6
ccjchen|  楼主 | 2007-4-9 11:03 | 只看该作者

哈哈,解决拉!

原来那样好象发送接受的频率不一样,相差很远,所以就不行吧,用了中断就不存在这个问题了!不过好象有点会出现乱码.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝