微机原理 课程设计.docx
- 文档编号:28773667
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:28
- 大小:98.74KB
微机原理 课程设计.docx
《微机原理 课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理 课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
微机原理课程设计
电子信息工程专业
微机原理课程设计报告
课题名称:
出租车计价器
学生班级:
自动化1班
学生学号:
学生姓名:
指导教师:
成绩评定:
2010年元月1日
摘要
当有人乘车时,司机按“开始键START”同时开动汽车。
通过转速传感器装置,这个装置可以在车轮转动时产生源脉冲,源脉冲经过修整后,送至具有计数和显示功能的主体模块。
其中显示部分有三个部分:
里程显示、价格显示、以及等时显示。
要求设定里程从零开始计,价格从起步价(可以设定为5元)开始计,而且在不大于起步里程(设定为5公里)时,价格一直是起步价5元,若超过起步里程,计价显示在原有起步价基础之上然后加上相应的里程费用。
设单位里程一公里价格2元。
当在运作过程中是由于红灯或者客人需要的有效等待时,主题模块30S如果没有检测到脉冲信号,则计价显示工作,并且每隔30S计价器就增加一元。
这便是出租车计价器的原理和设计思路。
关键词:
模块化设计8086CPU汇编程序设计
摘要2
关键字2
正文3
前言3
本论3
一、开题论证3
二、系统整体论证4
三、硬件方案选择部分4
四、软件编写部分5
五、整体测试情况18
结论和感想19
谢辞20
参考文献20
正文
前言
微机原理与接口技术是一门理论结合实践的专业基础课,同时也是考研的考察科目。
可以毫不夸张的说,学好学精微机原理,在就业时就有了非常大的优势。
为了让我们更好的掌握汇编语言和各种芯片的特点和功能,安排了我们这次课程设计。
8086CPU及其相应的外围可编程芯片实现对计价器主体功能的实现是本次试验的目的,需要充分考虑了星研电子ES-PCI环境下的硬件条件,我负责这次设计的统筹环节,并负责书写报告。
本论
一、开题论证:
设计满足的基本要求包括:
1、里程显示价格显示(起步价以及起步价之后的里程费用的显示)
2、等时收费
3、复位。
当有人乘车时,司机按“开始键START”,且开动汽车。
通过转速传感器装置,这个装置可以在车轮转动时产生源脉冲,源脉冲经过修整后,送至具有计数和显示功能的主体模块。
其中显示部分有三个部分:
里程显示、价格显示、以及等时显示。
要求设定里程从零开始计,价格从起步价(可以设定为5元)开始计,而且在不大于起步里程(设定为5公里)时,价格一直是起步价5元,若超过起步里程,计价显示在原有起步价基础之上然后加上相应的里程费用。
设单位里程一公里价格2元。
当在运作过程中是由于红灯或者客人需要的有效等待时,主题模块30S如果没有检测到脉冲信号,则计价显示工作,并且每隔30S计价器就增加一元。
增强功能可以设计白天黑夜转换、语音提示功能。
由基本要求,初步设想可以实现基本功能。
说明:
以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.源代码及其注释
.MODELTINY
PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)
Vendor_IDEQU10EBH;厂商ID号
Device_IDEQU8376;设备ID号
DLYC2EQU200;显示时间系数
.STACK100
.DATA
COM_ADDRDW00B3H
T0_ADDRDW00B0H
T1_ADDRDW00B1H
COM_ADDDW00F3H;控制口偏移量
PA_ADDDW00F0H;PA口偏移量
PB_ADDDW00F1H;PB口偏移量
PC_ADDDW00F2H;PC口偏移量
IO8259_0EQU0E00H;待定***********************
IO8259_1EQU0E01H;*****************************
OLDOA1DD?
;存放原08H中断地址
OLDOA2DD?
;存放原09H中断地址
COUNTDW00H;里程计数
TIMEDW00H;时间计数
DDBB1DW4DUP(0);存放里程计数值
DDBB2DW4DUP(0);存放价钱计数值
IO_Bit8_BaseAddressDW?
msg0DB'BIOS不支持访问PCI$'
msg1DB'找不到StarPCI9052板卡$'
msg2DB'读8位I/O空间基地址时出错$'
TBDB40H,79H,24H,30H,19H
DB12H,02H,78H,00H,18H
.CODE
START:
MOVAX,@DATA
MOVDS,AX
NOP
CALLInitPCI
CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址
CLI;关中断
CALLI8255A;8255A初始化
CALLRD08;读出08H中断向量
CALLWRITE08;写入08H中断向量
CALLRD09;读出09H中断向量
CALLWRITE09;写入09H中断向量
CALLI8259;开放用户中断
STI;开中断
;*****************************************************
MOVDX,PA_ADD;按键扫描
INAL,DX
ANDAL,0FFH
CMPAL,0FFH
JNZBB
COUNTDW00H;清零
TIMEDW00H
BB:
MOVDX,COM_ADDR
MOVAL,34H
OUTDX,AL;计数器T0设置在模式2状态,二进制计数
MOVDX,T0_ADDR
MOVAL,00H
OUTDX,AL
MOVAL,10H
OUTDX,AL;CLK0/1000
MOVDX,COM_ADDR
MOVAL,76H
OUTDX,AL;计数器T1为模式3状态,输出方波,二进制计数
MOVDX,T1_ADDR
MOVAL,00H
OUTDX,AL
MOVAL,10H
OUTDX,AL;CLK1/1000
;OUT1输出频率为1S的方波
MOVDX,COM_ADDR
MOVAL,10110000B
OUTDX,AL
MOVDX,T2_ADDR
MOVAL,00H
OUTDX,AL
MOVDX,T2_ADDR
MOVAL,10H
OUTDX,AL
CALLBCDTO1;将记录数放在存储器BBDD1中
CALLDISP1;调用动态显示,PC低四位显示里程
MOVAX,COUNT
MOVBX,02H
MULAX,BX
CALLB2TOBCD;将二进制转换为BCD码
MOVBX,0006H;赋予起步价6元
CMPAX,BX;若计数值小于6元,交换AX,BX
JATT
XCHGAX,BX
TT:
CALLBCDTO2;将记录数分别放入存储器BBDD2中
CALLDISP2;调用动态显示,PC高四位显示价钱
CALLRESTER08H;恢复08H,09H型中断
CALLRESTER09H
;**************************************************************
DL20msPROCNEAR
PUSHAX
PUSHDX
MOVDX,20;延时20ms
MOVAH,0FFH;星研公司提供的软中断
INT21H
POPDX
POPAX
RET
DL20msENDP
;***************************************************************
I8255APROC
MOVDX,COM_ADD
MOVAL,10010000B;PA输入,PBPC输出
OUTDX,AL
MOVDX,PC_ADD
MOVAL,0FFH;关数码管
OUTDX,AL
RET
I8255AENDP
;****************************************************************
RD08PROC
MOVAH,35H
MOVAL,0AH
INT21H
MOVWORDPTROLD0A1,BX
MOVWORDPTROLD0A1+2,ES
RET
RD08ENDP
;********************************************************************
WRITE08PROC
PUSHDS
MOVAX,@CODE
MOVDS,AX
MOVDX,OFFSETSERVICE1
MOVAX,2508H
INT21H
POPDS
RET
WRITE08ENDP
;****************************************************************
RD09PROC
MOVAH,35H
MOVAL,09H
INT21H
MOVWORDPTROLD0A2,BX
MOVWORDPTROLD0A2+2,ES
RET
RD09ENDP
;********************************************************************
WRITE09PROC
PUSHDS
MOVAX,@CODE
MOVDS,AX
MOVDX,OFFSETSERVICE2
MOVAX,2509H
INT21H
POPDS
RET
WRITE09ENDP
;****************************************************************
;****************************************************************
I8259PROC
MOVAL,12H;单级使用,边沿触发,不需要设计ICW4
OUT0E00H,AL;
MOVAL,0A0H;普通EOI循环方式,IR0最低级
OUT0E00H,AL;
RET
I8259ENDP
;*****************************************************************
SERVICE1PROC
PUSHAX
PUSHDS
MOVAX,@DATA
MOVDS,AX
INCTIME
MOVAX,TIME
MOVBX,30
CMPAX,BX
JNAAA1
TIMEDW00H
INCCOUNT;相当于价钱加2元
AA1MOVAL,20H
OUT0E00H,AL;中断结束中断地址
POPDS
POPAX
IRET
SERVICE1ENDP
;***************************************************************
SERVICE2PROC
PUSHAX
PUSHDS
MOVAX,@DATA
MOVDS,AX
INCCOUNT
MOVAX,COUNT
MOVBX,4500
CMPAX,BX
JNAAA1
COUNTDW00H
MOVAX,COUNT
AA2:
CALLB2TOBCD
MOVAL,20H
OUT0E00H,AL;中断结束中断地址
POPDS
POPAX
IRET
SERVICE2ENDP
;********************************************************************
RESTER08HPROC
PUSHDS
MOVDX,WORDPTROLDOA1
MOVDS,WORDPTROLDOA1+2
MOVAH,25H
MOVAL,08H
INT21H
POPDS
RET
RESTER08HENDP
;***************************************************************************
RESTER09HPROC
PUSHDS
MOVDX,WORDPTROLDOA2
MOVDS,WORDPTROLDOA2+2
MOVAH,25H
MOVAL,09H
INT21H
POPDS
RET
RESTER09HENDP
;****************************************************************
B2TOBCDPROCNEAR
CMPAX,9999;AX>9999,则CF置1
JBETRAN
STC
JMPEXIT
TRAN:
PUSHCX
PUSHDX
SUBDX,DX;DX清0
MOVCX,1000;计算千位数
DIVCX
XCHGAX,DX;商在DX中,余数在AX中
MOVCL,4
SHLDX,CL;DX左移4位
MOVCL,100;计算百位数
DIVCL
ADDDL,AL;百位数加到DL中,DX左移4位
MOVCL,4
SHLDX,CL
XCHGAL,AH;余数保留在AL中
SUBAH,AH
MOVCL,10;计算十位数
DIVCL
ADDDL,AL;十位数加到DL中,DX左移4位
MOVCL,4
SHLDX,CL
ADDDL,AH;加个位数
MOVAX,DX;结果送到AX中
POPDX
POPCX
EXIT1:
RET
B2TOBCDENDP
;****************************************************************
BCDTOPROCNEAR
MOVSI,OFFSETDDBB
MOVBH,00H
MOVBL,AL
MOVCL,04H
RORBX,CL
MOV[SI+1],BL;将记录数十位放在其中
SHRBH,CL
MOV[SI],BH;将记录数个位放在其中
SUBBH,BH
MOVBL,AH
MOVCL,04H
RORBX,CL
MOV[SI+3],BL;将记录数千位放在其中
SHRBH,CL
MOV[SI+2],BH;将记录数百位放在其中
RET
BCDTOENDP
;**************************************************************
DISP1PROCNEAR
MOVSI,OFFSETDDBB1
MOVAL,[SI];显示个位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0FEH;用PC口低位显示
OUTDX,AL
MOVCX,DLYC2
LP0:
LOOPLP0
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示百位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0FDH;用PC口低位显示
OUTDX,AL
MOVCX,DLYC2
LP1:
LOOPLP1
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示百位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0FBH;用PC口低位显示
OUTDX,AL
MOVCX,DLYC2
LP2:
LOOPLP2
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示千位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0F7H;用PC低位显示
OUTDX,AL
MOVCX,DLYC2
LP3:
LOOPLP3
MOVAL,0FFH
OUTDX,AL
RET
DISP1ENDP
;***************************************************************
DISP2PROCNEAR
MOVSI,OFFSETDDBB2
MOVAL,[SI];显示个位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0EFH;用PC口高位显示
OUTDX,AL
MOVCX,DLYC2
LP0:
LOOPLP0
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示百位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0DFH;用PC口高位显示
OUTDX,AL
MOVCX,DLYC2
LP1:
LOOPLP1
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示百位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,0BFH;用PC口高位显示
OUTDX,AL
MOVCX,DLYC2
LP2:
LOOPLP2
MOVAL,0FFH
OUTDX,AL
INCSI
MOVAL,[SI];显示千位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;用PB口做动态扫描
OUTDX,AL
MOVDX,PC_ADD;用PC口做位选
MOVAL,7FH;用PC口高位显示
OUTDX,AL
MOVCX,DLYC2
LP3:
LOOPLP3
MOVAL,0FFH
OUTDX,AL
RET
DISP2ENDP
;***************************************************
START1:
CALLIfExit
JZSTART1
JMPExit
IfExitPROCNEAR
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
POPDX
POPAX
RET
IfExitENDP
InitPCIPROCNEAR
MOVAH,00H
MOVAL,03H
INT10H;清屏
MOVAH,0B1H
MOVAL,01H
INT1AH
CMPAH,0
JZInitPCI2
LEADX,msg0
InitPCI1:
MOVAH,09H
INT21H
JMPExit
InitPCI2:
MOVAH,0B1H
MOVAL,02H
MOVCX,Device_ID
MOVDX,Vendor_ID
MOVSI,0
INT1AH
JNCInitPCI3;是否存在StarPCI9052板卡
LEADX,msg1
JMPInitPCI1
InitPCI3:
MOVDI,PCIBAR3
MOVAH,0B1H
MOVAL,09H
INT1AH;读取该卡PCI9052基地址
JNCInitPCI4
LEADX,msg2
JMPInitPCI1
InitPCI4:
ANDCX,0FFFCH
MOVIO_Bit8_BaseAddress,CX
RET
InitPCIENDP
ModifyAddressPROCNEAR
ADDCOM_A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理 课程设计 微机 原理