单片机学习资料.ppt

上传人:sccc 文档编号:5813421 上传时间:2023-08-22 格式:PPT 页数:67 大小:590.01KB
返回 下载 相关 举报
单片机学习资料.ppt_第1页
第1页 / 共67页
单片机学习资料.ppt_第2页
第2页 / 共67页
单片机学习资料.ppt_第3页
第3页 / 共67页
单片机学习资料.ppt_第4页
第4页 / 共67页
单片机学习资料.ppt_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《单片机学习资料.ppt》由会员分享,可在线阅读,更多相关《单片机学习资料.ppt(67页珍藏版)》请在三一办公上搜索。

1、单片微机原理及应用教学课件,第二讲:指令与编程,本讲重点:寻址方式;MCS-51指令集;伪指令;汇编语言与简单程序设计.,单片微机原理及应用教学课件,第三章 指令系统及程序设计(P.43),51系列单片机指令集含有111条指令,每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条),按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条),每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(4

2、6条);3字节(16条),单片微机原理及应用教学课件,ASM-51指令的格式(P.44),方括符 表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾操作码就是指令功能助记符,指令实体目的操作数源操作数注释,以“;”开头,标号:操作码 目的操作数,源操作数;注释,单片微机原理及应用教学课件,51单片机指令的寻址方式(P.45),寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址,寻址方式:指令按地址获得操作数的方式七种寻址方式,一条指令可能含多种寻址方式,单片微机原理及应用教学课件,寄存器寻址(P.45)从寄存器中读取操作数或存放操作数进

3、寄存器例:MOV A,B;(A)(B)MOV 30H,R0;(30H)(R0)MOV A,R1;(A)(R1),单片微机原理及应用教学课件,立即寻址(P.45)操作数直接就出现在指令中例:MOV A,#64H;(A)立即数 64H ADD A,#05H;(A)(A)+立即数 05H注意:符号“#”表明其后跟的是立即数,立即数就是数字量本身。,单片微机原理及应用教学课件,寄存器间接寻址(P.46)寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数,注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“”表示“在”,其含义与读

4、音皆同“at”。,例:MOV R1,#30H;(R1)立即数30H,MOV R1,#30H;(R1)立即数30H MOV R1,#0FH;(30H)立即数0FH MOV A,R1;(A)(30H)=#0FH,单片微机原理及应用教学课件,直接寻址(P.46)指令中直接给出了操作数所在单元的地址或名称 例: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;(P

5、1)(#5AH)MOV B,30H;(B)(30H),SFR的地址见 P.33表,相同,相同,单片微机原理及应用教学课件,在本单片机中访问特殊功能寄存器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范围内的RAM只能用寄存器间接寻址方式,而SFR只能用直接寻址方式

6、。从而解决了地址冲突的问题。例如:,单片微机原理及应用教学课件,存储器配置(片内RAM),89C51片内RAM 128字节(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字节,只能直接寻址,只能寄存器间接寻址,单片微机原理及应用教学课件,变址寻址(P.47)也称为:基址寄存器+变址寄存器间接寻址,以16位的地址指针寄存器DPTR或 16位的PC

7、寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。,P47例:设:A中已存有#A4H,DPTR中已存有#1234H MOVC A,A+DPTR;(A)(A)+(DPTR)操作:将A4H+1234H=12D8H单元中的数放进累加器A,单片微机原理及应用教学课件,相对寻址(P.47)当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址例:SJMP rel 操作:跳转到的目的地址=当前16位PC值+rel,注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量

8、”,是一个带符号的单字 节数,范围是:-128+127(80H7FH),在实际编程中,“rel”通常用标号代替,单片微机原理及应用教学课件,位寻址(P.48)指令中直接给出了操作数所在的位地址。例: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单

9、元的第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

10、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,单片微机原理及应用教学课件,位寻址(P.48)指令中直接给出了操作数所在的位地址。例:CLR P1.0;(P1.0)0 SETB ACC.7;(ACC.7)1 CPL C;(C)NOT(C),注意:1)位地址里的数据只可能是一个 0 或 1 2)

