微机原理模拟计算器设计课程设计Word文件下载.docx
《微机原理模拟计算器设计课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理模拟计算器设计课程设计Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
图中有8行2列,8根行线与PA口相连,2根列线与PC口的PC6、PC7相连。
PA、PB口要么全部输入或输出。
PC口可以进行输入和输出。
按键设置在行、类交点处(数字或字符为其键号),行、列线分别连接到按键开关的两端。
当列线通过上拉电阻接+5V时,就被钳位在高电平状态。
键盘中有无按键按下是由行线送入全扫描字、列线读入行线状态来判断。
这就是:
给航线所有I/O线均置成低电平,然后读入列线电平状态。
如国有按键盘下,总会有一根列线电平被拉至低电平,从而使列线输入不全为1。
图2-1键盘电路图2-2数码管电路
3、可编程并行通信接口芯片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工作方式控制
4、可编程计数器/定时器
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来选择。
5、总原理图
图2-7、PROTUES画出的总原理图
三、软件设计框图
四、源程序
一、源程序
STACKSEGMENTSTCAK
DB64DUP(?
)
STACKENDS
DATASEGMENT
ORG3000H
VAR1DB00H,01H,02H,03H,04H
VAR2DB3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH
VAR3DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
VAR4DB00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,
71H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAL,88H
OUT63H,AL;
82255A初始化
MOVBX,0000H;
BX清零
STT:
MOVAL,00H;
键盘测试
OUT61H.AL
NEXT:
INAL,62H
ANDAL,0C0H
CMPAL,0C0H
JNZKEYABC
CALLDISP;
调用显示程序
JMPSTT
KEYABC:
CALLTIME;
延时,去抖动
JNZKEY
KEY:
MOVAL,0FEH;
键盘扫描识别
OUT61H,AL
TESTAL,80H
JNZKEY_0
CALLKEY8
JMPSTTK
KEY_0:
TESTAL,40H
JNZKEY_9
CALLKEY0
KEY_9:
MOVAL,0FDH
JNZKEY_1
CALLKEY9
KEY_1:
JNZKEY_A
CALLKEY1
KEY_A:
MOVAL,0FBH
JNZKEY_2
CALLKEYA
KEY_2:
JNZKEY_B
CALLKEY2
KEY_B:
MOVAL,0F7H
JNZKEY_3
CALLKEYB
KEY_3:
JNZKEY_C
CALLKEY3
KEY_C:
MOVAL,0EFH
JNZKEY_4
CALLKEYC
KEY_4:
JNZKEY_D
CALLKEY4
KEY_D:
MOVAL,0DFH
JNZKEY_5
CALLKEYD
KEY_5:
CALLKEY5
KEY_E:
MOVAL,0BFH
JNZKEY_6
CALLKEYE
KEY_6:
JNZKEY_F
CALLKEY6
KEY_F:
MOVAL,07FH
JNZKEY_7
CALLKEYF
KEY_7:
JNZKEY_71
CALLKEY7
KEY_71:
JMPSTTK
KEY9:
CMPBH,00H;
按键9处理子程序
JZKEY9_1;
未按过符号键,不清零
CALLCLEAR;
已按过符号键,清零
KEY9_1:
CALLLP1;
低4位字节前移
MOVAL,6FH;
最低字节输入一个数据
MOV[SI+4],AL
MOVAL,09H
MOV[DI+4],AL
显示
RET;
返回
KEY8:
按键8处理子程序
JZKEY8_1
CALLCLEAR
KEY8_1:
CALLLP1
MOVAL,7FH
MOVAL,08H
CALLDISP
RET
KEY7:
按键7处理子程序
JZKEY7_1
KEY7_1:
MOVAL,07H
KEY6:
按键6处理子程序
JZKEY6_1
KEY6_1:
MOVAL,7DH
MOVAL,06H
KEY5:
按键5处理子程序
JZKEY5_1
KEY5_1:
MOVAL,6DH
MOVAL,05H
KEY4:
按键4处理子程序
JZKEY4_1
KEY4_1:
MOVAL,66H
MOVAL,04H
KEY3:
按键3处理子程序
JZKEY3_1
KEY3_1:
MOVAL,4FH
MOVAL,03H
KEY2:
按键2处理子程序
JZKEY2_1
KEY2_1:
MOVAL,5BH
MOVAL,02H
KEY1:
按键1处理子程序
JZKEY1_1
KEY1_1:
MOVAL,01H
KEY0:
按键0处理子程序
JZKEY0_1
KEY0_1:
MOVAL,3FH
MOVAL,00H
KEYA:
按键+号处理子程序
JNZKEYA_1
CALLLP3;
保存输入的数据
KEYA_1:
MOVBX,0101H;
设置符号标志
KEYB:
按键-号处理子程序
JNZKEYB_1
KEYB_1:
MOVBX,0102H;
KEYC:
按键*号处理子程序
JNZKEYC_1
KEYC_1:
MOVBX,0103H;
KEYD:
按键/号处理子程序
JNZKEYD_1
KEYD_1:
MOVBX,0104H;
KEYE:
MOVBH,01H;
按键=号处理子程序
CMPBL,01H;
是+号?
JZK1;
进行加法运算
CMPBL,02H;
是-号?
JZK2;
进行减法运算
CMPBL,03H;
时*号?
JZK3;
进行乘法运算
CMPBL,04H;
是/号?
JZK4;
进行除法运算
STTE:
K1:
CALLADD1
JMPSTTE
K2:
CALLSUB1
K3:
CALLMUL1
K4:
CALLDIV1
KEYF:
按键C(清零)处理子序
CLEAR:
MOVSI,OFFSETVAR2;
数据清零子程序
MOVDI,OFFSETVAR3
MOVCX,000AH
CLEAR1:
MOVAL,3FH
MOV[SI],AL
MOV[DI],AL
INCSI
INCDI
LOOPCLEAR1
MOVBH,00H
ADD1:
MOVSI,OFFSETVAR3;
;
加法子程序
MOVDI,OFFSETVAR4
CLC
MOVCX,0005H
ADD_1:
MOVAL,[DI]
ADCAL,[SI]
AAA
INCSI
LOOPADD_1
CALLCHANGE
SUB1:
MOVSI,OFFSETVAR3;
减法子程序
SUB_1:
MOVCL,[SI]
AAS
LOOPSUB_1
MUL1:
乘法子程序
MOVAL,[DI]
MULCL
AAM
MOV[DI+5],AX
MOVAL,[DI+1]
AAM
ADDAL,[DI+6]
MOV[DI+6],AX
MOVCL,[SI+1]
MOV[SI+5],AX
ADDAL,[SI+6]
MOV[SI+6],AX
MOVAL,[DI+5]
MOVAL,[DI+6]
ADDAL,[SI+5]
MOV[DI+1],AL
MOVAL,[DI+7]
ADCAL,[SI+6]
MOV[DI+2],AL
MOVAL.00H
ADCAL,[SI+7]
MOV[DI+3],AL
DIV1:
除法子程序
MOVAH,00H
MOVCK,[SI]
DIVCL
AAD
LP1:
MOVCX,0004H;
数据移位保存子程序(4位)
MOVSI,OFFSETVAR2
LP2:
MOVAL,[SI+3]
MOVAL,[DI+3]
DECSI
DECDI
LOOPLP2
RET
LP3:
MOVCX,0005H;
保存上一次数据子程序
MOVSI,OFFSETVAR3
LP4:
MOVAL,[SI]
LOOPLP4
CHANGE:
MOVSI,OFFSETVAR2
MOVBX,OFFSETTABLE
COMP0:
XLAT
LOOPCOMP0
DISP:
MOVSI,OFFSETVAR1
MOVDI,OFFSETVAR2
MOVDL,[DI+4]
CMP3FH
JNZDIR4
MOVDL,[DI+3]
CMPDL,3FH
JNZDIR3
MOVDL,[DI+2]
CMPDL,3EH
JNZDIR2
MOVDL,[DI+1]
JNZDIR1
JMPDIR0
DIR4:
JMPDIR
DIR3:
MOVCX,0004H
DIR2:
MOVCX,0003H
JMPDIR
DIR1:
MOVCX,0002H
DIR0:
MOVCX,0001H
DIR:
OUT62H,AL
OUT60H,AL
CALLTIME
LOOPDIR
TIME:
PUSHAX
PUSHCX
MOVCX,0040H
TIME1:
MOVAX,0300H
TIME2:
DECAX
JNZTIME2
LOOPTIME1
POPCX
POPAX
STTK:
放键测试程序
JNZSTTK
CODEENDS
ENDSTART
五:
调试过程
1.对设计原理图进行电气检查。
主要针对电路连接中的电气连接进行检查,并生成对应电路的网表。
特别是对电路节点的连接检查。
2.对设计的程序进行语法检查。
检查程序中存在的语法错误。
编译连接并下载到芯片中。
3.对设计进行综合调试。
对下载到芯片中的程序进行功能检查。
直到完成设计要求的