032位字段结构09_第1页
032位字段结构09_第2页
032位字段结构09_第3页
032位字段结构09_第4页
032位字段结构09_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

位字段结构的概念 结构是一种复合数据类型 它可以由不同数据类型的数据组成 组成结构的每个数据项称为结构的成员 可编程接口器件有一个命令字寄存器或控制字寄存器 通过编程 确定芯片的工作方式 命令字中的一位或几位组合起来 成为一个位字段 决定一项功能 位字段结构是一种特殊形式的结构 它的成员项是二进制位字段 位字段结构中每个成员项的一般形式为 数据类型成员名 位数 其中数据类型一般采用unsigned型或int型 结构的定义 结构用关键字struct定义 结构定义的一般形式如下 struct结构名 数据类型成员名1 数据类型成员名2 数据类型成员名n 例如定义一个有关学生的学号 姓名 地址 年龄 性别 成绩的结构类型 structstudent intnum charname 8 charaddr 20 charsex intage floatscore 结构变量的说明 如果结构已经定义 则说明结构变量的一般形式为 struct结构名结构变量名表 例如结构structstudent已经定义 使用这个结构数据类型的结构变量zhang3 li4 wang5可以这样说明 structstudentzhang3 li4 wang5 定义结构时说明变量 结构变量说明的另一种形式是定义结构数据类型的同时说明结构变量 这时可以省略结构名 例如 struct charx inty floatz m n k m n k是使用该结构数据类型的结构变量 结构变量成员项的访问 C语言用句点操作符 访问结构变量成员项 一般形式如下 结构变量名 成员名 例如m x A m y 1999 m z 3 14 结构指针 指向结构变量的指针称为结构指针 结构指针是一个指针变量 它存放着结构变量的存储首地址 结构指针指向的结构变量称为它的目标结构量 结构指针在程序中说明的一般形式为struct结构名 结构指针名 其中 结构名必须是已经定义过的结构 结构指针变量 结构指针的说明规定了它的数据特性 但指针的内容还没有确定 即它的目标指向是不定的 因此指针在使用之前要通过初始化或赋值运算把实际存在的某个结构变量的存储地址值赋给它 例如structdat charc inti flontf structdatx p p 以上程序定义了一个结构数据类型structdat 说明了一个结构变量x和一个结构指针p 并把结构变量x的地址赋给结构指针p 访问结构指针的目标结构变量 访问结构指针的目标结构变量中成员项的一般形式为结构指针名 成员名 或 结构指针名 成员名 例如P i 148 P c A P f 2 73 位字段举例 以8254的命令字寄存器为例 BCD M0 M1 M2 RL0 RL1 SC0 SC1 D0 D1 D2 D3 D4 D5 D6 D7 有四个位字段 分别决定四项功能 若改变一项功能 只需对一个位字段进行操作 可采用位运算或位字段结构的方式进行 位字段结构数据类型的定义 8254的命令字可定义为一个位字段结构 structbit unsignedbcd 1 unsignedm 3 unsignedre 2 unsignedsc 2 在TruboC中 位字段结构中位字段的顺序是从低位到高位 位字段结构变量在存储时使用的内存空间大小是以int型数据长度为单位的 即使位字段结构变量中各成员项的位数总和小于int型的字长 它也占用一个int型位长的内存空间 位字段结构变量的说明 位字段结构的数据类型定义之后 就可以对位字段结构变量进行说明 如structbitcmd 即位字段结构变量cmd使用struitbit数据类型 位字段结构变量cmd的各成员项为 cmd bcdcmd mcmd recmd se 也可以在定义位字段结构的数据类型的同时 说明位字段结构变量 例18254初始化 include includestructbit unsignedbcd 1 unsignedm 3 unsignedrl 2 unsignedsc 2 cmd main unsignedchar p cmd bcd 0 cmd m 3 cmd rl 3 cmd sc 0 p unsignedchar 强制类型转换的说明 例18254芯片0号定时器初始化 include includestructbit unsignedbcd 1 unsignedm 3 unsignedrl 2 unsignedsc 2 cmd main unsignedchar p cmd bcd 0 cmd m 3 cmd rl 3 cmd sc 0 p unsignedchar 这个程序用位字段结构变量cmd表示8254的命令字 按位字段向cmd的各成员项赋值 然后将cmd的地址赋给一个unsignedchar型指针p 即p unsignedchar 由于p是指向unsignedchar型数据的指针 而 cmd是位字段结构变量的首地址 两边数据类型不一至 所以使用了强制类型转换的方法 经赋值后 p指向了位字段结构变量cmd 并把cmd整体作为unsignedchar型数据 从而可以使用outportb 函数将cmd的8bit数据从端口输出 PC机的扬声器驱动系统 8255并行接口B口 端口地址0 x61 与门 8254的2号定时器 76543210 1 193MHz输入脉冲 1 1 1 8255并行接口B口的第0位为1时 定时器开始工作 产生音频信号 8255并行接口B口的第D1位为1时 与门打开 音频信号送到扬声器 OUT2 GATE2 CLK2 例2喇叭发声程序 include includemain structbit unsignedbell 2 unsignedeqpm 6 p 8255的B口D1 1 D0 1 则喇叭发声 unsignedcharc outportb 0 x43 0 xb6 outportb 0 x42 0 xff outportb 0 x42 0 x5 c inportb 0 x61 printf c x n c p structbit 位字段结构与联合的嵌套 联合是一种复合数据类型 结构与联合可以相互嵌套 即结构可以是联合的成员项 联合也可以时结构的成员项 若位字段结构作为联合的成员项 则称为位字段结构与联合的嵌套 结构与联合的嵌套或位字段结构与联合的嵌套可以用于处理接口的数据 联合数据类型的定义 联合也叫共用体 它也是一种复合数据类型 由不同数据类型的成员组成 各成员项的首地址相同 联合所占内存空间的大小为最大成员项的长度 联合用关键字union定义 联合定义的一般形式如下 union联合名 数据类型成员名1 数据类型成员名2 数据类型成员名n 例如 unionval intx chary floatz 这个联合的长度是最大成员项float型数据的长度 即占4个字节 联合变量的说明 如果联合数据类型已经定义 则联合变量说明的一般形式为 union联合名联合变量名表 例如unionvala b 则a b是使用val数据类型的联合变量 联合变量的说明也可以在定义联合数据类型的同时进行 例如 union联合名 成员表 联合变量表 例如 unionci charc intx a1 a2 联合变量的使用 联合变量的使用只能通过引用其成员项实现 使用运算符 例如a1 x 1274 a2 c A 联合变量在某一时刻只能存放一个成员 不能同时存放所有成员 起作用的成员是最后一次存放的成员 例如有两行连续的程序a1 x 28 a1 c B 这时只有a1 c是有效的 a1 x已无意义 结构与联合嵌套的应用 8254定时器的计数初值是16位的 要分两次先写低8位 再写高8位 若想使8254的0号定时器10ms中断一次 则计数初值应为 10ms 838ns 11933计数初值是16位的 要分两次先低8位后高8位写入 这就需要计算低8位和高8位的值 即低8位的值为157 0 x9d 高8位的值为46 0 x2e 使用结构与联合嵌套可以方便地处理这类问题 例38254初始化 include includeunion struc charl8 charh8 w inti b voidmain void b i 11933 outportb 0 x43 0 x36 outportb 0 x40 b w l8 outportb 0 x40 b w h8 12位A D数据的输入与合成 12位的A D D A接口往往要分两次输入或输出 A D低8位和高4位输入后还要合成12位数据 使用位字段结构与联合嵌套也可以方便地处理这类问题 例412位A D数据合成 voidmain void union struct unsignedcharlow8 unsignedcharhigh8 adlh struct unsignedlow

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论