精品文档
? 1.22 已知(A)=7AH,(R0)=30H,(30H)=A5H,PSW=80H。问执行(单独执行)
以下各指令的结果
XCH A,R0; A=30H, R0=7AH XCH A,30H; A=A5H XCH A,@R0; A=A5H
XCHD A,@R0; A=75H ;二者低4位互换
SWAP A; A =A7H; A高低4位互换
ADD A, R0; A = AAH, Cy=0, OV=1(a6 a7 =1) ADD A,30H; A= 1FH, Cy=1, OV=0 ADD A, A,#30H; A= AAH, Cy=0, OV=1;
ADDC A,30H; A= 20H, Cy=1, OV=0; 因为PSW的Cy=1 SUBB A,30H; A= D4H, Cy=1, OV=1; 因为PSW的Cy=1 SUBB A,#30H; A= 49H, Cy=0, OV=0; 因为PSW的Cy=1
? 1.24 已知(A)=83H,(R0)=17H,(17H)=34H。执行以下指令后A=? ANL A,#17H ; 逻辑与 (A)=03H ORL 17H,A ;逻辑或 (17H)=37H XRL A,@R0 ; 异或(A)=34H
CPL A ; 取反 (A)= CBH
? 1.25 将内部RAM20H、21H、22H,连续三个单元的内容以此放入 2FH、2DH、2EH单元
MOV R0, #20H MOV R1, #2FH LOOP : MOV A, @R0
MOV @R1, A INC R0 DEC R1
CJNE R0, #23H, LOOP SJMP $
? 1.34 外部数据RAM在2000H~2100H区域有一个数据块,将他们移动到3000H~3100H
区域
解一:
MOV DPTR, #2000H MOV P2, #30H MOV R1, #00H LOOP : MOVX A, @DPTR MOV X @R1, A INC DPTR INC R1
CJNE R1, #00H, LOOP INC P2
MOV X A, @DPTR MOVX @R1, A 解二:
MOV DPTR, #2000H
----------------------------------------------------
精品文档
MOV P2, #30H MOV R1, #00H LOOP : MOV X A, @DPTR MOV X @R1, A INC DPTR INC R1
CJNE R1, #00H, LOOP INC P2 MOV A, DPH
CJNE A,#21H,NEXT NEXT1: MOVX A, @DPTR
MOVX @R1, A SJMP $ NEXT: INC DPTR
SJMP NEXT1 解三:
MOV DPTR, #2000H MOV R5, #00H MOV A, #00H MOV R1,A LOOP : MOV A,R1
MOV X A, @A+DPTR MOV X @R0, A
MOV DPTR, #3000H MOV A, @R0 MOVX @A+DPTR, A INC R1 DJNZ R5, LOOP MOV DPTR, #2100H MOVX A, @DPTR MOV DPTR, #3100H MOVX @DPTR,A
? 1.35 外部数据RAM从2000H开始有100个数据块,将他们移动到2030开始的单元 解一:
MOV DPTR, #2000H MOV R4,#64H MOV P2, #10H LOOP1: MOVX A, @R1
MOV R1, #00H MOVX @DPTR, A MOV R4,#64H INC R1 LOOP : MOVX A, @DPTR INC DPTR
MOV X @R1, A DJNZ R4, 64H, LOOP1 INC DPTR INC R1
DJNZ R4, 64H, LOOP MOV DPTR, #2030H
----------------------------------------------------
精品文档
MOV P2, #10H MOV R1, #00H 解二:
MOV DPTR, #2000H MOV R3,#64H MOV P2, #10H DJNZ R3, LOOP NEXT: MOV R1, #00H SJMP $ MOV R4,#64H LOOP : MOVX A, @DPTR
MOVX @R1, A INC DPTR INC R1 NEXT1: DJNZ R4, LOOP
LOOP1: MOV DPTR, #1000H
MOV P2, #20H MOV R1, #30H
习题参考答案(P.79)
习题3. 8051主要的存储空间是什么?为什么两个RAM的空间不同?
答:8051单片机的存储空间分为数据RAM和代码ROM,其中数据RAM又分为片内RAM和片外RAM。
片内RAM的地址为8位,由单片机指令直接在单片机内部寻址访问,而片外RAM的地址为16位,只能由单片机的MOVX指令通过外部总线访问。
习题4. 编一段程序,把8位口新的输入值和前一次的输入值进行比较,然后产生一个8位数。这个数中的位为“1”的条件是:仅当新输入的位为“0”,而前一次输入的位为“1”。 答:设该8位口为P1,新产生的8位数为x: unsigned char x; x=P1; x&=~P1;
习题6. 按给定的存储类型和数据类型,写出下列变量的说明形式: up,down 整数,使用堆栈存储;
first,last 浮点数,使用外部数据存储器存储; cc,ch 字符,使用内部数据存储器存储。
答:堆栈只能存储内部RAM字节内容,必须在idata区:(复位后SP=07H,但是07H中存放堆栈地址,上电复位后典型寄存器的值?) int idata up,down;
float xdata first,last;
char idata cc,ch; 或char data cc,ch; 习题7.
判断下列关系表达式或逻辑表达式的运算结果(1或0) 1、10==9+1; è1 2、0&&0; è0 3、10&&8; è1
4、8||0; è1
----------------------------------------------------
精品文档
5、!(3+2); è0
6、设x=10,y=9;x>=8&&y<=x; è1 习题8.
设x=4,y=8,说明下列各题运算后,x,y和z的值分别是多少? 1、z=(x++)*(--y); è x=5,y=7,z=28 2、z=(++x)-(y--); è x=5,y=7,z=-3 3、z=(++x)*(--y); è x=5,y=7,z=35 4、z=(x++)+(y--); è x=5,y=7,z=12 习题9. 分析下列运算表达运算顺序。
1、c=a|| (b); è( b)是为0或1(逻辑值),若a=0则a|| (b), 结果赋给c
2、x+=y-z; è y-z,x+(y-z),结果赋给x
3、-b>>2; è -b,结果右移2位。注: -b不是取反也不能确定为负数;取反一般是变成2进制然后按位取反。如b=-3,即0FDH,则-b=3,而不是0FD按位取反 4、c=++a%b--;è a=a+1,a%b,b=b-1,%结果赋给c
5、!m&n; è !m,若结果为1再和n相与。X(不是&&) !m,再和n相与 6、a
习题6. 用选择分支编写程序,把输入的一个数字按下列对应关系显示。当输入Z时,程序结束。
#include
unsigned char k;
----------------------------------------------------
精品文档
do {
scanf(“%c”,&k); switch(k) {
case ‘1’: printf(“A”); break; case ‘2’: printf(“B”); break; case ‘3’: printf(“C”); break; case ‘4’: printf(“D”); break; default: printf(“?”); break; }
}while( k ! = ‘Z’ ); while( 1 ); }
习题7. 若在C中的switch操作漏掉break,会发生什么? 答:若在case语句中漏掉break,则程序执行case选择部分程序后不会按照要求退出switch语句,而是继续执行下一个case语句选择的内容。
3
习题8. 编写程序,输出x数值表,x为0—10。
main() {
unsigned char x; unsigned int y; for(x=0;x<11; x++) {
----------------------------------------------------