11、有的位地址十分明确,如 P1.0,ACC.7等,有的位地址则“不太明确”,如:MOV A,17H;(A)(17H),17H是字节地址 MOV ACC.0,17H;(ACC.0)(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位,单片微机原理及应用教学课件,MCS-51指令集,功能分五类,共111条指令,单片微机原理及应用教学课件,MCS-51指令集(五大类功能)P.49页,数据传送类指令:(29条)算术运算类指令:(24条)逻辑运算及移位类指令:(24条)控制转移类指令:(17条)位操作(布尔操作)类指令:(17条),单片微机原理及应用教学课件,内部存储器间传送:(M

12、OV16条)外部数据存储器与累加器间传送:(MOVX4条)程序存储器向累加器传送:(MOVC2条)数据交换:(XCH,XCHD,SWAP5条)堆栈操作:(PUSH,POP2条),(一)数据传送类指令(5种/29条)P.49,见P.49的表32,单片微机原理及应用教学课件,Acc 累加器,Direct 直接寻址,Ri 间接寻址,Rn 寄存器,#data 立即数,Rn:R0R7Ri:R0,R1#data:8位立即数#data16:16位立即数direct:直接地址rel:8位带符号偏移量,(一)数据传送类指令(5种/29条),内部存储器间传送指令(16条):MOV 类指令的操作方向总是后面的操作数

13、 指向前面的操作数!例:MOV A,30H(A)(30H),单片微机原理及应用教学课件,数据传送类指令(续)P.52,外部数据存储器与累加器间传送(4条):MOVX类指令可在累加器与以DPTR或Ri所代表的外部 RAM 之间进行数据传送。,例如:MOVX A,DPTR(A)(DPTR)MOVX A,Ri(A)(Ri)MOVX DPTR,A(DPTR)(A)MOVX Ri,A(Ri)(A),单片微机原理及应用教学课件,程序存储器向累加器传送指令(2条):MOVC A,A+DPTR MOVC A,A+PC 通常称为查表指令,寻址方式属:“基址寄存器+变址寄存器间接寻址”,数据传送类指令(续)P.5

14、2,A+DPTR或A+PC指向程序存储器中的某单元。拟传送给累加器ACC 的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令 DB,DW 等定义在程序中。,单片微机原理及应用教学课件,数据传送类指令(续),数据交换指令(5条):P.53XCH 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位互换,单片微机原理及应用教学课件,堆栈操作指令(2条):P.54,PUSH压栈指

15、令,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,单片微机原理及应用教学课件,(二)算术运算

16、类指令(6种/24条)P.54,加法运算:(ADD4条)带进位加法运算:(ADDC4条)带借位减法运算:(SUBB4条)加1/减1操作:(INC,DEC9条)单字节乘/除法运算:(MUL,DIV2条)十进制调整:(DA A1条),单片微机原理及应用教学课件,(二)算术运算类指令(续)P.55,加法运算:(ADD4条)带进位加法运算:(ADDC4条)带借位减法运算:(SUBB4条),所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以 A为一个加数或被减数,最终结果也存进 A。,加法(ADD)、带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了进位或借位

17、,将自动对PSW中的Cy标志位置“1”。,带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数),单片微机原理及应用教学课件,(二)算术运算类指令(续)P.57,加1/减1操作:(INC,DEC9条)INC,DEC与用加/减法指令做加1/减1 操作不同之处在于INC、DEC不影响标志位.,单字节乘/除运算:(MUL,DIV2条)两个单字节数的乘/除法运算只在A与B之间进行。MUL AB:(A)与(B)相乘,积为16位数,(A)积的高8位;(B)积的低8位DIV AB:(A)除以(B),结果用2字节表示,(A)商的整数部分;(

18、B)余数,单片微机原理及应用教学课件,(二)算术运算类指令(续)P.60,BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码 00100000B 或 20H 表示。,4个二进制位就可以表示一位BCD码:00001001 可表示十进制数(BCD数)09;8个二进制位就可以表示两位压缩的BCD码:0000000010011001 表示 0099。,十进制调整:(DA A1条)用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后,单片微机原理及应用教学课件,若(A)309或(AC)=1则(A

19、)30(A)306;若(A)749或(CY)=1则(A)74(A)746;,P.60例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)749或(CY)=1则(A)74(A)746;,又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“9

