proteus下控制LED灯
- 格式:doc
- 大小:118.00 KB
- 文档页数:7
实验课程: 单片机原理及应用
一、 实验目的
学习汇编語言指令系统的编程与调试方法
二、 实验内容
1、参照教材图A.21完成实验二电路原理图的绘制;
2、根据图A.22的程序流程图编写汇编语言程序;
3、利用ISIS的汇编工具查找并修正程序的语法错误和逻辑错误;
4、观察仿真结果,完成实验报告。
三、 实验要求
提交的实验报告中应包括:1、完成的电路图(含绘图过程简述);2、编写
的汇编源程序(含程序简要说明);3、使用的程序调试方法;4、实现的仿真效
果(含运行截图与文字说明);5、实验小结(结论与体会)。
提交实验报告主题及存盘文件名格式(学号+姓名+实验**),例如:
2011041220张三实验一。
1、电路原理图
图1
如图1所示,从左往右、从上往下看,如图,
这是由晶体振荡器和电容组构成的并联谐振回路,产生单片机的时钟
信号。如图,当单片机出现死机时,可以利用它来复位。这
种叫上电复位,产生复位的条件为:在高电平状态下,时间等于系统
时钟振荡周期建立时间和两个机器周期时间(一般小于10ms)。如图
,这是80c51芯片共有40个引脚,4只电源及
晶振引脚—Vcc,Vss,XTAL1,XTAL2。4只控制引脚—(PSEN)[注:用
“()”括着的为低电平有效,下同],ALE,(EA),RST 。32只并行I/O
引脚—P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7。如图
,这是外部Rom允许访问/编程电源输入,当连接高
电平时,cpu从片内rom读指令。如图和
,连接它们用于在80c51的控制
下,实现相应功能,这里是使led灯闪烁,并使开关能控制。
2、汇编源程序
mov R5,#3
lOOP1:MOV P2,#0
ACALL DELAY
MOV P2,#0FFH
ACALL DELAY
DJNZ R5,LOOP1
LOOP2:MOV P2,P1
SJMP LOOP2
DELAY:MOV R0,#100
DEL0:MOV R1,#50
DEL1:MOV R2,#25
DEL2:DJNZ R2,DEL2
DJNZ R1,DEL1
DJNZ R0,DEL0
RET
END
说明:首先设置循环变量为3(实现灯闪三次),LOOP1为第一
个条件入口。给P2赋值0,然后调用DELAY,给P2赋值#0ffh,再
调用DELAY。以此来实现三次循环。LOOP2为第二个条件入口,实
现最终开关控制灯。DELAY在这里只是用于耗费时间,共0.1秒/单
位。
3、程序调试方法
根据图1及汇编源程序实现8盏led灯先亮三下,然后根据图
控制灯的亮或灭。具体实现如下:
安装proteus软件及keil UV4软件,proteus可用于模拟电路图连
接,UV4可用于编译汇编程序。汇编编译成功后,在proteus描绘的
的80c51芯片中右击属性,选择汇编源程序生成的.hex文件,加载,
确认,运行试试。
4、仿真运行效果
图2
分析:开始会闪烁三下(间隔时间根据自己而定),然后根据开关
控制灯的亮灭。如图2,左下的开关1,4,5,7,8闭合,相应地右下角
1,4,5,7,8亮。
5、实验小结
本次实验了解自己编写程序及了解汇编语言,话说如果不是四处
寻找资料,我还真做不出来。感谢小伙伴和网友的贡献。还有希望老
师下次做实验时给我们讲解详细一点或提供什么资料什么的。我觉得
盲目的搜资料只是浪费时间。但有人又会认为,老师给出资料,那同
学不是不会自己思考吗?我的答案是否定的,没有人第一次就会的,
所以我认为还是有参考资料好。况且如果自己不想思考的话,那些忙
于交作业的人只会搜答案,可想而知百度的强大。还不如你好我好大
家好,给出参考资料。用心做的始终有收获,不用心的始终还是不会
学。
附件:(这是在keil UV下用c语言编的)
#include"REG51.H"
void delay(int num)
{ int i=0,j;
for(;i
}
void my_led1()
{
int i;
P2=0x00;
delay(100);
P2=0xff;
delay(100);
}
void main()
{
int i,j;
for(i=0;i<3;i++)
{
my_led1();
}
while(1)
{
P2=P1;
}
}
附件2(proteus下完整实验图):