问个串口通信的小问题啊

[复制链接]
3516|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 | 显示全部楼层
太感谢了!
 楼主| 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;不上电什么都不显示!请大家分析下怎么回事啊?
weiyg8051 发表于 2012-6-7 16:41 | 显示全部楼层
本帖最后由 weiyg8051 于 2012-6-7 16:44 编辑

你的中断处理程序在哪里? 没有中断处理就别开中断了.不然无意触发就失控了。看看狗是不是没有喂,会不会造成复位
zhaofy521 发表于 2012-6-7 17:59 | 显示全部楼层
不上电当然就什么也不显示了
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;
}
海川先生 发表于 2012-6-8 23:31 | 显示全部楼层
我是这么认为的:没加while(1)之前  程序循环执行main()所以一直发送;
加上while(1)之后程序就停在此除了;所以整个程序只发送一次;
不上电 显个毛线!!!
受不了了 发表于 2012-6-9 15:37 | 显示全部楼层
有个老师带一下多好,别人或许就是举手之劳,自己整,一个小小的问题就耽误好久。当然这个老师也要必须是个好老师,往沟里带的不少
JC.Wang 发表于 2012-6-10 14:59 | 显示全部楼层
holyshit 描述太抽象
 楼主| xuezonggang 发表于 2012-6-18 15:33 | 显示全部楼层
我太菜了.好明白了
hefengwei 发表于 2012-6-18 23:17 | 显示全部楼层
明白就好
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

粉丝
快速回复 在线客服 返回列表 返回顶部