20、7”。,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条)P.61,逻辑与运算:(ANL6条)逻辑或运算:(ORL6条)逻辑异或运算:(XRL6条)累加器清零/取反:(CLR,CPL2条)累加器移位操作:(RL,RLC,RR,RRC4条),单片微机原理及应用教学课件,逻辑运算及移位类指令(续)P.61,逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):,累加器清零

21、/取反操作(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 0000 1111 95H 1001 0101,单片微机原理及应用教学课件,逻辑运算及移位类指令

22、(续)P.64,累加器移位操作:(RL,RLC,RR,RRC4条),RL A 左环移,累加器 A,累加器 A,Cy,累加器 A,Cy,累加器 A,RRC A 带进位位右环移,RR A 右环移,RLC A 带进位位左环移,单片微机原理及应用教学课件,(四)控制转移类指令(4种/17条)P.65,此类指令改变程序的执行顺序改变当前PC值,无条件转移:(LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回:(LCALL,ACALL,RET,RETI4条),空操作:(NOP1条)“耗时”一个机器周期。do nothing!,单片微

23、机原理及应用教学课件,控制转移类指令(续)P.65-67,无条件转移:LJMP,AJMP,SJMP,JMP4条,LJMP addr16 长跳转指令 可在64K范围内跳转,AJMP addr11 绝对跳转指令 可在指令所在的2K范围内跳转,SJMP rel 相对跳转指令 可在当前PC-128与+127范围内跳转,JMP A+DPTR 间接长跳转指令 可在以DPTR为基址+A为偏移量 之和所指向的64K程序范围内跳转,单片微机原理及应用教学课件,控制转移类指令(续)P.67-69,条件转移:JZ,JNZ,CJNE,DJNZ8条,JZ relJNZ rel根据Acc的内容是否为0决定是否跳转,DJN

24、Z 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)相比较,其值不相等就跳转;相等则不跳转,继续往下走。,单片微机原理及应用教学课件,控制转移类指令(续)P.70,LCALL addr16 子程序长调用指令可在64K范围内调用子程序,子程序调用及返回:(LCALL,ACALL,RET

25、,RETI4条),ACALL addr11 子程序绝对调用指令可在指令所在的2K范围内调用子程序,RET 子程序返回指令子程序结束并返回调用的下一条指令,RETI 中断服务子程序返回指令中断结束/返回被打断处的下一条指令,单片微机原理及应用教学课件,(五)位操作类指令(17条)P.71,位操作类指令 以位为单位进行逻辑运算及操作,可分为4种:,位传送:(MOV2条),位清零/置位:(CLR,SETB4条),位逻辑与/或/非运算:(ANL,ORL,CPL6条),位条件转移:(JC,JNC,JB,JNB,JBC5条),单片微机原理及应用教学课件,位操作类指令(续)P.72,位传送指令(2条):MO

26、V 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位先取反然后再参加运算,单片微机原理及应用教学课件,位操作类指令(续)P.74,判位条件转移指令(5条):,JC rel(Cy)=“1”就跳转;否则不跳转,JNC rel(Cy)“1”就跳转;否则不跳转,JB bit,rel(bit)=“1”就跳转;

27、否则不跳转,JNB bit,rel(bit)“1”就跳转;否则不跳转,JBC bit,rel(bit)=“1”就先将其清零 再跳转;否则,不动此位也不跳转。,单片微机原理及应用教学课件,任务一:控制一盏灯点亮,任务二:红灯周期性地亮/灭,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

28、.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取反:红

29、灯亮/灭 ACALL DELAY;延时1秒 AJMP JOB2;重复,任务三:红外防盗报警,跳转指令,前面的简单测控实例中的程序:,单片微机原理及应用教学课件,小结:MCS-51指令集(五大类功能),数据传送类指令(29条)算术运算类指令(24条)逻辑运算及移位类指令(24条)控制转移类指令(17条)位操作(布尔操作)类指令(17条),小结,单片微机原理及应用教学课件,内部存储器间传送:(MOV16条)外部数据存储器RAM与累加器间传送:(MOVX4条)程序存储器ROM向累加器传送:(MOVC2条)数据交换:(XCH,XCHD,SWAP5条)堆栈操作:(PUSH,POP2条),(一)数据传送类

30、指令(5种/29条),小结,单片微机原理及应用教学课件,(二)算术运算类指令(6种/24条),加法运算(ADD4条)带进位加法运算(ADDC4条)带借位减法运算(SUBB4条)加1/减1操作(INC,DEC9条)单字节乘/除法运算(MUL,DIV2条)十进制调整(DA A1条),小结,单片微机原理及应用教学课件,(三)逻辑运算及移位指令(5种/24条),逻辑与运算:(ANL6条)逻辑或运算:(ORL6条)逻辑异或运算:(XRL6条)累加器清零/取反:(CLR,CPL2条)累加器移位操作:(RL,RLC,RR,RRC4条),小结,单片微机原理及应用教学课件,(四)控制转移类指令(4种/17条),

31、无条件转移:(LJMP,AJMP,SJMP,JMP4条),条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ8条),子程序调用及返回:(LCALL,ACALL,RET,RETI4条),空操作:(NOP1条),小结,单片微机原理及应用教学课件,(五)位操作类指令(4种17条),位传送:(MOV2条),位清零/置位:(CLR,SETB4条),位逻辑与/或/非运算:(ANL,ORL,CPL6条),位条件转移:(JC,JNC,JB,JNB,JBC5条),小结,单片微机原理及应用教学课件,汇编语言与 简单程序设计,单片微机原理及应用教学课件,汇编语言程序设计中的数,计算机只能识别二进制数机器指令,

