正文 第三章 64180的軟件配置(2 / 3)

器的內容(寄存器地址和I/O地址>增量;而執行0TDM和0TDMR指令時,HL和C寄存器的內容減量。但在這些指令中,B寄存器(數據塊長度)總是減量的。0TIMR和0TDMR指令各自按上述指定的規律自動重複進行,一直到B寄存器減到0時才能停止。由於在這類指令中,I/O地址自動增量或減量,所以這些指令可以用來作為I/O口初始化時的數據塊輸出,例如,對64180芯片內I/O的初始化。使用此類指令訪問I/O口時,自動將00H放到地址總線的髙8位。

指令說明:本指令進行如下操作:

①把以HL寄存器對為地址指針的存貯器單元內容輸出到以C寄存器為地址指針的I/O設備中。

②指令執行後,111和內容都增1,而B寄存器的內容減1。在指令執行時,CPU自動把00H放到地址總線的A1B-A8,而把C寄存器的內容放到A7—A。生成16位的I/O地址。

注意:若外部的I/O地址和芯片內部I/O寄存器的地址一樣,即發生地址重疊,那麼同一個數據既送到內部寄存器也同時送到外部I/O設備中。

指令舉例:假定I/O地址為0080H的外設接口為一個74LS273D鎖存器。要求在對它清除後,將地址為4000H的存貯器內容輸出到0080H外設中去。程序段如下:

0TIM指令執行前,HL=4000H,指向地址為4000H的存貯器單元,C=80H,B=02H,地址為0080H的外設被清0。0TIM指令執行後,HL=400lH,地址為4000H的存龍:器內容不受影響,但它的內容已被拷貝到0080H外設中去了,C=8lH,B=0lH。

指令說明:本指令進行如下操作:

①把以HL寄存器對為地址指針的存貯器單元的內容,輸送到以C寄存器內容為地址的I/O設備中。

②每輸送1字節數據後,HL和C的內容均增1,B寄存器的內容減1。

③反複進行①和②的操作,一直進行到B—1=0時為止。

每次操作,CPU自動將00H放到地址總線的A16—Ag,C寄存器的內容放到A7—A。而形成16位I/O地址。

注意:①如果外部設備的I/O口地址和芯片內I/O寄存器的地址一樣(發生重疊),那麼同一數據既送到外部I/O設備,也同時送入內部I/O寄存器中。

②如果在執行0TIMR指令過程中產生中斷,0TIMR指令的執行將會被暫時終止,而轉入中斷服務程序。從中斷服務程序返回之後,則會繼續執行被終止了的0TIMR指令。指令舉例:假定外設的I/O地址為80H、8lH和8出。

指令說明:本指令實現如下操作:

①把以Hl寄存器對為地址指針的存貯器單元內容輸出到以寄存器C為地址的I/O設備中去。

②指令執行後,HL、C和B的內容都減1。指令執行時,CPU自動將00H放到地址總線的A18—人8上,把C寄存器內容放到地址總線A7—入。從而形成16位的I/O地址。

注意:若外設的I/O口地址和芯片內I/O寄存器的地址發生重疊,則同一個數據將會既輸出到外部I/O設備中,也送入芯片內部I/O寄存器中。

指令舉例:假定I/O地址為0080H的外設接口電路為一個74LS273D鎖存器。要求在DTDM指令執行前,HL=4000H,C=80H,B=03H,地址為0080H的I/O接口電路74LS273被清0;指令執行後,HL=3FFFH,C=7FH,B=02H,地址為0080H的I/O接口電路的74LS273接收到從4000H存貯器送(拷貝)來的數據,而4000H存貯器內的數據不受影響。標誌位的狀態是:C=0,N=l(假設4000H內容最髙位為1),P/V=0(B—1=02H結果為奇),H=0,Z=0(B—1不為0),S=0(B—1為正數)。如果假定4000H內的數據為45H,B為01H,那麼指令執行後,B—1=0,各標誌位的狀態是:C=0,M=0(4000H內數據為45H,最高位不為1),P/V=l(B-l=0為偁),H=0,Z=1(B-1=0),S=0。