




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕 业 设 计(论文) 题 目: 多变流水灯控制电路的设计 学 院:电气与电子信息工程学院 专业名称: 电气自动化技术 学 号: 0530220111 2008 年 5 月 20 日 摘 要 本设计是一 led 流水灯的设计。 整机以美国 atmel 公司生产的 40 脚单片机 at89c51 为核心,介绍了以它 为控制系统的 led 灯的动态设计和开发过程。通过该芯片控制一个行 led 灯按 一定顺序亮,文中详细介绍了 led 显示的设计思路。 单片机控制系统程序采用单片机汇编语言进行编辑,通过编程控制各显示 点对应 led 阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。 当然流水灯一般只是在用芯片做控制时起修饰作用,若只用单片机做流水 灯,就不能很好体现单片机的强大功能。这里的流水灯只是单片机应用中的最 基础的一方面。 led 显示以其组构方式灵活、显示稳定、功耗低、寿命长、技术成熟、成 本低廉等特点在车站、证券所、运动场馆、交通干道及各种室内/外显示场合的 信息发布,公益宣传,环境参数实时,重大活动倒计时等等得到广泛的应用。 经实践证明,该系统显示误差小,性能稳定,结构合理,扩展能力强。 关键词:汇编语言;at89c51 单片机;动态显示;led abstract this design is led flows the lantern floated down river the design. complete machine 40 foot monolithic integrated circuit at89c51 which produces by american atmel corporation is a core, introduced take it as the control system led lamp dynamic design and the performance history. controls a line of led lamp through this chip to be bright according to certain order, in the article in detail introduced the led demonstrationdesignmentality. the monolithic integrated circuit control system procedure uses the monolithic integrated circuit assembly language to carry on the edition, controls each demonstration point correspondence led anode and the cloudy extreme level through the programming, may effective control each demonstration extinguish brightly. certainly flows the lantern floated down river only is generally when uses the chip makes the control the beautification function, if only uses the monolithic integrated circuit to do flows the lantern floated down river, cannot very good manifest the monolithic integrated circuit the formidable function.on the one hand here class lantern floated down river only is in the monolithic integrated circuit application most foundation. led demonstrated by its fabric way nimble, the demonstration stable, the power loss low, the life long, the technology mature, the cost inexpensive and so on the characteristics in the station, the negotiable securities, the movement facility, in the transportation yang or male principle and each kind of room/outside the demonstration situation information issued, public welfare propaganda, environment parameter real- time, moves the countdown and so on to obtain the widespread application significantly. after the practice proof, this system demonstration error is small, the performance is stable, the structure is reasonable, expansion ability. key word:assembly language ;at89c51 monolithic integrated circuit;dynamic demonstration;led 目 录 1 绪论1 2 整体设计描述. 3 21 需要体现功能与特 点3 22 设计方案论证 3 3 电路的硬件设计 5 31 电源设计 5 32 单片机系统及外围电路 6 321 选用单片 机6 322 at89c51 芯片介 绍 6 323 单片机系统外围电 路 9 4 程序设计.11 41 用位控 法的程序设计 12 42 用循环位移法的程序设 计14 43 用查表法的程序设 计15 5 调整测试工作状态19 51 程序分析 19 511 程序 一19 512 程序二 .20 513 软件调试 22 6 工作性能分析23 61 运行分 析23 62 性能分 析24 结论25 致谢26 参考文献27 附录 128 附录 229 附录 3 30 附录 4 31 1 绪 论 单片机一词最初源于“single chip microcomputer”,它忠实地反映了早期单 片机的形态和本质。随后按照面向对象,突出控制功能,在片内集成了许多外 围叫路及外设接口,突破了传统意义的计算机结构,发展成 microcontroller 的 体系结构,目前国外已普遍称之为微控制器 mcu(micro controller unit) 。鉴 于它完全作为嵌入式微控制器。由于国内对单片机一词已约定成俗,因此仍沿 用至今。但对“单片机”一词的理解,不应现限于“single chip microcomputer”,而应接轨于国际上对单片机的标准称呼“micro controller unit”(mcu) 。 单片机的发展大致可分为四个阶段: 第一阶段:单片机探索阶段。以 intel 公司 mcs-48,motorola 公司 6801 为代表,属低档型 8 位机。 第二阶段:单片机完善阶段。以 intel 公司 mcs-51,motorola 公司 68hc05 为代表,属高档型 8 位机。此阶段,8 位单片机体系进一步完善,特别 是 mcs-51 系列单片机在世界和我国得到了广泛的应用,奠定了它在单片机领 域的经典地位,形成了事实上的 8 位单片机标准结构。 第三阶段:8 位机和 16 位机争艳阶段,也是单片机向微控制器发展的阶 段。此阶段 intel 公司推出了 16 位的 mcs-96 系列单片机,世界其他芯片制造 商也纷纷推出了性能优异的 16 位单片机,但由于价格不菲,其应用面受到一定 的限制。相反 mcs-51 系列单片机,由于其性能价格比高,却得到了广泛的应 用,并吸引了世界许多知名制造厂商,竟相使用以 80c51 为内核,扩展部分测 控系统中使用的电路技术、接口技术、a/d 、d/a 和看门狗等功能部件,推出 了许多与 80c51 兼容的 8 位单片机。强化了微控制器的特征,进一步巩固和发 展了 8 位单片机的主流地位。 第四阶段:微控制器全面发展阶段。随着单片机在各个领域全面深入地发 展和应用,世界各大电气、半导体厂商普遍投入,出现了高速、大寻址范围、 强运算能力的 8 位/16 位/32 位通用型单片机以及小型廉价的专用型单片机,百 花齐放,全面发展,单片机已进入一个可广泛选择和全面发展的应用时代。 mcs-51 系列单片机最初是 hmos 制造工艺,其芯片根据片内 rom 结构 可分为 8031(片内无 rom) , 8051(片内有 4kb 掩膜 rom) ,8751(片内有 4kb eprom) ,统称为 51 系列单片机。其后又有增强型 52 系列,包括 8032、8052、8752 等。 hmos 工艺的缺点是功耗较大,随着 cmos 工艺的发展,inter 公司生产了 chmos 工艺的 80c51 芯片,大大降低了功耗,并引入了低功耗管理模式,使 低功耗具在可控性。chmos 工艺的 80c51 芯片,根据片内 rom 结构,也有 80c31、80c51、87c51 三种类型,引脚与 51 系列兼容,指令相同。 随后,intel 公司将 80c51 内核使用权以专利互换或出售形式转让给世界许 多著名 ic 制造厂商,如 philips、nec、amd 、dallas 、siemens、fujutsu、 oki、华邦、lg 等。在保持 与 80c51 单片机兼容的基础上,这些公司融入了自身的优势,扩展了针对满足 不同测控对象要求的外围电路。这样,80c51 单片机就被众多芯片制造厂商支 持,成了事实上标准的 msu 芯片。 2 整体程序设计概述 21 需要体现的功能与特点 利用 51 芯片和 led 灯设计一个流水灯电路,要求流水灯工作稳定,有较 好的视觉效果。要求用不同方案,实现同样的功能,由浅入深,使这个系统既 能实现单纯的流水灯效果,又能实现稍微复杂的流水灯效果。虽然变化是无穷 的,但要利用这个方案让人们了解它所用到的各个部分工作原理。 22 设计方案论证 由于用 51 芯片控制一组 led 等,还有多余的 i/o 口空余,led 功率不大, 不需要用驱动电路,只需要简单的排布就可以。 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、 最小功耗系统及典型系统等。at89c51 单片机是美国 atmel 公司生产的低电 压、高性能 cmos 8 位单片机,具有丰富的内部资源: 4kb 闪存、 128bram、32 根 i/o 口线、2 个 16 位定时/计数器、5 个向量两级中断结构、2 个全双工的串行口,具有 4.255.50v 的电压工作范围和 024mhz 工作频率, 使用 at89c51 单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有 八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电 源等电路和必要的软件组成的单个单片机。其具体硬件组成如图 2-1 所示。 图 2-1 硬件组成 3 电路的硬件设计 3.1 电源设计 稳压电源的功能是把来自电网的 220v 交流电压转变为所需的、稳定的直 流电压。它由电源变压器、整流电路、滤波电路和稳压电路四个部分组成,如 图 3-1 所示: u 2 - + u4u3u 1 图 3-2 电源电路图 u1 u2 u3 u4 u5 o t o t o t o t o t 变 压 器 整流 电路 滤波 电路 稳 压 电路 图 3-1 稳压电源的组成框图及工作过程 t 220v7.5v c3 104c2 104 vin1 gnd 2 vout 3 ic1 7805 r1 100 vcc 1 2 3 4 d1 bridge c1 1000u s sw d2 led 根据要求所确定的稳压电源的电路形式如图 3-2 所示。图中变压器 t 将来 自电网的 220v 交流电压变换为整流电路所需要的 7.5v 交流电压,再经整流电 桥(4 个二极管)d1 将交流电压变换成脉动的直流电压,随后电解电容器 c1 将脉动直流电压中的大部分纹波加以滤除,以得到较为平滑的直流电压。为了 得到改善的纹波电压,再将直流电压通过电容 c2,然后经集成稳压器 ic1 稳压, 在输出端得到稳定的 5v 直流电压。这时,在输出端接上电容 c3,用以滤除输 出端的高频信号,改善负载的瞬态响应,最后即可得到所需的、稳定的直流电 压。电路最后接入的发光二极管用做电源指示灯。 3.2 单片机系统及外围电路 3.2.1 单片机的选择 单片机采用 89c51 或其兼容系列的芯片进行控制,它负责控制整个电路以 及相应的程序的运行、以及给屏体电路部分发送命令。这里我们选择了内含 4k 字节 flash 的 at89c51,因为我们只需要显示特定的图形和文字,无需庞大的 字库,因此 4k flash 已经可以满足字库储存的需求,不需要扩展外存储器。 3.2.2at89c51 芯片介绍 at89c51 是美国 atmel 公司生产的 8 位 flash rom 单片机。其最突出的 优点是片内 rom 为 flash rom,可擦写 1000 次以上,应用并不复杂的通用 rom 写入器就能方便的擦写,读取也很方便,价格低廉,具有在片程序 rom 二级保密系统。因此可灵活应用于各种控制领域。at89c51 包含以下一些功能 部件: (1)一个 8 位 cpu ; (2)一个片内振荡器和时钟电路; (3)4kb flash rom ; (4)128b 内 ram; (5)可寻址 64kb 的外 rom 和外 ram 控制电路; (6)两个 16 位定时/计数器; (7)21 个特殊功能寄存器 ; (8)4 个 8 位并行 i/o 口; (9)一个可编程全双工串行口 ; (10)5 个中断源,可设置成 2 个优先级。 at89c51 单片机一般采用双列直插 dip 封装,共 40 个引脚,图 3-3 为其引 脚排列图。40 个引脚大致可分为 4 类:电源、时钟、控制各 i/o 引脚。 一 电源 vcc芯片电源,接+5v;gnd接地端。 二 时钟 xtal1、xtal2晶体振荡电路反相输入端和输出端。 三 控制线 控制线共有 4 根,其中 3 根是复用线。所谓复用线是指具有两种功能,正 常使用时是一种功能,在某种条件下是另一种功能。 1ale/ 地址锁存允许/片内 eprom 编程脉冲。prog (1)ale 功能:用来锁存 p0 口送出的低八位地址。 at89c51 在并行扩展外存储器时,p0 口用于分时传送低 8 位地址和数据信 号,且均为二进制数。当 ale 信号有效时,p0 口传送的是低 8 位地址信号; ale 信号无效时,p0 口传送的是低 8 位地址信号。在 ale 信号的下降沿,锁 定 p0 口传送的内容,即低 8 位地址信号。 需要指出的是,当 cpu 不执行访问外 ram 指令, ale 以时钟振荡频率 1/6 的固定频率输出,因此 ale 信号也可作为外部芯片 clk 时钟或其他需要。 但是,当 cpu 执行 movx 指令时,ale 将跳过一个 ale 脉冲。 (2) 功能:片内 eprom 的芯片,在 eprom 编程期间,此引脚输prog图 3-3 at89c51 引脚图 p1.01 p1.12 p1.23 p1.34 p1.45 p1.56 p1.67 p1.78 rst/vpd9 p3.0/rxd10 p3.1/txd11 p3.2/int012 p3.3/int113 p3.4/t014 p3.5/t115 p3.6/wr16 p3.7/rd17 xtal218 xtal119 gnd20 p2.0 21 p2.1 22 p2.2 23 p2.3 24 p2.4 25 p2.5 26 p2.6 27 p2.7 28 psen 29 ale/prog 30 ea/vpp 31 p0.7 32 p0.6 33 p0.5 34 p0.4 35 p0.3 36 p0.2 37 p0.1 38 p0.0 39 vcc 40 u1 at89c51 入编程脉冲。 2 外 rom 读选通信号。psen 89c51 读外 rom 时,每个机器周期内 两次有效输出。 可作为psenpsen 外 rom 芯片输出允许 的选通信号。在读内 rom 或读外 ram 时,o 无效。s 3rst/v pd复位/备用电源。 (1)正常工作时,rst 端为复位信号输入端,只要在该引脚上连续保持两 个机器周期以上高电平,at89c51 芯片即实现复位操作,复位后一切从头开始, cpu 从 0000h 开始执行指令。 (2)v pd 功能:在 vcc 掉电情况下,该引脚可接上备用电源,由 vpd 向片 内 ram 供电,以保持片内 ram 中的数据不丢失。 4 /vpp内外 rom 选择/片内 eprom 编程电源。ea (1) 功能:正常工作时, 为内外 rom 选择端。at89c51 单片机ea rom 寻址范围为 64kb,其中 4kb 在片内,60kb 在片外。当 保持高电平ea 时,先访问内 rom,但当 pc 值超过 4kb 时,将自动转向执行外 rom 中的程 序。当 保持低电平时,则只访问外 rom,不管芯片内有否内 rom。ea (2)v pp 功能:片内有 eprom 的芯片,在 eprom 编程期间,此引脚用 于施加编程电源。 四 i/o 引脚 at89c51 有 p0、p1 、p2、p3 4 个 8 位并行 i/o 端口,共 32 个引脚。 p0 口是一组 8 位漏级开路型双向 i/o 口,也即地址 /数据总线复用口。作为 输出口用时,每位能以吸收电流的方式驱动 8 个 ttl 逻辑门电路,对端口写 1 时,又可作高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路 转换的地址(低 8 位)/数据总线,在访问期间激活了内部的上拉电阻。在 flash 编程时,p0 端口接收指令字节;而在验证程序时,则输出指令字节。验证时, 要求外接上拉电阻。 p1 口是带内部上拉电阻的双向i/o口,向p1口写入1时p1口被内部上拉为高 电平,可用作输入口。当作为输入脚时被外部信号拉低的p1口会因为内部上拉 而输出一个电流。flash编程和程序校验期间,p1接收低 8位地址。 p2 口是带内部上拉电阻的双向i/o口,向p2口写入1时p2口被内部上拉为高 电平可用作输入口,当作为输入脚时被外部拉低的p2 口会因为内部上拉而输出 表 3-1 p3 各端口第二功能 电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行movx dptr指令)时,p2 口送出高 8位地址数据,当使用 8位寻址方式(movxri)访 问外部数据存储器时,p2口发送p2 特殊功能寄存器的内容,在整个访问期间不 改变。flash 编程和程序校验时,p2也接收高位地址和一些控制信号。 p3 口是带内部上拉电阻的双向i/o口,向p3口写入1时p3口被内部上拉为高 电平可用作输入口,当作为输入脚时被外部拉低的p3 口会因为内部上拉而输出 电流。p3口除了作为一般的i/o口线外,更重要的是它的第二功能,如表 3-1所 示: 端口引脚 第二功能 p3.0rxd 串行口输入端 p3.1txd 串行口输出端 p3.20int外部中断 0请求输入端 p3.31外部中断 1请求输入端 p3.4t0 定时 /计数器 0外部信号输入端 p3.5t1 定时 /计数器 1外部信号输入端 p3.6wr外 ram写选通信号输出端 p3.7 d外 ram读选通信号输出端 3.2.3 单片机系统外围电路 单片机系统外围电路形式如图 3-4 所示。单片机振荡器反相放大器的输入 端(xtal1)和输出端(xtal2 )之间接上 12mhz 或更高频率的晶振,以获 得较高的刷新频率,使显示更稳定。电容 c4、c5 是晶振的负载电容,主要起 频率微调和稳定的作用。单片机的串行口工作在方式 0 下,作为同步移位寄存 器使用,端口 rxd(p3.0)作为数据移位的输入/输出端,而由 txd(p3.1 )端 输出移位时钟脉冲。移位数据的发送和接收均以 8 位为一帧,不设起始位和停 止位,无论输入/输出,均低位在前高位在后。89c51 的通用 i/o 口 p1 作为显示 数据和二进制行号的公用输出口。两种数据的输出在时间上是错开的。p1 口的 低 4 位与行驱动器相连,送出二进制的行选信号;p1.5p1.7 口则用来发送控 制信号。p0 和 p2 口空着,在有必要的时候可以扩展系统的 rom 和 ram。 gnd c4 33pf c5 33pf vcc y1 12mhz r2 8.2 k gnd vccp1.0 1 p1.1 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 rst/vpd 9 p3.0/rxd 10 p3.1/txd 11 p3.2/int0 12 p3.3/int1 13 p3.4/t0 14 p3.5/t1 15 p3.6/wr 16 p3.7/rd 17 xtal2 18 xtal1 19 gnd 20 p2.0 21 p2.1 22 p2.2 23 p2.3 24 p2.4 25 p2.5 26 p2.6 27 p2.7 28 psen 29 ale/prog 30 ea/vpp 31 p0.7 32 p0.6 33 p0.5 34 p0.4 35 p0.3 36 p0.2 37 p0.1 38 p0.0 39 vcc 40 u1 at89c51 + c6 10u a b c d g1 gnd txdsck rxdsi sclr rck 图 3-4 单片机系统外围电路图 4 程序设计 从原理图 4-1 中可以看出,如果要让接在 p1.0 口的 led1 亮起来,那么只 要把 p1.0 口的电平变为低电平就可以了;相反, 如果要接在 p1.0 口的 led1 熄灭,就要把 p1.0 口的电平变为高电平;同理,接在 p1.1p1.7 口的其他 7 个 led 的点亮和熄灭的方法同 led1。因此,要实现流水灯功能,我们只要将 发光二极管 led1led8 依次点亮、熄灭,8 只 led 灯便会一亮一暗的做流水 灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条 指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们 就看不到“流水”效果了。 我们知道,目前所有的计算机只能执行二进制代码,即高低电平的信号“语 言”,不可能识别其他我们熟知的语言,计算机的 cpu 在设计时就将其所有“功 能”都定义有特定的一串二进制代码,这些代码的集合就是该计算机的“ 语言”, 这种语言在早期计算机开发中无可替代的被人们使用。由于一串串的“01”代码 不但难记,也极易出错。后来人们将这种一串串特定的代码一一的用人们可以 理解并好记忆的字母助记符给予命名,这样,在开发计算机程序时先用助记符 将其逻辑功能写出来,当逻辑无问题时,再将助记符逐句“翻译” 成对应的一串 串二进制代码交计算机运行。这种用助记符临时替代二进制代码的助记符集合, 就是我们现在的“ 汇编语言 ”。 图 4-1 原理图 现在我们虽仍然使用汇编语言,但最后已经不用人工去“翻译” 成二进制代 码啦,而是交给已有翻译功能的计算机去“翻译” 。 对于 8051 系列单片机来说,其汇编助记符只有 111 条,这 111 条助记符是 被汇编器(“ 翻译软件” )认可的,你不能自创助记符来编写单片机程序,若你 书写的 8051 单片机程序中有不符合这 111 条语句,在最后汇编时就会报错。再 着,汇编语言也象我们使用的语言一样有其必须的语法,不能违背。 单片机的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后, 我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工 作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一 灭。软件编程是单片机应用系统中的一个重要的组成部分,是单片机学习的重 点和难点。下面我们以最简单的流水灯控制功能即实现 8 个 led 灯的循环点亮, 来介绍实现流水灯控制的几种软件编程方法(各流程图见附录) 。 4.1 用位控法的程序设计 这是一种最易理解的方法,采用顺序程序结构,用位指令控制 p1 口的每一 个位输出高低电平,从而来控制相应 led 灯的亮灭。程序如下: org 0000h ;单片机上电后从 0000h 地址执行 ajmp start ;跳转到主程序存放地址处 org 0030h ;设置主程序开始地址 start:mov sp,#60h ;设置堆栈起始地址为 60h clr p1.0 ;p1.0 输出低电平,使 led1 点亮 acall delay ;调用延时子程序 setb p1.0 ;p1.0 输出高电平,使 led1 熄灭 clr p1.1 ;p1.1 输出低电平,使 led2 点亮 acall delay ;调用延时子程序 setb p1.1 ;p1.1 输出高电平,使 led2 熄灭 clr p1.2 ;p1.2 输出低电平,使 led3 点亮 acall delay ;调用延时子程序 setb p1.2 ;p1.2 输出高电平,使 led3 熄灭 clr p1.3 ;p1.3 输出低电平,使 led4 点亮 acall delay ;调用延时子程序 setb p1.3 ;p1.3 输出高电平,使 led4 熄灭 clr p1.4 ;p1.4 输出低电平,使 led5 点亮 acall delay ;调用延时子程序 setb p1.4 ;p1.4 输出高电平,使 led5 熄灭 clr p1.5 ;p1.5 输出低电平,使 led6 点亮 acall delay ;调用延时子程序 setb p1.5 ;p1.5 输出高电平,使 led6 熄灭 clr p1.6 ;p1.6 输出低电平,使 led7 点亮 acall delay ;调用延时子程序 setb p1.6 ;p1.6 输出高电平,使 led7 熄灭 clr p1.7 ;p1.7 输出低电平,使 led8 点亮 acall delay ;调用延时子程序 setb p1.7 ;p1.7 输出高电平,使 led8 熄灭 acall delay ;调用延时子程序 ajmp start ;8 个 led 流了一遍后返回到标号 start 处再循 环 delay : ;延时子程序 mov r0,#255 ;延时一段时间 d1: mov r1,#255 djnz r1,$ djnz r0,d1 ret ;子程序返回 end ;程序结束 4.2 用循环移位法的设计 在上个程序中我们是逐个控制 p1 端口的每个位来实现的,因此程序显得有 点复杂,下面我们利用循环移位指令,采用循环程序结构进行编程。我们在程 序一开始就给 p1 口送一个数,这个数本身就让 p1.0 先低,其他位为高,然后 延时一段时间,再让这个数据向高位移动,然后再输出至 p1 口,这样就实现 “流水”效果啦。由于 8051 系列单片机的指令中只有对累加器 acc 中数据左 移或右移的指令,因此实际编程中我们应把需移动的数据先放到 acc 中,让其 移动,然后将 acc 移动后的数据再转送到 p1 口,这样同样可以实现 “流水” 效果。具体编程如下所示,程序结构确实简单了很多。 org 0000h ;单片机上电后从 0000h 地址执行 ajmp start ;跳转到主程序存放地址处 org 0030h ;设置主程序开始地址 start:mov sp,#60h ;设置堆栈起始地址为 60h mov a, #0feh ;acc 中先装入 led1 亮的数据(二进制的 11111110) mov p1 ,a ;将 acc 的数据送 p1 口 mov r0,#7 ;将数据再移动 7 次就完成一个 8 位流水过程 loop: rl a ;将 acc 中的数据左移一位 mov p1, a ;把 acc 移动过的数据送 p1 口显示 acall delay ;调用延时子程序 djnz r0,loop ;没有移动够 7 次继续移动 ajmp start ;移动完 7 次后跳到开始重来,以达到循环流动效果 delay: ;延时子程序 mov r0,#255 ;延时一段时间 d1: mov r1,#255 djnz r1,$ djnz r0,d1 ret ;子程序返回 end ;程序结束 4.3 用查表法的设计 上面的两个程序都是比较简单的流水灯程序,“流水”花样只能实现单一 的“从左到右”流方式。运用查表法所编写的流水灯程序,能够实现任意方式 流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添 加或改变流水花样,真正实现随心所欲的流水灯效果。我们首先把要显示流水 花样的数据建在一个以 tab 为标号的数据表中,然后通过查表指令“movc a,a+dptr ”把数据取到累加器 a 中,然后再送到 p1 口进行显示。具体源 程序如下,tab 标号处的数据表可以根据实现效果的要求任意修改。 org 0000h ;单片机上电后从 0000h 地址执行 ajmp start ;跳转到主程序存放地址处 org 0030h ;设置主程序开始地址 start:mov sp,#60h ;设置堆栈起始地址为 60h mov dptr,# tab ;流水花样表首地址送 dptr loop: clr a ;累加器清零 movc a,a+dptr ;取数据表中的值 cjne a,#0ffh,show ;检查流水结束标志 ajmp start ;所有花样流完,则从头开始重复流 show: mov p1,a ;将数据送到 p1 口 acall delay ;调用延时子程序 inc dptr ;取数据表指针指向下一数据 ajmp loop ;继续查表取数据 delay: ;延时子程序 mov r0,#255 ;延时一段时间 d1: mov r1,#255 djnz r1,$ djnz r0,d1 ret ;子程序返回 tab: ;下面是流水花样数据表,用户可据要求任意编 写 db 11111110b ;二进制表示的流水花样数据,从低到高左移 db 11111101b db 11111011b db 11110111b db 11101111b db 11011111b db 10111111b db 01111111b db 01111111b ;二进制表示的流水花样数据,从高到低 右移 db 10111111b db 11011111b db 11101111b db 11110111b db 11111011b db 11111101b db 11111110b db 0feh,0fdh ,0fbh,0f7h ;十六进制表示的流水花样数据 db 0efh,0dfh ,0bfh,7fh db 7fh,0bfh,0dfh,0efh db 0f7h, 0fbh,0fdh,0feh db 0ffh ;流水花样结束标志 0ffh end ;程序结束 当上述程序之一编写好以后,我们需要使用编译软件对其编译,得到单片 机所能识别的二进制代码,然后再用编程器将二进制代码烧写到 at89c51 单片 机中,最后连接好电路通电,我们就看到 led1 led8 的“流水”效果了。 390+5v 8.2k rst vcc +5v +5v+5v 40 31 89c51 1 8 9 181920 ea 10f 6mhz 20p 流水灯电路原理图如图 4-2 所示。用 p1 口的 8 位分别驱动一个发光二极管, 从图上可见,某位口上输出 0(低电平)对应的发光二极管就亮,反之某位口 上输出 1(高电平)对应的发光二极管就熄灭。我们可以根据自己的思路设计 灯亮灭次序从而形成不同的样式的流水灯。 图 4-2 流水灯电路原理图 5 调整测试工作状态 5.1 程序分析 5.1.1 程序一 下面的流水灯程序,就是用汇编助记符编写的。一般我们叫他为汇编语言 程序。这里的程序用一步步逐个控制单片机各管脚来实现流水灯功能。 流水灯程序如下: loop: clr p1.0 ;清除 p1.0,使其=0 ,led1 点亮 acall delay ;调用 0.1 秒延时子程序,等待 0.1 秒 setb p1.0 ;置高 p1.0,使其=1 ,led1 熄灭 clr p1.1 ;点亮 led2 acall delay setb p1.1 ;熄灭 led2 clr p1.2 ;点亮 led3 acall delay setb p1.2 ;熄灭 led3 clr p1.3 ;点亮 led4 acall delay setb p1.3 ;熄灭 led4 clr p1.4 ;点亮 led5 acall delay setb p1.4 ;熄灭 led5 clr p1.5 ;点亮 led6 acall delay setb p1.5 ;熄灭 led6 clr p1.6 ;点亮 led7 acall delay setb p1.6 ;熄灭 led7 clr p1.7 ;点亮 led8 acall delay setb p1.7 ;熄灭 led8 acall delay ljmp loop ;8 个 led 流了一遍后返回到标号 loop 处再循环 ;延时子程序 delay: mov r0,#255 ; dlo1: mov r1,#195 djnz r1,$ djnz r0,dlo1 ret end 程序的第 1 到 26 行流水灯的主程序,为使流水效果不停,主程序做成了 一个闭合循环。delay 是延时子程序,改变赋给 r0 和 r1 的值,将改变延时 时间,从而改变流水灯的流动速度。最后的 end 是告诉汇编器:程序到此结束。 在这个流水灯程序中,实现流水的方法是比较笨的。既然单片机有处理数 据的能力,先给单片机一些初始数据,让单片机来依给定的数据参数去自行处 理流水过程。 5.1.2 程序二 ;左移 star: mov r3,#8 ;设置流水位数 mov p1,#11111110b ;从 p1.0 开始 loop: acall d01s mov a,p1 ;读取 p1 当前数据到 acc rl a ;左移一位 mov p1,a ;将左移的数据再送到 p1 djnz r3,loop ;没有完成 8 位继续 ;* mov p1,#0ffh ;熄灭所有灯 ;* ;右移 mov r3,#8 ;设置流水位数 mov p1,#01111111b ;从 p1.7 开始 loop1: acall d01s mov a,p1 ;读取 p1 当前数据到 acc rr a ;右移一位 mov p1,a ;将右移的数据再送到 p1 djnz r3,loop1 ;没有完成 8 位继续 ljmp star ;完成后返回到开始再来 ;延时子程序 d01s: mov r0,#255 d01l1: mov r1,#198 djnz r1,$ djnz r0,d01l1 ret end 程序中,第一句先在 r3 中设定位流水为 8 次;第二行,将 p1 高端的 7 位 设成高电平(led 不亮) ,最后 1 位设成低电平 0(p1.0 驱动的 led1 亮) 。点 亮 led1 后延时一会。之后,将当前 p1 的状态(也就是数据)读到 a 累加器 中进行左移一位,再将移动后的数据从 a 累加器传送到 p1,从而实现 led 的 流水效果。 第 7 行是当移动一位后,检查够不够 8 次,若不够则返回到 loop 继续; 若够 8 次,就继续执行下面一句指令。 程序中的右移与左移结构完全一样,只是 p1 的初始数据改为高 1 位=0 ,低 7 位=1 ;从 p1 读到 a 累加器的数据使用 rr a 的右移指令。 第 16 行指令是为循环左、右移而设。 也许你会问:为何不直接将 p1 中的数据左移或右移呢?这是因为 p1 没有 左右移的功能,在 111 条指令中没有 rl p1 和 rr p1 的指令,要想实现左右 移,就只有将需移动的数据中转到累加器 a 中处理,处理后的数据再返回使用。 在 51 单片机中,累加器 a 的处理能力最强,所以关于累加器的操作指令也最 多。今后我们在开发单片机过程中经常会遇到这样类似的问题,没什么奇怪的, 单片机就这样。 5.1.3 软件调试 软件调试采用脱机调试的方法,即完全用仿真器软件在 pc 机上对目标电路 原理图和程序进行检测和调试。调试过程中单片机相应输入端由通用键盘和鼠 标设定,运行状态、各寄存器状态、端口状态等都可以在 crt 指定的窗口区域 显示出来,以确定程序运行有无错误。调试可按下列步骤进行: 一 目标程序纠错 该阶段工作通常在目标程序编辑时就完成。一般来说,仿真器软件能给用 户输入的程序指令纠错,包括书写格式、标号未定义或多重定义、转移地址溢 出等错误。 二 子程序功能调试 程序设计通常采用模块程序设计,调试时可对一个个子程序分别进行调试, 设置好入口条件,然后采用单步运行或断点运行方式,检查系统 cpu 现场、 ram 和 i/o 口状态,看程序执行结果是否符合设计要求。 三 整体程序综合调试 即把各子程序整体连起来进入到综合电路调试,看是否能实现预计的功能 显示。在这阶段若发生故障,可以考虑各子程序在运行时是否破坏现场,数据 缓冲单元是否发生冲突,标志位的建立和清除在设计上是否失误,堆栈是否溢 出,输入输出状态是否正常等。 用软件模拟器调试不需任何在线仿真器,也不需要用户样机,直接就可以 在 pc 机上开发和调试。调试和修改完毕后,对于实时性要求不高的应用系统 可以直接使用编程器将软件固化在目标系统 rom 中,然后独立投入运行。 6 工作性能分析 6.1 运行分析 在系统不能工作或运行结果和设计的不一致时,应区别不同情况做相应的 软件硬件检查。 如程序能运行,但结果不一致,一般先查软件,通过模拟仿真的方法确定 程序是否正确,然后再查硬件电路。 如系统不能工作,则首先应检查最小系统是否正确。最小系统检查方法如 下: 单片机安装到插座上并锁紧(注意:缺口应和插座方向一致) ,打开电源开 关,用万用表(数字表)测有关点的电压。40、31 脚 5v,9 脚 0v,18、19 脚 在 1.82.8v 之间,各点电压正确,说明最小硬件电路焊接无误,如果不是的, 检查相应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店喷淋工程施工方案
- 2025电商孵化园企业入驻合同标准版孵化场地租赁协议
- 《企业培训与发展》课件
- 2025至2031年中国侧向移动钢质防火卷帘门行业投资前景及策略咨询研究报告
- 2025制造企业厂房租赁合同
- 2025员工股权投资信托合同示例
- 2025至2030年中国递纬器螺灯数据监测研究报告
- 2025至2030年中国自润滑不锈钢关节轴承数据监测研究报告
- 煤气柜拆除施工方案范本
- 2025至2030年中国电气导管数据监测研究报告
- 食品采样检测流程
- 工程材料力学性能(束德林第三版)课后习题答案
- 防汛预案桌面演练(终)课件
- 开封文化艺术职业学院单招《职业技能测试》参考试题库(含答案)
- 《坦克的发展历程》课件
- 军事研学旅行活动策划
- (完整)有效备课上课听课评课
- 采购管理系统的六大功能模块
- 渠道施工课件
- 世界500强人力资源总监管理笔记
- 《疯狂动物城》全本台词中英文对照
评论
0/150
提交评论