




已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C51语言 单片机的C51语言 51汇编语言能直接操作单片机的系统硬件 指令执行速度快 但其程序可读性差 且编写 移植困难 单片机的C51语言 C51是为51系列单片机设计的一种C语言 其特点 C51语言已成为51系列单片机程序开发的主流软件方法 结构化语言 代码紧凑 效率可与汇编语言媲美接近真实语言 程序可读性强 易于调试 维护库函数丰富 编程工作量小 产品开发周期短机器级控制能力 功能很强 适合于嵌入式系统开发与汇编指令无关 易于掌握 在单片机基础上上手快 单片机的C51语言 C51与标准C语言对比相同之处 语法规则 程序结构 编程方法差异之处 数据结构 数据类型 存储模式 中断处理 端口扩展本章教学思路 在标准C的基础上学习数据结构 数据类型 存储模式 掌握C51软件开发方法 Keil Vision3软件 在C51的基础上学习单片机I O口应用 入门与进阶 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程 程序由函数组成 一个主函数 或一个主函数和若干自定义函数 利用预处理命令对变量或函数进行集中定义或说明 函数和变量都需遵循先定义后使用的基本原则 主函数中的所有语句执行完毕 则程序结束 单片机的C51语言 C51与标准C程序结构完全相同 单片机的C51语言 举例 LED闪烁控制功能 LOOP CLRP1 0ACALLDEL50SETBP1 0SJMPLOOPDEL50 MOVR7 200DEL1 MOVR6 125DEL2 DJNZR6 DEL2DJNZR7 DEL1RETEND 单片机的C51语言 预处理命令 函数说明 全局变量定义 主函数 自定义函数 局部变量定义 程序体 程序体 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程 单片机的C51语言 1 C51的变量 在程序执行过程中 数值可以发生改变的量称为变量 变量名与存储单元地址相对应 变量值与存储单元的内容相对应 例如 在哈佛结构的存储空间中如何建立变量概念 单片机的C51语言 存储种类 数据类型 存储类型 变量名 标准C 标准C 括号项 可以缺省 但需有缺省值 C51变量定义的四要素 C51特有 标准C C51 单片机的C51语言 存储种类 数据类型 存储类型 变量名 共有4个说明符 1 auto 自动型 变量的作用范围在定义它的函数体或语句块内 执行结束后 变量所占内存即被释放 2 extern 外部型 在一个源文件中被定义为外部型的变量 在其它源文件中需要通过extern说明方可使用 3 static 静态型 利用static可使变量定义所在的函数或语句块执行结束后 其分配的内存单元继续保留 4 register 寄存器型 将变量对应的储存单元指定为通用寄存器 以提高程序运行速度 缺省存储种类为auto 自动 型变量 单片机的C51语言 数据的不同格式叫做数据类型 有符号数类型可以忽略signed标识符 标准C语言的数据类型 存储种类 数据类型 存储类型 变量名 单片机的C51语言 C51扩充数据类型 bit sfr或sfr16 sbit bit型 关键词bit用于定义一个位变量 语法规则 bitbit name 0或1 例如 bitdoor 0 定义一个叫door的位变量且初值为0 与标准C的变量定义相似 inta 5 定义一个初值为5的整形变量a 语法规则 intint name 常数 单片机的C51语言 sfr或sfr16型 关键词sfr或sfr16用于定义SFR字节地址变量 语法规则 sfr或sfr16sfr name 字节地址常数 51MCU中有21个SFR 如何定义与这些单元相关的变量 单片机的C51语言 例如 sfrP0 0 x80 定义P0口地址80HsfrPCON 0 x87 定义PCON地址87Hsfr16DPTR 0 x82 定义DPTR的低端地址82H 注意 C语言中十六进制整数是数值前加0 x或0X前缀 单片机的C51语言 sbit型 部分SFR具有位地址 如何定义与这些位地址相关的变量 绝对位地址 相对位地址 字节地址 两种位地址表达形式 相对位地址 绝对位地址 单片机的C51语言 1 将SFR的绝对位地址定义为位变量名sbitbit name 位地址常数 例如 sbitCY 0 xD7 3 将SFR的相对位位置定义位变量名sbitbit name sfr name 位位置 例如 sbitCY PSW 7 2 将SFR的相对位地址定义为位变量名sbitbit name sfr字节地址 位位置 例如 sbitCY 0 xD0 7 关键词sbit用于定义SFR位地址变量 三种定义形式 C51编译器在头文件 REG51 H 中定义了全部sfr sfr16和sbit变量 单片机的C51语言 用一条预处理命令 include把这个头文件包含到C51程序中 无需重新定义即可直接使用它们的名称 单片机的C51语言 应用举例 单片机的C51语言 存储种类 数据类型 存储类型 变量名 51单片机的3个逻辑存储空间 片内数据存储器 片外数据存储器和程序存储器 建立C51存储类型与存储空间的对应关系 单片机的C51语言 C51的存储类型与存储空间对应关系表 编译模式 存储种类 数据类型 存储类型 变量名 3种编译模式分别对应于3种缺省存储类型 单片机的C51语言 存储种类 数据类型 存储类型 变量名 C51编译器可根据当前采取的编译模式自动认定默认的存储类型约定 若无特殊声明 一般均为 SMALL编译模式 变量名可以由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 变量名长度随编译系统而定 变量名具有字母大小写的敏感性 如SUM和sum代表不同的变量 强调 头文件中定义的变量都是大写的 若程序采取小写变量则需要重新定义 单片机的C51语言 存储种类 数据类型 存储类型 变量名 单片机的C51语言 C51扩展的若干关键字一览表 变量名不得使用标准C语言和C51语言的关键字 unsignedchardatasystem status 0 单片机的C51语言 定义system status为无符号字符型自动变量 该变量位于data区中且初值为0 数据结构定义举例 变量名为system status 位与片内RAM区 无符号字符型 自动型 初值为零 单片机的C51语言 unsignedcharbdatastatus byte unsignedintcodeunit id 2 0 x1234 0 x89ab staticcharm n 定义status byte为无符号字符型自动变量 该变量位于bdata区 定义unit id 2 为无符号整型自动变量 该变量位于code区中 是长度为2的数组 且初值为0 x1234和0 x89ab 定义m和n为2个位于data区中的有符号字符型静态变量 2 C51的指针 单片机的C51语言 标准C语言指针的一般定义形式为 数据类型 指针变量名 这表示p1是一个指向int型变量的指针变量 此时p1的值为int型变量a的地址 而a和p1两个变量都位于C编译器默认的内存区域中 单片机的C51语言 对于C51来讲 指针定义应包括以下信息 1 指针变量的存储类型 自身位于哪个存储区中 2 被指向变量的数据类型和存储类型 C51指针的一般定义形式 数据类型 存储类型1 存储类型2 变量名 被指向变量名 数据类型 被指向变量的类型 如int型或char型存储类型1 被指向变量所在的存储区 缺省时由地址赋值关系决定存储类型2 指针变量所在的存储区 缺省时为编译器默认的存储区 单片机的C51语言 例1若采用SMALL编译模式 试解释下述定义的含义 charxdataa A char ptr 解 ptr是一个指向char型变量的指针 它本身位于SMALL编译模式默认的data存储区里 此时它指向位于xdata存储区里的char型变量a的地址 单片机的C51语言 例2试解释下述定义的含义charxdataa A char ptr 解 以char ptr形式定义的指针变量 既可指向位于xdata存储区的char型变量a的地址 也可指向位于idata存储区的char型变量b的地址 由赋值操作关系决定 前两句与例1相同charxdataa A char ptr 单片机的C51语言 例3 试解释以下指针定义的含义charxdataa A charxdata ptr 解 ptr是位于data存储区且固定指向xdata存储区的char型变量的指针变量 此时ptr的值为变量a的地址 不能像例2那样再将idata存储区的char型变量b的地址赋予ptr 单片机的C51语言 例4 试解释以下指针定义的含义charxdataa A charxdata idataptr 解 ptr是固定指向xdata存储区的char型变量的指针变量 它自身存放在idata存储区中 此时ptr指向位于xdata存储区中的char型变量a的地址 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程 单片机的C51语言 C51语言编程可胜任单片机的基本测量与控制任务 对于某些特殊的I O接口处理 中断处理 强调程序执行速度等场合 仍希望采用汇编程序 C51编译器提供了与汇编语言程序的接口规则 可方便地实现C51与汇0编语言程序的相互调用 本节仅讨论在C51中调用汇编函数和在C51中嵌入汇编代码两种方法 概要 单片机的C51语言 1 在C51中调用汇编程序 1 程序的寻址 main c中调用的max函数 如何与汇编文件中的相应代码对应起来 2 参数传递 main c中传递给max 函数的参数a和b 存放在何处可使汇编程序能够获取到它们的值 3 返回值传递 汇编语言计算得到的结果 存放在何处可使C语言程序能够获取到 C51程序中调用汇编语言 需要解决三个问题 单片机的C51语言 举例 在两个数据中选出较大的数据 并赋值给变量c 其中 要求选数任务采用汇编子程序完成 1 程序的寻址问题 单片机的C51语言 通过在汇编文件中定义同名的 函数 来实现 单片机的C51语言 2 参数传递问题 单片机的C51语言 3 返回值传递问题 2 C51中嵌入汇编代码 在C51函数内嵌入汇编代码 可以有三种不同方法 方法一直接在函数体内的每个汇编语句前加 asm 预编译指令 例如 单片机的C51语言 单片机的C51语言 方法二把asm作为关键字 后续汇编用大括号括起来即可 例如 单片机的C51语言 方法三在C模块内通过语句 pragma 嵌入汇编代码 例如 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程 单片机的C51语言 1 Keil的编译环境 Vision3 Keil是德国KeilSoftware公司的51单片机开发软件包 包括C编译器 汇编编译器 连接器 库管理及仿真调试器 通过一个windows下的集成开发环境 uVisoin3 组合起来 单片机的C51语言 Vision3的软件界面包括4大组成部分 即菜单工具栏 工程管理窗口 文件窗口和输出窗口 单片机的C51语言 Vision3中共有11个下拉菜单 工具栏的位置和数量可以通过设置选定和移动 单片机的C51语言 工程管理窗口用于管理工程文件目录 它由5个子窗口组成 文件窗口 寄存器窗口 帮助窗口 函数窗口 模版窗口 工程管理窗口 单片机的C51语言 输出窗口 输出窗口用于编译过程中的信息交互作用 由3个子窗口组成 编译窗口 命令窗口 搜寻窗口 单片机的C51语言 信息窗口 观察窗口 Watch CallStackWindows 输出窗口 OutputWindows 存储器窗口 MemoryWindow 反汇编窗口 DissamblyWindow 串行窗口 SerialWindow 单片机的C51语言 建立工程 输入源程序 工程设置 程序编译 运行调试 2 Vision3的基本使用方法 举例 LED闪烁控制功能 单片机的C51语言 1 建立工程 点击 Project NewProject 菜单 在编缉框中输入一个名字 设为exam1 无需扩展名 单片机的C51语言 选择目标CPU Intel系列的80C51BH 单片机的C51语言 2 输入源程序点击新建文件按钮打开一个新的文本编缉窗口 单片机的C51语言 输入程序源代码 以 c保存该文件 单片机的C51语言 3 添加源程序 右击 SourceGroup1 点击 AddGroup SourceGroup1 添加生成的 c文件 单片机的C51语言 4 工程设置 右击Project窗口的Target1 选择 Project Optionfortarget target1 工程设置对话框 单片机的C51语言 设置对话框中的OutPut页面 勾选 CreatHexfile 单片机的C51语言 设置对话框中的Debug页面 选中Use和下拉框 PROTEUSVSMMONITOR 单片机的C51语言 5 编译源程序 形成hex文件 点击F7或工具按钮启动编译 连接功能 完成后将在命令窗口中显示编译结果 单片机的C51语言 若有语法错误 双击出错提示可指出错误所在行号 单片机的C51语言 1 将Keil编译形成的 hex文件加载到 DSN文件中 通过proteus控制仿真运行 无法在运行过程中进行调试 程序运行的两种方法 单片机的C51语言 2 在Keil软件里控制Proteus仿真运行 可以在运行过程中进行调试 步骤 下载 运行 停止 单片机的C51语言 6 一般调试过程 启动调试过程 Ctrl F5 Debug Start StopDebugSession 开始调试 详见下页 结束调试 Debug StopRunning 单片机的C51语言 调试工具栏 复位 运行到光标行 执行完当前子程序 过程单步 单步 停止 运行 调试菜单栏 快捷键 指向下条运行行 单片机的C51语言 基本调试手段 1 运行到光标行 从当前行运行到光标所在行 Ctrl F10 2 严格单步运行 遇到函数时亦单步进行 F11 3 跨函数单步运行 遇到函数时将其视作一行语句 F10 4 断点运行 全速运行到断点行停止 双击设置 解除断点 5 监视输出端口 打开I O窗口 Peripherals I O Ports 6 监视运行变量 打开Watch 1窗口 点击 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程1 5 1I O端口的简单应用1 5 2I O端口的进阶实践 单片机的C51语言 输出单元 发光二极管 LightEmittingDiode 基本输出元件 低电平驱动 限流电阻R 100 1k 高电平驱动 灌电流 拉电流 1 5 1 1基本输入输出单元与编程 输入单元 按钮 Button 或开关 Switch 基本输入元件 单片机的C51语言 P0口为漏极开路结构 需要外接上拉电阻当按键未按下压时 Px n端口为高电平 按压按键后为低电平 实例1独立按键识别 要求 采用独立按键方式实现下述功能 开机时LED全熄 然后根据按键动作使相应灯亮 并将亮灯状态保持到按压其它键时为止 单片机的C51语言 独立按键 每个按键都彼此独立地各占有一位I O口线 特点是电路简单 但占用I O口线较多 单片机的C51语言 按键的闭合电平为0 但LED的驱动电平为1 故不能直接将P0口的状态送到P1口 而应使其先取反再送出 为使按键抬起后LED能保持先前的点亮状态 需要在按键未压下期间禁止向P2输出P0状态值 分析 参考程序如下 单片机的C51语言 取反 操作的优先级高于 与 操作 voidmain charkey 0 定义按键变量P2 0 初始状态为灯全灭while 1 key P0 有按键动作时 P0状态值送P2 单片机的C51语言 编程界面和运行界面分别如下图 单片机的C51语言 实例1运行效果 实例2键控流水灯 单片机的C51语言 要求 K1为 启动键 首次按压K1可产生 自下向上 的流水灯运动 K2为 停止键 按压K2可终止流水灯的运动 K3和K4为 方向键 分别产生 自上向下 和 自下向上 运动 K1K2K3K4 单片机的C51语言 思路分析 根据键值修改标志位 根据标志位控制灯状态 总体关系流程图 单片机的C51语言 键值 按压K1 xxxx1110B按压K2 xxxx1101B按压K3 xxxx1011B按压K4 xxxx0111B无按键 xxxx1111B 按键动作判断 P0 0 x0f 是否等于0 x0f 若是 说明无按键动作 反之则有按键动作 0 x0e 0 x0d 0 x0b 0 x07 0 x0f 获取按键状态 单片机的C51语言 修改方向和启停标志值 单片机的C51语言 亮灯P2输出码 xxxx0001xxxx0010 xxxx0100 xxxx1000 D1 D4循环方向控制 charled 0 x01 0 x02 0 x04 0 x08 for i 0 i 3 i P2 led i 移动 for i 3 i 0 i P2 led i 移动 单片机的C51语言 单片机的C51语言 实例2原理图与程序界面图 程序运行效果 视频 单片机的C51语言 实例3混合编程 将实例2中C51的delay函数改用汇编语言实现 并完成系统的混合编程 程序说明 分别编写汇编语言 delay asm 与C51语言 实例3 c 两个程序文件 并将其添加到Keil的同一项目中 单片机的C51语言 C51部分与实例2基本相同 delay函数声明 单片机的C51语言 delay asm 与实例3 c文件中函数delay同名的子程序 汇编子程序的头部格式 延时处理函数 汇编语言 PUBLIC DELAYDESEGMENTCODERSEGDE DELAY MOVR0 225DEL2 DJNZR0 DEL2DJNZR7 DELAYRETEND 单片机的C51语言 1 5 1 2LED数码管原理与编程 LED显示元件 人机交互输出设备 其作用是指示中间运行结果与运行状态 单片机的C51语言 com为公共端 共阳极LED 共阴极LED 引脚配置 七段式LED显示器 7 SegmentDisplay 不同显示字符采需用不同LED组合关系实现 显示码 字模 单片机的C51语言 以共阴极为例 部分字符的显示码 字模 为 七段LED数码管的标准显示字符为0 9 A F 显示字符 显示码 共阴 其它字符 00111000B 0 x38 L 字符的显示码 H 字符的显示码 01110110B 0 x76 单片机的C51语言 实例4LED数码管显示 在P0口连接一个共阴极数码管 使之循环显示0 9数字 分析 将显示码循环输出到P0口即可实现循环显示 但由于数字0 9的显示段码没有规律可循 需要采取查表方式进行操作 单片机的C51语言 将显示码按序存放在一个数组中 顺序号与代表的显示字符相对应 如 charled mod x1 x2 xn 通过循环变量指定待送出的数组元素 单片机的C51语言 参考程序 单片机的C51语言 视频 单片机的C51语言 实例5计数显示器 统计按键次数并以十进制形式显示 按键次数大于99后重新由0开始计数 个位LED接P2口 十位LED接P0口 共阴型 按钮接P3 7口线 按压时为0电平 单片机的C51语言 编程分析 问题 按键压下时可能被连续计数 单片机的C51语言 如何避免连续计数 单片机的C51语言 初始化 P2 P0 table 0 解决办法 取模运算 10 个位整除10运算 10 十位 P2 table count 10 P0 table count 10 显示输出 如何将计数值拆成两个独立的数 单片机的C51语言 参考程序 单片机的C51语言 1 1C51的程序结构1 2C51的数据结构1 3C51与汇编语言的混合编程1 4C51仿真开发环境1 5C51初步应用编程1 5 1I O端口的简单应用1 5 2I O端口的进阶实践 单片机的C51语言 1 5 2 1数码管动态显示原理与编程 两种显示接口 静态显示接口和动态显示接口 静态显示接口 一个数码管的引脚独立占据一根I O口线 优点 被显示数据只要送入并行口后就不再需要CPU干预 因而显示效果稳定 缺点 占用资源较多 单片机的C51语言 动态显示接口 所有数码管的段码线对应并联接在一个并行口上 而每位数码管的公共端分别由一位I O线控制 由并口输出的显示码可被所有数码管收到 但只有满足导通条件的数码管可以被驱动 单片机的C51语言 工作原理 采用快速切换方式 如10ms 每一时刻只有一只数码管导通工作 利用视力暂留特性 可获得连续显示效果 优点 占用资源较少缺点 占用机时较多 需要CPU随时刷新显示值 单片机的C51语言 实例6数码管动态显示 采用共阴极动态LED显示原理 实现如下功能 SW1向下拨时显示字符 L2 向上拨时显示字符 H3 单片机的C51语言 分析 Proteus中的双联LED数码管相当于两个并联的数码管 7SEG MPX2 CC BLUE Blue 2Digit 7 segmentCathodeDisplay 单片机的C51语言 A G 0 x38 1 0 2 1 A G 0 x5b 1 1 2 0 P2 led mode 0 P3 xxxxxx10B 2P2 led mode 1 P3 xxxxxx01B 1 led mode 0 x38 0 x5b 单片机的C51语言 如果不考虑开关switch 动态显示 L2 的程序可以如下 LED 指针 显示字模 单片机的C51语言 A G 0 x76 1 0 2 1 A G 0 x4f 1 1 2 0 字符数组led mode 0 x38 0 x5b 0 x76 0 x4f 开关状态变量switch sta 复合指针变量led point switch sta 完整的主函数 单片机的C51语言 includecharled mod 0 x38 0 x5B 0 x76 0 x4F voiddelay unsignedinttime sbitP17 P1 7 voidmain charled point 0 switch sta 0 while 1 if P17 1 switch sta 2 elseswitch sta 0 P3 2 led point P2 led mod switch sta led point led point 1 led point delay 30 编程界面 单片机的C51语言 单片机的C51语言 运行效果图 单片机的C51语言 1 5 2 2行列式键盘原理与编程 独立式键盘的电路简单 易于编程 但占用的I O口线较多 当需要较多按键时可能产生I O资源紧张问题 独立式键盘电路 单片机的C51语言 行列式键盘 将I O口分为行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铣工试题库及答案
- 2025年航空公司机务人员岗位飞机维修知识考试试题及答案解析
- 工勤考试技师考试题库及答案2025
- 高校科研合同模板(3篇)
- 高速公路护栏板施工合同(3篇)
- 高炮广告拆除施工合同(3篇)
- 安徽招聘考试试题及答案
- 安徽农商银行笔试题目及答案
- 安定协管员招聘面试题及答案
- 股东间公司治理信息保密及责任分配协议
- 地下室车库顶板行车、堆载、回顶方案
- 幼儿园礼仪小天使《借物品》教学课件
- 2024年河南鹤壁市鹤山区姬家山产业园政府专职消防员招聘笔试参考题库附带答案详解
- BCG 中国合成生物学产业白皮书2024
- 三年级数学倍的认识 省赛一等奖
- 大脑动脉血栓形成引起的脑梗死的护理查房
- 人教版小学英语所有语法及人教版小学英语语法大全
- 儿童膳食管理课件
- 《高血压疾病知识》课件
- 村卫生室医保管理制度
- 第一课 社会主义从空想到科学、从理论到实践的发展 思维导图+必背知识点填空+同步练习(含答案)
评论
0/150
提交评论