- 1、本文档共174页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课件精品文档
源程序 ORG 1000H SQU: MOV A,20H ;取X ADD A,#3 ;修正偏移量 MOVC A,@A+PC ;查表求Y=X2 (PC=1005H) MOV 21H,A ;存结果 RET ;子程序结束 TAB: DB 00,01,04 … ;平方表 DB 09,… ,225 思考题:当0≤X≤255时,如何用查表法编程求Y=X2。 方法2: 例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求查表求Y,存入片内RAM 21H单元。 指令地址 1000H 1002H 1004H 1005H 1007H 1008H 100BH * 远程和近程查表指令比较: 特点: 1、MOVC A,@A+DPTR 指令可访问整个ROM的64KB空间,表格可放在ROM的 任何位置,与MOVC指令无必然的关系。 2、MOVC A,@A+PC 优点:不改变PC的状态,根据A的内容取表格常数。 缺点: (1)表格只能存放在查表指令以下的256个单元内。 (2)当表格首地址与本指令间有其它指令时,须用调 整偏移量,调整量为下一条指令的起始地址到表格首址 之间的字节数。 * 3.5.3 多分支转移(散转)程序 一、用多分支转移指令:JMP @A+DPTR实现多分支转移程序。 利用查地址表法:按分支号转移 【例3-35】现有128路分支,分支号分别为0~127,要求根据R2中的分支信息转向各个分支的程序。即当 (R2)=0,转向OPR0; (R2)=1,转向OPR1; … (R2)=127,转向OPR127。 * [例]有BR0、BR1、BR2和BR3共4个分支程序段,各分支程序段的功能依次是从内部RAM256B范围取数、从外部RAM低256B范围取数、从外部RAM4KB范围取数和从外部RAM64KB范围取数。 并假定R0中存放取数地址低8位地址,R1中存放高8位地址,R3中存放分支序号值。 假定以BRTAB作差值表首地址, BR0_BRTAB ~ BR3_BRTAB为差值。 分析:差值表=分支入口地址-该表首址 * MOV A,R3 MOV DPTR,#BRTAB MOVC A,@A+DPTR JMP @A+DPTR BRTAB: DB BR0_BRTAB DB BR1_BRTAB DB BR2_BRTAB DB BR3_BRTAB BR0: MOV A,@R0 SJMP BRE BR1: MOVX A,@R0 SJMP BRE BR2: MOV A,R1 ANL A,#0FH ANL P2,#0F0H ORL P2,A MOVX A,@R0 SJMP BRE BR3: MOV DPL,R0 MOV DPH,R1 MOVX A,@DPTR BRE: SJMP $ ;分支转移值送A(如R3=2) ;差值表首址(BRTAB=3000H) ;查表[A+DPTR=3002H,(A)=40H ] ;转移(A+DPTR=3040H) ;差值表(=10H) (=20H) (=40H) (=60H) ;从内部RAM取数 ;从外部RAM256B取数 ;从外部RAM4KB取数 ;高位地址取低4位 ;清P2口低4位 ;发高位地址 ;从外部RAM64KB取数 程序: 入口地址: 3010H 3020H 3040H 3060H 差值表=分支入口地址-该表首址 * (1)先用无条件转移指令(“AJMP”或“LJMP”)按顺序构造一个转移指令表,执行转移指令表中的第n条指令,就可以转移到第n个分支; (2)将转移指令表的首地址装入DPTR中; (3)将分支信息装入累加器A形成变址值; (4)然后执行多分支转移指令JMP @A+DPTR实现转移。 二、用查转移指令表法:用分支转移指令AJMP与LJMP 对AJMP指令应将分支序号乘以2, 转移范围为2KB;对LJMP指令应将分支序号乘以3, 转移范围为64KB。 * 程序清单如下: MOV A,R2 RL
文档评论(0)