找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2743|回复: 9
收起左侧

为什么我的串口助手不显示字符啊?附单片机源程序

[复制链接]
ID:508775 发表于 2019-4-18 16:47 | 显示全部楼层 |阅读模式
如图所示,为什么设置了SBUF=字符串之后不能在串口端显示字符呢?
QQ截图20190418163051.jpg

单片机代码如下,本人小白,求大佬解释下哈哈。
#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
sbit LED=P2^0;
u8 dat;
void delay(u16 i)
{
        while(i--);
}

void UstartInit()
{
        SCON=0X50;               
        TMOD=0X20;                        
        PCON=0X80;               
        TH1=0XF3;                                
        TL1=0XF3;
        ES=1;                                                
        EA=1;                                                
        TR1=1;                                       
}


void main()
{
        u16 i;
        UstartInit();
        SBUF = "haha";
        while(!TI);
        TI=0;
               
}

void Ustart() interrupt 4
{
        u8 receiveData;
        receiveData=SBUF;
        RI=0;
        SBUF=receiveData;
        while(!TI);
        TI=0;
}


回复

使用道具 举报

ID:508775 发表于 2019-4-18 21:20 | 显示全部楼层
这里HEX显示全是零,也就是都未送进去?到底是为什么呢,希望大神能够说一下,小白实在是没办法。
回复

使用道具 举报

ID:508775 发表于 2019-4-18 21:21 | 显示全部楼层
#include "reg52.h"

typedef unsigned int uint;
typedef unsigned char uchar;

uchar zifuchuan[]="6544 ";

void delay(unsigned char i)
{
        unsigned char j,k;
        for(j=i;j>0;j--)
  {
    for(k=90;k>0;k--);
        }
}

void ustartinit()
{
        SCON=0X50;                        //???????1
        TMOD=0X20;                        //?????????2
        PCON=0X80;                        //?????
        TH1=0XF3;                                //????????,??????4800?
        TL1=0XF3;
        ES=1;                                                //??????
        EA=1;                                                //?????
        TR1=1;                                        //?????

}

void send(uchar d)
{
        SBUF=d;
        TI=1;
        while(!TI);
        TI=0;
}

void sendc(uchar *pd)
{
        while((*pd)!='\0')
        {
                send(*pd);
                pd++;
        }
       
}

void main()
{
        ustartinit();
        while(1)
        {
                sendc(zifuchuan);
        }
       
}

void uart(void) interrupt 4
{
        uchar receiveData;

        receiveData=SBUF;//????????
        RI = 0;//?????????
        SBUF=receiveData;//???????????????
        while(!TI);                         //????????
        TI=0;       
}

               
               
回复

使用道具 举报

ID:508775 发表于 2019-4-18 21:23 | 显示全部楼层
#include "reg52.h"

typedef unsigned int uint;
typedef unsigned char uchar;

uchar zifuchuan[]="6544 ";

void delay(unsigned char i)
{
        unsigned char j,k;
        for(j=i;j>0;j--)
  {
    for(k=90;k>0;k--);
        }
}

void ustartinit()
{
        SCON=0X50;                        //???????1
        TMOD=0X20;                        //?????????2
        PCON=0X80;                        //?????
        TH1=0XF3;                                //????????,??????4800?
        TL1=0XF3;
        ES=1;                                                //??????
        EA=1;                                                //?????
        TR1=1;                                        //?????

}

void send(uchar d)
{
        SBUF=d;
        TI=1;
        while(!TI);
        TI=0;
}

void sendc(uchar *pd)
{
        while((*pd)!='\0')
        {
                send(*pd);
                pd++;
        }
       
}

void main()
{
        ustartinit();
        while(1)
        {
                sendc(zifuchuan);
        }
       
}

void uart(void) interrupt 4
{
        uchar receiveData;

        receiveData=SBUF;//????????
        RI = 0;//?????????
        SBUF=receiveData;//???????????????
        while(!TI);                         //????????
        TI=0;       
}


