




已阅读5页,还剩94页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第三讲:单片机软件基础知识,本讲重点: 寻址方式; MCS-51指令集; 伪指令; 汇编语言与简单程序设计.,2,指令系统 所有指令的集合统称为指令系统。,指令 指挥计算机执行某种操作的命令。,汇编语言 把机器语言用英文名称或缩写形式来作为助记符,以助记符表示的指令。 无移植性。,机器语言 以二进制代码来描述指令功能的语言。,指令的描述:,3,指令的组成,指令 操作码 + 操作数,操作码:指示指令的性质,即要做什么。 操作数:指示操作对象,或操作对象所在位置。,4,MCS-51指令的格式,操作码:就是指令功能助记符,确定本条指令完成什么样的操作。(ANL) 目的操作数:提供操作的对象, 并指出一个目标地址, 表示操作结果存放单元的地址。它与操作码之间必须以一个或几个空格分隔。(A) 源操作数:指出的是一个源地址(或立即数), 表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(#10H),标号:操作码 目的操作数,源操作数;注释,例如:START: ANL A,10H ; A和16按位与,5,MCS-51指令的格式,方括符 :表示可选项,可有可无。 标号:是用户设定的符号, 它实际代表该指令所在的地址。标号必须以字母开头, 其后跟18个字母或数字, 并以“:”结尾。(START:) 注释部分:在编写程序时, 为了增加程序的可读性, 由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头, 可以用中文、英文或某些符号来表示。,标号:操作码 目的操作数,源操作数;注释,6,立即数 作为指令代码的一部分,常出现在指令中,作源操作数。 寄存器操作数 存放在寄存器里的操作数,可作源操作数和目的操作数。 存储器操作数 存放在存储器里的操作数,可作源操作数和目的操作数。,操作数类型,7,MCS-51单片机指令集分类:(共111条指令),每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类: 单字节(49条);双字节(46条);3字节(16条),INC DPTR;(1010 0011),单字节指令 MOV A,#01H;(0111 0100 0000 0001),双字节指令 ANL DIRECT,#DATA;(0101 0011 直接地址 立即数) ;3字节指令,8,第三部分 指令系统及程序设计,MCS-51单片机指令集分类:,每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类: 单周期(64条);双周期(45条);4周期(2条) 例如:MOV A,Rn; 单周期指令 SJMP rel; 双周期指令 MUL AB; 四周期指令,按指令的功能分类,可分为5大类: 数据传送类(29条);算术运算类(24条) 逻辑运算及移位类(24);控制转移类(17条) 位操作类(17条),9,51单片机指令的寻址方式,立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 变址寻址(基址寄存器+变址寄存器间接寻址) 相对寻址 位寻址,寻址方式:指令按地址获得操作数的方式 七种寻址方式,一条指令可能含多种寻址方式,10,立即寻址 操作数直接就出现在指令中 例:MOV A,#64H ;(A) 立即数 64H ADD A,#05H ;(A)(A)+立即数 05H 注意:符号“#”表明其后跟的是立即数, 立即数就是数字量本身。,11,寄存器寻址 从寄存器中读取操作数或存放操作数进寄存器。(主要针对工作寄存器R0-R7,但A,B,DPTR及CY也可当作寄存器寻址) 例:MOV A,B ; (A) (B) MOV 30H,R0 ;(30H)(R0) MOV A,R1 ; (A) (R1) 寄存器寻址按选择的工作寄存器进行操作,它们是通过指令机器码的低3位的8种组合来区分的,(R0R7对应E8HEFH)。 注:(X) 某寄存器或某单元的内容,12,直接寻址 指令中直接给出了操作数所在单元的地址或名称 例:MOV R1,1FH ;(R1) (1FH) MOV 30H,4AH ;(30H)(4AH),直接寻址方式可访问三种地址空间: 内部RAM的00-7FH空间; 特定的位地址空间; 特殊功能寄存器地址空间。,13,直接寻址 访问内部RAM的00-7FH空间: 例:MOV R6,22H ;(R6) (22H) MOV 27H,55H ;(27H)(55H) 访问特定的位地址空间: 例:MOV C, 33H ;(CY) (33H) MOV C, 5EH ;(CY) (5EH),14,直接寻址 访问特殊功能寄存器地址空间,在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如: MOV A, SP ; (A) (SP) MOV A, 81H ; (A) (SP) MOV P1, #5AH ; (P1)(#5AH) MOV 90H,#5AH ; (P1)(#5AH) MOV B, 30H ; (B) (30H),SFR的地址见 P.39-40表,相同,相同,15,在本单片机中访问特殊功能寄存器SFR只能采用直接寻址方式的原因:SFR分布在80H0FFH范围内,而52系列单片机有256字节的片内RAM,其中的80H0FFH的RAM与SFR所占地址重叠。,MOV A, 90H 等效于 MOV A, P1 属直接寻址 MOV A, R0 ;事先已知 (R0) = #90H 执行的操作:A (90H) 属寄存器间接寻址, 随意写的指令如:MOV A, 85H 则是非法的!85H地址没有定义SFR。,于是规定: 80H0FFH范围内的RAM只能用寄存器间接寻址方式,而SFR只能用直接寻址方式。从而解决了地址冲突的问题。例如:,16,存储器配置(片内RAM),89C51片内RAM 128字节(00H7FH) 89C52片内RAM 256字节(00H0FFH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH 其中83/93个位可位寻址,80H,FFH,89C51 128字节,89C52 256字节,只能直接寻址,只能寄存器间接寻址,17,寄存器间接寻址 寄存器中的内容是一个地址,由该地址单元 寻址到所需的操作数。,注意: 1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”,寄存器起了一个地址指针的作用。 2)符号“”表示“在”,其含义与读音皆同“at”。,例:,MOV R1,#30H ;(R1) 立即数30H MOV R1,#0FH ;(30H)立即数0FH MOV A,R1 ;(A)(30H)=#0FH,18,寄存器间接寻址,注意: 3)能用于寄存器间接寻址的寄存器只能是:R0,R1,SP,DPTR; 4)其中SP仅用于堆栈操作,DPTR用于片外RAM或I/O的间接寻址,可达64K范围。 例:MOV DPTR,#1234H MOVX A,DPTR,19,变址寻址 也称为: 基址寄存器+变址寄存器间接寻址,以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,例:设:A中已存有#A4H,DPTR中已存有#1234H MOVC A,A+DPTR;(A)(A)+(DPTR) 操作:将A4H+1234H=12D8H单元中的数放进累加器A,20,相对寻址 当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel,注意: 1)“当前PC值”指程序中下一条指令所在的首地址, 是一个16位数(P.50); 2)符号“rel”表示“偏移量”,是一个带符号的单字 节数,范围是:-128+127(80H7FH),在实际编程中,“rel” 通常用标号代替,具体值由编译程序自动计算。,21,位寻址 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) 0 SETB ACC.7 ;(ACC.7) 1 CPL C ;( C ) NOT( C ),注意: 1)位地址里的数据只可能是一个 0 或 1 2)有的位地址十分明确,如 P1.0, ACC.7等, 有的位地址则“不太明确”,如: MOV A,17H ; (A)(17H),17H是字节地址 MOV ACC.0,17H ;(ACC.0)(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位,22,片内RAM中有128个位可按位寻址的位,位地址:00H7FH分布在:20H2FH单元; 另外,在SFR中还有83/93个位可按位寻址,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,27H,22H,21H,20H,26H,24H,25H,23H,28H,07 06 05 04 03 02 01 00,0F 0E 0D 0C 0B 0A 09 08,17 16 15 14 13 12 11 10,1F 1E 1D 1C 1B 1A 19 18,27 26 25 24 23 22 21 20,2F 2E 2D 2C 2B 2A 29 28,37 36 35 34 33 32 31 30,3F 3E 3D 3C 3B 3A 39 38,47 46 45 44 43 42 41 40,2FH,7F 7E 7D 7C 7B 7A 79 78,位地址,总共128个可按位寻址的位,单元地址,17,D7 D6 D5 D4 D3 D2 D1 D0,23,寻址原则(P.50),程序存储器只能用立即寻址和基址加变址方式寻址; SFR只能用直接寻址,不能用寄存器间接寻址; 片内RAM的高地址空间:0X800XFF只能采用寄存器间接方式寻址; 片内RAM的低地址空间:0X000X7F可以采用寄存器间接寻址和直接寻址; 片外RAM空间的只能用MOVX指令进行寄存器间接寻址。,小结,24,MCS-51指令系统,功能分五类,共111条指令,25,MCS-51指令集(五大类功能),数据传送类指令: (29条) 算术运算类指令: (24条) 逻辑运算及移位类指令: (24条) 控制转移类指令: (17条) 位操作(布尔操作)类指令:(17条),26,内部存储器间传送: (MOV16条) 外部数据存储器与累加器间传送: (MOVX4条) 程序存储器向累加器传送: (MOVC2条) 数据交换:(XCH,XCHD,SWAP5条) 堆栈操作: (PUSH,POP2条),(一)数据传送类指令(5种/29条),27,Acc 累加器,Direct 直接寻址,Ri 间接寻址,Rn 寄存器,#data 立即数,Rn: R0R7 Ri: R0,R1 #data:8位立即数 #data16:16位立即数 direct:直接地址 rel: 8位带符号偏移量,(一)数据传送类指令(5种/29条),内部存储器间传送指令 (16条): P.52 MOV 类指令的操作方向总是后面的 操作数 指向前面的操作数! 例:MOV A,30H (A)(30H),28,29,数据传送类指令(续),外部数据存储器与累加器间传送 (4条): P.54 MOVX类指令可在累加器与以DPTR或Ri所代表的外部 RAM 之间进行数据传送。,例如: MOVX A, DPTR (A) (DPTR) MOVX A, Ri (A) (Ri) MOVX DPTR, A (DPTR) (A) MOVX Ri, A (Ri) (A),例题参见P.54,30,程序存储器向累加器传送指令(2条):P.53 MOVC A,A+DPTR MOVC A,A+PC 通常称为查表指令,寻址方式属: “基址寄存器 + 变址寄存器间接寻址”,数据传送类指令(续),A+DPTR或A+PC指向程序存储器中的某单元。拟传送给累加器ACC 的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令 DB,DW 等定义在程序中。,例题参见P53例,31,例:使用8255芯片来扩展并行口,对其进行初始化。,根据8255与单片机的连接,分配地址范围为:0xfc00-0xff00,分别对应端口A-D。,32,方 式 控 制 字 各 位 含 义,要求:将A工作在方式0,输出30H单元中的数据;B口工作在方式0,输出RO中数据;C口高4位输入,低4位输出0FH。则控制字为010001000b 88H,33, MOV DPTR,#TAB; 将数据表格的首地址送DPTR MOV A,#00H; 将偏移量清0 MOVC A,A+DPTR; 将控制字送到ACC MOV DPTR,#0FF00H; 将端口D地址送DPTR MOVX DPTR,A; 将控制字送到控制端口 MOV A,30H; 将30H单元的数据送到ACC MOV DPTR,#0FC00H; 将端口A地址送到DPTR MOVX DPTR,A; 将数据送到端口A,程序如下:,34,MOV A,R0; 将R0中的数据送到ACC MOV DPTR,#0FD00H; 将端口B地址送到DPTR MOVX DPTR,A; 将数据送到端口B MOV A,#0FH; 将0FH送到ACC MOV DPTR,#0FE00H; 将端口C地址送到DPTR MOVX DPTR,A; 将数据送到端口C SJMP $; 等待 TAB: DB 88H,89H,90H; 控制字表格 ,35,数据传送类指令(续),数据交换指令(5条): P.54 XCH A,direct (字节互换) XCH A,Ri (字节互换) XCH A,Rn (字节互换) (A) (direct)或(Ri),或(Rn),XCHD A,Ri 累加器 Acc的低4位与(Ri)的低4位互换,各自的高4位不变,SWAP A 累加器 Acc的低4位与自身的高4位互换,例见P.55,36,堆栈操作指令(2条): P.54,PUSH压栈指令,POP 弹栈指令,堆栈区由特殊功能寄存器堆栈指针SP 管理 堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置 堆栈总是指向栈顶 通常PUSH与POP两条指令成对使用,数据传送类指令(续),37,例如:设(A)=7BH; (35H)=11H 并且知道(SP)60H PUSH ACC ;(61H) #7BH PUSH 35H ;(62H) (35H) 即:(62H) #11H,POP ACC ;(A) (62H) 即:(A) #11H POP 5AH ;(5AH) (61H) 即:(5AH) #7BH,38,(二)算术运算类指令(6种/24条)P.55,加法运算: (ADD4条) 带进位加法运算: (ADDC4条) 带借位减法运算: (SUBB4条) 加1/减1操作: (INC,DEC9条) 单字节乘/除法运算: (MUL,DIV2条) 十进制调整: (DA A1条),39,(二)算术运算类指令(续)P.56,加法运算: (ADD4条) 带进位加法运算: (ADDC4条) 带借位减法运算: (SUBB4条),所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A 。,加法(ADD)、带进位加法(ADDC) 以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1” 。,带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数),例题参见P56-57,40,(二)算术运算类指令(续)P.56,加1/减1操作: (INC,DEC9条 P.56) INC, DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位.,单字节乘/除运算: (MUL,DIV2条) 两个单字节无符号数的乘/除法运算只在A与B之间进行。 MUL AB: (A)与(B)相乘, 积为16位数, (B)积的高8位; (A)积的低8位 DIV AB: (A)除以(B),结果用2字节表示, (A)商的整数部分;(B)余数,例题参见P57-58,41,(二)算术运算类指令(续)P.57,BCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。,4个二进制位就可以表示一位BCD码: 00001001 可表示十进制数(BCD数) 09; 8个二进制位就可以表示两位压缩的BCD码:0000000010011001 表示 0099。,十进制调整: (DA A1条) 用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,42,若(A)309或(AC)=1则(A)30(A)306; 若(A)749或(CY)=1则(A)74(A)746;,例:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。,MOV A,#65H ADD A,#58H DA A 结果:(A)= 23H (CY)= 1,指令 “DA A” 完成的操作:,6 5 0110 0101 5 8 0101 1000,+,1,3,18,19,2,6 6 0110 0110,高位调整时要加上低位调整后的进位,43,若(A)309或(AC)=1则(A)30(A)306; 若(A)749或(CY)=1则(A)74(A)746;,又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“97”。,MOV A,#39H ADD A,#58H DA A 结果:(A)= 97H (CY)= 0,3 9 0011 1001 5 8 0101 1000,+,0,7,23,9,6 0110,指令 “DA A” 完成的操作:,DA A 的执行示意图参见P.58图3-3,44,(三)逻辑运算及移位类指令(5种/24条) P.59,逻辑与运算: (ANL6条) 逻辑或运算: (ORL6条) 逻辑异或运算: (XRL6条) 累加器清零/取反: (CLR,CPL2条) 累加器移位操作: (RL,RLC,RR,RRC4条),45,逻辑运算及移位类指令(续)P.59,逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):,累加器清零/取反操作 (CLR,CPL2条),CLR A 对累加器清零 1 Byte 1 个Tm CPL A 对累加器按位取非 1 Byte 1 个Tm,46,逻辑运算指令的常见用法,逻辑与ANL用于清0或者保留某些位: 例: ANL A, #0FH; 则(A) = 0AH,( 已知累加器A中已存有数:9AH ),逻辑或ORL用于置1或者保留某些位: 例: ORL A, #0FH; 则(A) = 9FH,逻辑异或XRL用于取反或者保留某些位: 例: XRL A, #0FH; 则(A) = 95H (A) 1001 1010 #0FH 0000 1111 95H 1001 0101,例题参见P.59-60,47,例:用P1口控制一个简易的追灯系统,红绿蓝三色LED依次亮,形成追赶动作。,LED: CLR P2.7 MOV P1,#010010010B LCALL DELAY XRL P1,#011011011B; P1=01001001B LCALL DELAY XRL P1,#01101101B; P1=00100100B SETB P2.7 LCALL DELAY SJMP LED,48,逻辑运算及移位类指令(续)P.60,累加器移位操作:(RL,RLC,RR,RRC4条),RL A 左环移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 带进位位右环移,RR A 右环移,RLC A 带进位位左环移,49,例:用P1口控制一个简易的追灯系统,红绿蓝三色LED依次亮,形成追赶动作。, MOV A,#010010010B CLR C LED:MOV P1,A MOV P2.7,C CALL DELAY RRC A SJMP LED,50,MOV A,#0FEH LD1: MOV P0,#XXH MOV P1,A LCALL DELAY,JNB ACC.5,LD1 RL A SJMP LD1,51,(四)控制转移类指令(4种/17条) P.61,此类指令改变程序的执行顺序改变当前PC值,无条件转移: (LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回: (LCALL,ACALL,RET,RETI4条),空操作: (NOP1条) “耗时”一个机器周期。 do nothing!,52,控制转移类指令(续)P.62,无条件转移: LJMP,AJMP,SJMP,JMP4条,长跳转指令: LJMP addr16 绝对短跳转指令:AJMP addr11 相对短跳转指令:SJMP rel 间接跳转指令: JMP A+DPTR,(1)上面的前三条指令,统统理解成:PC值改变,即跳转到一个标号处。 那么他们的区别何在呢?,53,跳转的范围不同,长跳转指令: LJMP addr16 64KB 绝对短跳转指令:AJMP addr11 2KB 相对短跳转指令:SJMP rel -128+127,转移范围:,指令构成不同 AJMP、LJMP后跟的是绝对地址, 而SJMP后跟的是相对地址。,指令长度不同 原则上,所有用SJMP或AJMP的地方都可以用 LJMP来替代。,54,散转指令:JMP A+DPTR,这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了。 转移地址由A+DPTR形成,并直接送入PC。 指令对A、DPTR和标志位均无影响。 本指令可代替众多的判别跳转指令,又称为散转指令,多用于多分支程序结构中。,(2)第四条指令与前三条指令相比有所不同,例:见P.63,55,控制转移类指令(续)P.64,条件转移: JZ,JNZ,DJNZ,CJNE8条,JZ rel JNZ rel 根据Acc的内容是否为0决定是否跳转,DJNZ direct,rel DJNZ Rn, rel 将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。,例:见P.65,56, MOV R0,#09H MOV A,#01H MOV R1,#02H ADD_LOOP: ADD A,R1 INC R1 DJNZ R0,ADD_LOOP MOV 30H,A ,例:从1加到10,将结果存到30H单元,57,条件转移(续),CJNE A, #data, rel CJNE A, direct,rel CJNE Ri,#data, rel CJNE Rn, #data, rel 将A(或Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,58,利用CJNE指令,可以判断两数是否相等。 也可比较两个数的大小 如果两数不相等,则CPU会用CY来反映数的大小,如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后可再次利用CY来判断出哪个数大,哪个数小。,59, MOV A,#01H MOV R1,#02H ADD_LOOP: ADD A,R1 INC R1 CJNE R1,#0BH,ADD_LOOP MOV 30H,A ,例:从1加到10,将结果存到30H单元,60,控制转移类指令(续)P.65,LCALL addr16 子程序长调用指令 可在64K范围内调用子程序,子程序调用及返回: (LCALL,ACALL,RET,RETI4条),ACALL addr11 子程序绝对调用指令 可在指令所在的2K范围内调用子程序,RET 子程序返回指令 子程序结束并返回调用的下一条指令,RETI 中断服务子程序返回指令 中断结束/返回被打断处的下一条指令,61,控制转移类指令(续)P.65,NOP 空操作指令 “耗时”一个机器周期。用来短暂延时或等待。,空操作,62,(五)位操作类指令(17条)P.66,位操作类指令 以位为单位进行逻辑运算及操作,可分为4种:,位传送: (MOV2条),位清零/置位: (CLR,SETB4条),位逻辑与/或/非运算:(ANL,ORL,CPL6条),位条件转移: (JC,JNC,JB,JNB,JBC5条),63,位操作类指令(续) P.67,位传送指令(2条): MOV C, bit (C)(bit) MOV bit, C (bit)(C) 注: bit表示位地址,位清零/置位指令(4条): CLR bit(或C) (bit或 C)“0” SETB bit(或C) (bit或 C)“1”,位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注:“/bit”表示对bit位先取反然后再参加运算,64,位操作类指令(续) P.67,判位条件转移指令(5条):,JC rel(Cy)=“1”就跳转;否则不跳转,JNC rel(Cy)“1”就跳转;否则不跳转,JB bit,rel (bit)=“1”就跳转;否则不跳转,JNB bit,rel (bit)“1”就跳转;否则不跳转,JBC bit,rel (bit)=“1”就先将其清零 再跳转; 否则,不动此位也不跳转。,例题参见P.68,65, CLR C;清除进位位 MOV A, R0;将要调整的数送给A SUBB A,#09H;与9比较 JZ NO_ADJUST;等于9不调整 JC NO_ADJUST;比9小不调整 MOV A,R0;重新将数送到A ADD A,#06H;加6调整 MOV R0,A NO_ADJUST: ,例:对一个存储在R0的一位16进制数进行BCD码调整,66,简单测控实例原理图,67,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,JOB3: CLR P1.1 ; P1.1清“0” ,亮绿灯 REDO: SETB P1.3 ;将P1.3置“1” CHECK:JNB P1.3,CHECK ;检测传感器是否被阻断LOOP: ;有入侵者,报警! AJMP REDO ;再跳回去检测,JOB1: CLR P1.0 ;P1.0清“0”,亮红灯 HERE: AJMP HERE ;原地等待,不做别的事,JOB2: CPL P1.0 ;对P1.0取反:红灯亮/灭 ACALL DELAY ;延时1秒 AJMP JOB2 ;重复,任务三:红外防盗报警,前面的简单测控实例中的程序:,位操作指令,68,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,JOB3: CLR P1.1 ; P1.1清“0” ,亮绿灯 REDO: SETB P1.3 ;将P1.3置“1” CHECK:JNB P1.3,CHECK ;检测传感器是否被阻断LOOP: ;有入侵者,报警! AJMP REDO ;再跳回去检测,JOB1: CLR P1.0 ;P1.0清“0”,亮红灯 HERE: AJMP HERE ;原地等待,不做别的事,JOB2: CPL P1.0 ;对P1.0取反:红灯亮/灭 ACALL DELAY ;延时1秒 AJMP JOB2 ;重复,任务三:红外防盗报警,跳转指令,前面的简单测控实例中的程序:,69,z7289_dio bit p1.2 z7289_clk bit p1.1 z7289_cs bit p1.0,例:周立功7289是一片SPI接口的键盘及显示管理芯片,通过单片机对引脚/CS,CLK,DIO的操作可以进行数据交换。,管脚图,时续图,70,;向周立功发指令,数据;指令存在A里,数据存在instruction_data_temp里。 zlg_instruction_data: clr z7289_cs lcall delay_25us clr z7289_clk mov b,#08h clr c zlg_instruction_out: rlc a mov z7289_dio,c setb z7289_clk lcall delay_8us clr z7289_clk lcall delay_8us djnz b,zlg_instruction_out,mov a,instruction_data_temp mov b,#08h clr c lcall delay_25us zlg_data_loop: rlc a mov z7289_dio,c setb z7289_clk lcall delay_8us clr z7289_clk lcall delay_8us djnz b,zlg_data_loop setb z7289_cs ret,71,汇编语言与 简单程序设计,72,汇编语言编程基本规则,汇编语言:用助记符描述的指令的集合。,指令中以 AF 开头的十六进制数前必须添一个 “0”。,二进制数必须带后缀“B”或“b”;十六进制数必须带后缀“H”或“h”;十进制数的后缀是“D”或“d”或无.,标号:操作码 目的操作数,源操作数;注释,汇编程序:用汇编指令来编写的计算机程序。,编译程序:将汇编语言编写的程序编译成为计算机能识别的目标代码的工具, 称为编译程序。,73,汇编程序的伪指令,(真)指令:告诉计算机如何操作以及做何种操作,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是真指令的事。 比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思,74,汇编程序的常用伪指令,ORG addr16ASM51程序中一定要写! 规定编译后的机器代码存放的起始位置。,ORG 1000H START:MOV A,#00H 标号START代表地址1000H,程序从1000H开始,END ASM51程序中一定要写! 表示翻译到此结束,其后的任何内容不予理睬。,75,汇编程序的常用伪指令,$ “当前PC值”也叫位置计数器 代表正在执行的指令所在位置。,MOV A, #5AH MOV SBUF, A; SEND1: JNB TI, $;(TI)“1”就跳转;否则不跳转 CLR TI; TI 是寄存器SCON的发送中断标志。TI=1,表示发送结束。,76,汇编程序的常用伪指令,符号名称 EQU 表达式 将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。 赋值后符号名称既可做地址使用,也可做立即数使用,TMP EQU 35H MOV A, TMP; (A) (35H) MOV A,#TMP; (A) 35H,77,ORG 0000H LJMP START ORG 0003H LJMP INT0 ORG 0100H START:MOV A,#01H RET ORG 0200H INT0: CPL P1.0 RETI END,SJMP $ SJMP $+2 INSTRUCTION EQU 30H AD_DATA EQU 31H,78,汇编程序的常用伪指令(续),符号名称 BIT 位地址 将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,DW 双字节数据或双字节数据组 将双字节数据或双字节数据组顺序存放在此后的存储单元中。占据相应存储空间。,DB 8位数据或8位数据组 将8位数据或8位数据组顺序存放在此后的存储单元中。占相应数量的存储空间。,79,z7289_dio bit p1.2 z7289_clk bit p1.1 z7289_cs bit p1.0,例:周立功7289是一片SPI接口的键盘及显示管理芯片,通过单片机对引脚/CS,CLK,DIO的操作可以进行数据交换。,管脚图,时续图,80,ORG 1000H TAB: DB 12H,34H,56H,78H,90H, (1000H)=12H,(1001H)=34H,(1002H)=56H, ORG 2000H TAB1:DW 0FEDCH,0BA98H,7654H,3210H (2000H)=0FEH,(2001H)=0DCH,(2002H)=0BAH,(2003H)=98H, !注意: 使用DW定义数据时,高8位在前,低8位在后。,81,DS 表达式 从指定地址保留DS后表达式值所规定的存储单元 ORG 1000H DS 10H DB 12H,34H (1010H)=12H,(1011H)=34H !注意:DB,DW,DS只对程序存储器起作用,不能对数据存储器进行初始化,82,程序的顺序/分支/循环三种基本结构,顺序结构 如果某一个需要解决的问题可以分解成若干个简单的操作步骤, 并且可以由这些操作按一定的顺序构成一种解决问题的算法, 则可用简单的顺序结构来进行程序设计。,83,程序的顺序/分支/循环三种基本结构,例:将R2中BCD码数转为二进制数存进R2,84,程序的顺序/分支/循环三种基本结构,ORG 2000H BCD2B:MOV A, R2 ;取入口数据 ANL A, #0F0H ;取出十位 SWAP A ;高4位 低4位 MOV B, #0AH MUL AB ;十位乘10 MOV R3,A ;积暂存进R3 MOV A, R2;再取入口数据 ANL A, #0FH ;取出个位 ADD A, R3 MOV R2,A ;结果 R2 RET ;若不是子程序可用END,例:将R2中BCD码数转为二进制数存进R2,85,程序的顺序/分支/循环三种基本结构,分支(选择)结构 在实际的程序设计中, 有很多情况往往还需要程序按照给定的条件进行分支。这时就必须对某一个变量所处的状态进行判断, 根据判断结果来决定程序的流向。这就是分支(选择)结构程序设计。,86,ORG 2000H VAR EQU 30H ;定义缓存单元 FUNC EQU 31H ; BR1: MOV A,VAR ;取出变量“X” JZ COMP ;若=0,就赋 0 JNB ACC.7,POS1 ;判断 = 正? MOV A,#0FFH ;(-1 = +1取反加1) SJMP COMP ;输出 -1 POS1:MOV A,#01H ;输出 +1 COMP:MOV FUNC,A ;赋给函数“Y” HERE:AJMP HERE END,例:,1 (X0) 0 (X=0) 1(X0),Y=,程序的顺序/分支/循环三种基本结构,87,任务一:控制一盏灯点亮 任务二:红灯周期性亮/灭 任务三:红外防盗报警,0RG 0000H AJMP MAIN ORG 0003H RL A ACALL DELAY RETI MAIN:MOV A,#80H SETB EX0 SETB EA WAIT:JB ACC.0,JOB1 JB ACC.1,JOB2 JB ACC.2,JOB3 AJMP WAIT,JOB1: CLR P1.0 ;亮红灯 HERE: AJMP HERE,JOB2: CPL P1.0 ;亮/灭 ACALL DELAY ;延时1秒 AJMP JOB2 ;重复,JOB3: CLR P1.1 ;亮绿灯 REDO: SETB P1.3 CHECK:JNB P1.3,CHECK LOOP: ;报警! AJMP REDO ;再检测,程序的顺序/分支/循环三种基本结构,88,程序的顺序/分支/循环三种基本结构,循环结构 在解决实际问题时, 往往会遇到同样的一组操作需要重复多次的情况, 这时应采用循环结构, 以简化程序, 缩短程序的长度及节省存储空间。,89,ORG 1000H DELAY:MOV R6,#200 ; 1Tm LOOP1:MOV R7,#248 ; 1Tm NOP ; 1Tm LOOP2:DJNZ R7,LOOP2 ; 2Tm DJNZ R6,LOOP1 ; 2Tm RET ; 1Tm,例:软件循环延时100mS(晶振12MHz), 1Tm =1uS 100mS = 100000 uS MOV Rn #data 和 NOP 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令 200 = 0C8H ; 248 = 0F8H,1+1+ 248x2 =498,(498+2)x200,程序的顺序/分支/循环三种基本结构,90,ORG 1000H DL1S:MOV R7,#10 DL1: MOV R6,#200 DL2: MOV R5, #250 DL3: DJNZ R5, DL3 DJNZ R6,DL2 DJNZ R7,DL1 RET,例:软件循环延时1S(晶振12MHz), 1Tm =1uS 1S = 1000000 uS MOV Rn #data 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令,1+ 250x2,1+ (1+250x2) +2)x200,1+ 1+(1+250x2+2) x200+2x10 =1006031,程序的顺序/分支/循环三种基本结构,91,ORG 2000H H2ASC: MOV A,R2 ;取待转换的数据(入口) ADD A,#0F6H ;判此数是否10 ? 若10,则C=1;10,则C=0 MOV A,R2 ;重取待转换的数据 JNC AD30H ;小于10就跳去加30H ADD A,#07H ;10就先加7 再去加30H AD30H:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区地下管网及设施更新改造工程节能评估报告
- 老旧供水管网改造工程施工方案
- 离婚协议书中财产分割及共同财产分割协议范本
- 复杂家庭结构离婚协议:共同债务处理与子女权益
- 离婚协议书中关于个人财产权益保护协议范本
- 分布式光伏与建筑一体化(BIPV)在2025年农村能源市场推广策略报告
- 2025年新能源产业绿色能源基础设施建设报告
- 十万个为什么知识竞赛题及答案
- 苏科版九年级物理上册13.3电流和电流表的使用说课稿
- 初中几何高考真题及答案
- 夫妻忠诚协议书8篇
- 2025年大队委竞选面试题库及答案
- 2025年信用管理专业题库- 信用管理对企业市场风险的控制
- 6.2 用7~9的乘法口诀求商(课件)数学青岛版二年级上册(新教材)
- 双重上市公司“管理层讨论与分析”披露差异:剖析与弥合
- 物流会计面试试题及答案
- 集装箱货物高效清关代理服务合同范本
- 2025年结构上岗试题及答案
- T-CNAS 04-2019 住院患者身体约束护理
- 新教科版小学1-6年级科学需做实验目录
- GB/T 8492-2024一般用途耐热钢及合金铸件
评论
0/150
提交评论