《单片机》编程题题库答案_第1页
《单片机》编程题题库答案_第2页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1页 共49页单片机原理及应用编程题题库参考答案六1、内部 RAM 30H 和 31H 单元中存放着 2 个 0-9 的 ASCII 码(高位字节在前),请将其转换为压缩 BCD 码(高位在前)并存入外部RAM 2300H 单元中。解: ORG 0HLJMP STARTORG 30HSTART: MOV A,30HANL A,#0FHSWAP AMOV R0,AMOV A,31HANL A,#0FHORL A,R0MOV DPTR, #2300HMOVX DPTR,AEND评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给

2、 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。2、将存放在内部 RAM 30H-35H 单元的压缩型 BCD 码转换成相应的 ASCII 码,依次存放到外部 RAM 2100H开始的单元区中。ORG 0HLJMP STARTORG 30HSTART: MOV R0,#30HMOV R2,#06HMOV DPTR,#2100HLOOP : MOV A,R0SWAP AANL A,#0FHORL A,#30HMOVX DPTR,AINC DPTRMOV A,R0ANL A,#0FHORL A,#30HMOVX DPTR,AINC DPTR第2页 共49页INC R0DJNZ R2,LOO

3、PSJMP $END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。3、内部 RAM 20H 和 30H 开始的单元分别存放着 16 个 16 进制数,请将对应单元的内容相加 (不考 虑溢出),并将和存入外部 RAM 2000H 开始的单元中。解:ORG 0LJMP STARTORG 30HSTART : MOV R0,#20HMOV R1,#30HMOV DPTR,#2000HMOV R2,#08H ;每个单元存放 2 个 16 进制数,故 16 个 16 进制数占

4、用 8 个单元LOOP : MOV A,R0ADD A,R1MOVX DPTR,AINC R0INC R1 INC DPTR DJNZ R2,LOOP SJMP $ END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。4 、请编写多字节无符号数减法程序。被减数存放在内部RAM 20H 开始的 8 个单元中,减数存放在内部 RAM 30H 开始的 8 个单元,请将差存放到外部 RAM 2000H 开始的 8 个单元中,借位存放到0V 标志中。注意:所有数据均按照从低字

5、节到高字节的顺序存放。0RG 0LJMP START0RG 30HSTART : M0V R0,#20HM0V R1,#30HM0V DPTR,#2000HMOV R2,#08H CLR CLOOP : MOV A,R0SUBB A,R1MOVX DPTR,AINC R0第3页 共49页INC R1INC DPTRDJNZ R2,LOOPMOV OV,CSJMP $END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。5、内部 RAM 40H 和 41H 单元中存放着

6、 2 个 0-9 的 ASCII 码(高位字节在前),请将其转换为压缩 BCD 码(高位在前)并存入外部RAM 2000H 单元中。解: ORG 0HLJMP STARTORG 30HSTART: MOV A,40HANL A,#0FHSWAP AMOV R0,AMOV A,41HANL A,#0FHORL A,R0MOV DPTR , #2000HMOVX DPTR,AEND 评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。6、 将存放在内部 RAM 20H-2FH

7、 单元的压缩型 BCD 码(高位在前)转换成相应的 ASCII 码,依次存放 到外部 RAM 1000H 开始的单元区中。ORG 0HLJMP STARTORG 30HSTART: MOV R0,#20HMOV R2,#10HMOV DPTR,#1000HLOOP : MOV A,R0SWAP AANL A,#0FHORL A,#30H (或 ADD A,#30H )MOVX DPTR,AINC DPTRMOV A,R0第4页 共49页ANL A,#0FHORL A,#30H (或 ADD A,#30H )MOVX DPTR,AINC DPTRINC R0DJNZ R2,LOOPSJMP $E

8、ND评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。7、内部 RAM 30H 和 38H 开始的单元分别存放着 8 个压缩 BCD 码,请将对应单元的内容相加(不考虑溢出),并将和存入外部 RAM 1000H 开始的单元中。解:ORG 0LJMP STARTORG 30HSTART : MOV R0,#30HMOV R1,#38HMOV DPTR,#1000HMOV R2,#08LOOP : MOV A,R0ADD A,R1DA AMOVX DPTR,AINC R0I

9、NC R1INC DPTRDJNZ R2,LOOPSJMP $ END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。&请编写多字节无符号数加法程序。被加数存放在内部RAM 20H 开始的 8 个单元中,加数存放在内部 RAM 30H 开始的 8 个单元,请将和存放到外部RAM 2000H 开始的 8 个单元中,进位存放到 F0 标志 中。注意:所有数据均按照从低字节到高字节的顺序存放。ORG 0LJMP STARTORG 30HSTART : MOV R0,

