资源描述
单 片 机 接 口 技 术 (C51版 )第 一 章 C51基 本 语 法 内 容 概 述数 据 类 型 和 运 算 符 、 表 达 式 是 是C51语 言 程 序 设 计 的 最 基 础 知 识 ,C51语 言 把 数 据 分 成 了 多 种 数 据 类型 , 并 提 供 了 丰 富 的 运 算 对 数 据 进行 处 理 。 本 章 对 C51语 言 的 基 本 数据 类 型 、 常 量 变 量 、 运 算 符 及 表 达式 等 进 行 详 细 介 绍 。 教 学 目 标1 掌 握 数 据 类 型 的 概 念 , 了 解 C51语 言 能 够 处 理 的 数 据 类 型 。2 掌 握 常 量 的 概 念 , 掌 握 各 种 类 型 常 量 的 特 点 及 表 示 形 式 。3 掌 握 变 量 的 概 念 , 了 解 int、 float、 char型 变 量 的 特 点 , 掌握 这 三 种 类 型 变 量 的 定 义 、 赋 值 和 使 用 方 法 。 理 解 C51中变 量 的 存 储 和 编 译 模 式 的 关 系 , 掌 握 单 片 机 片 内 资 源 的 访问 方 法 。4 了 解 C51语 言 的 基 本 运 算 符 及 其 特 点 , 掌 握 运 算 符 的 优 先级 和 结 合 性 的 概 念 。5 了 解 算 术 运 算 表 达 式 、 关 系 表 达 式 及 逻 辑 表 达 式 的 特 点 ,熟 练 进 行 表 达 式 计 算 , 能 熟 练 进 行 实 际 问 题 的 表 达 式 描 述 。6 熟 悉 自 增 、 自 减 运 算 的 特 点 , 掌 握 赋 值 运 算 , 了 解 逗 号 运算 符 和 逗 号 表 达 式 。7 掌 握 数 据 类 型 转 换 的 概 念 , 能 进 行 基 本 的 数 据 类 型 转 换 。 1 1 C51基 本 数 据 类 型n 具 有 一 定 格 式 的 数 字 或 数 值 叫 做 数 据 , 数据 的 不 同 格 式 叫 作 数 据 类 型 。 任 何 程 序 设计 都 离 不 开 数 据 的 处 理 。 n C5l的 数 据 类 型 有 位 型 (bit)、 无 符 号 字 符(unsigned char)、 有 符 号 字 符 (signed char)、无 符 号 整 型 (unsigned int)、 有 符 号 整 型(signed int)、 无 符 号 长 型 (unsigned long)、有 符 号 长 型 (signed long)、 浮 点 (float)和 指针 类 型 等 。 其 中 short与 long属 整 型 数 据 、 float与 double型 属 浮 点 型 数 据 。 数 据 类 型 长 度 值 域 范 围bit 1 bit 0,1sbit 1 bit 0,1unsigned char 1 byte 0255signed char 1 byte -128127sfr 1 byte 0255unsigned int 2 byte 065536signed int 2 byte -3276832767sfr16 2 byte 065536* 13 byte 对 象 的 地 址unsigned long 4 byte 04294967295 signed long 4 byte -21474836482147483647float 4 byte +1.175494E-38+3.402823E+38 n 当 程 序 中 出 现 表 达 式 或 变 量 赋 值 运 算 时 ,若 运 算 对 象 的 数 据 类 型 不 一 致 , 数 据 类 型可 以 自 动 进 行 转 换 , 转 换 按 以 下 优 先 级 别自 动 进 行 :bit char int long floatunsigned signed 1 2 常 量 与 变 量1 2 1 常 量n 在 程 序 运 行 中 其 值 不 能 改 变 的 量 称 为 常 量 。 1 整 型 常 量 。 可 以 表 示 为 十 进 制 如 123,0, -8等 。 十 六 进 制则 以 0 x开 头 如 0 x34。 长 整 型 就 在 数 字 后 面 加 字 母 L, 如 10L, 0 xF340L等 。2 浮 点 型 常 量 。 分 为 十 进 制 和 指 数 表 示 形 式 。 十 进 制 由 数 字和 小 数 点 组 成 , 如 0.888,3345.345,0.0等 , 整 数 或 小 数 部分 为 0时 可 以 省 略 0但 必 须 有 小 数 点 。 指 数 表 示 形 式 为 : 数 字 .数 字 e 数 字 中 的 内 容 为 可 选 项 , 其 中 内 容 根 据 具 体 情 况 可 有 可 无 ,但 其 余 部 分 必 须 有 ,如 123e3,5e6,-1.0e-3。 而 e3,5e4.0则 是非 法 的 表 示 形 式 。3 字 符 型 常 量 是 单 引 号 内 的 字 符 , 如 a,d等 。4 字 符 串 型 常 量 由 双 引 号 内 的 字 符 组 成 , 如 hello,english等 。 当 引 号 内 的 没 有 字 符 时 , 为 空 字 符 串 。 n 用 标 识 符 代 表 的 常 量 称 为 符 号 常 量 。例 如 :在 指 令 “ #define PI 3.1415926”后 , 符号 常 量 PI即 代 表 圆 周 率 3.1415926。 1.2.2 变 量1.2.2.1变 量 类 型n 在 程 序 运 行 中 , 其 值 可 以 改 变 的 量 称 为 变量n 一 个 变 量 主 要 由 两 部 分 构 成 : 一 个 是 变 量名 , 一 个 是 变 量 值 。n 每 个 变 量 都 有 一 个 变 量 名 , 在 内 存 中 占 据一 定 的 存 储 单 元 (地 址 ), 并 在 该 内 存 单 元 中存 放 该 变 量 的 值 。 C51支 持 的 变 量 通 常 有 如 下 类 型 :1. 位 变 量 (bit)位 变 量 的 值 可 以 是 1(true)或 0(false)。 与805l硬 件 特 性 操 作 有 关 的 位 变 量 必 须 定 位 在 8051CPU片 内存 储 区 (RAM)的 可 位 寻 址 空 间 中 。2. 字 符 变 量 (char)字 符 变 量 的 长 度 为 l byte, 即 8位 。C51编 译 器 默 认 的 字 符 型 变 量 为 无 符 号 型 (unsigned char)。负 数 在 计 算 机 中 存 储 时 一 般 用 补 码 表 示 。3. 整 型 变 量 (int)整 型 变 量 的 长 度 为 16位 。 8051系 列CPU将 整 型 变 量 的 msb存 放 在 低 地 址 字 节 。 有 符 号 整 型 变量 (signed int)也 使 用 msb位 作 为 标 志 位 , 并 使 用 二 进 制 的补 码 表 示 数 值 。 长 整 型 变 量 (1ong int)长 整 型 变 量占 用 4个 字 节 (byte), 其 它 方 面 与 整 型 变 量 (int)相 似 。 4. 浮 点 型 变 量 (float)浮 点 型 变 量 占 4个 字 节 (byte), 许 多复 杂 的 数 学 表 达 式 都 采 用 浮 点 变 量 数 据 类 型 。 它 用 符 号 位表 示 数 的 符 号 , 用 阶 码 和 尾 数 表 示 数 的 大 小 。 用 它 们 进 行任 何 数 学 运 算 都 需 要 使 用 由 编 译 器 决 定 的 各 种 不 同 效 率 等级 的 库 函 数 。 ( 补 充 存 储 格 式 ) n 在 编 程 时 , 为 了 书 写 方 便 , 经 常 使 用 简 化的 缩 写 形 式 来 定 义 变 量 的 数 据 类 型 。 其 方法 是 在 源 程 序 开 头 使 用 #define语 句 。例 如 : #define uchar unsigned char #define uint unsigned int 1.2.2.2变 量 的 存 储n 变 量 的 存 储 器 类 型 是 指 该 变 量 在 8051单 片 机 硬 件系 统 中 所 使 用 的 存 储 区 域 , 并 在 编 译 时 准 确 的 定位 。n 8051系 列 单 片 机 将 程 序 存 储 器 (ROM)和 数 据 存储 器 (RAM)分 开 ,并 各 有 各 自 的 寻 址 机 构 和 寻 址 方式 。 8051系 列 单 片 机 在 物 理 上 有 四 个 存 储 空 间 : *片 内 程 序 存 储 器 空 间 ; *片 外 程 序 存 储 器 空 间 , *片 内 数 据 存 储 器 空 间 ; *片 外 数 据 存 储 器 空 间 KEIL uVision2所 能 支 持 的 存 储 器 类 型 : 存 储 器 类 型 说 明data 直 接 访 问 内 部 数 据 存 储 器 ( 128字 节 ),访 问 速 度 最 快bdata 可 位 寻 址 内 部 数 据 存 储 器 ( 16字 节 ) , 允 许 位 与 字 节 混 合 访 问idata 间 接 访 问 内 部 数 据 存 储 器 ( 256字 节 ) , 允 许 访 问 全 部 256B地 址pdata 分 页 访 问 外 部 数 据 存 储 器 ( 256字 节 ) , 用 MOVX Ri指 令 访 问xdata 外 部 数 据 存 储 器 (64KB), 用 MOVX DPTR指 令 访 问code 程 序 存 储 器 ( 64KB) ,用 MOVC A+DPTR指 令 访 问 n 注 意 的 是 在 AT89C51芯 片 中 RAM只 有 低128位 , 位 于 80H到 FFH的 高 128位 则 在52芯 片 中 才 有 用 , 并 和 特 殊 寄 存 器 地 址 重叠 。 n 定 义 变 量 时 如 果 省 略 存 储 器 类 型 , 系 统 则 会 按 编译 模 式 SMALL、 COMPACT或 LARGE所 规 定 的 默认 存 储 器 类 型 去 指 定 变 量 的 存 储 区 域 。 无 论 什 么存 储 模 式 都 可 以 声 明 变 量 在 任 何 的 8051存 储 区 范围 , 然 而 把 最 常 用 的 变 量 、 命 令 放 在 内 部 数 据 区可 以 显 著 的 提 高 系 统 性 能 。 C51支 持 的 主 要 编 译 模 式 存 储 模 式 说 明SMALL 函 数 参 数 及 局 部 变 量 放 在 片 内 RAM( 默 认 变 量 类 型 为 DATA,最 大 128字 节 ) 。 另 外 所 有 对 象 包 括 栈 都 优 先 放 置 于 片 内 RAM,当 片 内 RAM用 满 , 再 向 片 外 RAM放 置 。 COMPACT 参 数 及 局 部 变 量 放 在 片 外 RAM( 默 认 的 存 储 类 型 是 PDATA,最 大 256字 节 ) ; 通 过 R0、 R1间 接 寻 址 , 栈 位 于 8051片 内 RAM。LARGE 参 数 及 局 部 变 量 直 接 放 入 片 外 RAM(默 认 的 存 储 类 型 是 XDATA,最 大 64KB); 使 用 数 据 指 针 DPTR间 接 寻 址 。 因 此 访 问 效 率 较 低且 直 接 影 响 代 码 长 度 1.2. 3 8051片 内 资 源 及 位 变 量1.2.3.1 特 殊 功 能 寄 存 器 的 C51定 义n 8051单 片 机 的 内 部 高 128个 字 节 为 专 用 寄存 器 区 , 其 中 51子 系 列 有 21个 ( 52子 系 列有 26个 ) 特 殊 功 能 寄 存 器 ( SFR) , 它 们离 散 的 分 布 在 这 个 区 中 , 分 别 用 于 CPU并行 口 、 串 行 口 、 中 断 系 统 、 定 时 /计 数 器 等功 能 单 元 及 控 制 和 状 态 寄 存 器 。 n 对 SFR的 操 作 , 只 能 采 用 直 接 寻 址 方 式 。 为了 能 直 接 访 问 这 些 特 殊 功 能 寄 存 器 , Keil C51扩 充 了 两 个 关 键 字 “ sfr”、 “ sfr16”,可 以 直 接 对 51单 片 机 的 特 殊 寄 存 器 进 行 定义 , 这 种 定 义 方 法 与 标 准 C51语 言 不 兼 容 ,只 适 用 于 对 8051系 列 单 片 机 C51编 程 。 定 义 方 法 如 下 :sfr 特 殊 功 能 寄 存 器 名 = 特 殊 功 能 寄 存 器 地 址 常 数 ;sfr16 特 殊 功 能 寄 存 器 名 = 特 殊 功 能 寄 存 器 地 址 常 数 ;对 于 8051片 内 I/O口 , 定 义 方 法 如 下 :sfr P1 = 0 x90; /定 义 P1口 , 地 址 90Hsfr P2 = 0 xA0; /定 义 P1口 , 地 址 A0Hn sfr后 面 是 一 个 要 定 义 的 名 字 , 要 符 合 标 识 符 的 命 名 规 则 ,名 字 最 好 有 一 定 的 含 义 n 等 号 后 面 必 须 是 常 数 , 不 允 许 有 带 运 算 符 的 表 达 式 , 而且 该 常 数 必 须 在 特 殊 功 能 寄 存 器 的 地 址 范 围 之 内 ( 80H-FFH) 。 sfr是 定 义 8位 的 特 殊 功 能 寄 存 器 , sfr16用 来 定义 16位 特 殊 功 能 寄 存 器 , 如 8052的 T2定 时 器 , 可 以 定义 为 : n sfr16 T2 = 0 xCC; /这 里 定 义 8052定 时 器 2,地 址 为 T2L=CCH,T2H=CDHn 用 sfr16定 义 16位 特 殊 功 能 寄 存 器 时 , 等 号后 面 是 它 的 低 位 地 址 , 高 位 地 址 一 定 要 位 于物 理 低 位 地 址 之 上 。 注 意 的 是 , sfr16不 能用 于 定 时 器 0和 1的 定 义 。n 对 于 需 要 单 独 访 问 SFR中 的 位 , C51的 扩 充关 键 字 sbit可 以 访 问 位 寻 址 对 象 。 n sbit定 义 某 些 持 殊 位 , 并 接 受 任 何 符 号 名 ,“=”号后 将 绝 对 地 址 赋 给 变 量 名n 这 种 地 址 分 配 , 有 三 种 方 法 :1)sbit 位 变 量 名 位 地 址sbit P1_1 = Ox91;这 样 是 把 位 的 绝 对 地 址 赋 给 位 变 量 。同 sfr一 样 , sbit的 位 地 址 必 须 位 于 80HFFH之 间 。2)Sbit 位 变 量 名 特 殊 功 能 寄 存 器 名 位 位 置sfr P3 = 0 xB0;sbit P3_1 = P3 1; /先 定 义 一 个 特 殊 功 能 寄 存 器 名 , 再指 定 位 变 量 名 所 在 的 位 置 。当 可 寻 址 位 位 于 特 殊 功 能 寄 存 器 中 时 可 采 用 这 种 方 法 。3)sbit 位 变 量 名 字 节 地 址 位 位 置sbit P3_1 = 0 xB0 1; 1.2.3.2 位 寻 址 区 及 位 变 量 定 义C51提 供 一 个 bdata的 存 储 器 类 型 , 用 于 访 问 单 片机 的 可 位 寻 址 区 的 数 据 如 :unsigned char bdata age; /在 位 寻 址 区 定 义ucsigned char类 型 的 变 量 ageint bdata score2; /在 可 位 寻 址 区 定 义 数 组 score2sbit flag=age7 /用 关 键 字 sbit定 义 位 变 量 来 独 立 访问 可 寻 址 位 对 象 的 其 中 一 位C51提 供 关 键 字 “ bit”实 现 位 变 量 的 定 义 及 访 问 。bit flag; / 将 flag定 义 为 位 变 量bit valve_state; / 将 valve_state定 义 为 位 变 量 n 通 常 C51编 译 器 会 将 位 变 量 分 配 在 位 寻 址 区 的 某 一位 。 定 义 位 变 量 时 应 注 意 以 下 问 题1) 位 变 量 不 能 定 义 成 一 个 指 针 , 如 不 能 定 义 :bit * POINTER。2) 不 能 定 义 位 数 组 , 如 不 能 定 义 : bit array2。3) bit与 sbit的 不 同 。 bit不 能 指 定 位 变 量 的 绝对 地 址 , 当 需 要 指 定 位 变 量 的 绝 对 地 址 ( 范围 必 须 在 0 x80-0 xff) 时 , 需 要 使 用 sbit来 定义 。例 : sbit flag=P10; n 也 可 使 用 sbit访 问 可 位 寻 址 对 象 的 位 。bdata char jj ; * jj定 义 为 bdata整 型 变 量 *int bdata sum2; /*在 可 位 寻 址 区 定 义 数 组 sum2, 也 称 为 可 寻 址 位 对 象 */ sbit mybit7=jj7; *mybit7 定 义 为 jj的 第 7位 */ sbit score12=sum112; * score12定 义 为 sum1的 第 12位 */ n 可 位 寻 址 对 象 也 可 以 字 节 寻 址 。例 : jj=0; *jj赋 值 为 0* sbit定 义 要 求 基 址 对 象的 存 储 类 型 为 bdata, 否 则 只 有 绝 对 的 特 殊 位 定 义(sbit)是 合 法 的 。 位 置 (操 作 符 )后 的 最 大 值 依 赖于 指 定 的 访 问 对 象 型 , 对 于 char、 uchar而 言 是 0-7, 对 于 int、 uint而 言 是 015。n sbit定 义 要 求 基 址 对 象 的 存 储 类 型 为 bdata, 否则 只 有 绝 对 的 特 殊 位 定 义 (sbit)是 合 法 的 。 位 置(操 作 符 )后 的 最 大 值 依 赖 于 指 定 的 访 问 对 象 型 ,对 于 char、 uchar而 言 是 0-7, 对 于 int、 uint而言 是 015。 1.3 自 定 义 变 量 类 型 typedefn 通 常 定 义 变 量 的 数 据 类 型 时 都 是 使 用 标 准的 关 键 字 , 方 便 别 人 阅 读 程 序 。 但 使 用typedef可 以 有 方 便 程 序 的 移 植 和 简 化 较 长的 数 据 类 型 定 义 例 如 :程 序 设 计 者 对 变 量 的 定 义 习 惯 了 DELPHI的 关 键 字 , 如 整 型 数 据 习 惯 用 关 键 字integer来 定 义 , 在 用 C51时 还 想 用 integer的话 , 你 可 以 这 样 写 :typedef int integer;integer a,b; 1.4 运 算 符 与 表 达 式1.4.1赋 值 运 算n 利 用 赋 值 运 算 符 将 一 个 变 量 与 一 个 表 达 式 连 接 起 来 的 式 子为 赋 值 表 达 式 , 在 表 达 式 后 面 加 “ ; ” 便 构 成 了 赋 值 语 句 。n 使 用 =的 赋 值 语 句 格 式 如 下 : 变 量 = 表 达 式 ;例 如 :a = 0 x10; /将 常 数 十 六 进 制 数 10赋 于 变 量 ab = c = 2; /同 时 将 2赋 值 给 变 量 b,cd = e; /将 变 量 e的 值 赋 于 变 量 df = d-e; /将 变 量 d-e的 值 赋 于 变 量 f n 赋 值 语 句 的 意 义 就 是 先 计 算 出 =右 边 的 表 达 式 的 值 , 然后 将 得 到 的 值 赋 给 左 边 的 变 量 。 而 且 右 边 的 表 达 式 可 以 是一 个 赋 值 表 达 式 。 1.4.2算 术 运 算1.4.2.1 算 术 运 算 符 及 算 术 表 达 式n C51中 的 算 术 运 算 符 有 如 下 几 个 , 其 中 只 有 取 正值 和 取 负 值 运 算 符 是 单 目 运 算 符 , 其 它 则 都 是 双目 运 算 符 :1. 十 (加 法 运 算 符 , 或 正 值 符 号 ) 2. - (减 法 运 算 符 , 或 负 值 符 号 ) 3. * (乘 法 运 算 符 )4. / (除 法 运 算 将 ) 5. (模 (求 余 )运 算 符 。 例 如 5%3结 果 是 5除 以 3所得 的 余 数 2) n 用 算 术 运 算 符 和 括 号 将 运 算 对 象 连 接 起 来的 式 子 称 为 算 术 表 达 式 。 运 算 对 象 包 括 常量 、 变 量 、 函 数 、 数 组 、 结 构 体 等 等 。n 算 术 表 达 式 的 形 式 :表 达 式 1 算 术 运 算 符 表 达 式 2例 如 : a+b, (x+4)/(y-b), y-sin(x)/2 1.4.2.2 算 术 运 算 的 优 先 级 与 结 合 性n 算 术 运 算 符 的 优 先 级 规 定 为 : 先 乘 除 模 , 后 加 减 ,括 号 最 优 先 。 乘 、 除 、 模 运 算 符 的 优 先 级 相 同 ,并 高 于 加 减 运 算 符 。 括 号 中 的 内 容 优 先 级 最 高 。 a+b*c; / 乘 号 的 优 先 级 高 于 加 号 , 故 先 运 算 b*c, 所 得 的 结 果 再 与 a相 加 (a+b)*(c-d)-6; / 括 号 的 优 先 级 最 高 , *次 之 , 减 号 优 先 级 最 低 故 先 运算 (a+b)和 (c-d), / 然 后 将 二 者 的 结 果 相 乘 , 最 后 再 与 6相 减n 算 术 运 算 的 结 合 性 规 定 为 自 左 至 右 方 向 , 称 为“ 左 结 合 性 ” 。 即 当 一 个 运 算 对 象 两 边 的 算 术 运算 符 优 先 级 相 同 时 , 运 算 对 象 先 与 左 面 的 运 算 符结 合 。 n a+b-c; / b两 边 是 “ +”、 “ -”运 算 符 优 先 级 相 同 , 按 左 结 合 性 优 先 执 行 a+b再 减 C 1.4.2.3 数 据 类 型 转 换 运 算n 当 运 算 符 的 两 侧 的 数 据 类 型 不 同 时 必 须 通过 数 据 类 型 转 换 将 数 据 转 换 成 同 种 类 型 。 转 换 的 方 式 有 两 种 : 自 动 类 型 转 换 和 强 制类 型 转 换 。 自 动 类 型 转 换n 由 C51编 译 器 编 译 时 自 动 进 行 。如 图 1-4-1所 示 为 自 动 数 据 类 型 转 换 规 则 。 char int long float doubleunsigned signed低 高图 1-4-1 数 据 类 型 转 换 规 则 强 制 类 型 转 换n 需 要 使 用 强 制 类 型 转 换 运 算 符 , 其 格 式 为 :(类 型 名 ) (表 达 式 );例 如 :(double)xx / 将 xx强 制 转 换 成 double类 型 。(int)(a+b) / 将 a+b的 值 强 制 转 换 成 int类 型 。 n 使 用 强 制 转 换 类 型 运 算 符 后 , 运 算 结 果 被 强 制 转 换 成 规定 的 类 型 。例 如 :unsigned char x,y;unsigned char z;z (unsigned char)(x*y); 1.4.3关 系 运 算1.4.3.1关 系 运 算 符1. (小 于 ) 2. (大 于 ) 3. (小 于 或 等 于 ) 4. (大 于 或 等 于 ) 5. (等 于 ) 6. ! (不 等 于 ) n 关 系 运 算 符 同 样 有 着 优 先 级 别 。 前 四 个 具 有 相 同的 优 先 级 , 后 两 个 也 具 有 相 同 的 优 先 级 , 但 是 前四 个 的 优 先 级 要 高 于 后 两 个 。 n 关 系 运 算 符 的 结 合 性 为 左 结 合 。 1.4.3.2 关 系 表 达 式n 关 系 表 达 式 就 是 用 关 系 运 算 符 连 接 起 来 两个 表 达 式 。n 关 系 表 达 式 通 常 是 用 来 判 别 某 个 条 件 是 否满 足 。n 要 注 意 的 是 用 关 系 运 算 符 的 运 算 结 果 只 有 0和 1两 种 , 也 就 是 逻 辑 的 真 与 假 , 当 指 定 的条 件 满 足 时 结 果 为 1, 不 满 足 时 结 果 为 0。n 关 系 表 达 式 结 构 如 下 : 表 达 式 1 关 系 运 算 符 表 达 式 2 例 如 : 1. a b; /若 a大 于 b, 则 表 达 式 值 为 1( 真 )2. b+c a; /若 a=3,b=4,c=5, 则 表 达 式 值 为 0( 假 )3. (a b) c; /若 a=3,b=2,c=1, 则 表 达 式 值 为 1( 真 ) 。因 为 a b值 为 1, 等 于 c值4. c 5 a b; /若 a=3,b=2,c=1, 则 表 达 式 值 为 0( 假 ) 。 1.4.4逻 辑 运 算关 系 运 算 符 反 映 两 个 表 达 式 之 间 的 大 小 等 于 关 系 ,逻 辑 运 算 符 则 用 于 求 条 件 式 的 逻 辑 值 , 用 逻 辑 运算 符 将 关 系 表 达 式 或 逻 辑 量 连 接 起 来 就 是 逻 辑 表达 式 了 。n C51提 供 三 种 逻 辑 运 算 :1. 逻 辑 与 (&)2. 逻 辑 或 ( | | ) 3. 逻 辑 非 ( ! ) n 逻 辑 表 达 式 的 一 般 形 式 为 : 逻 辑 与 : 条 件 式 1 & 条 件 式 2 逻 辑 或 : 条 件 式 1 | | 条 件 式 2 逻 辑 非 : ! 条 件 式 n 逻 辑 表 达 式 的 结 合 性 为 自 左 向 右 。 逻 辑 表达 式 的 值 应 该 是 一 个 逻 辑 值 “ 真 ” 或“ 假 ” , 以 0代 表 假 , 以 1代 表 真 。n 逻 辑 表 达 式 : 用 逻 辑 运 算 符 将 关 系 表 达 式或 逻 辑 量 连 接 起 来 的 式 子 称 为 逻 辑 表 达 式 。n 逻 辑 表 达 式 的 运 算 结 果 不 是 0就 是 1, 不 可能 是 其 它 值 。 n C51逻 辑 运 算 符 与 算 术 运 算 符 、 关 系 运 算 符 、赋 值 运 算 符 之 间 优 先 级 的 次 序 如 图 1-3-2所示 。 ! ( 非 )算 术 运 算 符关 系 运 算 符& & 和 | |赋 值 运 算 符 高 低 优 先 级图 1-3-2 运 算 符 的 优 先 级 1.4.5 位 运 算C51语 言 直 接 面 对 8051单 片 机 , 对 于 8051单 片 机 强大 灵 活 的 位 处 理 能 力 也 提 供 了 位 操 作 指 令 。n C51中 共 有 6种 位 运 算 符 :1. & 按 位 与2. | 按 位 或3. 按 位 异 或4. 按 位 取 反 5. 位 右 移 n 位 运 算 符 的 作 用 是 按 位 对 变 量 进 行 运 算 ,但 是 并 不 改 变 参 与 运 算 的 变 量 的 值 。n 如 果 要 求 按 位 改 变 变 量 的 值 , 则 要 利 用 相应 的 赋 值 运 算 。n 应 当 注 意 的 是 位 运 算 符 不 能 对 浮 点 型 数 据进 行 操 作 。 n 按 位 与 、 或 、 异 或 的 真 值 表 如 表 1-4-1所 示 。表 1-4-1 与 、 或 、 异 或 位 操 作 真 值 表X Y X&Y X|Y XY0 0 0 0 00 1 0 1 11 0 0 1 11 1 1 1 0 n 位 运 算 一 般 的 表 达 形 式 如 下 : 变 量 1 位 运 算 符 变 量 2n 位 运 算 符 也 有 优 先 级 。 从 高 到 低 依 次 是 : |(按 位或 )(按 位 异 或 )&(按 位 与 )(右移 )= 右 移 位 赋 值 -= 减 法 赋 值 &= 逻 辑 与 赋 值 *= 乘 法 赋 值 |= 逻 辑 或 赋 值 /= 除 法 赋 值 = 逻 辑 异 或 赋 值 %= 取 模 赋 值 = 逻 辑 非 赋 值 b)? a : b 1.4.8逗 号 运 算 符可 以 用 它 将 两 个 或 多 个 表 达 式 连 接 起 来 , 形成 逗 号 表 达 式 。n 逗 号 表 达 式 的 一 般 形 式 为 : 表 达 式 1, 表 达 式 2, 表 达 式 3表 达 式 n n 这 样 用 逗 号 运 算 符 组 成 的 表 达 式 在 程 序 运 行 时 ,是 从 左 到 右 计 算 出 各 个 表 达 式 的 值 , 而 整 个 用 逗号 运 算 符 组 成 的 表 达 式 的 值 等 于 最 右 边 表 达 式 的值 , 就 是 “ 表 达 式 n”的 值 。n 在 实 际 的 应 用 中 , 大 部 分 情 况 下 , 使 用 逗 号 表 达式 的 目 的 只 是 为 了 分 别 得 到 名 个 表 达 式 的 值 , 而并 不 一 定 要 得 到 和 使 用 整 个 逗 号 表 达 式 的 值 。n 并 不 是 在 程 序 的 任 何 位 置 出 现 的 逗 号 , 都 可 以 认为 是 逗 号 运 算 符 。 如 函 数 中 的 参 数 , 参 数 之 间 的逗 号 只 是 用 来 间 隔 之 用 而 不 是 逗 号 运 算 符 。
展开阅读全文