系统扩展电路课程设计部分.docx
《系统扩展电路课程设计部分.docx》由会员分享,可在线阅读,更多相关《系统扩展电路课程设计部分.docx(31页珍藏版)》请在冰点文库上搜索。
系统扩展电路课程设计部分
微机原理与应用
学
号:
姓
名:
学
院:
专
业
班
级:
指导教师:
系统扩展电路课程设计部分
一、概述
应用所学微机原理知识,设计一个系统电路,提高设计能力及解决问题能力。
二、设计容与要求
1)所需器件
2)设计具体的整体电路图,并且加以说明
3)遇到问题及解决方法
4)收获及心得
三、总体设计
在Proteus软件下,利用8086/8088、D/A芯片DAC08328259A8255设计一个函数发生器,并利用按键选择输出波形,能分别产生三角波、阶梯波(每阶梯IV)、正向锯齿波和方波。
并利用按键(自行定义)进行输出波形选择。
用8255扩展接口外接至少2个LED数码管,将当前输出波形代号显示在LED上(左边位):
0为方波、1为正向锯齿波、2为三角波、3为阶梯波。
癒1跟
阶梯波产生
瑋序
锯吉菽士主
程宇
Efts产生
STACKSEGMENT'STACK'
DW32DUP(O)
STACKENDS
DATASEGMENT
ADDRESS8255EQU40H;定义两个端口地址,其中
ADDRESS0832指向0832芯片的端口地址
ADDRESS8255指向8255,
ADDRESS0832EQU60H
ENDS
DATA
CODE
SEGMENT
ASSUME
START:
始化8255
BEGIN:
出方波
出阶梯波
输出锯齿波
输出三角波
输出学号65
SS:
STACK,CS:
CODE,DS:
DATA
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVI
DX,ADDRESS8255+6;选择5255的控制字的端口地址,初
MOV
AL,90H
;90H=10010000B,
OUT
DX,AL
MOV
DX,ADDRESS8255
IN
AL,DX
;将8255A端口的数据输入到AL中
NOT
AL
;AL中的数据取反
CMP
AL,01H
;方波对应01H,判断输出是否为方波
JZ
FANGBO
;判断ZF是否为0,为0跳转到FANGBO,输
CMP
AL,08H
;阶梯波对应02H,判断输出是否为阶梯波
JZ
JIETIBO
;判断ZF是否为0,为0跳转到JIETIBO,输
CMP
AL,02H
;锯齿波对应04H,判断输出是否为锯齿波
JZ
JUCHIBO
;判断ZF是否为0,为0跳转到JUCHIBO,
CMP
AL,04H
;三角波对应08H,判断输出是否为三角波
JZ
SANJIAO
;判断ZF是否为0,为0跳转到SANJIAO,
CMP
AL,10H
;学号对应10H
JZ
XUEHAO
;判断ZF是否为0,为0跳转到XUEHAO,
JMP
BEGIN
;如果均不满足,说明输入有误,重新输入
FANGBO:
MOV
MOV
OUT
MOV
MOV
OUT
DX,ADDRESS8255+2;输出方波
AL,00H;选择端口00,也就是PA0端口
DX,AL;AL输出为低电平
DX,ADDRESS8255+4;输出高位为0
AL,0H
DX,AL
MOV
DX,ADDRESS0832
MOV
AL,00H;AL输出为低电平
OUT
DX,AL;0832的输出端口清零
CALL
DELAY;调用延时子函数,延时
NOT
AL
OUT
DX,AL;输出变成高电平
CALL
DELAY;延时一段时间
JMP
BEGIN;执仃兀之后返回到取开始
JUCHIBO:
MOV
DX,ADDRESS8255+2;输出锯齿波
MOV
AL,01H选择PA1端口,输出锯齿波
OUT
DX,AL
MOV
DX,ADDRESS8255+4;输出高位为0
MOV
AL,0H
OUT
DX,AL
MOV
DX,ADDRESS0832
MOV
AL,00H;将0832输出先清零
INCREARSE2:
OUT
DX,AL
INC
AL;在很高频率下AL自增是可以看成是平滑的线性增大
JNZ
INCREARSE2;增大到255的时候再下一次循环
JMP
BEGIN
SANJIAO:
MOV
DX,ADDRESS8255+2;输出三角波
MOV
AL,02H;选择PA2端口,输出三角波
OUT
DX,AL
MOV
DX,ADDRESS8255+4;输出高位为0
MOV
AL,0H
OUT
DX,AL
MOV
DX,ADDRESS0832
MOV
AL,00H;将0832输出先清零
INCREASE3:
OUT
DX,AL
INC
AL
JNZ
INCREASE3;只要AL不为0,—直自增,然后进行下一次
循环
DECREARSE3:
DEC
AL
OUT
DX,AL
JNZ
DECREARSE3
JMP
BEGIN
JIETIBO:
MOV
DX,ADDRESS8255+2;输出阶梯波
MOV
AL,03H;选择PA3端口,输出阶梯波
OUT
DX,AL
MOV
DX,ADDRESS8255+4;输出高位为0
MOV
AL,0H
OUT
DX,AL
MOV
DX,ADDRESS0832;将0832输出先清零
MOV
AL,00H
INCREARSE1:
OUT
DX,AL
ADD
AL,33H
;每次输出的数字量增加51,表示阶梯,选择
51是因为51可以被255除尽
CALL
DELAY
;调用延时函数
CMP
AL,0FFH
JNZ
INCREARSE1
;当AL不等于255的时候继续执行循环
DECREARSE1:
SUB
AL,33H
;反向执行上述循环,递减输出量
OUT
DX,AL
CALL
DELAY
JNZ
DECREARSE1
JMP
BEGIN
MOV
AH,4CH
INT
21H
XUEHAO:
MOV
DX,ADDRESS8255+2;输出学号低位5
MOV
AL,5H
OUT
DX,AL
MOV
DX,ADDRESS8255+4
;输出学号高位6
MOV
AL,6H
OUT
DX,AL
JMPBEGIN
DELAY:
PUSH
CX;延时
MOV
CX,0FFH
DELAY0:
NOP
LOOP
DELAY0
POP
CX
RET
PUSH
CX
PUSH
BX
MOV
BX,0FFH
DELAY1:
MOV
CX,0FFFFH
DELAY2:
NOP
NOP
LOOP
DELAY2
DEC
BX
JNZ
DELAY1
POP
BX
POP
CX
RET
CODE
ENDS
END
START
四、详细设计
五、电路分析
U7
Ao
p
4
0000
p
p
2
1
r-
4
g
3
8*7
f.
01234567
DDDDDDDD
AE
X)
34
AL
33
AC
>2
32
31
30
29
28
27
A
AD
可PB3
23-4.--..'-.,■
B0B1R2B3閑R5B6B7PPFPPPPP
RD_
WR
AO
A1
RESET
OS
5一
36
9
卫
35
和
R
w
1
B
H2
F
0000
6
IT
15
a
PC
:
1
17
J
PC
;3
IE
二
1
11
ic
25
8255A
12B
H12
H1S
igBH15
B肝0
9巳可
DO
QO
D1
Q1
D2
Q2
D3
Q3
DA
Q4
D5
Q5
D6
Q6
D7
Q7
OE
LE
2BH8
5BH9
74LS373
kTEMF>
1
■
1
AL
)8
3
AD94
AD107
AD118
AD1213
AD⑶4
AD1417
ADI518
1
I
ADO
3
DOGO
D1Q1
D2Q2
DSQ3
D404
D5Q5
D6Q6
D7Q7
AD1
4
IAD2
7
AD3
q
AM
13
ADS
14
AD6
17
AD7
OELE
11
MLS373
2BHO
5BH1
6BH2
12BH4
15BH5
18BH6
19BH7
oooooooo
L1
U2
心
4
AD2
5
AD1
6
ADO
7
8
9
<
10
3
CS
WRT
GND
DI3
DI2
DI1
DIO
VREFRFBGND
vcc
ILE(BY1/BY2)
XFERDM
DI6
DI6
DI7
I0LJT2
IOUT1
DAC0832
r
四
19
|
18
17
1
r
16
AD4
15
AD5
14
AD6
13
AD7
12
11
21
22
L
丄
30
U1
19
RESET
READYINTA/QS1
INTR
hold/gtT
HLDA/GTO
TEST
NMI_
MN/MX
CLK
8086
25
27
<
RDWR
ALE/QSO
BHEDT;R/$TDEN/S2RD
AD[0..15]
A[16.19]
WR/LOCK
MOSO
.15]
六、设计过程中遇到的问题及解决方法
在这次课程设计中,遇到了各种问题。
因为以前的基本太薄弱,刚开始设计写程序的两天,遇到问题后往往是瞪着屏幕毫无办法,常常在一个小问题上一卡就是三四个小时,到后来渐
渐学会了一些解决问题的思路和办法,节奏才渐渐加快。
逻辑问题。
写类型控制子模块的时候,已经根据流程图把程序写好,里面的子模块也以测
试过没有问题,流程图逻辑也应该没问题,但每次运行在睡眠风状态下时,电机转八秒,停两秒后自动转到自然风模块。
想过很多种可能,开关问题,LED灯问题等等,最后一条一
条照着程序写流程图的时候,终于发现可能是最后RET没起作用,导致程序执行完无法返
回check,直接执行下一条指令。
还有就是很多新手都会遇到的问题,我第一次写的时候,一开始就写了一大段程序,然后
什么结果都出不来,调试的时候根本无从调起,经过同学指点才开始从一个小功能开始写程序,先写一个灯亮然后两个然后循环,再往进添加其他功能。
并且这样写会不停的给自己成
就感,让自己坚持做完,否则很容易在遇到无从下手的问题时放弃。
所以再大的程序也是要
脑子里先有个大框架然后一个个小功能实现的。
在后来遇到错误时,我一般都会先过一遍程序查一下有没有能看出来的错误,然后该段
程序的开头开始检测,通过加LED检测程序运行到了哪一行,从哪一行开始出错,有些直
接看不出错误的地方通过加DELAY使运行变慢,方便看到仿真结果,也可以使用proteus
里面的帧进,一步一步看效果。
七、设计心得
通过本次课程设计,是我深入的了解到了实践与书面的不同,在整个课程设计的过程中
遇到了很多问题,包括选片和编程和仿真的多种问题,另一个我意识到的非常重要的问题,就是编程的严谨问题!
在整个课程设计过程中,虽然遇到了很多问题,但最后还是将此次设计完成了,这让我自己更加珍惜实验设计所付出的努力和付出!
汇编语言课程设计部分
一、概述
运用所学汇编语言知识,编写一个具有本功能的程序,达到提高动手能力以及检验对微机原理课程学习和掌握的程度。
二、设计容与要求
1)能够储存50个,其中包括人名(20个字符),(8个字符)
2)系统可以随时接收新的人名及。
3)系统具有随时查询的功能,输入人名后,在屏幕上显示其相应的。
4)运行此系统后,显示菜单选项进行功能选择。
三、设计思想
四、程序流程图
五、程序源代码及说明
DATASSEGMENT
0BF1
DB
'usingthetelephonebookdesignedbyLiuNanqing$'
0BF2
DB
'Pleasechoosethefunctionbuttom(1/2):
$'
0BF11
DB
'1=inputing$'
0BF16
DB
'2=searching$'
0BF18
DB
'Other=exiting$'
0BF3
DB
'Pleaseinputanewname(<20):
$'
0BF4
DB
'pleaseinputthenumber(=8):
$'
0BF5
DB
'Continuetoinput?
(y(Y)/n)$'
0BF6
DB
'exit(y/n)$'
0BF7
DB
'search(<20):
$'
0BF8
DB
'thenumberis:
$'
0BF9
DB
'notexit!
$'
0BF10
DB
'Continuetosearch?
(y/n)$'
SENAME
DB
21,0,21DUP(O);搜索(查询)变量
ADDNAME
DB
21,0,21DUP(0);添加变量
ADDNUM
DB
9,0,9DUP(O)
WORK
DB
1500DUP(0)
DATAS
ENDS
STACKS
SEGMENT
DW
32DUP(0)
STACKS
ENDS
;添加变量
CODESSEGMENT
ASSUME
CS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOV
AX,DATAS
MOV
DS,AX
MOV
BP,-30
BEGIN:
CALL
NEXTLINE
MOV
DX,OFFSETOBF1;显示菜单选择界面
MOV
AH,9
INT
21H
CALL
NEXTLINE;调用换行函数
MOV
DX,OFFSETOBF2
MOV
AH,9
INT
21H
CALL
NEXTLINE
MOV
DX,OFFSETOBF11
MOV
AH,9
INT
21H
CALL
NEXTLINE
MOV
DX,OFFSETOBF16
MOV
AH,9
INT
21H
CALL
NEXTLINE
MOV
DX,OFFSETOBF18
MOV
AH,9
INT
21H
CALL
NEXTLINE
MOV
AL,0
MOV
AH,1
INT
21H
CMP
AL,'1'
JE
INPUT
CMP
AL,'2'
JE
SEARCH
JMP
STOP
;选择1,输入信息
;选择2,查询信息
INPUT:
CALL
NEXTLINE
ADD
BP,30
MOV
SI,BP
S2:
MOV
BYTEPTRWORK[SI],O;清除ZHU中最后一个人的信息
后面的
30
INC
SI;个字节中非0的单兀
CMP
WORK[SI],O
JNE
S2
MOV
SI,BP
MOV
DX,OFFSETOBF3
MOV
AH,9
INT
21H
MOV
DX,OFFSETADDNAME;输入的人名存放在addname
中
MOV
AH,10
INT
21H
MOV
BX,-1
S5:
INC
BX;为避免addname中刚输入的信息没有完全覆
CMP
BYTEPTRADDNAME[BX+2],0DH;盖上一次的信
息,将出车符
(0DH)及其后
JNE
S5;面的字节归0
S6:
MOV
BYTEPTRADDNAME[BX+2],0
INC
BX
CMP
BX,20
JNE
S6
MOV
BYTEPTRADDNAME[BX+2],0DH
MOV
CX,20
MOV
BX,-1
S1:
INC
BX;将addname复制到work中
MOV
DL,BYTEPTRADDNAME[BX+2]
MOV
BYTEPTRWORK[SI+BX],DL
LOOP
S1
MOV
BYTEPTRWORK[SI+20],'$'
CALL
NEXTLINE
MOV
DX,OFFSETOBF4
MOV
AH,9
INT
21H
MOV
DX,OFFSETADDNUM
MOV
AH,10
INT
21H
MOV
BX,-1
S7:
INC
BX;为避免刚输入的没有完全覆盖上一次的,将这次
输
CMP
BYTEPTRADDNUM[BX+2],0DH;入的的最后
一位的回车符(ODH)换成$
JNE
S7
MOV
BYTEPTRADDNUM[BX+2],'$'
ADD
SI,21
MOV
CX,8
MOV
BX,-1
S3:
INC
BX
MOV
DL,BYTEPTRADDNUM[BX+2]
MOV
BYTEPTRWORK[SI+BX],DL
LOOP
S3
MOV
BYTEPTRWORK[SI+8],'$'
CALL
NEXTLINE
MOV
DX,OFFSETOBF5
MOV
AH,9
INT
21H
CALL
NEXTLINE
MOV
AH,1
INT
21H
CMP
AL,'Y'
JE
INPUT
CMP
AL,'y'
JE
INPUT
JMP
BEGIN
STOP:
CALL
NEXTLINE
MOV
DX,OFFSETOBF6
MOV
AH,9
INT
21H
MOV
AL,0
MOV
AH,1
INT
21H
CMP
AL,'Y'
JE
EXIT
CMP
AL,'y'
JNE
BEGIN
EXIT:
MOV
AX,4C00H;退出本程序
INT
21H
SEARCH:
CALL
NEXTLINE
MOV
DX,OFFSETOBF7;输入你要搜索的名字,存放在
ZHU1中
MOV
AH,9
INT
21H
MOV
DX,OFFSETSENAME
MOV
AH,10
INT
MOV
L5:
INC
次的信息,
CMP
及其后面的字节归0
21H
BX,-1
BX;为避免ZHU1刚输入的信息没有完全覆盖上一
BYTEPTRSENAME[BX+2],0DH;将回车符(0DH)
JNE
L5
L6:
MOV
BYTEPTRSENAME[BX+2],0
INC
BX
CMP
BX,20
JNE
L6
MOV
BYTEPTRSENAME[BX+2],0DH
CALL
NEXTLINE
MOV
CX,50;在work中搜索与sename相等的字符串
MOV
SI,-30
L1:
ADD
SI,30
MOV
BX,-1
L2:
INC
BX
CMP
BX,20
JE
L3
PUSH
AX
MOV
AL,BYTEPTRWORK[SI+BX]
MOV
AH,BYTEPTRSENAME[BX+2]
CMP
AL,AH
POP
AX
JE
L2
LOOP
L1
MOV
DX,OFFSETOBF9没有搜索到
MOV
AH,9
INT
21H
JMP
L4
L3:
MOV
DX,OFFSETOBF8;搜索到了
MOV
AH,9
INT
21H
INC
BX
ADD
BX,OFFSETWORK
ADD
BX,SI
MOV
DX,BX
MOV
AH,9
INT
2