注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
$ w" N+ j0 D# I; g6. 8155的基本用法:
4 z9 ]/ u7 X! [ V, o9 }① 可扩展256字节片外RAM( z! L, k: X- _4 m$ W' U
IO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。8 F) I* s8 B ]. S: i1 F
② 作扩展I/O口使用
; g& ?8 x) D( i4 |4 r$ LIO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,
% U& B0 d y& `6 \; l3 Y0 ?& Z3 _6 ^③ 扩充一个14位定时器计数器% V" ~4 v/ |$ F" b7 x B
8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。4 _# G- m- C/ z! p
使用步骤:) a5 [# w5 C1 E7 y- C9 Z
写入控制命令字的D7、D6位控制启停。1 Z4 }( w; f. Y- O% S: w
写入计数长度:端口地址04H的8位为计数器的低8位
6 R- d" n; X8 Q" L- L端口地址05H的低6位为计数器的高6位,共14位。
* q/ v8 M2 X- x `3 |! U, q7 n05H的高2位确定当计数器时减到0时的输出方式。8 B* t6 J5 z: B
1 `: U3 P) }. d) S9 S, L9 z8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。% T: m3 `2 D# H! ]7 _
由上图得到8155各端口的地址为:
1 e' p6 ?' k) `* e2 yP2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址
5 n3 ]& P$ h6 W. \) N' nP2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0
+ S6 S C5 h. L4 ^ 8 N5 s; K' R& A3 a2 }# u. K
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H7 Q; c9 {' B3 z+ }' X9 W O
& U3 o$ a8 v# K) ^
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H7 h! g+ k4 O9 a% |
" H# I. |) T# p
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
, x4 F$ h6 V8 Y F' H0 u
# K- v# P+ E* S0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H
7 T9 d' k( t/ @( ?0 U" `7 v
8 t) C/ J; |: Y5 d4 ~8 N" |0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
8 w `# S0 b1 n B& T' o3 o0 p
9 M; f" y" @. X9 ?$ `9 a* J0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H
) T' t; E% w; x! \
. ^ J1 u, L! a6 C& }P2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
6 e K8 D, y) q- @$ } J! T) c7E00H~7EFFH 共256字节。$ D# }0 }# W; `$ W
8155的基本操作软件:' o) w4 t0 E. R; f) C- y
①I/O口及8155RAM的操作软件:
, m/ \7 |2 h3 P3 R& N( q* ?5 H6 `MOV DPTR , #7F00H ;选命令状态口9 B) F5 C$ M5 q3 d+ \
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0
2 }, f/ a2 E$ h1 z, c! g; j4 sMOVX @DPTR , A ;A口输入、B口输出、C口输入
" E5 T* a. d# u$ x) t& m5 Q3 c9 K' TMOV DPTR , #7F01H ;选A口
- {' l" |" _' F5 zMOVX A , @DPTR ;从A口输入数据
R% s$ ]# E- }/ R! f" A* LMOV DPTR , #7E30H ;选8155RAM的30H单元
! b. i5 F, t, @* e5 E: V: p) C1 k3 WMOVX @DPTR , A ;将A口输入的数据存入30H单元
, E$ H( }/ i0 }; _. G& g8 P4 PMOV DPTR , #7F02H ;选B口
# z8 E& m) B2 c% N3 IMOVX @DPTR , A ;将A口输入的数据转从B口输出
' b: W' F' M" _0 h) X②计数器的软件:4 Z0 L7 z; ?) e( D
MOV DPTR , #7F04H ;选计数器低8位" ?( I' |: G% h5 F0 G
MOV A , #18H
+ d% M# l! Y1 w" a2 H: sMOVX @DPTR , A ;计数常数24装入计数器低8位- O b8 z: v! y4 @3 W) r
1NC DPTR ;选计数器高位- a0 `$ g) o2 Q1 Y: p, G P, j% b
MOV A, #40H
. B, e8 V9 L1 h) o( B; XMOVX A ,@DPTR ; 高2位01选择输出方式为连续方波4 K, x6 b- ~6 U |! v; h1 y: w3 d4 T
其低6位为计数器的高6位为00H
3 J5 \) i' r2 G+ `) W! E0 s8 ~
' q" C( z: _4 y- B1 D |