网站大量收购独家精品文档,联系QQ:2885784924

第3章-MCS-51单片机指令系统-3.5汇编语言程序的基本结构.ppt

第3章-MCS-51单片机指令系统-3.5汇编语言程序的基本结构.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章-MCS-51单片机指令系统-3.5汇编语言程序的基本结构课件

3.5 汇编语言程序的基本结构 程序框架 ORG 0000H LJMP MAIN ;跳转至主程序 ORG 0003H LJMP INT0_INT ;跳转至外部中断0的中断服务程序 ORG 000BH LJMP T0_INT ;跳转至定时器0的中断服务程序 ORG 0013H LJMP INT1_INT ;跳转至外部中断1的中断服务程序 ??? ORG 0030H MAIN: ??? ;开始写主程序 END 3.5 汇编语言程序的基本结构 3.5.1 顺序程序设计 3.5.2 分支程序设计 3.5.3 循环程序设计 3.5.4 子程序设计 3.5.1 顺序程序设计 [例1] 功能:求变量X(0≤x≤5) 的平方 入口:X 值存放在片内RAM的 30H 单元 出口:X2 值存放在片内RAM的 31H 单元 [例2] 功能:两个8位无符号数相加,和仍为8位 入口:两个无符号数X1、X2分别存放于内部 RAM 的60H、61H单元中 出口:和送入62H单元 [例3] 功能:单字节压缩BCD码转换成二进制码 入口:R2 = 待转换压缩BCD码 出口:R2 = 转换结果 [例4] 功能:两个无符号双字节数相加 入口: 被加数存在内RAM 31H(高位字节)、30H(低位字节) 加数存放在内RAM 41H(高位字节)、40H(低位字节) 出口:和存入内RAM 31H(高位字节)、30H(低位字节) 3.5.2 分支程序设计 1. 单分支程序 [例] 功能:比较两个无符号数的大小 入口:外部 RAM 的存储单元ST1和ST2 出口:大数存入外部 RAM 中存储单元ST3 ORG 0000H  ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H STA: MOV DPTR, #ST1 ;第一个数的指针 MOVX A, @DPTR ;取第一个数 MOV R2, A ;保存 MOV DPTR, #ST2 ;第二个数的指针 MOVX A, @DPTR ;取第二个数 CLR C ;清零Cy PUSH ACC ;保存原值 SUBB A, R2 ;两数比较 POP ACC ;恢复原值 NEXT: JNC BIG0 ;若第二个数大, 则转 XCH A, R2 ;第一个数大 BIG0: MOV DPTR, #ST3  MOVX @DPTR, A ;存大数 SJMP $ END 2. 多分支程序 一般多分支、散转多分支 (1)一般多分支 [例1]x、y均为8位二进制数,求解: 入口:(R0)= x 出口:(R1)= y P82:一般多分支[例]纠错 ORG 0000H MOV R0, #-1 MOV A, R0 STA: ;\\CJNE R0, #00H, SUL1 ;判断R0是否为0\\ JNZ SUL1 ;不为0转SUL1 MOV R1, #00H SJMP SUL2 SUL1: JB ACC.7, NEG ;小于0转NEG MOV R1, #01H SJMP SUL2 NEG: MOV R1, #0FFH SUL2: SJMP $ END 3.5.3 循环程序设计 分类 先循环后判断、先判断后循环 单重循环程序 循环嵌套,称为双重或多重循环 只允许外重循环嵌套内重循环 不允许循环相互交叉 不允许从外循环程序跳到内循环程序 [例1] 单重循环 功能:n个单字节数相加,和为双字节,存放在(R3R4)中 入口:单字节数Xi存在40H开始的RAM单元中,n放在R2中 出口:和存放在R3R4中 [例2] 内部 RAM ADDR 为起始地址的数据块内数据是无符号数,块长在 LEN 内。编程求数据块的最大值。 入口:(ADDR)= 起始地址;(LEN)= 长度 出口:(MAX)= 最大值 [例3] 软件延时程序(P85) 机器周期数 1 MOV R0, #0FAH ;(R0)=250 1 LOOP: MOV R7, #70H 2 DJNZ R0, LOOP 延时时间= [(1+2)×250 + 1] × 1μs = 751μs [例4] 双重循环 功能:设计一个延时时间10ms的延时程序 分析:延时时间与所用晶振和延时程序中的循环次数有关。已知单片机的晶振为12MHZ,则一个机器周期为1μs 入口:(R0)=毫秒数,(R1)=1ms延时预定值 出口:定时到,退出程序 [例5] 多重循环 功能:编制用软件方法延时1S的程序

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档