单片机原理课件第二章.ppt_第1页
单片机原理课件第二章.ppt_第2页
单片机原理课件第二章.ppt_第3页
单片机原理课件第二章.ppt_第4页
单片机原理课件第二章.ppt_第5页
已阅读5页,还剩70页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片微机原理及应用,主讲教师: 胡志坚,第二讲:指令与编程,本讲重点: 寻址方式; MCS-51指令集; 伪指令; 汇编语言与简单程序设计.,指令系统及程序设计,指令系统分类,基本概念 指令是CPU根据人的意图来执行某种操作的命令。指令常以其英文名称或者缩写形式作为助记符。 一台计算机所能执行的全部指令的集合称为这个CPU的指令系统。 采用助记符表示的指令称为汇编语言。 使用这种指令编写的程序称为汇编语言程序。,指令系统分类(一),按照指令的功能划分,8051指令可分为以下五类: 数据传送类指令(29条) 算术运算类指令(24条) 逻辑运算类指令(24条) 控制转移类指令(17条) 位操作类指

2、令(17条),51系列单片机指令集含有111条指令,指令系统分类(二),按照指令占用的存储空间可分为: 单字节指令(49条) 双字节指令(45条) 三字节指令(17条) 按照指令的执行时间可分为: 单周期指令(64条) 双周期指令(45条) 四周期指令(2条,乘、除法指令),ASM-51指令的格式,方括符 表示可选项 标号代表指令所在地址,1-8个字母/数字,“:”结尾 操作码就是指令功能助记符,指令实体 目的操作数 源操作数 注释,以“;”开头,标号:操作码 目的操作数,源操作数;注释,寻址方式,基本概念 寻址就是寻找指令中操作数或操作数所在地址。 寻址方式就是找到存放操作数的地址,并把操作

3、数提取出来的方法,即寻找操作数或者是操作数地址的方法。,51单片机指令的寻址方式,寄存器寻址 立即寻址 寄存器间接寻址 直接寻址 变址寻址(基址寄存器+变址寄存器间接寻址) 相对寻址 位寻址,七种寻址方式,一条指令可能含多种寻址方式,寄存器寻址 从寄存器中读取操作数或存放操作数进寄存器 例:MOV A,B ; (A) (B) MOV 30H,R0 ;(30H)(R0) MOV A,R1 ; (A) (R1) 寄存器寻址方式的寻址范围包括: 通用工作寄存器有4组共32个通用工作寄存器。 部分专用寄存器累加器A、B寄存器、DPTR寄存器。,立即寻址 操作数直接就出现在指令中 例:MOV A,#64

4、H ;(A) 立即数 64H ADD A,#05H ;(A)(A)+立即数 05H 注意:符号“#”表明其后跟的是立即数, 立即数就是数字量本身。,寄存器间接寻址 寄存器中的内容是一个地址,由该地址单元 寻址到所需的操作数,注意: 1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。 2)符号“”表示“在”,其含义与读音皆同“at”。 3)寄存器R0、R1和数据指针DPTR可以作为间接寻址寄存器,例: MOV R1,#30H ;(R1) 立即数30H,MOV R1,#0FH ;(30H)立即数0FH MOV A,R1 ;(A)(30H)=#0

5、FH,直接寻址,直接寻址方式就是在指令中直接给出操作数所在存储单元的地址。此时,指令中操作数部分是操作数所在地址。 直接寻址方式的寻址范围是内部RAM,具体包括: 片内RAM的128个单元在指令中以直接地址给出。 特殊功能寄存器(SFR)既可使用它们的地址,也可使用它们的名字。,直接寻址 指令中直接给出了操作数所在单元的地址或名称 例:MOV R1,1FH ;(R1) (1FH) MOV 30H,4AH ;(30H)(4AH),在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如: MOV A, SP ; (A) (SP) MOV A, 81H ; (A) (SP) MOV P

