51单片机架构及汇编指令
一、Proteus简介
1、创建工程
(1)创建一个新工程。
(2)自定义工程名、工程存储路径
(3)创建原理图(如果不需要创建原理图,可以勾选 Do not create a schematic),然后默认选择 DEFAULT ,再点击 Next 。
(4)创建 PCB(如果不需要创建PCB,可以勾选Do not create a PCB layout),默认选择 DEFAULT ,再点击 Next
(5)连续点击“下一步”,勾选创建固件项目,选择芯片AT89C51,再点击下一步。
(6)点击Finish工程创建完毕。
2、界面简介
原理图设计界面,主要是包含预览窗口、方向工具栏、元件列表、模型选择工具栏、仿真测试按钮、原理图编辑窗口。
模型选择工具栏:
3、绘制流水灯原理图
**设计原理:**查阅资料AT89C51单片机上电I/O口为高电平,因此将8个LED灯的阳极接在其I/O口上,LED另一端接地,从原理上该8个LED灯均可点亮。从实际出发为电路加上限流电阻,防止电流过大损坏LED灯。
原理图:
二、Keil C51程序设计
进行程序设计的过程中需要用到Keil C51来编写程序。
1、创建工程
(1)打开Keil软件,点击 Project → New uVision Project …
(2)给新建的工程命名。
(3)在搜索框内输入 AT89C51 ,再选中 AT89C51 芯片,然后点击 OK
(4)意思为复制A51启动代码到项目并添加文件到项目。这里我选择否。
(5)添加一个新的文件(.c/.cpp/.asm等等)
(6)编写代码
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
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亮)
- 汇编语言流水灯仿真结果(从高位开始点亮)
五、总结
通过本次仿真实验,前期查阅有关8051单片机的相关资料,基本了解单片机的工作原理,在设计的过程中使用同一个原理图编写不同的代码,采用C与汇编语言两种方式,分别由低位和高位进行流水灯点亮,更深刻的理解了点亮流水灯的原理。通过此次实验,让我对单片机的兴趣大大提升,我坚信一定能学好并熟练掌握这门技术。