导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:紧急求助!串口通信[guojing]

 *第3602篇: 初学者:紧急求助!串口通信

  
楼 主:guojing 2002年6月6日15:01
 初学者:紧急求助!串口通信
我编的简单的串口发送程序想试一下。在运行的时候sbuf寄存器值总是零,请指点,谢谢!
程序如下:
#include <reg51.h>
#define uchar unsigned char

uchar buf[5]={0x11,0x22,0x33,0x44,0x55};
void init();
void send(uchar* p);
void main()
{
    init();
    send(buf);
}

void init()
{
    SCON=0x50;//SM0 SM1 SM2 REN TB8 RB8 TI RI
    PCON=0x00;
    TMOD=0x20;//GATE CT1 M1 M0 GATE CT0 M1 M0:00100000
    TH1=0xfd;//set 9600bps
    TL1=0xfd;
    TCON=0x00;//TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
    TR1=1;
}
void send(uchar* p)
{
    uchar i;
    for(i=0;i<5;i++)
    {
        SBUF=p[i];
        while(TI==0);
        TI=0;
        p++;
    }
}

  
2楼:蓝天 2002年6月6日15:11
 修改:
void send(uchar *p)
{
    uchar i;
    for(i=0;i<5;i++)
    {   ACC=*p++;
        SBUF=ACC;
        while(TI==0);
        TI=0;
    }
}
  
3楼:guojing 2002年6月6日15:45
 谢谢!可是还不行啊?
  
4楼:蓝天 2002年6月6日15:54
 当然还需要如下设置:
ES=1;
EA=1;
把这两句加到send(buf)前面。
  
5楼:guojing 2002年6月6日16:13
 但问题没有解决,希望大侠不吝赐教
我采用的是查询,好像跟IE寄存器没有关系。
  
6楼:蓝天 2002年6月6日16:34
 你是用什么调试的?
你这种方式是查询与中断结合。串行口通信是中断方式的。修改后的send()函数是绝对没问
题的。也许是你的波特率设置错啦。
  
7楼:guojing 2002年6月6日16:51
 谢谢你这么热心,请你看一看吧
我是用SUPER ICE51S仿真器,单片机是11.0592MHZ,定时器初值是查书的。不知道
是不是仿真器有问题啊?
  
8楼:蓝天 2002年6月6日17:08
 自己算一下波特率吧。
好象你的方式中两个参数应该为吧。你算一下吧。也许是发出去了,但是由于双方波特率不
一致,所以接收端看不到正确的数据。
TH1=0xee;TL1=0xee;
  
9楼:blackhorse 2002年6月20日21:02
 see it
void send(uchar* p)
{
    uchar i;
    for(i=0;i<5;i++)
    {
        SBUF=p[i];
        while(TI==0);
        TI=0;
       // p++;//看到了!!!
    }
}

   


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

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


[上一篇主题]:硬件:我收到的以太网帧的地址前和数据后各有4个字节,不知为什么?

[下一篇主题]:初学者:再问关于8019!