六、设计题
1.某单片机控制系统有8个发光二极管。试画出C51与外设的连接图并编程使它们由右向左轮流点亮。
答: 图 (5分)  构思 (3分) MOV   A,#80H  (1分)
UP:MOV   P1,A    (1分) RR    A        (2分) SJMP   UP      (1分)
2.某控制系统有2个开关K1和K2,1个数码管,当K1按下时数码管加1,K2按下时数码管减1。试画出8051与外设的连接图并编程实现上述要求。 答:图 (5分)  构思 (3分) 程序(4分) ORG  0000H LJMP  MAIN ORG  0003H LJMP  AINT0 ORG  0013H LJMP BINT1
MAIN: MOV  IE,#83H SETB  IT0 SETB  IT1
MOV  R0,#00H MOV  DPTR,#TAB UP: MOV  A,R0
MOVC  A,@A+DPTR MOV   P1,A SJMP   UP
AINT0: INC  R0
CJNE  R0,#10,AINT01 MOV  R0,#0 AINT01: RETI BINT1: DEC  R0
CJNE  R0,#0FFH,BINT11 MOV  R0,#9 BINT11: RETI
1.已知在累加器A中存放一个BCD数(0~9),请编程实现一个查平方表的子程序。 1.SQR:1NC  A
MOVC  A,@A+PC       RET
TAB:DB  0,1,4,9,16       DB  25,36,49,,81
2.请使用位操作指令实现下列逻辑操作:BIT=(10H∨P1.0)∧(11H∨CY)      2.ORL  C,11H
MOV  12H,C       MOV  C,P1.0       ORL  C,/10H       ANL  C,12H       MOV  BIT,C       RET
3.已知变量X存于VAR单元,函数值Y存于FUNC单元,按下式编程求Y值。
1x00x01x0Y=
3.      MOV  A,VAR
CJNE  A,#0,COMP
SJMP  RES              ;x=0,Y=0       COMP:JNC  POSI           ;x>0,Y=1       MOV  A,#0FFH     ;x<0,Y=-1       SJMP  RES
POSI:MOV  A,#01H       RES:MOV  FUNC,A       RET
4.已知在R2中存放一个压缩的BCD码,请将它拆成二个BCD字节,结果存于SUM开始的单元中(低位在前)。    4.  MOV  R0,#SUM       MOV  A,R2       ANL  A,#OFH
MOV  @R0,A    ;存低字节BCD       MOV  A,R2       ANL  A,#0F0H       SWAP  A       1NC  R0
MOV  @R0,A    ;存高字节BCD       RET
5.将存于外部RAM 8000H开始的50H数据传送0010H的区域,请编程实现。 5.    MOV  DPTR,#8000H       MOV  R0,#10H       MOV  R2,#50H
LOOP:MOVX  A,@DPTR    ;取数       MOVX  @R0,A    ;存数       1NC  DPTR       1NC  R0
DJNZ  R2,LOOP       RET
1.已知如图,8155的PA口用于输出,PB口用于输入,PC口用于输出,请:
(1)写出8155的各I/O口的口地址和存储器的地址范围。1.(1)   (2)编写出8155初始化程序。B155命令字格式:  (2)初始化程序:
MOV  DPTR,#0100H           MOV  A,#0DH           MOVX  @DPTR,A
2.已知如图并给出下列程序,请在读图并理解程序后回答下列问题:   (1)程序功能为_巡回采集8个通道的数据 __。
(2)ADC0809的口地址为___ADC0809口地址为7FF0H~7FF7H(或7FF8~7FFFH)__。   (3)EOC的作用是_EOC为A/D转换结束信号,用来引起中断或查询,以便读取A/D的转换结果_。
(4)程序运行结果存于__外部RAM的A0H~A7H。_。   ADC:MOV  DPTR,#7FFOH   MOV  R0,#0A0H   MOV  R2,#8   MOV  A,#0
LOOP:MOVX @DPTR,A   JB  P3.3,$
MOVX  A,@DPTR   MOVX  @R0,A   1NC  DPTR   1NC  R0
DJNZ  R2,LOOP   AJMP  ADC
说明MCS—51单片机的下列各条指令中源操作数的寻址方式(可直接在每条指令后面书写)      1.ANL  A,20H    直接寻址      2.ADDC  A,  #20H    立即寻址      3.JZ  rel    相对寻址      4.CLR  C    位寻址
5.RRA  寄存器寻址
六、使用简单指令序列完成以下操作(12分)
1.请将片外RAM20H—25H单元清零          MoV  R0,#20H          MOV  R7,#06H          CLR  A
LOOP:MOVX  @R0,A          INC  R0
DJNZ  R7,LOOP
2.请将ROM3000H单元内容送R7      MOV  DPTR,  #3000H      CLR  A
MOVC  A,@A+DPTR
MOV  R7,A
1有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H。要求将该字符串中每一个字符加偶校验位。(以调用子程序的方法来实现。)
源程序如下:
ORG MOV MOV
1000H R0,#40H R7,#10 A, ① @R0
NEXT: MOV
ACALL SEPA MOV INC
@R0,A R0
DJNZ SJMP
② R7 ,NEXT $ A,#00H
SEPA: ADD
③ JNB PSW.0,SRET ORL
A,  ④ #80H
SRET: ⑤ RET
2.从内部RAM30H单元开始,有10个单字节数据。试编一个程序,把其中的正数、负数分别送40H和50H开始的内部RAM单元。(10分)
答:
MOV MOV MOV MOV
R0,#30H R1,#40H A,#50H R7,#10 20H,@R0 20H.7,FSHU @ R1,20H R1 NEXT A,R1 @R1,A A,R1 A
R7,LOOP $
LOOP: MOV
JB
ZSHU: MOV
INC  SJMP
FSHU: XCH
MOV XCH INC
NEXT: DJNZ
SJMP
七:将内部RAM20H为首的16个单元的8位无符号数排序写出程序,并作适当注释
SORT: MOV  R0, #20H          MOV  R7,#07H
CLR  TR0        ;交换标志位复位
LOOP: MOV  A,@R0           MOV  2BH,  A           INC   R0
MOV  2AH, @R0  CLR   C
SUBB  A,   @R0;比较前后两个数
JC   NEXT       ;            MOV  @R0,  2BH
DEC  R0
MOV  @R0,  2AH
INC   R0
SETB   TR0     ;置交换标志位有效  NEXT: DJNZ  R7,   LOOP
JB   TR0,   SORT;若交换标志位有效,继续进行  HERE:  SJMP    $
八、读图题(20分)
阅读下列硬件图,补齐连接线(5分),并回答问题(各5分):
(1、  ALE、PSEN、WR、RD的功能
ALE作地址锁存的选通信号,以实现低八位地址的锁存,PSEN信号作扩展程序存储器的读选通信号
WR、RD作为扩展数据存储器和I/O端口的读写选通信号。  (2、  图中各芯片的功能
74LS373:地址锁存器,用来锁存P0口发送的地址低8位     27 :容量为8KB的程序存储器(EPROM)用来存储程序     62 :容量为8KB的数据存储器(RAM)用来存储数据
8031:不含程序存储器的8位单片机芯片,是不带I/O设备的微型计算机。 (3、27、62的地址范围(P2.5取”0”)
1.数据块传送,将RAM从30H开始的连续32个单元的内容传递给片内RAM从60H开始的连续32个单元。           ORG 1000H
MOV  R7,#20H
MOV  R0, #30H MOV  R1,#60H
LOOP:MOV  A,@R0      MOV  R1,A      INC  R0
INC  R1
DJNZ  R7, LOOP      SJMP $      END
2. 将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。
ORG 1000H
MOV  R7,#04H MOV  R0,30H CLR A
MOV  41H,A
LOOP: ADD A,@R0             JNC  NEXT
INC  41H
NEXT:INC  R0
DJNZ  R7,LOOP    MOV 40H,A    SJMP $    END
3. RAM中40H单元内存有一个十六进制数,把这个数转换为BCD码的十进制数,BCD
码的十位和个位放在累加器A中,百位放在R2中。 ORG  2200H MOV A,40H MOV B,#H DIV AB
MOV R2,A MOV A,#0AH XCH  A,B DIV  AB SWAP  A ORL  A,B SJMP $    END
4. 编程序将片内40H-46H单元内容的高4位清零,保持低4位不变。         ORG 1000H         MOV R7,#07H
MOV  R0,#40H
LOOP:MOV  A,@R0       ANL  A,#0FH       MOV  @R0,A       INC  R0
DJNZ R7,LOOP       SJMP $
END