用3块74系列TTL电路和8个晶体管组成的输出接口,可通过编程输出PC-81微机的D总线数据以实现一些控制功能。它的结构简单,适于爱好者自制、实验。
1.原理:PC-81机已将喇叭、录音机、监示器等外设地址定为FXH(X为5、6、E、F等),为了避免地址冲突,我们把所加的数据输出接口的地址定为2XH(X选为0、4、8),以A4是否为0来决定是否对它寻址,由IORQ-和WR-线控制数据输出到接口上。线路见图1。

IC\(_{1}\)为三态缓冲器。当地址为2XH时,A4=\(_{2}\)3\(_{5}\)可通过它缓冲后加到IC2译码器74LS138的A、B、C端。在输出指令周期,IORQ-=WR-=0,IC\(_{2}\)有译码输出。当选输出接口地址为28H(即十进数40),A2=\(_{3}\)=1,A5=1,则Y\(_{6}\)=0。在输出指令周期结束时,IORQ-和WR-升高为1,Y6也立即升高,D总线上的数据即打入IC\(_{3}\)三态8D触发器,由于其OUT端已接地,故数据立即输出。晶体管BG0~BG\(_{7}\)的通断状态就由这数据的各位而定,其C极所接的LED0~LED\(_{7}\)也就根据总线数据而亮、灭。IC3的数据一直保持到下一个输出到此接口的指令为止。为了不过分增大微机本身的电源负荷,故除了IC\(_{1}\)~IC3的工作电源5V直接接自微机外,LED\(_{0}\)~LED7的电源为外接9V电源。
2.制作:因元件较少,故把IC\(_{1}\)~IC3、BG\(_{0}\)~BG7及电阻装在一块小电路板上。LED\(_{0}\)~LED7可装在板外并按需要排列或装饰,再以软线引至电路板。9V电源容量由“外设”而定,如仅控制LED\(_{0}\)~LED7,则其电流为50mA即可,如控制继电器,则其容量要根据情况增加。IC\(_{1}\)~IC3均可在电子器材商店购到。BG\(_{0}\)~BG7可用HFE较大的普通硅管3DG\(_{6}\)、9014等。如要驱动较大的负载,也可以用中功率管。因IC3的负载能力较大(高电平最大输出可达2.6mA)故这样做没有问题。PC-81的A(地址)、D(数据)、C(控制)各总线均在其印制板后方引出,排列见图2。因合适的44线插座不易购到,可用磷钢片和塑料板自制。如自制有困难,则直接在印刷板上用多股软线焊出也可,但所用的16根线必须反复核对并作好标记,焊接时电烙铁外壳要接地以防损坏主机元件(或把集成块拔下后再焊接)。

3.调试:安装接线完毕后,经反复检查无误则可接好微机、外接电源、显示器,并接通微机电源。用万用表检查各IC的5V是否正常及LED\(_{0}\)~LED7的9V电源,以上均无问题,则LED\(_{0}\)~LED7均灭,再进行程序试验。其步骤是:
①在键盘上键入: POKE 16388,205
POKE 16389,71
从而划出地址18381至18431的一块内存存放机器语言子程序;
②键入:POKE 18381,0
POKE 18382,62
POKE 18383,255
POKE 18384,211
POKE 18385,40
POKE 18386,201
其对应的Z80助记符为:
18381:NOP
18382:LDA,FFH
18384:OUTA,(28H)
18386:RET
③再打入一小段BASIC,如:
10、PRINT“TEST”
20、 U=USR 18382
30、 PRINT“OK”
④运行此小程序,则显示器上出现TEST后,LED\(_{0}\)~LED7应全部点亮。如未能全部点亮,除检查接线是否正确外,还要用PRINT PEEK 18381至PRINT PEEK 18386顺序检查地址18383至18386中的数据是否为0、62、255、211、40、201。若不对则再次用POKE打入正确的数据。
4.应用例:例如可设计一个如下的彩灯点灭图案:
LED LED LED LED LED LED LED LED
7 6 5 4 3 2 1 0
亮 亮 亮 灭 灭 亮 亮 亮
并使暗灯循环向右移动。为此,可先对新增接口地址28H(十进数40)输出11100111,即十进数231,经延时后使累加器A中存入的此数作循环左移,每移动一位输出一次,并反复进行。其相应的机器语言子程序及Z80助记符如下(均以十进制数书写,因PC-81只能打入十进数)
机器语言 汇编语言
地址 操作码 助记符
18381, 0 ; NOP
18382, 62 ; LD A, 231
18383, 231;
18384, 211; OUT A,(40)
18385, 40 ;
18386, 6 ; LD B, 2
18387, 2 ;
18388, 33 ; LD HL, 18, 125
18389, 125;
18390, 18 ;
18391, 45 ; DEC L
18392, 32 ; JRNZ,253
18393, 253;
18394, 37 ; DEC H
18395, 32 ; JRNZ,250
18396, 250;
18397, 16 ; DJNZ,245
18398, 245;
18399, 7 ; RLC A
18400, 24 ; JR 238
用POKE将上述机器语言打入后即可在运行一小段BASIC后运行U= USR 18382的子程序,从而使LED\(_{7}\)~LED0即顺序循环亮灭。(卫小鲁)