1、,MCS-51系列单片机指令学习,一、实验目的MCS-51系列单片机指令系统共有111条汇编语言指令,这些指令按功能的不同可分为五类:29条数据传送类指令,24条算术运算类指令,24条逻辑运算类指令,17条控制转移类指令和17条位操作类指令。本实验通过单步执行程序中各类指令,来进一步学习和理解各类主要指令的功能,掌握指令的用法。通过实验掌握Keil软件的使用方法。,二、实验准备 1、启动稳压电源,确认输出电压正常。2、将微机实验开发系统与直流稳压电源连接好。 三、实验内容将以下各部分实验中所给出的程序的指令机器代码查出,并输入到单片机系统中,然后从程序给定地址开始单步执行,观察并记录程序所指定
2、的内容。,(一)、数据传送与算术运算 1、体会 MOV Rn, direct指令的功能和用法,取n=0,direct=40H。程序如下: ORG 1000H SUBROUT:MOV 40H, #0FH; 0FH送入RAM 40H单元中MOV R0, 40H; 40H单元内容送R0MOV A, R0; R0内容送累加器AHERE:SJMP HERE; END A=( 40H ),40H=( 0FH ),R0=( 40H ),2、体会MOV Ri,#DATA指令的功能和用法,选择DATA=0FH,i=0。程序如下: ORG 1010HSUBR:MOV R0, #50H; R050HMOV R0,
3、#0FH; (R0)0FHMOV A, 50H; A(50H)HERE:SJMP HERE;END R0=( ),50H=( ),A=( ),3、体会查表指令MOVC A,A+DPTR,MOVC A,A+PC的功能和用法。设定40H单元中的内容为09之间的一个整数,用查表的方法求出它的平方值(BCD码),结果存入41H单元。(1)、利用MOVC A, A+DPTR指令查表程序如下:ORG 1020HSTART:MOV DPTR, #SQR;MOV A, 40H;MOVC A, A+DPTR;MOV 41H, A;HERE:SJMP HERE;SQR:DB 00H,01H,04H,09H,16H
4、DB 25H,36H,49H,64H,81HEND,(2)、利用 MOVC A,A+PC 指令查表程序如下:ORG 1050HSTART:MOV A, 40H;ADD A, #04H;MOVC A, A+PC;MOV 41H, A;HERE:SJMP HERE;SQR:DB 00H,01H,04H,09H,16HDB 25H,36H,49H,64H,81HEND,步骤:1)、仔细阅读程序并进行手工汇编。2)、将程序输入单片机实验开发系统。3)、建立平方值表。4)、在40H单元键入0009之间的随机整数,分别执行上述两个程序,检查41H单元的值。 41H=( ), 41H=( )4、用加法指令A
5、DD A,R0实现两数相加,如52H+FCH。程序如下:ORG 1100H SUBROUT:MOV A, #52H ; A52HMOV R0, #0FCH; R00FCHADD 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=( )
6、,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 HEREEND,执行后 A=( ),B=( ),将2个空操作指令换成MOV A,B执行后A
7、=( ),B=( ),最后0FFH*03H=( ),是否等于B与A的内容的积( )。 (二)、逻辑运算和循环指令1、逻辑“与”指令实验。程序如下:ORG 1300H SUBROUT:MOV A, #0FBH;ANL A, #0FH;HERE:SJMP HERE;END执行后 A=0BH,实验结果是否正确?“与”指令有何作用?,2、逻辑“或”指令实验。程序如下:ORG 1400HSUBROUT:MOV R1, #0FH;MOV A, #33H;ORL A, R1;HERE:SJMP HERE;END执行后 A=( ),“或”指令有何作用?,3、逻辑“异或”指令实验。程序如下:ORG 1500HS
8、UBROUT:MOV A, #55H;MOV 40H, #00H;XRL A, 40H;HERE:SJMP HERE;END执行后 A=( ),将MOV 40H,#00H 改为 MOV 40H, #55H,执行后A=( )。,4、利用左移指令实现乘2运算。程序如下:ORG 1600HSUBROUT:MOV A, #29H;RLC A;HERE:SJMP HERE;END执行后 A=( ),5、利用循环移位指令实现累加器A中内容高半字节与低半字节互换。程序如下:ORG 1700HSUBROUT:MOV A, #38H;RL A;RL A;RL A;RL A;HERE:SJMP HERE;END执
9、行后 A=( ),改用 RR A指令重新实验,执行后A=( ),改用SWAP A指令重新执行,则A=( )。,(三)、位操作指令的功能和用法。利用位条件转移指令实现两个无符号数比较大小。程序如下:ORG 1800HSUBROUT: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,执行后
10、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系列
11、单片机堆栈的使用方法。,二、设计要求 1、先将MCS-51系列单片机内部RAM 30H3FH单元分别置初值,初值为00H0FH,然后将片内RAM 30H3FH的内容传送至片内RAM 404FH单元中,再将片内RAM 40H4FH单元中的内容传送到外部RAM 4800H480FH单元中,之后又将4800H480FH单元内容送到外部RAM 5800H580FH单元中,最后将片外RAM 5800H580FH单元内容传送回片内RAM 50H5FH单元中。2、设置五个断点,断点地址分别为404AH,4056H,4063H,408CH,4099H,每运行到断点时,检查相应的CPU现场及存贮器单元的内容。,
12、3、另设置七个断点,断点地址分别为4063H,4066H,406DH,406FH,4072H,4078H,407AH,每运行到断点时检查相应的SP,(SP),DPH,DPL的内容。 三、设计提示 1、在微机上编辑数据传送汇编语言程序源文件,然后进行机器汇编,将实验机器代码程序下载至实验装置。2、实验步骤:(1)设置五个断点,断点地址分别为404AH,4056H,4063H,408CH,4099H。(2)运行程序到第一个断点404AH,检查30H3FH单元内容及累加器A的内容。,(3)运行程序到第二个断点4056H,检查40H4FH单元内容及累加器A的内容。(4)运行程序到第三个断点4063H,
13、检查4800H480FH单元内容及累加器A,数据指针DPTR的内容。(5)运行程序到第四个断点408CH,检查5800H580FH单元内容及累加器A,数据指针DPTR的内容。(6)运行程序到第五个断点4099H,检查50H5FH单元内容及累加器A,数据指针DPTR的内容。(7)清除以上所设断点,另设七个断点,断点地址分别为4063H,4066H,406DH,406FH,4072H,4078H,407AH。(8)每运行到一个断点,分别检查SP,(SP),DPH,DPL内容。,3、实验测量数据表格如下。 表格(一),表格(二),四、实验报告要求1、写出实验程序清单。2、将测得的数据填入表格,并和理
14、论分析的结果相比较。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 MAINORG 4040H 4040:7830 MAIN:MOV R0, #30H; 4042:7A10 MOV R2, #10H; 4044:E4 CLR A; 4045
15、:F6 A1: MOV R0, A; 4046:08 INC R0; 4047:04 INC A; 4048:DAFB DJNZ R2, A1;,404A:7830 MOV R0, #30H;把片内RAM 303FH 404C:7940 MOV R1, #40H;内容传送到片内RAM 404E:7A10 MOV R2, #10H;40H4FH单元中 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 404FH 40
16、58:904800 MOV DPTR,#4800H;内容传送到片外RAM 405B:7A10 MOV R2, #10H;4800480FH单元中 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 5800580FH 406B:C082 PUSH DPL; 单元
17、中 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:A
18、B82 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 505FH单元 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,定时器/
19、计数器及中断系统的应用,一、实验目的掌握定时器/计数器及中断系统的使用 方法。掌握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系列单
20、片机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口灯亮实验程序流程框图如图所示。将P
21、1.0P1.7用扦针连至L1L8,运行程序,注意观察发光二极管闪亮移位情况。,2、P1口转弯灯实验程序流程框图如图所示。将P1.0接K1,P1.1接K2,P1.4P1.7接L1,L5,L9,L13,运行程序,观察转弯灯闪亮情况。3、P3口输入,P1口输出实验程序流程框图如图所示。将P3.3用扦针连至K1,P1.0P1.7扦针连至L1L8,运行程序,K1拨动一次,注意观察L1L8发光二极管点亮变化情况。 四、实验报告要求1、列出各实验程序清单。2、实验报告格式参照实验报告说明。,五、实验思考与总结1、对于P1口亮灯实验,如何修改程序,使发光二极管闪亮时间改变以及使发光二极管闪亮移位方向改变。2、
22、对于P1口转弯灯实验,如何使用单步方式调试本程序 (提示:如何修改延时子程序)。3、对于P3口输入,P1口输出实验,如何修改程序,使发光二极管以左移方式点亮。4、总结本实验用到的知识点。,六、实验参考程序1、P1口灯亮实验ORG 0790HSE18: MOV P1, #0FFH; 送P1口LO34: MOV A, #0FEH; L1发光二极管点亮LO33: MOV P1, A;LCALL SE19; 延时RL A; 左移位SJMP LO33; 循环,ORG 07A0HSE19:MOV R6, #0A0H; 延时LO36:MOV R7, #0FFH;LO35:DJNZ R7, LO35;DJNZ
23、 R6, LO36; RETEND,2、P1口转弯灯实验ORG 0C30HPX00: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.
24、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 0
25、1H; 清标志位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; 022
26、3:D002 POP 02H; 0225:DAEC DJNZ R2, DELY; 0227:22 RET,3、P3口输入,P1口输出实验ORG 0810HJ100: MOV A, #00HJ101: 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; 加1PUSH ACC;CPL A; 取反MOV P1, A; 驱动发光二极管POP ACC;AJMP J101; 循环,ORG
27、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的接口设
28、计方法。 2、熟悉8255芯片初始化程序的设计方法。 3、掌握Proteus软件与Keil软件的使用方法。,二、设计要求1、利用8255的PA,PB,PC口分别输出方波,用万用表或示波器进行测量,记录每个口线的电平变化,也可利用发光二极管来观察。2、利用8255 PA口作开关量输入口,PB口作开关量输出口,拨动开关控制相应发光二极管亮灭。3、利用8255做输出口,控制十二个发光二极管的亮灭,模拟交通灯管理。要求:执行程序,初始态为四个路口的红灯全亮之后,东西路口的绿灯 亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后,东西路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,东西路口红灯亮,而同时
29、南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,之后重复以上过程。,三、设计提示1、利用Proteus软件绘制电路原理图;2、利用Keil软件编制并调试好实验程序;3、在Proteus上仿真实验结果 。 四、实验报告要求1、列出实验程序清单;2、实验报告格式参照实验报告说明。 五、实验思考与总结1、总结本实验用到的知识点。,多分支及数据排序,一、实验目的1、进一步掌握MCS-51系列单片机汇编语言程序设计的方法。2、学会编写多分支应用程序、显示、延时程序。3、学会采用冒泡法编写数据排序程序。4、掌握Proteus软件
30、与Keil软件的使用方法 。 二、设计要求1、多分支程序的应用(1)将00H,01H,02H,03H分别送入20H单元中,每次运行程序后,应观察到0,1,2,3从右向左循环移动。,(2)修改程序,再次将00H,01H,02H,03H分次送入20H单元中,每次运行程序后使0,1,2,3从左向右循环移动。(3)修改程序,将00H,01H,02H,03H分次送入20H单元中,每次运行程序后,使4,5,6,7,8从右向左循环移动。2、数据排序(1)将片内RAM 50H5AH单元中的内容分别置为1AH,06H,3DH,4FH,10H,25H,7FH,05H,5BH,19H,60H。(2)运行排序程序,将
31、50H5AH中的十一个无符号数从小到大的次序排列。(3)运行排序程序,将50H5AH中的十一个无符号数从大到小的次序排列。,三、设计提示1、多分支程序流程框图如图所示。(1)向系统输入多分支应用程序。(2)将00H,01H,02H,03H分次送入20H单元中,调试运行程序,观察LED显示器显示结果。(3)修改程序,使0,1,2,3从左向右循环移动,重新运行,注意观察LED显示器显示结果。(4)修改程序,使4,5,6,7,8从右向左循环移动,重新运行,注意观察LED显示器显示结果。2、数据排序程序流程框图如图所示。(1)向系统输入数据排序程序。(2)将给定的十一个无符号数依次置入50H5AH单元
32、之中。,(3)调试运行程序,记录50H5AH单元的内容。(4)修改程序,使数据按从大到小的次序排列。(5)重新运行程序,记录50H5AH单元的内容。 四、实验报告要求1、列出实验程序清单。2、将每次程序的运行结果与理论分析结果相比较。3、实验报告格式参照实验报告说明。 五、实验思考与总结1、分析程序,如果要求改变字符显示的速度,应如何修改程序。2、分析程序,如果要求显示字符从LED显示器上任一位置开始显示,如何修改程序。,3、分析程序,如果要求对MCS-51系列单片机外部RAM单元中的11个字节数据排序,应如何编写程序。4、总结本实验用到的知识点。,六、实验参考程序1、多分支程序ORG OA1
33、0H 0A10:E520 MEMS: MOV A, 20H 0A12:900A17 MOV DPTR,#KKKK; 散转首址 0A15:23 RL A; (20)*2 0A16:73 JMP A+DPTR; 转到(20)*2+DPTR 0A17:411F KKKK: AJMP MEMSP0; 0A19:4125 AJMP MEMSP1; 0A1B:412B AJMP MEMSP2; 0A1D:8012 SJMP MEMSP3;,0A1F:7520C0 MEMSP0: MOV 20H, #0C0H; 0字循环 0A22:020DA0 LJMP SOX0; 0A25:7520F9 MEMSP1:
34、MOV 20H, #0F9H; 1字循环 0A28:020DA0 LJMP SOX0; 0A2B:7520A4 MEMSP2: MOV 20H, #0A4H; 2字循环 0A2E:020DA0 LJMP SOX0; 0A31:7520B0 MEMSP3: MOV 20H, #0B0H; 3字循环 0A34:020DA0 LJMP SOX0;,ORG 0DA0H 0DA0:E520 SOX0: MOV A, 20H; 显示程序 0DA2:78DC MOV R0, #0DCH; 0DA4:79DD MOV R1, #0DDH; 0DA6:F2 MOVX R0, A; 0DA7:7401 MOV A
35、, #01H; 0DA9:F3 SOX1: MOVX R1, A; 0DAA:7A20 MOV R2, #2OH; 0DAC:120213 LCALL DELY; 0DAF:23 RL A; 0DB0:8OF7 SJMP SOX1;,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
36、; 0221:DAF2 DJNZ R2, DEL2; 0223:D002 POP 02H; 0225:DAEC DJNZ R2, DELY; 0227:22 RET,2、数据排序程序 ORG O9BOH 09BO:7B50 QUE:MOV R3, #50H; 09B2:EB QUE1:MOV A, R3; 09B3:F8 MOV R0, A; 09B4:7F0A MOV R7, #0AH;长度送R7 09B6:C2OO CLR OOH; 标志位为0 09B8:E6 MOV A, R0; 09B9:08 QL2:INC R0; 09BA:FA MOV R2, A; 09BB:C3 CLR C;
37、09BC:8622 MOV 22H, R0; 09BE:B52201 CJNE A, 22H, QL3; 相等吗? 09C1:D3 SETB C;,09C2:EA QL3: MOV A, R2; 09C3:4006 JC QL1; 大于交换位置 09C5:D200 SETB 00H; 09C7:C6 XCH A, R0; 09C8:18 DEC R0; 09C9:C6 XCH A, R0; 09CA:08 INC R0; 大于交换位置 09CB:E6 QL1:MOV A, R0; 09CC:DFEB DJNZ R7, QL2; O9CE:2000E1 JB OOH,QUE1;一次循环中有交换待续 O9D1:80FE SJMP ; 无变换退出END,