51单片机架构及汇编指令
一、Proteus简介
1、创建工程
(1)创建一个新工程。
![image-20240309155756524](https://i-blog.csdnimg.cn/blog_migrate/050511e372c1f025084d3d9b9bf157d1.png)
(2)自定义工程名、工程存储路径
![image-20240309155903584](https://i-blog.csdnimg.cn/blog_migrate/fa828cf28eb42ba6e52fd1bca11ec1a0.png)
(3)创建原理图(如果不需要创建原理图,可以勾选 Do not create a schematic),然后默认选择 DEFAULT ,再点击 Next 。
![image-20240309160051067](https://i-blog.csdnimg.cn/blog_migrate/26107b0dc1cfc10d5285e7990b2b163f.png)
(4)创建 PCB(如果不需要创建PCB,可以勾选Do not create a PCB layout),默认选择 DEFAULT ,再点击 Next
![image-20240309160134488](https://i-blog.csdnimg.cn/blog_migrate/d8383901c480c718a07e3a78fab6e475.png)
(5)连续点击“下一步”,勾选创建固件项目,选择芯片AT89C51,再点击下一步。
![image-20240309160227157](https://i-blog.csdnimg.cn/blog_migrate/fcf7d6787e5657c7bdd987c96453c239.png)
(6)点击Finish工程创建完毕。
![image-20240309160448071](https://i-blog.csdnimg.cn/blog_migrate/05aa03f74d89cd7df412c07d15185ac4.png)
2、界面简介
原理图设计界面,主要是包含预览窗口、方向工具栏、元件列表、模型选择工具栏、仿真测试按钮、原理图编辑窗口。
![image-20240309161000639](https://i-blog.csdnimg.cn/blog_migrate/8b9fbb7c937f472a628f9f54e754c002.png)
模型选择工具栏:
![image-20240309161341494](https://i-blog.csdnimg.cn/blog_migrate/d4f689036a7be3b98bed1880a09a1bdd.png)
![image-20240309161605433](https://i-blog.csdnimg.cn/blog_migrate/5c2b4fdd8aaed4973388380f1bf77011.png)
3、绘制流水灯原理图
**设计原理:**查阅资料AT89C51单片机上电I/O口为高电平,因此将8个LED灯的阳极接在其I/O口上,LED另一端接地,从原理上该8个LED灯均可点亮。从实际出发为电路加上限流电阻,防止电流过大损坏LED灯。
原理图:
![image-20240309162309064](https://i-blog.csdnimg.cn/blog_migrate/236aeb2f29d05e91a53619660298f7ee.png)
二、Keil C51程序设计
进行程序设计的过程中需要用到Keil C51来编写程序。
1、创建工程
(1)打开Keil软件,点击 Project → New uVision Project …
![image-20240309162802634](https://i-blog.csdnimg.cn/blog_migrate/99c960bbbd3f4032ececc3c026f1d146.png)
(2)给新建的工程命名。
![image-20240309163012208](https://i-blog.csdnimg.cn/blog_migrate/256d1de14dff559c6fd239229226b526.png)
(3)在搜索框内输入 AT89C51 ,再选中 AT89C51 芯片,然后点击 OK
![image-20240309163110131](https://i-blog.csdnimg.cn/blog_migrate/83cc283dc6dfbac52caab56d31cb6c42.png)
(4)意思为复制A51启动代码到项目并添加文件到项目。这里我选择否。
![image-20240309163132975](https://i-blog.csdnimg.cn/blog_migrate/1e19477f22a4efb0388916c2d8f37573.png)
(5)添加一个新的文件(.c/.cpp/.asm等等)
![image-20240309163619218](https://i-blog.csdnimg.cn/blog_migrate/fc04e5422d0f767519667ca043884d24.png)
![image-20240309163903147](https://i-blog.csdnimg.cn/blog_migrate/3ac9d6ed368a5d5dbb2295b9e35c8fe8.png)
(6)编写代码
![image-20240309164010184](https://i-blog.csdnimg.cn/blog_migrate/2a5e1fab9b966105aae56e9315a1bc7a.png)
2、C语言仿真点亮流水灯
(1)用C语言编写流水灯代码
#include <REGX51.H>
//延时函数
void Delay(unsigned char xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{i = 2;
j = 239;
do
{while (--j);}
while (--i);
}
}
void main()
{
while(1)
{
P2=0x01; //0000 0001
Delay(100);
P2=0x02;
Delay(100);
P2=0x04;
Delay(100);
P2=0x08;
Delay(100);
P2=0x10;
Delay(100);
P2=0x20;
Delay(100);
P2=0x40;
Delay(100);
P2=0x80;
Delay(100);
}
}
(2)保存所写代码,点击魔法棒,在弹出的窗口中选择Output,再勾选Creat HEX File,然后点击OK,最后点击编译。
3、汇编语言仿真点亮一个LED灯
ORG 0000h
LJMP MAIN
ORG 0100H
MAIN:
MOV A,#20H
MOV P2,A
LOOP:
LJMP LOOP
END
![image-20240309170726089](https://i-blog.csdnimg.cn/blog_migrate/ea4351b7d1baaeb36b59df061ae98e6e.png)
4、汇编语言仿真点亮流水灯
代码如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV A,#80H
LOOP:
MOV P2,A
LCALL DELAY
RR A
LJMP LOOP
DELAY:
MOV R2,#255
D1:MOV R3,#250
D2:DJNZ R3,D2
DJNZ R2,D1
RET
END
编译生成HEX文件步骤照上述C语言过程。
三、Proteus加载.HEX文件进行仿真
(1)上述程序代码编写完毕,编译生成.HEX文件后,返回到Proteus软件中给芯片加载程序进行仿真
(2)加载程序结束后,点击仿真调试。
四、仿真结果
- C语言流水灯仿真结果(从低位开始点亮)
- 汇编语言点亮一个LED(第六个LED亮)
![image-20240309170746114](https://i-blog.csdnimg.cn/blog_migrate/95f7fdda5d3c646223eab1835ab9ea30.png)
- 汇编语言流水灯仿真结果(从高位开始点亮)
五、总结
通过本次仿真实验,前期查阅有关8051单片机的相关资料,基本了解单片机的工作原理,在设计的过程中使用同一个原理图编写不同的代码,采用C与汇编语言两种方式,分别由低位和高位进行流水灯点亮,更深刻的理解了点亮流水灯的原理。通过此次实验,让我对单片机的兴趣大大提升,我坚信一定能学好并熟练掌握这门技术。