注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
( {( s' N/ @2 `9 M6. 8155的基本用法:
7 J) Z, m% n2 I$ V% d① 可扩展256字节片外RAM
9 c# `# J1 M3 [IO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。* ]! y5 A" t; ]! c# H% @' s
② 作扩展I/O口使用
, a) [3 U* Y" M8 W" O8 [IO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,
* r/ M+ K- |: w③ 扩充一个14位定时器计数器' F* W! p e! u( t2 ?! g& Q" c+ S1 L
8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。 g. b# o, r9 b6 q3 Y
使用步骤:
" s- t( q1 o; k, z! |6 u' _& I* @写入控制命令字的D7、D6位控制启停。
3 q6 ^- U, `% R/ ?$ [6 U8 i E/ r$ r写入计数长度:端口地址04H的8位为计数器的低8位- s; x" M: y" p( Y- a1 W
端口地址05H的低6位为计数器的高6位,共14位。! p, H( s9 S2 x* D
05H的高2位确定当计数器时减到0时的输出方式。
, `1 u1 ]- f. b6 W: t) t$ }! d, Y; o7 ^7 @$ q4 [# N! ?
8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
0 y3 l; }* ^0 @! C由上图得到8155各端口的地址为:+ ~. O2 K, n- ]7 x+ _; K/ Z- K
P2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址 o1 Q* X& L9 {8 y" q- ]' p; m
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0 4 H7 o* b% h4 J7 Y" J+ c4 a
& x: ~7 y5 v r1 C5 K( ]0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H+ U/ P, P: m$ z9 T2 K
' B f# \" D. N& R
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H
* }' l4 k) D1 k# F! x; l9 C
1 W$ Q" O, g3 P1 k" G# P0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
* S* i. x; z; w. r! S6 `6 [: o0 O0 R- p- Q) R& M9 @, l, S
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H
7 F* Q, c5 L# B4 U. J9 }8 g: |4 [8 I' R' J
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
' w+ T( s, N" P3 e1 P4 t2 p
3 p/ T5 @ V) }* p) i0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H
6 Y2 s( r8 o& s
0 @' Y% J% u$ [7 C4 t1 U0 T$ LP2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
. T8 O( S; D! z7E00H~7EFFH 共256字节。1 I9 B- S( p. a& Y& k( I4 J7 c% q
8155的基本操作软件:
4 D+ G9 o" Q: [" O; {7 n$ Y9 B# U①I/O口及8155RAM的操作软件:$ N0 k% Z# E- o, x3 m7 R7 R; f" N
MOV DPTR , #7F00H ;选命令状态口* d; N R! `8 ^6 C# L0 [
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0 . P. [1 [; j- T! L4 r
MOVX @DPTR , A ;A口输入、B口输出、C口输入
5 {( Y$ Y; c7 \2 }MOV DPTR , #7F01H ;选A口9 ~/ }! s8 h& w5 }! ]" v
MOVX A , @DPTR ;从A口输入数据
" k8 |, }" q7 n' C1 w2 ^MOV DPTR , #7E30H ;选8155RAM的30H单元2 C) X6 o: I0 Z; |5 U, e' p2 _6 j
MOVX @DPTR , A ;将A口输入的数据存入30H单元
9 M" e' P1 C* i, dMOV DPTR , #7F02H ;选B口1 Y# x9 R3 C* p Q) r6 F
MOVX @DPTR , A ;将A口输入的数据转从B口输出
8 t8 m4 v& A' c1 `0 ]; u②计数器的软件:
5 H# ~ c6 e8 w6 E- E) U* C6 R+ OMOV DPTR , #7F04H ;选计数器低8位: a6 |1 M1 _' q( L$ H
MOV A , #18H
: P. @& A* I8 F# a2 I/ m% ^MOVX @DPTR , A ;计数常数24装入计数器低8位
' K6 W& L# M7 s1NC DPTR ;选计数器高位
, j( i9 y! O9 g0 oMOV A, #40H! O) |% d2 ?! a2 X8 X
MOVX A ,@DPTR ; 高2位01选择输出方式为连续方波 n) Z- p4 G6 v* _5 ]
其低6位为计数器的高6位为00H 0 J1 ~0 H; P; j$ [6 Z/ P& K
% h# K% w$ N& s( E- ?; H# B
|