嵌入式系统第二次作业 STM32/51单片机编程

一. 安装并熟悉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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值