第10章 单片机C语言程序设计

更新时间:2023-05-24 02:58:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第10章 单片机C语言程序设计单片机C语言概述C51的数据类型与运算 C51数据的存储类型和存储模式 C51程序基本结构与相关语句 C51的函数 单片机资源的C51编程实例

51单片机系统开发常用工具软件keil C51

本章知识点 单片机C语言概述

C51的数据类型与运算 C51数据的存储类型和存储模式 C51程序基本结构与相关语句 C51的函数 单片机资源的C51编程实例 51单片机系统开发常用工具软件keil C51

10.1 单片机C语言概述

随着单片机硬件性能的不断提高和应 用技术的不断发展,开发者越来越注重 目标系统的开发成效,而开发成效在很 大程度上取决于程序本身的编写效率。 为了适应这种要求,出现了单片机高级 语言—C语言。

10.1.1 C语言的特点及程序结构单片机的C语言编译器:德国的KEIL C51开发平台、加拿 大DAVEDUNFIELD的MICRO-C51、美国Franklin软件公 司的Franklin C51等。目前最流行的是Keil C51编译器。 一.C语言的特点 1.语言简洁、紧凑,使用方便、灵活。 2.运算符丰富。 3.数据结构丰富。具有现代化语言的各种数据结构。 4.可进行结构化程序设计。 5.可以直接对计算机硬件进行操作。 6.生成的目标代码质量高,程序执行效率高。 7.可移植性好。

二.C语言的程序结构C语言程序采用函数结构,每个C语言程序由一个 或多个函数组成,在这些函数中至少应包含一个主函数 main(),也可以包含一个main()函数和若干个其它的功 能函数。不管main()函数放于何处,程序总是从main() 函数开始执行,执行到main()函数结束则结束。

10.1.2 C语言与MCS-51单片机用C51语言和汇编语言主要不同之处在于: 用汇编语言编写51单片机程序必须要考虑其存储器 结构,尤其必须考虑其片内数据存储器与特殊功能寄存 器的使用以及按实际地址处理端口数据。而用C51语言 编写的51单片机应用程序,则不用具体组织、分配存储 器资源和处理端口数据。但在C51语言编程中,对数据 类型与变量的定义,必须要与单片机的存储结构相关联, 否则编译器不能正确地映射定位。

C51语言与标准C语言程序区别:(1)C51中定义的库函数和标准C语言定义的 库函数不同。后者是按通用微型计算机来定义的, 而C51中的库函数是按MCS-51单片机相应情况来 定义的; (2)数据类型有一定的区别。在C51中增加 了几种针对MCS-51单片机特有的数据类型;

(3)C51中变量的存储模式与MCS-51单片机 的存储器紧密相关;

(4)C51中的输入输出是通过MCS-51串行口 来完成的,输入输出指令执行前必须要对串行口 进行初始化;(5)C51中有专门的中断函数。

10.2 C51的数据类型与运算10.2.1 C51

的数据类型 分为基本数据类型和扩展(组合)数据类型。基本数据类 型除了标准C中的字符型(char)、整型(int)、长整型 (long)、单精浮点型(float)、双精浮点型(double)外,还 有特殊功能寄存器型(sfr和sfr16两种)和位类型(bit和sbit 两种)。扩展数据类型包括数组、指针型(*)以及结构 (struct)和联合(union)等。

表10-1 KEIL C51编译器支持的基本数据类型 基本数据类型 说明符 长度 取值范围

无符号字符型有符号字符型 无符号整型 有符号整型 无符号长整型

unsigned charsigned char unsigned int signed int unsigned long

1字节1字节 2字节 2字节 4字节

0~255-128~+127 0~65535 -32768~+32767 0~4294967295

有符号长整型单精度浮点型 位 型 位 型 特殊功能寄存器型 特殊功能寄存器型

signed longfloat bit sbit sfr sfr16

4字节4字节 1位 1位 1字节 2字节

-2147483648~+2147483647±1.175494E38~±3.402823E+38 0或 1 0或 1 0~255 0~65535

一.字符型charsigned char:用于定义带符号字节数据,其字节的 最高位为符号位,“0”表示正数,“1”表示负数,补码 表示,所能表示的数值范围是-128~+127; unsigned char:用于定义无符号字节数据或字符, 可以存放一个字节的无符号数,也可以存放西文字符, 取值范围为0~255。

