- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.立即寻址 5.变址寻址 6.相对寻址 7.位寻址
内部RAM中有128个可寻址位 特殊功能寄存器中可位寻址的位
表 3.2 数据传送类指令一览表(1)
表 3.2 数据传送类指令一览表(2)
表 3.3 算术运算指令(1)
表 3.3 算术运算指令(2)
表 3.4 影响标志位的指令(1)
表 3.4 影 响 标 志 位 的 指 令 (2)
MOV DPL,R6
MOV DPH,R7 MOVX @DPTR,A
;取目的数据区地址指针
;存入目的数据区
INC DPTR
MOV R6,DPL MOV R7,DPH
DJNZ 30H,LP POP DPH POP DPL ….
;若数据块未移完,则继续
例6. 利用查表的方法编写Y=X2(X=0, 1, 2,…, 9)的 程序。 解:设变量 X 的值存放在内存 30H 单元中,求得的 Y 的值 存放在内存31H单元中。平方表存放在首地址为TABLE的 程序存储器中。
0011 42 40 ORL 40H,A 0013 21 13 HERE :AJMP HERE 注:实现左移5位,采用了两种方法,即移位和乘法。
例 4 :温度控制程序。某温度控制系统, A 中存温度采 样值 Ta , (20H)= 温度下限值 T20 , (30H)= 温度上限值 T30 。 若 Ta > T30,程序转降温 JW ,若 Ta < T20,程序转升温 SW, 若T30≥Ta≥T20程序转FH返回主程序。 CJNE A,30H , LOOP AJMP FH LOOP:JNC JW AJMP FH LOOP1:JC SW ;等于T30,转FH ;大于T30,降温 ;等于T20,转FH ;小于T20,升温
表 3.5 逻辑运算指令
表 3.6 控 制 转 移 指 令
表 3.7 位 操 作 指 令
例1:检查传送结果 。已知内部RAM (10H)=00H, (30H)=40H,(40H)=10H,P1口为11001010B,分析指令执 行后各单元内容。 MOV R0,#30H ;R0=30H MOV A,@R0 ;A=40H MOV R1,A ;R1=40H MOV B, @ R1 ;B=10H MOV @ R1,P1 ; (40H)=11001010B MOV P2,P1 ;P2=11001010B MOV 10H,#20H ;(10H)=20H
方法一:采用MOVC 下图所示。
A, @A+DPTR指令实现,查表过程如
程序如下: ORG 1000H START: MOV A, 30H ; 将查表的变量X送入A MOV DPTR, #TABLE ; TABLE送DPTR MOVC A, @A+DPTR ; 将查表结果Y送A
MOV 31H, A
Y=X0+X1X2+X1X2+X4X5X6X7
MOV A,P1 JB ACC.0,MM SETB C SJMP OUT;X0=1,转出口 MM:MOV C,ACC.1 ANL C,/ACC.2 JC OUT ;X1X2=1,转出口 MOV C,ACC.2
ANL C,/ACC.1 JC OUT;X1X2=1,转出口 MOV C,ACC.7 ANL C,/ACC.4 ANL C,/ACC.5 ANL C,/ACC.6;X4X5X6X7 OUT:MOV P3.0,C …
; Y值最后放入31H中
TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END
方法二:采用MOVC A, @A+PC指令实现,查 表过程如下页图所示。 程序如下: ORG 1000H
START: MOV A, 30H ; 将查表的变量X送入A
ADD A, #02H ; 定位修正
MOVC A, @A+PC
MOV 31H, A TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END
; 将查表结果Y送A
; Y值最后放入31H中
例7:试编程序实现下述逻辑表达式的功能
说明:设 8 位输入信号从 P1 口输入, Y 信号从 P3.0 输出。
CJNE A,20 H,LOOP1
FH:-----JW:-----SW∶------
;保温
例5:数据块移动。将2000H单元开始的一批数据传送到从 3000H开始的单元中,数据长度在内部RAM的30H中。
说明:因为2000H和3000H都在外部RAM或I/O中,使用地址指针均 为DPTR,所以要注意DPTR的保护、恢复。
执行结果: (10H)=20H, (30H)=40H, (40H)=CAH, P1=P2=CAH,
A=40H, B=10H, R0=30H, R1=40H。
例2: 编程将4位BCD码倒序。 设内部数据存储器2AH、2BH单元连续存放有4位 BCD码数符,试编一程序把4位BCD码数符倒序排列。 2AH a3 a2 2BH a1 a0 2AH a0 a1 2BH a2 a3
A,@R1 ;2BH单元内容送A( a1 a0)
MOV
HERE:SJMP
@R1, A
HERE
例3: 数据的拆分与拼装。要求: 从(30H)=x7x6x5x4x3x2x1x0中取出高5位,从(31H) = y7y6y5y4y3y2y1y0中取出低3位,拼装后存入40H中,即 (40H)=Y2Y1Y0X7X6X5X4X3。
地址 0000 0002 0003 0004 0006 0009 000B 000E 000F 机器码 E5 30 C4 23 F5 40 53 40 1F E5 31 75 F0 20 A4 54 E0 ORG 0000H MOV A,30H SWAP A ;X3X2X1X0 X7X6X5X4 RL A ;X2X1X0 X7X6X5X4X3 左移了5位 MOV 40H,A ANL 40H,#00011111B MOV A,31H MOV B,#20H MUL AB ANL A,#11100000B; Y2Y1Y0 0 0 0 0 0左移了5位
2AH a3 a2
MOV MOV MOV SWAP MOV MOV SWAP XCH R0,#2AH R1,#2BH A,@R0 A @R0,A A A, @R0
2BH a1 a0
2AH 2BH a0 a1 a2 a3
;2AH单元内容送A( a3 a2 ) ;A的高4位与低4位交换(a2 a3) ;(2AH)= a2 a3 ;A 的高4位与低4位交换(a0 a1) ;2AH与2BH单元内容交换
表 3–1
寻址方式与寻址空间
寻址方式
1.寄存器寻址
寻 址 空 间
R0~R7、A、B、CY(bit) 、DPTR 内部RAM低128字节 ( 00H~7FH )
2.直接寻址
特殊功能寄存器 ( 80H~0FFH )
3.寄存器间接 寻址 内部RAM(@R0,@R1,@SP仅PUSH、POP) 外部RAM(@R0,@R1,@DPTR) 程序存储器(#H ,# H ) 程序存储器(@A+PC,@A+DPTR) 程序存储器(PC+偏移量)
ORG 0100H MOV DPTR,#2000H PUSH DPL ;源数据区首址 ;源数据区首址压栈保护
PUSH DPH
MOV DPTR,#3000H ;目的数据区首址 MOV R6,DPL ;目的数据区首址存入寄
LP:POP DPH POP DPL
MOVX A,@DPTR ;取源数 INC DPTR PUSH DPL PUSH DPH