注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
' m! Q' M( D# K! ~9 D4 E/ Q$ Y6. 8155的基本用法:( u3 Q7 j7 j) b& {& Q$ J
① 可扩展256字节片外RAM
, ]/ X7 _; v5 g; kIO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。8 |7 U, {5 A7 D4 u
② 作扩展I/O口使用
' W+ z/ L1 B& r( LIO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,: A. l/ [5 U" m, `& n( l
③ 扩充一个14位定时器计数器
$ V9 \0 W6 `! |. X% h8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。
$ E0 `7 S2 U" `8 H; l# p+ T使用步骤:' C# U1 Y' M6 W2 k$ ?
写入控制命令字的D7、D6位控制启停。
& o( Z. Z0 ]8 l, l# e写入计数长度:端口地址04H的8位为计数器的低8位
& q( L/ g6 R) D) N8 Z+ a端口地址05H的低6位为计数器的高6位,共14位。
( l# H; \# E$ w) w05H的高2位确定当计数器时减到0时的输出方式。
( v3 g7 F, h0 Z% m# {. ^
# a0 s- D8 |+ `6 x8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
T8 I2 _( \ J由上图得到8155各端口的地址为:
6 }# O' A! C9 L5 s3 N9 hP2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址
# E( E5 @. T# w8 \5 G9 H ?1 c- CP2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0 " M. j' U' `5 A! f
/ q, E4 J8 l5 J6 B ^" s' ~0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H& W" h$ D/ v6 V) K$ s, M, e
9 V5 t4 r! e6 J3 y4 I2 o0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H" e. w0 g- J8 j9 v
2 h4 R9 y, b2 f& `9 _2 H9 Q- A
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
9 f- ^- ^# X3 m* n
4 T @' ^1 X/ Y+ s' X" t0 @" r0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H
" T% ?9 j9 i, v1 Q: B, E( c3 u0 L8 }9 x& W4 X7 |0 s
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
* z( n. y" m5 g& M3 f4 M
# L% L: z" J% P3 b) `' U! s0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H
* q4 |3 P* B9 k3 b* X
# R I8 f7 N5 H; P8 I1 Y# ]8 OP2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
% d+ f2 ^5 ^+ J1 n' U; U7E00H~7EFFH 共256字节。# v7 p' s0 H- B& O
8155的基本操作软件:3 J4 X j2 v) p
①I/O口及8155RAM的操作软件:7 ]! m! x. l; _+ H- t d6 H) P
MOV DPTR , #7F00H ;选命令状态口4 u) m& X0 p' ~. s7 h) }; j: L
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0
" D. G& u9 w! A1 hMOVX @DPTR , A ;A口输入、B口输出、C口输入" c, }4 C K" I ~2 n0 h
MOV DPTR , #7F01H ;选A口
. l) |4 b( M" e+ r; r$ P0 Q+ OMOVX A , @DPTR ;从A口输入数据
0 }: u, x. u& B' w. T; z4 IMOV DPTR , #7E30H ;选8155RAM的30H单元( V% q% C( m- ], F/ o4 ^
MOVX @DPTR , A ;将A口输入的数据存入30H单元0 G, D+ p7 K: R1 v5 `' M
MOV DPTR , #7F02H ;选B口, g: k, g" ^: t# j1 ?7 ?, c2 v
MOVX @DPTR , A ;将A口输入的数据转从B口输出
& P# @6 d8 m" l% f! t②计数器的软件:
+ V6 k) y8 u0 X# Z! K4 bMOV DPTR , #7F04H ;选计数器低8位
( J1 h% ~, Z. \. W) A- tMOV A , #18H
' d! O9 T+ C0 X! k& uMOVX @DPTR , A ;计数常数24装入计数器低8位
* v- @+ `; e( U9 ~, @7 F1NC DPTR ;选计数器高位
# E) Z& J$ u1 H IMOV A, #40H
" T0 q& R+ ~& Z! n8 i% v2 aMOVX A ,@DPTR ; 高2位01选择输出方式为连续方波% _( s) S! p7 O N! k
其低6位为计数器的高6位为00H 0 {$ f/ s9 X6 d( K+ o P$ ]
; [1 Z: f6 K* e0 U |