单片机基础 第三版 课后习题答案-1
第一章: 一、填空题
1( 1110 0EH 10011100 01100100
2( 4
3. 255 -51
4. 输入设备
5. 84
6. 630 * 8 * 1024
7. 位 字节 字 bit btype word
8. 1111 1111 00100100 11011011
9. 110 89 -115 -50
二、单选:
DBCAB BBCB
第二章: 一、填空
1( PC PC
2( 反向器 晶振 两只电容 短
3( 加电 手动 0000H 07H 第0 00H 07H
4( 6 2 1 12
5( DPTR DPH DPL
6( 64KB
单选题
DCCAC AD
第三章:
一、填空题:
1( 1031
2( 34H 1 1 1
3( P3=P1.0 and P1.1 and / P1.2
4( 1100H
5( 2
6( 30H 7AH
0A5H
0A5H
75H
0A7H
0AAH 0 1
IFH 1 1
0AAH 0 1
20H 1 0
0D5H 1 1
49H 0 0
二、单选题
CCBDCA
三、其它类型题
错 错 对
错 错 错
对 错 错
错 错 对
对 对 对
错 对 对
错 对 错
错 对
(三)其它类型题
3(编写程序将RAM20H,23H单元的高4位写1,低4位写0。 分析:就是把这四个单元写入F0H。用一个DJNZ的循环。
ORG 0000H
MOV R0,#1FH ;R0指向20H单元
MOV R5,#04H; 四个数
LOOP: INC R0
MOV @R0,#0F0H ; 写入
DJNZ R5,LOOP ; 循环4次
END
4(把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。
(设m=30H, 高位在30H,低数在31H)
ORG 0000H
MOV A,30H
ANL A,#0FH ;把它的高四位清零
SWAP A
MOV 30H ,A ;高低四位调一下,放回原处
MOV A,31H
ANL A,#0FH
ORL A,30H ;合并起来
MOV 30H,A
END
5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。
(设data=30H, sun =50H)
ORG 0000H
MOV R0,#2FH ; 指向前一个单元
MOV R5,#0AH ;循环10次
CLR A ;先加到A中
LOOP: INC R0
ADD A,@R0
DJNZ R5,LOOP
MOV 50H,A
END
6(假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。
ORG 0000H
MOV A,R0
CPL A ;按位取反
ADD A,#01H ;,1
MOV R1,A
END
第四章:
一、填空题
1. 25H 40H 03H
2(2.914ms
3.略
4((A) =((30H) (A) >(30H) (A) < (30H)
5. 30.696ms
二、编程题
1(把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送
完毕。试编程实现。
ORG 0030H
MOV R0,#inbuf
MOV R1,#outbuf
MOV R4,#10H
LOOP:MOV A,@R0 ; 从内部RAM取数
CJNE A,#0DH,LL ;是否为回车符CR
SJMP STOP ;是转停止传送
LL: MOVX @R1,A ;不是则传送到外部RAM
INC R0
INC R1
DJNZ R4, LOOP;沒传送完则循环
STOP: SJMP $
2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。
(3AH存放在运行程序时的最小的数)
ORG 0030H
MOV R0,#list
MOV A,@R0 ;取第一个正数
LOOP: INC R0 ;指向下一个正数
MOV 3AH,@R0
CJNE A,3AH,CHK ;前一个数与后一个数比较
CHK: JC LOOP1 ;前一个数小,则转
MOV A,@R0 ;前一个数大,取后一个数 LOOP1: XCH A,3AH
CJNE A,#0FFH,LOOP
XCH A,3AH ;取最小数
MOV 3BH,A
SJMP $
3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。
若X为正奇数,Z ,X,Y;
若X为正偶数,Z ,X?Y;
若X为负奇数,Z ,X?Y;
若X为负偶数,Z ,X?Y。
分析:负数:第7位为1,正数:第7位为0
奇数:第0位为1,偶数:第0位为0
ORG 0000H
MOV A,20H
CLR C
RL A
JC FS ;移到负数处处理
RR A
RR A ;第0位移到C 再判定一下是不是1
JC ZJS ;到正奇数处
MOV A,20H
ORL A,21H
MOV 22H,A
SJMP OK
ZJS: MOV A,20H
ADD A,21H
MOV 22H,A
SJMP OK
FS: MOV A,20H
CLR C
RR A
JC FJS ;第0位是1,移到正 奇数处理
MOV A,20H
XRL A,21H
MOV 22H,A
SJMP OK
FJS: MOV A,20H
ANL A,21H
MOV 22H,A
OK: END
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte
单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H
MOV R0,#byte
MOV DPTR,#buf
MOV R5,#08H
MOV A,@R0
LOOP: RLC A
MOV R7,A
JC LOOP1
MOV A,#30H
SJMP LOOP2
LOOP1: MOV A,#31H
LOOP2: MOVX @DPTR,A
MOV A,R7
INC DPTR
DJNZ R5,LOOP
225.编程实现运算式c = a+b 假定a、 b、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。
(内部RAM的DA、DB、DC单元设为20H 21H 22H)
ORG 0000H
MOV A,20H
PUSH ACC
AJMP SQR
POP ACC
MOV 22H,A
MOV A,21H
PUSH ACC
AJMP SQR
POP ACC
ADD A,22H
MOV 22H,A
END
6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如
果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。
ORG 0030H
MOV R0,#42H
MOV R1,#52H
MOV R7,41H ;字符串长度
LOOP: MOV A,@R0
MOV 30H,@R1
CJNE A,30H,LK
INC R0
INC R1
DJNZ R7,LOOP
MOV 40H ,#00H
SJMP DD
LK: MOV 40H,#0FFH
DD: SJMP DD
7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。
ORG 0030H
MOV DPTR,#table
MOV R6,#10
LOOP:MOVX A,@DPTR
SETB E7H; E7H就是累加器A的最高位(ACC.7), 也可 : SETB ACC.7
MOVX @DPTR,A
INC DPTR
DJNZ R6,LOOP
3(编写程序将RAM20H,23H单元的高4位写1,低4位写0。
分析:就是把这四个单元写入F0H。用一个DJNZ的循环。
ORG 0000H
MOV R0,#1FH ;R0指向20H单元
MOV R5,#04H; 四个数
LOOP: INC R0
MOV @R0,#0F0H ; 写入
DJNZ R5,LOOP ; 循环4次
END
4(把m和m+1单元存有两个BCD数,将它们合并到m单元中,编写程序完成。
(设m=30H, 高位在30H,低数在31H)
ORG 0000H
MOV A,30H
ANL A,#0FH ;把它的高四位清零
SWAP A
MOV 30H ,A ;高低四位调一下,放回原处
MOV A,31H
ANL A,#0FH
ORL A,30H ;合并起来
MOV 30H,A
END
5.将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元多,假定相加结果小于255。编写程序完成。
(设data=30H, sun =50H)
ORG 0000H
MOV R0,#2FH ; 指向前一个单元
MOV R5,#0AH ;循环10次
CLR A ;先加到A中
LOOP: INC R0
ADD A,@R0
DJNZ R5,LOOP
MOV 50H,A
END
6(假定8位二进制带符号数丰于R0中,要求编写一个求补程序,所得补码入入R1中。
ORG 0000H
MOV A,R0
CPL A ;按位取反
ADD A,#01H ;,1
MOV R1,A
END
第四章:
一、填空题
1. 25H 40H 03H
2(2.914ms
3.略
4((A) =((30H) (A) >(30H) (A) < (30H)
5. 32.87ms
编程题
1(把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送
完毕。试编程实现。
ORG 0030H
MOV R0,#inbuf
MOV R1,#outbuf
MOV R4,#10H
LOOP:MOV A,@R0 ; 从内部RAM取数
CJNE A,#0DH,LL ;是否为回车符CR
SJMP STOP ;是转停止传送
LL: MOVX @R1,A ;不是则传送到外部RAM
INC R0
INC R1
DJNZ R4,LL;沒传送完则循环
STOP: SJMP $
2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。编程实现在表中找出最小数。
(3AH存放在运行程序时的最小的数)
ORG 0030H
MOV R0,#list
MOV A,@R0 ;取第一个正数
LOOP: INC R0 ;指向下一个正数
MOV 3AH,@R0
CJNE A,3AH,CHK ;前一个数与后一个数比较
CHK: JC LOOP1 ;前一个数小,则转
MOV A,@R0 ;前一个数大,取后一个数 LOOP1: XCH A,3AH
CJNE A,#0FFH,LOOP
XCH A,3AH ;取最小数
MOV 3BH,A
SJMP $
3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。
若X为正奇数,Z ,X,Y;
若X为正偶数,Z ,X?Y;
若X为负奇数,Z ,X?Y;
若X为负偶数,Z ,X?Y。
分析:负数:第7位为1,正数:第7位为0
奇数:第0位为1,偶数:第0位为0
ORG 0000H
MOV A,20H
CLR C
RL A
JC FS ;移到负数处处理
RR A
RR A ;第0位移到C 再判定一下是不是1
JC ZJS ;到正奇数处
MOV A,20H
ORL A,21H
MOV 22H,A
SJMP OK
ZJS: MOV A,20H
ADD A,21H
MOV 22H,A
SJMP OK
FS: MOV A,20H
CLR C
RR A
JC FJS ;第0位是1,移到正 奇数处理
MOV A,20H
XRL A,21H
MOV 22H,A
SJMP OK
FJS: MOV A,20H
ANL A,21H
MOV 22H,A
OK: END
4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。该数存放在内部RAM中byte
单元中。变换后得到的8个ASCII码存放在外部RAM以buf始的存储单元中去。
ORG 0030H
MOV R0,#byte
MOV DPTR,#buf
MOV R5,#08H
MOV A,@R0
LOOP: RLC A
MOV R7,A
JC LOOP1
MOV A,#30H
SJMP LOOP2
LOOP1: MOV A,#31H
LOOP2: MOVX @DPTR,A
MOV A,R7
INC DPTR
DJNZ R5,LOOP
225.编程实现运算式c = a+b 假定a、 b、 c 3个数分别存放在内部RAM的DA、DB、DC单元中,别有平方运算子程序调用。
(内部RAM的DA、DB、DC单元设为20H 21H 22H)
ORG 0000H
MOV A,20H
PUSH ACC
AJMP SQR
POP ACC
MOV 22H,A
MOV A,21H
PUSH ACC
AJMP SQR
POP ACC
ADD A,22H
MOV 22H,A
END
6、比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如
果两个字符串相等,则置内部RAM 40H单元为00H;否则置40H单元为FF。
ORG 0030H
MOV R0,#42H
MOV R1,#52H
MOV R7,41H ;字符串长度
LOOP: MOV A,@R0
MOV 30H,@R1
CJNE A,30H,LK
INC R0
INC R1
DJNZ R7,LOOP
MOV 40H ,#00H
SJMP DD
LK: MOV 40H,#0FFH
DD: SJMP DD
7.外部RAM首址为table的数据表中,有10个字节的数据。编程将每个字节的最高位无条件地置“1”。
ORG 0030H
MOV DPTR,#table
MOV R6,#10
LOOP:MOVX A,@DPTR
SETB E7H; E7H就是累加器A的最高位(ACC.7), 也可 : SETB ACC.7
MOVX @DPTR,A
INC DPTR
DJNZ R6,LOOP
第五章
一、填空题
1( 各项任务
2( INT0 T0 INT1 T1 串口
3( PC PC ROM
4( 中断源 查询状态
5( 1000000 1000000/65536 = 15.26
6( 100 ms
7( 111 101
8( T1 2 0FFH 001BH
二、单选题:
DCAADCD
单片机基础 第五章 习题
课本5。.1设单片机的晶振频率为6MHZ,使用定时器1以方式0产生500us的等宽正方波连续脉冲,并由P1.0输出。
分析:使用P1.0输出脉冲,可由定时器产生一个250us的定时,到了时间,就执行CPL P1.0就可以了。所以问题转化为产生定时。 解:(1) 计算定时器的初值:
13 (2,X), T , T机定时
代入数据得:X , 8067
由于方式0的特点(高8位,低5位),计算出TH1,TL1
得TH1 , 0FCH TL1 , 03H
(2) 计算出TMOD的初始值:
TMOD ,00H
(3) 编程实现:
方法一:使用查询法。程序不断地查询TF1的值。如定时器溢出(TF1,1),则CPL P1.0
所以: MOV TMOD ,#00H
MOV TH1,#0FCH
MOV TL1,#03H
MOV IE, #00H ;不用中断的方法,关掉
SETB TR1 ;开启定时器
LOOP: JBC TF1,LOOP1
AJMP LOOP LOOP1: MOV TH1,#0FCH
MOV TL1,#03H
CPL P1.0
AJMP LOOP
方法二:使用中断的方法。需确定寄存器:TMOD , 00H
IE ,88H TCON =40H (或SETB TR1)
T1的中断向量,001BH
程序如下:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP T1,TIMER
MAIN:MOV TMOD,,00H
MOV TCON,,40H
MOV IE,#88H
MOV TCON ,#40H
MOV TH1,#0FCH
MOV TL1,#03H
Here :AJMP Here T1_TIMER: MOV TH1,#0FCH
MOV TL1,#03H
CPL P1.0
RETI
注意:定时器定时或计数,不会影响CPU的工作。
定时方式1:与方式0没有大的区别,只有定时器是16位的。所以
x定时,(2 –初值) T机
方式2:8位初值自动赋值的定时/计数器
解法一样:
(1) 计算T的初始值 (2) TMOD ,,
(2) 程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
方式三:
T0:
――TL0 8位,可作定时也可作计数,与方式0,一样使用。
――TH0:8位,只能作定时,借作TR1 TF1
T1:没法中断,只能产生不断的脉冲,,,全波特率
可用方式0,1,2。如要停止脉冲,要强制设方式3
第六章 一、填空题
1、 8 16 13 2
2、 高电平 低电平 高阻
3、 256 数据 4KB 程序 64KB 数据 64KB 程序
4、 16 P0 P2
5、 PSEN RD WR ALE CE ALE 6
6、 16KB 31FFH
7、 外存
8、 片选
9、 3 PSEN ALE
二、单选题
DADDC ADA
第七章
填空题
1( 数据 ALE RD WR
2( 无条件传送 查询 中断
3( 缓冲 锁存
4( 12 11
5( 高 口方式定义 C位置位/复位
6( 方式1输出 方式1输出 输出 输入
7( 10100111
单选题
DACDBB