- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
proteus下控制LED灯
实验课程: 单片机原理及应用
实验目的
学习汇编語言指令系统的编程与调试方法
实验内容
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语言编的)
#includeREG51.H
void delay(int num)
{ int i=0,j;
for(;inum;i++)
for(j=0;j1000;j++);
}
void my_led1()
{
int i;
P2=0x00;
delay(100);
P2=0xff;
delay(100);
}
void main()
{
int i,j;
for(i=0;i3;i++)
{
my_led1();
}
while(1)
{
P2=P1;
}
}
附件2(proteus下完整实验图):
文档评论(0)