已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章:指令系统,本章重点: 寻址方式; MCS-51指令集;,51系列单片机指令集含有111条指令,每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条),按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条),每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条),ASM-51指令的格式,方括符 表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾操作码就是指令功能助记符,指令实体目的操作数源操作数注释,以“;”开头,标号:操作码 目的操作数,源操作数;注释,指令中的常用符号Rn: n=(07),表示当前工作寄存器R0R7中的一个。Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄 存器。dir : 8 位直接字节地址(片内 RAM 和 SFR ) #data: 8位立即数,即8位常数。可以为2进制(B)、 10进制、 16进制(H)、 字符( )、data16: 表示16位立即数,即16位常数,取值范围为#0000H#0FFFFHaddr16 : 表示16位地址 addr11 : 表示11位地址rel : 相对偏移量(为一字节补码)用于相对转移指令中bit :位地址,在位地址空间中。$: 表示当前指令的地址。,51单片机指令的寻址方式,寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址,寻址方式:指令按地址获得操作数的方式七种寻址方式,一条指令可能含多种寻址方式,立即寻址指令中直接给出操作数例:MOV A,#64H ;(A) 立即数 64H ADD A,#0500H ;(A)(A)+ 0500H注意:符号“#”表明其后跟的是立即数, 立即数就是数字量本身。 #是唯一区别与地址的标志。,直接寻址指令中直接给出了操作数所在单元的地址或名称寻址对象: 内部RAM指令中以直接地址表示。 特殊功能寄存器既可使用它的地址也可以 直接使用寄存器名。例:MOV R1,1FH ;(R1) (1FH) MOV 30H,4AH ;(30H)(4AH),访问特殊功能寄存器SFR只能采用直接寻址方式。例如:MOV A, SP ; (A) (SP) MOV A, 81H ; (A) (SP) MOV P1, #5AH ; (P1)(#5AH) MOV 90H,#5AH ; (P1)(#5AH),相同,相同,寄存器寻址从寄存器中读取操作数或存放操作数进寄存器寻址对象:A,B,DPTR,R0R7例:MOV A,B ; (A) (B) MOV 30H,R0 ;(30H)(R0) MOV A,R1 ; (A) (R1),寄存器间接寻址寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数(间址寄存器R0,R1,DPTR),注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)使用间接寻址指令前需先给寄存器赋值。,例: MOV R1,#30H ;(R1) 立即数30H , MOV R1,#30H ;(R1) 立即数30H MOV R1,#0FH ;(30H)立即数0FH MOV A,R1 ;(A)(30H)=#0FH,变址寻址 也称为: 基址寄存器+变址寄存器间接寻址,以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,例:设:A中已存有#A4H,DPTR中已存有#1234H MOVC A,A+DPTR;(A)(A)+(DPTR)操作:将A4H+1234H=12D8H单元中的数放进累加器A,相对寻址当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel,注意:1)“当前PC值”指程序中下一条指令所在的首地址, 是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字 节数,范围是:-128+127(80H7FH),在实际编程中,“rel” 通常用标号代替,位寻址指令中直接给出了操作数所在的位地址。例: 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位,片内RAM中有128个位可按位寻址的位,位地址:00H7FH分布在:20H2FH单元;另外,在SFR中还有92个位可按位寻址,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,MCS-51指令集,功能分五类,共111条指令,MCS-51指令集(五大类功能),数据传送类指令: (29条)算术运算类指令: (24条)逻辑运算及移位类指令: (24条)控制转移类指令: (17条)位操作(布尔操作)类指令:(17条),内部存储器间传送: (MOV)外部数据存储器与累加器间传送: (MOVX)程序存储器向累加器传送: (MOVC)数据交换:(XCH,XCHD,SWAP)堆栈操作: (PUSH,POP),(一)数据传送类指令(5种),Acc 累加器,Direct 直接寻址,Ri 间接寻址,Rn 寄存器,#data 立即数,Rn: R0R7Ri: R0,R1#data:8位立即数#data16:16位立即数direct:直接地址rel: 8位带符号偏移量,(一)数据传送类指令(5种),内部存储器间传送指令 :,MOV A ,Rn #data dir Ri,MOVA,R0;A(R0) 设A=C8H,R0=65H,内部RAM 65H单元中内容为55H执行指令后A=55H65H单元中内容不变,R0中内容也不变。,MOV dir ,A Rn, Ri #data dir,MOV 36H,R1;direct(R1)设内部RAM 36H单元中内容为FFH,R1=25H,25H单元中内容为01H执行指令36H单元中内容变为01H,25H单元及R1内容不变。,MOV Rn ,A dir #data,MOVR2,20H;Rn(direct) 设R2=0EH,内部数据RAM 20H单元中的内容为B6H执行指令后,R2中内容变为B6H,20H单元内容不变。,A dir #data,MOVR1,A ;(R1)(A)设R1=30H,30H中内容为26H,A中内容为0,执行指令后,30H中内容变为0,A和R1中内容不变。,MOV DPTR, #data16,唯一的一条16位数据传送指令,例 判断下列指令的正误: MOV 29H,R7 MOV 25H,P1 MOV 56H,#70H MOV 34H,28H MOV R3,R7 MOV R3,R7 MOV R3,#D2H MOV #34H,28H MOV A,#280H MOV P3,P1,数据传送类指令,外部数据存储器与累加器间传送 :,Ri , A DPTR , A A , Ri A , DPTR,MOVX,MOVC,A , A+PCA , A+DPTR,MOVX指令举例例: 实现片外数据存储器数据传送(2000H)(2100H)。,MOV DPTR,#2000HMOVX A,DPTRMOV DPTR,#2100HMOVX DPTR,A,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H ,例:查表法求 Y=X2。设 X(0X15)在片内 RAM 20H单元,要求将查表求 Y,存入片内 RAM 21H单元,用DPTR作基址寄存器 ORG 0100HSQU: MOV DPTR,#TAB ;确定表首地址 MOV A,20H ;取 X MOVC A,A+DPTR ;查表求 Y=X2 MOV 21H,A ;保存Y RET ;子程序结束 ;其它程序段,ORG 0200H ; 常数表格首地址TAB: DB 00,01,04, 09, ,225 ;平方表,数据传送类指令,数据交换指令: 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位互换,分析以下指令执行完毕时,A中的内容是什么? MOV R1, #65H XCH A, R1 SWAP A,(R1)=65H,累加器A,R1,0FH,65H,累加器A,0110,0101,累加器A,6,5,B,H,堆栈操作指令:,PUSH压栈指令,POP 弹栈指令,堆栈区由特殊功能寄存器堆栈指针SP 管理堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置堆栈总是指向栈顶通常PUSH与POP两条指令成对使用,数据传送类指令,例如:设(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,(二)算术运算类指令,加法运算: (ADD)带进位加法运算: (ADDC)带借位减法运算: (SUBB)加1/减1操作: (INC,DEC)单字节乘/除法运算: (MUL,DIV)十进制调整: (DA A),(二)算术运算类指令,所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A 。,加法(ADD)、带进位加法(ADDC) 以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1” 。,带进位加法(ADDC):(A)(A)+(第二操作数)+(Cy) 带借位减法(SUBB):(A)(A)-(第二操作数)-(Cy),ADDADDCSUBB,Rn, Ri #data dir,A ,加进位加借位减,(二)算术运算类指令,加1/减1操作: (INC,DEC)INC, DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位.,INC,减 1 指令:,DEC,加 1 指令:,单字节乘/除运算: (MUL,DIV)两个单字节数的乘/除法运算只在A与B之间进行。MUL AB: (A)与(B)相乘, 积为16位数, (A)积的低8位; (B)积的高8位DIV AB: (A)除以(B),结果用2字节表示, (A)商;(B)余数,只能进行无符号的乘除法虽影响OV,但意义不同MUL AB;BA,OV=1表示B0DIV AB;AB, OV=1,B=0,除法无意义,(二)算术运算类指令,BCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。,4个二进制位就可以表示一位BCD码: 00001001 可表示十进制数(BCD数) 09; 8个二进制位就可以表示两位压缩的BCD码:0000000010011001 表示 0099。,十进制调整: (DA A)用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,若(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 0010 0011,+,1,3,2,6 6 0110 0110,1,(三)逻辑运算及移位类指令(5种),逻辑与运算: (ANL)逻辑或运算: (ORL)逻辑异或运算: (XRL)累加器清零/取反: (CLR,CPL)累加器移位操作: (RL,RLC,RR,RRC),逻辑运算及移位类指令,逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):,累加器清零/取反操作 (CLR,CPL2条),CLR A 对累加器清零 CPL A 对累加器按位取非,与 ANL或 ORL异或 XRL,#dataDirRnRi,ANLORLXRL,逻辑运算指令的常见用法,逻辑与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,逻辑运算及移位类指令,累加器移位操作:(RL,RLC,RR,RRC4条),RL A 左环移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 带进位位右环移,RR A 右环移,RLC A 带进位位左环移,CY,CY,RR A,RL A,RLC A,RRC A,移位指令(仅对 A ),10010110,00101101,A,A,设,01001011,A,1,CY,11001011,A,0,00101101,A,1,CY,CY,例 : M1和M1+1单元存有16位二进制数,试编程 将其扩大二倍,CLR CMOV R1,#M1MOV A,R1RLC AMOV R1,AINC R1MOV A,R1RLC AMOV R1,A,(四)控制转移类指令(4种/17条),此类指令改变程序的执行顺序改变当前PC值,无条件转移: (LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回: (LCALL,ACALL,RET,RETI4条),空操作: (NOP1条) “耗时”一个机器周期。 do nothing!,控制转移类指令,无条件转移: LJMP,AJMP,SJMP,JMP4条,LJMP addr16 长跳转指令 可在64K范围内跳转,AJMP addr11 绝对跳转指令 可在指令所在的2K范围内跳转,SJMP rel 相对跳转指令 可在当前PC-128与+127范围内跳转,JMP A+DPTR 间接长跳转指令 可在以DPTR为基址 + A为偏移量 之和所指向的64K程序范围内跳转,控制转移类指令,条件转移: JZ,JNZ,CJNE,DJNZ,JZ relJNZ rel根据Acc的内容是否为0决定是否跳转,DJNZ direct,relDJNZ Rn, rel将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。,条件转移(续),CJNE A, #data, relCJNE A, direct,rel CJNE Ri,#data, relCJNE Rn, #data, rel 将A(或Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,控制转移类指令,LCALL addr16 子程序长调用指令可在64K范围内调用子程序,子程序调用及返回: (LCALL,ACALL,RET,RETI4条),ACALL addr11 子程序绝对调用指令可在指令所在的2K范围内调用子程序,RET 子程序返回指令子程序结束并返回调用的下一条指令,RETI 中断服务子程序返回指令中断结束/返回被打断处的下一条指令,(五)位操作类指令(17条),位操作类指令 以位为单位进行逻辑运算及操作,可分为4种:,位传送: (MOV),位清零/置位: (CLR,SETB),位逻辑与/或/非运算:(ANL,ORL,CPL),位条件转移: (JC,JNC,JB,JNB,JBC),在程序中位地址的表达有多种方式: 1)用直接位地址表示,如D4H。 2)用“”操作符号表示,如PSW.4,或D0H.4 3)用位名称表示,如RS1。 4)用用户自定义名表示。 如ABC BIT D4H,其中ABC定义为D4H位的位 名,BIT为位定义伪指令。 以上各例均表PSW.4 的RS1位。,位操作类指令,位传送指令(2条): MOV C, bit (C)(bit) MOV bit, C (bit)(C) MOV BIT,BIT (错误) 注: bit表示位地址,位清零/置位指令(4条): CLR bit(或C) (bit或 C)“0” SETB bit(或C) (bit或 C)“1”,位逻辑与/或/非指令(6条): ANL C,bit ORL C,bit CPL bit,位操作类指令,判位条件转移指令(5条):,JC rel(Cy)=“1”就跳转;否则不跳转,JNC rel(Cy)“1”就跳转;否则不跳转,JB bit,rel (bit)=“1”就跳转;否则不跳转,JNB bit,rel (bit)“1”就跳转;否则不跳转,JBC bit,rel (bit)=“1”就先将其清零 再跳转; 否则,不动此位也不跳转。,一个简单的测控应用实例,动作选择按钮,红外线传感器,89C2051单片机,复位按钮,电源指示灯,简单测控实例原理图,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,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 ;重复,任务三:红外防盗报警,前面的简单测控实例中的程序:,位操作指令,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,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 ;重复,任务三:红外防盗报警,跳转指令,前面的简单测控实例中的程序:,一个简单的测控应用实例,任务一:控制一盏灯点亮,任务二:红灯周期性地点亮/熄灭,信号检测,集群灯控,顺序控制/多任务定时切换,自动生产流水线,任务三:红外防盗报警,实时控制,小结:MCS-51指令集(五大类功能),数据传送类指令 算术运算类指令 逻辑运算及移位类指令 控制转移类指令 位操作(布尔操作)类指令,小结,阅读程序,给每条指令加注释,并指出程序功能。 1 CLR A MOV 50H, #14H L1:ADD A , 50H DJNZ 50H, L1 2 MOV 10H, C MOV C, 20H MOV 5AH, C MOV C, 10H 3 MOV DPTR, #2100H MOVX A, DPTR MOVDPTR, #2120H MOVX DPTR ,A,第3章 汇编语言程序设计,汇编语言程序设计中的数,计算机只能识别二进制数机器指令,机器指令/目标代码: 由0/1代码组成的操作码与操作数。,十六进制数:便于读写记忆的二进制数的简写形式。 (09,AF 后缀:H/h),BCD码:用二进制数表达的十进制数。 (09表示为:00001001B 后缀:B/b,H/h),二进制数:由0/1组成、“逢2进1”的数制。 如:01011110B (01 后缀:B/b),汇编语言编程基本规则,汇编语言:用助记符描述的指令的集合。,指令中以 AF 开头的十六进制数前必须添一个 “0”。,二进制数必须带后缀“B”或“b”;十六进制数必须带后缀“H”或“h”;十进制数的后缀是“D”或“d”或无.,标号:操作码 目的操作数,源操作数;注释,汇编程序:汇编语言编写的程序借助编译工具编译成为目标代码,计算机才能识别。这个编译工具称为汇编程序。,汇编程序的伪指令,汇编程序 软件 工具工具软件: 将程序员用汇编语言编写的程序翻译成机器码,(真)指令:告诉计算机如何操作以及做何种操作,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作 如:从何处开始,何处结束,那些是指令,那些事数据,数据是字节还是字等,汇编程序的常用伪指令,ORG addr16功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以addr16为起始地址,连续存放在程序存储器中。,END 作用: 指示源程序段结束。 END指令放在程序的最后。,$ “当前PC值”也叫位置计数器 代表正在执行的指令所在位置。,汇编程序的常用伪指令(续),符号名称 BIT 位地址将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,标号:DW 字定义功能: 指示在程序存储器中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数),标号:DB 字节定义功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。,符号名称 EQU 表达式将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。,标号:DS (数值表达式)保留字节 作用: 指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。,汇编语言程序设计步骤 用汇编语言编写程序,一般可按如下步骤进行:(1)建立数学模型(2)确定算法(3)制订程序流程图(4)确定数据结构(5)写出源程序(6)上机调试程序,程序的顺序/分支/循环三种基本结构,例: 将R2中BCD码数转为二进制数存进R2,程序的顺序/分支/循环三种基本结构,ORG 2000HBCD2B: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,程序的顺序/分支/循环三种基本结构,例:设变量放在片内RAM的20H单元,其值为00H05H之间,要求编查表程序,查出变量的平方值, 并放入片内RAM的21H单元。,ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR ;查表 MOV 21H,A SJMP $TAB: DB 00H,01H,04H,09H,16H,25H END,分析 :在程序存储器安排一张平方表,首地址为TAB,以DPTR指向表首址,A存放变量值,利用查表指令MOVC A,A+DPTR,即可求得。,DPTR,A,程序的顺序/分支/循环三种基本结构,【例】 求符号函数的值 1 当X0Y= 0 当X=0 的值。 -1 当X0) 0 (X=0) 1(X0),Y=,程序的顺序/分支/循环三种基本结构,任务一:控制一盏灯点亮 任务二:红灯周期性亮/灭 任务三:红外防盗报警,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 ;再检测,程序的顺序/分支/循环三种基本结构,0RG 0000H AJMP MAIN ORG 0003H RL A ACALL DELAY RETIMAIN:MOV A,#80H SETB EX0 SETB EAWAIT:JB ACC.0,JOB1 JB ACC.1,JOB2 JB ACC.2,JOB3 AJMP WAIT,例2 用单片机加重力传感器作磅秤,秤出重量后算出行李运费价格,其秤出的重量以10kg为1个计价单位G , G已存入40H单元。计价方法为:50kg以内按3元, 50kg以上分段计价: 50kg按3元计价,超过部分按2元计价。 由此列出算式:,G3 ;当G5,ORG 0100HFRT: MOV A,40H;取行李重量计价单位G MOV R3,A MOV B,#03H;运费M=G3 MUL AB MOV R2,A ;暂存3G,MOV A,R3 ;取回G CJNE A,#05H,L1 ;G 5 ? SJMP WETCL1: JC WETC;是,转至WETC SUBB A,#05H;否则 M=15+2(G-5) RLC A ADD A,#15 MOV R2 ,AWETC: MOV 41H,R2 ;存运费 M RET,多分支散转程序的设计 有一类分支程序,它根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这类程序通常利用JMP A+DPTR间接转移指令实现转移。有如下两种设计方法: 1. 查转移地址表: 将转移地址列成表格,将表格的内容作转移的目标地址。 2. 查转移指令表: 将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行。,例:用单片机作四则运算。 编程说明:在单片机系统中,设置+、四个运算键, 这四个运算键的键值分别为0、1、2、3(键值存放在寄存器R2中),当其中一个按键按下时,进行相应的运算。 P1口输入被加数、被减数、被乘数或被除数,以及运算结果的低8位或商。 P3口输入加数、减数、乘数或除数,,以及结果的高8位或余数。 键号存放在累加器A中。,转移指令表JPT,START: MOV P1 , #0FFH MOV P3 , #0FFH MOV DPTR, #TABLE MOV A, R2,RL A ; JMP A+DPTRTABLE: AJMP PRG0 AJMP PRG1 AJMP PRG2 AJMP PRG3,PRG0: MOV A,P1 ADD A,P3 MOV P1,A CLR A ADDC A,#00H;进位位放入A中 MOV P3,A RET,PRG1: MOV A,P1 CLR C SUBB A,P3 MOV P1,A,CLR A RLC A ;借位放入A中 MOV P3,A RET,PRG2: MOV A,P1 MOV B,P3 MUL AB MOV P1,A MOV P3,B RET,PRG3: MOV A,P1 MOV B,P3 DIV AB MOV P1,A MOV P3,B RET,程序的顺序/分支/循环三种基本结构,例: 200名学生参加考试,成绩放在8031的外部RAM的一个连续存储单元,95100分颁发A级证书,9094分颁发B级证书,编一程序,统计获A、B级证书的人数。将结果存入内部RAM的两个单元。,ORG 0030HEGXDATA 1000HGA DATA 20HGBDATA 21HMOV GA,#00MOV GB,#00MOV DPTR,#EGMOV R2,#200LOOP:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理三基知识要点速记
- 护理伦理与医疗伦理培训
- 护理责任制与护理工作未来趋势
- 护理人员职业素养与沟通技巧
- 并发湿疹的PICC患者心理护理与支持
- 护理人性化服务与患者安全
- 护理专业护理治疗学教学课件
- 护理中的急救护理
- 护理知识学习资源-1
- 护理岗前培训课件制作应用
- 2026-2030中国环形变压器行业市场发展趋势与前景展望战略分析研究报告
- 【一年级下册】第二套暑假特色作业:快乐暑假成长一夏
- 2025年河南省平顶山市教师招聘考试真题及答案
- 2026年母婴保健技术资格证考试试题及答案
- 2025-2026学年第二学期期末考试高一语文试卷及答案
- 外来人员冲撞大门现场处置方案培训课件
- 第六单元 整本书阅读《唐诗三百首》课件 2026-2027学年统编版语文九年级上册
- 护理课件设计与制作技巧分享
- 2026年湖南省怀化市重点学校小升初数学考试试卷及答案
- 统计局国防动员工作制度
- 2026年投标人基本情况说明(范本)
评论
0/150
提交评论