




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机程序设计基础 在简单了解单片机原理的基础上 我们就可以试着编一些简单的程序 以便提高单片机系统的认识 同时培养单片机的编程能力 本章以项目和任务为内容 由浅入深 循序渐进 介绍单片机资源的利用以及简单系统程序设计的思想 达到培养单片机程序设计能力目标 另外 每一个项目的程序可以在Kile软件中编写 也可以通过软件仿真和硬件仿真观察程序运行的结果 3 1单片机驱动一个LED闪烁 单片机的I O口可以直接驱动一些器件 通过单片机运行程序 达到单片机对一些器件的控制 LED是一种常用的显示器件 单片机的I O可以直接驱动 本节任务是利用单片机的一个I O口驱动LED电路 设计程序使其闪烁 在了实现P0 0口驱动负载特点基础上掌握程序设计一般方法 同时还要掌握单片机系统仿真 程序下载的一般过程 3 1 1电路原理 STC 89C51单片机的P0口采用为OD门输出 高电平输出时不存在拉出电流 但P0口输出低电平时 P0口灌入电流达到20毫安 因此P0只具有较强的低电平驱动能力 如果利用P0驱动门电路以及如LED这样的小功率负载 必须加上拉电阻 否则 即使编程让P0输出高电平 但是实际只能输出低电平 图3 1 1是单片机驱动LED电路 图中P0 0端口与电源之间接有一个电阻R2 当P0 0口输出低电平时 从电源正极出发经过电阻的电流通过P0 0口进入单片机 LED的正极为低电平 此时LED不亮 当此时P0口输出高电平时 经过电阻的电流无法进入P0 0端口 只能通过LED 此时LED亮 这种LED驱动方式为高电平有效方式 P0 7驱动LED采用的是低电平有效方式 直接了利用了P0口的低电平驱动能力 当P0 7端口输出高电平时 LED不亮 只有当P0 7端口输出低电平时 LED才亮 图3 1 1单片机驱动LED电路原理 3 1 2程序设计与编译 一 程序设计单片机内部的P0 P3寄存器都可以进行位操作 P0 P3对应的端口即单片机的32个I O口会输出P0 P3的结果 本例实现LED闪烁 只要让P0 0电平周期性变化即可 程序流程见图3 1 2所示 图3 1 2LED闪烁程序流程 在Kiel程序设计软件中 P0 0口定义为P0 0 因此在利用C语言程序设计时 要想让P0 0为低电平 只要编写P0 0 0一条语句即可 为了是程序简单明了 也可以利用sbitLED1 P0 0语句 让LED1代替P0 0 本案例的程序清单如下 include 包含头文件sbitLED1 P0 0 LED接P0 0 在kellC51软件中 定义P0 0为sbitsbitLED2 P0 7 voiddelay unsignedcharx 延时函数 unsignedchari j for i 0 i x i for j 0 j 200 j voidmain void 主函数 while 1 程序死循环 LED1 0 P0 0输出低电平 LED1灭delay 100 调用延时函数 延时一段时间 约0 3秒 不精确LED1 1 P0 0输出高电平 LED1亮delay 100 二 程序说明 1 因为使用的单片机芯片为STC89C51 因此程序包含reg51 h文件 reg51 h文件定义了51单片机所有特殊功能寄存器的名称定义和相对应的地址值 2 单片机程序顺序执行程序 先执行主函数 在主函数内可以调用分函数 分函数可以调用分函数 但分函数不能调用主函数 程序执行一条命令再执行下一条 执行完毕后返回到主函数入口进行下次循环 延时的过程是单片机执行了一个delay 100 函数而浪费一段时间 在执行delay 的过程中 如果没有中断单片机只能忙这一件事 单片机在执行此函数相关指令时浪费和占用的时间就是执行延时函数获得的时间 但利用delay 不能得到精确的延时 延时函数还可以利用带有形参的函数实现 例如 voiddelay unsignedintx while x x 3 利用位定义命令让LED等价于P0 0 程序执行LED1 1后 P0 0对以的单片机内部位寄存器就设置为高电平 P0 0端口输出高电平 单片机的所有I O口都可位位定义 也可以字节定义 4 单片机C语言程序设计需要的C语言关键字不多 并且在keilC中用到的关键字是独有的 因此对于没有学习过C语言的人学习单片机C语言程序设计困难并不是很大 重点掌握单片机C语言书写格式和怎样用C语言控制单片机的硬件资源皆可 另外 在编程时 还要有清晰的逻辑思维头脑和认真实践 由浅逐步深入学习 当你坚持到最后时 单片机C语言程序设计会让你感觉很简单 5 每个人在利用C语言编写单片机程序时都有自己的风格 一般情况下 函数的字符左行距为0 其下每条语句前留一个 tab 键空 算数逻辑符号的左右各留一个空格 关键语句要有中文或英文说明 每一个函数有时也可以用 上下隔开 这样有助于提高程序的层次感和可读性 三 程序编译程序设计采用第二章介绍的Kiel软件 针对本节例子 在电脑上运行Kiel 首先新建一个项目 项目使用的单片机为AT89C51 这个项目暂且命名为LED 然后新建一个文件 并保存为 LED c 文件 并添加到工程项目中 由于本案例程序比较简单 可以直接在Keil软件界面中编写 也可以先把程序清单形成一个TXT文件 然后剪切到Keil的程序编辑界面中 当程序设计完成后 通过Kiel编译并创建LED HEX目标文件 见图3 1 3所示 在Keil的应用过程中 由于编译过程成产生很多文件 因此新建一个项目需在一个目录中建立 Keil软件创建的HEX文件可以下载到单片机的程序存储器中运行 也可以被仿真软件调用 图3 1 3Keil软件目标文件创建 3 1 3汇编语言嵌入 在使用C语言所开发的项目中 有时需要写一些汇编语言的程序 以提高程序的精炼和精确度 如本例中的delay 函数延时不够精确 可以使用汇编语言实现时间延迟 提高延时的精确程度 在一个项目中要加入汇编语言程序时 有两种方法 第一种方法是使用Inlineassembly 也就是在程序中直接加入汇编语言码 如以下的程序所示 延时函数 voiddelay100us pragraendasmmore movR3 48djnzR3 djnzR7 more pragmaendasm 在上面的程序中 直接加入汇编语言码时是使用编译指令 pragmaasm和 pragmaendasm 编译指令 pragmaasm和 pragmaendasm之间则加入您需要的汇编语言代码 这一段程序主要是实现100微秒时间延迟 使用汇编语言我们可以通过如表3 1 1所示的计算方法估计出延迟时间大约是0 1ms 最后还有一条返回指令ret 所以总共需要100条指令 如果外接12MHz的石英晶体时 每执行一条指令需要1 s 所以执行这一个子程序总共需要100 s 也就是0 1 s 但是这只是一个估计值 因为执行子程序时如果有中断发生 就会造成执行时间增加 表3 1 1计算方法 第二种做法是将汇编语言的程序写在一个文件中 然后再从主程序中调用这些使用汇编语言写的子程序 C语言主程序调用汇编语言子程序时 必须注意到 累加器 accumulator 和寄存器给的内容都必须自行维护 如果维护不当 可能会造成不可预期的结果 一般而言 可以在进入汇编语言程序之后 马上将累加器A和寄存器R0 R7推入堆栈当中 等到要离开汇编语言程序之前再使用POP指令 将累加器A和寄存器R0 R7从堆栈中取出 但是要特别注意 堆栈推入与取出的顺序是相反的 也就是先进者后出 后进者先出 3 1 4软件仿真 在安装过Proteus软件的PC上运行ISIS文件 即可进入Proteus电路原理仿真界面 利用该软件仿真时操作比较简单 其过程是首先构造电路 然后双击单片机加载HEX文件 最后执行仿真 Proteus界面以及本案例的仿真电路见图所示 电路中单片机采用AT89C51 单片机默认为最小系统 不需要再外接晶体振荡电路和复位电路 仿真过程中 单片机加载程序模拟运行实际状态 软件仿真是程序设计结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽工业项目用地效益监管合同示范文本模板
- 2025机械设备转让合同范本
- 2025年度产品采购合同范本
- 2025电影项目地区代理合同示范文本
- 2025(下载最多)房屋租赁合同大全
- 2025科技创业人才资助资金资助合同
- 2025农业生产合作经营权转让合同书版
- 2025建筑工程有限公司员工合同
- 2025年茶叶买卖合同模板
- 主管护理考试题型及答案
- 河北省医疗卫生机构医疗废物管理规范2023版
- 2025年海南省高考物理试卷(含答案解析)
- 4输变电工程施工质量验收统一表式(电缆工程电气专业)-2024年版
- 2025至2030中国内蒙古粮食仓储行业项目调研及市场前景预测评估报告
- 资金岗位笔试题目及答案
- 虹口区2024-2025学年六年级上学期期中考试数学试卷及答案(上海新教材)
- 测量安全培训实施要点
- 诊所负责人聘用合同9篇
- 四轮定位外协协议合同
- 主持人个人礼仪规范
- 2025年人教版《太阳》标准课件
评论
0/150
提交评论