接口技术计算器设计课程设计文档格式.docx
- 文档编号:21785586
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:27
- 大小:128.29KB
接口技术计算器设计课程设计文档格式.docx
《接口技术计算器设计课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《接口技术计算器设计课程设计文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个I/O口对它进行检测,而键盘往往这需要键盘按钮数一半的I/O口数对它进行检测,也许对一个比较简单的系统I/O口数一般不是问题,但对于一个大型、复杂的系统来说I/O资源就显得非常珍贵了,尽量减少I/O使用是非常利于降低成本,另外一方面键盘比用独立按键要美观。
我们设计时使用的是8*2行列式键盘,如图2-1所示。
图中有8行2列,8根行线与PA口相连,2根列线与PC口的PC6、PC7相连。
PA、PB口要么全部输入或输出。
PC口可以进行输入和输出。
按键设置在行、类交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。
当列线通过上拉电阻接+5V时,就被钳位在高电平状态。
键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断。
这就是:
给航线所有I/O线均置成低电平,然后读入列线电平状态。
如国有按键盘下,总会有一根列线电平被拉至低电平,从而使列线输入不全为1。
图2-1键盘电路图2-2数码管电路
2、可编程并行通信接口芯片8255A
(1)并行输入/输出端口A,B,C
8255A内部包括三个8位的输入输出端口,分别是端口A、端口B、端口C,相应信号线是PA7~PA0、PB7~PB0、PC7~PC0。
端口都是8位,都可以作为输入或输出。
通常将端口A和端口B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口B的状态和控制信息的传送端口。
(2)A组和B组控制部件
端口A和端口C的高4位(PC7~PC4)构成A组;
由A组控制部件实现控制功能。
端口B和端口C的低4位(PC3~PC0)构成B组;
由B组控制部件实现控制功能。
A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(D0~D7)送来的控制字,并根据他们来定义各个端口的操作方式。
(3)数据总线缓冲存储器
三态双向8位缓冲器,是8255A与8086CPU之间的数据接口。
与I/O操作有关的数据、控制字和状态信息都是通过该缓冲器进行传送。
(4)读/写控制部件
8255A完成读/写控制功能的部件。
能接收CPU的控制命令,并根据控制命令向各个功能部件发出操作指令。
图2-3.8255A芯片图
CS片选信号:
由CPU输入,有效时表示该8255A被选中。
RD,WR读、写控制信号:
由CPU输入。
RD有效表示CPU读8255A,WR有效表示CPU写8255A。
RESET复位信号:
RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入方式。
图2-4.8255A内部结构
定义工作方式控制字:
工作方式0:
8255A中各端口的基本输入/输出方式。
图2-5.8255A工作方式控制
3、可编程计数器/定时器
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
(1)、8253内部结构
8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。
1.数据总线缓冲器
数据总线缓冲器与系统总线连接,8位双向,与CPU交换信息的通道。
这是8253与CPU之间的数据接口,它由8位双向三态缓冲寄存器构成,是CPU与8253之间交换信息的必经之路。
2.读/写控制
读/写控制分别连接系统的IOR和IOW,由CPU控制着访问8253的内部通道。
接收CPU送入的读/写控制信号,并完成对芯片内部各功能部件的控制功能,因此,它实际上是8253芯片内部的控制器。
A1A0:
端口选择信号,由CPU输入。
8253内部有3个独立的通道和一个控制字寄存器,它们构成8253芯片的4个端口,CPU可对3个通道进行读/写操作3对控制字寄存器进行写操作。
这4个端口地址由最低2位地址码A1、A0来选择。
一、源程序
;
386以上微机适用
纯dos下才能使用
tasm4.1或以上编译
*********************;
*LED*;
io_plx_device_idequ05406h;
TPC卡设备ID
io_plx_vendor_idequ010b5h;
TPC卡厂商ID
IO_PLX_SUB_IDEQU0905410B5H;
TPC卡子设备及厂商ID
TIM_CTLEQU203H-200H;
8253端口地址
TIMER0EQU200H-200H
TIMER1EQU201H-200H
MODE03EQU36H;
8253端口数据
MODE12EQU74H
INTA00EQU20H
INTA01EQU21H
PORTSEGEQU211H-200H;
数码管端口地址
PORTBITEQU210H-200H
pa55equ218h-200H;
8255端口
pb55equ219h-200H
p55ctlequ21bh-200H
datasegment
csregdw?
ipregdw?
;
旧中断向量保存空间
io_9054base_addressdb4DUP(0);
TPC卡PCI接口芯片I/O基地址暂存空间
io_base_addressdb4DUP(0);
TPC卡I/O基地址暂存空间
interrupt_linedb2DUP(0);
TPC卡中断号暂存空间
pcicardnotfinddb0dh,0ah,'
TPCpcicardnotfindoraddress/interrupterror!
!
'
0dh,0ah,'
$'
io9054baseaddressdb0dh,0ah,'
TPCpcicard9054ChipI/OBaseAddress:
'
'
iobaseaddressdb0dh,0ah,'
TPCpcicardI/OBaseAddress:
intnumberdb0dh,0ah,'
TPCpcicardInterruptLine:
enter_returndb0dh,0ah,'
MESSDB'
8253ATIMER0INMODE3!
COUNT=0200H'
0AH,0DH
DB'
8253ATIMER1INMODE2!
COUNT=0aH'
0AH,0DH,'
irq_vectdb08h,09h,0ah,0bh,0ch,0dh,0eh,0fh,70h,71h,72h,73h,74h,75h,76h,77h
;
新的中断向量,中断0-7的向量为:
08h-0fh,中断8-15的向量为:
70h-77h
irq_mask_0_7_tabledb011111110b,011111101b,011111011b,011110111b
db011101111b,011011111b,010111111b,001111111b
db011111011b,011111011b,011111011b,011111011b
新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零
irq_mask_8_15_tabledb0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
db011111110b,011111101b,011111011b,011110111b
新的中断掩码,中断0-7时全一,中断8-15时从低至高相应位为零
INTMASKDB?
LEDDB3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40H
DB0AH,0DH,'
table1dw0101h,0102h,0104h,0108h,0110h,0120h,0140h,0180h
dw0201h,0202h,0204h,0208h,0210h,0220h,0240h,0280h
dw0401h,0402h,0404h,0408h,0410h,0420h,0440h,0480h
chardb'
CDEFBA9845673210RPMG'
mesdb'
PLAYANYKEYINTHESMALLKEYBOARD!
0ah,0dh
db'
ITWILLBEONTHESCREEN!
ENDWITHRorANYKEY'
0ah,0dh,'
extradata
num1db6dup(?
)
num2db6dup(?
resultdb6dup(?
countdb0
operatordb0
LedNumdb6dup(?
dataends
stackssegment
db100dup(?
STADW512DUP(?
TOPEQULENGTHSTA
stacksends
codesegment
assumecs:
code,ds:
data,ss:
stacks,es:
data
start:
EnableLocalInterruptInput
.386
cli
movax,data
movds,ax
moves,ax
movax,stacks
movss,ax
callfindtpc;
查找TPC卡资源并显示
MOVDX,wordptrio_base_address;
初始化8253
adddx,TIM_CTL
MOVAL,MODE03
OUTDX,AL
MOVDX,wordptrio_base_address
adddx,TIMER0
MOVAL,00h
MOVAL,02H
MOVAL,MODE12
adddx,TIMER1
MOVAL,0aH
MOVAL,00
MOVDX,OFFSETMESS
MOVAH,09
INT21H
MOVDX,OFFSETMES;
显示提示
movdx,wordptrio_9054base_address
adddx,68h;
设置tpc卡中9054芯片io口,使能中断
inax,dx
orax,0900h
outdx,ax
movbx,wordptrinterrupt_line;
保存原中断向量
moval,byteptr[irq_vect+bx]
movah,35h
int21h
movax,es
movcsreg,ax
movipreg,bx
设置新中断向量
movcx,cs
movds,cx
movdx,offsetint_proc
movah,25h
inal,21h;
设置中断掩码
movbx,wordptrinterrupt_line
movah,byteptr[irq_mask_0_7_table+bx]
andal,ah
out21h,al
inal,0a1h
movah,byteptr[irq_mask_8_15_table+bx]
out0a1h,al
sti;
开中断
Reset:
initialization
LEABX,num1
CALLClearNum
LEABX,num2
MOVbyteptrcount,0
CALLLedShow
FirstRead:
CALLReadNum
CMPbyteptroperator,4
JZReset
CMPbyteptroperator,5
JZFunExit
LoopRead:
MOVDL,operator
CMPDL,1
JZFunAdd
CMPDL,2
JZFunMinus
MidJmp2:
JMPFirstRead
MidJmp3:
JMPReset
severalchoicefortheprioroperator
FunAdd:
CALLAddNum
JMPOpe2
FunMinus:
CALLMinusNum
Ope2:
FunEqual:
FunClear:
JMPReset
FunExit:
JMPExit
ErrorOut:
outputtheerrormessage
MOVwordptrnum1,0A0AH
MOVwordptrnum1+2,0A0AH
MOVwordptrnum1+4,0A0AH
callLedShow
ErrorGet:
resettheerrorstatus
onlyRandEcanpass
CALLkey
CMPDL,'
E'
R'
JZMidJmp3
JMPErrorGet
Judge:
CMPbyteptroperator,3
JZMidJmp2
Exit:
movbx,wordptrinterrupt_line;
恢复中断掩码
notah
inal,21h
oral,ah
恢复原中断向量
movdx,ipreg
movcx,csreg
movax,data;
设置tpc卡中9054芯片io口,关闭中断
adddx,68h
andax,0f7ffh
movax,4c00h
int21h;
退出
ReadNumproc
ifyouwanttousethisprocedure
youmustprovidethenumberaddresstoBX
PUSHAX
PUSHCX
PUSHDX
Readin:
enterthefirstnumber
PUSHBX
callkey;
getacharin(dl)anddisplayit
POPBX
MOVAL,DL
operatorsymbol
plus
MOVbyteptroperator,1
CMPAL,'
P'
JZExitRead
minus
MOVbyteptroperator,2
M'
equal
MOVbyteptroperator,3
G'
JZExitRead
clear
MOVbyteptroperator,4
exit
MOVbyteptroperator,5
illegalsymbol
0'
JBReadin
9'
JAReadin
number
CMPbyteptrcount,6
JZReadin
LeftMove:
movthenumber
MOVCX,5
MOVSI,0
MoveData:
MOVDL,[BX+SI+1]
MOV[BX+SI],DL
INCSI
LOOPMoveData
insertthenumber
ANDAL,0FH
MOV[BX+5],AL
INCcount
JMPReadin
ExitRead:
MOVcount,0
POPDX
POPCX
POPAX
ret
ReadNumendp
MidJmp:
JMPErrorOut
AddNumproc
addnum1andnum2
MOVCX,6
DECBX
ANDCX,CX
AddLoop:
MOVSI,CX
MOVAL,[BX+SI]
ADCAL,[BX+SI+6]
AAA
MOV[BX][SI],AL
LOOPAddLoop
JCMidJmp
AddNumendp
MinusNumproc
minusnum1andnum2
MinusLoop:
SBBAL,[BX+SI+6]
AAS
LOOPMinusLoop
JCMidJmp
MinusNumendp
LedShowproc
simulateLEDshow
providethenumberaddresstoBX
clearLEDsegment
LEABX,LedNum
ADDBX,2
MovethedatatoLEDsegment
LEADI,LedNum
ShowLoo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 技术 计算器 设计 课程设计