微机接口设计题-预测

题目资料来源

微机原理与接口技术 第二版 马维华 主编

P382 10.5题电路原理图修改如下: 1. 将ADC0809直接挂载到总线上,读写逻辑和教材P379同,分配地址Y2; 2. 8255PA口接8段的段码,PC6-5接8段的位码; 3. 去掉DAC0832; 4. GATE1直接接到VCC 5V; 5. OUT2接无源蜂鸣器,报警用蜂鸣器同P282一样,就是将R1改为反相器然后输入端接到OUT2。要使无源蜂鸣器发音只需给控制晶体管基极发送一个人耳范围内频率的波形比如1KHz即可。

题目描述

已知8255的PA口作为8段显示器的段码接口,PC7接8253的GATE2,PC6-5接8段的位码,ADC0809的CLK时钟有8253OUT1产生,已知8253的CLK1和CLK2端接2MHz的时钟信号。系统工作过程为,循环以下过程:采集ADC0809的IN0的数字量送到8段显示器,如果采集到的数据所对应的模拟量低于1V,则由OUT2产生1KHz的方波,通过蜂鸣器报警。

补充

EOC仍然在PC0,只是使用P379的读写逻辑,读写方式就和实验箱相同了。

分析

1
2
3
4
5
6
7
8
Y0:0E00H-0E03H 8253
Y1:0E04H-0E07H 8255
Y2:0E08H-0E0BH AD0809
Y3:0E0CH-0E0FH
Y4:0E10H-0E13H
Y5:0E14H-0E17H
Y6:0E18H-0E1BH
Y7:0E1CH-0E1FH

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
base53 equ 0e00h
t0 equ base53
t1 equ base53 + 1
t2 equ base53 + 2
ctl53 equ base53 + 3
base55 equ 0e04h
pa equ base55
pb equ base55 + 1
pc equ base55 + 2
ctl55 equ base55 + 3
baseAD equ 0E08H
in0 equ baseAD
in1 equ baseAD + 1
in2 equ baseAD + 2
in3 equ baseAD + 3
in4 equ baseAD + 4
in5 equ baseAD + 5
in6 equ baseAD + 6
in7 equ baseAD + 7

data segment
tab db 3fh,06h,5bh,4fh
db 66h,6dh,7dh,07h
db 7fh,6fh,77h,7ch
db 39h,5eh,79h,71h
keys db 00h;8段使用
data ends

code segment
assume cs:code,ds:data
start:

;数据段加载
mov ax,data
mov ds,ax

call init55
call init53

L0: ;启动AD
mov dx,in0
out dx,al

L1: ;等待AD转换结束
call led8
mov dx,pc
in al,dx
test al,00000001b
jz L1

;取AD转换结果
mov dx,in0
in al,dx

;存数
mov keys,al

;和1V比较
cmp al,51
;<1V
;计算结果为51.2用jbe
jbe L2
call disableT2
;开始下一轮
jmp L0
L2:
;al<1V打开蜂鸣器
call enableT2
jmp L0

init55 proc
pusha
mov dx,ctl55
;a口方式0输出,c上输出,c下输入
mov al,10000001b
out dx,al
popa
ret
init55 endp

init53 proc
pusha
;T1写高低位,方式3方波
;不想给自己找麻烦,请用万能写法
mov dx,ctl53
mov al,01110110b
out dx,al
mov dx,t1
;初值2M/500K = 4
mov ax,4
out dx,al
mov al,ah
out dx,al

mov dx,ctl53
mov al,10110110b
out dx,al
mov dx,t2
;初值2M/1K = 2000
mov ax,2000
out dx,al
mov al,ah
out dx,al

popa
ret
init53 endp

enableT2 proc
pusha
mov dx,pc
mov al,80h
out dx,al
popa
ret
enableT2 endp

disableT2 proc
pusha
mov dx,pc
mov al,00h
out dx,al
popa
ret
disableT2 endp

led8 proc

pusha
;低位使能
mov dx,pc
;低位在PC5,需要随时修改,需要保存PC7所以不能用这一行
;mov al,00100000b
in al,dx
and al,10011111b
or al,00100000b
out dx,al
;数据送入低位
mov al,keys
and al,0fh
mov bx,offset tab
xlat
;or al,80h;如果需要小数点则可以加这一行代码
mov dx,pa;段码在pa,需要随时修改
out dx,al
;熄灯
mov dx,pc
in al,dx
and al,10011111b
out dx,al
mov dx,pa;段码在pa,需要随时修改
mov al,0
out dx,al

;高位使能
mov dx,pc
;高位在PC6,需要随时修改,需要保存PC7所以不能用这一行
;mov al,01000000b
in al,dx
and al,10011111b
or al,01000000b
out dx,al
;数据送入高位
mov al,keys
mov cl,4
rol al,cl
and al,0fh
mov bx,offset tab
xlat
;or al,80h;如果需要小数点则可以加这一行代码
mov dx,pa;段码在pa,需要随时修改
out dx,al
;熄灯
mov dx,pc
in al,dx
and al,10011111b
out dx,al
mov dx,pa;段码在pa,需要随时修改
mov al,0

out dx,al

popa
ret

led8 endp

ends
end start
0%