[工学]51单片机汇编一些注意事项.doc

上传人:音乐台 文档编号:1976550 上传时间:2019-01-27 格式:DOC 页数:5 大小:135.50KB
返回 下载 相关 举报
[工学]51单片机汇编一些注意事项.doc_第1页
第1页 / 共5页
[工学]51单片机汇编一些注意事项.doc_第2页
第2页 / 共5页
[工学]51单片机汇编一些注意事项.doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[工学]51单片机汇编一些注意事项.doc》由会员分享,可在线阅读,更多相关《[工学]51单片机汇编一些注意事项.doc(5页珍藏版)》请在三一文库上搜索。

1、/*下面的类似 有点特殊 */MOV DPTR,#1045H /无MOV PC,#1045HMOV DPL,#45HMOV DPH,#10HMOV DPL,R1MOV DPH,R4/* * */直接寻址direct(如 09H) 与 Rn (不是Ri,Ri可以用 间接寻址的) 性质基本完全一样MOV R3,09HMOV 09H,R4ADD A,R4ADD A,60HADD A,R1 / 无 ADD A,08HMOV A,R0MOV 08H,R1/无 MOV R4,R1 MOV A,08HMOV 09H,50H/有 MOV direct1,direct2 但是 没有 MOV R0,R1 (没有

2、MOV R4,R1 也没有 MOV 06H,08H )注意虽然没有MOV R0,R1 但是可以通过A或B来转换 如下:MOV A,R3MOV R4,AMOV R0,#0FH/ 片内RAM 只能用 R0 R1 与连用 做间接寻址 而R2R7 和 A都不行而且注意 直接寻址direct 和间接寻址(R0 R1)的数字范围都是00HFFH(程序里要用0FFH表示),但是在不同的范围内访问的RAM会有区别:(一)00H7FH 两种方式效果一样例如将内部RAM 地址为(6FH)的内容 给R5(1)MOV R0 , 6FH MOV R5 ,R0 (两个语句,利用间接寻址)(2)MOV R5 , 6FH (

3、直接寻址)(二)80HFFH 两种方式效果不同(1)MOV R0 , 9FH MOV R5 ,R0 (利用间接寻址,访问的是RAM的80HFFH内存)(可知对于C51 该语句没有意义,因为C51RAM没有80HFFH内存)(2)MOV R5 , 9FH (直接寻址,访问特殊功能寄存器SFR的内存)(可知对于C51 该语句也有意义,因为C51RAM也有SFR内存)例如:MOV R1,80HMOV R1,00H / 将00H 给内部RAM 地址为(80H)的地方MOV 80H,R1 / 将00H给SFR地址为(80H)的地方即P0口注意:SFR占用的地址也是80HFFH 但是对于C52来说 RAM

4、的80HFFH 和SFR的80HFFH所占用的物理空间是相互独立的(就是分别利用直接寻址和间接寻址分别进行访问)/*/*一下说的片外RAM和ROM 都必须用累加器A(Rn不行)做中转 实现片内RAM与之的数据传送(单片机中内部RAM只读ROM的数据,一般不读ROM中的程序)读程序的是单片机内部的特别特别特殊的寄存器来完成(不属于RAM和SFR等的寄存器,一般不用考虑,如PC ALU等等)它们将控制命令和寻址命令等分开,由单片机内部自己协调(可能由“单片机的操作程序”(工厂事先编好的)来实现)*看打印的最后面的图:MOV DPTR,#1234HMOVX A,DPTRMOV R4,A/以上将片外R

5、AM中地址为 (1234H) 的寄存器的内容给(R4)MOV DPTR,#1234HMOV A,#00HMOVC A,A+DPTRMOV R4,A /以上将ROM中地址为 (1234H) 的寄存器的内容给(R4)/类似片内RAM中的(R3)给(R4)要用A一样MOV A,R3MOV R4,A/* 注意 ADD ADDC SUBB 的目的操作数也只能是A 循环移位的操作数也只能是A(如 RL A) */ 如下:ADDA,R3 /ADD R1,R3 ADD #08H,R3 都不行RL A / RL #80H RL R1 RL 08H 都不行/*/片外RAM 只能用 R0 R1 DPTR 与连用 做

6、间接寻址而且必须要用到累加器A(Rn不行) 只有6条命令MOVX R0,A MOVX R1,A MOVX DPTR,AMOVX A,DPTR /可读可写MOVX A,R1MOVX A,R0/ 注意 MOVX R1,R4 MOVX DPTR,R1 MOVX R1,#60H都不行/*/R0M(片内外一样) 只能用 A+DPTR A+CP (甚至A和 CP都不能交换位置) 与连用 做间接寻址而且必须要用到累加器A(Rn不行) 只有2条命令MOVC A,A+PC /只能读不能写 即无MOVC A+PC,AMOVC A,A+DPTR /只有MOVC A,A+PC MOVC A,A+DPTR这两条命令可对

7、ROM /*p65 循环指令*/通过这些循环命令,直接改变PC,或对相应的寄存器值(如A,direct)进行判断改变PC的值,从而使程序能按编写者的意图进行!一下说的片外RAM和ROM 都必须用累加器A(Rn不行)做中转 实现片内RAM与之的数据传送(单片机中内部RAM只读ROM的数据,一般不读ROM中的程序)读程序的是单片机内部的特别特别特殊的寄存器来完成(不属于RAM和SFR等的寄存器,一般不用考虑,如PC ALU等等)它们将控制命令和寻址命令等分开,由单片机内部自己协调(可能由“单片机的操作程序”(工厂事先编好的)来实现)*累加器A清零和位清零/置一字节操作:CLR A / 只能是A 无

8、 SET A CLR P0/Rn SET P0/Rn 等位操作:CLR P1.0 / 清零 SETB P1.0 / 置1CLR / SETB 后面可以是任意有定义的位 如:C, P0.1 等,还可以是00H0FFH 任意一个位注意:CLR 80H 是将80H这个位定义的这一位即P0.0清零,而不是将 80H对应的字节(即P0整个端口个八位都清零)MOV P0,#00H/P0 和 80H 一样 是字节置数 与后面的 MOV P1.1,C 有区别MOV 80H,#0FFH / 是字节置数 与后面的 MOV 92H,C 有区别MOV P1.1,C / P1.1 和 91H 一样。是位置数与前面的 M

9、OV P0,#00H 有区别MOV 92H,C / 92H 和 P1.2 一样 是位置数与前面MOV 80H,#0FFH 有区别关于对“原始数据”的储存DB 34H,A,ABCD / 34H, 41H, 41H, 42H,43H, 44HDB 02H, 30H / 与LJMP 30H 类似/所以经常不让 “原始数据”连续执行, 只是单个调用(不给其连续执行的机会) 如下: ORG 0000H LJMP MAIN ORG 0040HDT: DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFHMAIN: MOV R6,#00H MOV DPTR,#0040H 。 。 。*名称代替(相当于C语言中的 sbit st,P0.1 等等,)TAL EQU 20H (字节代替) SAL BIT P1.0(位代替)例如:MOV 20H,#00H MOV P1.0,CTAL EQU 20H SAL BIT P1.0MOV P0,TAL CPL SAL(字节代替) MOV C,SAL (位代替)还要注意:上面的 MAIN TAL SAL 命的名字不能是单片机中已有的寄存器的名字,如PC ,DPTR, R0 等等

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1