SUBB A, @R0 JZ L1 INC R0 MOV A, B
DJNZ R7, AGAIN AJMP EXIT L1: MOV 51H, #-1 EXIT: SJMP $ END
9. 编写程序,将片内RAM 40H~6FH单元中的无符号数按照从小到大的次序排列,结果仍然
放在原存储空间。
答: N EQU 30H TAB EQU 40H ORG 0000H SORT: MOV R4, #N-1 LOOP1: MOV A, R4 MOV R3, A MOV R0, #TAB LOOP2: MOV A, @R0 MOV B, A INC R0 CLR C
SUBB A, @R0 JC UNEXCH MOV A, B XCH A, @R0 DEC R0
MOV @R0, A UNEXCH: DJNZ R3, LOOP2 DJNZ R4, LOOP1 SJMP $ END
10.试编写程序,统计片内RAM的20H~5FH单元中出现55H的次数,并将统计结果送60H
单元。
答: TAB EQU 20H ORG 0000H START: MOV 60H, #0 MOV R0, #TAB LOOP2: MOV A, #55H CLR C
SUBB A, @R0 JNZ NEXT INC 60H NEXT: INC R0
16
CJNE R0, #60H, LOOP2 SJMP $ END
11.编写程序,将片内RAM 30H~7FH单元的内容全部清零。 答: TAB EQU 30H ORG 0000H START: MOV A, #0 MOV R0, #TAB LOOP: MOV @R0, A INC R0
CJNE R0, #80H, LOOP SJMP $ END
12.编写程序,将片外数据存储区中3000H~30FFH单元全部清零。 答: ORG 0000H START: MOV A, #0 MOV R7, #0
MOV DPTR, #3000H LOOP: MOVX @DPTR, A INC DPTR DJNZ R7, LOOP SJMP $ END
13.从内部RAM DATA1单元开始,存放有20H个数据,试编写程序,将这20H个数据逐一移
到片外RAM DATA2单元开始的存储空间。 答: DATA1 EQU 30H
DATA2 EQU 1000H
ORG 0000H
START: MOV R0, #DATA1 MOV DPTR, #DATA2 MOV R7, #20H LOOP: MOV A, @R0 MOVX @DPTR, A INC R0 INC DPTR
DJNZ R7, LOOP SJMP $ END
14. 将外部RAM 8000H开始的20个字节数据传送到外部RAM 8100H开始的地址单元中去。 答: DATA1 EQU 8000H
DATA2 EQU 00H
ORG 0000H
START: MOV DPTR, #DATA1
17
MOV R0, #DATA2 MOV R7, #20 LOOP: MOVX A, @DPTR MOV P2, #81H MOVX @R0, A INC R0 INC DPTR
DJNZ R7, LOOP SJMP $ END
15. 编程统计累加器A中“1”的个数。
答:以下程序将A中“1”的个数放在30H单元。
DAT EQU 37H
ORG 0000H START: PUSH ACC MOV A, #DAT MOV 30H, #0 NEXT: JZ EXIT CLR C RLC A JNC L1 INC 30H L1: AJMP NEXT POP ACC EXIT: SJMP $ END
16. 从内部RAM 30H单元开始,存放有50个数据。试编写程序,将其中的正数、负数分别
送外部RAM 5000H和5500H开始的单元,并分别记下正数和负数的个数送内部RAM 70H和71H单元。
答: BUF EQU 30H
N EQU 50
ORG 0000H START: MOV R0, #BUF MOV R7, #N MOV 70H, #0 MOV 71H, #0 MOV DPTR, #5000H MOV R1, #00H NEXT: MOV A, @R0
JNB ACC.7, POSIT INC 71H
MOV P2, #55H MOVX @R1, A INC R1
18
AJMP L1 POSIT: INC 70H
MOVX @DPTR, A INC DPTR L1: INC R0
DJNZ R7, NEXT SJMP $ END
17. 利用调子程序的方法,进行两个无符号数相加。请编主程序及子程序。 答: ORG 0000H
START: MOV R6, #56H ;主程序 MOV R7, #7FH ACALL ADD_SUB SJMP $
ADD_SUB: MOV A, R6 ;子程序 ADD A, R7 RET END
18. 计算下面子程序执行的时间(晶振频率为12MHz)。
DL: MOV R3, #15 ;1个机器周期 DL1: MOV R4, #255 ;1个机器周期 DL2: MOV P1, R3 ;2个机器周期
DJNZ R4, DL2 ;2个机器周期 DJNZ R3, DL1 ;2个机器周期 RET ;2个机器周期
答:1个机器周期=1us
延时时间t=1+15×(1+255×(2+2)+2)+2=15348us
19. 编写程序,将30H~34H单元中压缩的BCD码数(每个字节存放两个BCD码数)转换为
ASCII码数,并将结果存放在片内RAM 60H~69H单元。 答: ORG 0000H START: MOV R0, #30H MOV R1, #60H MOV R7, #2 AGAIN: MOV A, @R0 ANL A, #0F0H SWAP A
ADD A, #30H MOV @R1, A MOV A, @R0 ANL A, #0FH ADD A, #30H INC R1 MOV @R1, A INC R0 INC R1
19
DJNZ R7, AGAIN SJMP $ END
20.将内部RAM 30H单元的内容转换成三位BCD码(百位、十位、个位),并将结果存入外
部RAM 1000H开始的单元。 答: ORG 0000H START: MOV A, 30H
MOV DPTR, #1000H MOV B, #100 DIV AB
MOVX @DPTR, A INC DPTR MOV A, B MOV B, #10 DIV AB
MOVX @DPTR, A MOV A, B INC DPTR
MOVX @DPTR, A SJMP $ END
21. 请使用位操作指令,编程实现: 。 (其中 20H、2FH、2AH都是位地址) 答: ORG 0000H MOV C, 20H ANL C, 2FH CPL C
ORL C, 2AH MOV P1.0, C SJMP $ END
习题六
1. MCS-51的外部中断输入引脚为 /INT0 和 /INT1 。
2. MCS-51中断系统有 5 个中断源, 2 级中断优先级。 3. MCS-51外部中断的触发方式有 电平触发 和 边沿触发 。 4. 对于 中断允许(IE) 寄存器的相应位写入“1”,便可开放MCS-51的中断。
5. 控制MCS-51中断优先级的寄存器为 IP ,可编程设定 两 级中断优先级。 6. MCS-51中断源的总开关为 EA ,在 IE 寄存器中的第 7 位。
7. MCS-51复位后,内部的查询电路自动设定 外部中断0 为最高优先级; 串行口中断 为最低优先级。 8. 什么是中断? 答:“中断”是指由于外部或内部事件而改变原来CPU正在执行指令顺序的一种工作机制。 9. 为什么要引入中断机制? 答:中断机制常用于计算机与外部数据的传送,以解决高速运行的CPU与低速外设之间的矛盾。较好地实现CPU与外部设备的同步工作,进行实时处理。
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库《单片机原理与接口技术》课后答案陈蕾(4)在线全文阅读。
相关推荐: