单片机宏格式怎么写(单片机c语言宏定义有几种)

1.单片机c语言宏定义有几种

宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 编辑本段1.不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。

格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。

掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。

即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #define PI 3.1415926 把程序中出现的PI全部换成3.1415926 说明: (1)宏名一般用大写 (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义 (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

(4)宏定义末尾不加分号; (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。 (6)可以用#undef命令终止宏定义的作用域 (7)宏定义可以嵌套 (8)字符串" "中永远不包含宏 (9)宏定义不分配内存,变量定义分配内存。

编辑本段2.带参数的宏定义: 除了一般的字符串替换,还要做参数代换 格式: #define 宏名(参数表) 字符串 例如:#define S(a,b) a*b area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2; 类似于函数调用,有一个哑实结合的过程: (1)实参如果是表达式容易出问题 #define S(r) r*r area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b; 正确的宏定义是#define S(r) ((r)*(r)) (2)宏名和参数的括号间不能有空格 (3)宏替换只作替换,不做计算,不做表达式求解 (4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 (5)宏的哑实结合不存在类型,也没有类型转换。

(6)函数只有一个返回值,利用宏则可以设法得到多个值 (7)宏展开使源程序变长,函数调用不会 (8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值 C语言宏定义技巧(常用宏定义) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义:1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。

typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */ 3,得到指定地址上的一个字节或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) ) 4,求最大值和最小值 #define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) ) #define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) ) 5,得到一个field在结构体(struct)中的偏移量 #define FPOS( type, field ) \ /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */ 6,得到一个结构体中field所占用的字节数 #define FSIZ( type, field ) sizeof( ((type *) 0)->field ) 7,按照LSB格式把两个字节转化为一个Word #define FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] ) 8,按照LSB格式把一个Word转化为两个字节 #define FLOPW( ray, val ) \ (ray)[0] = ((val) / 256); \ (ray)[1] = ((val) & 0xFF) 9,得到一个变量的地址(word宽度) #define B_PTR( var ) ( (byte *) (void *) &(var) ) #define W_PTR( var ) ( (word *) (void *) &(var) ) 10,得到一个字的高位和低位字节 #define WORD_LO(xxx) ((byte) ((word)(xxx) & 255)) #define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8)) 11,返回一个比X大的最接近的8的倍数 #define RND8( x ) ((((x) + 7) / 8 ) * 8 ) 12,将一个字母转换为大写 #define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) ) 13,判断字符是不是10进值的数字 #define DECCHK( c ) ((c) >= '0' && (c) <= '9') 14,判断字符是不是16进值的数字 #define HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\ ((c) >= 'A' && (c) <= 'F') ||\ ((c) >= 'a' && (c) <= 'f') ) 15,防止溢出的一个方法 #define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val)) 16,返回数组元素的个数 #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) ) 17,返回一个无符号数n尾的值MOD_BY_Power_OF_TWO(X,n)=X%(2^n) #define MOD_BY_POWER_OF_TWO( val, mod_by ) \ ( (dword)(val) & (dword)((mod_by)-1) ) 18,对于IO空间映射在存储空间的结构,输入输出处理 #define inp(port) (*((volatile byte *) (port))) #define inpw(port) (*((volatile word *) (port))) #define inpdw(port) (*((volatile dword *)(port))) #define outp(port, val) (*((volatile byte *) (port)) = ((byte) (val。

2.单片机c语言宏定义有几种

宏定义 宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 编辑本段1.不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。

格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。

掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。

即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #define PI 3.1415926 把程序中出现的PI全部换成3.1415926 说明: (1)宏名一般用大写 (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义 (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

