CJNE A,#10,NET1 MOVX @DPTR,A
SJMP NET3 MOV DPTR,#2000H
NET2: MOV A,R1 MOVX @DPTR,A
ADD A,#10 SJMP NET3
NET1: JNC NET2 MOV DPTR,#2000H CLR C MOVX @DPTR,A MOV A,R1 NET3: SJMP $ SUBB A,#10 END MOV DPTR,#2000H
22.设有两个长度均为15的数组,分别存放在片外RAM以2000H和2100H开始的存储区中,试编程求其对应项之和,结果存放在以2200H为首地址的存储区中。
INC DPTR 解: ORG 0000H
INC R1 LJMP MAIN
DJNZ R2,LOOP ORG 0030h
MOV R1,#30H MAIN: MOV DPTR,#2000H
MOV DPTR,#2100H MOV A,#OFFH
MOV R2,#15 MOVX @DPTR,A
MOV R0,#40H MOV DPTR,#2100H
LOOP1: MOV A,#34H
MOVX A,@DPTR MOVX @DPTR,A
CLR C MOV DPTR,#2008H
ADDC A,@R1 MOV A,#33H
MOV @R0,A MOVX @DPTR,A
INC DPTR MOV DPTR,#2108H
INC R1 MOV A,#44H
INC R0 MOVX @DPTR,A
DJNZ R2,LOOP1 MOV DPTR,#200EH
MOV DPTR,#2200H MOV A,#0EEH
MOV R2,#15 MOVX @DPTR,A
MOV R0,#40H MOV DPTR,#210EH
LOOP2: MOV A,@R0 MOV A,#32H
MOVX @DPTR,A MOVX @DPTR,A
INC R0 MOV DPTR,#2000H
INC DPTR MOV R1,#30H
DJNZ R2,LOOP2 MOV R2,#15
SJMP $ LOOP: MOVX A,@DPTR
END MOV @R1,A
23.设有100个有符号数,连续存放在片外RAM以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数。
SJMP NET3 解: ORG 0000H
NET1: JB ACC.7 NET2 LJMP MAIN
ORG 0030H INC R4
SJMP NET3 MAIN: MOV R2,#100
NET2: INC R5 MOV R3,#00H
NET3: INC DPTR MOV R4,#00H
DJNZ R2,LOOP MOV R5,#00H
SJMP $ MOV DPTR,#2000H
END LOOP: MOVX A,@DPTR
CJNE A,#00H,NET1 INC R3
24.试编一查表程序,从外部RAM首地址为2000H、长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。
ORG 0030H 解: ORG 0000H
MAIN: MOV SP, #60H LJMP MAIN
11
MOV DPTR,#2000H INC DPTR
MOV R7,#9FH MOV A, R3 LP0: MOVX A,@DPTR MOVX @DPTR,A CJNE A, #41H, LP1 SJMP LP2 MOV R2,DPL LP1: INC DPTR MOV R3,DPH DJNZ R7, LP0
MOV DPTR,#20A0H LP2: RET
MOV A, R2
END
MOVX @DPTR,A
25.编程把片外RAM中以2040H为首地址的连续50个单元中的无符号数按降序排列,存放到以3000H为首地址的存储区中。 解: ORG 0000H CJNE A,21H,LOOP
LJMP MAIN LOOP: JNC LOOP1 ORG 0100H MOV A,20H MAIN: MOV DPTR,#2040H MOVX @DPTR,A MOV R2,#50 DEC DPTR CLR 7FH MOV A,21H DEC R2 MOVX @DPTR,A LS: MOVX A,@DPTR INC DPTR MOV 20H,A SETB 7FH INC DPTR LOOP1: DJNZ R2,LS MOVX A,@DPTR JB 7FH,MAIN MOV 21H,A SJMP $ MOV A,20H END
26.在片外RAM以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转换成BCD码,并以压缩BCD码(即一个单元存放两位BCD码)的形式存放在以3000H开始的单元中。 解: ORG 0000H MOV A,41H
LJMP MAIN XCHD A,@R1 ORG 0030H MOV @R1,A MAIN: MOV R2,#0AH INC R1 MOV R1,#30H INC DPTR MOV DPTR,#2000H DJNZ R2,TT TT: MOVX A,@DPTR MOV DPTR,#3000H CLR C MOV R1,#30H SUBB A,#30H MOV R2,#0AH SWAP A TT1: MOV A,@R1 MOV 41H,A MOVX @DPTR,A INC DPTR INC R1 MOVX A,@DPTR INC DPTR CLR C DJNZ R2,TT1 SUBB A,#30H SJMP $ MOV @R1,A END
27.编程实现将片外RAM中2400H~2450H单元中的数传送到2500H~2550H单元中。
MOVX @DPTR,A 解: ORG 0000H
MOV 30H,#24H LJMP MAIN
MOV 31H,#00H ORG 0030H
MOV 32H,#25H MAIN:
MOV 33H,#00H MOV DPTR,#2400H
MOV R2,#51H MOV A,#07H
LOOP: MOVX @DPTR,A
MOV DPH,30H MOV DPTR,@2450H
MOV DPL,31H MOV A,#06H
12
MOVX A,@DPTR INC 33H MOV DPH,32H DJNZ R2,LOOP MOV DPL,33H AJMP $ MOVX @DPTR,A END INC 31H
28.在片外RAM的2030H和2031H单元中各有一个小于16的数,编程求这两个数的平方和,结果存放在2040H单元。要求用调用子程序方法实现。 解:
ORG 0000H MOVX A,@DPTR LJMP MAIN LCALL SQR ORG 0030H ADD A,R1
MOV DPTR,#2040H MAIN: MOV DPTR,#2030H
MOVX @DPTR,A MOV A,#03H
AJMP $ MOVX @DPTR,A
SQR: INC A MOV DPTR,#2031H
MOVC A,@A+PC MOV A,#05H
RET MOVX @DPTR,A
TAB: DB 0,1,4,9,16,25 MOV DPTR,#2030H
DB 36,49,64,81,100 MOVX A,@DPTR
DB LCALL SQR
121,144,169,196,225 MOV R1,A
END MOV DPTR,#2031H
习题3
1. MCS-51的P0口作为输出端口时,每位能驱动( 8 )个SL型TTL负载。
2. MCS-51有( 4 )个并行I/O口,在作为通用I/O口使用时P0~P3是准双向口,所以由输出转输入时必须先写入 ( 1 )。
3. MCS-51有( 5 )个中断源,有( 2 )个中断优先级,优先级由软件填写特殊功能寄存器 ( IP )加以选择。
4. 外部中断1所对应的中断入口地址为( 0013H )H。
5. 当定时器T0工作在方式( 3 )时,要占定时器T1的TR1和TF1两个控制位。 6. 设(TMOD)=0A5H,则定时器T0的状态是( 方式1计数),定时器T1的状态是( 方式2 定时)。
7. 定时器T0溢出标志位是( TF0 ),定时器T1溢出标志位是( TF1 )。 8. 在数据通信中,有数据传送方式有( 单工 )、( 半双工 )、( 全双工 )、( 多工 )四种方式。
9. 设置串行口为10位UART,则其工作方式应选用为(工作方式1 )。
10. 单片机串行通信时,若要发送数据,就必须将要发送的数据送至( SBUF )寄存器,若要接收数据也要到该寄存器取数。 11. 异步串行数据通信的桢格式由( 起始位 )位,( 数据位 )位,( 奇偶较验 )位和 ( 停止位 )位组成。
12. 在中断服务程序中,至少应有一条( D )。
A:传送指令 B:转移指令 C:加法指法 D:中断返回指令
13. 8031单片机中断查询确认后,在下列各种运行情况中,能立即进行响应的是( D )。
A:当前正在执行高优先级中断处理 B:当前正在执行RETI指令
C:当前指令是DIV指令,且正处于取指令的机器周期 D:当前指令是MOV A, R3
14. 要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是( A )
13
A:98H B:84H C:42 D:22H
15. 使用定时器T1时,有几种工作模式( D )
A:1种 B:2种 C:3种 D:4种
16. 当定时器工作在方式 1,系统采用 6MHz 晶振时,若要定时器定时0.5ms ,则定时器的初始值为( A )。
A:FF06H B:F006H C:0006H D:06FFH
17. 定时器 T1的溢出标志为TF1,采用中断方式,当定时器溢出时,若CPU响应中断后,该标志( B )。
A:由软件清零 B:由硬件清零 C:随机状态 D:AB都可以
18. 在异步通信中每个字符由9位组成,串行口每分钟传25000个字符,则对应的波特率为( D )b/s。
A:2500 B:2750 C:3000 D:3750
19. 控制串行接口工作方式的寄存器是( C )。
A:TCON B:PCON C:SCON D:TMOD
20.什么是中断和中断系统?其主要功能是什么? 解:
所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程
采用中断技术可以提高CPU效率、解决速度矛盾、实现并行工作、分时操作、实时处理、故障处理、应付突发事件,可使多项任务共享一个资源(CPU)。
中断系统:能够实现中断功能的硬件电路和软件程序。
中断系统的功能:能够实现中断优先权排队、中断嵌套、自动响应中断和中断返回等功能。
21.什么是中断优先级?中断优先处理的原则是什么? 解:
中断优先级是CPU响应中断的先后顺序。中断优先处理的原则是:
(1)先响应优先级高的中断请求,再响应优先级低的中断请求。
(2)如果一个中断请求己被响应,同级的其他中断请求将被禁止。
(3)如果同级的多个中断请求同时出现,CPU则按单片机内部的自然优先级顺序响应
各中断请求。
单片机内部自然优先级顺序(由高到低)为:
外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断。 22.8051有哪些中断源?如何对各中断请求进行控制? 解:
(1)80C51有以下中断源:
① 外部中断0(INT0)请求,低电平有效。 ② 外部中断1(INT1)请求,低电平有效。 ③ T0:定时器/计数器0溢出中断请求。 ④ T1:定时器/计数器1溢出中断请求。 ⑤ TI/RI:串行接口中断请求。
(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现对各种中断的控制功能。 23.简述中断系统的初始化步骤。 解:
中断系统的初始化步骤如下: (1)开相应中断源的中断允许; (2)设定所用中断源的中断优先级;
(3)若为外部中断,则应规定中断触发方式(低电平或负边沿触发)。
14
24.简述MCS-51单片机的中断响应过程。 解:
单片机一旦响应中断请求, 就由硬件完成以下功能:
(1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置1;
(2) 执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈,保护断点,寻找中断源;
(3) 清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);
(4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。
(5)中断返回,程序返回断点处继续执行。
25.8051单片机怎样管理中断?怎样开放和禁止中断?怎样设置优先级? 解:
(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。
CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。
(2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。
(3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0则为低级。其中:PS为串行中断优先级,PTl(0)为定时中断1(0)优先级,PXl(0)外部中断1(0)优先级。
26.8051在什么条件下可响应中断? 解:
(1)有中断源发出中断请求。
(2)中断总允许控制位EA=l, CPU开放总中断。
(3)申请中断的中断源的中断允许位为1,即该中断没有被屏蔽。 (4)无同级或更高级中断正在服务。 (5)当前指令周期已经结束。
(6)若现行指令为RETI或访问IE或IP指令时,读指令以及紧接着的另一条指令已执行完毕。
满足以上条件,则CPU响应响应中断元的中断请求。 27.请写出INT1为低电平触发的中断系统初始化程序。 解:
INT1为低电平触发的中断系统初始化程序如下:
ORG 0000H LJMP MAIN ORG 0013H LJMP INTN1 ORG 0100H MAIN: MOV SP,#60H
SETB EA
SETB EX1 ; 开INT1中断 CLR PX1 ; 令INT1为低优先级 CLR IT1 ; 令INT1为电平触发 SJMP $ END
28.说明MCS-51单片机响应中断后,中断服务的入口地址。 解:
15