




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第1页共27页《单片机原理及应用》编程题题库参考答案六、编程(每题10分)1、内部RAM30H和31H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2300H单元中。解:ORG0HLJMPSTARTORG30HSTARTMOVA,30HANLA,#0FHSWAPAMOVR0,AMOVA,31HANLA,#0FHORLA,R0MOVDPTR ,#2300HMOVX@DPTR,AEND评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。2、将存放在内部RAM30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM2100H开始的单元区中。ORG0HLJMPSTARTORG30HSTART:MOVR0,#30HMOVR2,#06HMOVDPTR,#2100HLOOP:MOVA,@R0SWAPAANLA,#0FHORLA,#30HMOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30HMOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。3、内部RAM20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM2000H开始的单元中。解: ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2000HMOVR2,#08H ; 每个单元存放2个16进制数,故16个16进制数占用8个单元LOOP:MOVA,@R0ADDA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。
4、请编写多字节无符号数减法程序。被减数存放在内部 RAM20H开始的8个单元中,减数存放在内部RAM30H开始的8个单元,请将差存放到外部RAM2000H开始的8个单元中,借位存放到0V标志中。注意:所有数据均按照从低字节到高字节的顺序存放。ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2000HMOVR2,#08HCLRCLOOP:MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCROINCR1INCDPTRDJNZR2,LOOPMOVOV,CSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。5、内部RAM40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部 RAM2000H单元中。解:ORG0HLJMPSTARTORG30HSTARTMOVA,40HANLA,#0FHSWAPAMOVR0,AMOVA,41HANLA,#0FHORLA,R0MOVDPTR,#2000HMOVX@DPTR,AEND评分办法:不要求写出程序的注释。程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-35分,指令完全写对可得10分。若仅写6、将存放在内部RAM20H-2FH单元的压缩型BCD码(高位在前)转换成相应的ASCII码,依次存放到外部RAM1000H开始的单元区中。ORG0HLJMPSTARTORG30HSTART:MOVR0,#20HMOVR2,#10HMOVDPTR,#1000HLOOP:MOVA,@R0SWAPAANLA,#0FHORLA,#30H (或ADDA,#30H)MOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30H (或ADDA,#30H)MOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣 1-3分。7、内部RAM30H和38H开始的单元分别存放着8个压缩BCD码,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM1000H开始的单元中。解: ORG0LJMPSTARTORG30HSTART:MOVR0,#30HMOVDPTR,#1000HMOVR2,#08LOOP:MOVA,@R0ADDA,@R1DAAMOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。&请编写多字节无符号数加法程序。被加数存放在内部 RAM20H开始的8个单元中,加数存放在内部RAM30H开始的8个单元,请将和存放到外部RAM2000H开始的8个单元中,进位存放到F0标志中。注意:所有数据均按照从低字节到高字节的顺序存放。ORG0LJMPSTARTORG30HSTART:MOVR0,#20HMOVR1,#30HMOVDPTR,#2000HMOVR2,#08HCLRCLOOP:MOVA,@R0ADDCA,@R1MOVX@DPTR,AINCROINCR1INCDPTRDJNZR2,LOOPMOVF0,CSJMP$END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写TOC\o"1-5"\h\z对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。9、两个8字节压缩BCD码分别存放在内部RAM30H和40H开始的连续单元中(低位字节在前) ,请将二者求和(不考虑溢出情况),并将和存入外部RAM1000H开始的单元中。解:ORG0MOVR0,#30HMOVR1,#40HMOVDPTR,#1000HMOVR2,#8CLRCLOOP:MOVA,@R0ADDCA,@R1DAAMOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$ENDTOC\o"1-5"\h\z评分办法:程序设计思路正确可得5分;对于仅写出部分指令的学生可酌情给1-4分;程序编制正确可得满分,若存在少量错误,可酌情扣 1-3分。10、将存放在内部RAM20H-2FH单元的十六进制数转换成 ASCII码,依次存放到外部RAM2000H开始的单元中。解:MOVR0,#20HMOVR2,#16MOVDPTR,#2000HMOVR3,DPHMOVR4,DPLLOOP:MOVA,@R0ANLA,#0FHMOVDPTR,#TABMOVCA,@A+DPTRMOVDPH,R3MOVDPL,R4MOVX@DPTR,AINCDPTRMOVR3,DPHMOVR4,DPLMOVA,@R0SWAPAANLA,#0FHMOVDPTR,#TABMOVCA,@A+DPTRMOVDPH,R3MOVDPL,R4MOVX@DPTR,AINCDPTRMOVR3,DPHMOVR4,DPLINCRODJNZR2,LOOPSJMP$TAB:DB '0123456789ABCDEFEND评分办法:程序设计思路正确可得 5分;对于仅写出部分指令的学生可酌情给 1-4分;程序编制正确可得满分,若存在少量错误,可酌情扣 1-3分。11、内部RAM30H和外部RAM2200H开始的单元分别存放着两个 8字节十六进制数(低位字节存放在前),请将二者相加(不考虑溢出情况) ,并将和存入内部RAM40H开始的单元中。解:ORG0MOVR0,#30HMOVR1,#40HMOVDPTR,#2200HMOVR2,#8CLRCLOOP:MOVXA,@DPTRADDCA,@R0MOV@R1,AINCR0INCR1INCDPTRDJNZR2,LOOPSJMP$评分办法:程序设计思路正确可得5分;对于仅写出部分指令的学生可酌情给 1-4分;程序编制正确可得满分,若存在少量错误,可酌情扣 1-3分。12、请编写多字节无符号数减法程序。被减数存放在内部 RAM30H开始的8个单元中,减数存放在内部RAM38H开始的8个单元,请将差存放到外部 RAM1000H开始的8个单元中,借位存放到F0标志中。注意:所有数据均按照从低字节到高字节的顺序存放。解:ORG0LJMPSTARTORG30HSTART:MOVR0,#30HMOVR1,#38HMOVDPTR,#1000HMOVR2,#8CLRCLOOP:MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCR0INCR1INCDPTRDJNZR2,LOOPMOVC,F0SJMP$评分办法:程序设计思路正确可得5分;对于仅写出部分指令的学生可酌情给 1-4分;程序编制正确可得满分,若存在少量错误,可酌情扣 1-3分。13、请编写多字节无符号数减法程序。被减数存放在内部 RAM20H开始的16个单元中,减数存放在内部RAM30H开始的16个单元,请将差存放到外部 RAM2000H开始的16个单元中,借位存放到OV标志中。注意:所有数据均按照从低字节到高字节的顺序存放。解: ADDR1EQU20HADDR2EQU30HLENEQU16ADDR3EQU2000HORG0LJMPSTARTORG30HSTART: MOVR0,#ADDR1MOVR1,#ADDR2MOVDPTR,#ADDR3MOVR2,#LENCLRC
LOOP: MOVA,@R0SUBBA,@R1MOVX@DPTR,AINCROINCR1INCDPTRDJNZR2,LOOPMOVOV,CSJMP$END评分办法:程序设计思路正确可得5分,指令完全写对可得10分。不要求使用伪指令。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。14、将存放在内部RAM20H-3FH单元的压缩BCD码转换成ASCII码,依次存放到外部RAM2300H开始的单元中。(注:每个单元均先转换高四位)解:LENEQU20HADDR1EQU20HADDR2EQU2300HORG0LJMPSTARTORG30HSTART:MOVR0,#ADDR1MOVDPTR,#ADDR2MOVR2,#LENLOOP:MOVA,@R0ANLA,#0F0HSWAPAORLA,#30H( 或ADDA,#30H)MOVX@DPTR,AINCDPTRMOVA,@R0ANLA,#0FHORLA,#30H( 或ADDA,#30H)MOVX@DPTR,AINCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:程序设计思路正确可得 5分,指令完全写对可得10分。不要求使用伪指令。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。15、将存放在内部RAM30H-35H单元的十六进制数转换成相应的 ASCII码,依次存放到外部1100H开始的单元区中。(注:每个字节转换时先转换高四位)RAM解:ORG0RAMMOVMOVMOVR0,#30HDPTR,#1100HR2,#6LOOP:MOVA,@R0 ;取需要转换的数ANLA,#0F0H ;屏敝低4位SWAPAPUSHDPHPUSHDPL ;保护目的地址MOVDPTR,#TABMOVCA,@A+DPTR;查表得ASCII码POPDPLPOPDPH ;恢复目的地址MOVX@DPTR,A ;存转换后的ASCII码INCDPTR ;修改目的地址指针MOVA,@R0 ;取需要转换的数ANLA,#0FH ;屏蔽高4位PUSHDPHPUSHDPL ;保护目的地址MOVDPTR,#TABMOVCA,@A+DPTR;查表得ASCII码POPDPLPOPDPH ;恢复目的地址MOVX@DPTR,AINCDPTR ;修改目的地址指针INCR0 ;修改源地址指针DJNZR2,LOOP ;未转换完则继续SJMP$TABDB'0123456789ABCDEFEND评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。16、内部RAM30H开始的单兀中存放着16个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(咼位在前)并存入外部RAM1000H开始的单元中。解: ORG0MOVR0,#30HMOVDPTR,#1000HMOVR2,#8 ;16个ASCII码转换为8个压缩BCD码LOOP:MOVA,@R0ANLA,#0FH;屏蔽咼4位得到BCD码SWAPAMOVR1,AINCRO ;指向下一个ASCII码MOVA,@R0ANLA,#0FH;屏蔽咼4位得到BCD码ORLA,R1;合成压缩BCD码MOVX@DPTR,A;存压缩BCD码INCDPTRINCR0DJNZR2,LOOPSJMP$END评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。17、设有两个长度为16字节的一维数组(数组的每个兀素为1个字节),分别存放在外部RAM0200H和0300H为首址的存储区域中,试编与程序求其对应项之和(不考虑溢出的情况),结果存放在以0400H为首址的外部RAM中。解: 参考程序清单如下:ORG0MOVR2,#16 ;数组长度为16个字节MOVR3,#02H ;数组1的首地址高8位MOVR4,#03H ;数组2的首地址高8位MOVR5,#04H ;和数组的首地址高8位MOVDPL,#0;数据指针低8位清零LOOP: MOVDPH,R3第6页MOVXA,@DPTR;取被加数MOVR1,A ;存被加数MOVDPH,R4MOVXA,@DPTR;取加数ADDA,R1 ;求和MOVDPH,R5MOVX@DPTR,A;存和INCDPL ;指向下一字节DJNZR2,LOOP;未加完则循环END评分办法::程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。18、编程求内部RAM中40HH4FH共16个单元中的内容的和(结果为2字节),并将和放入50H和5伯单元中(高8位在50H)。解:参考程序清单如下:ORG0LJMPORGSTART30HSTART:MOVR0,#40H ;数据区首地址送R0MOVR2,#165单元数送R2MOVR3,#0 ;和的高8位清零CLRA ;和的低8位清零LOOP:CLRCADDA,@R0 ;求和JNCNEXT ;没有进位则转移INCR3 ;和的高8位存储单兀内容加1NEXT:INCR05指向下一个单兀DJNZR2,LOOP5没加完则循环,和在 R3和A中MOV51H,A :1存低8位结果MOV50H,R35存咼8位结果SJMP$END评分办法:程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。19、有一个长度为16字节的ASCII码字符串存放在外部RAM1000H为首址的存储区域中,字符串中的每一个字符均不相同,试编写程序查找字符串中是否存在 ASCII码“9”。如果在字符串中存在ASCII共27页ORG0MOVORG0MOVR0,#37HMOVR1,#47HMOVR2,#8CLRCLOOP:MOVA,@R0SUBBA,@R1MOV@R0,ADECR0DECR1值。ORG0MOVDPTR,#2000HMOVXA,@DPTR;取数据块的第一个数MOV30H,A ;存入结果单元22、设外部RAM2000H单元为数据块的起始地址,数据块长度为 10,试编程求数据块中的最小值,存入内部RAM30H单元。解:设计思路:将数据块的第1个数据放入结果单元,然后依次与剩余的 9个数据进行比较。如果新的数据比结果单元中的数据还小则将该数据存入结果单元, 9次比较完成则结果单元中的数据就是最小码“9”,则将其存储单元的地址存放到内部 RAM30H和31H单元中(高8位地址在30H单元中),同时将0V标志位清零。否则,将30H和31H单元的内容清零,并将0V标志位置“1”。解:ORG0MOVSP,#60HMOVDPTR,#1000HMOVR2,#16LOOP:MOVXA,@DPTRCJNEA,#39H,EXITMOV30H,DPHMOV31H,DPLCLROVSJMP$EXIT:INCDPTRDJNZR2,LOOPMOV30H,#0MOV31H,#0SETBOVSJMP$END评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。20、有两个8字节的16进制数a和b,它们分别存放在内部RAM中30H〜37H和40H〜47H的单元中(高位字节在前)。请编程求a-b,并将差存入30H开始的内部RAM单元中(高位字节在前)。若差小于零则将F0标志位置“1”,否则清零。解:设计思路:从16进制数的最低位字节(37H和47H)开始相应字节带借位相减,然后修改地址指针在对次低位字节进行相减, 一共循环8次完成两个8字节16进制数的相减。最后将Cy标志的内容传送给F0标志位即可。DJNZR2,L00PMOVF0,CSJMP$END评分办法:程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。21、若外部RAM的(3000H)=X,(3001H)=Y,编程实现Z=X*X+2Y,并将结果存到片内RAM的40H单元(设Zv256。解: X EQUl3000HY EQU3001HZ EQU40HORG0MOVDPTR,#X ;变量X的地址送DPTRMOVXA,@DPTR ;取变量XMOVB,A ;变量X的值送给B寄存器MULAB ;求X*X,根据题意知积为1字节(在A中)MOVR0,A ;X*X的结果存入R0中INC【DPTR ;指向变量YMOVXA,@DPTR ;取变量YMOVB,#2MULAB ;求2*Y,根据题意知积为1字节(在A中)ADDA,R0 ;求X*X+2*YMOV乙A ;和存入40H单元SJMP$;停机END评分办法:不要求写出程序的注释和使用伪指令。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣 1-3分。MOVR2,#9 ;共比较9次INCDPTR ;指向第2个数LOOP:CLRCMOVXA,@DPTRSUBBA,30HJNCLP ;没有借位则说明结果单兀的数小,不用更换最小值MOVXA,@DPTRMOV30H,A ;更换最小值LP: INCDPTR ;指向下一个数DJNZR2,LOOP;没有比较完则继续循环SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。23、若外部RAM的1000H)=X,(1001H)=Y,请编程实现Z=2X+Y*Y+5(设Z<65536),并将结果保存到片内RAM的30H和31H单兀(31H单兀存放结果的高8位,30H单兀存放结果的低8位)。解: XEQU1000HZHEQU31HZLEQU30HORG0MOVZH,#0 ;结果单元清零MOVZL,#0MOVDPTR,#1000HMOVXA,@DPTR;取X的值MOVB,#2MULAB ;计算2XADDA,ZLMOVZL,A ;存结果低8位MOVA,B ;取乘积咼8位ADDA,ZHMOVZH,A ;存结果高8位INCDPTR ;指向YMOVXA,@DPTR;取YMOVB,AMULAB ;计算Y*YADDA,ZL ;计算结果低8位MOVZL,A第8页MOVA,B ;取乘积的咼8位ADDCA,ZH ;计算结果高8位,注意必须带进位加MOVZH,AMOVA,ZLADDA,#5 ;计算结果加5MOVZL,AMOVZH,A ;存结果低8位ADDCA,#0 ;将低8位进位加到结果咼8位,注意必须带进位加MOVZH,A ;存结果高8位END评分办法:不要求写出程序的注释和使用伪指令。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。24、设外部RAM1000H单元为数据块的起始地址, 数据块长度为60字节,试编程求数据块中所有数据的和,并将其存入内部RAM30H和31H单兀(30H单兀存放和的低8位,31H单兀存放和的高8位)。解:ADDREQU100HH ;数据块首地址LENEQU60 ;数据块长度ZHEQU31H ;和的高8位地址ZLEQU30H ;和的低8位地址ORG0MOVDPTR,#ADDR;数据块首地址送DPTRMOVR7,#LEN;数据块长度送R7MOVZH,#0 ;结果单元清零MOVZL,#0LOOP:MOVXA,@DPTR;取数据ADDA,ZL ;将数据加到结果单元的低8位MOVZL,A ;存结果低8位MOVA,ZH ;取结果高8位ADDCA,#0 ;将低8位计算的进位加到高8位中MOVZH,A ;存咼8位INCDPTR ;修改地址指针,指向下一个数据DJNZR7,LOOP;没有计算完则继续SJMP$END评分办法:不要求写出程序的注释和使用伪指令。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣 1-3分。共27页25、若外部25、若外部RAMW(1000H)=X,内部RAM(30H)=Y,请编程实现Z=X*X+3Y+18(设Z<65536),并将结果保存到片内RAM的40H和41H单元(41H单元存放结果的高8位,40H单元存放结果的低8位)。5分,指令完全写对可得解: XEQIJ1000HYEQU30HZHEQU41HZLEQU40HORG0MOVZH,#0 ;结果单元清零MOVZL,#OMOVDPTR,#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 ;存结果低8位MOVA,ZH ;取结果高8位ADDCA,#0 ;将低8位进位加到结果高8位,注意必须带进位加MOVZH,A ;存结果高8位END评分办法:不要求写出程序的注释和使用伪指令。程序设计思路正确可得10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣 1-3分。26、若外部RAM^(1000H)=X,请编程实现Y=X+2X+1(设Y<65536),并将结果保存到片内 RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。解: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位加上低8位运算的进位MOV31H,A ;存和的高8位SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。27、设外部RAM2000H单元为数据块的起始地址,数据块长度为 100字节。假设在数据块中存在唯一的一个ASCII字符“A”试编程找到它,并将其在外部 RAM的存放地址存入内部RAM30H和31H单元中(30H单元存放地址的高8位,31H单元存放地址的低8位)。解:ORG0MOVDPTR,#2000H;数据块首地址送DPTRMOVR2,#100 ;数据块长度送R2LOOPMOVXA,@DPTR;取数据CJNEA,#41H,NEXT;数据不是“A'则转移MOVA,DPHMOV30H,A ;存咼8位地址MOVA,DPLMOV31H,A ;存低8位地址SJMP$;停机NEXT:INCDPTR ;修改地址指针DJNZR2,LOOP;没有找到则继续SJMP$;停机评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。28、若内部只人皿的(20H)=a,外部RAM(1300H)=b,请编程实现y=a2+b2+5(设y<65536),并将结果保存到片内RAM的30H和31H单元(31H单元存放结果的高8位,30H单元存放结果的低8位)。解:ORG0MOVA,20H ;取aMOVB,AMULAB ;求a2MOV30H,A ;存和的低8位MOVA,BMOV31H,A ;存和的高8位MOVDPTR,#1300HMOVXA,@DPTR;取bMOVB,AMULAB ;求b2ADDA,30H ;求a2+b2MOV30H,AMOVA,BADDCA,31HMOV31H,AMOVA,30HADDA,#5 ;加5MOV30H,AMOVA,31H第10页ADDCA,#0 ;加上低8位的进位MOV31H,ASJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。29、若内部只人皿的(30H)=X,(31H)=Y,请编程实现Z=X+5Y(设Z<65536),并将结果保存到片外RAM的1000H和1001H单元(1001H单元存放结果的高8位,1000H单元存放结果的低8位)。解: ORG0MOVDPTR,#1000H;结果地址指针赋值MOVA,30H ;取XMOVB,AMULAB ;求X2MOVX@DPTR,A;存X2低8位INCDPTR ;指向结果单兀咼8位MOVA,BMOVX@DPTR,A;2存X高8位DECDPL ;指向结果单元低8位MOVA,31H ;取YMOVB,#5MULAB ;求5YMOVR0,AMOVXA,@DPTRADDA,R0 ;2求X+5Y的低8位和MOVX@DPTR,A;存X2+5Y的低8位和INCDPTR ;指向结果单兀咼8位MOVXA,@DPTR;取结果单兀咼8位ADDCA,B ;求X2+5Y的高8位和(注意加上低8位的进位)MOVX@DPTR,A;存X2+5Y的高8位和SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣1-3分。30、设内部RAM20H单元为数据块的起始地址,数据块长度为32字节。请将整个数据块求和(共32字节的数据求和,设和小于65536),并把和存入外部RAM1000H和1001H的单兀中(和的高8位存入1001H单元)。共27页解:ORG0MOVR0,#20H ;数据块首地址送R0MOVR2,#32 ;数据块长度送R2CLRA ;累加器清零MOVDPTR,#1000H;指向和的低8位MOVX@DPTR,A;和的低8位清零INCDPTR ;指向和的高8位MOVX@DPTR,A;和的高8位清零DECDPL ;指向和的低8位LOOP:MOVA,@R0 ;取数据MOVR1,A ;暂存在R1MOVXA,@DPTR;取和的低8位ADDA,R1 ;求和MOVX@DPTR,A;存和的低8位INCDPTR ;指向和的高8位MOVXA,@DPTR;取和的高8位ADDCA,#0 ;将和的低8位的进位加到高8位中MOVX@DPTR,A;存和的高8位DECDPL ;指向和的低8位INCRO ;数据块指针加1DJNZR2,LOOP;没有加完则循环SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣1-3分。31、若内部RAMW(20H)=a,(21H)=b,请编程实现y=a2+b2(设y<65536),并将结果保存到片外RAM勺2000H和2001H单元(2001H单元存放结果的高8位,2000H单元存放结果的低8位)。解:ORG0MOVDPTR,#2000H;结果单元低8位地址送DPTRMOVA,20H ;取a的值MOVB,AMULAB ;求a2MOVX@DPTR,A ;存a2低8位MOVA,BINCDPTR ;指向结果单兀咼8位MOVX@DPTR,A ;存结果高8位DECDPL ;指向结果单元低8位MOVA,21H ;取b的值MOVB,AMULAB ;求b2MOVR0,A ;暂存b2的低8位MOVXA,@DPTR ;取结果低8位ADDA,R0 ;求低8位的和MOVX@DPTR,A ;存结果低8位INCDPTR ;指向结果单兀咼8位MOVXA,@DPTR ;取结果高8位ADDCA,B ;加上b2的高8位和低8位求和的进位MOVX@DPTR,A ;存结果高8位SJMP$;停机END评分办法:不要求写出程序的注释,也不要求使用子程序。程序设计思路正确可得对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣32、将内部RAM40H为起始地址的32个连续单元中的十六进制数转换成5分,指令完全写1-3分。ASCH码存入外部RAM3000H开始的存储单元中。解: ORG0MOVR0,#40H ;源数据块首地址送R0MOVR2,#32 ;数据块长度送R2MOVDPTR,#3000H;目的数据块首地址送DPTRLOOP:MOVA,@R0 ;取待转换数据ANLA,#0F0H ;取咼四位数据SWAPA ;高低四位数据交换PUSHDPH ;保护目标地址指针PUSHDPLMOVDPTR,#TAB;数据指针指向表格首地址MOVCA,@A+DPTR;查表得到ASCII码POPDPL ;恢复目标地址指针POPDPHMOVX@DPTR,A;存转换结果INCDPTR ;指向下一个存储单元MOVA,@R0 ;取待转换数据ANLA,#0FH;取低四位数据PUSHDPH ;保护目标地址指针PUSHDPLMOVDPTR,#TAB;数据指针指向表格首地址MOVCA,@A+DPTR;查表得到ASCII码POPDPL ;恢复目标地址指针POPDPHMOVX@DPTR,A;存转换结果INCDPTR ;指向下一个存储单兀INCR0 ;指向下一个待转换数据DJNZR2,LOOP;没有转换完则继续SJMP$;停机TAB:DB'0123456789ABCDEFEND评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。33、设内部RAM20H单元为数据块的起始地址,数据块长度为 10H,数据为8位无符号数,试编程找出数据块中的最小值,并将其存入 40H单元。解:ORG0MOVR0,#20H ;数据区首地址送R0MOVR2,#10H ;数据块长度送R2MOV40H,#0FFH ;结果单兀送入最大值LOOP:MOVA,@R0 ;取数据CLRC ;清进位SUBBA,40H ;利用减法判断该数据是否比最小值单元的数小?JNCNEXT ;如果没有借位说明待比较数据比最小值单兀的值大则转移MOVA,@R0 ;取最小值MOV40H,A ;存最小值NEXT:INCR0 ;修改地址指针DJNZR2,LOOP;没有比较完则继续比较。SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。34、比较两个等长ASCII码字符串是否相等。字符串长度存放在内部 RAM2FH单元,两字符串分别存放在内部RAM30H和40H开始的单元中。如果两个字符串相等,则 CY=1,否则,CY=0解:ORG0MOVR0,#30H ; 第一个字符串首地址送R0MOVR1,#40H ;第二个字符串首地址送 R1MOVR2,2FH ;取字符串长度LOOP:MOVA,@R0 ;取第一个字符串的字符CLRCSUBBA,@R1 ;比较两个字符是否相等JNZSTOP ;结果不为零说明两个字符串不相等INCR0 ;修改地址指针INCR1DJNZR2,LOOP;没有比较完则继续SETBC ;比较完,置两字符串相等标志SJMP$;停机STOP:CLRC ;两字符串不相等,清进位标志SJMP$;停机END评分办法:不要求写出程序的注释。程序设计思路正确可得 5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣 1-3分。35、将MCS5呐部RAM60H〜65H单元存放的12个16进制数变为ASCII码,存放到0100H单元开始的外部RAM中。解: ADDR1EQU60HADDR2EQU0100HLENEQU6ORG0MOVR0,#ADDR1;待转换数据首地址送R0MOVDPTR,#ADDR2;转换后ASCII码存放首地址送DPTRMOVR2,#LEN;原数据长度送R2LOOP:MOVA,@R0 ;取待转换数据ANLA,#0FH ;取待转换数据低四位PUSHDPH ;保护目的区地址指针PUSHDPLMOVDPTR,#TAB;码表首地址送DPTRMOVCA,@A+DPTR;查表POPDPL ;恢复目的区地址指针POPDPHMOVX@DPTR,A;存转换好的ASCII码INCDPTR ;目的地址加1MOVA,@R0 ;取待转换数据SWAPA ;高低四位交换
ANLA,#OFH;PUSHDPH ;PUSHDPLMOVDPTR,#TABMOVCA,@A+DPTRPOPDPL;POPDPHMOVX@DPTR,AINCDPTR;INCRO;取待转换高四位数据保护目的区地址指针码表首地址送DPTR取待转换高四位数据保护目的区地址指针码表首地址送DPTR查表恢复目的区地址指针存转换好的ASCII码目的地址加1原地址指针加1DJNZR2,LOOPSJMP$ ;TAB:DBEND0123456789ABCDEF评分办法:不要求使用伪指令,也不要求写出程序的注释。程序设计中也可以先转换高四位。程序设
计思路正确可得5分,指令完全写对可得 10分。若仅写对少量指令,可酌情给 1-3分;若仅有少量指令写错,可酌情扣1-3分。5分,指令完全写对可得 10分。若仅写对1-3分。36、将片外数据存储器的2500H单元与5分,指令完全写对可得 10分。若仅写对1-3分。单元中,即(2500H)+(2501H)t(2503H)(2502H)。解:ORG0MOVDPTR,#2500H;指向被加数MOVXA,@DPTR;取被加数MOVR0,A ;存被加数INCDPTR ;指向加数MOVXA,@DPTR;取加数ADDA,R0 ;求和DAA ;十进制调整INCDPTR ;指向和的低8位MOVX@DPTR,A;存和的低8位INCDPTR ;指向和的高8位ADDCA,#0 ;计算和的高8位MOVX@DPTR,A;存和的高8位SJMP$;停机END评分办法:要求写出程序的注释。程序设计思路正确可得少量指令,可酌情给1-3分;若仅有少量指令写错,可酌情扣
37、设单片机的晶体震荡频率为 12MHz利用定时器T0编程由P1.2输出周期为10ms的方波。(要求:T0工作在方式1下,采用中断方式工作)解:周期为10ms则半周期为5ms,因此T0的定时初值为65536—5000/1=60536=0EC78HORG0LJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01HMOVTH0,#0ECHMOVTL0,#78HSETBET0SETBTR0SETBEACLRP1.2SJMP$TS:CLRTR0MOVTH0,#0ECHMOVTL0,#78HSETBTR0CPLP1.2RETIEND评分办法:不要求写出程序的注释。 T0的方式控制字写对和定时初值计算正确可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给1-2分。38、已知8051单片机应用系统的晶体振荡频率为 12MHz请利用定时器T0实现在P1.0引脚上输出周期为100mS的方波。(要求:采用中断方式, T0工作在方式1下)解:输出方波周期为100mS故半周期为50mS因此T0的定时初值是65536-50000/1=15536=3CB0HORG0HLJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBET0SETBTR0SETBEACLRP1.2SJMP$TS:CLRTR0MOVTH0,#3CHMOVTL0,#0B0HSETBTR0CPLP1.2RETIEND评分办法:不要求写出程序的注释。T0的方式控制字写对和定时初值计算正确可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣1-2分;若仅写出少量指令可酌情给1-2分。39、设8031单片机应用系统的晶振频率为 12MHz请利用T0在P1.0和P1.1弓I脚上输出频率为20Hz、互补(两个波形互为反相)的方波。要求:采用中断方式, T0工作在方式1。解:输出频率为20Hz,则周期为1/20=50mS半周期为50/2=25mST0的定时初值为:65536-25000/1=40536=9E58HORG0HLJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01H ;T0设定为定时器,工作方式 1MOVTH0,#9EHMOVTL0,#58HSETBET0SETBEASETBTR0CLRP1.0SETBP1.1SJMP$TS :CLRTR0MOVTH0,#9EHMOVTL0,#58H第14页SETBTR0CPLP1.0CPLP1.1RETIEND评分办法:不要求写出程序的注释。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=9E58HORG0HLJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01H ;T0设定为定时器,工作方式1MOVTH0,#9EHMOVTL0,#58HSETBET0SETBEASETBTR0SJMP$TS :CLRTR0MOVTH0,#9EHMOVTL0,#58HSETBTR0RETIEND评分办法:不要求写出程序的注释。T0的方式控制字写对和定时初值计算正确可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣1-2分;若仅写出少量指令可酌情给1-2分。41、设单片机的晶体振荡频率为 12MHz利用定时器T0编程由P1.0和P1.1输出周期为10ms互补(互为反相)的方波。(要求:T0工作在方式1下,采用中断方式工作)解:周期为10ms则半周期为5ms,因此T0的定时初值为65536—5000*12/12=60536=0EC78H共27页ORG0LJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01HMOVTH0,#0ECHMOVTL0,#78HSETBET0SETBTR0SETBEACLRP1.0SETBP1.1SJMP$TS :CLRTR0MOVTH0,#0ECHMOVTL0,#78HSETBTR0CPLP1.0CPLP1.1RETIEND评分办法:不要求写出程序的注释。T0的方式控制字写对和定时初值计算正确可各得1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给1-2分。42、已知8051单片机应用系统的晶体振荡频率为 12MHz请利用定时器T1实现在P1.0和P1.1引脚上输出互补(互为反相)的周期为 100mS的方波。(要求:采用中断方式, T1工作在方式1下)解:输出方波周期为100mS故半周期为50mS因此T1的定时初值是65536-50000*12/12=15536=3CB0HORG0HLJMPSTARTORG001BHLJMPTSORG30HSTART:MOVTMOD,#10H (或#1XH)MOVTH1,#3CHMOVTL1,#0B0HSETBET1SETBTR1SETBEACLRP1.0SETBP1.1SJMP$TS:CLRTR1MOVTH1,#3CHMOVTL1,#0B0HSETBTR1CPLP1.0CPLP1.1RETIEND评分办法:不要求写出程序的注释。 T1的方式控制字写对和定时初值计算正确可各得1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给1-2分。43、设8031单片机应用系统的晶振频率为 12MHz请利用T0在P1.0引脚上输出频率为20Hz的方波。要求:采用中断方式, T0工作在方式1。解:输出频率为20Hz,则周期为1/20=50ms半周期为50/2=25msT0的定时初值为:65536-25000*12/12=40536=9E58HORG0HLJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01H ;T0设定为定时器,工作方式1MOVTH0,#9EHMOVTL0,#58HSETBET0SETBEASETBTR0CLRP1.0SJMP$TS :CLRTR0MOVTH0,#9EHMOVTL0,#58H
SETBTROCPLP1.0RETIEND评分办法:不要求写出程序的注释。TO的方式控制字写对和定时初值计算正确可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣1-2分;若仅写出少量指令可酌情给1-2分。44、8031单片机应用系统的晶体振荡器频率为 12MHz请利用定时器T1编程实现在P1.6和P1.7引脚输出互补(互为反相)的、频率为 20Hz的方波。要求:采用中断方式, T1工作在方式1下。解:20Hz方波的周期是1/20=50ms,则其半周期为50/2=25msT1的定时初值为:65536-25000/1=40536=9E58HORG0HLJMPSTARTORG001BHLJMPTSORG30HSTART:MOVTMOD,#10H ;T1设定为定时器,工作方式1MOVTH1,#9EHMOVTL1,#58HSETBET1SETBEACLRP1.6SETBP1.7SETBTR1SJMP$TS :CLRTR1MOVTH1,#9EHMOVTL1,#58HSETBTR1CPLP1.6CPLP1.7RETIEND评分办法:不要求写出程序的注释。T1的方式控制字写对和定时初值计算正确可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣1-2分;若仅写出少量指令可酌情给1-2分。45、设单片机的晶体振荡频率为 6MHz利用定时器T1编程由P1.6和P1.7输出周期为500卩s、互补(互为反相)的方波。(要求:T1工作在方式2下,采用中断方式工作)解:T1定时器的初值=256-6*250/12=13仁83HORG0LJMPSTARTORG1BHLJMPTSORG30HSTART: MOV TMOD,#20HMOVTH1,#131MOVTL1,#131SETBET1SETBEA(SETBTR1CLRP1.6SETBP1.7SJMP$TS: CPLP1.6CPLP1.7或MOVIE,#88H)或MOVIE,#88H)END评分办法:写对定时器方式字和初值各给仅写出少量指令,可酌情给 1-3分。1分,设计思路正确给4分,程序编制正确可得满分。若46、已知8051单片机应用系统的晶体振荡频率为 12MHz请利用定时器T1实现在P1.0和1分,设计思路正确给4分,程序编制正确可得满分。若上输出互补(互为反相)的周期为 2ms的方波。(要求:采用中断方式, T1工作在方式2下)解:半周期=1ms。方式2定时设定为250卩s,其初值=256-250*12/12=6。只要T1中断4次计数即为1ms。ORG0LJMPSTARTORG1BHLJMPTSORG30HSTART:MOVTMOD,#20HMOVTH1,#6MOVTL1,#6SETBET1SETBEASETBTROCLRP1.0SETBP1.1MOVR2,#4SJMP$TS: DJNZR2,TS1MOVR2,#4CPLP1.0CPLP1.1TS1:RETIEND评分办法:写对定时器方式字和初值各给 1分,设计思路正确给4分,程序编制正确可得满分。 若仅写出少量指令,可酌情给 1-3分。47、设8031单片机应用系统的晶振频率为 12MHz请利用T1在P1.0引脚上输出频率为1Hz的方波。要求:采用中断方式,T1工作在方式1。解:1Hz方波的周期为1s,半周期为500ms。可采用T1定时50ms并对中断计数10次来实现500ms定时。50ms定时初值=65536—50000*12/12=15536=3CB0HORG0LJMPSTARTORG1BHLJMPTSORG30HMOVTMOD,#10HMOVTH1,#3CHMOVTL1,#0B0HSETBET1SETBEA( 或MOVIE,#88H)MOVR2,#10CLRP1.0SETBTR1SJMP$TS:CLRTR1MOVTH1,#3CHMOVTL1,#0B0HSETBTR1DJNZR2,TS1第17页MOVR2,#10CPLP1.0TS1:RETI评分办法:写对定时器方式字和初值各给 1分,设计思路正确给4分,程序编制正确可得满分。若仅写出少量指令,可酌情给 1-3分。48、8051单片机应用系统的晶体振荡器频率为 6MHz请利用定时器T1编程实现在P1.0和P1.1弓I脚输出互补(互为反相)的、频率为 20Hz的方波。要求:采用中断方式, T1工作在方式2下。解:20Hz方波的半周期为25msT1的0.5ms定时初值=256—500*6/12=6ORG0LJMPSTARTORG1BHLJMPTSORG30HSTART:MOVTMOD,#20HMOVTH1,#6MOVTL1,#6MOVR2,#50;50*0.5ms=25msCLRP1.0SETBP1.1SETBET1SETBEA;( 或MOVIE,#88H)SETBTR1SJMP$TS:DJNZR2,TS1MOVR2,#50CPLP1.0CPLP1.1TS1:RETI评分办法:写对定时器方式字和初值各给 1分,设计思路正确给4分,程序编制正确可得满分。若仅写出少量指令,可酌情给 1-3分。49、8751单片机应用系统的晶体振荡器频率为 12MHz请利用定时器T0编程实现在P1.7引脚输出频率为20Hz的方波。要求:采用中断方式, T0工作在方式1下。解:20Hz方波的周期是1/20=0.05s=50ms,则半周期为25ms共27页25ms将P1.7取反即可得到20Hz的方波。的定时初值=65536-25000*12/12=40536=9E58H因此只要每隔T0ORG0LJMPSTARTORG0BHLJMPTSORG30HSTART:MOVTMOD,#01H;MOVTH0,#9EHMOVTL0,#58HCLRP1.7SETBET0SETBEA(SETBTR0 ;SJMP$TS:CLRTR05MOVTH0,#9EHMOVTL0,#58HSETBTR0 ;CPLP1.7RETI设定T0为定时器,方式1或两条指令合并为MOVIE,#82H)启动T0定时停止T0定时启动T0定时ENDMOVTL1,#58HCLRP1.0SETBP1.1SETBET1SETBEA(或两条指令合并为MOVIE,#88H)SETBTR1 ;启动T1定时SJMP$CLRTR15停止T1定时MOVTH1,#9EHTS:MOVSETBCPLCPLRETITL1,#58HTR1P1.0P1.1启动T1定时END评分办法:T1的方式字和定时初值写对可各得1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。在中断服务程序中可以省略T1的停止与启动指令。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给1-2分。评分办法:T0的方式字和定时初值写对可各得1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。在中断服务程序中可以省略T0的停止与启动指令。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给1-2分。51、已知8051单片机应用系统的晶体振荡频率为12MHz请利用定时器T0实现在P1.0引脚上输出频率为2kHz的方波。(要求:采用中断方式, T0工作在方式2下)解:2kHz方波的周期是1/2000=0.5ms=500卩s,则半周期为250卩s。因此只要每隔250卩s将P1.0取反即可得到互补的2kHz方波。50、设8051单片机应用系统的晶振频率为 12MHz请利用T1在P1.0和P1.1弓I脚上输出频率为20Hz、互补(两个波形互为反相)的方波。要求:采用中断方式, T1工作在方式1。解:20Hz方波的周期是1/20=0.05s=50ms,则半周期为25m&因此只要每隔25ms将P1.0和P1.1取反即可得到互补的20Hz方波。T1的定时初值=65536-25000*12/12=40536=9E58HORG0LJMPSTARTORG1BHLJMPTSORG30HSTART:MOVTMOD,#10H; 设定T1为定时器,方式1MOVTH1,#9EHT0的定时初值=256-250*12/12=6ORG0LJMPSTARTORG0BHLJMPTSORG30HSTART:MOVTMOD,#02H;设定T0为定时器,MOVTH0,#6MOVTL0,#6CLRP1.0SETBET0SETBEA (或两条指令合并为SETBTR0 ;启动T0定时SJMP$TS:CPLP1.0方式2MOVIE,#82H)RETIEND评分办法:T0方式字和定时初值写对可各得 1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。定时100ms中断,对T0中断计5次实现500ms定时。T0的定时初值为65536—100000*6/12=15536=03CBCH参考程序清单如下:ORG0LJMPSTARTORG0BHLJMPTSORG0LJMPSTARTORG0BHLJMPTSORG30HSTART:MOVTMOD,#01H;设定T0为定时器,方式1MOVTH0,#3CHMOVTL0,#0B0H;50ms定时初值送T0MOVR2,#10 ;中断10次SETBET0SETBEA ;(或两条指令合并为MOVIE,#82H)SETBTR0 ;启动定时SJMP$;等待中断TS:CLRTR0MOVTH0,#3CHMOVTL0,#0B0H;50ms定时初值送T0SETBTR0DJNZR2,NEXTMOVR2,#10CPLP1.052、设单片机的晶体振荡频率为 12MHz利用定时器T0编程由P1.0输出周期为1秒的方波。(要求:T0工作在方式1下,采用中断方式工作)解:周期为1秒的方波只需要每隔0.5秒将P1.0取反即可。将T0设定为50ms定时中断,中断10次即是0.5秒,这时将P1.0取反即可。T0的定时初值=65536—50000*12/12=15536=3CB0HNEXT:RETIEND评分办法:T0的方式字和定时初值写对可各得 1分;程序设计思路正确可得 4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。53、设单片机的晶体振荡频率为 6MHz利用定时器T0编程由P1.0和P1.1输出周期为1s、互补(互为反相)的方波。(要求:T0工作在方式1下,采用中断方式工作)解:周期为1s则半周期为500ms,只需要每隔500ms将P1.0和P1.1的输出取反即可。可以利用 T0ORG30HSTART:MOVTMOD,#01HMOVTH0,#03CHMOVTL0,#0B0HMOVR2,#5 ;SETBET0SETBTR0SETBEACLRP1.0SETBP1.1SJMP$TS:CLRTR0;MOVTH0,#03CHMOVTL0,#0B0HSETBTR0;DJNZR2,TS1MOVR2,#5 ;CPLP1.0CPLP1.1TS1:RETIEND中断5次为500ms该指令可以省略该指令可以省略恢复中断次数初值评分办法:T0方式字和定时初值写对可各得 1分;程序设计思路正确可得 4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。54、8031单片机应用系统的晶体振荡器频率为 6MHz请利用定时器T0编程实现在P1.0引脚输出频率为0.1Hz的方波。要求:采用中断方式, T0工作在方式1下。解:0.伯z方波的周期是1/0.1=10s,则其半周期为10/2=5s,每5s将P1.0取反即可。可以利用T0定时100ms中断,对100ms中断计50次即可实现5s定时。T0的定时初值为:65536-100000*6/12=15536=3CBCH参考程序清单如下:ORG0HLJMPSTARTORG000BHLJMPTSORG30HSTART:MOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HMOVR2,#32HSETBET0SETBEASETBTR0SJMP$TS:CLRTR0 ;MOVTH0,#3CHMOVTL0,#0B0HSETBTR0 ;DJNZR2,NEXTMOVR2,#32HCPLP1.0NEXT:RETI设定为定时器,工作方式 1此指令可以省略此令可以省略END评分办法:T0方式字和定时初值写对可各得1分;程序设计思路正确可得4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。55、设单片机的晶体振荡频率为 3MHz利用定时器T0编程由P1.6和P1.7输出周期为10s、互补(互为反相)的方波。(要求:T0工作在方式1下,采用中断方式工作)解:方波周期是10秒,只需要每隔5秒将P1.6和P1.7取反即可。用T0产生100ms定时中断,对该中断计50次即可得到5秒定时。T0的定时初值=65536—100000X3-12=40536=9E58HORG0LJMPSTARTORG0BHLJMPTSORG30HSTART:MOVSP,#60HMOVTMOD,#01HMOVTH0,#9EHMOVTL0,#58HSETBET0SETBEACLRP1.6MOVR2,#32H(或MOVR2,#50)SETBTR0SJMP$TS:MOVTH0,#9EHMOVTL0,#58HDJNZR2,TS1MOVR2,#32H(或MOVR2,#50)CPLP1.6CPLP1.7TS1:RETIEND评分办法:T0方式字和定时初值写对可各得 1分;程序设计思路正确可得 4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。56、89C51单片机应用系统的晶体振荡器频率为 12MHz请利用定时器T1编程实现在P1.0引脚输出频率为2Hz的方波。要求:T1采用中断方式工作,工作在方式 1下。解:2Hz方波其周期为0.5秒,只需要每隔0.25秒将P1.0取反即可。T1在12MHz晶振下定时时间最大为65.536ms,因此只需要50ms定时中断,然后对中断计5次即可实现0.25秒定时。T1的50ms定时初值为:65536—50000X12-12=15536=3CB0H程序清单如下:ORG0LJMPSTARTORG1BHLJMPTSORG30HSTART:MOV SP,#60HMOVTMOD,#10HMOVTH1,#3CHMOVTL1,#0B0HSETBET1SETBEAMOVR2,#5SETBTR1SJMP$T1T1的方式控制字和定时初值写对可各得 1分;程10分)。若少量指令写错可酌情扣 1-2分;若仅写出TS:MOVTH1,#3CHMOVTL1,#0B0HDJNZR2,TS1MOVR2,#5CPLP1.0TS1:RETIEND评分办法:T1的方式字和定时初值写对可各得 1分;程序设计思路正确可得 4分,指令完全写对可得满分(10分)。若少量指令写错可酌情扣 1-2分;若仅写出少量指令可酌情给 1-2分。57、设单片机的晶体振荡频率为12MHzP1.0接有一个共阴极驱动方式连接的发光二极管。 现要求利用定时器T1编程使该发光二极管每10秒钟点亮一次,每次点亮时间为1秒。(要求:T1工作在方式1下,采用中断方式工作,在中断服务程序中控制发光二极管的亮与灭)解:共阴极驱动的发光二极管需要高电平点亮,故当 P1.0为1时发光二极管点亮。由于一个周期为10秒,因此需要一个1秒钟的定时,同时需要一个闪烁标志位来表明 LED的亮与灭。T1的定时时间选择50ms,这样中断20次即为1秒钟,其定时初值为:65536 —50000*12/12=15536=3CB0HFLASH1 BIT00H ;LED亮与火的标志,“1”表示亮ORG0LJMPSTARTORG1BHLJMPTSORG30HSTART:MOV TMOD,#10H;设定T1为定时器,方式1MOVTH1,#3CHMOVTL1,#0B0HMOVR2,#20 ;中断20次为1秒MOVR3,#9 ;LED熄灭的时间为9秒SETBET1 ;允许T1中断SETBEA ;开中断SETBFLASHSETBP1.0 ;点亮LEDSETBTR1 ;启动计数SJMP$TS:MOVTH1,#3CHMOVTL1,#0B0HDJNZR2,TS2 ;没到1秒钟则返回MOVR2,#20JBFLASH,TS1;若LED亮则转移DJNZR3,TS2 ;没到9秒钟则返回MOVR3,#9SETBP1.0 ;点亮LEDSETBFLASHSJMPTS2TS1:CLRP1.0 ;1秒到,熄灭LEDCLRFLASHTS2:RETIEND评分办法:不要求写出程序的注释和使用伪指令。序设计思路正确可得4分,指令完全写对可得满分(少量指令可酌情给1-2分。58、89C51单片机应用系统的晶体振荡器频率为 6MHz单片机的P1.7引脚接有一个共阳极驱动方式连接的发光二极管,请利用定时器 T0编程实现使该发光二极管点亮 1秒钟,熄灭1秒钟的循环。(要求:T0采用中断方式工作,工作在方式 1下,在中断服务程序中控制发光二极管的亮与灭。 )解:由于LED是亮与灭的时间均为 1秒,故需要一个1秒的定时程序。可以利用 T0定时100ms(或50ms)中断10次(或20次)来实现1秒的定时。T0的定时初值为:65536 —100000*6/12=15536=3CB0H(或65536—50000*6/12=40536=9E58HORG0LJMPSTARTORG0BHLJMPTSSTART:MOV TMOD,#15设T0为定时器,方式1MOVTH0,#3CH;100ms定时初值MOVTL0,#0B0HSETBET0SETBEAMOVR2,#10 ;中断10次为1秒SETBTR0SJMP$TS:MOVTH0,#3CH;100ms定时初值MOVTL0,#0B0HDJNZR2,TS1 ;1秒没到则返回MOVR2,#10 ;1秒钟中断次数送R2CPLP1.7 ;改变LED的状态
TS1:RETIEND评分办法:不要求写出程序的注释。T0方式字和定时初值计算正确可各得1分;程序设计思路正确可得4分,指令完全写对可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西医外科学练习题
- 保洁员初级模拟试题
- 网络安全技术实践测试题
- 浙江国企招聘2025杭州市临安区城市发展投资集团有限公司下属子公司招聘8人笔试参考题库附带答案详解
- 2025福建武夷交通运输股份有限公司招聘10人笔试参考题库附带答案详解
- 2025年黄山旅游发展股份有限公司春季招聘75人笔试参考题库附带答案详解
- 青马试题填空题及答案
- 铲车路障考试题及答案
- 纺织品设计师证书试题及答案汇集
- 固废处理项目前景评估与策略分析
- 2023年房修工程师年终总结及年后展望
- 《广州市城市树木保护专章编制指引》解读(分享版)
- 乐山老江坝安置方案
- 电机与电气控制技术课程说课
- 《大学生职业生涯规划作品》重庆
- 国土空间规划与自然资源“一张图”构建的理论方法和实践
- 全国青少年电子信息智能创新大赛图形化编程(必做题模拟三卷)
- 2023学年度六年级语文下册期末复习(根据课文内容填空)
- 2023学年完整公开课版虎皮鹦鹉
- 共产主义原理
- GRR分析表格模板
评论
0/150
提交评论