10、#20HMOV R1,#30HMOV DPTR,#2000H第5页 共49页MOV R2,#08HCLR CLOOP : MOV A,R0ADDC A,R1MOVX DPTR,AINC R0INC R1INC DPTRDJNZ R2,LOOPMOV F0,CSJMP $END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。9、两个 8 字节压缩 BCD 码分别存放在内部 RAM30H 和 40H 开始的连续单元中(低位字节在前),请 将二者求和(不考虑溢出情况) ,并

11、将和存入外部 RAM 1000H 开始的单元中。解: ORG 0MOV R0,#30HMOV R1,#40HMOV DPTR,#1000HMOV R2,#8CLRCLOOP: MOV A,R0ADDCA,R1DAAMOVX DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END10、将存放在内部 RAM 20H-2FH 单元的十六进制数转换成 ASCII 码,依次存放到外部 RAM 2000H 开始的单元中。解: MOV R0,#20HMOV R2,#16MOV DPTR,#2000HMOV R3, DPHMOV R4, DPLLOOP: MOV A,R0ANL

12、A,#0FHMOV DPTR,#TABMOVC A,A+DPTRMOV DPH,R3第6页 共49页MOV DPL,R4MOVX DPTR,AINC DPTRMOV R3,DPHMOV R4,DPLMOV A,R0SWAP AANL A,#0FHMOV DPTR,#TABMOVC A,A+DPTRMOV DPH,R3MOV DPL,R4MOVX DPTR,AINC DPTRMOV R3,DPHMOV R4,DPLINC R0DJNZ R2,LOOPSJMP $TAB: DB 0123456789ABCDEFEND11、 内部 RAM 30H 和外部 RAM 2200H 开始的单元分别存放着两个

13、 8 字节十六进制数 放在前) ,请将二者相加(不考虑溢出情况),并将和存入内部 RAM 40H 开始的单元中。解: ORG 0MOV R0,#30HMOVR1,#40HMOVDPTR,#2200HMOVR2,#8CLRCLOOP: MOVX A,DPTRADDC A,R0MOVR1,AINCR0INCR1INC DPTRDJNZ R2,LOOPSJMP $END12、请编写多字节无符号数减法程序。被减数存放在内部RAM30H 开始的 8 个单元中,减数存放在内部 RAM 38H 开始的 8 个单元,请将差存放到外部RAM 1000H 开始的 8 个单元中,借位存放到 F0 标志中。注意:所有

14、数据均按照从低字节到高字节的顺序存放。解: ORG 0LJMP START低位字节存第7页 共49页ORG 30HSTART: MOV R0,#30HMOVR1,#38HMOVDPTR,#1000HMOVR2,#8CLRCLOOP: MOV A,R0SUBBA,R1MOVX DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVC,F0SJMP$END13、请编写多字节无符号数减法程序。被减数存放在内部RAM 20H 开始的 16 个单元中,减数存放在内部 RAM 30H 开始的 16 个单元,请将差存放到外部 RAM 2000H 开始的 16 个单元中,借位存放到 O 标

15、志中。注意:所有数据均按照从低字节到高字节的顺序存放。解: ADDR1 EQU 20HADDR2EQU 30HLEN EQU 16ADDR3 EQU 2000HORG0LJMPSTARTORG30HSTART:MOV R0,#ADDR1MOVR1,#ADDR2MOVDPTR,#ADDR3MOVR2,#LENCLRCLOOP:MOV A,R0SUBB A,R1开始的单元中。(注: 每个单元均先转换高四位)解: LENEQU20HADDR1EQU20HADDR2EQU2300HORG 0LJMP STARTORG 30HSTART: MOV R0,#ADDR1MOV DPTR,#ADDR2MOV

16、R2,#LENLOOP: MOV A,R0ANL A,#0F0HSWAP AORL A,#30H (MOVX DPTR,AINC DPTRMOV A,R0ANL A,#0FHORL A,#30H (MOVX DPTR,AINC DPTRINC R0DJNZ R2,LOOPSJMP $END评分办法 :程序设计思路正确可得 5 分,指令完全写对可得 10 分。不要求使用伪指令。若仅写对少 量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。15、将存放在内部1100H 开始的单元区中。RAM 30H-35H 单元的十六进制数转换成相应的ASCII 码,依次存放到外部 RAM(

17、注:每个字节转换时先转换高四位)第8页 共49页INCR0INCR1INCDPTRDJNZR2,LOOPMOVOV,CSJMP$END14 、将存放在内部RAM 20H-3FH 单元的压缩BCD 码转换成 ASCII 码,依次存放到外部 RAM 2300H或 ADD A,#30H)或 ADD A,#30H)MOVX DPTR,A第9页 共49页解: ORG 0MOVMOVMOVR0,#30HDPTR,#1100HR2,#6LOOP: MOV A,R0;取需要转换的数ANLA,#0F0H;屏蔽低 4 位SWAP APUSHDPHPUSHDPL;保护目的地址MOVDPTR,#TABMOVC A,A

