单片机原理及应用 第三版 林立 张俊亮课后答案

答:

ANL A,#17H ;A=03H

ORL 17H,A ;(17H)=0011 0100 ∨ 0000 0011=0011 0111 XRL A,@R0 ;A= 0000 0011 ∨ 0011 0111 =0011 0100 CPL A ;A=1100 1011

7.已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。 答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来达到,如果要0.1s,即100ms,也就是100000us,所以需要机器周期数达到100000。要延时达到1S,可通过对延时为0.1秒的子程序调用10次来实现。

DELAY100MS: MOV R6,#200 ;1个机器周期 D1: MOV R7,#250 ;1个机器周期 D2: NOP ;1个机器周期

DJNZ R7,D2 ;2个机器周期,3*251=753

DJNZ R6,D1 ;2个机器周期,(1+753+2)*132=99792 RET ;2个机器周期,1+99792+2=99795,约100ms DELAY1S: MOV R7,#10 ;计数10次 1

LOOP: ACALL DELAY100MS ;延时100ms子程序 99795+2 DJNZ R7,LOOP ;未达到10次则继续 10*(2+99795+2) RET ;返回2+10*(2+99795+2)=997992

8.内部RAM从20H单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。

解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR,计数器用R7 MOV R7,#0 ;字节计数器赋初值

MOV R0,#20H ;设片内RAM地址指针初值

MOV DPTR,#7E01H ;设片外RAM地址指针初值 CONT: MOV A,@R0 ;取片内RAM中的一个字节 MOVX @DPTR,A ;存入片外RAM指针所指单元 INC R7 ;长度计数器加1

INC R0 ;片内RAM地址指针加1 INC DPTR ;片外RAM地址指针加1 CJNE A,#0DH,CONT ;未达到结束标志 MOV A,R7 ;取块计数长度值 MOVX @DPTR,A ;保存 SJMP $ ;暂停 END

9.内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。

解:R7计数,R6保存累加和高8位,R0用作地址指针 ORG 0000H LJMP MAIN ORG 100H SUM EQU 30H DATAA EQU 40H

MAIN: MOV R7,#10 ;字节计数器赋初值 MOV R0,#DATAA ;设片内RAM地址指针初值 CLR A ;累加器清0

MOV R6,A ;累加结果的高8位

CONT: ADD A,@R0 ;加RAM中的一个字节到ACC DA A

JNC NEXT ;若无进位则不用管高8位 INC R6 ;有进位,高8位加1

NEXT: INC R0 ;片内RAM地址指针加1 DJNZ R7,CONT ;未完继续 MOV SUM,A ;保存低8位 MOV SUM+1,R6 ;保存高8位 SJMP $ ;暂停 END

10.内部RAM从DATA1和DATA2单元开始处存放着两个等长的数据块,数据块的长度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。

解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7 LEN EQU 10 DATA1 EQU 30H DATA2 EQU 40H RESULT EQU 50H

MOV R7,#LEN ;字节计数器赋初值

MOV R0,#DATA1 ;设片内RAM地址指针初值 MOV R1,#DATA2 ;设片外RAM地址指针初值

CONT: MOV A,@R0 ;取片内RAM R0所指的的一个字节

MOV 7FH,@R1 ;将R1所指单元内容取到片内RAM地址7FH中 CJNE A,7FH,NOEQ ;比较,不相等则结束

INC R0 ;DATA1 RAM地址指针加1 INC R1 ;DATA2 RAM地址指针加1 DJNZ R7,CONT ;未完,继续 MOV A,#0FFH ;相等,准备写入FFH SJMP DOWN ;转写入结果处

NOEQ: MOV A,#0 ;不相等,准备写入00H DOWN: MOV RESULT,A ;保存比较结果标志 SJMP $ ;暂停 END

11.编制程序,将内部RAM中M1、M2、M3和M4单元中的无符号数xl、x2、x3和x4相加,并把和存入RO和R1(R0中为高8位)中。

解:

M1 EQU 30H M2 EQU 40H M3 EQU 45H M4 EQU 4FH

MOV A,M1 ;取第一个数 ADD A,M2 ;与第二个数相加

JNC NEXT1 ;如果无进位,则转移至第三个相加 MOV R0,#1 ;有进位,高8位置1 NEXT1: ADD A,M3 ;与第三个数相加

联系客服:779662525#qq.com(#替换为@)