您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 福建农林大学微机原理.
7/8/9章综合编程一、简单小程序编制:注:所有多字节数的低字节都在低地址;R0或R1均指向内部RAM的最低字节。1、将30H、31H单元内容与T0计数器的TL0、TH0交换。保持其它R和M不变。解:MOVA,R0XCHA,30HMOVTL0,AMOVA,TH0XCHA,31HMOVTH0,A2、将30H、31H单元内容与5C30H、5C31H交换。保持其它R和M不变。解:MOVDPTR,#5C30HMOVXA,@DPTRXCHA,30HMOVX@DPTR,AINCDPTRMOVXA,@DPTRXCHA,31HMOVX@DPTR,A3、将30H、31H单元内容与R0指向的两字节单元交换。保持其它R和M不变。解:MOVA,@R0XCHA,30HMOV@R0,AINCR0MOVA,@R0XCHA,31HMOV@R0,A4、将30H、31H单元内容与DPTR指向的两字节单元交换。保持其它R和M不变。解:MOVXA,@DPTRXCHA,30HMOVX@DPTR,AINCDPTRMOVXA,@DPTRXCHA,31HMOVX@DPTR,A5、将30H、31H单元内容存入5C30H、5C31H单元。保持其它R和M不变。解:MOVA,30HMOVDPTR,#5C30HMOVX@DPTR,AMOVA,31HINCDPTRMOVX@DPTR,A6、将30H、31H单元内容加上数03C4H后存入5C30H、5C31H单元。解:MOVA,30HADDA,#0C4HMOVDPTR,#5C30HMOVX@DPTR,AMOVA,31HADDCA,#03HINCDPTRMOVX@DPTR,A7、将30H、31H单元内容减去数03C4H后存入5C30H、5C31H单元。解:CLRCMOVA,30HSUBBA,#0C4HMOVDPTR,#5C30HMOVX@DPTR,AMOVA,31HSUBBA,#03HINCDPTRMOVX@DPTR,A8、将30H、31H单元内容除以2后存入5C30H、5C31H单元。解:MOVA,31HCLRCRRCAMOVDPTR,#5C31HMOVX@DPTR,AMOVA,30HRRCAMOVDPTR,#5C30HMOVX@DPTR,A9、将30H、31H单元内容乘以2后存入5C30H、5C31H单元。解:MOVA,30HCLRCRLCAMOVDPTR,#5C30HMOVX@DPTR,AMOVA,31HRLCAINCDPTRMOVX@DPTR,A10、将30H、31H单元内容减1。保持其它R和M不变。解:MOVA,30HJNZL0DEC31HSJMP$L0:DEC30H11、将30H、31H单元内容加1。保持其它R和M不变。解:INC30HMOVA,30HJNZOKINC31HOK:……………..12、将外部RAM中的5C30H、5C31H单元内容乘以2。保持其它R和M不变。解:MOVDPTR,#5C30HCLRCMOVXA,@DPTRRLCAMOVX@DPTR,AINCDPTRMOVXA,@DPTRRLCAMOVX@DPTR,A13、将外部RAM中的5C30H、5C31H单元内容除以2。保持其它R和M不变。解:MOVDPTR,#5C31HCLRCMOVXA,@DPTRRRCAMOVX@DPTR,ADECDPLMOVXA,@DPTRRRCAMOVX@DPTR,A14、将30H的低半字节和31H单元的高半字节交换。解:MOVA,31HSWAPAMOVR0,#30HXCHDA,@R0SWAPAMOV31H,A15、将30H的高半字节和31H单元的高半字节交换。解:MOVA,30HXCHA,31HMOVR0,#31HXCHDA,@R0MOV30H,A16、将30H、31H单元的4位16进制数的中间两位数交换。解:MOVA,30HSWAPAMOVR0,#31HXCHDA,@R0SWAPAMOV30H,AMOVA,@R0MOV31H,A17、如果INT0为低,则位30H改为它的值与P0口最低位的“反”相“与”后的值;否则,清30H位。解:JBP3.2,L0MOVC,30HANLC,/P0.0MOV30H,CSJMP$L0:CLR30H18、如果INT0为低,则位30H改为它的值与P0口最高位的“反”相“或”后的值;否则,清30H位。解:JBP3.2,L0MOVC,30HOPLC,/P0.7MOV30H,CSJMP$L0:CLR30H19、如果INT0为高,则,位30H改为它的值与P0口最低位相“或”后的值;否则,取反30H位。解:JNB30H,L0MOVC,30HORLC,P0.0MOV30H,CSJMP$L0:CPL30H20、如果INT0为低,则A的最低位与A的最高位对调;否则,清除A。解:JBP3.2,L0MOVC,ACC.0MOV0,CMOVC,ACC.7MOVACC.0,CMOVC,0MOVACC.7,CSJMP$L0:CLR,A21、如果INT1为高,则A的最低位改为它的值与A的最高位的“反”相“与”后的值;否则,取反A。解:JNBP3.3,L0MOVC,ACC.0ANLC,/ACC.7MOVACC.0,CSJMP$L0:CPLA22、改变30H单元为加上数0F7H后的值,如果产生进位,则设置F0标志;否则,清除F0标志。解:MOVA,30HADDA,#0F7HMOV30H,AJCL0CLRF0SJMP﹩L0:SETBF023、改变30H单元为减去数0F7H后的值,如果产生进位,则设置F0标志;否则,清除F0标志。解:CLRCMOVA.30HSUBBA,#0F7HMOV30H,AJCL0SETBF0SJMP$L0:CLRF024、如果30H内容等于数80H,则,P1.0置位;否则,P1.0清零。保持其它R和M不变。解:MOVA,30HCJNEA,80H,L0SETBP1.0SJMP$L0:CLRP1.025、改变30H、31H单元内容为乘以2后的值,如果产生进位,则,工作寄存器换用寄存器组1。解:CLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,AJNCCONCLRRS1SETBRS0CON:……………..26、改变30H、31H单元内容为除以2后的值,如果余数为1,则工作寄存器换用寄存器组3。解:MOVA,31HCLRCRRCAMOV31H,AMOVA,30HRRCAMOV30H,AJNCL0SETBRS1SETBRS0L0:…………….27、已知晶振频率为8MHZ,编一个子程序,延时150微秒。保持其它R和M不变。解:DELAY:MOVR7,#16HNOPL1:NOPNOPNOPNOPDJNZR7,L1RET28、已知晶振频率为6MHZ,编一个子程序,延时30微秒。保持其它R和M不变。解:DELAY:MOVR7,#07HL1:DJNZR7,L1RET29、将从10H开始的64单元内容异或数5AH。保持其它R和M不变。解:MOVR2,#64HMOVR0,#10HMOVA,#5AHL00P:XPLA,@R0MOV@R0,AINCR0DJNZR2,LOOP30、将由R0寻址的32个单元内容清为零。保持其它R和M不变。解:CLRAMOVR2,#32HLOOP:MOV@R0,AINCR0DJNZR2,LOOP31、将由R0寻址的32个单元内容移到R1寻址的单元中。保持其它R和M不变。解:MOVR2,#32HLOOP:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR2,LOOP32、将由R0寻址的16个单元内容改为与R1寻址的单元相“异或”后的值。保持其它R和M不变。解:MOVR2,#16HLOOP:MOVA,@R0XPLA,@R1MOV@R0,AINCR0INCR1DJNZR2,LOOP33、将由R0寻址的32个单元内容改为与R1寻址的单元相“或”后的值。保持其它R和M不变。解:和32是一样的。34、将由DPTR寻址的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。解:MOVR7,#100LOOP:MOVXA,@DPTRJNFINDZINCDPTRDJNZR7,LOOPSJMP﹩FINDZ:MOV30H,DPLMOV31H,DPH35、将从5C00H开始的100个单元内容移到5E00H开始的单元中。解:MOVR7,#100HMOVDPTR,#5C00HMOVP2,#5EHMOVR0,#00HLOOP:MOVXA,@DPTRMOVX@R0,AINCDPTRDJNZR7,LOOP36、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“或”后的值。解:MOVR7,#100MOVDPTR,#5C00HMOVP2,#5EHMOVR0,#00HLOOP:MOVXA,@DPTRORLA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR7,LOOP37、将从5C00H开始的100个单元内容改为与5E00H开始的单元相“异或”后的值。解:和36一样,只需改为XRL38、将从5C00H开始的100个单元中找出第一个内容为00H的单元,其地址存入30H、31H。解:MOVR2,#100MOVDPTR,#5C00HL1:MOVXA,@DPTRJZL0INCDPTRDJNZR2,L1SJMP﹩L0:MOV30H,DPLMOV31H,DPH39、将从5C00H开始的100个单元中找出第一个内容不为00H的单元,其地址存入30H、31H。解:和38换成JNZ即可40、将从5C00H开始的100个单元中找出最大的数和存该数的单元,数存入40H,地址存入30H,31H。解:MOVR7,#100MOVDPTR,#5C00HMOV40H,#0LOOP:MOVXA,@DPTRCJNEA,40H,LIL1:JCL2MOV40H,AMOV30H,DPLMOV31H,DPHL2:INCDPTRDJNZR7,LOOPSJMP﹩41、将从5C00H开始的100个单元中找出最小的数和存该数的单元,数存入40H,地址存入30H,31H。解:MOVR7,#100MOVDPTR,#5C00HMOV40H,#0FFHLOOP:MOVXA,@DPTRCJNEA,40H,LIL1:JNCL2MOV40H,AMOV30H,DPLMOV31H,DPHL2:INCDPTRDJNZR7,LOOPSJMP﹩42、将从5C00H开始的100个单元中找出第一个偶数和存该数的单元,数存入40H,地址存入30H,31H。解:MOVR7,#64HMOVDPTR,#5C00HLOOP:MOVXA,@DPTRJNBACC.0,L0INCDPTRDJNZR7,L1SJMP﹩L0:MOV40H,AMOV30H,DPLMOV31H,DPH43、将从5C00H开始的100个单元中找出第一个奇数和存该数的单元,数存入40H,地址存入30H,31H。解:和42是一样的,改为JB44、编查表子程序,按40H中的索引数查出存在5C00H中的100个三字节数,存入30H,31H,32H。45、编多分支转移程序段,按40H中的索引数,取转移地址表中的两字节地址,进行跳转。46、将R0指向的三字节带符号数取负后存回。解:MOVA,@R0CPLAADDA,#01HMOV@R0,AINCR0MOVA,@R0ADDCA,#00HMOV@R0,AINCR0MOVA,@R0ADDCA,#00HMOV@R0,A47、将R0指向的三字节数取R2R3乘以R4的积。48、将R0指向的二字节带符号数乘以2,校验是否溢出。解:CLRCMOVA,@R0RLCAMOV@R0,AINCR0MOVA,@R0RLCAMOV@R0,AXRLC,ACC.7JCOVERFLAW实验编程1.将20H位单元送给B的最高位。解:CLRCMOVC,20HMOVB.7,C2.将程序存储器2000H单元内容送往片外RAM1000H单元。解:CLRAMOVDPTR,#2000HMOVCA,@A+DPTRMOVP2,#10HMOVR0,#00HMOVX@R0,A3.R1与上P2和
本文标题:福建农林大学微机原理.
链接地址:https://www.777doc.com/doc-6196289 .html