18、+DPTR ;查表得 ASCII 码POPDPLPOPDPH;恢复目的地址MOVX DPTR,A;存转换后的 ASCII 码INCDPTR;修改目的地址指针MOVA,R0;取需要转换的数ANLA,#0FH;屏蔽高 4 位PUSHDPHPUSHDPL;保护目的地址MOVDPTR,#TABMOVC A,A+DPTR ;查表得 ASCII 码POPDPLPOPDPH;恢复目的地址MOVX DPTR,AINCDPTR;修改目的地址指针INCR0;修改源地址指针DJNZR2,LOOP ;未转换完则继续SJMP$TAB: DB0123456789ABCDEFEND评分办法 :程序设计思路正确可得 5 分,

19、指令完全写对可得 10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。16、内部 RAM30H 开始的单元中存放着 16 个 0-9 的 ASCII 码(高位字节在前),请将其转换为压缩 BCD 码(高位在前)并存入外部RAM 1000H 开始的单元中。解: ORG 0 MOV R0,#30H MOV DPTR,#1000H第10页 共49页MOV R2,#8; 16个 ASCII 码转换为 8 个压缩 BCD 码LOOP: MOV A,R0ANL A,#0FH ;屏蔽高 4 位得到 BCD 码SWAP AMOV R1,AINC R0 ;指向下一个 AS

20、CII 码MOV A,R0ANL A,#0FH ;屏蔽高 4 位得到 BCD 码ORL A,R1 ;合成压缩 BCD 码MOVX DPTR,A ;存压缩 BCD 码INC DPTRINC R0DJNZ R2,LOOPSJMP $END17、设有两个长度为 16 字节的数组,分别存放在外部 RAM 0200H 和 0300H 为首址的存储区域中, 试编写程序求其对应项之和(不考虑溢出的情况),结果存放在以 0400H 为首址的外部 RAM 中。解: 参考程序清单如下:ORG0MOVR2,#16;数组长度为 16 个字节MOVR3,#02H;数组 1 的首地址高 8 位MOVR4,#03H;数组

21、2 的首地址高 8 位MOVR5,#04H;和数组的首地址高8 位MOVDPL,#0 ;数据指针低 8 位清零18、编程求内部 RAM 中 40H4FH 共 16 个单元中的内容的和(结果为2 字节),并将和放入 50H 和 51H 单元中(高 8 位在 50H)。MOVR1,A;存被加数MOVDPH,R4MOVXA,DPTR ;取加数ADDA,R1;求和MOVDPH,R5MOVXDPTR,A ;存和INCDPL;指向下一字节DJNZR2,LOOP ;未加完则循环END评分办法 :程序设计思路正确可得5 分,指令完全写对可得LOOP:MOV DPH,R3MOVX A,DPTR ;取被加数10

22、分。若仅写对少量指令,可酌情给1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。第11页 共49页解 : 参考程序清单如下:0RG 0LJMP0RGSTART30HSTART: M0VR0,#40H;数据区首地址送 R0M0VR2,#16J单元数送 R2M0VR3,#0;和的高 8 位清零CLRA;和的低 8 位清零L00P: CLRCADD A,R0;求和JNCNEXT ;没有进位则转移INCR3;和的高 8 位存储单元内容加 1NEXT: INC R0J指向下一个单元DJNZR2,L00PJ没加完则循环,和在 R3 和 A 中M0V51H,A;1存低 8 位结果M0V50H,R3J存高

23、 8 位结果SJMP$END19 、有一个长度为 16 字节的 ASCII 码字符串存放在外部 RAM 1000H 为首址的存储区域中,字符串 中的每一个字符均不相同, 试编写程序查找字符串中是否存在 ASCII 码“ 9”。如果在字符串中存在 ASCII 码“9”,则将其存储单元的地址存放到内部RAM 30H 和 31H 单元中(高 8 位地址在 30H 单元中),同时将 0V 标志位清零。否则,将 30H 和 31H 单元的内容清零,并将 0V 标志位置“ 1 ”。解: ORG 0M0VSP,#60HM0VDPTR,#1000HM0VR2,#16L00P: M0VX A,DPTRCJNEA

24、,#39H,EXITM0V30H,DPHM0V31H,DPLCLR0VSJMP$EXIT: INCDPTRDJNZR2,L00PM0V30H,#0M0V31H,#0SETB0VSJMP$END20、有两个 8 字节的 16 进制数 a 和 b,它们分别存放在内部 零则将F0 标志位置“ 1”,否则清零。RAM中30H37H和40H47H的单元中第12页 共49页解:设计思路:从 16 进制数的最低位字节(37H 和 47H)开始相应字节带借位相减,然后修改地 址指针在对次低位字节进行相减,一共循环8 次完成两个 8 字节 16 进制数的相减。最后将 Cy 标志的内容传送给 F0 标志位即可。O

