1 / 63

MCS-51 系列单片机指令学习

MCS-51 系列单片机指令学习. 一、实验目的 MCS-51 系列单片机指令系统共有 111 条汇编语言指令,这些指令按功能的不同可分为五类: 29 条数据传送类指令, 24 条算术运算类指令, 24 条逻辑运算类指令, 17 条控制转移类指令和 17 条位操作类指令。 本实验通过单步执行程序中各类指令,来进一步学习和理解各类主要指令的功能,掌握指令的用法。 通过实验掌握 Keil 软件的使用方法。. 二、实验准备 1 、启动稳压电源,确认输出电压正常。 2 、将微机实验开发系统与直流稳压电源连接好。 三、实验内容

deiter
Download Presentation

MCS-51 系列单片机指令学习

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MCS-51系列单片机指令学习 一、实验目的 MCS-51系列单片机指令系统共有111条汇编语言指令,这些指令按功能的不同可分为五类:29条数据传送类指令,24条算术运算类指令,24条逻辑运算类指令,17条控制转移类指令和17条位操作类指令。 本实验通过单步执行程序中各类指令,来进一步学习和理解各类主要指令的功能,掌握指令的用法。 通过实验掌握Keil软件的使用方法。

  2. 二、实验准备 1、启动稳压电源,确认输出电压正常。 2、将微机实验开发系统与直流稳压电源连接好。 三、实验内容 将以下各部分实验中所给出的程序的指令机器代码查出,并输入到单片机系统中,然后从程序给定地址开始单步执行,观察并记录程序所指定的内容。

  3. (一)、数据传送与算术运算 1、体会 MOV Rn, direct指令的功能和用法,取n=0,direct=40H。 程序如下: ORG 1000H SUBROUT:MOV 40H, #0FH; 0FH送入RAM 40H单元中 MOV R0, 40H; 40H单元内容送R0 MOV A, R0; R0内容送累加器A HERE:SJMP HERE; END A=( ),40H=( ),R0=( )

  4. 2、体会MOV @Ri,#DATA指令的功能和用法,选择DATA=0FH,i=0。 程序如下: ORG 1010H SUBR:MOV R0, #50H; R0←50H MOV @R0, #0FH; (R0)←0FH MOV A, 50H; A←(50H) HERE:SJMP HERE; END R0=( ),50H=( ),A=( )

  5. 3、体会查表指令MOVC A,@A+DPTR,MOVC A,@A+PC的功能和用法。 设定40H单元中的内容为0~9之间的一个整数,用查表的方法求出它的平方值(BCD码),结果存入41H单元。 (1)、利用MOVC A, @A+DPTR指令查表 程序如下: ORG 1020H START:MOV DPTR, #SQR; MOV A, 40H; MOVC A, @A+DPTR; MOV 41H, A; HERE:SJMP HERE; SQR:DB 00H,01H,04H,09H,16H DB 25H,36H,49H,64H,81H END

  6. (2)、利用 MOVC A,@A+PC 指令查表 程序如下: ORG 1050H START:MOV A, 40H; ADD A, #04H; MOVC A, @A+PC; MOV 41H, A; HERE:SJMP HERE; SQR:DB 00H,01H,04H,09H,16H DB 25H,36H,49H,64H,81H END

  7. 步骤:1)、仔细阅读程序并进行手工汇编。 2)、将程序输入单片机实验开发系统。 3)、建立平方值表。 4)、在40H单元键入00~09之间的随机整数,分别执行上述两个程序,检查41H单元的值。 41H=( ), 41H=( ) 4、用加法指令ADD A,R0实现两数相加,如52H+FCH。 程序如下: ORG 1100H SUBROUT:MOV A, #52H ; A←52H MOV R0, #0FCH; R0←0FCH ADD A, R0; A←(A)+(R0)

  8. HERE:SJMP HERE; END A=( ), PSW=( ) 用带进位加法指令 ADDC A,R0实现52H与0CH之和。 程序如下: ORG 1150H SUBROUT:MOV A, #52H; MOV R0, #0CH; SETB C; ADDC A, R0; HERE:SJMP HERE; END

  9. 执行后 A=( ),PSW=( ) 若将 SETB C 指令改为 CLR C 执行后 A=( ),PSW=( ) 5、体会十进制调整指令 DA A 的功能和用法 程序如下: ORG 1200H SUBROUT:MOV A, #65H; ADD A, #58H; DA A; HERE:SJMP HERE; END

  10. 执行后 A=( ), PSW=( ) 若将 DA A 指令用NOP代替,则执行后 A=( ),PSW=( ) 6、用乘法指令 MUL AB 进行 0FFH*03H 程序如下: ORG 1250H SUBROUT:MOV A, #0FFH; MOV B, #03H; MUL AB; NOP; NOP; HERE:SJMP HERE END

  11. 执行后 A=( ),B=( ),将2个空操作指令换成MOV A,B执行后A=( ),B=( ),最后0FFH*03H=( ),是否等于B与A的内容的积( )。 (二)、逻辑运算和循环指令 1、逻辑“与”指令实验。 程序如下: ORG 1300H SUBROUT:MOV A, #0FBH; ANL A, #0FH; HERE:SJMP HERE; END 执行后 A=0BH,实验结果是否正确?“与”指令有何作用?

  12. 2、逻辑“或”指令实验。 程序如下: ORG 1400H SUBROUT:MOV R1, #0FH; MOV A, #33H; ORL A, R1; HERE:SJMP HERE; END 执行后 A=( ),“或”指令有何作用?

  13. 3、逻辑“异或”指令实验。 程序如下: ORG 1500H SUBROUT:MOV A, #55H; MOV 40H, #00H; XRL A, 40H; HERE:SJMP HERE; END 执行后 A=( ),将MOV 40H,#00H 改为 MOV 40H, #55H,执行后A=( )。

  14. 4、利用左移指令实现乘2运算。 程序如下: ORG 1600H SUBROUT:MOV A, #29H; RLC A; HERE:SJMP HERE; END 执行后 A=( )

  15. 5、利用循环移位指令实现累加器A中内容高半字节与低半字节互换。 程序如下: ORG 1700H SUBROUT:MOV A, #38H; RL A; RL A; RL A; RL A; HERE:SJMP HERE; END 执行后 A=( ),改用 RR A指令重新实验,执行后 A=( ),改用SWAP A指令重新执行,则A=( )。

  16. (三)、位操作指令的功能和用法。 利用位条件转移指令实现两个无符号数比较大小。 程序如下: ORG 1800H SUBROUT:MOV 30H, #80H; MOV 31H, #7FH; MOV A, 30H; CJNE A,31H,BIG; MOV A,#0DDH; SJMP HERE; BIG:JC SMALL;

  17. MOV A, #0F0H; SJMP HERE; SMALL:MOV A, #0FH; HERE:SJMP HERE; END 执行后 A=( ),修改(30H)=7FH,(31H)=80H,执行后 A=( ),再修改(30H)=80H,(31H)=80H,执行后A=( )。

  18. 四、实验报告要求 1、整理好记录的数据,与理论分析的结果相比较。 2、归纳MCS-51 系列单片机各类主要指令的功能,熟悉指令寻址方式。 3、位操作指令JC是根据什么条件实现转换的。 4、实验报告格式参照实验报告说明 五、预习报告要求 1、认真阅读实验要求。 2、汇编所有实验程序。

  19. 数据传送 一、实验目的 1、进一步熟悉Keil软件的使用方法。 2、练习设计简单的程序。 3、掌握MCS-51 系列单片机内部RAM之间,外部RAM之间以及内部RAM与外部RAM之间的数据传送方法,从而了解这两部分数据存贮器的特点。 4、掌握MCS-51系列单片机堆栈的使用方法。

  20. 二、设计要求 1、先将MCS-51系列单片机内部RAM 30H~3FH单元分别置初值,初值为00H~0FH,然后将片内RAM 30H~3FH的内容传送至片内RAM 40~4FH单元中,再将片内RAM 40H~4FH单元中的内容传送到外部RAM 4800H~480FH单元中,之后又将4800H~480FH单元内容送到外部RAM 5800H~580FH单元中,最后将片外RAM 5800H~580FH单元内容传送回片内RAM 50H~5FH单元中。 2、设置五个断点,断点地址分别为404AH,4056H,4063H,408CH,4099H,每运行到断点时,检查相应的CPU现场及存贮器单元的内容。

  21. 3、另设置七个断点,断点地址分别为4063H,4066H,406DH,406FH,4072H,4078H,407AH,每运行到断点时检查相应的SP,(SP),DPH,DPL的内容。3、另设置七个断点,断点地址分别为4063H,4066H,406DH,406FH,4072H,4078H,407AH,每运行到断点时检查相应的SP,(SP),DPH,DPL的内容。 三、设计提示 1、在微机上编辑数据传送汇编语言程序源文件,然后进行机器汇编,将实验机器代码程序下载至实验装置。 2、实验步骤: (1)设置五个断点,断点地址分别为404AH,4056H,4063H,408CH,4099H。 (2)运行程序到第一个断点404AH,检查30H~3FH单元内容及累加器A的内容。

  22. (3)运行程序到第二个断点4056H,检查40H~4FH单元内容及累加器A的内容。 (4)运行程序到第三个断点4063H,检查4800H~480FH单元内容及累加器A,数据指针DPTR的内容。 (5)运行程序到第四个断点408CH,检查5800H~580FH单元内容及累加器A,数据指针DPTR的内容。 (6)运行程序到第五个断点4099H,检查50H~5FH单元内容及累加器A,数据指针DPTR的内容。 (7)清除以上所设断点,另设七个断点,断点地址分别为4063H,4066H,406DH,406FH,4072H,4078H,407AH。 (8)每运行到一个断点,分别检查SP,(SP),DPH,DPL内容。

  23. 3、实验测量数据表格如下。 表格(一)

  24. 表格(二)

  25. 四、实验报告要求 1、写出实验程序清单。 2、将测得的数据填入表格,并和理论分析的结果相比较。 3、实验报告格式参照实验报告说明。 五、实验思考与总结 1、说明MCS-51系列单片机对片内RAM和片外RAM存贮器各有哪些寻址方式? 2、说明指令MOV A,20H和MOV C,20H中的20H含义有什么不同?传送指令中的助记符 MOV,MOVX,MOVC各适用于访问哪个存储器空间? 3、根据实验结果,说明MCS-51系列单片机堆栈操作规则。

  26. 五、实验参考程序 ORG 4000H 4000:0140 AJMP MAIN ORG 4040H 4040:7830 MAIN:MOV R0, #30H; 4042:7A10 MOV R2, #10H; 4044:E4 CLR A; 4045:F6 A1: MOV @R0, A; 4046:08 INC R0; 4047:04 INC A; 4048:DAFB DJNZ R2, A1;

  27. 404A:7830 MOV R0,#30H;把片内RAM 30~3FH 404C:7940 MOV R1,#40H;内容传送到片内RAM 404E:7A10 MOV R2,#10H;40H~4FH单元中 4050:E6 A2:MOV A,@R0; 4051:F7 MOV @R1,A; 4052:08 INC R0; 4053:09 INC R1; 4054:DAFA DJNZ R2,A2;

  28. MOV R1,#40H;把片内RAM 40~4FH 4058:904800 MOV DPTR,#4800H;内容传送到片外RAM 405B:7A10 MOV R2,#10H;4800~480FH单元中 405D:E7 A3:MOV A,@R1; 405E:F0 MOVX @DPTR,A; 405F:09 INC R1; 4060:A3 INC DPTR; 4061:DAFA DJNZ R2,A3;

  29. MOV SP, #60H; 把片外RAM 4800~ 4066:7A10 MOV R2, #10H; 480FH内容传送到片 4068:904800 MOV DPTR,#4800H;外RAM 5800~580FH 406B:C082 PUSH DPL; 单元中 406D:C083 PUSH DPH; 406F:905800 MOV DPTR, #5800H; 4072:AB82 MOV R3, DPL; 4074:AC83 MOV R4, DPH;

  30. A4:POP DPH; 4078:D082 POP DPL; 407A:E0 MOVX A,@DPTR; 407B:A3 INC DPTR; 407C:C082 PUSH DPL; 407E:C083 PUSH DPH; 4080:8B82 MOV DPL,R3; 4082:8C83 MOV DPH,R4; 4084:F0 MOVX @DPTR,A; 4085:A3 INC DPTR; 4086:AB82 MOV R3,DPL; 4088:AC83 MOV R4,DPH; 408A:DAEA DJNZ R2,A4;

  31. MOV R0, #50H; 把片外RAM 5800~ 408E:905800 MOV DPTR,#5800H;580FH内容传送回片 4091:7A10 MOV R2, #10H; 内RAM 50~5FH单元 4093:E0 A5:MOVX A, @DPTR; 4094:F6 MOV @R0, A; 4095:08 INC R0; 4096:A3 INC DPTR; 4097:DAFA DJNZ R2, A5; 4099:80FE HERE:SJMP HERE; END

  32. 定时器/计数器及中断系统的应用 • 一、实验目的 • 掌握定时器/计数器及中断系统的使用 • 方法。 • 掌握Proteus软件与Keil软件的使用方法。 • 二、设计要求 • 1、在P 1.0口线上产生周期为500微秒的连续方波。

  33. 2、连续方波产生的时刻由按键K控制。 • 三、设计提示 • 1、用Proteus软件画出电路原理图。 • 2、按键K作为外部中断源使用。 • 3、定时器/计数器可采用查询或中断方式工作。 • 4、在P 1.0口线上接示波器观察波形。

  34. 四、实验报告要求 1、列出实验程序清单。 2、实验报告格式参照实验报告说明。 五、实验思考与总结 1、如何产生周期为500微秒,占空比为2:5的连续矩形波。 2、总结本实验用到的知识点。

  35. MCS-51系列单片机P1口、P3口的应用 一、实验目的 1、学习MCS-51系列单片机的P1口和P3口的使用方法。 2、学习延时子程序的编写。 3、学习汇编语言编程方法与调试技巧。 4、掌握Proteus软件与Keil软件的使用方法 。 二、设计要求 1、P1口灯亮实验 P1口作输出口,接八只发光二极管,使发光二极管循环点亮。

  36. 2、P1口转弯灯实验 P1.0接+5V时,右转弯灯闪亮; P1.1接+5V时,左转弯灯闪亮; P1.0,P1.1同时接+5V或接地时,转弯灯均不闪亮。 3、P3口输入,P1口输出实验 从P3.3口线输入一脉冲,P1口按十六进制加一方式点亮发光二极管。 三、设计提示 1、P1口灯亮实验程序流程框图如图所示。将P1.0~P1.7用扦针连至L1~L8,运行程序,注意观察发光二极管闪亮移位情况。

  37. 2、P1口转弯灯实验程序流程框图如图所示。将P1.0接K1,P1.1接K2,P1.4~P1.7接L1,L5,L9,L13,运行程序,观察转弯灯闪亮情况。 3、P3口输入,P1口输出实验程序流程框图如图所示。将P3.3用扦针连至K1,P1.0~P1.7扦针连至L1~L8,运行程序,K1拨动一次,注意观察L1~L8发光二极管点亮变化情况。 四、实验报告要求 1、列出各实验程序清单。 2、实验报告格式参照实验报告说明。

  38. 五、实验思考与总结 1、对于P1口亮灯实验,如何修改程序,使发光二极管闪亮时间改变以及使发光二极管闪亮移位方向改变。 2、对于P1口转弯灯实验,如何使用单步方式调试本程序 (提示:如何修改延时子程序)。 3、对于P3口输入,P1口输出实验,如何修改程序,使发光二极管以左移方式点亮。 4、总结本实验用到的知识点。

  39. 六、实验参考程序 1、P1口灯亮实验 ORG 0790H SE18: MOV P1, #0FFH; 送P1口 LO34: MOV A, #0FEH; L1发光二极管点亮 LO33: MOV P1, A; LCALL SE19; 延时 RL A; 左移位 SJMP LO33; 循环

  40. ORG 07A0H SE19:MOV R6, #0A0H; 延时 LO36:MOV R7, #0FFH; LO35:DJNZ R7, LO35; DJNZ R6, LO36; RET END

  41. 2、P1口转弯灯实验 ORG 0C30H PX00:MOV P1, #0FFH; 初始化 PX03: MOV A, P1; MOV B, A; ANL A, #03H; CJNE A, #01H, PX01;满足只是P1.0为高条件吗? JB 00H, PX04; 闪烁标志位 CLR P1.4; CLR P1.5; 开右灯 SETB P1.6; SETB P1.7; 关左灯

  42. MOV R2, #20H; LCALL DELY; 延时 SETB 00H; 置标志位 LJMP PX03; 继续查状态 PX04: SETB P1.4; SETB P1.5; SETB P1.6; 关灯 SETB P1.7; MOV R2, #20H; LCALL DELY; 延时 CLR 00H; 清标志位 AJMP PX03; 继续查状态

  43. PX01: CJNE A, #02H,PX02;满足只是P1.1为高条件吗? JB 01H, PX05; 判标志位 SETB P1.4; SETB P1.5; 开左灯 CLR P1.6; CLR P1.7; 关右灯 MOV R2, #20H; 延时 LCALL DELY; SETB 01H; 置标志位 LJMP PX03; 继续查状态 PX05: SETB P1.4; SETB P1.5;

  44. SETB P1.6; 关灯 SETB P1.7; MOV R2, #20H; LCALL DELY; 延时 CLR 01H; 清标志位 LJMP PX03; 继续查状态 PX02: SETB P1.4; SETB P1.5; SETB P1.6; 关灯 SETB P1.7; LJMP PX03; 继续

  45. ORG 0213H 0213:C002 DELY: PUSH 02H; 延时 0215:C002 DEL2: PUSH 02H; 0217:C002 DEL3: PUSH 02H; 0219:DAFE DEL4: DJNZ R2, DEL4; 021B:D002 POP 02H; 021D:DAF8 DJNZ R2, DEL3; 021F:D002 POP 02H; 0221:DAF2 DJNZ R2, DEL2; 0223:D002 POP 02H; 0225:DAEC DJNZ R2, DELY; 0227:22 RET

  46. 3、P3口输入,P1口输出实验 ORG 0810H J100: MOV A, #00H J101: JB P3.3,J101; MOV R2, #20H; LCALL DELY; JB P3.3,J101; P3.3电平为低吗? J102: JNB P3.3,J102; MOV R2, #20H; LCALL DELY; JNB P3.3,J102; P3.3电平高吗? INC A; 加1 PUSH ACC; CPL A; 取反 MOV P1, A; 驱动发光二极管 POP ACC; AJMP J101; 循环

  47. ORG 0213H 0213:C002 DELY: PUSH 02H; 延时 0215:C002 DEL2: PUSH 02H; 0217:C002 DEL3: PUSH 02H; 0219:DAFE DEL4: DJNZ R2, DEL4; 021B:D002 POP 02H; 021D:DAF8 DJNZ R2, DEL3; 021F:D002 POP 02H; 0221:DAF2 DJNZ R2, DEL2; 0223:D002 POP 02H; 0225:DAEC DJNZ R2, DELY; 0227:22 RET

  48. 8255的应用 一、实验目的 1、掌握MCS-51系列单片机与8255的接口设计方法。 2、熟悉8255芯片初始化程序的设计方法。 3、掌握Proteus软件与Keil软件的使用方法。

More Related