书签 分享 收藏 举报 版权申诉 / 47
上传文档赚钱

类型单片机汇编语言程序设计例题课件.pptx

  • 上传人(卖家):三亚风情
  • 文档编号:2515699
  • 上传时间:2022-04-28
  • 格式:PPTX
  • 页数:47
  • 大小:324.11KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《单片机汇编语言程序设计例题课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    单片机 汇编语言 程序设计 例题 课件
    资源描述:

    1、程序如下: START: CLR C ; 将将Cy清零清零 MOV R0, 41H ; 将被加数地址送数据指针将被加数地址送数据指针R0 MOV R1, 51H ; 将加数地址送数据指针将加数地址送数据指针R1 AD1: MOV A, R0 ; 被加数低字节的内容送入被加数低字节的内容送入AADD A,R1 ; 两个低字节相加两个低字节相加MOV R0, A ; 低字节的和存入被加数低字节中低字节的和存入被加数低字节中 DEC R0 ; 指向被加数高位字节指向被加数高位字节 DEC R1 ; 指向加数高位字节指向加数高位字节 MOV A, R0 ; 被加数高位字节送入被加数高位字节送入AADD

    2、C A, R1 ; 两个高位字节带两个高位字节带Cy相加相加 MOV R0, A ; 高位字节的和送被加数高位字节高位字节的和送被加数高位字节 RET 例例 2 将两个半字节数合并成一个一字节数。将两个半字节数合并成一个一字节数。 设内部设内部RAM 40H, 41H单元中分别存放着单元中分别存放着 8 位二进制数位二进制数, 要求取出两个单元中的低半字节要求取出两个单元中的低半字节, 并成一个字节后并成一个字节后, 存入存入 50H单元中。单元中。 例例 2 将两个半字节数合并成一个一字节数。将两个半字节数合并成一个一字节数。 START: MOV R1, 40H ; 设置设置R1为数据指针

    3、为数据指针MOV A, R1 ; 取出第一个单元中的内容取出第一个单元中的内容ANL A, 0FH ; 取第一个数的低半字节取第一个数的低半字节SWAP A ; 移至高半字节移至高半字节INC R1 ; 修改数据指针修改数据指针XCH A, R1 ; 取第二个单元中的内容取第二个单元中的内容ANL A, 0FH ; 取第二个数的低半字节取第二个数的低半字节ORL A, R1 ; 拼字拼字MOV 50H, A ; 存放结果存放结果RET 例例 3 x, y均为均为8位二进制数位二进制数, 设设 x存入存入R0, y存入存入R1, 求解求解: y=syn(x)例例 3 x, y均为均为8位二进制数

    4、位二进制数, 设设 x存入存入R0, y存入存入R1, 求解求解: y=syn(x)程序如下程序如下: START: CJNE R0, 00H, SUL1 ; R0中的数与中的数与00比较不等转移比较不等转移 MOV R1, 00H; 相等相等, R1 0 SJMP SUL2 SUL1: JC NEG ; 两数不等两数不等, 若(若(R0)0, 则则 R101H SJMP SUL2 NEG : MOV R1, 0FFH ; (R0)0, 则则 R10FFH SUL2 : RET 程序如下程序如下: SUBF : MOV A,R0 JZ ZERO JB ACC.7 , NEG MOV R1, #

    5、1 SJMP ENDF ZERO : MOV R1 , #0 SJMP ENDF NEG : MOV R1 , #0FFH ENDF : RET 例例 4 比较两个无符号数的大小。比较两个无符号数的大小。 设外部设外部 RAM 的存储单元的存储单元 ST1和和 ST2中存放两个不带符号的二进制数中存放两个不带符号的二进制数, 找出其中找出其中的大数存入外部的大数存入外部 RAM 中的中的 ST3单元中。单元中。 例例 4 比较两个无符号数的大小。比较两个无符号数的大小。程序如下:程序如下: ORG 1000H ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H

    6、START: CLR C ; 清零清零Cy MOV DPTR, ST1 ; 第一个数的指针第一个数的指针 MOVX A, DPTR ; 取第一个数取第一个数 MOV R2, A ; 保存保存 MOV DPTR, ST2 ; 第二个数的指针第二个数的指针 MOVX A, DPTR ; 取第二个数取第二个数 CLR C SUBB A, R2; 两数比较两数比较JNC BIG2 ; 若第二个数大若第二个数大, 则转则转XCH A, R2; 第一个数大第一个数大BIG1: MOV DPTR, ST3 MOVX DPTR, A ; 存大数存大数RETBIG2: MOVX A, DPTR; 第二个数大第二

    7、个数大SJMP BIG1RET 例例 5 工作单元清零。工作单元清零。 在应用系统程序设计时在应用系统程序设计时, 有时经常需要将存储器中各部有时经常需要将存储器中各部分地址单元作为工作单元分地址单元作为工作单元, 存放程序执行的中间值或执行结存放程序执行的中间值或执行结果果, 工作单元清零工作常常放在程序的初始化部分中。工作单元清零工作常常放在程序的初始化部分中。 设有设有50个工作单元个工作单元, 其首址为外部存储器其首址为外部存储器8000H单元单元, 则则其工作单元清零程序如下其工作单元清零程序如下: CLEAR: CLR A MOV DPTR, 8000H ; 工作单元首址送指针工作

    8、单元首址送指针 MOV R2, #50 ; 置循环次数置循环次数CLEAR1: MOVX DPTR, A INC DPTR ; 修改指针修改指针 DJNZ R2, CLEAR1; 控制循环控制循环 RET 例例 6 设在内部设在内部 RAM的的BLOCK单元开始处有长度为单元开始处有长度为 LEN个的无符号数据块个的无符号数据块, 试编一个求和程序试编一个求和程序, 并将和存入内并将和存入内部部 RAM的的 SUM单元(设和不超过单元(设和不超过 8 位)。位)。 BLOCK EQU 20H LEN EQU 10H SUM EQU 40HSTART: CLR A ; 清累加器清累加器A MOV

    9、 R2, LEN; 数据块长度送数据块长度送R2 MOV R1, BLOCK ; 数据块首址送数据块首址送R1 LOOP: ADD A, R1 ; 循环加法循环加法 INC R1; 修改地址指针修改地址指针 DJNZ R2, LOOP ; 修改计数器并判断修改计数器并判断 MOV SUM, A; 存和存和 RET 二、二、 多重循环多重循环 例例 7 10 秒延时程序。秒延时程序。 延时程序与延时程序与 MCS - 51 执行指令的时间有关执行指令的时间有关, 如果如果使用使用 6 MHz晶振晶振, 一个机器周期为一个机器周期为 2 s, 计算出一条计算出一条指令以至一个循环所需要的执行时间指

    10、令以至一个循环所需要的执行时间, 给出相应的循给出相应的循环次数环次数, 便能达到延时的目的。编写便能达到延时的目的。编写10 秒延时程序秒延时程序 二、二、 多重循环多重循环 例例 7 10 秒延时程序。秒延时程序。 延时程序与延时程序与 MCS - 51 执行指令的时间有关执行指令的时间有关, 如果使用如果使用 6 MHz晶振晶振, 一个机器周期为一个机器周期为 2 s, 计算出一条指令以至一个循计算出一条指令以至一个循环所需要的执行时间环所需要的执行时间, 给出相应的循环次数给出相应的循环次数, 便能达到延时的便能达到延时的目的。目的。10 秒延时程序如下秒延时程序如下: DELAY:

    11、MOV R5, 100 DEL0: MOV R6, 200 DEL1: MOV R7, 248 DEL2: DJNZ R7, DEL2 DJNZ R6, DEL1 DJNZ R5, DEL0 RET 上例程序中采用了多重循环程序上例程序中采用了多重循环程序, 即在一个循环体中又包即在一个循环体中又包含了其它的循环程序含了其它的循环程序, 这种方式是实现延时程序的常用方法。这种方式是实现延时程序的常用方法。 使用多重循环时使用多重循环时, 必须注意必须注意: (1) 循环嵌套循环嵌套, 必须层次分明必须层次分明, 不允许产生内外层循环交叉。不允许产生内外层循环交叉。 (2) 外循环可以一层层向内

    12、循环进入外循环可以一层层向内循环进入, 结束时由里往外一结束时由里往外一层层退出。层层退出。 (3) 内循环可以直接转入外循环内循环可以直接转入外循环, 实现一个循环由多个条实现一个循环由多个条件控制的循环结构方式。件控制的循环结构方式。 例例8 在内部在内部 RAM中从中从 50H单元开始的连续单元单元开始的连续单元依次存放了一串字符依次存放了一串字符, 该字符串以回车符为结束标志该字符串以回车符为结束标志, 要求测试该字符串的长度。要求测试该字符串的长度。 程序如下程序如下: START: MOV R2, 0FFH MOV R0, 4FH ; 数据指针数据指针R0置初值置初值 LOOP:

    13、INC R0 INC R2 CJNE R0, 0DH, LOOP RET6 查表程序设计查表程序设计 查表程序是一种常用程序查表程序是一种常用程序, 它广泛使用于它广泛使用于 LED显示控制、显示控制、 打印机打印控制、数据补偿、数值计算、转换等功能程序中打印机打印控制、数据补偿、数值计算、转换等功能程序中, 这类程序具有简单、执行速度快等特点。这类程序具有简单、执行速度快等特点。 所谓查表法所谓查表法, 就是预先将满足一定精度要求的表示变量与就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出函数值之间关系的一张表求出, 然后把这张表存于单片机的程然后把这张表存于单片机的程序存储

    14、器中序存储器中, 这时自变量值为单元地址这时自变量值为单元地址, 相应的函数值为该地相应的函数值为该地址单元中的内容。查表址单元中的内容。查表, 就是根据变量就是根据变量 X在表格中查找对应的在表格中查找对应的函数值函数值 Y, 使使 Y=f(X)。 MCS - 51指令系统中指令系统中, 有两条查表指令有两条查表指令: MOVC A, A+PC MOVC A, A+DPTR 例例 9 一个十六进制数存放在内部一个十六进制数存放在内部 RAM 的的 HEX单元的单元的低低 4 位中位中, 将其转换成将其转换成ASCII码并送回码并送回 HEX单元。单元。 十六进制十六进制 09的的ASCII码

    15、为码为30H39H, AF的的ASCII码为码为41H46H, ASCII码表格的首地址为码表格的首地址为ASCTAB。编程如。编程如下下: ORG 1000H HEXASC: MOV A, HEX ANL A, 0FH ADD A, 3; 修改指针修改指针 MOVC A, A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H 在这个程序中在这个程序中, 查表指令查表指令MOVC A, A+PC到表格首到表格首地址有两

    16、条指令地址有两条指令, 占用占用 3 个字节地址空间个字节地址空间, 故修改指针应加故修改指针应加 3。 例例 10 设有一个巡回检测报警装置设有一个巡回检测报警装置, 需对需对 96 路输入进行路输入进行控制控制, 每路有一个额定的最大值每路有一个额定的最大值, 是双字节数。当检测量大于是双字节数。当检测量大于该路对应的最大值时该路对应的最大值时, 就越限报警。假设就越限报警。假设R2 为保存检测路数为保存检测路数的寄存器的寄存器, 其对应的最大额定值存放于其对应的最大额定值存放于 31H和和 32H单元中。单元中。 查找最大额定值的程序如下查找最大额定值的程序如下: FMAX: MOV A

    17、, R2 ADD A, R2 ; 表中一个额定值为表中一个额定值为2个字节个字节 MOV 31H, A MOV DPTR, TAB ; 表首址表首址 MOVC A, A+DPTR; 查表读取第一个字节查表读取第一个字节 XCH A, 31H ; 第一个字节内容存入第一个字节内容存入31H INC DPTR MOVC A, A+DPTR; 查表读取第二个字节查表读取第二个字节 MOV 32H, A ; 第二字节的内容存入第二字节的内容存入32H TAB: DW 1230H, 1450H, . DW 2230H, 2440H, . DW 3120H, 3300H, . 例例 15 在一个温度检测系

    18、统中在一个温度检测系统中, 温度模拟信号由温度模拟信号由 10 位位A/D输入。将输入。将A/D结果转换为对应温度值结果转换为对应温度值, 可采用查表方法实现。可采用查表方法实现。 先由实验测试出整个温度量程范围内的先由实验测试出整个温度量程范围内的A/D转换结果转换结果, 把把A/D转换结果转换结果000H3FFH所对应的温度值组织为一个表存储在所对应的温度值组织为一个表存储在程序存储器中程序存储器中, 那么就可以根据检测到的模拟量的那么就可以根据检测到的模拟量的 A/D转换转换值查找出相应的温度值。值查找出相应的温度值。 设测得的设测得的A/D转换结果已存入转换结果已存入 20H#, 21

    19、H单元中(高位单元中(高位字节在字节在20H中中, 低位字节在低位字节在21H中)中), 查表得到的温度值存放查表得到的温度值存放在在22H#,23H单元(高位字节在单元(高位字节在 22H中中, 低位字节在低位字节在23H中)。中)。 程序如下程序如下: FTMP: MOV DPTR, TAB ; DPTR表首地址表首地址 MOVA, 21H ; (20H)()(21H)2CLRCRLCAMOV21H, AMOVA, 20HRLCAMOV20H, AMOVA, 21H ; 表首地址表首地址+偏移量偏移量 ADDC A, DPLMOVDPL, AMOVA, 20HADDC A, DPHMOVD

    20、PH, ACLR AMOVC A, A+DPTR; 查表得温度值高位字节查表得温度值高位字节MOV22H, ACLRAINCDPTRMOVC A, A+DPTR; 查表得温度值低位字节查表得温度值低位字节MOV23H, ARETTAB: DW 7 数制转换数制转换 例例 16 将一个字节二进制数转换成将一个字节二进制数转换成 3 位非压缩型位非压缩型BCD码。码。 设一个字节二进制数在内部设一个字节二进制数在内部RAM 40H单元单元, 转换结果放入内转换结果放入内部部 RAM 50H#, 51H, 52H单元中(高位在前)单元中(高位在前), 程序如下程序如下:HEXBCD: MOV A,

    21、40H MOV B, 100 DIV AB MOV 50H, A MOV A, 10 XCH A, B DIV AB MOV 51H, A MOV 52H, B RET 例例 17 设设 4 位位BCD码依次存放在内存码依次存放在内存 RAM中中 40H43H单元的低单元的低4 位位, 高高 4 位都为位都为 0, 要求将其转换为二进制数要求将其转换为二进制数, 结结果存入果存入 R2R3 中。中。 一个十进制数可表示为一个十进制数可表示为: Dn10n +Dn-110n-1 + + D0100 =(Dn10+Dn-1)10+Dn-2)10+)+D0当当n=3时时, 上式可表示为上式可表示为:

    22、 (D310+D2)10+D1)10+D0 BCDHEX: MOV R0, 40H ; R0指向最高位地址指向最高位地址MOV R1, 03 ; 计数值送计数值送R1MOV R2, 0 ; 存放结果的高位清零存放结果的高位清零MOV A, R0MOV R3, A LOOP: MOV A, R3MOV B, 10MUL ABMOV R3, A ; (R3)10 的低的低 8 位送位送R3MOV A, BXCHA, R2 ; (R3)10的高的高 8 位暂存位暂存R2MOVB, 10 MUL AB ADD A, R2 MOV R2, A ; R210+( R310)高)高 8 位送位送R2 INC

    23、 R0 ; 取下一个取下一个 BCD数数 MOV A, R3 ADD A, R0 MOV R3, A MOV A, R2 ADDC A, 0 ; 加低字节来的进位加低字节来的进位 MOV R2, A DJNZ R1, LOOP RET 8 运算程序运算程序 一、一、 加、加、 减法程序减法程序 例例 18 将将40H开始存放的开始存放的 10 个字节的数与个字节的数与 50H开始存放开始存放的的10 个字节的数相减(假设被减数大于减数)。个字节的数相减(假设被减数大于减数)。 设被减数指针为设被减数指针为 R0, 减数指针为减数指针为 R1, 差数放回被减数单元差数放回被减数单元, R5 存放

    24、字节个数存放字节个数, 则程序如下则程序如下: SUB: MOV R0, 40HMOV R1, 50HMOV R5, 10CLR CSUB1: MOV A, R0SUBB A, R1MOV R0, AINC R0INC R1DJNZ R5, SUB1RET 二、二、 乘法运算程序乘法运算程序 在计算机中在计算机中, 常将乘法采用移位和加法来实现。常将乘法采用移位和加法来实现。 例例19 将(将(R2R3)和()和(R6R7)中双字节无符号数相乘)中双字节无符号数相乘, 结果存入结果存入 R4R5R6R7。 此乘法可以采用部分积右移的方法来实现此乘法可以采用部分积右移的方法来实现, 其程序框图其

    25、程序框图如图如图 4.6 所示所示, 程序如下程序如下: NMUL: MOV R4, 0 ; 初始化初始化 MOV R5, 0 CLR C MOV R0, 16NMUL1: MOV A, R4 ; CyR4R5R6R7右移一位右移一位 RRC A MOV R4, A MOV A, R5 RRC A MOV R5, A MOV A, R6 RRC A MOV R6, A MOV A, R7 RRC MOV R7, A JNC NMUL2 ; C为移出乘数的最低位为移出乘数的最低位 MOV A, R5 ; (R4R5)+(R2R3)(R4R5) ADD A, R3 MOV R5, A MOV A,

    26、 R4 ADDC A, R2 MOV R4, A NMUL2: DJNZ R0, NMUL1; 循环循环16位位 MOV A, R4 ; 最后结果再移一位最后结果再移一位 RRC A MOV R4, A MOV A, R5 RRC A MOV R5, A MOV A, R6 RRC A MOV R6, A MOV A, R7 RRC A MOV R7, A RET 图图7.6 NMUL程序框图程序框图 例例 20 假定被乘数在(假定被乘数在(R4R3)中)中, 乘数放在乘数放在R2中中, 乘积放乘积放在在R7R6和和R5中。中。 MCS - 51 中有中有 8 位数的乘法指令位数的乘法指令MU

    27、L, 用它来实现多字节乘用它来实现多字节乘法时法时, 可表示为可表示为 (R4R3)(R2) =(R4)28+(R3)(R2)=(R4)(R2)28+(R3)(R2)其中(其中(R4)(R2)和()和(R3)(R2)都是可直接用)都是可直接用MUL指令来实现指令来实现, 而乘以而乘以28意味着左移意味着左移 8 位。由此可编写如下程位。由此可编写如下程序序: NMUL1: MOV A, R2 MOV B, R3 MUL AB ; (R3)(R2) MOV R5, A ; 积的低位送积的低位送R5 MOV R6, B ; 积的高位送积的高位送R6 MOV A, R2 MOV B, R4 MUL

    28、AB ; (R4)(R2) ADD A, R6 ; (R3)(R2)的高位加)的高位加(R4)(R2)的低位的低位MOV A, B ADDC A, 00H ; (R4)(R2)的高位加)的高位加Cy MOV R7, A ; 结果送结果送R7 RET 三、三、 除法运算程序除法运算程序 除法是乘法的逆运算除法是乘法的逆运算, 用移位、用移位、 相减的方法来完成。相减的方法来完成。 首首先比较被除数的高位字与除数先比较被除数的高位字与除数, 如被除数高位大于除数如被除数高位大于除数, 则商则商为为1, 并从被除数中减去除数并从被除数中减去除数, 形成一个部分余数形成一个部分余数; 否则商位为否则商

    29、位为 0, 不执行减法。不执行减法。 然后把新的部分余数左移一位然后把新的部分余数左移一位, 并与除数再次并与除数再次进行比较。循环此步骤进行比较。循环此步骤, 直到被除数的所有位都处理完为止直到被除数的所有位都处理完为止,一一般商的字长为般商的字长为 n, 则需循环则需循环n次。次。 一般计算机中一般计算机中, 被除数均为被除数均为双倍位双倍位, 即如果除数和商为双字节即如果除数和商为双字节, 则被除数为四字节。如果则被除数为四字节。如果在除法中发生商大于规定字节在除法中发生商大于规定字节, 称为溢出。称为溢出。 在进行除法前在进行除法前, 应应该检查是否会产生溢出。一般可在进行除法前该检查

    30、是否会产生溢出。一般可在进行除法前, 先比较被除数先比较被除数的高位与除数的高位与除数, 如被除数高位大于除数如被除数高位大于除数, 则溢出则溢出, 置溢出标志置溢出标志, 不执行除法。不执行除法。 图图 7.7 除除法法程程序序的的流流程程 例例 21 将(将(R4R5R6R7)除以()除以(R2R3), 商放在(商放在(R6R7)中中, 余数放在(余数放在(R4R5)中。)中。 NDIV: MOV A, R5 ; 判商是否产生溢出判商是否产生溢出 CLR C SUBB A, R3 MOV A, R4 SUBB A, R2 JNC NDIV1 ; 溢出溢出, 转溢出处理转溢出处理 MOV B

    31、, 16; 无溢出无溢出, 执行除法执行除法 NDIV2: CLR C ; 被除数左移一位被除数左移一位, 低位送低位送 0 MOV A, R7 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A XCH A, R4 RLC A XCH A, R4 MOV F0, C ; 保护移出的最高位保护移出的最高位 CLR C SUBB A, R3 ; 部分余数与除数比较部分余数与除数比较 MOV R1, A MOV A, R4 SUBB A, R2 JB F0, NDIV3; 移出的高位为移出的高位为 1, 肯定够减肯定够减 JC NDIV4 ; 否则否则, (Cy) = 0才够减才够减 NDIV3: MOV R4, A ; 回送减法结果回送减法结果 MOV A, R1 MOV R5, A INC R7 ; 商上商上1 NDIV4: DJNZ B, NDIV2; 循环次数减循环次数减 1 ,若不为零则循环若不为零则循环 CLR F0 ; 正常执行无溢出正常执行无溢出 F0 = 0 RET NDIV1: SETB F0 ; 溢出溢出F0=1 RET

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:单片机汇编语言程序设计例题课件.pptx
    链接地址:https://www.163wenku.com/p-2515699.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库