单片机并行IO口的应用实验.docx
《单片机并行IO口的应用实验.docx》由会员分享,可在线阅读,更多相关《单片机并行IO口的应用实验.docx(10页珍藏版)》请在冰豆网上搜索。
![单片机并行IO口的应用实验.docx](https://file1.bdocx.com/fileroot1/2022-11/27/29d24fa4-7861-46c5-ac0d-39e4d3396eb0/29d24fa4-7861-46c5-ac0d-39e4d3396eb01.gif)
单片机并行IO口的应用实验
单片机并行IO口的应用实验
1、实验目的
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、编写程序:
要求在灯移动的同时,蜂鸣器逐位报警。
三、实验程序流程框图和程序清单
延时程序流程框图:
实验程序流程框图:
汇编程序:
ORG0000H
MOVA,#11111110B
MOVP3,#0FFH
MAIN:
MOVR0,#07H
LOOP1:
LCALLDELAY
MOVP3,A
RLA
CLRP2.0
LCALLDELAY
SETBP2.0
DJNZR0,LOOP1
MOVR0,#07H
LOOP2:
LCALLDELAY
MOVP3,A
RRA
CLRP2.0
LCALLDELAY
SETBP2.0
DJNZR0,LOOP2
LJMPMAIN
DELAY:
MOVR7,#17H
DL1:
MOVR6,#98H
DL0:
MOVR5,#46H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
RET
END
C语言程序:
#include
#include
unsignedchartemp;
inti;
voiddelay(void);
sbitspeaker=P2^0;
voidmain()
{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;
}
}
}
voiddelay(void)
{
unsignedchara,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型的文件的有了新的认识和应用
7、思考题
1、编程实现LED0至LED7以十六进制计数规律亮灯?
程序设计流程框图如下:
汇编实验程序:
ORG0000H
MAIN:
MOVP3,#256
MOVA,#0FFH
LOOP:
MOVP3,A
CLRP2.0
LCALLDELAY
SETBP2.0
LCALLDELAY
DECA
LJMPLOOP
DELAY:
MOVR7,#17H
DL1:
MOVR6,#98H
DL0:
MOVR5,#46H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
RET
END
C语言程序:
#include
#include
unsignedchartemp;
inti;
voiddelay(void);
sbitspeaker=P3^1;
voidmain()
{P3=0X00;
temp=0xFF;
while
(1)
{
for(i=0;i<0XFF;i++)
{speaker=0x00;
delay();
speaker=0x01;
P3=temp;
temp=temp-1;
}
}
}
voiddelay(void)
{
unsignedchara,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.