【Proteus8软件仿真】使用AT89C51单片机的外部引脚,点亮1个LED灯(采用汇编指令完成);采用多个LED,设计一个LED流水灯电路,分别用51汇编语言和C语言编程,实现流水灯正常工作
一、点亮一个LED灯(汇编)
1、在proteus中进行元器件的摆放,电路图如下:
其中在选择LED灯和固定电阻时,选择左边竖行中的元件模式:
然后在Pick Devices中分别搜索“LED”和“RES”:
接地标识则选择终端模式,GROUND(GND)就是接地符号:
2、在keil软件中使用汇编语言写出代码,步骤如下:
(1)首先,在主页面创建新项目,并给项目取名LED(single):
(2) 然后,在弹出的搜索框内选择AT89C51单片机:
(3)然后点击创建空白文档,将你所设计的汇编代码写上去:
汇编代码如下 :
ORG 0100H
SETB P2.0
SJMP $ ;??????? $???????????
;SJMP $,??????
END
(4)然后点击保存按钮,此处要注意!!因为使用的是汇编语言,不是C文件,所以后缀要加” .asm “!!! 此处我命名为 ” main.asm ” :
(5)右键点击 Source Group 1 ,再选择第三个选项,将你刚刚保存的 main.asm 添加进去:
这里的文件类型先切换成All files,然后文件中才会出现 .asm 后缀文件:
点击Add,就可以看见这个文件在Source Group 1的子目录里了:
(6)点击魔法棒,选择第三个选项Output,将Create HEX File选项勾选:
(7)最后点击编译按钮,这样就生成了 .hex 文件:
3、在protues中进行仿真实验进行验证
(1)首先双击AT89C51芯片,然后点击Program File文件:
将在keil中创建的 .hex 文件添加进去,点击确定:
(2)最后点击左下角调试按钮,进行仿真:
(3) 仿真结果一致:
二、点亮LED流水灯(汇编+C语言)
(在操作步骤上,流水灯与单个灯的步骤一致,因此省略详细的操作步骤,只保留了电路图、代码和仿真结果)
电路图如下:
1、C语言
代码如下:
//51单片机编程常用的头文件
#include
#include
//延迟函数
void delay_ms(int a)
{
int i,j;
for(i=0;i
仿真结果如下:
2、汇编语言
代码如下:
org 0H
ljmp start
org 30H
start: mov a, #0feH
mov p0, a
acall delay
mov a, #0fdH
mov p0, a
acall delay
mov a, #0fbH
mov p0, a
acall delay
mov a, #0f7H
mov p0, a
acall delay
mov a, #0efH
mov p0, a
acall delay
mov a, #0dfH
mov p0, a
acall delay
mov a, #0bfH
mov p0, a
acall delay
mov a, #07fH
mov p0, a
acall delay
sjmp start
delay: mov r2, #0ffH
mov r3, #0ffH ;
delay_loop1$:
mov r1, #0ffH
delay_loop2$:
mov r3, #0ffH
nop ;
nop ;
nop ;
djnz r1, delay_loop2$
djnz r2, delay_loop1$
ret
end
仿真结果如下:
三、总结
1、无论是使用汇编语言点亮单个LED灯还是用汇编+C语言点亮流水灯,两次仿真的结果都与预期所想一致
2、通过本次使用keil和Proteus软件对LED灯进行点亮,我基本掌握了两个软件的基本操作用法。知道了怎么用Proteus去创建电路原理图,明白如何用keil去生成 .hex 文件,然后添加到电路图中。两个软件都十分方便,在以后的使用中也能更加熟练的去掌握他们的操作方法。
四、参考资料
1、Proteus使用教程并仿真51程序——LED流水灯_电阻的英语-CSDN博客
2、一个51程序设计和仿真——流水灯-CSDN博客
3、51单片机的汇编语言_汇编语言数据表-CSDN博客
4、单片机实验笔记(汇编、Proteus仿真) | 码农家园 (codenong.com)