基于单片机和FPGA的出租车计费系统 单片机和电子技术专业毕业设计 毕业论.doc_第1页
基于单片机和FPGA的出租车计费系统 单片机和电子技术专业毕业设计 毕业论.doc_第2页
基于单片机和FPGA的出租车计费系统 单片机和电子技术专业毕业设计 毕业论.doc_第3页
基于单片机和FPGA的出租车计费系统 单片机和电子技术专业毕业设计 毕业论.doc_第4页
基于单片机和FPGA的出租车计费系统 单片机和电子技术专业毕业设计 毕业论.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

i 目目 录录 摘摘 要要 .1 第第 1 章章 绪论绪论 .2 第第 2 章章 系统设计系统设计 .3 2.1 系统组成3 2.1.1 计费及显示 .3 2.1.2 时钟及显示 .3 2.1.3 计费开始提示 .1 2.2 功能模块设计1 第第 3 章章 硬件及软件实现硬件及软件实现 .3 3.1 传感器3 3.1.1 光电传感器电路设计 .3 3.1.2 车轮光电开关检测电路 4 3.2 单片机4 3.2.1 8051 单片机功能方块图 .5 3.2.2 AT89S51 单片机简介 7 3.2.3 AT89S5l 与 51 系列单片机相比具有如下特点 8 3.2.4 89S51 的内部框图 9 3.2.5 中断控制 .11 3.2.6 单片机控制程序设计 .12 3.2.7 单片机汇编语言源程序 .16 3.3 显示及按键控制系统.31 3.3.1 LED 数码管 31 3.3.2 数据显示电路的设计 .32 第第 4 章章 系统检测及分析系统检测及分析 .34 4.1 系统仿真/硬件验证34 4.1.1 系统的调试方法 .34 4.1.2 系统的硬件验证 .34 4.2 设计技巧分析35 结结 论论 .36 附录附录 A: FPGA 芯片引脚芯片引脚 .37 1 摘摘 要要 本系统电源电压为+16V,速度传感器具有汽车每运行 1提供 1000 个脉冲信 号的特性。显示器可以采用 LED 数码管。系统采用单片机和 FPGA 的结合进行系 统的主体设计,测控 FPGA 芯片通过采集传感器脉冲信号 WCLK 进行里程计算,里程 计费,利用外部脉冲信号 SCLK 产生标准时钟信号,以计算等待时间,等待费用,并 产生里程标志(LCBZ),等待标志(DDBZ),熄灯标志(XDBZ)等有关控制标志信号,同 时根据单片机发出的开始信号(START) ,时段标志(SDBZ) ,传输数据选择 (SEL)等控制信号将有关计算结果传送给 FPGA 芯片。单片机 MCU 除了完成键盘 扫描,显示控制外,还通过 P0 口与 FPGA 进行数据交换,并向测控 FPGA 芯片发 出有关控制信号。本设计方案利用单片机和 FPGA 的结合,发挥它们各自的长处, 分工清晰,实际使用和操作符合大众逻辑,容易被人接受。而且,单片机丰富的 I/O 口和 FPGA 模块化的设计为系统功能的扩展提供了空间和便利。 关键词关键词 计费系统,单片机,计费系统,单片机,FPGAFPGA 芯片芯片 2 第第 1 1 章章 绪论绪论 出租车是现代人类的重要交通工具,而出租车的计费系统的安全性和先进性 是人们普遍关心的问题,要求计费器性能稳定,计费准确,以及预防司机作弊行 为等等都关系到乘客的切身利益。因此,设计出符合人们普遍要求及放心的产品 具有重要的意义。同时,设计该系统所应用的知识涉及范围广,通过设计可以牢 固掌握所学理论知识,对电子信息工程专业的就业方向有初步认识,将理论与实 际有机联系起来。应该是对以前所学知识的一次审核吧! 本设计主要介绍了出租车计费系统的设计思路和过程,并给出了所涉及的相 关知识的详细介绍。EDA 技术应用,单片机的功能及应用,传感器检测技术, VHDL 编程语言及汇编语言程序,显示系统设计及按键控制,等等。第一部分为绪 论,第二部分为方案论证,第三部分为系统设计,第四部分是硬件及软件实现, 第五部分系统检测及分析,第六部分是结论,第七部分是附录,第八部分是参考 文献,第九部分是致谢. 目前,普遍的出租车计费器仅仅具有时钟,起步价,里程计费,等待计费及 显示几个功能。其发展前景是可观的,将来的产品除具有这些功能外,另外还可 增加如下功能:防作弊功能,IC 卡付费:顾客能在制定点购买一定额度的“顾客 IC 卡”,乘车后可用 IC 卡付帐,付帐是否成功有相应的提示。车主可定期将总营 业额写入“车主 IC 卡”中,并据此 IC 卡向所属公司领取报酬。车票资料打印:顾 客付费后可打印发票,打印内容包括车主信息和车费信息等。可打印车主总营业 额信息。语音播报:当乘客上车时,可自动问候乘客,当到达目的地,自动播报 乘车费用并礼貌再见,表达希望下次乘坐的意思。增加的这些功能将会更好地为 乘客服务。 本系统设计也可应用于其他计费系统中,如电脑计费系统等等,其应用技术 也有相当范围的应用面,如显示和播报部分也可应用于智能饭卡智能电动车 机器人等电子相关产品中。可见掌握了该系统的设计和分析可实现对电子专业知 识的具体应用,增强理论联系实际的能力。除此以外,所涉及的知识面也联系到 现实生活中很多相关电子产品,也将对其他电子产品有一定理论基础。 信息工程学院毕业设计(论文) 3 第第 2 2 章章 系统系统设计设计 2.12.1 系统组成系统组成 其中系统电源电压为+16V。速度传感器不需要进行设计,假设它具有汽车 每运行 1提供 1000 个脉冲信号的特性。显示器采用 LED 数码管。具体功能要求 如下: 速度传感器 电电路路主主板板汽汽车车电电瓶瓶 + +9 9+ +1 16 6V V V 空空车车指指示示牌牌 显显示示器器 L LE ED D/ /L LC CD D /DC/DC (+5V) 图 2.1 系统方框图 2.1.12.1.1 计费及显示计费及显示 里程,即汽车行程里程,用四位数字显示,显示方式为“XXX.X” ,单位为 ,精确到 0.1。 单价,即里程单价,用三位数字显示,显示方式为“X.XX” ,单价为元/, 根据每天不同的时间段有两种情况:当时间段为 06:0023:00 时单价为 1.4 元/,其他时间段内单价为 1.80 元/。 等候时间,用四位数字显示分钟和秒,显示方式为“XX:XX” ,等候的定 义是:当汽车行驶速度小于或等于 12/h 时为“等候” 。在等候时间大于 1 小时 的情况下,可以不显示等候时间,但必须对等候时间进行统计计算。 等候单价,等候单价有两种情况:在等候时间小于 1 小时的情况下,等候 单价为 1 元每 5 分钟;在等候时间大于 1 小时的情况下,等候单价为 20 元每小 时。 费用的计算,出租车的起价为 5.00 元,当里程小于 2时,按起价计算费 用;当里程大于 2时按下式计算费用:费用=里程*里程单价+等候时间*等候单 价。 费用的显示,用五位数字显示,显示方式为“XXX.XX” ,单价为元。 2.1.22.1.2 时钟及显示时钟及显示 当出租车在通常运行状态下,应能显示当前的时间,在汽车熄火的情况下, 时钟必须正常运行,但是可以不显示时钟. 1 2.1.32.1.3 计费开始提示计费开始提示 当出租车载上乘客并起步后,将空车指示牌扳倒时,空车指示牌里的指示灯熄灭, 并有语音或灯光提示信号。 传传感感器器 时时钟钟信信号号 D DI IS SP PL LA AY Y P P3 3. .0 0- -P P3 3. .1 1 P P0 0 P P2 2. .2 2- -P P2 2. .0 0 P P2 2. .3 3 P P2 2. .7 7 P P2 2. .4 4 P P2 2. .5 5 P P2 2. .6 6 R RE ES SE ET T P P1 1. .0 0- -P P1 1. .5 5 M MC CU U X XD DB BZ Z D DD DB BZ Z L LC CB BZ Z S ST TA AR RT T S SD DB BZ Z S SE EL L D DA AT TA A 复复位位 F FP PG GA A 8 8 3 3 W WC CL LK K S SC CL LK K 显显示示切切换换 确确定定修修改改 启启动动空空车车牌牌 图 2.2 总体原理框图 2.22.2 功能模块设计功能模块设计 根据系统的设计要求,将整个测控 FPGA 系统 CZJFXT 分为七个模块,它们分别是: 分频器模块 FPQ,等待判别模块 DDPB,里程计算模块 LCJS,里程计费模块 LCJF,等待计 时模块 DDJS,等待计费模块 DDJF,输出数据选择模块 SCXZ。 分频器模块 FPQ:将外部时钟信号 SCLK(设计时假设为 1024HZ)经过适当分频后, 产生 1HZ 的系统工作用基准时钟信号 CLK1HZ,供给系统中的有关模块计时用。 等待判别模块 DDPB:根据速度传感器脉冲信号 WCLK 和分频器产生的基准时钟信号 CLK1HZ,计算单位时间里 WCLK 的脉冲个数(每产生 1000 个脉冲信号,即每米产生 1 个脉冲信号) ,亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志 信号 DDBZ。当速度大于 12/H,即速度大于 200M/MIN 时,出租车处于运行状态,这时 等待标志 DDBZ=0;当速度小于等于 12/H,即速度小于等于 200M/MIN 时,出租车处于 等待状态,这时等待标志 DDBZ=1。该模块的 VHDL 程序设计可分为三个进程:60S 周期性 跳变信号产生进程,每分钟行驶距离计算进程,等待标志判别进程。等待标志判别进程 就是比较每分钟 WCLK 脉冲个数与等待状态 WCLK 脉冲临界个数 200 的大小,从而确定 DDBZ 的赋值。 里程计算模块 LCJS:根据速度传感器脉冲信号 WCLK 和等待标志 DDBZ,对出租车行 驶的里程数 XSLC 进行计算,同时发出里程标志信号 LCBZ 和里程计费标志信号 JFBZ。如 果 LCBZ=1,说明行驶距离超过 2,里程计费启动;如果 LCBZ=0,说明没超过 2,按 起价计费,每行驶 1应计费 1 次,并且计费的启动信号应是某一时刻,因此每行驶 1, 2 计费标志信号 JFBZ 应跳变 1 次。该模块的 VHDL 程序设计可分为两个进程:里程计算及 标志产生进程,产生计费信号进程。产生计费信号进程就是每行驶 10 百米(即 1) JFBZ 由低电平 0 变为 1,经过一个系统时钟周期后 JFBZ 又回复到低电平 0,里程计费模 块 LCJF 就是在 JFBZ 脉冲信号的上升沿到来时进行计费的加法操作。 里程计费模块 LCJF:在计费标志信号 JFBZ,等待标志信号 DDBZ,里程标志信号 LCBZ 和时段标志信号 SDBZ 等信号的控制下,计算行驶里程超过 2以上里程的费用 LCFY。该模块的 VHDL 程序是通过由多个条件控制的加法进程来完成里程计费的,里程计 费的条件是在 DDBZ=0,并且在 JFBZ 的上升沿根据 SDBZ 分别进行加法计费操作。当 SDBZ=1 时,表示在 06:0023:00 时段,其单价 SD1 为 1.4 元/;当 SDBZ=0 时,表示 其他时段,其单价 SD2 为 1.8 元/。如果 LCBZ=1,说明行驶距离超过 2,里程计费启 动;如果 LCBZ=0,说明没超过 2,按起价计费。 等待计时模块 DDJS:在等待标志信号 DDBZ 和基准时钟信号 CLK1HZ 的控制下,进行 等待时间 DDSJ 的计算,其中 DDSJ 的低 8 位表示等待时间的秒数,DDSJ 的高 8 位表示等 待时间的分钟数,同时根据等待时间的长短发出一个熄灯标志信号 XDBZ。当等待时间小 于等于 1 小时,XDBZ=0,等待时间显示灯亮;当等待时间大于 1 小时,XDBZ=1,等待时 间显示不亮。该模块的 VHDL 程序是通过一个多层嵌套的加法进程来完成等待计时的。 等待计费模块 DDJF:在等待标志信号 DDBZ 和熄灯标志信号 XDBZ 控制下,进行等待 费用 DDFY 的计费操作。该模块的 VHDL 程序包括两个进程:60S 周期性跳变信号产生进程, 等待费用计算进程。等待费用计算的条件是在 DDBZ=1 并且在 60S 周期性跳变信号 T60S 的上升沿,根据 XDBZ 分别进行加法计费操作。当 DDBZ=1 且 XDBZ=0 时,按 1 元/5 分钟, 即 20 分/分钟计费;当 DDBZ=0 且 XDBZ=1 时,按 20 元/小时,即 33 分/分钟计费。 输出数据选择模块 SCXZ:根据单片机发出的数据传输选择控制信号 SEL,选择有关 计算处理结果传输给单片机。 3 第第 3 3 章章 硬件及软件实现硬件及软件实现 3.13.1 传感器传感器 传感器通常是指能感受并能按一定规律将所感受的被测非电量(包括物理量、化学量、 生物量等)转换成便于处理与传输的电量(一般为电量,也有少数为其他物理量,如光信号)的 器件或装置。 光电传感器是把光信号转换为电信号的传感器,光电传感器的种类极多。它们共同的 特点是响应速度快,易于实现非接触测量,非常适于与计算机接口。 3.1.13.1.1 光电传感器电路设计光电传感器电路设计 光电传感器工作时,大致应用了三种效应:通过光子与物质的相互作用能直接得到 电信号的量子效应;光被物质吸收变成热量后,利用热电转换得到电信号的热效应;光 作为一种电磁波,直接与物质相互作用,从而感应出电信号的波动相互作用效应。 反射式光电传感器是用来检测黑白线条的,如图 3.1.1(a)所示 由于黑白物体的反射系数不同,利用反射光可以使光敏三极管实现导通和断开,调 节传感器与被测对象之间的距离,使光敏三极管只能接受到白色物体反射回来的光束。 而黑色物体的反射系数小,所反射回来的光束很弱,光敏三极管无法接受到反射光。 从 而实现对黑白线条的检测。 还要在输出信号处加个控制电路,如图 3.1.1(b)起隔离强信号和方波整形的作用. (a) (b) 图 3.1.1 反射式光电传感器 4 3.1.23.1.2 车轮光电开关检测电路车轮光电开关检测电路 由于要测出出租车的运行速度,每 1 千米产生 1000 个脉冲信号并计算出单位时间 里的脉冲个数,转换成车轮所转的圈数,即产生脉冲数的多少。在该设计中采用在车轮 的转盘上安装一个 3 条黑白线均匀的圆盘,再用光电开关来检测,如下图 4.1.2 所示, 当出租车运动时,车轮转动,光电传感器利用接收黑白电平时输出的高低电平,当光电 传感器检测到黑色条纹时,输出高电平给单片机,相反当检测到白色条纹时输出低电平, 从而把连续输出高低电平转化为脉冲数,也就把电机转动时带动有黑白线的圆盘黑白条 数转换成脉冲数,从而测试出出租车运行速度。 Optoisolator1 U1 1K R1 11K R2 +5 传传 传传 传 +5 74HC14 IOB2 or IOB3 图 3.1.2 光电检测电路 用一张贴有黑色胶带的白纸,让光电传感器离纸不到5cm的平面上与胶带垂直经过,看 计数是否与所经过的的胶带数目相等,若多次测试都是吻合的,则此光电传感器良好. 3.23.2 单片机单片机 单片机既是一个微型的计算机,它具有组成计算机系统的三个要素:CPU、内存与 I/O。 CPU:运算或逻辑上的判断; 内存:存放程序与数据; I/O:与外界沟通的桥梁。 图 3.2.1 单片机简图 CPU 中央处理器 Memory 内存 I/O 输入/出设备 5 3.2.13.2.1 80518051 单片机功能方块图单片机功能方块图 图 3.2.2 8051 单片机功能方块图 振荡及时序单元(OSC): 8051 内部有晶体振荡电路,只要在外部加上石英振荡晶体,即可产生频率非常稳定 的振荡信号,这个振荡信号正是 8051 的心脏,所有 8051 的时钟序列都以此振荡信号为 基准。 内部数据存储器(Data Memory): 当程序在运行时,有些数据是经常在变动的,例如 LED 的显示状态或显示值等,它 会因 I/O 测量的结果而变动,这些值就暂时放置在此区域中,供其他程序进一步读取, 这也代表此区域是可以随时读写的。8051 系列的 CPU 提供 128 个字节可读写的数据存储 单元,52 系列的 CPU 则提供 256 个字节的数据存储单元,这个数据区域中有一段区域 16 个字节共 128 位是可以进行位寻址的,MCS51 系列的 CPU 有相当强的位处理指令,可以 妥善且有效地运用该数据存储器,使用方法将在 8051 的指令说明中再详述。 内部程序存储器(Program memory): 这段区域用于存放我们的应用程序,而且这部分一经确认后是永远不做修改的。 8051 系列的 CPU 提供内部 4096 个字节(4KB)的程序存储器,8052 系列的 CPU 则提供 2 倍即 8192 个字节(8KB)的程序存储器,而 8031 和 8032 则不含此单元。此单元可以 使 CPU 选择由内部的程序区启动或由外部的程序区启动,内部的程序区启动具有保护功 能,后者成本较为低廉。在 8051 系统中特地将程序区和数据区分隔开,两者最大的差异 SERIAL PORT 4 I/O PROT BUS CONTROL OSC 振荡与时序 CPU 8051 CORE ETC (TIMER2 ) TIMER1 TIMER0 ON-CHIP RAM 128/(256 ) Bytes ON-CHIP PROGRAM MEMORY 4K/(8K) INTERRUPT CONTROL INT1 INT0 EXTRNAL INTERRUPTS 指令分析 中断 系统 统 控制总线 串行接口 并行接口 TXDRXD P0P2P1P3 ROM RAM WR RD PSENALE COUNTER INPUTS 定时/计数器 EA EXTRNAL INTERRUPT S TIMER0 TIMER1 (TIME R2) SERIAL 6 是后者可以读取和写入,简而言之,PROGRA MMEMORY 就是 ROM,DATA MEMORY 则是 RAM。 定时/计数器(Timer/Counter): 51 系列的 CPU 有 2 个定时/计数器,而 52 系列 CPU 则有 3 个定时/计数器,每个定 时/计数器又有多种模式可供选择。 串行接口(Serial Port): 8051 可通过此接口与外部的计算机等设备连线交换信息,也可以通过此接口进行 I/O 的扩充。 并行输入/出端口(Parelled I/O): 不论是 8051 或 8052 单片机都有 4 个输入/出端口,总共有 32 个输入/出,而且每个 点都可以单独定义成输入或输出。 控制总线(Bus Control): 当程序的空间超出 MSC51 系列内存程序空间的限制时,会通过本单元的控制线路 向外部送出地址线信号和控制信号,同时当程序执行 MOVX DPTR,A 指令时,代表对外 部数据内存做写入的运行,此时也要靠本单元送出必要的控制信号,才能达成外部 READ 与 WRITE 的运行请求。 8051 运算处理单元(Core): 这是整个单片机的控制处理核心,它读取程序码,经过计算及处理后,将结果送到 各个寄存器或输入/输出端口上,并且接受内部和外部的中断信号,然后执行特定的中断 服务程序。只要加入电源并且石英晶体开始运行后,本单元就一直不停地工作着,通常 我们所谓的死机是指本单元跳入一个未知没有出口的循环中执行,而不是指 CPU 停止一 切的运行,不再执行任何程序。 累加器(Accumulator): 累加器是众多寄存器中最重要的一个寄存器,通常以简写 Acc 代表累加器,8051 的 指令中有许多指令和 Acc 寄存器有关,也有多个指令非通过 Acc 不可,基本上,8051 的 指令中赋予 Acc 累加器的权限最大。Intel 公司建议程序的执行尽量以 Acc 为主。 B 寄存器(B Register): B 寄存器是一个一般用途的工作寄存器,当 8051 使用乘除指令时,则一定要通过 B 寄存器来做运算。 中断优先顺序控制寄存器(IPC,Interrupt Priority Control): 这个寄存器中存放中断时的优先顺序表,若对应的位设成 1 时,代表中断有较高的中 断优先权。 允许中断控制寄存器(IEC,Interrupt Enable Control): 此寄存器内含系统允许中断的中断源设置值,8051 共有 5 个中断可供选择,8052 则 有 6 个中断源,IEC 寄存器内另有一个位简称位,若0 时就禁止系统所有的中断EAEA 7 要求。 串行输出入缓冲寄存器(SBUF,Serial Buffer): 所有待送出或刚进入的串行数据值都存放在此寄存器中,8051 的串行通信是非常简 单的,只要一设置完通信协议后,再执行一个 MOVSBUF,A 指令,就可立即将并行数据值 转化成串行数据送到外部。 串行通信控制寄存器 (SCON,Serial ControL 或称 UART): 此寄存器主要在设置串行通信的模式,当串行数据已经送完或数据已收妥时,会有 对应的位被设置成 1,这些位也可以当成中断要求信号,请求 CPU 执行特定的串行中断服 务程序。 定时/计数控制寄存器(TCON,Timer/Counter Control): 这个寄存器可以控制定时/计数器的打开或关闭,若一经打开且计数到溢位时,TCON 上亦有对应的位被设成 1,CPU 必须针对此位的状态,决定是否重新设置定时/计数值。 堆栈指标寄存器(SP,Stack Pointer): 8051 利用 SP 指引最近一次存入堆栈内的地址,每当我们在程序中调用其他子程序时, 原程序的返回地址就会自动存入内部 DATA MEMORY 组成的堆栈(Stack)中,而当子程序 执行到 RET 指令时,CPU 会自动由堆栈中取回原先存入的返回地址,继续执行原程序。每 当 CPU 将 8 位值存入堆栈时,我们称之为 PUSH(推入) ,这时 SP 值会增加 1,反之堆栈 中取回 8 位值时,则称之为 POP(提回) ,此时 SP 值会减少 1。 在写 8051 单片机的控制程序时,在程序起始状态阶段一定要设置 SP 值,以便程序 有足够的堆栈空间,也可以利用软件程序随时机动调整的堆栈指标 SP 的值。 特殊功能寄存器区(SFR,Special Function Register) 8051 单片机内部将多个寄存器统称成 SFR,代表其特定的功能,甚至 Port0、Port1、Port3 也都是属 SFR 的成员之一,在这些 SFR 中有部分的寄存器可以进 行位寻址,表 4.1 是这些 SFR 寄存器的整理,其中加(*)记号的寄存器可进行位寻址。 表 3.1 可进行位寻址的 SFR 寄存器 SFRSFR 寄存器寄存器部分可进行位寻址的寄存器部分可进行位寻址的寄存器 算术运算寄存器Acc(*) 、B(*) 、PSW(*) 指标类寄存器SP、DPL、DPH 并行输入/出端口P0(*) 、P1(*) 、P2(*) 、P3(*) 中断控制寄存器IP(*) 、IE(*) 定时/计数寄存器TMOD、TCON(*) 、TL0、TH0、TL1、TH1 串行通信寄存器SCON(*) 、SBUF 8 3 3.2.2.2.2 AT89S51AT89S51 单片机简介单片机简介 AT89S5l 是新型高档单片机。 它的主要特性是: 片内含有 32 KB 的 Flash 程序存储器,擦写周期为 1000 次; 片内数据存储器内含 512 字节的 RAM; 具有可编程 32 线 I/O 口(P0,P1,P2 和 P3 口) ; 具有 3 个可编程定时器 T0,T1 和 T2; 中断系统是具有 8 个中断源、6 个中断矢量、2 级中断优先权的中断结构; 具有一个全双工 UART 串行口; 低功耗工作方式为空闲模式和掉电模式; 具有双数据指针 DPTR0 和 DPTR1; 具有 3 级程序锁定位; 具有硬件看门狗定时器 WDT; AT89S51 工作电源为 4.05.5V(AT89LV51RC 为 2.75.5V) ; AT89S51 最高工作频率为 33MHZ(AT89LV51RC 为 12MHZ) ; 具有断电标志 POF 3 3.2.3.2.3 AT89S5lAT89S5l 与与 5151 系列单片机相比具有如下特点系列单片机相比具有如下特点 程序存储器由 8 KB 增加到 32 KB; 片内数据存储器由 256 宇节增加到 512 字节; 数据指针由 1 个增加到 2 个; 增加了看门狗定时器,CPU 在执行程序过程中,由于瞬时的干扰使程序陷入死循 环状态,WDT(Watchdog Timer)是使 CPU 摆脱这种困境而自动恢复的一种方法; 退出掉电方式由单纯硬件复位方式增加到硬件复位和中断两种方式; 新增加了断电标志 POF 9 3 3.2.4.2.4 89S5189S51 的内部框图的内部框图 振荡器和 时钟电路 CPU 总线扩展 控制器 程序存储器 (4KB) 并行可编程 I/O口 中断控制可编程串行口 两个16位 定时器/计数器 数据存储器 (128字节) 外时钟源 外部事件计数 图 3.2.3 89S51 的内部框图 引脚排列及功能: AT89S51 有 3 种封装形式:PDIPPLCC 和 TQFPPDIP 封装的引脚排列如图所示。 P10 P11 P12 P13 P14 P15 P16 P17 INT1 INT0 T1 T0 X2 X1 RESET RD WR VP/EA P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23 P24 P25 P26 P27 RXD TXD PSEN PALE/ AT89S51 P1 .0 P1. 1P 1 .2 P1.3 P1.4 P1.5 P1.6 P1.7 1 2 3 4 5 6 7 8 13 12 15 14 31 19 18 VCC X1 X2 9 17 16 39 38 37 36 35 34 33 32 D0 D1 D2 D3 D4 D5 D6 D7 21 22 23 24 25 26 27 28 A8 A9 A10 A11 A12 A13 A14 A15 10 11 30 29 C1 10 F R1 10 k S3 SW_PB C3 30 pF C1 30 pF CRYSTAL 12M X2 X1 P1.7 P1.6 S1 SW_PB S2 SW_PB VCC GND GND 图 3.2.4 单片机电路板 口线 10 P0 口8 位、漏极开路的双向 1O 口。 当使用片外存储器及外扩 IO 口时,P0 口作为低字节地址数据复用线。在编程 时,P0 口可用于接收指令代码宇节;在程序校验时,P0 口可输出指令字节(这时需要加 外部上拉电阻) 。 P0 口也可作通用 I/O 口使用但需加上拉电阻变为准双向口。当作为普通输入时, 应将 输出锁存器置 1 PO 口可驱动 8 个 TTL 负载 P1 口8 位、准双向 IO 口,具有内部上拉电阻。 P1 口是为用户准备的 1O 双向口。在编程和校验时,可用做输入低 8 位地址。用做 输入时,应先将输出锁存器置 1 P1 口可驱动 4 个 TTL 负载。 表 4.2 P1.0 P1.1 替代功能 引 脚替代功能说 明 P1.0T2 定时器 2 的外部事件输入端; 可编脉冲输出端 P1.1T2EX 定时器 2 的捕捉重装触发器 输入端; 定时器 2 的计数方向控制端 P2 口8 位、准双向 1O 口具有内部上位电阻 当使用片外存储器或外扩 1O 口时P2 口输出高 8 位地址。在编程校验时P2 口可接收高字 节地址和某些控制信号。 P2 口也可作普通 IO 口使用。用做输入时,应先将输出锁存器置 1 P2 口可驱动 4 个 TTL 负载。 P3 口8 位、准双向 1O 口,具有内部上拉电阻。 P3 口可作为普通 1O 口。用做输入时,应先将输出锁存器置 1在编程校验 时P3 口接收某些控制信号。它可驱动 4 个 TTL 负载。 P3 口还提供各种替代功能。 表 3.3 P3 口替代功能 P3.0RXD(串行输入口) P3.1TXD(串行输出口) P3.2Error!Error!(外部中断 0) P3.3Error!Error!(外部中断 1) P3.4T0(记时器 0 外部输入) P3.5T1(记时器 1 外部输入) P3.6Error!Error!(外部数据存储器写选通) P3.7Error!Error!(外部数据存储器读选通) 11 控制信号线 RST复位输入信号,高电平有效。在振荡器稳定工作时,在 RST 脚施加两个机器 周期(即 24 个晶振周期)以上的高电平,将器件复位。 Error!Error!VPP外部程序存储器访问允许信号 EA(External Access Enable) 。 当Error!Error!信号接地时,对 ROM 的读操作限定在外部程序存储器,地址为 0000HFFFFH;当Error!Error!接地时,对 ROM 的读操作从内部程序存储器开始,并可延续至 外部程序存储器。 在编程时,该引脚可接编程电压(AT89C51 的 VPP 为 5V 或 12V;AT89LV51 的 VPP 为 12 V) 。在编程校验时,该引脚可接 VCC。 Error!Error!片外程序存储器读选通信号用 PSEN(Program Store Enable),低电平有 效 在片外程序存储器取指令期间,当Error!Error!有效时,程序存储器的内容被送至 PO 口 (数据总线) ;在访问外部 RAM 时,Error!Error!无效。 AIE/Error!Error!低字节地址锁存信号 AlE(Address latch Enable) 。 在系统扩展时,AlE 的下降沿将 PO 口输出的低 8 位地址锁存在外接的地址锁存器中, 以实现低字节地址和数据的分时传送。此外,ALE 端连续输出正脉冲频率为晶振频率的 16, 可用做外部定时脉冲使用。但要注意,每次访问外 RAM 时要丢失一个 ALE 脉冲。 在编程期间该引脚输入编程脉冲(Error!Error!) 。 电源线 VCC电源电压输入。 GND接地。 外部晶振引线 XTAL1片内振荡器反相放大器和时钟发生线路的输入端。使用片内振荡器时,连 接外部石英晶体和微调电容。 XTAL2片内振荡器反相放大器的输出端。当使用片内振荡器时,外接石英晶体 和微调电容。 当使用外部振荡器时,引脚 XTAL1 接收外振荡器信号,XTAIL2 悬空。 3 3.2.5.2.5 中断控制中断控制 可采用中断的时机: 当计数值数完时要做一个特定的动作。 当外部信号有一个脉冲信号产生时要做某种特定的运算。 当外部某些信号成立时,必须立即处理。 当收到通信界面上的一个特定值时,必须立即反应。 当程序必须处理数个小程序,且这些程序必须几乎同时都在执行中。 12 当程序必须随时更新某项数据或显示值。 当程序必须自动且随时去检查系统中的状态值时。 上述的情形亦可采用平常的程序,以持续或经常询问的写法来应付,但是若系统有 多个条件要询问时,写法就会变得相当的复杂。假如改用程序中断的写法,则程序的写 法就会变得较单纯些,中断程序通常有以下一个或一个以上的特征,假使我们的应用中 发现有这些特征时,在程序规划前就要考虑是否采用中断的写法。 特征 1:每隔一个时间间隔就必须做某件特定的事情。 特征 2:当某个条件(不论软件或硬件线路)成立时,就让 CPU 立即处理。 特征 3:CPU 正以多任务(Multi-task)的模式,同时处理数个程序或信号。 特征 4:某项状态可能平时均不成立,可是一成立时,CPU 必须立即停止原先的动 作,马上来处理这个状态。 3.2.63.2.6 单片机控制程序设计单片机控制程序设计 单片机模块包括单片机 AT89S51 及其控制的显示和键盘系统,AT89S51 对 FPGA 的数据 进行计算,计算出用车总费用并送入显示系统显示,同时它接收键盘信息并处理显示切 换。系统采用 6+1 显示,6 个数码管作常规显示,一个数码管作状态显示。按键共有 5 个, 分别是功能切换键,确定键,修改键,启动模拟键和空车牌压下模拟键。 S SP P6 60 0H H P P2 2# #0 00 0H H 定定时时器器0 0, ,工工作作方方式式1 1 定定时时5 50 0 m ms s 启启动动定定时时器器工工作作, ,开开中中断断 开开始始 清清内内存存 调调用用键键处处理理 图 3.2.5 主程序流程图 13 键键处处理理开开始始 置置标标志志位位R RU UN NB BZ Z N N N N Y Y Y Y Y Y Y Y Y Y N N N N N N N N N N N N Y Y Y Y Y Y N N N N Y Y N N Y Y N N 汽汽车车启启动动没没有有? ? Z ZK KB BZ Z1 1 送送载载客客标标志志给给F FP PG GA A Y Y 调调用用当当前前时时间间修修改改子子程程序序 调调用用里里程程单单价价显显示示子子程程序序 Y Y 调调用用里里程程显显示示子子程程序序 调调用用费费用用显显示示子子程程序序 有有键键按按下下吗吗? ? 是是功功能能键键S SB B0 0? ? R RU UN NB BZ Z= =1 1? ? 有有键键按按下下吗吗? ? 是是S SB B0 0吗吗? ? 有有键键按按下下吗吗? ? 是是S SB B0 0吗吗? ? 有有键键按按下下吗吗? ? 是是S SB B0 0吗吗? ? 有有键键按按下下吗吗? ? 有有键键按按下下吗吗? ? 图 3.2.6 按键处理流程图 14 N N Y Y Y Y N N N N Y Y 显显示示子子程程序序开开始始 R R0 0# #L LE ED D8 8 R R1 1# #0 08 8H H A A( (R R1 1) ) N N A A( (R R1 1) ) A A Y Y N N R R0 0# #F FY YD DY Y8 8 A A( (R R1 1) ) 查查表表 添添加加小小数数点点 查查表表 显显示示数数据据送送串串行行口口 R R1 1R R1 1- -1 1 返返回回N N Y Y Y Y A A N N Y Y Y Y N N 2 28 8H H. .0 0= =0 0? ? 2 28 8H H. .6 6= =0 0? ? ( (R R1 1) )= =# #0 05 5H H? ? ( (R R1 1) )= =# #0 02 2H H? ? ( (R R1 1) )= =# #0 03 3H H? ? R R1 1= =0 0? ? 2 28 8H H. .0 0= =0 0? ? 2 28 8H H. .6 6= =0 0? ? 图 3.2.7 显示子程序流程图 15 赋赋数数码码管管显显示示参参数数 N N 里里程程显显示示子子程程序序开开始始 P P2 2. .1 11 1 R R0 0# #4 4F FH H R R3 3# #0 02 2H H 读读P P0 0口口数数据据放放4 4D D4 4F FH H R R3 3R R3 3- -1 1 ( (R R3 3) )= =0 0? ? P P2 2# #0 0F F8 8H H 2 22 22 20 0H H4 4D D4 4F FH H L LC CA AL LL L H HE EX XB BC CD D2 2 S SE ET TB B 2 28 8H H. .6 6 返返回回 Y Y 图 3.2.8 里程显示子程序流程图 16 赋赋数数码码管管显显示示参参数数 N N 乘乘车车费费用用显显示示子子程程序序开开始始 P P2 2# #0 0F F8 8H H R R0 0# #4 4F FH H R R3 3# #0 02 2H H 读读P P0 0口口数数据据放放4 4D D4 4F FH H R R3 3R R3 3- -1 1 P P2 2# #0 0F F8 8H H 5 5F F, ,5 5E EH H存存放放( (5 50 00 0) )D D L LC CA AL LL L A AD DD DM MB B 2 22 22 20 0H H4 4D D4 4F FH H L LC CA AL LL L H HE EX XB BC CD D2 2 S SE ET TB B 2 28 8H H. .0 0 返返回回 ( (R R3 3) )= =0 0? ? Y Y 图 3.2.9 乘车费用显示子程序流程图 3.2.73.2.7 单片机汇编语言源程序单片机汇编语言源程序 ;CZJFXT.ASM LED8 EQU 7FH LED7 EQU 7EH ;时间显缓 LED6 EQU 7DH LED5 EQU 7CH LED4 EQU 7BH 17 LED3 EQU 7AH LED2 EQU 79H LED1 EQU 78H FUNKEY EQU P1.0 ;功能 SELKEY EQU P1.1 ;选择 FIXKEY EQU P1.2 ;修改 RUN EQU P1.4 ;运行信号(传感器) RUNBZ EQU 28H.4 ZK EQU P1.5 ;载客信号-单片机(传感器) ZKBZ EQU 28H.2 ;载客标志 SZKBZ EQU P2.7 ;送 FPGA 的载客标志 INT_R1 EQU 46H INT_R0 EQU 47H INT_R2 EQU 48H KEYNUM EQU 49H ADA EQU P2.0 ADB EQU P2.1 ADC EQU P2.2 SDBZ EQU P2.3 ;时段标志 LCBZ EQU P2.4 ;里程标志 DDBZ EQU P2.5 ;等待标志 DDBZC EQU 28H.5 XDBZ EQU P2.6 ;等待超过 1 小时标志 FYDY8 EQU 3FH ;费用显缓 FYDY7 EQU 3EH FYDY6 EQU 3DH FYDY5 EQU 3CH FYDY4 EQU 3BH FYDY3 EQU 3AH FYDY2 EQU 39H FYDY1 EQU 38H ;主程序 START: JMP MAIN ;转移到主程序 ORG 000BH ;中断服务入口地址 18 LJMP PIT0 ORG 30H MAIN: CLEAR:MOV R0,#00H MOV R1,#128 MOV A,#00H L1: MOV R0,A INC R0 DJNZ R1,L1 MOV P2,#00H MOV SP,#60H ;开辟堆栈区 MOV TMOD,#01H ;定时器 0,定时工作方式 1,16 位 MOV TL0,#0B0H ;初值为 4C00H,50MS MOV TH0,#03CH SETB TR0 ;启动定时器工作 SETB IE.7 ;中断总允许 SETB IE.1 ;允许定时中断 MOV 30H,#14H ;中断循环次数初值为 20 次 ML2:LCALL KKEYI MLL3:CJNE A,#04H,ML4 SETB RUNBZ SJMP ML2 ;调用键盘扫描程序 ML4: CJNE A,#00H,MLL1 CLR 28H.0 CLR 28H.6 LCALL SJJZ LCALL KKEYI CJNE A,#00H,MLL3 LCALL LCDJDISP LCALL KKEYI CJNE A,#00H,MLL3 CLR 28H.0 LJMP ML6 LCALL KKEYI 19 MLLL1:CJNE A,#00H,MLL3 LJMP ML5 MLL1:JNB RUNBZ,ML2 CJNE A,#05H,ML2 SETB ZKBZ SETB SZKBZ NOP LCALL DELAY3 CLR SZKBZ ;LCALL QJDISP ;起价显示 ML5:LCALL FYDISP ;费用显示 LCALL KKEYII JNB 28H.3,ML3 ;有键按下转 ML3 LJMP ML5 ;没键按下继续刷新费用显示 ML3:LJMP MLL3 ML6:LCALL LCDISP LCALL KKEYII JNB 28H.3,MLLL1 LJMP ML6 DDDISP: ;等待时间显示子程序 MOV FYDY8,#0DH MOV FYDY7,#12H MOV FYDY6,#12H RET ;时间校正子程序 SJJZ:MOV R6,#03H MOV 40H,#LED6 SJL0:LCALL KKEYI CJNE A,#01H,NEXT3 SJL3:LCALL KKEYI SJL1:CJNE A,#02H,NEXT3 MOV A,R6 CJNE A,#03H,SL0 MOV R0,40H LCALL DAAD1 20 MOV A,R2 ;是否到了 60S? XRL A,#24H JNZ SJL4 ;不到,转 RET1 返回 LCALL CLR0 ;到了 60S,则秒显示缓冲单元清 0 LJMP SJL4 SL0:CJNE A,#02H,SL1 MOV R0,40H LCALL DAAD1 MOV A,R2 ;是否到了 60S? XRL A,#60H JNZ SJL4 ;不到,转 RET1 返回 LCALL CLR0 ;到了 60S,则秒显示缓冲单元清 0 LJMP SJL4 SL1:CJNE A,#01H,SJL4 MOV R0,40H LCALL DAAD1 MOV A,R2 ;是否到了 60S? XRL A,#60H JNZ SJL4 ;不到,转 RET1 返回 LCALL CLR0 ;到了 60S,则秒显示缓冲单元清 0 LJMP SJL4 SJL4:LCALL KKEYI CJNE A,#01H,SJL1 DEC 40H DEC 40H DJNZ R6,SJL3 NEXT3:RET ;起价显示参数子程序 QJDISP:SETB 28H.0 MOV FYDY8,#0FH MOV FYDY7,#12H MOV FYDY6,#12H JB 28H.1,NEXT9 MOV FYDY5,#00H MOV FYDY4,#00H 21 MOV FYDY3,#05H MOV FYDY2,#00H MOV FYDY1,#00H NEXT9:RET ;

温馨提示

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

最新文档

评论

0/150

提交评论