- 1、本文档共252页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机自学资料
主要内容 第一章 概述 第二章 MCS-51单片机的结构和原理 第三章 MCS-51单片机的指令系统 第四章 MCS-51单片机的程序设计 第五章 MCS-51单片机的中断系统 第六章 MCS-51单片机的串行接口 第七章 MCS-51单片机的系统扩展 第八章 MCS-51单片机的测控接口(部分) 一、P0口的结构 1、P0口作为普通I/O口 2、P0作为地址/数据总线 二、P2的内部结构 ②P3的内部结构 第四章 汇编语言程序设计 §4.1 概述 4.1.4 汇编语言的规范 常用的伪指令 常用的伪指令 常用的伪指令 常用的伪指令 常用的伪指令 §4.3 程序设计基础与举例 方法1 方法2: 4.3.2 分支程序 4.3.2 分支程序 4.3.3 循环程序 循环控制的一般方法: 循环次数已知 利用循环次数控制 循环次数未知 利用关键字控制 利用“逻辑尺” 根据“逻辑尺”的内容,进行控制。 例4-3-6 : 50ms延时子程序。设晶振频率为12MHz,则机器周期为1us。 DEL: MOV R7,#200 ;1MC DEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC 延时时间:t=1+200[(1+1+2*123)+2]+2 ≈50000us=50ms 例4-3-8 将内部RAM中起始地址为data的数据串送到外部RAM中起始地址为buffer的存储区域中,直到发现‘$’字符,传送停止----循环次数事先不知道,先判断,后执行。 MOV R0,#data MOV DPTR,#buffer LOOP1:MOV A,@R0 CJNE A,#24H,LOOP2 ;判断是否为$字符 SJMP LOOP3 ;是,转结束 LOOP2:MOVX @DPTR,A ;不是,传送数据 INC R0 INC DPTR SJMP LOOP1 ;传送下一数据 LOOP3:END 4.3.4 子程序问题 子程序设计时注意事项: 1. 给子程序赋一个名字。实际为入口地址代号。 2. 要能正确传递参数: 入口条件:子程序中要处理的数据如何给予。 出口条件:子程序处理结果如何存放。 (寄存器、存储器、堆栈方式) 3. 保护与恢复现场: 保护现场:压栈指令PUSH 恢复现场:弹出指令POP 4. 子程序可以嵌套 例4-3-9 (上机调试) :利用查表法求平方和 ,设a、b、c分别存于内部RAM的DA、DB、DC三个单元中。 MOV A,DA ;取a ACALL SQR ;调用查表子程序 MOV R1,A ;a的平方暂存R1中 MOV A,DB ;取b ACALL SQR ;调用查表子程序 ADD A,R1 ;求出平方和暂存阿A中 MOV DC,A ;结果存于DC 中 SJMP $ SQR:MOV DPTR,#TAB ;子程序 MOVC A,@A+DPTR RET TAB: DB 0,1,4,9,16,25,36,49,64,81 END 利用累加器或寄存器传递参数 4.3.5 码型转换程序的设计 一、十六进制数与ASCCII码之间的转换 (对比BCD与ASCCI之间的转换—4.3.1中例2) 表4-1 十六进制数与ASCII码之间的关系 46H F 42H B 37H 7 33H 3 45H E 41H A 36H 6 32H 2 44H D 39H 9 35H 5 31H 1 43H C 38H 8 34H 4 30H 0 十 六 进制数 十 六 进制数 十 六 进制数 十 六 进制数 例4-3-15 将一位十六进制数转换成ASCII码,设十六进制数存放在R0中,转换后的ASCII码放在R2中。 HTASC: MOV A, R0 ;取十六进制数
文档评论(0)