标题: STC89C5单片机串口发送数据时我使用单引号发送正确,双引号提示我指向的不是指针的... [打印本页]

作者: SKYLAR123    时间: 2020-6-4 13:39
标题: STC89C5单片机串口发送数据时我使用单引号发送正确,双引号提示我指向的不是指针的...
#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');没有问题,这个是什么原因

作者: carpcarey    时间: 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));
这是可以的.

作者: qq659848755    时间: 2020-6-4 14:29
双引号引起来的是字符串,是char*类型。单引号引起来的是字符,是char类型。
作者: 51hei**1140    时间: 2020-6-4 14:41
双引号引用的是字符串,
单引号引用的是一个字符




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1