C语言程序设计及仿真调试.ppt

上传人:max****ui 文档编号:8614610 上传时间:2020-03-30 格式:PPT 页数:27 大小:356.31KB
返回 下载 相关 举报
C语言程序设计及仿真调试.ppt_第1页
第1页 / 共27页
C语言程序设计及仿真调试.ppt_第2页
第2页 / 共27页
C语言程序设计及仿真调试.ppt_第3页
第3页 / 共27页
点击查看更多>>
资源描述
第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 第三种形式 if常量表达式程序段1 else程序段2 endif它的功能是 如常量表达式的值为真 非0 则对程序段1进行编译 否则对程序段2进行编译 4 4思考题作业 1 用C语言编写程序 设单片机的系统时钟f 12MHz 要求在P1 0脚上输出周期为2ms的方波 2 P23 P26口做输出口 接发光二极管 编写并调试程序 使其每2个轮流亮灭
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!