51单片机和STM32程序设计与仿真(点亮LED灯)

1.Proteus使用教程并仿真51程序——LED流水灯

1.1安装Proteus仿真软件

(1)将下载后的安装包解压缩,打开 Proteus 8.9 SP2 Pro 应用程序。
在这里插入图片描述

(2)这里选择合适的安装路经进行安装,点击Next
在这里插入图片描述
(3)点击Next > 进行安装
在这里插入图片描述
这样就安装完成了

在这里插入图片描述
汉化完成后打开软件
在这里插入图片描述

1.2创建一个51单片机的仿真模拟工程

1)有两个方法可以新建工程,如下图所示。
在这里插入图片描述

2)自定义工程名、保存路径,勾选 New Project ,再点击 Next 。
在这里插入图片描述
(3)创建原理图(如果不需要创建原理图,可以勾选 Do not create a schematic),然后默认选择 DEFAULT ,再点击 Next
在这里插入图片描述
(4)创建 PCB(如果不需要创建PCB,可以勾选Do not create a PCB layout),默认选择 DEFAULT ,再点击 Next
在这里插入图片描述(4)连续点击 下一步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述(5)勾选 创建固建项目 ,选择芯片 AT89C51 ,再点击 下一步。
在这里插入图片描述(6)点击 完成 ,工程创建完毕。
在这里插入图片描述
工程创建完成之后,在固件库搜索AT89C51 芯片放置于原理图中
在这里插入图片描述接下来我们放置LED灯,在右侧的固件库中搜索 LED-YELLOW,点击选中LED灯,顺时针旋转元件,将8个LED灯摆放成如下图的模样,放置电阻,将电阻值从10k改为300,以便等可以亮起来,接下来链接管脚,电源
在这里插入图片描述
一个51单片机的流水灯原理图就创建好了

1.3 编写程序

(1)编写51程序需要使用到Keil C51来编写程序,需要先下载Keil软件,有关Keil软件下载,请参考:https://blog.csdn.net/ssj925319/article/details/108919862
下载完Keil软件后,需要添加C51的pack,下载链接如下:
链接:https://pan.baidu.com/s/1eu03YgLM83IJ2d5FrRheOA
提取码:eela
下载完成后,解压缩,并点击安装,安装完成后,Keil 软件就自动添加了 C51 的pack。

(2)接下来我们打开keil软件,创建一个新的工程
在这里插入图片描述
选择合适的文件夹存放工程文件

在这里插入图片描述
进入下面界面,下拉选择第二个
在这里插入图片描述接下来在搜索框中输入搜索选中AT89C51芯片
在这里插入图片描述点击ok,完成工程的创建
接下来我们新建一个main.c文件
在这里插入图片描述复制以下代码


