




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用 第3章MCS 51单片机指令系统 3 5汇编语言程序典型结构实例 程序框架 ORG0000HLJMPMAIN 跳转至主程序ORG0003HLJMPINT0 INT 跳转至外部中断0的中断服务程序ORG000BHLJMPT0 INT 跳转至定时器0的中断服务程序ORG0013HLJMPINT1 INT 跳转至外部中断1的中断服务程序 ORG0030HMAIN 开始写主程序END 中断入口地址 主程序开始 NAMEEQUR1NUMDATA30HP10BITP1 0ORG0000HLJMPMAIN 跳转至主程序ORG0003HLJMPINT0 INT 跳转至中断服务程序ORG0030HMAIN 开始写主程序SJMP PRO1 RETINT0 INT RETITAB DB00H 01H 02HDB03H 04HEND 变量定义 程序入口 主程序 子程序和中断子程序 数据表格 汇编语言程序的基本结构 顺序结构 分支程序结构 循环程序结构 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 例3 5 1 将内部RAM25h 45h单元的数据依次复制到55h 75h单元 25h 56h 55h 45h 75h 26h 1 使用R0和R1寄存器2 MOV指令 间接寻址3 增加R0和R1中的地址 Start 55h R1 Y N 将 R0的数传送到 R1 R0 46h 结束 开始 25h R0 R0加1 R1加1 LOOP 例1 MOV R1 R0 ACCA累加器 Direct直接寻址 Ri间接寻址 Rn寄存器 data立即数 MOV 可能的数据传送 Start 55h R1 Y N 将 R0的数传送到 R1 R0 46h 结束 开始 25h R0 R0加1 R1加1 LOOP 例1 MOVA R0MOV R1 A START MOVR0 25hMOVR1 55hLOOP MOVA R0MOV R1 AINCR0INCR1CJNER0 46h LOOPSJMP 例1 若要求 25h 45h 到 55h 75h 反向传送 程序如何改动 25h 45h 到 55h 75h 反向传送 55h 45h 75h 25h MM NN PP QQ MM NN 25h 45h 到 55h 75h 反向传送 55h 45h 75h 25h MM NN PP QQ Start 75h R1 Y N R0 R1 R0 46h 结束 开始 25h R0 R0加1 R1减1 LOOP START MOVR0 25hMOVR1 75hLOOP MOVA R0MOV R1 AINCR0DECR1CJNER0 46h LOOPSJMP 练习1 给内部RAM40h到DFh单元全部赋初值3Bh 练习2 将内部RAM40h 7Fh单元的数据依次复制到外部RAM7000h开始的单元 画流程图并编写程序 练习1 3Bh 40h DFh 40h R0 Y N R0 E0h 结束 开始 3Bh R0 R0加1 LOOP MOVR0 40hLOOP MOV R0 3BhINCR0CJNER0 0E0h LOOPSJMP 7000h 40h 7Fh ExternalRAM InternalRAM A 内部RAM40h 7Fh到外部RAM7000h开始的单元 练习2 R0 80h 开始 40h R0 7000h DPTR Data R0to DPTR R0加1 DPTR加1 结束 Y N LP 内部RAM40h 7Fh到外部RAM7000h开始的单元 40h 7Fh ExternalRAM InternalRAM 7000h A MOVR0 40hMOVDPTR 7000hLP MOVA R0MOVX DPTR AINCR0INCDPTRCJNER0 80h LPSJMP 练习2 例2 找出内部RAM20h 4Fh中所存无符号数的最大值 并存入60h单元 20h 4Fh 21h 25 36 C5 77 4E 60h 25 36 C5 R0 60h 20h R0 结束 R0加1 开始 R0 60h R0 60h R0 50h Y Y N N LOOP 例2 CONT START MOVR0 20hMOV60h R0LOOP INCR0CJNER0 50h CONTSJMP FinishCONT MOVA R0CLRCSUBBA 60h R0 60h JCLOOP if 60h AMOV60h R0 R0to60hSJMPLOOP 例2 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 例3 多字节无符号数的加法 入口 DATA1 被加数的低位地址 DATA2 加数的低位地址 N字节相加出口 DATA2 和数低位地址 MADD MOVR0 DATA1 置被加数MOVR1 DATA2 置加数MOVR7 N 置字节数CLRC 清进位LOOP MOVA R0ADDCA R1 求和MOV R1 A 存结果INCR0 修改指针INCR1DJNZR7 LOOP 循环判断 例4 求变量X 0 x 10 的平方 入口 X值存放在片内RAM的30H单元出口 X2值存放在片内RAM的31H单元 ORG0000HMAIN MOVDPTR 0200HMOVA 30HMOVCA A DPTRMOV31H ASJMP ORG0200HTABLE DB00 01 04 09 16 25DB36 49 64 81 100END 200h 0000 00 01 04 09 Main 16 25 A 4 例4 求变量X 0 x 10 的平方 ORG0000HMAIN MOVDPTR 2000HMOVA 30HADDA 04HMOVCA A PCMOV31H A 占2个字节SJMP 占2个字节ORG0200HTABLE DB00 01 04 09 16 25DB36 49 64 81 100END 200h 0000 00 01 04 09 Main 16 25 另解 A 4 A 8 例5 单字节压缩BCD码转换成二进制码 入口 R2 待转换压缩BCD码出口 R2 转换结果 MOVA R2 A d1d0 BCDANLA 0F0H 取高位BCD码d1SWAPA A 0d1HMOVB 0AH B 10MULAB d1 10MOVR3 A R3暂存乘积结果MOVA R2 A d1d0 BCDANLA 0FH 取低位BCD码d0ADDA R3 d1 10 d0MOVR2 A 保存计算结果SJMP 练习1 填表 给出每条指令执行后相应单元的值 练习2 填表 给出每条指令执行后相应单元的值 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 例6 简单逻辑运算 将内部RAM5Ch单元的数分别与1 9异或 并将结果存入71h 79h单元 5C 77 76 75 74 73 72 71 78 79 01 NN 02 03 异或 R0 R1 Y N 01h R0 71hinR1 R1加1 结果存入 R1 A 与 5Ch 异或 R0 0Ah R0 A 71h R1 R0加1 结束 开始 LOOP 例6 START MOVR0 01hMOVR1 71hLOOP MOVA R0XRLA 5ChMOV R1 AINCR0INCR1CJNER0 0Ah LOOPSJMP Finish 例6 将十进制数128存入内部RAM70h单元 右移2位后结果存入71h单元 内存40h到5Fh单元存有带符号数 计算其中负数的个数 并将结果存入10h单元 根据要求编写程序 练习1 练习2 MOVA 80hMOV70h ARRARRAMOV71h ASJMP 80h 128 20h 32 练习1 将十进制数128存入内部RAM70h单元 右移2位后结果存入71h单元 CHKNEG 若C 1则COUNT单元加1RLCAJNCNEXTONEINCCOUNTNEXTONE RRCA 恢复原值RET C 练习2 内存40h到5Fh单元存有带符号数 计算其中负数的个数 并将结果存入10h单元 COUNT 0 40h R0 结束 R0 A 开始 R0 60h LOOP 练习2 调用子程序CHKNEG R0加1 COUNTEQU10hMOVR0 40hMOVCOUNT 00hLOOP MOVA R0ACALLCHKNEGINCR0CJNER0 60h LOOPSJMP CHKNEG RLCAJNCNEXTONEINCCOUNTNEXTONE RRCARET 练习2 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 例7 软件实现延时 若需编写延时100ms的子程序 振荡频率 12MHz 100ms 1 12M 1200000 需要 个周期 START MOVR0 XXhLOOP1 MOVR1 YYhLOOP2 DJNZR1 DJNZR0 LOOP1RET 例7 软件实现延时 100ms12MHz 子程序开始 返回 R1 0 R1减1 XX R0 YY R1 R0减1 R0 0 N N Y Y LOOP1 LOOP2 LOOP1执行多少次 XX LOOP2执行多少次 XX YY 例7 软件实现延时 START MOVR0 XXh 1次LOOP1 MOVR1 YYh XX次LOOP2 DJNZR1 XX YYDJNZR0 LOOP1 XX次RET 1次 例7 软件实现延时 时间计算表 START MOVR0 XXLOOP1 MOVR1 YYDJNZR1 DJNZR0 LOOP1RET START MOVR0 0FFhLOOP1 MOVR1 0C3hDJNZR1 DJNZR0 LOOP1RET 舍入误差 22 最大延时时间是多少 子程序开始 返回 R1 0 R1减1 XX R0 YY R1 R0减1 R0 0 N N Y Y FF FF 例7 软件实现延时 时间计算 R1减1 返回 R2减1 YY R1 XX R0 ZZ R2 R0减1 子程序开始 R2 0 R1 0 R0 0 3重循环 软件延时的缺点 忙等待 Timedelaysforlights Checkforcars Oscillator Interrupt CPU ROM RAM Timer1 Timer0 I Oports Serial Externalinterrupts Counterinputs P0 P1 P2 P3 TXD RXD 8051Microcontroller 硬件定时 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 文本处理 例8 4位二进制码转换成ASCII码 7 D R0中的数10100111 R0中的数11111101 结果存入36h单元 若9则 37h togiveA F 例8 4位二进制码转换成ASCII码 MOVA R0ANLA 0Fh 取低位PUSHACC 存入堆栈CLRC 复位C标志位SUBBA 0Ah 10吗 POPACCJCNUMBERSLETTERS ADDA 37h 在A F范围SJMPSAVENUMBERS ADDA 30h 在0 9范围SAVE MOV36h ASJMP 例8 4位二进制码转换成ASCII码 P2口 寄存器R700000110 6 36h ASCII 6 例9 ASCII码转换成二进制 例9 ASCII码转换成二进制 START MOVP2 0FFh 由P2口输入LOOP MOVR7 P2 读P2口MOVA R7 ASCIItoACLRCSUBBA 30h A 30h 二进制MOVR7 A 结果存入R7SJMPLOOP 例9 ASCII码转换成二进制 MOVA B复制到A A 0F0h 取高位十六进制数SWAP 交换高低位 ACC 存入堆栈CLR 复位CSUBBA A减去10POPACC LOWERADDA 07h 10 加37hLOWER ADDA 30h 10加30hMOV A 发送到P3口RET 返回 练习1 根据注释补充程序 B ANL A PUSH C 0Ah JC P3 例10 字符的存储与检索 由P3口向外发送字符信息 Login ORG0000hMOVDPTR 8000hLOOP CLRAMOVCA A DPTRMOVP3 AINCDPTRCJNEA 3Ah LOOPSJMP ORG8000hDB Login 8000h 0000 4C 6F 67 69 Main 6E 3A 例10 字符的存储与检索 由P3口向外发送字符信息 Login ORG0000hMOVDPTR 8000hLOOP CLRAMOVCA A DPTRMOVP3 AINCDPTRCJNEA 3Ah LOOPSJMP ORG8000hDB Login 8000h 0000 4C 6F 67 69 Main 6E 3A 例10 字符的存储与检索 P0 8051 P2 0 Ready 向打印机发送字符串 WelcometoBeijing 每个字符后发送Strobe选通脉冲 发下一个字符前等待Ready脉冲信号 遇到ASC0结束 Strobe P2 1 例11 向打印机发送字符 0 1 0 1 0 1 1 1 1 W 1 Y N 字符 ASC0 在存储器中存入字符信息 例11 初始化DPTR 开始 发送 DPTR的字符到P0口 准备好脉冲 发选通脉冲 结束 DPTR加1 Y CONT NEXT N PRINTEREQUP0STROBEBITP2 1READYBITP2 0ORG8000hDB WelcometoBeijing 00h 例11 ORG0000hMOVDPTR 8000hNEXT CLRAMOVCA A DPTRMOVPRINTER A PrintcharSETBSTROBE 发选通脉冲NOP CLRSTROBECJNEA 00h CONT ASC0 SJMP 结束CONT SETBREADY 等待ReadyJNBREADY 等高电平JBREADY 等低电平INCDPTR 下一个字符SJMPNEXT 例11 典型程序实例 3 5 1数据处理类程序3 5 2算术运算类程序3 5 3逻辑运算类程序3 5 4延时程序3 5 5文本处理类程序3 5 6程序控制类程序 例12 多分支程序 Home controlsystem HCS Lights TV Cooker Gates Waterheater A MainProgram Jumptable Subroutines 例12 多分支程序 MAIN MOVP0 0FFh P0作输入口MOVDPTR TABLELOOP MOVA P0 读功能号JZLOOP A 0时循环等待RLA A乘以2JMP A DPTR 跳转到表中相应位置 TABLE NOP 0号功能没有NOPSJMPLIGHTS 跳转表开始SJMPAIRCON LIGHTS ACALLSUBR LIGHTS 子程序AJMPLOOPAIRCON ACALLSUBR AIRCONAJMPLOOP A MAIN MOVP0 0FFh MakeP0aninputMOVDPTR TABLELOOP MOVA P0 ReadfunctionJZLOOP LOOPifA 0RLA MultiplyAby2JMP A DPTR Jumptotable TABLE NOP ZeronotusedNOPSJMPLIGHTS Startofjump tableSJMPAIRCON LIGHTS ACALLSUBR LIGHTS SubroutinesAJMPLOOPAIRCON ACALLSUBR AIRCONAJMPLOOP 02h 04h TABLE 04h TABLE 04h 例12 多分支程序 练习 填表 给出每条指令执行后相应单元的值 嵌套与递归子程序 嵌套与递归子程序 嵌套与递归子程序 ORG0000hMAIN CLRAACALLSUBRSJMP RecursivesubroutinefollowsSUBR ADDA R0DJNZR0 AGAINRETN RETAGAIN ACALLSUBR RecursivecallSJMPRETN Findsumofnumbers1toN NisinR0 例13 递归子程序 ORG0000h0000MAIN CLRA0001ACALLSUBR0003SJMP Recursivesubroutine0005SUBR ADDA R00006DJNZR0 AGAIN0008RETN RET0009AGAIN ACALLSUBR000BSJMPRETN Stack ACALL1 PUSHtheaddressofthenextin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线性代数试题及答案
- 物理相互运动试题及答案
- 2025年河南省驻马店市上蔡县中考三模历史试题(含答案)
- 加强工程设计企业的客户关系管理
- 2025挖掘机采购合同范本
- 2025年北京市商业店铺装修工程施工合同文件范本
- 2025年中国水净化器行业市场前景预测及投资价值评估分析报告
- PARP7-IN-23-生命科学试剂-MCE
- L-645164-生命科学试剂-MCE
- 2025年中国室内推拉门行业市场前景预测及投资价值评估分析报告
- 2025年农村宅基地转让协议
- T/CIMA 0089-2023多参数智能水表
- 2025年河北省中考乾坤押题卷数学试卷B及答案
- 2025安徽淮北源淮实业有限公司招聘5人笔试备考试题及答案解析
- 2025至2030中国船用甲板机械市场供需平衡调查与前景预测研究报告
- 2025年国际安全与反恐研究职业资格考试试题及答案
- 期末真题汇编 12 非连续性文本阅读(含答案)-七年级语文下册(统编版2024)
- GB/T 45551-2025蜜蜂生产性能测定技术规范
- 2025年中考语文二轮复习:字音 练习题(含答案)
- 港口上岗证考试试题及答案
- 临床护理敏感质量指标解读
评论
0/150
提交评论