为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 51单片机测验常见试题分析题

51单片机测验常见试题分析题

2021-06-21 2页 doc 75KB 11阅读

用户头像 个人认证

洛衣含

暂无简介

举报
51单片机测验常见试题分析题51单片机测验常见试题分析题————————————————————————————————作者:————————————————————————————————日期:四、程序分析及编程1.设(A)=04H,(CY)=1,写出下列各条指令的结果。RLA;(A)=08HRRA;(A)=02HRLCA;(A)=09HRRCA;(A)=82H2.设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1,写出下列各条指令的结果。MOVA,R0(A)=30H(R0)=30HXCHA,R0(A)=30H(R0)=30HXCHD...
51单片机测验常见试题分析题
51单片机测验常见试题分析题————————————————————————————————作者:————————————————————————————————日期:四、程序分析及编程1.设(A)=04H,(CY)=1,写出下列各条指令的结果。RLA;(A)=08HRRA;(A)=02HRLCA;(A)=09HRRCA;(A)=82H2.设(A)=7AH,(R0)=30H,(30H)=A5H,(CY)=1,写出下列各条指令的结果。MOVA,R0(A)=30H(R0)=30HXCHA,R0(A)=30H(R0)=30HXCHDA,@R0(A)=A5H(R0)=30H(30H)=30HADDA,#30H(A)=D5H(CY)=1ADDCA,30H(A)=06H(CY)=1SUBBA,#30H(A)=D5H(CY)=13.下列程序段的功能是什么?PUSHAPUSHBPOPAPOPB答:交换A、B的内容4.已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:请问:A=(),SP=(),(51H)=(),(52H)=(),PC=()。POPDPHPOPDPLMOVDPTR,#4000HRLAMOVB,AMOVCA,@A+DPTRPUSHAMOVA,BINCAMOVCA,@A+DPTRPUSHARETORG4000HDB10H,80H,30H,50H,30H,50H答:(A)=50H,(SP)=50H,(51H)=30H,(52H)=50H,(PC)=5030H5.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。:ANLA,#17HORL17H,AXRLA,@R0CPLA答:0CBH6.如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后则:DPH=(),DPL=(),SP=():POPDPHPOPDPLPOPSP答:DPH=3CH,DPL=5FH,SP=4FH7.假定,SP=60H,A=30H,B=70H,执行下列指令后,SP的内容为(),61H单元的内容为(),62H单元的内容为()。PUSHAPUSHB答:62H,30H,70H8.计算下面子程序中指令的偏移量和程序执行的时间(晶振频率为12MHz)。MOVR3,#15H;1个机器周期DL1:MOVR4,#255;1个机器周期DL2:MOVP1,R3;2个机器周期DJNZR4,DL2;2个机器周期DJNZR3,DL1;2个机器周期RET;2个机器周期答:15348us析:((2+2)×255+1+2)×15+1+2=15348us9.假定A=83H,(R0)=17H,(17H)=34H,执行以下指令后,A的内容为()。ANLA,#17HORL17H,AXRLA,@R0CPLA答:0CBH10.如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:DPH内容为(),DPL内容为(),SP内容为()。POPDPH;POPDPL;POPSP;答:(DPH)=3CH,(DPL)=5FH,(SP)=50H11.假设外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A中的内容为()。MOVP2,#20HMOVR0,#00HMOVXA,@R0答:累加器A中的内容为(80H)12.阅读下列程序段并回答问题。(1).该程序执行何种操作?(2).已知初值(60H)=23H,(61H)=61H,运行程序后62H内容()CLRCMOVA,#9AHSUBBA,60HADDA,61HDAAMOV62H,A答:1)、该程序是单字节BCD码运算,是将(61H)—(60H)→62H2)、(62H)=38H13.试编写1个程序,将内部RAM中45H单元的高4位清0,低4位置1。答:MOVA,45HANLA,#0FHORLA,#0FHMOV45H,A14.试编写程序,查找在内部RAM的30H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H”;若未找到,则将51H单元置为“00H”。答:START:MOVR0,#30HMOVR2,#20HLOOP:MOVA,@R0CJNEA,#0AAH,NEXTMOV51H,#01HLJMPEXITNEXT:INCR0DJNZR2,LOOPMOV51H,#00HEXIT:RET15.编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10:1的矩形脉冲。解:根据题意,从P1.0输出的矩形脉冲的高低电平的时间为10:1,则高低电平的时间分别为363.63μs和36.37μs。如果系统采用6MHz晶振的话,,因此高低电平输出取整,则约为364μs和36μs。编写程序如下:ORG0000HLJMPMAINORG000BHLJMPIT0PMAIN:MOVTMOD,#02H;定时器/计数器T0为定时方式2MOVTL0,#4AH;定时364μs初值赋值SETBTR0;启动T0,开始计数SETBET0;允许T0中断SETBEA;CPU开中断SETBP1.0WAIT:AJMPWAITIT0P:CLREACLRP1.0;关中断MOVR0,#9DLY:DJNZR0,DLY;延时26μsMOVTL0,#4AH;定时364μs初值赋值SETBP1.0SETBEARETI16.设在外部RAM中有三个连续单元2001H,2002H,2003H,其中2001H和2002H单元中分别存放两个8位无符号二进制数,比较这两个数的大小,然后将大数送到2003H单元。COMPARE:MOVDPTR,#2001HMOVXA,@DPTRMOVR0,AINCDPTRMOVXA,@DPTRSUBBA,R0JNCLOOPMOVA,R0INCDPTRMOVX@DPTR,ARETLOOP:INCDPTRMOVX@DPTR,ARET17.将内部RAM40H开始的10个单元,搬移到50H开始的10个单元中。MOVR0,#40HMOVR1,#50HMOVR2,#10LOOP1:MOVA,@R0MOV@R1,AINCR0INCR1DJNZR2,LOOP1RET18.设单片机晶振频率为6MHz,使用定时器0,以工作方式2,在P1.5引脚输出一个周期为200us连续方波?解:MOVTMOD,#02HMOVTH0,#0CEHMOVTL0,#0CEHSETBTR0LOOP:JBCTF0,LOOP1AJMPLOOPLOOP1:CPLP1.019.编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程序如下:ORG0000HLJMPMAINORG000BHLJMPIT0PMAIN:JNBP1.0,MAINMOVTMOD,#05H;定时器/计数器T0为计数方式1SETBTR0;启动T0,开始计数SETBET0;允许T0中断SETBEA;CPU开中断WAIT:JBP1.2,WAITCLREACLRTR0MOVR1,TH0MOVR0,TL0AJMP$IT0P:INCR2RETI20.试编写一个程序(例如将05H和06H拼为56H),设原始数据放在片外数据区2001H单元和2002H单元中,按顺序拼装后的单字节数放入2002H。答:编程思路:首先读取2001H的值,保存在寄存器A中,将寄存器A的高四位和低四位互换,再屏蔽掉低四位然后将寄存器A的值保存到30H中,然后再读取2002H的值,保存在寄存器A中,屏蔽掉高四位,然后将寄存器A的值与30H进行或运算,将运算后的结果保存在2002H中。ORG0000HMAIN:MOVDPTR,#2001H;设置数据指针的初值MOVXA,@DPTR;读取2001H的值SWAPAANLA,#0F0H;屏蔽掉低四位MOV30H,A;保存AINCDPTR;指针指向下一个MOVXA,@DPTR;读取2002H的值ANLA,#0FH;屏蔽掉高四位ORLA,30H;进行拼装MOVX@DPTR,A;保存到2002HEND21.编写程序,将外部数据存储器中的4000H—40FFH单元全部清零。解:本题主要考察了对外部数据块的写操作;编程时只要注意循环次数和MOVX指令的使用就可以了。ORG0000HMAIN:MOVA,#0;送预置数给AMOVR0,#0FFH;设置循环次数MOVDPTR,#4000H;设置数据指针的初值LOOP:MOVX@DPTR,A;当前单元清零INCDPTR;指向下一个单元DJNZR0,LOOP;是否结束END22.编写程序,采用8255A的C口按位置位/复位控制字,将PC7置0,PC4置1,(已知8255A各端口的地址为7FFCH-7FFFH)。解:本题主要考察对8255A的C口的操作。其方式控制字的高位为0时,低四位对C口进行置位。由题目我们得到了方式控制字的地址为7FFFH。ORG0000HMAIN:MOVDPTR,#7FFFH;控制字寄存器地址送DPTRMOVA,#0EH;将PC7置0MOVX@DPTR,AMOVA,#09H;将PC4置1MOVX@DPTR,AEND23.试编写逻辑运算程序,功能为:F=X(Y+Z);F=XYZ其中FXYZ均为位变量,依次存在以30H为首址的位寻址区中。解(1):FBIT30HXBIT31HYBIT32HZBIT33HLOG1:MOVC,Y;Y→CORLC,Z;(Y+Z)→CANLC,X;X(Y+Z)→CMOVF,C;X(Y+Z)→FRET;解(2):LOG2:MOVC,Y;Y→CANLC,Z;YZ→CANLC,/X;XYZ→CCPLC;XYZ→CMOVF,C;XYZ→FRET;24.试编写程序,统计内RAM30H~50H单元中FFH的个数,并将统计结果存51H。解:编程如下:LOKF:MOV51H,#0;计数器清零MOVR0,#30H;置数据区首址LOP:MOVA,@R0;读数据CPLA;取反JNZLP1;判FFH,非FFH,转INC51H;FFH,计数LP1:INCRO;指向下一数据CJNER0,#51H,LOP;判循环RET25.试编写程序,找出外RAM2000H~200FH数据区中的最小值,并放入R2中。解:编程如下:SECH:MOVDPTR,#2000H;置外RAM数据区首址MOVR2,#OFH;置外RAM数据区长度(N-1)MOVXA,@DPTR;读第一个数据MOVB,A;假设第一个数据为最小值SLOP:INCDPTR;指向下一个数据MOVXA,@DPTR;读下一个数据CJNEA,B,SLP1;新数据与最小值比较SLP1:JNCSLP2;新数据≥最小值,判断循环MOVB,A;新数据<最小值,新数据→BSLP2:DJNZR2,SLOP;判循环结束否?MOVR2,B;最小值→R2RET26.已知ROM中存有0~100的平方表,首地址为TABDS,试根据累加器A(≤100)中的数值查找对应的平方值,存入内RAM31H30H(双字节)。解:编程如下:DSQR:MOVDPTR,#TABDS;置ROM平方表首地址ADDA,Acc;A×2→AMOVCA,@A+DPTR;读平方值高8位MOV31H,A;平方值高8位→31HINCA;指向平方值低8位MOVCA,@A+DPTR;读平方值低8位MOV30H,A;平方值低8位→30HRETTABDS:DW0,0,0,1,0,4,0,9,0,16,0,25,…,27H,10H;0~100平方表(双字节)27.试编程实现3字节无符号数加法:R7R6R5+R4R3R2→@R0(3个连续单元)。解:编程如下:ADD3:MOVA,R5ADDA,R2;低位加MOV@R0,A;存低位和INCR0;修改存储单元MOVA,R6;ADDCA,R3;中位加MOV@R0,A;存中位和INCR0;修改存储单元MOVA,R7;ADDCA,R7;高位加MOV@R0,A;存高位和RET28.试编写程序,将外部RAM2000H~20FH数据块,传送到3000H~30FFH区域。解:编程如下:DMOV:MOVDPTR,#2000H;置源数据区首址MOVR2,#00H;置数据长度(256个)DLOP:MOVXA,@DPTR;读数据MOVDPH,#30H;置目的数据区高8位地址MOVX@DPTR,A;存数据MOVDPH,#20H;置源数据区高8位地址INCDPTR;修改源数据区地址DJNZR2,DLOP;判循环结束否?RET29.从内RAM20H单元开始存有一组带符号数(补码),其个数已存放在1FH单元。要求统计其中大于0,等于0和小于0的数的个数,并把统计结果分别存入ONE,TWO,THREE3个单元。解:编程如下:ONEEQU30HTWOEQU31HTHREEEQU32HSTOR:MOVR0,#20H;置数据区首址SLOP:MOVA,@R0;读数据JZLP1;数据=0,转JBAcc.7,LP2;数据<0,转INCONE;数据>0,ONE单元加1LP0:INCRO;指向下一数据DJNZ1FH,SLOP;判统计结束否?未结束循环RET;统计结束,TWO单元加1LP1:INCTWO;数据=0,TWO单元加1SJMPLPO;返回循环体LP2:INCTHREE;数据<0,THREE单元加1SJMPLPO;返回循环体30.设在内部数据存储器中存放有20个字节数据,其起始地址为M。试编写程序,找出数0AH的存放地址,并送入N单元。若OAH不存在,则将N单元清零。解:程序如下:MEQU30HNEQU2FHSECH:MOVR0,#MMOVR1,#20LOOP:CJNE@R0,#0AH,LP1MOVN,R0RETLP1:INCR0DJNZR1,LOOPMOVN,#0RET31.试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。解:编程如下:LOK1:MOV21H,#OMOVR2,#08HMOVA,20HLOP:RLCAJNCLP1JNC21HLP1:DJNER2,LOPRET32.试编写统计数据区长度的程序,设数据区从内RAM30H开始,该数据区以0结束,统计结果送入2FH中。解:编程如下:ADUP:MOV2FH,#0MOVR0,#30HALOP:MOVA,@R0JNZLP1RETLP1:INC2FHINCR0SJMPALOP33.从内RAM30H单元开始存放着一组无符号数,其个数存在21H单元中。试编写程序,找出其中最小的数,并将其存入20H单元中。解:编程如下:SECH:MOVRO,#3OHMOV20H,#FFHSLOP:MOVA,@R0CJNEA,20H,NEXTNEXT:JNCSLP1MOV20H,ASLP1:INCR0DJNZ21H,SLOPRET34.用程序实现c=a2+b2。设a2b2存于内RAM,AA,BB单元;c为双字节,存于内RAMCC,DD单元。解:该题可用于程序来实现。通过两次调用查平方表子程序来得到a和b,并在主程序中完成相加。编程如下:AAEQU40HBBEQU41HCCEQU42HDDEQU43HFUNC:MOVA,AALCALLDSQRMOVDD,AMOVCC,31HMOVA,BBLCALLDSQRADDA,DDMOVDD,AADDCA,CCMOVCC,ARET35.利用定时、计数器T1测量某正脉冲宽度,并存入内RAM31H30H。设fosc=12MHz,脉冲从P3.3引脚输入,宽度小于65536us。解:编程如下:PLUS:MOVTMOD,#90HMOVTH1,#0MOVTL1,#0JBP3.3,$SETBTR1JNBP3.3,$JBP3.3,$CLRTR1MOV31H,THOMOV30H,TLORET36.设在内部RAM中50H开始有连续的10个单元,求这10个单元之和,结果放在60H,61H,低位放在60H,高位在61H.解:程序编写如下:ORG0000HACALLADDTENWAIT:AJMPWAITADDTEN:MOVR0,50HMOVR1,#10MOVA,#00HMOV60H,AMOV61H,ALOOP1:ADDA,@R0INCR0MOV60H,AJCLOOP2DJNZR1,LOOP1RETLOOP2:MOVA,61H;ADDA,#01HDJNZR1,LOOP1RET
/
本文档为【51单片机测验常见试题分析题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索