版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、引言 4二、实验题目及要求 5三、硬件电路 52.1、键盘输入模块 52.2、可编程并行通信接口芯片 8255A 62.3、可编程定时器/计数器 9四、源程序 10六、课程设计体会2526七、参考文献本学期我们学习了微型计算机技术及应用这门应用性很强的课程,通 过平时的上机实验,使我们初步了解了8086系统的硬件结构以及部分芯片结构,为了进一步巩固和检测所学知识,我选择基于8086CPU勺模拟计算器设计。要完成设计首先需要构建简单的微型计算机应用系统,其次是 确定组成各部件的芯片,然后画原理图,根据相应的原理以及实现过程, 编写出相应的汇编代码。再根据原理图连接硬件电路,电路连接完成后进
2、行调试。设计过程中我们用到了 8088CPU可编程计时器8253、可编程并 行输入/输出芯片8255A 74LS138矩阵式键盘、六位七段 LED数码管。 我们的模拟计算器能实现2位十进制数以内的及减法运算。模拟计算器设计一、概述设计题目及要求:1. 通过小键盘做加减运算。七段数码管显示器作输入数据和结果数据的显示。2. 数字用小键盘09, R, P, M G作功能键R开始运算(包括撤销运算),显示 0'P+m-g=E 退出返回dos3运算顺序:a. 输入一原始数据显示器跟随显示b. 按+或 -显示器内容不变c. 再输入一数据,显示器跟随显示。d. 按=显示器显示结果数据,当超出能显示
3、的最大值,显示F (溢出)e. 按R重新开始运算f. 按E,结束退出设计思路:首先利用程序不断扫描键盘是不是有输入, 如果没有就一直扫描, 如果有就停止扫描,完成输入,利用汇编的程序核对输入键的数值, 通过调用子程 序实现2位十进制数以内的及减法运算。运算完成后将运算的结果储存并显示到 LED显示器上。硬件电路设计硬件电路 键盘输入及LED数码管通过8255A接口与系统总线连接,键盘的16个 按键组成8*2矩阵,其中8根矩阵线作为8255A的输出线与PB& PB0连接,2根 矩阵线作为8255A的输入线与PC7 PC6连接。键盘采用逐次扫描原理,16个按键 中09座位数字健,+、-、=
4、作为加、减和等号功能键,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 口可以进行输入和输出。按键设置
5、在行、类交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。当列线通过上拉电阻接+5V时,就被钳位在高电平状态。键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判 断。这就是:给航线所有I/O线均置成低电平,然后读入列线电平状态。如国有按键盘下,总会有一根列线电平被拉至低电平,从而使列线输入不全为1。图2-1键盘电路图2-2数码管电路2、可编程并行通信接口芯片8255A(1 )并行输入/输出端口 A,B,C8255A内部包括三个8位的输入输出端口,分别是端口A、端口 B、端口 C,相应信号线是PA7PA0、PB7PB0、PC7PC0。端口都是 8位,都可以作为输入或输出。
6、通常将端口 A和端口 B定义为输入/输出的数据端口,而端口C则既可以作数据端口,又可以作为端口A和端口 B的状态和控制信息的传送端口。(2) A组和B组控制部件端口 A和端口 C的高4位(PC7PC4)构成A组;由A组控 制部件实现控制功能。端口 B和端口 C的低4位(PC3PC0 )构成B组;由B组控制部件实现控制功能。A组和B组利用各自的控制单元来接收读写控制部件的命令和CPU通过数据总线(DOD7)送来的控制字,并根据他们来定义各个端口的操作方式。(3)数据总线缓冲存储器三态双向8位缓冲器,是 8255A与8086CPU之间的数据接口。 与I/O操作有关的数据、控制字和状态信息都是通过该
7、缓冲器进行传 送。(4)读/写控制部件FA2PM2u4039PAD338437RDCSS36GNt635aF754AO33PC7032pcT1103LPCSIIR255A30PC4122PCO1328pcT1427PC20536PCS1625ebcTITFBIL823PB2田222021PA5PA6PA7RESETElEQD3OSDGvccPB7PB6PBSPB3根据控制命令向各个功能部件发出操作指令。图2-3.8255A芯片图8255A完成读/写控制功能的部件。能接收 CPU的控制命令,并RD, WR读、写控制信号:由CS片选信号:由CPU输入,有效时表示该 8255A被选中。CPU输入。R
8、D有效表示 CPU读8255A , WR有效表示 CPU写8255A。RESET复位信号:由CPU输入。RESET信号有效,清除8255A中所有控制字寄存器内容,并将各个端口置成输入 方式。图2-4 .8255A内部结构定义工作方式控制字:100X冥X工作万式0: 8255A中各端口的基本输入/输出万式。D? D& D$ 6 5 D? D D°定义端口 A为方式标志位ixPC厂PC。为输人OxPC lPC°为洽出“端口 B箍入足文端口 B为方式0Jh(PCPG)为输入I 0z(PC7-PC)为输出端口A楡入Ol端口 A输出图2-5 .8255A工作方式控制3、可编程
9、计数器/定时器8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作 1次计数操作。当计 数脉冲是已知周期的时钟信号时,计数就 成为定时。(1)、8253内部结构8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。1.数据总线缓冲器数据总线缓冲器与系统总线连接,DD6D5D4D3D2D1D0CLK0OUT0GET0GND122433425160782539889716151423+5WRRDSAACKLGATEOUTCLK1GATE1UT18位双 向,与CPU交换信息的通道。这是8253与CPU之间的数据接口,它由8位双向三态缓冲寄存器构成, 是CPU
10、与 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或以上编译.*JJ;* LED *;8255 端口.*io_plx_
11、device_id io_plx_ve ndor_id IO PLX SUB IDequ 05406h ;TPC 卡设备 IDequ 010b5h ;TPC 卡厂商 IDEQU 0905410B5H ;TPC卡子设备及厂商IDTIM_CTL EQU 203H-200H ;8253 端口地址TIMER0TIMER1MODE03MODE12INTA00INTA01EQU 200H-200HEQU 201H-200HEQU 36H;8253 端口数据EQU 74HEQU 20HEQU 21HPORTSEGEQU 211H-200H ;数码管端口地址PORTBITEQU 210H-200Hpa55 e
12、qu 218h-200H pb55 equ 219h-200H p55ctl equ 21bh-200Hdata segme ntcsreg dw ?ipreg dw ?;旧中断向量保存空间io_9054base_address db 4 DUP(O) ;TPC 卡 PCI 接口芯片 I/O 基地址暂存空间 io_base_address db 4 DUP(0) ;TPC卡 I/O 基地址暂存空间in terrupt_li ne pcicard notfind error !',0dh,0ah,'$'db 2 DUP(0);TPC卡中断号暂存空间db 0dh,0ah,&
13、#39;TPC pci card not find or address/i nterruptio9054baseaddress','$'iobaseaddressdb 0dh,0ah,'TPC pci card 9054 Chip I/O Base Address :db 0dh,0ah,'TPC pci card I/O Base Address : ','$'intn umberdb 0dh,0ah,'TPC pci card In terrupt Line :','$'en ter_retu
14、rndb 0dh,0ah,'$'MESS DB '8253A TIMER0 IN MODE3! COUNT=0200H',0AH,0DHDB '8253A TIMER1 IN MODE2! 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-77hirq_mask_0_7_table db 011111110b,
15、011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111bdb 011111011b,011111011b,011111011b,011111011bdb 011111011b,011111011b,011111011b,011111011b;新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_8_15_table db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffhdb 011111110b,011111101b,0111110
16、11b,011110111bdb 011101111b,011011111b,010111111b,001111111b;新的中断掩码,中断0-7时全一,中断8-15时从低至高相应位为零INTMASK DB ?LED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40HDB 0AH,0DH,'$'tablel dw 0101h,0102h,0104h,0108h,0110h,0120h,0140h,0180hdw 0201h,0202h,0204h,0208h,0210h,0220h,0240h,0280hdw 0401h,0402h,040
17、4h,0408h,0410h,0420h,0440h,0480hchar db 'CDEFBA9845673210 RPMG' mes db 'PLAY ANY KEY IN THE SMALL KEYBOARD! ',0ah,0dhdb 'IT WILL BE ON THE SCREEN! END WITH R or ANY KEY',0ah,0dh,'$' ;extra datanuml db 6 dup (?) num2 db 6 dup (?) result db 6 dup (?) count db 0 operator
18、 db 0LedNum db 6 dup (?) data ends stacks segme nt db 100 dup (?)STA DW 512 DUP (?)TOP EQU LENGTH STAstacks endscode segme ntassume cs:code,ds:data,ss:stacks,es:datastart:;En able Local In terrupt In put.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findtpc;查找TPC卡资源并显示MOV DX,word ptr
19、 io_base_address ;初始化 8253add dx,TIM_CTLMOV AL,MODE03OUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIMER0MOV AL,00hOUT DX,ALMOV AL,02HOUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIM_CTLMOV AL,MODE12OUT DX,ALMOV DX,word ptr io_base_addressadd dx,TIMER1MOV AL,0aHOUT DX,ALMOV AL,00OUT DX,ALMOV DX,O
20、FFSET MESSMOV AH,09INT 21HMOV DX,OFFSET MES ;显示提示MOV AH,09INT 21Hmov dx,word ptr io_9054base_addressadd dx,68h ; 设置tpc 卡中9054芯片io 口 ,使能中断 in ax,dxor ax,0900hout dx,axmov bx,word ptr in terrupt_li ne ;保存原中断向量mov al,byte ptr irq_vect+bxmov ah,35hint 21hmov ax,esmov csreg,axmov ipreg,bxmov bx,word ptr
21、in terrupt_li ne ;设置新中断向量mov al,byte ptr irq_vect+bxmov cx,csmov ds,cxmov dx,offset in t_procmov ah,25hint 21hmov ax,datamov ds,axmov es,axin al, 21h;设置中断掩码mov bx,word ptr in terrupt_li nemov ah,byte ptr irq_mask_0_7_table+bx and al,ahout 21h, alin al, 0a1hmov bx,word ptr in terrupt_li nemov ah,byte
22、 ptr irq_mask_8_15_table+bx and al,ahout 0a1h, alsti;开中断Reset:;in itializatio nLEA BX, num1CALL ClearNumLEA BX, num2CALL ClearNumMOV byte ptr count,。LEA BX, num1CALL LedShowFirstRead:LEA BX, num1CALL ReadNumCMP byte ptr operator,4JZ ResetCMP byte ptr operator,5JZ Fun ExitLoopRead:MOV DL,operatorLEA
23、BX, num2CALL ReadNumCMP byte ptr operator,4JZ ResetCMP byte ptr operator,5JZ Fun ExitCMP DL,1JZ Fun AddCMP DL,2JZ FunMinusMidJmp2:JMP FirstReadMidJmp3:JMP Reset;several choice for the prior operatorFun Add:CALL AddNumLEA BX, num1JMP Ope2FunMinus:CALL Min usNumLEA BX, num1Ope2:CALL LedShowLEA BX, num
24、2CALL ClearNumLEA BX, num1CALL ClearNumJMP FirstReadFun Equal:JMP ResetFun Clear:JMP ResetFun Exit:JMP ExitErrorOut:;output the error messageMOV word ptr nu m1,0A0AHMOV word ptr num1+2,0A0AHMOV word ptr num1+4,0A0AHLEA BX, num1call LedShowErrorGet:;reset the error status;only R and E can passCALL ke
25、yCMP DL,'E'JZ Fun ExitCMP DL,'R'JZ MidJmp3JMP ErrorGetJudge:CMP byte ptr operator,3JZ MidJmp2Exit: climov bx,word ptr interrupt_line;恢复中断掩码mov ah,byte ptr irq_mask_0_7_table+bx not ahin al, 21hor al, ahout 21h, almov bx,word ptr in terrupt_li nemov ah,byte ptr irq_mask_8_15_table+bx
26、not ahin al, 0a1hor al, ahout 0a1h, almov bx,word ptr interrupt_line;恢复原中断向量mov al,byte ptr irq_vect+bxmov dx,ipregmov cx,csregmov ds,cxmov ah,25hint 21hmov ax,data ;设置tpc 卡中9054芯片io 口,关闭中断 mov ds,axmov dx,word ptr io_9054base_addressadd dx,68hin ax,dxand ax,0f7ffhout dx,axmov ax,4c00hint 21h;退出Read
27、Num proc;if you want to use this procedure;you must provide the nu mber address to BXPUSH AXPUSH CXPUSH DXRead in:;en ter the first nu mberPUSH BXcall key;get a char in (dl) and display itPOP BXMOV AL,DL;operator symbol;plusMOV byte ptr operator,1CMP AL,卩JZ ExitRead;min usMOV byte ptr operator,2CMP
28、AL,'M'JZ ExitRead;equalMOV byte ptr operator,3CMP AL,'G'JZ ExitRead;clearMOV byte ptr operator,4CMP AL,'R'JZ ExitRead;exitMOV byte ptr operator,5CMP AL,'E'JZ ExitRead;illegal symbolCMP AL,'0'JB Readi nCMP AL,9JA Readi n;nu mberCMP byte ptr count,6JZ Readi nLef
29、tMove:;mov the nu mberMOV CX,5MOV SI,0MoveData:MOV DL,BX+SI+1MOV BX+SI,DLINC SILOOP MoveData;in sert the nu mberAND AL,0FHMOV BX+5,ALcall LedShowINC cou ntJMP ReadinExitRead:MOV cou nt,0POP DXPOP CXPOP AXretReadNum endpMidJmp:JMP ErrorOutAddNum proc;add numl and num2MOV CX,6LEA BX, num1DEC BXAND CX,
30、CXAddLoop:MOV SI,CXMOV AL,BX+SIADC AL,BX+SI+6AAAMOV BXSI,ALLOOP AddLoopJC MidJmp retAddNum endpMinu sNum proc;minus num1 and num2MOV CX,6LEA BX, num1DEC BXAND CX,CXMinu sLoop:MOV SI,CXMOV AL,BX+SISBB AL,BX+SI+6AASMOV BXSI,ALLOOP Minu sLoopJC MidJmp retMinu sNum endpLedShow proc;simulate LED show;pro
31、vide the nu mber address to BX;clear LED segme ntPUSH BXLEA BX, LedNumADD BX,2CALL ClearNumPOP BX;Move the data to LED segme ntLEA DI,LedNumMOV CX,6MOV SI,0ShowLoop:MOV AL,BX+SIPUSH DIADD DI,SIMOV DI,ALPOP DIINC SILOOP ShowLoopretLedShow endpClearNum proc ;clear the nu mber ;provide nu mber address
32、to BXMOV CX,6DEC BXClearZero:MOV SI,CXMOV byte ptr BX+SI,0LOOP ClearZeroretClearNum endpkey proc n earkst:mov al,82hMOV DX,word ptr io_base_addressadd dx,p55ctlout dx,al;set comma nd word of 8255a;porta for output,portb for in put wait1:n ext:mov al,00MOV DX,word ptr io_base_addressadd dx,pa55out dx
33、,al;porta output 00MOV DX,word ptr io_base_addressadd dx,pb55 in al,dx cmp al,0ffh jz wait1 push ax;get col data;no key is closed ,wait ;save the col datapush axcall delayMOV DX,word ptr io_base_addressadd dx,p55ctlmov al,90h;set comma nd word of 8255aout dx,al;porta for in put,portb for outputMOV D
34、X,word ptr io_base_addressadd dx,pb55pop axout dx,al;output col data from portbMOV DX,word ptr io_base_addressadd dx,pa55in al,dx;(al) is row datapop bxmov ah,bl;(ah) is col datanot axmov si,offset table1mov di,offset charmov cx,24tt:cmp ax,si;cmp (col,row) with every wordjz nn;in the tabledec cxjz
35、kstadd si,2inc dijmp ttnn:mov dl,dimov ah,02int 21hpush dxmov al,82hMOV DX,word ptr io_base_addressadd dx,p55ctlout dx,al;set comma nd word of 8255a;porta for output,portb for inputwait2:mov al,00MOV DX,word ptr io_base_address add dx,pa55out dx,al;porta output 00MOV DX,word ptr io_base_address add
36、dx,pb55in al,dx;get col datacmp al,0ffhjnz wait2;wait un til the key is uppop dx retkey endpdelay proc n earpush ax ;delay 50ms-100mspush bxpush cxpush dxmov ah,0int 1ahmov bx,dxdelay1:mov ah,0int 1ahcmpbx,dxjzdelay1movbx,dxdelay2:movah,0int1ahcmpbx,dxjz delay2popdxpopcxpopbxpopaxretdelay endpin t_p
37、roc proc far cli push axPUSH CX push dxPUSH DIpush dsMOVAX,DATAMOVDS,AXMOVDI,OFFSET LedNumMOVCL,01DIS1: MOVAL,DIMOVBX,OFFSET LEDXLATMOV DX,word ptr io_base_addressadd dx,PORTSEGOUTDX,ALMOVAL,CLMOV DX,word ptr io_base_addressadd dx,PORTBITOUTDX,ALPUSHCXMOVCX,8000H;显示时间延迟TimeDELAY: LOOP TimeDELAYPOPCX
38、CMPCL,20HJZQUITINCDISHLCL,1MOVAL,00OUTDX,ALJMPDIS1QUIT:MOV DX,word ptr io_base_address add dx,PORTBITMOV AL,00OUT DX,ALmov al,20h;Send EOIout 0a0h,alout 20h,almov cx,0ffffhloopx:nop延时loop loopx;pop dsPOP DIpop dxPOP CXpop axstiiret in t_proc endp;检查PCI BIOS是否存在fin dtpc proc n ear pushad pushfd MOVX,
39、0B101H INT 1AHJC findtpc_notfind;查找TPC卡资源并显示MOVX,0B102HMOVCX,io_plx_device_idMOV)X,io_plx_ve ndor_id MO>SI,0INT 1AHJC findtpc_notfind;检查TPC卡是否安装,设备号、厂商号MOVX,0B10AHMOV)I,02CHINT 1AHJC findtpc_notfindCMPE CX,IO_PLX_SUBDJNZfi ndtpc_notfi nd;检查TPC卡是否安装,子设备号、厂商号MOVX,0B10AHMOVDI,14HINT 1AHJC findtpc_no
40、tfind;读TPC卡9054芯片I/O基址信息movdword ptr io_9054base_address,ecxand ecx,1jz findtpc_notfind;检查是否为i/o基址信息mov ecx,dword ptr io_9054base_addressand ecx,0fffffffehmov dword ptr io_9054base_address,ecx ; 去除 i/o 指示位并保存MOVX,0B10AHMOVDI,18HINT 1AHJC findtpc_notfind;读 TPC卡 I/O 基址信息movdword ptr io_base_address,ec
41、xand ecx,1jz findtpc_notfind;检查是否为i/o基址信息movecx,dword ptr io_base_addressand ecx,0fffffffehmovdword ptr io_base_address,ecx ;去除 i/o 指示位并保存MOVX,0B10AHMOV)I,3CHINT 1AHJC findtpc_notfind;读 TPC卡中断信息and cx,0ffhmovword ptr interrupt_line,cx;去除 interrupt其它指示位并保存mov dx,offset io9054baseaddress ; 显示 i/o 提示信息 movah,09h int 21hmov ax,word ptr io_9054base_addresscall dispword;显示 i/o 基地址movdx,offset iobaseaddress;显示 i/o 提示信息movah,09h int 21hmovax,word ptr io_base_addresscall dispword;显示 i/o 基地址movdx,offset intnumber;显示 interrupt 提示信息movah,09h int 21hmovax,wor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年服装加工厂管理合同3篇
- 二零二四年游戏直播平台聘用主播合同标准文本3篇
- 二零二五年度光伏发电项目承包商履约服务保证合同4篇
- 2025年存量房买卖合同(含智能家居能源管理系统)2篇
- 二零二五年度化学品储存仓库储藏室安全防护合同2篇
- 二零二五年度草莓种植基地环境监测与治理合同3篇
- 二零二五年度新能源汽车充电及燃油补充合同4篇
- 二零二五年度车展场地租赁及专业观众邀请合同4篇
- 二零二四年度智能农机设备销售合同范本3篇
- 二零二五年度情侣分手风险控制与情感维护合同3篇
- 课题申报书:GenAI赋能新质人才培养的生成式学习设计研究
- 润滑油知识-液压油
- 2024年江苏省中医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 骆驼祥子-(一)-剧本
- 全国医院数量统计
- 《中国香文化》课件
- 2024年医美行业社媒平台人群趋势洞察报告-医美行业观察星秀传媒
- 第六次全国幽门螺杆菌感染处理共识报告-
- 天津市2023-2024学年七年级上学期期末考试数学试题(含答案)
- 经济学的思维方式(第13版)
- 盘锦市重点中学2024年中考英语全真模拟试卷含答案
评论
0/150
提交评论