二.int整型 分singed int和unsigned int。默认为signed int。 它们的长度均为两个字节,用于存放一个双字节数据。 对于signed int,用于存放两字节带符号数,补码表示, 数的范畴为-32768~+32767。对于unsigned int,用于 存放两字节无符号数,数的范围为0~65535。 三.long长整型 分singed long和unsigned long。默认为signed long。它们的长度均为四个字节,用于存放一个四字节 数据。对于signed long,用于存放四字节带符号数, 补码表示,数的范畴为-2147483648~+2147483647。 对于unsigned long,用于存放四字节无符号数,数的 范围为0~4294967295。

四.float浮点型 长度为四个字节,包含指数和尾数两部分。最高位 为符号位,“1”表示负数,“0”表示正数。单片机中 使用浮点应注意以下三点: ① 由于单片机中没有专门的浮点运算硬件,因此 在运算时会比较慢。 ② 由于51单片机本身是8位的,因此在计算中不 可能达到太高的精度。 ③ 与单精浮点相比,双精浮点型(double)具有更 高的计算精度,但计算时间会更长,速度更慢,C51不 支持双精浮点型。

五.特殊功能寄存器型 分sfr和sfr16两种类型。 sfr:字节型特殊功能寄存器类型,占一个内存单元。 利用它可以访问MCS-51内部的所有特殊功能寄存器;

sfr16:双字节型特殊功能寄存器类型,占用两个字 节单元。利用它可以访问MCS-51内部的所有两个字节 的特殊功能寄存器,如DPTR。头文件reg51.h:包含了

所有特殊功能寄存器和对其 相应位的定义,通过在程序开头用#include reg51.h语 句包含头文件可以很容易地进行新的扩展。

【例10-1】特殊功能寄存器型数据定义。sfr SCON=0X98; sbit SM0=0X9F; sbit SM1=0X9E; sbit SM2=0X9D; sbit REN=0x9C; sbit TB8=0X9B; sbit RB8=0X9A; //定义 SCON //定义 SCON 的各位

sbit TI=0X99;sbit RI=0X98;

六.位类型功能:用于访问MCS-51单片机中的可寻址的位单元。

bit型:定义的位变量在C51编译器编译时,在不同的 时候位地址是可以变化的。sbit型:定义的位变量必须与MCS-51单片机的一个 可以寻址位单元或可位寻址的字节单元中的某一位联系 在一起。在C51编译器编译时,其对应的位地址是不可 变化的。

隐式转换:出现在运算中数据类型不一致时,按下 列转换的优先级顺序: bit char int long float signed unsigned 例:当char型与int型进行运算时,先自动对char 型扩展为int型,然后与int型进行运算,运算结果为 int型。 强制类型转换符“()”:对数据类型进行人为 的强制转换。

10.2.2 关于指针型数据指针(*)是一种特殊的数据类型,指向变量的地 址,实质上指针就是存储单元的地址。 在C51中它的长度一般为1~3个字节。根据所指 的变量类型不同,可以是字符型指针(char *)、整型 指针(int *)、长整型指针(long *)、浮点型指针(float *)及结构指针(struct *)与联合指针(union *)。

1. 一般指针 一般指针的声明和使用均与标准C 相同,不过同时还能说明指针的存储类型,例如: long * state; //为一个指向long型整数的指针, 而state本身则依存储模式存放。 char * xdata ptr; //ptr为一个指向char数据的指 针,而ptr本身放于外部RAM区。 一般指针本身用3个字节存放,分别为存储器类 型、高位偏移量、低位偏移量。

2. 存储器指针

基于存储器的指针说明时即指

定了存储类型,例如:char data * str; //str指向data区中char型数据。 int xdata * pow; //pow指向外部RAM的int型 整数。 存放时,只需一个字节或2个字节就够了,因

为只需存放偏移量。

10.2.3 C51的运算符 运算符:完成某种特定运算的符号。C51常见 的运算符有算术运算符、赋值运算符、关系运算符、 逻辑运算符、按位运算符和联合(复合赋值)运算符。 除此之外,还有一些用于完成特殊任务的运算符, 如逗号运算符、条件运算符、指针与地址运算符。

本文来源:https://www.bwwdw.com/article/b7f4.html

Top