注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
4 M% B8 e) x! N& @7 w' u4 M- Z6. 8155的基本用法:4 i+ T+ [. H7 f. L( |
① 可扩展256字节片外RAM
1 J3 G0 i1 D6 V3 A" Y, ]9 CIO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。
! n8 O# B$ b* R② 作扩展I/O口使用
/ T8 \7 r% [# Q# L {; QIO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,
1 N$ F# H* E: p0 @% V③ 扩充一个14位定时器计数器
) n: z2 g9 Z& K0 _4 ?8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。! B. u# i( k/ m8 e
使用步骤:1 \- ~. @/ b9 Q0 J# n: x: A
写入控制命令字的D7、D6位控制启停。
' R3 M9 A# H/ {+ s& a写入计数长度:端口地址04H的8位为计数器的低8位
0 }8 B7 n% N9 z0 [& T8 |端口地址05H的低6位为计数器的高6位,共14位。
5 \, _1 U' L4 v05H的高2位确定当计数器时减到0时的输出方式。0 Z! v8 s f( i* F$ H [+ ^ p- o
+ m: X5 i j( T4 o( r4 L0 F8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
; h, W3 g w8 ^. {* h由上图得到8155各端口的地址为:: Y6 e2 G p3 |+ h) y* i+ m
P2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址
{: \3 J" a! J* E- v% cP2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0
0 y& F1 a {5 ~' [
7 T, J. p, D1 J- f- S* ^! o0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H! p$ |& P4 f) H1 F
* X8 h+ w6 K+ u+ B! W+ E. S
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H
! ^$ O! h; i7 G! q9 X# ?$ K1 s
% c+ ^! K( A' E, p( M9 T& Y0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H
8 i, g. u" R8 U! S) R' ~) n" L9 x4 R2 ?
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H+ O+ Y1 j' x. s `) |' l
* r2 s$ i9 l/ D! l1 H
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
+ V3 ?! r$ v8 v: A2 o& G2 A" `' r" c/ ?! s4 n2 o7 m
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位 7F05H
9 n4 k( @: H9 _* Q( n" ~) O) C! X6 p/ x( {+ E- c3 [0 D
P2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
0 V8 n8 U6 B# U3 Q" T7E00H~7EFFH 共256字节。
; } x8 o6 \- f2 ^2 M" \6 m6 f8155的基本操作软件:1 P/ H. S8 E: d! n5 G% t* E0 \
①I/O口及8155RAM的操作软件:
: d8 L Z2 R" V; x$ v j- ^$ gMOV DPTR , #7F00H ;选命令状态口# ^0 I: y v; N, u& P3 }8 W1 w+ k6 ]
MOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0
9 P( w; {0 }. j& [5 K3 ~0 F6 rMOVX @DPTR , A ;A口输入、B口输出、C口输入+ t! Y2 ?. k8 T
MOV DPTR , #7F01H ;选A口3 {* j% j4 J; [1 W4 ~
MOVX A , @DPTR ;从A口输入数据
+ v% L' y5 h5 p2 u+ GMOV DPTR , #7E30H ;选8155RAM的30H单元: Q+ ?5 g4 Z; n8 P# N& J
MOVX @DPTR , A ;将A口输入的数据存入30H单元
% z+ Y8 L$ ]: R' ~MOV DPTR , #7F02H ;选B口
, V' [4 A, b' YMOVX @DPTR , A ;将A口输入的数据转从B口输出
- B/ ]5 n: r1 G②计数器的软件:0 O. l7 N. l; D W" s
MOV DPTR , #7F04H ;选计数器低8位
; D$ Q! x- B- J$ ZMOV A , #18H 1 @0 W8 j% G+ Z* }2 p2 _7 a
MOVX @DPTR , A ;计数常数24装入计数器低8位% s8 N# o- M. a7 {
1NC DPTR ;选计数器高位8 @6 [7 B( B; O B% u, V; B8 q
MOV A, #40H
+ N0 k9 R( W( X' z6 Z/ S) Z% lMOVX A ,@DPTR ; 高2位01选择输出方式为连续方波1 u! N& h' Y0 U
其低6位为计数器的高6位为00H # R# J$ u# z, l8 M7 N1 I; G
( T2 p0 V7 M, ]' r9 ? |