32、它原本是不认识常用的十六进制数和十进制数的。,机器指令/目标代码:由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”或“

33、d”或无.,标号:操作码 目的操作数,源操作数;注释,汇编程序:汇编语言编写的程序借助编译工具编译成为目标代码,计算机才能识别。这个编译工具称为汇编程序。,单片微机原理及应用教学课件,汇编程序的伪指令,汇编程序 软件 工具工具软件:将程序员用汇编语言编写的程序翻译成机器码,(真)指令:告诉计算机如何操作以及做何种操作,用汇编语言编写的程序在此被称为应用程序,伪指令:告诉汇编程序在翻译应用程序时有何具体约定。伪指令不进行具体的操作,那是真指令的事。比如:从何处开始,何处结束,某些编程者自己规定的表述代表什么意思,单片微机原理及应用教学课件,汇编程序的常用伪指令,ORG addr16ASM51程序

34、中一定要写!规定编译后的机器代码存放的起始位置。,END ASM51程序中一定要写!表示翻译到此结束,其后的任何内容不予理睬。,符号名称 EQU 表达式将表达式的值赋予符号名称。程序中凡出现该符号名称就等同于该表达式。,$“当前PC值”也叫位置计数器 代表正在执行的指令所在位置。,单片微机原理及应用教学课件,汇编程序的常用伪指令(续),符号名称 BIT 位地址将位地址的值赋予符号名称。程序中凡出现该符号名称就代表该位地址。,DW 双字节数据或双字节数据组将双字节数据或双字节数据组顺序存放在此后的存储单元中。占据相应存储空间。,DB 8位数据或8位数据组将8位数据或8位数据组顺序存放在此后的存储

35、单元中。占相应数量的存储空间。,单片微机原理及应用教学课件,程序的顺序/分支/循环三种基本结构,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,例P.821:将R2中BCD码数转为二进制数存进R2(此子程序在下一例中还要用到),单片微机原理及应用教学课件,编程要点:两字节 BCD码数范围为:0000

