一. 安装并熟悉Proteus 电路仿真软件,完成一个C51程序设计和仿真
1.①放置芯片和元件②开始放置元件③画总线和放置电源④连接元件
原理图:
2.程序编写
#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);
}
}
3、仿真试验
4、总结
通过这次试验,让我熟悉了proteus系统的搭建和应用,使得我可以在这次做实验的机会中进一步熟悉运用仿真试验的进程。
二、完成一个stm32的简单的通过寄存器方式,用某一个GPIO端口点亮LED等程序。
1、工程搭建
2、编译程序
编译成功。
3、stm32程序仿真调试
4、总结
这次试验是对硬件设备的编译成果展示,因为没有接入硬件设施,所以只能先进行程序的编译和仿真测试。在这次仿真实验中我学会了stm32 的简单程序的编译,在攻克难题的过程中,我学会了独立思考,也在和同学的互相帮助中了解了共同学习的益处,我相信只要端正学习的态度,在完成作业的途中始终怀有锲而不舍的学习精神,之后的困难也能迎刃而解。
三、深入思考STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤
1)嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器--->对应相关管脚)的操作有哪些相同与差别?
嵌入式C编程是处理器在我们日常生活中遇到的每一个嵌入式系统(如手机、洗衣机和数码相机)中运行的灵魂。每个处理器都与一个嵌入式软件相关联。首先也是最重要的是决定嵌入式系统功能的嵌入式软件。嵌入式C语言是单片机最常用的编程语言。早期许多嵌入式应用程序是使用汇编级编程开发的。但是,它们没有提供可移植性。这种缺点被各种高级语言如C、Pascal和COBOL的出现所克服。然而,正是C语言在嵌入式系统中得到了广泛的接受,而且它还在继续这样做。编写的C代码更加可靠、可伸缩和可移植;而且更容易理解。
语言的显著特点:
C语言是一个用不同的关键字、数据类型、变量、常量等设计的软件。
嵌入式C是一个通用术语,它被赋予一种用C编写的编程语言,它与特定的硬件体系结构相关联。
指令、地址寄存器与数据寄存器类似,里边存放的都是0和1,毕竟单片机也只认识机器码,机器码都是0或1,只是特别的规定下,数据寄存器里面存放的0和1表示数据,指令寄存器里存放的表示指令。
相同点:
1.都需要通过特定的寄存器或变量来进行数据传输和操作。
2.对变量或外设的操作都需要使用特定的指令或库函数。
3.对变量或外设的操作都需要考虑数据的读写顺序和正确性。
差别:
1. 对变量的操作是在内存(RAM)中进行,而对外部设备的操作是通过控制外设对应的寄存器来实现的。
2. 对变量进行的操作通常只涉及到单个变量,而对外部设备的操作可能会同时涉及多个寄存器。
3. 对变量进行的操作速度相对较快,而对外部设备的操作可能会有一定的延迟,需要考虑时序和时钟等问题。
4. 对变量进行的操作不涉及到硬件电路和信号,而对外部设备的操作必须要考虑硬件的特性、电路和信号等问题。
2)为什么51单片机的LED点灯编程要比STM32的简单?
1. 51单片机的指令集更简单,指令执行速度更快,操作寄存器的方式更直接简单,编程更易于上手。
2. 51单片机的资源占用更少,所需要的内存、存储空间和低级硬件资源更少,因此开发者可以更加专注于程序状态的处理,编写更加高效、简洁的代码。
3. 51单片机的开发环境和编程工具更加成熟、稳定、易于操作,编译器、仿真器等工具的使用也更简单方便。
四. 与PC平台上的一般程序不同,嵌入式C程序经常会看见 register和volatile 关键字,请解释这两个变量修饰符的作用,并用C代码示例进行说明。
register:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内存寻址访问以提高效率
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、在多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
volatile:的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。
C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量
寄存器是cpu的存储部件,即是高速缓存,通常不大,最多几mb。定义这个变量适用于频繁使用某个变量,以加快运行速度,因为保存在寄存器中,省去了从内存中调用
val1=x;
val2=x;
如果没有声明volatile,系统在给val2赋值的时候可能直接从寄存器读取x,而不是从内存的初始位置读取。那么在两次赋值之间,x完全有可能被被某些编译器未知的因素更改,如果声明为volatile译器将不使用缓存,而是每次都从内存重新读取x。