25、RG0MOVR0,#37HMOVR1,#47HMOVR2,#8CLRCLOOP: MOV A,R0SUBBA,R1MOVR0,ADECR0DECR1DJNZR2,LOOPMOVF0,CSJMP$END21、若外部 RAM 的 3000H) =X,( 3001H)=Y,编程实现 Z=X*X+2Y,并将结果存到片内 RAM 的 40H 单元(设ZV256 。解 :X EQU 3000HEQU 3001H变量 X 的地址送 DPTR取变量 X变量 X 的值送给 B 寄存器求 X*X,根据题意知积为 1 字节(在 A 中) 的结果存入 R0 中指向变量 Y取变量 Y求 2*Y,根据题意知积为 1 字节

26、(在 A 中)求 X*X+2*Y和存入 40H 单元停机评分办法 :不要求写出程序的注释和使用伪指令。程序设计思路正确可得10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。22、设外部 RAM 2000H 单元为数据块的起始地址,数据块长度为 10,试编程求数据块中的最小值,高位字节在前) 。请编程求 a-b,并将差存入 30H 开始的内部RAM 单元中 (高位字节在前)若差小于EQU 40HORG 0MOV DPTR,#X ; MOVXA,DPTR ; MOV B,A;MUL AB;MOVR0,A; X*XINCDPTR;MOVX A,DPTR ;M

27、OVB,#2MULAB;ADDA,R0;MOVZ,A;SJMP $;END5 分,指令完全写对可得第13页 共49页存入内部 RAM 30H 单元。解:设计思路:将数据块的第 1 个数据放入结果单元,然后依次与剩余的 9 个数据进行比较。如果 新的数据比结果单元中的数据还小则将该数据存入结果单元,9 次比较完成则结果单元中的数据就是最小值。LOOP: CLR C23、若外部 RAMW(1000H) =X, ( 1001H) =Y,请编程实现存到片内 RAM 的 30H 和 31H 单元(31H 单元存放结果的高 8 位,30H 单元存放结果的低 8 位)。解:X EQU 1000HZHEQU

28、31HEQU30HORG0MOVZH,#0;结果单元清零MOVZL,#0MOVDPTR,#1000HMOVXA,DPTR ;取 X 的值MOVB,#2MULAB;计算 2XADDA,ZLMOVZL,A;存结果低 8 位MOVA,B;取乘积高 8 位ADDA,ZHORG0MOVDPTR,#2000HMOVXA,DPTR ;取数据块的第一MOV30H,A;存入结果单元MOVR2,#9;共比较 9 次INCDPTR;指向第 2 个数个数MOVXA,DPTRSUBBA,30HJNCLP ;没有借位则说明结果单元的数小,MOVX A,DPTRMOV30H,A;更换最小值INCDPTR;指向下一个数DJN

29、ZR2,LOOP ;没有比较完则继续循环SJMP$ ;停机ENDLP:不用更换最小值评分办法 :不要求写出程序的注释。程序设计思路正确可得 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣5 分,指令完全写对可得 10 分。若仅1-3 分。Z=2X+Y*Y+5 (设 Z65536),并将结果保第14页 共49页MOVZH,A;存结果高 8 位INCDPTR;指向 YMOVXA,DPTR ;取 Y第15页 共49页24 、设外部 RAM 1000H 单元为数据块的起始地址,数据块长度为60 字节,试编程求数据块中所有数据的和,解:并将其存入内部 RAM30H 和 31H 单兀(3

30、0H 单兀存放和的低 8 位,31H 单兀存放和的高 8 位)。取数据将数据加到结果单元的低 8 位 存结果低 8 位取结果高 8 位将低 8 位计算的进位加到高 8 位中 存高 8 位 修改地址指针,指向下一个数据 没有计算完则继续MOVB,AMULAB ;计算 Y*YADDA,ZL ;计算结果低8 位MOVZL,AMOVA,B ;取乘积的高8 位ADDCA,ZH ;计算结果高 8 位,注意必须带进位加MOVZH,AMOVA,ZLADDA,#5 ;计算结果加5MOVZL,AMOVZH,A ;存结果低 8 位ADDCA,#0 ;将低 8 位进位加到结果高 8 位,注意必须带进位加MOVZH,A

31、 ;存结果高 8 位END评分办法 :不要求写出程序的注释和使用伪指令。程序设计思路正确可得5 分,指令完全写对可得10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。ADDREQU100HH;数据块首地址LENEQU60 ;数据块长度ZHEQU31H;和的高 8 位地址ZLEQU30H;和的低 8 位地址数据块首地址送 DPTR 数据块长度送R7 结果单元清零ORG 0MOV DPTR,#ADDR ;MOV R7,#LEN ;MOV ZH,#0;MOV ZL,#0LOOP: MOVX A,DPTRADDA,ZL ;MOV ZL,A;MOV A,ZH;A