6、1, #5AH ; (P1)(#5AH) MOV 90H,#5AH ; (P1)(#5AH) MOV B, 30H ; (B) (30H),相同,相同,在本单片机中访问特殊功能寄存器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 则是非法的!,于是规定: 80H0FFH范围内的RA

7、M只能用寄存器间接寻址方式,而SFR只能用直接寻址方式。从而解决了地址冲突的问题。例如:,变址寻址 也称为: 基址寄存器+变址寄存器间接寻址,以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,例:设:A中已存有#A4H,DPTR中已存有#1234H MOVC A,A+DPTR;(A)(A)+(DPTR) 操作:将A4H+1234H=12D8H单元中的数放进累加器A,变址寻址示意图,例如:指令“MOVC A,A+DPTR”是变址寻址。 解:假设DPTR的内容为20

8、30H,累加器A的内容为12H。 该指令的功能是将2030H和12H相加,得到2042H作为操作数地址,在程序存储器中找到2042H单元,将其内容送至累加器A。,变址寻址(基址寄存器+变址寄存器间接寻址),相对寻址,相对转移指令执行时,是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。这里所说的PC的当前值是执行完相对转移指令后的PC值。 一般将相对转移指令操作码所在地址称为源地址,转移后的地址称为目的地址。于是有: 目的地址=源地址+相对转移指令本身字节数+rel 相对寻址只出现在相对转移指令中,以修正PC的方式来控制程序的转移目的。,相对寻址 当前PC值加上指令中规定的偏移

9、量 rel,构成实际的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel,注意: 1)“当前PC值”指程序中下一条指令所在的首地址, 是一个16位数; 2)符号“rel”表示“偏移量”,是一个带符号的单字 节数,范围是:-128+127(80H7FH),在实际编程中,“rel” 通常用标号代替,相对转移指令操作示意图,例如:在程序存储器中2000H单元有一条双字节的相对转移指令“SJMP 75H”。 解:程序存储器2000H、2001H单元的内容80H、75H是“SJMP 75H”的机器语言代码。,存储器配置(片内RAM),89C51片内RAM 128

10、字节(00H7FH) 89C52片内RAM 256字节(00H0FFH),00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有 的RAM区,普通RAM区,位寻址区,工作寄存器区,SFR分布在80H-FFH 其中92个位可位寻址,80H,FFH,89C51 128字节,89C52 256字节,只能直接寻址,只能寄存器间接寻址,位寻址,位寻址指令中给出的是位地址,即片内RAM某一单元中的一位。位地址在指令中用bit表示。 单片机片内RAM有两个区域可以进行位寻址。具体如下: 内部RAM中的位寻址区该区共有16个单元,单元地址是20H2FH,一共有128位,位地址为007F

11、H。 特殊功能寄存器的可操作位有11个单元地址能被8整除的寄存器,它们都可以进行位寻址,实际可寻址位为83个。,可寻址位在指令中的表示方式, 直接使用位地址。 例:PSW寄存器的第5位可表示为D5H。 20H单元的第7位可表示为07H。 用位名称表示。 例:PSW寄存器的第5位可表示为F0。 单元地址加位号表示。 例:20H单元的第7位可表示为20H.7。 可以用寄存器名称加位号表示。 例:PSW寄存器的第5位可表示为PSW.5。,位寻址 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) 0 SETB ACC.7 ;(ACC.7) 1 CPL C ;( C ) NO

