《汇编语言计数器出租车计费-学位论文.doc》由会员分享,可在线阅读,更多相关《汇编语言计数器出租车计费-学位论文.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、提供全套毕业设计,欢迎咨询单片机原理与应用课程设计报告院 系 :湖南工业大学理学院专业(级):12电子科学(1)班姓 名:学 号:指导教师:职 称:完成日期:2014 年 12 月 12日目 录1 引 言12设计任务与要求22.1 设计任务22.2 设计要求33 方案总体设计33.1 显示时间方案的选择23.2 总体设计23.3总体设计24 硬件设计34.1.0 单片机最小系统34.1.1 STC89C52单片机特性参数44.1.2 STC89C52RC主要引脚功能54.1.3 STC89C52RC的中断源54.1.4 时钟电路54.1.5 复位电路64.2 数码换显示电路64.3 整体电路9
2、5 软件设计95.1 KEIL C简介95.2 程序流程图95.3 keil调试过程186 系统仿真与实现206.1 proteus仿真软件简介206.2 仿真调试过程206.3 实物制作227 设计总结23参 考 文 献24(页码有误,大家可以改一下)251 引 言十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬
3、件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。2设计任务与要求21 外部脉冲自动计数,自动显示。211设计一个255计数器:0255计数,计满后自动清0,重新计数(在数码管中显示)。255计数设计思路:255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。然后对TL1的内容进行相应的二进制-十进制转换:首先TL1的内容除以6
4、4H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。接着将相应的十进制数进行译码,并在LED数码管上显示出来。每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。212设计一个50000计数器:050000计数,计满后自动清0,重新计数(在数码管中显示)。22 设计一个出租车计费系统: 起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前4位显示数码管显示里程数,后4位数码管显示价钱(角,元,十元,百元)2.3设计要求要求首先采用PROTEUS完成单片机最小系统的硬件电路设计
5、及仿真实现2.1外部脉冲计数;程序仿真测试通过后,再下载到单片机实训板上执行1.2出租车计费系统。3 方案总体设计3.1 显示时间方案的选择方案一:采用数码管显示,半导体数码管不仅具有工作电压低、体积小、寿 命长、可靠性高等优点,而且响应时间短(一般不超过0.1us),亮度也比较高。方案二:采用液晶显示,液晶显示器的最大优点是功耗极小。但是,由于它本身不会发光,仅仅靠反射外界光线显示字形,所以亮度很差。通过上述两种方案的对比,显然可以发现,对于交通灯时间的显示,数码管显示更加适合,可靠,所以选择方案一。4 硬件设计4.1.0单片机最小系统单片机最小系统由一块单片机、一个时钟电路和一个复位电路组
6、成。如图3所示。图14.1.1 STC89C52RC主要参数STC89C52RC单片机8K字节程序存储空间;512字节数据存储空间;内带2K字节EEPROM存储空间;可直接使用串口下载;8K字节程序存储空间;256字节数据存储空间。1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2.工作电压:5.5V3.3V(5V 单片机)/3.8V2.0V(3V 单片机)3.工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz;4.用户应用程序空间为8K字节;5.片上集成512字节RAM;6.通用I/O口(32个)
7、,复位后为:P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻,设计电路时需要注意这点。共3个16位定时/计数器,分别为T0,T1,T2.4.1.2 STC89C52RC主要引脚功能STC89C51引脚图如图4所示,其主要芯片功能如下所示。图2 STC89C52引脚图VCC:电源电压GND:接地P0口:P0口是一组8位双向I/O口。P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。P1口:P1是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。P2口:P2是一个带有内部上拉电阻的8 位准
8、双向I/O口 P3口:P3口是一组带有内部上拉电阻的8 位准双向I/0口RST:复位输入PSEN()程序储存允许(PSEN())输出是外部程序存储器的读选通信号EA()/VPP:外部访问允许XTAL1:振荡器反相放大器及内部时钟发生器的输入端XTAL2:振荡器反相放大器及内部时钟发生器的输:出端4.1.3 STC89C52RC的中断源89C52有6个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、三个片内定时/计数器溢出中断TF0,TF1,TF2、一个是片内串行口中断TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。4.1.4 时钟电路此次设计的时钟电
9、路由一个12MHz的晶振和两个22PF的陶瓷贴片电容组成。89C52芯片内部有一个高增益反相放大器,用于构成振荡器。引线XTAL1和XTAL2分别为反向放大器的输入和输出,两端跨接石英晶体及两个电容就可构成稳定的自激振荡器。而电容器C1,C2起稳定振荡频率,并对振荡频率有微调作用,C1和C2可在20-100PF之间取值,这里取22PF。电路如图3所示。图3 时钟电路4.1.5 复位电路手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也
10、会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。通常采用手动复位和上电自动复位结合,其电路如图6所示。图4 复位电路4.2 数码换显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示。我采用的是数码管显示电路。用八个共阴极数码管显示,LED是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。共阴数码管的码表为如表2所示。表2 共阴数码管码表01234567890x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态
11、显示所使用的端口比较少,可以节省单片机的I/O口。LED数码管的显示原理:数码管有段选与位选两个使能端,由于采用共阴极数码管,要把数码管点亮,就必须给位选选通,至于显示什么数字,只需给段选输入数据即可。通过给52单片机P0口送入初始值,并用P0口来控制段选位,P2.6、P2.7口来控制位显来实现动态显示,来显示各灯所在状态的显示时间。在设计中,我们采用LED数码管动态显示,用P0口驱动显示。由于P0口的输出级时,数码管显示的亮度不够,根据以前学习的知识及学长们的经验,只需给P0口强势上拉10K排阻,经实验验证,P0口上拉10K排阻后,数码管显示较亮。电路图如图7所示。图5 数码管显示电路其中单
12、片机P0口与数码管各引脚之间的连接关系分别为: P0.0-a P0.1-b P0.2-c P0.3-d P0.4-e P0.5-f P0.6-g P0.7-Dp其中a,b,c,d,e,f,g,Dp在数码管上的位置如图8所示。图6 数码管4.3 整体电路将各模块电路整合到一起就形成了系统工作电路,如图7所示。在altium designer 中画出电路原理图,检查电路没有错误后,可在proteus环境下进行仿真,就可看到整个系统的工作状态,即可模拟出实际交通灯的工作状态。图7 整个电路工作原理图5 软件设计5.1 KEIL C简介KEILC51标准C编译器为8051微控制器的软件开发提供C语言环
13、境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境。C51V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。5.2 程序流程5.2.1计数程序流程图开始初始化堆栈,定时器初始化清零相关RAM地址单元TF1=1?调用显示子程序脉冲数加1即20H加120H=100?21H加
14、120清零计算出脉冲数的个,十,百位分别存放于30H,31H,32H(20H=54)&(21H=2?)脉冲数计到255后重新计数即20H,21H清零说明:1. 20H存放脉冲的个位和十位数值,21H存放脉冲的百位和千位数值。 2.计算脉冲数的个位和十位数值:(20H)/10的商即十位数值存放于31H,余数即个位数值存放于30H。 3. 计算脉冲数的百位数值:(20H)/10的余数即百位数值存放于32H。例如:脉冲数212(十进制),(20H)=12,(21H)=2。脉冲的个位数值(30H)=2, 脉冲的十位数值(31H)=1, 脉冲的百位数值(32H)=2. 255计数程序流程图5.2.2循环
15、计数0255 ORG 0000H GEE EQU 20H SHI EQU 21H BAI EQU 22H LJMP MIAN ORG 0030H MIAN:MOV P2,#0 MOV SP,#90H MOV TMOD,#60H MOV TH1, #00H ;此指令可有可无 MOV TL1, #00H SETB TR1 LOOP:ACALL DISPLAY SJMP LOOP ;显示子程序 DISPLAY: MOV A,TL1 MOV B,#100 DIV AB MOV BAI,A MOV A,B MOV B,#10 DIV AB MOV SHI,A MOV GEE,B MOV DPTR,#TA
16、B MOV R0,#3 MOV A,BAI ;输入百位 MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0DFH SETB P2.7 NOP ACALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,SHI ;输入十位 MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0BFH SETB P2.7 NOP ACALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,GEE ;输入个位 MOVC A,A+DPTR MOV P0,A SET
17、B P2.6 NOP CLR P2.6 MOV P0,#7FH SETB P2.7 NOP ACALL DELAY MOV P0,#0FFH CLR P2.7 RET DELAY: MOV R3,#80 DJNZ R3,$ RET TAB: DB 3FH, 06H, 5BH, 4FH, 66H DB 6DH, 7DH, 07H, 7FH, 6FH END5.2.2循环计数050000 ORG 0000H GEE EQU 20H SHI EQU 21H BAI EQU 22H QIA EQU 23H WAN EQU 24H LJMP MIAN ORG 0003H LJMP INTO ORG 00
18、30H MIAN:MOV P2,#0 MOV SP,#90H SETB EA SETB EX0 SETB IT0 MOV GEE,#0 MOV SHI,#4 MOV BAI,#3 MOV QIA,#2 MOV WAN,#1 LOOP:ACALL DISPLAY SJMP LOOP ;显示子程序 DISPLAY: MOV DPTR,#TAB MOV A,WAN MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0F7H SETB P2.7 NOP LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,QIA MO
19、VC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0EFH SETB P2.7 NOP LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,BAI MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0DFH SETB P2.7 NOP LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,SHI MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0BFH SETB P2.7
20、 NOP LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,GEE MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#7FH SETB P2.7 NOP LCALL DELAY MOV P0,#0FFH CLR P2.7 RET ;中断程序 INTO: LCALL DELAY1 PUSH ACC MOV A,WAN CJNE A,#5,LOOP1 MOV WAN,#0 SJMP LOOP2 LOOP1: INC GEE LOOP2: MOV A,GEE CJNE A,#10,GOO MOV GEE,#0 I
21、NC SHI MOV A,SHI CJNE A,#10,GOO MOV SHI,#0 INC BAI MOV A,BAI CJNE A,#10,GOO MOV BAI,#0 INC QIA MOV A,QIA CJNE A,#10,GOO MOV QIA,#0 INC WAN GOO: POP ACC RETI DELAY: MOV R3,#80 DJNZ R3,$ RET DELAY1:MOV R1,#2 LOOP4:MOV R0,#255 LOOP3:NOP NOP DJNZ R0,LOOP3 DJNZ R1,LOOP4 RET TAB: DB 3FH, 06H, 5BH, 4FH, 66
22、H DB 6DH, 7DH, 07H, 7FH, 6FH END5.2.2出租车计费系统 ORG 0000H GEE EQU 20H SHI EQU 21H BAI EQU 22H QIA EQU 23H MGE EQU 24H MSH EQU 25H MBA EQU 26H MQI EQU 27H LJMP MIAN ORG 0013H LJMP INTO ORG 0030H MIAN:MOV R5,#20 MOV R6,#25 MOV P2,#0 MOV SP,#90H SETB EA SETB EX1 SETB IT1 MOV GEE,#0 MOV SHI,#0 MOV BAI,#0 M
23、OV QIA,#0 MOV MGE,#0 MOV MSH,#5 MOV MBA,#0 MOV MQI,#0 LOOP:ACALL DISPLAY LJMP LOOP ;显示子程序 DISPLAY: MOV DPTR,#TAB MOV A,QIA MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0FEH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV A,BAI MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0FDH SETB
24、P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV DPTR,#TABO MOV A,SHI MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0FBH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 MOV DPTR,#TAB MOV A,GEE MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0F7H SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 ;计费千 M
25、OV DPTR,#TAB MOV A,MQI MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0EFH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 ;计费百 MOV A,MBA MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#0DFH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 ;计费十 MOV DPTR,#TABO MOV A,MSH MOVC A,A+DPTR MOV P0,A SET
26、B P2.6 NOP CLR P2.6 MOV P0,#0BFH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 ;计费个 MOV DPTR,#TABI MOV A,MGE MOVC A,A+DPTR MOV P0,A SETB P2.6 NOP CLR P2.6 MOV P0,#7FH SETB P2.7 LCALL DELAY MOV P0,#0FFH CLR P2.7 RET ;中断程序 INTO: ; LCALL DELAY1 PUSH ACC MOV A,QIA CJNE A,#9,LOOP1 MOV QIA,#0 SJMP LOOP2 LOO
27、P1: INC GEE LOOP2: MOV A,GEE CJNE A,#10,GOO MOV GEE,#0 INC SHI MOV A,SHI CJNE A,#10,GOO MOV SHI,#0 INC BAI MOV A,BAI CJNE A,#10,GOO MOV BAI,#0 INC QIA ;2km时加费 GOO: DJNZ R5,TO MOV R5,#5 INC MGE MOV R4,MGE CJNE R4,#5,TO MOV MGE,#0 TO: DJNZ R6,G MOV R6,#5 MOV A,MGE CJNE A,#1,BO AJMP G BO: INC MSH MOV A
28、,MSH CJNE A,#10,G MOV MSH,#0 INC MBA MOV A,MBA CJNE A,#10,G MOV MBA,#0 INC MQI MOV A,MQI CJNE A,#10,G MOV MQI,#0 G: POP ACC RETI DELAY: MOV R3,#80 ;延迟子函数 DJNZ R3,$ RET DELAY1:MOV R1,#40 ;延迟子函数 LOOP4:MOV R0,#255 LOOP3:NOP NOP DJNZ R0,LOOP3 DJNZ R1,LOOP4 RET TAB: DB 3FH, 06H, 5BH, 4FH, 66H DB 6DH, 7DH
29、, 07H, 7FH, 6FHTABO: DB 0BFH, 86H, 0DBH, 0CFH, 0E6H DB 0EDH, 0FDH, 87H, 0FFH, 0EFH TABI: DB 3FH, 7FH, 7DH, 66H, 5BH END (编程注意“0”与“o”的区别) 5.3调试过程在Keil中将程序代码编完后,点击rebuild键,编译看一开始,出现了好几个错误,经过好久的调试与更改后,编译时没报错,但是有些电路功能还是没弄出来,最后接近快一天的时候才将整个程序编出,终于将程序调试出来了。编译成功后,先在keil中进行调试仿真。图8在keil中调试完成后,接着进一步软件测试,即可进行电路
30、仿真。6 系统仿真与实现6.1 proteus仿真软件简介Proteus是世界上著名的EDA工具仿真软件,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等。proteus的操作(一)硬件电路图的
31、接法操作1.放置选择(删除)元器件2.移动元器件3.缩放视图4.连接导线5.仿真,调试(二)单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开 发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试, 最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。6.2 仿真调试过程在Keil中调试完成后,再到proteus中进行仿真。首先在proteus中需要的元件依次找出来,根据电路所需要实现的功能画好电路原理图,当检查电路完全没有错误后,双击芯片,再将在keil中生成的hex文件导入芯片,接着点击play键开始进行电路仿真。图9 状态一状态一:开始仿真后,便进行0255的循环计数图10 状态二状态二:用仿