找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1917|回复: 3
打印 上一主题 下一主题
收起左侧

STC89C5单片机串口发送数据时我使用单引号发送正确,双引号提示我指向的不是指针的...

[复制链接]
跳转到指定楼层
楼主
ID:636538 发表于 2020-6-4 13:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>

void uart_init(void);
void uart_send_byte(unsigned char m);
void delay500ms(void);
void main()
{
  uart_init();
  while(1)
  {
    uart_send_byte("x");
      delay500ms();
  
  }
}

void uart_init(void)    //第一步单片机初始化
{
  SCON=0x50;             //通信方式一
  PCON=0x00;             //波特率加倍

  TMOD=0X20;             //方式2
  TH1=243;
  TL1=243;             //波特率4800

  TR1=1;
  ES=1;
  EA=1;
}
void uart_send_byte(unsigned char m)
{
   SBUF=m;

   while(!TI);

   TI=0;
}


void delay500ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=205;c>0;c--)
        for(b=116;b>0;b--)
            for(a=9;a>0;a--);
}
就是 uart_send_byte("x");但改为uart_send_byte('x');没有问题,这个是什么原因
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:267719 发表于 2020-6-4 14:25 | 只看该作者
void uart_send_byte(unsigned char m)
调用你申明的这个函数
如果是单引号uart_send_byte('x');
等同于uart_send_byte(0x78); //x的ASCII码是0x78   ‘x'这时是字符,不是字符串。
如果是双引号,表示字符串。字符串是用指针表示起始位置的。不符合你申明的unsigned char,所以类型不正确。

unsigned char str[]="xyz";
uart_send_byte(*str);
uart_send_byte(*(str+1));
这是可以的.

评分

参与人数 1黑币 +12 收起 理由
SKYLAR123 + 12 很给力!

查看全部评分

回复

使用道具 举报

板凳
ID:224329 发表于 2020-6-4 14:29 | 只看该作者
双引号引起来的是字符串,是char*类型。单引号引起来的是字符,是char类型。

评分

参与人数 1黑币 +5 收起 理由
SKYLAR123 + 5 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:648281 发表于 2020-6-4 14:41 | 只看该作者
双引号引用的是字符串,
单引号引用的是一个字符

评分

参与人数 1黑币 +5 收起 理由
SKYLAR123 + 5 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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