实验二P1口控制LED发光二极管

  • 格式:doc
  • 大小:277.50 KB
  • 文档页数:18

1 实验二 P1口控制LED发光二极管

一、实验目的

1、进一步熟练Proteus及Keil软件的基本操作

2、掌握8051单片机P1口的使用方法

3、掌握LED发光二极管的原理及使用方法

4、学习汇编程序的调试及仿真方法

二、实验电路

XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52X1CRYSTAL12MHzC133pFC233pFD1D2D3D4D5D6D7R1220R2220R3220R4220R5220R6220R7220R8220C322uFR91k+5VD8

三、实验内容及步骤:

要求:8个LED发光二极管循环左移显示(发光的移位),间隔时间为一秒。

1、使用Proteus画出电路原理图

2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件

3、进行Protues与Keil uVision联动的相关设置:

4、在Proteus中仿真运行。

四、思考

1、 将本实验的实验现象改为“不发光二极管循环移位”。

2、 将本实验的实验现象改为“每隔0.5秒发光二极管循环移位”。

2 参考程序:

ORG 0

LJMP MAIN

ORG 30H

MAIN: MOV A,#0FEH

LOOP: MOV P1,A

LCALL DELAY

RL A

SJMP LOOP

DELAY: MOV R7,#20H

DELAY1:MOV R6,#200

DELAY2:MOV R5,#123

DJNZ R5,$

DJNZ R6,DELAY2

DJNZ R7,DELAY1

RET

END

3 实验三 数码管静态显示实验

一、实验目的

1、进一步熟悉51系列单片机

2、了解8051单片机P0口的使用方法

3、掌握共阴极数码管的原理及使用方法

4、学习8051的编程、调试、编译、仿真。

二、实验电路

XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C130PFC230PFC310uFX1CRYSTALFREQ=12MHzR110kR3220R4220.R5220R6220R7220R8220R9220

图3 数码管静态显示电路原理图

注:数码管要从元件库选择Optoelectronics类中的7SEG-COM-CAT-GRN。

三、要求及步骤:

要求:在七段数码管上以递增方式循环显示数字0—9,间隔时间为一秒。

1、使用Proteus画出电路原理图

2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件

3、进行Protues与Keil uVision联动的相关设置:

4、在Proteus中仿真运行。

四、思考

1、为什么要将P0口各引脚通过电阻R3-R9接到电源?

2、如何在共阴数码管上循环显示十六进制数字0—F(不区分字母的大小写 )?

3、怎样修改程序使数字以递减方式循环显示?

4、若用共阳极数码管应如何修改电路和程序,才能完成本实验的功能?

4

参考程序:

ORG 00H

LJMP START

ORG 30H

START: MOV DPTR,#TABLE

S1: MOV R4,#00H

S2: MOV A,R4

MOVC A,@A+DPTR

MOV P0,A

LCALL DELAY

INC R4

CJNE R4,#0AH,S2

SJMP S1

DELAY: MOV R5,#20 ;延时子程序

D2: MOV R6,#200

D1: MOV R7,#123

DJNZ R7,$

DJNZ R6,D1

DJNZ R5,D2

RET

TABLE: DB 3FH,06H,5BH,4FH,66H ;段码表

DB 6DH,7DH,07H,7FH,6FH

END

5

实验四 基本输入/输出实验

一、实验目的

1、进一步熟悉8051单片机并行I/O口的使用方法

3、掌握并行I/O口输入/输出操作的方法

4、学习8051的编程、调试、编译、仿真。

二、实验电路

XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51C130PFC230PFC310uFX1CRYSTALFREQ=12MHzR110kR3220R4220.R5220R6220R7220R8220R9220

图4 并行I/O口基本输入/输出

注:按钮要从元件库选择Switches & Relays类中的BUTTON。

三、要求及步骤:

要求:在按钮动作的控制下,将十六进制数字0-F循环显示在数码管上(每按一次按钮,显示的数字加1)。

1、使用Proteus画出电路原理图

2、在Keil uVision中完成程序编辑、调试及编译,生成.HEX文件

3、进行Protues与Keil uVision联动的相关设置:

4、在Proteus中仿真运行。

四、思考

1、如何检测按钮是否按下?

2、怎样修改程序,可以使数字0-F在按钮控制下,以递减方式循环显示?

3、若在P0口接8个LED,如何实现每按一次按钮,点亮的LED左移一位(8个LED中只有一个点亮)?

6

参考程序:

ORG 00H

LJMP START

ORG 30H

START: MOV P1,#01H

MOV DPTR,#TABLE

MOV R4,#00H

CLR A

MOVC A,@A+DPTR

MOV P0,A

LOOP: MOV A,P1

ANL A,#01H

JZ LOOP

LOOP1: MOV A,P1

ANL A,#01H

JNZ LOOP1

INC R4

MOV A,R4

ANL A,#0FH

MOVC A,@A+DPTR

MOV P0,A

SJMP LOOP

TABLE: DB 3FH,06H,5BH,4FH,66H ;段码表

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H,71H,76H

END

7 实验五 数据传送指令练习

一、实验目的

1、进一步掌握Keil软件的使用。

2、熟悉数据传送指令功能及使用。

二、实验内容

1、输入数据传送指令并单步执行输入的指令;

2、练习数据传送指令的基本应用。

三、实验步骤

1、数据传送指令的功能

1)输入如下程序:

ORG 0030H

MOV A,#0BBH

MOV DPTR,#0070H

MOVX @DPTR,A

MOV R0,#70H

MOV @R0,A

MOV A,#0CCH

XCHD A,@R0

SJMP $

END

2)观察DPTR、A、R0、内部RAM70H和外部RAM70H单元中内容并填入表中第一空行。

3)单步执行完上述程序,重新观察上述寄存器和存储单元中内容并填入表中第二空行。

表1 程序执行前后有关寄存器和RAM单元内容对照表

程序执行 DPTR A R0 70H

内RAM 70H

外RAM

4)分析程序运行结果,并把分析结果和运行结果进行比较。

2、PUSH指令对堆栈的影响

1)输入如下程序:

ORG 0040H

MOV A,#0AAH

MOV PSW,#0CCH

PUSH ACC

PUSH PSW

SJMP $

END

2)观察A、PSW、SP、07H、08H和09H单元中内容,并填入表表。

表2 PUSH指令对堆栈的影响

程序执行 A PSW SP 堆栈区

07H 08H 09H