打印

问个串口通信的小问题啊

[复制链接]
2784|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuezonggang|  楼主 | 2012-6-7 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的STC51单片机,单片机向串口助手通信,我想发送字母A给串口助手。我是这么写的:SBUF='A'
      while(!TI);
      TI=0;
可是一直串口助手接收窗口一直发送A不停了!于是我想可能是单片机遇见FF地址什么的自动复位了,于是我在语句后面加了个问号while(1)语句,可是又什么都不显示了!
    求哪位高手指点下原因,能给我一个发送一个字母显示一个字母的测试程序。新手分不多,全部送上了阿

相关帖子

沙发
hotyong| | 2012-6-7 10:55 | 只看该作者
麻烦你把你的帖子改一下吧,,语句不通,看不懂,这都是什么呀。。

“可是一直串口助手接收窗口一直发送A不停了”
”于是我在语句后面加了个问号while(1)语句“

使用特权

评论回复
板凳
ayb_ice| | 2012-6-7 11:21 | 只看该作者
uart_init();
ES = 0;

SBUF = 'A';

while(!TI);
TI = 0;
while(1)
{

}

使用特权

评论回复
地板
269152492| | 2012-6-7 11:43 | 只看该作者
太感谢了!

使用特权

评论回复
5
xuezonggang|  楼主 | 2012-6-7 16:01 | 只看该作者
源程序附上:
#include"reg51.h"
#include"stdio.h"
#define uchar unsigned char
#define uint unsigned int
uchar a,b;
uint redata,sendata;
bit flag;
void delay(uint a);
void main()
{         TMOD=0X20;                  //  定时器工作模式2
     SCON=0X50;                        //允许串行接受状态,串口工作模式1
         PCON=0X80;                          //波特率加倍
         TH1=0XFD;                                //  这是4800bit/s波特率 晶振频率位12mhz,加倍,定时器工作方式2的初值
         TL1=0XFD;
         EA=1,ES=1,TR1=1;
     
         ES=0;
         SBUF='A';
         while(!TI);
         TI=0;
         while(1);
}
这个程序就是一上电,串口助手才显示A;不上电什么都不显示!请大家分析下怎么回事啊?

使用特权

评论回复
6
weiyg8051| | 2012-6-7 16:41 | 只看该作者
本帖最后由 weiyg8051 于 2012-6-7 16:44 编辑

你的中断处理程序在哪里? 没有中断处理就别开中断了.不然无意触发就失控了。看看狗是不是没有喂,会不会造成复位

使用特权

评论回复
7
zhaofy521| | 2012-6-7 17:59 | 只看该作者
不上电当然就什么也不显示了

使用特权

评论回复
8
darlin520| | 2012-6-8 22:55 | 只看该作者
#include<reg52.h>
unsigned char flag,a;
void main()
{

    TMOD=0x20;//设置定时器1为工作方式2
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    while(1)
        {

            if(flag==1)
                    {
                    ES=0;
                    flag=0;
                    SBUF=a;
                    while(!TI);
                    TI=0;
                    ES=1;
                    }
        }
}

void ser() interrupt 4
{
    RI=0;
   P1=SBUF;//通过P1口的状态来判断发了什么数
    a=SBUF;
    flag=1;
}

使用特权

评论回复
9
海川先生| | 2012-6-8 23:31 | 只看该作者
我是这么认为的:没加while(1)之前  程序循环执行main()所以一直发送;
加上while(1)之后程序就停在此除了;所以整个程序只发送一次;
不上电 显个毛线!!!

使用特权

评论回复
10
受不了了| | 2012-6-9 15:37 | 只看该作者
有个老师带一下多好,别人或许就是举手之劳,自己整,一个小小的问题就耽误好久。当然这个老师也要必须是个好老师,往沟里带的不少

使用特权

评论回复
11
JC.Wang| | 2012-6-10 14:59 | 只看该作者
holyshit 描述太抽象

使用特权

评论回复
12
xuezonggang|  楼主 | 2012-6-18 15:33 | 只看该作者
我太菜了.好明白了

使用特权

评论回复
13
hefengwei| | 2012-6-18 23:17 | 只看该作者
明白就好

使用特权

评论回复
14
hailanglin| | 2014-1-24 13:36 | 只看该作者
55 AA 55 AA 03 00 00 11 65发送码,正确的返回是55 AA 55 AA 05 00 11 81 10 00 03 61 64 6D 81 11 00 06 31 32 33 34 35 36 1F 44 你试试

使用特权

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

本版积分规则

0

主题

10

帖子

0

粉丝