资源描述
电子信息工程专业
微机原理课程设计汇报
课题名称: 出租车计价器
学生班级: 自动化1班
学生学号:
学生姓名:
指导老师:
成绩评定:
元 月 1日
摘 要
当有些人乘车时,司机按“开始键START”同时开动汽车。经过转速传感器装置,这个装置能够在车轮转动时产生源脉冲,源脉冲经过修整后,送至含有计数和显示功效主体模块。其中显示部分有三个部分:里程显示、价格显示、和等时显示。要求设定里程从零开始计,价格从起步价(能够设定为5元)开始计,而且在小于起步里程(设定为5公里)时,价格一直是起步价5元,若超出起步里程,计价显示在原有起步价基础之上然后加上对应里程费用。设单位里程一公里价格2元。当在运作过程中是因为红灯或客人需要有效等候时,专题模块30S假如没有检测到脉冲信号,则计价显示工作,而且每隔30S计价器就增加一元。这便是出租车计价器原理和设计思绪。
关键词:
模块化设计 8086CPU 汇编程序设计
目录
摘要 2
关键字 2
正文 3
序言 3
本论 3
一、开题论证 3
二、系统整体论证 4
三、硬件方案选择部分 4
四、软件编写部分 5
五、整体测试情况 18
结论和感想 19
谢辞 20
参考文件 20
正文
序言
微机原理和接口技术是一门理论结合实践专业基础课,同时也是考研考察科目。能够毫不夸张说,学好学精微机原理,在就业时就有了很大优势。为了让我们愈加好掌握汇编语言和多种芯片特点和功效,安排了我们这次课程设计。8086 CPU及其对应外围可编程芯片实现对计价器主体功效实现是此次试验目标,需要充足考虑了星研电子ES-PCI环境下硬件条件,我负责这次设计统筹步骤,并负责书写汇报。
本论
一、 开题论证:
设计满足基础要求包含:
1、里程显示 价格显示(起步价和起步价以后里程费用显示)
2、等时收费
3、复位。
当有些人乘车时,司机按“开始键START”,且开动汽车。经过转速传感器装置,这个装置能够在车轮转动时产生源脉冲,源脉冲经过修整后,送至含有计数和显示功效主体模块。其中显示部分有三个部分:里程显示、价格显示、和等时显示。要求设定里程从零开始计,价格从起步价(能够设定为5元)开始计,而且在小于起步里程(设定为5公里)时,价格一直是起步价5元,若超出起步里程,计价显示在原有起步价基础之上然后加上对应里程费用。设单位里程一公里价格2元。当在运作过程中是因为红灯或客人需要有效等候时,专题模块30S假如没有检测到脉冲信号,则计价显示工作,而且每隔30S计价器就增加一元。增强功效能够设计白天黑夜转换、语音提醒功效。
由基础要求,初步设想能够实现基础功效。
出租车上含有多位显示计价器(基于单片机)
二、 系统整体论证:
依据星研试验环境下,包含怎么样去实现开题要求,在现有试验室条件下能否演示,或能否演示其中主体功效。只能依据已学知识利用16位CPU及其对应外围可编程控制芯片实现。
三、 硬件方案选择部分:
1.脉冲产生电路包含光电式霍尔式也能够用一个固定脉冲
2.计数器采取8253计数结束中止方法
3.中止控制器采取8259A
4.显示控制部分用两种选择采取8255控制显示或8279控制显示
5.显示器件 数码管 LCD
最终经过相关论证能够绘制出所要硬件原图:
D7-D0
8086CPU
M/IO
WR
RD
INTR
INTRA
WR PA0
RD
PB0-PB7
8255
CS
PC0-PC7
INT IR0
INTA
WR 8259
RD
A0
CS
OUT1 VC
WR CLK1
RD 8253
CS
74138
74138
74138
D7-D0
+5V
+5V
M/IO
M/IO
显示低四位里程高四位总价
说明:
以8086CPU为关键,其经过对应地址线和译码器相连实现对外围芯片片选(在星研ESPCI硬件环境下片选能够直接实现),经过低地址数据线完成和外围芯片数据传输(对外围芯片初始化编程、程序监控),计数器采取计数中止结束方法计数,依据现实条件设定一个初始值N,当有N个脉冲经过CLK1时,8253OUT1向8259输出一个脉冲,此时8259向CPU发送一个中止请求,CPU处理中止子程序,对8255进行控制,并经过8255控制显示。
四、 软件编写部分:
1.系统步骤图
说明:
本程序应用8255作为总控制,其中PA口接按键(开启控制),PB接8位数码管显示部分,而PC口接位选,其中PC口高4位显示价钱,低4位显示里程。采取8253技术,其中计数器T0,T1和1MHZ产生1HZ信号,接IR0计数;08H中止一直计数TIME(时间),而09H为信号接收时中止,将里程(COUNT)+1,并将时间(TIME)清0;若无信号输入,09H将不产生中止,此时即为等候状态,08H中止TIME++,当达成30s时,价钱增加2元,并将TIME清0循环。
2.源代码及其注释
.MODEL TINY
PCIBAR3 EQU 1CH ; 8位I/O空间基地址(它就是试验仪基地址,也为DMA & 32 BIT RAM板卡上8237提供基地址)
Vendor_ID EQU 10EBH ;厂商ID号
Device_ID EQU 8376 ;设备ID号
DLYC2 EQU 200 ;显示时间系数
.STACK 100
.DATA
COM_ADDR DW 00B3H
T0_ADDR DW 00B0H
T1_ADDR DW 00B1H
COM_ADD DW 00F3H ;控制口偏移量
PA_ADD DW 00F0H ;PA口偏移量
PB_ADD DW 00F1H ;PB口偏移量
PC_ADD DW 00F2H ;PC口偏移量
IO8259_0 EQU 0E00H ;待定***********************
IO8259_1 EQU 0E01H ;*****************************
OLDOA1 DD ? ;存放原08H中止地址
OLDOA2 DD ? ; 存放原09H中止地址
COUNT DW 00H ;里程计数
TIME DW 00H ;时间计数
DDBB1 DW 4 DUP (0) ;存放里程计数值
DDBB2 DW 4 DUP(0) ;存放价钱计数值
IO_Bit8_BaseAddress DW ?
msg0 DB 'BIOS不支持访问PCI $'
msg1 DB '找不到Star PCI9052板卡 $'
msg2 DB '读8位I/O空间基地址时犯错$'
TB DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,18H
.CODE
START: MOV AX,@DATA
MOV DS,AX
NOP
CALL InitPCI
CALL ModifyAddress ;依据PCI提供基地址,将偏移地址转化为实地址
CLI ;关中止
CALL I8255A ;8255A初始化
CALL RD08 ;读出08H中止向量
CALL WRITE08 ;写入08H中止向量
CALL RD09 ;读出09H中止向量
CALL WRITE09 ;写入09H中止向量
CALL I8259 ;开放用户中止
STI ;开中止
;*****************************************************
MOV DX,PA_ADD ;按键扫描
IN AL,DX
AND AL,0FFH
CMP AL,0FFH
JNZ BB
COUNT DW 00H ;清零
TIME DW 00H
BB:
MOV DX,COM_ADDR
MOV AL,34H
OUT DX,AL ;计数器T0设置在模式2状态,二进制计数
MOV DX,T0_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL ;CLK0/1000
MOV DX,COM_ADDR
MOV AL,76H
OUT DX,AL ;计数器T1为模式3状态,输出方波,二进制计数
MOV DX,T1_ADDR
MOV AL,00H
OUT DX,AL
MOV AL,10H
OUT DX,AL ;CLK1/1000
;OUT1输出频率为1S方波
MOV DX,COM_ADDR
MOV AL,10110000B
OUT DX,AL
MOV DX,T2_ADDR
MOV AL,00H
OUT DX,AL
MOV DX,T2_ADDR
MOV AL,10H
OUT DX,AL
CALL BCDTO1;将统计数放在存放器BBDD1中
CALL DISP1; 调用动态显示,PC低四位显示里程
MOV AX, COUNT
MOV BX, 02H
MUL AX, BX
CALL B2TOBCD;将二进制转换为BCD码
MOV BX,0006H ;给予起步价6元
CMP AX,BX ; 若计数值小于6元,交换AX,BX
JA TT
XCHG AX,BX
TT: CALL BCDTO 2 ;将统计数分别放入存放器BBDD2中
CALL DISP2 ;调用动态显示,PC高四位显示价钱
CALL RESTER08H ;恢复08H,09H型中止
CALL RESTER09H
;**************************************************************
DL20ms PROC NEAR
PUSH AX
PUSH DX
MOV DX,20 ;延时20ms
MOV AH,0FFH ;星研企业提供软中止
INT 21H
POP DX
POP AX
RET
DL20ms ENDP
;***************************************************************
I8255A PROC
MOV DX,COM_ADD
MOV AL,10010000B ;PA输入,PB PC输出
OUT DX,AL
MOV DX, PC_ADD
MOV AL,0FFH ;关数码管
OUT DX,AL
RET
I8255A ENDP
;****************************************************************
RD08 PROC
MOV AH,35H
MOV AL,0AH
INT 21H
MOV WORD PTR OLD0A1,BX
MOV WORD PTR OLD0A1+2,ES
RET
RD08 ENDP
;********************************************************************
WRITE08 PROC
PUSH DS
MOV AX,@CODE
MOV DS,AX
MOV DX,OFFSET SERVICE1
MOV AX,2508H
INT 21H
POP DS
RET
WRITE08 ENDP
;****************************************************************
RD09 PROC
MOV AH,35H
MOV AL,09H
INT 21H
MOV WORD PTR OLD0A2,BX
MOV WORD PTR OLD0A2+2,ES
RET
RD09 ENDP
;********************************************************************
WRITE09 PROC
PUSH DS
MOV AX,@CODE
MOV DS,AX
MOV DX,OFFSET SERVICE2
MOV AX,2509H
INT 21H
POP DS
RET
WRITE09 ENDP
;****************************************************************
;****************************************************************
I8259 PROC
MOV AL,12H ;单级使用,边缘触发,不需要设计ICW4
OUT 0E00H ,AL;
MOV AL,0A0H;一般EOI循环方法,IR0最低级
OUT 0E00H,AL;
RET
I8259 ENDP
;*****************************************************************
SERVICE 1 PROC
PUSH AX
PUSH DS
MOV AX,@DATA
MOV DS,AX
INC TIME
MOV AX,TIME
MOV BX,30
CMP AX,BX
JNA AA1
TIME DW 00H
INC COUNT ;相当于价钱加2元
AA1 MOV AL,20H
OUT 0E00H,AL ;中止结束中止地址
POP DS
POP AX
IRET
SERVICE1 ENDP
;***************************************************************
SERVICE 2 PROC
PUSH AX
PUSH DS
MOV AX,@DATA
MOV DS,AX
INC COUNT
MOV AX,COUNT
MOV BX,4500
CMP AX,BX
JNA AA1
COUNT DW 00H
MOV AX,COUNT
AA2: CALL B2TOBCD
MOV AL,20H
OUT 0E00H,AL ;中止结束中止地址
POP DS
POP AX
IRET
SERVICE2 ENDP
;********************************************************************
RESTER08H PROC
PUSH DS
MOV DX,WORD PTR OLDOA1
MOV DS,WORD PTR OLDOA1+2
MOV AH,25H
MOV AL,08H
INT 21H
POP DS
RET
RESTER08H ENDP
;***************************************************************************
RESTER09H PROC
PUSH DS
MOV DX,WORD PTR OLDOA2
MOV DS,WORD PTR OLDOA2+2
MOV AH,25H
MOV AL,09H
INT 21H
POP DS
RET
RESTER09H ENDP
;****************************************************************
B2TOBCD PROC NEAR
CMP AX,9999 ;AX>9999,则CF置1
JBE TRAN
STC
JMP EXIT
TRAN: PUSH CX
PUSH DX
SUB DX,DX ;DX清0
MOV CX,1000 ;计算千位数
DIV CX
XCHG AX,DX ;商在DX中,余数在AX中
MOV CL,4
SHL DX,CL ;DX左移4位
MOV CL,100 ;计算百位数
DIV CL
ADD DL,AL ;百位数加到DL中,DX左移4位
MOV CL,4
SHL DX,CL
XCHG AL,AH ;余数保留在AL中
SUB AH,AH
MOV CL,10 ;计算十位数
DIV CL
ADD DL,AL ;十位数加到DL中,DX左移4位
MOV CL,4
SHL DX,CL
ADD DL,AH ;加个位数
MOV AX,DX ;结果送到AX中
POP DX
POP CX
EXIT1: RET
B2TOBCD ENDP
;****************************************************************
BCDTO PROC NEAR
MOV SI,OFFSET DDBB
MOV BH,00H
MOV BL,AL
MOV CL,04H
ROR BX,CL
MOV [SI+1],BL ;将统计数十位放在其中
SHR BH,CL
MOV [SI],BH ;将统计数个位放在其中
SUB BH,BH
MOV BL,AH
MOV CL,04H
ROR BX,CL
MOV [SI+3],BL ;将统计数千位放在其中
SHR BH,CL
MOV [SI+2],BH ;将统计数百位放在其中
RET
BCDTO ENDP
;**************************************************************
DISP1 PROC NEAR
MOV SI,OFFSET DDBB1
MOV AL,[SI] ;显示个位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0FEH ;用PC口低位显示
OUT DX,AL
MOV CX,DLYC2
LP0: LOOP LP0
MOV AL, 0FFH
OUT DX,AL
INC SI
MOV AL,[SI] ;显示百位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0FDH ;用PC口低位显示
OUT DX,AL
MOV CX,DLYC2
LP1: LOOP LP1
MOV AL, 0FFH
OUT DX,AL
INC SI
MOV AL,[SI] ;显示百位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0FBH ;用PC口低位显示
OUT DX,AL
MOV CX,DLYC2
LP2: LOOP LP2
MOV AL, 0FFH
OUT DX,AL
INC SI
MOV AL,[SI] ;显示千位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0F7H ;用PC低位显示
OUT DX,AL
MOV CX,DLYC2
LP3: LOOP LP3
MOV AL,0FFH
OUT DX,AL
RET
DISP1 ENDP
;***************************************************************
DISP2 PROC NEAR
MOV SI,OFFSET DDBB2
MOV AL,[SI] ;显示个位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0EFH ;用PC口高位显示
OUT DX,AL
MOV CX,DLYC2
LP0: LOOP LP0
MOV AL, 0FFH
OUT DX,AL
INC SI
MOV AL,[SI] ;显示百位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0DFH ;用PC口高位显示
OUT DX,AL
MOV CX,DLYC2
LP1: LOOP LP1
MOV AL, 0FFH
OUT DX,AL
INC SI
MOV AL,[SI] ;显示百位
MOV BX,OFFSET TB
XLAT TB
MOV DX,PB_ADD ;用PB口做动态扫描
OUT DX,AL
MOV DX,PC_ADD ;用PC口做位选
MOV AL,0BFH ;用PC口高位显示
OUT DX,AL
MOV CX,DLYC2
LP2: LOOP LP2
MOV AL, 0FFH
OUT DX,AL
展开阅读全文