630 likes | 829 Vues
MCS-51 系列单片机指令学习. 一、实验目的 MCS-51 系列单片机指令系统共有 111 条汇编语言指令,这些指令按功能的不同可分为五类: 29 条数据传送类指令, 24 条算术运算类指令, 24 条逻辑运算类指令, 17 条控制转移类指令和 17 条位操作类指令。 本实验通过单步执行程序中各类指令,来进一步学习和理解各类主要指令的功能,掌握指令的用法。 通过实验掌握 Keil 软件的使用方法。. 二、实验准备 1 、启动稳压电源,确认输出电压正常。 2 、将微机实验开发系统与直流稳压电源连接好。 三、实验内容
E N D
MCS-51系列单片机指令学习 一、实验目的 MCS-51系列单片机指令系统共有111条汇编语言指令,这些指令按功能的不同可分为五类:29条数据传送类指令,24条算术运算类指令,24条逻辑运算类指令,17条控制转移类指令和17条位操作类指令。 本实验通过单步执行程序中各类指令,来进一步学习和理解各类主要指令的功能,掌握指令的用法。 通过实验掌握Keil软件的使用方法。
二、实验准备 1、启动稳压电源,确认输出电压正常。 2、将微机实验开发系统与直流稳压电源连接好。 三、实验内容 将以下各部分实验中所给出的程序的指令机器代码查出,并输入到单片机系统中,然后从程序给定地址开始单步执行,观察并记录程序所指定的内容。
(一)、数据传送与算术运算 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=( )
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=( )
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
(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
步骤: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)
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
执行后 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
执行后 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
执行后 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,实验结果是否正确?“与”指令有何作用?
2、逻辑“或”指令实验。 程序如下: ORG 1400H SUBROUT:MOV R1, #0FH; MOV A, #33H; ORL A, R1; HERE:SJMP HERE; END 执行后 A=( ),“或”指令有何作用?
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=( )。
4、利用左移指令实现乘2运算。 程序如下: ORG 1600H SUBROUT:MOV A, #29H; RLC A; HERE:SJMP HERE; END 执行后 A=( )
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=( )。
(三)、位操作指令的功能和用法。 利用位条件转移指令实现两个无符号数比较大小。 程序如下: ORG 1800H SUBROUT:MOV 30H, #80H; MOV 31H, #7FH; MOV A, 30H; CJNE A,31H,BIG; MOV A,#0DDH; SJMP HERE; BIG:JC SMALL;
MOV A, #0F0H; SJMP HERE; SMALL:MOV A, #0FH; HERE:SJMP HERE; END 执行后 A=( ),修改(30H)=7FH,(31H)=80H,执行后 A=( ),再修改(30H)=80H,(31H)=80H,执行后A=( )。
四、实验报告要求 1、整理好记录的数据,与理论分析的结果相比较。 2、归纳MCS-51 系列单片机各类主要指令的功能,熟悉指令寻址方式。 3、位操作指令JC是根据什么条件实现转换的。 4、实验报告格式参照实验报告说明 五、预习报告要求 1、认真阅读实验要求。 2、汇编所有实验程序。
数据传送 一、实验目的 1、进一步熟悉Keil软件的使用方法。 2、练习设计简单的程序。 3、掌握MCS-51 系列单片机内部RAM之间,外部RAM之间以及内部RAM与外部RAM之间的数据传送方法,从而了解这两部分数据存贮器的特点。 4、掌握MCS-51系列单片机堆栈的使用方法。
二、设计要求 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现场及存贮器单元的内容。
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的内容。
(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内容。
3、实验测量数据表格如下。 表格(一)
四、实验报告要求 1、写出实验程序清单。 2、将测得的数据填入表格,并和理论分析的结果相比较。 3、实验报告格式参照实验报告说明。 五、实验思考与总结 1、说明MCS-51系列单片机对片内RAM和片外RAM存贮器各有哪些寻址方式? 2、说明指令MOV A,20H和MOV C,20H中的20H含义有什么不同?传送指令中的助记符 MOV,MOVX,MOVC各适用于访问哪个存储器空间? 3、根据实验结果,说明MCS-51系列单片机堆栈操作规则。
五、实验参考程序 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;
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;
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;
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;
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;
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
定时器/计数器及中断系统的应用 • 一、实验目的 • 掌握定时器/计数器及中断系统的使用 • 方法。 • 掌握Proteus软件与Keil软件的使用方法。 • 二、设计要求 • 1、在P 1.0口线上产生周期为500微秒的连续方波。
2、连续方波产生的时刻由按键K控制。 • 三、设计提示 • 1、用Proteus软件画出电路原理图。 • 2、按键K作为外部中断源使用。 • 3、定时器/计数器可采用查询或中断方式工作。 • 4、在P 1.0口线上接示波器观察波形。
四、实验报告要求 1、列出实验程序清单。 2、实验报告格式参照实验报告说明。 五、实验思考与总结 1、如何产生周期为500微秒,占空比为2:5的连续矩形波。 2、总结本实验用到的知识点。
MCS-51系列单片机P1口、P3口的应用 一、实验目的 1、学习MCS-51系列单片机的P1口和P3口的使用方法。 2、学习延时子程序的编写。 3、学习汇编语言编程方法与调试技巧。 4、掌握Proteus软件与Keil软件的使用方法 。 二、设计要求 1、P1口灯亮实验 P1口作输出口,接八只发光二极管,使发光二极管循环点亮。
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,运行程序,注意观察发光二极管闪亮移位情况。
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、实验报告格式参照实验报告说明。
五、实验思考与总结 1、对于P1口亮灯实验,如何修改程序,使发光二极管闪亮时间改变以及使发光二极管闪亮移位方向改变。 2、对于P1口转弯灯实验,如何使用单步方式调试本程序 (提示:如何修改延时子程序)。 3、对于P3口输入,P1口输出实验,如何修改程序,使发光二极管以左移方式点亮。 4、总结本实验用到的知识点。
六、实验参考程序 1、P1口灯亮实验 ORG 0790H SE18: MOV P1, #0FFH; 送P1口 LO34: MOV A, #0FEH; L1发光二极管点亮 LO33: MOV P1, A; LCALL SE19; 延时 RL A; 左移位 SJMP LO33; 循环
ORG 07A0H SE19:MOV R6, #0A0H; 延时 LO36:MOV R7, #0FFH; LO35:DJNZ R7, LO35; DJNZ R6, LO36; RET END
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; 关左灯
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; 继续查状态
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;
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; 继续
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
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; 循环
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
8255的应用 一、实验目的 1、掌握MCS-51系列单片机与8255的接口设计方法。 2、熟悉8255芯片初始化程序的设计方法。 3、掌握Proteus软件与Keil软件的使用方法。