注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
4 B2 ]" i3 ~: Z$ [- r* o6. 8155的基本用法:
3 l4 T: }3 E1 T% R c* K% H① 可扩展256字节片外RAM9 w; o; \* x6 m
IO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。
3 F& {' _9 l$ H" x% u② 作扩展I/O口使用
( Q7 ?- F( U' v) m. X' |IO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,
6 [ Q! y9 ]" u; U) H+ G' c% k③ 扩充一个14位定时器计数器1 b. J/ Q$ w% N$ A9 }# G$ m
8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。; P7 Z9 m7 C; r% k. ~
使用步骤:- c9 F; o5 p3 ^% f
写入控制命令字的D7、D6位控制启停。
' a0 K2 n6 H0 j% V. k- S写入计数长度:端口地址04H的8位为计数器的低8位
* ^) z, J ^/ s1 g8 j端口地址05H的低6位为计数器的高6位,共14位。
$ f7 [2 ]2 O, o, O1 y0 Z$ T05H的高2位确定当计数器时减到0时的输出方式。' L' t' F! p8 G3 y; R* n
8 c. h) z, |' F% b1 t- ]0 R( E8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
% ~9 Y. o% |% H+ O7 }6 ^2 t由上图得到8155各端口的地址为:
, [9 d0 a" x3 ^- t* vP2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址" W' p1 }& M: M% x9 D6 L" K
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0
$ i, A u2 Y* D8 Z, x8 E% U
( y0 h4 A9 h- [0 o) P `, _ Q0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H) [ h/ f) M5 C7 _3 B
6 w* Z3 b( H& s: u2 B- y0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H
* Q8 H- J) f' _& @3 @9 Y
0 P6 A! r/ P# Z0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
4 U. k w5 x$ a- z. ]+ B, ?9 {) Y, [, d& M% a% q
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H: A0 q9 N* f/ O0 _3 K Z1 [. s
5 _, Q9 c) h y% b- v
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
! V& E9 M1 W" c! l) @8 E: M; H" l u, r: \
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H
9 L( G: V) ]. \5 o+ u
2 ~, |2 z9 Z7 [( l% c4 G, R9 p9 i* N$ nP2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:, Y/ V$ L/ q# e! k3 ]( R; c' X
7E00H~7EFFH 共256字节。! n* l$ { _0 y: d% _
8155的基本操作软件:# o" u$ H. @7 `" J
①I/O口及8155RAM的操作软件:
5 {- @. e6 ~2 j R1 l. CMOV DPTR , #7F00H ;选命令状态口4 ]) b5 J5 l; Q( l
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0 . C2 s; S+ U! a* w: J4 v
MOVX @DPTR , A ;A口输入、B口输出、C口输入
# Q! _5 \+ J( e h% I6 V y1 e8 {MOV DPTR , #7F01H ;选A口; h$ w- A# `9 N7 J$ a
MOVX A , @DPTR ;从A口输入数据. W' y" c: ^ \: u) m* _& q
MOV DPTR , #7E30H ;选8155RAM的30H单元: w7 n% D0 o/ S5 S8 a
MOVX @DPTR , A ;将A口输入的数据存入30H单元
# { T6 b- d$ C& O) K" {) fMOV DPTR , #7F02H ;选B口6 m9 \( q- t. p3 f" I1 j* B
MOVX @DPTR , A ;将A口输入的数据转从B口输出: e% K2 E8 {) Q Q7 T' r: v- [
②计数器的软件:
* J5 ?; Q3 L& K, H: ]0 NMOV DPTR , #7F04H ;选计数器低8位
$ U0 j8 M z7 gMOV A , #18H + u# a5 U9 v/ ]/ ^7 h9 N% y l
MOVX @DPTR , A ;计数常数24装入计数器低8位5 u- B' l4 C$ y+ u. K2 F! R; P. _5 X% ^
1NC DPTR ;选计数器高位% ]0 `4 d& g' }: D; n5 z
MOV A, #40H
4 V% X/ B- I+ DMOVX A ,@DPTR ; 高2位01选择输出方式为连续方波/ ?7 G; e! A9 ?
其低6位为计数器的高6位为00H 5 V; Z4 u: T, J s7 B: m7 {
& C" T2 r4 |+ N1 X0 r |