单片机并行IO口的应用实验

单片机并行IO口的应用实验
单片机并行IO口的应用实验

一、实验目的

1、熟悉Proteus软件和Keil软件的使用方法。

2、熟悉单片机应用电路的设计方法。

3、掌握单片机并行I/O口的直接应用方法。

4、掌握单片机应用程序的设计和调试方法。

二、设计要求

1、用Proteus软件画出电路原理图。要求在P1.0至P1.7口线上分别接LED0至LED7八个发光二极管,在P3.0口线上接一蜂鸣器。

2、编写程序:要求LED0至LED7以秒速率循环右移。

3、编写程序:要求LED0至LED7以秒速率循环左移。

4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。

三、实验程序流程框图和程序清单

延时程序流程框图:

实验程序流程框图:

汇编程序:

ORG 0000H

MOV A, #11111110B

MOV P3, #0FFH MAIN : MOV R0, #07H LOOP1: LCALL DELAY

MOV P3, A

RL A

CLR P2.0

LCALL DELAY

SETB P2.0

DJNZ R0, LOOP1

MOV R0, #07H LOOP2: LCALL DELAY

MOV P3, A

RR A

CLR P2.0

LCALL DELAY

SETB P2.0

DJNZ R0, LOOP2

LJMP MAIN

_ DELAY: MOV R7, #17H

DL1: MOV R6, #98H

DL0: MOV R5, #46H

DJNZ R5, $

DJNZ R6, DL0

DJNZ R7, DL1

RET

END

C语言程序:

#include

#include

unsigned char temp;

int i;

void delay(void);

sbit speaker=P2^0;

void main()

{ temp=0xfe;

P3=temp;

while(1)

{

for(i=0;i<7;i++)

{

temp=_crol_(temp,1);

speaker=0;

delay();

speaker=1;

delay();

P3=temp;

}

for(i=0;i<7;i++)

{

speaker=0;

temp=_cror_(temp,1);

delay();

speaker=1;

delay();

P3=temp;

}

}

}

void delay(void)

{

unsigned char a,b,c;

for(c=167;c>0;c--)

for(b=171;b>0;b--)

for(a=16;a>0;a--);

_nop_;

}

四:电路原理图:

五:实验结果

1. 2.

3. 4.

5. 6.

7. 8.

9. 10.

11.12.

13.14.

15.16.

六、实验总结

通过本次实验,我复习了Proteus软件的使用方法,学习了更多的对KEIL的调试方法,对keil和Proteus的使用更加熟悉了,通过用Proteus软件画图,熟悉了单片机电路基本的设计方法,掌握了单片机并行I/O口的直接应用方法,对子程序的调用左移、右移指令可以灵活的运用,同时对keil产生的HEX型的文件的有了新的认识和应用

七、思考题

1、编程实现LED0至LED7以十六进制计数规律亮灯?

程序设计流程框图如下:

_

汇编实验程序:

ORG 0000H

MAIN: MOV P3, #256

MOV A, #0FFH

LOOP: MOV P3, A

CLR P2.0

LCALL DELAY

SETB P2.0

LCALL DELAY

DEC A

LJMP LOOP

DELAY: MOV R7, #17H

DL1: MOV R6, #98H

DL0: MOV R5, #46H

DJNZ R5, $

DJNZ R6, DL0

DJNZ R7, DL1

RET

END

C语言程序:

#include

#include

unsigned char temp;

int i;

void delay(void);

sbit speaker=P3^1;

void main()

{ P3=0X00;

temp=0xFF;

while(1)

{

for(i=0;i<0XFF;i++)

{speaker=0x00;

delay();

speaker=0x01;

P3=temp ;

temp=temp-1;

}

}

}

void delay(void)

{

unsigned char a,b,c;

for(c=167;c>0;c--)

for(b=171;b>0;b--)

for(a=16;a>0;a--);

_nop_;

}

_ 结果如下图所示:

1. 2.

3. 4.

5. 6.

7.8.

9.10.

11.12.

相关主题
相关文档
最新文档