32、DDCA,#0;MOV ZH,A;INCDPTR;DJNZ R7,LOOP ;SJMP $END第16页 共49页评分办法 :不要求写出程序的注释和使用伪指令。程序设计思路正确可得10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。5 分,指令完全写对可得第17页 共49页25、若外部 RAM( 1000H) =X,内部 RAM( 30H) =Y,请编程实现 Z=X*X+3Y+18 (设 Z65536),并将结果保存到片内 RAM 的 40H 和 41H 单元(41H 单元存放结果的高 8 位,40H 单元存放结果的低 8 位)。解: X EQU 100

33、0HYEQU30HZHEQU 41HZLEQU40HORG0MOVZH,#0;结果单元清零MOVZL,#0MOVDPTR,#1000HMOVXA,DPTR ;取 X 的值MOVB,AMULAB;计算 X*XADDA,ZLMOVZL,A;存结果低 8 位MOVA,B;取乘积高 8 位ADDA,ZHMOVZH,A;存结果高 8 位MOVXA,Y;取 YMOVB,#3MULAB;计算 3*YADDA,ZL ;计算结果低 8 位MOVZL,AMOVA,B;取乘积的高 8 位ADDCA,ZH;计算结果高 8 位,注意必须带进位加MOVZH,AMOVA,ZLADDA,#18;计算结果加 18MOVZL,A

34、;存结果低 8 位MOVA,ZH;取结果高 8 位ADDCA,#0;将低 8 位进位加到结果高 8 位,注意必须带进位加MOVZH,A;存结果高 8 位END评分办法 :不要求写出程序的注释和使用伪指令。程序设计思路正确可得5 分,指令完全写对可得10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。26、若外部 RAM 的( 1000H) =X,请编程实现 Y=f+2X+1 (设 Y65536),并将结果保存到片内RAM第18页 共49页的 30H 和 31H 单元(31H 单元存放结果的高 8 位,30H 单元存放结果的低 8 位)。ORG 0第16页

35、 共49页解:ORG0MOV30H,#0;结果单元清零MOV31H,#0MOVDPTR,#1000HMOVA,DPTR;取 X 的值MOVB,AMULAB;求 X 的平方MOV30H,A;存低 8 位MOVA,BMOV31H,A;存高 8 位MOVXA,DPTR;取 X 的值MOVB,#2MOVAB;求 2XADDA,30H;求低 8 位和MOV30H,A;存和的低 8 位MOVA,B;取积的高 8 位ADDCA,31H;求高 8 位和MOV31H,A;存和的高 8 位MOVA,30HADDA,#1;加 1MOV30H,A;存和的低 8 位MOVA,31HADDCA,#0;和的高 8 位加上低

36、 8 位运算的进位MOV31H,A;存和的高 8 位SJMP$ ;停机END27、设外部 RAM 2000H 单元为数据块的起始地址,数据块长度为 100 字节。假设在数据块中存在唯一的一个 ASCII 字符“ A”试编程找到它,并将其在外部RAM 的存放地址存入内部 RAM30H 和 31H 单元中(30H 单元存放地址的高 8 位,31H 单元存放地址的低 8 位)。解:第20页 共49页MOVDPTR,#2000H ;数据块首地址送 DPTRMOVR2,#100;数据块长度送 R2LOOP :MOVX A,DPTR ;取数据CJNEA,#41H,NEXT ;数据不是“ A”则转移MOVA

37、,DPHMOV30H,A;存高 8 位地址MOVA,DPLMOV31H,A;存低 8 位地址SJMP$ ;停机NEXT: INCDPTR;修改地址指针DJNZR2,LOOP ;没有找到则继续SJMP$ ;停机28、若内部 RAMW(20H)=a,外部 RAM( 1300H) =b,请编程实现 y=a2+b2+5 (设 y65536),并将结果保存到片内 RAM 勺 30H 和 31H 单元(31H 单元存放结果的高 8 位,30H 单元存放结果的低 8 位)。 解:ORG0MOVA,20H;取 aMOVB,AMULAB;求a2MOV30H,A;存和的低 8 位MOVA,BMOV31H,A;存和

38、的高 8 位MOVDPTR,#1300HMOVXA,DPTR ;取 bMOVB,AMULAB;求b2ADDA,30H;求a2+b2MOV30H,AMOVA,BADDCA,31HMOV31H,AMOVA,30HADDA,#5;加 5MOV30H,AMOVA,31HADDCA,#0;加上低 8 位的进位MOV31H,ASJMP$ ;停机END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。第21页 共49页29 、若内部RAM( 30H)2=X,( 31H)=Y,请编程实

