c/c++ 单片机 硬件 嵌入式
#include<reg51.h>#include<string.h>#definerdy0x06//**********此处有疑问************#define...
#include<reg51.h>
#include<string.h>
#define rdy 0x06 //********** 此处有疑问************
#define busy 0x15 //********** 此处有疑问************
#define ok 0x00 //********** 此处有疑问************
#define succe 0x0f //********** 此处有疑问************
#define err 0xf0 //********** 此处有疑问************
#define uint unsigned int #define uchar unsigned char
/****************************开关端口定义*********************************************/
sbit sw_0=P3^3;
sbit sw_1=P3^4;
/****************************数码显示 键盘接口定义****************************************/
sbit PS0=P2^4;//数码管个位
sbit PS1=P2^5;//数码管十位
sfr P_data=0x80;//P0口为显示数据输出口
sbit P_K_L=P2^2;//键盘列
uchar tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//字段转换表
uint sw_in(void);//开关量输入采集
void display(uint a);//显示函数
void delay(uint delay_time);//延时函数
void init_serial(void);
void send_data(uint temp);
void main(void)
{ uint temp=0; //存放数据区
uchar i=0;
uchar tmp=busy;//状态信号
uint a;
init_serial();
EA=0;
while(1)
{
temp=sw_in();
//发送握手信号 06H
TI=0;
SBUF=rdy; //*******此处有疑问************
while(!TI);
TI=0;
//接收应答信息 00H
while(tmp!=ok)
{ RI=0;
while(!RI);
tmp=SBUF;
RI=0;
}
//发送数据,并接收校验信息和回传数据
tmp=err;
while(tmp!=succe)
{ send_data(temp);
RI=0;
while(!RI);
tmp=SBUF;
RI=0;
}
delay(200);
while(!RI);
temp=SBUF;
RI=0;
for(a=0;a<200;a++)//显示,兼有延时的作用
display(temp);
}
}
问题:以上标注有“******”的地方有疑问
#define rdy 0x06 后面的十六进制OX06是怎么得来的,有什么根据?
同样,后面其他的define 数值是怎么得来的? 谢谢! 展开
#include<string.h>
#define rdy 0x06 //********** 此处有疑问************
#define busy 0x15 //********** 此处有疑问************
#define ok 0x00 //********** 此处有疑问************
#define succe 0x0f //********** 此处有疑问************
#define err 0xf0 //********** 此处有疑问************
#define uint unsigned int #define uchar unsigned char
/****************************开关端口定义*********************************************/
sbit sw_0=P3^3;
sbit sw_1=P3^4;
/****************************数码显示 键盘接口定义****************************************/
sbit PS0=P2^4;//数码管个位
sbit PS1=P2^5;//数码管十位
sfr P_data=0x80;//P0口为显示数据输出口
sbit P_K_L=P2^2;//键盘列
uchar tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//字段转换表
uint sw_in(void);//开关量输入采集
void display(uint a);//显示函数
void delay(uint delay_time);//延时函数
void init_serial(void);
void send_data(uint temp);
void main(void)
{ uint temp=0; //存放数据区
uchar i=0;
uchar tmp=busy;//状态信号
uint a;
init_serial();
EA=0;
while(1)
{
temp=sw_in();
//发送握手信号 06H
TI=0;
SBUF=rdy; //*******此处有疑问************
while(!TI);
TI=0;
//接收应答信息 00H
while(tmp!=ok)
{ RI=0;
while(!RI);
tmp=SBUF;
RI=0;
}
//发送数据,并接收校验信息和回传数据
tmp=err;
while(tmp!=succe)
{ send_data(temp);
RI=0;
while(!RI);
tmp=SBUF;
RI=0;
}
delay(200);
while(!RI);
temp=SBUF;
RI=0;
for(a=0;a<200;a++)//显示,兼有延时的作用
display(temp);
}
}
问题:以上标注有“******”的地方有疑问
#define rdy 0x06 后面的十六进制OX06是怎么得来的,有什么根据?
同样,后面其他的define 数值是怎么得来的? 谢谢! 展开
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
#define rdy 0x06
意思是0x06可以用rdy替换
根据SBUF=rdy;
应该是协议里规定好了的,发送握手信号 0x06
意思是0x06可以用rdy替换
根据SBUF=rdy;
应该是协议里规定好了的,发送握手信号 0x06
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言的#define是一种伪指令,用途是可以用#define[空格]后面自定义的名称,这里即是“rdy” 去替换程序中固定不变的量,这个量可以是一个常量,也可以是一个表达式。
此段代码中,rdy替换的是“0x06” , busy 替换“0x15” ,这些都是常量,#define又叫做“宏定义”,亦即代替固定量的作用。用宏定义,可以优化代码的编写,使得使用同一个量的表达式变得易读和可维护,易读是指使用合适的名称,如busy——忙代表无意义的数值,可以使程序代码变得非常易于理解,而不必写很多注释去逐条解释。可维护则体现在将来busy如果由0x15改为0x1F了,所有使用busy代用的地方的数值全部会被更改为0x1F,而不必一个个去修改,而导致遗漏等问题而使程序因修改产生“次生Bug” 。
至于为何#define rdy 为 0x06,需要查询单片机的数据手册和根据rdy在程序中的注释或应用情况判断。
#define用于代替表达式的例子:
#define M_XY ((2+3)*(x+y)) //记得一定要加上最外边的括号。
应用:
x=3; y=7;
Z = M_XY * 10 + 5; //这里就相当于:Z = ((2+3)*(x+y)) * 10 + 5
关于define的更多应用,请参阅C语言基础类的书籍。
此段代码中,rdy替换的是“0x06” , busy 替换“0x15” ,这些都是常量,#define又叫做“宏定义”,亦即代替固定量的作用。用宏定义,可以优化代码的编写,使得使用同一个量的表达式变得易读和可维护,易读是指使用合适的名称,如busy——忙代表无意义的数值,可以使程序代码变得非常易于理解,而不必写很多注释去逐条解释。可维护则体现在将来busy如果由0x15改为0x1F了,所有使用busy代用的地方的数值全部会被更改为0x1F,而不必一个个去修改,而导致遗漏等问题而使程序因修改产生“次生Bug” 。
至于为何#define rdy 为 0x06,需要查询单片机的数据手册和根据rdy在程序中的注释或应用情况判断。
#define用于代替表达式的例子:
#define M_XY ((2+3)*(x+y)) //记得一定要加上最外边的括号。
应用:
x=3; y=7;
Z = M_XY * 10 + 5; //这里就相当于:Z = ((2+3)*(x+y)) * 10 + 5
关于define的更多应用,请参阅C语言基础类的书籍。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是在做和什么的通信吗?如果是的,那么这些是对应芯片的控制和检测信号。例如1602液晶的0x38,表示显示方式为2行16列。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询