C语言程序设计及仿真调试.ppt_第1页
C语言程序设计及仿真调试.ppt_第2页
C语言程序设计及仿真调试.ppt_第3页
C语言程序设计及仿真调试.ppt_第4页
C语言程序设计及仿真调试.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

第4章C语言程序设计及仿真调试 4 1C语言程序设计基础 自行复习 4 2KeilC 4 3C语言程序设计及调试实例 例4 1 编程实现通过延时函数 由P1 0输出方波信号 解 C语言程序如下 include reg51 h 8051寄存器定义头文件sbitP10 P1 0 定义P1 0引脚voiddelay longcnt 延时函数 while cnt 0 cnt voidmain void P10 1 while 1 主程序循环 delay 1000 P10 P10 由P1 2口输出信号 如何修改程序 例4 2 单片机P1口的P1 0和P1 1各接一个开关K1 K2 P1 4 P1 5 P1 6和P1 7各接一只发光二极管 有K1和K2的不同状态来确定哪个发光二极管被点亮 include reg51 h voidmain chara a P1 a a 0 x03 屏蔽高6位if a 0 P1 0 x83 elseif a 1 P1 0 x43 elseif a 2 P1 0 x23 elseP1 0 x13 将例2用while循环实现 include reg51 h voidmain chara while 1 a P1 a a 0 x03 屏蔽高6位switch a case0 P1 0 x83 break case1 P1 0 x43 break case2 P1 0 x23 break case3 P1 0 x13 4 2KeilC 一 C51数据类型与运算 1 C51数据类型bit位变量bit位变量是可定义一个位标量 但不能定义位指针 也不能定义位数组 它的值是一个二进制位 不是0就是1 bitlock 将lock定义为位变量bitdirection 将direction定义为位变量 sbit可独立寻址的位变量利用它能访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位 sbitCY 0 xD7 定义进位标志CY的地址为D7HsbitAC 0 xD0 6 定义辅助进位标志AC的地址为D6HsbitRS0 0 xD0 3 定义RS0的地址为D3H sfr8位特殊功能寄存器sfr占用一个内存单元 值域为0 255 利用它能访问51单片机内部的所有特殊功能寄存器 例如 sfrPSW 0 xD0 定义程序状态字PSW的地址为D0HsfrTMOD 0 x89 定义定时器 计数器方式控制寄存器TMOD的地址为89HsfrP1 0 x90 定义P1口的地址为90H sfr1616位特殊功能寄存器sfr16占用两个内存单元 值域为0 65535 sfr16和sfr一样用于操作特殊功能寄存器 不同的是它用于操作占两个字节的寄存器 如定时器T2 sfr16T2 0 xCC 定义8052定时器2 低8位地址为 T2L CCH 高8位T2H CDH 2 C51数据存储类型 C51运算符 表达式及其规则 位运算的操作对象只能是整型和字符型数据 不能是实型数据 C51提供以下六种位运算 按位与 相当于ANL指令 按位或 相当于ORL指令 按位异或 相当于XRL指令 按位取反 相当于CPL指令 右移 相当于RR指令 位运算符及其表达式 二 C51流程控制语句 1 选择语句if语句switch case语句2 循环语句while语句do while语句for语句 数组 数组是相关数据的一个有序集合 数组中的每个元素都是同一类型的数据 一维数组由具有一个下标的数组元素组成的数组称为一维数组 例如 inta 5 1 2 3 4 5 给全部元素赋值 a 0 1 a 1 2 a 2 3 a 3 4 a 4 5 例15 二维数组由具有两个下标的数组元素组成的数组称为二维数组 inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 全部初始化 指针 关于指针的基本概念请参阅有关资料 当定义一个指针变量时 若未指定它所指向的对象的存储类型 则该指针变量被认为是一般指针 反之若指定了它所指对象的存储类型 则该指针被认为是基于存储器的指针 基于存储器的指针基于存储器的指针是在说明一个指针时 指定它所指向的对象的存储类型 例如 charxdata px px为指向一个定义在xdata存储器中的字符变量的指针变量 px本身在默认的存储器区域 由编译模式决定 其长度为2字节 例16 一般指针在函数的调用中 函数的指针参数需要用一般指针 一般指针的说明形式如下 char pz C51函数 函数的嵌套函数的定义与分类函数的调用调用与递归调用C51的库函数 C51的库函数 C51编译器提供了丰富的库函数 使用这些库函数大大提高了编程效率 用户可以根据需要随时调用 每个库函数都在相应的头文件中给出了函数的原型 使用时只需在源程序的开头用编译预处理命令 include将相关的头文件包含进来即可 数学函数库math h标准函数库stdlib h绝对地址访问头文件absacc h内部函数库intrins h访问SFR和SFR bit地址头文件reg h 预处理 P126 包含命令 include 宏定义命令 define等 在源程序中这些命令都放在函数之外 而且一般都放在源文件的前面 它们称为预处理部分 语言提供了多种预处理功能 如宏定义 文件包含 条件编译等 合理地使用预处理功能编写的程序便于阅读 修改 移植和调试 也有利于模块化程序设计 下面介绍常用的几种预处理功能 1 宏定义无参宏定义 无参宏的宏名后不带参数 其定义的一般形式为 define标识符字符串其中的 表示这是一条预处理命令 凡是以 开头的均为预处理命令 define 为宏定义命令 标识符 为所定义的宏名 字符串 可以是常数 表达式 格式串等 符号常量的定义就是一种无参宏定义 常对程序中反复使用的表达式进行宏定义 例如 defineM y y 3 y 定义M表达式 y y 3 y 在编写源程序时 所有的 y y 3 y 都可由M代替 2 文件包含文件包含是C预处理程序的另一个重要功能 文件包含命令行的一般形式为 include 文件名 例如 include stdio h include math h 文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行 从而把指定的文件和当前的源程序文件连成一个源文件 在程序设计中 文件包含是很有用的 一个大的程序可以分为多个模块 由多个程序员分别编程 有些公用的符号常量或宏定义等可单独组成一个文件 在其它文件的开头用包含命令包含该文件即可使用 这样 可避免在每个文件开头都去书写那些公用量 从而节省时间 并减少出错 对文件包含命令还要说明以下几点 1 包含命令中的文件名可以用双引号括起来 也可以用尖括号括起来 例如以下写法都是允许的 include stdio h include区别 使用尖括号表示在包含文件目录中去查找 包含目录是由用户在设置环境时设置的 而不在源文件目录去查找 使用双引号则表示首先在当前的源文件目录中查找 若未找到才到包含目录中去查找 2 一个include命令只能指定一个被包含文件 若有多个文件要包含 则需用多个include命令 3 文件包含允许嵌套 即在一个被包含的文件中又可以包含另一个文件 3 条件编译 自行学习 可以按不同的条件去编译不同的程序部分 因而产生不同的目标代码文件 这对于程序的移植和调试是很有用的 1 第一种形式 ifdef标识符程序段1 else程序段2 endif它的功能是 如果标识符已被 define命令定义过 则对程序段1进行编译 否则对程序段2进行编译 如果没有程序段2 它为空 本格式中的 else可以没有 2 第二种形式 ifndef标识符程序段1 else程序段2 endif功能 如果标识符未被 define命令定义过则对程序段1进行编译 否则对程序段2进行编译 这与第一种形式的功能正相反 3

温馨提示

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

评论

0/150

提交评论