39、现 Z=X+5Y (设 Z65536),并将结果保存到片外RAM 的 1000H 和 1001H 单兀(1001H 单兀存放结果的高 8 位,1000H 单兀存放结果的低 8 位)。解 :ORG 0MOVDPTR,#1000H结果地址指针赋值MOVA,30H;取 XMOVB,AMULAB;求X2MOVXDPTR,A ;存 X2低 8 位INC DPTR;指向结果单兀高 8 位MOVA,BMOVXDPTR,A ;2存 X2高 8 位DECDPL ;指向结果单兀低 8 位MOVA,31H;取 YMOVB,#5MULAB;求 5YMOVR0,AMOVXA,DPTRADDA,R0;2求 X+5Y 的低

40、 8 位和MOVXDPTR,A ;存父+5丫的低 8 位和INC DPTR;指向结果单兀高 8 位MOVXA,DPTR ;取结果单兀高 8 位ADDCA,B;求乂+5丫的高 8 位和(注意加上低 8 位的进位)MOVXDPTR,A ;存乂+5丫的高 8 位和SJMP$ ;停机END评分办法 :不要求写出程序的注释。程序设计思路正确可得5 分,指令完全写对可得 10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。30 、设内部RAM 20H 单元为数据块的起始地址,数据块长度为32 字节。请将整个数据块求和(共32 字节的数据求和,设和小于65536),并

41、把和存入外部 RAM 1000H 和 1001H 的单兀中(和的高 8 位存入 1001H 单元)。解: ORG 0MOVR0,#20H;数据块首地址送 R0MOVR2,#32;数据块长度送 R2CLRA;累加器清零MOVDPTR,#1000H ;指向和的低 8 位MOVXDPTR,A ;和的低 8 位清零INCDPTR;指向和的高 8 位MOVXDPTR,A ;和的高 8 位清零DECDPL ;指向和的低 8 位LOOP: MOV A,R0;取数据第22页 共49页MOVR1,A;暂存在 R1第23页 共49页MOVX A,DPTR ;取和的低 8 位ADDA,R1;求和MOVX DPTR,

42、A ;存和的低 8 位INCDPTR;指向和的高 8 位MOVX A,DPTR ;取和的高 8 位ADDCA,#0;将和的低 8 位的进位加到高 8 位中MOVX DPTR,A ;存和的高 8 位DECDPL ;指向和的低 8 位INCR0;数据块指针加 1DJNZR2,LOOP ;没有加完则循环SJMP$ ;停机END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。31、若内部 RAMW(20H) =a, (21H) =b,请编程实现 y=a2+b2(设 y6553

43、6),并将结果保存到片外RAM 勺 2000H 和 2001H 单元(2001H 单元存放结果的高 8 位,2000H 单元存放结果的低 8 位)。解 :ORG 0MOVDPTR,#2000H ;结果单元低 8 位地址送 DPTRMOVA,20H;取 a 的值MOVB,AMULAB;求a2MOVXDPTR,A;2存 a2低 8 位MOVA,BINCDPTR;指向结果单元高 8 位MOVXDPTR,A;存结果高 8 位DECDPL ;指向结果单元低 8 位MOVA,21H;取 b 的值MOVB,AMULAB;求b2MOVR0,A;暂存 b2的低 8 位MOVXA,DPTR;取结果低 8 位ADD

44、A,R0;求低 8 位的和MOVXDPTR,A;存结果低 8 位INCDPTR;指向结果单元高 8 位MOVXA,DPTR;取结果高 8 位ADDCA,B;加上 b2的高 8 位和低 8 位求和的进位MOVXDPTR,A;存结果高 8 位SJMP$ ;停机END评分办法 :不要求写出程序的注释,也不要求使用子程序。程序设计思路正确可得5 分,指令完全写对可得 10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。第24页 共49页32、将内部 RAM 40H 为起始地址的 32 个连续单元中的十六进制数转换成ASCH码存入外部 RAM3000H 开始的存储

45、单元中。解: ORG 0MOVR0,#40H;源数据块首地址送 R0MOVR2,#32;数据块长度送 R2MOVDPTR,#3000H ;目的数据块首地址送 DPTRLOOP: MOV A,R0;取待转换数据ANLA,#0F0H;取高四位数据SWAP A;高低四位数据交换PUSH DPH;保护目标地址指针PUSH DPLMOVDPTR,#TAB ;数据指针指向表格首地址MOVCA,A+DPTR ;查表得到 ASCII 码POPDPL ;恢复目标地址指针POPDPHMOVX DPTR,A ;存转换结果INCDPTR;指向下一个存储单元MOVA,R0;取待转换数据ANLA,#0FH ;取低四位数据

46、PUSH DPH;保护目标地址指针PUSH DPLMOVDPTR,#TAB ;数据指针指向表格首地址MOVCA,A+DPTR ;查表得到 ASCII 码POPDPL ;恢复目标地址指针POPDPHMOVX DPTR,A ;存转换结果INCDPTR;指向下一个存储单元INCR0;指向下一个待转换数据DJNZ R2,LOOP ;没有转换完则继续SJMP$ ;停机TAB: DB0123456789ABCDEFEND评分办法 :不要求写出程序的注释。程序设计思路正确可得写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣5 分,指令完全写对可得1-3 分。10 分。若仅33、设内部 RAM

