MCS-51单片机指令系统及编程举例.ppt

上传人:sh****n 文档编号:6380777 上传时间:2020-02-24 格式:PPT 页数:46 大小:236KB
返回 下载 相关 举报
MCS-51单片机指令系统及编程举例.ppt_第1页
第1页 / 共46页
MCS-51单片机指令系统及编程举例.ppt_第2页
第2页 / 共46页
MCS-51单片机指令系统及编程举例.ppt_第3页
第3页 / 共46页
点击查看更多>>
资源描述
微机原理及应用 对于任何一台计算机 必须有软件 程序 的支持 才能工作 但是市场上所售的单片机是裸机 在使用之前要现对它编程 将程序固化在芯片内 才能使用 指令系统是一种CPU所能直接执行的所有命令的集合 CPU的主要功能是由它的指令系统来体现的 任何计算机语言编写的任何程序 都必须转换为指令系统中相应指令代码的有序集合 CPU才能执行 单片机的指令系统是单片机能够识别并执行的所有指令的集合 3 1指令系统简介每一种CPU都有其独立的指令系统 MCS 51系列单片机指令系统共有111条指令 其中有49条单字节指令 45条双字节指令和17条三字节指令 MCS 51指令系统的功能十分强大 它把体现单片机的各种功能的寄存器组织在统一的地址空间中 MCS 51指令系统在其存储空间 时间的利用率及工作效率方面都是较高的 1 指令格式MCS 51指令系统中的每一条指令都有两级指令格式 CPU可直接识别并执行的机器语言指令 机器语言 汇编语言指令 简称汇编指令 符号说明 见书上 P 34 MCS 51汇编语言指令格式 由以下几个部分组成 标号 操作码 目的操作数 源操作数 注释 例 LOOP MOVA R1 A R1MOVA R1INCANOP 3 2寻址方式所谓寻址方式就是寻找或获得操作数的方式 指令的一个重要组成部分是操作数 由寻址方式指定参与运算的操作数或操作数所在单元的地址 MCS 51指令系统的寻址方式有以下7种 1 立即寻址2 直接寻址3 寄存器寻址4 寄存器间接寻址5 变址寻址6 相对寻址7 位寻址 立即寻址 操作数直接出现在指令中 可以是8位 也可是16位 该方式寻址中的操作数称为立即数 用 表示 例 MOVA 30H A 30H执行结果 A 30H例 MOVDPTR 1000H DPTR 1000H执行结果 DPTR 1000H 注意 只有MOVDPTR date16指令的立即数为16位 DPTR分为DPH和DPL 在上述例子中 DPH 10H DPL 00H 直接寻址 操作数的地址直接出现在指令中 这类寻址方式的操作数只能是存放在内部RAM和SFR中 1 SFR例 MOVA P1执行结果 将P1口的内容送到A中 若P1的内容为78H 执行该指令后 A 78H 见 P 23 2 内部RAM的低128字节例 MOVA 76H执行结果 将76H单元的内容送到A中 若 76H 3FH 执行该指令后 A 3FH 注意 若要表示某个单元的内容 将该单元用括号扩起来 如 43H 76H R0 等 寄存器寻址 操作数为寄存器的内容 此处的寄存器指的是工作寄存器R0 R7 累加器A 通用寄存器B 数据指针寄存器DPTR和位累加器C 即进位位C 例 MOVA R0执行结果 将R0的内容送入A中 若R0的内容 R0 5AH 则A 5AH 寄存器间接寻址 将指定寄存器中的内容作为地址 该地址对应的内容才是操作数 用 表示 例 MOVA R0执行结果 将R0的内容作为地址 再将该地址对应的内容送入A中 若 R0 46H 46H 2FH 则 A R0 46H 2FH 例 MOV R1 76H执行结果 R1 76H 若 76H 0FH R1 23H 则 23H 0FH 变址寻址 以程序指针PC或数据指针DPTR为基址 以累加器A作为变址 两者内容相加 即基址 偏移量 形成16位地址 例 地址目标代码汇编指令21007406MOVA 06H210283MOVCA A PC210300NOP210400NOP 210932DB32H执行结果分析 当执行到MOVCA A PC时 PC 2103H 基址 A 06H 偏移量 因此 A PC所示的地址 2103H 06H 2109H 2109H 32H 所以A 32H 例 MOVA 01HMOVDPTR TABLEMOVCA A DPTRTABLE DB41HDB42H 执行结果分析 基址的首地址 TABLE偏移量 01H 程序执行到MOVCA A DPTR时 A DPTR所指的地址 TABLE 01H 因此 该指令执行后A 42H 相对寻址 以PC的当前值为基址 与指令中的第二字节给出的偏移量rel 8位有符号数 相加 所得之和为程序的转移地址 转移范围为 127 128字节之间 例 SJMP08H 双字节指令分析 若PC 2000H为该条指令的地址 则转移目标地址 2000H 02H 08H 200AH 位寻址 对片内RAM的20H 2FH字节地址中的所有位和部分SFR的位进行寻址 区分指令中是位地址还是存储器单元地址不太容易 主要是由另一个操作数来区分 例 SETBEX0 EX0 1 位寻址MOVC 07H C 07H 位寻址MOVA 20H A 20H 直接寻址MOVC 20H C 20H 位寻址 3 3指令系统指令分类 MCS 51指令系统共有111条指令 分成5大类 1 数据传送类 2 算术运算类 3 逻辑运算类 4 控制程序转移类 5 布尔变量操作 位操作类 3 4汇编语言程序设计基础 用汇编语言编写的源程序 汇编程序 目标程序 汇编语言是一种采用助记符表示的机器语言 即用助记符号来代表指令的操作码和操作数 用标号或符号代表地址 常数或变量 而助记符一般都是英文单词的缩写 因此使用方便 这种用助记符编写的程序称为源程序 汇编语言源程序必须翻译成机器语言的目标代码 亦称目标程序 计算机才能执行 其翻译工作可由汇编程序自动完成 汇编程序的功能就是将用助记符号编写的源程序翻译成用机器语言表示的目标程序 汇编语言程序的组成 汇编语言源程序是由汇编语句组成的 一般情况下 汇编语言语句可分为 指令性语句 即汇编指令 和指示性语句 即伪指令 指令性语句 可简称指令 是进行汇编语言程序设计的可执行语句 每条指令都产生相应的机器语言的目标代码 源程序的主要功能是由指令性语句去完成的 指示性语句 伪指令 又称汇编控制指令 它是控制汇编 翻译 过程的一些命令 程序员通过伪指令通知汇编程序在进行汇编时的一些指示 因此 伪指令不产生机器语言的目标代码 是进行汇编语言程序设计的不可执行语句 伪指令 1 ORG 汇编起始地址 例 ORG3000HSTART MOVA R1 2 END 结束汇编 3 EQU 等值或赋值 格式 标识符EQU数或汇编符号功能 把数或汇编符号赋给标识符 且只能赋值1次 例 INT 1EQU001BHORGINT 1AJMPLP1 注意 EQU与前面的标号之间不要使用冒号 只用一个空格进行分隔 4 DB 定义字节 格式 标号 DBX1 X2 X3 Xn功能 将项或项表中的8位字节数据依次存入标号所示的存储单元中例 DELAY DB50H 将50H存入存储单 元DELAY中 例 ORG2000HTAB DB12H 0AFH 00111001B 9 结果 2000H 12H 2001H 0AFH 2002H 00111001B 2003H 9 字符 自学5 6 7 5 DW 定义字 格式 标号 DWX1 X2 X3 Xn功能 将项或项表中的16位字数据依次存入标号所示的存储单元中 6 DS 定义存储单元 格式 标号 DS数字功能 从标号所指示的单元开始 根据数字的值保留一定数量的字节存储单元 留给以后存储数据用 例 SPACE DS10表示从SPACE开始保留10个存储单元 下条指令将从SPACE 10处开始汇编 7 BIT 地址符号命令 格式 标识符BIT位地址功能 将位地址赋予标识符 例 A1BITP1 0MOVC A1 汇编语言程序设计实例 1 简单程序 顺序程序 例 将片内RAM的30H和31H的内容相加 结果存入32H ORG2000HMOVA 30H A 30H ADDA 31H A A 31H MOV32H A 结果存入32HEND 例 拼字 将外部数据存储器3000H和3001H的低4位取出拼成一个字 送到3002H中 ORG2000HMOVDPTR 3000H DPTR 外部存储器地址3000HMOVXA DPTR A 3000H ANLA 0FH 屏蔽高4位 即取低4位 SWAPA 交换高低4位MOVR1 A 暂存于R1中INCDPTR 指向下一单元3001HMOVXA DPTR A 3000H ANLA 0FH 屏蔽高4位 即取低4位 ORLA R1 拼成一个字INCDPTR 指向下一单元3002HMOVX DPTR A 送结果到3002H单元SJMP END 2 分支程序 在解决实际问题时 常常需要根据不同的条件去执行不同的处理结果 这样 程序就产生了分支 这种结构的程序 称为分支程序 分支程序常用的指令 例 把片外RAM的首地址为10H开始存放的数据块 传送给片内RAM首地址为20H开始的数据块中去 如果数据为 0 就停止传送 ORG2000HMOVR0 10HMOVR1 20HLOOP MOVXA R0HERE JZHEREMOV R1 AINCR0INCR1SJMPLOOPEND 例 求符号函数 设X Y分别为30H 31H 1X 0Y 0X 0 1X 0 MOVA 30HJZLP0JBACC 7 LP1MOVA 01HSJMPLP0LP1 MOVA 0FFHLP0 MOV31H ASJMP END 分析 X是有符号数 判断符号位是0还是1可利用JB或JNB指令 判断X是否等于0则直接可以使用累加器A的判0指令 例3 24 内部RAM30H开头的20个连续单元中 存放有20个数 统计等于8的单元个数 结果放在R2中 分析 取一个数与8比较 相等R2加1 不相等跳过 并作20次重复即可 流程如右图 程序如下 ORG1000HSTART MOVR0 30HMOVR7 20MOVR2 0LOOP CJNE R0 08H NEXTINCR2NEXT INCR0DJNZR7 LOOPSJMP 3 循环程序 在程序执行过程中 当需要多次反复执行某段程序时 可采用循环结构 循环开始 循环结束 循环控制 设置循环初值 循环体 循环修改 完成 未完 完成 循环开始 循环结束 循环控制 设置循环初值 循环体 循环修改 未完 循环程序的结构循环程序包括以下四个部分 置循环初值循环体循环控制变量修改循环终止控制常用于循环控制的指令有 DJNZ CJNE JC JNC等控制类指令 例 有20个数存放于内部RAM从41H开始的连续单元中 试求其和 并将结果存放于40H单元 和数是一个8位二进制数 不考虑进位问题 ORG2000HMOVA 00H 累加器清0MOVR7 14H R7为循环计数器 R7 20MOVR0 41H 建立内存数据指针 首地址为41HLOOP ADDA R0 累加INCR0 指向下一数据单元DJNZR7 LOOP R7 1 0 表示累加未结束 继续累加 否则 往下执行 MOV40H A 结果存放于40H单元END 例 在内部RAM的42H开始的连续单元中存放一组8位无符号数 该数组长度为n n 3DH 存放于41H中 找出该组数中最大的数 并将其存入内部RAM的40H单元 ORG2000HMOVR0 42H 第1个数送40H单元MOV40H R0DEC41H 设置计数器初值 循环次数 LOOP INCR0 取下一个数 AMOVA R0CJNEA 40H COMP A 40H 0 转移COMP JCNEXT CY 1时表示不够减 转移MOV40H A 较大数存40HNEXT DJNZ41H LOOP 控制循环次数SJMP END 例 设计延时0 1s的子程序 设晶振频率为12MHz 分析 晶振频率为12MHz 所以 机器周期为1us执行时间 机器周期 DELAY MOVR7 C3H1LOOP1 MOVR6 0FFH1LOOP2 DJNZR6 LOOP22DJNZR7 LOOP12RET2执行时间 内循环共255次 2 255 510us 外循环1次1 2 255 2 513us 共外循环有195次 有执行时间 1 195 513 2 us 100038us 0 1s 4 查表程序用于查表的指令有两条 MOVCA A PCMOVCA A DPTR 当使用DPTR作为基址寄存器时查表比较简单 查表的步骤分三步 1 基址 表格首地址 送DPTR数据指针 2 变址值 在表中的位置是第几项 送累加器A 3 执行查表指令MOVCA A DPTR 进行读数 查表结果送回累加器A 例 利用查表方法计算内部RAM的40H单元中的一位BCD数 0 1 2 3 9 的平方值 并将结果存入41H单元 MOVA 40HMOVDPTR TABMOVCA A DPTRMOV41H ASJMP TAB DB0 1 4 9 16 25DB36 49 64 81 5 应用控制流程设计控制流程设计的基本方法在单片机的控制系统中 为了实现系统的自动控制 必须将控制现场的信息输入到单片机 经过计算机的处理以后以被控对象能够接受的形式输出到执行机构 实现对现场的控制 例 电机的简单起停控制1 分析 输入信号 启动按钮SB1 停止按钮SB2输出信号 继电器KA假定 按下按钮 相应的接口信号为低电平 P1 1 0 时 若 程序使P1 3 1 即KA 1 则 电机启动 2 按照上述的控制思路 我们可以方便的画出流程图 ORG1000HSTR MOVP1 00000110BWT1 JBP1 1 WT1 启动 SETBP1 3 电机启WT2 JBP1 2 WT2 停止 CLRP1 3 电机停SJMPWT1END 第三章结束
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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