200 likes | 320 Views
6. 51 单片机指令格式及指令系统. 本讲主要内容:. 6-1. 51 单片机汇编语言的指令格式 6-2. 指令表的查阅方法和指令功能的描述 6-3. 几种不同的寻址方法. 6-1. 51 单片机汇编语言的指令格式. 一个简单的彩灯设计 下图中的 8 个发光二极管代表 8 组彩灯,让它们按你的想法显示吧. 图 3-1 彩灯电路. 6-1. 51 单片机汇编语言的指令格式. 程序是如何进单片机的?. 开发软件. 编程器. 汇编语言程序. 6-1. 51 单片机汇编语言的指令格式. 51 单片机指令格式.
E N D
6 51单片机指令格式及指令系统
本讲主要内容: 6-1. 51单片机汇编语言的指令格式 6-2. 指令表的查阅方法和指令功能的描述 6-3. 几种不同的寻址方法 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 • 一个简单的彩灯设计 下图中的8个发光二极管代表8组彩灯,让它们按你的想法显示吧 图3-1 彩灯电路 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 程序是如何进单片机的? 开发软件 编程器 • 汇编语言程序 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 • 51单片机指令格式 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 • 汇编语言指令格式 [标号]: 操作码 [操作数] ;[注释] ↓ ↓ ↙ ↘ ↓ WAIT0 : JC TI, WAIT0 ;发送完一个字节吗? • 标号 又称为指令地址符号。对标号有如下规定: • 一般由1~8个ASCII字符组成,以字母开头,其余字符可以是字母、数字和其他特定字符。 • 不能使用助记符、伪指令或者寄存器的符号名称做标号。 • 与操作码之间用冒号分开,带方括号表示为可选项。 • 一个标号只能在程序中出现一次,不能重复出现。 • 操作码 是由助记符表示的字符串,它规定了指令要完成的具体操作。 • 操作数 是指参加操作的数据或数据的地址。 • 注 释 是为该条指令所做的说明,以便于阅读,中英文不限 ,用“;”和指令分开。 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 分类方法 按指令占用的ROM 空间 按指令功能 按指令执行的时间 位操作类指令 数据传送类指令 算术运算类指令 逻辑运算类指令 控制转移类指令 单周期指令 单字节指令 双周期指令 双字节指令 三字节指令 四周期指令 • 51单片机汇编语言指令分类 SiChuan Engineering Technical College-1959
6-1. 51单片机汇编语言的指令格式 • 汇编指令及其注释中常用的符号 • Rn(n=0~7)------当前选中的工作寄存器组中的寄存器R0~R7之一 • Ri(i=0,1)------当前选中的工作寄存器组中的寄存器R0或R1 • @ ---------------间址寄存器前缀 • #data ------------8位立即数 • #data16-----------16位立即数 • direct------------片内低128个RAM单元地址及SFR地址(可用符号名称表示) • addr11------------11位目的地址 • addr16------------16位目的地址 • rel---------------补码形式表示的8位地址偏移量,值在-128~+127范围内 • bit---------------片内RAM位地址、SFR的位地址(可用符号或名称表示) • /-----------------位操作数的取反操作前缀 • (×)------------表示 × 地址单元或寄存器中的内容 • ((×))--------表示以 × 单元或寄存器内容为地址单元的内容 SiChuan Engineering Technical College-1959
6-2. 指令表的查阅 • 从指令表中可以得到的信息 • 指令名称——指令的书写规范 • 机器代码——指令在单片机中的存储内容 • 指令功能——指令的执行效果 • 指令的字节数——指令的长度(所占存储单元的个数) • 指令周期——指令的执行时间(以机器周期为单位) SiChuan Engineering Technical College-1959
6-2. 指令表的查阅 • 指令表的作用 • 用于修改指令中的语法错误。 例如:查找指令MOV R8,#30中的语法错误。 语法错误一般会出现在标号处(标号过长、标号名称重复)、操作码处(操作码使用不当、书写错误)、操作数处(操作数使用不当、书写错误)、符号错误等处。 本条指令中操作数R8是错误的,在指令表中词条指令的格式为: MOV Rn,#data,其中Rn代表R0~R7,并没有R8。 SiChuan Engineering Technical College-1959
6-2. 指令表的查阅 • 用于了解指令功能 例如:若CY=1,(A)=30H,(55H)=70H,问以下两条指令的执行效果一样吗? a)ADD A,55H; b)ADDC A,55H; 答:查阅指令表后可知: a)指令的功能为A (A)+(55H) b)指令的功能为A (A)+(55H)+CY 可见指令a为两个数相加,而指令b为三个数相加,而此时CY=1,故执行的效果不一样。 (A)=0A0H (A)=0A1H SiChuan Engineering Technical College-1959
6-2. 指令表的查阅 64H ××H 03H 42H 4500H PC (PC)+3,SP ( SP)+1,(SP) (PC)7~0, SP (SP)+1,(SP) (PC)8~15,PC addr16 例如:若(SP)=62H,问以下程序段中 4200H: LCALL DISPLAY 4203H: MOV 41H,#33 ………… 4500H: DISPLAY:MOV 40H,A ………… LCALL指令执行后 ( SP)= (62H)= (63H)= (64H)= (PC)= 查阅指令表后可知LCALL指令为子程序调用指令,其功能为: 此时,会将LCALL指令的下一条指令的首地址(4203H)放入堆栈中保存,以便子程序执行后返回正确的位置,然后程序转向DISPLAY(4500H)处执行。 SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 立即寻址 例: MOV 30H,#00H;将立即数00H送给30H单元,即 30H←00H 在上面这条指令中,带下划线的操作数(在传送指令中称源 操作数)是一个立即数,即一个指定的常数,这种寻址方式 就称为立即寻址。 注意:立即数的前面必有“#”标志。 比如: ADD A,#0AFH ;A←(A)+AFH SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 直接寻址 例: MOV A,30H;将内部RAM中30H单元内的数据 ;送给累加器A,即 A←(30H) 在上面这条指令中,带下划线的操作数(源操作数)是直接给出内部RAM中某个单元的地址或名称(特殊功能寄存器),这种寻址方式称为直接寻址。 比如: MOV 40H,A; 40H←(A) SUBB A,60H; A←(A)-(60H)-CY SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 寄存器寻址 例: MOV A,R7;将通用寄存器R7中的数据送给A,即A←(R7) 在上面这条指令中,带下划线的操作数(源操作数)是当前工作寄存器组中某个寄存器,这种寻址方式称为寄存器寻址。 比如: XCH A,R1;累加器A和寄存器R1中的数互换 SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 寄存器间接寻址 例: MOV R0,#3FH ;R0←3FH,立即寻址方式 MOV A,@R0;A←((R0)),即:A←(3FH) 在上面的第2条指令中,带下划线的操作数不是R0,而是以(R0)为地址,间接找到内部RAM中的3FH单元,将(3FH)送给A,这种寻址方式称为寄存器间接寻址。 可用R0、R1和DPTR作间址寄存器,访问片内RAM或片外64KB的RAM地址空间。 比如: MOV DPTR,#0CFA0H ;将十六位地址CFA0H赋给数据指针DPTR MOVX A,@DPTR;将片外RAM(CFA0H)单元内的数送给A SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 变址寻址 例: MOVC A,@A+DPTR;将地址为(A)+(DPTR) 的ROM ;单元中的数送给A 在上面这条指令中,带下划线的操作数是以(DPTR)为基址,(A)为变址,将两者之和作为地址,找出该地址对应的ROM单元,再将该单元的数送给A,这种寻址方式称为变址寻址方式。MCS-51单片机中还有两条变址寻址指令: MOVC A,@A+PC JMP @A+DPTR SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 相对寻址 例: CJNE A,#80H,BUDENG;如(A)≠80H,跳转到BUDENG JNC DAYU;如(A)>80H,跳转到DAYU …… BUDENG: SETB FLAG0 ;置位标志位FLAG0 …… DAYU: SETB FLAG1 ;置位标志位FLAG1 …… 在上面这个程序片段中,带下划线的操作数指明了程序跳转的目的位置,这个目的位置的PC相对于下一条程序语句的PC不得超出-128~+127字节的范围。 SiChuan Engineering Technical College-1959
6-3. 寻址方式 • 位寻址 例: MOV C,30H;将地址为30H的位的状态赋给进位位Cy SETB P1.0;将P1口(对应特殊功能寄存器P1) 的P1.0位置1 在上面这两条指令中,带下划线的操作数不是某个字节地址或某个数,而是内部RAM中某个可直接寻址位的地址或名称,是针对位(bit)进行的操作,这种寻址方式称为位寻址。在指令表中,凡用bit和C做操作数的指令都属此类,它主要用在位操作指令和部分条件转移指令中。 比如: ANL C,OV ;位C和溢出位OV相与,结果再赋给C,即 ;C←C∧OV CLR RI ;将串口接收中断位RI清0 SiChuan Engineering Technical College-1959
思考题 寻址方式: 位寻址 寻址方式: 相对寻址 寻址方式: 寄存器间接寻址 寻址方式: 立即寻址 寻址方式: 寄存器寻址 操作数错误,类型不匹配可改为: MOV A,30H 或 MOV 20H,C 操作数错误,可改为: MOV A,Rn;Rn:R0~R7 操作数错误,可改为: MOVC A,@A+PC 操作数错误,可改为: MOVX A,@R0 操作数错误,寄存器之间不可赋值,可改为: MOV A,R5 MOV R6,A • 结合指令表,观察以下几条指令,看看是否有语法错误,如有请改正,如无,请说明它属于哪种寻址方式: MOV A,R0 MOV A,C MOV A,@R1 ADD A,R8 MOVC A,@A+R0 CJNE A,50H,0FH MOV R6,R5 MOV A , #1FH MOVX A,@R2 MOV C,P1.0 SiChuan Engineering Technical College-1959