收藏 分销(赏)

接口技术计算器设计课程设计.doc

上传人:快乐****生活 文档编号:2531629 上传时间:2024-05-31 格式:DOC 页数:26 大小:309.04KB 下载积分:10 金币
下载 相关 举报
接口技术计算器设计课程设计.doc_第1页
第1页 / 共26页
接口技术计算器设计课程设计.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
接口技术计算器设计课程设计 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 2 个人收集整理 勿做商业用途 目 录 一、 引言 ……………………………………………………………………………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。读/写控制 8253 11 10 9 8 7 6 5 4 3 2 D7 1 D6 D5 D4 D3 D2 D1 D0 CLK0 OUT0 GET0 GND 12 14 15 16 17 18 19 20 21 22 23 24 0UT1 CLK1 GATE1 OUT2 GATE2 A1 WR A0 CS CKL2 RD +5v 13 读/写控制分别连接系统的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_id equ 05406h ;TPC卡设备ID io_plx_vendor_id equ 010b5h ;TPC卡厂商ID IO_PLX_SUB_ID EQU 0905410B5H ;TPC卡子设备及厂商ID TIM_CTL EQU 203H-200H ;8253端口地址 TIMER0 EQU 200H—200H TIMER1 EQU 201H-200H MODE03 EQU 36H ;8253端口数据 MODE12 EQU 74H INTA00 EQU 20H INTA01 EQU 21H PORTSEG EQU 211H-200H ;数码管端口地址 PORTBIT EQU 210H—200H pa55 equ 218h-200H ;8255端口 pb55 equ 219h—200H p55ctl equ 21bh—200H data segment csreg dw ? ipreg dw ? ;旧中断向量保存空间 io_9054base_address db 4 DUP(0) ;TPC卡PCI接口芯片I/O基地址暂存空间 io_base_address db 4 DUP(0) ;TPC卡I/O基地址暂存空间 interrupt_line db 2 DUP(0) ;TPC卡中断号暂存空间 pcicardnotfind db 0dh,0ah,’TPC pci card not find or address/interrupt error !!!’,0dh,0ah,’$' io9054baseaddress db 0dh,0ah,'TPC pci card 9054 Chip I/O Base Address : ’,’$' iobaseaddress db 0dh,0ah,'TPC pci card I/O Base Address : ',’$' intnumber db 0dh,0ah,’TPC pci card Interrupt Line : ',’$' enter_return db 0dh,0ah,’$’ MESS DB ’8253A TIMER0 IN MODE3! COUNT=0200H’,0AH,0DH DB ’8253A TIMER1 IN MODE2! COUNT=0aH’,0AH,0DH,'$' irq_vect db 08h,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_table db 011111110b,011111101b,011111011b,011110111b db 011101111b,011011111b,010111111b,001111111b db 011111011b,011111011b,011111011b,011111011b db 011111011b,011111011b,011111011b,011111011b ;新的中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零 irq_mask_8_15_table db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh db 011111110b,011111101b,011111011b,011110111b db 011101111b,011011111b,010111111b,001111111b ;新的中断掩码,中断0—7时全一,中断8—15时从低至高相应位为零 INTMASK DB ? LED DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,40H DB 0AH,0DH,'$' table1 dw 0101h,0102h,0104h,0108h,0110h,0120h,0140h,0180h dw 0201h,0202h,0204h,0208h,0210h,0220h,0240h,0280h dw 0401h,0402h,0404h,0408h,0410h,0420h,0440h,0480h char db 'CDEFBA9845673210 RPMG' mes db 'PLAY ANY KEY IN THE SMALL KEYBOARD! ’,0ah,0dh db 'IT WILL BE ON THE SCREEN! END WITH R or ANY KEY',0ah,0dh,’$’ ;extra data num1 db 6 dup (?) num2 db 6 dup (?) result db 6 dup (?) count db 0 operator db 0 LedNum db 6 dup (?) data ends stacks segment db 100 dup (?) STA DW 512 DUP (?) TOP EQU LENGTH STA stacks ends code segment assume cs:code,ds:data,ss:stacks,es:data start: ;Enable Local Interrupt Input 。386 cli mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,ax call findtpc ;查找TPC卡资源并显示 MOV DX,word ptr io_base_address ;初始化8253 add dx,TIM_CTL MOV AL,MODE03 OUT DX,AL MOV DX,word ptr io_base_address add dx,TIMER0 MOV AL,00h OUT DX,AL MOV AL,02H OUT DX,AL MOV DX,word ptr io_base_address add dx,TIM_CTL MOV AL,MODE12 OUT DX,AL MOV DX,word ptr io_base_address add dx,TIMER1 MOV AL,0aH OUT DX,AL MOV AL,00 OUT DX,AL MOV DX,OFFSET MESS MOV AH,09 INT 21H MOV DX,OFFSET MES ;显示提示 MOV AH,09 INT 21H mov dx,word ptr io_9054base_address add dx,68h ;设置 tpc 卡中9054芯片io口,使能中断 in ax,dx or ax,0900h out dx,ax mov bx,word ptr interrupt_line ;保存原中断向量 mov al,byte ptr [irq_vect+bx] mov ah,35h int 21h mov ax,es mov csreg,ax mov ipreg,bx mov bx,word ptr interrupt_line ;设置新中断向量 mov al,byte ptr [irq_vect+bx] mov cx,cs mov ds,cx mov dx,offset int_proc mov ah,25h int 21h mov ax,data mov ds,ax mov es,ax in al, 21h ;设置中断掩码 mov bx,word ptr interrupt_line mov ah,byte ptr [irq_mask_0_7_table+bx] and al,ah out 21h, al in al, 0a1h mov bx,word ptr interrupt_line mov ah,byte ptr [irq_mask_8_15_table+bx] and al,ah out 0a1h, al sti ;开中断 Reset: ;initialization LEA BX,num1 CALL ClearNum LEA BX,num2 CALL ClearNum MOV byte ptr count,0 LEA BX,num1 CALL LedShow FirstRead: LEA BX,num1 CALL ReadNum CMP byte ptr operator,4 JZ Reset CMP byte ptr operator,5 JZ FunExit LoopRead: MOV DL,operator LEA BX,num2 CALL ReadNum CMP byte ptr operator,4 JZ Reset CMP byte ptr operator,5 JZ FunExit CMP DL,1 JZ FunAdd CMP DL,2 JZ FunMinus MidJmp2: JMP FirstRead MidJmp3: JMP Reset ;several choice for the prior operator FunAdd: CALL AddNum LEA BX,num1 JMP Ope2 FunMinus: CALL MinusNum LEA BX,num1 Ope2: CALL LedShow LEA BX,num2 CALL ClearNum LEA BX,num1 CALL ClearNum JMP FirstRead FunEqual: JMP Reset FunClear: JMP Reset FunExit: JMP Exit ErrorOut: ;output the error message MOV word ptr num1,0A0AH MOV word ptr num1+2,0A0AH MOV word ptr num1+4,0A0AH LEA BX,num1 call LedShow ErrorGet: ;reset the error status ;only R and E can pass CALL key CMP DL,'E' JZ FunExit CMP DL,’R' JZ MidJmp3 JMP ErrorGet Judge: CMP byte ptr operator,3 JZ MidJmp2 Exit: cli mov bx,word ptr interrupt_line ;恢复中断掩码 mov ah,byte ptr [irq_mask_0_7_table+bx] not ah in al, 21h or al, ah out 21h, al mov bx,word ptr interrupt_line mov ah,byte ptr [irq_mask_8_15_table+bx] not ah in al, 0a1h or al, ah out 0a1h, al mov bx,word ptr interrupt_line ;恢复原中断向量 mov al,byte ptr [irq_vect+bx] mov dx,ipreg mov cx,csreg mov ds,cx mov ah,25h int 21h mov ax,data ;设置 tpc 卡中9054芯片io口,关闭中断 mov ds,ax mov dx,word ptr io_9054base_address add dx,68h in ax,dx and ax,0f7ffh out dx,ax mov ax,4c00h int 21h ;退出 ReadNum proc ;if you want to use this procedure ;you must provide the number address to BX PUSH AX PUSH CX PUSH DX Readin: ;enter the first number PUSH BX call key ;get a char in (dl) and display it POP BX MOV AL,DL ;operator symbol ;plus MOV byte ptr operator,1 CMP AL,’P' JZ ExitRead ;minus MOV byte ptr operator,2 CMP AL,’M' JZ ExitRead ;equal MOV byte ptr operator,3 CMP AL,’G’ JZ ExitRead ;clear MOV byte ptr operator,4 CMP AL,’R' JZ ExitRead ;exit MOV byte ptr operator,5 CMP AL,'E’ JZ ExitRead ;illegal symbol CMP AL,'0’ JB Readin CMP AL,'9’ JA Readin ;number CMP byte ptr count,6 JZ Readin LeftMove: ;mov the number MOV CX,5 MOV SI,0 MoveData: MOV DL,[BX+SI+1] MOV [BX+SI],DL INC SI LOOP MoveData ;insert the number AND AL,0FH MOV [BX+5],AL call LedShow INC count JMP Readin ExitRead: MOV count,0 POP DX POP CX POP AX ret ReadNum endp MidJmp: JMP ErrorOut AddNum proc ;add num1 and num2 MOV CX,6 LEA BX,num1 DEC BX AND CX,CX AddLoop: MOV SI,CX MOV AL,[BX+SI] ADC AL,[BX+SI+6] AAA MOV [BX][SI],AL LOOP AddLoop JC MidJmp ret AddNum endp MinusNum proc ;minus num1 and num2 MOV CX,6 LEA BX,num1 DEC BX AND CX,CX MinusLoop: MOV SI,CX MOV AL,[BX+SI] SBB AL,[BX+SI+6] AAS MOV [BX][SI],AL LOOP MinusLoop JC MidJmp ret MinusNum endp LedShow proc ;simulate LED show ;provide the number address to BX ;clear LED segment PUSH BX LEA BX,LedNum ADD BX,2 CALL ClearNum POP BX ;Move the data to LED segment LEA DI,LedNum MOV CX,6 MOV SI,0 ShowLoop: MOV AL,[BX+SI] PUSH DI ADD DI,SI MOV [DI],AL POP DI INC SI LOOP ShowLoop ret LedShow endp ClearNum proc ;clear the number ;provide number address to BX MOV CX,6 DEC BX ClearZero: MOV SI,CX MOV byte ptr [BX+SI],0 LOOP ClearZero ret ClearNum endp key proc near kst: mov al,82h MOV DX,word ptr io_base_address add dx,p55ctl out dx,al ;set command word of 8255a ;porta for output,portb for input wait1: next: mov al,00 MOV DX,word ptr io_base_address add dx,pa55 out dx,al ;porta output 00 MOV DX,word ptr io_base_address add dx,pb55 in al,dx ;get col data cmp al,0ffh jz wait1 ;no key is closed ,wait push ax ;save the col data push ax call delay MOV DX,word ptr io_base_address add dx,p55ctl mov al,90h ;set command word of 8255a out dx,al ;porta for input,portb for output MOV DX,word ptr io_base_address add dx,pb55 pop ax out dx,al ;output col data from portb MOV DX,word ptr io_base_address add dx,pa55 in al,dx ;(al) is row data pop bx mov ah,bl ;(ah) is col data not ax mov si,offset table1 mov di,offset char mov cx,24 tt: cmp ax,[si] ;cmp (col,row) with every word jz nn ;in the table dec cx jz kst add si,2 inc di jmp tt nn: mov dl,[di] mov ah,02 int 21h push dx mov al,82h MOV DX,word ptr io_base_address add dx,p55ctl out dx,al ;set command word of 8255a ;porta for output,portb for input wait2: mov al,00 MOV DX,word ptr io_base_address add dx,pa55 out dx,al ;porta output 00 MOV DX,word ptr io_base_address add dx,pb55 in al,dx ;get col data cmp al,0ffh jnz wait2 ;wait until the key is up pop dx ret key endp delay proc near push ax ;delay 50ms--100ms push bx push cx push dx mov ah,0 int 1ah mov bx,dx delay1: mov ah,0 int 1ah cmp bx,dx jz delay1 mov bx,dx delay2: mov ah,0 int 1ah cmp bx,dx jz delay2 pop dx pop cx pop bx pop ax ret delay endp int_proc proc far cli push ax PUSH CX push dx PUSH DI push ds MOV AX,DATA MOV DS,AX MOV DI,OFFSET LedNum MOV CL,01 DIS1: MOV AL,[DI] MOV BX,OFFSET LED XLAT MOV DX,word ptr io_base_address add dx,PORTSEG OUT DX,AL MOV AL,CL MOV DX,word ptr io_base_address add dx,PORTBIT OUT DX,AL PUSH CX MOV CX,8000H ;显示时间延迟 TimeDELAY: LOOP TimeDELAY POP CX CMP CL,20H JZ QUIT INC DI SHL CL,1 MOV AL,00 OUT DX,AL JMP DIS1 QUIT: MOV DX,word ptr io_base_address add dx,PORTBIT MOV AL,00 OUT DX,AL mov al,20h ;Send EOI out 0a0h,al out 20h,al mov cx,0ffffh loopx: nop loop loopx ;延时 pop ds POP DI pop dx POP CX pop ax sti iret int_proc endp fin
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服