第3章单片机的汇编语言与程序设计题解.doc

上传人:豆**** 文档编号:17675867 上传时间:2022-05-25 格式:DOC 页数:6 大小:160.50KB
返回 下载 相关 举报
第3章单片机的汇编语言与程序设计题解.doc_第1页
第1页 / 共6页
第3章单片机的汇编语言与程序设计题解.doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《第3章单片机的汇编语言与程序设计题解.doc》由会员分享,可在线阅读,更多相关《第3章单片机的汇编语言与程序设计题解.doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流第3章单片机的汇编语言与程序设计题解.精品文档.第3章 单片机的汇编语言与程序设计习题1MCS-51单片机有哪几种寻址方式?适用于什么地址空间?答:MCS-51单片机有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位寻址、相对寻址。直接寻址方式:操作数的地址由指令直接给出,适用于片内RAM的所有地址空间;如MOVA,68HMOVA,PSW寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FH的32个字节,用R0,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节中的

2、其中8个,还有累加器A,以及乘除法指令中的A和B寄存器,位寻址方式中的布尔累加器C;MOVA,R1MULABINCDPTR寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指定的寄存器中,适用于片内RAM的全部空间,其中52系列中的80H至FFH只能用寄存器间接寻址;如MOVA,R0MOVA,R1MOVXA,DPTR立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元赋值,也可用16位立即数对DPTR赋值; 如MOVA,#0E2HMOVDPTR,#2000H变址寻址方式:以DPTR或PC作为基地址寄存器,以累加器A作为变址寄存器,将基址寄存器与变址寄

3、存器的内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器ROM,仅有三条指令如下:MOVCA,A+DPTRMOVCA,A+PCJMPA+DPTR位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内RAM中地址20H至2FH中的16个字节中的128个位地址空间和80H至FFH中地址中可以被8整除的所有SFR中的每个位地址空间;如MOVC,7FHMOVF0,CMOVC,ACC.7相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量,其转移目标在当前指令-128至127字节范围内的地址空间。如SJMPSTARTHERE:SJMPHERE;等效于:SJMP$2

4、MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是否为零?答:MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,判断某内部数据单元的内容是否为零是能通过取数到A累加器,再判断A中的每一位是否为零来确定其值是否为零。3编程将内部RAM的20H-30H单元内容清零。解:设一个片内RAM指针R0,先指向首地址20H,通过累加器A清零,然后采用间接寻址方式依次将A中的零值传送到指针所指的片内RAM单元,每传送一个字节,地址指针加1,直到达到地址为30H或达到计数器规定的17个字节为止。程序1:MOVR0,#20H;设地址指针初值CLRA;累加器清0

5、CONT:MOVR0,A;置0指针所指单元INCR0;地址指针加1CJNER0,#31H,CONT;指针未超过终点则继续SJMP$;暂停程序2:MOVR0,#20H;设地址指针初值CLRA;累加器清0MOVR7,#17;计数器赋初值,从20H到30H共17个字节CONT:MOVR0,A;置0指针所指单元INCR0;地址指针加1DJNZR7, CONT;计数器减1,非0,则继续SJMP$;暂停4编程查找内部RAM的32H41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为0FFH,否则将50H单元清零。解:设一个片内RAM指针R0,先指向首地址32H,比较R0与#0AAH,若相等

6、,则退出循环,给50H单元赋0FFH,若不相等,则R0加1为继续比较下一个字节做准备,直到达到地址为41H或达到计数器规定的16个字节为止还没找到,则给50H单元赋00H程序1:MOVR0,#32H;设地址指针初值CONT:CJNER0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMPDOWN;转存到保存结果处NEXT:INCR0;修改地址指针CJNER0,#42H,CONT;若指针未越过终点,则继续MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H单元SJM

7、P$;暂停END程序2:MOVR7,#16;计数器赋初值,从20H到30H共16个字节MOVR0,#32H;设地址指针初值CONT:CJNER0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMPDOWN;转存到保存结果处NEXT:INCR0;修改地址指针DJNZR7,CONT;计数器减1,非0,则继续MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H单元SJMP$;暂停END5查找20H4FH单元中出现00H的次数,并将查找结果存入50H单元。解:从20H到4