12、T( 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

13、,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个可按位寻址的位,单元地址,

14、17,D7 D6 D5 D4 D3 D2 D1 D0,MCS-51指令集,功能分五类,共111条指令,MCS-51指令集(五大类功能),数据传送类指令: (29条) 算术运算类指令: (24条) 逻辑运算及移位类指令: (24条) 控制转移类指令: (17条) 位操作(布尔操作)类指令:(17条),内部存储器间传送: (MOV16条) 外部数据存储器与累加器间传送: (MOVX4条) 程序存储器向累加器传送: (MOVC2条) 数据交换:(XCH,XCHD,SWAP5条) 堆栈操作: (PUSH,POP2条),(一)数据传送类指令(5种/29条),Acc 累加器,Direct 直接寻址,Ri

15、间接寻址,Rn 寄存器,#data 立即数,Rn: R0R7 Ri: R0,R1 #data:8位立即数 #data16:16位立即数 direct:直接地址 rel: 8位带符号偏移量,(一)数据传送类指令(5种/29条),内部存储器间传送指令 (16条): MOV 类指令的操作方向总是后面的 操作数 指向前面的操作数! 例:MOV A,30H (A)(30H),数据传送类指令(续),外部数据存储器与累加器间传送 (4条): MOVX类指令可在累加器与以DPTR或Ri所代表的外部 RAM 之间进行数据传送。,例如: MOVX A, DPTR (A) (DPTR) MOVX A, Ri (A)

16、 (Ri) MOVX DPTR, A (DPTR) (A) MOVX Ri, A (Ri) (A),程序存储器向累加器传送指令(2条): MOVC A,A+DPTR MOVC A,A+PC 通常称为查表指令,寻址方式属: “基址寄存器 + 变址寄存器间接寻址”,数据传送类指令(续),A+DPTR或A+PC指向程序存储器中的某单元。拟传送给累加器A 的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令 DB,DW 等定义在程序中。,数据传送类指令(续),数据交换指令(5条): XCH A,direct (字节互换) XCH A,Ri (字节互换) XCH A,Rn (字节互换) (A)

17、 (direct)或(Ri),或(Rn),XCHD A,Ri 累加器 Acc的低4位与(Ri)的低4位互换,各自的高4位不变,SWAP A 累加器 Acc的低4位与自身的高4位互换,堆栈操作指令(2条):,PUSH压栈指令,POP 弹栈指令,堆栈区由特殊功能寄存器堆栈指针SP 管理 堆栈区可以安排在 RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置 堆栈总是指向栈顶 通常PUSH与POP两条指令成对使用,数据传送类指令(续),例如:设(A)=7BH; (35H)=11H 并且知道(SP)60H PUSH ACC ;(61H) #7BH PUSH 3

18、5H ;(62H) (35H) 即:(62H) #11H,POP ACC ;(A) (62H) 即:(A) #11H POP 5AH ;(5AH) (61H) 即:(5AH) #7BH,(二)算术运算类指令(6种/24条),加法运算: (ADD4条) 带进位加法运算: (ADDC4条) 带借位减法运算: (SUBB4条) 加1/减1操作: (INC,DEC9条) 单字节乘/除法运算: (MUL,DIV2条) 十进制调整: (DA A1条),(二)算术运算类指令(续),加法运算: (ADD4条) 带进位加法运算: (ADDC4条) 带借位减法运算: (SUBB4条),所有的加法(ADD)、带进位

19、加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A 。,加法(ADD)、带进位加法(ADDC) 以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1” 。,带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数),(二)算术运算类指令(续),加1/减1操作: (INC,DEC9条) INC, DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位.,单字节乘/除运算: (MUL,DIV2条) 两个单字节数的乘/除法运算只在A

20、与B之间进行。 MUL AB: (A)与(B)相乘, 积为16位数, (A)积的低8位; (B)积的高8位 DIV AB: (A)除以(B),结果用2字节表示, (A)商的整数部分;(B)余数,(二)算术运算类指令(续),BCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。,4个二进制位就可以表示一位BCD码: 00001001 可表示十进制数(BCD数) 09; 8个二进制位就可以表示两位压缩的BCD码:0000000010011001 表示 0099。,十进

21、制调整: (DA A1条) 用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,若(A)309或(AC)=1则(A)30(A)306; 若(A)749或(CY)=1则(A)74(A)746;,例5:两个十进制数“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,若(A)309或(AC)=1则(A)30(A)306; 若(A)7

