单片机习题.ppt_第1页
单片机习题.ppt_第2页
单片机习题.ppt_第3页
单片机习题.ppt_第4页
单片机习题.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用 主讲 谢海明老师助教 王兴 第三章习题 一填空题 指令111 49条单 45条双 17条三7操作数本身 A B AB操作数本身 地址 R0 R1 DPTR 直接 DPTR PC A 程序存储器DPTR SP MOVX直接 立即 一填空题 10 80H11 68H12 68H13 62H 68H 36H14 41H 39H 88H15 0BFH 0 0 016 2D 1 1 017 26H 118 90H 06H 0 1 一填空题 19 16H 05H 0 020 06H 09H21 00H 96H 二选择题 1 42 33 44 2 第三题编程与问答题2 要访问一特殊功能寄存器和外部数据存储器应分别采用哪种寻址方式 答 直接寻址方式 寄存器寻址可用于访问特殊功能寄存器 位寻址方式可对特殊功能寄存器中的可位寻址位进行寻址 外部数据存储器应采用寄存器间接寻址方式 5 请写出能完成每一种操作的指令序列 将R0的内容传送到R1MOVAR0MOVR1A 将内部RAM20H单元的内容传送到R7MOVR720H 将外部RAM1000H单元的内容传送到内部RAM30H单元MOVDPTR 1000HMOVXA DPTRMOV30HA 将外部RAM1000H单元的内容传送到R1MOVDPTR 1000HMOVXA DPTRMOVR1A 6 阅读下面的程序 要求 说明程序的功能 写出涉及的寄存器及片内RAM单元的最后结果答 该程序是将内部RAM40H中的内容与41H的内容相加 和放在43H 42H中 指令执行后 A的内容为01H 42H的内容为5AH 43H的内容为01H 7 假设在内RAM30H和31H中存放有一个16位的无符号二进制数 高字节在高地址单元 请编写程序对该数乘2 再放回原单元 思路 对一个16位无符号二进制数进行乘2操作需要将此数分成两个8位二进制乘2操作 因为在MCS 51的指令系统中仅有的乘法运算指令只能进行8位无符号数的乘法运算 注 MULAB 该指令的功能是把累加器A和寄存器B中的两个8位无符号数相成 乘积又送回到A B 其中B中存放积的高位字节 A存放积的低位字节 乘法运算总对Cy清零 但不影响其他标志位 ORG1000HmovA30H movB 2 mulAB mov30HA mov32HB movA31H movB 2 mulAB ADDA32H mov31HA END START 8 写出16位数相加程序 设被加数存放在内RAM20H 21H单元 加数存放在22H 23H单元 并将结果存放在后续单元24H 25H中 要求低位数存放在低地址单元中 注 MCS 51的指令系统中只有8位数据的加法运算指令 在完成两个8位二进制的加法运算时被加数总是在累加器A中 而加数可以采用不同的寻址方式得到 其运算结果仍放在累加器A中 思路 首先完成20H和22H的加法运算 将结果存放在24H中 然后完成21H 23H和Cy的加法运算 将结果存放在25H中 ORG1000HCLRCMOVA20H ADDA22H MOV24HA MOVA21H ADDCA23H MOV25HA END START 9 试编写程序 采用 与 运算 判断内RAM20H单元的8位二进制数是正数还是负数 试根据30H中的值编写程序判断20H单元中数的两种情况 在30H中存放 0 代表正数 存放 1 代表负数 注 1 有符号数中通常最高位为 0 表示正数 最高位为1表示负数 2 正负数的判断条件 30H中存放 0 代表正数 存放 1 代表负数 3 选择的条件判断指令为JZ 59 ORG1000H movA 80 ANLA20H JZNEXT0 mov30H 1 SJMPNEXT1 NEXT0 mov30H 0 NEXT1 SJMP END START 10 从内RAM40H单元开始的区域内存有10个单字节十进制数 压缩的BCD码 试求它们的累加和 并将结果存放在内部RAM20H和21H单元中 注 在十进制调整指令DAA 52页 本指令的功能是对两个BCD码的和 存放在A 进行十进制调整 使A中的数据也为BCD码数 指令只影响Cy ORG1000HMOVR1 40H MOVR2 10 MOV20H 0 MOV21H 0 CLRCLoop MOVA R1 ADDA20H DAA MOV20HA MOVA21H ADDCA 0 MOV21HA INCR1 DJNZR2loop SJMP END START 11 编写程序 将内RAM从20H开始存放的16个数传送到从18H开始的单元中 ORG1000HmovR0 20H movR1 18H movR2 16 loop movA R0 mov R1A INCR0 INCR1 DJNZR2loop SJMP END START 12 编写程序 将内RAM从20H开始存放的16个数传送到从28H开始的单元中 ORG1000Hstart movR0 2FH movR1 37H movR2 16 loop movA R0 mov R1A DECR0 DECR1 DJNZR2loop SJMP END 13 编写程序 将片外RAM从2000H开始存放的8个数传送到片内RAM从30H开始的单元中 ORG1000HmovDPTR 2000H movR1 30H movR2 8 loop movxA DPTR mov R1A INCDPTR INCR1 DJNZR2loop SJMP END 14 已知从外部RAM0040H单元开始存放有20个无符号数 试编制程序 将该数据块搬移到外部RAM从0060H单元开始的存储区域内 注 1 MCS 51指令系统中只有MOVX指令能访问外部数据存储器 2 外部数据存储器与内部数据存储器的数据传送只能通过累加器A进行 且只能采用间接寻址方式 含有 Ri的指令用于访问地址位数为8位的外RAM单元或I O口 含有 DPTR的指令用于访问地址位数为16位的外RAM或I O口 ORG1000HMOVDPTR 0040H MOVR0 60H MOVR2 20 loop1 MOVXA DPTR MOVX R0A INCR0 INCDPTR DJNZR2loop1 SJMP END 第四章习题 一填空题 保护 恢复机器语言AREA1 0500HBUF 0505HTIME 01HACK 0507H 解 ORG0200HMOVR7 07H R7作循环次数计数器MOVR3 0 R3作和数高字节寄存器MOVA 20H 取被加数MOVR0 21H R0作加数地址指针CLRCLOOP ADDA R0 作加法JNCNEXT CY 0 和 256 转INCR3 CY 1 加到高字节NEXT INCR0 修改R0指针DJNZR7 LOOP 未完 重复加MOV51H R3 存高字节MOV50H A 存低字节 3 求连续存放在20H中的8个单字节无符号数之和 并求其平均值存放在R2中 MOVR2 03HLOOP1 CLRCMOVA 51HRRCA 高8位右移 A0送入CY MOV51H A 右移结果送入51HMOVA 50HRRCA 低8位右移 CY为高八位中的A0且送入低8位的A7 同时CY变为低8位中的A0MOV50H A 结果存放在50H中DJNZR2 LOOP1 右移3次MOVR2 50H MOVR0 07MOVR1 20HMOVR2 28HCLRCMOVA R1LOOP0 MOV28H ARRCACLRCRRCACLRCRRCACLRCMOV R1 AANL28H 7HINCR1DJNZR0 LOOP0 MOVR0 07MOVR1 20HMOVA R1LOOP1 INCR1ADDA R1DJNZR0 LOOP1RR28HRR28HRR28HADDA 28HMOVR2 A MOVR0 21HMOVR1 20HCLRCMOVR7 00HMOVR6 00HLOOP MOVA R0JBACC 7 STEPADDA R6MOVR6 AINCR0SJMPHERESTEP ADDA R7MOVR7 AINCR0HERE DJNZR1 LOOPEND 4 设内部RAM从21H单元开始存有一组带符号数 数据长度存于20H单元 要求把改组中正数 负数分别求和 并存放在寄存器R6和R7中 5 设内部RAM从LIST单元开始存有一组符号数据 数据个数为30 变成找出其中的最大数 并存入BIG单元中 解 LISTEQU42HBIGEQU41HORG0000HMOVR0 LISTMOVBIG R0MOVR2 30DECR2NEXT INCR0MOVA R0CJNEA BIG COMPCOMP JCCONMOVBIG ACON DJNZR2 NEXTRET 6 设内RAM从20H单元开始存有40H个无符号数 试编制程序将它们按从大到小的顺序排列 结果仍存放在原存贮区域内 解 数据排序的方法有很多 本例采用常用的冒泡排序法 又称为两两比较法 想象把40个数纵向排列 自上而下将存储单元相邻的两个数进行比较 若前数小于后数 则存储单元中的两个数互换位置 若前数大于后数 则存储单元中的两个数保持原来位置 按同样的原则依次比较后面的数据 直到该组数据全部比较完 经过第1轮的比较 最大的数据就像冒泡一样排在了存储单元最末的位置上 经过39轮冒泡 便可完成40个数据的排序 在实际排序中 40个数不一定要经过39轮排序冒泡 可能只要几次就可以了 为了减少不必要的冒泡次数 可以设计一个交换标志 每一轮冒泡的开始将交换标志位清0 在该轮数据比较中若有数据位置互换 则将交换标志位置1 每轮冒泡结束时 若交换标志位仍为0 则表明数据排序已完成 可以提前结束排序 ORG0000HLJMPMAINORG0100HMAIN MOVR1 20H 置数据块首地址MOVR2 39 置每次冒泡比较次数CLR10H 交换标志位清0LOOP1 MOVA R1 取前数INCR1MOV70H R1 取后数CJNEA 70H LOOP2 比较前数与后数的大小LOOP2 JNCLOOP3 若前数 后数则转移 不互换MOV R1 70H 小数存放到后数的位置DECR1MOV R1 A 大数存放到前数的位置INCR1 恢复数据指针 准备下一次比较SETB10H 有互换 标志位置1LOOP3 DJNZR2 LOOP1 若一次冒泡未完 继续进行比较JB10H MAIN 若有交换 继续进行下一轮冒泡SJMPEND 7 编写程序把累加器A中的二进制数变换成3位BCD码 并将百位 十位和个位BCD码分别放在内RAM50H 51H和52H单元 MOVB 10DIVABMOV52H BMOVB 10DIVABMOV51H BMOV50H ARET 8 手工汇编下列程序段 ORG1200HLabEQU1400H1200E535MOVA35H1202C3CLRC1203940ASUBBA 0A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论