宏定义命令为#define。实际使用宏定义时,按一般习惯,通常将宏符号名用大写字母表示,以区别于其他的变量名。在进行宏定义时,可以引用已经定义过的宏符号名,即可以进行层层代换,但最多不能超过8级嵌套。宏符号名的有效范围是从宏定义命令#define开始,直到本源文件结束。通常将宏定义命令#define写在源程序的开头、函数的外面,作为源文件的一部分,从而在整个档范围内有效。需要时可以用命令#undef来终止宏定义的作用域。......
2023-11-17
除了上面介绍的宏定义、档包含和条件编译预处理命令之外,Keil Cx51编译器还支持#error、#pragma和#line预处理命令。#line命令一般很少使用,下面介绍#error和#pragma命令的功能和使用方法。
#error命令通常嵌入在条件编译之中,以便捕捉到一些不可预料的编译条件。正常情况下该条件的值应为假;若条件的值为真,则输出一条由#error命令后面的字符串所给出的错误信息并停止编译。例如,如果有#define MYVAL,它的值必须为0或1,为了测试MYVAL的值是否正确,可在程序中安排如下一段条件编译:
当MYVAL的值出错时,将输出出错信息并停止编译。#pragma命令通常用在源程序中向编译器传送各种编译控制命令,其使用格式如下:#pragma编译命令名序列例如,对程序进行编译时希望采用DEBUG、CODE、LARGE编译命令,则只要在源程序的开始处加入一个命令行“#pragma DB CD LA”即可。
#pragma命令可以出现在C语言源程序中的任何一行,从而使编译器能重复执行某些编译控制命令,以达到某种特殊的目的。如果#pragma命令后面的参数不是Keil Cx51编译器的合法编译控制命令,编译器将忽略其作用。需要指出的是,并非所有的C51编译控制命令都可以在C语言源程序中对#pragma预处理命令多次使用,对于Keil Cx51编译器的首要控制命令只能使用一次,如果多次使用将导致致命的编译错误。
习题5
1.简答题
(1)有哪些数据类型是MCS-51系列单片机直接支持的?
(2)C51特有的数据结构类型有哪些?
(3)C51的存储类型有几种?它们分别表示的存储器区域是什么?
(4)C51中bit位与sbit位有什么区别?
(5)在C51中,通过绝对地址来访问的存储器有几种?
(6)在C51中,中断函数与一般函数有什么不同?
(7)按给定存储器类型和数据类型,写出下列变量的说明形式:(www.chuimin.cn)
1)在data区定义字符变量va11。
2)在idata区定义整型变量va12。
3)在xdata区定义无符号字符数组va13[4]。
4)在xdata区定义一个指向类型的指针px。
5)定义可寻址位变量flag。
6)定义特殊功能寄存器变量P3。
7)定义特殊功能寄存器变量SCON。
8)定义16位的特殊功能寄存器T0。
2.编程题
(1)将8051单片机外部数据存储器地址2000H~2FFFH存储空间做清零操作。
(2)将一个16元素数组的无符号字符数组中的数据存入片内数据存储区的30H~3FH中,并对存储区地址中的数据按从小到大的顺序排序。
(3)有16个十六进制字节数据被存储于片内数据存储区30H~3FH中,请分别将它们拆分成十六进制高位和十六进制低位,十六进制高位存于片内数据存储区40H~4FH中,十六进制低位存于片内数据存储区50H~5FH中。
有关单片机基础及应用的文章
宏定义命令为#define。实际使用宏定义时,按一般习惯,通常将宏符号名用大写字母表示,以区别于其他的变量名。在进行宏定义时,可以引用已经定义过的宏符号名,即可以进行层层代换,但最多不能超过8级嵌套。宏符号名的有效范围是从宏定义命令#define开始,直到本源文件结束。通常将宏定义命令#define写在源程序的开头、函数的外面,作为源文件的一部分,从而在整个档范围内有效。需要时可以用命令#undef来终止宏定义的作用域。......
2023-11-17
如采取延时等待改为中断方式;循环次数减少和较快的循环指令;计算方法简化;时事性要求高的采用汇编语言编写程序等。④速度与程序长度冲突时,以速度为主。7)设置自诊断程序。在系统运行前、运行中执行必要的自诊断程序,以检查系统各特征参数是否正常,以提高运行的可靠性。......
2023-11-17
在工作方式0下进行计数时,计数值的范围是1~8192。使用定时功能时定时时间的计算公式为或其时间单位与晶振周期或机器周期的时间单位相同,为μs。方式0为13位计数结构。定时器/计数器0不用,所以保持其原来的控制位不变。程序设计定时器方式0例程说明......
2023-11-17
MCS-51单片机的算术运算类指令包括加、减、乘、除、加1、减1等指令。这类指令有ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV共8种。表3-3算术运算类指令注:√表示该指令影响某一标志位。运算结果对PSW的影响同上述4条ADD指令。6.十进制调整指令十进制调整指令只有以下1条:该指令用于BCD码加法运算时,对BCD码的加法运算结果自动进行调整,但对BCD码的减法运算不能用此指令来调整。在运算过程中,单片机按二进制规则进行运算。......
2023-11-17
所谓函数的调用就是在一个函数体中引用另外一个已经定义了的函数,前者称为主调用函数,后者称为被调用函数。实际参数的作用是将它的值传递给被调用函数中的形式参数。2)函数表达式。这种在调用一个函数的过程中又调用了另一个函数的方式,称为嵌套函数调用,在输出一个函数的值时经常采用这种方法。例如:其中,函数funtion1(i,j)是作为printf()函数的一个实际参数处理的,它也属于嵌套函数调用方式。......
2023-11-17
1.生产厂商常见的单片机生产厂商有Intel公司、Motorola公司、Philips公司、Atmel公司、Zilog公司、NEC公司、MicroChip公司、ADI公司、Epson公司、NS公司、AMD公司、WinBond公司、Scenix公司、Toshiba公司、Fujitsu公司、Samsung公司等。2.单片机系列常见的单片机系列有Intel公司的MCS-51、MCS-96/98系列,Motorola公司的68HC05、68HC5X、68HC12、68HC16、683XX系列,Philips公司的80C5X系列,Atmel公司的AT89系列,Zilog公司的Z8、Z86系列,ADI公司的MC-6801系列,MicroChip公司的PIC16CX、PIC16FX、PIC17CX、PIC18CX系列,NEC公司的μPD7800系列,Toshiba公司的MB8900、MB90系列等。......
2023-11-17
程序存储器以程序计数器PC作为地址指针,通过16位地址总线,可寻址的地址空间为64KB,片内/外统一编址。根据单片机的类型及引脚的电平,CPU可从内部也可从外部程序存储器开始执行。而当EA=0时,内部程序存储器被忽略,程序直接从外部程序存储器的0000H开始执行。64KB程序存储器中有一些特殊的单元,在使用时应加以注意。0023H——串行口的中断服务子程序入口地址。......
2023-11-17
条件转移指令共有8条。1.累加器判零转移指令累加器判零转移指令共有两条:这组指令的功能是对累加器的内容为“0”和不为“0”进行检测并转移。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。例如,已知累加器=00H,执行指令:2.数值比较转移指令数值比较转移指令共有4条。利用这两条指令可实现循环控制,循环次数存放于寄存器中或直接寻址单元中。......
2023-11-17
相关推荐