22、49或(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” 完成的操作:,(三)逻辑运算及移位类指令(5种/24条),逻辑与运算: (ANL6条) 逻辑或运算: (ORL6条) 逻辑异或运算: (XRL6条) 累加器清零/取反: (CLR,CPL2条) 累加器移位操作: (RL,RLC,RR,RRC4条),逻辑运算及移位类指令(

23、续),逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):,累加器清零/取反操作 (CLR,CPL2条),CLR A 对累加器清零 1 Byte 1 个Tm CPL A 对累加器按位取非 1 Byte 1 个Tm,逻辑运算指令的常见用法,逻辑与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 0

24、000 1111 95H 1001 0101,逻辑运算及移位类指令(续),累加器移位操作:(RL,RLC,RR,RRC4条),RL A 左环移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 带进位位右环移,RR A 右环移,RLC A 带进位位左环移,(四)控制转移类指令(4种/17条),此类指令改变程序的执行顺序改变当前PC值,无条件转移: (LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回: (LCALL,ACALL,RET,RETI4条),空操作: (NOP1条) “耗时”一个机器周期

25、。 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,DJNZ8条,JZ rel JNZ rel 根据A的内容是否为0决定是否跳转,DJNZ direct,rel DJNZ Rn,

26、 rel 将direct(或Rn)里的内容减 1,结果不等于0就跳转;等于0则不跳转继续往下走。,条件转移(续),CJNE A, #data, rel CJNE A, direct,rel CJNE Ri,#data, rel CJNE Rn, #data, rel 将A(或Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,控制转移类指令(续),LCALL addr16 子程序长调用指令 可在64K范围内调用子程序,子程序调用及返回: (LCALL,ACALL,RET,RETI4条),ACALL addr11 子程序绝对调用指令 可在指令所在的2

27、K范围内调用子程序,RET 子程序返回指令 子程序结束并返回调用的下一条指令,RETI 中断服务子程序返回指令 中断结束/返回被打断处的下一条指令,(五)位操作类指令(17条),位操作类指令 以位为单位进行逻辑运算及操作,可分为4种:,位传送: (MOV2条),位清零/置位: (CLR,SETB4条),位逻辑与/或/非运算:(ANL,ORL,CPL6条),位条件转移: (JC,JNC,JB,JNB,JBC5条),位操作类指令(续),位传送指令(2条): MOV C, bit (C)(bit) MOV bit, C (bit)(C) 注: bit表示位地址,位清零/置位指令(4条): CLR b

28、it(或C) (bit或 C)“0” SETB bit(或C) (bit或 C)“1”,位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注:“/bit”表示对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”就先将其清零 再跳转; 否

29、则,不动此位也不跳转。,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,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 ;重复,任务三:红外防盗报警,前面的简单测控实

30、例中的程序:,位操作指令,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,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 ;重复,任务三:红外防盗报警,跳转指令,前面

31、的简单测控实例中的程序:,小结:MCS-51指令集(五大类功能),数据传送类指令 (29条) 算术运算类指令 (24条) 逻辑运算及移位类指令 (24条) 控制转移类指令 (17条) 位操作(布尔操作)类指令 (17条),小结,内部存储器间传送: (MOV16条) 外部数据存储器RAM与累加器间传送: (MOVX4条) 程序存储器ROM向累加器传送: (MOVC2条) 数据交换:(XCH,XCHD,SWAP5条) 堆栈操作: (PUSH,POP2条),(一)数据传送类指令(5种/29条),小结,(二)算术运算类指令(6种/24条),加法运算 (ADD4条) 带进位加法运算 (ADDC4条) 带

32、借位减法运算 (SUBB4条) 加1/减1操作 (INC,DEC9条) 单字节乘/除法运算(MUL,DIV2条) 十进制调整 (DA A1条),小结,(三)逻辑运算及移位指令(5种/24条),逻辑与运算: (ANL6条) 逻辑或运算: (ORL6条) 逻辑异或运算: (XRL6条) 累加器清零/取反: (CLR,CPL2条) 累加器移位操作:(RL,RLC,RR,RRC4条),小结,(四)控制转移类指令(4种/17条),无条件转移: (LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转): (JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回: (LCALL,ACALL,RE

33、T,RETI4条),空操作: (NOP1条),小结,(五)位操作类指令(4种17条),位传送: (MOV2条),位清零/置位: (CLR,SETB4条),位逻辑与/或/非运算: (ANL,ORL,CPL6条),位条件转移: (JC,JNC,JB,JNB,JBC5条),小结,汇编语言与 简单程序设计,汇编语言程序设计中的数,计算机只能识别二进制数机器指令,它原本是不认识常用的十六进制数和十进制数的。,机器指令/目标代码: 由0/1代码组成的操作码与操作数。,十六进制数:便于读写记忆的二进制数的简写形式。 (09,AF 后缀:H/h),BCD码:用二进制数表达的十进制数。 (09表示为:00001

34、001B 后缀:B/b,H/h),二进制数:由0/1组成、“逢2进1”的数制。 如:01011110B (01 后缀:B/b),汇编语言编程基本规则,汇编语言:用助记符描述的指令的集合。,指令中以 AF 开头的十六进制数前必须添一个 “0”。,二进制数必须带后缀“B”或“b”;十六进制数必须带后缀“H”或“h”;十进制数的后缀是“D”或“d”或无.,标号:操作码 目的操作数,源操作数;注释,汇编程序:汇编语言编写的程序借助编译工具 编译成为目标代码,计算机才能识别。这个编译工具称为汇编程序。,汇编程序的伪指令,汇编程序 软件 工具工具软件: 将程序员用汇编语言编写的程序翻译成机器码,(真)指令

35、:告诉计算机如何操作以及做何种操作,用汇编语言编写的程序在此被称为应用程序,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是真指令的事。 比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思,汇编程序的常用伪指令,ORG addr16ASM51程序中一定要写! 规定编译后的机器代码存放的起始位置。,END ASM51程序中一定要写! 表示翻译到此结束,其后的任何内容不予理睬。,符号名称 EQU 表达式 将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。,$ “当前PC值”也叫位置计数器 代表正在执行的指令所在位置。,汇编程序的常用伪指令

36、(续),符号名称 BIT 位地址 将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,DW 双字节数据或双字节数据组 将双字节数据或双字节数据组顺序存放在此后的存储单元中。占据相应存储空间。,DB 8位数据或8位数据组 将8位数据或8位数据组顺序存放在此后的存储单元中。占相应数量的存储空间。,程序的顺序/分支/循环三种基本结构,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;再取入口数据

37、ANL A, #0FH ;取出个位 ADD A, R3 MOV R2,A ;结果 R2 RET ;若不是子程序可用END,例 将R2中BCD码数转为二进制数存进R2 (此子程序在下一例中还要用到),编程要点: 两字节 BCD码数范围为: 0000H9999H 调用 BCD2B子程序实现“千位,百位”转为二进制, 并乘100; 再调 BCD2B子程序实现“十位,个位”转为二进制; 最后,对位相加。,例:将R5R4中的双字节BCD码数转为 二进制数存于R5R4中。,程序的顺序/分支/循环三种基本结构,例: 将R5R4中的两字节BCD码数转为二进制数存于R5R4中,X 100,千 百,十 个,二进制

38、,+,Cy,+,(R5),(R4),(R5),(R4),(R6),(A),(R5),(A),二进制,二进制,二进制,二进制,二进制,调 BCD2B,调 BCD2B,程序的顺序/分支/循环三种基本结构,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

39、;赋给函数“Y” HERE:AJMP HERE END,例,1 (X0) 0 (X=0) 1(X0),Y=,程序的顺序/分支/循环三种基本结构,任务一:控制一盏灯点亮 任务二:红灯周期性亮/灭 任务三:红外防盗报警,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 ;再检测,程序的顺序/分支

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论