MCS-51系列单片机指令系统及汇编语言程序设计.ppt

上传人:sh****n 文档编号:6381115 上传时间:2020-02-24 格式:PPT 页数:52 大小:1.04MB
返回 下载 相关 举报
MCS-51系列单片机指令系统及汇编语言程序设计.ppt_第1页
第1页 / 共52页
MCS-51系列单片机指令系统及汇编语言程序设计.ppt_第2页
第2页 / 共52页
MCS-51系列单片机指令系统及汇编语言程序设计.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
第3章MCS 51系列单片机指令系统及汇编语言程序设计 MCS 51单片机的寻址方式MCS 51单片机分类指令MCS 51单片机汇编语言程序设计基础 3 1MCS 51单片机的寻址方式 MCS 51单片机共有7种寻址方式 立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址 1 立即寻址 立即寻址就是把操作数直接在指令中给出 即操作数包含在指令中 立即操作数有8位和16位两种形式 前面加 来表示 例如 MOVA 0FFH 将立即数FFH传送到累加器A中MOVDPTR 2000H 将16位立即数2000H传送到数据指针DPTR中MOV40H 60H 将立即数60H传送到40H内部RAM单元中 2 直接寻址 指令中直接给出操作数地址的寻址方式 例如 MOVA 30H 内部RAM中的30H单元中的数据内容传送到累加器A中 3 寄存器寻址 以通用寄存器的内容为操作数的寻址方式 通用寄存器包括 A B DPTR R0 R7 其中 R0 R7必须在工作寄存器组之中 例如 INCR0 R0 1 R0需要注意的是 A和B既是通用寄存器 又是具有直接地址的特殊功能寄存器 4 寄存器间接寻址 以寄存器中的内容为地址 该地址中的内容为操作数的寻址方式 能够用于寄存器间接寻址的寄存器有 R0 R1 DPTR SP 其中 R0 R1必须在工作寄存器组之中 SP仅用于堆栈操作 例如 MOVXA R1 外部数据RAM中地址为P2R1的单元内容 AMOVX DPTR A A 外部数据RAM中DPTR为地址的单元寄存器间接寻址的存储器空间包括 内部数据RAM和外部数据RAM 内部数据RAM共用128字节 用一个字节的R0或R1可寻址整个空间 外部数据RAM最大可达64K字节 仅用R0或R1无法寻址整个空间 在MCS 51系列单片机指令中 对外部数据RAM作间接寻址有两种方法 第一种由P2口提供高8位外部数据RAM地址 由R0或R1提供低8位地址 由此共同寻址64K空间 第二种是用16位的DPTR作寄存器间接寻址 5 变址寻址 由程序计数器PC或DPTR加上偏移量寄存器A中内容之和形成操作数地址的寻址方式 变址寻址只能对程序存储器中的数据作寻址操作 由于程序存储器是只读存储器 因此变址寻址操作只有读操作而无写操作 例如 MOVCA A DPTR A DPTR为地址的存储器单元内容 AMOVCA A PC A PC为地址的存储器单元内容 A 6 相对寻址 以当前程序计数器PC的内容为基址 加上指令给出的一字节补码数形成新的PC值的寻址方式 PC中的当前值称为基地址 一字节补码数称为偏移量 新的PC值称为转移目的地址 例如 JC80H C 1跳转表示进位位C为0 则程序计数器PC中的内容不改变 即不转移 若进位位C为1 则PC中的当前值为基地址加上偏移量80H后所得到的结果作为该转移指令的目的地址 7 位寻址 对位地址中的内容作位操作的寻址方式 单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址 两者统一编址 地址空间为00H FFH 因此 位寻址只能对有位地址的这两个空间作寻址操作 例如SETB20H 1 20H位MOV32H C 进位位C 32H位 3 2分类指令 MCS 51单片机共有111条指令 按功能分类 MCS 51指令系统可分为5大类 数据传送类指令 共29条 算术操作类指令 共24条 逻辑操作类指令 共24条 控制转移类指令 共17条 布尔变量操作类指令 共17条 1 数据传送类指令 共29条 以累加器A为目的操作数类指令 4条 MOVA dirMOVA dataMOVA RnMOVA Ri例 R1 20H 20H 55H 指令MOVA R1执行后 A 55H 以寄存器Rn为目的操作数的指令 3条 MOVRn dirMOVRn dataMOVRn A例 40H 30H 指令MOVR7 40H执行后 R7 30H 以直接地址为目的操作数的指令 5条 MOVdir dirMOVdir dataMOVdir AMOVdir RnMOVdir Ri例 R0 50H 50H 10H 指令MOV35H R0执行后 35H 10H 以间接地址为目的操作数的指令 3条 MOV Ri dirMOV Ri dataMOV Ri A查表指令 2条 MOVCA A DPTRMOVCA A PC例 A 20H DPTR 2000H 指令MOVCA A DPTR执行后 程序存储器2020H单元中的内容送入A 累加器A与片外数据存储器RAM传送指令 4条 MOVX DPTR AMOVXA DPTRMOVXA RiMOVX Ri A例 DPTR 2000H 外部RAM中 2000H 18H 指令MOVXA DPTR执行后 A 18H 例 P2 10H R1 50H A 64H 指令MOVX R1 A执行后 外部RAM中 1050H 64H 堆栈操作类指令 2条 PUSHdirPOPdir例 SP 07H 35H 55H 指令PUSH35H执行后 55H送入08H地址单元 SP 08H 交换指令 5条 XCHA RnXCHA RiXCHA dirXCHDA RiSWAPA例 A 80H R0 32H 32H FFH 指令XCHDA R0执行后 A 8FH 32H F0H 16位数据传送指令 1条 MOVDPTR data16 2 算术操作类指令 共24条 算术运算指令共有24条 算术运算主要是执行加 减 乘 除 增量 减量和十进制调整等指令 加法指令 4条 ADDA dataADDA dirADDA RnADDA Ri带进位加法指令 4条 ADDCA dirADDCA dataADDCA RnADDCA Ri带借位减法指令 4条 SUBBA dirSUBBA dataSUBBA RnSUBBA Ri例 A 38H R1 20H 20H 23H C 1 指令SUBBA R1执行后 A 14H 乘法指令 1条 MULA B例 A 50H B A0H 指令MULA B执行后 A 00H B 32H除法指令 1条 DIVA B例 A 28H B 12H 指令DIVA B执行后 A 02H B 04H加1指令 5条 INCAINCdirINC RiINCRnINCDPTR 减1指令 4条 DECADECdirDEC RiDECRn十进制调整指令 1条 DAA 把A中按二进制相加后的结果调整成按BCD数相加的结果 3 逻辑操作类指令 共24条 逻辑操作类指令共有24条 主要包括 与 或 异或 求反 清0 左右移位等逻辑操作 与 操作指令 6条 ANLA dirANLA dataANLA RnANLA RiANLdir AANLdir data 或 操作指令 6条 ORLA dirORLA dataORLA RnORLA RiORLdir AORLdir data例 21H 3AH A 14H 指令ORL21H A执行后 21H 3EH 异或 操作指令 6条 XRLA dirXRLA dataXRLA RnXRLA RiXRLdir AXRLdir data例 R0 23H 23H 32H A 53H 指令XRLA R0执行后 A 61H求反指令 1条 CPLA 累加器A中的内容按位取反清零指令 1条 CLRA 0 A 累加器A中的内容清零循环移位指令 4条 RLA 累加器A中的内容左移一位RRA 累加器A中的内容右移一位RLCA 累加器A中的内容连同进位位C左移一位RRCA 累加器A中的内容连同进位位C右移一位例 A 16H 指令RRA执行后 A 0BH 4 控制转移类指令 共17条 控制转移类指令共有17条 用于控制程序的流向 所控制的范围即为程序存储器区间 子程序调用指令 4条 绝对调用指令ACALLaddr11绝对调用指令实现在2K地址范围内的子程序调用 本指令实现的操作将不改变原PC的高5位 仅把11位地址addr11送入PC的低11位 以此确定子程序的入口地址 由于整个64K程序存储器空间被分成32个基本2K地址范围 见表3 4 编程时 必须保证紧接ACALL指令后面的那一条指令的第一字节与被调用子程序的入口地址在同一2K范围内 否则将不能使用ACALL指令实现这种调用 表3 4程序存储器空间中的32个基本2K地址范围 长调用指令LCALLaddr16长调用指令为64K程序存储器空间中的全范围子程序调用指令 子程序的入口地址可在64K地址空间中的任一处 子程序返回指令RET从被调用子程序返回 与LCALL与ACALL指令配合使用 中断返回指令RETI从中断服务程序中返回 除具有RET功能外 还具有恢复中断逻辑的功能 需注意的是 RETI指令不能用RET代替 转移类指令 12条 转移类指令分为无条件转移指令和条件转移指令两组 无条件转移指令包括绝对转移 长转移 短转移和间接转移 条件转移指令包括结果为零 结果为非零 减 1 后结果为非零以及两数不相等的转移条件等 它们全部采用相对转移的方式 无条件转移指令 4条 1 长转移指令LJMPaddr16长转移指令为64K程序存储器空间的全范围转移指令 转移地址可为16位地址值中的任一值 2 绝对转移指令AJMPaddr11绝对转移指令为2K地址范围内的转移指令 对转移目的地址的要求与ACALL指令中对子程序入口地址的要求相同 3 短转移指令SJMPrel PC 2 rel PC短转移指令为一页地址范围内的相对转移指令 因为rel为1字节补码偏移量 且SJMPrel指令为2字节指令 所以转移范围为 126D 129D 4 间接转移指令JMP A DPTR 条件转移指令 8条 1 累加器为零 非零转移指令JZrel若A 0 则PC 2 rel PC 程序转移到偏移量所指向的地址若A 0 程序顺序执行JNZrel若A 0 则PC 2 rel PC 程序转移到偏移量所指向的地址若A 0 程序顺序执行 2 两数不等转移指令CJNEA dir rel若A dir 则PC 3 rel PC 程序转移 若A dir 则程序顺序执行CJNEA data rel若A data 则PC 3 rel PC 程序转移 若A data 则程序顺序执行CJNERn data rel若Rn data 则PC 3 rel PC 程序转移 若Rn data 则程序顺序执行CJNE Ri data rel若 Ri data 则PC 3 rel PC 程序转移 若 Ri data 则程序顺序执行 3 减 1 非零转移指令DJNZRn relRn 1 Rn 若Rn 0 则PC 2 rel PC 程序转移 若Rn 0 则程序顺序执行DJNZdir rel dir 1 dir 若 dir 0 则PC 3 rel PC 程序转移 若 dir 0 则程序顺序执行需要注意的是 DJNZRn rel是2字节指令 而DJNZdir rel是3字节指令 所以在满足转移条件后 前者是PC 2 rel PC 而后者是PC 3 rel PC 例 说明下面一段程序运行后累加器A中的结果 MOV23H 0AHCLRALOOP ADDA 23HDJNZ23H LOOPSJMP 解 根据程序可知 运算结果A 10 9 8 7 6 5 4 3 2 1 55D 37H空操作指令 1条 NOP 5 布尔变量操作类指令 共17条 布尔变量操作类指令共有17条 其共同特点是对进位位C和直接位地址bit的操作 包括清零 置位 求反 逻辑与 逻辑或 位传送以及判断转移指令 清位指令 2条 CLRC 0 CCLRbit 0 bit置位指令 2条 SETBC 1 CSETBbit 1 bit位求反指令 2条 CPLCCPLbit位逻辑 与 指令 2条 ANLC bitANLC 位逻辑 或 指令 2条 ORLC bitORLC 位传送指令 2条 MOVC bit bit CMOVbit C C bit位控制转移指令 5条 位控制转移指令是以位的状态作为实现程序转移的判断条件 介绍如下 JCrel若C 1 则PC 2 rel PC 程序转移 否则程序顺序执行JNCrel若C 0 则PC 2 rel PC 程序转移 否则程序顺序执行JBbit rel若 bit 1 则PC 3 rel PC 程序转移 否则程序顺序执行JNBbit rel若 bit 0 则PC 3 rel PC 程序转移 否则程序顺序执行JBCbit rel若 bit 1 则PC 3 rel PC 程序转移 且该位清零 否则程序顺序执行 3 3MCS 51单片机汇编语言程序设计 汇编语言概述顺序程序分支程序循环程序子程序 1 汇编语言概述 结构化程序的概念 顺序结构顺序结构是按照语句实现的先后次序执行一系列的操作 它没有分支 循环和转移 分支结构分支结构又叫条件选择结构 根据不同情况做出判断和选择 以便执行不同的程序段 分支的意思是在两个或多个不同的操作中选择其中的一个 循环结构循环结构是重复执行一系列操作 直到某个条件出现为止 循环实际上是分支结构的一种扩展 循环是否继续是依靠条件判断语句来完成的 按照条件判断的位置 可以把循环分为 当型循环 和 直到型循环 第一种情况是先作条件判断 第二种情况是先执行一次循环 然后判断是否继续循环 汇编语言程序设计的一般步骤 分析问题 抽象出描述问题的数学模型 确定解决问题的算法或解题思想 绘制流程图和结构图 分配存储空间和工作单元 编制程序 程序静态检查 上机调试 编写相关说明 汇编语言的语句格式MCS 51汇编语言的语句格式应符合下列结构 标号 操作码 操作数 注释 汇编语言语句由标号 操作码 操作数和注释4部分组成 其中 标号和注释部分可以没有 甚至某些指令的操作数也可以没有 如NOP RET指令等 标号位于语句的开始 由以字母开头的字母和数字组成 它代表该语句的地址 标号与操作码之间要用 隔开 标号与 之间不能有空格 与操作码之间可以有空格 操作码是指令的助记符 操作数在操作码之后 二者用空格分开 操作数可以是数据 也可以是地址 有多个操作数时 操作数之间用逗号分开 注释在语句的最后 以 开始 是说明性的文字 与语句的具体功能无关 指令中的数据可以是十进制 十六进制 二进制 八进制数和字符串 具体格式如下 十进制数以D结尾 也可以省略 如55D或55 十六进制数以H结尾 如55H 如果数据以A F开头 其前必须加数字0 如 0FFH 二进制数以B结尾 如00110011B 八进制数以O或Q结尾 如55O或55Q 字符串用 或 表示 如 M 表示字符M的ASCII码 例 MAIN MOVA 00H 将A清零在这条指令中 MAIN为标号 表示该指令的地址 MOV为操作码 表示指令的功能为数据传送 A和 00H为操作数 将A清零为注释 用于说明这条语句的功能 注释内容不参与程序的汇编 伪指令 ORG 汇编程序起始地址ORG用来说明其后程序段在存储器中存放的起始地址 例 ORG0030HMAIN MOV20H 0FFHMOV30H 0FEHORG0030H表明从MAIN开始的程序从存储器的0030H地址单元开始存放 并且MAIN 0030H EQU 赋值指令EQU用来给变量标号赋予一个确定的数值 例 DATAEQU0AHMAINEQU1000H这段程序使DATA 0AH MAIN 1000H DB 定义数据字节DB指令按字节数的形式把数据存放在存储单元中 例 TAB DB0C0H 0F9H 0A4H 0B0H 99H92H 82H 0F8H 80H 90H这段程序从表头TAB起 连续存放了十个字节的数值 0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8H 80H 90H DW 定义数据字DW指令按字 双字节 的形式把数据存放在存储单元中 例 ORG1020HDW30H 31H 1020H这段程序把数据30H 31H 1020H以字 双字节 的形式存放在从1020H开始的一片存储单元中 DS 定义存储区DS从指定的地址单元开始 保留一定数量的存储单元 例 ORG0100HDS5从0100H地址开始 空出5个字节的存储单元来 为程序所用 BIT 位定义其功能是把位地址赋给字符名称 例 LEDBITP1 0是将位地址P1 0赋给变量LED END 汇编结束END命令表明汇编语言程序结束 2 顺序程序 顺序程序是指程序中没有使用转移类指令的程序段 机器执行这类程序时也只需按照先后顺序依次执行 中间不会有任何分支 循环 也不需要调用子程序 例 将一个单字节十六进制数转换成BCD码 解 算法分析 单字节十六进制数在0 255之间 将其除以100后 商为百位数 余数除以10 商为十位数 余数为个位数 设单字节数存放在40H 转换后 百位数存放在R0中 十位数存放在R1中 个位数存放在R2中 具体程序如下 ORG0030HMOVA 40H 将单字节十六进制数送入A中MOVB 64H 将100送入B中DIVABMOVR0 A 百位数送R0 余数在B中XCHA B 余数送入A中MOVB 0AHDIVAB 商为十位数 余数为个位数MOVR1 AMOVR2 BSJMP 例 设变量放在片内RAM20H单元 其取值范围为00H 01H 02H 03H 04H 05H 要求编制一段查表程序 查出变量的平方值 并放入片内RAM21H单元 解 在程序存储器的一片指定的地址单元中 建立各个变量的平方值表 用数据指针指向表的首地址 则变量与数据指针之和的地址单元中的内容就是变量的平方值 程序如下 ORG0030HMAIN MOVDPTR 0500H 将表的首地址送给数据指针MOVA 20H 将变量送入A中MOVCA DPTR A 查表得到变量的平方值MOV21H A 将平方值送到指定的地址单元SJMP TABEQU0500H 给表赋首地址TABDB00H 01H 04H 09H 10H 19H 建立平方值表END 3 分支程序 例 将一位十六进制数转换为ASCII码 设十六进制数在A中 A的高4位为0 转换结果仍存放在A中 解 十六进制数转换为ASCII码的原则是 十六进制的0 9 加30H即转换为ASCII码 0AH 0FH要加37H才能转换为ASCII码 具体程序如下 ORG0030HCJNEA 0AH NO10 判断十六进制数是否为10NO10 JCLT10 C 1 即十六进制数小于10则转移ADDA 07H 十六进制数大于或等于10 则先加07HLT10 ADDA 30HSJMP 例 设变量X以补码的形式存放在片内RAM30H单元 函数Y与X有如下的关系 试编制程序 根据X的大小求出Y 并放回原单元 解 取出变量后 先对变量X作取值范围的判断 再按照函数表达式求出Y的值 对符号的判断可以用位操作类指令 也可以用逻辑运算类指令 此处用逻辑运算指令 程序流程图如图3 1所示 程序如下 ORG0030HMAIN MOVA 30HJZNEXT 判断X是否为零ANLA 80H 判断符号位JZED 若X大于0 Y XMOVA 05HADDA 30HMOV30H ASJMPEDNEXT MOV30H 20HED SJMP 图3 1 4 循环程序 例 将内部数据RAM中20H 3FH单元的内容传送到外部数据存储器 起始单元地址为2000H 解 20H 3FH共计32个单元 需传送32次数据 将R1作为循环计数器 程序流程图如图3 2所示 具体程序如下 所谓循环程序是指单片机反复执行某一段程序 这个程序段通常称为循环体 循环是在一定条件控制下进行的 以决定是继续循环执行或是结束循环 程序循环是通过条件转移指令进行控制的 MAIN MOVR0 20H 将数据首地址赋给R0MOVDPTR 2000H 设置外部RAM首地址MOVR1 20H 设置循环计数器LOOP MOVA R0 取内部RAM数据MOVX DPTR A 将数据送往外部RAMINCR0 调整内部数据RAM 指针 指向下一个数据INCDPTR 调整外部RAM指针DJNZR1 LOOPSJMP 例 把片内数据RAM30H 39H单元中的10个无符号数逐一比较 按从小到大的顺序依次排列在这片单元中 解 为了把10个单元中的数按从小到大的顺序排列 可以从30H单元开始 取前数与后数比较 如果前数小于后数 则顺序继续比较下去 如果前数大于后数 则前数和后数交换后再继续比较下去 第一次循环将在最后单元中得到最大的数 要得到所有数据从小到大的排列需要进行多重循环 程序流程图如图3 3所示 具体程序如下 MAIN CLR00H 清除交换标志位MOVR7 0AHMOVR0 30H 数据区首地址MOVA R0LOOP INCR0MOVR2 A 保存前数SUBBA R0MOVA R2 恢复前数JCNEXT 判断前后两数大小SETB00HXCHA R0 前后两数交换DECR0XCHA R0INCR0NEXT MOVA R0 取下一个数DJNZR7 LOOPJB00H MAIN 交换后重新比较SJMP 5 子程序 在调用子程序时 要注意以下几个问题 子程序占用的存储单元和寄存器 如果在调用子程序之前 主程序已经使用了这些存储单元或寄存器 在调用后 这些存储单元或寄存器又被子程序使用 就应当先把这些存储单元或寄存器中的内容压入堆栈保护起来 调用完后再从堆栈中弹出 加以恢复 入口参数和出口参数 调用之前要按照子程序的要求设置好入口参数 只有这样才能在调用后 从出口参数处得到调用后的正确结果 参数的传递 子程序可以从指定的地址单元或寄存器获得调用程序的数据参数 经过调用后得到的数据可输出到指定的地址单元或寄存器 从而实现两者之间的参数传递 可递归性与可重入性 可递归性是指子程序可以调用自己 可重入性是指一个子程序可以同时被多个程序调用 这两个特性主要是对大规模复杂系统程序的要求 对一般应用程序可不作要求 例 通过调用子程序实现延时100ms 设单片机晶振频率为12MHz 解 子程序名称为DELAY 可实现1 256ms的延时功能 具体延时时长可以通过设置入口参数获得 入口参数放在R3中 具体程序如下 MAIN PUSHPSWMOVPSW 08HMOVR3 64H 入口参数为100LCALLDELAY 调用子程序POPPSWSJMP DELAY MOVR2 0FAHLOOP NOP 内层循环为1msNOPDJNZR2 LOOPDJNZR3 DELAYRET 例 将存于R0中的一位十六进制数 R0的高4位为0 转换为七段显示码 并将结果送P1口显示 设七段显示器为共阴极接法 解 显示子程序为DIR 具体程序如下 ORG0000HLJMPMAINORG0030HMAIN LCALLDELAYMOVP1 00HLCALLDIRDIR PUSHACCMOVA R0 取R0中的数MOVDPTR TABLEMOVCA A DPTR 查表 取出七段显示码MOVP1 APOPACCRET DELAY MOVR7 0FAHLOOP MOVR6 0FAHLOOP1 DJNZR6 LOOP1DJNZR7 LOOPRETTABLE DB40H 79H 24H 30HDB19H 12H 02H 78HDB00H 18H 08H 03HDB46H 21H 06H 0EHEND 习题解答 1 什么是寻址方式 MCS 51单片机有哪几种寻址方式 答案 指令的一个重要的组成部分是操作数 指令给出参与运算的数据的方式称为寻址方式 换句话说 寻址方式就是寻找确定参与操作的数的真正地址 MCS 51系列单片机共有7种寻址方式 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址和位寻址 2 什么是指令系统 MCS 51单片机共有多少种指令 答案 CPU所能执行的各种指令的集合称为指令系统 MCS 51系列单片机的指令系统是一种简明易掌握 效率较高的指令系统 在MCS 51系列单片机的指令系统中共使用了7种寻址方式 42种助记符 这些助记符与寻址方式组合起来 共形成111条指令 完成数据传送 算数运算 逻辑运算 控制转移以及位操作等方面的工作 3 汇编语言的语句格式是什么 使用标号有什么限制 注释段起什么作用 答案 MCS 51汇编语言的语句格式应符合下列结构 标号 操作码 操作数 注释 标号位于语句的开始 由以字母开头的字母和数字组成 它代表该语句的地址 标号与操作码之间要用 隔开 标号与 之间不能有空格 与操作码之间可以有空格 注释在语句的最后 以 开始 是说明性的文字 与语句的具体功能无关 4 MCS 51汇编语言有哪几条常用伪指令 各起什么作用 答案 ORG 汇编程序起始地址 用来说明其后程序段在存储器中存放的起始地址 EQU 赋值指令 用来给变量标号赋予一个确定的数值 DB 定义数据字节 指令按字节数的形式把数据存放在存储单元中 DW 定义数据字 按字 双字节 的形式把数据存放在存储单元中 DS 定义存储区 从指定的地址单元开始 保留一定数量的存储单元 BIT 位定义 其功能是把位地址赋给字符名称 END 汇编结束 表明汇编语言程序结束 5 汇编语言程序设计分哪几步 各步骤的任务是什么 答案 分析问题 抽象出描述问题的数学模型 确定解决问题的算法或解题思想 绘制流程图和结构图 分配存储空间和工作单元 编制程序 程序静态检查 上机调试 编写相关说明 6 将累加器A中的压缩BCD码分为两个字节 形成非压缩BCD码 放入20H和21H单元中 写出源程序 解 由题意 将累加器A中的低4位保留 高4位清零放入20H 高4位保留 低4位清零 半字节交换后存入21H单元中 程序如下 MOVR0 AANLA 0FHMOV20H AMOVA R0ANLA 0F0HSWAPAMOV21H A 7 已知内部RAM的20H和21H单元中各有一个无符号8位二进制数 试编程比较它们的大小 并把大数送到30H单元 解 MOVA 20HCJNEA 21H LOOPLOOP JNCLOOP1MOVA 21HLOOP1 MOV30H ARET 8 编制一段程序 要求在端口线P1 0和P1 1上分别产生周期为200us和400us的方波 设单片机的晶振频率为12MHz 解 ORG0000HAJMPSTARTORG000BHAJMPIT0ORG001BHAJMPIT1ORG0100HSTART MOVTMOD 03HMOVTL0 9CHMOVTH0 38HMOVTCON 50HMOVIE 8AHSJMP ORG0130HIT0 MOVTL0 9CHCPLP1 0RETIIT1 MOVTH0 38HCPLP1 1RETIEND 9 试编写一段程序 将外部数据RAM中从地址2000H开始的100个补码数逐一取出 若为正数则放回原单元 若为负数则求反后放回原单元 解 START MOVDPTR 2000HMOVR0 64HLOOP MOVXA DPTRMOV20H AJNBACC 7 NEXTMOVA 20HCPLAMOVX DPTR ANEXT INCDPTRDJNZR0 LOOPSJMP
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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