8、FH共48个字节MOVR7,#48;字节计数器赋初值MOVR0,#20H;设地址指针初值CONT:CJNER0,#00H,NEXT;比较查找值与指针所指单元的值,不相等转移INCR6;相等,0的个数计数器加1NEXT:INCR0;修改地址指针DJNZR7,CONT;计数器减1,非0,则继续MOV50H,R6;保存O的个数计数值到50H单元SJMP$;暂停ENDEND6已知A=83H,R0=17H,(17H)=34H,写出下列程序段执行之后的A中的内容。 ANLA,#17H ORL17H,A XRLA,R0 CPLAEND答:ANLA,#17H;A=03HORL17H,A ;(17H)=0011

9、 0100 0000 0011=0011 0111 XRLA,R0;A= 0000 0011 0011 0111 =0011 0100 CPLA;A=1100 10117已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来达到,如果要0.1s,即100ms,也就是100000us,所以需要机器周期数达到100000。要延时达到1S,可通过对延时为0.1秒的子程序调用10次来实现。DELAY100MS:MOV R6,#200 ;1个机器周期D1: MOV R7,#250 ;1个

10、机器周期D2:NOP;1个机器周期DJNZ R7,D2 ;2个机器周期,3*251=753DJNZ R6,D1 ;2个机器周期,(1+753+2)*132=99792RET ;2个机器周期,1+99792+2=99795,约100msDELAY1S:MOVR7,#10;计数10次1LOOP:ACALLDELAY100MS;延时100ms子程序99795+2DJNZR7,LOOP;未达到10次则继续10*(2+99795+2)RET;返回2+10*(2+99795+2)=9979928内部RAM从20H单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7

11、E01H开始的单元,并将长度存入7E00H单元。解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR,计数器用R7MOVR7,#0;字节计数器赋初值MOVR0,#20H;设片内RAM地址指针初值MOVDPTR,#7E01H;设片外RAM地址指针初值CONT:MOVA,R0;取片内RAM中的一个字节MOVXDPTR,A;存入片外RAM指针所指单元INCR7;长度计数器加1INCR0;片内RAM地址指针加1INCDPTR;片外RAM地址指针加1CJNEA,#0DH,CONT;未达到结束标志MOVA,R7;取块计数长度值MOVXDPTR,A;保存SJMP$;暂停END9内部RAM从DA

12、TA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。解:R7计数,R6保存累加和高8位,R0用作地址指针ORG0000HLJMPMAIN ORG100HSUMEQU30HDATAAEQU40HMAIN:MOVR7,#10;字节计数器赋初值MOVR0,#DATAA;设片内RAM地址指针初值CLRA;累加器清0MOVR6,A;累加结果的高8位CONT:ADDA,R0;加RAM中的一个字节到ACCDA AJNCNEXT;若无进位则不用管高8位INCR6;有进位,高8位加1NEXT:INCR0;片内RAM地址指针加1DJNZR7,CONT;未完继续MOVSUM,

13、A;保存低8位MOVSUM+1,R6;保存高8位SJMP$;暂停END10内部RAM从DATA1和DATA2单元开始处存放着两个等长的数据块,数据块的长度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7LENEQU10DATA1EQU30HDATA2EQU40HRESULTEQU50HMOVR7,#LEN;字节计数器赋初值MOVR0,#DATA1;设片内RAM地址指针初值MOVR1,#DATA2;设片外RAM地址指针初值CONT:MOVA,R0;取片

14、内RAM R0所指的的一个字节MOV7FH,R1;将R1所指单元内容取到片内RAM地址7FH中CJNEA,7FH,NOEQ;比较,不相等则结束INCR0;DATA1 RAM地址指针加1INCR1;DATA2 RAM地址指针加1DJNZR7,CONT;未完,继续MOVA,#0FFH;相等,准备写入FFHSJMPDOWN;转写入结果处NOEQ:MOVA,#0;不相等,准备写入00HDOWN:MOVRESULT,A;保存比较结果标志SJMP$;暂停END11编制程序,将内部RAM中M1、M2、M3和M4单元中的无符号数xl、x2、x3和x4相加,并把和存入RO和R1(R0中为高8位)中。解:M1EQU30HM2EQU40HM3EQU45HM4EQU4FHMOVA,M1;取第一个数ADDA,M2;与第二个数相加JNCNEXT1;如果无进位,则转移至第三个相加MOVR0,#1;有进位,高8位置1NEXT1:ADDA,M3;与第三个数相加JNCNEXT2;没有进位,则转至第四个数相加INCR0;有进位,高8位加1NEXT2:ADDA,M4;与第四个数相加JNCNEXT3;没有进位,则转至结束INCR0;有进位,高8位再加1NEXT3:MOVR1,A;低8位保存到R1SJMP$;暂停END

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