36、H9999H 相应2进制/16进制数为:0000H270FH 调用 BCD2B子程序实现“千位,百位”转为二进制,并乘100;再调 BCD2B子程序实现“十位,个位”转为二进制;最后,对位相加。,例P.822:将R5R4中的双字节BCD码数转为 二进制数存于R5R4中。,程序的顺序/分支/循环三种基本结构,单片微机原理及应用教学课件,例P.822:将R5R4中的两字节BCD码数转为二进制数存于R5R4中,X 100,千 百,十 个,二进制,+,Cy,+,(R5),(R4),(R5),(R4),(R6),(A),(R5),(A),二进制,二进制,二进制,二进制,二进制,调 BCD2B,调 BCD

37、2B,程序的顺序/分支/循环三种基本结构,单片微机原理及应用教学课件,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;输出-1POS1:MOV A,#01H;输出+1COMP:MOV FUNC,A;赋给函数“Y”HERE:AJMP HERE END,P.83例3:,1(X0)0(X=0)1(X0),Y=,程序的顺序/分支/循环三种基本结构,单片微机原理及应用教学课件,

38、任务一:控制一盏灯点亮 任务二:红灯周期性亮/灭 任务三:红外防盗报警,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,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

39、.3,CHECK LOOP:;报警!AJMP REDO;再检测,程序的顺序/分支/循环三种基本结构,单片微机原理及应用教学课件,ORG 1000HDELAY:MOV R6,#200;1TmLOOP1:MOV R7,#248;1Tm NOP;1TmLOOP2:DJNZ R7,LOOP2;2Tm DJNZ R6,LOOP1;2Tm RET;1Tm,例P.8586:软件循环延时100mS(晶振12MHz),1Tm=1uS 100mS=100000 uS MOV Rn#data 和 NOP 是单机器周期指令 DJNZ Rn,rel 是双机器周期指令 200=0C8H;248=0F8H,1+1+248x

40、2=498,(498+2)x200,程序的顺序/分支/循环三种基本结构,单片微机原理及应用教学课件,ORG 1000HDL1S:MOV R7,#10DL1:MOV R6,#200DL2: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+250 x2,1+(1+250 x2)+2)x200,1+(1+250 x2+2)x200+2x10,程序的顺序/分支/循环三种基

41、本结构,单片微机原理及应用教学课件,ORG 2000HH2ASC: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:ADD A,#30H MOV R2,A;存结果(出口)RET,P.88例1:16进制数(00H0FH)转ASCII码子程序,算法:凡10的十六进制数加37H;凡10的 十六进制数加 30H。(参见P.333 ASCII码表)ie.09 30H39H,AF 41H46H,单片微机

42、原理及应用教学课件,TABL:DW 050FH,0E89H,0A695H,1EAAH,0D9BH,7F93H DW 0373H,26D7H,2710H,9E3FH,1A66H,22E3H DW 1174H,16EFH,33E4H,6CA0H,P.95例6:根据16个双字节数的序号查表找出对应数据,编程思路:以表格首地址(TABL)为基址,以序号(的2倍)为偏移量,查找对应的数据,单片微机原理及应用教学课件,ORG 2000H(先改动P.96程序中的4条语句)STA1:MOV A,R2;取待查数据的序号 X(入口)RL A;每数占2个单元,序号要乘2 MOV R4,A;R4 序号 x2(即偏移量)MOV DPTR,#TABL;DPTR 表格首地址 MOVC A,A+DPTR;(A)查到数据高8位 XCH A,R4;数据高8位存进R4(出口);同时取出偏移量到A INC DPTR;DPTR指向下一个单元 MOVC A,A+DPTR;再查到数据低8位 MOV R3,A;将数据低8位存进R3(出口)RETTABL:DW;表格数据见前页 END,单片微机原理及应用教学课件,OVER!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号