注意8155的控制命令字寄存器只寫不讀,狀態字寄存器只讀不寫,它們共用一個地址。
) F5 Z" z Y! m8 j6. 8155的基本用法:7 K2 y! g8 W6 u: e" U
① 可擴展256字節片外RAM
6 c5 n1 W3 d+ g+ ?% ]. BIO/M引腳低電平時,只能用作片外RAM擴充,其低8位地址為00H~FFH,共256字節,對其讀寫時用MOVX指令。
) Q- O8 j6 h' n) J② 作擴展I/O口使用0 C' Y2 z6 f1 ^8 t" {1 ?
IO/M引腳高電平時,可根據命令字的規定從A、B、C口輸入輸出,共有20條輸入輸出線,
/ I7 R4 k) N O8 d" z* t5 j③ 擴充一個14位定時器計數器
) h M; ^5 L5 C! x- ?: @8155提供一個14位減1計數器,它的功能主要用于計數,從TIMER IN端輸入計數脈沖,計數滿時由TIMER OUT輸出脈沖或方波。
- `1 M' \- `) L$ V6 v: s; e使用步驟:* _9 v" u- g) N2 \
寫入控制命令字的D7、D6位控制啟停。$ V4 ~4 ?4 E! D( ^
寫入計數長度:端口地址04H的8位為計數器的低8位
; y! k9 u, k5 A& x端口地址05H的低6位為計數器的高6位,共14位。) l3 V$ F9 }% e: v& M
05H的高2位確定當計數器時減到0時的輸出方式。/ R6 F$ t9 c3 `, \1 z A
; j$ K# }+ x" {0 b1 m0 Y) O5 p
8155片內帶有地址鎖存器,可在ALE的下降沿鎖存地址,不必在外部另接鎖存器。
9 G" {1 G- A) D2 p8 g& S由上圖得到8155各端口的地址為:3 Z9 _/ K5 w' x$ \" [% |2 x+ s) o
P2.7 = 0 ,片選CE有效;P2.0 = 1,則為端口地址" _' k9 L2 J7 p& H! _; q
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0 / Q+ Y3 H* Y! c4 v
[6 b4 b) T5 l" V2 Q$ v$ {0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令狀態口7F00H
* Y3 X# Y3 U; E3 k, w9 B
1 R0 s$ T E) s- X' \, i2 _' r0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口 7F01H
! g# L/ |: i3 ]- K/ [4 F( Q# G1 L4 o3 f, p& M& q
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口 7F02H% n0 X+ k. l p( W* v4 m
2 v1 x, E0 U% o
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口 7F03H
% w: W9 v/ F, H, E5 r [' A
3 L/ V" B3 H' h0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定時器低位7F04H9 f, e: v: P P
9 F9 ]( d$ C# o$ J. q- W
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定時器高位 7F05H7 Z, u5 ^. E! |9 [3 \+ K( A
( h! B) R2 R1 u0 }0 ?9 a& q
P2.7 = 0,片選CE = 0,且P2.0 = 0則為8155片內RAM地址:
1 @2 j9 p% n+ S) _; G! [/ B7E00H~7EFFH 共256字節。- n Y9 W. v J
8155的基本操作軟件:
+ x4 P9 D6 V' ~& [- @8 ]3 f. o①I/O口及8155RAM的操作軟件:
! L0 {: E A. p0 k, \MOV DPTR , #7F00H ;選命令狀態口
+ l9 z: z* ]$ ~" M/ e$ d) VMOV A, #0C2H ;送命令字 1 1 0 0 0 0 1 0 % E& u! t6 m! x. ]
MOVX @DPTR , A ;A口輸入、B口輸出、C口輸入( F4 u1 I* B. j$ K
MOV DPTR , #7F01H ;選A口6 x$ X. X! D5 \" ]0 A/ D8 `; v
MOVX A , @DPTR ;從A口輸入數據
0 q y! ~0 ]8 p; r8 i% j( `- cMOV DPTR , #7E30H ;選8155RAM的30H單元) _/ R& M7 {7 W: j L1 |# n0 O q
MOVX @DPTR , A ;將A口輸入的數據存入30H單元
5 w" k& z4 C( B: ZMOV DPTR , #7F02H ;選B口
* B* \9 t% G% P4 o0 M# R' nMOVX @DPTR , A ;將A口輸入的數據轉從B口輸出0 s; M% D; }( ?9 k _6 ~- g
②計數器的軟件:
: ^1 q, j* w- x M7 T4 ~MOV DPTR , #7F04H ;選計數器低8位
% ^4 W' `5 J0 e: ~$ ]MOV A , #18H
% }# e% H7 X# F8 L! nMOVX @DPTR , A ;計數常數24裝入計數器低8位
2 q& e" ?: t7 v1NC DPTR ;選計數器高位
2 q$ M1 g3 K8 h: OMOV A, #40H
/ ~/ \. ]( P1 d& m" N% T p4 RMOVX A ,@DPTR ; 高2位01選擇輸出方式為連續方波* a: k# p4 V! b: L3 z) L7 ^
其低6位為計數器的高6位為00H
! g; a+ q7 q+ _& S# z8 x! r6 l/ h$ _5 K4 L- f% n v! Y" ^2 \7 G
|