注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
& e5 O; C! ]; M7 q" g* o6. 8155的基本用法:
- V' v8 W5 i% ~$ r① 可扩展256字节片外RAM
5 C& w7 a$ ~3 I, aIO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。# _7 D# K4 O: }* d# {. I9 r
② 作扩展I/O口使用
9 _# T' J7 H: w9 J! gIO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,0 |' n% e* f# r- c9 @- r$ `
③ 扩充一个14位定时器计数器
f3 y0 J2 {& _; J8 u0 x8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。
6 W6 |# W: P% d5 [7 p使用步骤:
* i# b; e% y, q! ]6 C4 E- x5 W$ \* G; k写入控制命令字的D7、D6位控制启停。
" [' ^/ D. x, \8 W7 l写入计数长度:端口地址04H的8位为计数器的低8位$ J4 ?7 l, K/ o: z
端口地址05H的低6位为计数器的高6位,共14位。! x; s$ u" |- g9 ]) s: N, D
05H的高2位确定当计数器时减到0时的输出方式。" a- V" U0 w) e. q6 T" I
# s u( p5 y, z* Y
8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。) e$ V% L$ W/ ^6 \9 w P7 b. ?9 n
由上图得到8155各端口的地址为:* [2 u- X( j( W5 E
P2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址+ ^1 Z! K) o* ?& S: L" t; ~8 }5 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
7 \3 I& v: J1 n8 E- ^ $ _; W6 e0 q5 q3 R; n
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H
8 d5 D* s# j- V8 ~7 `" o$ w7 F# `1 B" n2 {, m
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H+ C; O" ]" B9 Z( @
* I- v+ w) u* r. q3 A! H8 C& w4 k0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
# M3 E; V# `( l9 Y1 s
. J: ?: R( H5 w- z" S0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H0 {% X# _7 q, N! N' V4 k9 l* t5 f0 c
3 i: d7 L! U7 {3 |0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H+ [% ~5 t; ]$ W, T& z6 H
# n. s8 i% T& K0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H* q, M/ B9 I# E* e: t9 x
2 c& S# m1 H0 U5 z+ V, d: g0 ZP2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
9 i/ K( N, F5 U: N7E00H~7EFFH 共256字节。
2 Y: K) Q5 n3 j& D( x8155的基本操作软件:$ R& J& V3 L- R
①I/O口及8155RAM的操作软件:
; ^" D8 X0 C% `5 dMOV DPTR , #7F00H ;选命令状态口, \5 Z: t7 k/ _* W# |- k
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0
# M; v2 l% @! w. CMOVX @DPTR , A ;A口输入、B口输出、C口输入: G' E% x, p* @, D
MOV DPTR , #7F01H ;选A口
4 o% M6 Z- }6 \3 m+ i7 OMOVX A , @DPTR ;从A口输入数据- e9 s) w% \5 s3 f% P& c0 i/ @
MOV DPTR , #7E30H ;选8155RAM的30H单元" O2 `( B: y7 W4 d
MOVX @DPTR , A ;将A口输入的数据存入30H单元1 y2 M+ ]3 p! W$ \& H* t0 K
MOV DPTR , #7F02H ;选B口$ {+ a) H/ \; q! l' y
MOVX @DPTR , A ;将A口输入的数据转从B口输出# J2 z* d0 _: J" d$ Y5 |
②计数器的软件:/ a6 Z, M8 a ~3 O+ U i& k
MOV DPTR , #7F04H ;选计数器低8位
8 d& [ z3 K% b+ |/ ~# T/ nMOV A , #18H
( a L* s, P+ v7 i7 M" b5 ^- lMOVX @DPTR , A ;计数常数24装入计数器低8位
; a; f1 }& |& s9 n/ x1NC DPTR ;选计数器高位* q2 T! |$ s! B" u; X8 Z; U
MOV A, #40H1 _* F# `6 B: D- X$ _
MOVX A ,@DPTR ; 高2位01选择输出方式为连续方波
/ z, c7 I' l! S 其低6位为计数器的高6位为00H
' j4 |: A4 _- d5 A2 p* c8 J9 I4 f3 k* {4 c3 w# u& ]' q& d
|