微机原理 课程设计Word文件下载.docx
- 文档编号:21064818
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:23
- 大小:103.23KB
微机原理 课程设计Word文件下载.docx
《微机原理 课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理 课程设计Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
可以毫不夸张的说,学好学精微机原理,在就业时就有了非常大的优势。
为了让我们更好的掌握汇编语言和各种芯片的特点和功能,安排了我们这次课程设计。
8086CPU及其相应的外围可编程芯片实现对计价器主体功能的实现是本次试验的目的,需要充分考虑了星研电子ES-PCI环境下的硬件条件,我负责这次设计的统筹环节,并负责书写报告。
本论
一、开题论证:
设计满足的基本要求包括:
1、里程显示价格显示(起步价以及起步价之后的里程费用的显示)
2、等时收费
3、复位。
当有人乘车时,司机按“开始键START”,且开动汽车。
增强功能可以设计白天黑夜转换、语音提示功能。
由基本要求,初步设想可以实现基本功能。
出租车上的具有多位显示的计价器(基于单片机)
二、系统整体论证:
根据星研实验环境下,包括怎么样去实现开题要求,在现有的实验室条件下能否演示,或者能否演示其中的主体功能。
只能根据已学知识利用16位CPU及其相应的外围可编程控制芯片实现。
三、硬件方案选择部分:
1.脉冲产生电路包括光电式霍尔式也可以用一个固定的脉冲
2.计数器采用8253计数结束中断方式
3.中断控制器采用8259A
4.显示控制部分用两种选择采用8255控制显示或者8279控制显示
5.显示器件数码管LCD
最后经过相关的论证可以绘制出所要的硬件原图:
显示低四位里程高四位总价
说明:
以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
CLK0/1000
MOVAL,76H
计数器T1为模式3状态,输出方波,二进制计数
MOVDX,T1_ADDR
CLK1/1000
;
OUT1输出频率为1S的方波
MOVAL,10110000B
MOVDX,T2_ADDR
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
RD08ENDP
********************************************************************
WRITE08PROC
PUSHDS
MOVAX,@CODE
MOVDS,AX
MOVDX,OFFSETSERVICE1
MOVAX,2508H
POPDS
WRITE08ENDP
RD09PROC
MOVAL,09H
MOVWORDPTROLD0A2,BX
MOVWORDPTROLD0A2+2,ES
RD09ENDP
WRITE09PROC
MOVDX,OFFSETSERVICE2
MOVAX,2509H
WRITE09ENDP
I8259PROC
MOVAL,12H;
单级使用,边沿触发,不需要设计ICW4
OUT0E00H,AL;
MOVAL,0A0H;
普通EOI循环方式,IR0最低级
OUT0E00H,AL;
I8259ENDP
*****************************************************************
SERVICE1PROC
PUSHAX
INCTIME
MOVAX,TIME
MOVBX,30
CMPAX,BX
JNAAA1
TIMEDW00H
INCCOUNT;
相当于价钱加2元
AA1MOVAL,20H
OUT0E00H,AL;
中断结束中断地址
POPAX
IRET
SERVICE1ENDP
SERVICE2PROC
INCCOUNT
MOVAX,COUNT
MOVBX,4500
COUNTDW00H
AA2:
CALLB2TOBCD
MOVAL,20H
SERVICE2ENDP
RESTER08HPROC
MOVDX,WORDPTROLDOA1
MOVDS,WORDPTROLDOA1+2
MOVAH,25H
MOVAL,08H
RESTER08HENDP
***************************************************************************
RESTER09HPROC
MOVDX,WORDPTROLDOA2
MOVDS,WORDPTROLDOA2+2
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位
SHLDX,CL
XCHGAL,AH;
余数保留在AL中
SUBAH,AH
MOVCL,10;
计算十位数
十位数加到DL中,DX左移4位
ADDDL,AH;
加个位数
MOVAX,DX;
结果送到AX中
POPDX
POPCX
EXIT1:
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
MOV[SI+3],BL;
将记录数千位放在其中
MOV[SI+2],BH;
将记录数百位放在其中
BCDTOENDP
**************************************************************
DISP1PROCNEAR
MOVSI,OFFSETDDBB1
MOVAL,[SI];
显示个位
MOVBX,OFFSETTB
XLATTB
MOVDX,PB_ADD;
用PB口做动态扫描
MOVDX,PC_ADD;
用PC口做位选
MOVAL,0FEH;
用PC口低位显示
MOVCX,DLYC2
LP0:
LOOPLP0
MOVAL,0FFH
INCSI
显示百位
XLATTB
MOVAL,0FDH;
LP1:
LOOPLP1
INCSI
MOVDX,PB_ADD;
MOVAL,0FBH;
LP2:
LOOPLP2
显示千位
MOVAL,0F7H;
用PC低位显示
LP3:
LOOPLP3
MOVAL,0FFH
DISP1ENDP
DISP2PROCNEAR
MOVSI,OFFSETDDBB2
MOVAL,0EFH;
用PC口高位显示
LOOPLP0
MOVAL,0DFH;
LOOPLP1
MOVAL,0BFH;
LOOPLP2
INCSI
MOVAL,7FH;
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
JMPExit
InitPCI2:
MOVAH,0B1H
MOVAL,02H
MOVCX,Device_ID
MOVDX,Vendor_ID
MOVSI,0
JNCInitPCI3;
是否存在St
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理 课程设计 微机 原理