多模块系统综合设计 doc.docx
《多模块系统综合设计 doc.docx》由会员分享,可在线阅读,更多相关《多模块系统综合设计 doc.docx(42页珍藏版)》请在冰豆网上搜索。
![多模块系统综合设计 doc.docx](https://file1.bdocx.com/fileroot1/2022-12/31/ef4ab833-e34b-4de9-a703-6c5e240a81e2/ef4ab833-e34b-4de9-a703-6c5e240a81e21.gif)
多模块系统综合设计doc
多模块系统综合设计
一﹑实验目的:
1﹑熟悉微机系统硬件的综合设计方法;
2﹑掌握多模块程序设计的规则和方法。
二﹑实验内容
在以前单元接口实验的基础上,把多个接口部件连接成一个多功能的微机综合应用系统。
系统包括以下可选功能:
(1)用中断方式统计单次脉冲(键入)次数并在LED显示器上显示;
(2)扫描4*4键盘,若按下0~9键,则在LED显示器最左边两位显示其数值;如为A--F功能键,则分别实现下列功能:
A:
LED显示器左二位显示‘A’,同时发光二极管左循环流水灯显示。
B:
LED显示器左二位显示‘B’,同时发光二极管右循环流水灯显示。
C:
LED显示器左二位显示‘C’,同时发光二极管闪烁显示。
D:
LED显示器左二位显示‘D’,同时右四位显示‘HELP’。
E:
LED显示器左二位以16进制显示8位乒乓开关的状态。
F:
LED显示器左二位显示‘F’,同时回到主程序。
(3)多种波形发生器,用PC键盘输入来控制DAC0832的输出波形,如按‘1’输出锯齿波,按‘2’输出三角波,按‘3’输出方波,按‘4’输出正弦波,按‘5’退出程序。
并用示波器观测输出波形。
三、实验要求
1.基本要求
(1)系统至少包括两种功能模块;由PC键盘控制选择实现功能
(2)软件采用多模块程序结构
2.提高要求
(1)三种或更多功能模块
(2)改善人机接口
四、实验报告要求
(1)实验目的和内容
(2)总体设计
(3)硬件设计:
原理图(接线图)及简要说明
(4)程序框图和清单
(5)实验结果和体会
多模块系统综合设计
一、总体设计
(1)系统运行时,首先执行主程序模块,显示功能菜单,供选择运行各模块或返回DOS。
(2)利用8259实现脉冲计次;8255管理键盘和发光二极管。
两片8位锁存器实现六位LED显示器动态刷新控制。
二﹑硬件设计
1.主要硬件单元:
实验平台上有:
4*4键盘电路﹑电平开关电路﹑发光二极管显示电路﹑七段数码显示电路﹑单脉冲发生电路。
实验主板上有:
分频电路﹑地址译码器﹑可编程并行接口8255单元﹑模数转换ADC08单元﹑数模转换DAC0832单元。
各硬件单元的电路原理图请参见实验箱简介,此处不再累述。
2.硬件主要跳线连接
请参见表3-1
表3-1对应跳线连接表
实验平
台引脚
实验主
板引脚
备注
实验平
台引脚
实验主
板引脚
备注
CS0
CS-55
8255片选:
280H~283H
CS4
CS-DA
0832片选:
290H~293H
L1
PA0
8255的A口用于控制LED流水灯的接线对照
ROW1
PC0
8255的C口用于键盘操作,即接受小键盘的行(COL)﹑列(ROW)电位状态信息
L2
PA1
ROW2
PC1
L3
PA2
ROW3
PC2
L4
PA3
ROW4
PC3
L5
PA4
COL1
PC4
L6
PA5
COL1
PC5
L7
PA6
COL1
PC6
L8
PA7
COL1
PC7
P0
PB0
8255的B口接受乒乓开关状态接线对照
CS3
CS-AD
0809片选:
28BH~28FH
P1
PB1
+5R
REF
0809接正参考电压+5R
P2
PB2
Q0
CLK-AD
给0809加外部时钟:
Q0
P3
PB3
A0
A
0809接受输入信号的通道号由地址线的A0~A2决定
P4
PB4
A1
B
P5
PB5
A2
C
P6
PB6
IN4
VOUT1
DA的输出接AD4号口
P7
PB7
IRQ3
PLUS
单脉冲(PLUS)申请中断
CS1
CS1
LED数码管位选地址:
284H~287H
CS2
CS2
LED数码管位选地址:
288H~28BH
三﹑软件设计
1.功能模块的划分:
根据要求可把整个程序划分为六个功能模块:
并行接口芯片8255A的A口LED流水灯显示模块,B口读乒乓开关数值模块,C口简易键盘操作模块;8259的系统硬中断模块;D/A的波形输出模块,以及D/A﹑A/D联调模块。
其中8255的A口﹑C口两个功能设计到一个程序中(SY8255.ASM),B口的功能模块设计在SY82552.ASM中,8259的系统硬中断模块在SY8259.ASM中,D/A的波形输出模块在SYAD2.ASM中,D/A﹑A/D联调模块在SYAD1.ASM中,其中SYAD2.ASM由SYAD1.ASM调用形成A/D-D/A综合功能的大模块,SY82552.ASM由SY8255.ASM调用形成接口芯片8255A综合功能的大模块,各个大模块由主程序SY.ASM调用。
各个源程序文件分别汇编,生成各自的目标文件,然后用‘LINK’命令连接,生成可执行文件SY.EXE。
其示意图如图1:
连接命令格式:
LINKSY+SYAD1+SYAD2+SY8255+SY82552+SY8259
2.各模块的具体分析:
(1)主程序模块:
功能:
判断键入的数字键,分情况调用各个功能模块。
若键入‘1’,则调用8259功能模块,若为‘2’,则调用8255A综合功能模块,若为‘3’,则调用A/D-D/A综合功能大模块,若为‘4’,则退出返回DOS环境。
SY8255.ASMSY82552.ASMSYAD1.ASMSYAD2.ASMSY8259.ASMSY.ASM
MASMMASMMASMMASMMASMMASM
SY8255.OBJSY82552.OBJSYAD1.OBJSYAD2.OBJSY8259.OBJSY.OBJ
LINKLINK
8255大功能模块A/D-D/A大功能模块8259功能模块主程序模块
LINK
可执行文件SY.EXE
图1
流程框图及程序清单:
源程序如下:
;主程序模块SY.ASM
EXTRNADDA:
FAR,F8259:
FAR,F8255:
FAR;指出外部模块定义的标志符
DATASEGMENTPUBLIC'DATA';所有程序共用一个数据段,即一个DS值
MESSDB0DH,0AH,0DH,0AH
DB'**********MAINMENU***********',0DH,0AH
DB'PRESS1TOMAKE8259INTERRUPT!
',0DH,0AH
DB'PRESS2TOTHEOPERATIONOF8255A!
',0DH,0AH;主菜单
DB'PRESS3TOTHEOPERATIONOFDA/AD!
',0DH,0AH
DB'PRESS4TOQUITDOS!
',0DH,0AH,0DH,0AH,'$'
DATAENDS
STACKSEGMENTparastack'stack'
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
BIG:
LEADX,MESS
MOVAH,09H
INT21H
BIG1:
MOVAH,08H
INT21H
CMPAL,'1'
JZF59
CMPAL,'2'
JZF55
CMPAL,'3'
JZAD
CMPAL,'4'
JZQIT
JMPBIG1
F59:
CALLF8259
MOVAL,00H
JMPBIG
F55:
CALLF8255
MOVAL,00H
JMPBIG
AD:
CALLADDA
MOVAL,00H
JMPBIG
QIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
流程图请见图2
开始
显示主菜单
等待键盘按键
YNY
键号是'1'调用8259模块是否返回?
N
YNY
键号是'2'调用8255模块是否返回?
N
YNY
键号是'3'调用A/D-D/A模块是否返回?
N
Y
键号是'4'返回DOS
N
图2主程序模块
(2)8259系统硬中断模块:
功能:
可编程中断控制器采用PC机内的8259A,用单脉冲发生单元申请中断(IRQ3),利用中断服务子程序统计脉冲开关按下的次数,并用两位数码管显示开关按下次数。
流程框图及程序清单
流程框图如图3
开始
关中断
保护0AH号中断向量
置中断向量
开放IRQ2中断屏蔽位
开中断
AL=60H,60H次中断一循环
N
NUM=60H
Y
NUM=0
N
有键按下吗
Y
返回DOS
图3系统硬中断
源程序如下:
;系统硬中断模块sy8259.asm
DATASEGMENTPUBLIC'DATA';各模块共用一个DS值
MESS1DB'PressanytoquitMAINMENU!
',0DH,0AH,'$'
MESS2DB'A8259interrupt,pressanytoquitMAINMENU!
',0DH,0AH,'$'
MY1db0h
DCTBLDB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
INTMASKDB0
CSREGDW?
IPREGDW?
NUMDW?
NUM2DW?
DATAENDS
stacsegmentparastack'stack'
db128dup(?
)
stacends
codesegment
assumecs:
code,ss:
stac,ds:
data,ES:
DATA
PUBLICF8259;F8259定义为外部过程
F8259PROCFAR
start:
MOVAX,00H
MOVNUM,AX
MOVNUM2,AX
CLI;关中断
movax,data
movds,ax
movax,stac
movss,ax
LEADX,MESS1
MOVAH,09H
INT21H
moval,0ah
movah,35h
int21h
MOVAX,ES;保护0AH号中断向量(IRQ3对应0AH号)
MOVCSREG,AX
MOVIPREG,BX
pushds
MOVAX,CS
MOVDS,AX
movdx,offsetINTPROC;置中断向量(如口地址为CS:
DX)
MOVAL,0aH
MOVAH,25H
INT21H
popds
inal,21h
andal,0f7h;写屏蔽操作命令字OCW1,开IRQ3中断屏蔽位
out21h,al
sti;开中断
LOP1:
NOP
NOP
NOP
NOP
NOP
NOP
CALLDISP
MOVAX,NUM
CMPAX,060H
JNZLOP2
MOVAX,00H
MOVNUM,AX
MOVNUM2,AX
LOP2:
NOP
MOVDL,0FFH
MOVAH,06H
INT21H
JZLOP1
inal,21h
oral,08h;恢复OCW1内容
out21h,al
MOVDX,IPREG
MOVAX,CSREG
MOVDS,AX
MOVAL,0ah;恢复0AH号中断向量
MOVAH,25H
INT21H
STI;开中断
RET
F8259ENDP
INTPROCPROCNEAR;中断服务子程序
PUSHDS
pushax
MOVAX,DATA
MOVDS,AX
NOP
MOVAX,NUM
INCAX;脉冲开关按一次,中断次数NUM就加1
MOVNUM,AX
NOP
MOVAL,20H
OUT20H,AL;置中断方式字OCW2为非特殊的EOI中断结束
popax
POPDS
IRET;中断返回
INTPROCENDP
DISPPROCNEAR;两位LED显示中断次数子程序
PUSHDS
PUSHCX
PUSHAX
MOVCX,NUM
MOVAX,CX
MOVBX,NUM2
CMPAX,BX
JZDISP0
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMESS2
MOVAH,09H
INT21H
MOVNUM2,CX
DISP0:
MOVCX,NUM
MOVAX,CX
ANDAL,0FH
MOVAH,AL
MOVAL,CL
MOVCL,04H
SHRAL,CL
MOVCH,AL
MOVCL,AH
DISPL:
movdx,288h
moval,02h
outdx,al
movdx,284h
moval,cl
movah,0
leabx,dctbl
movsi,ax
moval,[bx+si]
outdx,al
CALLDELAY1
DISPH:
movdx,288h
moval,01h
outdx,al
movdx,284h
moval,ch
movah,0
leabx,dctbl
movsi,ax
moval,[si+bx]
outdx,al
CALLDELAY1
POPAX
POPCX
POPDS
RET
DISPENDP
DELAY1PROCNEAR;延迟子程序
PUSHCX
MOVCX,0F00H
LOOP$
POPCX
RET
DELAY1ENDP
DELAY2PROCNEAR
PUSHAX
PUSHCX
MOVCX,030H
DL21:
CALLDELAY1
LOOPDL21
POPCX
POPAX
RET
DELAY2ENDP
codeends
end
(3)并行接口8255A综合模块:
功能:
利用8255的A口输出控制发光二极管,B口输入接收8位乒乓开关状态,C口接收小键盘行列状态实现一定的功能,采用反转法判断所按实验平台上的小键盘为何键,在数码管上显示按键信息:
按0到9数字键就在左边两个数码管上显示其数值;如为A--F功能键,则分别实现下列功能:
A:
数码管左二位显示‘A’,同时L1到L8左循环流水灯显示。
B:
数码管左二位显示‘B’,同时L1到L8右循环流水灯显示。
C:
数码管左二位显示‘C’,同时L1到L8闪烁显示。
D:
数码管左二位显示‘D’,同时右四位数码管显示‘HELP’。
E:
数码管左二位以16进制显示8位乒乓开关的状态。
F:
数码管左二位显示‘F’,同时回到主程序。
其中,B口接受并显示乒乓开关状态由小模块SY82552完成,并受大模块SY8255调用。
其它功能由SY8255完成。
模块SY8255的流程框图及程序清单
流程框图如图4
开始
显示主菜单
调键盘扫描子程序
YY
是A键执行A功能PC键盘按键否
NYNY
是B键执行B功能PC键盘按键否
NYNY
是C键执行C功能PC键盘按键否
NYNY
是D键执行D功能PC键盘按键否
NYNY
是E键执行E功能PC键盘按键否
NYY
是F键返回
N
是数字键,左二位
数码管显示其数值
图4SY8255模块
源程序如下:
;8255功能模块sy8255.asm
PA55EQU280H
PB55EQU281H
PC55EQU282H;定义8255各口地址
P55CTLEQU283H
DATASEGMENTPUBLIC'DATA'
TABLEDB0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
DB0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H,077H
DCTBLDB3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh
DB77h,7Ch,39h,5Eh,79h,71h
MESDB'***********SUBMAINMENU***********',0DH,00AH
DB'Pressanykeyonthesmallkeyboard!
',0DH,0AH
DB'PressNUMkeytodisplaynumontheled!
',0dh,0ah
DB'PressAforleftcycle!
',0DH,0AH
DB'PressBforrightcycle!
',0DH,0AH
DB'PressCforalternatelydisplay!
',0DH,0AH
DB'PressDtodisplayHELPontherightfourled!
',0DH,0AH
DB'PressEtodisplaythedataofpingpangonthelefttowled!
',0DH,0AH
DB'PressFtoquittoMAINMENU!
',0DH,0AH,0DH,0AH,'$'
MESSDB'*****Pressanykeytomainmenu!
*****',0DH,0AH,0DH,0AH,'$'
KEYCDB?
KEYRDB?
KEYDB?
NUM1DB?
NUM2DB?
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB50DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
PUBLICF8255;F8255定义为外部过程
EXTRNF82552:
FAR;F82552为外部过程名
F8255PROCFAR
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES
MOVAH,09
INT21H
LOP1:
CALLTESTKEY;调用检测小键盘按键子程序,键号在
CALLDISP;变量KEY(默认为0)
MOVAL,KEY
CMPAL,0AH
JZA0
CMPAL,0BH
JZB0
CMPAL,0CH
JZC0
CMPAL,0DH
JZDE
CMPAL,0EH
JZEE
CMPAL,0FH
JZFF
MOVDL,0FFH
MOVAH,6
INT21H
JZLOP1;无PC键按下,则循环
JMPSTART;按键不是'A-F’,则重新检测﹑显示
A0:
LEADX,MESS
MOVAH,9
INT21H
CALLDISP
MOVDX,PA55
MOVAL,0FEH
A1:
OUTDX,AL
PUSHAX
CALLDISP
POPAX
CALLDELAY2
ROLAL,1
PUSHAX
PUSHDX
MOVDL,0FFH
MOVAH,06H
INT21H
POPDX
POPAX
JZA1
MOVKEY,00H
JMPSTART
B0:
LEADX,MESS
MOVAH,9
INT21H
CALLDISP
MOVDX,PA55
MOVAL,0FEH
B1:
OUTDX,AL
PUSHAX
CALLDISP
CALLDELAY2
CALLDISP
POPAX
RORAL,1
PUSHAX
PUSHDX
MOVDL,0FFH
MOVAH,06H
INT21H
POPDX
POPAX
JZB1
MOVKEY,00H
JMPSTART
DE:
JMPD0
EE:
JMPE0
FF:
JMPF0
C0:
LEADX,MESS
MOVAH,9
INT21H
CALLDISP
MOVDX,PA55
MOVAL,55H
C1:
OUTDX,AL
CALLDELAY2
NOTAL
PUSHAX
PUSHDX
MOVDL,0FFH
MOVAH,06H
INT21H
POPDX
POPAX
JZC1
MOVKEY,00H
JMPSTART
E0:
CALLDISP
CALL