的公共端D1为1,其余的数码管的公共端为0,同时在I/O(1)上发送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样4个数码管轮流显示相应的信息,一次循环完毕后,下一次循环又这样轮流显示,从计算机的角度看是一个一个地显示,但由于人的视觉暂留效应,只要循环的周期足够快,则看起来所有的数码管就都是一起显示的了,这就是动态显示的原理。
13. 使用2764(8KB?8)芯片通过部分译码法扩展24KB程序存储器,画出硬件连接图,指明各芯片的地址空间范围。
答:使用2764(8K?8)芯片通过部分译码法扩展24KB程序存储器,须要3块。采用线译码,P2.5与第一片2764的CE相连,P2.6与第二片2764的CE相连,P2.7与第三片2764的CE相连,硬件连接如下:
P2.7 P2.6 P2.5 P2.4~P2.0 5 ALE 8 8031 G 74LS 373 OE 8 5 5 5 8 8 A0~A7 CE CE A0~A7 CE A0~A7 A8~A12 A8~A12 A8~A12 2764(1) D0~D7 OE 2764(2) OE D0~D7 8 2764(3) OE D0~D7 8 P0 EA PSEN 8 8
地址空间如下: 第一片:
1100 0000 0000 0000~1101 1111 1111 1111;即C000H~DFFFH; 第二片:
1010 0000 0000 0000~1011 1111 1111 1111;即A000H~BFFFH; 第三片:
0110 0000 0000 0000~0111 1111 1111 1111;即6000H~7FFFH;
14. 使用6264(8KB?8)芯片通过全译码法扩展24KB数据存储器,画出硬件连接图,指明各芯片的地址空间范围。
答:使用6264(8K?8)芯片通过全译码法扩展24KB程序存储器,须要3块。采用138译码器译码,硬件连接如下:
Vcc 74LS138 G1 G G2G2Y3 Y2 C Y1 B A Y0 G 74LS 8 8031 373 OE P2.7 P2.6 P2.5 P2.4~P2.0 5 ALE 8 5 5 5 8 8 A0~A7 CE CE A0~A7 CE A0~A7 A8~A12 A8~A12 A8~A12 6264(1) D0~D7 OE 6264(2) OE D0~D7 8 6264(3) OE D0~D7 8 P0 8 EA PSEN 8 地址空间如下: 第一片:
0000 0000 0000 0000~0001 1111 1111 1111;即0000H~1FFFH; 第二片:
0010 0000 0000 0000~0011 1111 1111 1111;即2000H~3FFFH; 第三片:
0100 0000 0000 0000~0101 1111 1111 1111;即3000H~5FFFH;
15. 试用一片74LS373扩展一个并行输入口,画出硬件连接图,指出相应的控制命令。
答:硬件电路图如下:74LS373的输入端为扩展的输入口,输出端接8051的数据总路线P0口,控制端接高电平,输出允许由片外数据存储器读信号RD和
P2.0控制。当片外数据存储器读信号RD和P2.0同为低平时从74LS373中读入输入的数据。
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 + RD P2.0 Q0 Q1 74LS Q2 Q3 373 Q4 Q5 Q6 Q7 OE D0 D1 D2 D3 D4 D5 D6 D7 G +5V 8051 输入数据的命令如下: MOV DPTR,#0FE00H MOVX A,@DPTR
16. 用8255A扩展并行I/O,实现把8个开关的状态通过8个二极管显示出来,画出硬件连接图,用汇编语言和C语言分别编写相应的程序。 答:硬件电路图如下:8051与8255的连接略,设8255的A,B,C和控制控口的地址为7F00H,7F01H,7F02H,7F03H。8255的A口接8个开关,B口接8个发光二极管。
+5V K0 PA0 PA1 PA2 PA3 PA4 系统总线 PA5 PA6 PA7 8255A PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 8051 L0 K7 L7 +5V
程序如下: 汇编程序
ORG 0000H LJMP MAIN ORG 0100H
MAIN:MOV DPTR,#7F03H
MOV A,#90H MOVX @DPTR,A
LOOP:MOV DPTR,#7F00H
MOVX A,@DPTR MOV DPTR,#7F01H MOVX @DPTR,A SJMP LOOP SJMP $ END
C语言程序: #include
unsigned char i; XBYTE[0x7f03]=0x90; while(1) {
i=XBYTE[0x7f00]; XBYTE[0x7f01]=i;
} } } 17.
用汇编语言编写出定时扫描方式下矩阵键盘的处理程序。
该程序放于定时器的中断服务程序中。定时器每10ms中断一次,执行一次中断服务程序。F1和F2标志位用片内RAM的50H和51H单元。 ACALL KS1 JNZ LK1 MOV 50H,#0 ;无键按下,F1的F0标志清0结束 MOV 51H,#0 SJMP OUT
LK1: CJNE 50H,#1,OUT1 ;有键按下检查F1标志是否为1,不为1置1结束。
CJNE 51H,#01,OUT ;再检查F2标志是否为1,为1说明已处理按键则结束。
LK2: MOV R2,#0FEH ;扫描查询键码 MOV R4,#00H LK4: MOV DPTR,#7F00H MOV A,R2 MOVX @DPTR,A INC DPTR INC DPTR
MOVX A,@DPTR JB ACC.0,LONE MOV A,#00H AJMP LKP LONE: JB ACC.1,LTWO MOV A,#08H AJMP LKP LTWO:JB ACC.2,LTHR MOV A,#10H AJMP LKP LTHR: JB ACC.3,NEXT MOV A,#18H LKP: ADD A,R4 ;求键码放累加大器A, MOV 51H,#1 ;F2标志置1,结束 SJMP OUT
NEXT: INC R4 MOV A,R2 JNB ACC.7,KEND RL A MOV R2,A