为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

出租车计价器课程设计报告

2020-03-08 35页 doc 233KB 10阅读

用户头像

is_995397

暂无简介

举报
出租车计价器课程设计报告昆明理工大学信息工程与自动化学院学生实验报告 ( 2012  —  2013  学年 第  2  学期 ) 课程名称:可编程逻辑器件设计  开课实验室:信自楼    2013 年4月 11日 年级、专业、班 计科101 学号 201010405127 姓名 张泽华 成绩   实验项目名称 出租车计价器设计 指导教师 江虹 教师评语 该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强 □ B.中等 □ C.差 □ 该同学的实...
出租车计价器课程设计报告
昆明理工大学信息工程与自动化学院学生实验 ( 2012  —  2013  学年 第  2  学期 ) 课程名称:可编程逻辑器件  开课实验室:信自楼    2013 年4月 11日 年级、专业、班 计科101 学号 201010405127 姓名 张泽华 成绩   实验项目名称 出租车计价器设计 指导教师 江虹 教师评语 该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强 □ B.中等 □ C.差 □ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般 □ C.没有 □ 教师签名: 年 月 日                   一、引言 汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。 我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。 随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。我们设计采用8086为主控器,以A44E霍尔传感器测距,实现对出租车的多功能的计价设计,输出采用8段数码显示管。 二、总体设计 利用8253作为定时/计数器,控制电机转速并测量电机的转数;8255作为输入输出接口,控制数码管显示启动后经过的里程数(小数点后取2位有效值)。 硬件连接说明: 直流电机控制器的基础上,增加了一个电机测速电路构成。 8255的B口作为数码管的笔划码驱动;C口的低4位作为段码控制,显示实际里程,同时,也用于输出键盘的列扫描码;PC6、PC7输入行扫描码,用于识别按键,程序中仅使用了PC6行上的四个按键,其定义如下: X1:启动/停止键;X2:加速键,与X3、X4键组合使用;X3:“+”键;X4:“-”键。 A口仅使用了PA0,输出PWM脉冲信号,通过驱动芯片驱动电机,其输出电压的高低与PWM脉冲的占空比成正比。 电机的转数,通过霍尔元件变换为脉冲个数,送入8253的通道2,计数后,将转数转换为里程数,最小单位为0.01公里,送CPU记录,结果由数码管显示出来。 (一)、软硬件流程图 主程序流程 N    Y N    Y    N        N    N Y    Y    Y IRO中断处理流程图                                  IR7中断处理程序流程图 N Y N Y N Y    显示子程序流程图 N Y N Y (二)、源程序设计与硬件介绍 中断程序 里程计数中断程序 每当霍尔传感器输出一个低电平信号就使中断一次,当里程计数器对里程脉冲计满1000次时,进入里程计数中断服务程序中,里程变量加一。主函数中总金额也相应地变化。 中途等待中断程序 在中途等待中断程序中,每1ms产生一次中断,将当前里程值送入某个缓存变量,每5分钟将缓存变量中的值和当前里程值比较,当汽车停止,霍尔传感器5分钟没有输出信号,当前里程值和缓存变量内的值相同,则进入等待计时,每5分钟记一次价格。 显示程序 显示程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。 键盘程序 键盘采用查询的方式,放在主程序中,当没有按键按下的时候,循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。 2.1 8086最小系统模块 1、8086CPU构成的系统框图如图: 2.2 芯片8255A 1、 8255A的作用 本实验利用8255A将模拟量转换后的数字量传送到 CPU。此外,8255采用查询工作方式控制ADC0809工作。8086通过8255向七段LED显示器发送控制信号。 2、 8255A的功能分析 8255A是可编程并行接口,可以根据外界条件(I/O设备需要的信号线和它能提供的状态线)来使其构成多种接口电路。8255A内部有3个数据端口,即A口、B口、C口。A口有三种工作方式:即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。本实验将控制字设为80H,初始化8255,使得  B口、C口为输出。 在三种工作方式中,本设计只使用了方式0,即方式0是基本的输入/输出方式,在这种方式下,三个端口都可以由程序规定为输入/出方式,但是不能既作为输入又作为输出,也没有提供固定的联络信号。C口分为两个4位---高4位和低4位,可以分别设置为输入或输出方式。 3、8255A的技术参数 8255A的引脚信号 CS:片选信号,低电平有效; A0、A1:地址信号。 JP52: PC口; JP53: PB口; JP56: PA口。 1)与外设相连的 PA7~PA0:A口数据信号线; PB7~PB0:B口数据信号线; PC7~PC0:C口数据信号线; 2)与CPU相连的 RESET:复位信号。当此信号来时,所有寄存器都被清除。同时三个数据端口被自动置为输入端口。 D7~D0:它们是8255A的数据线和系统总线相连。 CS:片选信号。在系统中,一般根据全部接口芯片来分配若于低位地址(比如A5、A4、A3)组成各种芯片选择码,当这几位地址组成某一个低电平,于8255A被选中。只有当有效时,读信号写才对8255进行读写。 RD:读信号。当此信号有效时,CPU可从8255A中读取数据。 WR:写信号。当此信号有效时,CPU可向8255A中写入数据。 A1、A0:端口选择信号。8255A内部有3个数据端口和1个控制端口,共4个端口。规定: A1、A0为00时,选中A端口; A1、A0为01时,选中B端口; A1、A0为10时,选中C端口; A1、A0为11时,选中控制口。 4、 8255A的方式控制字 8255A的控制字有两种:一种是方式选择控制字,另一种是C口按位置位/复位控制字 ① 方式选择控制字 图1  8255A的方式控制字表 ② C口按位置位/复位控制字 图2  8255A的置位/控制字表 2.3 芯片8253 1、 8253的功能分析 Intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz) 8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。 执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。输出锁存器的值是通过程序设置的。输出锁存器OL用来锁存计数执行部件CE的,从而使CPU可以对此进行读操作。顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用1、8253的作用 2、8253的引脚信号 CS:片选信号,低电平有效; A0、A1:地址信号; 2.4可编程控制芯片8259A 8259A的原理 一片8959A有8条中断请求线IR0~IR7,8259A被操作系统初始化后,就可以接收中断信号了。8259A从IR请求线上接受中断信号,每个请求线有一个触发器来保 存请求信号,从而形成中断请求寄存器(IRR)。同时如果中断请求信号线上不是被屏蔽的,8259A向CPU发出 INT信号,请求中断。这时如果CPU是处于允许中断状况,CPU就会发送INTA信号给8259A进入中断响应周期。如果有多个请求信号同时到达,8259A的优先权电路会对各个请求进行优先权选择,将最高先权的请求在中断响应周期送到中断服务寄存器(ISR)中将它置位,同时复位IRR中的相应位。接着CPU再次发送一个INTA脉冲给8259A,启动另外一个中断相应周期。8259A在这个相应周期向数据总线的D0-D7上输入一个中断向量。CPU根据该向量的值*4后就可以从中断入口地址表(IDT )中取出中断服务程序的入口地址而转入中断服务程序。而8259A如果工作在自动结束中断(AEOI)模式时会自动使其ISR中的相应位复位,否则需要发出EOI命令使ISR复位。 在老式的PC-XT/AT中,一般使用一片8259A进行中断信号请求。在现代的多数PC中,一般都会采用两片8259A作为级连。其中一片是Master一片是Slave,由于Master上的一个中断请求线需要连接到Slave的INT脚,所以实际可以使用的外部中断个数是15(8*2 – 1)个。 8259A结构 1、数据总线缓冲器--D7~D0 数据总线缓冲器为三态、双向、8位寄存器,数据线D7~D0与CPU系统总线连接,构成CPU与8259A之间信息传送的通道。 2、读/写控制逻辑--WR/WD 读/写控制逻辑用来接收CPU系统总线的读/写控制信号和端口地址选择信号,用于控制8259A内部寄存器的读/写操作。 3、级联缓冲/比较器 8259A既可以工作于单片方式,也可以工作于多片级联方式,级联方式硬件连接如图6.10所示。级联缓冲/比较器提供多片8259A的管理和选择功能,其中一片为主片,其余为从片。 4、中断控制逻辑 中断控制逻辑按照编程设定的工作方式管理中断,负责向片内各部件发送控制信号,向CPU发送中断请求信号INT和接收CPU回送的中断响应信号INTA,控制8259A进入中断管理状态。 5、中断请求寄存器(interrupt request register,IRR) IRR是一个8位寄存器,用于记录外部中断请求。其中D7~D0分别与外部中断请求信号IR7~IR0相对应,当IRi(i=0~7)有请求(电平或边沿触发)时,IRR中的相应位Di置1,在中断响应信号INTA有效时,DI被清除。 6、中断服务寄存器(interrupt service register,ISR) ISR是一个8位寄存器,用于记录CPU当前正在服务的中断标志。当外部中断IRi(i=0~7)的请求得到CPU响应进入服务时,由CPU发来的第一个中断响应脉冲INTA将ISR中的相应位Di(i=0~7)置1,而ISR的复位则由8259A中断结束方式决定。若定义为自动结束方式,则由CPU发来的第二个中断响应脉冲INTA的后沿将Di复位为0;若定义为非自动结束方式,则由CPU发送来的中断结束命令将其复位。 7、中断屏蔽寄存器(interrupt mask register,IMR) IMR是一个8位寄存器,用来存放IR7~IR0的中断屏蔽标志。它的8个屏蔽位D7~D0与外部中断请求IR7~IR0相对应,用于控制IRi的请求是否允许进入。当IMR中的Di位为1时,对应的IRi请求被禁止;当IMR中的Di位为0时,则允许对应的中断请求进入。它可以由软件设置或清除,通过编程设定屏蔽字,可以改变原来的优先级别。 程序代码见附录 三、总结与体会 作为一名自动化的大三学生,我觉得做微机程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:汇编语言、模拟和数字电路知识等。虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。另外,这次课程设计让我感到了团队合作的重要性。在团队中,我们互帮互助,对整个课程设计来说,这是至关重要的,缺少每一个人都会对我们的设计产生影响。还有要感谢指导老师在我们遇到困难时,给予我们的建议与鼓励。两周的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。 为期两个星期的毕业设计即将接近尾声,在刘老师和王老师的亲切指导和同学的帮助下,此次设计才得以完成,在此向所有给予我此次课程设计指导和帮助的老师和同学表示最诚挚的感谢: 附录 ;计价器(利用调速控制器控制电机的旋转,读出总里程数) DATA    SEGMENT T        EQU 100        ;定时周期时间(基本周期*T) T_HI    DB 50        ;高电平持续时间(基本周期*T_HI) NOW_T    DB T NOW_HI    DB 50 T8253    EQU 609        ;定时器8253的初值=1.19M*0.512MS(基本周期)=609 RUN    DB 0        ;启停标志 SPEED    DW 0        ; 里程数 STEP    DW 50        ;10米的8253脉冲个数(即每来50个脉冲,则前进10米) TAB        DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;0~9的显示码 DISP    DB 4 DUP (0),52H;存储转速 DATA    ENDS STACK SEGMENT STACK DW 64 DUP(?)        ;定义堆栈段 STACK ENDS CODE SEGMENT                ;代码段定义 ASSUME CS:CODE,DS:DATA    ;段指定 START:    MOV    AX,DATA MOV    DS,AX PUSH     DS                ;当前用户DS段入栈保存 MOV     AX,0000H MOV     DS,AX            ;修改DS=0000H,指向中断矢量表所在段 MOV     AX,OFFSET IRQ0    ;取出中断处理子程序的入口偏移地址(以0为基准) ADD     AX,2000H    ;修正,实际地址=装入地址的偏移量+相对于0起始的偏移量 MOV     SI,0020H            ;IR0中断矢量号为08H,处于矢量表的20H~23H MOV     [SI],AX            ;将偏移地址装入矢量表 MOV     AX,0000H MOV     SI,0022H MOV     [SI],AX            ;将段地址(0000H)装入矢量表 MOV    AX,OFFSET IRQ7 ADD    AX,2000H MOV    SI,0003CH MOV    [SI],AX            ;将偏移地址装入IRQ7的中断矢量 MOV     AX,0000H MOV     SI,003EH MOV     [SI],AX            ;将段地址(0000H)装入矢量表 POP     DS                ;恢复用户数据段DS MOV    AL,13H OUT    20H,AL            ;写入ICW1 MOV    AL,08H OUT    21H,AL            ;写入ICW2 MOV    AL,01H OUT    21H,AL            ;写入ICW4 MOV     AL,7EH            ;D7,D0位复位为0 OUT     21H,AL            ;写入OCW1(IMR);开放8259A的IR7和IR0中断 MOV     AL,34H            ;设定8253通道0的工作方式,00110100B OUT     43H,AL            ;CH0采用先写低8位,后写高8位,方式2,二进制计数 MOV     AX,T8253        ;计数初值为基本周期 OUT     40H,AL            ;写入CH0 MOV    AL,AH OUT    40H,AL MOV     AL,0B6H            ;设定8253通道2的工作方式,10110110B OUT     43H,AL            ;CH2采用先写低8位,后写高8位=0,方式3,二进制计数 MOV    AX,STEP OUT     42H,AL    MOV    AL,AH OUT     42H,AL            ;写入CH2 MOV     AL,88H            ;写入8255A的方式控制字,设定工作方式为10001000B OUT     63H,AL            ;即A口方式0输出,C口高4位输入,B口方式0输出,C口低4位输出 MOV    AL,00H OUT    60H,AL            ;关电机 STI                        ;开中断 A1:    MOV    SI,OFFSET DISP MOV    BL,2 MOV    AX,SPEED A11:    AND    AL,0FH MOV    [SI+3],AL AND    AH,0FH MOV    [SI+1],AH    DEC    SI MOV    AX,SPEED MOV    CL,4 ROR    AX,CL DEC    BL JNZ        A11                ;将速度的压缩BCD码转换为非压缩码,存入缓冲区 MOV    SI,OFFSET DISP CALL    DISPLAY MOV    AL,00H                ;打开开关扫描 OUT    62H,AL IN        AL,62H                ;读C口 AND    AL,40H JZ        A2                    ;有键按下,转读键盘 JMP        EXIT A2:    MOV    AH,00H                ;记录按键扫描码 MOV    CX,04                ;循环扫描4次 MOV    DL,77H                ;打开第一行的开关扫描 A21:    INC        AH                    ;扫描码+1 ROL    DL,1 MOV    AL,DL OUT    62H,AL                ;打开一行的开关扫描 IN        AL,62H                ;读C口 TEST    AL,40H                ;取PC6(Y1) JNZ        A22                    ;无键按下,转 CALL    DALEY CALL    DALEY                ;去抖动 IN        AL,62H                ;读C口 AND    AL,40H                ;取PC6(Y1) JNZ        A22                    ;是抖动,转 CMP    AH,2 JNZ        RELEA                ;不是加速键,转(单独按下加速键无效) OR        AH,80H                ;是加速键,则D7位=1 JMP        A22 RELEA:    CALL    DISPLAY MOV    AL,DL OUT    62H,AL IN        AL,62H AND    AL,40H                ;等待键释放 JZ        RELEA JMP        A23        ;AH存扫描码,=1(X1键按下)启停,=2加速,=3'+',=4'-'键 A22:LOOP    A21 JMP        EXIT A23:    MOV    AL,AH AND    AL,0FH CMP    AL,01H        JNZ        A3                    ;不是按下启停键,则转 MOV    AL,RUN TEST    AL,01H JNZ        A24                    ;原为启动,则转停止 MOV    RUN,01                ;置位启动标志 MOV    NOW_T,T            ;重装定时周期 MOV    AL,T_HI MOV    NOW_HI,AL            ;重装高电平定时时间 MOV    SPEED,00            ;重新计价(里程) JMP        EXIT A24:    MOV    RUN,00                ;复位启动标志 MOV    AL,00H OUT    60H,AL                ;关电机 JMP        EXIT A3:    MOV    AL,AH AND    AL,0FH CMP    AL,03 JNZ        A6                    ;不是'+'键,转 MOV    BL,1 TEST    AH,80H JZ        A4                    ;没按加速键,转 MOV    BL,10                ;按加速键,加10,正常加1 A4:    ADD    BL,T_HI CMP    BL,100 JBE        A5 MOV    BL,100 A5:    MOV    T_HI,BL                ;增加的百分比不能>100% JMP        EXIT A6:    MOV    AL,AH AND    AL,0FH CMP    AL,04 JNZ        EXIT                ;不是'-'键,转 MOV    BH,01 TEST    AH,80H JZ        A7                    ;没按加速键,转 MOV    BH,10                ;按加速键,-10,正常-1 A7:    MOV    BL,T_HI SUB        BL,BH JNC        A8 MOV    BL,00 A8:    MOV    T_HI,BL            ;最小的百分比为0% EXIT:    JMP     A1 ;8259A的IR0中断处理子程序(8253的CH0定时基本周期0.512MS) IRQ0:    PUSH    AX STI MOV    AL,RUN AND    AL,AL JZ        IREXIT            ;不启动,则转测速度 MOV    AL,NOW_T SUB        AL,1 JNZ        IRSP1 MOV    NOW_T,T        ;重装定时周期 MOV    AL,T_HI MOV    NOW_HI,AL        ;重装高电平定时时间 JMP        IREXIT IRSP1:    MOV    NOW_T,AL        ;保存-1后的定时周期 MOV    AL,NOW_HI TEST    AL,AL JNZ        IRSP2 MOV    AH,00H            ;高电平持续时间到,则PA0输出为0 JMP        IRSP3 IRSP2:    SUB        AL,1            ;高电平持续时间不到 MOV    NOW_HI,AL        ;保存-1后的值 MOV    AH,01H            ;PA0输出为1,高电平 IRSP3:    MOV    AL,AH OUT    60H,AL IREXIT:    MOV     AL,20H            ;常规EOI中断结束指令 OUT     20H,AL            ;写入8259A的OCW2 CLI POP        AX IRET                    ;中断返回 ;8259A的IR7中断处理子程序(8253的CH2计数中断,10米到) IRQ7:    PUSH    AX STI MOV    AX,SPEED ADD    AL,01 DAA XCHG    AL,AH ADC    AL,00 DAA XCHG    AL,AH MOV    SPEED,AX MOV     AL,20H            ;常规EOI中断结束指令 OUT     20H,AL            ;写入8259A的OCW2 CLI POP        AX IRET                    ;中断返回 ;显示子程序 DISPLAY:PUSH    AX PUSH    BX PUSH    CX PUSH    DX PUSH    SI MOV    CX,4 MOV    DL,7FH MOV    SI,OFFSET DISP MOV    BX,OFFSET TAB DISP1:    ROL    DL,1 MOV    AL,[SI] XLAT                    ;查表转换为显示码 TEST    DL,02H JNZ        DISP2            ;是第二位显示吗? OR        AL,80H            ;是,加小数点 DISP2:    OUT    61H,AL MOV    AL,DL            ;允许X1、X2、X3、X4(PC3~PC0)数码管依次选通 OUT    62H,AL CALL    DALEY INC        SI LOOP    DISP1            ;四次循环,显示转速 XOR    AL,AL OUT    61H,AL            ;关显示 POP        SI POP        DX POP        CX POP        BX POP        AX RET ;延时子程序 DALEY:    PUSH    CX MOV     CX,0560H    ;置内循环次数 DALEY1:LOOP     DALEY1        ;共循环0560H次,以完成延时 POP        CX RET CODE     ENDS END START
/
本文档为【出租车计价器课程设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索