82扩展简单并行输入输出口 89C52有P0~P3四组I/O口,但是在某些 特定的场合,可能会出现IO口不够用的情 况。这时就需要通过扩展来增加O口的数 量以满足使用的需要。 在很多应用系统中,采用74系列TTL电 路或4000系列MOS电路芯片,扩展并行数据 输入输出
8.2 扩展简单并行输入/输出口 89C52有P0~P3四组I/O口,但是在某些 特定的场合,可能会出现I/O口不够用的情 况。这时就需要通过扩展来增加I/O口的数 量以满足使用的需要。 在很多应用系统中,采用74系列TTL电 路或4000系列MOS电路芯片,扩展并行数据 输入输出
82扩展简单并行输入输出口 例1在图8-4中,当P20=0,WR=1 RD=0时,通过74HC244(扩展输入)读 入按键状态,当P20=0,WR=0,RD=1 时,通过74HC573(扩展输出)根据按 键状态驱动发光二极管发光。 74HC244、74HC573的操作地址设为 Oxfeff
例1 在图8-4中,当P2.0=0,WR=1, RD=0时,通过74HC244(扩展输入)读 入按键状态,当P2.0=0,WR=0,RD=1 时,通过74HC573(扩展输出)根据按 键状态驱动发光二极管发光。 74HC244、74HC573的操作地址设为 0xfeff。 8.2 扩展简单并行输入/输出口
82扩展简单并行输入输出口74HC573 P0.0 DO 00 P0.1 DI Q1 P0.2 P0.3 D3 03 P0.4 D4 P0.5 D5 P0.6 D6 P0.7 D7 Q7 LE VCC 74HC244 89C52 的的 00 DO 01 DI 03 04 WR Q P2.0 D6 07 D7 图8-4简单ⅣO接口扩展
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 89C52 WR P2.0 RD D0 Q0 D1 Q1 D2 Q2 D3 Q3 D4 Q4 D5 Q5 D6 Q6 D7 Q7 LE VCC Q0 D0 Q1 D1 Q2 D2 Q3 D3 Q4 D4 Q5 D5 Q6 D6 Q7 D7 G + + 74HC573 74HC244 +5V 图8-4 简单I/O接口扩展 8.2 扩展简单并行输入/输出口
C语言程序清单: #include <reg52.h> void maino unsigned char data tmpl, tmp2=0 unsigned char xdata ptl ptI=Oxfeff; ∥给指针赋地址值0xfef while(l) ∥循环 i tmpl=ptl; ∥从74HC244输入数据 if(tmp1:tmp 2 /判断输入改变时, {“ptl=tmpl; ∥从74HC573输出数据 tmp=tmp1
C语言程序清单: #include <reg52.h> void main() { unsigned char data tmp1, tmp2=0; unsigned char xdata *pt1; pt1=0xfeff; //给指针赋地址值0xfeff while(1) //循环 { tmp1=*pt1; //从74HC244输入数据 if (tmp1!=tmp2) //判断输入改变时, { *pt1 =tmp1; //从74HC573输出数据 tmp2=tmp1; } } }
82扩展简单并行输入输出口 汇编语言程序清单 MOV 30H#00H ;设一初值 MOV DPTR#0 FEFFH;设端口地址 LOOP. MOVX AaDPTR ;从244读键盘新值 CNE A,30H,NEXT;与上次值比较 SMP LOOP 相等再读键盘值 NEXT MOV 30HA ;保存新键盘值 MOVX ODPTR,A ;从573输出键盘值 SJMP LOOP 继续读取键盘值
汇编语言程序清单: MOV 30H,#00H ;设一初值 MOV DPTR,#0FEFFH ;设端口地址 LOOP: MOVX A,@DPTR ;从244读键盘新值 CJNE A, 30H, NEXT ;与上次值比较 SJMP LOOP ;相等再读键盘值 NEXT: MOV 30H,A ;保存新键盘值 MOVX @DPTR,A ;从573输出键盘值 SJMP LOOP ;继续读取键盘值 8.2 扩展简单并行输入/输出口