打印

求助:关于C8051F020和PC机进行串口通讯以及关于SBUF写数的问

[复制链接]
3848|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蓝色日出|  楼主 | 2008-7-3 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用C8051F020的实验板BTF020和PC机进行232通讯,用串口调试助手看结果。我用的是新华龙提供的例程,运行结果应该能在串口调试助手中看到发送的结果。波特率没有问题,用的是16进制显示。但是得到的结果是乱的,并不是我程序发送的。
现在想不出还可能是什么问题?
我把例程改了,也还是不行。
下面是主程序
void main (void)
 {
    static unsigned char data1;
    WDTCN = 0xde;
    WDTCN = 0xad;                           //禁止看门狗定时器

    SYSCLK_Init ();                            // 系统时钟初始化
    UART0_Init ();                                     
    PORT_Init ();                              // 交叉开关和通用I/O口初始化
      while(1)
    {
        if(TI0==1)            
      {
        SBUF0=NCDdata[6];    
        a=SBUF0;
        TI0=0;
       }
        for(x=0;x<5000;x++);
        LCD_Init();                         //LCD初始化
        P2  = 0xA0;                         //准备送数据
        for(x=0;x<5000;x++);
        lcdpoint=&NCDdata;                    //取地址
        for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
        { 
            data1=*lcdpoint;                //读出数据                
            P3 = data1;                     //写数据到端口
            P2 = 0X20;
            P2 = 0XA0;                        //控制LCD    
            lcdpoint++;
            for(x=0;x<5000;x++);
        }
        P2 = 0X80;
           P3 = 0xc0;
           P2 = 0x00;        
           P2 = 0x80;         
           for(x=0;x<1000;x++);
        lcdpoint=&Netdata;
        for(lcd_data_count=14;lcd_data_count>0;lcd_data_count--)//显示第一行字符
        { 
            data1=*lcdpoint;
            P3 = data1; 
            P2 = 0xA0;                   //修改后的LCD程序
            P2 = 0x20;
//------------------------------------------------------/
            lcdpoint++;
            for(x=0;x<5000;x++);
             for(x=0;x<5000;x++);
              for(x=0;x<5000;x++);
               for(x=0;x<5000;x++);
                for(x=0;x<5000;x++);
        }
    }
}

相关帖子

沙发
mohanwei| | 2008-7-3 10:46 | 只看该作者

乱……

设置好波特率之后用printf测一下就可以了。当然之前先要把TI置位1——这是printf要求的。

使用特权

评论回复
板凳
aq_fd| | 2008-7-3 11:10 | 只看该作者

可能020那实验板的sp3223

先要将TI置位1,启动发送。
还有可能020那实验板的sp3223坏掉了,我那板就坏过一次,得到的是乱码。

使用特权

评论回复
地板
蓝色日出|  楼主 | 2008-7-3 11:34 | 只看该作者

谢谢,我试试看

还真有可能是232的片子坏了,我再试试看。

使用特权

评论回复
5
蓝色日出|  楼主 | 2008-7-3 11:49 | 只看该作者

还有一个问题

一个菜鸟问题,我想往SBUF0中写如一些固定的数,比如aa或者5555什么的,程序上改怎么编啊?需要用数组吗?

使用特权

评论回复
6
蓝色日出|  楼主 | 2008-7-3 13:05 | 只看该作者

可以向SBUF中写字符吗?

使用特权

评论回复
7
蓝色日出|  楼主 | 2008-7-3 15:11 | 只看该作者

还是自己回答吧

看来是太简单了,大侠们不屑回答
刚刚弄清该怎么做,希望能给同样的菜鸟们给点帮助。
以下的片子是新华龙的C8051F020
1、向SBUF中写16进制数:
SBUF0=0x55;
2、
可以向SBUF中写字符吗?
目前还不知道。
3、
if(TI0==1)            
      {
        SBUF0=NCDdata[6];    
        a=SBUF0;
        TI0=0;
       }
这段程序改了一下,做个死循环:
TIO=1;
do{
while(!TI0);
TI0=0;
SBUF0=0x55;

while(1);
运行成功!
在PC机的串行助手中看到了55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55……
只是有时候会有一些错码,用的是外部晶振,波特率最初是115200,改小后也还是有错码,加延时也不行,目前还没有解决。

使用特权

评论回复
8
圈圈虫1989| | 2011-11-3 20:24 | 只看该作者
有错码是波特率没有设置好

使用特权

评论回复
9
圈圈虫1989| | 2011-11-8 19:52 | 只看该作者
问题已经解决了,RS232的收发线连接返了- -哎

使用特权

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

本版积分规则

28

主题

235

帖子

0

粉丝