47、 20H 单元为数据块的起始地址,数据块长度为 找出数据块中的最小值,并将其存入40H 单元。解:10H,数据为 8 位无符号数,试编程ORG 0第25页 共49页第26页 共49页写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。34 、比较两个 ASCII 码字符串是否相等。字符串长度在内部别为 30H 40H。如果两个字符串相等,置CY=1,否则,置 CY=0解 : ORG 0MOVR0,#30H;第一个字符串首地址送 R0MOVR1,#40H;第一个字符串首地址送 R1MOVR2,2FH;取字符串长度LOOP: MOV A,R0;取第一个字符串的字符CLRC

48、SUBBA,R1;比较两个字符是否相等JNZSTOP;结果不为零说明两个字符串不相等INCR0;修改地址指针INCR1DJNZR2,LOOP ;没有比较完则继续SETBC;比较完,置两字符串相等标志SJMP$ ;停机STOP: CLR C;两字符串不相等,清进位标志SJMP$ ;停机END评分办法 :不要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅 写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。MOVR0,#20H;数据区首地址送 R0MOVR2,#10H;数据块长度送 R2MOV40H,#0FFH ;结果单元送入最大值LOO

49、P: MOV A,R0;取数据CLRC;清进位SUBB A,40H;利用减法判断该数据是否比最小值单元的数小?JNCNEXT ;如果没有借位说明待比较数据比最小值单元的值大则转移MOVA,R0;取最小值MOV40H,A;存最小值NEXT: INCR0;修改地址指针DJNZR2,LOOP ;没有比较完则继续比较。SJMP$ ;停机END评分办法 :不要求写出程序的注释。程序设计思路正确可得5 分,指令完全写对可得 10 分。若仅RAM 2FH 单元,两字符串的首地址分第27页 共49页35、将 MCS5 呐部 RAM 60H65H 单元存放的 12 个 16 进制数变为 ASCII 码,存放到

50、0100H 单元开 始的外部RAM 中。第28页 共49页解 :ADDR1 EQU 60HADDR2 EQU 0100HLEN EQU6ORG0MOVR0,#ADDR1 ;待转换数据首地址送 R0MOVDPTR,#ADDR2 ;转换后 ASCII 码存放首地址送 DPTRMOVR2,#LEN ;原数据长度送 R2LOOP: MOV A,R0 ;取待转换数据ANLA,#0FH ;取待转换数据低四位PUSHDPH;保护目的区地址指针PUSHDPLMOVDPTR,#TAB ;码表首地址送 DPTRMOVCA,A+DPTR ;查表POPDPL ;恢复目的区地址指针POPDPHMOVXDPTR,A ;存

51、转换好的 ASCII 码INCDPTR ;目的地址加 1MOV A,R0 ;取待转换数据SWAP A ;高低四位交换ANLA,#0FH ;取待转换高四位数据PUSHDPH;保护目的区地址指针PUSHDPLMOVDPTR,#TAB ;码表首地址送 DPTRMOVCA,A+DPTR ;查表POPDPL ;恢复目的区地址指针POPDPHMOVXDPTR,A ;存转换好的 ASCII 码INCDPTR ;目的地址加 1INCR0 ;原地址指针加 1DJNZR2,LOOP ;没有转换完则转移SJMP $ ;停机TAB: DB0123456789ABCDEFEND评分办法 :不要求使用伪指令,也不要求写出

