关于微机接口的端口地址计算问题

  • Post author:
  • Post category:其他




微机接口端口计算问题



关于



8254

A

8254A






8


2


5


4


A





的端口地址的问题

详细的计算出下图中8254的四个端口地址为多少?

在这里插入图片描述

答案 :



A

0

H

,

A

2

H

,

A

4

H

,

A

6

H

A0H, A2H, A4H, A6H






A


0


H


,




A


2


H


,




A


4


H


,




A


6


H




解析: 四个端口地址分别为计数器0, 计数器1, 计数器2, 控制字寄存器的端口地址

而他们的端口地址取决于与CPU相连的地址总线, 根据图所示, 即



A

0

,

A

1

,

A

2

,

A

3

,

A

4

,

A

5

,

A

6

,

A

7

,

A

8

A0, A1, A2, A3, A4, A5, A6, A7, A8






A


0


,




A


1


,




A


2


,




A


3


,




A


4


,




A


5


,




A


6


,




A


7


,




A


8




在这里插入图片描述

据上图所示, 三八译码器所对的A5, A4 ,A3 分别为100

在这里插入图片描述

该图对应着三八译码器的转换值, 其中



Y

4

Y4






Y


4





就是相当于上图的



D

4

D4






D


4





, 即



Y

4

Y4






Y


4





该位有效;所以对应的



C

B

A

CBA






C


B


A





分别为100.

在这里插入图片描述




8254

A

8254A






8


2


5


4


A





中内部的



A

0

,

A

1

A0,A1






A


0


,




A


1





分别表示选择不同的计数器(或寄存器), 所以外部的



A

1

,

A

2

A1,A2






A


1


,




A


2





分别对应着00, 01, 10, 11




A

7

A7






A


7





默认高电平有效即为1

综上所述:

计数器0: 00

1010


0000





0

A

0

H

0A0H






0


A


0


H




计数器1: 00

1010


0010





0

A

2

H

0A2H






0


A


2


H




计数器2: 00

1010


0100





0

A

4

H

0A4H






0


A


4


H




控制字寄存器: 00

1010


1100





0

A

6

H

0A6H






0


A


6


H




在这里插入图片描述




BCD码的用法

BCD码表示的是十进制

一个字节 = 8位

组合BCD码(压缩BCD码)

一个字节包含两位BCD码; 每4位为一个BCD码; 每4位以二进制的形式计算所表示的是十进制的位数. 比如二进制:1000; 十进制是8.

e.g.

1001


0011

表示十进制的93

未组合BCD码(非压缩BCD码)

一个字节包含一个BCD码; 前4位都为0, 后4位表示一位BCD码

e.g.

0000


1001



0000


0011

一起来表示十进制93




8254A/8253A编程题

假设在一个8086系统中,使用8253控制一个LED的点亮或熄灭。四个端口地址分别是



81

H

,

83

H

,

85

H

,

87

H

,

C

L

K

81H,83H,85H,87H, CLK






8


1


H


,




8


3


H


,




8


5


H


,




8


7


H


,




C


L


K





端输入的是时钟频率为



2

M

H

z

2MHz






2


M


H


z





,LED点亮和熄灭均为10s。设计硬件电路和驱动程序。

在这里插入图片描述

解答:




8254

A

8254A






8


2


5


4


A





计数初值 :



N

=

f

c

l

k

÷

f

o

u

t

N = f_{clk} \div f_{out}






N




=









f











c


l


k





















÷









f











o


u


t






















, 其中



f

c

l

k

f_{clk}







f











c


l


k






















表示的是输入频率,



f

o

u

t

f_{out}







f











o


u


t






















为输出频率。

周期与频率之间的转换:



f

×

T

=

1

f \times T = 1






f




×








T




=








1









f

=

1

T

f = \frac{1}{T}






f




=




















T
















1
























; 其中T的单位是s(秒)

单位间的转换 : 1



M

H

z

=

1

×

1

0

3

K

H

z

=

1

×

1

0

6

H

z

MHz = 1\times 10^3 KHz = 1 \times 10^6 Hz






M


H


z




=








1




×








1



0










3









K


H


z




=








1




×








1



0










6









H


z




因此输入的频率为



f

c

l

k

=

2

×

1

0

6

H

z

f_{clk} = 2 \times 10^6 Hz







f











c


l


k





















=








2




×








1



0










6









H


z





; 输出周期为



T

=

20

s

T = 20s






T




=








2


0


s





,所以频率



f

o

u

t

=

1

T

=

1

20

=

0.05

H

z

f_{out} = \frac{1}{T}=\frac{1}{20} = 0.05Hz







f











o


u


t





















=




















T
















1























=




















2


0
















1























=








0


.


0


5


H


z




初步计算计数初值为



N

=

f

c

l

k

÷

f

o

u

t

=

2

×

1

0

6

÷

0.05

=

4

×

1

0

8

N = f_{clk} \div f_{out} = 2 \times 10^6 \div 0.05 = 4\times10^8






N




=









f











c


l


k





















÷









f











o


u


t





















=








2




×








1



0










6











÷








0


.


0


5




=








4




×








1



0










