第2章单片机高级语言设计(gai)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3) long 长整型
long 长整型长度为四个字节,用于存放一个 四字节数据。分有符号 long 长整型 signed long 和无符号长整型 unsigned long,默认值 为 signed long 类型。signed int 表示 的数值 范围是-2147483648~+2147483647,字节 中最高位表示数据的符号,“0”表示正 数, “1”表示负数。unsigned long 表示的数值范 围是 0~4294967295。
2.3 C51基本语句
C51常用基本语句主要有8种 (1)if语句 if (表达式1) 语句1; else 语句2; 如果表达式1成立就执行语句1,否则执行语 句2,可以嵌套。
(2)switch 语句,多分支选择 switch (表达式) { case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; : case 常量表达式N:语句N;break; default: 语句;break; } 根据表达式值选择执行。如果都不是,执行default 语句。
(B)sbit 位变量名=特殊功能寄存器名^位 位置 sfr P1 = 0x90; sbit P1_1 = P1 ^ 1; //先定义一个特殊功 能寄存器名,再指定位变量名所在的位置,当 可寻址位位于特殊功能寄存器中时可采用这 种方法。
(C)sbit 位变量名=字节地址^位位置 sbit P1_1 = 0x90 ^ 1; 这种方法其实和(B)是一样的,只是 把特殊功能寄存器的位址直接用常数表示。
(6) bit 位标量
bit 位标量是 c51 编译器的一种扩充数据类 型,利用它可定义一个位标量,但不能定义 位指针,也不能定义位数组。它的值是一个 二进制位,不是 0 就是 1,类似一些高级语 言中的 Boolean 类型中的 True 和 False。
(7) sfr 特殊功能寄存器
sfr 也是一种扩充数据类型,是定义8位的特殊功能寄存器。 利用它能访问 51 单片机内部的所有特殊功能寄存器。如用 sfr P1 = 0x90 这一句定 P1 为 P1 端口在片内 的寄存器, 在后面的语句中可用 P1 = 255(对 P1 端口的所有引脚置高 电平)之类的语句来操作特殊功能寄存器。 sfr关键字后面是一个要定义的名字,等号后面必须是常数, 不允许有带运算符的表达式,而且该常数必须在特殊功能寄 存器的地址范围之内(0X80-0XFF)
2.6 C51程序基本结构
(2) int 整型
int 整型长度为两个字节,用于存放一个双字 节数据。分有符号 int 整型数 signed int 和无 符号整型数 unsigned int,默认值为 signed int 类型。signed int 表示的数值范 围是32768~+32767,字节中最高位表示数据的 符号,“0”表示正数,“1”表示负数。 unsigned int 表示的数值范围是 0~65535。
(6)for语句
for (表达式1;表达式2;表达式3) 语句;
先求解表达式1,求解表达式2,均为非0, 则执行语句,然后求解表达式3,转回求解式 2,式2为0值,则结束。否则继续。
(7)break语句
中断当前循环,通常在 switch 语句和 while、 for或 do...while 循环中使用 break 语句。执 行 break 语句会退出当前循环或语句,并开 始执行紧接着的语句。
在51系列中data,idata,xdata的区别: data:固定指前面0x00-0x7f的128个RAM, 速度最快,生成的代码也最小。 idata: 固定指前面0x00-0xff的256个RAM,其 中前128和data的128完全相同,只是因为访 问的方式不同。idata是用类似C中的指针方 式访问的。 xdata:外部扩展RAM,指外部0x00000xffff空间,用类似C中的指针方式访问或用 绝对地址方式访问。
(9) sbit 可寻址位 sbit是单片机c语言中的一种扩充数据类型, 利用它能访问芯片内部的 RAM 中的可寻址 位或特殊功能寄存器中的可寻址位,如访问 特殊功能寄存器中的某位。
如要访问P1口中的第2个引脚P1.1,定义方 法如下: (A) sbit 位变量名=位地址 sbit P1_1 = 0x91; 这样是把位的绝对地址赋给位变量。同sfr一 样sbit的位地址必须位于0X80-0XFF之间。
第2章 单片机高级语言设计
C语言是一种计算机程序设计语言,它既 具有高级语言的特点,又具有汇编语言的特 点。它的优点:简洁紧凑、灵活方便、适用 范围大,可移植性好。单片机程序开发中, C语言是技术人员必不可少的一个工具,具 有开发周期短、程序可视性好、通用性强等 功能,支持多种类型单片机。
学习目标
2.5 C51存储器类型
从数据存储类型来说,8051系列有片 内、片外程序存储器,片内、片外数据存储 器,片内程序存储器还分直接寻址区和间接 寻址类型,分别对应code、data、xdata、 idata以及根据51系列特点而设定的pdata类 型,使用不同的存储器,将使程序执行效率 不同,在编写C51程序时,最好指定变量的 存储类型,这样将有利于提高程序执行效率。
(3)goto语句
goto 语句标号 :无条件转移
(4)while语句
while (表达式) 语句
先判断,后执行,当表达式为非0值时执行语 句,表达式为0值时,不执行内嵌语句。
(5)do...while语句 do 语句; while (表达式); 先执行语句,再判断表达式,当表达式不为0, 执行,为零则不执行。注意与while区别。
2.1 C与C51
C语言具有下列特点: (1)将高级语言的基本结构、语句与低级语言的 实用性结合起来,可以对位、字节和地址进行操作。 (2)是结构式语言,以函数形式提供给用户。 (3)功能齐全,具有各种各样的数据类型,并引 入了指针概念,使程序效率更高。 (4)适用范围大,适合于多种操作系统,也适用 于多种机型。
wk.baidu.com
在C51存储器类型中提供有一个bdata的存储 器类型,这个是指可位寻址的数据存储器, 位于单片机的可位寻址区(内部RAM 0x200x2f字节单元)中,可以将要求可位寻址的 数据定义为bdata。如:
unsigned char bdata ib; //在可位录址区定 义ucsigned char类型的变量ib int bdata ab[2]; //在可位寻址区定义 数组ab[2],这些也称为可寻址位对象 sbit ib7=ib^7 //用关键字sbit定义 位变量来独立访问可寻址位对象的其中一位 sbit ab12=ab[1]^12; 操作符 “^” 后面位的最大值取决于指 定的基址类型,char型 0-7,int型 0-15, long型 0-31。
表2.3 存储器类型
存储器类型 data
说
明
直接访问内部数据存储器(128字节),访问速度最快
bdata
idata pdata xdata code
可位寻址内部数据存储器(16字节),允许位与字节混合访问 间接访问内部数据存储器(256字节),允许访问全部内部地 址
分页访问外部数据存储器(256字节) 外部数据存储器(64KB) 程序存储器(64KB)
0~255
-128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647 ±1.175494E-38~ ±3.402823E+38 对象的地址 0或1 0~255 0~65535 0或1
(1) char 字符类型
char 类型的长度是一个字节,通常用于定义处理字符数据 的变量或常量。分无符号字符类型 unsigned char 和有符号字 符类型 signed char,默认值为 signed char 类型。 unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围 是 0~255。 signed char 类型用字节中最高位字节表示数据的 符号,“0”表示正数,“1”表示负数, 负数用补码表示。所能 表示的数值范围是-128~+127。unsigned char 常用于处理 ASCII 字符或用于处理小于或等于 255 的整型数。
2.4 C51数据类型
序号 1 2 3 4 5 6 7 8 9 数据类型 长度 值域
unsigned char
signed char unsigned int signed int unsigned long signed long float * bit sfr sfr16 sbit
单字节
单字节 双字节 双字节 四字节 四字节 四字节 1~3 字节 位 单字节 双字节 位
C51语言是以C语言作基础,在结构上、定义 及函数表达方式等两者是相同,不同的地方 是C51的寄存器、位操作、数据分区等的表 述应用方式。
2.2 C51常用运算符
与C 语言相同,C51的基本运算主要有: 算术运算符,关系运算符,逻辑运算符,字 位左移、右移,字位运算符,条件运算符, 逗 号运算符, 指针运算符,长度计算符,强制类 型转换运算符,分量运算符,下标运算符, 函数调用运算符,自增自减运算符,复合赋 值表达式,逗号表达式16种 。 教材27页的表2.1很重要!
(8)sfr16 16位特殊功能寄存器
sfr16也是一种扩充数据类型,是用来定义16 位特殊功能寄存器, sfr16关键定后面是一 个要定义的名字,等号后面必须是常数,不 允许有带运算符的表达式,而且该常数必须 在特殊功能寄存器的地址范围之内(0X80- 0XFF)。sfr16 和 sfr 一样用于操作特殊功 能寄存 器,所不一样的是它用于操作占两个 字节的寄存器。
(8)continue 语句 其作用为结束本次循环。即跳出循环体中下面尚未执 行的语句,接着进行下一次是否执行循环的判定。 continue语句和break语句的区别是: continue语句只结束本次循环,而不终止整个循 环的执行。而break语句则是结束整个循环过程,不 再判断执行循环的条件是否成立。 continue语句的作用是跳过循环本中剩余的语句 而强行执行下一次循环。 continue语句只用在for、while、do-while等循 环体中, 常与if条件语句一起使用, 用来加速循环。
(4) float 浮点型
float 浮点型在十进制中具有 7 位有效数字, 是符合 IEEE-754 标准的单精度浮点型数 据,占用四个字节。因浮点数的结构较复杂 在以后的章节中再做详细的讨论。
(5)* 指针型
指针型本身就是一个变量,在这个变量中存放的指向 另一个数据的地址。这个指针变量 要占据一定的内 存单元,对不一样的处理器长度也不尽相同,在 c51 中它的长度一般为 1~3 个字节。指针变量也具有数 据类型,C51支持的指针是一般指针和存储器指针。 C51编译器支持用星号(*)进行指针声明。可以用 指针完成在标准C语言中有的所有操作。由于80C51 及其派生系列所具有的独特结构,C51编译器支持两 种不同类型的指针:通用指针和存储器指针。
掌握C51基本结构 掌握C51数据类型 掌握C51常用语句 了解并学会使用C51程序的库函数 用C语言进行简单编程
2.1 C与C51 2.2 C51常用运算符 2.3 C51基本语句 2.4 C51数据类型 2.5 C51存储器类型 2.6 C51程序基本结构 2.7 C51重要库函数 2.8 C51标识符 实训项目——电子时钟