1、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
2、 AD 第三章一、填空题: 1 1031 2 34H 1 1 1 3 略 4 1100H 5 2 6 30H 71H 0A5H 0A5H 75H 0A7H 0AAH 0 1 IFH 1 1 0AAH 0 1 20H 1 0 20D5H 1 1 49H 0 0 二、单选题 CCBDCA 三、其它类型题 错 错 对 错 错 错 对 错 错 错 错 对 对 对 对 错 对 对错 对 错 错 对 (三)其它类型题 3编写程序将 RAM20H23H 单元的高 4 位写 1,低 4 位写 0。 分析:就是把这四个单元写入 F0H。用一个 DJNZ 的循环。 ORG 0000H MOV R0,#1FH ;R
3、0 指向 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
4、单元开始的 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 3DJNZ 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 第四章一、填
5、空题 1. 25H 40H 03H 22.914ms 3.略 4 (A ) =(30H) (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 ;是转停止传
6、送 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 ;取第一个正数 8LOOP: INC R0 ;指向下一个正数 MOV 3AH,R0 CJNE A,3AH,CHK ;前一个数与后一个数比较 CHK: JC LOOP1 ;前一个数小,则转 MOV A,R0 ;前一个数
7、大,取后一个数 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 XY; 若 X 为负偶数,Z XY。 分析:负数:第 7 位为 1,正数:第 7 位为 0 奇数:第 0 位为 1,偶数:第 0 位为 0 ORG 0000H MOV A,20H CLR C RL A JC FS ;移到负数处处理 RR A R
8、R 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 9MOV 22H,A OK: END 4、把一个 8 位二进制数的各位用 ASCII 码表示之(亦即为“0”的位用 30H 表示,
9、为“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 5.编程实现运算式 c = a2 +b2 假定 a、 b、 c 3 个数分别
10、存放在内部 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;否则置
11、 40H 单元为 FF。 ORG 0030H MOV R0,#42H MOV R1,#52H MOV R7,41H ;字符串长度 LOOP: MOV A,R0 10MOV 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 S
12、ETB 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 1018 T1 2 0FFH 001BH 二、单选题: DCAADCD 单片机基础 第五章 习题 课本 5。.1 设单片机的晶振频率为 6MHZ,使用定时器 1 以方式 0 产生 500us 的等宽正方波连续脉冲,并由 P1.0 输出。 分析:使用 P1.0 输出脉冲,可由定时器产生一个 250us 的定时,到了时间,就执行 CPL P1.0 就可以了。所以问题转化为产生定时。 解:(1) 计算定时器的初值: (2 13X ) T 机 T 定时代入数据得:X 8067 由于方式 0 的特点(高 8 位,低 5 位) ,计算出 TH1,TL1 得 TH1 0FCH TL1 03H