单片机原理编程题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

.教育资料一.编程题(每小题8分,共16分)1.设在内RAM40H开始的存储区有若干个字符和数字,已知最后一个为字符“$“(并且只有一个,试统计这些字符数字的个数,结果存入30H单元中。参考程序:ORG0000HSTART:MOVR1,#40H;R1作为地址指针CLRA;A作为计数器LOOP:CJNE@R1,#24H,NEXT;与“$”号比较,不等转移SJMPNEXT1;找到“$“结束循环NEXT:INCA;计数器加1INCR1;指针加1SJMPLOOP;循环NEXT1:INCA;再加入”$”这个字符MOV30H,A;存结果END2.试编一程序,分别统计在内部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。参考程序:ORG0000HMOV51H,#0HMOV52#,#0HMOVR1,#30HMOVR0,#20HMOVA,@R1INCR1ANLA,#01HJZLOOP1INC51HSJMPLOOP2LOOP1:INC52HLOOP2:DJNZR0,LOOP3RET3.用8XX51的P1口接8个LED发光二极管,由INT0接一消抖按键开关,开始P1.0的LED亮,以后由INT0按键每中断一次,下一个LED亮,顺序下移,且每次只一个LED亮,周而复始。请编制程序。参考程序:.教育资料ORG0000HAJMPMAINORG0003HRLA;中断服务MOVP1,ARETIMAIN:MOVA,#0FFHMOVP1,A;第一灯亮SETBEASETBEX0;允许INT0外部中断SETBIT0;中断触发方式为下降沿触发SJMP$;等待中断4.设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。MOV30H,#0MOV31H,#0MOV32H,#0MOVDPTR,#2000HMOVR1,#100L4:MOVXA,@DPTRINCDPTRCJNEA,#0,L1INC32HSJMPL2L2:JCL3INC30HSJMPL2L3:INC31HL2:DJNZR1,L4SJMP$5.编程将内部数据存储器20H~24H单元压缩的BCD码转换成ASCⅡ存放在于25H开始的单元。参考程序:注意压缩的BCD码为一个字节占两位BCD码。ORG0000HMOVR7,#05H;R7为转换字节数MOVR0,#20H;R0为源操作数地址MOVR1,#25H;R1为目的操作数地址.教育资料NE:MOVA,@R0ANLA,#0FH;先取低位BCD码ADDA,#30H;将BCD码转换成ASCⅡ码MOV@R1,AINCR1MOVA,@R0ANLA,#0F0H;取高位BCD码SWAPA;半字节交换ADDA,#30H;将高位BCD码转换成ASCⅡ码MOV@R1,AINCR0INCR1DJNZR7,NESJMP$END编程题,另外加上第4章课件上的例子。三、程序解释(每小题5分,共10分)1.ORG0200HMOVDPTR,#1000HMOVR0,#20HLOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0CJNER0,#71H,LOOPSJMP$程序功能:把片外数据存储器1000H~1050H中的内容传送到片内数据存储器20H~70H中。2.ORG0200HMOVA,R0ANLA,#0FHMOVDPTR,#TABMOVCA,@A+DPTRMOVR0,A.教育资料SJMP$TAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H;0~9的ASCⅡ码DB41H,42H,43H,44H,45H,46H;A~F的ASCⅡ码程序功能:利用查表的方法实现RO中的十六进制数转换为ASCⅡ码对每小题程序中划线的指令含义(或指令作用)进行解释,并说明程序的作用。*********************************1.程序解释ORG100HMOVA,R0;R0的内容送AANLA,#0FHMOVR1,AMOVA,R0SWAPA;A的内容高低4位交换ANLA,#0FHMOVR2,ASJMP$;等待END该程序的作用是:将原R0中数据按照高低4位分成两个字节,低位字节保存在R1中,高位字节保存到R2中。2.程序解释ORG30HMOVR0,#data1;data1送R0MOVR1,#data2MOVR2,#2CLRCLOOP:MOVA,@R0SUBBA,@R1;(A)-(C)-((R1))→AMOV@R0,AINCR0INCR1DJNZR2,LOOP;(R2)-1不等于零,跳LOOP处SJMP$END该程序的作用是:将data1中的双字节数据减去data2中的双字节数据,结果保存到data1中3.程序解释ORG30HVARDATA30HFUNCDATA31HMOVA,VAR;30单元的内容送A.教育资料JZDONE;A为零转移JNBACC.7,POSI;A的最高位为0(正数)转移MOVA,#0FFH;提示:0FFH表示-1SJMPDONEPOSI:MOVA,#01HDONE:MOVFUNC,ASJMP$END该程序的作用是:判断30H单元中的内容,结果放在31H单元中。大于0放1,小于0放-1,等于零放0。4.程序解释ORG100HMOVA,R3RLA;A左循环一位(即乘2)MOVDPTR,#BRTAB;绝对转移地址表起始地址送DPTRJMP@A+DPTR;(PC)=(A)+(DPTR)……BRTAB:AJMPROUT000AJMPROUT001AJMPROUT002……AJMPROUT127END该程序的作用是:本程序完成128分支转移操作,根据R3中的数值转移到相应的128个分支程序中。5.程序解释ORG0030HMOVR0,#22H;立即数22H送R0MOV@R0,#00HINCR0;R0中的内容加1MOV@R0,#01HINCR0MOV@R0,#02H;02H送24H单元SJMP$END该程序的作用是:向单片机内部RAM的22H,23H,24H单元分别送数据00,01,02。6.程序解释ORG0030HMOVA,20HMOVB,21H.教育资料DIVAB;A除以BMOV31H,A;商送30H单元IMOV31H,B;余数送31H单元SJMP$END该程序的作用是:将20H单元中有一个二进制数除以21H单元中二进制数,商保存到30H单元,余数保存到31H。7.程序解释CHENGJIDATA1000HGRADADATA20HGRADBDATA21HMOVGRADA,#00HMOVGRADB,#00HMOVR2,#100MOVDPTR,#CHENGJI;1000H送DPTRLOOP:MOVXA,@DPTRCJNEA,#60,LOOP1LOOP1:JNCNEXT1INCGRADB;21H单元的内容加1SJMPNEXTNEXT1:INCGRADANEXT:INCDPTRDJNZR2,LOOP;(R2)-1→R2不为零,转移SJMP$END该程序的作用是本程序完成对100个数(如100个学生成绩)的过滤统计,成绩在60以上的学生统计到GRADA,60的学生统计到GRADB。8.程序解释LENDATA20HSUMDATA21HBLOCKDATA22HCLRA;A清0MOVR2,LENMOVR1,#BLOCKLOOP:ADDA,@R1;(A)+((R1))→AINCR1CHECK:DJNZR2,LOOP;LEN个单元未加完,继续MOVSUM,ASJMP$END该程序的作用是:完成BLOCK单元开始的LEN单元中数据个数的累加,累加结果保存到SUM单元中。9.程序解释.教育资料XXDATA40HYYDATA41HMOVA,XXJZDONEMOVR0,#0FFH;提示:0FFH表示-1JNBACC.7,NEG;若A0,则转向NEGMOVR0,#01H;01送R0NEG:MOVA,R0DONE:MOVYY,A;(A)送41H单元SJMP$END该程序的作用是:判断40H单元中的内容,结果放在41H单元中。大于0放1,小于0放-1,等于0放0。10.程序解释ONEDATA30HTWODATA31H;TWO地址定义为31HMAXDATA32HCLRC;C清零MOVA,ONESUBBA,TWO;(A)-(31H)结果送AJNCXMAXYMAX:MOVA,TWOSJMPDONEXMAX:MOVA,ONEDONE:MOVMAX,A该程序的作用是:本程序完成ONE和TWO的两个单元中的数的比较,大数存入MAX单元中。11.程序解释BLOCK1DATA20HBLOCK2DATA40HMOVR0,#BLOCK1MOVR1,#BLOCK2MOVR2,#03CLRCLOOP:MOVA,@R0;被加数送AADDCA,@R1;带进位加法MOV@R0,A;和送(R0)INCR0INCR1DJNZR2,LOOP1SJMP$.教育资料END该程序的作用是:内部RAM中BLOCK1(20H)开始的三字节数与BLOCK2(40H)开始的两个三字节数相加,和数存放到BLOCK1开始的单元。12.程序解释SHIFT:MOVDPTR,#TABJMOVA,R2RLA;A乘2ADDA,R2JMP@A+DPTR;跳转到(A)+(DPTR)→PCTABJ:LJMPPRG0;跳转到PRG0LJMPPRG1……LJMPPRGN该程序的作用是:根据内部RAM中R2数据转向不同的子程序,R2=0转PRG0,R2=1转PRG1,…R2=N转PRGN13.程序解释START:CLRAMOVR2,#10MOVR1,#21H;21H送R1NEXT:ADDA,@R1;(A)+((R1))→AINCR1DJNZR2,NEXT;未加完,跳转MOV22H,ASJMP$END该程序的作用是:完成21H单元开始的10个数据块的累加,结果保存到22H单元。14.程序解释LENDATA20HMAXDATA21HADDRDATA30HMOVMAX,#00HMOVR0,#ADDRLOOP:MOVA,@R0CJNEA,MAX,NEXT1;(A)与(MAX)比较,不等去NEXTNEXT1:JCNEXT;C=1去NEXTMOVMAX,ANEXT:INCR0;R0内容加1DJNZLEN,LOOPSJMP$END该程序的作用是:内部RAM中ADDR(30H)开始的x个数据的比较,将最大的数字送MAX.教育资料单元。x由LEN(20H)单元给出。15.程序解释MOVA,R0ANLA,#0FH;0FH与A相与,结果送AMOVDPTR,#ASCTABMOVCA,@A+DPTR;查表MOVR0,A;查表结果存入R0SJMP$ASCTAB:DB‘0’,‘1’,‘2’,‘3’,‘4’DB‘5’,‘6’,‘7’,‘8’,‘9’DB‘A’,‘B’,‘C’,‘D’,‘E’,‘F’END该程序的作用是:将R0中低4位的0~F的十六进制数据转换成ASCTAB中的编码存放到R0中。16.程序解释ORG100HMERG:MOVXA,@R0;读片外RAM第一字节ANLA,#0FHSWAPA;高低4位相互交换MOVB,AINCR0MOVXA,@R0ANLA,#0FHORLA,B;A或B,结果送ADECR0MOVX@R0,ASJMP$END该程序的作用是:将R0指向的两个字节的低4位和并为一个字节,保存到原R0指向的存储单元。17.程序解释START:MOVDPTR,#DTATABMOVA,R4;(R4)→AADDA,DPL;(DPL)+(A)→AMOVDPL,ACLRA;清AADDCA,DPHMOVDPH,ACLRAMOVCA,@A+DPTRMOVR5,ARETDTATAB:DB……;元素表格,高字节在前.教育资料DB……END该程序的作用是:根据R4中的内容(元素序号)在DTATAB表格中查表,将查表得到的数据存入R5中。18.程序解释START:MOVA,R0ACALLSQR;调用子程SQRMOVR2,AMOVA,

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功