8











因为二进制计数最大初值为65536; BCD码计数初值最大为10000

所以得分步计数

根据上图, 使用到



C

L

K

0

CLK_0






C


L



K










0

























C

L

K

1

CLK_1






C


L



K










1





















即使用的是计数器0和计数器1

因此思路为先让计数器0计数一部分,再将输出频率传到计数器1进行计数,这样就可以减小计数初值.

先让计数器0计数5000, 输出的频率为



f

o

u

t

0

=

f

c

l

k

0

÷

5000

=

2

×

1

0

6

÷

5000

=

400

f_{out_0} = f_{clk_0} \div 5000 =2\times 10^6 \div 5000 = 400







f











o


u



t










0





































=









f











c


l



k










0





































÷








5


0


0


0




=








2




×








1



0










6











÷








5


0


0


0




=








4


0


0





, 再将



f

o

u

t

0

f_{out_0}







f











o


u



t










0






































传入



f

c

l

k

1

f_{clk_1}







f











c


l



k










1






































,即



f

o

u

t

0

=

f

c

l

k

1

f_{out_0}=f_{clk_1}







f











o


u



t










0





































=









f











c


l



k










1






































, 计数器1计数8000, 最后输出频率为



f

o

u

t

1

=

f

c

l

k

1

÷

8000

=

400

÷

8000

=

0.05

f_{out_1} = f_{clk_1} \div 8000 = 400 \div 8000 = 0.05







f











o


u



t










1





































=









f











c


l



k










1





































÷








8


0


0


0




=








4


0


0




÷








8


0


0


0




=








0


.


0


5





,因此最终输出频率为0.05 ,也就是周期为



20

s

20s






2


0


s




代码段:

MOV AL,00110101B
OUT 87H,AL
MOV AL, 00H
OUT 81H, AL
MOV AL,50H
OUT 81H, AL
MOV AL, 01110111B
OUT 87H,AL
MOV AL,00H
OUT 83H,AL
MOV AL,80H
OUT 83H,AL

题目1: 若加到8254上的时钟频率为



1

M

H

z

1MHz






1


M


H


z





,则一个计数器的最长定时时间是(



65.536

m

s

65.536ms






6


5


.


5


3


6


m


s





解答 : 因为



8254

A

8254A






8


2


5


4


A





最大的计数初值是65536, 所以



N

M

A

X

=

65536

N_{MAX} = 65536







N











M


A


X





















=








6


5


5


3


6





,



f

o

u

t

=

f

c

l

k

÷

N

M

A

X

=

1

×

1

0

6

÷

65536

f_{out} = f_{clk} \div N_{MAX} = 1\times 10^6 \div 65536







f











o


u


t





















=









f











c


l


k





















÷









N











M


A


X





















=








1




×








1



0










6











÷








6


5


5


3


6





,



T

=

1

÷

f

o

u

t

=

65536

×

1

0

6

s

=

65.536

m

s

T = 1\div f_{out} = 65536 \times 10^{-6} s = 65.536ms






T




=








1




÷









f











o


u


t





















=








6


5


5


3


6




×








1



0














6










s




=








6


5


.


5


3


6


m


s




题目2:若加到8254上的时钟频率为



2

M

H

z

2MHz






2


M


H


z





,则一个计数器的最长定时时间是(



32.768

m

s

32.768ms






3


2


.


7


6


8


m


s





解答:因为



8254

A

8254A






8


2


5


4


A





最大的计数初值是65536, 所以



N

M

A

X

=

65536

N_{MAX} = 65536







N











M


A


X





















=








6


5


5


3


6





,



f

o

u

t

=

f

c

l

k

÷

N

M

A

X

=

2

×

1

0

6

÷

65536

,

T

=

1

÷

f

o

u

t

=

32786

×

1

0

6

s

=

32.786

m

s

f_{out} = f_{clk} \div N_{MAX} = 2\times 10^6 \div 65536 , T = 1\div f_{out} = 32786\times 10^{-6} s = 32.786ms







f











o


u


t





















=









f











c


l


k





















÷









N











M


A


X





















=








2




×








1



0










6











÷








6


5


5


3


6


,




T




=








1




÷









f











o


u


t





















=








3


2


7


8


6




×








1



0














6










s




=








3


2


.


7


8


6


m


s







N

M

A

X

=

65536

N_{MAX} = 65536







N











M


A


X





















=








6


5


5


3


6





,



f

o

u

t

=

f

c

l

k

÷

N

M

A

X

=

2

×

1

0

6

÷

65536

f_{out} = f_{clk} \div N_{MAX} = 2\times 10^6 \div 65536







f











o


u


t





















=









f











c


l


k





















÷









N











M


A


X





















=








2




×








1



0










6











÷








6


5


5


3


6





,



T

=

1

÷

f

o

u

t

=

32786

×

1

0

6

s

=

32.786

m

s

T = 1\div f_{out} = 32786\times 10^{-6} s = 32.786ms






T




=








1




÷









f











o


u


t





















=








3


2


7


8


6




×








1



0














6










s




=








3


2


.


7


8


6


m


s






版权声明:本文为honorzoey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。