```c

	#include <reg51.h>
	#include <intrins.h>
	//????
	void delay_ms(int a)
	{
		int i,j;
		for(i=0;i<a;i++)
		{
			for(j=0;j<1000;j++) _nop_();
	
		}
	}
	
	void main(void)
	{
		while(1)
		{
			P0=0xfe;
			delay_ms(50);
			P0=0xfd;
			delay_ms(50);
			P0=0xfb;
			delay_ms(50);
			P0=0xf7;
			delay_ms(50);
			P0=0xef;
			delay_ms(50);
			P0=0xdf;
			delay_ms(50);
			P0=0xbf;
			delay_ms(50);
			P0=0x7f;
			delay_ms(50);
		}
	}


将文件保存为main.c文件(一定要加.c后缀,不然就不是C文件了),再点击保存。
在这里插入图片描述
接下来生成.hex文件
点击魔术棒,勾选Create HEX file 选项
在这里插入图片描述
点击Group1选择添加新项目,将我们刚刚编写的main.c文件导入

在这里插入图片描述
接下来点击编译,main.c文件下自动生成两个文件
在这里插入图片描述

1.4 开始仿真

(1)回到Proteus软件的原理图内,双击 AT89C51 芯片后,在弹出的窗口的 Program File 一栏从刚才 keil 软件编译后的路径中添加 .hex 文件,再点击 OK 。
在这里插入图片描述

2.使用keil5 MDK 通过寄存器方式点亮STM32LED灯

2.1 安装keil5 MDK

一,下载安装包
上KEIL官网下载,如下图点击“Downloads”即可;
在这里插入图片描述二、打开安装包
打开资源包的“mdk528a.exe”,开始安装;
在这里插入图片描述
三,下载过程

    按图的顺序一步一步往下点击,点击"Next";

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
取消勾选"Show Release Notes.“,点击"Finish”;
在这里插入图片描述
直接关闭所有窗口

进行在线安装各种pack
在这里插入图片描述

2.2 创建一个stm32工程并开始编码

1、新建工程
(1)打开 Keil uVision5 ,并新建一个工程。
在这里插入图片描述在这里插入图片描述
(2)在左侧的窗口内选择STM32芯片,这里我们选择STM32F103RB,并保存。
在这里插入图片描述
(3)勾选相应的选项,并点击OK,这样工程创建完毕。

工程创建完成之后进入以下界面
在这里插入图片描述

2.3查找手册配置寄存器

接下来我们需要去stm32的手册查找寄存器的地址等信息
在这里插入图片描述
我们可以看到,要点亮PC13口的LED灯,我们需要配置总线AHB的使能时钟
要配置AHB的时钟,我们需要找到AHB的起始地址
在这里插入图片描述左边是起始地址,右边是终止地址
然后我们找APB2外设使能时钟寄存器的偏移地址,复制偏移地址,加上面AHB的寄存器时钟地址,得到0x40021018,这个地址,然后我们配置CPIOC的使能时钟,先把刚才的地址置“1”后进行位操作(移动4位),就可以得到时钟C的地址,然后我们通过强制转化将其转化为指针类型,在进行取地址的操作
在这里插入图片描述
接下来和上面一样,我们找到GPIOC13口的起始地址
在这里插入图片描述
接下来我们配置GPIOC13口
因为我们配置的是GPIOC13口是高配置,查找手册
在这里插入图片描述
所以要选择GPIOP以10MHz推免输出,即0x0010,再位操作20位,及以下代码

(unsigned int *) 0x40011004 I= 0x0l << 20 ;

接下来我们配置GPIOC13的低电平
查找手册

在这里插入图片描述通过上述手册我们可以看到偏移地址是0ch,即端口输出数据寄存器地址为 0x4001 1000+0ch=0x4001 100c
得到以上信息我们可以得到如下代码

(unsigned int *) 0x4001100c &=~ (0x0l < <13);

2.4编译烧录代码并查看结果

查找完我们需要的信息之后我们可以得到如下三行代码
在这里插入图片描述
因为没有接入硬件设施,所以只能先进行程序的编译和仿真测试,而没有办法下载到硬件上运行,这个LED灯闪烁的代码不用深入了解,因为我也是初学者慢慢学习的路上

3.嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作有哪些相同与差别?

嵌入式C程序代码对内存(RAM)中的各变量的修改操作和对外部设备(寄存器)的操作有以下几个相同点和不同点:

相同点:

1.都需要通过代码进行控制:在C语言中,无论是修改内存中的变量还是操作外部设备,都需要通过相应的代码来完成。

不同点:

1.操作对象不同:内存中的变量是抽象的数据,而外部设备是物理硬件组件。

2.数据处理方式不同:内存中的变量操作主要通过读写数据来进行,而外部设备的操作可能需要考虑更多的细节。

3.访问速度不同:内存的访问速度通常比外部设备要快得多。对内存中的变量进行读写操作可以在微秒级别完成,而对外部设备的操作可能需要毫秒甚至秒级别的时间。

4.错误处理方式不同:当内存中的变量出现错误时,通常可以通过异常处理或者错误码等方式进行处理。而外部设备操作如果出现错误,可能需要通过硬件复位、断电等方式进行处理。

在实际的嵌入式开发中,需要根据具体的需求和硬件环境来选择合适的操作方式。

4.为什么51单片机的LED点灯编程要比STM32的简单?

51单片机的LED点灯编程相对于STM32来说更简单,主要有以下几个原因:

1.硬件差异:51单片机和STM32具有不同的硬件结构和接口,STM32具有更多的外设和接口,因此编程时需要考虑更多的细节和特性和差异。
2.软件差异:51单片机通常使用汇编语言或C语言进行编程,而STM32则支持更多的编程语言,例如C、C++和Python等。不同的编程语言具有不同的语法和特性,因此需要根据具体情况选择合适的编程语言。
3.开发环境差异:51单片机和STM32的开发环境也有所不同。STM32的开发环境通常更加复杂,需要更多的设置和配置,而51单片机的开发环境则相对简单。
4.程序设计差异:由于51单片机的硬件结构相对简单,因此程序设计相对简单,而STM32的硬件结构复杂,程序设计需要更多的考虑和技巧。

总之,51单片机的LED点灯编程相对于STM32来说更简单,主要是因为其硬件和软件相对简单,开发环境也更加友好。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值