(4)宏定义末尾不加分号; (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。 (6)可以用#undef命令终止宏定义的作用域 (7)宏定义可以嵌套 (8)字符串" "中永远不包含宏 (9)宏定义不分配内存,变量定义分配内存。

编辑本段2.带参数的宏定义: 除了一般的字符串替换,还要做参数代换 格式: #define 宏名(参数表) 字符串 例如:#define S(a,b) a*b area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2; 类似于函数调用,有一个哑实结合的过程: (1)实参如果是表达式容易出问题 #define S(r) r*r area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b; 正确的宏定义是#define S(r) ((r)*(r)) (2)宏名和参数的括号间不能有空格 (3)宏替换只作替换,不做计算,不做表达式求解 (4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 (5)宏的哑实结合不存在类型,也没有类型转换。

(6)函数只有一个返回值,利用宏则可以设法得到多个值 (7)宏展开使源程序变长,函数调用不会 (8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值C语言宏定义技巧(常用宏定义) 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义:1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。

typedef unsigned char boolean; /* Boolean value type. */ typedef unsigned long int uint32; /* Unsigned 32 bit value */ typedef unsigned short uint16; /* Unsigned 16 bit value */ typedef unsigned char uint8; /* Unsigned 8 bit value */ typedef signed long int int32; /* Signed 32 bit value */ typedef signed short int16; /* Signed 16 bit value */ typedef signed char int8; /* Signed 8 bit value */ 3,得到指定地址上的一个字节或字 #define MEM_B( x ) ( *( (byte *) (x) ) ) #define MEM_W( x ) ( *( (word *) (x) ) ) 4,求最大值和最小值 #define MAX( x, y ) ( ((x) > (y)) ? (x) : (y) ) #define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) ) 5,得到一个field在结构体(struct)中的偏移量 #define FPOS( type, field ) \ /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */ 6,得到一个结构体中field所占用的字节数 #define FSIZ( type, field ) sizeof( ((type *) 0)->field ) 7,按照LSB格式把两个字节转化为一个Word #define FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] ) 8,按照LSB格式把一个Word转化为两个字节 #define FLOPW( ray, val ) \ (ray)[0] = ((val) / 256); \ (ray)[1] = ((val) & 0xFF) 9,得到一个变量的地址(word宽度) #define B_PTR( var ) ( (byte *) (void *) &(var) ) #define W_PTR( var ) ( (word *) (void *) &(var) ) 10,得到一个字的高位和低位字节 #define WORD_LO(xxx) ((byte) ((word)(xxx) & 255)) #define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8)) 11,返回一个比X大的最接近的8的倍数 #define RND8( x ) ((((x) + 7) / 8 ) * 8 ) 12,将一个字母转换为大写 #define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) ) 13,判断字符是不是10进值的数字 #define DECCHK( c ) ((c) >= '0' && (c) <= '9') 14,判断字符是不是16进值的数字 #define HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\ ((c) >= 'A' && (c) <= 'F') ||\ ((c) >= 'a' && (c) <= 'f') ) 15,防止溢出的一个方法 #define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val)) 16,返回数组元素的个数 #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) ) 17,返回一个无符号数。

3.宏定义的格式

1.不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。

格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。

掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。

即在对相关命令或语句的含义和功能作具体分析之前就要换: 例: #define PI 3.1415926 把程序中出现的PI全部换成3.1415926 说明: (1)宏名一般用大写 (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义 (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

(4)宏定义末尾不加分号; (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。 (6)可以用#undef命令终止宏定义的作用域 (7)宏定义可以嵌套 (8)字符串" "中永远不包含宏 (9)宏定义不分配内存,变量定义分配内存。

2.带参数的宏: 除了一般的字符串替换,还要做参数代换 格式: #define 宏名(参数表) 字符串 例如:#define S(a,b) a*b area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2; 类似于函数调用,有一个哑实结合的过程: (1)实参如果是表达式容易出问题 #define S(r) r*r area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b; 正确的宏定义是#define S(r) (r)*(r) (2)宏名和参数的括号间不能有空格 (3)宏替换只作替换,不做计算,不做表达式求解 (4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 (5)宏的哑实结合不存在类型,也没有类型转换。

(6)函数只有一个返回值,利用宏则可以设法得到多个值 (7)宏展开使源程序变长,函数调用不会 (8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。

4.单片机C51程序中#define acc unsigned char 宏定义能否做成一个像<

在记事本或编辑器中编辑保存以下文本到 你定义的文件名.h,如Global.h

//================================

#ifndef GLOBAL

#define GLOBAL

#define acc unsigned char

#endif

//================================

在需要用到acc的c程序或h程序文件中,添加 #include "Global.h" 即可。

5.单片机C语言的宏定义有什么作用

跟单片机没关系,这是C语言的东西

-------------

#是C语言里的预处理命令,编译器在编译代码之前,会预先处理这部分内容,#define 就是宏定义,对于 #define 的内容是怎样处理的呢?看下面的代码

#define MAX 128

void main()

{

int max=MAX;

}

编译器处理时,会直接把 int max=MAX;替换成 int max=128; 注意,是文本替换,而不是变量赋值,程序中自始至终都不存在MAX这个变量,相当于是用“查找-替换”功能一样,查找 MAX ,替换成 128 。

如果程序中有多个地方要用到同一个值、代码块,我们都可以定义成一个宏,如果这些值或代码块要改动,只需改下宏定义就行了,不用从代码中一处一处的改,很方便,而且不会因为漏掉某个地方而导致程序出错。

单片机宏格式怎么写

转载请注明出处育才学习网 » 单片机宏格式怎么写(单片机c语言宏定义有几种)

知识

招聘推进表怎么写(公司招聘表格怎么写有范本最好)

阅读(335)

本文主要为您介绍招聘推进表怎么写,内容包括公司招聘表格怎么写有范本最好,招聘情况登记表怎么填,简单的招聘表格怎么做。新进人员任用表 ◎请附上该员履历表及面试核定表 新员工试用考察表 日期 人 事 资 料 姓名 应

知识

招生证明怎么写(招生简章怎么写)

阅读(302)

本文主要为您介绍招生证明怎么写,内容包括公安招生亲属证明怎么写,招生简章怎么写,招生简章怎么写。以这个为例子1 山东省蓬莱师范学校烟台市蓬莱外国语学校2006年招生简章 山东省蓬莱师范学校 烟台市蓬莱外国语学校 2006年招生简章

知识

英语期中成绩分析怎么写(英语期中总结怎么写)

阅读(249)

本文主要为您介绍英语期中成绩分析怎么写,内容包括英语期中考试试卷分析怎么写,英语期中总结怎么写,英语期中考试反思怎么写。期中考试考完2113了,还没等成绩出来5261,我已经预料到了这4102次考试的惨败,我认为让这次1653考试惨败和这几点有关

知识

银行用日语怎么写(从银行取钱日文怎么说)

阅读(390)

本文主要为您介绍银行用日语怎么写,内容包括日语银行怎么说,各种银行的日语读法写法,从银行取钱日文怎么说。从银行取钱 日文是:银行からお金を引き出します。去银行取现 翻译日语有:银行へ行ってお金を下ろす。银行へ现金を引き出しに行く。

知识

扬帆用英语怎么写(扬帆起航用英文怎么说)

阅读(317)

本文主要为您介绍扬帆用英语怎么写,内容包括扬帆英文怎么写,扬帆起航用英文怎么说,“扬帆”的英文。大家都已经回答了,那么我就来补充一下sail这个单词的用法吧!扬帆起航,如果在句子中,可以直接用sail,根据时态可以变化为sails(

知识

小学生电影影评怎么写(小学生怎么写电影观后感)

阅读(295)

本文主要为您介绍小学生电影影评怎么写,内容包括小学生怎么写影评,小学生怎么写影评,小学生怎么写电影观后感。电影观后感怎么写要“会看”电影要写观后感,首先要“会看”电影。也许有人会发笑:只要眼不瞎耳不聋,谁不会看电影?可是为什么许多人

知识

现金流入量英文怎么写(100分求英文版现金流量表)

阅读(354)

本文主要为您介绍现金流入量英文怎么写,内容包括现金流入量CI与现金流出量CO分别是哪写英文的缩写,现金流入COt是英文缩写么,现金流量表英语怎么说。现金流量表(非金融类) CASH FLOW STATEMENT(Travel enterprise) 会外年通03表 编制单位:Name

知识

毅的毛笔字怎么写(练的毛笔字怎么写)

阅读(311)

本文主要为您介绍毅的毛笔字怎么写,内容包括练的毛笔字怎么写,“毅”字的毛笔字图片谁能弄到,毅字的写法。这里所说的[毛笔字".是指按传统法度书写的毛笔字.而不是用毛笔随意写出的字.[怎样写好"是一个大问题.这里只是概念性地提示掌握笔法和

知识

艺术教学理念怎么写(美术课程的基本理念是什么)

阅读(253)

本文主要为您介绍艺术教学理念怎么写,内容包括美术课程的基本理念是什么,艺术理念是什么,设计理念怎么写。美术课程的基本理念是:力求体现素质教育的要求,以学习活动方式划分美术学习领域,加强学习活动的综合性和探索性,注重美术课程与学生生活

知识

在校毕业总结怎么写(大学毕业生自我总结范文)

阅读(295)

本文主要为您介绍在校毕业总结怎么写,内容包括毕业总结怎么写,大学毕业生自我总结范文,大专毕业生的毕业总结怎么写。三年的大学校园生活是我人生的一大转折点。我于xxxx年9月以优异的成绩考入xx大学。四年的校园生涯和社会实践生活我不断

知识

济阳的籍贯怎么写(我家是山东的籍贯填什么)

阅读(311)

本文主要为您介绍济阳的籍贯怎么写,内容包括我家是山东的籍贯填什么,各种填表时候”籍贯“怎么填是填”省“和”市“还是”省“和”县,籍贯怎么填写,急急急急急急急急急急急急。籍贯填山东省。什么是籍贯?参照公安部公通字[1995]91号文件,公

知识

家长对对老师的评价怎么写(家长对老师的评价怎么写)

阅读(325)

本文主要为您介绍家长对对老师的评价怎么写,内容包括家长对老师的评价怎么写,家长对老师的评价短语,家长对老师的正面评价怎么写。原发布者:假面骑士cor对老师的评价老师授课的方式非常适合我们,他根据本课程知识结构的特点,重点突出,层次分明

知识

家具销售心得怎么写(家具销售员的工作总结怎么写)

阅读(257)

本文主要为您介绍家具销售心得怎么写,内容包括家具销售员的工作总结怎么写,我是一名家具导购员怎么写自己的感受,家具销售心得体会。原发布者:香河双友家具家具销售年终总结范文家具销售工作总结 销售是一个过程,得到一个客户联系方式,意味着

知识

简历待业2年的怎么写(长期待业怎么写简历)

阅读(405)

本文主要为您介绍简历待业2年的怎么写,内容包括待业2年了,要怎么写自己的简历呢而且期间有做过一个月的工作,,快待业2年了,不知道怎么写好自己的简历,前几个月找到份工作只,长期待业怎么写简历。你好 首先,明确下你的求职意向,你想从事什么职

知识

给长辈的信开头怎么写(给长辈写信的格式)

阅读(999)

本文主要为您介绍给长辈的信开头怎么写,内容包括给长辈写信的格式,给长辈写信怎样开头,给长辈写信怎样开头和结尾。写给长辈的书信的格式:包括称呼、正文、结尾、署名四部分组成。1.开头要有称呼,即写信人对收信人的称呼,如:“**老师”、“爸爸

知识

怎么用c语言写电路板(C语言怎么写进单片机)

阅读(244)

本文主要为您介绍怎么用c语言写电路板,内容包括C语言怎么写进单片机,PCB板怎么写入程序的程序怎么写,opencv的c语言项目,如何做成硬件电路板。1:先把写好的C语言进行编译,生成*.hex或*.bin文件,推荐用keil C。然后:1:根据你单片机的型号买一个烧

知识

20000的格式怎么写(借20000的借条带利息怎么写)

阅读(313)

本文主要为您介绍20000的格式怎么写,内容包括20000元大写怎么写,小写的贰万元怎么写,20000元支票大写如何写。给你一个模板,你可以进行参考,你可以根据你自己的实际需要对欠条模板进行修正。借条,在协商一致的基础上,债务人(姓名、身份证号码)从

知识

英文生日月日年怎么写(英文的年月日书写格式)

阅读(617)

本文主要为您介绍英文生日月日年怎么写,内容包括英文的年、月、日书写格式,英文日期的格式,用英语怎样表示生日日期。英文日期分英式和美式,以2009年3月8日为例如下: 8th March,2009 或8 March,2009(英式)。2、March

知识

驾校章怎么写(驾校需要在系上盖的章的那个证明格式怎么写)

阅读(375)

本文主要为您介绍驾校章怎么写,内容包括驾校需要在系上盖的章的那个证明格式怎么写,驾校证明怎么写,驾校需要在系上盖的章的那个证明格式怎么写。不用。只需要写姓名、性别、身份证号、学校的院系,然后证明你是在校的学生就可以了。证 明成

知识

苹果激活id怎么写(苹果AppleID的格式是什么样呢)

阅读(361)

本文主要为您介绍苹果激活id怎么写,内容包括苹果AppleID的格式是什么样呢,苹果手机要怎么激活ID,苹果id怎么激活。苹果Apple ID 格式概括为邮箱账号+@+邮箱域名的扩展名。 苹果官网给出的格式是name@example.com,用户一般可以用Q

知识

写检讨落款怎么写(检讨格式怎么写)

阅读(411)

本文主要为您介绍写检讨落款怎么写,内容包括检讨书的落款怎么写,检讨格式怎么写,检讨书落款是否顶行写。标题在头行正中写明“检讨书”字样即可;也有注明所犯错误范围或性质,如《关于违反财经纪律的检讨书》。称谓写明检讨书呈报的组织、单位

知识

银行帐号格式怎么写(填写正确银行卡号格式是什么格式)

阅读(502)

本文主要为您介绍银行帐号格式怎么写,内容包括填写正确银行卡号格式是什么格式,我第一次用谁告诉我银行账号格式怎么填,求银行卡卡号格式(给个例子就行))。银行卡卡号是指各个银行发行的硬卡上的编号代码,各个商业银行之间的业务号段有统一的规

[/e:loop]