这个程序也不行,在HEX显示的时候接收端全是零,但是为什么什么都不显示呢,这是为什么呢,hex显示就表示我这个数据实际没写进去吧,这该怎么办呢,问题出在哪里呢,是我初始参数设置错误了吗,还是怎么回事?
回复

使用道具 举报

ID:508775 发表于 2019-4-18 21:26 | 显示全部楼层
#include "reg52.h"

typedef unsigned int uint;
typedef unsigned char uchar;

uchar zifuchuan[]="6544 ";

void delay(unsigned char i)
{
        unsigned char j,k;
        for(j=i;j>0;j--)
  {
    for(k=90;k>0;k--);
        }
}

void ustartinit()
{
        SCON=0X50;                        //???????1
        TMOD=0X20;                        //?????????2
        PCON=0X80;                        //?????
        TH1=0XF3;                                //????????,??????4800?
        TL1=0XF3;
        ES=1;                                                //??????
        EA=1;                                                //?????
        TR1=1;                                        //?????

}

void send(uchar d)
{
        SBUF=d;
        TI=1;
        while(!TI);
        TI=0;
}

void sendc(uchar *pd)
{
        while((*pd)!='\0')
        {
                send(*pd);
                pd++;
        }
       
}

void main()
{
        ustartinit();
        while(1)
        {
                sendc(zifuchuan);
        }
       
}

void uart(void) interrupt 4
{
        uchar receiveData;

        receiveData=SBUF;//????????
        RI = 0;//?????????
        SBUF=receiveData;//???????????????
        while(!TI);                         //????????
        TI=0;       
}

               
               
回复

使用道具 举报

ID:508775 发表于 2019-4-18 21:27 | 显示全部楼层
我用串口助手HEX显的话,全是零,但是接受数是增加的,这是为什么呢,是我初始参数设置错了吗?
回复

使用道具 举报

ID:94031 发表于 2019-4-18 21:49 | 显示全部楼层
SBUF里只能放一个字符,不能放字符串的。
回复

使用道具 举报

ID:213173 发表于 2019-4-18 22:23 | 显示全部楼层
改这样试试
#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
//sbit LED=P2^0;
sbit key=P2^0;
u8 dat;

u8 table[]="haha";

void delay(u16 i)
{
        while(i--);
}

void UstartInit()                //波特率4800 晶振12MHz
{
        PCON= 0x80;                //使能波特率倍速位SMOD
        SCON= 0x50;                //8位数据,可变波特率
        TMOD= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF3;                //设定定时初值
        TH1 = 0xF3;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1
        ES=1;                                                
        EA=1;                                                                                    
}
void SendOneByte(u8 c)
{
    SBUF = c;                //发送数据
    while(!TI);        //等待发送完成
    TI = 0;                        //发送中断请求标志位清0
}

void main()
{
        u8 i;
        UstartInit();
        while(1)
        {
                if(key==0)
                {
                        delay(1000);
                        if(key==0)
                        {
                                while(!key);
                                EA=0;
                                for(i=0;i<4;i++)
                                        SendOneByte(table[i]);
                                EA=1;
                        }
//                        SBUF = "haha";
//                        while(!TI);
//                        TI=0;               
                }
        }
}

void Ustart() interrupt 4
{
        u8 receiveData;
        RI=0;
        receiveData=SBUF;
        SBUF=receiveData;
        while(!TI);
        TI=0;
}
回复

使用道具 举报

ID:508775 发表于 2019-4-20 08:08 | 显示全部楼层
wulin 发表于 2019-4-18 22:23
改这样试试
#include "reg52.h"

好的,我试试。
回复

使用道具 举报

ID:508775 发表于 2019-4-20 08:08 | 显示全部楼层
xuyaqi 发表于 2019-4-18 21:49
SBUF里只能放一个字符,不能放字符串的。

后来用一个字符串的也不行哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表