52、程序的注释。程序设计中也可以先转换高四位。程序 设计思路正确可得 5 分,指令完全写对可得 10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量 指令写错,可酌情扣 1-3 分。36、将片外数据存储器的 2500H 单元与 2501H 单元中的数据作十进制加法运算,和送入2503H 和 2502H 单元中,即(2500H +(2501H ( 2503H (2502H。第29页 共49页解:ORG0MOVDPTR,#2500H ;指向被加数MOVXA,DPTR ;取被加数MOVR0,A ;存被加数INCDPTR;指向加数MOVXA,DPTR ;取加数ADDA,R0 ;求和DAA ;十进制

53、调整INCDPTR;指向和的低 8 位MOVXDPTR,A ;存和的低 8 位INCDPTR;指向和的高 8 位ADDCA,#0 ;计算和的高 8 位MOVXDPTR,A ;存和的高 8 位SJMP$ ;停机END评分办法:要求写出程序的注释。程序设计思路正确可得 5 分,指令完全写对可得 10 分。若仅写对少量指令,可酌情给 1-3 分;若仅有少量指令写错,可酌情扣 1-3 分。37、设单片机的晶体震荡频率为 12MHz 利用定时器 TO 编程由 P1.2 输出周期为 10ms 的方波。(要求: T0 工作在方式 1 下,采用中断方式工作)解:周期为 10ms 则半周期为 5ms 因此 T0

54、 的定时初值为 65536 5000/1= 60536= 0EC78HORG 0LJMP STARTORG 000BHLJMP TSORG 30HSTART : MOV TMOD,#01HMOV TH0,#0ECHMOV TL0,#78HSETB ET0SETB TR0SETB EACLR P1.2SJMP $TS : CLR TR0MOV TH0,#0ECHMOV TL0,#78HSETB TR0CPL P1.2RETI第30页 共49页END评分办法:不要求写出程序的注释。 T0 的方式控制字写对和定时初值计算正确可各得 1 分;程序设计思路正确可得 4 分,指令完全写对可得满分( 10

55、分)。若少量指令写错可酌 情扣 1-2分;若仅写出少量指令可酌情给 1-2 分。38、已知 8051 单片机应用系统的晶体振荡频率为 12MHz 请利用定时器 T0 实现在 P1.0引脚上输出周期为 100mS 的方波。(要求:采用中断方式,T0 工作在方式 1 下)解: 输出方波周期为100mS故半周期为50mS因此T0的定时初值是65536-50000/1 =15536=3CB0HORG 0HLJMP STARTORG 000BHLJMP TSORG 30HSTART : MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB ET0SETB TR0SETB

56、EACLR P1.0SJMP $TS : CLR TR0MOV TH0,#3CHMOV TL0,#0B0HSETB TR0CPL P1.0RETIEND评分办法:不要求写出程序的注释。T0 的方式控制字写对和定时初值计算正确可各得1 分;程序设计思路正确可得 4 分,指令完全写对可得满分( 10 分)。若少量指令写错可酌 情扣 1-2 分;若仅写出少量指令可酌情给 1-2 分。39、 设 8031 单片机应用系统的晶振频率为 12MHz 请利用 T0 在 P1.0 和 P1.1 弓 I 脚上 输出频率为 20Hz、互补(两个波形互为反相)的方波。要求:采用中断方式, T0 工作在方 式 1。解

57、:输出频率为 20Hz,则周期为 1/20 = 50mS 半周期为 50/2 = 25mST0 的定时初值为:65536-25000/1 = 40536= 9E58HORG 0HLJMP STARTORG 000BH第31页 共49页LJMP TSORG 30HSTART:MOV TMOD,#01H;T0 设定为定时器,工作方式 1MOV TH0,#9EHMOV TL0,#58HSETB ET0SETB EASETB TR0CLRP1.0SETB P1.1SJMP$TS : CLR TR0MOV TH0,#9EHMOV TL0,#58HSETB TR0CPL P1.0CPL P1.1RETIE

58、ND评分办法:不要求写出程序的注释。 T0 的方式控制字写对和定时初值计算正确可各得1 分;程序设计思路正确可得 4 分,指令完全写对可得满分( 10 分)。若少量指令写错可酌 情扣 1-2 分;若仅写出少量指令可酌情给 1-2 分。40、8031 单片机应用系统的晶体振荡器频率为12MHz 请利用定时器 T0 编程实现在P1.7 引脚输出频率为 20Hz 的方波。要求:采用中断方式,T0 工作在方式 1 下。20Hz 方波的周期是 1/20 = 50mS 则其半周期为 50/2 = 25mST0 的定时初值为: 65536-25000*12/12 = 40536= 9E58HORG 0HLJ

59、MP STARTORG 000BHLJMP TSORG 30HSETB TR0SJMP $TS: CLR TR0MOV TH0,#9EHMOV TL0,#58HSTART : MOV TMOD,#01HMOV TH0,#9EHMOV TL0,#58HSETB ET0SETB EA;T0 设定为定时器,工作方式 1第32页 共49页SETB TR0RETIEND评分办法:不要求写出程序的注释。 T0 的方式控制字写对和定时初值计算正确可各得1 分;程序设计思路正确可得 4 分,指令完全写对可得满分( 10 分)。若少量指令写错可酌 情扣 1-2 分;若仅写出少量指令可酌情给 1-2 分。41、

60、设单片机的晶体振荡频率为12MHz利用定时器TO编程由P1.0和P1.1输出周期 为10ms互补(互为反相)的方波。(要求:T0 工作在方式 1 下,采用中断方式工作)解:周期为 10ms 则半周期为 5ms,因此 T0 的定时初值为 65536 5000*12/12= 60536=0EC78HORG 0LJMP STARTORG 000BHLJMP TSORG 30HSTART : MOV TMOD,#01HMOV TH0,#0ECHMOV TL0,#78HSETB ET0SETB TR0SETB EACLR P1.0SETB P1.1SJMP $TS: CLR TR0MOV TH0,#0ECHMO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论