接口技术计算器研发设计课程研发设计.docx
- 文档编号:30818804
- 上传时间:2024-01-30
- 格式:DOCX
- 页数:33
- 大小:130.20KB
接口技术计算器研发设计课程研发设计.docx
《接口技术计算器研发设计课程研发设计.docx》由会员分享,可在线阅读,更多相关《接口技术计算器研发设计课程研发设计.docx(33页珍藏版)》请在冰豆网上搜索。
接口技术计算器研发设计课程研发设计
一、引言……………………………………………………………………………4
二、实验题目及要求………………………………………………………………5
三、硬件电路………………………………………………………………………5
2.1、键盘输入模块…………………………………………………………………5
2.2、可编程并行通信接口芯片8255A……………………………………………6
2.3、可编程定时器/计数器………………………………………………………9
四、源程序……………………………………………………………………………10
六、课程设计体会……………………………………………………………………25
七、参考文献…………………………………………………………………………26
引言
本学期我们学习了微型计算机技术及应用这门应用性很强的课程,通过平时的上机实验,使我们初步了解了8086系统的硬件结构以及部分芯片结构,为了进一步巩固和检测所学知识,我选择基于8086CPU的模拟计算器设计。
要完成设计首先需要构建简单的微型计算机应用系统,其次是确定组成各部件的芯片,然后画原理图,根据相应的原理以及实现过程,编写出相应的汇编代码。
再根据原理图连接硬件电路,电路连接完成后进行调试。
设计过程中我们用到了8088CPU、可编程计时器8253、可编程并行输入/输出芯片8255A、74LS138、矩阵式键盘、六位七段LED数码管。
我们的模拟计算器能实现2位十进制数以内的及减法运算。
矚慫润厲钐瘗睞枥庑赖。
模拟计算器设计
一、概述
设计题目及要求:
1.通过小键盘做加减运算。
七段数码管显示器作输入数据和结果数据的显示。
2.数字用小键盘0~9,R,P,M,G作功能键
R开始运算(包括撤销运算),显示‘0'
p+
m-
g=
E退出返回dos
3运算顺序:
a.输入一原始数据显示器跟随显示
b.按+或-显示器内容不变
c.再输入一数据,显示器跟随显示。
d.按=显示器显示结果数据,当超出能显示的最大值,显示F(溢出)
e.按R重新开始运算
f.按E,结束退出
设计思路:
首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值,通过调用子程序实现2位十进制数以内的及减法运算。
运算完成后将运算的结果储存并显示到LED显示器上。
聞創沟燴鐺險爱氇谴净。
二、硬件电路设计
硬件电路键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB7~PB0连接,2根矩阵线作为8255A的输入线与PC7、PC6连接。
键盘采用逐次扫描原理,16个按键中0~9座位数字健,+、-、=作为加、减和等号功能键,C为清零键。
残骛楼諍锩瀨濟溆塹籟。
1、键盘输入模块
键盘是常用信息输入元件,其实键盘也是由一个个按钮组成,如果是独立按钮的话必须要需要一个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复位信号:
由CPU输入。
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
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
db011101111b,011011111b,010111111b,001111111b
;新的中断掩码,中断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
OUTDX,AL
MOVAL,02H
OUTDX,AL
MOVDX,wordptrio_base_address
adddx,TIM_CTL
MOVAL,MODE12
OUTDX,AL
MOVDX,wordptrio_base_address
adddx,TIMER1
MOVAL,0aH
OUTDX,AL
MOVAL,00
OUTDX,AL
MOVDX,OFFSETMESS
MOVAH,09
INT21H
MOVDX,OFFSETMES;显示提示
MOVAH,09
INT21H
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
movbx,wordptrinterrupt_line;设置新中断向量
moval,byteptr[irq_vect+bx]
movcx,cs
movds,cx
movdx,offsetint_proc
movah,25h
int21h
movax,data
movds,ax
moves,ax
inal,21h;设置中断掩码
movbx,wordptrinterrupt_line
movah,byteptr[irq_mask_0_7_table+bx]
andal,ah
out21h,al
inal,0a1h
movbx,wordptrinterrupt_line
movah,byteptr[irq_mask_8_15_table+bx]
andal,ah
out0a1h,al
sti;开中断
Reset:
;initialization
LEABX,num1
CALLClearNum
LEABX,num2
CALLClearNum
MOVbyteptrcount,0
LEABX,num1
CALLLedShow
FirstRead:
LEABX,num1
CALLReadNum
CMPbyteptroperator,4
JZReset
CMPbyteptroperator,5
JZFunExit
LoopRead:
MOVDL,operator
LEABX,num2
CALLReadNum
CMPbyteptroperator,4
JZReset
CMPbyteptroperator,5
JZFunExit
CMPDL,1
JZFunAdd
CMPDL,2
JZFunMinus
MidJmp2:
JMPFirstRead
MidJmp3:
JMPReset
;severalchoicefortheprioroperator
FunAdd:
CALLAddNum
LEABX,num1
JMPOpe2
FunMinus:
CALLMinusNum
LEABX,num1
Ope2:
CALLLedShow
LEABX,num2
CALLClearNum
LEABX,num1
CALLClearNum
JMPFirstRead
FunEqual:
JMPReset
FunClear:
JMPReset
FunExit:
JMPExit
ErrorOut:
;outputtheerrormessage
MOVwordptrnum1,0A0AH
MOVwordptrnum1+2,0A0AH
MOVwordptrnum1+4,0A0AH
LEABX,num1
callLedShow
ErrorGet:
;resettheerrorstatus
;onlyRandEcanpass
CALLkey
CMPDL,'E'
JZFunExit
CMPDL,'R'
JZMidJmp3
JMPErrorGet
Judge:
CMPbyteptroperator,3
JZMidJmp2
Exit:
cli
movbx,wordptrinterrupt_line;恢复中断掩码
movah,byteptr[irq_mask_0_7_table+bx]
notah
inal,21h
oral,ah
out21h,al
movbx,wordptrinterrupt_line
movah,byteptr[irq_mask_8_15_table+bx]
notah
inal,0a1h
oral,ah
out0a1h,al
movbx,wordptrinterrupt_line;恢复原中断向量
moval,byteptr[irq_vect+bx]
movdx,ipreg
movcx,csreg
movds,cx
movah,25h
int21h
movax,data;设置tpc卡中9054芯片io口,关闭中断
movds,ax
movdx,wordptrio_9054base_address
adddx,68h
inax,dx
andax,0f7ffh
outdx,ax
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
CMPAL,'M'
JZExitRead
;equal
MOVbyteptroperator,3
CMPAL,'G'
JZExitRead
;clear
MOVbyteptroperator,4
CMPAL,'R'
JZExitRead
;exit
MOVbyteptroperator,5
CMPAL,'E'
JZExitRead
;illegalsymbol
CMPAL,'0'
JBReadin
CMPAL,'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
callLedShow
INCcount
JMPReadin
ExitRead:
MOVcount,0
POPDX
POPCX
POPAX
ret
ReadNumendp
MidJmp:
JMPErrorOut
AddNumproc
;addnum1andnum2
MOVCX,6
LEABX,num1
DECBX
ANDCX,CX
AddLoop:
MOVSI,CX
MOVAL,[BX+SI]
ADCAL,[BX+SI+6]
AAA
MOV[BX][SI],AL
LOOPAddLoop
JCMidJmp
ret
AddNumendp
MinusNumproc
;minusnum1andnum2
MOVCX,6
LEABX,num1
DECBX
ANDCX,CX
MinusLoop:
MOVSI,CX
MOVAL,[BX+SI]
S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 技术 计算器 研发 设计 课程